PACKET multi user plotter: (* Autor : Rudolf Ruland *) (* Stand : 24.03.86 *) (*Ă„nderung: 09.09.86/15:32 *) INT VAR c; put ("gib Plotterkanal : "); get (c); server channel (c); station only (FALSE) ; spool duty ("Ausgabe mit dem Plotter"); spool control task (myself); LET ack = 0 , fetch code = 11 , param fetch code = 21 , picfile type = 1103 ; INT VAR reply, old heap size, sender station; TEXT VAR picfile name, userid, password, sendername; PICFILE VAR picfile ; DATASPACE VAR ds, picfile ds; BOUND STRUCT (TEXT picfile name, userid, password, sendername, INT station) VAR msg; BOUND TEXT VAR error msg ; spool manager (PROC plotter); PROC plotter : disable stop ; command dialogue (FALSE); ds := nilspace; picfile ds := nilspace; continue (server channel) ; check error ("Kanal belegt"); old heap size := heap size ; REP execute plot ; IF is error THEN put error; clear error; FI ; IF heap size > old heap size + 4 THEN collect heap garbage ; old heap size := heap size FI PER ENDPROC plotter ; PROC execute plot : enable stop ; forget (picfile ds) ; picfile ds := nilspace ; call (father, fetch code, picfile ds, reply) ; IF reply = ack CAND type (picfile ds) = picfile type THEN get picfile params; plot picfile FI ; . get picfile params : forget (ds); ds := nilspace; call (father, param fetch code, ds, reply); IF reply <> ack THEN error msg := ds; errorstop (error msg); ELSE msg := ds; picfile name := msg. picfile name; userid := msg. userid; password := msg. password; sendername := msg. sender name; sender station := msg. station; FI; . plot picfile : picfile := picfile ds; plotter (picfile) . ENDPROC execute plot ; PROC check error (TEXT CONST message) : IF is error THEN clear error; rename myself (message); IF is error THEN clear error; end (myself) FI; pause (18000); end (myself); FI; END PROC check error; ENDPACKET multi user plotter ;