PROGRAM LIST(INPUT,OUTPUT,TTY); CONST FF=12; TAB=9; VAR LW,PW,LINENO,PAGENO,I: INTEGER; DIGITS: SET OF CHAR; LINE: ARRAY [0..131] OF CHAR; HDR1,HDR2,AUTHOR,DAT,REV: ARRAY [0..39] OF CHAR; UPPER: BOOLEAN; IOS: SET OF IOSPEC; PROCEDURE READLINE; BEGIN LW := -1; WHILE NOT EOLN DO BEGIN LW:=LW+1; READ(LINE[LW]); END; READLN END; PROCEDURE NEWPAGE; BEGIN PAGE; PAGENO:=PAGENO+1; LINENO := 6; WRITELN(HDR1,HDR2:32,PAGENO:3); WRITELN(AUTHOR,DAT:16,REV:24); WRITELN; WRITELN; WRITELN; IF LINE[0]=CHR(FF) THEN READLINE; END; BEGIN UPPER:=FALSE; PW:=64; IOS:=[SPOOL]; DIGITS:=['0'..'9']; LOOP WRITE(TTY,'LIST>'); BREAK; READLN(TTY); EXIT IF EOF(TTY); READ(TTY,LINE); LW:=0; WHILE (LW<130) AND (LINE[LW]<>'/') DO LW:=LW+1; I:=LW; WHILE LINE[I]='/' DO BEGIN IF (LINE[I+1]='U') AND (LINE[I+2]='C') THEN BEGIN UPPER:=TRUE; I:=I+3; END; IF (LINE[I+1]='-') AND (LINE[I+2]='S') AND (LINE[I+3]='P') THEN BEGIN IOS:=[]; I:=I+4; END; IF (LINE[I+1]='P') AND (LINE[I+2]='W') AND (LINE[I+3]=':') THEN BEGIN PW:=0; I:=I+4; WHILE LINE[I] IN DIGITS DO BEGIN PW:=10*PW+ORD(LINE[I])-48; I:=I+1; END; END; END; FOR I:=LW TO 131 DO LINE[I]:=' '; RESET(INPUT,LINE); IF EOF THEN WRITELN(TTY,'FILE NOT FOUND') ELSE BEGIN REWRITE(OUTPUT,,,,IOS); READLN(HDR1); READLN(HDR2); READLN(AUTHOR); READLN(DAT); READLN(REV); PAGENO:=0; NEWPAGE; AUTHOR:=' '; WHILE NOT EOF DO BEGIN READLINE; IF (LINE[0]=CHR(FF)) OR ((LINE[2]<>CHR(TAB)) AND (LW>2) AND (LINENO>PW-10)) OR (LINENO>PW) THEN NEWPAGE; IF UPPER THEN FOR I:=0 TO LW DO IF LINE[I]>'_' THEN LINE[I]:=CHR(ORD(LINE[I])-32); WRITELN ( LINE : LW+1 ); LINENO := LINENO+1; END END END END.