home *** CD-ROM | disk | FTP | other *** search
- PROGRAM CURLY;
-
- { Curly-Bracket Processor:
-
- This Turbo Pascal program scans Pascal programs and translates all
- comments to curly-bracket notation.
-
- This translation conforms to the requirements of Paragraphs 6.1.8 and
- 6.1.9 of ANSI/IEEE770X3.97-1983, "American National Standard Pascal
- Computer Programming Language".
-
- Program by Harry M. Murphy. 11 November 1986. }
-
- CONST
- LENSPEC = 65;
- LINELEN = 255;
-
- TYPE
- FILESPEC = STRING[LENSPEC];
- TEXTLINE = STRING[LINELEN];
-
- VAR
- CR : CHAR;
- INCOMM : BOOLEAN;
- INQUOT : BOOLEAN;
- INP : TEXT[2048];
- INPNAME: FILESPEC;
- LINE : TEXTLINE;
- NLINE : INTEGER;
- OUT : TEXT[2048];
- OUTNAME: FILESPEC;
-
-
- PROCEDURE GETINPFIL(VAR INPNAME: FILESPEC);
-
- { This file gets an input file, either as the first parameter on the
- command line or by requesting it from the user.
-
- Procedure by Harry M. Murphy, 22 February 1986. }
-
- VAR
- L: INTEGER;
-
- BEGIN
- IF PARAMCOUNT = 0
- THEN
- BEGIN
- WRITE('Input file: ');
- READLN(INPNAME)
- END
- ELSE
- INPNAME := PARAMSTR(1);
- FOR L:=1 TO LENGTH(INPNAME) DO INPNAME[L] := UPCASE(INPNAME[L]);
- ASSIGN(INP,INPNAME);
- {$I-} RESET(INP); {$I+}
- IF IORESULT <> 0
- THEN
- BEGIN
- CLOSE(INP);
- WRITELN('ERROR! Can''t find file ',INPNAME,'!');
- HALT
- END;
- END {Procedure GETINPFIL};
-
-
- PROCEDURE GETOUTFIL(VAR OUTNAME: FILESPEC);
-
- { This file gets an output file, either as the second parameter on the
- command line or by requesting it from the user.
-
- Procedure by Harry M. Murphy, 22 February 1986. }
-
- VAR
- L: INTEGER;
-
- BEGIN
- IF PARAMCOUNT < 2
- THEN
- BEGIN
- WRITE('Output file: ');
- READLN(OUTNAME)
- END
- ELSE
- OUTNAME := PARAMSTR(2);
- FOR L:=1 TO LENGTH(OUTNAME) DO OUTNAME[L] := UPCASE(OUTNAME[L]);
- ASSIGN(OUT,OUTNAME);
- {$I-} REWRITE(OUT); {$I-}
- IF IORESULT <> 0
- THEN
- BEGIN
- CLOSE(OUT);
- WRITELN('ERROR! Can''t open ',OUTNAME,'!');
- HALT
- END
- END {Procedure GETOUTFIL};
-
-
- PROCEDURE SCAN(VAR LINE: TEXTLINE);
-
- { This procedure scans a Pascal line and converts all comments to
- Curly-Bracket notation. }
-
- VAR
- CH : CHAR;
- K : 0..LINELEN;
- L : 0..LINELEN;
- LL : 0..LINELEN;
-
- BEGIN { Procedure SCAN }
- LL := LENGTH(LINE);
- LINE[0] := CHR(0);
- WHILE LINE[LL] = ' ' DO LL := LL-1;
- LINE[0] := CHR(LL);
- K := 0;
- L := 0;
- WHILE L < LL DO
- BEGIN
- L := L+1;
- CH := LINE[L];
- IF CH IN ['{','}','(','*']
- THEN
- CASE CH OF
- '{': IF NOT INQUOT
- THEN INCOMM := TRUE;
- '}': IF NOT INQUOT
- THEN INCOMM := FALSE;
- '(': IF NOT (INCOMM OR INQUOT)
- THEN
- IF L < LL
- THEN
- IF LINE[L+1] = '*'
- THEN
- BEGIN
- L := L+1;
- CH := '{';
- INCOMM := TRUE;
- IF L < LL
- THEN
- IF LINE[L+1] = ')'
- THEN LINE[L+1] := '}'
- END;
- '*': IF INCOMM
- THEN
- IF L < LL
- THEN
- IF LINE[L+1] = ')'
- THEN
- BEGIN
- L := L+1;
- CH := '}';
- INCOMM := FALSE
- END
- END { CASE }
- ELSE
- IF CH = CHR(39) { CHR(39) = "'".}
- THEN
- IF NOT INCOMM
- THEN
- INQUOT := NOT INQUOT;
- K := K+1;
- LINE[K] := CH
- END {WHILE};
- LINE[0] := CHR(K)
- END { Procedure SCAN };
-
-
- BEGIN {Program CURLY}
- LOWVIDEO;
- CR := CHR(13);
- GETINPFIL(INPNAME);
- GETOUTFIL(OUTNAME);
- WRITELN('CURLY processing ',INPNAME,' to ',OUTNAME);
- INCOMM := FALSE;
- INQUOT := FALSE;
- NLINE := 0;
- WHILE NOT EOF(INP) DO
- BEGIN
- READLN(INP,LINE);
- SCAN(LINE);
- WRITELN(OUT,LINE);
- NLINE := NLINE+1;
- IF (NLINE MOD 100)=0
- THEN
- WRITE(NLINE:5,' lines processed.',CR)
- END;
- CLOSE(INP);
- CLOSE(OUT);
- WRITELN(NLINE:5,' lines processed.');
- WRITELN('CURLY is done.')
- END.