File FINDLL.PS

Directory of image this file is from
This file as a plain text file

(*$B4 4 BLOCK BUFFERS -- DECLARE BEFORE PROGRAM STATEMENT*)
PROGRAM FINDLONGLINES(INPUT,OUTPUT) (* DETERMINE FILE LINE LENGTHS *);
(*$T-,P-,L- *)

  CONST
    MAXLINELENGTH = 160;

  VAR
    LINECOUNT, CHARCOUNT, OVERSIZE, WHEREOVER : INTEGER;
    MAXLINESIZE, MINLINESIZE, MAXLLLC, MINLLLC : INTEGER;
    LENGTHS, WHERE :	ARRAY[0..MAXLINELENGTH] OF INTEGER;

  PROCEDURE INITIALIZE;
    VAR I : INTEGER;
  BEGIN
    FOR I := 0 TO MAXLINELENGTH DO
      BEGIN LENGTHS[I] := 0; WHERE[I] := 0 END;
    MAXLINESIZE := 0; MAXLLLC := 0;
    MINLINESIZE := MAXINT; MINLLLC := 0;
    LINECOUNT := 0; CHARCOUNT := 0; OVERSIZE := 0; WHEREOVER := 0;
  END (* INITIALIZE *);

  PROCEDURE SCAN;
    VAR LINELENGTH : INTEGER;
  BEGIN
    WHILE NOT EOF(INPUT) DO
      BEGIN
	LINECOUNT := LINECOUNT + 1;
	LINELENGTH := 0;
	WHILE NOT EOLN(INPUT) DO
	  BEGIN
	    LINELENGTH := LINELENGTH + 1;
	    GET(INPUT);
	    CHARCOUNT := CHARCOUNT + 1
	  END (* NOT EOLN *);
	IF LINELENGTH > MAXLINESIZE THEN
	  BEGIN
	    MAXLINESIZE := LINELENGTH;
	    MAXLLLC := LINECOUNT
	  END
	ELSE IF LINELENGTH < MINLINESIZE THEN
	  BEGIN
	    MINLINESIZE := LINELENGTH;
	    MINLLLC := LINECOUNT
	  END;
	IF LINELENGTH > MAXLINELENGTH THEN
	  BEGIN
	    OVERSIZE := OVERSIZE + 1;
	    IF WHEREOVER = 0 THEN WHEREOVER := LINECOUNT
	  END
	ELSE (* LINE NOT TOO LONG FOR COUNTER ARRAY *)
	  BEGIN
	    LENGTHS[LINELENGTH] := LENGTHS[LINELENGTH] + 1;
	    IF WHERE[LINELENGTH] = 0 THEN
	       WHERE[LINELENGTH] := LINECOUNT
	  END;
	READLN(INPUT)
      END (* NOT EOF *)
  END (* SCAN *);

  PROCEDURE REPORT;
    VAR I : INTEGER;
  BEGIN
    WRITELN(OUTPUT);
    WRITELN(OUTPUT, ' LINE COUNT = ', LINECOUNT : 6);
    WRITELN(OUTPUT, ' CHAR COUNT = ', CHARCOUNT : 6);
    WRITELN(OUTPUT, ' (120 CPS = ',
      CHARCOUNT / (120 * 60) : 4:1,' MIN.   30 CPS = ',
      CHARCOUNT / ( 30 * 60) : 4:1,' MIN.)');
    WRITELN(OUTPUT, ' LONGEST LINE =  ', MAXLINESIZE:3,
      ' CHARACTERS AT LINE ', MAXLLLC:5);
    WRITELN(OUTPUT, ' SHORTEST LINE = ', MINLINESIZE:3,
      ' CHARACTERS AT LINE ', MINLLLC:5);
    IF OVERSIZE > 0 THEN
      WRITELN(OUTPUT, ' LINES LONGER THAN MAX (', MAXLINELENGTH :1,
	') = ', OVERSIZE:1, ' (FIRST AT ',WHEREOVER:1,')');
    WRITELN(OUTPUT, ' LINE LENGTH, FREQUENCY, FIRST OCCURRANCE');
    FOR I := MAXLINELENGTH DOWNTO 0 DO
      IF LENGTHS[I] <> 0 THEN
	WRITELN(OUTPUT, ' ', I : 4, ' =', LENGTHS[I] : 5,
	  WHERE[I]:6);
    WRITELN(OUTPUT)
  END (* REPORT *);

BEGIN (* FINDLONGLINES *)
  IF EOF(INPUT) THEN WRITELN(OUTPUT,'INPUT IS EMPTY')
  ELSE
    BEGIN
      INITIALIZE;
      SCAN;
      REPORT
    END
END (* FINDLONGLINES *).



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search