{$T-} const NL=CHR(10); {new line} FF=CHR(12); {form feed} HT=CHR(9); {horizontal tab} CR=CHR(13); DEL=CHR(127); const LASTLINE=59; LASTCHAR=64; var C,L1,L2:INTEGER; CH:CHAR; FIRSTCOL:array[0..LASTLINE] of record LINE:array[0..LASTCHAR] of CHAR end; FILENAME: array[1..16] of CHAR; INFILE,LISTING: TEXT; begin REWRITE(LISTING,'OUTPUT.LST '); WRITE(OUT,NL,CR,'#'); BREAK(OUT); C:=0; repeat READ(INP,CH); if CH#DEL then begin C := C+1; FILENAME[C]:=CH end else if C # 0 then begin CH:=FILENAME[C]; C:=C-1; WRITE(OUT,'/',CH,'/'); BREAK(OUT) end; until (CH=NL) ! (CH=CR); while C<=16 do begin FILENAME[C]:=' '; C:=C+1 end; RESET(INFILE,FILENAME); READ(INFILE,CH); while ~EOF(INFILE) do begin L1:=0; WRITE(LISTING,NL,NL,NL); repeat C:=0; { with FIRSTCOL[L1] do} begin repeat READ(INFILE,CH); if CH>=' ' then begin FIRSTCOL[L1].LINE[C]:=CH; C:=C+1 end else if CH=HT then repeat FIRSTCOL[L1].LINE[C]:=' '; C:=C+1 until (C mod 8)=0 until (CH=NL) ! (CH=FF) ! (C>LASTCHAR) ! EOF(INFILE); if (CH=NL) & (INFILE@=NL) then GET(INFILE); { for C:=C to LASTCHAR do LINE[C]:=' '} while C<= LASTCHAR do begin FIRSTCOL[L1].LINE[C]:=' '; C:=C+1 end end; L1:=L1+1 until (L1>LASTLINE) ! (CH=FF) ! EOF(INFILE); if CH=FF then READ(INFILE,CH); while L1<=LASTLINE do begin C:=0; while C<=LASTCHAR do begin FIRSTCOL[L1].LINE[C]:=' '; C:=C+1 end; L1:=L1+1 end; L1:=L1-1; L2:=0; while L2=' ' then begin WRITE(LISTING,CH); C:=C+1 end else if CH=HT then repeat WRITE(LISTING,' '); C:=C+1 until (C mod 8)=0 until (CH=NL) ! (C>LASTCHAR) ! (CH=FF) ! EOF(INFILE) end; WRITE(LISTING,NL); L2:=L2+1 end; WRITE(LISTING,FF) end; WRITE(OUT,CR,NL,'processing of ',FILENAME,' complete.',NL,CR); BREAK(OUT) end.