diff options
Diffstat (limited to 'Master/tlpkg/tlgs/Resource/Init/gs_btokn.ps')
-rw-r--r-- | Master/tlpkg/tlgs/Resource/Init/gs_btokn.ps | 330 |
1 files changed, 330 insertions, 0 deletions
diff --git a/Master/tlpkg/tlgs/Resource/Init/gs_btokn.ps b/Master/tlpkg/tlgs/Resource/Init/gs_btokn.ps new file mode 100644 index 00000000000..a2f08b748b2 --- /dev/null +++ b/Master/tlpkg/tlgs/Resource/Init/gs_btokn.ps @@ -0,0 +1,330 @@ +% Copyright (C) 2001-2012 Artifex Software, Inc. +% All Rights Reserved. +% +% This software is provided AS-IS with no warranty, either express or +% implied. +% +% This software is distributed under license and may not be copied, +% modified or distributed except as expressly authorized under the terms +% of the license contained in the file LICENSE in this distribution. +% +% Refer to licensing information at http://www.artifex.com or contact +% Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, San Rafael, +% CA 94903, U.S.A., +1(415)492-9861, for further information. +% + +% Initialization file for binary tokens. +% When this is run, systemdict is still writable, +% but everything defined here goes into level2dict. + +% Define whether or not to allow writing dictionaries. +% This is a non-standard feature! +/WRITEDICTS //false def + +languagelevel 1 .setlanguagelevel +level2dict begin + +% Initialization for the system name table. + +mark +% 0 + /abs /add /aload /anchorsearch /and + /arc /arcn /arct /arcto /array + /ashow /astore /awidthshow /begin /bind + /bitshift /ceiling /charpath /clear /cleartomark +% 20 + /clip /clippath /closepath /concat /concatmatrix + /copy /count /counttomark /currentcmykcolor /currentdash + /currentdict /currentfile /currentfont /currentgray /currentgstate + /currenthsbcolor /currentlinecap /currentlinejoin /currentlinewidth /currentmatrix +% 40 + /currentpoint /currentrgbcolor /currentshared /curveto /cvi + /cvlit /cvn /cvr /cvrs /cvs + /cvx /def /defineusername /dict /div + /dtransform /dup /end /eoclip /eofill +% 60 + /eoviewclip /eq /exch /exec /exit + /file /fill /findfont /flattenpath /floor + /flush /flushfile /for /forall /ge + /get /getinterval /grestore /gsave /gstate +% 80 + /gt /identmatrix /idiv /idtransform /if + /ifelse /image /imagemask /index /ineofill + /infill /initviewclip /inueofill /inufill /invertmatrix + /itransform /known /le /length /lineto +% 100 + /load /loop /lt /makefont /matrix + /maxlength /mod /moveto /mul /ne + /neg /newpath /not /null /or + /pathbbox /pathforall /pop /print /printobject +% 120 + /put /putinterval /rcurveto /read /readhexstring + /readline /readstring /rectclip /rectfill /rectstroke + /rectviewclip /repeat /restore /rlineto /rmoveto + /roll /rotate /round /save /scale +% 140 + /scalefont /search /selectfont /setbbox /setcachedevice + /setcachedevice2 /setcharwidth /setcmykcolor /setdash /setfont + /setgray /setgstate /sethsbcolor /setlinecap /setlinejoin + /setlinewidth /setmatrix /setrgbcolor /setshared /shareddict +% 160 + /show /showpage /stop /stopped /store + /string /stringwidth /stroke /strokepath /sub + /systemdict /token /transform /translate /truncate + /type /uappend /ucache /ueofill /ufill +% 180 + /undef /upath /userdict /ustroke /viewclip + /viewclippath /where /widthshow /write /writehexstring + /writeobject /writestring /wtranslation /xor /xshow + /xyshow /yshow /FontDirectory /SharedFontDirectory /Courier +% 200 + /Courier-Bold /Courier-BoldOblique /Courier-Oblique /Helvetica /Helvetica-Bold + /Helvetica-BoldOblique /Helvetica-Oblique /Symbol /Times-Bold /Times-BoldItalic + /Times-Italic /Times-Roman /execuserobject /currentcolor /currentcolorspace + /currentglobal /execform /filter /findresource /globaldict +% 220 + /makepattern /setcolor /setcolorspace /setglobal /setpagedevice + /setpattern +% pad to 256 + counttomark 256 exch sub { 0 } repeat +% 256 + /= /== /ISOLatin1Encoding /StandardEncoding +% 260 + ([) cvn (]) cvn /atan /banddevice /bytesavailable + /cachestatus /closefile /colorimage /condition /copypage + /cos /countdictstack /countexecstack /cshow /currentblackgeneration + /currentcacheparams /currentcolorscreen /currentcolortransfer /currentcontext /currentflat +% 280 + /currenthalftone /currenthalftonephase /currentmiterlimit /currentobjectformat /currentpacking + /currentscreen /currentstrokeadjust /currenttransfer /currentundercolorremoval /defaultmatrix + /definefont /deletefile /detach /deviceinfo /dictstack + /echo /erasepage /errordict /execstack /executeonly +% 300 + /exp /false /filenameforall /fileposition /fork + /framedevice /grestoreall /handleerror /initclip /initgraphics + /initmatrix /instroke /inustroke /join /kshow + /ln /lock /log /mark /monitor +% 320 + /noaccess /notify /nulldevice /packedarray /quit + /rand /rcheck /readonly /realtime /renamefile + /renderbands /resetfile /reversepath /rootfont /rrand + /run /scheck /setblackgeneration /setcachelimit /setcacheparams +% 340 + /setcolorscreen /setcolortransfer /setfileposition /setflat /sethalftone + /sethalftonephase /setmiterlimit /setobjectformat /setpacking /setscreen + /setstrokeadjust /settransfer /setucacheparams /setundercolorremoval /sin + /sqrt /srand /stack /status /statusdict +% 360 + /true /ucachestatus /undefinefont /usertime /ustrokepath + /version /vmreclaim /vmstatus /wait /wcheck + /xcheck /yield /defineuserobject /undefineuserobject /UserObjects + /cleardictstack +% 376 + /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 + /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 +% 428 + /setvmthreshold (<<) cvn + (>>) cvn /currentcolorrendering /currentdevparams /currentoverprint /currentpagedevice + /currentsystemparams /currentuserparams /defineresource /findencoding /gcheck +% 440 + /glyphshow /languagelevel /product /pstack /resourceforall + /resourcestatus /revision /serialnumber /setcolorrendering /setdevparams + /setoverprint /setsystemparams /setuserparams /startjob /undefineresource + /GlobalFontDirectory /ASCII85Decode /ASCII85Encode /ASCIIHexDecode /ASCIIHexEncode +% 460 + /CCITTFaxDecode /CCITTFaxEncode /DCTDecode /DCTEncode /LZWDecode + /LZWEncode /NullEncode /RunLengthDecode /RunLengthEncode /SubFileDecode + /CIEBasedA /CIEBasedABC /DeviceCMYK /DeviceGray /DeviceRGB + /Indexed /Pattern /Separation /CIEBasedDEF /CIEBasedDEFG +% 480 + /DeviceN +% 481 -- end +.packtomark .installsystemnames + +% Define printobject and writeobject. +% These are mostly implemented in PostScript, so that we don't have to +% worry about interrupts or callbacks when writing to the output file. + +% Define procedures for accumulating the space required to represent +% an object in binary form. The procedures for composite objects (arrays +% and dictionaries) leave different results on the stack: +% <#refs> <#chars> <simple_obj> -proc- <#refs> <#chars> +% <#refs> <#chars> <array|dict> -proc- <array|dict> <#refs> <#chars> +% This is required so that .writeobjects can also accumulate the actual +% list of composite objects to write in the binary object sequence. +/cntdict mark + /integertype /pop load + /realtype 1 index + /marktype 1 index + /nulltype 1 index + /booleantype 1 index + /nametype { length add } bind + /stringtype 1 index + /arraytype //null + /dicttype //null +.dicttomark def +/.cntobj { % <<arguments and results as for procedures in cntdict>> + dup type //cntdict exch get exec +} .bind def +cntdict /arraytype { + dup dup length 5 -1 roll add 4 2 roll { .cntobj } forall +} bind put +cntdict /dicttype { + WRITEDICTS { + dup dup length 2 mul 5 -1 roll add 4 2 roll { + % We have to use .execn here, rather than simply rolling the + % value under the top elements, because key might involve arrays + % or dictionaries. + cvlit {.cntobj} exch 2 .execn .cntobj + } forall + } { + /writeobject .systemvar /typecheck signalerror + } ifelse +} bind put + +/w2dict mark + /nametype { 2 copy .writecvs pop } bind + /stringtype 1 index +.dicttomark def + +/.bosheader { % <top_length> <total_length> <string8> .bosheader + % <string4|8> + dup 0 currentobjectformat 127 add put % object format => BOS tag + 2 index 255 le 2 index 65531 le and { + % Use the short header format: tag toplen(1) totlen(2) + exch 4 add exch + 0 4 getinterval + dup 1 5 -1 roll put + } { + % Use the long header format: tag 0(1) toplen(2) totlen(4) + exch 8 add exch + 0 0 4 2 roll .bosobject exch pop exch pop % store with byte swapping + } ifelse % Stack: shortlen str + exch dup -8 bitshift exch 255 and % str hibyte lobyte + currentobjectformat 1 and 0 eq { % lsb first + exch + } if + 2 index 3 3 -1 roll put + 1 index 2 3 -1 roll put +} .bind def + +/.writeobjects { % <file> <tag> <array> .writeobjects - + mark exch + + % Count the space required for refs and strings. + + dup length 0 3 -1 roll + % Stack: file tag -mark- #refs #chars array + dup 4 1 roll { .cntobj } forall + + % Write the header. + + % Stack: file tag -mark- array1 ... (array|dict)N #refs #chars + counttomark 3 add -2 roll 4 1 roll + % Stack: -mark- array1 ... (array|dict)N tag #refs #chars file + dup counttomark 1 sub index length + 4 index 3 bitshift 4 index add + (xxxxxxxx) .bosheader writestring + + % Write the objects per se. + + 3 1 roll pop + counttomark 1 sub index length 3 bitshift exch + 3 bitshift + % Stack: -mark- array1 ... (array|dict)N tag file ref# char# + counttomark 4 sub { + counttomark -1 roll dup 6 1 roll + % Stack: ... objN tag file ref# char# objN + dup type /dicttype eq { % can't be first object + { 5 1 roll (x\000xxxxxx) .bosobject + 3 index exch writestring + 4 -1 roll (x\000xxxxxx) .bosobject + 3 index exch writestring + } forall + } { + { (x\000xxxxxx) .bosobject + dup 1 6 index put + 3 index exch writestring + 4 -1 roll pop 0 4 1 roll % clear tag + } forall + } ifelse + } repeat + + % Write the strings and names. + + pop pop exch pop + % Stack: -mark- array1 ... array|dictN file + counttomark 1 sub { + counttomark -1 roll { + % The counting pass ensured that the keys and values + % of any dictionary must be writable objects. + % Hence, we are processing a dictionary iff + % the next-to-top stack element is not a file. + 1 index type /filetype ne { + exch 2 index exch dup type //w2dict exch .knownget + { exec } { pop } ifelse pop + } if + dup type //w2dict exch .knownget { exec } { pop } ifelse + } forall + } repeat + + % Clean up. + + % Stack: -mark- file + pop pop + +} .bind def + +/printobject { % <obj> <tag> printobject - + currentobjectformat 0 eq { + /printobject .systemvar /undefined signalerror + } if + (%stdout) (w) file 2 index 2 index .writeobject pop pop +} odef +/writeobject { % <file> <obj> <tag> writeobject - + currentobjectformat 0 eq { + /writeobject .systemvar /undefined signalerror + } if + 2 .argindex pop % check # of args + .writeobject +} odef +/.writeobject { + 3 copy exch + % We must allocate the array in local VM + % to avoid a possible invalidaccess. + .currentglobal //false .setglobal exch 1 array astore exch .setglobal + .writeobjects pop pop pop +} .bind def + +% Implement binary error message output. +/.objectprinttest { % <obj> .objectprinttest - + % This is a pseudo-operator so it will restore the stack + % if it gets an error. + mark 0 0 3 .argindex .cntobj cleartomark pop +} bind odef +/.printerror { + $error /binary get .languagelevel 2 ge and { + currentobjectformat 0 ne { + [ /Error $error /errorname get $error /command get + % Convert the object with cvs if it isn't printable. + dup { .objectprinttest } .internalstopped { + pop 100 string cvs + } if + //false ] 250 printobject + } + //.printerror % known to be a procedure + ifelse + } + //.printerror % known to be a procedure + ifelse +} bind def + +currentdict /cntdict .undef +currentdict /w2dict .undef + +% End of level2dict + +end +.setlanguagelevel |