Program Help_processor (Input,Output) ; { Program description: Help pre-processor Author : Krish Singh Written: 8th Oct 1991 Version: 1.0 Limitations: The program doesn't examine the contents of !<...|...> constructions, to see if there are any `...' within them. Also, it seems impossible to include the string !<...|...> within the file it processes - this makes documenting the system itself rather difficult! } LABEL terminate; VAR inchar,nextchar,outchar,dummychar :CHAR; input_file,output_file,verbstring, instring,outstring,boldon,boldoff: VARYING [132] OF CHAR; i,istatus,il:integer; infile,outfile:text; bold,verbold:boolean; FUNCTION cli$get_value(com1:VARYING [a] OF CHAR;VAR com2:VARYING [b] OF CHAR;VAR i:integer):INTEGER;EXTERNAL; {---------------------------------------------------------------------------} Begin {Main program} boldon:='E[1m'; boldoff:='E[0m'; boldon[1]:=chr(27); boldoff[1]:=chr(27); verbold:=true; istatus:=cli$get_value('INFILE',input_file,il); { writeln('reading from ',input_file); } istatus:=cli$get_value('OUTFILE',output_file,il); { writeln('and writing to ',output_file); } { write('Input file>'); readln(input_file); write('Output file>'); readln(output_file); } OPEN(infile,input_file,default:='.help',history:=old); reset(infile); OPEN(outfile,output_file,default:=input_file,history:=new); extend(outfile); writeln (outfile,'! File produced by PPhlp/Helpproc from input file ', input_file); While not(eof(infile)) do Begin readln(infile,instring); IF ((length(instring)>0) and (instring[1]='!')) then begin { It might be an instruction to this program. In any case, } { don't write it out to the output, as it would be ignored } { by the help librarian } IF (instring='!helpproc{stop}') then goto terminate; IF (instring='!helpproc{verb_bold}') then verbold:=true; IF (instring='!helpproc{verb_nobold}') then verbold:=false; IF (instring='!begin{verbatim}') and (verbold) then instring:=boldon; IF (instring='!end{verbatim}') and (verbold) then instring:=boldoff; End Else Begin { Check the line for special characters, writing it out as } { we go. } i:=1; while (i<=length(instring)) do begin inchar:=instring[i]; If (inchar<>'''') AND (inchar<>'`') AND (inchar<>'!') then begin write(outfile,inchar); End Else begin IF (inchar='!') then begin nextchar:='Q'; IF (i<>length(instring)) then nextchar:=instring[i+1]; IF (nextchar='<') then begin while (instring[i]<>'|') AND (i<=length(instring)) do begin i:=i+1; End; i:=i+1; while (instring[i]<>'>') AND (i<=length(instring)) do begin write(outfile,instring[i]); i:=i+1; End; End Else begin write(outfile,inchar); End; End; IF (inchar='`') then begin bold:=true; write(outfile,boldon); End; IF (inchar='''') then begin IF not(bold) then write(outfile,''''); IF bold then write(outfile,boldoff); bold:=false; End; End; i:=i+1; End { while (i<=length(instring)) }; writeln(outfile); End; { if (instring[1] = '!') } End; terminate: close(infile);close(outfile); End. {Main program} {---------------------------------------------------------------------------}