/* TEXC exec: based on the texc.script for Unix.                 */
/* This is version 2.0 as of 9 Nov. 1992.                        */
/* Written by Jim Hafner (hafner@almaden.ibm.com).               */
/*                                                               */
/* Command is:                                                   */
/*      TEXC [ifn.[ift [ofn.[oft]]]]                             */
/* Note: filemodes are not USED in the input and output file     */
/*       name specification.  They default to '*' and 'A' for    */
/*       the input and output files, respectively.               */
/*                                                               */
/* The defaults:                                                 */
/*   ifn: TEX     ift: LPRO                                      */
/*   ofn: TEXC    oft: LPRO                                      */

/* END OF HEADER (this line must be preceded by a blank line)    */

/* This program is part of the VM/CMS version of DVIPS, a TeX dvi to
 * PostScript driver written by Tom Rokicki.  It is used in the MKDVIPS
 * procedure to build the TEXC.LPRO file from the TEX.LPRO file.  This is
 * then followed by SQEEZE to remove the comment lines and pack the files
 * tighter.
 *
 * You are welcome to modify this exec in any way you choose.
 *
 * It reads the input file and deletes all the lines between and
 * including
 *    % begin code for uncompressed fonts only
 * and
 *    % end code for uncompressed fonts only
 * Then it strips the leading % comment symbol from all the succeeding
 * lines up to and including the line
 *    % % end of code for unpacking compressed fonts
 *
 * THANKS:
 *   Many thanks to Ronald Kappert (R.Kappert@uci.kun.nl) for sending
 *   me many suggestions to enhance the support for this program.
 *   Also, Michel Goossens (goossens@cernvm.cern.ch) for other ideas
 *   and helping with the testing.
 */

parse upper source . . execfn execft execfm .
parse upper arg ifn'.'ift ofn'.'oft .

default_ifn = 'TEX';  default_ofn = 'TEXC'

default_ift = 'LPRO'; ifm = '*';
default_oft = 'LPRO'; ofm = 'A1';

if ifn = '?' then signal show_header ;

if ifn = '' then ifn = default_ifn
if ift = '' then ift = default_ift
if ofn = '' then ofn = default_ofn
if oft = '' then oft = default_oft
upper ofn oft ofm

address 'COMMAND'

'STATE' ifn ift ifm
if rc^=0 then signal input_state_error

'STATE' ofn oft ofm
if rc=0 then do
   say execfn': Output File' ofn oft ofm 'already exists.'
   say execfn': Will overwrite with new version.'
   "ERASE "ofn oft ofm
   end
else if rc^=28 then signal output_state_error


'MAKEBUF'; lev = rc;

outputon = 1
stripcomment = 0

do forever
  'EXECIO 1 DISKR' ifn ift ifm '(VAR LINE'
  if rc ^= 0 then leave
  parse var line comment text
  if ( comment = "%" &,
            delword(text,5) = "begin code for uncompressed" ) then do
    outputon = 0
    stripcomment = 0
    end
  if (comment = "%" &,
            delword(text,5) = "% here's the alternate" ) then do
    stripcomment = 1
    outputon = 1
    end
  if ( outputon == 1 & stripcomment == 1 ) then
    'EXECIO 1 DISKW' ofn oft ofm '(STRING' text
  else if ( outputon = 1 & stripcomment == 0 ) then
    'EXECIO 1 DISKW' ofn oft ofm '(STRING' line
  if (comment = "%" &,
            delword(text,7) = "% end of code for unpacking" ) then do
    stripcomment = 0
    outputon = 1
    end
end
'DROPBUF' lev
'FINIS' ifn ift ifm
'FINIS' ofn oft ofm

exit


show_header:
   index=1
   line=Sourceline(index)
   Do While Substr(line,1,2)="/*"
      parse var line '/*' middle '*/'
      say middle
      index=index+1
      line=Sourceline(index)
      End
   Exit


input_state_error:
  if  rc = 28 then say execfn': Input File' ifn ift ifm 'does not exist.'
  else if rc = 36 then say execfn': Disk' ifm 'not accessed.'
  else                 say execfn': Error reading 'ifn ift ifm'.'
  exit rc

output_state_error:
  if rc = 36 then say execfn': Disk' ofm 'not accessed.'
  else            say execfn': Error writing to 'ofn oft ofm'.'
  exit rc

/* exit */

