home *** CD-ROM | disk | FTP | other *** search
- {chapter1.pas}
-
- {
- Copyright (c) 1981
- By: Bell Telephone Laboratories, Inc. and
- Whitesmith's Ltd.,
-
- This software is derived from the book
- "Software Tools in Pascal", by
- Brian W. Kernighan and P. J. Plauger
- Addison-Wesley, 1981
- ISBN 0-201-10342-7
-
- Right is hereby granted to freely distribute or duplicate this
- software, providing distribution or duplication is not for profit
- or other commercial gain and that this copyright notice remains
- intact.
- }
-
- PROCEDURE COPY;
- VAR C:CHARACTER;
- BEGIN
- WHILE(GETC(C)<>ENDFILE)DO
- PUTC(C)
- END;
-
-
- PROCEDURE CHARCOUNT;
- VAR
- NC:INTEGER;
- C:CHARACTER;
- BEGIN
- NC:=0;
- WHILE (GETC(C)<>ENDFILE)DO
- NC:=NC+1;
- PUTDEC(NC,1);
- PUTC(NEWLINE)
- END;
-
- PROCEDURE LINECOUNT;
- VAR
- N1:INTEGER;
- C:CHARACTER;
- BEGIN
- N1:=0;
- WHILE(GETC(C)<>ENDFILE)DO
- IF(C=NEWLINE)THEN
- N1:=N1+1;
- PUTDEC(N1,1);
- PUTC(NEWLINE)
- END;
-
- PROCEDURE WORDCOUNT;
- VAR
- NW:INTEGER;
- C:CHARACTER;
- INWORD:BOOLEAN;
- BEGIN
- NW:=0;
- INWORD:=FALSE;
- WHILE(GETC(C)<>ENDFILE)DO
- IF(C=BLANK)OR(C=NEWLINE)OR(C=TAB) THEN
- INWORD:=FALSE
- ELSE IF (NOT INWORD)THEN BEGIN
- INWORD:=TRUE;
- NW:=NW+1
- END;
- PUTDEC(NW,1);
- PUTC(NEWLINE)
- END;
-
- PROCEDURE DETAB;
- CONST
- MAXLINE=1000;
- TYPE
- TABTYPE=ARRAY[1..MAXLINE] OF BOOLEAN;
- VAR
- C:CHARACTER;
- COL:INTEGER;
- TABSTOPS:TABTYPE;
-
- FUNCTION TABPOS(COL:INTEGER;VAR TABSTOPS:TABTYPE)
- :BOOLEAN;
- BEGIN
- IF(COL>MAXLINE)THEN
- TABPOS:=TRUE
- ELSE
- TABPOS:=TABSTOPS[COL]
- END;
-
- PROCEDURE SETTABS(VAR TABSTOPS:TABTYPE);
- CONST
- TABSPACE=4;
- VAR
- I:INTEGER;
- BEGIN
- FOR I:=1 TO MAXLINE DO
- TABSTOPS[I]:=(I MOD TABSPACE = 1)
- END;
-
- BEGIN
- SETTABS(TABSTOPS);
- COL:=1;
- WHILE(GETC(C)<>ENDFILE)DO
- IF(C=TAB)THEN
- REPEAT
- PUTC(BLANK);
- COL:=COL+1
- UNTIL(TABPOS(COL,TABSTOPS))
- ELSE IF(C=NEWLINE)THEN BEGIN
- PUTC(NEWLINE);
- COL:=1
- END
- ELSE BEGIN
- PUTC(C);
- COL:=COL+1
- END
- END;
-
-
-
-
-