home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume3 / turbo_tools / part2 / chapter1.pas next >
Encoding:
Pascal/Delphi Source File  |  1986-11-30  |  2.0 KB  |  123 lines

  1. {chapter1.pas}
  2.  
  3. {
  4.         Copyright (c) 1981
  5.         By:     Bell Telephone Laboratories, Inc. and
  6.                 Whitesmith's Ltd.,
  7.  
  8.         This software is derived from the book
  9.                 "Software Tools in Pascal", by
  10.                 Brian W. Kernighan and P. J. Plauger
  11.                 Addison-Wesley, 1981
  12.                 ISBN 0-201-10342-7
  13.  
  14.         Right is hereby granted to freely distribute or duplicate this
  15.         software, providing distribution or duplication is not for profit
  16.         or other commercial gain and that this copyright notice remains
  17.         intact.
  18. }
  19.  
  20. PROCEDURE COPY;
  21. VAR C:CHARACTER;
  22. BEGIN
  23.   WHILE(GETC(C)<>ENDFILE)DO
  24.     PUTC(C)
  25. END;
  26.  
  27.  
  28. PROCEDURE CHARCOUNT;
  29. VAR
  30.   NC:INTEGER;
  31.   C:CHARACTER;
  32. BEGIN
  33.   NC:=0;
  34.   WHILE (GETC(C)<>ENDFILE)DO
  35.      NC:=NC+1;
  36.   PUTDEC(NC,1);
  37.   PUTC(NEWLINE)
  38. END;
  39.  
  40. PROCEDURE LINECOUNT;
  41. VAR
  42.   N1:INTEGER;
  43.   C:CHARACTER;
  44. BEGIN
  45.   N1:=0;
  46.   WHILE(GETC(C)<>ENDFILE)DO
  47.     IF(C=NEWLINE)THEN
  48.       N1:=N1+1;
  49.   PUTDEC(N1,1);
  50.   PUTC(NEWLINE)
  51. END;
  52.  
  53. PROCEDURE WORDCOUNT;
  54. VAR
  55.   NW:INTEGER;
  56.   C:CHARACTER;
  57.   INWORD:BOOLEAN;
  58. BEGIN
  59.   NW:=0;
  60.   INWORD:=FALSE;
  61.   WHILE(GETC(C)<>ENDFILE)DO
  62.     IF(C=BLANK)OR(C=NEWLINE)OR(C=TAB) THEN
  63.       INWORD:=FALSE
  64.     ELSE IF (NOT INWORD)THEN BEGIN
  65.       INWORD:=TRUE;
  66.       NW:=NW+1
  67.     END;
  68.   PUTDEC(NW,1);
  69.   PUTC(NEWLINE)
  70. END;
  71.  
  72. PROCEDURE DETAB;
  73. CONST
  74.   MAXLINE=1000;
  75. TYPE
  76.   TABTYPE=ARRAY[1..MAXLINE] OF BOOLEAN;
  77. VAR
  78.   C:CHARACTER;
  79.   COL:INTEGER;
  80.   TABSTOPS:TABTYPE;
  81.  
  82. FUNCTION TABPOS(COL:INTEGER;VAR TABSTOPS:TABTYPE)
  83.   :BOOLEAN;
  84. BEGIN
  85.   IF(COL>MAXLINE)THEN
  86.     TABPOS:=TRUE
  87.   ELSE
  88.     TABPOS:=TABSTOPS[COL]
  89. END;
  90.  
  91. PROCEDURE SETTABS(VAR TABSTOPS:TABTYPE);
  92. CONST
  93.   TABSPACE=4;
  94. VAR
  95.   I:INTEGER;
  96. BEGIN
  97.   FOR I:=1 TO MAXLINE DO
  98.     TABSTOPS[I]:=(I MOD TABSPACE = 1)
  99. END;
  100.  
  101. BEGIN
  102.   SETTABS(TABSTOPS);
  103.   COL:=1;
  104.   WHILE(GETC(C)<>ENDFILE)DO
  105.     IF(C=TAB)THEN
  106.      REPEAT
  107.       PUTC(BLANK);
  108.       COL:=COL+1
  109.      UNTIL(TABPOS(COL,TABSTOPS))
  110.     ELSE IF(C=NEWLINE)THEN BEGIN
  111.       PUTC(NEWLINE);
  112.       COL:=1
  113.     END
  114.     ELSE BEGIN
  115.       PUTC(C);
  116.       COL:=COL+1
  117.     END
  118. END;
  119.  
  120.  
  121.  
  122.  
  123.