[fpc-pascal] Filters and PTOP questions
cbase1
cbase1 at mchsi.com
Tue Dec 12 19:07:54 CET 2017
Is the simple example below the best way to implement a filter in FPC?
The example code blanks column 2 of a text file. This program works
with both "blankCol2 filename" and "blankCol2 <filename". Compiled with
3.0.2.
The PTOP question is how to configure PTOP to format files like this
example. Specifically the begin-end block on the "IF". Anybody care to
share a PTOP configuration file?
Thanks
John
(* example filter program. blank column 2 *)
{$mode objfpc}{$H+}{$J-}
program blankCol2;
Uses getopts, sysutils;
var
{ for getopts }
fileName : string;
fin : text;
pipe : boolean; { if true then piped input instead of a file }
function getOptions() : boolean;
var
statusGood : boolean;
c : char ;
begin
{ setup options }
statusGood := true; { assume options correct }
{ get options }
repeat
c := GetOpt('');
case c of
'?',':':
begin
writeln ('Error with opt:' , optopt) ;
statusGood := false;
end;
end ; { case }
until c=endofoptions;
{ check for filename }
if optind <=paramcount then
begin
fileName := paramstr( optind );
pipe := false
end
else
begin
pipe := true; { no filename so pipe }
end;
getOptions := statusGood
end;
procedure processFile();
var
line : string;
done : boolean;
begin
repeat
if (pipe = true) then
readln(input, line)
else
readln(fin, line);
if (length(line) > 2) then line[2] := ' ';
writeln(line);
if (pipe = true) then
done := eof(input)
else
done := eof(fin);
until (done);
end;
begin
{ process options }
if (getOptions() = false) then
begin {options bad}
writeln('bad');
end
else
begin {options good}
if (pipe = true) then { open stdin }
reset(input)
else
begin {open file }
assign(fin, fileName);
reset(fin);
end;
processFile();
if (pipe = true) then
begin
close(input);
writeln('pipe: for test');
end
else
begin
close(fin);
writeln('file: for test');
end;
close(output);
end;
end.
More information about the fpc-pascal
mailing list