[INHERIT('UTILITYOPS','SCREENHANDLERS','ARGOPS'), environment('basicfileops')]

MODULE BASICFILEOPS;

CONST

  maxfidchars = 255;
  ndatetimechars = 11;
  programversion = 'CVF02B';
  inifilename = 'INIT$RNOTOTEX';
  logfilename = 'RNOTOTEX.LOG';


TYPE

fidtype = VARYING[maxfidchars] of char;

datetimetype = packed array[1..ndatetimechars] of char;


VAR
  inputcontainstexcommands : [EXTERNAL] boolean;
  totallines, totalchars    : [EXTERNAL] integer;
  LOG                         : [EXTERNAL] text;




[GLOBAL] PROCEDURE noconversion;
begin
 writeln(log,'[no conversion performed]')
end;




[GLOBAL] PROCEDURE greetuser ( var d, t : datetimetype );
begin
  date( d );
  time( t );
  clearscreen;
  ttywritestring('RNOTOTEX ');
  ttywritestring(programversion);
  ttywritestring('    RUNOFF TO TEX CONVERSION    ');
  ttywritestring( d );
  ttywritestring( t );
  ttywriteln;
  ttywriteln;
  ttywriteln
end;





[GLOBAL] PROCEDURE openinputfile( fid : fidtype; var f : text; var openerror : boolean );
begin
  open( file_variable := f,
        file_name := fid,
        history := readonly,
        default := 'INPUT.RNO',
        error := continue );
  if status(f) <> 0 then
     openerror := true
  else
  begin
     reset( f );
     openerror := false
  end
end;





[GLOBAL] PROCEDURE openoutputfile(fid : fidtype; var f : text; var openerror:boolean);
begin
    open( file_variable := f,
          file_name := fid,
          history := new,
          default := 'OUTPUT.TEX',
          error := continue );
    if status(f) <> 0 then
       openerror := true
    else
    begin
       openerror := false;
       rewrite(f)
    end;
end;



[GLOBAL] PROCEDURE openinifile ( var f : text );
begin
   open( file_variable := f,
         file_name := inifilename,
         history := readonly,
         error := message );
   reset( f );
   ttywriteln;
   ttywritestring('Loading INI file ...')
end;




[GLOBAL] PROCEDURE openlogfile; { global var LOG : text used }
begin
  open( file_variable := log,
        file_name := logfilename,
        history := new,
        error := continue );
  rewrite( log )
end;



[GLOBAL] PROCEDURE closelogfile;
begin
  close( file_variable := log, error := continue )
end;

[GLOBAL] PROCEDURE closeinifile( var f : text );
begin
   close( file_variable := f, error := continue );
   ttywritestring('complete.');
   ttywriteln;
end;





[GLOBAL] PROCEDURE closefiles( var infile, outfile : text );

begin
  close(file_variable := infile, error := continue);
  close(file_variable := outfile, error := continue);
  ttywritestring('complete.');
  ttywriteln;
  ttywriteln;
  ttywriteln;
  if totallines = 1 then
     ttywritestring(' RNOTOTEX read only one line from the input file.')
  else
    if totallines = 0 then
      ttywritestring(' No end of line was found in the input file.')
    else
    begin
      ttywritestring(' RNOTOTEX processed a total of ');
      ttywriteint( totallines );
      ttywritestring(' lines.')
    end;
  ttywriteln;
  if totalchars = 1 then
     ttywritestring(' There was only one character in the file.')
  else
     if totalchars = 0 then
       ttywritestring(' No printable characters were found in the file.')
     else
     begin
        ttywritestring(' A total of ');
        ttywriteint( totalchars );
        ttywritestring(' characters were read.')
     end;
  ttywriteln
end;






[GLOBAL] PROCEDURE putcommentstooutput( var outfile : text; infid : fidtype;
                                       d, t : datetimetype );
begin
  writeln(outfile,'% document translated from DEC RUNOFF to LaTeX format');
  writeln(outfile,'% by program RNOTOTEX version ',programversion,' at ',d,blank,t);
  writeln(outfile,'% Source file :',infid);
  writeln(log,'[RNOTOTEX.LOG for ',infid,' ]');
  writeln(log,'[Processing at ',d, blank, t,' ]')
end;





[GLOBAL] PROCEDURE userinterface( var inputfid, outputfid : fidtype;
                                  var rno, tex : text );

type
   packedarray = packed array[1..255] of char;

var
  openerror : boolean;
  slashtex : integer;

  procedure getcli( var ifile, ofile : [class_s] packedarray;
                    var slashtex : integer ); fortran;
begin
     getcli( inputfid.body, outputfid.body, slashtex );
     inputfid.length := 75;
     outputfid.length := 75;
     openinputfile( inputfid, rno, openerror);
     if openerror then
       warningmessage('openinputfile','Could not open that input file.');
     openoutputfile( outputfid, TEX, openerror);
     if openerror then
        warningmessage('openoutputfile','Could not open that output file.');
     inputcontainstexcommands := slashtex <> 0
end;


END.