PACKET spool cmd (* Autor: R. Ruland *)
(* Stand: 01.04.86 *)
DEFINES killer,
first,
start,
stop,
halt,
wait for halt :
LET error nak = 2 ,
entry line code = 23 ,
killer code = 24 ,
first code = 25 ,
start code = 26 ,
stop code = 27 ,
halt code = 28 ,
wait for halt code = 29 ;
DATASPACE VAR ds;
BOUND STRUCT (TEXT entry line, INT index) VAR control msg;
BOUND TEXT VAR error msg ;
INT VAR reply;
INITFLAG VAR in this task := FALSE;
PROC control spool (TASK CONST spool, INT CONST control code,
TEXT CONST question, BOOL CONST leave) :
enable stop;
initialize control msg;
WHILE valid spool entry
REP IF control question THEN control spool entry FI PER;
. initialize control msg :
IF NOT initialized (in this task) THEN ds := nilspace FI;
forget (ds); ds := nilspace; control msg := ds;
control msg. entry line := "";
control msg. index := 0;
say (""13""10"");
. valid spool entry :
call (spool, entry line code, ds, reply);
IF reply = error nak
THEN error msg := ds;
errorstop (error msg);
FI;
control msg. index <> 0
. control question :
say (control msg. entry line);
yes (question)
. control spool entry :
call (spool, control code, ds, reply);
IF reply = error nak
THEN error msg := ds;
errorstop (error msg);
FI;
IF leave THEN LEAVE control spool FI;
END PROC control spool;
PROC killer (TASK CONST spool) :
control spool (spool, killer code, " loeschen", FALSE)
END PROC killer;
PROC first (TASK CONST spool) :
control spool (spool, first code, " als erstes", TRUE)
END PROC first;
PROC start (TASK CONST spool) :
call (stop code, "", spool);
call (start code, "", spool);
END PROC start;
PROC stop (TASK CONST spool) :
call (stop code, "", spool);
END PROC stop;
PROC halt (TASK CONST spool) :
call (halt code, "", spool);
END PROC halt;
PROC wait for halt (TASK CONST spool) :
call (wait for halt code, "", spool);
END PROC wait for halt;
END PACKET spool cmd;