summaryrefslogtreecommitdiff
path: root/doc/programming/programmierhandbuch.1
blob: 24f2b03c523ac92c741a10045caf4698876cdea7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
#headandbottom("1","EUMEL-Benutzerhandbuch","TEIL 1 : Einleitung","1")# 
#pagenr("%",1)##setcount(1)##block##pageblock# 
#headeven# 
#center#EUMEL-Benutzerhandbuch 
#center#____________________________________________________________ 
 
#end# 
#headodd# 
#center#TEIL 1 : Einleitung 
#center#____________________________________________________________ 
 
#end# 
#bottomeven# 
#center#____________________________________________________________ 
1 - % #right#GMD 
#end# 
#bottomodd# 
#center#____________________________________________________________ 
GMD #rigth#1 - % 
#end# 
 
TEIL 1 : Einleitung 
 
 
1.1  Allgemeines über EUMEL 
 
Dieses Buch bietet eine Übersicht über die Standardprozeduren des Betriebssystem
EUMEL. Es bietet damit sowohl Hilfestellung für die Benutzung der standardmäßig
vorhandenen Kommandos als auch für die Programmierung, also die Erweiterung
dieses Kommandovorrats. Es ist jedoch kein Lehrbuch der Programmierung! 
 
In den ersten drei Kapiteln dieses Programmierhandbuches werden einige Grund­
begriffe des Systems, die grundlegende Programmiersprache (ELAN) und der
EUMEL-Editor erläutert. 
 
Das vierte Kapitel bietet eine Übersicht über diejenigen Prozeduren und Operatoren,
die eher der 'Job-Control-Language' zugerechnet werden können, also häufig im
Kommandodialog benutzt werden. 
 
Im fünften Teil sind diejenigen Operationen beschrieben, die meistenteils für die
Programmierung benutzt werden. (Compiler, Operationen auf den elementaren Daten­
typen, Dateien, Ein- und Ausgabe usw.). 
 
Diese Trennung ist jedoch recht willkürlich, es ist ja gerade eine der wichtigen Eigen­
schaften dieses Betriebssystems, daß es keine Trennung zwischen der Kommando­
sprache des Betriebssystems und Programmmiersprache für das System gibt. Jedes
Systemkommando ist Aufruf einer ELAN Prozedur, jede neue Prozedur stellt eine
Erweiterung des Kommandovorrats des Systems dar. 
 
Aus Gründen der Übersichtlichkeit der Zusammenstellung ist dieses Buch nicht frei
von Vorwärtsverweisen! 
 
#page# 
 
1.2  Struktur des Betriebssystems EUMEL  
 
Grundlegend für das Verständnis des Betriebssystems EUMEL ist der Begriff der
#on("b")#Task#off("b")#. Eine Task kann als theoretisch unendliche Wiederholung eines Systempro­
gramms der Form: 
 
         'nimm Kommando entgegen' 
         'verarbeite Kommando' 
 
aufgefaßt werden. Einige Tasks existieren bereits als Grundstock des Systems,
weitere werden von Benutzern des Systems erschaffen und dienen als persönliche
Arbeitsumgebung für den 'Eigentümer'. Eine Task kann als benutzereigener, unab­
hängiger Computer im Computer betrachtet werden, denn sie kann Kommandos
entgegennehmen und ausführen und Daten verwalten und aufbewahren. 
 
Eine Task kann neu erzeugt werden, an einen Bildschirm gekoppelt werden und
beendet werden. 
 
Das Tasksystem ist in einer baumartigen Struktur angeordnet. Außer der Wurzel 'UR'
hat jede Task einen Vorgänger ('Vater-Task') und möglicherweise Nachfolger
('Sohn-Tasks'). 
 
#on("u")##ib#Task-Organisation#ie##off("u")# 
 
 
       SUPERVISOR 
             - 
           SYSUR 
               ARCHIVE 
               configurator 
               OPERATOR 
               shutup 
 
       UR 
           PUBLIC 
               Benutzertask1 
               Benutzertask2 
                   Benutzertask3 
                 ..... 
 
 
 
Jeder Benutzer arbeitet innerhalb eines EUMEL-Systems, indem er eine Task an
sein Terminal koppelt und dort Programme aufruft. 
 
Dateien sind grundsätzlich Eigentum einer Task. Es ist grundlegend für das Verständ­
nis des Betriebssystems EUMEL, die Beziehung zwischen Tasks und Dateien zu
erkennen. 
 
Eine Task ist ein Prozeß, der gegebenenfalls Dateien besitzt. Dateien können nur in
einer Task existieren. Um eine Datei einer anderen Task zur Verfügung zu stellen,
wird eine Kopie der Datei an die andere Task geschickt, die sendende Task ist da­
nach Eigentümer des 'Originals', die empfangende Task Eigentümer der 'Kopie'. 
 
Soll eine Hierarchie von Dateien aufgebaut werden, so ist sie über eine Hierarchie
von Tasks zu realisieren, da in einer Task alle Dateien gleichberechtigt sind. 
 
Bis zu dieser Stelle war stets von Dateien die Rede. Dateien sind jedoch ein Spezial­
fall der grundlegenderen Struktur des Datenraumes. 
 
Ein #ib#Datenraum#ie# ist ein allgemeiner Datenbehälter. Ein Datenraum kann beliebige
Daten aufnehmen und erlaubt direkten Zugriff auf diese Daten. Die Struktur der Daten
im Datenraum unterscheidet sich nicht von der Struktur der Programmdaten. Der
'innere Datentyp' eines Datenraums wird vom Programmierer festgelegt. 
 
Vorgeprägt vom System gibt es Textdateien, jeder andere Datentyp muß vom Pro­
grammierer geprägt werden, um so Dateien erzeugen zu können, die Objekte eben
dieses neuen Typs enthalten. 
#page# 
 
 
1.3  Eigenschaften des Betriebssystems 
 
Der erste Entwurf des Mikroprozessor-Betriebssystems EUMEL (#on("b")#E#off("b")#xtendable multi
#on("b")#U#off("b")#ser #on("b")#M#off("b")#icroprozessor #on("b")#EL#off("b")#AN system) entstand 1979 mit dem Anspruch, auf Mikrocom­
putern den Anwendern Hilfsmittel und Unterstützungen zu bieten, wie sie sonst nur
auf Großrechnern zur Verfügung gestellt werden. 
 
Aspekte, die EUMEL von anderen Betriebssystemen für Mikrocomputer unterscheiden,
sind: 
 
- Hardwareunabhängigkeit 
- Multitaskingkonzept 
- Multiuserbetrieb 
- Erweiterbarkeit 
- virtuelle Speicherverwaltung 
- Datensicherheit 
 
 
 
#on("u")##on("b")#Das EUMEL-Schichtenmodell#off("b")##off("u")# 
 
Die Hardwareunabhängigkeit des Betriebssystems EUMEL begründet sich in seinem
Aufbau aus Schichten (sogenannten virtuellen Maschinen), die einen klar definierten
Leistungsumfang haben. 
 
#center#beliebige Anwendungen 
#center#Textverarbeitung, Datenbanken etc. 
 
#center#Systemdienste: Monitor, Dateiverwaltung, Editor 
#center#Task-System 
#center#Standardpakete (BOOL, INT, REAL, TEXT) 
#center#ELAN-Compiler 
 
#center#EUMEL0 
#center#(virtueller Prozessor mit eigenem Befehlssatz) 
 
#center#SHard (Gerätetreiber) 
 
#center#Hardware 
 
 
Jede Schicht erwartet und erhält von ihren Nachbarn wohldefinierte Eingaben und gibt
wohldefinierte Ausgaben weiter. Änderungen in einer Schicht müssen also in den
angrenzenden Schichten beachtet werden, aber nicht in allen Teilen des Systems. 
 
Um EUMEL auf Rechner mit einem neuen Prozessortyp zu portieren, wird zunächst
eine auf die Eigenheiten des Prozessors abgestimmte EUMEL0-Maschine entworfen
und eine Hardwareanpassung (#ib#SHard#ie# : Software/Hardware-Interface) für einen
Rechner mit diesem Prozessor hergestellt. Alle höheren Schichten des Systems
bleiben unberührt. Weitere mit diesem Prozessortyp ausgestattete Rechner können mit
EUMEL betrieben werden, indem ein SHard für dieses Rechnermodell geschrieben
wird. 
 
Aus Benutzersicht ist wichtig, daß dadurch jegliche Software, die auf irgendeinem
Rechner unter EUMEL verfügbar ist, auf jedem anderen Rechner, für den eine
EUMEL Portierung existiert, lauffähig ist und gleiches Verhalten zeigt. Eine Vernet­
zung beliebiger Rechner, auf die EUMEL portiert ist, ist problemlos möglich. 
 
Desweiteren ist für den Benutzer des Systems von Bedeutung, daß er von der hard­
warenahen Schicht entfernt ist. Weder die Programmiersprache noch irgendwelche
speziellen Systemfunktionen gewähren direkten Zugriff auf den Speicher oder Regi­
sterinhalte. Diese Tatsache hat weitreichende Folgen in Hinsicht auf Datenschutz und
Systemsicherheit. 
 
 
 
 
Multi-Tasking-/Multi-User-Betrieb 
Wie einleitend dargestellt, besteht ein EUMEL-System aus diversen Tasks. Durch
eine Aufteilung der Prozessorzeit in Zeitscheiben ist eine (quasi) parallele Bedienung
mehrerer Tasks möglich. 
 
Die multi-user-Fähigkeit des Betriebssystems wird durch den Anschluß mehrerer
Bildschirmarbeitsplätze (Terminals) an V.24 Schnittstellen des Rechners erreicht.
Dabei wird jeder Schnittstelle eine sogenannte Kanalnummer zugeordnet. Jeder
Benutzer kann seine Task dann an einen Kanal (=Terminal) koppeln und an diesem
Terminal gleichzeitig mit anderen Benutzern arbeiten. 
 
 
 
 
Prozeßkommunikation und Netzwerkfähigkeit 
Grundlage der Kommunikation ist die 'Manager-Eigenschaft' von Tasks. Eine Task
ist 'Manager', wenn sie Aufträge anderer Tasks annehmen und ausführen kann.
Insbesondere kann ein Manager veranlaßt werden, eine an ihn geschickte Datei anzu­
nehmen, bzw. eine ihm gehörende Datei an die fordernde Task zu schicken. 
 
Derartige Kommunikationslinien verlaufen normalerweise in der Baumstruktur des
Systems: z.B. ist die Task 'PUBLIC' (vergl. Seite 2) grundsätzlich Manager-Task.
Eine unterhalb von PUBLIC liegende Task kann eine Datei an PUBLIC senden, bzw.
von PUBLIC holen. 
 
Es ist auch möglich, eine Task für den Zugriff beliebiger anderer Tasks zu öffnen und
somit beliebige Kommunikationspfade aufzubauen. Prinzipiell ist damit auch schon der
Aufbau eines Netzwerkes beschrieben, denn sendende und empfangende Tasks
können sich auf verschiedenen Rechnern befinden. 
 
Durch selbst erstellte Programme kann der Eigentümer einer 'Manager-Task' die
Reaktion dieser Task auf einen Auftrag von außen bestimmen. Beispielsweise kann
ein Manager derart programmiert werden, daß er nur Dateien empfängt und ausdruckt,
aber niemals Dateien verschickt (Spool-Task). 
 
 
 
Erweiterbarkeit 
Die Programmiersprache ELAN ist im EUMEL-System gleichzeitig Programmier-
und System-Kommandosprache (JCL), denn jedes Kommando ist Aufruf einer
ELAN-Prozedur und jede vom Benutzer geschriebene ELAN-Prozedur erweitert
den Kommandovorrat des Systems. 
 
Da alle EUMEL-Werkzeuge (einschließlich Editor) selbst ELAN-Programme sind,
kann das System vom Benutzer selbst durch Hinzufügen eigener ELAN-Programme
oder Programmpakete beliebig erweitert werden. Dabei können die bereits implemen­
tierten Systemteile (z.B. die Fenstertechnik des Editors) genutzt werden. 
 
Ein Benutzer muß, um alle Möglichkeiten vom EUMEL zu nutzen, nur eine Sprache
lernen und nicht - wie bei anderen Betriebssystemen - zwei unterschiedliche, eine
Kommando- und eine Programmiersprache. 
 
ELAN selbst ist eine PASCAL-ähnliche Programmiersprache, die mit Hilfe der
schrittweisen Verfeinerung (Refinement-Konzept) die Top-Down-Programmierung
unterstützt. Das Paketkonzept, das der Modularisierung dient, und die freie Wahl von
Bezeichnernamen sind Voraussetzung für übersichtliche und effiziente Programmie­
rung. 
 
 
 
 
Virtuelle Speicherverwaltung 
Im EUMEL-System wird der Hauptspeicherplatz nach dem #on("b")#Demand-Paging-Prinzip#off("b")#
verwaltet. Daten und Programme werden dazu in Seiten von 512 Byte aufgeteilt. Nur
diejenigen Seiten, die wirklich benötigt werden, werden vom Hintergrundspeicher
(Platte) in den Hauptspeicher geholt. Damit ist für den Benutzer bezüglich seiner
Programm- bzw. Dateigrößen nicht mehr der Hauptspeicher, sondern die Hinter­
grundkapazität von Bedeutung. Die Durchsatzgeschwindigkeit (Performance) ist
abhängig von der Größe des RAM-Speichers und der Zugriffsgeschwindigkeit des
Hintergrundmediums. Das Demand-Paging-Verfahren ist Grundlage für den
Multi-User-Betrieb, wobei der Hauptspeicherplatz möglichst effizient zu nutzen und
kein Benutzer zu benachteiligen ist. 
 
Beim Duplizieren eines Datenraumes wird im EUMEL-System lediglich eine logische,
keine physische Kopie erzeugt. Zwei Seiten (zweier Datenräume) heißen dann gekop­
pelt (geshared), wenn beide Seiten physisch demselben Block zugeordnet sind. Erst
bei einem Schreibzugriff werden die Seiten entkoppelt (entshared) und tatsächlich
physisch kopiert. Daher der Name "#on("b")#copy-on-write#off("b")#". 
 
Dieses Prinzip wird natürlich auch systemintern angewandt. Beispielsweise erbt eine
Sohn-Task den Kommandovorrat der Vater-Task, indem der Standard-Datenraum,
der die vorübersetzten ELAN-Prozeduren enthält, in der beschriebenen Weise kopiert
wird. Prozeduren, die später hinzugefügt werden, werden natürlich nicht vererbt, da
die Standard-Datenräume dann entkoppelt werden. 
 
 
 
 
Datensicherheit 
Störungen (inklusive Stromausfall) werden systemseitig durch eine automatische
#on("b")#Fixpoint-Rerun-Logik#off("b")# aufgefangen, indem zum Zeitpunkt eines Fixpunkts der Inhalt
des RAM Speichers, der seit dem letzten #ib#Fixpunkt#ie# verändert wurde auf den
permanenten Speicher (Festplatte) geschrieben wird. Somit kann nach einer Störung
immer auf den Systemzustand des letzten Fixpunktes aufgesetzt werden und die
Datenverluste halten sich in erträglichen Grenzen. 
 
Der Zeitraum zwischen zwei Fixpunkten beträgt standardmäßig 15 Minuten, kann aber
vom Benutzer anders eingestellt werden. 
 
Auch bei dieser Sicherung wird das Copy-on-write-Prinzip angewendet, so daß
Platz- und Zeitaufwand gering sind und den normalen Ablauf nicht stören. 
 
#page# 

1.4  Wichtige Begriffe 
 
-  #on("b")##ib#archive#ie##off("b")#.  Spezielle Task zur Verwaltung des Diskettenlaufwerks. Da für die
   längerfristige Datenhaltung und zur zusätzlichen Datensicherung Dateien auf
   Disketten geschrieben werden, besitzt das EUMEL-System für diese Aufgabe
   eine besondere Task, die die Bedienung vereinfacht und exklusiven Zugriff auf das
   Laufwerk garantiert. 
 
-  #on("b")##ib#configurator#ie##off("b")#.  Besondere Task im Systemzweig des EUMEL-Systems. In
   dieser Task ist die #ib#Konfiguration#ie# von Kanälen möglich, d.h. Kanal und
   angeschlossenenes Gerät werden aufeinander abgestimmt. 
 
-  #on("b")##ib#editor#ie##off("b")#.  Programm zur Dateibearbeitung am Bildschirm. Das Programm wird
   durch das ( Monitor- ) Kommando 'edit' und die Eingabe des Namens der ge­
   wünschten Datei als Parameter gestartet. 
 
   Da ein Bildschirm normalerweise auf 80 Zeichen Zeilenbreite und 24 Zeilen be­
   schränkt ist, kann der Editor als Fenster betrachtet werden, das über die mögli­
   cherweise weitaus größere Datei bewegt wird und durch das der betrachtete Aus­
   schnitt der Datei bearbeitet werden kann. 
 
-  #on("b")##ib#manager task#ie##off("b")#.  Task, die Aufträge von anderen Tasks entgegennehmen und
   ausführen #on("u")#kann#off("u")#. Beispielsweise ist die Verwaltung von Dateien, die mehreren
   Benutzern (= anderen Tasks) zugänglich sein sollen, eine typische Aufgabe für
   einen Manager. 
 
-  #on("b")##ib#Monitor#ie##off("b")#. Der Empfänger von Kommandos innerhalb einer Task ist der Monitor. Der
   Monitor ist sichtbar durch eine Zeile, in der 'gib kommando' steht. In diese Zeile
   werden #ib#Kommando#ie#s und erforderliche Parameter eingegeben. 
 
-  #on("b")##ib#Supervisor#ie##off("b")#.  Spezielle Task zur Überwachung eines EUMEL-Systems. Ein
   Benutzer kann durch die Supervisor-Kommandos Leistungen von dieser Task
   fordern: neue Task einrichten, Task wiederaufnehmen und diverse Informationen. 
 
-  #on("b")##ib#Task#ie##off("b")#.  Beliebig langlebiger Prozeß im EUMEL-System, der die Arbeits­
   umgebung für Benutzer bildet. Jede Task besitzt einen #ib#Standard-Datenraum#ie#, der
   Code und Compilertabellen der Task enthält und kann weitere Datenräume
   (Dateien) besitzen. 
 
#page# 

1.5  Die Notation in diesem Buch 
 
Beachten Sie bitte folgende Regeln der Aufschreibung: 
 
-  Funktionstasten werden ebenso wie besondere Tastenkombinationen explizit als
   Tasten dargestellt: 
 
      <SV>     <ESC>     <e>     
 
       
-  Alles, was Sie am Bildschirm Ihres Rechners schreiben oder lesen sollen, ist in
   Textbereiche, die einen Bildschirm darstellen, eingefaßt. 
 
  Beispiel: 
 
____________________________________________________________________________ 
    gib kommando: 
    edit ("mein programm") 
 
____________________________________________________________________________ 
 
 
-  Innerhalb des Handbuchs sind in der Aufschreibung die Konventionen der Pro­
   grammiersprache ELAN berücksichtigt. Dabei sind folgende Besonderheiten zu
   beachten: 
 
   1) Kommandos werden grundsätzlich klein geschrieben. 
 
   2) Dateinamen u.ä. sind Textdenoter und werden somit in Klammern und Anfüh­
      rungsstriche gesetzt. In diesem Buch steht an den Stellen, wo ein Dateiname
      auftaucht #on("i")# 'dateiname' #off("i")#; den Namen, den Sie tatsächlich verwenden, können
      Sie frei wählen. 
 
   3) Falls besondere Begriffe oder Beispiele innerhalb eines normalen Textes
      auftreten, werden sie in einfache Anführungsstriche gesetzt. 
 
 
#page# 

1.6  Die Funktionstasten des EUMEL-Systems 
 
Die Lage der EUMEL-Funktionstasten entnehmen Sie bitte der speziellen Installa­
tionsanleitung zu dem von Ihnen benutzten Gerät. #l pos (0.0)##l pos(4.0)# 
 
 
<v> <^> <>> <<>    Positionierungstasten 
#table# 
 
<SHIFT>           Umschalttaste 
 
<CR>              Eingabe-/ Absatztaste 
 
<ESC>             Kommandotaste 
 
<SV>              Supervisortaste 
 
<HOP>             Verstärkertaste 
 
<RUBOUT>          Löschtaste 
 
<RUBIN>           Einfügetaste 
 
<TAB>             Tabulatortaste 
 
<MARK>            Markiertaste 
 
<STOP>            Stoptaste 
 
<WEITER>          Weitertaste 
#tableend##clear pos# 
 
Weitere Informationen hierzu finden Sie in der Installationsanleitung zu dem von Ihnen
benutzten Rechner oder Terminal. 
#page# 
 
1.7  Eine Beispielsitzung 
 
Im Folgenden wird eine Beispielsitzung skizziert, in der ein ELAN-Programm erstellt
und getestet wird. 
 
  <SV>       SUPERVISOR aufrufen 
 
 
 
____________________________________________________________________________ 
 
                                           Terminal 2  
 
 
                      EUMEL Version 1.8/M 
 
 
        gib supervisor kommando: 
        begin("meine erste Task") 
 
 
 
   ESC ? --> help 
   ESC b --> begin("")            ESC h --> halt 
   ESC c --> continue("")         ESC s --> storage info 
   ESC q --> break                ESC t --> task info 
 
____________________________________________________________________________ 
 
 
 
 
Durch das Kommando 'begin ("meine erste Task")', welches durch <CR> abgeschlos­
sen werden muß, wird eine Task mit dem Namen 'meine erste Task' im Benutzer­
zweig, also unterhalb von 'PUBLIC' angelegt. Würde diese Task bereits existieren, so
könnten Sie sie mit 'continue ("meine erste Task")' an das Terminal holen. 
 
____________________________________________________________________________ 
 
    gib kommando : 
    edit ("mein erstes Programm") 
 
____________________________________________________________________________ 
 
 
In der Task eröffnen Sie eine Datei mit dem Kommando 'edit ("dateiname")'. 
 
 
____________________________________________________________________________ 
 
    gib kommando : 
    edit ("mein erstes Programm") 
  "mein erstes Programm" neu einrichten (j/n) ? j 
 
____________________________________________________________________________ 
 
 
Falls diese Datei neu ist, erfolgt eine Kontrollfrage (zur Kontrolle der gewünschten
Schreibweise des Dateinamens), die Sie durch <j> bejahen. 
 
 
____________________________________________________________________________ 
  ............ mein erstes Programm ............... Zeile 1  #markon#    
_
____________________________________________________________________________ 
 
 
 
 
 
 
In die noch leere Datei tippen Sie nun den Programmtext ein. 
 
 
____________________________________________________________________________ 
  ............ mein erstes Programm ............... Zeile 1 
 _INT PROC ggt (INT CONST a, b): 
   INT VAR b kopie :: abs (b), a kopie :: abs (a); 
    WHILE b kopie <> 0 REPEAT 
      INT VAR rest := a kopie MOD b kopie; 
      a kopie := b kopie; 
      b kopie := rest 
    END REPEAT; 
   a kopie 
 END PROC gt; 
 
 REP 
   lies 2 zahlen ein; 
   gib groessten gemeinsamen teiler aus 
 UNTIL no ("weitertesten") PER. 
 
 lies 2 zahlen ein: 
   line; put ("2 Zahlen eingeben:"); 
   INT VAR a, b; 
   get (a); get (b). 
 
 gib groessten gemeinsamen teiler aus: 
   put ("der größte gemeinsame Teiler von"); 
   put (a); put ("und"); put (b); put ("ist"); put (ggt (a,b)); 
   line. 
 
____________________________________________________________________________ 
 
 
In dem Programmbeispiel wird ein Prozedur 'ggt' definiert, die den größten gemein­
samen Teiler zweier Zahlen bestimmt. Die Prozedur soll für verschiedene Beispiele
getestet werden; dies geschieht in dem Hauptprogramm, das solange Zahlen einliest
und den größten gemeinsamen Teiler ausgibt, bis der Benutzer auf die Frage 'weiter­
testen (j/n) ?' mit <n> antwortet. 
 
Haben Sie das Programm eingegeben, so können Sie die Bearbeitung dieser Pro­
grammdatei durch Drücken der Tasten <ESC> <q> (nacheinander!) beenden. 
 
 
____________________________________________________________________________ 
 
   gib kommando : 
   run ("mein erstes Programm") 
 
____________________________________________________________________________ 
 
 
Um Ihr Programm zu übersetzen und auszuführen, geben Sie das Kommando
'run ("dateiname")'. 
 
Der Verlauf der Übersetzung, die zwei Läufe über das Programm erfordert, ist am
Zähler, der an der linken Seite des Bildschirms ausgegeben wird, zu erkennen. 
 
Werden beim Übersetzen des Programms Fehler entdeckt, so werden diese im 'note­
book' parallel zur Programmdatei gezeigt. In dem Beispielprogramm wurde ein
Schreibfehler in Zeile 9 gemacht. 
 
 
____________________________________________________________________________ 
  ............ mein erstes Programm ............... Zeile 1 
 _INT PROC ggt (INT CONST a, b): 
   INT VAR b kopie :: abs (b), a kopie :: abs (a); 
   WHILE b kopie <> 0 REPEAT 
      INT VAR rest := a kopie MOD b kopie; 
      a kopie := b kopie; 
      b kopie := rest 
   END REPEAT; 
   a kopie 
 END PROC gt; 
 
 REP 
  .................. notebook ..................... Zeile 1  #markon#    
   Zeile 9    FEHLER bei >> gt << 
              ist nicht der PROC Name 
 
 
____________________________________________________________________________ 
 
 
 
Diesen Fehler müssen Sie nun verbessern. 
 
____________________________________________________________________________ 
  ............ mein erstes Programm ............... Zeile 9 
 INT PROC ggt (INT CONST a, b): 
   INT VAR b kopie :: abs (b), a kopie :: abs (a); 
   WHILE b kopie <> 0 REPEAT 
      INT VAR rest := a kopie MOD b kopie; 
      a kopie := b kopie; 
      b kopie := rest 
   END REPEAT; 
   a kopie 
 END PROC ggt;_ 
 
 REP 
  .................. notebook ..................... Zeile 1 
   Zeile 9    FEHLER bei >> gt << 
              ist nicht der PROC Name 
 
____________________________________________________________________________ 
 
 
 
 
Haben Sie das Programm korrigiert, so können Sie die Datei durch Drücken der
Tasten <ESC> <q> (nacheinander!) wieder verlassen. 
 
 
____________________________________________________________________________ 
 
    gib kommando : 
    run ("mein erstes Programm") 
 
____________________________________________________________________________ 
 
 
Nach Eingabe von <R> wird das Programm erneut übersetzt. 
 
 
____________________________________________________________________________ 
 
 Keine Fehler gefunden,  136 B Code, 82 B Paketdaten generiert 
 
 
       *******  ENDE DER UEBERSETZUNG  ******* 
 
 
 2 Zahlen eingeben: _ 
 
____________________________________________________________________________ 
 
 
Das Programm war jetzt fehlerfrei. Nach der Übersetzung wurde die Ausführung
gestartet. Nun können Beispiele getestet werden. 
 
____________________________________________________________________________ 
 
 2 Zahlen eingeben: 125 250 
 der größte gemeinsame Teiler von 125 und 225 ist 25 
 weitertesten (j/n) ? 
 
____________________________________________________________________________ 
 
 
Beantwortet man die Frage mit <n>, so wird die Ausführung des Programms beendet. 
 
 
____________________________________________________________________________ 
 
   gib kommando : 
 
____________________________________________________________________________ 
 
 
Um die Arbeit in der Task zu beenden, geben Sie auch an dieser Stelle <ESC> <q>
(nacheinander!) ein. 
 
Nach Verlassen der Task ist wiederum die EUMEL-Tapete auf dem Bildschirm. Jede
weitere Aktion wird wiederum von hier aus durch <SV> begonnen. Insbesondere vor
dem #ib#Ausschalten des Geräts#ie# muß nach <SV> eine Task des priviliegierten System­
zweigs (oft: '#ib#shutup#ie#') mit <ESC> <c> an das Terminal gekoppelt werden, in der das
Kommando 'shutup' gegeben wird.