{++++++++++++++++++++++++++++++++++++++++}
{+ STANDARD FILE IO MODULE +}
{++++++++++++++++++++++++++++++++++++++++}
{
WRITTEN BY: Raymond E. Penley
DATE WRITTEN: March 13, 1981
}
{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DECLARE THE FOLLOWING IN YOUR MAIN PROGRAM.
CONST
DEFAULT = 80;
SMAX = 255;
space = ' ';
maxargc = 5; < maximum # of words you expect to parse >
< out of the Command line. >
{$C-}{ CONTROL-C CHECKING OFF }
{$M-}{ INTEGER MULT & DIVD ERROR CHECKING OFF }
{$F-}{ FLOATING POINT ERROR CHECKING OFF }
{$iOPEN.LIB }
{$iGCML.LIB }
PROCEDURE PARSE(inbuf: MSTRING);
var idlen,cpos: int;
begin
append(inbuf,' ');
for argc := 1 to maxargc do setlength(argv[argc],0);
argc := 0;
cpos := 1;
WHILE cpos < length(inbuf) DO
BEGIN
WHILE (cpos < length(inbuf)) AND (inbuf[cpos]=space) DO
cpos := cpos + 1; { skip over spaces }
idlen := 0;
argc := argc + 1;
WHILE (cpos < length(inbuf)) AND (inbuf[cpos]<>space) DO
BEGIN {accept only non-space}
idlen := idlen + 1;
append( argv[argc], inbuf[cpos] );
cpos := cpos + 1;
END;
END; {WHILE cpos<length(inbuf)}
end;
PROCEDURE STDOPEN;
BEGIN
xeof := false;
xeoln := false;
infile := 1; { argv[1] should be the input file. }
outfile := 2; { argv[2] should be the output file. }
params := 3; { argv[3] should hold any optional parameters }
GCML(inbuf);
if length(inbuf)<>0 then
begin PARSE(inbuf);
{ open input file }
OPEN(argv[infile],'I',stdin);
if ioresult=false then HALT(' ');
{ open output file }
{ if no file specified then default=LST: }
if length(argv[outfile])=0 then argv[outfile] := 'LST:';
OPEN(argv[outfile],'O',stdout);
if ioresult=false then HALT(' ');
end
END { * STD OPEN * };
PROCEDURE getc(VAR ch: char); {$R-}{ * RANGE CHECKING OFF * }
BEGIN
xeof := false;
IF NOT EOF(stdin) THEN
READ(stdin,ch);
IF EOF(stdin) THEN
begin ch := ' ';
xeof := true;
end
else if ch=chr(5) then { * end of file on the console? * }
xeof := true; { * do eof stuff if yes * }
end; {$R+}{ * RANGE CHECKING ON * }
PROCEDURE putc(c:CHAR);
BEGIN
if c=newline
then writeln(stdout)
else WRITE(stdout,c); {output the character}
END;
PROCEDURE puts(VAR LINE:MSTRING);
var i:int;
BEGIN
for i:=1 to length(LINE) do putc( LINE[i] );
END;
procedure gets(var inbuf:MSTRING);
{ * this version of gets() specially modified for kformat.pas * }
(* GLOBAL:
newline, xeof, SMAX, stdin *)
var ch: char;
BEGIN
setlength(inbuf,0); { * inbuf := ''; * }
WHILE not eoln(stdin) and not xeof do
begin
getc(ch);
If ORD(ch)>127 then ch := CHR( ORD(ch)-127 );
If length(inbuf) < SMAX then (* start accepting characters *)
append(inbuf, ch)
end;
READLN(stdin); {+++ ignore the line boundary +++}
append(inbuf,newline); { *** MAR 81 *** }
end;