{  $PAGESIZE:80,$LIST+, $DEBUG+, $BRAVE+, $LINESIZE:132, $OCODE+   }
{  $NILCK+, $MATHCK+, $RANGECK+, $INITCK+, $INDEXCK+, $ENTRY+    }
{  $LINE+, $RUNTIME+, $SYMTAB+, $WARN+, $GOTO+     }
{  $TITLE:'WCOUNT.PAS  (VOL-ID:  MSB-PASSCRATCH)  --  WRDCOUNT PROG'}
{  $SUBTITLE:'PROGRAM FOR CHECKING CONTENTS OF ASCII FILES'}
{  $MESSAGE:'PASCAL - COMPILATION OPTIONS SET'     }
{  $MESSAGE:'SYSTEM - COMPILATION BEGINS'          }

{ $LIST-}
{ $INCLUDE:'A:FILKQQ.INC'}
{ $INCLUDE:'A:FILUQQ.INC'}
{ $LIST+}

PROGRAM WRDCNT (INPUT,OUTPUT);  USES FILUQQ,FILKQQ;

CONST
  WRDLEN   = 20; {MAX WRD LENGTH}
  BLANK    = ' ';   {A BLANK CHAR}
  PGLINES  = 66;


TYPE
  ALFASET = SET OF CHAR;

VAR
  NEW_WRD :  LSTRING(WRDLEN);
  SOURCE   :  TEXT;    {SOURCE FILE}
  PGCNT, LNCNT,  WDCNT, CHCNT : WORD;
  ALPHA : ALFASET;
  CMDLINE : LSTRING (80); {80 CHARS FOR THE COMMAND LINE ENOUGH}
  CURTIME, CURDATE : STRING(10);

PROCEDURE DATE (VAR S:STRING); EXTERN;    {LIBR FUNCTION}
PROCEDURE TIME (VAR S:STRING); EXTERN;    {LIBR FUNCTION}
PROCEDURE ENDXQQ; EXTERN;

PROCEDURE INITIALIZE;
VAR
  ERROR : WORD;
BEGIN
  ALPHA  := ['A'..'Z','a'..'z', '_', '$'];
  TIME (CURTIME);
  DATE (CURDATE);
  CMDLINE := NULL;
  SOURCE.TRAP := TRUE;
  ERROR := PPMUQQ (0,ADR NULL,CMDLINE);
  IF CMDLINE = NULL THEN    {FILENAME WAS NOT GIVEN ON COMMAND LINE}
     BEGIN
        WRITE (OUTPUT, 'MSB>  FILE? ');
        SOURCE.TRAP := TRUE;
        READFN (INPUT, SOURCE);    {READ AND ASSIGN FILENAME}
     END
  ELSE   {ASSIGN THE NAME BY HAND}
     ASSIGN (SOURCE,CMDLINE);
  RESET (SOURCE);
  IF SOURCE.ERRS <> 0 THEN
     BEGIN
        WRITELN (OUTPUT, 'MSB>  *** File Not Found, or Disk Error');
        ENDXQQ
     END;
  PGCNT := 00;
  LNCNT := 00;
  WDCNT := 00;
  CHCNT := 00;
END;   {PROCEDURE}

PROCEDURE SCANFILE;
VAR
  I : INTEGER;
  C : CHAR;
BEGIN
  C := BLANK;
  I := 00;
  WHILE NOT EOF (SOURCE) DO
     BEGIN
        WHILE NOT EOF(SOURCE) AND NOT (C IN ALPHA) DO
           BEGIN
              IF EOLN (SOURCE) THEN LNCNT := LNCNT + 1;
              READ (SOURCE, C); CHCNT := CHCNT + 1;
           END;
        WHILE NOT EOF(SOURCE) AND (C IN ALPHA) DO
           BEGIN
              IF EOLN (SOURCE) THEN LNCNT := LNCNT + 1;
              CHCNT := CHCNT + 1;  I := I + 1;
              IF I <= WRDLEN THEN
                 NEW_WRD [I] := C;
              READ (SOURCE, C)
           END;
        IF I > 0 THEN
           BEGIN
              I := 0;
              WDCNT := WDCNT + 1
           END
     END
END;  {PROCEDURE}

BEGIN  {MAIN}
  INITIALIZE;
  WRITELN (OUTPUT, 'MSB>  *IN PROGRESS    ',CURDATE,NULL:1,CURTIME);
  SCANFILE;
  PGCNT := LNCNT DIV PGLINES;
	CHCNT := CHCNT - LNCNT;    {CARRIAGE RETURN CHARS HAVE BEEN INCLUDED}
  IF LNCNT MOD PGLINES <> 00 THEN PGCNT := PGCNT + 1;
  WRITELN (OUTPUT,NULL:10,'LINES:   WORDS:    CHARS:    PAGES:');
  WRITELN (OUTPUT,NULL:10,'-----    -----     -----     -----');
  WRITELN (OUTPUT,NULL:10,LNCNT:5,NULL:4,WDCNT:5,NULL:5,CHCNT:5,NULL:5,PGCNT:5);
END.
w R.R %F G R %H R %F I R %F  J R %R 2sK R