PACKET purge DEFINES purge : TEXT VAR task name, record, file name, dummy ; FILE VAR permit ; PROC purge : IF exists ("permitted tasks") THEN access catalogue ; permit := sequential file (input, "permitted tasks") ; say (""10""13"TASKS :"10""10""13"") ; IF myself < supervisor THEN purge son tasks (brother (supervisor)) ELSE purge son tasks (myself) FI FI ; IF exists ("permitted files") THEN permit := sequential file (input, "permitted files") ; say (""10""13"DATEIEN :"10""10""13"") ; purge files FI ENDPROC purge ; PROC purge son tasks (TASK CONST father task) : TASK VAR actual task := son (father task) ; WHILE NOT is niltask (actual task) REP purge son tasks (actual task) ; IF NOT actual task permitted THEN erase actual task FI ; actual task := brother (actual task) END REP . erase actual task : say ("""") ; say (task name) ; say ("""") ; IF yes (" loeschen") THEN end (actual task) FI . actual task permitted : task name := name (actual task) ; reset (permit) ; WHILE NOT eof (permit) REP getline (permit, record) ; IF task name = record THEN LEAVE actual task permitted WITH TRUE FI END REP ; FALSE . ENDPROC purge son tasks ; PROC purge files : begin list ; get list entry (file name, dummy) ; WHILE file name <> "" REP IF NOT file permitted THEN forget (file name) FI ; get list entry (file name, dummy) END REP . file permitted : IF file name = "permitted tasks" OR file name = "permitted files" THEN LEAVE file permitted WITH TRUE FI ; reset (permit) ; WHILE NOT eof (permit) REP getline (permit, record) ; IF file name = record THEN LEAVE file permitted WITH TRUE FI END REP ; FALSE . ENDPROC purge files ; ENDPACKET purge ;