| % Copyright (C) 1989, 1990, 1991 Aladdin Enterprises. All rights reserved. |
| % Distributed by Free Software Foundation, Inc. |
| % |
| % This file is part of Ghostscript. |
| % |
| % Ghostscript is distributed in the hope that it will be useful, but |
| % WITHOUT ANY WARRANTY. No author or distributor accepts responsibility |
| % to anyone for the consequences of using it or for whether it serves any |
| % particular purpose or works at all, unless he says so in writing. Refer |
| % to the Ghostscript General Public License for full details. |
| % |
| % Everyone is granted permission to copy, modify and redistribute |
| % Ghostscript, but only under the conditions described in the Ghostscript |
| % General Public License. A copy of this license is supposed to have been |
| % given to you along with Ghostscript so you can know your rights and |
| % responsibilities. It should be in a file named COPYING. Among other |
| % things, the copyright notice and this notice must be preserved on all |
| % copies. |
| |
| % Initialization file for Ghostscript. |
| % When this is run, systemdict is still writable. |
| |
| % Acquire the debugging flags. |
| currentdict /DEBUG known /DEBUG exch def |
| /VMDEBUG |
| DEBUG {{vmstatus pop ( ) cvs print pop ( ) print |
| systemdict length ( ) cvs print (\n) print flush}} |
| {{}} ifelse |
| def |
| currentdict /NODISPLAY known not /DISPLAYING exch def |
| currentdict /NOBIND known { /bind { } def } if |
| currentdict /NOCACHE known /NOCACHE exch def |
| currentdict /QUIET known /QUIET exch def |
| |
| %************************** Disable save and restore |
| /save {gsave null} bind def |
| /restore {pop grestore} bind def |
| |
| % Acquire systemdict and userdict. |
| % Note that the dictionary stack only has 1 element at this point! |
| /systemdict currentdict def |
| /userdict 200 dict def |
| userdict begin % 2 elements now |
| systemdict begin |
| |
| VMDEBUG |
| |
| % Define true and false. |
| /true 0 0 eq def |
| /false 0 1 eq def |
| |
| % Define predefined procedures substituting for operators, |
| % in alphabetical order. |
| /[ /mark load def |
| /] {counttomark array astore exch pop} bind def |
| /abs {dup 0 lt {neg} if} bind def |
| /cleardictstack |
| {countdictstack 2 sub {end} repeat} bind def |
| /.copypage /copypage load def |
| /copypage |
| {.copypage |
| (>>copypage, press <return> to continue<<\n) .confirm} bind def |
| /defaultmatrix |
| {currentdevice exch deviceparams pop pop |
| counttomark 1 add 1 roll cleartomark} bind def |
| /.echo /echo load def |
| /.echo.mode true def |
| /echo {dup /.echo.mode exch def .echo} bind def |
| /eexec {55665 exch type1decryptfile |
| % eexec sections have 4 garbage characters at the beginning. |
| % We should detect binary vs. hex encoding here. |
| 4 {dup read pop pop} repeat |
| cvx systemdict begin stopped end |
| $error /newerror get and {handleerror} if} bind def |
| /executive |
| {{prompt (%statementedit) (r) file |
| dup bytesavailable 0 lt |
| {(%stdin) (r) file bytesavailable 0 lt {closefile exit} if} |
| if cvx execute} loop} bind def |
| /framedevice % dummy definition |
| {(Warning: framedevice is not implemented.\n) print flush |
| pop pop pop setmatrix initclip} bind def |
| /handleerror |
| {errordict /handleerror get exec} bind def |
| /identmatrix |
| {{1.0 0.0 0.0 1.0 0.0 0.0} cvlit exch copy} bind def |
| /initgraphics |
| {initmatrix newpath initclip 1 setlinewidth 0 setlinecap 0 setlinejoin |
| {} 0 setdash 0 setgray 10 setmiterlimit} bind def |
| /initmatrix |
| {.tempmatrix defaultmatrix setmatrix} bind def |
| %.nulldevice does all of nulldevice except initclip and initmatrix. |
| /nulldevice |
| {.nulldevice initclip initmatrix} bind def |
| /matrix {6 array identmatrix} bind def |
| /prompt {flush flushpage |
| (GS) print count 0 ne |
| {(<) print count =only} |
| if (>) print flush} bind def |
| /pstack {0 1 count 3 sub {index ==} for} bind def |
| /run {dup type /filetype eq { true } { findlibfile } ifelse |
| {cvx execute} |
| {(r) file} % let the error happen |
| ifelse} bind def |
| %.setgray is the same as setgray without the transfer function. |
| /setgray |
| {currenttransfer exec .setgray} bind def |
| /showpage |
| {.copypage (>>showpage, press <return> to continue<<\n) .confirm |
| erasepage initgraphics} bind def |
| /stack {0 1 count 3 sub {index =} for} bind def |
| /start { QUIET not |
| {(Ghostscript ) print version print |
| ( Copyright (C) 1990 Aladdin Enterprises,\n) print |
| ( Menlo Park, CA. All rights reserved.\n) print |
| (Distributed by Free Software Foundation, Inc.\n) print |
| (Ghostscript comes with NO WARRANTY: see the file COPYING for details.\n) print |
| flush |
| } if |
| executive |
| } def |
| %.typenumber is a non-standard operator. |
| /type {.typenumber |
| {arraytype booleantype dicttype filetype fonttype |
| integertype marktype nametype nulltype operatortype |
| packedarraytype realtype savetype stringtype |
| colortype devicetype} |
| exch get} def |
| /version |
| (2.1.1) def |
| |
| % Provide semi-fake but usable definitions for |
| % the color PostScript extensions (except for colorimage, |
| % which is actually implemented as an operator). |
| /setcmykcolor { |
| 1 exch sub dup dup % C, M, Y, S, S, S |
| 6 -1 roll 1 exch sub mul % M, Y, S, S, red |
| exch 5 -1 roll 1 exch sub mul % Y, S, red, green |
| 4 -2 roll exch 1 exch sub mul % red, green, blue |
| setrgbcolor |
| } bind def |
| /currentcmykcolor { |
| currentrgbcolor 0 |
| } bind def |
| /setcolortransfer { |
| settransfer pop pop pop |
| } bind def |
| /currentcolortransfer { |
| {} dup dup currenttransfer |
| } bind def |
| /setblackgeneration { |
| pop |
| } bind def |
| /currentblackgeneration { |
| {} |
| } bind def |
| /setundercolorremoval { |
| pop |
| } bind def |
| /currentundercolorremoval { |
| {} |
| } bind def |
| /setcolorscreen { |
| setscreen 9 {pop} repeat |
| } bind def |
| /currentcolorscreen { |
| currentscreen 3 copy 6 copy |
| } bind def |
| |
| % Define some additional built-in procedures (beyond the ones defined by |
| % the PostScript Language Reference Manual). |
| /concatprocs |
| { exch cvlit exch cvlit % proc1 proc2 |
| dup length 2 index length add array % proc1 proc2 newproc |
| dup 0 4 index putinterval |
| dup 3 index length 3 index putinterval |
| exch pop exch pop cvx |
| } bind def |
| /concatstrings |
| { 1 index length 1 index length add string |
| 2 index 1 index copy pop |
| dup 3 index length 3 index length getinterval |
| 2 index exch copy pop |
| exch pop exch pop |
| } bind def |
| /copystring |
| { dup length string copy } bind def |
| /defaultdevice |
| { 0 getdevice } bind def |
| /finddevice |
| { systemdict /devicedict get exch get } bind def |
| /rgbcolor |
| { gsave setrgbcolor currentgscolor grestore } bind def |
| %.setdevice does all of setdevice except initclip and initmatrix. |
| /setdevice |
| { .setdevice initclip initmatrix } bind def |
| |
| % Define auxiliary procedures needed for the above. |
| /.confirm |
| {DISPLAYING |
| {% Print a message and wait for the user to type something. |
| % If the user just types a newline, flush it. |
| print flush |
| .echo.mode false echo |
| (%stdin) (r) file dup read |
| {dup (\n) 0 get eq {pop pop} {unread} ifelse} {pop} ifelse |
| echo} |
| {pop} ifelse} bind def |
| /.identmatrix % a read-only identity matrix |
| matrix readonly def |
| /.tempmatrix % a temporary matrix |
| matrix def |
| |
| % If the interpreter includes the Level 2 functions, |
| % load the initialization file for them. |
| systemdict /uappend known % pick any one |
| { (ghost2.ps) run } |
| if |
| |
| % Define the procedure used by the C executive for executing user input, |
| % and also by the run operator. |
| % This is called with a procedure or file on the operand stack. |
| /execute |
| {stopped $error /newerror get and {handleerror} if} bind def |
| |
| % Create the error handling machinery. |
| % The interpreter knows the name ErrorNames. |
| {/unknown /dictfull /dictstackoverflow /dictstackunderflow |
| /execstackoverflow /interrupt /invalidaccess /invalidexit |
| /invalidfileaccess /invalidfont /invalidrestore /ioerror |
| /limitcheck /nocurrentpoint /rangecheck /stackoverflow |
| /stackunderflow /syntaxerror /timeout /typecheck |
| /undefined /undefinedfilename /undefinedresult /unmatchedmark |
| /VMerror |
| } cvlit readonly |
| dup length 2 add dict % ErrorNames, handleerror |
| /errordict exch def |
| errordict begin |
| /ErrorNames exch def |
| { $error /.inerror get { = flush quit } if % detect error recursion |
| $error /.inerror true put |
| countdictstack array dictstack |
| $error begin |
| /newerror true def |
| /dstack exch def |
| /errorname exch def |
| /command exch def |
| countexecstack array execstack /estack exch def |
| count array astore /ostack exch def |
| ostack aload pop |
| end |
| $error /.inerror false put |
| stop |
| } bind |
| ErrorNames |
| { [ 1 index 3 index /exec load ] cvx def |
| } forall |
| pop |
| /handleerror |
| { (Error: ) print |
| $error begin |
| errorname ==only |
| ( in ) print |
| /command load == |
| ( ostack:) print |
| ostack {( ) print =only} forall |
| (\n estack: ) print |
| estack {( ) print =only} forall |
| (\n dstack:) print |
| dstack {dup ( ) print length =only (/) print maxlength =only} forall |
| (\n) print |
| /newerror false def |
| flush |
| end |
| } bind def |
| end |
| /$error 7 dict def % newerror, .inerror, errorname, command, |
| % 3 stacks |
| $error begin |
| /newerror false def |
| /.inerror false def |
| end |
| |
| % Define the =[only] procedures. Also define =print, which is used |
| % by LaserPrep even though it isn't documented anywhere. |
| /= {=only (\n) print} bind def |
| /=print {=} bind def |
| /.dict 16 dict dup |
| begin def |
| /.buf 128 string def |
| /.cvp {.buf cvs .p} bind def |
| /.print |
| {dup type .dict exch known |
| {dup type exec} {.buf cvs print} ifelse |
| } bind def |
| /stringtype |
| {dup rcheck not {pop (--nostringval--)} if print} bind def |
| /nametype |
| {dup length .buf length gt |
| {dup length string} |
| {.buf} |
| ifelse cvs print} bind def |
| {0 begin .print end} bind dup 0 .dict put |
| end |
| /=only exch def |
| |
| % Define the [write]==[only] procedures. |
| /== {==only (\n) print} bind def |
| /==only {(%stdout) (w) file exch write==only} bind def |
| /write== |
| {2 copy write==only pop (\n) writestring} bind def |
| /.dict 17 dict dup |
| begin def |
| /.buf 128 string def |
| /.cvp {.buf cvs .p} bind def |
| % /.f {the_output_file} def |
| /.nop {(-) .p type .cvp (-) .p} bind def |
| /.p {.f exch writestring} bind def |
| /.p1 {.f exch write} bind def |
| /.print |
| {dup type .dict exch known |
| {dup type exec} {.nop} ifelse |
| } bind def |
| /integertype /.cvp load def |
| /realtype /.cvp load def |
| /booleantype /.cvp load def |
| /nametype |
| {dup xcheck not {(/) .p} if |
| dup length .buf length gt |
| {dup length string} |
| {.buf} |
| ifelse cvs .p} bind def |
| /arraytype |
| {dup rcheck |
| {dup xcheck {(})({)} {(])([)} ifelse .p |
| exch () exch |
| {exch .p .print ( )} forall pop .p} |
| {.nop} |
| ifelse} bind def |
| /operatortype |
| {(--) .p .cvp (--) .p} bind def |
| /packedarraytype /arraytype load def |
| /stringtype |
| {dup rcheck |
| {(\() .p |
| {/.ch exch def |
| .ch 32 lt .ch 127 ge or |
| {(\\) .p .ch 8#1000 add 8 .buf cvrs 1 3 getinterval .p} |
| {.ch 40 eq .ch 41 eq or .ch 92 eq or |
| {(\\) .p} if |
| .ch .p1} |
| ifelse} |
| forall (\)) .p} |
| {.nop} |
| ifelse} bind def |
| {0 begin exch /.f exch def .print end} bind dup 0 .dict put |
| end |
| /write==only exch def |
| |
| VMDEBUG |
| |
| % Define the font directory. |
| % Make it big to leave room for transformed fonts. |
| /FontDirectory 100 dict def |
| |
| % Define the standard encoding vector. |
| /StandardEncoding { |
| % \00x |
| /.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 |
| % \04x |
| /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 |
| % \10x |
| /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 |
| % \14x |
| /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 |
| % \20x |
| /.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 |
| % \24x |
| /.notdef /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 |
| % \30x |
| /.notdef /grave /acute /circumflex /tilde /macron /breve /dotaccent |
| /dieresis /.notdef /ring /cedilla /.notdef /hungarumlaut /ogonek /caron |
| /emdash /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef |
| /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef |
| % \34x |
| /.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 |
| } cvlit readonly def |
| |
| % Define the ISO Latin-1 encoding vector. |
| % The first half is the same as the standard encoding. |
| /ISOLatin1Encoding |
| StandardEncoding 256 array copy |
| dup 128 128 getinterval |
| %****** NOTE: the following are missing in the Adobe documentation, |
| %****** but appear in the displayed table: |
| %****** macron at 225, dieresis at 230, cedilla at 233, space at 240. |
| % \20x |
| /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef |
| /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef |
| /dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent |
| /dieresis /.notdef /ring /cedilla /.notdef /hungarumlaut /ogonek /caron |
| % \24x |
| /space /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 |
| % \30x |
| /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 |
| % \34x |
| /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 |
| 129 -1 roll astore pop readonly def |
| |
| % Define the Symbol encoding vector. |
| /SymbolEncoding { |
| % \000 |
| /.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 |
| % \040 |
| /space /exclam /universal /numbersign |
| /existential /percent /ampersand /suchthat |
| /parenleft /parenright /asteriskmath /plus |
| /comma /minus /period /slash |
| /zero /one /two /three |
| /four /five /six /seven |
| /eight /nine /colon /semicolon |
| /less /equal /greater /question |
| % \100 |
| /congruent /Alpha /Beta /Chi |
| /Delta /Epsilon /Phi /Gamma |
| /Eta /Iota /theta1 /Kappa |
| /Lambda /Mu /Nu /Omicron |
| /Pi /Theta /Rho /Sigma |
| /Tau /Upsilon /sigma1 /Omega |
| /Xi /Psi /Zeta /bracketleft |
| /therefore /bracketright /perpendicular /underscore |
| % \140 |
| /radicalex /alpha /beta /chi |
| /delta /epsilon /phi /gamma |
| /eta /iota /phi1 /kappa |
| /lambda /mu /nu /omicron |
| /pi /theta /rho /sigma |
| /tau /upsilon /omega1 /omega |
| /xi /psi /zeta /braceleft |
| /bar /braceright /similar /.notdef |
| % \200 |
| /.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 |
| % \240 |
| /.notdef /Upsilon1 /minute /lessequal |
| /fraction /infinity /florin /club |
| /diamond /heart /spade /arrowboth |
| /arrowleft /arrowup /arrowright /arrowdown |
| /degree /plusminus /second /greaterequal |
| /multiply /proportional /partialdiff /bullet |
| /divide /notequal /equivalence /approxequal |
| /ellipsis /arrowvertex /arrowhorizex /carriagereturn |
| % \300 |
| /aleph /Ifraktur /Rfraktur /weierstrass |
| /circlemultiply /circleplus /emptyset /intersection |
| /union /propersuperset /reflexsuperset /notsubset |
| /propersubset /reflexsubset /element /notelement |
| /angle /gradient /registerserif /copyrightserif |
| /trademarkserif /product /radical /dotmath |
| /logicalnot /logicaland /logicalor /arrowdblboth |
| /arrowdblleft /arrowdblup /arrowdblright /arrowdbldown |
| % \340 |
| /lozenge /angleleft /registersans /copyrightsans |
| /trademarksans /summation /parenlefttp /parenleftex |
| /parenleftbt /bracketlefttp /bracketleftex /bracketleftbt |
| /bracelefttp /braceleftmid /braceleftbt /braceex |
| /.notdef /angleright /integral /integraltp |
| /integralex /integralbt /parenrighttp /parenrightex |
| /parenrightbt /bracketrighttp /bracketrightex /bracketrightbt |
| /bracerighttp /bracerightmid /bracerightbt /.notdef |
| } cvlit readonly def |
| |
| % Construct a dictionary of all available devices. |
| mark |
| % Loop until the getdevice gets a rangecheck. |
| 0 { {dup getdevice exch 1 add} loop} stopped pop |
| pop 1 add dict /devicedict exch def |
| devicedict begin |
| counttomark {dup devicename cvn exch def} repeat |
| end |
| pop % pop the mark |
| $error /newerror false put % remove error indication |
| |
| % Define statusdict, for the benefit of programs |
| % that think they are running on a LaserWriter or similar printer. |
| (statusd.ps) run |
| |
| % Establish a default upper limit in the character cache, |
| % namely, 10 times the average expected character size. |
| mark |
| cachestatus 5 index 10 mul 2 index 1 max idiv % bmax, cmax |
| mark exch dup 10 idiv exch setcacheparams |
| cleartomark |
| % Conditionally disable the character cache. |
| NOCACHE { 1 setcachelimit } if |
| |
| VMDEBUG |
| |
| % Create a null font. This is the initial font. |
| 8 dict dup begin |
| /FontMatrix [ 1 0 0 1 0 0 ] def |
| /PaintType 0 def |
| /FontType 3 def |
| /FontName () def |
| /Encoding StandardEncoding def |
| /FontBBox { 0 0 0 0 } def |
| /BuildChar { pop pop 0 0 setcharwidth } bind def |
| end |
| /NullFont exch definefont setfont |
| |
| % Load the standard font environment. |
| (gfonts.ps) run |
| |
| % Close up systemdict. |
| end |
| % We should make systemdict readonly; however, statusd.ps adds new entries |
| % to systemdict. Maybe dictionaries should have an "add-only" mode.... |
| %%%%%% systemdict readonly pop |
| |
| % Establish a default environment. |
| DISPLAYING |
| { defaultdevice |
| systemdict /DEVICEWIDTH known systemdict /DEVICEHEIGHT known or |
| { matrix deviceparams |
| exch /DEVICEWIDTH where |
| { pop pop DEVICEWIDTH } |
| if |
| exch /DEVICEHEIGHT where |
| { pop pop DEVICEHEIGHT |
| % Replace the Y translation if the Y axis is inverted |
| 2 index 5 get 0 gt |
| { 2 index 5 2 index put |
| } |
| if |
| } |
| if |
| defaultdevice 4 1 roll makedevice |
| counttomark 1 add 1 roll cleartomark |
| } |
| if setdevice |
| } |
| { nulldevice |
| } |
| ifelse |
| 1 setflat % initgraphics doesn't set this |
| { } settransfer % ditto |
| % The following 'ordered dither' spot function was contributed by |
| % Gregg Townsend. Thanks, Gregg! |
| 72 72 dtransform abs exch abs min % min(|dpi x|,|dpi y|) |
| 16.001 div 0 % not 16: avoids rounding problems |
| { 1 add 7.9999 mul cvi exch 1 add 7.9999 mul cvi 16 mul add < |
| 0E 8E 2E AE 06 86 26 A6 0C 8C 2C AC 04 84 24 A4 |
| CE 4E EE 6E C6 46 E6 66 CC 4C EC 6C C4 44 E4 64 |
| 3E BE 1E 9E 36 B6 16 96 3C BC 1C 9C 34 B4 14 94 |
| FE 7E DE 5E F6 76 D6 56 FC 7C DC 5C F4 74 D4 54 |
| 01 81 21 A1 09 89 29 A9 03 83 23 A3 0B 8B 2B AB |
| C1 41 E1 61 C9 49 E9 69 C3 43 E3 63 CB 4B EB 6B |
| 31 B1 11 91 39 B9 19 99 33 B3 13 93 3B BB 1B 9B |
| F1 71 D1 51 F9 79 D9 59 F3 73 D3 53 FB 7B DB 5B |
| 0D 8D 2D AD 05 85 25 A5 0F 8F 2F AF 07 87 27 A7 |
| CD 4D ED 6D C5 45 E5 65 CF 4F EF 6F C7 47 E7 67 |
| 3D BD 1D 9D 35 B5 15 95 3F BF 1F 9F 37 B7 17 97 |
| FD 7D DD 5D F5 75 D5 55 FF 7F DF 5F F7 77 D7 57 |
| 02 82 22 A2 0A 8A 2A AA 00 80 20 A0 08 88 28 A8 |
| C2 42 E2 62 CA 4A EA 6A C0 40 E0 60 C8 48 E8 68 |
| 32 B2 12 92 3A BA 1A 9A 30 B0 10 90 38 B8 18 98 |
| F2 72 D2 52 FA 7A DA 5A F0 70 D0 50 F8 78 D8 58 |
| > exch get 256 div } bind setscreen |
| initgraphics |
| DISPLAYING |
| { erasepage |
| } if |
| |
| VMDEBUG |
| |
| % The interpreter will run the initial procedure (start). |