123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- Program PtoP;
- {
- $Id$
- This file is part of the Free Pascal run time library.
- Copyright (c) 1999-2002 by Michael Van Canneyt, member of
- the Free Pascal development team
- Pascal pretty print program
- See the file COPYING.FPC, included in this distribution,
- for details about the copyright.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- **********************************************************************}
- Uses PtoPu,Objects,getopts;
- const
- Version = 'Version 1.1';
- Title = 'DelPascal';
- Copyright = 'Copyright (c) 1999-2002 by the Free Pascal Development Team';
- Var
- Infilename,OutFileName,ConfigFile : String;
- BeVerbose : Boolean;
- TheIndent,TheBufSize,TheLineSize : Integer;
- Function StrToInt(Const S : String) : Integer;
- Var Code : integer;
- Int : integer;
- begin
- Val(S,int,Code);
- StrToInt := int;
- If Code<>0 then StrToInt:=0;
- end;
- Procedure Usage;
- begin
- Writeln ('ptop : Usage : ');
- Writeln ('ptop [-v] [-i indent] [-b bufsize ][-c optsfile][-l linesize] infile outfile');
- Writeln (' converts infile to outfile.');
- Writeln (' -c : read options from optsfile');
- Writeln (' -i : Set number of indent spaces.');
- Writeln (' -l : Set maximum output linesize.');
- Writeln (' -b : Use buffers of size bufsize');
- Writeln (' -v : be verbose');
- writeln ('ptop -g ofile');
- writeln (' generate default options file');
- Writeln ('ptop -h : This help');
- halt(0);
- end;
- Procedure Genopts;
- Var S : PBufStream;
- begin
- S:=New(PBufStream,Init(ConfigFile,stCreate,255));
- GeneratecfgFile(S);
- {$ifndef tp}
- S^.Close;
- {$endif}
- S^.Done;
- end;
- Procedure ProcessOpts;
- Var c : char;
- begin
- { Set defaults }
- Infilename:='';
- OutFileName:='';
- ConfigFile:='';
- TheIndent:=2;
- TheBufSize:=255;
- TheLineSize:=MaxLineSize;
- BeVerbose:=False;
- Repeat
- c:=getopt('i:c:g:l:b:hv');
- case c of
- 'i' : begin
- TheIndent:=StrToInt(OptArg);
- If TheIndent=0 then TheIndent:=2;
- end;
- 'b' : begin
- TheBufSize:=StrToInt(OptArg);
- If TheBufSize=0 then TheBufSize:=255;
- end;
- 'c' : ConfigFile:=OptArg;
- 'l' : begin
- TheLineSize:=StrToInt(OptArg);
- If TheLineSIze=0 Then TheLineSize:=MaxLineSize;
- end;
- 'g' : begin
- ConfigFIle:=OptArg;
- GenOpts;
- halt(0);
- end;
- 'h' : usage;
- 'v' : BeVerbose:=True;
- else
- end;
- until c=endofoptions;
- If optind<=paramcount then
- begin
- InFileName:=paramstr(OptInd);
- Inc(optind);
- If OptInd<=paramcount then
- OutFilename:=Paramstr(OptInd);
- end;
- end; { Of ProcessOpts }
- Var DiagS : PMemoryStream;
- InS,OutS,cfgS : PBufSTream;
- PPrinter : TPrettyPrinter;
- P : Pchar;
- i : longint;
- Procedure StreamErrorProcedure(Var S: TStream);{$ifndef fpc}FAR;{$endif}
- Begin
- If S.Status = StError then
- WriteLn('ERROR: General Access failure. Halting');
- If S.Status = StInitError then
- WriteLn('ERROR: Cannot Init Stream. Halting. ');
- If S.Status = StReadError then
- WriteLn('ERROR: Read beyond end of Stream. Halting');
- If S.Status = StWriteError then
- WriteLn('ERROR: Cannot expand Stream. Halting');
- If S.Status = StGetError then
- WriteLn('ERROR: Get of Unregistered type. Halting');
- If S.Status = StPutError then
- WriteLn('ERROR: Put of Unregistered type. Halting');
- end;
- begin
- StreamError:=@StreamErrorProcedure;
- ProcessOpts;
- if BeVerbose then
- begin
- writeln(Title+' '+Version);
- writeln(Copyright);
- Writeln;
- end;
- If (Length(InfileName)=0) or (Length(OutFileName)=0) Then
- Usage;
- Ins:=New(PBufStream,Init(InFileName,StopenRead,TheBufSize));
- OutS:=New(PBufStream,Init(OutFileName,StCreate,TheBufSize));
- If BeVerbose then
- diagS:=New(PMemoryStream,Init(1000,255))
- else
- DiagS:=Nil;
- If ConfigFile<>'' then
- CfgS:=New(PBufStream,Init(ConfigFile,StOpenRead,TheBufSize))
- else
- CfgS:=Nil;
- PPrinter.Create;
- PPrinter.Indent:=TheIndent;
- PPrinter.LineSize:=TheLineSize;
- PPrinter.Ins:=Ins;
- PPrinter.outS:=OutS;
- PPrinter.cfgS:=CfgS;
- PPrinter.DiagS:=DiagS;
- PPrinter.PrettyPrint;
- If Assigned(DiagS) then
- begin
- I:=DiagS^.GetSize;
- DiagS^.Seek(0);
- getmem (P,I+1);
- DiagS^.Read(P[0],I);
- P[I]:=#0;
- {$ifndef tp}
- Writeln (stderr,P);
- Flush(stderr);
- {$else}
- Writeln (P);
- {$endif}
- DiagS^.Done;
- end;
- If Assigned(CfgS) then
- CfgS^.Done;
- Ins^.Done;
- OutS^.Done;
- end.
- {
- $Log$
- Revision 1.3 2002-02-27 17:20:44 carl
- + fix for BP
- Revision 1.2 2002/02/27 16:33:45 carl
- - truncated log
- * bugfix of -l parameter (was never valid)
- + added version information
- }
|