(******************************************************** ** PROGRAM TITLE: ConChar ** ** WRITTEN BY: RAYMOND E. PENLEY ** DATE WRITTEN: 19 June 1980 ** ** WRITTEN FOR: PASCAL/Z USERS ** ** ********************************************************) Program CONCHARDEMO; LABEL 999; { Fatal error } CONST default = 80; { Default length of strings } input = 0; { *** Implementation dependent *** } strmax = 255; space = ' '; TYPE Linebuffer = STRING 80;{ Command line input buffer } (*---Pascal/Z needs these TYPE definitions------*) str0 = STRING 0 ; str255 = STRING strmax; VAR bell : char; Cmlline : STRING default;{ this prgms Console input buffer } Cmllen : integer; fatal_error : boolean; Text_file, Work_file : Text; (*---Pascal/Z needs these definitions------*) Function length(x: str255): integer; external; Procedure setlength(var x: str0; y: integer); external; Procedure GCML( VAR Line : Linebuffer; VAR len : integer ); { Read the system input buffer. This MUST be the first read in the entire program. RETURNS: len = 0 if buffer is empty else the length of line Line = operating system buffer GLOBAL Linebuffer : string 80; } begin setlength(line,0); len := 0; If not eoln(input) then begin{ read from the input buffer } readln(line); len := length(line); end{ read from the input buffer }; End{of GCML}; Procedure ConnectFiles; LABEL 3; CONST FSpecLeng = 14; { Max length of total CP/M file Identifier } TYPE fspecs = array[1..FSpecLeng] of char; FileSpecs = array[1..2] of fspecs; extension = array[1..4] of char; FileNames = array[1..FSpecLeng] of char; VAR fspec: FileSpecs; flen: 0..FSpecLeng; Cmlptr: 1..80; CmlCh: char; ext_specified: boolean; pos: 0..255; Procedure FILE_SCAN; begin (* OPEN file "fspec[2]" for READ assign Text_file *) RESET(fspec[2],Text_file); If not EOF(Text_file) then (* OPEN file "fspec[1]" for WRITE assign Work_File *) REWRITE(fspec[1],Work_File) Else begin Write('File ', fspec[2],'not found.'); {EXIT}fatal_error := true; end; end{of file scan}; Procedure QUIT; begin Writeln(bell,' Command Line error.'); Writeln('Your Command line --->',Cmlline); Writeln('You entered ',Cmllen:3,' characters'); writeln; write( '< (dr unit:)Input File name.PAS > '); writeln('< (dr unit:)Output File name(.XRF) >'); writeln; writeln('Input file must be a Pascal progam.'); writeln('Output file name may have an extension of your choice.'); writeln('If not specified the output file ext = .XRF'); writeln('() = otional'); writeln;writeln; fatal_error := true; end; Procedure Next_ClmCh; begin If (Cmlptr >= Cmllen) then fatal_error := true Else begin Cmlptr := Cmlptr + 1; CmlCh := Cmlline[Cmlptr]; end; end; Procedure GetFspec( IO: integer; dfltext: extension ); LABEL 4; Procedure Get_Next; begin If (flen >= FSpecLeng) then fatal_error := true Else begin FSPEC[IO][flen] := CmlCh; flen := flen + 1; Next_ClmCh; end; end; begin{ get fspec } FSPEC[IO] := ' '; flen := 1; ext_specified := false; while CmlCh IN ['A'..'Z','0'..'9',':','.'] do begin If not ext_specified then ext_specified := (CmlCh='.'); Get_Next;If fatal_error then{EXIT}goto 4; end; If (flen > 1) and (not ext_specified) then for pos := 1 to 4 do begin FSPEC[IO][flen] := dfltext[pos]; flen := flen + 1; end; 4: end{ Get Fspec }; begin{ ConnectFiles } { Read the system input buffer into Cmlline } GCML(CmlLine,Cmllen); If (Cmllen=0) then{EXIT} begin fatal_error := true;goto 3 end; CmlCh := CmlLine[1]; Cmlptr := 1; Cmllen := Cmllen + 1; CmlLine[Cmllen] := space; While (CmlCh = space) AND (not fatal_error) do Next_ClmCh; Getfspec(2,'.PAS'); If flen=1 then begin Write( 'No Input File Specified.'); fatal_error := true; {EXIT}goto 3; end; Next_ClmCh; While (CmlCh = space) AND (not fatal_error) do Next_ClmCh; Getfspec(1,'.XRF'); If flen=1 then begin Write( 'No Output File Specified.'); fatal_error := true; {EXIT}goto 3; end; FILE_SCAN; 3: If fatal_error then QUIT; end{ Connect files }; Procedure Initialize; LABEL 5; begin fatal_error := false; bell := chr(7); ConnectFiles; If fatal_error then goto 5; { } { continue with initialization now } { } 5: end; begin(*---ConChar Demo---*) writeln(' ':15,'--- Command Line Input Demo ---'); writeln;writeln; writeln('This program reads directly from the system buffer.'); writeln('Proper execution will provide your program with:'); writeln(' 1. a drive unit and a file name so you can'); writeln(' open a file for input.'); writeln(' 2. A drive unit and a file name for an output'); writeln(' file. The extension defaults to .XRF if not specified.'); Writeln('Execute this program like so:'); writeln(' CONCHAR A:input file.PAS B:output file.XRF'); writeln;writeln; Initialize; If fatal_error then{HALT} goto 999; Writeln('---End of program'); writeln; 999:{Fatal error} end. .