summaryrefslogtreecommitdiff
path: root/app/flint/0.4/src/operator
blob: 029b32c3e1b9a6cbc4538dcce5ca3c45f1fca15a (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
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;