ar{AltsysCFD3 begin BuildChr end}bind def\n) writestring
   out (/FileNames[) writestring
   2 { out OutBase (.CSR) concatstrings write==only } repeat
   out (]def\n) writestring
 } }
 { (currentfile eexec) {
   pop out (systemdict begin\n) writestring
   dup //.eexec_param_dict /eexecDecode filter
 } }
 { (dup/CharStrings ) {
        % Copy the individual CharStrings to the CSR file,
        % recording the lengths and offsets.
   pop out (dup/CharStrings AltsysCFD3 /CharStrings get put\n) writestring
   /offsets 256 dict def
    { dup token pop		% char name
      dup dup type /nametype eq exch xcheck not and not { pop exit } if
      1 index token pop		% length of binary data
      2 index token pop pop	% skip RD
      2 index buffer 0 3 index getinterval readstring pop	% charstring
      offsets 3 index csr fileposition 16 bitshift 4 index add put
      csr exch writestring pop pop
      dup buffer readline pop pop	% skip ND
    }
   loop
        % We skipped the 'end'; skip the 'readonly put' as well.
   2 { dup token pop pop } repeat
   out (dup/PGOffsets ) writestring
     out csr fileposition write=only
     out ( put\n) writestring
   encoding
    { offsets exch .knownget not { 0 } if
      2 { csr 0 write } repeat
      4 { dup -24 bitshift csr exch write 8 bitshift } repeat pop
    }
   forall
 } }
 { (/OtherSubrs[) {
   pop
    { dup buffer readline pop
      (]noaccess def) search { pop pop pop exit } if pop
    }
   loop
 } }
 { (/Subrs 5 array) {
   pop out (/Subrs AltsysCFD3 /Subrs get def\n) writestring
   6 { dup buffer readline pop pop } repeat
 } }
 { (currentfile closefile) {
   pop out (end % systemdict\n) writestring
   closefile
 } }
                % Patterns for other supplements.
 { (pgfonts/) {
    { cdfromstr search not { exit } if
      out exch writestring pop out cdstr writestring
    }
   loop out exch writestring out (\n) writestring
 } }
 { (/BuildChar{AltsysCFD3 begin 64 BuildCh end}bind def) {
   pop out (\t/BuildChar AltsysCFD3 /BuildChar get def\n) writestring
 } }
 { (/CDevProc{pop pop pop pop 0 exch -1000 exch 2 div ) {
   pop out (\t/CDevProc AltsysCFD3 /CDevProc get def\n) writestring
 } }
 { (/CharStrings 1 dict dup begin) {
   pop out (\t/CharStrings AltsysCFD3 /CharStrings get def\n) writestring
   2 { dup buffer readline pop pop } repeat
 } }
 { (/FontMatrix[0.001 0.0 0.0 0.001 0.0 0.0]def) {
   pop out (\t/FontMatrix AltsysCFD3 /FontMatrix get def\n) writestring
 } }
 { (/Private 14 dict dup begin) {
   pop out (\t/Private) writestring
    { dup buffer readline pop
      (end def) search { pop pop pop exit } if
      (/Std) search
       { pop pop dup length 3 sub 3 exch getinterval
         (]) search pop out ( ) writestring out exch writestring pop
       }
      if pop
    }
   loop out ( AltsysCFD3 begin BuildPr end def\n) writestring
 } }
 { (UniqueID) { pop } }
 { () {
   out exch writestring out (\n) writestring
 } }
] def
[ (SR) (SA) (SK) (SB) (UG) ]
 { 0 1 255 { encoding exch /.notdef put } for
   inprefix exch concatstrings macrfile
    { dup buffer readline not { pop exit } if
      /patterns load
       { 2 copy 0 get search { pop pop pop 1 get exec exit } if pop pop }
      forall
    }
   loop closefile
 }
forall
csr closefile

                % Copy the definition of the root font.

dup buffer readstring pop out exch writestring closefile
out (
setpacking
) writestring
out closefile

                % Remove the Mac garbage from the outline files.

[ (COD) (CSA) ]
 { CDir (/) concatstrings (JIS83-1_) concatstrings
     1 index concatstrings macrfile
   exch OutDot exch concatstrings
     QUIET not { (Writing ) print dup = flush } if
     (w) file
                % Stack: infile outfile
    { 1 index buffer readstring exch
                % Stack: infile outfile noteof substring
      2 index exch writestring not { exit } if
    }
   loop closefile closefile
 }
forall

 } bind def

% If the program was invoked from the command line, run it now.
[ .shellarguments
 { counttomark 5 eq
    { convert
      QUIET not { (Done.\n) print flush } if
    }
    { cleartomark
      (Usage: gsnd -- rollconv.ps FName OutBase InDir CDir OutDir\n) print
      ( e.g.: gsnd -- rollconv.ps HGMinchoE mincho HGfonts/Mincho HGfonts/Mincho HGfonts/gs\n) print flush
      mark
    }
   ifelse
 }
if pop
