(NUMBER) "############# # JOBINPUT # #############" CONST PAGELENGTH = 512; TYPE PAGE = ARRAY (.1..PAGELENGTH.) OF CHAR; CONST LINELENGTH = 132; TYPE LINE = ARRAY (.1..LINELENGTH.) OF CHAR; FUNCTION PREFIXLENGTH: INTEGER; PROCEDURE READPREFIX(PAGENO: INTEGER; VAR BLOCK: PAGE); PROCEDURE READLINE(VAR TEXT: LINE); PROCEDURE WRITESTREAM(BLOCK: PAGE); PROGRAM JOBINPUT; CONST NL = '(:10:)'; FF = '(:12:)'; EM = '(:25:)'; TYPE HEADTYPE = ARRAY (.1..2, 1..2, 1..2, 1..10.) OF CHAR; TAILTYPE = ARRAY (.1..52.) OF CHAR; IMAGE = RECORD HEAD: HEADTYPE; TAIL: TAILTYPE END; VAR BLANK, CARD: LINE; CARDLENGTH: INTEGER; BLOCK: PAGE; BLOCKLENGTH, INITLENGTH: INTEGER; PROCEDURE INITPREFIX; BEGIN READPREFIX(PREFIXLENGTH, BLOCK); INITLENGTH:= 0; WHILE BLOCK(.INITLENGTH + 1.) <> EM DO INITLENGTH:= INITLENGTH + 1; END; PROCEDURE COPYPREFIX; VAR PAGENO: INTEGER; BEGIN FOR PAGENO:= 1 TO PREFIXLENGTH - 1 DO BEGIN READPREFIX(PAGENO, BLOCK); WRITESTREAM(BLOCK); END; READPREFIX(PREFIXLENGTH, BLOCK); BLOCKLENGTH:= INITLENGTH; END; PROCEDURE INITBLANK; VAR CHARNO: INTEGER; BEGIN FOR CHARNO:= 1 TO LINELENGTH DO BLANK(.CHARNO.):= ' '; END; FUNCTION CARDLIMIT(CARD, BLANK: UNIV IMAGE): INTEGER; VAR I, J, K: INTEGER; BEGIN IF CARD.HEAD(.2.) <> BLANK.HEAD(.2.) THEN I:= 2 ELSE I:= 1; IF CARD.HEAD(.I, 2.) <> BLANK.HEAD(.I, 2.) THEN J:= 2 ELSE J:= 1; IF CARD.HEAD(.I, J, 2.) <> BLANK.HEAD(.I, J, 2.) THEN K:= 2 ELSE IF CARD.HEAD(.I, J, 1.) <> BLANK.HEAD(.I, J, 1.) THEN K:= 1 ELSE K:= 0; CARDLIMIT:= ((PRED(I)*2 + PRED(J))*2 + K)*10; END; PROCEDURE READCARD; BEGIN READLINE(CARD); CARDLENGTH:= CARDLIMIT(CARD, BLANK); IF CARDLENGTH > 0 THEN WHILE CARD(.CARDLENGTH.) = ' ' DO CARDLENGTH:= PRED(CARDLENGTH); IF (CARDLENGTH = 1) & (CARD(.1.) = '#') THEN CARD(.1.):= EM ELSE BEGIN CARDLENGTH:= SUCC(CARDLENGTH); CARD(.CARDLENGTH.):= NL; END; END; PROCEDURE COPYCARDS; VAR BLOCKSPACE, I: INTEGER; BEGIN REPEAT READCARD; BLOCKSPACE:= PAGELENGTH - BLOCKLENGTH; IF BLOCKSPACE < CARDLENGTH THEN BEGIN FOR I:= 1 TO BLOCKSPACE DO BLOCK(.BLOCKLENGTH + I.):= CARD(.I.); WRITESTREAM(BLOCK); BLOCKLENGTH:= CARDLENGTH - BLOCKSPACE; FOR I:= 1 TO BLOCKLENGTH DO BLOCK(.I.):= CARD(.BLOCKSPACE + I.); END ELSE BEGIN FOR I:= 1 TO CARDLENGTH DO BLOCK(.BLOCKLENGTH + I.):= CARD(.I.); BLOCKLENGTH:= BLOCKLENGTH + CARDLENGTH; END UNTIL BLOCK(.BLOCKLENGTH.) = EM; WRITESTREAM(BLOCK); BLOCKLENGTH:= 0; END; BEGIN INITPREFIX; INITBLANK; REPEAT COPYPREFIX; COPYCARDS; UNTIL FALSE; END. .BLOCKLENGTH + I.):= CARD(.I.); WRITESTREAM(BLOCK); BLOCKLENGTH:= CARDLENGTH - BLOCKSPACE; FOR I:= 1 TO BLOCKLENGTH DO BLOCK(.I.):= CARD(.BLOCKSPACE + I.); END ELSE BEGIN FOR I:= 1 TO CARDLENGTH DO BLOCK(.BLOCKLENGTH + I.):= CARD(.I.); BLOCKLENGTH:= BLOCKLENGTH + CARDLENGTH; END UNTIL BLOCK(.BLOCKLENGTH.) = EM; WRITESTREAM(BLOCK); BLOCKL