home *** CD-ROM | disk | FTP | other *** search
- PROGRAM DETAB;
-
- { This Turbo Pascal program copies its input file to its output file
- while deleting form-feed codes and converting tab codes to an
- equivalent series of spaces, assuming standard tab settings every
- eight characters. All form-feeds and trailing blanks are deleted.
-
- Program by Harry M. Murphy, 2 March 1986.
- Updated 4 June 1986 and 16 December 1986. }
-
- CONST
- LENSPEC = 65;
- LINELEN = 132;
-
- TYPE
- FILESPEC = STRING[LENSPEC];
- TEXTLINE = STRING[LINELEN];
-
- VAR
- CR: CHAR;
- FF: CHAR;
- INP: TEXT[2048];
- INPNAME: FILESPEC;
- K: 0..LINELEN;
- KT: 0..LINELEN;
- L: 0..LINELEN;
- LL: 0..LINELEN;
- LINE: TEXTLINE;
- NFF: INTEGER;
- NLINE: INTEGER;
- NTAB: INTEGER;
- OUT: TEXT[2048];
- OUTNAME: FILESPEC;
- TAB: CHAR;
-
-
- 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};
-
-
- BEGIN {Program DETAB}
- CR := CHR(13);
- FF := CHR(12);
- TAB := CHR(9);
- GETINPFIL(INPNAME);
- GETOUTFIL(OUTNAME);
- LOWVIDEO;
- WRITELN('De-tabbing file ',INPNAME,' ==> file ',OUTNAME);
- NFF := 0;
- NLINE := 0;
- NTAB := 0;
- WHILE NOT EOF(INP) DO
- BEGIN
- READLN(INP,LINE);
- LL := LENGTH(LINE);
- LINE[0] := CHR(0);
- WHILE LINE[LL] = ' ' LL := LL-1;
- LINE[0] := CHR(LL);
- IF LL > 0
- THEN
- BEGIN
- K := 1;
- FOR L:=1 TO LL DO
- IF LINE[L] = TAB
- THEN
- BEGIN
- KT := ((K+7) DIV 8)*8+1;
- REPEAT
- WRITE(OUT,' ');
- K := K+1
- UNTIL K=KT;
- NTAB := NTAB+1
- END
- ELSE
- IF LINE[L] = FF
- THEN
- NFF := NFF+1
- ELSE
- BEGIN
- WRITE(OUT,LINE[L]);
- K := K+1
- END
- END;
- WRITELN(OUT);
- NLINE := NLINE+1;
- IF (NLINE MOD 100)=0 THEN WRITE(NLINE:5,' lines done.',CR)
- END;
- CLOSE(INP);
- CLOSE(OUT);
- WRITELN(NLINE:5,' lines de-tabbed.');
- WRITELN(NTAB:5,' tab codes removed.');
- WRITELN(NFF:5,' form-feed codes deleted.')
- END.