PACKET system info DEFINES (* Autor: J.Liedtke *) (* Stand: 10.09.84 *) task info , task status , storage info , help : LET supervisor mode = 0 , simple mode = 1 , status mode = 2 , storage mode = 3 , ack = 0 , channel field = 4 , prio field = 6 , cr lf = ""13""10"" , cr = ""13"" , page = ""1""4"" , begin mark= ""15"" , end mark = ""14"" , bell = ""7"" , esc = ""27"" ; TEXT VAR task name , record ; DATASPACE VAR ds := nilspace ; PROC task info : task info (simple mode) ENDPROC task info ; PROC task info (INT CONST mode) : open list file ; task info (mode, list file) ; show task info . open list file : forget (ds) ; ds := nilspace ; FILE VAR list file := sequential file (output, ds) . show task info : IF mode <> supervisor mode THEN show (list file) ELSE open editor (list file, FALSE) ; edit (groesster editor, "q", PROC (TEXT CONST) no orders) FI . ENDPROC task info ; PROC task info (INT CONST mode, FILE VAR list file) : access catalogue ; IF mode > simple mode THEN generate head FI ; list tree (list file, supervisor,0, mode) . generate head : put (list file, date) ; put (list file, " ") ; put (list file, time of day) ; put (list file, " ") ; IF mode = storage mode THEN put (list file, "K ") FI ; put (list file, " CPU PRIO CHAN STATUS") ; line (list file) . ENDPROC task info ; PROC task info (INT CONST level, fremdstation): IF fremdstation = station (myself) THEN task info (level) ELSE disable stop; DATASPACE VAR x:= nilspace; BOUND INT VAR l := x; l := level; call (collector, 256+fremdstation, x, rtn); INT VAR rtn; IF rtn = ack THEN FILE VAR ti:= sequential file (modify, x) ; show (ti) ELSE forget (x) ; errorstop ("Station " + text (fremdstation) + " antwortet nicht") FI ; forget (x) FI END PROC task info; PROC no orders (TEXT CONST ed kommando taste) : IF ed kommando taste = "q" THEN quit ELSE out (""7"") FI ENDPROC no orders ; PROC list tree (FILE VAR list file, TASK CONST first son, INT CONST depth, mode) : enable stop ; TASK VAR actual task := first son ; WHILE NOT is niltask (actual task) REP list actual task ; list tree (list file, son (actual task), depth+1, mode) ; actual task := brother (actual task) PER . list actual task : record := "" ; generate layout and task name ; IF mode > simple mode THEN tab to info position ; show storage if wanted ; record CAT cpu time of (actual task) ; record CAT prio of actual task ; record CAT channel of actual task ; record CAT " " ; record CAT status of (actual task) FI ; putline (list file, record) . generate layout and task name : INT VAR i ; FOR i FROM 1 UPTO depth REP record CAT " " PER ; task name := name (actual task) ; record CAT task name . tab to info position : record := subtext (record, 1, 40) ; FOR i FROM LENGTH record + 1 UPTO 40 REP record CAT "." PER ; record CAT " " . show storage if wanted : IF mode = storage mode THEN record CAT text (storage (actual task), 5) ; record CAT " " FI . prio of actual task : text (pcb (actual task, prio field),4) . channel of actual task : INT CONST channel := pcb (actual task, channel field) ; IF channel = 0 THEN " -" ELSE text (channel,4) FI . ENDPROC list tree ; TEXT PROC cpu time of (TASK CONST actual task) : disable stop ; TEXT VAR result := subtext (time (clock (actual task), 12), 1, 10) ; IF is error THEN clear error ; result := 10 * "*" FI ; result ENDPROC cpu time of ; TEXT PROC status of (TASK CONST actual task) : SELECT status (actual task) OF CASE 0 : "-busy-" CASE 1 : "i/o" CASE 2 : "wait" CASE 4 : "busy-blocked" CASE 5 : "i/o -blocked" CASE 6 : "wait-blocked" OTHERWISE "--dead--" END SELECT . ENDPROC status of ; PROC task status : task status (myself) ENDPROC task status ; PROC task status (TEXT CONST task name) : task status (task (task name)) ENDPROC task status ; PROC task status (TASK CONST actual task) : IF exists (actual task) THEN put status of task ELSE errorstop ("Task nicht vorhanden") FI . put status of task : line ; put (date); put (time of day) ; put (" TASK:") ; put (name (actual task)) ; line (2) ; put ("Speicher:"); put (storage (actual task)); putline ("K"); put ("CPU-Zeit:"); put (cpu time of (actual task)) ; line; put ("Zustand :"); write (status of (actual task)); put (", (prio"); write (text (pcb (actual task, prio field))); put ("), Kanal") ; IF channel (actual task) = 0 THEN put ("-") ELSE put (channel (actual task)) FI ; line . ENDPROC task status ; PROC storage info : INT VAR size, used ; storage (size, used) ; out (""13""10" ") ; put (used) ; put ("K von") ; put (size plus reserve) ; putline ("K sind belegt!") . size plus reserve : int (real (size + 24) * 64.0 / 63.0 ) . ENDPROC storage info ; PROC help : IF NOT exists ("help") THEN get help file FI ; FILE VAR f := sequential file (modify, "help") ; help (f) . get help file : TEXT VAR old std param := std ; IF exists ("help", father) THEN fetch ("help") ELSE fetch ("help", public) FI ; last param (old std param) . ENDPROC help ; PROC help (FILE VAR help file) : initialize help command ; REP out (page) ; to paragraph ; show paragraph ; get show command UNTIL is quit command PER . initialize help command : TEXT VAR help command := getcharety ; IF help command = "" THEN help command := "0" FI . to paragraph : col (help file, 1) ; to line (help file, 1) ; downety (help file, "#" + help command + "#") ; IF eof (help file) THEN to line (help file, 1) ; out (bell) FI . show paragraph : show headline ; WHILE NOT end of help subfile REP show help line PER ; show bottom line . show headline : out (begin mark) ; INT CONST dots := (x size - len (help file) - 5) DIV 2 ; dots TIMESOUT "." ; exec (PROC show line, help file, 4) ; dots TIMESOUT "." ; out (end mark) ; down (help file) . show help line : out (cr lf) ; exec (PROC show line, help file, 1) ; down (help file) . show bottom line : cursor (5, y size) ; exec (PROC show line, help file, 3) ; out (cr) . get show command : TEXT VAR char ; get char (char) ; IF char = esc THEN get char (char) FI ; IF char >= " " THEN help command := char ELSE out (bell) FI . end of help subfile : pos (help file,"##",1) <> 0 OR eof (help file) . is quit command : help command = "q" OR help command = "Q" . ENDPROC help ; PROC show line (TEXT CONST line, INT CONST from) : outsubtext (line, from, x size - from) ENDPROC show line ; ENDPACKET system info ;