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;