summaryrefslogtreecommitdiff
path: root/system/multiuser/1.7.5/src/canal
diff options
context:
space:
mode:
Diffstat (limited to 'system/multiuser/1.7.5/src/canal')
-rw-r--r--system/multiuser/1.7.5/src/canal227
1 files changed, 227 insertions, 0 deletions
diff --git a/system/multiuser/1.7.5/src/canal b/system/multiuser/1.7.5/src/canal
new file mode 100644
index 0000000..ad0baa8
--- /dev/null
+++ b/system/multiuser/1.7.5/src/canal
@@ -0,0 +1,227 @@
+(* ------------------- VERSION 6 20.05.86 ------------------- *)
+PACKET canal DEFINES (* Autor: J.Liedtke *)
+
+ analyze supervisor command :
+
+
+
+LET command list =
+
+"begin:1.12end:3.0break:4.0continue:5.01halt:7.0
+taskinfo:8.0storageinfo:9.0help:10.0 ",
+
+ supervisor command text =
+
+""6""20""1"ESC ? --> help
+"6""21""1"ESC b --> begin ("""")
+"6""22""1"ESC c --> continue ("""")
+"6""23""1"ESC q --> break
+"6""21""50"ESC h --> halt
+"6""22""50"ESC s --> storage info
+"6""23""50"ESC t --> task info
+"6""8""6"gib supervisor kommando :" ,
+
+ text type = 4 ,
+ ack = 0 ,
+ error nak = 2 ,
+ begin code = 4 ,
+ end code = 5 ,
+ break code = 6 ,
+ halt code = 8 ,
+ password code = 9 ,
+ continue code = 100 ,
+
+ home = ""1"" ;
+
+
+TASK VAR sv ;
+
+DATASPACE VAR ds ;
+
+BOUND STRUCT (TEXT tname, tpass, TASK task, PROCA start proc) VAR sv msg ;
+BOUND TEXT VAR error msg ;
+
+INT VAR command index , number of params , reply ;
+TEXT VAR param 1, param 2 , task password ;
+
+
+ lernsequenz auf taste legen ("b", ""1""8""1""12"begin ("""")"8""8""11"") ;
+ lernsequenz auf taste legen ("c", ""1""8""1""12"continue ("""")"8""8""11"") ;
+ lernsequenz auf taste legen ("q", ""1""8""1""12"break"13"") ;
+ lernsequenz auf taste legen ("h", ""1""8""1""12"halt"13"") ;
+ lernsequenz auf taste legen ("s", ""1""8""1""12"storage info"13"") ;
+ lernsequenz auf taste legen ("t", ""1""8""1""12"task info"13"") ;
+ lernsequenz auf taste legen ("?", ""1""8""1""12"help"13"") ;
+
+PROC analyze supervisor command :
+
+ disable stop ;
+ sv := supervisor ;
+ ds := nilspace ;
+ REP
+ command dialogue (TRUE) ;
+ command pre ;
+ cry if not enough storage ;
+ get command (supervisor command text) ;
+ analyze command (command list, text type,
+ command index, number of params,
+ param1, param2) ;
+ execute command ;
+ PER .
+
+command pre :
+ IF NOT is error
+ THEN wait for terminal; eumel must advertise
+ ELSE forget (ds) ; ds := nilspace
+ FI .
+
+wait for terminal :
+ out (home) .
+
+cry if not enough storage :
+ INT VAR size, used ;
+ storage (size, used) ;
+ IF used > size
+ THEN out (""7"Speicher Engpass!"13""10"") ;
+ FI .
+
+ENDPROC analyze supervisor command ;
+
+PROC execute command :
+
+ enable stop ;
+ SELECT command index OF
+ CASE 1 : begin ("PUBLIC")
+ CASE 2 : begin (param2)
+ CASE 3 : end via canal
+ CASE 4 : break
+ CASE 5 : quiet
+ CASE 6 : continue (param1)
+ CASE 7 : halt
+ CASE 8 : task info (0); eumel must advertise; quiet
+ CASE 9 : storage info; quiet
+ CASE 10 : help; eumel must advertise; quiet
+ OTHERWISE analyze command error
+ ENDSELECT ;
+ IF reply = error nak
+ THEN error msg := ds ;
+ errorstop (CONCR (error msg))
+ FI .
+
+end via canal :
+ IF yes ("Task """ + name (task (channel (myself))) + """ loeschen")
+ THEN eumel must advertise ;
+ call (sv, end code, ds, reply)
+ FI .
+
+break :
+ eumel must advertise ;
+ call (sv, break code, ds, reply) .
+
+halt :
+ call (sv, halt code, ds, reply) .
+
+quiet :
+ call (sv, ack, ds, reply) .
+
+analyze command error :
+ command error ;
+ IF command index = 0
+ THEN errorstop ("kein supervisor kommando")
+ ELIF number of params = 0
+ THEN errorstop ("Taskname fehlt")
+ ELSE errorstop ("Parameter ueberfluessig")
+ FI .
+
+ENDPROC execute command ;
+
+PROC begin (TEXT CONST father name) :
+
+ IF param1 = "-"
+ THEN errorstop ("Name ungueltig")
+ FI ;
+ sv msg := ds ;
+ CONCR (sv msg).tname := param1 ;
+ CONCR (sv msg).tpass := "" ;
+ call (task (father name), begin code, ds, reply) ;
+ IF reply = password code
+ THEN get password ;
+ sv msg := ds ;
+ CONCR (sv msg).tpass := task password ;
+ call (task (father name), begin code, ds, reply)
+ FI ;
+ IF reply = ack
+ THEN continue (param1)
+ FI .
+
+get password :
+ put (" Passwort:") ;
+ get secret line (task password) .
+
+ENDPROC begin ;
+
+PROC continue (TEXT CONST task name) :
+
+ sv msg := ds ;
+ CONCR (sv msg).tname := task name ;
+ CONCR (sv msg).tpass := "" ;
+ call (sv, continue code + channel, ds, reply) ;
+ IF reply = password code
+ THEN get password ;
+ sv msg := ds ;
+ CONCR (sv msg).tpass := task password ;
+ call (sv, continue code + channel, ds, reply)
+ FI .
+
+get password :
+ put (" Passwort:") ;
+ get secret line (task password) .
+
+ENDPROC continue ;
+
+PROC help:
+
+ LET page = ""1""4""
+ ,bell = ""7""
+ ,cr = ""13""
+ ,end mark = ""14""
+ ,begin mark = ""15""
+ ,esc = ""27""
+ ;
+
+ REP
+ out (page) ;
+ show page ;
+ UNTIL is quit command PER .
+
+ show page :
+ putline(begin mark + (31 * ".") + " supervisor help " + (31 * ".") + end mark) ;
+ putline("Hier finden Sie einige Kommandos, die Ihnen den Einstieg ins System er -") ;
+ putline("leichtern sollen:") ;
+ out(""6""05""07"1. Informations-Kommandos") ;
+ out(""6""07""11"storage info physisch belegten Hintergrundplatz melden") ;
+ out(""6""08""11"task info Taskbaum zeigen") ;
+ out(""6""14""07"2. Verbindung zum Supervisor") ;
+ out(""6""16""11"break Task vom Terminal abkoppeln") ;
+ out(""6""17""11"begin(""task"") neue Task `task` einrichten") ;
+ out(""6""18""11"continue(""task"") Task `task` an ein Terminal ankoppeln") ;
+ out(""6""21""01"Näheres: Benutzerhandbuch, Teil 2, Kap. 2") ;
+ out(""6""23""05"Wenn Sie den Hilfe-Modus beenden wollen, tippen Sie die Taste `q`. ") ;
+ out(cr) .
+
+ is quit command :
+ TEXT VAR char ;
+ get char (char) ;
+ IF char = esc
+ THEN get char (char)
+ FI;
+ IF char = "q" COR char = "Q"
+ THEN true
+ ELSE out (bell);
+ FALSE
+ FI.
+
+END PROC help ;
+
+ENDPACKET canal ;
+