PROGRAM PGLST; {Format words compactly for printing. Copyright 1979 by C. E. Duncan. Revised 13:35 1980 December 15.} CONST MCL = 80; {MAXIMUM CHARACTERS PER LINE} LPP = 60; {LINES PER PAGE} TYPE $STRING0 = STRING 0; $STRING255 = STRING 255; VAR LL: INTEGER; {ITEM LENGTH} NPL: INTEGER; {ITEMS PER LINE} X: INTEGER; {COUNT ITEMS PROCESSED} WRDFL: TEXT; {INPUT FILE} PRNFL: TEXT; {OUTPUT PRINT FILE} A: ARRAY[1..LPP] OF STRING 218; {OUTPUT PAGE IMAGE} FUNCTION LENGTH(X:$STRING255):INTEGER; EXTERNAL; FUNCTION INDEX(X,Y:$STRING255):INTEGER; EXTERNAL; PROCEDURE SETLENGTH(VAR X:$STRING0; Y:INTEGER); EXTERNAL; PROCEDURE INIT; VAR IFLN: STRING 14; {INPUT FILE CP/M NAME} OULN: STRING 14; {OUTPUT FILE CP/M NAME} BEGIN WRITE('Name of file to be listed: '); READLN(IFLN); WRITE('Output print file name: '); READLN(OULN); WRITE('Item length: '); READLN(LL); LL := LL + 2; X := 0; RESET(IFLN,WRDFL); REWRITE(OULN,PRNFL); NPL := (MCL + 2) DIV LL; {ITEMS PER LINE} LL := LL - 2 END; {INIT} PROCEDURE FILLPG; VAR I,R,S,U,V,W: INTEGER; WRD: STRING 218; BEGIN FOR W := 1 TO LPP {CLEAR ARRAY} DO SETLENGTH( A[W], 0 ) {OD}; V := 1; WHILE (V <= NPL) AND (NOT EOF(WRDFL)) DO BEGIN S := (V-1)*(LL+2); U := 1; WHILE (U <= LPP) AND (NOT EOF(WRDFL)) DO BEGIN READLN(WRDFL,WRD); X := X + 1; IF V = 1 THEN A[U] := WRD ELSE BEGIN R := S - LENGTH(A[U]); FOR I := 1 TO R DO APPEND(A[U],' ') {OD}; APPEND(A[U],WRD) END {FI}; U := U + 1 END {OD}; V := V + 1 END {OD} END; {FILLPG} PROCEDURE LSTPG; VAR I: INTEGER; BEGIN I := 1; WHILE (I <= LPP) DO BEGIN IF ( LENGTH ( A[I] ) <> 0 ) THEN WRITELN(PRNFL,A[I]) {FI}; I := I + 1 END {OD} END; {LSTPG} BEGIN INIT; WHILE NOT EOF(WRDFL) DO BEGIN FILLPG; LSTPG END {OD}; WRITELN(PRNFL,X,' items.'); WRITELN(X,' items processed') END. .