{ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»} {º TEMPLATE - Text File Parser º} {º Steven Kerr, 1994 º} {º º} {º Syntax : TEMPLATE Input Output º} {º º} {º Where Input = Input File º} {º Output = Output File º} {ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ} {$M 8192, 0, 0} Program Template; Uses DOS; Const Null : String = ''; LeftControl : Char = '<'; { Left hand control character } RightControl : Char = '>'; { Right hand control character } Var InputFile, OutputFile : Text; Checked, Error : Boolean; Function Upper (Parameter : String) : String; Var I : Integer; begin for I := 1 to Length(Parameter) do Parameter[I] := UpCase(Parameter[I]); Upper := Parameter end {Function Upper}; Function File_Exists (Filename : String) : Boolean; Var Attr : Word; F : File; begin Assign(F, Filename); GetFAttr(F, Attr); File_Exists := (DOSError = 0) end { Function FileExists }; Procedure Display_Error (Message : String; Filename : String); begin Writeln; Writeln('TEMPLATE - Text File Parser'); Writeln(' Steven Kerr, 1994'); Writeln; Writeln('Syntax : TEMPLATE Input Output'); Writeln; Writeln(' Where Input = Input File'); Writeln(' Output = Output File'); Writeln; Writeln('Error : ', Message, Filename) end { Procedure Display_Help }; Function Check_Variable (Variable : String; Position : Byte) : Byte; Var Valid : Boolean; begin Valid := False; { Add in addition variables as below. If Valid = False, the variable } { is ignored and written "as is". } if Upper(Variable) = LeftControl + 'DISKFREEC' + RightControl then begin Valid := True; Write(OutputFile, DiskFree(3)) end { DiskFreeC }; {} Checked := True; if Valid then Check_Variable := Position + Length(Variable) - 1 else Check_Variable := Position - 1 end { Function Check_Variable }; Function Look_Ahead (Line : String; Position : Byte) : String; Var Variable : String; begin Variable := Line[Position]; While (Length(Line) <> Position) and (Line[Position] <> RightControl) do begin Inc(Position); Variable := Variable + Line[Position] end { While }; Look_Ahead := Variable end { Function Look_Ahead }; Procedure Parse_File; Var Line : String; Position : Byte; begin Position := 0; Checked := False; While (not EOF(InputFile)) do begin Readln(InputFile, Line); While Position < Length(Line) do begin Inc(Position); if (Line[Position] = LeftControl) and (not Checked) then begin Position := Check_Variable(Look_Ahead(Line, Position), Position) end else begin Write(OutputFile, Line[Position]); Checked := False end { if } end { While }; Position := 0; Checked := False; Writeln(OutputFile) end { While } end { Procedure Parse_File }; Function Files_Opened (InputF : String; OutputF : String) : Boolean; Var Error : Boolean; begin Error := False; Assign(InputFile, ParamStr(1)); Assign(OutputFile, ParamStr(2)); {$I-} ReWrite(OutputFile); {$I+} if IOResult <> 0 then begin Display_Error('Unable to write to ', Upper(ParamStr(2))); Error := True end { if IOResult }; if (not Error) then begin {$I-} Reset(InputFile); {$I+} if IOResult <> 0 then begin Display_Error('Unable to read from ', Upper(ParamStr(1))); Error := True end { if IOResult } end { if }; Files_Opened := (not Error) end { Function Files_Opened }; begin { Program Template } if ParamCount = 2 then begin if File_Exists(ParamStr(1)) then begin if (not File_Exists(ParamStr(2))) then begin if Files_Opened(ParamStr(1), ParamStr(2)) then begin Parse_File; Close(InputFile); Close(OutputFile) end end else Display_Error('Output file already exists', '') end else Display_Error('Input file not found', '') end else Display_Error('Invalid number of parameters', '') end { Program Template }.