home *** CD-ROM | disk | FTP | other *** search
- PROGRAM exptabs;
- { expands tabs to spaces }
- { Author: Frank Eskridge 6/9/85 }
-
-
- TYPE
- arglist_string = string[80];
- CONST
- arglist_max = 20;
- arglist_number : integer = -1;
- VAR
- argvlist : array[1..arglist_max] of ^arglist_string;
- line,newline : STRING[255];
- x,i,y,z,num_spaces : integer;
- input_file,output_file : text;
- ok : boolean;
-
- FUNCTION argv ( num : integer ) : arglist_string;
- VAR
- argument : arglist_string absolute cseg:$80;
- newparm,parmline : arglist_string;
- i,j : INTEGER;
- state : (leading_ws, non_quote, quoted, end_quote);
- inchar : CHAR;
-
- PROCEDURE saveparm;
- BEGIN
- IF arglist_number < arglist_max THEN
- BEGIN
- arglist_number := arglist_number+1;
- new(argvlist[arglist_number]);
- argvlist[arglist_number]^ := newparm;
- newparm := '';
- END;
- END;
-
- BEGIN {function argv}
- IF arglist_number = -1 THEN
- BEGIN
- arglist_number := 0;
- parmline := argument+' ';
- state := leading_ws;
- newparm := '';
- FOR i := 1 to length(parmline) DO
- BEGIN
- inchar := parmline[i];
- CASE state OF
- leading_ws:
- BEGIN
- IF inchar = '''' THEN state := quoted
- ELSE IF inchar <> ' ' THEN
- BEGIN
- newparm := newparm+inchar;
- state := non_quote;
- END;
- END;
-
- non_quote:
- BEGIN
- IF inchar = ' ' THEN
- BEGIN
- saveparm;
- state := leading_ws;
- END
- ELSE newparm := newparm+inchar;
- END;
-
- quoted:
- BEGIN
- IF inchar = '''' THEN state := end_quote
- ELSE newparm := newparm+inchar;
- END;
-
- end_quote:
- BEGIN
- IF inchar = '''' THEN
- BEGIN
- newparm := newparm+inchar;
- state := quoted;
- END
- ELSE IF inchar <> ' ' THEN
- BEGIN
- newparm := newparm+inchar;
- state := non_quote;
- END
- ELSE
- BEGIN
- saveparm;
- state := leading_ws;
- END;
- END;
- END; {case}
- END;
- END;
-
- IF (num > 0) AND (num <= arglist_number) THEN
- argv := argvlist[num]^
- ELSE argv := '';
- END; {function argv}
-
-
- FUNCTION argc:integer;
- VAR
- dummy : arglist_string;
- BEGIN {function argc}
- IF arglist_number = -1 THEN
- BEGIN
- dummy := argv(1); {force evaluation}
- argc := arglist_number;
- END
- ELSE
- argc := arglist_number;
- END;
-
- BEGIN
- WRITELN;WRITELN;WRITELN;WRITELN;
- IF argc < 2 THEN BEGIN
- WRITELN('Expands tabs to spaces in text file.');
- WRITELN;
- WRITELN('Usage:');
- WRITELN(' EXPTABS <input filename> <output filename> [<# spaces, default 8>]');
- WRITELN('Examples:');
- WRITELN(' EXPTABS OLD.TXT NEW.TXT ');
- WRITELN(' EXPTABS OLD.TXT NEW.TXT 6');
- HALT;
- END;
- ASSIGN(input_file,argv(1));
- ASSIGN(output_file,argv(2));
- {$I-}RESET(input_file){$I+};
- ok := (IOResult=0);
- IF NOT ok THEN BEGIN
- WRITELN('ERROR--input file not found.');
- HALT;
- END;
- REWRITE(output_file);
- IF argc = 3 THEN
- VAL(argv(3),num_spaces,z)
- ELSE
- num_spaces := 8;
- WHILE NOT EOF(input_file) DO
- BEGIN
- READLN(input_file,line);
- newline := '';
- FOR x := 1 TO LENGTH(line) DO
- BEGIN
- IF line[x] = #9 THEN
- FOR y := 1 TO num_spaces DO
- newline := newline + ' '
- ELSE
- newline := newline+line[x];
- END;
- newline := newline + #13+#10;
- WRITE(output_file,newline);
- END;
- CLOSE(input_file);
- CLOSE(output_file);
- END.