home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Phoenix CD 2.0
/
Phoenix_CD.cdr
/
15a
/
murutil.zip
/
DETAB.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1986-12-16
|
4KB
|
154 lines
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.