home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / TURBOPAS / BGBALPAS.LBR / BGBAL.PZS / BGBAL.PAS
Pascal/Delphi Source File  |  2000-06-30  |  5KB  |  190 lines

  1. PROGRAM BGBAL;
  2. {$V-}
  3. {
  4. Counts the number of BEGIN/ENDs in a pascal program
  5. and makes sure that they balance. Optionally writes
  6. the lines of source code that contain the BEGIN/ENDs
  7. to a file.  source file and output file may be specified
  8. in the CCP command line or after the program begins
  9. Usage BGBAL D:filename.ext D:filename.ext
  10.  
  11. This is not a fancy program but I use it frequently (being
  12. a clumsy typist) and thought someone eles might find it
  13. useful
  14.  
  15. Walter Henry
  16. 438 Hillcrest Ave.
  17. Livermore, CA  94550
  18. xb.k98@forsythe.stanford.edu <arpanet>
  19. xb.k98@stanford              <Bitnet>
  20.  
  21. Version: 1.00
  22. Last Revision: 12/29/85
  23. }
  24.  
  25. TYPE
  26.   filename_typ    =  STRING[14];
  27.   array_index_typ =  (leftbracket,rightbracket,
  28.                       leftparen,rightparen,
  29.                       leftparenstar,rightparenstar);
  30.   tally_typ       =  ARRAY[array_index_typ] OF INTEGER;
  31.   BigString       =  STRING[255];
  32.  
  33. VAR
  34.      garbage      :  STRING[50];
  35.  
  36.    infile         :  TEXT;
  37.    outfile        :  TEXT;
  38.    fname,outname  :  filename_typ;
  39.    tally          :  tally_typ;
  40.    textline       :  BigString;
  41.    inchar         :  CHAR;
  42.    echo,hit       :  BOOLEAN;
  43.  
  44.  
  45. PROCEDURE Upper            (VAR textline : BigString);
  46. VAR
  47.  i : BYTE;
  48. BEGIN
  49.  FOR i := 1 TO LENGTH(textline) DO
  50.   textline[i] := UPCASE(textline[i]);
  51. END; {Of Proc Upper}
  52.  
  53. FUNCTION CountWords        (word       :  BigString;
  54.                             textline  :  BigString  ) : INTEGER;
  55. {Returns the number of times that word appears in textline}
  56. BEGIN
  57. END; {Of Func CountWords}
  58.  
  59.  
  60.  
  61.  
  62. PROCEDURE ScanLine        (textline :BigString;
  63.                            VAR hit : BOOLEAN   );
  64.  
  65. VAR i : BYTE;
  66. BEGIN
  67.  hit := FALSE;
  68.  FOR i := 1 TO LENGTH(textline) DO
  69.   BEGIN
  70.    CASE textline[i] OF
  71.      '(' : BEGIN
  72.             hit := TRUE;
  73.             tally[leftparen] := succ(tally[leftparen]);
  74.             IF
  75.              textline[i+1]='*'
  76.             THEN
  77.              tally[leftparenstar] :=succ(tally[leftparenstar]);
  78.            END; {leftparen}
  79.  
  80.      ')' : BEGIN
  81.             hit := TRUE;
  82.             tally[rightparen] := succ(tally[rightparen]);
  83.             IF
  84.              textline[i-1]='*'
  85.             THEN
  86.              tally[rightparenstar] :=succ(tally[rightparenstar]);
  87.            END;   {rightparen}
  88.  
  89.      '{' : BEGIN
  90.             hit := TRUE;
  91.             tally[leftbracket]   := succ(tally[leftbracket]);
  92.            END;
  93.  
  94.      '}' : BEGIN
  95.             hit := TRUE;
  96.             tally[rightbracket] := succ(tally[rightbracket]);
  97.            END;
  98.  
  99.    END; {case}
  100.   END; {for}
  101. END; {Of Proc ScanLine}
  102.  
  103. {main}
  104. BEGIN
  105.  echo := FALSE;
  106.  inchar := ' ';
  107.  tally[leftbracket]    := 0;
  108.  tally[rightbracket]   := 0;
  109.  tally[leftparen]    := 0;
  110.  tally[rightparen]   := 0;
  111.  tally[leftparenstar]  := 0;
  112.  tally[rightparenstar] := 0;
  113.  
  114.  ClrScr;
  115.  IF ParamCount < 1
  116.  THEN
  117.   BEGIN
  118.    WRITELN('Enter name of file to scan');
  119.    READLN(fname);
  120.    Upper(fname);
  121.   END {if then}
  122.  ELSE
  123.   BEGIN
  124.    fname := ParamStr(1);
  125.   END; {if else}
  126.  
  127.   ASSIGN(infile,fname);
  128.   RESET(infile);
  129.  
  130.  IF ParamCount >= 2
  131.  THEN
  132.   BEGIN
  133.    echo  := TRUE;
  134.    outname := ParamStr(2);
  135.    ASSIGN(outfile,outname);
  136.    REWRITE(outfile);
  137.   END {if then}
  138.  ELSE
  139.   BEGIN
  140.    WRITELN('Echo lines to file? (Y/N)');
  141.    READLN(inchar);
  142.    IF
  143.     inchar IN ['Y','y']
  144.    THEN
  145.     BEGIN
  146.      echo := TRUE;
  147.      WRITE('Drive:filename.ext: ');
  148.      READLN(outname);
  149.      Upper(outname);
  150.      ASSIGN(outfile,outname);
  151.      REWRITE(outfile);
  152.     END;  {if then inchar in Yy}
  153.   END; {if else paramcount >=2}
  154.  
  155.  REPEAT
  156.   READLN(infile,textline);
  157.   ScanLine(textline,hit);
  158.   IF
  159.    echo AND hit
  160.   THEN
  161.    WRITELN(outfile,textline);
  162.  UNTIL EOF(infile);
  163.  
  164.  WRITELN  ( '{   ' ,   tally[leftbracket])    ;
  165.  WRITELN  ( '}   ' ,   tally[rightbracket])   ;
  166.  
  167.  WRITELN  ( '(   ' ,   tally[leftparen])    ;
  168.  WRITELN  ( ')   ' ,   tally[rightparen])   ;
  169.  
  170.  WRITELN  ( '(*  ' ,   tally[leftparenstar])  ;
  171.  WRITELN  ( '*)  ' ,   tally[rightparenstar]) ;
  172.  
  173.  CLOSE(infile);
  174.  IF echo
  175.  THEN
  176.   BEGIN
  177.  
  178.    WRITELN  (outfile, 'Count for file ',outname);
  179.    WRITELN  (outfile, '{   ' ,   tally[leftbracket])    ;
  180.    WRITELN  (outfile, '}   ' ,   tally[rightbracket])   ;
  181.  
  182.    WRITELN  (outfile, '(   ' ,   tally[leftparen])    ;
  183.    WRITELN  (outfile, ')   ' ,   tally[rightparen])   ;
  184.  
  185.    WRITELN  (outfile, '(*  ' ,   tally[leftparenstar])  ;
  186.    WRITELN  (outfile, '*)  ' ,   tally[rightparenstar]) ;
  187.    CLOSE(outfile);
  188.  END; {if then echo}
  189. END.
  190.