PROCEDURE LINECOUNTER; LABEL TOP; LABEL BOTTOM; VAR FILVAR : TEXT; LINE : STRING [255]; NAME,LINENO,COUNT,I : INTEGER; FILENAME : STRING [14]; NUMBER,PAGE,X : REAL; SCAN,REPLY : CHAR; TYPE ANYSTRING = STRING [255]; PROCEDURE W (MSG:ANYSTRING); BEGIN WRITELN (MSG) END; PROCEDURE SKIP (LINES:INTEGER); VAR I:INTEGER; BEGIN FOR I := 1 TO LINES DO WRITELN END; FUNCTION READREAL (VAR X:REAL):BOOLEAN; VAR I:INTEGER; TEMPSTR:STRING [20]; CH:CHAR; TEMPX:REAL; ERR:INTEGER; BEGIN TEMPSTR := ''; READLN(TEMPSTR); VAL(TEMPSTR,X,ERR); IF ERR<> 0 THEN READREAL:=FALSE ELSE READREAL:=TRUE; END; BEGIN REPEAT TOP: COUNT:=0; CLRSCR; SKIP(2); W(' |--------------------------------------------------------| '); W(' This program counts lines and spaces of documents and '); W(' non-documents to allow formatting of multi-column texts '); W(' for printing. Determine lines/page and divide TOTAL. '); W(' Maximum error is minus one line. W.A.Rhodes 15 Jan 87. '); SKIP(1); W(' COUNT LINES AND DETERMINE PAGES '); W(' -=*=-=*=-=*=-=*=-=*=-=*=-=*=-=*=- '); SKIP(1); W(' Enter Filename To Line-count. '); W(' _________________________ '); GOTOXY(29,13); READLN(FILENAME); IF FILENAME = '' THEN GOTO BOTTOM; {Abort with to main menu.} BEGIN GOTOXY(46,13); W('COUNTING'); ASSIGN(FILVAR,FILENAME); {$I-} RESET(FILVAR) {$I+}; IF IORESULT <> 0 THEN GOTO TOP; WHILE NOT EOF (FILVAR) DO BEGIN {Count lines by searching for hi-byte & cr/lf s } READ (FILVAR,SCAN); IF (SCAN = CHR($8D)) OR (SCAN = CHR($0D)) THEN BEGIN READ (FILVAR,SCAN); IF SCAN = CHR($0A) THEN COUNT := COUNT +1; END; END; CLOSE (FILVAR); GOTOXY(25,15); WRITELN(' LINE COUNT TOTAL = ',COUNT); GOTOXY(25,17); WRITE(' Enter number of lines per page.'); IF NOT READREAL (NUMBER) THEN BEGIN WRITE (^G); GOTO TOP; END ELSE IF NUMBER <> 0.0 THEN PAGE := COUNT / NUMBER; GOTOXY(31,19); WRITELN(' Page Count = ',PAGE:6:2); END; GOTOXY(33,21); W('COUNT AGAIN (Y/N)?'); GOTOXY(50,21); READ (KBD,REPLY); UNTIL UPCASE (REPLY) IN ['N','n']; IF REPLY IN ['N','n'] THEN WRITE (REPLY); BOTTOM: CLRSCR; GOTOXY(29,13); W(' HIT RETURN '); END;