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 >
Wrap
Text File
|
1999-09-24
|
24KB
|
680 lines
%!
% RoPS Interpreter - ropsboot._ps
% Copyright Roger Willcocks, 1993-1999
% All Rights Reserved
%
% The RoPS interpreter is an implementation of the level 1 PostScript
% programming language interpreter described in Adobe Systems' book,
% the 'PostScript language reference manual'. RoPS is not an Adobe
% approved product. The name 'PostScript' is a registered trademark of
% Adobe Systems Incorporated.
%
% This file, which must be called 'ropsboot._ps', is read automatically
% as RoPS starts up. After the entire file has been consumed the 'start'
% procedure (which is defined towards the end of this file) is executed.
% Everything that's not an operator is described in this file and can be
% customized.
%
% Version 5.2a
/version (47.1) def
/true where { pop (ropsboot is already loaded) print flush
currentfile closefile } if
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% At this point there's a prototype 'systemdict' on the dictionary %
% stack which contains an entry for each operator, and that's all. %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%Page: 1 1
/systemdict currentdict def
/true 1 1 eq def
/false true not def
/null 1 array 0 get def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% put some dictionaries in systemdict %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
/$error 20 dict def
/errordict 100 dict def
/userdict 501 dict def
/FontDirectory
(fontinfo) getprofile pop /fontcount get
cvi 100 add dict readonly def
/serverdict 20 dict def
/statusdict 80 dict def
/paperdict 20 dict def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 'end' requires that there are at least three dictionaries %
% on the dictionary stack; juggle things so we can safely 'end' %
% the dictionaries we are about to put in to systemdict. %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
userdict begin
/errout (%stderr) (w) file def
/eprint { errout exch writestring } def
/=string 260 string def
/=print { =string cvs print } bind def
/=eprint { =string cvs eprint } bind def
/= { =print (\n) print } bind def
systemdict begin
% override program's setting of unicode flag if necessary
/unicode false def
/build$error {
$error begin
/recordstacks true def
/newerror false def
/errorname null def
/command null def
end % $error dictionary
} bind def
/.error { % in systemdict
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% following two lines report error as it occurs; not standard behaviour %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% (error: ) print dup print (; ) print
%%% (command: ) print exch dup =print exch (\n) print pstack flush
% following catches errors in this file (before the server has started)
$error /newerror known not {
(error: ) print dup print (; ) print
(command: ) print exch dup =print exch flush
stop
} if
$error /newerror true put
$error exch /errorname exch put
$error exch /command exch put
$error /recordstacks get {
count array astore $error exch /ostack exch put
$error /dstack countdictstack array dictstack put
$error /estack countexecstack array execstack
dup length 2 sub 0 exch getinterval put
$error /ostack get aload pop
} if
stop
} bind def
% still putting things into systemdict
/handleerror { systemdict /errordict get /handleerror get exec } bind def
/framebuffer { cvi exch cvi exch [ 1 0 0 1 0 0 ] 3 1 roll {} framedevice } def % int int
% this should never be called by a normal program
/setpagedevice { pop } bind def
/setpageparams { pop pop pop pop } bind def
/dotscreen {
abs exch abs 2 copy add 1 gt
{ 1 sub dup mul exch 1 sub dup mul add 1 sub }
{ dup mul exch dup mul add 1 exch sub }
ifelse
} bind def
{} setundercolorremoval
{} setblackgeneration
%%%%%%%%%%%%%%%%%%%%%%%%%
% create a frame buffer %
%%%%%%%%%%%%%%%%%%%%%%%%%
/buildframe { % use current .ini file settings
statusdict begin
/sizex 595 def % frame size in points
/sizey 842 def
(framebuffer) getprofile { { cvx exec def } forall } if % maybe override
sizex sizey framebuffer
/freq_C 20 def /angle_C 15 def
/freq_M 20 def /angle_M 75 def
/freq_Y 20 def /angle_Y 0 def
/freq_K 20 def /angle_K 45 def
/htcanchange 0 def
(halftone) getprofile { { cvx exec def } forall } if % maybe override
freq_C angle_C { dotscreen }
freq_M angle_M { dotscreen }
freq_Y angle_Y { dotscreen }
freq_K angle_K { dotscreen } setcolorscreen
end
} bind def
end % systemdict
systemdict readonly pop
errordict begin
/handleerror {
$error /newerror get % remember, dictionary stack may be full
{
$error /newerror false put
%%%%% (%%[ Error: ) print
%%%%% $error /errorname get =print
%%%%% (; OffendingCommand: ) print
%%%%% $error /command get =print
%%%%% ( ]%%\n) print % flush
$error /errorname get /interrupt ne {
$error /command get =print (: ) print
$error /errorname get =print
(\n\nA fault has been detected in this\n) print
(document and it has been closed) print flush
} if
} if
} bind def
/dictfull { (dictfull) .error } bind def
/dictstackoverflow { (dictstackoverflow) .error } bind def
/dictstackunderflow { (dictstackunderflow) .error } bind def
/execstackoverflow { (execstackoverflow) .error } bind def
/invalidaccess { (invalidaccess) .error } bind def
/invalidexit { (invalidexit) .error } bind def
/invalidfileaccess { (invalidfileaccess) .error } bind def
/invalidfont { (invalidfont) .error } bind def
/invalidrestore { (invalidrestore) .error } bind def
/ioerror { (ioerror) .error } bind def
/limitcheck { (limitcheck) .error } bind def
/nocurrentpoint { (nocurrentpoint) .error } bind def
/rangecheck { (rangecheck) .error } bind def
/stackoverflow { (stackoverflow) .error } bind def
/stackunderflow { (stackunderflow) .error } bind def
/syntaxerror { (syntaxerror) .error } bind def
/timeout { (timeout) .error } bind def
/typecheck { (typecheck) .error } bind def
/undefined { (undefined) .error } bind def
/undefinedfilename { (undefinedfilename) .error } bind def
/undefinedresult { (undefinedresult) .error } bind def
/unmatchedmark { (unmatchedmark) .error } bind def
/unregistered { (unregistered) .error } bind def
/VMerror {
%%% (VMerror raised\n) print flush
$error /newerror true put
$error /errorname (VMerror) put
$error exch /command exch put
stop
} bind def
/interrupt { (interrupt) .error } bind def % ctrl-C
end % errordict
serverdict begin
/statusmsg { (%%[ ) print print ( ]%%\n) print flush } bind def
/exitservercalled false def
/exitserver
{
pop % ignore password
$error /newerror false put
serverdict /exitservercalled true put
stop
} bind def
/execjob
{
% catchall is just like stopped except that it
% also catches internal restart signal
{
build$error
{ (%stdin) (r) file cvx exec } stopped
{
$error /newerror get {
{ handleerror } stopped pop % catch errors in handler
%% (Flushing: rest of job (to end-of-file) will be ignored)
%% serverdict /statusmsg get exec
} if % newerror
stop
} if % stopped
} catchall { { (%stdin) (r) file flushfile } catchall pop } if
flush clear cleardictstack
} bind def
end % serverdict
% still putting things into userdict
/letter { 612 792 framebuffer } bind def
/executive { 522 756 framebuffer } bind def
/legal { 612 1008 framebuffer } bind def
/ledger { 1224 792 framebuffer } bind def
/11x17 { 792 1224 framebuffer } bind def
/tabloid { 792 1224 framebuffer } bind def
/universal { 842 1224 framebuffer } bind def
/a3 { 842 1190 framebuffer } bind def
/a4 { 595 842 framebuffer } bind def
/a5 { 420 595 framebuffer } bind def
/a6 { 297 420 framebuffer } bind def
/b4 { 729 1032 framebuffer } bind def
/b5 { 516 729 framebuffer } bind def
/b6 { 365 516 framebuffer } bind def
/cleardictstack { countdictstack 2 sub { end } repeat } bind def
statusdict begin
/setresolution { pop } def
/setjobtimeout { pop } def
/setprintername { pop } def
/setmirrorprint { pop } def
/settumble { pop } def
/setduplex { pop } def
% should vary according to target frame buffer
/processcolors 4 def % getframedepth def
/resolution 300 def
/jobtimeout 0 def
/waittimeout 0 def
/manualfeedtimeout 0 def
/printername (RoPS) def
/mirrorprint { false } def
/tumble { false } def
/duplex { false } def
/manualfeed { false } def
/revision 510 def
/product (RoPS) readonly def
/pagecount 120361 def
/lettertray userdict /letter get def
/executivetray userdict /executive get def
/legaltray userdict /legal get def
/11x17tray userdict /11x17 get def
/tabloidtray userdict /tabloid get def
/ledgertray userdict /ledger get def
/universaltray userdict /universal get def
/a3tray userdict /a3 get def
/a4tray userdict /a4 get def
/a5tray userdict /a5 get def
/a6tray userdict /a6 get def
/b4tray userdict /b4 get def
/b5tray userdict /b5 get def
/b6tray userdict /b6 get def
end % statusdict
% still putting things into userdict
/StandardEncoding
[
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/space/exclam/quotedbl
/numbersign/dollar/percent/ampersand/quoteright/parenleft
/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one
/two/three/four/five/six/seven/eight/nine/colon/semicolon
/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K
/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash
/bracketright/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g
/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft
/bar/braceright/asciitilde/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/nbspace/exclamdown/cent/sterling/fraction/yen/florin
/section/currency/quotesingle/quotedblleft/guillemotleft
/guilsinglleft/guilsinglright/fi/fl/.notdef/endash/dagger
/daggerdbl/periodcentered/.notdef/paragraph/bullet/quotesinglbase
/quotedblbase/quotedblright/guillemotright/ellipsis/perthousand
/.notdef/questiondown/.notdef/grave/acute/circumflex/tilde
/macron/breve/dotaccent/dieresis/.notdef/degree/cedilla/.notdef
/hungarumlaut/ogonek/caron/emdash/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/AE/.notdef
/ordfeminine/.notdef/.notdef/.notdef/.notdef/Lslash/Oslash/OE
/ordmasculine/.notdef/.notdef/.notdef/.notdef/.notdef/ae
/.notdef/.notdef/.notdef/dotlessi/.notdef/.notdef/lslash/oslash
/oe/germandbls/.notdef/.notdef/.notdef/.notdef
] def
/ISOLatin1Encoding
[
/grave/acute/circumflex/tilde/macron/breve/dotaccent/dieresis
/ring/cedilla/hungarumlaut/ogonek/caron/dotlessi/fi/fl/Lslash
/lslash/Zcaron/zcaron/minus/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/space
/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle
/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash
/zero/one/two/three/four/five/six/seven/eight/nine/colon
/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H
/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft
/backslash/bracketright/asciicircum/underscore/grave/a/b/c/d
/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z
/braceleft/bar/braceright/asciitilde/.notdef/.notdef/.notdef
/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl
/circumflex/perthousand/Scaron/guilsinglleft/OE/.notdef/.notdef
/.notdef/.notdef/quoteleft/quoteright/quotedblleft/quotedblright
/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe
/.notdef/.notdef/Ydieresis/.notdef/exclamdown/cent/sterling
/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine
/guillemotleft/logicalnot/hyphen/registered/macron/degree
/plusminus/twosuperior/threesuperior/acute/mu/paragraph
/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright
/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute
/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute
/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth
/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply
/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae
/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute
/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex
/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex
/udieresis/yacute/thorn/ydieresis
] def
/findfont {
dup FontDirectory exch known not {
(fontinfo) getprofile pop /fontwarning get (1) eq {
(findfont: can't find ) print dup =print
(; using Courier) print flush
} if
dup CourierFont ttmap
} if
FontDirectory exch get
} bind def
/==dict 20 dict def
==dict begin
/=qc { /str ( x) def % quote a character
str exch 0 exch put
(\nx\\n\rx\\r\tx\\t\bx\\b\fx\\f\(x\\\(\)x\\\)\\x\\\\)
str search
{ pop pop 0 2 getinterval }
{ pop str 0 1 getinterval } ifelse print
} bind def
/indent { 1 1 depth { pop (\t) print } for } def
/expand {
indent dup type exec print
(\n) print
} bind def
/arraytype {
dup xcheck { ({\n) } { ([\n) } ifelse print
/depth depth 1 add def
dup rcheck { dup {expand} forall }
{ indent (???\n) print } ifelse
/depth depth 1 sub def
indent xcheck { (}) } { (]) } ifelse
} bind def
/booleantype { { (true) } { (false) } ifelse } bind def
/dicttype { dup length =print ( ) print maxlength =print
( ) print (-dicttype-) } bind def
/filetype { pop (-filetype-) } bind def
/fonttype { pop (-fonttype-) } bind def
/integertype { =string cvs } bind def
/marktype { pop (-marktype-) } bind def
/nametype { dup xcheck not { (/) print } if =string cvs } bind def
/nulltype { pop (-nulltype-) } bind def
/operatortype { (--) print =string cvs print (--) } bind def
/realtype { =string cvs } bind def
/savetype { pop (-savetype-) } bind def
/stringtype { dup rcheck { (\() print {=qc} forall (\)) }
{ pop (\(???\)) } ifelse } bind def
/depth 0 def
end % ==dict
/== {
==dict begin
expand
end
} bind def
/stack { count dup 1 add copy { = } repeat pop } bind def
/pstack { count dup 1 add copy { == } repeat pop } bind def
(\004) cvn {} def % ignore ^D in input file
(\032) cvn {} def % and ^Z
/server
{
{ {
(%stdin) (r) file status not { exit } if
serverdict /serversave save put
systemdict /buildframe get exec
statusdict /htcanchange get 0 eq {
userdict /setscreen { pop pop pop } put
userdict /setcolorscreen { 12 { pop } repeat } put
} if
serverdict /execjob get exec
serverdict /exitservercalled get
serverdict /serversave get restore
{
(exitserver : permanent state may be changed)
serverdict /statusmsg get exec
serverdict /execjob get exec
} if % exitservercalled
} catchall pop } loop
} bind def
/quit { stop } bind def
/start { server } bind def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% userdict is still on stack; system/user specific stuff starts here %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
/encode {
{ 1 index def 1 add } forall pop
} bind def
/TT_ANSI_CharStrings 650 dict dup % map character name to font entry
begin
32 [
/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle
/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one
/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal
/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S
/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum
/underscore/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t
/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde/.notdef
] encode
16#a0 [
/nbspace/exclamdown/cent/sterling/currency/yen/brokenbar
/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot
/sfthyphen/registered/macron/degree/plusminus/twosuperior
/threesuperior/acute/mu/paragraph/periodcentered/cedilla
/onesuperior/ordmasculine/guillemotright/onequarter/onehalf
/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde
/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex
/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde
/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash
/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex
/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde
/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis
/yacute/thorn/ydieresis] encode
unicode not {
% Windows encoding
130 [
/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl
/circumflex/perthousand/Scaron/guilsinglleft/OE
] encode
145 [
/quoteleft/quoteright/quotedblleft/quotedblright/bullet
/endash/emdash/tilde/trademark/scaron/guilsinglright/oe
] encode
/minus 150 def
/Ydieresis 159 def
/fi f i 16#10000 mul add def
/fl f l 16#10000 mul add def
% skip over Unicode encoding
{ currentfile =string readline pop (/xyzzy) eq { exit } if } loop
} if
% NT (Unicode) encoding
16#100 [
/Amacron/amacron/Abreve/abreve/Aogonek/aogonek/Cacute/cacute/Ccircumflex
/ccircumflex/Cdot/cdot/Ccaron/ccaron/Dcaron/dcaron/Dslash/dmacron
/Emacron/emacron/Ebreve/ebreve/Edot/edot/Eogonek/eogonek/Ecaron/ecaron
/Gcircumflex/gcircumflex/Gbreve/gbreve/Gdot/gdot/Gcedilla/gcedilla
/Hcircumflex/hcircumflex/Hbar/hbar/Itilde/itilde/Imacron/imacron/Ibreve
/ibreve/Iogonek/iogonek/Idot/dotlessi/IJ/ij/Jcircumflex/jcircumflex
/Kcedilla/kcedilla/kgreenlandic/Lacute/lacute/Lcedilla/lcedilla/Lcaron
/lcaron/Ldot/ldot/Lslash/lslash/Nacute/nacute/Ncedilla/ncedilla/Ncaron
/ncaron/napostrophe/Eng/eng/Omacron/omacron/Obreve/obreve/Odblacute
/odblacute/OE/oe/Racute/racute/Rcedilla/rcedilla/Rcaron/rcaron/Sacute
/sacute/Scircumflex/scircumflex/Scedilla/scedilla/Scaron/scaron/Tcedilla
/tcedilla/Tcaron/tcaron/Tbar/tbar/Utilde/utilde/Umacron/umacron/Ubreve
/ubreve/Uring/uring/Udblacute/udblacute/Uogonek/uogonek/Wcircumflex
/wcircumflex/Ycircumflex/ycircumflex/Ydieresis/Zacute/zacute/Zdot/zdot
/Zcaron/zcaron/longs
] encode
16#384 [
/tonos/dieresistonos/Alphatonos/anoteleia/Epsilontonos/Etatonos
/Iotatonos/c38b/Omicrontonos/c38d/Upsilontonos/Omegatonos
/iotadieresistonos/Alpha/Beta/Gamma/Delta/Epsilon/Zeta/Eta/Theta/Iota
/Kappa/Lambda/Mu/Nu/Xi/Omicron/Pi/Rho/c3a2/Sigma/Tau/Upsilon/Phi
/Chi/Psi/Omega/Iotadieresis/Upsilondieresis/alphatonos/epsilontonos
/etatonos/iotatonos/upsilon-dieresistonos/alpha/beta/gamma/delta/epsilon
/zeta/eta/theta/iota/kappa/lambda/mu/nu/xi/omicron/pi/rho/sigma1
/sigma/tau/upsilon/phi/chi/psi/omega/iotadieresis/upsilondieresis
/omicrontonos/upsilontonos/omegatonos
] encode
% read and define key / value pairs until key = /zyzzy is seen
{
currentfile token pop dup /xyzzy eq
{ pop exit }
{ currentfile token pop def } ifelse
} loop
/florin 16#192/Aringacute 16#1fa/aringacute 16#1fb/AEacute 16#1fc
/aeacute 16#1fd/Oslashacute 16#1fe/oslashacute 16#1ff/circumflex
16#2c6/caron 16#2c7/macron 16#2c9/tilde 16#2d6/breve 16#2d8
/dotaccent 16#2d9/ring 16#2da/ogonek 16#2db/tilde 16#2dc
/hungarumlaut 16#2dd
/Wgrave 16#1e80/wgrave 16#1e81/Wacute 16#1e82/wacute 16#1e83
/Wdieresis 16#1e84/wdieresis 16#1e85/Ygrave 16#1ef2/ygrave 16#1ef3
/endash 16#2013/emdash 16#2014/underscoredbl 16#2017/quoteleft
16#2018/quoteright 16#2019/quotesinglbase 16#201a/quotereversed
16#201b/quotedblleft 16#201c/quotedblright 16#201d/quotedblbase
16#201e/dagger 16#2020/daggerdbl 16#2021/bullet 16#2022/ellipsis
16#2026/perthousand 16#2030/minute 16#2032/second 16#2033
/guilsinglleft 16#2039/guilsinglright 16#203a/exclamdbl 16#203c
/radicalex 16#203e/fraction 16#2044/nsuperior 16#207f/franc 16#20a3
/peseta 16#20a7/trademark 16#2122/Ohm 16#2126/estimated 16#212e
/oneeighth 16#215b/threeeighths 16#215c/fiveeighths 16#215d
/seveneighths 16#215e/arrowleft 16#2190/arrowup 16#2191/arrowright
16#2192/arrowdown 16#2193/arrowboth 16#2194/arrowupdn 16#2195
/arrowupdnbse 16#21a8/partialdiff 16#2202/increment 16#2206/product
16#220f/summation 16#2211/minus 16#2212/fraction 16#2215
/periodcentered 16#2219/radical 16#221a/infinity 16#221e/orthogonal
16#221f/intersection 16#2229/integral 16#222b/approxequal 16#2248
/notequal 16#2260/equivalence 16#2261/lessequal 16#2264/greaterequal
16#2265/house 16#2302/revlogicalnot 16#2310/integraltp
16#2320/integralbt 16#2321/upblock 16#2580/dnblock 16#2584/block
16#2588/lfblock 16#258c/rtblock 16#2590/ltshade 16#2591/shade
16#2592/dkshade 16#2593/filledbox 16#25a0/filledrect 16#25ac/triagup
16#25b2/triagrt 16#25ba/triagdn 16#25bc/triaglf 16#25c4/lozenge
16#25ca/circle 16#25cb/invbullet 16#25d8/invcircle 16#25d9/openbullet
16#25e6/smileface 16#263a/invsmileface 16#263b/sun 16#263c/female
16#2640/male 16#2642/spade 16#2660/club 16#2663/heart 16#2665/diamond
16#2666/musicalnote 16#266a/musicalnotedbl 16#266b/applelogo
16#f000/fi 16#f001/fl 16#f002
%% do not delete, change or comment the following line !!!
/xyzzy
end def % TT_ANSI_CharStrings
/TT_BuildChar {
exch begin
SymbolFont {
% unicode { 16#8000 add } if
}
{
Encoding exch get
dup CharStrings exch known not
{ pop (.notdef) } if
CharStrings exch get
} ifelse
end
dup 127 ne { ttchar } { pop } ifelse
} bind def
/TT_FontInfo <<
/UnderlinePosition -0.1
/UnderlineThickness 0.1
>> def
/Type1BuildChar { % font char
exch begin
Encoding exch get
CharStrings exch get
end xexec
} bind def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% This function associates PostScript font names with Windows TrueType %
% fonts. The RoPS interpreter uses the Windows rendering routines to %
% paint the TrueType characters. %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
/ttmap {
14 dict dup begin
exch /TTName exch def
exch /FontName exch def
/UniqueID FontDirectory length 16#4000000 add def
/Metrics 0 dict def
/PaintType 0 def
/FontMatrix [ 1.0 0.0 0.0 1.0 0.0 0.0 ] readonly def
/FontType 3 def
/Encoding StandardEncoding def
/FontBBox { 0 0 0 0 } readonly def
/SymbolFont FontName /Symbol eq def
/CharStrings TT_ANSI_CharStrings def
/BuildChar /TT_BuildChar load def
/FontInfo TT_FontInfo def
FontName end
exch definefont pop
} bind def
(fontlist) getprofile { { ttmap } forall } if
(fontalias) getprofile { { ttmap } forall } if
/CourierFont FontDirectory /Courier get /TTName get def
buildframe % create a default frame buffer
/Courier findfont 12 scalefont setfont
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% when we fall off the end of this file, 'start' will be executed %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% --- end ---