home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 June / PCWorld_2000-06_cd.bin / Software / Vyzkuste / rogersps / rops52a.exe / ropsboot._ps < prev    next >
Text File  |  1999-09-24  |  24KB  |  680 lines

  1. %!
  2. % RoPS Interpreter - ropsboot._ps
  3. % Copyright Roger Willcocks, 1993-1999
  4. % All Rights Reserved
  5. %
  6. % The RoPS interpreter is an implementation of the level 1 PostScript
  7. % programming language interpreter described in Adobe Systems' book,
  8. % the 'PostScript language reference manual'.  RoPS is not an Adobe
  9. % approved product.  The name 'PostScript' is a registered trademark of
  10. % Adobe Systems Incorporated.
  11. %
  12. % This file, which must be called 'ropsboot._ps', is read automatically
  13. % as RoPS starts up.  After the entire file has been consumed the 'start'
  14. % procedure (which is defined towards the end of this file) is executed.
  15. % Everything that's not an operator is described in this file and can be
  16. % customized.
  17. %
  18. % Version 5.2a
  19.  
  20. /version (47.1) def
  21.  
  22. /true where { pop (ropsboot is already loaded) print flush
  23.         currentfile closefile } if
  24.  
  25. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  26. % At this point there's a prototype 'systemdict' on the dictionary %
  27. % stack which contains an entry for each operator, and that's all. %
  28. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  29. %%Page: 1 1
  30.  
  31. /systemdict currentdict def
  32.  
  33. /true 1 1 eq def
  34. /false true not def
  35. /null 1 array 0 get def
  36.  
  37. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  38. % put some dictionaries in systemdict %
  39. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  40.  
  41. /$error 20 dict def
  42. /errordict 100 dict def
  43. /userdict 501 dict def
  44. /FontDirectory
  45.     (fontinfo) getprofile pop /fontcount get
  46.     cvi 100 add dict readonly def
  47. /serverdict 20 dict def
  48. /statusdict 80 dict def
  49. /paperdict 20 dict def
  50.  
  51. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  52. % 'end' requires that there are at least three dictionaries     %
  53. % on the dictionary stack; juggle things so we can safely 'end' %
  54. % the dictionaries we are about to put in to systemdict.        %
  55. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  56.  
  57. userdict begin
  58.  
  59. /errout (%stderr) (w) file def
  60. /eprint { errout exch writestring } def
  61.  
  62. /=string 260 string def
  63. /=print { =string cvs print } bind def
  64. /=eprint { =string cvs eprint } bind def
  65. /= { =print (\n) print } bind def
  66.  
  67. systemdict begin
  68.  
  69. % override program's setting of unicode flag if necessary
  70. /unicode false def
  71.  
  72. /build$error {
  73.     $error begin
  74.         /recordstacks true def
  75.         /newerror false def
  76.         /errorname null def
  77.         /command null def
  78.     end % $error dictionary
  79. } bind def
  80.  
  81. /.error {   % in systemdict
  82. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  83. % following two lines report error as it occurs; not standard behaviour %
  84. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  85.  
  86. %%%    (error: ) print dup print (; ) print
  87. %%%    (command: ) print exch dup =print exch (\n) print pstack flush
  88.  
  89.     % following catches errors in this file (before the server has started)
  90.  
  91.     $error /newerror known not {
  92.         (error: ) print dup print (; ) print
  93.         (command: ) print exch dup =print exch flush
  94.         stop
  95.     } if
  96.  
  97.     $error /newerror true put
  98.     $error exch /errorname exch put
  99.     $error exch /command exch put
  100.     $error /recordstacks get {
  101.         count array astore $error exch /ostack exch put
  102.         $error /dstack countdictstack array dictstack put
  103.         $error /estack countexecstack array execstack
  104.         dup length 2 sub 0 exch getinterval put
  105.         $error /ostack get aload pop
  106.     } if
  107.     stop
  108. } bind def
  109.  
  110. % still putting things into systemdict
  111.  
  112. /handleerror { systemdict /errordict get /handleerror get exec } bind def
  113.  
  114. /framebuffer { cvi exch cvi exch [ 1 0 0 1 0 0 ] 3 1 roll {} framedevice } def % int int
  115.  
  116. % this should never be called by a normal program
  117. /setpagedevice { pop } bind def
  118. /setpageparams { pop pop pop pop } bind def
  119.  
  120. /dotscreen {
  121.     abs exch abs 2 copy add 1 gt
  122.         { 1 sub dup mul exch 1 sub dup mul add 1 sub }
  123.         { dup mul exch dup mul add 1 exch sub }
  124.     ifelse
  125. } bind def
  126.  
  127. {} setundercolorremoval
  128. {} setblackgeneration
  129.  
  130. %%%%%%%%%%%%%%%%%%%%%%%%%
  131. % create a frame buffer %
  132. %%%%%%%%%%%%%%%%%%%%%%%%%
  133.  
  134. /buildframe { % use current .ini file settings
  135.     statusdict begin
  136.  
  137.         /sizex 595 def % frame size in points
  138.         /sizey 842 def
  139.         (framebuffer) getprofile { { cvx exec def } forall } if % maybe override
  140.         sizex sizey framebuffer
  141.  
  142.         /freq_C 20 def /angle_C 15 def
  143.         /freq_M 20 def /angle_M 75 def
  144.         /freq_Y 20 def /angle_Y  0 def
  145.         /freq_K 20 def /angle_K 45 def
  146.         /htcanchange 0 def
  147.  
  148.         (halftone) getprofile { { cvx exec def } forall } if % maybe override
  149.  
  150.         freq_C angle_C { dotscreen }
  151.         freq_M angle_M { dotscreen }
  152.         freq_Y angle_Y { dotscreen }
  153.         freq_K angle_K { dotscreen } setcolorscreen
  154.     end
  155. } bind def
  156.  
  157. end % systemdict
  158. systemdict readonly pop
  159.  
  160. errordict begin
  161.  
  162. /handleerror {
  163.     $error /newerror get  % remember, dictionary stack may be full
  164.     {
  165.         $error /newerror false put
  166. %%%%%    (%%[ Error: ) print
  167. %%%%%    $error /errorname get =print
  168. %%%%%    (; OffendingCommand: ) print
  169. %%%%%    $error /command get =print
  170. %%%%%    ( ]%%\n) print % flush
  171.  
  172.         $error /errorname get /interrupt ne {
  173.             $error /command get =print (: ) print
  174.             $error /errorname get =print
  175.             (\n\nA fault has been detected in this\n) print
  176.             (document and it has been closed) print flush
  177.         } if
  178.     } if
  179. } bind def
  180.  
  181. /dictfull           { (dictfull)           .error } bind def
  182. /dictstackoverflow  { (dictstackoverflow)  .error } bind def
  183. /dictstackunderflow { (dictstackunderflow) .error } bind def
  184. /execstackoverflow  { (execstackoverflow)  .error } bind def
  185. /invalidaccess      { (invalidaccess)      .error } bind def
  186. /invalidexit        { (invalidexit)        .error } bind def
  187. /invalidfileaccess  { (invalidfileaccess)  .error } bind def
  188. /invalidfont        { (invalidfont)        .error } bind def
  189. /invalidrestore     { (invalidrestore)     .error } bind def
  190. /ioerror            { (ioerror)            .error } bind def
  191. /limitcheck         { (limitcheck)         .error } bind def
  192. /nocurrentpoint     { (nocurrentpoint)     .error } bind def
  193. /rangecheck         { (rangecheck)         .error } bind def
  194. /stackoverflow      { (stackoverflow)      .error } bind def
  195. /stackunderflow     { (stackunderflow)     .error } bind def
  196. /syntaxerror        { (syntaxerror)        .error } bind def
  197. /timeout            { (timeout)            .error } bind def
  198. /typecheck          { (typecheck)          .error } bind def
  199. /undefined          { (undefined)          .error } bind def
  200. /undefinedfilename  { (undefinedfilename)  .error } bind def
  201. /undefinedresult    { (undefinedresult)    .error } bind def
  202. /unmatchedmark      { (unmatchedmark)      .error } bind def
  203. /unregistered       { (unregistered)       .error } bind def
  204. /VMerror {
  205. %%%    (VMerror raised\n) print flush
  206.     $error /newerror true put
  207.     $error /errorname (VMerror) put
  208.     $error exch /command exch put
  209.     stop
  210. } bind def
  211. /interrupt          { (interrupt)          .error } bind def  % ctrl-C
  212.  
  213. end % errordict
  214.  
  215. serverdict begin
  216.  
  217. /statusmsg { (%%[ ) print print ( ]%%\n) print flush } bind def
  218.  
  219. /exitservercalled false def
  220.  
  221. /exitserver 
  222.     pop % ignore password
  223.     $error /newerror false put
  224.     serverdict /exitservercalled true put
  225.     stop
  226. } bind def
  227.  
  228. /execjob
  229. {
  230.     % catchall is just like stopped except that it
  231.     % also catches internal restart signal
  232.     {
  233.         build$error
  234.         { (%stdin) (r) file cvx exec } stopped
  235.         { 
  236.             $error /newerror get {
  237.                 { handleerror } stopped pop % catch errors in handler
  238. %%                (Flushing: rest of job (to end-of-file) will be ignored)
  239. %%                serverdict /statusmsg get exec
  240.             } if % newerror
  241.             stop
  242.         } if % stopped
  243.     } catchall { { (%stdin) (r) file flushfile } catchall pop } if
  244.     flush clear cleardictstack
  245. } bind def
  246.  
  247. end % serverdict
  248.  
  249. % still putting things into userdict
  250.  
  251. /letter    { 612 792 framebuffer } bind def
  252. /executive { 522 756 framebuffer } bind def
  253. /legal     { 612 1008 framebuffer } bind def
  254. /ledger    { 1224 792 framebuffer } bind def
  255. /11x17     { 792 1224 framebuffer } bind def
  256. /tabloid   { 792 1224 framebuffer } bind def
  257. /universal { 842 1224 framebuffer } bind def
  258. /a3 { 842 1190 framebuffer } bind def
  259. /a4 { 595 842 framebuffer } bind def
  260. /a5 { 420 595 framebuffer } bind def
  261. /a6 { 297 420 framebuffer } bind def
  262. /b4 { 729 1032 framebuffer } bind def
  263. /b5 { 516 729 framebuffer } bind def
  264. /b6 { 365 516 framebuffer } bind def
  265.  
  266. /cleardictstack { countdictstack 2 sub { end } repeat } bind def
  267.  
  268. statusdict begin
  269.  
  270.     /setresolution { pop } def
  271.     /setjobtimeout { pop } def
  272.     /setprintername { pop } def
  273.     /setmirrorprint { pop } def
  274.     /settumble { pop } def
  275.     /setduplex { pop } def
  276.  
  277.     % should vary according to target frame buffer
  278.     /processcolors 4 def % getframedepth def
  279.     /resolution 300 def
  280.     /jobtimeout 0 def
  281.     /waittimeout 0 def
  282.     /manualfeedtimeout 0 def
  283.     /printername (RoPS) def
  284.     /mirrorprint { false } def
  285.     /tumble { false } def
  286.     /duplex { false } def
  287.     /manualfeed { false } def
  288.  
  289.     /revision 510 def
  290.     /product (RoPS) readonly def
  291.     /pagecount 120361 def
  292.  
  293.     /lettertray    userdict /letter get def
  294.     /executivetray userdict /executive get def
  295.     /legaltray     userdict /legal get def
  296.     /11x17tray     userdict /11x17 get def
  297.     /tabloidtray   userdict /tabloid get def
  298.     /ledgertray    userdict /ledger get def
  299.     /universaltray userdict /universal get def
  300.     /a3tray userdict /a3 get def
  301.     /a4tray userdict /a4 get def
  302.     /a5tray userdict /a5 get def
  303.     /a6tray userdict /a6 get def
  304.     /b4tray userdict /b4 get def
  305.     /b5tray userdict /b5 get def
  306.     /b6tray userdict /b6 get def
  307.  
  308. end % statusdict
  309.  
  310. % still putting things into userdict
  311.  
  312. /StandardEncoding
  313. [
  314.     /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
  315.     /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
  316.     /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
  317.     /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
  318.     /.notdef/.notdef/.notdef/.notdef/space/exclam/quotedbl
  319.     /numbersign/dollar/percent/ampersand/quoteright/parenleft
  320.     /parenright/asterisk/plus/comma/hyphen/period/slash/zero/one
  321.     /two/three/four/five/six/seven/eight/nine/colon/semicolon
  322.     /less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K
  323.     /L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash
  324.     /bracketright/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g
  325.     /h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft
  326.     /bar/braceright/asciitilde/.notdef/.notdef/.notdef/.notdef
  327.     /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
  328.     /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
  329.     /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
  330.     /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
  331.     /.notdef/nbspace/exclamdown/cent/sterling/fraction/yen/florin
  332.     /section/currency/quotesingle/quotedblleft/guillemotleft
  333.     /guilsinglleft/guilsinglright/fi/fl/.notdef/endash/dagger
  334.     /daggerdbl/periodcentered/.notdef/paragraph/bullet/quotesinglbase
  335.     /quotedblbase/quotedblright/guillemotright/ellipsis/perthousand
  336.     /.notdef/questiondown/.notdef/grave/acute/circumflex/tilde
  337.     /macron/breve/dotaccent/dieresis/.notdef/degree/cedilla/.notdef
  338.     /hungarumlaut/ogonek/caron/emdash/.notdef/.notdef/.notdef
  339.     /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
  340.     /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/AE/.notdef
  341.     /ordfeminine/.notdef/.notdef/.notdef/.notdef/Lslash/Oslash/OE
  342.     /ordmasculine/.notdef/.notdef/.notdef/.notdef/.notdef/ae
  343.     /.notdef/.notdef/.notdef/dotlessi/.notdef/.notdef/lslash/oslash
  344.     /oe/germandbls/.notdef/.notdef/.notdef/.notdef
  345. ] def
  346.  
  347. /ISOLatin1Encoding
  348. [
  349.     /grave/acute/circumflex/tilde/macron/breve/dotaccent/dieresis
  350.     /ring/cedilla/hungarumlaut/ogonek/caron/dotlessi/fi/fl/Lslash
  351.     /lslash/Zcaron/zcaron/minus/.notdef/.notdef/.notdef/.notdef
  352.     /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/space
  353.     /exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle
  354.     /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash
  355.     /zero/one/two/three/four/five/six/seven/eight/nine/colon
  356.     /semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H
  357.     /I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft
  358.     /backslash/bracketright/asciicircum/underscore/grave/a/b/c/d
  359.     /e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z
  360.     /braceleft/bar/braceright/asciitilde/.notdef/.notdef/.notdef
  361.     /quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl
  362.     /circumflex/perthousand/Scaron/guilsinglleft/OE/.notdef/.notdef
  363.     /.notdef/.notdef/quoteleft/quoteright/quotedblleft/quotedblright
  364.     /bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe
  365.     /.notdef/.notdef/Ydieresis/.notdef/exclamdown/cent/sterling
  366.     /currency/yen/brokenbar/section/dieresis/copyright/ordfeminine
  367.     /guillemotleft/logicalnot/hyphen/registered/macron/degree
  368.     /plusminus/twosuperior/threesuperior/acute/mu/paragraph
  369.     /periodcentered/cedilla/onesuperior/ordmasculine/guillemotright
  370.     /onequarter/onehalf/threequarters/questiondown/Agrave/Aacute
  371.     /Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute
  372.     /Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth
  373.     /Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply
  374.     /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
  375.     /germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae
  376.     /ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute
  377.     /icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex
  378.     /otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex
  379.     /udieresis/yacute/thorn/ydieresis
  380. ] def
  381.  
  382. /findfont {
  383.     dup FontDirectory exch known not {
  384.         (fontinfo) getprofile pop /fontwarning get (1) eq {
  385.             (findfont: can't find ) print dup =print
  386.             (; using Courier) print flush
  387.         } if
  388.         dup CourierFont ttmap
  389.     } if
  390.     FontDirectory exch get
  391. } bind def
  392.  
  393. /==dict 20 dict def
  394.  
  395. ==dict begin
  396.     /=qc {  /str ( x) def         % quote a character
  397.         str exch 0 exch put
  398.         (\nx\\n\rx\\r\tx\\t\bx\\b\fx\\f\(x\\\(\)x\\\)\\x\\\\)
  399.         str search
  400.         { pop pop 0 2 getinterval }
  401.         { pop str 0 1 getinterval } ifelse print
  402.     } bind def
  403.  
  404.     /indent { 1 1 depth { pop (\t) print } for } def
  405.  
  406.     /expand {
  407.         indent dup type exec print
  408.         (\n) print
  409.     } bind def
  410.     /arraytype {
  411.         dup xcheck { ({\n) } { ([\n) } ifelse print
  412.         /depth depth 1 add def
  413.         dup rcheck { dup {expand} forall }
  414.         { indent (???\n) print } ifelse
  415.         /depth depth 1 sub def
  416.         indent xcheck { (}) } { (]) } ifelse
  417.     } bind def
  418.     /booleantype { { (true) } { (false) } ifelse } bind def
  419.     /dicttype { dup length =print ( ) print maxlength =print
  420.                 ( ) print (-dicttype-) } bind def
  421.     /filetype { pop (-filetype-) } bind def
  422.     /fonttype { pop (-fonttype-) } bind def
  423.     /integertype { =string cvs } bind def
  424.     /marktype { pop (-marktype-) } bind def
  425.     /nametype { dup xcheck not { (/) print } if =string cvs } bind def
  426.     /nulltype { pop (-nulltype-) } bind def
  427.     /operatortype { (--) print =string cvs print (--) } bind def
  428.     /realtype { =string cvs } bind def
  429.     /savetype { pop (-savetype-) } bind def
  430.     /stringtype { dup rcheck { (\() print {=qc} forall (\)) }
  431.             { pop (\(???\)) } ifelse } bind def
  432.  
  433.     /depth 0 def
  434. end % ==dict
  435.  
  436. /== {
  437.     ==dict begin
  438.     expand
  439.     end
  440. } bind def
  441.  
  442. /stack { count dup 1 add copy { = } repeat pop } bind def
  443. /pstack { count dup 1 add copy { == } repeat pop } bind def
  444. (\004) cvn {} def % ignore ^D in input file
  445. (\032) cvn {} def % and ^Z
  446.  
  447. /server
  448. {
  449.     { {
  450.         (%stdin) (r) file status not { exit } if
  451.  
  452.         serverdict /serversave save put
  453.         systemdict /buildframe get exec
  454.  
  455.         statusdict /htcanchange get 0 eq {
  456.             userdict /setscreen { pop pop pop } put
  457.             userdict /setcolorscreen { 12 { pop } repeat } put
  458.         } if
  459.  
  460.         serverdict /execjob get exec
  461.         serverdict /exitservercalled get
  462.         serverdict /serversave get restore
  463.         {
  464.             (exitserver : permanent state may be changed)
  465.             serverdict /statusmsg get exec
  466.             serverdict /execjob get exec
  467.  
  468.         } if % exitservercalled
  469.     } catchall pop } loop
  470. } bind def
  471.  
  472. /quit  { stop } bind def
  473. /start { server } bind def
  474.  
  475. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  476. % userdict is still on stack; system/user specific stuff starts here %
  477. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  478.  
  479. /encode {
  480.     { 1 index def 1 add } forall pop
  481. } bind def
  482.  
  483. /TT_ANSI_CharStrings 650 dict dup  % map character name to font entry
  484. begin
  485.  
  486. 32 [
  487. /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle
  488. /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one
  489. /two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal
  490. /greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S
  491. /T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum
  492. /underscore/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t
  493. /u/v/w/x/y/z/braceleft/bar/braceright/asciitilde/.notdef
  494. ] encode
  495.  
  496. 16#a0 [
  497. /nbspace/exclamdown/cent/sterling/currency/yen/brokenbar
  498. /section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot
  499. /sfthyphen/registered/macron/degree/plusminus/twosuperior
  500. /threesuperior/acute/mu/paragraph/periodcentered/cedilla
  501. /onesuperior/ordmasculine/guillemotright/onequarter/onehalf
  502. /threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde
  503. /Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex
  504. /Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde
  505. /Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash
  506. /Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
  507. /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
  508. /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex
  509. /idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde
  510. /odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis
  511. /yacute/thorn/ydieresis] encode
  512.  
  513. unicode not {
  514.     % Windows encoding
  515.  
  516.     130 [
  517.     /quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl
  518.     /circumflex/perthousand/Scaron/guilsinglleft/OE
  519.     ] encode
  520.  
  521.     145 [
  522.     /quoteleft/quoteright/quotedblleft/quotedblright/bullet
  523.     /endash/emdash/tilde/trademark/scaron/guilsinglright/oe
  524.     ] encode
  525.  
  526.     /minus 150 def
  527.     /Ydieresis 159 def
  528.     /fi f i 16#10000 mul add def
  529.     /fl f l 16#10000 mul add def
  530.  
  531.     % skip over Unicode encoding
  532.     { currentfile =string readline pop (/xyzzy) eq { exit } if } loop
  533. } if
  534.  
  535. % NT (Unicode) encoding
  536.  
  537. 16#100 [
  538. /Amacron/amacron/Abreve/abreve/Aogonek/aogonek/Cacute/cacute/Ccircumflex
  539. /ccircumflex/Cdot/cdot/Ccaron/ccaron/Dcaron/dcaron/Dslash/dmacron
  540. /Emacron/emacron/Ebreve/ebreve/Edot/edot/Eogonek/eogonek/Ecaron/ecaron
  541. /Gcircumflex/gcircumflex/Gbreve/gbreve/Gdot/gdot/Gcedilla/gcedilla
  542. /Hcircumflex/hcircumflex/Hbar/hbar/Itilde/itilde/Imacron/imacron/Ibreve
  543. /ibreve/Iogonek/iogonek/Idot/dotlessi/IJ/ij/Jcircumflex/jcircumflex
  544. /Kcedilla/kcedilla/kgreenlandic/Lacute/lacute/Lcedilla/lcedilla/Lcaron
  545. /lcaron/Ldot/ldot/Lslash/lslash/Nacute/nacute/Ncedilla/ncedilla/Ncaron
  546. /ncaron/napostrophe/Eng/eng/Omacron/omacron/Obreve/obreve/Odblacute
  547. /odblacute/OE/oe/Racute/racute/Rcedilla/rcedilla/Rcaron/rcaron/Sacute
  548. /sacute/Scircumflex/scircumflex/Scedilla/scedilla/Scaron/scaron/Tcedilla
  549. /tcedilla/Tcaron/tcaron/Tbar/tbar/Utilde/utilde/Umacron/umacron/Ubreve
  550. /ubreve/Uring/uring/Udblacute/udblacute/Uogonek/uogonek/Wcircumflex
  551. /wcircumflex/Ycircumflex/ycircumflex/Ydieresis/Zacute/zacute/Zdot/zdot
  552. /Zcaron/zcaron/longs
  553. ] encode
  554.  
  555. 16#384 [
  556. /tonos/dieresistonos/Alphatonos/anoteleia/Epsilontonos/Etatonos
  557. /Iotatonos/c38b/Omicrontonos/c38d/Upsilontonos/Omegatonos
  558. /iotadieresistonos/Alpha/Beta/Gamma/Delta/Epsilon/Zeta/Eta/Theta/Iota
  559. /Kappa/Lambda/Mu/Nu/Xi/Omicron/Pi/Rho/c3a2/Sigma/Tau/Upsilon/Phi
  560. /Chi/Psi/Omega/Iotadieresis/Upsilondieresis/alphatonos/epsilontonos
  561. /etatonos/iotatonos/upsilon-dieresistonos/alpha/beta/gamma/delta/epsilon
  562. /zeta/eta/theta/iota/kappa/lambda/mu/nu/xi/omicron/pi/rho/sigma1
  563. /sigma/tau/upsilon/phi/chi/psi/omega/iotadieresis/upsilondieresis
  564. /omicrontonos/upsilontonos/omegatonos
  565. ] encode
  566.  
  567. % read and define key / value pairs until key = /zyzzy is seen
  568.  
  569. {
  570.     currentfile token pop dup /xyzzy eq
  571.     { pop exit }
  572.     { currentfile token pop def } ifelse
  573. } loop
  574.  
  575. /florin 16#192/Aringacute 16#1fa/aringacute 16#1fb/AEacute 16#1fc
  576. /aeacute 16#1fd/Oslashacute 16#1fe/oslashacute 16#1ff/circumflex
  577. 16#2c6/caron 16#2c7/macron 16#2c9/tilde 16#2d6/breve 16#2d8
  578. /dotaccent 16#2d9/ring 16#2da/ogonek 16#2db/tilde 16#2dc
  579. /hungarumlaut 16#2dd
  580.  
  581. /Wgrave 16#1e80/wgrave 16#1e81/Wacute 16#1e82/wacute 16#1e83
  582. /Wdieresis 16#1e84/wdieresis 16#1e85/Ygrave 16#1ef2/ygrave 16#1ef3
  583. /endash 16#2013/emdash 16#2014/underscoredbl 16#2017/quoteleft
  584. 16#2018/quoteright 16#2019/quotesinglbase 16#201a/quotereversed
  585. 16#201b/quotedblleft 16#201c/quotedblright 16#201d/quotedblbase
  586. 16#201e/dagger 16#2020/daggerdbl 16#2021/bullet 16#2022/ellipsis
  587. 16#2026/perthousand 16#2030/minute 16#2032/second 16#2033
  588. /guilsinglleft 16#2039/guilsinglright 16#203a/exclamdbl 16#203c
  589. /radicalex 16#203e/fraction 16#2044/nsuperior 16#207f/franc 16#20a3
  590. /peseta 16#20a7/trademark 16#2122/Ohm 16#2126/estimated 16#212e
  591. /oneeighth 16#215b/threeeighths 16#215c/fiveeighths 16#215d
  592. /seveneighths 16#215e/arrowleft 16#2190/arrowup 16#2191/arrowright
  593. 16#2192/arrowdown 16#2193/arrowboth 16#2194/arrowupdn 16#2195
  594. /arrowupdnbse 16#21a8/partialdiff 16#2202/increment 16#2206/product
  595. 16#220f/summation 16#2211/minus 16#2212/fraction 16#2215
  596. /periodcentered 16#2219/radical 16#221a/infinity 16#221e/orthogonal
  597. 16#221f/intersection 16#2229/integral 16#222b/approxequal 16#2248
  598. /notequal 16#2260/equivalence 16#2261/lessequal 16#2264/greaterequal
  599. 16#2265/house 16#2302/revlogicalnot 16#2310/integraltp
  600. 16#2320/integralbt 16#2321/upblock 16#2580/dnblock 16#2584/block
  601. 16#2588/lfblock 16#258c/rtblock 16#2590/ltshade 16#2591/shade
  602. 16#2592/dkshade 16#2593/filledbox 16#25a0/filledrect 16#25ac/triagup
  603. 16#25b2/triagrt 16#25ba/triagdn 16#25bc/triaglf 16#25c4/lozenge
  604. 16#25ca/circle 16#25cb/invbullet 16#25d8/invcircle 16#25d9/openbullet
  605. 16#25e6/smileface 16#263a/invsmileface 16#263b/sun 16#263c/female
  606. 16#2640/male 16#2642/spade 16#2660/club 16#2663/heart 16#2665/diamond
  607. 16#2666/musicalnote 16#266a/musicalnotedbl 16#266b/applelogo
  608. 16#f000/fi 16#f001/fl 16#f002
  609.  
  610. %% do not delete, change or comment the following line !!!
  611. /xyzzy
  612.  
  613. end def % TT_ANSI_CharStrings
  614.  
  615. /TT_BuildChar {
  616.     exch begin
  617.     SymbolFont {
  618.     %    unicode { 16#8000 add } if
  619.     }
  620.     {
  621.         Encoding exch get
  622.         dup CharStrings exch known not
  623.         { pop (.notdef) } if
  624.         CharStrings exch get
  625.     } ifelse
  626.     end
  627.     dup 127 ne { ttchar } { pop } ifelse
  628. } bind def
  629.  
  630. /TT_FontInfo <<
  631.     /UnderlinePosition -0.1
  632.     /UnderlineThickness 0.1
  633. >> def
  634.  
  635. /Type1BuildChar {   % font char
  636.     exch begin
  637.     Encoding exch get
  638.     CharStrings exch get
  639.     end xexec
  640. } bind def
  641.  
  642. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  643. % This function associates PostScript font names with Windows TrueType %
  644. % fonts.  The RoPS interpreter uses the Windows rendering routines to  %
  645. % paint the TrueType characters.                                       %
  646. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  647.  
  648. /ttmap {
  649.     14 dict dup begin
  650.     exch /TTName exch def
  651.     exch /FontName exch def
  652.     /UniqueID FontDirectory length 16#4000000 add def
  653.     /Metrics 0 dict def
  654.     /PaintType 0 def
  655.     /FontMatrix [ 1.0 0.0 0.0 1.0 0.0 0.0 ] readonly def
  656.     /FontType 3 def
  657.     /Encoding StandardEncoding def
  658.     /FontBBox { 0 0 0 0 } readonly def
  659.     /SymbolFont FontName /Symbol eq def
  660.     /CharStrings TT_ANSI_CharStrings def
  661.     /BuildChar /TT_BuildChar load def
  662.     /FontInfo TT_FontInfo def
  663.     FontName end
  664.     exch definefont pop
  665. } bind def
  666.  
  667. (fontlist) getprofile { { ttmap } forall } if
  668. (fontalias) getprofile { { ttmap } forall } if
  669. /CourierFont FontDirectory /Courier get /TTName get def
  670.  
  671. buildframe % create a default frame buffer
  672. /Courier findfont 12 scalefont setfont
  673.  
  674. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  675. % when we fall off the end of this file, 'start' will be executed %
  676. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  677.  
  678. % --- end ---
  679.