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
|
PACKET operator DEFINES (* Autor: Thomas Berlage *)
(* Stand: 15.01.88 *)
operator :
LET
p neuer taskname = #2001#
"Weitermachen in Bereich:",
p name vater = #2002#
"Unter welchem Vater:",
t bereich = #2003#
""15"Bereich "14"",
t datum = #2004#
""15"Datum "14"",
f ganz abkoppeln = #2005#
"Arbeitsbereich ganz abkoppeln",
f arbeitsbereich neu einrichten = #2006#
"Arbeitsbereich existiert nicht. Neu einrichten",
f trotzdem abschalten = #2007#
"Nicht auf Terminal 1. Trotzdem abschalten",
kb von = #2008#
" KB von ",
sind belegt = #2009#
" KB sind belegt.",
p taskname = #2010#
"Name des Arbeitsbereichs:",
existiert nicht als task = #2011#
" ist kein Name eines Bereiches",
t loeschen = #2012#
" löschen",
t speicher = #2013#
"Speicher:",
t cpu zeit = #2014#
" KB CPU-Zeit : ",
t zustand = #2015#
"Zustand : ",
t prio = #2016#
" Priorität: ",
t kanal = #2017#
" Kanal: ",
t busy = #2018#
"Arbeit",
t io = #2019#
"EinAus",
t wait = #2020#
"Warten",
t busy blocked = #2021#
"B(Arb)",
t io blocked = #2022#
"B(E/A)",
t wait blocked = #2023#
"B(Wrt)",
t dead = #2024#
">>TOT<",
t gestoppt = #2025#
"Druckertreiber gestoppt.",
t gestartet = #2026#
"Druckertreiber gestartet.",
t angehalten = #2027#
"Druckertreiber angehalten.",
f auf anhalten warten = #2028#
"Auf Anhalten des Treibers warten",
t drucker = #2029#
""15"Drucker "14"",
p neuer printer = #2030#
"Welche Druckertask soll eingestellt werden:",
t bitte warten = #2031#
"Bitte warten .. ";
FENSTER VAR links, rechts;
fenster initialisieren (links);;
fenstergroesse setzen (links, 1, 2, 16, 22);
fenster initialisieren (rechts);
fenstergroesse setzen (rechts, 17, 2, 63, 22);
dialogfenster (rechts);
TEXT VAR
druckertask := "PRINTER";
PROC operator :
TASK VAR letzte task;
TEXT VAR neuer name := "";
continue (niltask);
REP
letzte task := continued from;
page; bildschirm neu;
disable stop;
operatormenue;
umschalten auf letzte task
END REP .
operatormenue :
menue anbieten (ROW 6 TEXT :
("OPERATOR.Abschalten", "OPERATOR.Systemzustand", "OPERATOR.Drucker",
"OPERATOR.Netz", "OPERATOR.Konfiguration", ""),
links, TRUE, PROC (INT CONST, INT CONST) op interpreter) .
umschalten auf letzte task :
BOOL VAR first try;
IF exists (letzte task) CAND NOT (letzte task = supervisor) THEN
first try := TRUE;
continue (letzte task)
ELSE
first try := FALSE
END IF;
IF is error OR NOT first try THEN
REP
IF is error THEN fehler ausgeben END IF;
nach neuer task fragen;
zurueck in task
UNTIL NOT is error END REP
END IF .
nach neuer task fragen :
REP
editget (p neuer taskname, neuer name, "", "GET/neuer taskname");
UNTIL taskname akzeptiert END REP .
taskname akzeptiert :
IF neuer name = "" THEN
ganz abkoppeln
ELSE
exists task (neuer name) COR neu einrichten
END IF .
zurueck in task :
IF neuer name = "" THEN
continue (niltask)
ELIF exists task (neuer name) THEN
continue (task (neuer name))
ELSE
TEXT VAR vater := "";
editget (p name vater, vater, "", "GET/name vatertask");
begin (neuer name, vater);
continue (task (neuer name))
END IF .
ganz abkoppeln :
ja (f ganz abkoppeln, "JA/ganz") .
neu einrichten :
ja (f arbeitsbereich neu einrichten, "JA/task einrichten") .
END PROC operator;
PROC op interpreter (INT CONST menue nr, f nr) :
enable stop;
SELECT menuenr OF
CASE 0 : sperren setzen
CASE 1 : abschalten inter
CASE 2 : systemzustand inter
CASE 3 : drucker inter
CASE 4 : netz inter
CASE 5 : konfiguration inter
END SELECT;
IF f nr = -1 THEN dialogfenster loeschen END IF .
sperren setzen :
fusszeile (t bereich, "", 35, t datum, 64);
fussteil (1, name (myself));
fussteil (3, date) .
abschalten inter :
SELECT f nr OF
CASE 1 : abschalten
CASE 2 : (* nach DOS *) ni
CASE 3 : page; bildschirm neu; set date; dialogfenster loeschen
CASE 4 : page; bildschirm neu; save system
END SELECT .
abschalten :
IF channel = 1 COR trotzdem abschalten THEN
page;
cursor (20, 11); out (t bitte warten);
cursor (20, 13);
shutup;
fenster veraendert (links);
push (""27"q")
END IF .
trotzdem abschalten :
ja (f trotzdem abschalten, "JA/trotz shutup") .
systemzustand inter :
SELECT f nr OF
CASE 1 : bereichsuebersicht
CASE 2 : speicherbelegung
CASE 3 : fremder taskstatus
CASE 4 : zustandsuebersicht
CASE 5 : task loeschen
END SELECT .
bereichsuebersicht :
bitte warten;
disable stop;
DATASPACE VAR list ds := nilspace;
FILE VAR f := sequential file (output, list ds);
task info (1, f);
IF NOT is error THEN
show (f); bildschirm neu
END IF;
forget (list ds);
enable stop;
dialogfenster loeschen .
speicherbelegung :
INT VAR size, used;
storage (size, used);
size := int (real (size + 24) * 64.0 / 63.0);
dialog (text (used) + kb von + text (size) + sind belegt) .
fremder taskstatus :
TEXT VAR taskname := "";
editget (p taskname, taskname, "GET/Taskname", "");
TASK VAR status task := task (task name);
IF exists (status task) THEN
task zustand (status task)
ELSE
errorstop ("""" + taskname + """" + existiert nicht als task)
END IF .
zustandsuebersicht :
bitte warten; task info (3); bildschirm neu; dialogfenster loeschen .
task loeschen :
taskname := "";
editget (p taskname, taskname, "GET/Taskname", "");
IF ja ("""" + taskname + """" + t loeschen,
"JA/Task loeschen", FALSE) THEN
end (task (taskname))
END IF .
drucker inter :
SELECT f nr OF
CASE 0 : druckertask in fuss
CASE 1 : start (task (druckertask)); dialog (t gestartet)
CASE 2 : stop (task (druckertask)); dialog (t gestoppt)
CASE 3 : halt kommando
CASE 4 : list (task (druckertask)); bildschirm neu; dialogfenster loeschen
CASE 5 : first (task (druckertask))
CASE 6 : killer (task (druckertask))
CASE 7 : druckertask setzen
OTHERWISE ggf druckertask aus fuss
END SELECT .
druckertask in fuss :
fussteil (2, t drucker, druckertask) .
halt kommando :
IF ja (f auf anhalten warten, "JA/halt warten", FALSE) THEN
wait for halt (task (druckertask))
ELSE
halt (task (druckertask))
END IF;
dialog (t angehalten) .
druckertask setzen :
TEXT VAR neuer printer := druckertask;
editget (p neuer printer, neuer printer, "", "GET/neuer printer");
TASK CONST dummy := task (neuer printer);
druckertask := neuer printer;
fussteil (2, druckertask) .
ggf druckertask aus fuss :
IF f nr = -1 THEN
fussteil (2, "", "")
END IF .
netz inter :
SELECT f nr OF
CASE 1 : (* start *) ni
CASE 2 : (* stop *) ni
CASE 3 : (* zustand *) ni
CASE 4 : (* list (net.io) *) ni
END SELECT .
konfiguration inter :
SELECT f nr OF
CASE 1 : konfigurieren
CASE 2 : (* drucker installieren *) ni
CASE 3 : (* netz installieren *) ni
CASE 4 : (* anwendung installieren *) ni
CASE 5 : (* systemprogramm installieren *) ni
END SELECT .
konfigurieren :
THESAURUS VAR conf := ALL /"configurator";
page; bildschirm neu;
forget quiet (conf);
fetch (conf, /"configurator");
configurate;
line;
save ("configuration", /"configurator");
forget quiet (conf);
dialogfenster loeschen .
END PROC op interpreter;
PROC task zustand (TASK CONST status task) :
dialog (t speicher + speicher + t cpu zeit + cpu zeit);
out (t zustand); out status; out (t prio); out prio;
out (t kanal); out kanal .
speicher :
text (storage (status task), 5) .
cpu zeit :
disable stop;
TEXT VAR result := subtext (time (clock (status task), 12), 1, 10);
IF is error THEN
clear error; result := "**********"
END IF;
result .
out status :
SELECT status (status task) OF
CASE 0 : out (t busy)
CASE 1 : out (t io)
CASE 2 : out (t wait)
CASE 4 : out (t busy blocked)
CASE 5 : out (t io blocked)
CASE 6 : out (t wait blocked)
OTHERWISE out (t dead)
END SELECT .
out prio :
out (text (pcb (status task, 6))) .
out kanal :
IF channel (status task) = 0 THEN
out (" -")
ELSE
out (text (channel (status task), 2))
END IF .
END PROC task zustand;
PROC forget quiet (TEXT CONST datei) :
forget (datei, quiet)
END PROC forget quiet;
PROC forget quiet (THESAURUS CONST t) :
do (PROC (TEXT CONST) forget quiet, t)
END PROC forget quiet;
PROC bitte warten :
cursor (1, 1);
out (t bitte warten);
out (""5"")
END PROC bitte warten;
PROC ni :
dialog ("Zur Zeit nicht implementiert.")
END PROC ni;
END PACKET operator;
PACKET operator monitor
DEFINES
monitor :
PROC monitor :
disable stop;
operator
END PROC monitor;
END PACKET operator monitor;
|