summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/dvips
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2009-01-11 01:42:47 +0000
committerKarl Berry <karl@freefriends.org>2009-01-11 01:42:47 +0000
commitc691ebf8ef4f7ccbbc1ca40bb7301836ca70df96 (patch)
tree7898343c587b9dadf0a6616d1a9a78b7f86398f7 /Master/texmf-dist/dvips
parent309577f1b14a61f0bb2426acea6fa07c41227a95 (diff)
rm geomsty, license nocommercial
git-svn-id: svn://tug.org/texlive/trunk@11840 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/dvips')
-rw-r--r--Master/texmf-dist/dvips/geomsty/illustrator.pro872
-rw-r--r--Master/texmf-dist/dvips/geomsty/math.pro1752
2 files changed, 0 insertions, 2624 deletions
diff --git a/Master/texmf-dist/dvips/geomsty/illustrator.pro b/Master/texmf-dist/dvips/geomsty/illustrator.pro
deleted file mode 100644
index 59fd05cfd75..00000000000
--- a/Master/texmf-dist/dvips/geomsty/illustrator.pro
+++ /dev/null
@@ -1,872 +0,0 @@
-%%BeginResource: procset Adobe_packedarray 2.0 0
-%%Title: (Packed Array Operators)
-%%Version: 2.0
-%%CreationDate: (8/2/90) ()
-%%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved)
-
-userdict /Adobe_packedarray 5 dict dup begin put
-/initialize % - initialize -
-{
-/packedarray where
- {
- pop
- }
- {
- Adobe_packedarray begin
- Adobe_packedarray
- {
- dup xcheck
- {
- bind
- } if
- userdict 3 1 roll put
- } forall
- end
- } ifelse
-} def
-/terminate % - terminate -
-{
-} def
-/packedarray % arguments count packedarray array
-{
-array astore readonly
-} def
-/setpacking % boolean setpacking -
-{
-pop
-} def
-/currentpacking % - setpacking boolean
-{
-false
-} def
-currentdict readonly pop end
-%%EndResource
-%%BeginResource: procset Adobe_cmykcolor 1.1 0
-%%Title: (CMYK Color Operators)
-%%Version: 1.1
-%%CreationDate: (1/23/89) ()
-%%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved)
-
-currentpacking true setpacking
-userdict /Adobe_cmykcolor 4 dict dup begin put
-/initialize % - initialize -
-{
-/setcmykcolor where
- {
- pop
- }
- {
- userdict /Adobe_cmykcolor_vars 2 dict dup begin put
- /_setrgbcolor
- /setrgbcolor load def
- /_currentrgbcolor
- /currentrgbcolor load def
- Adobe_cmykcolor begin
- Adobe_cmykcolor
- {
- dup xcheck
- {
- bind
- } if
- pop pop
- } forall
- end
- end
- Adobe_cmykcolor begin
- } ifelse
-} def
-/terminate % - terminate -
-{
-currentdict Adobe_cmykcolor eq
- {
- end
- } if
-} def
-/setcmykcolor % cyan magenta yellow black setcmykcolor -
-{
-1 sub 4 1 roll
-3
- {
- 3 index add neg dup 0 lt
- {
- pop 0
- } if
- 3 1 roll
- } repeat
-Adobe_cmykcolor_vars /_setrgbcolor get exec
-pop
-} def
-/currentcmykcolor % - currentcmykcolor cyan magenta yellow black
-{
-Adobe_cmykcolor_vars /_currentrgbcolor get exec
-3
- {
- 1 sub neg 3 1 roll
- } repeat
-0
-} def
-currentdict readonly pop end
-setpacking
-
-%%EndResource
-%%BeginResource: procset Adobe_cshow 1.1 0
-%%Title: (cshow Operator)
-%%Version: 1.1
-%%CreationDate: (1/23/89) ()
-%%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved)
-
-currentpacking true setpacking
-userdict /Adobe_cshow 3 dict dup begin put
-/initialize % - initialize -
-{
-/cshow where
- {
- pop
- }
- {
- userdict /Adobe_cshow_vars 1 dict dup begin put
- /_cshow % - _cshow proc
- {} def
- Adobe_cshow begin
- Adobe_cshow
- {
- dup xcheck
- {
- bind
- } if
- userdict 3 1 roll put
- } forall
- end
- end
- } ifelse
-} def
-/terminate % - terminate -
-{
-} def
-/cshow % proc string cshow -
-{
-exch
-Adobe_cshow_vars
- exch /_cshow
- exch put
- {
- 0 0 Adobe_cshow_vars /_cshow get exec
- } forall
-} def
-currentdict readonly pop end
-setpacking
-
-%%EndResource
-%%BeginResource: procset Adobe_customcolor 1.0 0
-%%Title: (Custom Color Operators)
-%%Version: 1.0
-%%CreationDate: (5/9/88) ()
-%%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved)
-
-currentpacking true setpacking
-userdict /Adobe_customcolor 5 dict dup begin put
-/initialize % - initialize -
-{
-/setcustomcolor where
- {
- pop
- }
- {
- Adobe_customcolor begin
- Adobe_customcolor
- {
- dup xcheck
- {
- bind
- } if
- pop pop
- } forall
- end
- Adobe_customcolor begin
- } ifelse
-} def
-/terminate % - terminate -
-{
-currentdict Adobe_customcolor eq
- {
- end
- } if
-} def
-/findcmykcustomcolor % cyan magenta yellow black name findcmykcustomcolor object
-{
-5 packedarray
-} def
-/setcustomcolor % object tint setcustomcolor -
-{
-exch
-aload pop pop
-4
- {
- 4 index mul 4 1 roll
- } repeat
-5 -1 roll pop
-setcmykcolor
-} def
-/setoverprint % boolean setoverprint -
-{
-pop
-} def
-currentdict readonly pop end
-setpacking
-
-%%EndResource
-%%BeginResource: procset Adobe_IllustratorA_AI3 1.0 1
-%%Title: (Adobe Illustrator (R) Version 3.0 Abbreviated Prolog)
-%%Version: 1.0
-%%CreationDate: (7/22/89) ()
-%%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved)
-
-currentpacking true setpacking
-userdict /Adobe_IllustratorA_AI3 61 dict dup begin put
-% initialization
-/initialize % - initialize -
-{
-% 47 vars, but leave slack of 10 entries for custom Postscript fragments
-userdict /Adobe_IllustratorA_AI3_vars 57 dict dup begin put
-
-% paint operands
-/_lp /none def
-/_pf {} def
-/_ps {} def
-/_psf {} def
-/_pss {} def
-/_pjsf {} def
-/_pjss {} def
-/_pola 0 def
-/_doClip 0 def
-
-% paint operators
-/cf currentflat def % - cf flatness
-
-% typography operands
-/_tm matrix def
-/_renderStart [/e0 /r0 /a0 /o0 /e1 /r1 /a1 /i0] def
-/_renderEnd [null null null null /i1 /i1 /i1 /i1] def
-/_render -1 def
-/_rise 0 def
-/_ax 0 def % x character spacing (_ax, _ay, _cx, _cy follows awidthshow naming convention)
-/_ay 0 def % y character spacing
-/_cx 0 def % x word spacing
-/_cy 0 def % y word spacing
-/_leading [0 0] def
-/_ctm matrix def
-/_mtx matrix def
-/_sp 16#020 def
-/_hyphen (-) def
-/_fScl 0 def
-/_cnt 0 def
-/_hs 1 def
-/_nativeEncoding 0 def
-/_useNativeEncoding 0 def
-/_tempEncode 0 def
-/_pntr 0 def
-/_tDict 2 dict def
-
-% typography operators
-/Tx {} def
-/Tj {} def
-
-% compound path operators
-/CRender {} def
-
-% printing
-/_AI3_savepage {} def
-
-% color operands
-/_gf null def
-/_cf 4 array def
-/_if null def
-/_of false def
-/_fc {} def
-/_gs null def
-/_cs 4 array def
-/_is null def
-/_os false def
-/_sc {} def
-/_i null def
-Adobe_IllustratorA_AI3 begin
-Adobe_IllustratorA_AI3
- {
- dup xcheck
- {
- bind
- } if
- pop pop
- } forall
-end
-end
-Adobe_IllustratorA_AI3 begin
-Adobe_IllustratorA_AI3_vars begin
-newpath
-} def
-/terminate % - terminate -
-{
-end
-end
-} def
-% definition operators
-/_ % - _ null
-null def
-/ddef % key value ddef -
-{
-Adobe_IllustratorA_AI3_vars 3 1 roll put
-} def
-/xput % key value literal xput -
-{
-dup load dup length exch maxlength eq
- {
- dup dup load dup
- length 2 mul dict copy def
- } if
-load begin def end
-} def
-/npop % integer npop -
-{
- {
- pop
- } repeat
-} def
-% marking operators
-/sw % ax ay string sw x y
-{
-dup length exch stringwidth
-exch 5 -1 roll 3 index 1 sub mul add
-4 1 roll 3 1 roll 1 sub mul add
-} def
-/swj % cx cy fillchar ax ay string swj x y
-{
-dup 4 1 roll
-dup length exch stringwidth
-exch 5 -1 roll 3 index 1 sub mul add
-4 1 roll 3 1 roll 1 sub mul add
-6 2 roll /_cnt 0 ddef
-{1 index eq {/_cnt _cnt 1 add ddef} if} forall pop
-exch _cnt mul exch _cnt mul 2 index add 4 1 roll 2 index add 4 1 roll pop pop
-} def
-/ss % ax ay string matrix ss -
-{
-4 1 roll
- { % matrix ax ay char 0 0 {proc} -
- 2 npop
- (0) exch 2 copy 0 exch put pop
- gsave
- false charpath currentpoint
- 4 index setmatrix
- stroke
- grestore
- moveto
- 2 copy rmoveto
- } exch cshow
-3 npop
-} def
-/jss % cx cy fillchar ax ay string matrix jss -
-{
-4 1 roll
- { % cx cy fillchar matrix ax ay char 0 0 {proc} -
- 2 npop
- (0) exch 2 copy 0 exch put
- gsave
- _sp eq
- {
- exch 6 index 6 index 6 index 5 -1 roll widthshow
- currentpoint
- }
- {
- false charpath currentpoint
- 4 index setmatrix stroke
- }ifelse
- grestore
- moveto
- 2 copy rmoveto
- } exch cshow
-6 npop
-} def
-
-% path operators
-/sp % ax ay string sp -
-{
- {
- 2 npop (0) exch
- 2 copy 0 exch put pop
- false charpath
- 2 copy rmoveto
- } exch cshow
-2 npop
-} def
-/jsp % cx cy fillchar ax ay string jsp -
-{
- { % cx cy fillchar ax ay char 0 0 {proc} -
- 2 npop
- (0) exch 2 copy 0 exch put
- _sp eq
- {
- exch 5 index 5 index 5 index 5 -1 roll widthshow
- }
- {
- false charpath
- }ifelse
- 2 copy rmoveto
- } exch cshow
-5 npop
-} def
-
-% path construction operators
-/pl % x y pl x y
-{
-transform
-0.25 sub round 0.25 add exch
-0.25 sub round 0.25 add exch
-itransform
-} def
-/setstrokeadjust where
- {
- pop true setstrokeadjust
- /c % x1 y1 x2 y2 x3 y3 c -
- {
- curveto
- } def
- /C
- /c load def
- /v % x2 y2 x3 y3 v -
- {
- currentpoint 6 2 roll curveto
- } def
- /V
- /v load def
- /y % x1 y1 x2 y2 y -
- {
- 2 copy curveto
- } def
- /Y
- /y load def
- /l % x y l -
- {
- lineto
- } def
- /L
- /l load def
- /m % x y m -
- {
- moveto
- } def
- }
- {%else
- /c
- {
- pl curveto
- } def
- /C
- /c load def
- /v
- {
- currentpoint 6 2 roll pl curveto
- } def
- /V
- /v load def
- /y
- {
- pl 2 copy curveto
- } def
- /Y
- /y load def
- /l
- {
- pl lineto
- } def
- /L
- /l load def
- /m
- {
- pl moveto
- } def
- }ifelse
-
-% graphic state operators
-/d % array phase d -
-{
-setdash
-} def
-/cf {} def % - cf flatness
-/i % flatness i -
-{
-dup 0 eq
- {
- pop cf
- } if
-setflat
-} def
-/j % linejoin j -
-{
-setlinejoin
-} def
-/J % linecap J -
-{
-setlinecap
-} def
-/M % miterlimit M -
-{
-setmiterlimit
-} def
-/w % linewidth w -
-{
-setlinewidth
-} def
-
-% path painting operators
-/H % - H -
-{} def
-/h % - h -
-{
-closepath
-} def
-/N % - N -
-{
-_pola 0 eq
- {
- _doClip 1 eq {clip /_doClip 0 ddef} if
- newpath
- }
- {
- /CRender {N} ddef
- }ifelse
-} def
-/n % - n -
-{N} def
-/F % - F -
-{
-_pola 0 eq
- {
- _doClip 1 eq
- {
- gsave _pf grestore clip newpath /_lp /none ddef _fc
- /_doClip 0 ddef
- }
- {
- _pf
- }ifelse
- }
- {
- /CRender {F} ddef
- }ifelse
-} def
-/f % - f -
-{
-closepath
-F
-} def
-/S % - S -
-{
-_pola 0 eq
- {
- _doClip 1 eq
- {
- gsave _ps grestore clip newpath /_lp /none ddef _sc
- /_doClip 0 ddef
- }
- {
- _ps
- }ifelse
- }
- {
- /CRender {S} ddef
- }ifelse
-} def
-/s % - s -
-{
-closepath
-S
-} def
-/B % - B -
-{
-_pola 0 eq
- {
- _doClip 1 eq % F clears _doClip
- gsave F grestore
- {
- gsave S grestore clip newpath /_lp /none ddef _sc
- /_doClip 0 ddef
- }
- {
- S
- }ifelse
- }
- {
- /CRender {B} ddef
- }ifelse
-} def
-/b % - b -
-{
-closepath
-B
-} def
-/W % - W -
-{
-/_doClip 1 ddef
-} def
-/* % - [string] * -
-{
-count 0 ne
- {
- dup type (stringtype) eq {pop} if
- } if
-_pola 0 eq {newpath} if
-} def
-
-% group operators
-/u % - u -
-{} def
-/U % - U -
-{} def
-/q % - q -
-{
-_pola 0 eq {gsave} if
-} def
-/Q % - Q -
-{
-_pola 0 eq {grestore} if
-} def
-/*u % - *u -
-{
-_pola 1 add /_pola exch ddef
-} def
-/*U % - *U -
-{
-_pola 1 sub /_pola exch ddef
-_pola 0 eq {CRender} if
-} def
-/D % polarized D -
-{pop} def
-/*w % - *w -
-{} def
-/*W % - *W -
-{} def
-
-% place operators
-/` % matrix llx lly urx ury string ` -
-{
-/_i save ddef
-6 1 roll 4 npop
-concat
-userdict begin
-/showpage {} def
-false setoverprint
-pop
-} def
-/~ % - ~ -
-{
-end
-_i restore
-} def
-
-% color operators
-/O % flag O -
-{
-0 ne
-/_of exch ddef
-/_lp /none ddef
-} def
-/R % flag R -
-{
-0 ne
-/_os exch ddef
-/_lp /none ddef
-} def
-/g % gray g -
-{
-/_gf exch ddef
-/_fc
-{
-_lp /fill ne
- {
- _of setoverprint
- _gf setgray
- /_lp /fill ddef
- } if
-} ddef
-/_pf
-{
-_fc
-fill
-} ddef
-/_psf
-{
-_fc
-ashow
-} ddef
-/_pjsf
-{
-_fc
-awidthshow
-} ddef
-/_lp /none ddef
-} def
-/G % gray G -
-{
-/_gs exch ddef
-/_sc
-{
-_lp /stroke ne
- {
- _os setoverprint
- _gs setgray
- /_lp /stroke ddef
- } if
-} ddef
-/_ps
-{
-_sc
-stroke
-} ddef
-/_pss
-{
-_sc
-ss
-} ddef
-/_pjss
-{
-_sc
-jss
-} ddef
-/_lp /none ddef
-} def
-/k % cyan magenta yellow black k -
-{
-_cf astore pop
-/_fc
-{
-_lp /fill ne
- {
- _of setoverprint
- _cf aload pop setcmykcolor
- /_lp /fill ddef
- } if
-} ddef
-/_pf
-{
-_fc
-fill
-} ddef
-/_psf
-{
-_fc
-ashow
-} ddef
-/_pjsf
-{
-_fc
-awidthshow
-} ddef
-/_lp /none ddef
-} def
-/K % cyan magenta yellow black K -
-{
-_cs astore pop
-/_sc
-{
-_lp /stroke ne
- {
- _os setoverprint
- _cs aload pop setcmykcolor
- /_lp /stroke ddef
- } if
-} ddef
-/_ps
-{
-_sc
-stroke
-} ddef
-/_pss
-{
-_sc
-ss
-} ddef
-/_pjss
-{
-_sc
-jss
-} ddef
-/_lp /none ddef
-} def
-/x % cyan magenta yellow black name gray x -
-{
-/_gf exch ddef
-findcmykcustomcolor
-/_if exch ddef
-/_fc
-{
-_lp /fill ne
- {
- _of setoverprint
- _if _gf 1 exch sub setcustomcolor
- /_lp /fill ddef
- } if
-} ddef
-/_pf
-{
-_fc
-fill
-} ddef
-/_psf
-{
-_fc
-ashow
-} ddef
-/_pjsf
-{
-_fc
-awidthshow
-} ddef
-/_lp /none ddef
-} def
-/X % cyan magenta yellow black name gray X -
-{
-/_gs exch ddef
-findcmykcustomcolor
-/_is exch ddef
-/_sc
-{
-_lp /stroke ne
- {
- _os setoverprint
- _is _gs 1 exch sub setcustomcolor
- /_lp /stroke ddef
- } if
-} ddef
-/_ps
-{
-_sc
-stroke
-} ddef
-/_pss
-{
-_sc
-ss
-} ddef
-/_pjss
-{
-_sc
-jss
-} ddef
-/_lp /none ddef
-} def
-
-% locked object operator
-/A % value A -
-{
-pop
-} def
-
-currentdict readonly pop end
-setpacking
-
-% annotate page operator
-/annotatepage
-{
-} def
-%%EndResource
-
diff --git a/Master/texmf-dist/dvips/geomsty/math.pro b/Master/texmf-dist/dvips/geomsty/math.pro
deleted file mode 100644
index e05e6c4bd3f..00000000000
--- a/Master/texmf-dist/dvips/geomsty/math.pro
+++ /dev/null
@@ -1,1752 +0,0 @@
-% This file is adapted from the PostScript code that gets
-% included by the psfix filter, provided with Mathematica.
-% The only differences are the addition of the first two lines
-% (MyDict) and of the abbreviations at the end (starting with /Ma).
-
-%$Revision: 1.3 $
-%$Date: 95/06/27 12:16:53 $
-
-/MyDict 200 dict def
-MyDict begin
-
-% The externally visible functions are:
-% MathPictureStart- start page.
-% MathPictureEnd - finish off page.
-% MathSubStart - start a sub-page.
-% MathSubEnd - finish off a sub-page.
-% Mdot - draw a dot.
-% Mtetra - draw a filled tetragon.
-% Metetra - draw a filled tetragon with black edges.
-% Mistroke - intermediate stroke of multi-stroke line/curve.
-% Mfstroke - final stroke of multi-stroke line/curve.
-% Msboxa - compute coordinates of text bounding box.
-% Mshowa - plot characters.
-% MathScale - compute scaling info to contain array of points.
-
-
-% The following are only for backwards compatibility with earlier versions
-% of Mathematica:
-% Mpstart - identical to MathPictureStart.
-% Mpend - identical to MathPictureEnd.
-% Mscale - like MathScale but without user coordinate info.
-
-/Mpstart { % - Mpstart -
- MathPictureStart
-} bind def
-
-/Mpend { % - Mpend -
- MathPictureEnd
-} bind def
-
-/Mscale { % [pnts] Mscale -
- 0 1 0 1 % [pnts] xbias xscale ybias yscale
- 5 -1 roll % xbias xscale ybias yscale [pnts]
- MathScale % -
-} bind def
-
-%start of ISOLatin1 stuff
-
-/ISOLatin1Encoding dup where
-{ pop pop }
-{
-[
-/.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 /minus /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
-/dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent
-/dieresis /.notdef /ring /cedilla /.notdef /hungarumlaut /ogonek /caron
-/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
-/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
-} ifelse
-
-/MFontDict 50 dict def
-
-/MStrCat % string1 string2 MStrCat string
-{
- exch % s2 s1
- dup length % s2 s1 len
- 2 index length add % s2 s1 len
- string % s2 s1 s
- dup 3 1 roll % s2 s s1 s
- copy % s2 s s1
- length % s2 s where
- exch dup % s2 where s s
- 4 2 roll exch % s s where s2
- putinterval
-} def
-
-/MCreateEncoding % name encoding MCreateEncoding newname
-{
- % get base name
- 1 index % name encoding name
-
- % concatenate (-) and encoding to the name
- 255 string cvs
- (-) MStrCat
- 1 index MStrCat
- cvn exch % basename newname encoding
-
- % make encoding name
-
- (Encoding) MStrCat
- cvn dup where
- {
- exch get
- }
- {
- pop
- StandardEncoding
- } ifelse
- 3 1 roll % vector basename newname
-
- % make the font if we haven't before
- dup MFontDict exch known not
- {
- 1 index findfont
- dup length dict
- begin
- {1 index /FID ne
- {def}
- {pop pop}
- ifelse} forall
- /Encoding 3 index
- def
- currentdict
- end
- 1 index exch definefont pop
-
- MFontDict 1 index
- null put
- }
- if
-
- exch pop % vector newname
- exch pop % newname
-} def
-
-/ISOLatin1 { (ISOLatin1) MCreateEncoding } def
-/ISO8859 { (ISOLatin1) MCreateEncoding } def
-
-%end of ISOLatin1 stuff
-
-%
-% Include old font names for backward compatibility
-%
-/Mcopyfont { % procedure to copy font
- dup
- maxlength
- dict
- exch
- {
- 1 index
- /FID
- eq
- {
- pop pop
- }
- {
- 2 index
- 3 1 roll
- put
- }
- ifelse
- }
- forall
-} def
-
-/Plain /Courier findfont Mcopyfont definefont pop
-/Bold /Courier-Bold findfont Mcopyfont definefont pop
-/Italic /Courier-Oblique findfont Mcopyfont definefont pop
-
-% Set up for the start of a page.
-/MathPictureStart { % - MathPictureStart -
- gsave % -
- Mtransform % possibly rotate to landscape mode
- Mlmarg % left_margin
- Mbmarg % bottom_margin
- translate % -
- Mwidth % init_width
- Mlmarg Mrmarg add % init_width lmarg+rmarg
- sub % true_width
- /Mwidth exch def %
- Mheight % init_height
- Mbmarg Mtmarg add % init_height tmarg+bmarg
- sub % true_height
- /Mheight exch def
- /Mtmatrix % /Mtmatrix
- matrix currentmatrix % /Mtmatrix text_matrix
- def
- /Mgmatrix % /Mgmatrix
- matrix currentmatrix % /Mgmatrix graphics_matrix
- def % -
-} bind def
-
-
-% Finish off a page.
-/MathPictureEnd {
- grestore
-} bind def
-
-%MFill fills the drawing area with the current color.
-/MFill {
- 0 0 moveto
- Mwidth 0 lineto
- Mwidth Mheight lineto
- 0 Mheight lineto
- fill
-} bind def
-
-% xmin xmax ymin ymax MPlotRegion alters the origin, Mwidth and Mheight
-% so that the picture fills the altered region
-/MPlotRegion { % xmin xmax ymin ymax MPlotRegion
- 3 index % xmin xmax ymin ymax xmin
- Mwidth mul % xmin xmax ymin ymax xmin_pos
- 2 index % xmin xmax ymin ymax xmin_pos ymin
- Mheight mul % xmin xmax ymin ymax xmin_pos ymin_pos
- translate % xmin xmax ymin ymax
- exch sub % xmin xmax ymax-ymin
- Mheight mul % xmin xmax new_height
- /Mheight
- exch def % xmin xmax
- exch sub % xmax-xmin
- Mwidth mul % new-width
- /Mwidth
- exch def
-} bind def
-
-% Given a rectangle, set it up as a sub-picture.
-/MathSubStart { % xmin ymin xmax ymax MathSubStart <saved state(8)>
- Momatrix
- Mgmatrix Mtmatrix
- Mwidth Mheight % xmin ymin xmax ymax <ss(8)>
- 7 -2 roll % xmin ymin <ss(8)> xmax ymax
- moveto % xmin ymin <ss(8)>
- Mtmatrix setmatrix % xmin ymin <ss(8)>
- currentpoint % xmin ymin <ss(8)> xmax(t) ymax(t)
- Mgmatrix setmatrix % xmin ymin <ss(8)> xmax(t) ymax(t)
- 9 -2 roll % <ss(8)> xmax(t) ymax(t) xmin ymin
- moveto % <ss(8)> xmax(t) ymax(t)
- Mtmatrix setmatrix % <ss(8)> xmax(t) ymax(t)
- currentpoint % <ss(8)> xmax(t) ymax(t) xmin(t) ymin(t)
- 2 copy translate % <ss(8)> xmax ymax xmin ymin
- /Mtmatrix matrix currentmatrix def
- 3 -1 roll % <ss(8)> xmax xmin ymin ymax
- exch sub % <ss(8)> xmax xmin height
- /Mheight exch def % <ss(8)> xmax xmin
- sub % <ss(8)> width
- /Mwidth exch def % <ss(8)>
-} bind def
-
-
-% Restore the saved state left by the matching MathSubStart.
-% Note, we also leave with the new Mgmatrix as the current matrix.
-/MathSubEnd { % gmat tmat lm rm bm tm w h MathSubStart -
- /Mheight exch def % gmat tmat lm rm bm tm w
- /Mwidth exch def % gmat tmat lm rm bm tm
- /Mtmatrix exch def % gmat
- dup setmatrix % gmat
- /Mgmatrix exch def % -
- /Momatrix exch def % -
-} bind def
-
-
-% Given a point, draw a dot.
-/Mdot { % x y Mdot -
- moveto % -
- 0 0 rlineto % -
- stroke % -
-} bind def
-
-
-% Given 4 points, draw the corresponding filled tetragon.
-/Mtetra { % x0 y0 x1 y1 x2 y2 x3 y3 Mtetra -
- moveto % x0 y0 x1 y1 x2 y2
- lineto % x0 y0 x1 y1
- lineto % x0 y0
- lineto % -
- fill % -
-} bind def
-
-
-% Given 4 points, draw the corresponding filled tetragon with black edges.
-% Note, this leaves the gray level at 0 (for compatibility with the old
-% C code.
-/Metetra { % x0 y0 x1 y1 x2 y2 x3 y3 Metetra -
- moveto % x0 y0 x1 y1 x2 y2
- lineto % x0 y0 x1 y1
- lineto % x0 y0
- lineto % -
- closepath % -
- gsave % -
- fill % -
- grestore % -
- 0 setgray % -
- stroke % -
-} bind def
-
-
-% Mistroke is called to stroke intermediate parts of a path. It makes
-% sure to resynchronize the dashing pattern and to leave the current point
-% as the final point of the path.
-/Mistroke { % - Mistroke -
- flattenpath % -
- 0 0 0 % length x y
- { % length x y new_x new_y (for moves)
- 4 2 roll % length new_x new_y x y
- pop pop % length new_x new_y
- }
- { % length x y new_x new_y (for lines)
- 4 -1 roll % length y new_x new_y x
- 2 index % length y new_x new_y x new_x
- sub dup mul % length y new_x new_y dx*dx
- 4 -1 roll % length new_x new_y dx*dx y
- 2 index % length new_x new_y dx*dx y new_y
- sub dup mul % length new_x new_y dx*dx dy*dy
- add sqrt % length new_x new_y dlen
- 4 -1 roll % new_x new_y dlen length
- add % new_x new_y new_length
- 3 1 roll % new_length new_x new_y
- }
- { % length x y x1 y1 x2 y2 x3 y3 (for curves)
- stop % should never be called
- }
- { % length x y (for closepaths)
- stop % should never be called
- }
- pathforall % length x y
- pop pop % length
- currentpoint % length final_x final_y
- stroke % length final_x final_y
- moveto % length
- currentdash % length dash_array dash_offset
- 3 -1 roll % dash_array dash_offset length
- add % dash_array new_offset
- setdash % -
-} bind def
-
-
-% Mfstroke is called to stroke the final parts of a path. It resets
-% the dashing pattern to compensate for any adjustments made by Mistroke.
-/Mfstroke { % - Mfstroke -
- stroke % -
- currentdash % dash_array dash_offset
- pop 0 % dash_array 0
- setdash % -
-} bind def
-
-
-
-% Mrotsboxa is the same as Msboxa except that it takes an angle
-% form the stack and the box is calculated for text rendered at this angle.
-% It gsaves in case we are starting a MathSubStart
-% save Mrot so that Msboxa can convert bouding box back to the non-rotated
-% coordinate system
-% call Mrotcheck to alter the offsets into the rotated system
-% converts Mtmatrix to render in the rotated system
-% the calls Msboxa which does all the work
-% at the end Mtmatrix is restored and Mrot is reset to 0
-/Mrotsboxa { % [str..] gx gy sx sy ang Mrotsboxa ... Msboxa
- gsave % in case in MathSubStart
- dup % [str..] gx gy sx sy ang ang
- /Mrot
- exch def % [str..] gx gy sx sy ang
- Mrotcheck % [str..] gx gy sx_new sy_new ang
- Mtmatrix % [str..] gx gy sx sy ang Mtmatrix
- dup
- setmatrix
- 7 1 roll % Mtmatrix [str..] gx gy sx sy ang
- 4 index % Mtmatrix [str..] gx gy sx sy ang gx
- 4 index % Mtmatrix [str..] gx gy sx sy ang gx gy
- translate % Mtmatrix [str..] gx gy sx sy ang
- rotate % Mtmatrix [str..] gx gy sx sy
- 3 index % Mtmatrix [str..] gx gy sx sy gx
- -1 mul % Mtmatrix [str..] gx gy sx sy -gx
- 3 index % Mtmatrix [str..] gx gy sx sy -gx gy
- -1 mul % Mtmatrix [str..] gx gy sx sy -gx -gy
- translate % Mtmatrix [str..] gx gy sx sy
- /Mtmatrix % now change Mtmatrix to be this new currentmatrix
- matrix
- currentmatrix
- def
- grestore % grestore to deal with MathSubStart
- Msboxa % Mtmatrix [ x y x y] [ x y x y]
- 3 -1 roll % [x y x y ] [x y x y] Mtmatrix
- /Mtmatrix
- exch def % restore Mtmatrix
- /Mrot
- 0 def % restore Mrot
-} bind def
-
-
-% Given an array of strings ([str...]), which represent consecutive lines
-% of text, a position in graphics coordinates (gx,gy) and a position in
-% the bounding box coordinates (sx,sy), compute the low and high coordinates
-% of the resulting text, in the [gx gy tx ty] form, which corresponds to
-% the point (gx,gy) (in graphics coordinates) plus the offset (tx,ty) (in
-% text coordinates).
-% Note, Msboxa assumes that the current matrix is the text matrix.
-% Mboxout is called in case we are in Mouter to make the box bigger
-% Mboxrot adjusts the box to account for a rotation to convert the box
-% into a nonrotated coordinate system
-%
-/Msboxa { % [str...] gx gy sx sy Msboxa [gx gy tlx tly] [gx gy thx thy]
- newpath % [str...] gx gy sx sy (just in case)
- 5 -1 roll % gx gy sx sy [str...]
- Mvboxa % gx gy sx sy blx bly bhx bhy [off...]
- pop % gx gy sx sy blx bly bhx bhy
- Mboxout % adjust box for Minner
- 6 -1 roll % gx gy sy blx bly bhx bhy sx
- 5 -1 roll % gx gy sy bly bhx bhy sx blx
- 4 -1 roll % gx gy sy bly bhy sx blx bhx
- Msboxa1 % gx gy sy bly bhy tlx thx
- 5 -3 roll % gx gy tlx thx sy bly bhy
- Msboxa1 % gx gy tlx thx tly thy
- Mboxrot % adjust box for rotation
- [ % gx gy tlx thx tly thy mark
- 7 -2 roll % tlx thx tly thy mark gx gy
- 2 copy % tlx thx tly thy mark gx gy gx gy
- [ % tlx thx tly thy mark gx gy gx gy mark
- 3 1 roll % tlx thx tly thy mark gx gy mark gx gy
- 10 -1 roll % thx tly thy mark gx gy mark gx gy tlx
- 9 -1 roll % thx thy mark gx gy mark gx gy tlx tly
- ] % thx thy mark gx gy [gx gy tlx tly]
- 6 1 roll % [gx gy tlx tly] thx thy mark gx gy
- 5 -2 roll % [gx gy tlx tly] mark gx gy thx thy
- ] % [gx gy tlx tly] [gx gy thx thy]
-} bind def
-
-% Msboxa1 is an internal function which, given a bounding box coordinate
-% (sz), and the bounding box limits (blz and bhz), computes the actual
-% offsets (tlz = (blz-bhz)(sz+1)/2, thz = (blz-bhz)(sz-1)/2).
-/Msboxa1 { % sz blz bhz Msboxa1 tlz thz
- sub % sz blz-bhz
- 2 div % sz (blz-bhz)/2
- dup % sz (blz-bhz)/2 (blz-bhz)/2
- 2 index % sz (blz-bhz)/2 (blz-bhz)/2 sz
- 1 add % sz (blz-bhz)/2 (blz-bhz)/2 sz+1
- mul % sz (blz-bhz)/2 tlz
- 3 -1 roll % (blz-bhz)/2 tlz sz
- -1 add % (blz-bhz)/2 tlz sz-1
- 3 -1 roll % tlz sz-1 (blz-bhz)/2
- mul % tlz thz
-} bind def
-
-
-% Given a (non-empty) array of strings ([str...]) calculate the
-% bounding box. We do this for fixedwidth fonts or nonfixedwidth fonts
-% depending upon the setting of Mfixwid. Mvboxa1 actually does a lot
-% of the work. For nonfixedwidth fonts the length of the bounding
-% box length is made to be the summation of [(str)..] Mwidthcal
-% ie the maximum length of the strings and xlow
-%
-/Mvboxa { % [str...] Mvboxa xlow ylow xhigh yhigh [off...]
- Mfixwid
- {
- Mvboxa1
- }
- {
- dup % [str...] [str...]
- Mwidthcal % [str...] [ w1 w2...]
- 0 exch % [str...] 0 [ w1 w2...]
- {
- add
- }
- forall % [str...] length
- exch
- Mvboxa1 % length xlow ylow xhigh yhigh [off...]
- 4 index % length xlow ylow xhigh yhigh [off...] xlow
- 7 -1 roll % xlow ylow xhigh yhigh [off...] xlow length
- add % xlow ylow xhigh yhigh [off...] new_xhigh
- 4 -1 roll
- pop % xlow ylow yhigh [off...] new_xhigh
- 3 1 roll % xlow ylow new_xhigh yhigh [off...]
- }
- ifelse
-} bind def
-
-
-% Given a (non-empty) array of strings ([str...]) which represent consecutive
-% lines of text, compute the total bounding box assuming that we start at
-% (0,0) and the array of y offsets to place the lines correctly.
-% Note, Mvboxa assumes that the current matrix is the text matrix.
-% Note, Mvboxa does not alter the current path.
-% The vertical spacing is set so that the bounding boxes of adjacent lines
-% are .3 times the width of an `m' apart.
-/Mvboxa1 { % [str...] Mvboxa xlow ylow xhigh yhigh [off...]
- gsave % [str...]
- newpath % [str...] (clear path fragments)
- [ true % [str...] mark true
- 3 -1 roll % mark true [str...]
- { % mark {true -or- off... Xl Yl Xh Yh false} str
- Mbbox % mark {true -or- off... Xl Yl Xh Yh false} xl yl xh yh
- 5 -1 roll % mark { - -or- off... Xl Yl Xh Yh} xl yl xh yh first?
- { % mark xl yl xh yh
- 0 % mark xl yl xh yh off1
- 5 1 roll % mark off1 xl yl xh yh
- } % mark off1 XL YL XH YH
- { % mark off... Xl Yl Xh Yh xl yl xh yh
- 7 -1 roll % mark off... Xl Xh Yh xl yl xh yh Yl
- exch sub % mark off... Xl Xh Yh xl yl xh yh-Yl
- (m) stringwidth pop % mark off... Xl Xh Yh xl yl xh yh-Yl pntsize
- .3 mul % mark off... Xl Xh Yh xl yl xh yh-Yl fudge
- sub % mark off... Xl Xh Yh xl yl xh off
- 7 1 roll % mark off... off Xl Xh Yh xl yl xh
- 6 -1 roll % mark off... off Xh Yh xl yl xh Xl
- 4 -1 roll % mark off... off Xh Yh yl xh Xl xl
- Mmin % mark off... off Xh Yh yl xh XL
- 3 -1 roll % mark off... off Xh Yh xh XL yl
- 5 index % mark off... off Xh Yh xh XL yl off
- add % mark off... off Xh Yh xh XL YL
- 5 -1 roll % mark off... off Yh xh XL YL Xh
- 4 -1 roll % mark off... off Yh XL YL Xh xh
- Mmax % mark off... off Yh XL YL XH
- 4 -1 roll % mark off... off XL YL XH YH
- } % mark off... XL YL XH YH
- ifelse % mark off... XL YL XH YH
- false % mark off... XL YL XH YH false
- } % mark off... XL YL XH YH false
- forall % mark off... xlow ylow xhigh yhigh false
- { stop } if % mark off... xlow ylow xhigh yhigh
- counttomark % mark off... xlow ylow xhigh yhigh (#off's+4)
- 1 add % mark off... xlow ylow xhigh yhigh (#off's+5)
- 4 roll % xlow ylow xhigh yhigh mark off...
- ] % xlow ylow xhigh yhigh [off...]
- grestore % xlow ylow xhigh yhigh [off...]
-} bind def
-
-
-% Given a string, compute the bounding box assuming that we start at (0,0).
-% Note, the path is assumed to be empty, and we are assumed to be in text
-% coordinates. Allows for long strings.
-/Mbbox { % str Mbbox xlow ylow xhigh yhigh
- 1 dict begin
- 0 0 moveto % str
- /temp (T) def
- { gsave
- currentpoint newpath moveto
- temp 0 3 -1 roll put temp
- false charpath flattenpath currentpoint
- pathbbox
- grestore moveto lineto moveto} forall
- pathbbox
- newpath
- end
-} bind def
-
-
-% Compute the minimum of two numbers.
-/Mmin { % p q Mmin min(p,q)
- 2 copy % p q p q
- gt % p q p>q?
- { exch } if % min(p,q) max(p,q)
- pop % min(p,q)
-} bind def
-
-
-% Compute the maximum of two numbers.
-/Mmax { % p q Mmax max(p,q)
- 2 copy % p q p q
- lt % p q p<q?
- { exch } if % max(p,q) min(p,q)
- pop % max(p,q)
-} bind def
-
-% Mrotshowa is the same as Mshowa except that it takes an angle
-% from the stack and the text is rendered at this angle.
-% It saves Mrot (not really needed but saved anyway)
-% calls Mrotcheck to adjust the offsets into the rotated coordinate system
-% converts Mtmatrix to render in the rotated system
-% and calls Mshowa which does all the work
-% at the end Mtmatrix is restored and Mrot is reset to zero.
-%
-/Mrotshowa { %[str..] gx gy sx sy ang Mrotshowa
- dup
- /Mrot
- exch def
- Mrotcheck
- Mtmatrix %[str..] gx gy sx sy ang Mtmatrix
- dup
- setmatrix
- 7 1 roll %Mtmatrix [str..] gx gy sx sy ang
- 4 index %Mtmatrix [str..] gx gy sx sy ang gx
- 4 index %Mtmatrix [str..] gx gy sx sy ang gx gy
- translate
- rotate %Mtmatrix [str..] gx gy sx sy
- 3 index
- -1 mul
- 3 index
- -1 mul %Mtmatrix [str..] gx gy sx sy -gx -gy
- translate
- /Mtmatrix
- matrix
- currentmatrix
- def %Mtmatrix [str..] gx gy sx sy
- Mgmatrix setmatrix
- Mshowa %Mtmatrix
- /Mtmatrix
- exch def
- /Mrot 0 def % restore Mrot
-} bind def
-
-%
-% Given an array of strings ([str...]), which represent consecutive lines
-% of text, a position in graphics coordinates (gx,gy) and a position in
-% the bounding box coordinates (sx,sy), display the strings.
-% Mboxout is called in case we are in Mouter
-%
-/Mshowa { % [str...] gx gy sx sy Mshowa -
- 4 -2 roll % [str...] sx sy gx gy
- moveto % [str...] sx sy
- 2 index % [str...] sx sy [str...]
- Mtmatrix setmatrix % [str...] sx sy [str...]
- Mvboxa % [str...] sx sy tlx tly thx thy [off...]
- 7 1 roll % [str...] [off...] sx sy tlx tly thx thy
- Mboxout
- 6 -1 roll % [str...] [off...] sy tlx tly thx thy sx
- 5 -1 roll % [str...] [off...] sy tly thx thy sx tlx
- 4 -1 roll % [str...] [off...] sy tly thy sx tlx thx
- Mshowa1 % [str...] [off...] sy tly thy relx
- 4 1 roll % [str...] [off...] relx sy tly thy
- Mshowa1 % [str...] [off...] relx rely
- rmoveto % [str...] [off...]
- currentpoint % [str...] [off...] x y
- Mfixwid
- {
- Mshowax
- }
- {
- Mshoway
- }
- ifelse
- pop pop pop pop
- Mgmatrix setmatrix
-} bind def
-
-
-% This is used for fixedwidth fonts
-% It simply shows each string and advances the y direction by the offset
-%
-/Mshowax {
- 0 1
- 4 index length % [str...] [off...] x y 0 1 (#strings)
- -1 add % [str...] [off...] x y 0 1 (#strings-1)
- { % [str...] [off...] x y strnum
- 2 index % [str...] [off...] x y strnum x
- 4 index % [str...] [off...] x y strnum x [off...]
- 2 index % [str...] [off...] x y strnum [off...] strnum
- get % [str...] [off...] x y strnum x off
- 3 index % [str...] [off...] x y strnum x off y
- add % [str...] [off...] x y strnum x Y
- moveto % [str...] [off...] x y strnum
- 4 index % [str...] [off...] x y strnum [str...]
- exch get % [str...] [off...] x y str
- Mfixdash
- {
- Mfixdashp
- }
- if
- show % [str...] [off...] x y
- } for % [str...] [off...] x y
-} bind def
-
-% Fix if all dashes and length > 1
-/Mfixdashp { % str
- dup
- length % str n
- 1
- gt % str bool
- 1 index % str bool str
- true exch % str bool true str
- {
- 45
- eq
- and
- } forall
- and % str bool
- {
- gsave
- (--)
- stringwidth pop
- (-)
- stringwidth pop
- sub
- 2 div % str lenfix
- 0 rmoveto % str
- dup % str str
- length
- 1 sub % str len-1
- {
- (-)
- show
- }
- repeat
- grestore
- }
- if % x y str
-} bind def
-
-
-% This is for non-fixedwidth fonts
-% It shows each character individually advancing the x position by
-% the maximum width of any character in that position
-%
-/Mshoway {
- 3 index % [str...] [off...] x y [str...]
- Mwidthcal % [str...] [off...] x y [w1 w2 w3...]
- 5 1 roll % [w1 w2 w3..] [str...] [off...] x y
- 0 1 % [w1 w2 w3..] [str...] [off...] x y 0 1
- 4 index length % [w1 w2 w3..] [str...] [off...] x y 0 1 (#strings)
- -1 add % [w1 w2 w3..] [str...] [off...] x y 0 1 (#strings-1)
- { % [w1 w2 w3..] [str...] [off...] x y strnum
- 2 index % [w1 w2 w3..] [str...] [off...] x y strnum x
- 4 index % [w1 w2 w3..] [str...] [off...] x y strnum x [off...]
- 2 index % [w1 w2 w3..] [str...] [off...] x y
- % strnum [off...] strnum
- get % [w1 w2 w3..] [str...] [off...] x y strnum x off
- 3 index % [w1 w2 w3..] [str...] [off...] x y strnum x off y
- add % [w1 w2 w3..] [str...] [off...] x y strnum x Y
- moveto % [w1 w2 w3..] [str...] [off...] x y strnum
- 4 index % [w1 w2 w3..] [str...] [off...] x y strnum [str...]
- exch get % [w1 w2 w3..] [str...] [off...] x y str
- [
- 6 index % [w1 w2 w3..] [str...] [off...] x y str [ [w1 w2..]
- aload
- length % [w1 w2 w3..] [str...] [off...] x y str [ w1 w2.. len
- 2 add
- -1 roll % [w1 w2 w3..] [str...] [off...] x y [ w1 w2.. str
- {
- pop % [w1 w2 w3..] [str...] [off...] x y [ w1 c2.. str am
- Strform % [w1 w2 w3..] [str...] [off...] x y [ w1 w2.. str 1str
- stringwidth
- pop
- neg
- exch % [w1 w2 w3..] [str...] [off...] x y [ w1 w2..
- % str -cm cn
- add
- 0 rmoveto % [w1 w2 w3..] [str...] [off...] x y [ w1 w2.. str
- }
- exch
- kshow % [w1 w2 w3..] [str...] [off...] x y [
- cleartomark
- } for % [w1 w2 w3..] [str...] [off...] x y
- pop
-} bind def
-
-%
-% This is a central mechanism for dealing with non-fixedwidth fonts.
-% Given an array of strings Mwidthcal returns an array of the lengths
-% of the longest character in the corresponding positions in the arrays.
-% Thus the 4th element of the result is the maximum character width of
-% each strin at the 4th position.
-%
-/Mwidthcal { % [(abc) (abc) ..] Mwidthcal [w1 w2 w3 ...]
- [
- exch % [ [(abc) (abd) ..]
- {
- Mwidthcal1
- }
- forall
- ] % [[w w w] [w w w] ..]
- [ % call this [chr ..] now
- exch % [ [chr ..]
- dup % [ [chr ..] [chr ..]
- Maxlen % [ [chr ..] maxlen
- -1 add
- 0 1
- 3 -1 roll % [chr ..] [ [chr ..] 0 1 maxlen-1
- {
- [ % [chr ..] [ [chr ..] n [
- exch % [chr ..] [ [chr ..] [ n
- 2 index % [chr ..] [ [chr ..] [ n [chr ..]
- {
- 1 index
- Mget % [chr ..] [ [chr ..] [ n [w1 w2 ..] n
- exch % [chr ..] [ [chr ..] [ wn n
- }
- forall
- pop % [chr ..] [ [chr ..] [ w1 w2 w3
- Maxget % [chr ..] [ [chr ..] wmax
- exch % [chr ..] [ wmax [chr ..]
- }
- for
- pop
- ] % [ wmax1 wmax2 wmax3 ..]
- Mreva
-} bind def
-
-%Reverse an array
-/Mreva { %[a b c ..] Mreva [.. c b a]
- [
- exch %[ [a b c ..]
- aload
- length %[a b c .. len
- -1 1 %[a b c .. len -1 1
- {1 roll}
- for
- ] %[.. c b a]
-} bind def
-
-% take an array and an index and return that element if index exits
-% if array not long enougth return zero
-/Mget { %[a b c d..] index
- 1 index
- length %[a b c d..] index len
- -1 add
- 1 index %[a b c d..] index (len-1) index
- ge
- {
- get %if long enough return entry
- }
- {
- pop pop
- 0 %if not long enough return zero
- }
- ifelse
-} bind def
-
-%Take an array of arrays and return the longest length
-/Maxlen { %[ arr1 arr2 arr3 ] Maxlen maxlen
- [ %[ arr1 arr2 arr3 ] [
- exch %[ [ arr1 arr2 arr3 ]
- {
- length
- }
- forall %[ len1 len2 len3..
- Maxget
-} bind def
-
-%Take a series of numbers starting with [ and return the largest member
-/Maxget { %[n1 n2 n3 .. Maxget nmax
- counttomark %[n1 n2 n3 .. len
- -1 add %[n1 n2 n3 .. len-1
- 1 1 %[n1 n2 n3 .. len 1 1
- 3 -1 roll %[n1 n2 n3 .. 1 1 (len-1)
- {
- pop
- Mmax
- }
- for %[ nmax
- exch % nmax [
- pop % nmax
-} bind def
-
-%Take a string and return an array of the lengths of the characters
-/Mwidthcal1 { % str Mwidthcal1 [w1 w2 w3 ..]
- [
- exch %[ (str)
- {
- Strform
- stringwidth
- pop
- }
- forall %[w1 w2 w3 ..
- ] %[w1 w2 w3 ..]
-} bind def
-
-%put a string onto the stack
-/Strform { % num
- /tem (x) def
- tem 0
- 3 -1 roll
- put
- tem
-} bind def
-
-%/Mwidmax { % [str...]
-% dup % [str...] [str...]
-% [ % [str...] [str...] [
-% exch % [str...] [ [str...]
-% {
-% stringwidth
-% pop
-% }
-% forall % [str...] [ w1 w2 ... wm wn
-% 0
-% counttomark % [str...] [ w1 w2 ... wm wn 0 n
-% -2 add % [str...] [ w1 w2 ... wm wn 0 (n-1)
-% 1 exch % [str...] [ w1 w2 ... wm wn 0 1 (n-1)
-% 1 exch % [str...] [ w1 w2 ... wm wn 0 1 1 (n-1)
-% {
-% 3 index % [str...] [ w1 w2 ... wm wn num pos wm
-% 3 index % [str...] [ w1 w2 ... wm wn num pos wm wn
-% ge
-% { % wm >= wn
-% exch pop
-% exch pop % [str...] [ w1 w2 ... wm num
-% }
-% { % wm < wn
-% pop
-% 3 -1 roll
-% pop % [str...] [ w1 w2 ... wn pos < pos -> num >
-% }
-% ifelse % [str...] [ w1 w2 ... wmax nmax
-% }
-% for % [str...] [ wmax nmax
-% 4 1 roll
-% pop pop % nmax [str...]
-% length % nmax len
-% -1 add % nmax (len - 1)
-% exch
-% sub % max_pos
-%} bind def
-
-
-% Mshowa1 is an internal routine which, given a bounding box coordinate
-% (sz), and the bounding box limits if we started drawing at 0 (tlz and thz),
-% computes the offset at which to start drawing
-% (relz = (sz-1)tlz/2 - (sz+1)thz/2 = sz(tlz-thz)/2-(tlz+thz)/2).
-/Mshowa1 { % sz tlz thz Mshowa1 relz
- 2 copy % sz tlz thz tlz thz
- add % sz tlz thz tlz+thz
- 4 1 roll % tlz+thz sz tlz thz
- sub % tlz+thz sz tlz-thz
- mul % tlz+thz sz(tlz-thz)
- sub % tlz+thz-sz(tlz-thz)
- -2 div % sz(tlz-thz)/2-(tlz+thz)/2
-} bind def
-
-
-% Given the x and y scaling to user coordinates and an array of points to
-% fit (xbias xscale ybias yscale [pnts]), set up the scaling. The array
-% must contain atleast two points, and the last two must be of the form
-% [gxlow gylow 0 0] and [gxhigh gyhigh 0 0].
-% Note, MathScale assumes that we are already scaled so that the active area
-% is the rectangle [0,Mwidth-Mlmarg-Mrmarg]x[0,Mheight-Mbmarg-Mtmarg].
-% also keep bias and scale info for PostScript commands
-/MathScale { % <user> [pnts] MathScale -
- Mwidth % <user> [pnts] width
- Mheight % <user> [pnts] width height
- Mlp % <user> Ax Ay Bx By
- translate % <user> Ax Ay
- scale % <user>
- /yscale exch def
- /ybias exch def
- /xscale exch def
- /xbias exch def
- /Momatrix % this transforms from
- xscale yscale matrix scale % Original to Display coordinates
- xbias ybias matrix translate
- matrix concatmatrix def
- /Mgmatrix % /Mgmatrix
- matrix currentmatrix % /Mgmatrix graphics_matrix
- def % -
-} bind def
-
-
-% Given a non-empty array of points to fit ([p]) and a maximum width (sx)
-% and height (sy) find the largest scale (Ax and Ay) and offsets (Bx and By)
-% such that the transformation
-% [gx gy tx ty] -> (Ax gx + tx + bx, Ay gy + ty + By)
-% maps the points into the rectangle [0,sx]x[0,sy]
-/Mlp { % [p] sx sy Mlp Ax Ay Bx By
- 3 copy % [p] sx sy [p] sx sy
- Mlpfirst % [p] sx sy Ax Ay
- { % [p] sx sy Ax Ay
- Mnodistort % [p] sx sy Ax Ay nodistort?
- { % [p] sx sy Ax Ay
- Mmin % [p] sx sy A
- dup % [p] sx sy Ax Ay
- } if % [p] sx sy Ax Ay
- 4 index % [p] sx sy Ax Ay [p]
- 2 index % [p] sx sy Ax Ay [p] Ax
- 2 index % [p] sx sy Ax Ay [p] Ax Ay
- Mlprun % [p] sx sy Ax Ay ctx wtx cgx wgx cty wty cgy wgy
- 11 index % [p] sx sy Ax Ay ctx wtx cgx wgx cty wty cgy wgy sx
- 11 -1 roll % [p] sx sy Ay ctx wtx cgx wgx cty wty cgy wgy sx Ax
- 10 -4 roll % [p] sx sy Ay cty wty cgy wgy sx Ax ctx wtx cgx wgx
- Mlp1 % [p] sx sy Ay cty wty cgy wgy Ax Bx xok?
- 8 index % [p] sx sy Ay cty wty cgy wgy Ax Bx xok? sy
- 9 -5 roll % [p] sx sy Ax Bx xok? sy Ay cty wty cgy wgy
- Mlp1 % [p] sx sy Ax Bx xok? Ay By yok?
- 4 -1 roll % [p] sx sy Ax Bx Ay By yok? xok?
- and % [p] sx sy Ax Bx Ay By ok?
- { exit } if % [p] sx sy Ax Bx Ay By
- 3 -1 roll % [p] sx sy Ax Ay Bx By
- pop pop % [p] sx sy Ax Ay
- } loop % [p] sx sy Ax Bx Ay By
- exch % [p] sx sy Ax Bx By Ay
- 3 1 roll % [p] sx sy Ax Ay Bx By
- 7 -3 roll % Ax Ay Bx By [p] sx sy
- pop pop pop % Ax Ay Bx By
-} bind def
-
-
-% Given an array of points in the [gx gy tx ty] form, with the last two
-% being [gxlow gylow 0 0] and [gxhigh gyhigh 0 0], and the width and height
-% (sx and sy) in which to fit them, compute the maximum scaling (Ax and Ay).
-/Mlpfirst { % [pnts] sx sy Mlpfirst Ax Ay
- 3 -1 roll % sx sy [pnts]
- dup length % sx sy [pnts] #pnts
- 2 copy % sx sy [pnts] #pnts [pnts] #pnts
- -2 add % sx sy [pnts] #pnts [pnts] #pnts-2
- get % sx sy [pnts] #pnts [gxl gyl 0 0]
- aload % sx sy [pnts] #pnts gxl gyl 0 0 [gxl gyl 0 0]
- pop pop pop % sx sy [pnts] #pnts gxl gyl
- 4 -2 roll % sx sy gxl gyl [pnts] #pnts
- -1 add % sx sy gxl gyl [pnts] #pnts-1
- get % sx sy gxl gyl [gxh gyh 0 0]
- aload % sx sy gxl gyl gxh gyh 0 0 [gxh gyh 0 0]
- pop pop pop % sx sy gxl gyl gxh gyh
- 6 -1 roll % sy gxl gyl gxh gyh sx
- 3 -1 roll % sy gxl gyl gyh sx gxh
- 5 -1 roll % sy gyl gyh sx gxh gxl
- sub % sy gyl gyh sx delx
- div % sy gyl gyh Ax
- 4 1 roll % Ax sy gyl gyh
- exch sub % Ax sy dely
- div % Ax Ay
-} bind def
-
-
-% Given a non-empty array of points to fit ([pnts]) and scale factors
-% for graphics->text (Ax and Ay), compute the limiting points.
-/Mlprun { % [pnts] Ax Ay Mlprun ctx wtx cgx wgx cty wty cgy wgy
- 2 copy % [pnts] Ax Ay Ax Ay
- 4 index % [pnts] Ax Ay Ax Ay [pnts]
- 0 get % [pnts] Ax Ay Ax Ay [first]
- dup % [pnts] Ax Ay Ax Ay [first] [first]
- 4 1 roll % [pnts] Ax Ay [first] Ax Ay [first]
- Mlprun1 % [pnts] Ax Ay [first] fx fy
- 3 copy % [pnts] Ax Ay [low] lx ly [high] hx hy
- 8 -2 roll % [pnts] [low] lx ly [high] hx hy Ax Ay
- 9 -1 roll % [low] lx ly [high] hx hy Ax Ay [pnts]
- { % [low] lx ly [high] hx hy Ax Ay [pnt]
- 3 copy % [low] lx ly [high] hx hy Ax Ay [pnt] Ax Ay [pnt]
- Mlprun1 % [low] lx ly [high] hx hy Ax Ay [pnt] px py
- 3 copy % [low] lx ly [high] hx hy Ax Ay [pnt] px py [pnt] px py
- 11 -3 roll % [low] lx ly Ax Ay [pnt] px py [pnt] px py [high] hx hy
- /gt Mlpminmax % [low] lx ly Ax Ay [pnt] px py [high] hx hy
- 8 3 roll % [low] lx ly [high] hx hy Ax Ay [pnt] px py
- 11 -3 roll % [high] hx hy Ax Ay [pnt] px py [low] lx ly
- /lt Mlpminmax % [high] hx hy Ax Ay [low] lx ly
- 8 3 roll % [low] lx ly [high] hx hy Ax Ay
- } forall % [low] lx ly [high] hx hy Ax Ay
- pop pop pop pop % [low] lx ly [high]
- 3 1 roll % [low] [high] lx ly
- pop pop % [low] [high]
- aload pop % [low] hgx hgy htx hty
- 5 -1 roll % hgx hgy htx hty [low]
- aload pop % hgx hgy htx hty lgx lgy ltx lty
- exch % hgx hgy htx hty lgx lgy lty ltx
- 6 -1 roll % hgx hgy hty lgx lgy lty ltx htx
- Mlprun2 % hgx hgy hty lgx lgy lty ctx wtx
- 8 2 roll % ctx wtx hgx hgy hty lgx lgy lty
- 4 -1 roll % ctx wtx hgx hgy lgx lgy lty hty
- Mlprun2 % ctx wtx hgx hgy lgx lgy cty wty
- 6 2 roll % ctx wtx cty wty hgx hgy lgx lgy
- 3 -1 roll % ctx wtx cty wty hgx lgx lgy hgy
- Mlprun2 % ctx wtx cty wty hgx lgx cgy wgy
- 4 2 roll % ctx wtx cty wty cgy wgy hgx lgx
- exch % ctx wtx cty wty cgy wgy lgx hgx
- Mlprun2 % ctx wtx cty wty cgy wgy cgx wgx
- 6 2 roll % ctx wtx cgx wgx cty wty cgy wgy
-} bind def
-
-
-% Given scale factors for graphics->text (Ax and Ay) and a point in the
-% [gx gy tx ty] form, return the text x and y coordinate that results.
-/Mlprun1 { % Ax Ay [gx gy tx ty] Mlprun1 rx ry
- aload pop % Ax Ay gx gy tx ty
- exch % Ax Ay gx gy ty tx
- 6 -1 roll % Ay gx gy ty tx Ax
- 5 -1 roll % Ay gy ty tx Ax gx
- mul add % Ay gy ty rx
- 4 -2 roll % ty rx Ay gy
- mul % ty rx Ay*gy
- 3 -1 roll % rx Ay*gy ty
- add % rx ry
-} bind def
-
-
-% Given a low and high coordinate, compute the center and width.
-/Mlprun2 { % low high Mlprun2 center width
- 2 copy % low high low high
- add 2 div % low high (low+high)/2
- 3 1 roll % (low+high)/2 low high
- exch sub % (low+high)/2 high-low
-} bind def
-
-
-% Given two points stored as [gx gy tx ty] followed by the scaled
-% result (rx, ry), and a comparison function (lt or gt) leave the
-% point which is the minimum (or maximum) in each dimension.
-/Mlpminmax { % [pnt1] r1x r1y [pnt2] r2x r2y cmp Mlpminmax [pnt] x y
- cvx % [pnt1] r1x r1y [pnt2] r2x r2y cmp
- 2 index % [pnt1] r1x r1y [pnt2] r2x r2y cmp r2x
- 6 index % [pnt1] r1x r1y [pnt2] r2x r2y cmp r2x r1x
- 2 index % [pnt1] r1x r1y [pnt2] r2x r2y cmp r2x r1x cmp
- exec % [pnt1] r1x r1y [pnt2] r2x r2y cmp take2?
- { % [pnt1] r1x r1y [pnt2] r2x r2y cmp
- 7 -3 roll % [pnt2] r2x r2y cmp [pnt1] r1x r1y
- 4 -1 roll % [pnt2] r2x r2y [pnt1] r1x r1y cmp
- } if % [pnt1] r1x r1y [pnt2] r2x r2y cmp
- 1 index % [pnt1] r1x r1y [pnt2] r2x r2y cmp r2y
- 5 index % [pnt1] r1x r1y [pnt2] r2x r2y cmp r2y r1y
- 3 -1 roll % [pnt1] r1x r1y [pnt2] r2x r2y r2y r1y cmp
- exec % [pnt1] r1x r1y [pnt2] r2x r2y take2y?
- { % [gx ? tx ?] rx ? [? gy ? ty] ? ry
- 4 1 roll % [gx ? tx ?] rx ry ? [? gy ? ty] ?
- pop % [gx ? tx ?] rx ry ? [? gy ? ty]
- 5 -1 roll % rx ry ? [? gy ? ty] [gx ? tx ?]
- aload % rx ry ? [? gy ? ty] gx ? tx ? [gx ? tx ?]
- pop pop % rx ry ? [? gy ? ty] gx ? tx
- 4 -1 roll % rx ry ? gx ? tx [? gy ? ty]
- aload pop % rx ry ? gx ? tx ? gy ? ty
- [ % rx ry ? gx ? tx ? gy ? ty mark
- 8 -2 roll % rx ry ? tx ? gy ? ty mark gx ?
- pop % rx ry ? tx ? gy ? ty mark gx
- 5 -2 roll % rx ry ? tx ? ty mark gx gy ?
- pop % rx ry ? tx ? ty mark gx gy
- 6 -2 roll % rx ry ? ty mark gx gy tx ?
- pop % rx ry ? ty mark gx gy tx
- 5 -1 roll % rx ry ? mark gx gy tx ty
- ] % rx ry ? [pnt]
- 4 1 roll % [pnt] rx ry ?
- pop % [pnt] rx ry
- }
- { % [gx gy tx ty] rx ry ? ? ?
- pop pop pop % [pnt] rx ry
- } ifelse % [pnt] rx ry
-} bind def
-
-
-% Given a size (s), graphics->text scale (A), text center (ct), text
-% width (wt), graphics center (cg) and graphics width (wg), compute
-% a new graphics->text scale (Anew) and offset (B) and whether or not
-% we are done.
-% Note, the mysterious .99999 is magic juju which is supposed to ward
-% off the possibility that floating point errors would cause this
-% routine to return the old A and yet claim not-done.
-/Mlp1 { % s A ct wt cg wg Mlp1 Anew B done?
- 5 index % s A ct wt cg wg s
- 3 index sub % s A ct wt cg wg s-wt
- 5 index % s A ct wg cg wg s-wt A
- 2 index mul % s A ct wg cg wg s-wt A*wg
- 1 index % s A ct wg cg wg s-wt A*wg s-wt
- le % s A ct wg cg wg s-wt fits?
- 1 index % s A ct wg cg wg s-wt fits? s-wt
- 0 le % s A ct wg cg wg s-wt fits? impossible?
- or % s A ct wg cg wg s-wt done?
- dup % s A ct wg cg wg s-wt done? done?
- not % s A ct wg cg wg s-wt done? notdone?
- { % s A ct wg cg wg s-wt done? (not done case)
- 1 index % s A ct wg cg wg s-wt done? s-wt
- 3 index div % s A ct wg cg wg s-wt done? (s-wt)/wg
- .99999 mul % s A ct wg cg wg s-wt done? Anew
- 8 -1 roll % s ct wg cg wg s-wt done? Anew A
- pop % s ct wg cg wg s-wt done? Anew
- 7 1 roll % s Anew ct wg cg wg s-wt done?
- }
- if % s Anew ct wg cg wg s-wt done?
- 8 -1 roll % Anew ct wg cg wg s-wt done? s
- 2 div % Anew ct wg cg wg s-wt done? s/2
- 7 -2 roll % Anew cg wg s-wt done? s/2 ct wg
- pop sub % Anew cg wg s-wt done? s/2-ct
- 5 index % Anew cg wg s-wt done? s/2-ct Anew
- 6 -3 roll % Anew done? s/2-ct Anew cg wg s-wt
- pop pop % Anew done? s/2-ct Anew cg
- mul sub % Anew done? s/2-ct-Anew*cg
- exch % Anew B done?
-} bind def
-
-
-% The following are the workings of the tick, axes and plot labels.
-% NOTE a possible source of confusion is that for xticks ie tickmarks on
-% the x axis we keep y information and vice versa for yticks
-%
-% When Minner is found then
-%
-% assumes that box starts at zero on the left lower side
-%
-% 0) if outflag = 1 then intop = 0, inrht = 0 outflag = 0
-% 1) Save intop largest top of box
-% 2) Save inrht largest rht of box
-% 3) set inflag notifies that inner marks are present
-%
-% When Mouter is found then
-%
-% if inflag is set then
-% 1) get vecx and vecy off the stack (points in direcn to move)
-% 2) vecx < 1 xadrht = inrht*abs(vecx)
-% 3) vecx > 1 xadlft = inrht*abs(vecx)
-% 4) vecy < 1 yadtop = intop*abs(vecy)
-% 5) vecy > 1 yadbot = intop*abs(vecy)
-% 6) set outflag = 1
-% 7) clear inflag, inrht, intop
-% guaranteed to be zero if no inner is present??
-%
-%
-% These all have effects in Mrotsboxa and Mrotshowa
-% check inflag and if set
-%
-% 1) increase top of bbox by yadtop
-% 2) decrease bot of bbox by yadbot
-% 3) increase rht of bbox by xadrht
-% 4) increase lft of bbox by xadlft
-% 5) clear outflag, yadtop, yadbot,
-% xadrht, xadlft
-%
-%/
-
-/intop 0 def
-/inrht 0 def
-/inflag 0 def
-/outflag 0 def
-/xadrht 0 def
-/xadlft 0 def
-/yadtop 0 def
-/yadbot 0 def
-
-% This saves the top right corner of the bounding box as a side effect
-% This is to allow the adjustment of text placed with Mouter so that
-% it misses the Minner text. It is assumed that the ang is 0
-% in the same way it is assumed that the text of Mouter is 0 or 90
-%
-/Minner { % [(str)] gx gy sx sy ang Minner [(str)] gx gy sx sy ang
- outflag % do a bit of tidying up if necessary
- 1
- eq
- {
- /outflag 0 def
- /intop 0 def
- /inrht 0 def
- } if
- 5 index % [(str)] gx gy sx sy ang [(str)]
- gsave
- Mtmatrix setmatrix
- Mvboxa pop % [(str)] gx gy sx sy ang xlow ylow xhigh yhigh
- grestore
- 3 -1 roll % [(str)] gx gy sx sy ang xlow xhigh yhigh ylow
- pop % [(str)] gx gy sx sy ang xlow xhigh yhigh
- dup % [(str)] gx gy sx sy ang xlow xhigh yhigh yhigh
- intop % is intop smaller than yhigh ?
- gt
- {
- /intop % update if it is
- exch def
- }
- { pop } % pop if it is not
- ifelse % [(str)] gx gy sx sy ang xlow xhigh
- dup % [(str)] gx gy sx sy ang xlow xhigh xhigh
- inrht % is inrht smaller than xhigh
- gt
- {
- /inrht % update if it is
- exch def
- }
- { pop } % pop if it is no
- ifelse % [(str)] gx gy sx sy ang xlow
- pop % [(str)] gx gy sx sy ang
- /inflag % set the inflag
- 1 def
-} bind def
-
-% This takes two number off the stack and uses them as a vector in graphics
-% coordinates which points in the direction in which the Mouter text is to move
-% it calculates the bouding box adjustments yadtop yadbot xadrht and xadlft
-% these are in Mboxout to adjust the bounding box to compensate.
-/Mouter { % vecx vecy Mouter ..
- /xadrht 0 def % reset everything
- /xadlft 0 def
- /yadtop 0 def
- /yadbot 0 def
- inflag % was there an inflag ?
- 1 eq
- {
- dup % vecx vecy vecy
- 0 lt
- {
- dup % vecx vecy vecy
- intop % vecx vecy vecy intop
- mul
- neg % vecx vecy -vecy*intop
- /yadtop % make into yadtop
- exch def % vecx vecy
- } if
- dup % vecx vecy vecy
- 0 gt
- {
- dup % vecx vecy vecy
- intop % vecx vecy vecy intop
- mul % vecx vecy vecy*intop
- /yadbot % make into yadbot
- exch def % vecx vecy
- }
- if
- pop % vecx
- dup % vecx vecx
- 0 lt
- {
- dup % vecx vecx
- inrht % vecx vecx inrht
- mul
- neg % vecx -vecx*inrht
- /xadrht % make into xadrht
- exch def % vecx
- } if
- dup % vecx vecx
- 0 gt
- {
- dup % vecx vecx
- inrht % vecx vecx inrht
- mul % vecx vecx*inrht
- /xadlft % make into xadlft
- exch def
- } if
- pop %
- /outflag 1 def % set outflag
- }
- { pop pop} %
- ifelse
- /inflag 0 def
- /inrht 0 def
- /intop 0 def
-} bind def
-
-%
-% This adjusts the bounding box to account for adjacent text
-% This allows the two text strings to avoid each other
-% current matrix is the text matrix
-/Mboxout { % tlx tly thx thy Mboxout new_tlx new_tly new_thx new_thy
- outflag % do nothing unless Minner was found
- 1
- eq
- {
- 4 -1
- roll % tly thx thy tlx
- xadlft
- leadjust
- add % tly thx thy tlx xadlft+lead
- sub % tly thx thy tlx_new
- 4 1 roll % tlx_new tly thx thy
- 3 -1
- roll % tlx_new thx thy tly
- yadbot % tlx_new thx thy tly yadbot
- leadjust % tlx_new thx thy tly yadbot lead
- add % tlx_new thx thy tly yadbot+lead
- sub % tlx_new thx thy tly_new
- 3 1
- roll % tlx_new tly_new thx thy
- exch % tlx_new tly_new thy thx
- xadrht % tlx_new tly_new thy thx xadrht
- leadjust % tlx_new tly_new thy thx xadrht lead
- add % tlx_new tly_new thy thx xadrht+lead
- add % tlx_new tly_new thy thx_new
- exch % tlx_new tly_new thx_new thy
- yadtop % tlx_new tly_new thx_new thy yadtop
- leadjust % tlx_new tly_new thx_new thy yadtop lead
- add % tlx_new tly_new thx_new thy yadtop+lead
- add % tlx_new tly_new thx_new thy_new
- /outflag 0 def % reset everything to 0
- /xadlft 0 def
- /yadbot 0 def
- /xadrht 0 def
- /yadtop 0 def
- } if
-} bind def
-
-
-/leadjust {
- (m) stringwidth pop
- .5 mul
-} bind def
-
-
-% The offsets sx and sy refer to the graphics coordinate system
-% thus they must be altered if a rotation has taken place.
-% We must also change the bounding box computations for Minner
-%
-/Mrotcheck { % sx sy ang Mrotcheck new_sx new_sy ang
- dup
- 90
- eq
- {
-%
-% Mouter only applies to strings which are either at 0 or 90
-% sort out the box adjust factors
-%
-% xadrht -> yadbot
-% xadlft -> yadtop
-% yadtop -> xadrht
-% yadbot -> xadlft
- yadbot
- /yadbot
- xadrht
- def
- /xadrht
- yadtop
- def
- /yadtop
- xadlft
- def
- /xadlft
- exch
- def
- }
- if
- dup % sx sy ang ang
- cos % sx sy ang Cos
- 1 index % sx sy ang Cos ang
- sin % sx sy ang Cos Sin
- Checkaux % new_sx sx sy ang
- dup % new_sx sx sy ang ang
- cos % new_sx sx sy ang Cos
- 1 index % new_sx sx sy ang Cos ang
- sin neg % new_sx sx sy ang Cos -Sin
- exch % new_sx sx sy ang -Sin Cos
- Checkaux % new_sx new_sy sx sy ang
- 3 1 roll % new_sx new_sy ang sx sy
- pop pop % new_sx new_sy ang
-} bind def
-
-%
-% Checkaux is an auxilliary function for Mrotcheck it multiplies a
-% row vector by a column vector
-%
-/Checkaux { % r1 r2 dumy c1 c2 Checkaux r1 r2 dumy r1*c1+r2*c2
- 4 index % r1 r2 dumy c1 c2 r1
- exch % r1 r2 dumy c1 r1 c2
- 4 index % r1 r2 dumy c1 r1 c2 r2
- mul % r1 r2 dumy c1 r1 c2*r2
- 3 1 roll % r1 r2 dumy c2*r2 c1 r1
- mul add % r1 r2 dumy c2*r2+c1*r1
- 4 1 roll % c2*r2+c1*r1 r1 r2 dumy
-} bind def
-
-%
-% Mboxrot converts the bounding box back from the rotated coordinate
-% system to the Mgmatrix system to compensate for a rotation
-% It has the opposite functionality of Mrotcheck
-% This is not the most neatest or most efficient implementation but it works
-%
-/Mboxrot { % tlx thx tly thy Mboxrot new_tlx new_thx new_tly new_thy
- Mrot
- 90 eq
- {
-% old tlx thx tly thy
-% new -thy -tly tlx thx
-%
- brotaux % tlx thx -thy -tly
- 4 2
- roll % -thy -tly tlx thx
- }
- if
- Mrot
- 180 eq
- {
-% old tlx thx tly thy
-% new -thx -tlx -thx -tly
-%
- 4 2
- roll % tly thy tlx thx
- brotaux % tly thy -thx -tlx
- 4 2
- roll % -thx -tlx tlx thy
- brotaux % -thx -tlx -thy -tly
- }
- if
- Mrot
- 270 eq
- {
-% old tlx thx tly thy
-% new tly thy -thx -tlx
-%
- 4 2
- roll % tly thy tlx thx
- brotaux % tly thy -thx -tlx
- }
- if
-} bind def
-
-%
-% auxilliary function negate and reverse
-/brotaux { % x y boxrotaux -y -x
- neg
- exch
- neg
-} bind def
-
-%
-% Mabsproc takes a measurement in the default user units and converts
-% it to the present units. This allows absolute thickness and dashing
-% to work. It works by using a {0, x} vector and using the RMS of the result.
-/Mabsproc { % abs thing Mabsproc
- 0
- matrix defaultmatrix
- dtransform idtransform
- dup mul exch
- dup mul
- add sqrt
-} bind def
-
-%
-% Mabswid allows the linewidth to be specified in absolute coordinates
-% It does this by recording the graphics transformation matrix at the
-% begining of the plot.
-% This will break if the scaling in the x and y directions is
-% different. This is the case if Mnodistort is false
-%
-/Mabswid { %abswid Mabswid
- Mabsproc
- setlinewidth
-} bind def
-
-% Mabsdash allows the dashing pattern to be specified in absolute coordinates
-% It does this by recording the graphics transformation matrix at the
-% begining of the plot.
-% This will break if the scaling in the x and y directions is
-% different. This is the case if Mnodistort is false
-%
-/Mabsdash { %[d1 d2 d3 .. ] off Mabsdash
- exch % off [d1 d2 d3 ..]
- [ % off [d1 d2 d3 ..]
- exch % off [ [d1 d2 d3 ..]
- {
- Mabsproc
- }
- forall
- ] % off [ fact*d1 fact*d2 fact*d3 .. ]
- exch % [ nd1 nd2 nd3 .. ] off
- setdash
-} bind def
-
-%MBeginOrig start coordinates in user coordinates
-/MBeginOrig { Momatrix concat} bind def
-
-%MEndOrig start coordinates in user coordinates
-/MEndOrig { Mgmatrix setmatrix} bind def
-
-/sampledsound where
-{ pop}
-{ /sampledsound { % str rate nsamp bs proc bool nchan
- exch
- pop % str rate nsamp bs proc nchan
- exch % str rate nsamp bs nchan proc
- 5 1 roll % str proc rate nsamp bs nchan
- mul
- 4 idiv % str proc rate nsamp bs*nchan/4
- mul % str proc rate nsamp*bs*nchan/4
- 2 idiv % str proc rate nbytes
- exch pop % str proc nbytes
- exch % str nbytes proc
- /Mtempproc exch def
- { Mtempproc pop}
- repeat
- } bind def
-} ifelse
-
-%
-% now simple conversion of cmykcolor to rgbcolor
-% subtract k and then take complements
-/setcmykcolor where
-{ pop}
-{ /setcmykcolor { % c m y k
- 4 1
- roll % k c m y
- [ % k c m y [
- 4 1
- roll % k [ c m y
- ] % k [ c m y ]
- {
- 1 index % k elem k
- sub % k elem-k
- 1
- sub neg % k 1-(elem-k)
- dup
- 0
- lt
- {
- pop
- 0
- }
- if
- dup
- 1
- gt
- {
- pop
- 1
- }
- if
- exch % 1-(elem-k) k
- } forall % r g b k
- pop
- setrgbcolor
-} bind def
-} ifelse
-
-/Mcharproc % max
-{
- currentfile
- (x)
- readhexstring
- pop % max val
- 0 get
- exch % val max
- div % nval
-} bind def
-
-/Mshadeproc % max ncols
-{
- dup % max ncols ncols
- 3 1
- roll % ncols max ncols
- { % ncols max
- dup % ncols max max
- Mcharproc % ncols max val
- 3 1
- roll % v1.. ncols max
- } repeat
- 1 eq
- {
- setgray
- }
- {
- 3 eq
- {
- setrgbcolor
- }
- {
- setcmykcolor
- } ifelse
- } ifelse
-} bind def
-
-/Mrectproc % x0 x1 y0 y1
-{
- 3 index % x0 x1 y0 y1 x0
- 2 index % x0 x1 y0 y1 x0 y0
- moveto % x0 x1 y0 y1
- 2 index % x0 x1 y0 y1 x1
- 3 -1
- roll % x0 x1 y1 x1 y0
- lineto % x0 x1 y1
- dup % x0 x1 y1 y1
- 3 1
- roll % x0 y1 x1 y1
- lineto % x0 y1
- lineto
- fill
-} bind def
-
-/Mcolorimage % nx ny depth matrix proc bool ncols
-{
- 7 1
- roll % ncols nx ny depth matrix proc bool
- pop
- pop
- matrix
- invertmatrix
- concat % ncols nx ny depth
- 2 exch exp % ncols nx ny 2^depth
- 1 sub % ncols nx ny max
- 3 1 roll % ncols max nx ny
- 1 1 % ncols max nx ny 1 1
- 2 index % ncols max nx ny 1 1 ny
- { % ncols max nx ny iy
- 1 1 % ncols max nx ny iy 1 1
- 4 index % ncols max nx ny iy 1 1 nx
- { % ncols max nx ny iy ix
- dup % ncols max nx ny iy ix ix
- 1 sub % ncols max nx ny iy ix x0
- exch % ncols max nx ny iy x0 x1
- 2 index % ncols max nx ny iy x0 x1 iy
- dup % ncols max nx ny iy x0 x1 iy iy
- 1 sub % ncols max nx ny iy x0 x1 iy y0
- exch % ncols max nx ny iy x0 x1 y0 y1
- 7 index % ncols max nx ny iy x0 x1 y0 y1 max
- 9 index % ncols max nx ny iy x0 x1 y0 y1 max ncols
- Mshadeproc % ncols max nx ny iy x0 x1 y0 y1
- Mrectproc % max nx ny iy
- } for % x loop
- pop % max nx ny
- } for % y loop
- pop pop pop pop
-} bind def
-
-/Mimage % nx ny depth matrix proc
-{
- pop
- matrix
- invertmatrix
- concat % nx ny depth
- 2 exch exp % nx ny 2^depth
- 1 sub % nx ny max
- 3 1 roll % max nx ny
- 1 1 % max nx ny 1 1
- 2 index % max nx ny 1 1 ny
- { % max nx ny iy
- 1 1 % max nx ny iy 1 1
- 4 index % max nx ny iy 1 1 nx
- { % max nx ny iy ix
- dup % max nx ny iy ix ix
- 1 sub % max nx ny iy ix x0
- exch % max nx ny iy x0 x1
- 2 index % max nx ny iy x0 x1 iy
- dup % max nx ny iy x0 x1 iy iy
- 1 sub % max nx ny iy x0 x1 iy y0
- exch % max nx ny iy x0 x1 y0 y1
- 7 index % max nx ny iy x0 x1 y0 y1 max
- Mcharproc % max nx ny iy x0 x1 y0 y1 val
- setgray % max nx ny iy x0 x1 y0 y1
- Mrectproc % max nx ny iy
- } for % x loop
- pop % max nx ny
- } for % y loop
- pop pop pop
-} bind def
-
-/Ma /Mabswid load def
-/a /arc load def
-/c /curveto load def
-/C /curveto load def
-/d /setdash load def
-/f /fill load def
-/F /fill load def
-/g /setgray load def
-/gr /grestore load def
-/gs /gsave load def
-/k /stroke load def
-/l /lineto load def
-/L /lineto load def
-/lw /setlinewidth load def
-/m /moveto load def
-/n /newpath load def
-/p /gsave load def
-/P /grestore load def
-/r /setrgbcolor load def
-/s /stroke load def
-/w /setlinewidth load def
-/beginmath /MBeginOrig load def
-/endmath /MEndOrig load def
-
-end