home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / INFO / TURBOPAS / TURBO9.ZIP / PASCAPS.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1984-07-10  |  5.9 KB  |  181 lines

  1. PROGRAM PasCaps;
  2.  
  3. {  This program converts the lower case Pascal identifiers in a source  }
  4. {  code file to upper case.                                             }
  5. {  Jeff Firestone.  June, 1984.                                         }
  6.  
  7. CONST
  8.   Idents1 = ' ARCTAN ASSIGN AUX AUXINPTR AUXOUTPTR BLOCKREAD BLOCKWRITE BOOLEAN ';
  9.   Idents2 = ' BUFLEN BYTE CHAIN CHAR CHR CLOSE CLREOL CLRSCR CON CONINPTR ';
  10.   Idents3 = ' CONCAT CONSTPTR COPY COS CRTEXIT CRTINIT DELLINE DELAY DELETE ';
  11.   Idents4 = ' EOF EOLN ERASE EXECUTE EXP FALSE FILEPOS FILESIZE FILLCHAR FLUSH ';
  12.   Idents5 = ' FRAC GETMEM GOTOXY HEAPPTR HI HIGHVIDEO IORESULT INPUT INSLINE INSERT ';
  13.   Idents6 = ' INT INTEGER KBD KEYPRESSED LENGTH LN LO LST LSTOUTPTR MARK MAXINT MEM ';
  14.   Idents7 = ' MEMAVAIL MOVE NEW NORMVIDEO ODD ORD OUTPUT PI PORT POS PRED PTR RANDOM ';
  15.   Idents8 = ' RANDOMIZE READ READLN REAL RELEASE RENAME RESET REWRITE ROUND SEEK SIN ';
  16.   Idents9 = ' SIZEOF SQR SQRT STR SUCC SWAP TEXT TRM TRUE TRUNC UPCASE USR USRINPTR ';
  17.   Idents10= ' USROUTPTR VAL WRITE WRITELN ABSOLUTE AND ARRAY BEGIN CASE CONST DIV ';
  18.   Idents11= ' DO DOWNTO ELSE END EXTERNAL FILE FOR FORWARD FUNCTION GOTO IF IN ';
  19.   Idents12= ' INLINE LABEL MOD NIL NOT OF OR PACKED PROCEDURE PROGRAM RECORD REPEAT ';
  20.   Idents13= ' SET SHL SHR STRING THEN TO TYPE UNTIL VAR WHILE WITH XOR OFS SEG MEM MEMW';
  21.   OpenBracket  = '{';
  22.   CloseBracket = '}';
  23.   OpenParen    = '(';
  24.   CloseParen   = ')';
  25.   Null         = '';
  26. TYPE
  27.   Caps = Set of 'A'..'Z';
  28.   Nums = Set of '0'..'9';
  29.   Strng = STRING[255];
  30. VAR
  31.   pntr, LineNum : INTEGER;
  32.   ProgLine, Name : STRING[255];
  33.   Word : STRING[100];
  34.   f1, f2 : TEXT;
  35.   Identifier: SET OF CHAR;
  36.  
  37.  
  38. PROCEDURE UpShift(VAR S: Strng);
  39. BEGIN
  40.   INLINE
  41.          ($C4/$BE/S/         {     LES   DI,S[BP]     }
  42.           $26/$8A/$0D/       {     MOV   CL,ES:[DI]   }
  43.           $FE/$C1/           {     INC   CL           }
  44.           $FE/$C9/           {L1:  DEC   CL           }
  45.           $74/$13/           {     JZ    L2           }
  46.           $47/               {     INC   DI           }
  47.           $26/$80/$3D/$61/   {     CMP   ES:BYTE PRT [DI],'a'}
  48.           $72/$F5/           {     JB    L1           }
  49.           $26/$80/$3D/$7A/   {     CMP   ES:BYTE PTR [DI],'z'}
  50.           $77/$EF/           {     JA    L1           }
  51.           $26/$80/$2D/$20/   {     SUB   ES:BYTE PRT [DI],20H}
  52.           $EB/$E9            {     JMP   SHORT L1     }
  53.                              {L2:                     });
  54. END;
  55.  
  56.  
  57. PROCEDURE Greeting;
  58. BEGIN
  59.   GOTOXY(23,1);
  60.   WRITELN('CAPITALIZE PASCAL IDENTIFIERS');
  61.   WRITELN;WRITELN;
  62.   WRITELN('This program reads a Pascal source file and capitalizes all the identifiers');
  63.   WRITELN('in that file.  The results are output to a file the users specifies.');
  64.   WRITELN;
  65.   WRITELN('The output file tends to be easier to read than one in which a hodge-podge');
  66.   WRITELN('of capitalized and lower case identifiers co-reside.  It is the prefered');
  67.   WRITELN('format for Pascal source code.');
  68.   WRITELN;
  69.   WRITELN('With this utility, you can type all your source code in lower case and then');
  70.   WRITELN('convert it to standard format later.  This manner of writing Pascal saves you');
  71.   WRITELN('considerable time and bother.');
  72.   WRITELN; WRITELN; WRITELN;
  73. END;
  74.  
  75.  
  76. PROCEDURE OpenFiles;
  77. BEGIN
  78.   WRITE('What is the name of the source code file (RETURN to end) : ');
  79.   READLN(name);
  80.   IF LENGTH(name) = 0 THEN halt;
  81.   IF (POS('.', name) = 0) THEN name:= name + '.pas';
  82.   ASSIGN(f1, name);
  83.   RESET(f1);
  84.   WRITE('Where do you want to output to be sent (RETURN for Screen) : ');
  85.   READLN(name); UpShift(Name);
  86.   IF LENGTH(name) = 0 THEN name:= 'CON:';
  87.   ASSIGN(f2, name);
  88.   REWRITE(f2);
  89.   WRITELN; WRITE('Capitalizing...');
  90. END;
  91.  
  92.  
  93. PROCEDURE GetWord;
  94. VAR
  95.   TmpWord,TmpWrd : STRING[255];
  96.   GotIdent : INTEGER;
  97. BEGIN
  98.   Word:= '';
  99.   WHILE (UPCASE(ProgLine[pntr]) IN Identifier) AND
  100.         (pntr <= LENGTH(ProgLine)) DO
  101.              BEGIN
  102.                Word:= Word + ProgLine[pntr];
  103.                pntr:= pntr + 1;
  104.              END;
  105.  
  106.   TmpWrd:= Word; UpShift(TmpWrd);
  107.   TmpWord:= ' ' + TmpWrd + ' ';
  108.   GotIdent:= POS(TmpWord, Idents1) + POS(TmpWord, Idents2) +
  109.              POS(TmpWord, Idents3) + POS(TmpWord, Idents4) +
  110.              POS(TmpWord, Idents5) + POS(TmpWord, Idents6) +
  111.              POS(TmpWord, Idents7) + POS(TmpWord, Idents8) +
  112.              POS(TmpWord, Idents9) + POS(TmpWord, Idents10) +
  113.              POS(TmpWord, Idents11) + POS(TmpWord, Idents12) +
  114.              POS(TmpWord, Idents13);
  115.   IF GotIdent > 0 THEN
  116.      WRITE(f2, TmpWrd)
  117.   ELSE
  118.      WRITE(f2, Word);
  119. END;
  120.  
  121.  
  122. PROCEDURE ScanTill(SearchChar: CHAR);
  123. BEGIN
  124.   REPEAT
  125.     WRITE(f2, ProgLine[pntr]);
  126.     pntr:= pntr + 1;
  127.     IF pntr > LENGTH(ProgLine) THEN
  128.     BEGIN
  129.       WRITELN(f2);
  130.       READLN(f1, ProgLine);
  131.       pntr:= 1;
  132.     END;
  133.   UNTIL (ProgLine[pntr] = SearchChar) OR EOF(f1);
  134.   WRITE(f2, ProgLine[pntr]);
  135.   pntr:= pntr + 1;
  136. END;
  137.  
  138.  
  139. PROCEDURE Convert;
  140. BEGIN
  141.   LineNum:= 0;
  142.   WHILE NOT EOF(f1) DO
  143.   BEGIN
  144.     pntr:= 1;
  145.     READLN(f1, ProgLine);
  146.     IF LENGTH(ProgLine) > 0 THEN
  147.     BEGIN
  148.     REPEAT
  149.       CASE UPCASE(ProgLine[pntr]) OF
  150.         'A'..'Z', '0'..'9', '_'  :  GetWord;
  151.         OpenBracket              :  ScanTill(CloseBracket);
  152.         ELSE
  153.           IF ProgLine[pntr] = CHR(39) THEN
  154.             ScanTill(CHR(39))
  155.           ELSE
  156.           BEGIN
  157.             WRITE(f2, ProgLine[pntr]);
  158.             pntr:= pntr + 1;
  159.           END;
  160.       END;  {  Case UpCase  }
  161.     UNTIL (pntr > LENGTH(ProgLine));
  162.     WRITELN(f2);
  163.     IF Name <> 'CON:' THEN
  164.       BEGIN
  165.         gotoXY(4, 21);
  166.         WRITE(LineNum);
  167.         LineNum:= LineNum + 1;
  168.       END
  169.     END;
  170.     IF LENGTH(ProgLine) = 0 THEN WRITELN(f2);
  171.   END;  { WHILE }
  172.   CLOSE(f1); CLOSE(f2);
  173. END;
  174.  
  175. BEGIN
  176.   Identifier:= ['A'..'Z', '0'..'9', '_'];
  177.   Greeting;
  178.   OpenFiles;
  179.   Convert;
  180. END.
  181.