summaryrefslogtreecommitdiff
path: root/doc/programmer-manual/1.8.7/doc/programmierhandbuch.4
blob: 650d9456dd850b9b40c08fd436a00286e04bd548 (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
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
#headandbottom("1","EUMEL-Benutzerhandbuch","TEIL 4 : Kommandosprache","4")# 
#pagenr("%",1)##setcount(1)##block##pageblock# 
#headeven# 
#center#EUMEL-Benutzerhandbuch 
#center#____________________________________________________________ 
 
#end# 
#headodd# 
#center#TEIL 4 : Kommandosprache 
#center#____________________________________________________________ 
 
#end# 
#bottomeven# 
#center#____________________________________________________________ 
4 - % #right#GMD 
#end# 
#bottomodd# 
#center#____________________________________________________________ 
GMD #right#4 - % 
#end# 
TEIL 4:  Kommandosprache 
 
In Teil 4 sind diejenigen Kommandos beschrieben, die erfahrungsgemäß eher der
Handhabung der Arbeitsumgebung zuzurechnen sind. Es ist den Verfassern bewußt,
daß Auswahl und Zusammenstellung recht willkürlich sind, weil eine klare Abgrenzung
zum Teil 5, welcher die Kommandos, die dem Thema: 'Programmierung' zugeordnet
werden, nicht möglich ist. 
 
Der Teil 4 ist in die Themen: 
 
- 4.1.                     Supervisor-Kommandos 
 
- 4.2.1                    Hilfs- und Informationsprozeduren 
 
- 4.2.2                    Thesaurus 
 
- 4.2.3                    Tasks 
 
- 4.2.4                    Handhabung von Dateien 
 
- 4.2.5                    Editor 
 
- 4.2.6                    Dateitransfer 
 
- 4.2.7                    Passwortschutz 
 
- 4.2.8                    Archiv 
 
gegliedert. Insbesondere zu 4.2.4 ist anzumerken, daß nur Kommandos, die ganze
Dateien betreffen hier erläutert sind. Kommandos, die Dateiinhalte betreffen (Suchen,
Ersetzen etc.) sind in 3.5, bzw. 5.3 beschrieben. 
#page# 

4.1  Supervisor 
 
Es gibt genau sieben vom Supervisor akzeptierte Kommandos. Diese Kommandos
können gegeben werden wenn nach dem Einschalten des Geräts oder dem Abkoppeln
einer Task die SV-Taste gedrückt wurde und die sogenannte EUMEL-Tapete
erscheint. 
 
____________________________________________________________________________ 
 
                                           Terminal 2  
 
 
                    EUMEL Version 1.8.1/M 
 
 
        gib supervisor kommando: 
          
 
 
 
   ESC ? --> help 
   ESC b --> begin("")            ESC h --> halt 
   ESC c --> continue("")         ESC s --> storage info 
   ESC q --> break                ESC t --> task info 
 
____________________________________________________________________________ 
 
 
 
 
Desweiteren kann <SV> in einer Task gedrückt werden, um durch <ESC> <h> einen
Programmabbruch einzuleiten. 
 
Im Gegensatz zu den im weiteren beschriebenen, durch ELAN Prozeduren realisierten
Kommandos, sind diese Supervisor-Kommandos nicht als Prozeduren im System und
mithin nicht durch 'help (...)' anzeigbar. 
#page# 
'begin' 
   #on("b")#PROC begin (TEXT CONST taskname) #off("b")# 
   Richtet eine neue Task als Sohn von PUBLIC ein. 
 
 
   #on("b")#PROC begin (TEXT CONST taskname, vatertask) #off("b")# 
   Richtet eine neue Task als Sohn der Task 'vatertask' ein, falls die Vater-Task
   eine Manager-Task ist. Falls diese Task keinen Managerstatus besitzt, passiert
   nichts! In diesem Falle muß das Kommando durch <SV> abgebrochen werden. 
 
 
   FEHLER :  "taskname" existiert bereits 
             "vatertask" gibt es nicht 
 
 
 
 
'continue' 
   #on("b")#PROC continue (TEXT CONST taskname) #off("b")# 
   Eine existierende Task wird an das Terminal des Benutzers angekoppelt. 
 
   FEHLER :  "taskname" gibt es nicht 
 
 
   Falls 'begin' oder 'continue' trotz korrekter Voraussetzungen kein Resultat zeigen,
   'hängt' die betroffene Task. Beim 'begin' Kommando kann das der Fall sein, falls
   die Vater-Task nicht durch 'break' abgekoppelt wurde, sondern mit < SV > verlas­
   sen wurde. In diesem Fall muß das Kommando durch <SV> abgebrochen werden,
   die Vater-Task angekoppelt und mit <ESC> <q> korrekt abgekoppelt werden. 
#page# 
'break' 
   #on("b")#PROC break #off("b")# 
   Das Terminal wird vom Rechner abgekoppelt. 
 
 
 
'halt' 
   #on("b")#PROC halt #off("b")# 
   Das laufende Programm der dem Terminal aktuell zugeordneten Task wird abge­
   brochen. 
 
   Falls in der an das Terminal gekoppelten Task ein laufendes Programm abgebro­
   chen werden soll, muß zunächst durch <SV> der Supervisor aufgerufen werden.
   Durch das Supervisor-Kommando 'halt' wird der Fehler 'halt from terminal'
   induziert. Das Programm wird wie durch jeden anderen Fehler abgebrochen, falls
   nicht 'disable stop' gesetzt wurde! 
 
 
 
#page# 
'storage info' 
   #on("b")#PROC storage info #off("b")# 
   Informationsprozedur über den belegten und den verfügbaren Hintergrund-Spei­
   cher des gesamten Systems in KByte#u#1)#e#. 
 
#foot# 
 
   1) Bei der derzeit aktuellen '+' Version EUMEL 1.8.1/M+ sind die beiden Anga­
      ben mit 4 zu multiplizieren ! 
#end# 
   Das Terminal wird unmittelbar abgekoppelt! 
 
 
 
'task info' 
   #on("b")#PROC task info #off("b")# 
   Informiert über alle Tasknamen im System unter gleichzeitiger Angabe der Vater/
   Sohn-Beziehungen durch Einrückungen. 
 
 
 
 
'help' 
   #on("b")#PROC help #off("b")# 
   Kurzbeschreibung der SV-Kommandos. 
#page# 

4.2  Monitor
 
Unter dem Stichwort Monitor-Kommandos sind an dieser Stelle Kommandos be­
schrieben, die ständig zur Handhabung der Arbeitsumgebung benutzt werden.
Gleichwohl sei sofort darauf hingewiesen, daß jedes ELAN Programm dem Monitor zur
Ausführung übergeben werden kann. Es gibt also keine speziellen Monitor-
Kommandos, sondern nur eine Reihe von Prozeduren (=Kommandos), die in dieser
Umgebung erfahrungsgemäß besonders häufig benutzt werden. 
 
 
#on("u")#4.2.1  Hilfs- und Informationsprozeduren#off("u")# 
 
- Pakete, Prozeduren       :  packets, bulletin , help 
  Parameter 
 
- Tasksystem zeigen        :  task info , task status 
 
- Speicherplatz zeigen     :  storage , storage info 
 
 
#on("u")#4.2.2  Thesaurus #off("u")# 
 
-  besondere Thesauri      :  ALL , all , SOME , remainder 
 
-  Verknüpfung             :  + , - ,  / 
 
 
#on("u")#4.2.3  Taskoperationen#off("u")# 
 
- besondere Tasknamen      :  archive , brother , father , myself 
                              printer , public , son , supervisor 
- Terminal abkoppeln       :  break 
- Task löschen             :  end 
- Manager-Task             :  global manager , free global manager 
- Umbenennen der Task      :  rename myself 
 
#page# 
#on("u")#4.2.4  Handhabung von Dateien #off("u")# 
 
                           :  copy , edit , forget , list , rename , show 
 
 
#on("u")#4.2.5  Editor #off("u")# 
 
- Editieren                :  edit , editget , show 
- Tastenbelegung           :  kommando auf taste (legen) , 
                              lernsequenz auf taste (legen) , 
                              std tastenbelegung , 
                              taste enthält kommando , 
                              word wrap 
 
 
#on("u")#4.2.6  Transfer #off("u")# 
 
- Datei holen              :  fetch , fetchall 
- Datei senden             :  save , saveall 
- Drucken                  :  print 
- Datei löschen            :  erase 
 
 
#on("u")#4.2.7  Passwortschutz #off("u")# 
 
- 'begin' absichern        :  begin password 
- 'continue' absichern     :  task password 
- Dateien absichern        :  enter password 
- Systemzweig sichern      :  family password 
 
 
#on("u")#4.2.8  Das Archiv #off("u")# 
 
- Reservieren/freigeben    :  archive , release 
- Formatieren              :  format 
- Löschen                  :  clear 
- Kontrollesen             :  check 
 
 
#page# 

4.2.1  Hilfsprozeduren 
 
Die drei Prozeduren listen ihre Ausgabe jeweils in eine temporäre Datei, die mit
'show' (s. 4.2.5) gezeigt wird. 
 
 
'packets' 
   #on("b")#PROC packets #off("b")# 
   Auflisten der Namen aller insertierten Pakete in der Task. 
 
 
 
 
 
 
'bulletin' 
   #on("b")#PROC bulletin (TEXT CONST paket name) #off("b")# 
   Listen aller in der DEFINES-Liste des Pakets mit dem Namen "paket name"
   enthaltenen Prozeduren. 
 
   FEHLER :  ... ist kein Paketname 
 
 
   #on("b")#PROC bulletin #off("b")# 
   Es wird eine Liste aller bisher insertierten Objekte erstellt. Diese Liste ist paket­
   weise sortiert. 'bulletin' zeigt also eine Liste #on("u")#aller#off("u")# Prozeduren an, die in der Task
   benutzt werden können. 
#page# 
'help' 
   #on("b")#PROC help (TEXT CONST name) #off("b")# 
   Listen aller Prozeduren / Operatoren mit dem Namen "name". Der Name des
   Packets in dessen Schnittstelle die Prozedur steht wird mit ausgegeben. 
 
   Falls es kein Objekt des erfragten Namens gibt, erfolgt die Ausgabe: 
 
   unbekannt "name". 
 
   Beispiel: 
____________________________________________________________________________ 
 
     gib kommando : 
     help("save") 
 
____________________________________________________________________________ 
 
 
   liefert: 
 
____________________________________________________________________________ 
 
PACKET nameset: 
 
      save........... (THESAURUS CONST, TASK CONST) 
      save........... (THESAURUS CONST) 
 
PACKET globalmanager: 
 
      save........... (DATASPACE CONST, TEXT CONST, TASK CONST) 
      save........... (TEXT CONST, TASK CONST) 
      save........... (TEXT CONST) 
      save........... 
 
____________________________________________________________________________ 
 
 
 
   Desweiteren kann auch nach Prozedurnamen gesucht werden, die nur annähernd
   bekannt sind, indem ein Suchmuster spezifiziert wird. Das Suchmuster besteht aus
   dem bekannten Teil des Namens und dem Operator '*', der vor und/oder nach
   dem Suchbegriff gesetzt werden kann. '*' bezeichnet eine beliebige (auch leere)
   Zeichenkette. 
 
   Beispiel: Gesucht werden die verschiedenen 'info' Prozeduren: 
 
____________________________________________________________________________ 
     gib kommando : 
     help("*info*") 
 
____________________________________________________________________________ 
 
 
 
____________________________________________________________________________ 
 
      taskinfo....... (INT CONST, INT CONST) 
      taskinfo....... (INT CONST, FILE VAR) 
      taskinfo....... (INT CONST) 
      taskinfo....... 
      editinfo....... (FILE VAR, INT CONST) 
      editinfo....... (FILE CONST)  --> INT 
      storageinfo.... 
 
____________________________________________________________________________ 
 
 
 
   Dieser Stern darf nicht mit dem 'joker' des 'Pattern Matching' verwechselt werden.
   In der 'help' Prozedur darf '*' #on("u")#nicht#off("u")# in den Suchbegriff eingesetzt werden, sondern
   nur an Wortanfang und -Ende gesetzt werden. 
 
 
#page# 

Informationsprozeduren 
 
'storage' 
   #on("b")#INT PROC storage (TASK CONST task) #off("b")# 
   Informationsprozedur über den logisch belegten Hintergrund-Speicher der Task.
   (Angabe in KByte, bzw. 4KB Einheiten bei der '+'-Version) 
 
 
____________________________________________________________________________ 
 
    gib kommando : 
    put(storage(myself)) 
    1234 
 
    gib kommando : 
 
____________________________________________________________________________ 
 
 
'storage info' 
   #on("b")#PROC storage info #off("b")# 
   Informationsprozedur über den belegten und den verfügbaren Hintergrund-Spei­
   cher des gesamten Systems. Die Ausgabe erfolgt in KByte, bei der aktuellen
   '+'-Version in 4 KByte Einheiten. 
 
 
____________________________________________________________________________ 
 
    gib kommando : 
    storage info 
    1234K von 12000K 
 
    gib kommando : 
____________________________________________________________________________ 
#page# 
 
'task info' 
   #on("b")#PROC task info #off("b")# 
   Informiert über alle Tasknamen im System unter gleichzeitiger Angabe der Vater/
   Sohn-Beziehungen (Angabe durch Einrückungen). 
 
 
   #on("b")#PROC task info (INT CONST art) #off("b")# 
   Informiert über alle Tasks im System. Mit 'art' kann man die Art der Zusatz-
   Information auswählen. 
 
   art=1: entspricht 'task info' ohne Parameter, d.h. es gibt nur die Tasknamen
          unter Angabe der Vater/Sohn-Beziehungen aus. 
 
   art=2: gibt die Tasknamen aus. Zusätzlich erhalten Sie Informationen über die
          verbrauchte CPU-Zeit der Task, die Priorität, den Kanal, an dem die
          Task angekoppelt ist, und den eigentlichen Taskstatus. Hierbei bedeuten: 
 
          0    -busy-        Task ist aktiv. 
          1    i/o           Task wartet auf Beendigung des Outputs oder auf
                             Eingabe. 
          2    wait          Task wartet auf Sendung von einer anderen Task. 
          4    busy-blocked  Task ist rechenwillig, aber blockiert#u#1)#e#. 
          5    i/o -blocked  Task wartet auf I/O, ist aber blockiert. 
          6    wait-blocked  Task wartet auf Sendung, ist aber blockiert. Ach­
                             tung: Die Task wird beim Eintreffen einer Sendung
                             automatisch entblockiert. 
        > 6    dead 
 
    art=3: wie 2, aber zusätzlich wird der belegte Speicher angezeigt. (Achtung:
           Prozedur ist zeitaufwendig!). 
 
#foot# 
 
1) Eine Blockierung kann von 'Scheduler' veranlaßt werden 
   (siehe Systemhandbuch) 
#end# 
 
#page# 
____________________________________________________________________________ 
 
    gib kommando : 
    task info(2) 
 
____________________________________________________________________________ 
 
 
 
    liefert: 
 
____________________________________________________________________________ 
 
 ............................ ............................... 
 15.05.87   10:39                         CPU    PRIO CHAN STATUS 
 SUPERVISOR.......................... 0000:19:47   0   -   wait 
    -................................ 0000:07:54   0   -   wait 
    SYSUR............................ 0000:34:02   0   -   wait 
        shutup dialog................ 0000:05:26   0   -   i/o 
        configurator................. 0000:04:17   0   -   wait 
        OPERATOR..................... 0000:00:14   0   -   i/o 
        ARCHIVE...................... 0000:10:33   0  31   wait 
        net.......................... 0006:41:56   0   -   wait 
            net timer................ 0000:02:48   2   -   i/o 
            net port................. 0000:40:23   0   7   wait 
        PRINTER...................... 0000:05:59   0   -   wait 
            -........................ 0000:00:11   0   -   wait 
 UR.................................. 0000:02:11   0   -   wait 
    PUBLIC........................... 0002:02:03   0   -   wait 
        task1........................ 0000:41:50   0   -   -busy- 
        task2........................ 0000:03:10   0   -   i/o 
        task3........................ 0000:57:28   0   1   -busy- 
 
____________________________________________________________________________ 
 
 
#page# 
 
 
   #on("b")#PROC task info (INT CONST art, FILE VAR infodatei) #off("b")# 
   Wie oben, die Ausgabe wird jedoch in die Datei 'infodatei' geschrieben. 
 
____________________________________________________________________________ 
 
    FILE VAR info := sequential file(output,"infodatei") ; 
    taskinfo(3, info); 
     
____________________________________________________________________________ 
 
 
   #on("b")#PROC task info ( INT CONST art, stationsnr) #off("b")# 
   Ermöglicht im Netzbetrieb 'task info' über die Station mit der Nummer 'stationsnr'. 
 
____________________________________________________________________________ 
 
    gib kommando : 
    taskinfo(1,12) ; 
 
____________________________________________________________________________ 
#page# 
'task status' 
 
   #on("b")#PROC task status #off("b")# 
   Informationsprozedur über den Zustand der eigenen Task. Informiert über 
   -  Name der Task, Datum und Uhrzeit; 
   -  verbrauchte CPU-Zeit; 
   -  belegten Speicherplatz; 
   -  Kanal, an den die Task angekoppelt ist; 
   -  Zustand der Task (rechnend u.a.m.); 
   -  Priorität. 
 
   #on("b")#PROC task status (TASK CONST t) #off("b")# 
   Wie obige Prozedur, aber über die Task mit dem internen Tasknamen 't'. 
 
 
____________________________________________________________________________ 
 
   gib kommando : 
   task status (public) 
 
 15.05.87 10:30   TASK: PUBLIC 
 
 Speicher: 1234K 
 CPU Zeit: 0011.12:23 
 Zustand : wait, (Prio 0), Kanal - 
 
____________________________________________________________________________ 
#page# 
 
4.2.2  Thesaurus 
 
Ein #ib#Thesaurus#ie# ist ein #ib#Namensverzeichnis#ie#, das bis zu 200 Namen beinhalten kann.
Dabei muß jeder Namen mindestens ein Zeichen und darf höchstens 100 Zeichen
lang sein. Steuerzeichen (code < 32) in Namen werden umgesetzt (siehe 2.9.2). 
 
Thesauri werden unter anderem von der Dateiverwaltung benutzt, um das Dateiver­
zeichnis einer Task zu führen. 
 
Man kann einen Thesaurus selbst erstellen, indem eine Datei z.B. mit Namen von
Dateien gefüllt wird. Diese Datei kann dann als Thesaurus für weitere Aktionen die­
nen. 
 
 
 
- Thesaurus liefern        :  ALL , all , SOME , remainder 
- Auswählen                :  LIKE 
- Verknüpfen               :  + , - , / 
 
 
 
#on("b")#ACHTUNG#off("b")# :  Bei der Verwendung von Thesaurus Operationen in Verbindung mit
'fetch', 'save' etc. ist zu beachten, daß mit 'SOME', 'ALL' und 'all' zunächst nur eine
Auswahl aus einer Liste getroffen wird. Zusätzlich muß das Ziel oder die Quelle des
Dateitransfers vereinbart werden. 
 
Ein beliebter Fehler ist z.B.:   'fetch (ALL archive)'. 
 
Hier ist nicht weiter spezifiziert, von wo Dateien geholt werden sollen - also werden
sie von 'father' geholt!  (s. 4.2.5) 
 
Falls die Dateien vom Archiv geholt werden sollen, ist das Archiv als Quelle zu be­
nennen: 
 
Also : 'fetch (ALL archive, archive)' = Hole alle Dateien, die in dem Thesaurus von 
                                  'archive' sind von der Task 'archive'. 
#page# 
'ALL' 
   THESAURUS OP ALL (TASK CONST task) 
   Liefert einen Thesaurus, der alle Dateinamen der angegebenen Task enthält. 
 
 
 
   #on("b")#THESAURUS OP ALL (TEXT CONST dateiname) #off("b")# 
   Liefert einen Thesaurus, der die in der angegebenen Datei vorhandenen Namen
   (jede Zeile ein Name) enthält. 
 
 
 
 
'all' 
   #on("b")#THESAURUS PROC all #off("b")# 
   Liefert einen Thesaurus, der alle Dateinamen der eigenen Task enthält. Entspricht
   'ALL myself'. 
 
 
 
 
'SOME' 
   #on("b")#THESAURUS OP SOME (THESAURUS CONST thesaurus) #off("b")# 
   Bietet den angegebenen Thesaurus zum editieren an. Dort können nicht erwünsch­
   te Namen gestrichen werden. 
 
 
 
   #on("b")#THESAURUS OP SOME (TASK CONST task) #off("b")# 
   Aufruf von: SOME ALL task. 
 
 
   #on("b")#THESAURUS OP SOME (TEXT CONST dateiname) #off("b")# 
   Aufruf von: SOME ALL dateiname. 
 
#page# 
'remainder' 
   #on("b")#PROC remainder #off("b")# 
   Liefert nach einem 'errorstop' die noch nicht bearbeiteten Dateien. 
 
____________________________________________________________________________ 
 
    gib kommando : 
    save all (archive) 
 
   '"....." kann nicht geschrieben werden (Archiv voll)' 
 
____________________________________________________________________________ 
 
 
 
   Nachdem man eine neue Floppy ins Archivlaufwerk gelegt hat, kann man mit 
 
 
____________________________________________________________________________ 
    gib kommando : 
    save (remainder, archive) 
 
____________________________________________________________________________ 
 
   den Rest der Dateien auf die nächste Floppy sichern. 
#page# 
'LIKE' 
   #on("b")#THESAURUS OP LIKE (THESAURUS CONST thesaurus, TEXT CONST muster) #off("b")# 
   Alle im Thesaurus enthaltenen Dateien, die dem 'muster' entsprechen sind im
   Ergebnisthesaurus enthalten. 
 
   (Die Syntax von 'muster' ist bei der Beschreibung des Pattern-Matching (5.4)
   beschrieben) 
 
 
____________________________________________________________________________ 
 
    gib kommando : 
    print (all LIKE "*.p") 
 
____________________________________________________________________________ 
 
 
  Alle Dateien, deren Name mit '.p' endet, werden gedruckt. 
 
#page# 
'+' 
   #on("b")#THESAURUS OP + (THESAURUS CONST links, rechts) #off("b")# 
   Liefert die Vereinigungsmenge von 'links' und 'rechts'. 
   Achtung: Die Vereinigungsmenge enthält keine Namen mehrfach. 
 
   #on("b")#THESAURUS OP + (THESAURUS CONST links, TEXT CONST rechts)#off("b")# 
   Fügt dem Thesaurus 'rechts' zu, wenn 'rechts' noch nicht im Thesaurus enthal­
   ten ist. 
 
 
 
 
'-' 
   #on("b")#THESAURUS OP - (THESAURUS CONST links, rechts) #off("b")# 
   Liefert die Differenzmenge. Achtung: Die Differenzmenge enthält keine Namen
   mehrfach. 
 
   #on("b")#THESAURUS OP - (THESAURUS CONST links, TEXT CONST rechts)#off("b")# 
   Nimmt den Namen 'rechts' aus dem Thesaurus. 
 
____________________________________________________________________________ 
 
    gib kommando : 
    fetch(ALL father - ALL myself) 
 
____________________________________________________________________________ 
 
 
'/' 
   #on("b")#THESAURUS OP / (THESAURUS CONST links, rechts) #off("b")# 
   Liefert die Schnittmenge 
   Achtung: Die Schnittmenge enthält keine Namen mehrfach. 
 
 
#page# 

4.2.3  Tasks
 
Zur Identifizierung von Tasks dienen sogenannte 'interne Taskbezeichner'. Ein solcher
Taskbezeichner wird beim Einrichten einer neuen Task vergeben. Interne Taskbe­
zeichner sind auch unter Berücksichtigung der Zeit eindeutig. 
 
Der Zugriff auf interne Taskbezeichner erfolgt über Prozeduren und Operatoren, die
auf Objekte des Datentyps TASK (siehe 2.9.1) angewandt werden. 
 
Zusätzlich zum internen Tasknamen, der nicht auszugeben ist, haben Tasks meistens
einen Namen#u#1) #e#. 
#foot# 
 
1) Unbenannte Tasks haben den Pseudonamen "-". 
#end# 
 
Aus Benutzersicht können benannte Tasks innerhalb eines Rechners vollständig und
eindeutig über ihren Namen identifiziert werden. 
 
 
- Task liefern             :  / , task , niltask 
 
- Verwandtschaften         :  brother , father , myself , son 
 
- Ausgezeichnete Tasks     :  archive , printer , public , supervisor 
 
- Namen liefern            :  name 
 
- Tasknamen ändern         :  rename myself 
 
- Reservieren bes. Tasks   :  reserve 
 
#page# 
'/' 
   #on("b")#TASK OP / (TEXT CONST taskname) #off("b")# 
   Liefert die Task des angegebenen Namens, falls sie existiert. Der eigene Katal­
   og wird automatisch aktualisiert 
 
   (identisch mit der PROC task (TEXT CONST taskname). 
 
   FEHLER :   "taskname" gibt es nicht 
 
 
   #on("b")#TASK OP / (INT CONST station number, TEXT CONST name) #off("b")# 
   Liefert im Netzbetrieb die Task des angegebenen Namen von der Station mit der
   angegebenen Nummer. 
 
 
 
'niltask' 
   #on("b")#TASK CONST niltask #off("b")# 
   Bezeichner für "keine Task". So liefern die Prozeduren 'son', 'brother' und 'father'
   als Resultat 'niltask', wenn keine Sohn-, Bruder- oder Vatertask existiert. 
 
 
 
'task' 
   #on("b")#TASK PROC task (TEXT CONST taskname) #off("b")# 
   Liefert die Task des angegebenen Namens, falls sie existiert. Der eigene Katal­
   og wird automatisch aktualisiert. 
 
   FEHLER :     "taskname" gibt es nicht 
 
 
   #on("b")#TASK PROC task (INT CONST channel number) #off("b")# 
   Liefert den Namen der Task, die an dem angegebenen Kanal hängt. 
#page# 
'brother' 
   #on("b")#TASK PROC brother (TASK CONST task) #off("b")# 
   Liefert den nächsten Bruder von 'task'. Falls kein Bruder existiert, wird 'niltask'
   geliefert. Aktualisiert den eigenen Katalog nicht automatisch! 
 
 
 
'father' 
   #on("b")#TASK PROC father #off("b")# 
   Liefert die eigene Vatertask. 
 
 
   #on("b")#TASK PROC father (TASK CONST task) #off("b")# 
   Liefert den Vater von 'task'. Existiert kein Vater (z.B. bei UR), wird niltask gelie­
   fert. Aktualisiert den eigenen Katalog nicht automatisch! 
 
 
 
'myself' 
   #on("b")#TASK PROC myself #off("b")# 
   Liefert eigenen Task-Bezeichner. 
 
 
 
'son' 
   #on("b")#TASK PROC son (TASK CONST task) #off("b")# 
   Liefert den ersten Sohn von 'task'. Falls keiner im Katalog vermerkt ist, wird
   'niltask' geliefert. Aktualisiert den eigenen Katalog nicht automatisch! 
 
 
#page# 
'archive' 
   #on("b")#TASK PROC archive #off("b")# 
   Liefert den internen Taskbezeichner der aktuellen Task mit Namen ARCHIVE.
   Diese Prozedur dient zum schnellen und bequemen Ansprechen der Archivtask. 
 
 
 
'printer' 
   #on("b")#TASK PROC printer #off("b")# 
   Liefert den internen Taskbezeichner der aktuellen Task mit Namen #ib#PRINTER#ie#.
   Diese Prozedur dient zum schnellen und bequemen Ansprechen des Druckspoo­
   lers. 
 
 
'public' 
   #on("b")#TASK PROC public #off("b")# 
   Liefert den internen Taskbezeichner der Task #ib#PUBLIC#ie#. 
 
 
 
 
'supervisor' 
   #on("b")#TASK PROC supervisor #off("b")# 
   Liefert den internen Taskbezeichner des Supervisors. 
 
 
#page# 
'name' 
   #on("b")#TEXT PROC name (TASK CONST task) #off("b")# 
   Liefert den Namen von 'task'. Die Task muß noch im System existieren, sonst ist
   der Name nicht mehr bekannt. Falls die 'task' noch nicht im eigenen Katalog
   enthalten ist, wird er aktualisiert. 
 
 
 
'rename myself' 
   #on("b")#PROC rename myself (TEXT CONST neuer name) #off("b")# 
   Name der eigenen Task wird in 'neuer name' geändert. Wirkt wie Löschung und
   Wiedereinrichten der Task in Bezug auf alle TASK VAR's die sich auf diese Task
   beziehen. 
 
   FEHLER :   Task existiert bereits 
              Name unzulässig 
              => anderen Namen wählen 
 
 
 
'reserve' 
   #on("b")#PROC reserve (TASK CONST task) #off("b")# 
   Reservieren einer Task für den ausschließlichen Dialog mit der Task, in der das
   Kommando gegeben wurde. 
 
   #on("b")#PROC reserve (TEXT CONST message, TASK CONST task) #off("b")# 
   Wie 'reserve (TASK CONST task)' mit Übergabe einer 'message'. 
 
 
   Die reservierte Task muß ein spezieller Manager, (z.B. /"DOS" aus dem Werkzeug
   MS-DOS-DAT) sein ! 
#page# 

4.2.4  Handhabung von Dateien 
 
'copy' 
   #on("b")#PROC copy (TEXT CONST quelle, ziel) #off("b")# 
   Kopiert die Datei 'quelle' in eine neue Datei mit dem Namen 'ziel' in der Benut­
   zer-Task. 
 
   FEHLER :  "ziel" existiert bereits 
             "quelle" gibt es nicht 
             zu viele Dateien 
 
 
 
'forget' 
   #on("b")#PROC forget (TEXT CONST dateiname) #off("b")# 
   Löschen einer Datei mit dem Namen 'dateiname' in der Benutzer-Task. 
 
   FEHLER :  "datei" gibt es nicht 
 
 
   #on("b")#PROC forget (THESAURUS CONST thesaurus) #off("b")# 
   Löscht die im 'thesaurus' enthaltenen Dateien in der Benutzer-Task. 
 
   Im Dialog erfolgt vor dem Löschen einer Datei standardmäßig die Abfrage: 
 
 
____________________________________________________________________________ 
 
    gib kommando : 
    forget("einedatei") 
 "einedatei" löschen(j/n) ? 
 
____________________________________________________________________________ 
 
#page# 
'list' 
   #on("b")#PROC list #off("b")# 
   Listet alle Dateien der Benutzer-Task mit Namen und Datum des letzten Zugriffs
   auf dem Terminal auf. 
 
 
   #on("b")#PROC list (TASK CONST task) #off("b")# 
   Listet alle Dateien der angegebenen 'task' mit Namen und Datum der letzten
   Änderung auf dem Terminal auf. Die Task muß Manager sein. 
 
 
   #on("b")#PROC list (FILE VAR liste) #off("b")# 
   Listet alle Dateinamen in die Datei 'liste', die mit 'output'(s. 5.3.5) assoziiert sein
   muß. 
 
 
   #on("b")#PROC list (FILE VAR liste, TASK CONST manager) #off("b")# 
   Listet alle Dateien der Task 'manager' mit Namen und Datum der letzten Ände­
   rung in die Datei 'liste'. 
 
 
____________________________________________________________________________ 
 
 gib kommando : 
 FILE VAR f:= sequential file (output,"list");list(f,archive) 
 
____________________________________________________________________________ 
 
#page# 
'rename' 
   #on("b")#PROC rename (TEXT CONST altername, neuername) #off("b")# 
   Umbenennen einer Datei von 'altername' in 'neuername'. 
 
 
 
   FEHLER :   "neuername" gibt es bereits 
              "altername" gibt es nicht 
#page# 
 
4.2.5  Editor-Prozeduren  
 
'edit' 
   #on("b")#PROC edit (TEXT CONST dateiname) #off("b")# 
   Ruft den Editor mit 'dateiname' auf. 
 
 
   #on("b")#PROC edit #off("b")# 
   a) Im Monitor: 
      Ruft den Editor mit den zuletzt verwandten Dateinamen auf. 
 
   b) Im Editor: 
      Der Dateiname wird erfragt. 
 
   Für jedes 'edit' gilt: 
   Wurde 'edit' zum ersten Mal aufgerufen, nimmt das Fenster den gesamten Bild­
   schirm ein. Bei erneutem 'edit'-Aufruf wird ein Fenster nach rechts unten ab der
   aktuellen Cursor-Position eröffnet. 
 
 
   #on("b")#PROC edit (THESAURUS CONST t) #off("b")# 
   Editieren aller in dem Thesaurus 't' enthaltenen Dateien nacheinander. 
 
 
   Weitere 'edit-Prozeduren', die z.B. Variation der Fenstergröße etc. zulassen, sind
   in 5.4.6 beschrieben. 
   
#page# 
'editget' 
   #on("b")#PROC editget  (TEXT VAR editsatz) #off("b")# 
   Ausgabe einer (Kommando)zeile, in der Editorfunktionen zur Verfügung
   stehen siehe Teil 5.5.1.4. 
 
 
 
'show' 
   #on("b")#PROC show (TEXT CONST dateiname) #off("b")# 
   Die Datei wird am Bildschirm gezeigt. Positionierung und Suchen funktionieren wie
   in 'edit', Aktionen die Änderungen in der Datei bewirken würden, werden nicht
   angenommen. 
 
 
 
   #on("b")#PROC show #off("b")# 
   'show' auf der zuletzt bearbeiteten Datei. 
 
#page# 
'kommando auf taste legen' 
   #on("b")#PROC kommando auf taste legen (TEXT CONST taste, elan programm)#off("b")# 
   Die Taste 'taste' wird mit dem angegebenen ELAN-Programm belegt. Durch <ESC>
   <taste> wird das Programm direkt ausgeführt. 
 
____________________________________________________________________________ 
 
  gib kommando : 
  kommando auf taste legen ("a","fetch (SOME archive,archive)") 
 
____________________________________________________________________________ 
 
 
 
'kommando auf taste' 
   #on("b")#TEXT PROC kommando auf taste (TEXT CONST taste)#off("b")# 
   Falls 'taste' mit einem ELAN-Programm belegt ist, liefert die Prozedur den
   Programmtext, andernfalls den leeren Text niltext. 
 
____________________________________________________________________________ 
 
  gib kommando : 
  put (kommando auf taste("f")) 
 
____________________________________________________________________________ 
 
 
 
'taste enthaelt kommando' 
   #on("b")#BOOL PROC taste enthaelt kommando (TEXT CONST taste)#off("b")# 
   Liefert TRUE falls 'taste' mit einem ELAN-Programm belegt ist. 
 
 
'lernsequenz auf taste legen' 
   #on("b")#PROC lernsequenz auf taste legen (TEXT CONST taste, sequenz)#off("b")# 
   'taste' wird mit der Zeichenfolge 'sequenz' belegt. Durch <ESC> <taste> wird die
   Zeichenfolge an der aktuellen Position ausgegeben. 
 
   Als Zeichenfolge sind natürlich auch einzelne Zeichen und EUMEL-Codes zuläs­
   sig. 
 
   Die vom System vorbelegten Tasten sind in 3.4 'Zeichen schreiben' aufgelistet. 
 
____________________________________________________________________________ 
 
  gib kommando : 
  lernsequenz auf taste legen ("x","gib kommando :"13""2""2"") 
 
____________________________________________________________________________ 
 
 
 
'lernsequenz auf taste' 
   #on("b")#TEXT PROC lernsequenz auf taste (TEXT CONST taste) #off("b")# 
   Liefert die auf 'taste' gelegte Zeichenfolge. 
 
 
'std tastenbelegung' 
   #on("b")#PROC std tastenbelegung #off("b")# 
   Die Standard-Tastenbelegung (s.3.4) wird (wieder) hergestellt. 
 
 
'word wrap' 
   #on("b")#PROC word wrap (BOOL CONST b) #off("b")# 
   Der automatische Zeilenumbruch wird durch 'word wrap (FALSE)' aus- und durch
   'word wrap (TRUE)' eingeschaltet. Wird diese Prozedur während des Editierens
   aufgerufen, gilt die Einstellung für die aktuelle Textdatei. Wird die Prozedur als
   Monitor-Kommando gegeben, so gilt die Eingabe als Voreinstellung für neue
   Dateien. 
#page# 
 
4.2.6  Dateitransfer
 
Unter diesem Abschnitt sind diejenigen Prozeduren beschrieben, die der simplen
Kommunikation mit Manager-Tasks dienen: Holen oder Senden einer Dateikopie,
Löschen in der Manager-Task. 
 
#on("b")#ACHTUNG :  Für alle Prozeduren gilt: falls die Manager-Task nicht existiert, wird eine
Fehlermeldung erzeugt, existiert eine Task des angegebenen Namens, die aber nicht
Managertask ist, so terminieren die Prozeduren nicht! 
#off("b")# 
 
 
'fetch' 
   #on("b")#PROC fetch (TEXT CONST dateiname, TASK CONST manager) #off("b")# 
   Kopiert die Datei 'dateiname' aus der Task 'manager' 
 
 
   #on("b")#PROC fetch (THESAURUS CONST th, TASK CONST manager) #off("b")# 
   Kopiert alle Dateien, deren Namen im Thesaurus th enthalten sind, aus der Task
   'manager'. 
 
 
____________________________________________________________________________ 
 
   gib kommando : 
   fetch(ALL(12/"PUBLIC"), 12/"PUBLIC") 
 
____________________________________________________________________________ 
 
 
 
   Mit diesem Kommando werden (in einem EUMEL Netz) alle Dateien der Task
   'PUBLIC' des Rechners mit der Stationsnummer 12 in diesem Netz kopiert. 
 
#page# 
____________________________________________________________________________ 
 
   gib kommando : 
   fetch(SOME archive , archive) 
 
____________________________________________________________________________ 
 
 
 
   Bietet den Thesaurus von 'ARCHIVE' an, nach Auswahl werden alle Dateien deren
   Namen nicht gelöscht wurden, von der Diskette kopiert. 
 
 
   #on("b")#PROC fetch (TEXT CONST dateiname) #off("b")# 
   Kopiert die Datei 'dateiname' aus der Task 'father' 
 
 
   #on("b")#PROC fetch (THESAURUS CONST th) #off("b")# 
   Kopiert alle Dateien, deren Namen in 'th' sind aus der Task 'father'. 
 
 
 
'fetchall' 
 
   #on("b")#PROC fetchall #off("b")# 
   entspricht: fetch (ALL father, father) 
 
 
   #on("b")#PROC fetchall (TASK CONST manager)#off("b")# 
   entspricht: fetch(ALL manager, manager) 
 
#page# 
'save' 
   #on("b")#PROC save (TEXT CONST dateiname, TASK CONST manager) #off("b")# 
   Kopiert die Datei 'dateiname' in die Task 'manager' 
 
 
   #on("b")#PROC save (THESAURUS CONST th, TASK CONST manager) #off("b")# 
   Kopiert alle Dateien, deren Namen im Thesaurus th enthalten sind, in die Task
   'manager'. 
 
____________________________________________________________________________ 
 
    gib kommando : 
    save(all, (12/"PUBLIC")) 
 
____________________________________________________________________________ 
 
 
   Mit diesem Kommando werden (in einem EUMEL Netz) alle Dateien der eigenen
   Task in die Task 'PUBLIC' des Rechners mit der Stationsnummer 12 in diesem
   Netz kopiert. 
 
____________________________________________________________________________ 
 
    gib kommando : 
    save(SOME myself, manager) 
 
____________________________________________________________________________ 
 
 
   Bietet den eigenen Thesaurus an, nach Auswahl werden alle Dateien deren
   Namen nicht gelöscht wurden, zur Task 'manager' kopiert. 
 
 
   #on("b")#PROC save (TEXT CONST dateiname) #off("b")# 
   Kopiert die Datei 'dateiname' in die Task 'father' 
 
 
   #on("b")#PROC save (THESAURUS CONST th) #off("b")# 
   Kopiert alle Dateien, deren Namen in 'th' enthalten sind, in die Task 'father'. 
 
 
   #on("b")#PROC save #off("b")# 
   Kopiert die zuletzt bearbeitete Datei in die Task 'father' 
 
 
 
 
'saveall' 
   #on("b")#PROC saveall #off("b")# 
   entspricht: save (all, father) 
 
 
   #on("b")#PROC saveall (TASK CONST manager) #off("b")# 
   entspricht: save (ALL myself, manager) 
 
#page# 
'erase' 
   #on("b")#PROC erase (TEXT CONST dateiname, TASK CONST manager) #off("b")# 
   Löscht die Datei 'dateiname' aus der Task 'manager' 
 
 
   #on("b")#PROC erase (THESAURUS CONST th, TASK CONST manager) #off("b")# 
   Löscht alle Dateien, deren Namen im Thesaurus th enthalten sind, aus der Task
   'manager'. 
 
 
   #on("b")#PROC erase (TEXT CONST dateiname) #off("b")# 
   Löscht die Datei 'dateiname' aus der Task 'father' 
 
 
   #on("b")#PROC erase (THESAURUS CONST th) #off("b")# 
   Löscht alle Dateien, deren Namen in 'th' sind, aus der Task 'father' 
 
 
   #on("b")#PROC erase #off("b")# 
   Löscht die zuletzt bearbeitete Datei aus der Task 'father' 
 
 
#page# 
'print' 
   Das Kommando 'print' beinhaltet den Auftrag an die Task 'PRINTER' die enthal­
   tene(n) Datei(en) auszudrucken. 
 
   Voraussetzung ist natürlich, daß die Druckersoftware ordnungsgemäß benutzt
   wurde, um 'PRINTER' einzurichten. Siehe dazu Systemhandbuch Teil 6. 
 
 
   #on("b")#PROC print (TEXT CONST dateiname) #off("b")# 
   Kopiert die Datei 'dateiname' in die Task 'PRINTER'. 
 
 
   #on("b")#PROC print (THESAURUS CONST th) #off("b")# 
   Kopiert alle Dateien, deren Namen im Thesaurus 'th' enthalten sind, in die Task
   'PRINTER'. 
 
 
   #on("b")#PROC print #off("b")# 
   Kopiert die zuletzt bearbeitete Datei in die Task 'PRINTER'. 
 
 
#page# 
 
4.2.7  Passwortschutz 
 
Der Passwortschutz im EUMEL-System ist in verschiedener Ausprägung möglich.
Einfachste Möglichkeit ist der Schutz einer Task durch ein Passwort. Falls diese Task
nicht Manager ist, können alle Daten und Programme, die nur in dieser Task zur
Verfügung stehen, auch nur vom Besitzer der Task benutzt werden. 
 
Ähnlich kann auch von einer Manager-Task aus der gesamte Zweig unterhalb dieser
Task mit einem Passwort geschützt werden: beispielsweise kann es empfehlenswert
sein, den Systemzweig komplett zu schützen, indem in SYSUR ein entsprechendes
Passwort vereinbart wird. 
 
Ein Umgehen des Passwortschutzes bei Manager-Tasks (durch Einrichten einer
Sohn-Task und 'fetchall') wird durch ein 'begin password' verhindert. 
 
Auch einzelne Dateien lassen sich schützen, indem Lese/Schreibpasswörter für den
Dateitransfer vereinbart werden. 
 
Generell gilt für die Verwendung von Passworten: 
 
-  Passworte, die zu naheliegend gewählt sind (Vorname des Lebenspartners o.ä.)
   sind meistens sinnlos, falls wirklich Datenschutz bezweckt ist. 
 
-  Passworte, die so raffiniert sind, daß sogar ihr Schöpfer sie vergißt, führen zu
   100%igem Datenverlust, da die betroffene Task oder Datei nur noch gelöscht
   werden kann. 
 
-  Die Vereinbarung von "-" als Passwort bewirkt, daß die entsprechende Aktion
   nicht mehr durchgeführt werden kann. Wird z.B. '-' als 'task password'
   eingegeben, so kann die Task nie wieder an ein Terminal gekoppelt werden. 
 
-  Passwörter können geändert werden, indem das entsprechende Kommando noch
   einmal mit dem neuen Passwort gegeben wird. 
 
#page# 
'begin password' 
 
   #on("b")#PROC begin password (TEXT CONST passwort) #off("b")# 
 
   Auf Supervisor-Ebene wird vor Einrichten einer neuen Task als Sohn der Task in
   der das 'begin password' gegeben wurde, dieses erfragt. 
 
   Das Password vererbt sich auf die hinzukommenden Sohn-Tasks. 
 
____________________________________________________________________________ 
 
    #on("b")#SYSUR#off("b")# 
    maintenance : 
    begin password ("alles dicht") 
 
____________________________________________________________________________ 
 
 
bewirkt: 
 
____________________________________________________________________________ 
 
                                           Terminal 2  
 
 
                    EUMEL Version 1.8.1/M 
 
 
        gib supervisor kommando: 
        begin ("sabotage","SYSUR") 
              Passwort:  
 
 
   ESC ? --> help 
   ESC b --> begin("")            ESC h --> halt 
   ESC c --> continue("")         ESC s --> storage info 
   ESC q --> break                ESC t --> task info 
 
 
____________________________________________________________________________ 
 
 
#page# 
'enter password' 
   #on("b")#PROC enter password (TEXT CONST datei, schreibpass, lesepass) 
   #off("b")# 
   Hiermit können ausgewählte Dateien einer Manager-Task geschützt werden. Die
   angegebene Datei wird mit Schreib- und Lesepassword versehen. Die Pass­
   wörter werden in der eigenen Task nicht berücksichtigt. 
 
   Bei einem lesenden Zugriff (fetch) von irgendeiner Task aus auf die entsprechende
   Datei in der Manager-Task muß das Lesepasswort, bei schreibendem Zugriff
   (save/erase) das Schreibpasswort vereinbart sein. 
 
 
____________________________________________________________________________ 
 
    maintenance : 
    enter password ("wichtige datei","sicher","heit") 
 
____________________________________________________________________________ 
 
 
 
 
   #on("b")#PROC enter password (TEXT CONST password) #off("b")# 
   Passwort für den Dateitransfer einstellen. Falls zwei verschiedene Passwörter für
   Lesen und Schreiben vereinbart werden sollen, so sind sie als ein Text durch "/"
   getrennt einzugeben. 
 
____________________________________________________________________________ 
 
    gib kommando : 
    enter password ("sicher/heit") 
 
    gib kommando : 
    save(SOME all) 
 
____________________________________________________________________________ 
#page# 
'family password' 
   #on("b")#PROC family password (TEXT CONST geheim) #off("b")# 
   Einstellen eines Passworts für den Zweig des Systems , der unterhalb der (Mana­
   ger) Task liegt, in der das 'family password' eingegeben wurde. Dabei erhalten
   alle Tasks, die kein Password oder dasselbe wie diese Manager-Task haben, das
   'family password'. Tasks in dem Zweig, die ein eigenes anderes besitzen, behal­
   ten dieses. 
 
____________________________________________________________________________ 
 
   PUBLIC 
 
     Task1 "" 
 
     Task2 family password("fingerweg") 
        Task21 geheim 
        Task22 "" 
 
     Task3 "" 
        Task31 "" 
 
____________________________________________________________________________ 
 
 
 
 
bewirkt: 
 
____________________________________________________________________________ 
   PUBLIC 
 
     Task1 "" 
 
     Task2 fingerweg 
        Task21 geheim 
        Task22 fingerweg 
 
     Task3 "" 
        Task31 "" 
 
____________________________________________________________________________ 
 
 
#page# 
 
'task password' 
 
   #on("b")#PROC task password (TEXT CONST geheim) #off("b")# 
   Einstellen eines Passworts für die Task in der es gegeben wird. Ist eine Task mit
   einem Passwort geschützt, so wird durch den Supervisor nach dem 'continue'-
   Kommando das Passwort angefragt (Entsprechend dem 'begin password'). Nur
   nach Eingabe des richtigen Passworts gelangt man in die gewünschte Task. Das
   Passwort kann durch nochmaligen Aufruf von 'task password' geändert werden,
   z.B. wenn es in regelmäßigen Abständen geändert werden muß, um personenbe­
   zogene Daten zu schützen. 
 
#page# 
 
4.2.8  Das Archiv 
 
Mit dem Terminus 'Archiv' wird beim EUMEL-System ein Diskettenlaufwerk bezeich­
net, das nur Datensicherungsaufgaben dient. Falls ein Rechner eins von zwei vorhan­
denen Diskettenlaufwerk als Arbeitsspeicher benutzt, so wird dieses als Hintergrund
bezeichnet. Falls Sie einen derartigen Rechner benutzen, können Sie der Installa­
tionsanleitung entnehmen, welches Laufwerk welcher Aufgabe zugeordnet ist. 
 
Das #ib#Archiv#ie# übernimmt im EUMEL-System die Verwaltung der langfristigen Daten­
haltung. Das Archiv sollen Sie benutzen, um: 
 
-  Sicherungskopien wichtiger Dateien außerhalb des Rechners zu besitzen; 
 
-  nicht benötigte Dateien außerhalb einer Task zu halten (Speicherplatzersparnis!); 
 
-  Dateien auf andere Rechner zu übertragen. 
 
Das Archiv wird im EUMEL-System durch die Task 'ARCHIVE', die das Disketten­
laufwerk des Rechners verwaltet, realisiert. 
 
- reservieren              :  archive 
 
- freigeben                :  release 
 
- löschen                  :  clear , format 
 
- prüfen                   :  check 
 
#page# 
'archive' 
   #on("b")#PROC archive (TEXT CONST archivname) #off("b")# 
   Reservierung der Task ARCHIVE für den exklusiven Dialog mit der aufrufenden
   Task. 'archivname' wird bei allen folgenden Archivoperationen mit dem der Disket­
   te zugewiesenen (und hoffentlich auf dem Aufkleber vermerkten) Namen abgegli­
   chen. 
 
 
 
'release' 
   #on("b")#PROC release (TASK CONST archive) #off("b")# 
   Nach diesem Kommando kann die Task 'ARCHIVE' mit ihren Leistungen von einer
   anderen Task in Anspruch genommen werden. Falls dieses Kommando nicht
   gegeben wird, aber seit 5 Minuten kein Dialog mit 'archive' stattfand, kann eine
   andere Task durch die Anforderung 'archive("diskettenname")' das Archiv reser­
   vieren. Durch diese Maßnahme wird verhindert, daß ein vergeßlicher Benutzer bei
   einem System mit mehreren Benutzern das Archiv blockiert. 
 
#page# 
 
'clear' 
   #on("b")#PROC clear (TASK CONST archive) #off("b")# 
   Löschen des Disketten-Inhaltsverzeichnisses und Zuweisung des in der Reservie­
   rung eingegebenen Namens. 
 
____________________________________________________________________________ 
 
    gib kommando : 
    archive("name"); #ib#clear#ie# (archive) 
 
____________________________________________________________________________ 
 
 
   Durch die Ausführung des Kommandos erhält die eingelegte Diskette den in der
   Reservierung angegebenen Namen. #on("b")#Das Inhaltsverzeichnis, das sich auf der
   Diskette befindet, wird gelöscht. Damit sind die Daten, die sich eventuell auf
   dieser Diskette befanden, nicht mehr auffindbar#off("b")#. Die Diskette entspricht einer neu
   formatierten Diskette#u#1)#e#. 
 
   Man kann also eine beschriebene Diskette nicht umbenennen, ohne die darauf
   befindlichen Daten zu löschen. 
 
   #foot# 
 
   #u#1)#e# Das Kommando 'format' enthält implizit 'clear'. 
#end# 
 
   Eine Neuformatierung ist demnach bei Wiederverwendung der Diskette nicht
   notwendig. 
 
#page# 
'format' 
   #on("b")#PROC format (TASK CONST archive) #off("b")# 
   Formatieren einer Diskette. Vor der erstmaligen Benutzung einer Archivdiskette
   muß diese formatiert, d.h. in Spuren und Sektoren für die Positionierung des
   Schreib-/Lesekopfes des Diskettenlaufwerks eingeteilt werden, um überhaupt ein
   Beschreiben der Diskette zu ermöglichen. Die Einteilung ist geräteabhängig, häufi­
   ge Formate sind: 
 
              40 Spuren zu je 9 Sektoren (360 K) 
              80 Spuren zu je 9 Sektoren (720 K). 
 
   Die #on("b")#Erst#off("b")#benutzung einer #ib#Archivdiskette#ie# erfordert nach der Reservierung des Ar­
   chivs das Kommando: 
 
____________________________________________________________________________ 
 
    gib kommando : 
    archive("diskname"); 
 
    gib kommando : 
    format (archive); 
 
____________________________________________________________________________ 
 
 
Erst nach einer Kontrollabfrage: 
 
____________________________________________________________________________ 
 
    gib kommando: 
    format (archive) 
 
  Archiv "diskname" formatieren ? (j/n) 
 
____________________________________________________________________________ 
 
 
 
   wird tatsächlich formatiert und die Diskette steht mit dem Namen "diskname" für
   Archivoperationen zur Verfügung. 
 
#page# 
 
   #on("b")#PROC format (INT CONST code, TASK CONST archive) #off("b")# 
   Bei einigen Rechnern ist es möglich, die Formatierung zu variieren. Falls beim
   Formatieren auf einem solchen Rechner ein anderes als das Standardformat
   erzeugt werden soll, so ist die Codierung des gewünschten Formats mitanzuge­
   ben. 
 
 
   Beispiel:    Für ein Gerät mit 5,25 Zoll Disketten wäre z.B. einstellbar: 
                code 0 : Standardformat 
                code 1 : 2D , 40 Spuren , 9 Sektoren 
                code 2 : 2D , 80 Spuren , 9 Sektoren 
                code 3 : HD , 80 Spuren ,15 Sektoren 
 
                'format (archive)' erzeugt ebenso wie 'format (0,archive)' eine
                standardformatierte Diskette, 'format (3,archive)' erzeugt eine High
                Density Formatierung (HD Floppy benutzen!). 
 
#on("b")# 
   ACHTUNG:   Wird eine bereits beschriebene Diskette noch einmal formatiert, so
              sind alle Daten, die auf der Diskette waren, verloren. 
 
              Die Umformatierung einer Diskette (z.B. von 720K auf 360K) auf
              unterschiedlichen Laufwerken kann zu Problemen führen. 
#off("b")# 
#page# 
'check' 
   #on("b")#PROC check (TEXT CONST dateiname, TASK CONST task) #off("b")# 
   Überprüft, ob die Datei 'dateiname' auf dem Archiv lesbar ist. 
 
 
   #on("b")#PROC check (THESAURUS CONST t, TASK CONST task) #off("b")# 
   Überprüft, ob die in dem Thesaurus 't' enthaltenen Dateien auf dem Archiv lesbar
   sind. 
 
 
   Mit diesem Kommando kann nach dem Beschreiben einer Diskette überprüft wer­
   den, ob die Datei(en) lesbar sind. Hierdurch können also verschmutzte oder
   beschädigte Disketten erkannt werden. 
 
 
____________________________________________________________________________ 
 
    gib kommando : 
    save (all , archive) 
 
    gib kommando : 
    check (ALL archive, archive) 
 
____________________________________________________________________________ 
 
#page# 
 
Beispiel: 
 
 
____________________________________________________________________________ 
 
    gib kommando : 
    archive ("neu") 
 
    gib kommando : 
    format (archive) 
 
____________________________________________________________________________ 
 
 
liefert zunächst die Kontollfrage: 
 
____________________________________________________________________________ 
 
    gib kommando : 
    format (archive) 
 
    Archiv "neu" formatieren ? (j/n) 
 
____________________________________________________________________________ 
 
 
Nach Eingabe 'j' 
 
____________________________________________________________________________ 
 
    gib kommando : 
    saveall (archive) 
 
    gib kommando : 
    archive("alt") (* nächste Diskette *) 
 
    gib kommando : 
    fetch(SOME archive ,archive) 
 
____________________________________________________________________________ 
 
 
Der Thesaurus des Archivs wird angezeigt: 
#page# 
____________________________________________________________________________ 
 
  .................alt (100 K belegt von 720 K)...............  
 
 01.02.87   25 K  "handbuch teil 1" 
 01.03.87   23 K  "handbuch teil 2" 
 01.04.87   20 K  "handbuch teil 3" 
 01.05.87   32 K  "handbuch teil 4" 
 
____________________________________________________________________________ 
 
 
 
 
 
Zum Abschluß Archiv freigeben! 
____________________________________________________________________________ 
 
    gib kommando : 
    release(archive) 
 
____________________________________________________________________________ 
#page# 

Fehlermeldungen des Archivs
Versucht man, eine Datei vom Archiv zu holen, kann es vorkommen, daß das Ar­
chiv-System 
 
____________________________________________________________________________ 
 
    gib kommando : 
    fetch ("datei", archive) 
    #ib#Lese-Fehler (Archiv)#ie# 
 
____________________________________________________________________________ 
 
 
 
meldet und den Lese-Vorgang abbricht. Dies kann auftreten, wenn die Floppy
beschädigt oder aus anderen Gründen nicht lesbar ist (z.B. nicht justierte Disket­
ten-Geräte). In einem solchen Fall vermerkt das Archiv-System intern, daß die Datei
nicht korrekt gelesen werden kann. Das sieht man z.B. bei 'list (archive)'. Dort ist der
betreffende Datei-Name mit dem Zusatz 'mit Lese-Fehler' gekennzeichnet. Um
diese Datei trotzdem zu lesen, muß man sie unter ihrem Dateinamen mit dem Zusatz
'mit Lese-Fehler' lesen. 
 
____________________________________________________________________________ 
 
    gib kommando: 
    fetch ("datei mit Lese-Fehler", archive) 
 
____________________________________________________________________________ 
 
 
 
Die Datei wird in diesem Fall trotz Lese-Fehler (Informationsverlust!) vom Archiv
gelesen. 
#page# 

Weitere Fehlermeldungen des Archivs: 
 
 
FEHLER : Lesen unmöglich (Archiv) 
         Die Archiv-Diskette ist nicht eingelegt oder die Tür des Laufwerks ist nicht
         geschlossen. 
         => Diskette einlegen bzw. Tür schließen. 
 
FEHLER : Schreiben unmöglich (Archiv) 
         Die Diskette ist schreibgeschützt. 
         => falls wirklich gewünscht, Schreibschutz entfernen. 
 
FEHLER : Archiv nicht angemeldet 
         Das Archiv wurde nicht angemeldet 
         => 'archive ("name")' geben. 
 
FEHLER : Lese-Fehler (Archiv) 
         Siehe Lesen unmöglich 
 
FEHLER : Schreibfehler (Archiv) 
         Die Diskette kann nicht (mehr) beschrieben werden. 
         => Andere Diskette verwenden. 
 
FEHLER : Speicherengpass 
         Im System ist nicht mehr genügend Platz, um eine Datei vom Archiv zu
         laden. 
         => ggf. Dateien löschen. 
 
FEHLER : RERUN bei Archiv-Zugriff Das System wurde bei einer Archiv-Operation
         durch Ausschalten bzw. Reset unterbrochen. 
 
FEHLER : "dateiname" gibt es nicht 
         Die Datei "dateiname" gibt es nicht auf dem Archiv. 
         => mit 'list(archive)' Archiv prüfen. 
 
FEHLER : Archiv heißt ... 
         Die eingelegte Diskette hat einen anderen als den eingegebenen Archivna­
         men. 
         => Kommando 'archive' mit korrektem Namen geben. 
 
FEHLER : Archiv wird von Task ... benutzt 
         Das Archiv wurde von einem anderen Benutzer reserviert. 
         => Abwarten. 
 
FEHLER : "dateiname" kann nicht geschrieben werden (Archiv voll) 
         Die Datei ist zu groß für die eingelegte Diskette. 
         => Andere Diskette für diese Datei nehmen. 
 
FEHLER : Archiv inkonsistent 
         Die eingelegte Diskette hat nicht die Struktur einer Archiv-Diskette. 
         => 'format (archive)' vergessen. 
 
FEHLER : save/erase wegen Lese-Fehler verboten 
         Bei Archiven mit Lese-Fehler sind Schreiboperationen verboten, weil ein
         Erfolg nicht garantiert werden kann.