summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-09 01:01:02 +0000
committerKarl Berry <karl@freefriends.org>2006-01-09 01:01:02 +0000
commit4a6fbdc0e89fde6f9efcaa24de3db8e137da4404 (patch)
treeefe2b5d7e2f07d6ce478982a9b1e5f43d41cb56c
parent524dc4b7a5d60a1c703450ac6fd3749ffe81afa3 (diff)
trunk/Master/texmf-dist/dvips
git-svn-id: svn://tug.org/texlive/trunk@88 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r--Master/texmf-dist/dvips/ai/aifonts.map.nodownload128
-rw-r--r--Master/texmf-dist/dvips/ai/config.ai2
-rw-r--r--Master/texmf-dist/dvips/ai/config.aiz2
-rw-r--r--Master/texmf-dist/dvips/ams/config.ams7
-rw-r--r--Master/texmf-dist/dvips/ams/config.amz9
-rw-r--r--Master/texmf-dist/dvips/antiqua/config.uaq1
-rw-r--r--Master/texmf-dist/dvips/antp/antp.cfg1
-rw-r--r--Master/texmf-dist/dvips/antp/config.antp1
-rw-r--r--Master/texmf-dist/dvips/arphic/config.arphic2
-rw-r--r--Master/texmf-dist/dvips/aurora/aurora.pro275
-rw-r--r--Master/texmf-dist/dvips/aurora/black.pro1
-rw-r--r--Master/texmf-dist/dvips/aurora/blue.pro1
-rw-r--r--Master/texmf-dist/dvips/aurora/cyan.pro1
-rw-r--r--Master/texmf-dist/dvips/aurora/green.pro1
-rw-r--r--Master/texmf-dist/dvips/aurora/magenta.pro1
-rw-r--r--Master/texmf-dist/dvips/aurora/red.pro1
-rw-r--r--Master/texmf-dist/dvips/aurora/yellow.pro1
-rw-r--r--Master/texmf-dist/dvips/avantgar/config.uag1
-rw-r--r--Master/texmf-dist/dvips/base/ehandler.ps279
-rw-r--r--Master/texmf-dist/dvips/base/resolution400.ps19
-rw-r--r--Master/texmf-dist/dvips/bookman/config.ubk1
-rw-r--r--Master/texmf-dist/dvips/brushscr/config.pbsi6
-rw-r--r--Master/texmf-dist/dvips/carlisle/pspicture.ps138
-rw-r--r--Master/texmf-dist/dvips/cm-super/cm-super.GS435
-rw-r--r--Master/texmf-dist/dvips/cm-super/config.cm-super6
-rw-r--r--Master/texmf-dist/dvips/cm/config.cm7
-rw-r--r--Master/texmf-dist/dvips/cm/config.cmz10
-rw-r--r--Master/texmf-dist/dvips/colorsep/colorsep.pro185
-rw-r--r--Master/texmf-dist/dvips/courier/config.ucr1
-rw-r--r--Master/texmf-dist/dvips/cs/config.cs2
-rw-r--r--Master/texmf-dist/dvips/esint-type1/config.esint2
-rw-r--r--Master/texmf-dist/dvips/euclide/pst-eucl.pro112
-rw-r--r--Master/texmf-dist/dvips/garuda/config.garuda1
-rw-r--r--Master/texmf-dist/dvips/geomsty/illustrator.pro872
-rw-r--r--Master/texmf-dist/dvips/geomsty/math.pro1752
-rw-r--r--Master/texmf-dist/dvips/gothic/config.yfrak1
-rw-r--r--Master/texmf-dist/dvips/grotesq/config.ugq1
-rw-r--r--Master/texmf-dist/dvips/helvetic/config.uhv1
-rw-r--r--Master/texmf-dist/dvips/hfbright/config.hfbright1
-rw-r--r--Master/texmf-dist/dvips/ibycus/config.iby1
-rw-r--r--Master/texmf-dist/dvips/multi/2up.pro613
-rw-r--r--Master/texmf-dist/dvips/multi/4up.pro613
-rw-r--r--Master/texmf-dist/dvips/multi/multi.pro609
-rw-r--r--Master/texmf-dist/dvips/musixps/psslurs.pro282
-rw-r--r--Master/texmf-dist/dvips/musixtex/config.musixtex1
-rw-r--r--Master/texmf-dist/dvips/ncntrsbk/config.unc1
-rw-r--r--Master/texmf-dist/dvips/norasi/config.norasi1
-rw-r--r--Master/texmf-dist/dvips/omega/config.omega1
-rw-r--r--Master/texmf-dist/dvips/omega/omega.cfg1
-rw-r--r--Master/texmf-dist/dvips/ot2cyr/wncyrps.vec126
-rw-r--r--Master/texmf-dist/dvips/palatino/config.upl1
-rw-r--r--Master/texmf-dist/dvips/pl/config.pl2
-rw-r--r--Master/texmf-dist/dvips/psfrag/psfrag.pro155
-rw-r--r--Master/texmf-dist/dvips/pst-3dplot/pst-3dplot.pro108
-rw-r--r--Master/texmf-dist/dvips/pst-bar/pst-bar.pro30
-rw-r--r--Master/texmf-dist/dvips/pst-barcode/pst-barcode.pro2589
-rw-r--r--Master/texmf-dist/dvips/pst-blur/pst-blur.pro67
-rw-r--r--Master/texmf-dist/dvips/pst-circ/pst-circ.pro23
-rw-r--r--Master/texmf-dist/dvips/pst-eucl/pst-eucl.pro132
-rw-r--r--Master/texmf-dist/dvips/pst-func/pst-func.pro117
-rw-r--r--Master/texmf-dist/dvips/pst-geo/map3d.pro216
-rw-r--r--Master/texmf-dist/dvips/pst-geo/map3dII.pro206
-rw-r--r--Master/texmf-dist/dvips/pst-ghsb/pst-ghsb.pro90
-rw-r--r--Master/texmf-dist/dvips/pst-light3d/pst-light3d.pro88
-rw-r--r--Master/texmf-dist/dvips/pst-math/pst-math.pro108
-rw-r--r--Master/texmf-dist/dvips/pst-slpe/pst-slpe.pro153
-rw-r--r--Master/texmf-dist/dvips/pst-vue3d/3D.pro2089
-rw-r--r--Master/texmf-dist/dvips/pstricks-add/pstricks-add.pro792
-rw-r--r--Master/texmf-dist/dvips/pstricks/Changes4
-rw-r--r--Master/texmf-dist/dvips/pstricks/pst-blur.pro64
-rw-r--r--Master/texmf-dist/dvips/pstricks/pst-coil.pro33
-rw-r--r--Master/texmf-dist/dvips/pstricks/pst-dots.pro132
-rw-r--r--Master/texmf-dist/dvips/pstricks/pst-grad.pro106
-rw-r--r--Master/texmf-dist/dvips/pstricks/pst-node.pro210
-rw-r--r--Master/texmf-dist/dvips/pstricks/pst-slpe.pro150
-rw-r--r--Master/texmf-dist/dvips/pstricks/pst-text.pro101
-rw-r--r--Master/texmf-dist/dvips/pstricks/pstricks.pro410
-rw-r--r--Master/texmf-dist/dvips/qfonts/config.qbk1
-rw-r--r--Master/texmf-dist/dvips/qfonts/config.qcr1
-rw-r--r--Master/texmf-dist/dvips/qfonts/config.qhv1
-rw-r--r--Master/texmf-dist/dvips/qfonts/config.qpl1
-rw-r--r--Master/texmf-dist/dvips/qfonts/config.qtm1
-rw-r--r--Master/texmf-dist/dvips/qfonts/config.qzc1
-rw-r--r--Master/texmf-dist/dvips/symbol/config.usy1
-rw-r--r--Master/texmf-dist/dvips/tex-ps/crops.pro196
-rw-r--r--Master/texmf-dist/dvips/tex-ps/mirr.hd32
-rw-r--r--Master/texmf-dist/dvips/tex-ps/separate.pro144
-rw-r--r--Master/texmf-dist/dvips/times/config.utm1
-rw-r--r--Master/texmf-dist/dvips/tree-dvips/tree-dvips.pro85
-rw-r--r--Master/texmf-dist/dvips/uhc/config.uhc1
-rw-r--r--Master/texmf-dist/dvips/wadalab/config.wadalab1
-rw-r--r--Master/texmf-dist/dvips/xcolor/xcolor.pro43
-rw-r--r--Master/texmf-dist/dvips/xypic/xy37dict.pro380
-rw-r--r--Master/texmf-dist/dvips/zapfchan/config.uzc1
-rw-r--r--Master/texmf-dist/dvips/zapfding/config.uzd1
-rw-r--r--Master/texmf-dist/dvips/zefonts/slantcm.cfg1
96 files changed, 15586 insertions, 0 deletions
diff --git a/Master/texmf-dist/dvips/ai/aifonts.map.nodownload b/Master/texmf-dist/dvips/ai/aifonts.map.nodownload
new file mode 100644
index 00000000000..bbf8711aeaf
--- /dev/null
+++ b/Master/texmf-dist/dvips/ai/aifonts.map.nodownload
@@ -0,0 +1,128 @@
+aicmb10 CMB10
+aicmbsy10 CMBSY10
+aicmbx10 CMBX10
+aicmbx12 CMBX12
+aicmbx5 CMBX5
+aicmbx6 CMBX6
+aicmbx7 CMBX7
+aicmbx8 CMBX8
+aicmbx9 CMBX9
+aicmbxsl10 CMBXSL10
+aicmbxti10 CMBXTI10
+aicmcsc10 CMCSC10
+aicmdunh10 CMDUNH10
+aicmex10 CMEX10
+aicmff10 CMFF10
+aicmfi10 CMFI10
+aicmfib8 CMFIB8
+aicminch CMINCH
+aicmitt10 CMITT10
+aicmmi10 CMMI10
+aicmmi12 CMMI12
+aicmmi5 CMMI5
+aicmmi6 CMMI6
+aicmmi7 CMMI7
+aicmmi8 CMMI8
+aicmmi9 CMMI9
+aicmmib10 CMMIB10
+aicmr10 CMR10
+aicmr12 CMR12
+aicmr17 CMR17
+aicmr5 CMR5
+aicmr6 CMR6
+aicmr7 CMR7
+aicmr8 CMR8
+aicmr9 CMR9
+aicmsl10 CMSL10
+aicmsl12 CMSL12
+aicmsl8 CMSL8
+aicmsl9 CMSL9
+aicmsltt10 CMSLTT10
+aicmss10 CMSS10
+aicmss12 CMSS12
+aicmss17 CMSS17
+aicmss8 CMSS8
+aicmss9 CMSS9
+aicmssbx10 CMSSBX10
+aicmssdc10 CMSSDC10
+aicmssi10 CMSSI10
+aicmssi12 CMSSI12
+aicmssi17 CMSSI17
+aicmssi8 CMSSI8
+aicmssi9 CMSSI9
+aicmssq8 CMSSQ8
+aicmssqi8 CMSSQI8
+aicmsy10 CMSY10
+aicmsy5 CMSY5
+aicmsy6 CMSY6
+aicmsy7 CMSY7
+aicmsy8 CMSY8
+aicmsy9 CMSY9
+aicmtcsc10 CMTCSC10
+aicmtex10 CMTEX10
+aicmtex8 CMTEX8
+aicmtex9 CMTEX9
+aicmti10 CMTI10
+aicmti12 CMTI12
+aicmti7 CMTI7
+aicmti8 CMTI8
+aicmti9 CMTI9
+aicmtt10 CMTT10
+aicmtt12 CMTT12
+aicmtt8 CMTT8
+aicmtt9 CMTT9
+aicmu10 CMU10
+aicmvtt10 CMVTT10
+ailasy10 LASY10
+ailasy5 LASY5
+ailasy6 LASY6
+ailasy7 LASY7
+ailasy8 LASY8
+ailasy9 LASY9
+ailasyb10 LASYB10
+ailcircle10 LCIRCLE10
+ailcirclew10 LCIRCLEW10
+ailcmss8 LCMSS8
+ailcmssb8 LCMSSB8
+ailcmssi8 LCMSSI8
+ailine10 LINE10
+ailinew10 LINEW10
+ailogo10 LOGO10
+ailogo8 LOGO8
+ailogo9 LOGO9
+ailogobf10 LOGOBF10
+ailogosl10 LOGOSL10
+aicmbsy5 CMBSY5
+aicmbsy7 CMBSY7
+aicmmib5 CMMIB5
+aicmmib7 CMMIB7
+aieuex10 EUEX10
+aieufb10 EUFB10
+aieufb5 EUFB5
+aieufb7 EUFB7
+aieufm10 EUFM10
+aieufm5 EUFM5
+aieufm7 EUFM7
+aieurb10 EURB10
+aieurb5 EURB5
+aieurb7 EURB7
+aieurm10 EURM10
+aieurm5 EURM5
+aieurm7 EURM7
+aieusb10 EUSB10
+aieusb5 EUSB5
+aieusb7 EUSB7
+aieusm10 EUSM10
+aieusm5 EUSM5
+aieusm7 EUSM7
+aimsam10 MSAM10
+aimsam5 MSAM5
+aimsam7 MSAM7
+aimsbm10 MSBM10
+aimsbm5 MSBM5
+aimsbm7 MSBM7
+aiwncyb10 WNCYB10
+aiwncyi10 WNCYI10
+aiwncyr10 WNCYR10
+aiwncysc10 WNCYSC10
+aiwncyss10 WNCYSS10
diff --git a/Master/texmf-dist/dvips/ai/config.ai b/Master/texmf-dist/dvips/ai/config.ai
new file mode 100644
index 00000000000..1c41fdb8f87
--- /dev/null
+++ b/Master/texmf-dist/dvips/ai/config.ai
@@ -0,0 +1,2 @@
+% Bernard Collins, 1999, public domain.
+p +aifonts.map
diff --git a/Master/texmf-dist/dvips/ai/config.aiz b/Master/texmf-dist/dvips/ai/config.aiz
new file mode 100644
index 00000000000..840b83ac5cb
--- /dev/null
+++ b/Master/texmf-dist/dvips/ai/config.aiz
@@ -0,0 +1,2 @@
+% Bernard Collins, 1999, public domain.
+p +aizfonts.map
diff --git a/Master/texmf-dist/dvips/ams/config.ams b/Master/texmf-dist/dvips/ams/config.ams
new file mode 100644
index 00000000000..a4016b028d1
--- /dev/null
+++ b/Master/texmf-dist/dvips/ams/config.ams
@@ -0,0 +1,7 @@
+% Thomas Esser, 1998, public domain.
+
+% Usage: dvips -Pams ...
+% Purpose: set up ams fonts as build-in of your ps interpreter (or
+% printer).
+
+p +psfonts.ams
diff --git a/Master/texmf-dist/dvips/ams/config.amz b/Master/texmf-dist/dvips/ams/config.amz
new file mode 100644
index 00000000000..2ecc67f32e6
--- /dev/null
+++ b/Master/texmf-dist/dvips/ams/config.amz
@@ -0,0 +1,9 @@
+% Thomas Esser, 1998, public domain.
+
+% Usage: dvips -Pamz
+% Purpose: set up ams fonts to be downloaded as type1 fonts with your
+% document.
+% Note: this is superceeded by psfonts_t1.map resp. config.outline
+% resp. -Poutline.
+
+p +psfonts.amz
diff --git a/Master/texmf-dist/dvips/antiqua/config.uaq b/Master/texmf-dist/dvips/antiqua/config.uaq
new file mode 100644
index 00000000000..f7c71b24b8f
--- /dev/null
+++ b/Master/texmf-dist/dvips/antiqua/config.uaq
@@ -0,0 +1 @@
+p +uaq.map
diff --git a/Master/texmf-dist/dvips/antp/antp.cfg b/Master/texmf-dist/dvips/antp/antp.cfg
new file mode 100644
index 00000000000..4cd9c8427cf
--- /dev/null
+++ b/Master/texmf-dist/dvips/antp/antp.cfg
@@ -0,0 +1 @@
+p +antp.map
diff --git a/Master/texmf-dist/dvips/antp/config.antp b/Master/texmf-dist/dvips/antp/config.antp
new file mode 100644
index 00000000000..4cd9c8427cf
--- /dev/null
+++ b/Master/texmf-dist/dvips/antp/config.antp
@@ -0,0 +1 @@
+p +antp.map
diff --git a/Master/texmf-dist/dvips/arphic/config.arphic b/Master/texmf-dist/dvips/arphic/config.arphic
new file mode 100644
index 00000000000..14c00d472b9
--- /dev/null
+++ b/Master/texmf-dist/dvips/arphic/config.arphic
@@ -0,0 +1,2 @@
+p +gbsnu.map
+p +bsmiu.map
diff --git a/Master/texmf-dist/dvips/aurora/aurora.pro b/Master/texmf-dist/dvips/aurora/aurora.pro
new file mode 100644
index 00000000000..03e9ef435f6
--- /dev/null
+++ b/Master/texmf-dist/dvips/aurora/aurora.pro
@@ -0,0 +1,275 @@
+%!
+% Aurora: Colour Separation for Level 1 PostScript.
+% Copyright: Graham Freeman, 1994.
+% gfreeman@cs.adfa.oz.au
+% All Rights Reserved.
+% This program may not be used for commercial purposes without
+% the consent of the author. It may be freely transmitted
+% provided this authorship and copyright notice is retained
+% unmodified.
+ systemdict /setpacking known
+ {/SavePacking currentpacking def true setpacking}if
+/_c+stat 29 dict def
+_c+stat begin
+/Colour [0 0 0 1] def
+/RGB [0 0 0] def
+/AllColour [1 1 1 1] def
+/setcolour {this type /arraytype eq
+ {true 0 1 3 {dup Colour exch get AllColour 3 -1 roll get eq and
+ dup not {exit}if} for % Is current colour == 1,1,1,1 ?
+ {1}
+ {0 0 1 3{this exch get dup mul add}for
+ 0 0 1 3{Colour exch get dup mul add}for
+ 0 0 1 3{dup Colour exch get this 3 -1 roll get mul add}for
+ 3 copy 3 1 roll mul sqrt dup 0 gt
+ {div 0.98 lt
+ {3{pop}repeat 0}
+ {exch pop exch div dup 1 gt {pop 1}if} ifelse}
+ {5{pop}repeat 0} ifelse
+ }ifelse }
+ {Colour this get}ifelse
+ 1 exch sub setgray} bind def
+/this 3 def
+/transfer [{} dup dup dup] def
+/screen [4 {currentscreen 3 array astore}repeat ] def
+% {dup mul exch dup mul add 1 exch sub}
+/blackgenerate {1 exch sub dup .25 gt {pop 0}{4 mul 1 exch sub}ifelse} def
+/undercolourremove {pop 0} def
+/bound {dup 0 lt{pop 0}if dup 1 gt{pop 1}if} def
+/_c+image [/image load dup type /operatortype ne {/exec cvx}if] cvx def
+/I 0 def
+/J 0 def
+/mask 255 def
+/nbit 8 def
+/buffer 1 string def
+/gsavestack 31 array def
+/gsavepointer -1 def
+/bitandchpos {I nbit mul dup 8 mod nbit add 8 exch sub exch 8 idiv}def
+/storebitval {
+ mask and bitandchpos % val bitpos chpos
+ buffer 1 index get mask 3 index bitshift not and %val bitpos chpos otherbits
+ 4 -2 roll bitshift or buffer 3 1 roll put }def
+/buffercheck {dup length buffer length gt
+ {dup length string /buffer exch def}if }def
+/cmyk2blackvalue {
+ this 1 eq {4 -1 roll} if
+ this 2 eq {4 -2 roll} if
+ this 3 eq {4 1 roll} if
+ pop pop pop} def
+/compl {
+ dup type dup /integertype eq exch /booleantype eq or {not}{
+ dup type /stringtype eq {dup dup length 1 sub 0 1 3 -1 roll
+ {/J exch def dup J get not 255 and J exch put dup}for pop }if
+ }ifelse }def
+/rgb2cmyk {3 {1 exch sub 3 1 roll}repeat
+ min3 dup undercolourremove exch blackgenerate 5 1 roll
+ 3{dup 3 1 roll sub bound 5 1 roll}repeat pop} def
+/max3 {2 index 2 index lt{1 index}{2 index}ifelse dup 2 index lt{pop dup}if} def
+/min3 {2 index 2 index lt{2 index}{1 index}ifelse dup 2 index gt{pop dup}if} def
+/hsb2rgb {3 -1 roll 6 mul dup 6 eq {pop 0}if dup floor cvi
+ 2 index 4 index 1 exch sub mul exch dup 2 mod 0 eq
+ {dup 4 -1 roll sub 1 add 5 -1 roll mul 1 exch sub 3 index mul 3 1 roll
+ dup 0 eq{pop}{2 eq {3 1 roll}{3 -1 roll}ifelse}ifelse }
+ {dup 4 -1 roll exch sub 5 -1 roll mul 1 exch sub 3 index mul exch
+ dup 1 eq{pop 3 1 roll}{3 eq {3 -1 roll}if}ifelse }
+ ifelse} def
+/rgb2hsb {max3 4 1 roll min3 4 index exch sub
+ dup 5 index 0 eq {pop 0}{5 index div}ifelse 6 1 roll dup 0 eq
+ {6 1 roll pop pop pop}
+ {3 index 1 index eq {2 index 2 index sub exch div}
+ {2 index 1 index eq {1 index 4 index sub exch div 2 add}
+ {3 index 3 index sub exch div 4 add}ifelse}ifelse}
+ ifelse 6 div 6 1 roll pop pop pop} def
+/saveproc {_c+stat begin
+ /gsavepointer gsavepointer 1 add def
+ gsavepointer gsavestack length ge
+ {/gsavestack gsavestack gsavepointer 2 mul array dup 3 1 roll copy pop def}
+ if gsavestack gsavepointer get
+ type /arraytype ne {gsavestack gsavepointer 7 array dup 0 4 array put
+ dup 1 3 array put dup 2 4 array put dup 3 4 array put put} if
+ gsavestack gsavepointer get
+ dup 0 get Colour exch copy pop dup 1 get RGB exch copy pop
+ dup 2 get screen exch copy pop dup 3 get transfer exch copy pop
+ dup 4 /undercolourremove load put dup 5 /blackgenerate load put
+ 6 false put end } def
+end
+
+/currentgray {_c+stat /Colour get aload pop
+ 4 1 roll .11 mul 4 1 roll .59 mul 4 1 roll .3 mul add add add
+ 1 exch sub dup 0 lt {pop 0}if} bind def
+/currentcmykcolor {_c+stat /Colour get aload pop} bind def
+/setcmykcolor {_c+stat begin Colour astore
+ aload pop 4 1 roll 3{3 index add dup 1 gt{pop 1}if 1 exch sub 3 1 roll}repeat
+ 4 -1 roll pop RGB astore pop setcolour end} bind def
+/setrgbcolor {_c+stat begin 3{2 index}repeat RGB astore pop
+ rgb2cmyk Colour astore pop setcolour end} def
+/currentrgbcolor {_c+stat /RGB get aload pop} bind def
+/sethsbcolor {_c+stat begin hsb2rgb setrgbcolor end} def
+/currenthsbcolor {_c+stat begin RGB aload pop rgb2hsb end} def
+/setcolorscreen {_c+stat begin 3 -1 0{screen exch get astore pop}for
+ this type /arraytype ne
+ {screen this get aload pop setscreen}if end} bind def
+/currentcolorscreen {_c+stat begin 0 1 3 {screen exch get aload pop}for end}
+ bind def
+/setcolortransfer [{_c+stat begin transfer astore pop this type /arraytype ne}
+ /exec load
+ [{transfer this get} /exec load
+ /settransfer load dup type /operatortype ne {/exec cvx}if] cvx
+ /if load /end load]
+ cvx def
+/settransfer [{ _c+stat begin 0 1 3 {transfer exch 2 index put}for end}
+ /exec load
+ [ /settransfer load dup type /operatortype ne {/exec cvx}if ] cvx
+ /exec load ] cvx def
+/currentcolortransfer {_c+stat /transfer get aload pop} bind def
+/setblackgeneration {_c+stat /blackgenerate 3 -1 roll put} bind def
+/currentblackgeneration {_c+stat /blackgenerate get} bind def
+/setundercolorremoval {_c+stat /undercolourremove 3 -1 roll put} bind def
+/currentundercolorremoval {_c+stat /undercolourremove get} bind def
+/colorimage {_c+stat begin dup 1 eq
+ % 1
+ {pop pop this type /arraytype eq
+ {(Compound colour cannot be handled with "colorimage"\n)print stop}if
+ this 3 ne
+ {4 array dup 0 4 -1 roll put dup 1 /exec load put dup
+ 2 {_c+stat begin buffercheck dup length 1 sub 0 1 3 -1 roll
+ {buffer exch 255 put}for length buffer exch 0 exch getinterval end}
+ bind put
+ dup 3 /exec load put cvx} if
+ }{3 eq
+ % 3
+ {{this type /arraytype eq % true 3
+ {(Compound colour cannot be handled with "colorimage"\n)print stop}if
+ 4 index 8 ne % not 8 bits
+ {4 index {dup 1 eq {exit}if dup 2 mod 0 ne
+ {(Only 1,2,4 or 8-bit images can be handled\n)print stop}if 2 idiv}
+ loop pop
+ 4 index 1 sub 1 exch {1 bitshift 1 or}repeat _c+stat /mask 3 -1 roll put
+ 4 index _c+stat /nbit 3 -1 roll put
+ 8 array dup
+ 2 -1 0 {2 mul dup 2 index exch 6 -1 roll put 1 add /exec load put dup}for
+ 6 {_c+stat begin buffercheck 0 1 2 index length 8 mul nbit idiv 1 sub
+ {/I exch def I nbit mul dup 8 mod nbit add 8 sub exch 8 idiv
+ 3{4 index 1 index get 2 index bitshift mask and mask div 3 1 roll}
+ repeat % RGB values found
+ pop pop rgb2cmyk cmyk2blackvalue mask mul round cvi not mask and
+ storebitval}for
+ pop pop pop buffer 0 I 1 add nbit mul 8 idiv getinterval end} bind put
+ dup 7 /exec load put cvx}
+ {8 array dup % 8 bits
+ 2 -1 0 {2 mul dup 2 index exch 6 -1 roll put 1 add /exec load put dup}for
+ 6 {_c+stat begin buffercheck 0 1 2 index length 1 sub
+ {/I exch def 3{2 index I get 255 div}repeat
+ rgb2cmyk cmyk2blackvalue 255 mul round cvi not 255 and
+ buffer I 3 -1 roll put}for
+ pop pop pop buffer 0 I 1 add getinterval end} bind put
+ dup 7 /exec load put cvx}ifelse}
+ % false 3
+ {this type /arraytype eq
+ {(Compound colour cannot be handled with "colorimage"\n)print stop}if
+ 2 index 8 ne % not 8 bits
+ {2 index {dup 1 eq {exit}if dup 2 mod 0 ne
+ {(Only 1,2,4 or 8-bit images can be handled\n)print stop}if 2 idiv}
+ loop pop
+ 2 index 1 sub 1 exch {1 bitshift 1 or}repeat _c+stat /mask 3 -1 roll put
+ 2 index _c+stat /nbit 3 -1 roll put
+ 4 array dup 0 4 -1 roll put dup 1 /exec load put dup
+ 2 {_c+stat begin buffercheck dup length 8 mul nbit idiv 3 idiv /I 0 def
+ {dup 0 1 2{I 3 mul add nbit mul dup 8 mod nbit add 8 sub
+ exch 8 idiv 2 index exch get exch bitshift mask and mask div exch}for
+ % RGB values found
+ pop rgb2cmyk cmyk2blackvalue mask mul round cvi not mask and storebitval
+ /I I 1 add def}repeat
+ pop buffer 0 I nbit mul 8 idiv getinterval end} bind put
+ dup 3 /exec load put cvx}
+ {4 array dup 0 4 -1 roll put dup 1 /exec load put dup % 8 bits
+ 2 {_c+stat begin buffercheck dup length 3 idiv /I 0 def /J 0 def
+ {dup J get 255 div 1 index J 1 add get 255 div
+ 2 index J 2 add get 255 div rgb2cmyk cmyk2blackvalue 255 mul round cvi
+ not 255 and buffer I 3 -1 roll put /I I 1 add def /J J 3 add def}repeat
+ pop buffer 0 I getinterval end}
+ bind put dup 3 /exec load put cvx}ifelse}ifelse}
+ % 4
+ {{this type /arraytype eq % true 4
+ {(Compound colour cannot be handled with "colorimage"\n)print stop}if
+ 5 index {dup 1 eq {exit}if dup 2 mod 0 ne
+ {(Only 1,2,4 or 8-bit images can be handled\n)print stop}if 2 idiv}
+ loop pop
+ 10 array dup 0 7 -1 roll put dup 1 /exec load put
+ dup 2 6 -1 roll put dup 3 /exec load put dup 4 5 -1 roll put
+ dup 5 /exec load put dup 6 4 -1 roll put dup 7 /exec load put
+ dup 8 {_c+stat begin cmyk2blackvalue buffercheck buffer copy compl end}
+ bind put
+ dup 9 /exec load put cvx}
+ % false 4
+ {this type /arraytype eq
+ {(Compound colour cannot be handled with "colorimage"\n)print stop}if
+ 2 index 8 ne % not 8 bits
+ {2 index {dup 1 eq {exit}if dup 2 mod 0 ne
+ {(Only 1,2,4 or 8-bit images can be handled\n)print stop}if 2 idiv}
+ loop pop
+ 2 index 1 sub 1 exch {1 bitshift 1 or}repeat _c+stat /mask 3 -1 roll put
+ 2 index _c+stat /nbit 3 -1 roll put
+ 4 array dup 0 4 -1 roll put dup 1 /exec load put dup
+ 2 {_c+stat begin buffercheck dup length 8 mul nbit idiv 4 idiv /I 0 def
+ {dup 0 1 3{I 4 mul add nbit mul dup 8 mod nbit add 8 sub
+ exch 8 idiv 2 index exch get exch bitshift mask and exch}for
+ pop cmyk2blackvalue not storebitval /I I 1 add def}repeat
+ pop buffer 0 I nbit mul 8 idiv getinterval end} bind put
+ dup 3 /exec load put cvx}
+ {4 array dup 0 4 -1 roll put dup 1 /exec load put dup % 8 bits
+ 2 {_c+stat begin buffercheck dup length 4 idiv /I this def /J 0 def
+ {dup I get not 255 and buffer J 3 -1 roll put /I I 4 add def /J J 1 add def}repeat
+ pop buffer 0 J getinterval end} bind put
+ dup 3 /exec load put cvx}ifelse}
+ ifelse}ifelse}ifelse
+ end _c+stat /_c+image get exec} def
+/setgray {_c+stat begin dup dup dup RGB astore pop
+ 1 exch sub 0 0 0 4 -1 roll Colour astore pop setcolour end} bind def
+/image [{_c+stat begin
+ this type /arraytype eq
+ % {(Compound colour cannot be handled with "image"\n)print stop}if
+ this 3 ne or
+ { 4 array dup 0 4 -1 roll put dup 1 /exec load put dup
+ 2 {_c+stat begin buffercheck dup length 1 sub 0 1 3 -1 roll
+ {buffer exch 255 put}for length buffer exch 0 exch getinterval end} bind put
+ dup 3 /exec load put cvx} if
+ end} /exec load /image load dup type /operatortype ne {/exec cvx}if] cvx def
+/gsave [_c+stat /saveproc get /exec load
+ /gsave load dup type /operatortype ne {/exec load}if ] cvx def
+/grestore [/grestore load dup type /operatortype ne {/exec cvx}if
+ {_c+stat begin gsavepointer 0 ge
+ dup {gsavestack gsavepointer get 6 get and}if
+ {gsavestack gsavepointer get
+ dup 0 get Colour copy pop dup 1 get RGB copy pop
+ dup 2 get screen copy pop dup 3 get transfer copy pop
+ dup 4 get /undercolourremove exch def 5 get /blackgenerate exch def
+ /gsavepointer gsavepointer 1 sub def} if end}
+ /exec load ] cvx def
+/grestoreall [/grestoreall load dup type /operatortype ne {/exec cvx}if
+ {_c+stat begin gsavepointer -1 0
+ {/gsavepointer exch def gsavestack gsavepointer get 6 get {exit}if}for
+ gsavepointer 0 ge
+ { gsavestack gsavepointer get dup 0 get Colour copy pop
+ dup 1 get RGB copy pop dup 2 get screen copy pop
+ dup 3 get transfer copy pop dup 4 get /undercolourremove exch def
+ dup 5 get /blackgenerate exch def
+ 6 get not {/gsavepointer -1 def}if } if
+ end}
+ /exec load ] cvx def
+/save [_c+stat /saveproc get /exec load
+ {_c+stat begin gsavestack gsavepointer get 6 true put end} /exec load
+ /save load dup type /operatortype ne {/exec cvx}if] cvx def
+/restore [/restore load dup type /operatortype ne {/exec cvx}if
+ {_c+stat begin gsavepointer 0 ge
+ {gsavestack gsavepointer get
+ dup 0 get Colour copy pop dup 1 get RGB copy pop
+ dup 2 get screen copy pop dup 3 get transfer copy pop
+ dup 4 get /undercolourremove exch def 5 get /blackgenerate exch def
+ /gsavepointer gsavepointer 1 sub def} if end} /exec load
+ ]cvx def
+/initgraphics [/initgraphics load dup type /operatortype ne {/exec cvx}if
+ {0 setgray} /exec load ] cvx def
+
+systemdict /setpacking known {SavePacking setpacking}if
+% End of Aurora: colour separation prelude
diff --git a/Master/texmf-dist/dvips/aurora/black.pro b/Master/texmf-dist/dvips/aurora/black.pro
new file mode 100644
index 00000000000..471d046fe0d
--- /dev/null
+++ b/Master/texmf-dist/dvips/aurora/black.pro
@@ -0,0 +1 @@
+_c+stat begin /this 3 def end
diff --git a/Master/texmf-dist/dvips/aurora/blue.pro b/Master/texmf-dist/dvips/aurora/blue.pro
new file mode 100644
index 00000000000..bb8fa9a9a4f
--- /dev/null
+++ b/Master/texmf-dist/dvips/aurora/blue.pro
@@ -0,0 +1 @@
+_c+stat begin /this [1 1 0 0] def end
diff --git a/Master/texmf-dist/dvips/aurora/cyan.pro b/Master/texmf-dist/dvips/aurora/cyan.pro
new file mode 100644
index 00000000000..75ddce6c3a9
--- /dev/null
+++ b/Master/texmf-dist/dvips/aurora/cyan.pro
@@ -0,0 +1 @@
+_c+stat begin /this 0 def end
diff --git a/Master/texmf-dist/dvips/aurora/green.pro b/Master/texmf-dist/dvips/aurora/green.pro
new file mode 100644
index 00000000000..727532d565e
--- /dev/null
+++ b/Master/texmf-dist/dvips/aurora/green.pro
@@ -0,0 +1 @@
+_c+stat begin /this [1 0 1 0] def end
diff --git a/Master/texmf-dist/dvips/aurora/magenta.pro b/Master/texmf-dist/dvips/aurora/magenta.pro
new file mode 100644
index 00000000000..8ab131d0430
--- /dev/null
+++ b/Master/texmf-dist/dvips/aurora/magenta.pro
@@ -0,0 +1 @@
+_c+stat begin /this 1 def end
diff --git a/Master/texmf-dist/dvips/aurora/red.pro b/Master/texmf-dist/dvips/aurora/red.pro
new file mode 100644
index 00000000000..d16d3e57e7a
--- /dev/null
+++ b/Master/texmf-dist/dvips/aurora/red.pro
@@ -0,0 +1 @@
+_c+stat begin /this [0 1 1 0] def end
diff --git a/Master/texmf-dist/dvips/aurora/yellow.pro b/Master/texmf-dist/dvips/aurora/yellow.pro
new file mode 100644
index 00000000000..c154d37fa65
--- /dev/null
+++ b/Master/texmf-dist/dvips/aurora/yellow.pro
@@ -0,0 +1 @@
+_c+stat begin /this 2 def end
diff --git a/Master/texmf-dist/dvips/avantgar/config.uag b/Master/texmf-dist/dvips/avantgar/config.uag
new file mode 100644
index 00000000000..2bda4fbddcf
--- /dev/null
+++ b/Master/texmf-dist/dvips/avantgar/config.uag
@@ -0,0 +1 @@
+p +uag.map
diff --git a/Master/texmf-dist/dvips/base/ehandler.ps b/Master/texmf-dist/dvips/base/ehandler.ps
new file mode 100644
index 00000000000..af40d6e5287
--- /dev/null
+++ b/Master/texmf-dist/dvips/base/ehandler.ps
@@ -0,0 +1,279 @@
+%!PS-Adobe-2.0
+% This is based on: ehandler.ps -- Downloaded Error Break-page handler
+% Copyright (C) 1984, 1985, 1986 Adobe Systems Incorporated.
+% All Rights Reserved.
+
+% Modifications Copyright (C) 1990, 1991 Y&Y.
+% print names of dictionaries on dictionary stack
+% print first few lines of input stream after error
+% print top of execution stack
+% make visible offending commands that are control characters
+% print jobname if it exists
+% catch errors in error handler and print them
+% permit overloading (for debugging of error handler)
+% ignore timeout errors
+% control hardcopy versus softcopy output
+% avoid multiple pages with error message
+
+% NOTE: For hardcopy paper/film output: set showflag true
+% NOTE: For screen/file output: set printflag true
+
+0 % exitserver password
+/$brkpage where
+% {pop} if false % UNCOMMENT THIS LINE TO PERMIT OVERLOADING
+ { % ifelse
+ pop pop
+ (Error Handler in place - not loaded again\n)
+ print flush stop
+}{ % else
+ dup serverdict begin
+ statusdict begin checkpassword { % ifelse
+ (Error Handler downloaded.\n) print flush
+ exitserver
+ }{ % else
+ pop
+ (Bad Password on loading error handler!!!\n)
+ print flush stop
+ } ifelse
+} ifelse
+/$brkpage where {pop} { % to allow overloading
+ /$brkpage 64 dict def
+} ifelse % to allow overloading
+$brkpage begin
+/showflag true def % set to true for hardcopy paper/film output
+/printflag false def % set to true for sending back to screen/file
+/prnt { % def
+ dup type /stringtype ne {=string cvs} if
+ dup length 1 eq { dup 0 get 32 lt { dup 0 get % new
+ 64 add exch pop (control-X) dup 8 4 -1 roll put} if} if % new
+ dup length 6 mul
+ /tx exch def /ty 10 def
+ currentpoint /toy exch def /tox exch def
+ 1 setgray newpath
+ tox toy 2 sub moveto
+ 0 ty rlineto tx 0 rlineto
+ 0 ty neg rlineto
+ closepath showflag{fill}if
+ tox toy moveto 0 setgray
+ showflag{dup show}if printflag{print}{pop}ifelse
+} bind def
+/nl { % def
+ currentpoint exch pop lmargin exch moveto
+ 0 -10 rmoveto
+ printflag{(\n) print flush}if
+} def
+
+/== {/cp 0 def typeprint nl} def
+/typeprint {
+ dup type dup currentdict exch known {exec}{unknowntype}ifelse
+} readonly def
+/lmargin 72 def /rmargin 72 def
+/tprint { % def
+ dup length cp add rmargin gt {nl /cp 0 def} if
+ dup length cp add /cp exch def
+ prnt
+} readonly def
+/cvsprint {=string cvs tprint ( ) tprint} readonly def
+/unknowntype { % def
+ exch pop cvlit (??) tprint cvsprint
+} readonly def
+/integertype {cvsprint} readonly def
+/realtype {cvsprint} readonly def
+/booleantype {cvsprint} readonly def
+/operatortype {(//) tprint cvsprint} readonly def
+/marktype {pop (-mark- ) tprint} readonly def
+% /dicttype {pop (-dictionary- ) tprint} readonly def % do more:
+/dicttype {namedict cvsprint} readonly def
+/nulltype {pop (-null- ) tprint} readonly def
+/filetype {pop (-filestream- ) tprint} readonly def
+/savetype {pop (-savelevel- ) tprint} readonly def
+/fonttype {pop (-fontid- ) tprint} readonly def
+/nametype { % def
+ dup xcheck not {(/) tprint} if cvsprint
+}readonly def
+/stringtype { % def
+ dup rcheck { % ifelse
+ (\() tprint tprint (\)) tprint
+ }{ % else
+ pop (-string- ) tprint
+ } ifelse
+} readonly def
+/arraytype { % def
+ dup rcheck { % ifelse
+ dup xcheck { % ifelse
+ ({) tprint {typeprint} forall (}) tprint
+ }{ % else
+ ([) tprint {typeprint} forall (]) tprint
+ } ifelse
+ }{ % else
+ pop (-array- ) tprint
+ } ifelse
+} readonly def
+/packedarraytype { % def
+ dup rcheck { % ifelse
+ dup xcheck { % ifelse
+ ({) tprint {typeprint} forall (}) tprint
+ }{ % else
+ ([) tprint {typeprint} forall (]) tprint
+ } ifelse
+ }{ % else
+ pop (-packedarray- ) tprint
+ } ifelse
+} readonly def
+/courier /Courier findfont 10 scalefont def
+/OLDhandleerror where not { % to allow overloading
+ /OLDhandleerror errordict /handleerror get def
+}{pop} ifelse % to allow overloading
+end % $brkpage
+
+% read lines terminated by EITHER newline or return
+% (to deal with brain-damage of AppleTalk connection)
+
+/readsafeline{ % def
+ dup length exch 0
+ { % loop
+ 3 index read
+ { % ifelse
+ dup 10 eq 1 index 13 eq or
+ { % ifelse
+ pop
+ 0 exch getinterval exch pop exch pop
+ true exit % normal exit
+ }{ % ifelse
+ 3 index 2 index le
+ { % ifelse
+ pop pop exch pop exch pop true
+ stop % rangecheck long line
+ }{ % ifelse
+ 3 copy put pop 1 add
+ } ifelse
+ } ifelse
+ }{ % ifelse
+ 0 exch getinterval exch pop exch pop
+ false exit % EOF exit
+ } ifelse
+ } loop
+} def
+
+% Find name for dictionary in tree of dictionaries - ignore font dictionaries
+% Discard intermediate dictionary info - return first match
+
+/lookfordict { % name and dict to search
+ dup % save for self reference detection
+ { % forall
+ dup type /dicttype eq
+ { % is a dictionary
+ dup 3 index ne
+ { % not self reference
+ 1 index /unknowndict ne
+ { % not the place we saved
+ dup unknowndict eq
+ { % found it
+ pop 3 1 roll pop pop true exit % return name and true
+ }{ % not the unknown dict
+ dup rcheck
+ { % safe to read
+ 1 index /FontDirectory ne
+ { % not Font Directory
+ lookfordict % recurse
+ { % found it
+ 3 1 roll pop pop true exit % return name and true
+ }{
+ 0 0 % replace key and value
+ } ifelse % lookfordict
+ } if % FontDirectory
+ } if % safe to read
+ } ifelse % equals unknown
+ } if % place we hid dict
+ } if % self reference
+ } if % is a dictionary
+ pop pop % flush key and value
+ } forall
+ dup true ne {pop pop false} if % flush name and dictionary
+} readonly def
+
+/namedict{ % get name for dictionary
+ dup systemdict eq {/systemdict}
+ {/unknowndict exch def % store unknown dictionary
+ /systemdict dup load lookfordict not {/-no-name-} if} ifelse
+} readonly def
+
+/handleerror { % put
+ systemdict begin $error begin $brkpage begin
+ newerror { % ifelse
+ errorname /timeout ne {
+ {
+ /newerror false store
+ vmstatus % pop pop
+ 3 -1 roll
+ 0 ne {grestoreall} if % free up some VM is possible
+ initgraphics courier setfont
+ lmargin 720 moveto
+ exch sub 4096 lt {stop} if % nearly out of VM ?
+ statusdict /jobname known { % if
+ statusdict /jobname get dup type /stringtype eq {
+ nl (JOBNAME: ) prnt
+ prnt nl
+ } {pop} ifelse
+ } if
+ nl (ERROR: ) prnt
+ errorname prnt nl
+ nl (OFFENDING COMMAND: ) prnt
+ /command load prnt
+ $error /ostack known { % if
+ nl nl (OPERAND STACK:) prnt nl nl
+ $error /ostack get aload length {==} repeat
+ } if
+ $error /estack known { % if
+ nl nl (TOP OF EXECUTION STACK:) prnt nl nl
+ $error /estack get aload length
+ true exch
+ {dup {1 index == 1 index type cvlit /filetype eq {not} if} if
+ exch pop} repeat pop % avoid system stuff
+ } if
+ $error /dstack known { % if
+ nl nl (DICTIONARY STACK:) prnt nl nl
+ $error /dstack get aload length {namedict cvx ==} repeat
+ } if
+ systemdict /file known
+ { % if
+ nl nl (FILE STREAM:) prnt nl nl
+ true 7
+ { % repeat
+ (%stdin) (r) file =string {readsafeline} stopped
+ {
+ pop (long line:\n) prnt =string prnt nl
+ }{
+ {
+ prnt nl
+ }{
+ prnt nl (EOF) prnt nl nl pop false exit
+ } ifelse
+ } ifelse
+ } repeat
+ {3 {(.) prnt nl} repeat nl} if
+ } if
+ showflag{/#copies 1 def systemdict /showpage get exec}if
+ /newerror true store
+ /OLDhandleerror load end end end exec
+ } stopped {
+ nl nl (VMError (or error in error handler)) prnt nl
+ nl (ERROR: ) prnt %
+ errorname prnt nl %
+ nl (OFFENDING COMMAND: ) prnt
+ /command load prnt nl %
+ showflag{/#copies 1 def systemdict /showpage get exec}if
+ /newerror true store
+ /OLDhandleerror load end end end exec
+ } if %% get some output at least if handler dies
+ } if % ignore timeout
+ }{ % else already in error handler ...
+ end end end
+%% systemdict /showpage get exec %% get some output if internal error ?
+ } ifelse
+}
+dup 0 systemdict put % replace name by actual dict object
+dup 4 $brkpage put % replace name by dict object
+bind readonly
+
+errordict 3 1 roll put % put proc in errordict as /handleerror
diff --git a/Master/texmf-dist/dvips/base/resolution400.ps b/Master/texmf-dist/dvips/base/resolution400.ps
new file mode 100644
index 00000000000..fb0fe5c7a8e
--- /dev/null
+++ b/Master/texmf-dist/dvips/base/resolution400.ps
@@ -0,0 +1,19 @@
+% (This is the file {\tt resolution400.ps} supplied with NeWSprint.)
+% {\tt simpson@math.psu.edu} only got this work by downloading the code
+% via an extra header file, i.e., having this in the Dvips config file:
+%
+% M sparcptr
+% D 400
+% h resolution400.ps
+%
+/SetResolution {
+ /setres where {
+ /setres get exec
+ }{
+ pop
+ } ifelse
+} def
+%%BeginFeature *SetResolution 400
+400 SetResolution
+%%EndFeature
+%%EndSetup
diff --git a/Master/texmf-dist/dvips/bookman/config.ubk b/Master/texmf-dist/dvips/bookman/config.ubk
new file mode 100644
index 00000000000..e1d990b3775
--- /dev/null
+++ b/Master/texmf-dist/dvips/bookman/config.ubk
@@ -0,0 +1 @@
+p +ubk.map
diff --git a/Master/texmf-dist/dvips/brushscr/config.pbsi b/Master/texmf-dist/dvips/brushscr/config.pbsi
new file mode 100644
index 00000000000..6745e4c4576
--- /dev/null
+++ b/Master/texmf-dist/dvips/brushscr/config.pbsi
@@ -0,0 +1,6 @@
+% File name: config.pbsi
+% Created by: Maurizio Loreti
+% Created using: vim 5.8
+% Creation date: 7-Sep-2001
+
+p +pbsi.map
diff --git a/Master/texmf-dist/dvips/carlisle/pspicture.ps b/Master/texmf-dist/dvips/carlisle/pspicture.ps
new file mode 100644
index 00000000000..1626182cbd7
--- /dev/null
+++ b/Master/texmf-dist/dvips/carlisle/pspicture.ps
@@ -0,0 +1,138 @@
+%!
+%%
+%% Source File `pspicture.dtx'.
+%% Copyright (C) 1992 1999 David Carlisle
+%% This file may be distributed under the terms of the LPPL.
+%% See 00readme.txt for details.
+%%
+
+
+
+
+/!BP{
+ 72 72.27 div dup scale
+ }def
+/!A{
+ newpath
+ 0 0 moveto
+ dup neg dup .4 mul rlineto
+ .8 mul 0 exch rlineto
+ closepath
+ fill
+ } def
+/!V{
+ !BP
+ /!X exch def
+ /!y exch def
+ /!x exch def
+ newpath
+ 0 0 moveto
+ !x 0 eq {0 !y 0 lt {!X neg}{!X} ifelse}
+ {!x 0 lt {!X neg}{!X}ifelse !X !y mul !x abs div} ifelse
+ lineto
+ setlinewidth % @wholewidth
+ currentpoint
+ stroke
+ translate
+ !y !x atan
+ rotate
+ !A % @arrowlength
+ }def
+/!L{
+ !BP
+ /!X exch def
+ /!y exch def
+ /!x exch def
+ newpath
+ 0 0 moveto
+ !x 0 eq {0 !y 0 lt {!X neg}{!X} ifelse}
+ {!x 0 lt {!X neg}{!X}ifelse !X !y mul !x abs div} ifelse
+ lineto
+ setlinewidth % @wholewidth
+ stroke
+ }def
+/!C{
+ !BP
+ 0 0 3 2 roll
+ 2 div 0 360 arc
+ setlinewidth % @wholewidth
+ stroke
+ }def
+/!D{
+ !BP
+ 0 0 3 2 roll
+ 2 div 0 360 arc fill
+ }def
+/!O{
+ !BP
+ /!y exch 2 div def
+ /!x exch 2 div def
+ /!r exch !x !y
+ 2 copy gt {exch} if pop
+ 2 copy gt {exch} if pop
+ def
+ setlinewidth % @wholewidth
+ 1 eq
+ {newpath
+ !x neg 0 moveto
+ !x neg !y 0 !y !r arcto 4 {pop} repeat
+ 0 !y lineto
+ stroke}if
+ 1 eq
+ {newpath
+ !x 0 moveto
+ !x !y 0 !y !r arcto 4 {pop} repeat
+ 0 !y lineto
+ stroke}if
+ 1 eq
+ {newpath
+ !x neg 0 moveto
+ !x neg !y neg 0 !y neg !r arcto 4 {pop} repeat
+ 0 !y neg lineto
+ stroke}if
+ 1 eq
+ {newpath
+ !x 0 moveto
+ !x !y neg 0 !y neg !r arcto 4 {pop} repeat
+ 0 !y neg lineto
+ stroke}if
+ }def
+/!V2{
+ !BP
+ 2 copy exch
+ atan
+ /a exch def
+ 2 copy
+ newpath
+ 0 0 moveto
+ lineto % <x*unitlength> <y*unitlength>
+ 3 2 roll
+ setlinewidth % @wholewidth
+ stroke
+ translate % <x*unitlength> <y*unitlength>
+ a rotate
+ !A % @arrowlength
+ }def
+/!L2{
+ !BP
+ newpath
+ 0 0 moveto
+ lineto % <x*unitlength> <y*unitlength>
+ setlinewidth % @wholewidth
+ stroke
+ }def
+/!C2{
+ !BP
+ /!s exch def
+ /!y exch def
+ /!x exch def
+ newpath
+ 0 0 moveto
+ 0 0
+ !x 2 div !y 10 div !s mul add
+ !y 2 div !x 10 div !s mul sub
+ !x !y
+ curveto
+ setlinewidth % @wholewidth
+ stroke
+ }def
diff --git a/Master/texmf-dist/dvips/cm-super/cm-super.GS b/Master/texmf-dist/dvips/cm-super/cm-super.GS
new file mode 100644
index 00000000000..e1946416572
--- /dev/null
+++ b/Master/texmf-dist/dvips/cm-super/cm-super.GS
@@ -0,0 +1,435 @@
+% cm-super.GS: Ghostscript Fontmap file for CM-Super fonts
+/SFRM0500 (sfrm0500.pfb) ;
+/SFRM0600 (sfrm0600.pfb) ;
+/SFRM0700 (sfrm0700.pfb) ;
+/SFRM0800 (sfrm0800.pfb) ;
+/SFRM0900 (sfrm0900.pfb) ;
+/SFRM1000 (sfrm1000.pfb) ;
+/SFRM1095 (sfrm1095.pfb) ;
+/SFRM1200 (sfrm1200.pfb) ;
+/SFRM1440 (sfrm1440.pfb) ;
+/SFRM1728 (sfrm1728.pfb) ;
+/SFRM2074 (sfrm2074.pfb) ;
+/SFRM2488 (sfrm2488.pfb) ;
+/SFRM2986 (sfrm2986.pfb) ;
+/SFRM3583 (sfrm3583.pfb) ;
+/SFSL0500 (sfsl0500.pfb) ;
+/SFSL0600 (sfsl0600.pfb) ;
+/SFSL0700 (sfsl0700.pfb) ;
+/SFSL0800 (sfsl0800.pfb) ;
+/SFSL0900 (sfsl0900.pfb) ;
+/SFSL1000 (sfsl1000.pfb) ;
+/SFSL1095 (sfsl1095.pfb) ;
+/SFSL1200 (sfsl1200.pfb) ;
+/SFSL1440 (sfsl1440.pfb) ;
+/SFSL1728 (sfsl1728.pfb) ;
+/SFSL2074 (sfsl2074.pfb) ;
+/SFSL2488 (sfsl2488.pfb) ;
+/SFSL2986 (sfsl2986.pfb) ;
+/SFSL3583 (sfsl3583.pfb) ;
+/SFTI0500 (sfti0500.pfb) ;
+/SFTI0600 (sfti0600.pfb) ;
+/SFTI0700 (sfti0700.pfb) ;
+/SFTI0800 (sfti0800.pfb) ;
+/SFTI0900 (sfti0900.pfb) ;
+/SFTI1000 (sfti1000.pfb) ;
+/SFTI1095 (sfti1095.pfb) ;
+/SFTI1200 (sfti1200.pfb) ;
+/SFTI1440 (sfti1440.pfb) ;
+/SFTI1728 (sfti1728.pfb) ;
+/SFTI2074 (sfti2074.pfb) ;
+/SFTI2488 (sfti2488.pfb) ;
+/SFTI2986 (sfti2986.pfb) ;
+/SFTI3583 (sfti3583.pfb) ;
+/SFCC0500 (sfcc0500.pfb) ;
+/SFCC0600 (sfcc0600.pfb) ;
+/SFCC0700 (sfcc0700.pfb) ;
+/SFCC0800 (sfcc0800.pfb) ;
+/SFCC0900 (sfcc0900.pfb) ;
+/SFCC1000 (sfcc1000.pfb) ;
+/SFCC1095 (sfcc1095.pfb) ;
+/SFCC1200 (sfcc1200.pfb) ;
+/SFCC1440 (sfcc1440.pfb) ;
+/SFCC1728 (sfcc1728.pfb) ;
+/SFCC2074 (sfcc2074.pfb) ;
+/SFCC2488 (sfcc2488.pfb) ;
+/SFCC2986 (sfcc2986.pfb) ;
+/SFCC3583 (sfcc3583.pfb) ;
+/SFUI0500 (sfui0500.pfb) ;
+/SFUI0600 (sfui0600.pfb) ;
+/SFUI0700 (sfui0700.pfb) ;
+/SFUI0800 (sfui0800.pfb) ;
+/SFUI0900 (sfui0900.pfb) ;
+/SFUI1000 (sfui1000.pfb) ;
+/SFUI1095 (sfui1095.pfb) ;
+/SFUI1200 (sfui1200.pfb) ;
+/SFUI1440 (sfui1440.pfb) ;
+/SFUI1728 (sfui1728.pfb) ;
+/SFUI2074 (sfui2074.pfb) ;
+/SFUI2488 (sfui2488.pfb) ;
+/SFUI2986 (sfui2986.pfb) ;
+/SFUI3583 (sfui3583.pfb) ;
+/SFSC0500 (sfsc0500.pfb) ;
+/SFSC0600 (sfsc0600.pfb) ;
+/SFSC0700 (sfsc0700.pfb) ;
+/SFSC0800 (sfsc0800.pfb) ;
+/SFSC0900 (sfsc0900.pfb) ;
+/SFSC1000 (sfsc1000.pfb) ;
+/SFSC1095 (sfsc1095.pfb) ;
+/SFSC1200 (sfsc1200.pfb) ;
+/SFSC1440 (sfsc1440.pfb) ;
+/SFSC1728 (sfsc1728.pfb) ;
+/SFSC2074 (sfsc2074.pfb) ;
+/SFSC2488 (sfsc2488.pfb) ;
+/SFSC2986 (sfsc2986.pfb) ;
+/SFSC3583 (sfsc3583.pfb) ;
+/SFCI0500 (sfci0500.pfb) ;
+/SFCI0600 (sfci0600.pfb) ;
+/SFCI0700 (sfci0700.pfb) ;
+/SFCI0800 (sfci0800.pfb) ;
+/SFCI0900 (sfci0900.pfb) ;
+/SFCI1000 (sfci1000.pfb) ;
+/SFCI1095 (sfci1095.pfb) ;
+/SFCI1200 (sfci1200.pfb) ;
+/SFCI1440 (sfci1440.pfb) ;
+/SFCI1728 (sfci1728.pfb) ;
+/SFCI2074 (sfci2074.pfb) ;
+/SFCI2488 (sfci2488.pfb) ;
+/SFCI2986 (sfci2986.pfb) ;
+/SFCI3583 (sfci3583.pfb) ;
+/SFBX0500 (sfbx0500.pfb) ;
+/SFBX0600 (sfbx0600.pfb) ;
+/SFBX0700 (sfbx0700.pfb) ;
+/SFBX0800 (sfbx0800.pfb) ;
+/SFBX0900 (sfbx0900.pfb) ;
+/SFBX1000 (sfbx1000.pfb) ;
+/SFBX1095 (sfbx1095.pfb) ;
+/SFBX1200 (sfbx1200.pfb) ;
+/SFBX1440 (sfbx1440.pfb) ;
+/SFBX1728 (sfbx1728.pfb) ;
+/SFBX2074 (sfbx2074.pfb) ;
+/SFBX2488 (sfbx2488.pfb) ;
+/SFBX2986 (sfbx2986.pfb) ;
+/SFBX3583 (sfbx3583.pfb) ;
+/SFBL0500 (sfbl0500.pfb) ;
+/SFBL0600 (sfbl0600.pfb) ;
+/SFBL0700 (sfbl0700.pfb) ;
+/SFBL0800 (sfbl0800.pfb) ;
+/SFBL0900 (sfbl0900.pfb) ;
+/SFBL1000 (sfbl1000.pfb) ;
+/SFBL1095 (sfbl1095.pfb) ;
+/SFBL1200 (sfbl1200.pfb) ;
+/SFBL1440 (sfbl1440.pfb) ;
+/SFBL1728 (sfbl1728.pfb) ;
+/SFBL2074 (sfbl2074.pfb) ;
+/SFBL2488 (sfbl2488.pfb) ;
+/SFBL2986 (sfbl2986.pfb) ;
+/SFBL3583 (sfbl3583.pfb) ;
+/SFBI0500 (sfbi0500.pfb) ;
+/SFBI0600 (sfbi0600.pfb) ;
+/SFBI0700 (sfbi0700.pfb) ;
+/SFBI0800 (sfbi0800.pfb) ;
+/SFBI0900 (sfbi0900.pfb) ;
+/SFBI1000 (sfbi1000.pfb) ;
+/SFBI1095 (sfbi1095.pfb) ;
+/SFBI1200 (sfbi1200.pfb) ;
+/SFBI1440 (sfbi1440.pfb) ;
+/SFBI1728 (sfbi1728.pfb) ;
+/SFBI2074 (sfbi2074.pfb) ;
+/SFBI2488 (sfbi2488.pfb) ;
+/SFBI2986 (sfbi2986.pfb) ;
+/SFBI3583 (sfbi3583.pfb) ;
+/SFXC0500 (sfxc0500.pfb) ;
+/SFXC0600 (sfxc0600.pfb) ;
+/SFXC0700 (sfxc0700.pfb) ;
+/SFXC0800 (sfxc0800.pfb) ;
+/SFXC0900 (sfxc0900.pfb) ;
+/SFXC1000 (sfxc1000.pfb) ;
+/SFXC1095 (sfxc1095.pfb) ;
+/SFXC1200 (sfxc1200.pfb) ;
+/SFXC1440 (sfxc1440.pfb) ;
+/SFXC1728 (sfxc1728.pfb) ;
+/SFXC2074 (sfxc2074.pfb) ;
+/SFXC2488 (sfxc2488.pfb) ;
+/SFXC2986 (sfxc2986.pfb) ;
+/SFXC3583 (sfxc3583.pfb) ;
+/SFOC0500 (sfoc0500.pfb) ;
+/SFOC0600 (sfoc0600.pfb) ;
+/SFOC0700 (sfoc0700.pfb) ;
+/SFOC0800 (sfoc0800.pfb) ;
+/SFOC0900 (sfoc0900.pfb) ;
+/SFOC1000 (sfoc1000.pfb) ;
+/SFOC1095 (sfoc1095.pfb) ;
+/SFOC1200 (sfoc1200.pfb) ;
+/SFOC1440 (sfoc1440.pfb) ;
+/SFOC1728 (sfoc1728.pfb) ;
+/SFOC2074 (sfoc2074.pfb) ;
+/SFOC2488 (sfoc2488.pfb) ;
+/SFOC2986 (sfoc2986.pfb) ;
+/SFOC3583 (sfoc3583.pfb) ;
+/SFRB0500 (sfrb0500.pfb) ;
+/SFRB0600 (sfrb0600.pfb) ;
+/SFRB0700 (sfrb0700.pfb) ;
+/SFRB0800 (sfrb0800.pfb) ;
+/SFRB0900 (sfrb0900.pfb) ;
+/SFRB1000 (sfrb1000.pfb) ;
+/SFRB1095 (sfrb1095.pfb) ;
+/SFRB1200 (sfrb1200.pfb) ;
+/SFRB1440 (sfrb1440.pfb) ;
+/SFRB1728 (sfrb1728.pfb) ;
+/SFRB2074 (sfrb2074.pfb) ;
+/SFRB2488 (sfrb2488.pfb) ;
+/SFRB2986 (sfrb2986.pfb) ;
+/SFRB3583 (sfrb3583.pfb) ;
+/SFBM0500 (sfbm0500.pfb) ;
+/SFBM0600 (sfbm0600.pfb) ;
+/SFBM0700 (sfbm0700.pfb) ;
+/SFBM0800 (sfbm0800.pfb) ;
+/SFBM0900 (sfbm0900.pfb) ;
+/SFBM1000 (sfbm1000.pfb) ;
+/SFBM1095 (sfbm1095.pfb) ;
+/SFBM1200 (sfbm1200.pfb) ;
+/SFBM1440 (sfbm1440.pfb) ;
+/SFBM1728 (sfbm1728.pfb) ;
+/SFBM2074 (sfbm2074.pfb) ;
+/SFBM2488 (sfbm2488.pfb) ;
+/SFBM2986 (sfbm2986.pfb) ;
+/SFBM3583 (sfbm3583.pfb) ;
+/SFSS0500 (sfss0500.pfb) ;
+/SFSS0600 (sfss0600.pfb) ;
+/SFSS0700 (sfss0700.pfb) ;
+/SFSS0800 (sfss0800.pfb) ;
+/SFSS0900 (sfss0900.pfb) ;
+/SFSS1000 (sfss1000.pfb) ;
+/SFSS1095 (sfss1095.pfb) ;
+/SFSS1200 (sfss1200.pfb) ;
+/SFSS1440 (sfss1440.pfb) ;
+/SFSS1728 (sfss1728.pfb) ;
+/SFSS2074 (sfss2074.pfb) ;
+/SFSS2488 (sfss2488.pfb) ;
+/SFSS2986 (sfss2986.pfb) ;
+/SFSS3583 (sfss3583.pfb) ;
+/SFSI0500 (sfsi0500.pfb) ;
+/SFSI0600 (sfsi0600.pfb) ;
+/SFSI0700 (sfsi0700.pfb) ;
+/SFSI0800 (sfsi0800.pfb) ;
+/SFSI0900 (sfsi0900.pfb) ;
+/SFSI1000 (sfsi1000.pfb) ;
+/SFSI1095 (sfsi1095.pfb) ;
+/SFSI1200 (sfsi1200.pfb) ;
+/SFSI1440 (sfsi1440.pfb) ;
+/SFSI1728 (sfsi1728.pfb) ;
+/SFSI2074 (sfsi2074.pfb) ;
+/SFSI2488 (sfsi2488.pfb) ;
+/SFSI2986 (sfsi2986.pfb) ;
+/SFSI3583 (sfsi3583.pfb) ;
+/SFSX0500 (sfsx0500.pfb) ;
+/SFSX0600 (sfsx0600.pfb) ;
+/SFSX0700 (sfsx0700.pfb) ;
+/SFSX0800 (sfsx0800.pfb) ;
+/SFSX0900 (sfsx0900.pfb) ;
+/SFSX1000 (sfsx1000.pfb) ;
+/SFSX1095 (sfsx1095.pfb) ;
+/SFSX1200 (sfsx1200.pfb) ;
+/SFSX1440 (sfsx1440.pfb) ;
+/SFSX1728 (sfsx1728.pfb) ;
+/SFSX2074 (sfsx2074.pfb) ;
+/SFSX2488 (sfsx2488.pfb) ;
+/SFSX2986 (sfsx2986.pfb) ;
+/SFSX3583 (sfsx3583.pfb) ;
+/SFSO0500 (sfso0500.pfb) ;
+/SFSO0600 (sfso0600.pfb) ;
+/SFSO0700 (sfso0700.pfb) ;
+/SFSO0800 (sfso0800.pfb) ;
+/SFSO0900 (sfso0900.pfb) ;
+/SFSO1000 (sfso1000.pfb) ;
+/SFSO1095 (sfso1095.pfb) ;
+/SFSO1200 (sfso1200.pfb) ;
+/SFSO1440 (sfso1440.pfb) ;
+/SFSO1728 (sfso1728.pfb) ;
+/SFSO2074 (sfso2074.pfb) ;
+/SFSO2488 (sfso2488.pfb) ;
+/SFSO2986 (sfso2986.pfb) ;
+/SFSO3583 (sfso3583.pfb) ;
+/SFTT0800 (sftt0800.pfb) ;
+/SFTT0900 (sftt0900.pfb) ;
+/SFTT1000 (sftt1000.pfb) ;
+/SFTT1095 (sftt1095.pfb) ;
+/SFTT1200 (sftt1200.pfb) ;
+/SFTT1440 (sftt1440.pfb) ;
+/SFTT1728 (sftt1728.pfb) ;
+/SFTT2074 (sftt2074.pfb) ;
+/SFTT2488 (sftt2488.pfb) ;
+/SFTT2986 (sftt2986.pfb) ;
+/SFTT3583 (sftt3583.pfb) ;
+/SFST0800 (sfst0800.pfb) ;
+/SFST0900 (sfst0900.pfb) ;
+/SFST1000 (sfst1000.pfb) ;
+/SFST1095 (sfst1095.pfb) ;
+/SFST1200 (sfst1200.pfb) ;
+/SFST1440 (sfst1440.pfb) ;
+/SFST1728 (sfst1728.pfb) ;
+/SFST2074 (sfst2074.pfb) ;
+/SFST2488 (sfst2488.pfb) ;
+/SFST2986 (sfst2986.pfb) ;
+/SFST3583 (sfst3583.pfb) ;
+/SFIT0800 (sfit0800.pfb) ;
+/SFIT0900 (sfit0900.pfb) ;
+/SFIT1000 (sfit1000.pfb) ;
+/SFIT1095 (sfit1095.pfb) ;
+/SFIT1200 (sfit1200.pfb) ;
+/SFIT1440 (sfit1440.pfb) ;
+/SFIT1728 (sfit1728.pfb) ;
+/SFIT2074 (sfit2074.pfb) ;
+/SFIT2488 (sfit2488.pfb) ;
+/SFIT2986 (sfit2986.pfb) ;
+/SFIT3583 (sfit3583.pfb) ;
+/SFTC0800 (sftc0800.pfb) ;
+/SFTC0900 (sftc0900.pfb) ;
+/SFTC1000 (sftc1000.pfb) ;
+/SFTC1095 (sftc1095.pfb) ;
+/SFTC1200 (sftc1200.pfb) ;
+/SFTC1440 (sftc1440.pfb) ;
+/SFTC1728 (sftc1728.pfb) ;
+/SFTC2074 (sftc2074.pfb) ;
+/SFTC2488 (sftc2488.pfb) ;
+/SFTC2986 (sftc2986.pfb) ;
+/SFTC3583 (sftc3583.pfb) ;
+/SFVT0800 (sfvt0800.pfb) ;
+/SFVT0900 (sfvt0900.pfb) ;
+/SFVT1000 (sfvt1000.pfb) ;
+/SFVT1095 (sfvt1095.pfb) ;
+/SFVT1200 (sfvt1200.pfb) ;
+/SFVT1440 (sfvt1440.pfb) ;
+/SFVT1728 (sfvt1728.pfb) ;
+/SFVT2074 (sfvt2074.pfb) ;
+/SFVT2488 (sfvt2488.pfb) ;
+/SFVT2986 (sfvt2986.pfb) ;
+/SFVT3583 (sfvt3583.pfb) ;
+/SFVI0800 (sfvi0800.pfb) ;
+/SFVI0900 (sfvi0900.pfb) ;
+/SFVI1000 (sfvi1000.pfb) ;
+/SFVI1095 (sfvi1095.pfb) ;
+/SFVI1200 (sfvi1200.pfb) ;
+/SFVI1440 (sfvi1440.pfb) ;
+/SFVI1728 (sfvi1728.pfb) ;
+/SFVI2074 (sfvi2074.pfb) ;
+/SFVI2488 (sfvi2488.pfb) ;
+/SFVI2986 (sfvi2986.pfb) ;
+/SFVI3583 (sfvi3583.pfb) ;
+/SFDH0500 (sfdh0500.pfb) ;
+/SFDH0600 (sfdh0600.pfb) ;
+/SFDH0700 (sfdh0700.pfb) ;
+/SFDH0800 (sfdh0800.pfb) ;
+/SFDH0900 (sfdh0900.pfb) ;
+/SFDH1000 (sfdh1000.pfb) ;
+/SFDH1095 (sfdh1095.pfb) ;
+/SFDH1200 (sfdh1200.pfb) ;
+/SFDH1440 (sfdh1440.pfb) ;
+/SFDH1728 (sfdh1728.pfb) ;
+/SFDH2074 (sfdh2074.pfb) ;
+/SFDH2488 (sfdh2488.pfb) ;
+/SFDH2986 (sfdh2986.pfb) ;
+/SFDH3583 (sfdh3583.pfb) ;
+/SFFB0500 (sffb0500.pfb) ;
+/SFFB0600 (sffb0600.pfb) ;
+/SFFB0700 (sffb0700.pfb) ;
+/SFFB0800 (sffb0800.pfb) ;
+/SFFB0900 (sffb0900.pfb) ;
+/SFFB1000 (sffb1000.pfb) ;
+/SFFB1095 (sffb1095.pfb) ;
+/SFFB1200 (sffb1200.pfb) ;
+/SFFB1440 (sffb1440.pfb) ;
+/SFFB1728 (sffb1728.pfb) ;
+/SFFB2074 (sffb2074.pfb) ;
+/SFFB2488 (sffb2488.pfb) ;
+/SFFB2986 (sffb2986.pfb) ;
+/SFFB3583 (sffb3583.pfb) ;
+/SFFS0500 (sffs0500.pfb) ;
+/SFFS0600 (sffs0600.pfb) ;
+/SFFS0700 (sffs0700.pfb) ;
+/SFFS0800 (sffs0800.pfb) ;
+/SFFS0900 (sffs0900.pfb) ;
+/SFFS1000 (sffs1000.pfb) ;
+/SFFS1095 (sffs1095.pfb) ;
+/SFFS1200 (sffs1200.pfb) ;
+/SFFS1440 (sffs1440.pfb) ;
+/SFFS1728 (sffs1728.pfb) ;
+/SFFS2074 (sffs2074.pfb) ;
+/SFFS2488 (sffs2488.pfb) ;
+/SFFS2986 (sffs2986.pfb) ;
+/SFFS3583 (sffs3583.pfb) ;
+/SFFF0500 (sfff0500.pfb) ;
+/SFFF0600 (sfff0600.pfb) ;
+/SFFF0700 (sfff0700.pfb) ;
+/SFFF0800 (sfff0800.pfb) ;
+/SFFF0900 (sfff0900.pfb) ;
+/SFFF1000 (sfff1000.pfb) ;
+/SFFF1095 (sfff1095.pfb) ;
+/SFFF1200 (sfff1200.pfb) ;
+/SFFF1440 (sfff1440.pfb) ;
+/SFFF1728 (sfff1728.pfb) ;
+/SFFF2074 (sfff2074.pfb) ;
+/SFFF2488 (sfff2488.pfb) ;
+/SFFF2986 (sfff2986.pfb) ;
+/SFFF3583 (sfff3583.pfb) ;
+/SFFI0500 (sffi0500.pfb) ;
+/SFFI0600 (sffi0600.pfb) ;
+/SFFI0700 (sffi0700.pfb) ;
+/SFFI0800 (sffi0800.pfb) ;
+/SFFI0900 (sffi0900.pfb) ;
+/SFFI1000 (sffi1000.pfb) ;
+/SFFI1095 (sffi1095.pfb) ;
+/SFFI1200 (sffi1200.pfb) ;
+/SFFI1440 (sffi1440.pfb) ;
+/SFFI1728 (sffi1728.pfb) ;
+/SFFI2074 (sffi2074.pfb) ;
+/SFFI2488 (sffi2488.pfb) ;
+/SFFI2986 (sffi2986.pfb) ;
+/SFFI3583 (sffi3583.pfb) ;
+/SFLQ8 (sflq8.pfb) ;
+/SFLI8 (sfli8.pfb) ;
+/SFLB8 (sflb8.pfb) ;
+/SFLO8 (sflo8.pfb) ;
+/SFLTT8 (sfltt8.pfb) ;
+/ISFLQ8 (isflq8.pfb) ;
+/ISFLI8 (isfli8.pfb) ;
+/ISFLB8 (isflb8.pfb) ;
+/ISFLO8 (isflo8.pfb) ;
+/ISFLTT8 (isfltt8.pfb) ;
+/SFSQ8 (sfsq8.pfb) ;
+/SFQI8 (sfqi8.pfb) ;
+/SFSSDC10 (sfssdc10.pfb) ;
+/SFORM5 (sform5.pfb) ;
+/SFORM6 (sform6.pfb) ;
+/SFORM7 (sform7.pfb) ;
+/SFORM8 (sform8.pfb) ;
+/SFORM9 (sform9.pfb) ;
+/SFORM10 (sform10.pfb) ;
+/SFOSL5 (sfosl5.pfb) ;
+/SFOSL6 (sfosl6.pfb) ;
+/SFOSL7 (sfosl7.pfb) ;
+/SFOSL8 (sfosl8.pfb) ;
+/SFOSL9 (sfosl9.pfb) ;
+/SFOSL10 (sfosl10.pfb) ;
+/SFOTI10 (sfoti10.pfb) ;
+/SFOCC10 (sfocc10.pfb) ;
+/SFBMR8 (sfbmr8.pfb) ;
+/SFBMR9 (sfbmr9.pfb) ;
+/SFBMR10 (sfbmr10.pfb) ;
+/SFBMR17 (sfbmr17.pfb) ;
+/SFBMO8 (sfbmo8.pfb) ;
+/SFBMO9 (sfbmo9.pfb) ;
+/SFBMO10 (sfbmo10.pfb) ;
+/SFBMO17 (sfbmo17.pfb) ;
+/SFBSR8 (sfbsr8.pfb) ;
+/SFBSR9 (sfbsr9.pfb) ;
+/SFBSR10 (sfbsr10.pfb) ;
+/SFBSR17 (sfbsr17.pfb) ;
+/SFBSO8 (sfbso8.pfb) ;
+/SFBSO9 (sfbso9.pfb) ;
+/SFBSO10 (sfbso10.pfb) ;
+/SFBSO17 (sfbso17.pfb) ;
+/SFBBX10 (sfbbx10.pfb) ;
+/SFBTL10 (sfbtl10.pfb) ;
+/SFBTO10 (sfbto10.pfb) ;
diff --git a/Master/texmf-dist/dvips/cm-super/config.cm-super b/Master/texmf-dist/dvips/cm-super/config.cm-super
new file mode 100644
index 00000000000..a85608db142
--- /dev/null
+++ b/Master/texmf-dist/dvips/cm-super/config.cm-super
@@ -0,0 +1,6 @@
+p +cm-super-t1.map
+p +cm-super-ts1.map
+p +cm-super-t2a.map
+p +cm-super-t2b.map
+p +cm-super-t2c.map
+p +cm-super-x2.map
diff --git a/Master/texmf-dist/dvips/cm/config.cm b/Master/texmf-dist/dvips/cm/config.cm
new file mode 100644
index 00000000000..acf60f825e8
--- /dev/null
+++ b/Master/texmf-dist/dvips/cm/config.cm
@@ -0,0 +1,7 @@
+% Thomas Esser, 1998, public domain.
+
+% Usage: dvips -Pcm
+% Purpose: instruct dvips to consider the cm fonts to be build in to
+% your ps interpreter or printer.
+
+p +psfonts.cm
diff --git a/Master/texmf-dist/dvips/cm/config.cmz b/Master/texmf-dist/dvips/cm/config.cmz
new file mode 100644
index 00000000000..4e7cee30a03
--- /dev/null
+++ b/Master/texmf-dist/dvips/cm/config.cmz
@@ -0,0 +1,10 @@
+% Thomas Esser, 1998, public domain.
+
+% Usage: dvips -Pcmz ...
+% Purpose: set up dvips to download the cm fonts as type 1 with your
+% document.
+% Note: this is superceeded by psfonts_t1.map resp. config.outline
+% resp. -Poutline.
+
+
+p +psfonts.cmz
diff --git a/Master/texmf-dist/dvips/colorsep/colorsep.pro b/Master/texmf-dist/dvips/colorsep/colorsep.pro
new file mode 100644
index 00000000000..d86b7110d74
--- /dev/null
+++ b/Master/texmf-dist/dvips/colorsep/colorsep.pro
@@ -0,0 +1,185 @@
+%!
+% Colour separation.
+% Ask dvips to do 4 pages. In bop-hook, cycle
+% round CMYK color spaces.
+%
+% Sebastian Rahtz 30.9.93
+% checked 7.1.94
+% from Green Book, and Kunkel Graphic Design with PostScript
+% (Green Book Listing 9-5, on page 153.)
+%
+% This work is placed in the public domain
+/seppages 0 def
+userdict begin
+/Min {% 3 items on stack
+2 copy lt { pop }{ exch pop } ifelse
+2 copy lt { pop }{ exch pop } ifelse
+} def
+/SetGray {
+ 1 exch sub systemdict begin adjustdot setgray end
+} def
+/sethsbcolor {systemdict begin
+ sethsbcolor currentrgbcolor end
+ userdict begin setrgbcolor end}def
+
+/ToCMYK
+% Red book p 305
+ {
+% subtract each colour from 1
+ 3 { 1 exch sub 3 1 roll } repeat
+% define percent of black undercolor
+% find minimum (k)
+ 3 copy Min
+% remove undercolor
+ blackUCR sub
+ dup 0 lt {pop 0} if
+ /percent_UCR exch def
+%
+% subtract that from each colour
+%
+ 3 { percent_UCR sub 3 1 roll } repeat
+% work out black itself
+ percent_UCR 1.25 mul % 1 exch sub
+% stack should now have C M Y K
+} def
+%
+% crop marks
+%
+/cX 18 def
+/CM{gsave TR 0 cX neg moveto 0 cX lineto stroke
+cX neg 0 moveto cX 0 lineto stroke grestore}def
+%
+/bop-hook{cX dup TR
+%
+% which page are we producing
+%
+ seppages 1 add
+ /seppages exch def
+ seppages 5 eq { /seppages 1 def } if
+ seppages 1 eq {
+ /ColourName (CYAN) def
+ CYAN setupcolor
+ /WhichColour 3 def } if
+ seppages 2 eq {
+ /ColourName (MAGENTA) def
+ MAGENTA setupcolor
+ /WhichColour 2 def } if
+ seppages 3 eq {
+ /ColourName (YELLOW) def
+ YELLOW setupcolor
+ /WhichColour 1 def } if
+ seppages 4 eq {
+ /ColourName (BLACK) def
+ BLACK setupcolor
+ /WhichColour 0 def } if
+%
+% crop marks
+%
+gsave .3 setlinewidth
+3 -7 moveto
+/Helvetica findfont 6 scalefont setfont
+ColourName show
+0 0 CM
+vsize cX 2 mul sub dup hsize cX 2 mul sub dup isls{4 2 roll}if 0 CM
+exch CM 0
+exch CM
+grestore 0 cX -2 mul TR isls
+{cX -2 mul 0 TR}if
+ } def end
+%
+/separations 48 dict def
+separations begin
+ /cmykprocs [ %def
+ % cyan
+ { pop pop pop SetGray }
+ % magenta
+ { pop pop exch pop SetGray }
+ % yellow
+ { pop 3 1 roll pop pop SetGray }
+ % black
+ { 4 1 roll pop pop pop SetGray }
+ ] def
+ /rgbprocs [ %def
+ % cyan
+ { ToCMYK pop pop pop SetGray }
+ % magenta
+ { ToCMYK pop pop exch pop SetGray }
+ % yellow
+ { ToCMYK pop 3 1 roll pop pop SetGray }
+ % black
+ { ToCMYK 4 1 roll pop pop pop SetGray }
+ ] def
+ /testprocs [ %def
+ % cyan
+ { ToCMYK pop pop pop }
+ % magenta
+ { ToCMYK pop pop exch pop }
+ % yellow
+ { ToCMYK pop 3 1 roll pop pop }
+ % black
+ { ToCMYK 4 1 roll pop pop pop }
+ ] def
+ /screenangles [ %def
+ 105 % cyan
+ 75 % magenta
+ 0 % yellow
+ 45 % black
+ ] def
+end % separations
+
+% setupcolortakes 0, 1, 2, or 3 as its argument,
+% for cyan, magenta, yellow, and black.
+/CYAN 0 def /MAGENTA 1 def
+/YELLOW 2 def /BLACK 3 def
+/setupcolor{ %def
+ userdict begin
+ dup separations /cmykprocs get exch get
+ /setcmykcolor exch def
+ dup separations /rgbprocs get exch get
+ /setrgbcolor exch def
+ dup separations /testprocs get exch get
+ /testrgbcolor exch def
+ separations /screenangles get exch get
+ currentscreen
+ exch pop 3 -1 roll exch
+ setscreen
+ /setscreen { pop pop pop } def
+%
+% redefine setgray so that it only shows on the black separation
+%
+ /setgray {
+ WhichColour 0 eq
+ {systemdict begin adjustdot setgray end}
+ {pop systemdict begin 1 setgray end}
+ ifelse}def
+ end
+} bind def
+
+%
+% from Kunkel
+%
+/adjustdot { dup 0 eq { } { dup 1 exch sub .1 mul add} ifelse } def
+%
+% redefine existing operators
+%
+% Percent of undercolor removal
+/magentaUCR .3 def
+/yellowUCR .07 def
+/blackUCR .4 def
+%
+% Correct yellow and magenta
+/correctMY {rgb2cym
+ 1 index yellowUCR mul sub 3 1 roll
+ 1 index magentaUCR mul sub 3 1 roll
+ 3 1 roll rgb2cym}def
+%
+%(bluely green ) =
+%CYAN setupcolor
+%.1 .4 .5 testrgbcolor =
+%MAGENTA setupcolor
+%.1 .4 .5 testrgbcolor =
+%YELLOW setupcolor
+%.1 .4 .5 testrgbcolor =
+%BLACK setupcolor
+%.1 .4 .5 testrgbcolor =
+%quit
diff --git a/Master/texmf-dist/dvips/courier/config.ucr b/Master/texmf-dist/dvips/courier/config.ucr
new file mode 100644
index 00000000000..00aeb2205ee
--- /dev/null
+++ b/Master/texmf-dist/dvips/courier/config.ucr
@@ -0,0 +1 @@
+p +ucr.map
diff --git a/Master/texmf-dist/dvips/cs/config.cs b/Master/texmf-dist/dvips/cs/config.cs
new file mode 100644
index 00000000000..c59c9f40044
--- /dev/null
+++ b/Master/texmf-dist/dvips/cs/config.cs
@@ -0,0 +1,2 @@
+p +csother.map
+p +cstext.map
diff --git a/Master/texmf-dist/dvips/esint-type1/config.esint b/Master/texmf-dist/dvips/esint-type1/config.esint
new file mode 100644
index 00000000000..29cc7a9ed8f
--- /dev/null
+++ b/Master/texmf-dist/dvips/esint-type1/config.esint
@@ -0,0 +1,2 @@
+
+p +esint.map
diff --git a/Master/texmf-dist/dvips/euclide/pst-eucl.pro b/Master/texmf-dist/dvips/euclide/pst-eucl.pro
new file mode 100644
index 00000000000..f453f20437c
--- /dev/null
+++ b/Master/texmf-dist/dvips/euclide/pst-eucl.pro
@@ -0,0 +1,112 @@
+%!
+% PostScript prologue for pst-eucl.tex.
+% Version 2001, 2001/12/09
+% For distribution, see pstricks.tex.
+%
+/tx@EcldDict 400 dict def tx@EcldDict begin
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Pi
+/Pi 3.14159265359 def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% e
+/E 2.718281828459045 def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% x -> true (if |x| < 1E-10)
+/ZeroEq { abs 1E-10 lt } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% x1 y1 x2 y2 -> a b c (ax+by+c=0)
+/EqDr {
+ 4 copy 3 -1 roll sub 7 1 roll exch sub 5 1 roll 4 -1 roll
+ mul 3 1 roll mul exch sub } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% orthogonal projection of M1 onto (OM2)
+%% x1 y1 x2 y2 -> x3 y3
+/Project {
+ 2 copy dup mul exch dup mul add 5 1 roll 2 copy 5 -1 roll mul exch
+ 5 -1 roll mul add 4 -1 roll div dup 4 -1 roll mul exch 3 -1 roll mul
+} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a b c (ax2+bx+c=0) -> x1 y1
+/SolvTrin {
+ /c exch def /b exch def /a exch def
+ b dup mul a c mul 4 mul sub dup 0 lt
+ { pop 0 0 } %% no solutions
+ {sqrt dup b neg add a 2 mul div exch b add neg 2 a mul div }
+ ifelse } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% x1 y1 x2 y2 -> Dist
+/ABDist { 3 -1 roll sub dup mul 3 1 roll sub dup mul add sqrt } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% x1 y1 x2 y2 -> x1-x2 y1-y2
+/ABVect { 3 -1 roll exch sub 3 1 roll sub exch } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% x1 y1 x2 y2 x3 y3 x4 y4 -> x y
+/InterLines {
+ EqDr /D1c exch def /D1b exch def /D1a exch def
+ EqDr /D2c exch def /D2b exch def /D2a exch def
+ D1a D2b mul D1b D2a mul sub dup ZeroEq
+ { pop pop pop 0 0 }
+ {
+ /Det exch def
+ D1b D2c mul D1c D2b mul sub Det div
+ D1a D2c mul D2a D1c mul sub Det div
+ }
+ ifelse } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a b c R -> x1 y1 x2 y2
+/InterLineCircle {
+ /CR exch def /Dc exch def /Db exch def /Da exch def
+ Db Da dup ZeroEq { pop Dc dup ZeroEq { pop 1 } if } if div abs
+ 0.0005 lt { InterLineCirclebnull } { InterLineCircleGal }
+ ifelse
+ %%dup 3 index lt { 4 2 roll } if
+ } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% case where the line is parallel to (oy)
+/InterLineCirclebnull {
+ Dc Da div neg dup dup mul CR dup mul exch sub dup
+ 0 lt
+ { pop pop 0 0 0 0 } { sqrt dup 3 1 roll exch dup 4 1 roll exch neg }
+ ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% general case
+/InterLineCircleGal {
+ Da dup mul Db dup mul add -2 Dc mul Da mul Dc dup mul CR dup mul Db dup
+ mul mul sub SolvTrin dup neg exch Da Db div mul Dc Db
+ div exch sub 3 -1 roll
+ dup neg exch Da Db div mul Dc Db div exch sub
+} bind def
+/Glbx 0 def /Glby 0 def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% R R' OO' -> x1 y1 x2 y2
+/InterCircles {
+ /OOP exch def /CRP exch def /CR exch def
+ OOP dup mul CRP dup mul sub CR dup mul add OOP div 2 div
+ dup dup mul CR dup mul exch sub dup
+ 0 lt { pop pop 0 0 0 0 } { sqrt 2 copy neg } ifelse
+} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% x y theta -> x' y' (rotation of theta)
+/Rotate {
+ dup sin /sintheta exch def cos /costheta exch def /y exch def /x exch def
+ x costheta mul y sintheta mul sub
+ y costheta mul x sintheta mul add
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% N -> x y
+/GetNode {
+ tx@NodeDict begin
+ tx@NodeDict 1 index known { load GetCenter } { pop 0 0 } ifelse
+ end
+} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% x -> ch(x)
+/ch { dup Ex exch neg Ex add 2 div } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% x -> sh(x)
+/sh { dup Ex exch neg Ex sub 2 div } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% x -> e^(x)
+/Ex { E exch exp } bind def
+end
+% END ps-euclide.pro
diff --git a/Master/texmf-dist/dvips/garuda/config.garuda b/Master/texmf-dist/dvips/garuda/config.garuda
new file mode 100644
index 00000000000..46dc65fc970
--- /dev/null
+++ b/Master/texmf-dist/dvips/garuda/config.garuda
@@ -0,0 +1 @@
+p +garuda.map
diff --git a/Master/texmf-dist/dvips/geomsty/illustrator.pro b/Master/texmf-dist/dvips/geomsty/illustrator.pro
new file mode 100644
index 00000000000..59fd05cfd75
--- /dev/null
+++ b/Master/texmf-dist/dvips/geomsty/illustrator.pro
@@ -0,0 +1,872 @@
+%%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
new file mode 100644
index 00000000000..e05e6c4bd3f
--- /dev/null
+++ b/Master/texmf-dist/dvips/geomsty/math.pro
@@ -0,0 +1,1752 @@
+% 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
diff --git a/Master/texmf-dist/dvips/gothic/config.yfrak b/Master/texmf-dist/dvips/gothic/config.yfrak
new file mode 100644
index 00000000000..142dbd2c727
--- /dev/null
+++ b/Master/texmf-dist/dvips/gothic/config.yfrak
@@ -0,0 +1 @@
+p +yfrak.map
diff --git a/Master/texmf-dist/dvips/grotesq/config.ugq b/Master/texmf-dist/dvips/grotesq/config.ugq
new file mode 100644
index 00000000000..8310ff1eb88
--- /dev/null
+++ b/Master/texmf-dist/dvips/grotesq/config.ugq
@@ -0,0 +1 @@
+p +ugq.map
diff --git a/Master/texmf-dist/dvips/helvetic/config.uhv b/Master/texmf-dist/dvips/helvetic/config.uhv
new file mode 100644
index 00000000000..c8b05e92905
--- /dev/null
+++ b/Master/texmf-dist/dvips/helvetic/config.uhv
@@ -0,0 +1 @@
+p +uhv.map
diff --git a/Master/texmf-dist/dvips/hfbright/config.hfbright b/Master/texmf-dist/dvips/hfbright/config.hfbright
new file mode 100644
index 00000000000..3085632aebf
--- /dev/null
+++ b/Master/texmf-dist/dvips/hfbright/config.hfbright
@@ -0,0 +1 @@
+p +hfbright.map
diff --git a/Master/texmf-dist/dvips/ibycus/config.iby b/Master/texmf-dist/dvips/ibycus/config.iby
new file mode 100644
index 00000000000..1c4aa7e73dc
--- /dev/null
+++ b/Master/texmf-dist/dvips/ibycus/config.iby
@@ -0,0 +1 @@
+p +iby.map
diff --git a/Master/texmf-dist/dvips/multi/2up.pro b/Master/texmf-dist/dvips/multi/2up.pro
new file mode 100644
index 00000000000..555d40e6456
--- /dev/null
+++ b/Master/texmf-dist/dvips/multi/2up.pro
@@ -0,0 +1,613 @@
+%!PS-Adobe-1.0
+%%Creator: Ross Cartlidge <rossc@extro.ucc.su.oz.au>
+%%Title: Multiple pages on one page
+%%CreationDate: Tue Apr 10 09:37:26 EST 1990
+%%Pages: 0
+%%DocumentFonts:
+%%BoundingBox: 0 0 0 0
+%%EndComments
+%
+% Uncomment the next line if you wish to load multi into the "exitserver"
+% state of the PostScript device
+% serverdict begin 0 exitserver
+%
+%
+% make each operator to overlay a procedure so a bind in
+% a prolog will not stop the overlaying by "multi"
+%
+
+[
+ /gsave
+ /grestore
+ /grestoreall
+ /initgraphics
+ /initmatrix
+ /currentmatrix
+ /setmatrix
+ % Path construction operators
+ /initclip
+ % Virtual memory operators
+ /save
+ % ones which needed special overloading
+ /showpage
+ /erasepage
+ /copypage
+ /restore
+ % ignore these
+ /letter
+ /legal
+ /a4
+ /b5
+ /lettersmall
+ /note
+]
+{
+% if exists check if operator else define {}
+ dup where
+ {
+ pop
+% If operator then make into procedure
+ dup load type /operatortype eq
+ {
+ 1 array cvx dup
+ 0
+ 3 index cvx % /n -> n
+ put % {}[0] -> n
+ bind
+ def
+ }
+ {
+ pop
+ }
+ ifelse
+ }
+ {
+ {} def
+ }
+ ifelse
+}
+forall
+
+%
+% Initialise endmulti to execute an error
+%
+/endmulti
+{
+ count array astore /ostack exch def
+ 250 array execstack /estack exch def
+ 20 array dictstack /dstack exch def
+ $error /newerror true put
+ $error /errorname (No matching multi) cvn put
+ $error /command (endmulti) put
+ $error /ostack ostack put
+ $error /estack estack put
+ $error /dstack dstack put
+ stop
+}
+bind
+def
+
+%
+% Put multiple logical pages on one physical page
+% until "endmulti" called
+%
+% landscape nrows ncols left_right up_down row_major dividers multi -
+% landscape nrows ncols up_down row_major dividers multi -
+% landscape nrows ncols row_major dividers multi -
+% landscape nrows ncols dividers multi -
+% landscape nrows ncols multi -
+%
+% Go into multi page representation
+%
+% landscape boolean:true - divide page in landscape orientation
+% false- divide page in portrait orirntation
+% nrows integer:number of logical pages down physical page
+% ncols integer:number of logical pages across physical page
+% left_right(*) boolean:true - rows fill left to right
+% false- rows fill right to left
+% up_down(*) boolean:true - columsn fill top to bottom
+% false- columns fill bottom to top
+% row_major(*) boolean:true - fill rowwise
+% false- fill columnwise
+% dividers(*) boolean:true - divide logical pages by lines
+% false- don't divide logical pages
+%
+% NB: Optional parameters(*) default to true.
+%
+/multi
+{
+ currentdict
+ 64 dict begin
+ /initdict exch def % store initial dict for backward reference
+%
+% Initialise the Optional Parameters (right to left)
+%
+ [
+ /dividers
+ /row_major
+ /up_down
+ /left_right
+ ]
+ {
+ exch dup type /booleantype ne
+ {
+ exch % put non bool back
+ true def % default to true
+ }
+ {
+ def
+ }
+ ifelse
+
+ }
+ forall
+ /cols exch def
+ /rows exch def
+
+%
+% get size of current page
+%
+ initgraphics clippath pathbbox
+ /Y exch def % Max Y
+ /X exch def % Max X
+ /y exch def % Min Y
+ /x exch def % Min X
+ /W X x add def % Width of Page
+ /H Y y add def % Height of page
+
+%
+% functions to turn page# into row and column
+% depending on whether rows or cols fill first
+%
+ row_major
+ {
+ /tocol { cols mod } def
+ /torow { cols idiv } def
+ }
+ {
+ /tocol { rows idiv } def
+ /torow { rows mod } def
+ }
+ ifelse
+% if landscape
+ {
+%
+% Note: x and y are reversed
+%
+ /w Y y sub def % Width of imageable region
+ /h X x sub def % Height of imageable region
+ /ox y def % origin of physical page
+ /oy x def
+ /L % Map to landscape
+ -90 matrix rotate
+ 0 H matrix translate
+ matrix concatmatrix
+ def
+ }
+ {
+ /w X x sub def
+ /h Y y sub def
+ /ox x def
+ /oy y def
+ /L matrix def
+ }
+ ifelse
+%
+% Calculate origin fudge so that scaled margin = fudge
+% This means that the clippath of the logical page
+% will align with the physical clippath.
+% (wf/W)x = xf where,
+% wf = new width = w + 2xf,
+% x = margin xf = scaled margin
+% so xf = wx/(COLS.W-2x)
+
+ /xf w x mul W cols mul 2 x mul sub div def
+ /yf h y mul H rows mul 2 y mul sub div def
+ /w w 2 xf mul add def
+ /h h 2 yf mul add def
+
+%
+% CTM (multi) = C x T x M x L x I
+% CTM (normal) = C x I
+% CTM (normal) = CTM (multi) x (T x M x L x I)-1 x I
+% M = (Scale rows/cols) x (Scale logical to physical) x
+% (Translate to physical clip origin + fudge)
+% T = (Convert logical page to spot and physical)
+% L = (Convert to landscape)
+% I = Initial Physical CTM
+% C = Random transform on logical page
+
+ /M
+ w W div cols div
+ h H div rows div
+ matrix scale
+ ox xf sub oy yf sub matrix translate % Move to origin
+ matrix concatmatrix
+ def
+ /I
+ matrix currentmatrix
+ def
+ /I_inv
+ I matrix invertmatrix
+ def
+
+% matrix T <current T>
+ /T
+ {
+ page# tocol
+ left_right not
+ {
+ cols 1 sub exch sub
+ }
+ if
+ W mul
+ page# torow
+ up_down
+ {
+ rows 1 sub exch sub
+ }
+ if
+ H mul
+ 3 -1 roll translate
+ }
+ def
+
+%
+% Utility functions
+% NB: *_t1 are temporary variables
+%
+
+% matrix fromcanon <I-1 x T x M x L x I>
+ /From_t1 matrix def
+ /From_t2 matrix def
+ /From_t3 matrix def
+ /From_t4 matrix def
+ /fromcanon
+ {
+ I_inv
+ From_t1 T
+ M
+ L
+ I
+ From_t2 concatmatrix
+ From_t3 concatmatrix
+ From_t4 concatmatrix
+ 3 -1 roll concatmatrix
+ }
+ def
+
+% /n {} mkmulti -
+% makes a new function called "n" in previous dict with:-
+% {}[0] = /n
+% {}[1] = currentdict
+% currentdict.n = prevdict.n
+%
+ /mkmulti
+ {
+ 1 index dup load def %define old val in current dict
+ 5 array cvx
+ dup 3 4 -1 roll put % A[3] = {}
+ dup 0 3 index put % A[0] = /n
+ dup 1 currentdict put % A[1] = currentdict
+ dup 2 /begin cvx put % A[2] = begin
+ dup 4 /exec cvx put % A[4] = exec
+ initdict 3 1 roll
+ put % define initdict.n to multi function
+ }
+ def
+
+%
+% path_to_proc {}
+% make proc represenation of current path
+%
+ /path_to_proc
+ {
+ {
+ [
+ /newpath cvx
+ { /moveto cvx}
+ { /lineto cvx}
+ { /curveto cvx}
+ { /closepath cvx }
+ pathforall
+ ]
+ cvx
+ exch pop
+ }
+ stopped
+ {
+ $error /errorname get /invalidaccess eq
+ {
+ cleartomark
+ $error /newerror false put
+ (%%Warning%% charpath in path - path nulled) =
+ cvx exec
+ }
+ {
+ stop
+ }
+ ifelse
+ }
+ if
+ }
+ def
+ /path_def
+ {
+ { currentpoint } stopped
+ {
+ $error /newerror false put
+ { newpath }
+ }
+ {
+ /newpath cvx 3 1 roll /moveto cvx 4 array astore cvx
+ }
+ ifelse
+ }
+ cvlit def
+
+%
+% Draw lines round logical pages
+%
+ /draw_dividers
+ {
+ initgraphics
+ L concat
+ M concat
+ 1 1 cols 1 sub
+ {
+ W mul
+ dup
+ 0 moveto
+ rows H mul lineto
+ }
+ for
+ 1 1 rows 1 sub
+ {
+ H mul
+ dup
+ 0 exch moveto
+ cols W mul exch lineto
+ }
+ for
+ stroke
+ }
+ def
+
+%
+% for each graphics operator which affects absolute state
+%
+ /M1 matrix def
+ /M3 matrix def
+ /M2 matrix def
+ [
+ /gsave
+ /grestore
+ /grestoreall
+ /initgraphics
+ /initmatrix
+ /currentmatrix
+ /setmatrix
+ % Path construction operators
+ /initclip
+ % Virtual memory operators
+ /save
+ ]
+ {
+ {
+% Save paths
+ path_def path_to_proc
+ clippath { {} } path_to_proc
+
+%
+% CTM <- CTM x Tocano (canon mode)
+%
+ M1 currentmatrix
+ Tocanon
+ M2
+ concatmatrix
+ setmatrix
+
+% Restore paths
+ initclip exec clip
+ exec
+
+ load exec
+
+% Save paths
+ path_def path_to_proc
+ clippath { {} } path_to_proc
+
+%
+% CTM <- CTM x Fromcanon (Non canon mode)
+%
+ M1 currentmatrix
+ Fromcanon
+ M2
+ concatmatrix
+ setmatrix
+
+% Restore paths
+ initclip exec clip
+ exec
+ end
+ }
+ mkmulti
+ }
+ forall
+
+%
+% Define the operators which can't use the standard template
+%
+ /showpage
+ {
+ /page# page# 1 add def
+
+% Update the transform matrices
+ page# npages eq
+ {
+ dividers
+ {
+ draw_dividers
+ }
+ if
+ load exec % the previous showpage
+ /page# 0 def
+ }
+ {
+ pop
+ }
+ ifelse
+ /Fromcanon Fromcanon fromcanon def
+ /Tocanon Fromcanon Tocanon invertmatrix def
+ end
+ initgraphics % the new initgraphics
+ }
+ mkmulti
+
+ /copypage
+ {
+ pop
+ end
+ gsave
+ showpage
+ grestore
+ }
+ mkmulti
+
+ /erasepage
+ {
+ pop
+ end
+ gsave
+ initclip
+ clippath
+ 1 setgray fill
+ grestore
+ }
+ mkmulti
+ [
+ /letter
+ /legal
+ /a4
+ /b5
+ /lettersmall
+ /note
+ ]
+ {
+ {
+ pop end
+ (%%Warning%% Device change ignored) =
+ }
+ mkmulti
+ }
+ forall
+
+%
+% Define restore separately as it affects the value of page#, etc
+%
+ /restore
+ {
+ pop
+% Push the values to restore after restore
+ mark exch % put mark under -save-
+ page#
+ Fromcanon aload pop
+ Tocanon aload pop
+
+ counttomark -1 roll % get -save- to the top
+ restore
+
+% Restore popped values
+ Tocanon astore pop
+ Fromcanon astore pop
+ /page# exch def
+ pop % mark
+
+% Save paths
+ path_def path_to_proc
+ clippath { { } } path_to_proc
+
+%
+% CTM <- CTM x Fromcanon (Non canon mode)
+%
+ M1 currentmatrix
+ Fromcanon
+ M2
+ concatmatrix
+ setmatrix
+
+% Restore paths
+ initclip exec clip
+ exec
+ end
+ }
+ mkmulti
+%
+% procedure to undo the effect of multi
+%
+ /endmulti
+ {
+ pop % don't need /endmulti
+ [
+ /gsave
+ /grestore
+ /grestoreall
+ /initgraphics
+ /initmatrix
+ /currentmatrix
+ /setmatrix
+ % Path construction operators
+ /initclip
+ % Virtual memory operators
+ /save
+ % ones which needed special overloading
+ /showpage
+ /erasepage
+ /copypage
+ /restore
+ % ignore these
+ /letter
+ /legal
+ /a4
+ /b5
+ /lettersmall
+ /note
+ %
+ /endmulti
+ ]
+ {
+ initdict exch
+ dup load % get old value
+ put % restore old value
+ }
+ forall
+ page# 0 ne % if not at new page show uncomplete page
+ {
+ dividers
+ {
+ draw_dividers
+ }
+ if
+ showpage
+ }
+ if
+ end
+ }
+ mkmulti
+
+%
+% Set up in multi(non canon) mode
+%
+ /page# 0 def
+ /npages rows cols mul def
+ /Fromcanon matrix fromcanon def
+ /Tocanon Fromcanon matrix invertmatrix def
+ end
+ initgraphics
+}
+bind
+def
+%%%%%%%%
+/end-hook { endmulti } def
+
+true 1 2 multi
diff --git a/Master/texmf-dist/dvips/multi/4up.pro b/Master/texmf-dist/dvips/multi/4up.pro
new file mode 100644
index 00000000000..31578b6f11c
--- /dev/null
+++ b/Master/texmf-dist/dvips/multi/4up.pro
@@ -0,0 +1,613 @@
+%!PS-Adobe-1.0
+%%Creator: Ross Cartlidge <rossc@extro.ucc.su.oz.au>
+%%Title: Multiple pages on one page
+%%CreationDate: Tue Apr 10 09:37:26 EST 1990
+%%Pages: 0
+%%DocumentFonts:
+%%BoundingBox: 0 0 0 0
+%%EndComments
+%
+% Uncomment the next line if you wish to load multi into the "exitserver"
+% state of the PostScript device
+% serverdict begin 0 exitserver
+%
+%
+% make each operator to overlay a procedure so a bind in
+% a prolog will not stop the overlaying by "multi"
+%
+
+[
+ /gsave
+ /grestore
+ /grestoreall
+ /initgraphics
+ /initmatrix
+ /currentmatrix
+ /setmatrix
+ % Path construction operators
+ /initclip
+ % Virtual memory operators
+ /save
+ % ones which needed special overloading
+ /showpage
+ /erasepage
+ /copypage
+ /restore
+ % ignore these
+ /letter
+ /legal
+ /a4
+ /b5
+ /lettersmall
+ /note
+]
+{
+% if exists check if operator else define {}
+ dup where
+ {
+ pop
+% If operator then make into procedure
+ dup load type /operatortype eq
+ {
+ 1 array cvx dup
+ 0
+ 3 index cvx % /n -> n
+ put % {}[0] -> n
+ bind
+ def
+ }
+ {
+ pop
+ }
+ ifelse
+ }
+ {
+ {} def
+ }
+ ifelse
+}
+forall
+
+%
+% Initialise endmulti to execute an error
+%
+/endmulti
+{
+ count array astore /ostack exch def
+ 250 array execstack /estack exch def
+ 20 array dictstack /dstack exch def
+ $error /newerror true put
+ $error /errorname (No matching multi) cvn put
+ $error /command (endmulti) put
+ $error /ostack ostack put
+ $error /estack estack put
+ $error /dstack dstack put
+ stop
+}
+bind
+def
+
+%
+% Put multiple logical pages on one physical page
+% until "endmulti" called
+%
+% landscape nrows ncols left_right up_down row_major dividers multi -
+% landscape nrows ncols up_down row_major dividers multi -
+% landscape nrows ncols row_major dividers multi -
+% landscape nrows ncols dividers multi -
+% landscape nrows ncols multi -
+%
+% Go into multi page representation
+%
+% landscape boolean:true - divide page in landscape orientation
+% false- divide page in portrait orirntation
+% nrows integer:number of logical pages down physical page
+% ncols integer:number of logical pages across physical page
+% left_right(*) boolean:true - rows fill left to right
+% false- rows fill right to left
+% up_down(*) boolean:true - columsn fill top to bottom
+% false- columns fill bottom to top
+% row_major(*) boolean:true - fill rowwise
+% false- fill columnwise
+% dividers(*) boolean:true - divide logical pages by lines
+% false- don't divide logical pages
+%
+% NB: Optional parameters(*) default to true.
+%
+/multi
+{
+ currentdict
+ 64 dict begin
+ /initdict exch def % store initial dict for backward reference
+%
+% Initialise the Optional Parameters (right to left)
+%
+ [
+ /dividers
+ /row_major
+ /up_down
+ /left_right
+ ]
+ {
+ exch dup type /booleantype ne
+ {
+ exch % put non bool back
+ true def % default to true
+ }
+ {
+ def
+ }
+ ifelse
+
+ }
+ forall
+ /cols exch def
+ /rows exch def
+
+%
+% get size of current page
+%
+ initgraphics clippath pathbbox
+ /Y exch def % Max Y
+ /X exch def % Max X
+ /y exch def % Min Y
+ /x exch def % Min X
+ /W X x add def % Width of Page
+ /H Y y add def % Height of page
+
+%
+% functions to turn page# into row and column
+% depending on whether rows or cols fill first
+%
+ row_major
+ {
+ /tocol { cols mod } def
+ /torow { cols idiv } def
+ }
+ {
+ /tocol { rows idiv } def
+ /torow { rows mod } def
+ }
+ ifelse
+% if landscape
+ {
+%
+% Note: x and y are reversed
+%
+ /w Y y sub def % Width of imageable region
+ /h X x sub def % Height of imageable region
+ /ox y def % origin of physical page
+ /oy x def
+ /L % Map to landscape
+ -90 matrix rotate
+ 0 H matrix translate
+ matrix concatmatrix
+ def
+ }
+ {
+ /w X x sub def
+ /h Y y sub def
+ /ox x def
+ /oy y def
+ /L matrix def
+ }
+ ifelse
+%
+% Calculate origin fudge so that scaled margin = fudge
+% This means that the clippath of the logical page
+% will align with the physical clippath.
+% (wf/W)x = xf where,
+% wf = new width = w + 2xf,
+% x = margin xf = scaled margin
+% so xf = wx/(COLS.W-2x)
+
+ /xf w x mul W cols mul 2 x mul sub div def
+ /yf h y mul H rows mul 2 y mul sub div def
+ /w w 2 xf mul add def
+ /h h 2 yf mul add def
+
+%
+% CTM (multi) = C x T x M x L x I
+% CTM (normal) = C x I
+% CTM (normal) = CTM (multi) x (T x M x L x I)-1 x I
+% M = (Scale rows/cols) x (Scale logical to physical) x
+% (Translate to physical clip origin + fudge)
+% T = (Convert logical page to spot and physical)
+% L = (Convert to landscape)
+% I = Initial Physical CTM
+% C = Random transform on logical page
+
+ /M
+ w W div cols div
+ h H div rows div
+ matrix scale
+ ox xf sub oy yf sub matrix translate % Move to origin
+ matrix concatmatrix
+ def
+ /I
+ matrix currentmatrix
+ def
+ /I_inv
+ I matrix invertmatrix
+ def
+
+% matrix T <current T>
+ /T
+ {
+ page# tocol
+ left_right not
+ {
+ cols 1 sub exch sub
+ }
+ if
+ W mul
+ page# torow
+ up_down
+ {
+ rows 1 sub exch sub
+ }
+ if
+ H mul
+ 3 -1 roll translate
+ }
+ def
+
+%
+% Utility functions
+% NB: *_t1 are temporary variables
+%
+
+% matrix fromcanon <I-1 x T x M x L x I>
+ /From_t1 matrix def
+ /From_t2 matrix def
+ /From_t3 matrix def
+ /From_t4 matrix def
+ /fromcanon
+ {
+ I_inv
+ From_t1 T
+ M
+ L
+ I
+ From_t2 concatmatrix
+ From_t3 concatmatrix
+ From_t4 concatmatrix
+ 3 -1 roll concatmatrix
+ }
+ def
+
+% /n {} mkmulti -
+% makes a new function called "n" in previous dict with:-
+% {}[0] = /n
+% {}[1] = currentdict
+% currentdict.n = prevdict.n
+%
+ /mkmulti
+ {
+ 1 index dup load def %define old val in current dict
+ 5 array cvx
+ dup 3 4 -1 roll put % A[3] = {}
+ dup 0 3 index put % A[0] = /n
+ dup 1 currentdict put % A[1] = currentdict
+ dup 2 /begin cvx put % A[2] = begin
+ dup 4 /exec cvx put % A[4] = exec
+ initdict 3 1 roll
+ put % define initdict.n to multi function
+ }
+ def
+
+%
+% path_to_proc {}
+% make proc represenation of current path
+%
+ /path_to_proc
+ {
+ {
+ [
+ /newpath cvx
+ { /moveto cvx}
+ { /lineto cvx}
+ { /curveto cvx}
+ { /closepath cvx }
+ pathforall
+ ]
+ cvx
+ exch pop
+ }
+ stopped
+ {
+ $error /errorname get /invalidaccess eq
+ {
+ cleartomark
+ $error /newerror false put
+ (%%Warning%% charpath in path - path nulled) =
+ cvx exec
+ }
+ {
+ stop
+ }
+ ifelse
+ }
+ if
+ }
+ def
+ /path_def
+ {
+ { currentpoint } stopped
+ {
+ $error /newerror false put
+ { newpath }
+ }
+ {
+ /newpath cvx 3 1 roll /moveto cvx 4 array astore cvx
+ }
+ ifelse
+ }
+ cvlit def
+
+%
+% Draw lines round logical pages
+%
+ /draw_dividers
+ {
+ initgraphics
+ L concat
+ M concat
+ 1 1 cols 1 sub
+ {
+ W mul
+ dup
+ 0 moveto
+ rows H mul lineto
+ }
+ for
+ 1 1 rows 1 sub
+ {
+ H mul
+ dup
+ 0 exch moveto
+ cols W mul exch lineto
+ }
+ for
+ stroke
+ }
+ def
+
+%
+% for each graphics operator which affects absolute state
+%
+ /M1 matrix def
+ /M3 matrix def
+ /M2 matrix def
+ [
+ /gsave
+ /grestore
+ /grestoreall
+ /initgraphics
+ /initmatrix
+ /currentmatrix
+ /setmatrix
+ % Path construction operators
+ /initclip
+ % Virtual memory operators
+ /save
+ ]
+ {
+ {
+% Save paths
+ path_def path_to_proc
+ clippath { {} } path_to_proc
+
+%
+% CTM <- CTM x Tocano (canon mode)
+%
+ M1 currentmatrix
+ Tocanon
+ M2
+ concatmatrix
+ setmatrix
+
+% Restore paths
+ initclip exec clip
+ exec
+
+ load exec
+
+% Save paths
+ path_def path_to_proc
+ clippath { {} } path_to_proc
+
+%
+% CTM <- CTM x Fromcanon (Non canon mode)
+%
+ M1 currentmatrix
+ Fromcanon
+ M2
+ concatmatrix
+ setmatrix
+
+% Restore paths
+ initclip exec clip
+ exec
+ end
+ }
+ mkmulti
+ }
+ forall
+
+%
+% Define the operators which can't use the standard template
+%
+ /showpage
+ {
+ /page# page# 1 add def
+
+% Update the transform matrices
+ page# npages eq
+ {
+ dividers
+ {
+ draw_dividers
+ }
+ if
+ load exec % the previous showpage
+ /page# 0 def
+ }
+ {
+ pop
+ }
+ ifelse
+ /Fromcanon Fromcanon fromcanon def
+ /Tocanon Fromcanon Tocanon invertmatrix def
+ end
+ initgraphics % the new initgraphics
+ }
+ mkmulti
+
+ /copypage
+ {
+ pop
+ end
+ gsave
+ showpage
+ grestore
+ }
+ mkmulti
+
+ /erasepage
+ {
+ pop
+ end
+ gsave
+ initclip
+ clippath
+ 1 setgray fill
+ grestore
+ }
+ mkmulti
+ [
+ /letter
+ /legal
+ /a4
+ /b5
+ /lettersmall
+ /note
+ ]
+ {
+ {
+ pop end
+ (%%Warning%% Device change ignored) =
+ }
+ mkmulti
+ }
+ forall
+
+%
+% Define restore separately as it affects the value of page#, etc
+%
+ /restore
+ {
+ pop
+% Push the values to restore after restore
+ mark exch % put mark under -save-
+ page#
+ Fromcanon aload pop
+ Tocanon aload pop
+
+ counttomark -1 roll % get -save- to the top
+ restore
+
+% Restore popped values
+ Tocanon astore pop
+ Fromcanon astore pop
+ /page# exch def
+ pop % mark
+
+% Save paths
+ path_def path_to_proc
+ clippath { { } } path_to_proc
+
+%
+% CTM <- CTM x Fromcanon (Non canon mode)
+%
+ M1 currentmatrix
+ Fromcanon
+ M2
+ concatmatrix
+ setmatrix
+
+% Restore paths
+ initclip exec clip
+ exec
+ end
+ }
+ mkmulti
+%
+% procedure to undo the effect of multi
+%
+ /endmulti
+ {
+ pop % don't need /endmulti
+ [
+ /gsave
+ /grestore
+ /grestoreall
+ /initgraphics
+ /initmatrix
+ /currentmatrix
+ /setmatrix
+ % Path construction operators
+ /initclip
+ % Virtual memory operators
+ /save
+ % ones which needed special overloading
+ /showpage
+ /erasepage
+ /copypage
+ /restore
+ % ignore these
+ /letter
+ /legal
+ /a4
+ /b5
+ /lettersmall
+ /note
+ %
+ /endmulti
+ ]
+ {
+ initdict exch
+ dup load % get old value
+ put % restore old value
+ }
+ forall
+ page# 0 ne % if not at new page show uncomplete page
+ {
+ dividers
+ {
+ draw_dividers
+ }
+ if
+ showpage
+ }
+ if
+ end
+ }
+ mkmulti
+
+%
+% Set up in multi(non canon) mode
+%
+ /page# 0 def
+ /npages rows cols mul def
+ /Fromcanon matrix fromcanon def
+ /Tocanon Fromcanon matrix invertmatrix def
+ end
+ initgraphics
+}
+bind
+def
+%%%%%%%%
+/end-hook { endmulti } def
+
+false 2 2 multi \ No newline at end of file
diff --git a/Master/texmf-dist/dvips/multi/multi.pro b/Master/texmf-dist/dvips/multi/multi.pro
new file mode 100644
index 00000000000..af469ed011e
--- /dev/null
+++ b/Master/texmf-dist/dvips/multi/multi.pro
@@ -0,0 +1,609 @@
+%!PS-Adobe-1.0
+%%Creator: Ross Cartlidge <rossc@extro.ucc.su.oz.au>
+%%Title: Multiple pages on one page
+%%CreationDate: Tue Apr 10 09:37:26 EST 1990
+%%Pages: 0
+%%DocumentFonts:
+%%BoundingBox: 0 0 0 0
+%%EndComments
+%
+% Uncomment the next line if you wish to load multi into the "exitserver"
+% state of the PostScript device
+% serverdict begin 0 exitserver
+%
+%
+% make each operator to overlay a procedure so a bind in
+% a prolog will not stop the overlaying by "multi"
+%
+
+[
+ /gsave
+ /grestore
+ /grestoreall
+ /initgraphics
+ /initmatrix
+ /currentmatrix
+ /setmatrix
+ % Path construction operators
+ /initclip
+ % Virtual memory operators
+ /save
+ % ones which needed special overloading
+ /showpage
+ /erasepage
+ /copypage
+ /restore
+ % ignore these
+ /letter
+ /legal
+ /a4
+ /b5
+ /lettersmall
+ /note
+]
+{
+% if exists check if operator else define {}
+ dup where
+ {
+ pop
+% If operator then make into procedure
+ dup load type /operatortype eq
+ {
+ 1 array cvx dup
+ 0
+ 3 index cvx % /n -> n
+ put % {}[0] -> n
+ bind
+ def
+ }
+ {
+ pop
+ }
+ ifelse
+ }
+ {
+ {} def
+ }
+ ifelse
+}
+forall
+
+%
+% Initialise endmulti to execute an error
+%
+/endmulti
+{
+ count array astore /ostack exch def
+ 250 array execstack /estack exch def
+ 20 array dictstack /dstack exch def
+ $error /newerror true put
+ $error /errorname (No matching multi) cvn put
+ $error /command (endmulti) put
+ $error /ostack ostack put
+ $error /estack estack put
+ $error /dstack dstack put
+ stop
+}
+bind
+def
+
+%
+% Put multiple logical pages on one physical page
+% until "endmulti" called
+%
+% landscape nrows ncols left_right up_down row_major dividers multi -
+% landscape nrows ncols up_down row_major dividers multi -
+% landscape nrows ncols row_major dividers multi -
+% landscape nrows ncols dividers multi -
+% landscape nrows ncols multi -
+%
+% Go into multi page representation
+%
+% landscape boolean:true - divide page in landscape orientation
+% false- divide page in portrait orirntation
+% nrows integer:number of logical pages down physical page
+% ncols integer:number of logical pages across physical page
+% left_right(*) boolean:true - rows fill left to right
+% false- rows fill right to left
+% up_down(*) boolean:true - columsn fill top to bottom
+% false- columns fill bottom to top
+% row_major(*) boolean:true - fill rowwise
+% false- fill columnwise
+% dividers(*) boolean:true - divide logical pages by lines
+% false- don't divide logical pages
+%
+% NB: Optional parameters(*) default to true.
+%
+/multi
+{
+ currentdict
+ 64 dict begin
+ /initdict exch def % store initial dict for backward reference
+%
+% Initialise the Optional Parameters (right to left)
+%
+ [
+ /dividers
+ /row_major
+ /up_down
+ /left_right
+ ]
+ {
+ exch dup type /booleantype ne
+ {
+ exch % put non bool back
+ true def % default to true
+ }
+ {
+ def
+ }
+ ifelse
+
+ }
+ forall
+ /cols exch def
+ /rows exch def
+
+%
+% get size of current page
+%
+ initgraphics clippath pathbbox
+ /Y exch def % Max Y
+ /X exch def % Max X
+ /y exch def % Min Y
+ /x exch def % Min X
+ /W X x add def % Width of Page
+ /H Y y add def % Height of page
+
+%
+% functions to turn page# into row and column
+% depending on whether rows or cols fill first
+%
+ row_major
+ {
+ /tocol { cols mod } def
+ /torow { cols idiv } def
+ }
+ {
+ /tocol { rows idiv } def
+ /torow { rows mod } def
+ }
+ ifelse
+% if landscape
+ {
+%
+% Note: x and y are reversed
+%
+ /w Y y sub def % Width of imageable region
+ /h X x sub def % Height of imageable region
+ /ox y def % origin of physical page
+ /oy x def
+ /L % Map to landscape
+ -90 matrix rotate
+ 0 H matrix translate
+ matrix concatmatrix
+ def
+ }
+ {
+ /w X x sub def
+ /h Y y sub def
+ /ox x def
+ /oy y def
+ /L matrix def
+ }
+ ifelse
+%
+% Calculate origin fudge so that scaled margin = fudge
+% This means that the clippath of the logical page
+% will align with the physical clippath.
+% (wf/W)x = xf where,
+% wf = new width = w + 2xf,
+% x = margin xf = scaled margin
+% so xf = wx/(COLS.W-2x)
+
+ /xf w x mul W cols mul 2 x mul sub div def
+ /yf h y mul H rows mul 2 y mul sub div def
+ /w w 2 xf mul add def
+ /h h 2 yf mul add def
+
+%
+% CTM (multi) = C x T x M x L x I
+% CTM (normal) = C x I
+% CTM (normal) = CTM (multi) x (T x M x L x I)-1 x I
+% M = (Scale rows/cols) x (Scale logical to physical) x
+% (Translate to physical clip origin + fudge)
+% T = (Convert logical page to spot and physical)
+% L = (Convert to landscape)
+% I = Initial Physical CTM
+% C = Random transform on logical page
+
+ /M
+ w W div cols div
+ h H div rows div
+ matrix scale
+ ox xf sub oy yf sub matrix translate % Move to origin
+ matrix concatmatrix
+ def
+ /I
+ matrix currentmatrix
+ def
+ /I_inv
+ I matrix invertmatrix
+ def
+
+% matrix T <current T>
+ /T
+ {
+ page# tocol
+ left_right not
+ {
+ cols 1 sub exch sub
+ }
+ if
+ W mul
+ page# torow
+ up_down
+ {
+ rows 1 sub exch sub
+ }
+ if
+ H mul
+ 3 -1 roll translate
+ }
+ def
+
+%
+% Utility functions
+% NB: *_t1 are temporary variables
+%
+
+% matrix fromcanon <I-1 x T x M x L x I>
+ /From_t1 matrix def
+ /From_t2 matrix def
+ /From_t3 matrix def
+ /From_t4 matrix def
+ /fromcanon
+ {
+ I_inv
+ From_t1 T
+ M
+ L
+ I
+ From_t2 concatmatrix
+ From_t3 concatmatrix
+ From_t4 concatmatrix
+ 3 -1 roll concatmatrix
+ }
+ def
+
+% /n {} mkmulti -
+% makes a new function called "n" in previous dict with:-
+% {}[0] = /n
+% {}[1] = currentdict
+% currentdict.n = prevdict.n
+%
+ /mkmulti
+ {
+ 1 index dup load def %define old val in current dict
+ 5 array cvx
+ dup 3 4 -1 roll put % A[3] = {}
+ dup 0 3 index put % A[0] = /n
+ dup 1 currentdict put % A[1] = currentdict
+ dup 2 /begin cvx put % A[2] = begin
+ dup 4 /exec cvx put % A[4] = exec
+ initdict 3 1 roll
+ put % define initdict.n to multi function
+ }
+ def
+
+%
+% path_to_proc {}
+% make proc represenation of current path
+%
+ /path_to_proc
+ {
+ {
+ [
+ /newpath cvx
+ { /moveto cvx}
+ { /lineto cvx}
+ { /curveto cvx}
+ { /closepath cvx }
+ pathforall
+ ]
+ cvx
+ exch pop
+ }
+ stopped
+ {
+ $error /errorname get /invalidaccess eq
+ {
+ cleartomark
+ $error /newerror false put
+ (%%Warning%% charpath in path - path nulled) =
+ cvx exec
+ }
+ {
+ stop
+ }
+ ifelse
+ }
+ if
+ }
+ def
+ /path_def
+ {
+ { currentpoint } stopped
+ {
+ $error /newerror false put
+ { newpath }
+ }
+ {
+ /newpath cvx 3 1 roll /moveto cvx 4 array astore cvx
+ }
+ ifelse
+ }
+ cvlit def
+
+%
+% Draw lines round logical pages
+%
+ /draw_dividers
+ {
+ initgraphics
+ L concat
+ M concat
+ 1 1 cols 1 sub
+ {
+ W mul
+ dup
+ 0 moveto
+ rows H mul lineto
+ }
+ for
+ 1 1 rows 1 sub
+ {
+ H mul
+ dup
+ 0 exch moveto
+ cols W mul exch lineto
+ }
+ for
+ stroke
+ }
+ def
+
+%
+% for each graphics operator which affects absolute state
+%
+ /M1 matrix def
+ /M3 matrix def
+ /M2 matrix def
+ [
+ /gsave
+ /grestore
+ /grestoreall
+ /initgraphics
+ /initmatrix
+ /currentmatrix
+ /setmatrix
+ % Path construction operators
+ /initclip
+ % Virtual memory operators
+ /save
+ ]
+ {
+ {
+% Save paths
+ path_def path_to_proc
+ clippath { {} } path_to_proc
+
+%
+% CTM <- CTM x Tocano (canon mode)
+%
+ M1 currentmatrix
+ Tocanon
+ M2
+ concatmatrix
+ setmatrix
+
+% Restore paths
+ initclip exec clip
+ exec
+
+ load exec
+
+% Save paths
+ path_def path_to_proc
+ clippath { {} } path_to_proc
+
+%
+% CTM <- CTM x Fromcanon (Non canon mode)
+%
+ M1 currentmatrix
+ Fromcanon
+ M2
+ concatmatrix
+ setmatrix
+
+% Restore paths
+ initclip exec clip
+ exec
+ end
+ }
+ mkmulti
+ }
+ forall
+
+%
+% Define the operators which can't use the standard template
+%
+ /showpage
+ {
+ /page# page# 1 add def
+
+% Update the transform matrices
+ page# npages eq
+ {
+ dividers
+ {
+ draw_dividers
+ }
+ if
+ load exec % the previous showpage
+ /page# 0 def
+ }
+ {
+ pop
+ }
+ ifelse
+ /Fromcanon Fromcanon fromcanon def
+ /Tocanon Fromcanon Tocanon invertmatrix def
+ end
+ initgraphics % the new initgraphics
+ }
+ mkmulti
+
+ /copypage
+ {
+ pop
+ end
+ gsave
+ showpage
+ grestore
+ }
+ mkmulti
+
+ /erasepage
+ {
+ pop
+ end
+ gsave
+ initclip
+ clippath
+ 1 setgray fill
+ grestore
+ }
+ mkmulti
+ [
+ /letter
+ /legal
+ /a4
+ /b5
+ /lettersmall
+ /note
+ ]
+ {
+ {
+ pop end
+ (%%Warning%% Device change ignored) =
+ }
+ mkmulti
+ }
+ forall
+
+%
+% Define restore separately as it affects the value of page#, etc
+%
+ /restore
+ {
+ pop
+% Push the values to restore after restore
+ mark exch % put mark under -save-
+ page#
+ Fromcanon aload pop
+ Tocanon aload pop
+
+ counttomark -1 roll % get -save- to the top
+ restore
+
+% Restore popped values
+ Tocanon astore pop
+ Fromcanon astore pop
+ /page# exch def
+ pop % mark
+
+% Save paths
+ path_def path_to_proc
+ clippath { { } } path_to_proc
+
+%
+% CTM <- CTM x Fromcanon (Non canon mode)
+%
+ M1 currentmatrix
+ Fromcanon
+ M2
+ concatmatrix
+ setmatrix
+
+% Restore paths
+ initclip exec clip
+ exec
+ end
+ }
+ mkmulti
+%
+% procedure to undo the effect of multi
+%
+ /endmulti
+ {
+ pop % don't need /endmulti
+ [
+ /gsave
+ /grestore
+ /grestoreall
+ /initgraphics
+ /initmatrix
+ /currentmatrix
+ /setmatrix
+ % Path construction operators
+ /initclip
+ % Virtual memory operators
+ /save
+ % ones which needed special overloading
+ /showpage
+ /erasepage
+ /copypage
+ /restore
+ % ignore these
+ /letter
+ /legal
+ /a4
+ /b5
+ /lettersmall
+ /note
+ %
+ /endmulti
+ ]
+ {
+ initdict exch
+ dup load % get old value
+ put % restore old value
+ }
+ forall
+ page# 0 ne % if not at new page show uncomplete page
+ {
+ dividers
+ {
+ draw_dividers
+ }
+ if
+ showpage
+ }
+ if
+ end
+ }
+ mkmulti
+
+%
+% Set up in multi(non canon) mode
+%
+ /page# 0 def
+ /npages rows cols mul def
+ /Fromcanon matrix fromcanon def
+ /Tocanon Fromcanon matrix invertmatrix def
+ end
+ initgraphics
+}
+bind
+def
diff --git a/Master/texmf-dist/dvips/musixps/psslurs.pro b/Master/texmf-dist/dvips/musixps/psslurs.pro
new file mode 100644
index 00000000000..1d560a0f969
--- /dev/null
+++ b/Master/texmf-dist/dvips/musixps/psslurs.pro
@@ -0,0 +1,282 @@
+% This file can be used instead of psslurs.pro, it is only commented
+% and indented.
+%
+% VERSION: 1.0
+%
+% WARNING! This is a heavy magic! If you want something more understandable,
+% you will have to write it yourself (if it is possible in a stack-oriented
+% language that PostScript is). There are some constants you can
+% change and see what happens, but I think the slurs should be almost
+% always satisfiable. When not, let me know at:
+% standa@hiero.cz
+% Also any bug reports and comments are welcomed.
+%
+% Stanislav Kneifl.
+
+/slur@Dict 200 dict def
+
+% this dictionary is for \setslurtext, overriding some dvips's definitions
+/temp@xx@dict 4 dict def temp@xx@dict begin
+ /a { moveto ax1 ay1 rmoveto } def
+ /V {gsave newpath transform round exch round exch itransform
+ exch ax1 add exch ay1 add moveto rulex 0 rlineto 0 ruley neg
+ rlineto rulex neg 0 rlineto fill grestore} def
+end
+
+TeXDict begin
+% get dimen from TeX's string ("125pt" -> 125 PS points)
+/GD { dup length 2 sub 0 exch getinterval cvr 1.045 mul} def
+% get dimen adjusted to Resolution
+/GDAR { dup length 2 sub 0 exch getinterval cvr 4 AR mul 1.045 mul} def
+% Adjust to Resolution
+/AR { Resolution mul 300 div } def
+% the distances in dvips's PostScript are resolution dependant!
+end
+
+slur@Dict begin
+/CP /currentpoint load def
+/ED { exch def } bind def
+/AR { Resolution mul 300 div } def % stands for Adjust to Resolution,
+/VS { dup /ay1 exch ay1 exch linew mul 4 mul add def /ay2 exch ay2 exch linew mul 4 mul add def } def
+/y { 3 2 roll ax1 ay1 rmoveto show moveto } def
+/M { mul } def
+/A { add } def
+/SB { sub } def
+/P { pop } def
+/DP { dup } def
+/R { roll } def
+
+/drawseg { 0 0 moveto
+ ax1 ay1
+ ax1 0.6 mul ax2 0.4 mul add ay1 0.6 mul ay2 0.4 mul add
+ ax1 ax2 add 2 div ay1 ay2 add 2 div curveto
+ ax1 0.4 mul ax2 0.6 mul add ay1 0.4 mul ay2 0.6 mul add
+ ax2 ay2
+ x2 0 curveto } def
+
+/DS {
+ AR /maxe ED
+ /ifadjust ED
+ /ifdash ED
+ AR /m ED % max height of the slur
+ /e ED % "angularity" of the slur; 0.1 = very angular,
+ % 0.3 = very round
+ /aa exch neg def % what to multiply the height with
+ % AFTER the max height checking
+ /y2 ED % y coordinate of the end of the slur
+ /x2 ED % x coordinate of the end of the slur
+ /y1 ED % y coordinate of the beginning of the slur
+ /x1 ED % x coordinate of the beginning of the slur
+ /yr2 ED
+ /yr1 ED
+ /internote ED
+ /x2 x2 x1 sub def % x2=x2-x1
+ /y2 y2 y1 sub def % y2=y2-y1
+ /sx y2 x2 div def
+ /b x2 300 mul Resolution div abs sqrt AR 2 mul def % b=2*sqrt(x2)
+ b 3 AR lt {/b 3 AR def} if % b=max(b,3)
+ b m gt {/b m def} if % b=min(b,m)
+ /aa b aa mul def % aa=aa*b
+ /s 90 x2 y2 atan sub def % s=90-arctan(x2,y2) slope of the slur
+ /aa aa s cos div def % aa=aa/cos(s) height of the slur
+ /x2 s neg cos x2 mul s neg sin y2 mul sub def % x2 = x2*cos(-s) - y2*sin(-s)
+ % is the length of the slur
+ e x2 mul maxe gt { /e maxe x2 div def } if
+ /beta e x2 mul aa neg atan def
+ beta 90 gt {/beta 180 beta sub def} if
+ /ax1 e x2 mul def % control points
+ /ay1 aa def
+ /ax2 1 e sub x2 mul def
+ /ay2 aa def
+
+% check if the starting and endin vector stay in desired quadrants
+% => beta < abs(s)
+ beta s abs lt {
+ /b aa abs s abs 2 add sin mul s abs 2 add cos div def
+ s aa mul 0 lt {
+ s cos 0.75 lt { /ax1 ax1 b 1 s cos sub mul 0.5 mul sub def /ay1 ay1 s cos mul 0.8 mul def } if
+% ^^^^ ^^^ ^^^
+% (values to play with)
+ /ax2 x2 b sub def
+ }
+ {
+ /ax1 b def
+ s cos 0.75 lt { /ax2 b 1 s cos sub mul 0.5 mul ax2 add def /ay2 ay2 s cos mul 0.8 mul def } if
+% ^^^^ ^^^ ^^^
+ } ifelse
+ } if
+
+% align the slur to the staff lines
+
+ gsave
+ x1 y1 translate
+ s rotate
+% [1 0 sx 1 0 0] concat
+ drawseg
+ gsave
+ initmatrix
+ flattenpath
+ pathbbox
+ exch pop
+ sub
+ /slh ED % in slh we have the height of the whole slur
+ pop
+ grestore
+
+ /yr s aa mul 0 ge { yr1 } { yr2 } ifelse internote div def
+ /slh yr slh internote div aa 0 gt { add } { sub } ifelse 2 div def
+% check if the slur gets too close to staff line
+ /shift 0 def
+ slh 4.45 lt slh -0.5 gt and {
+ /slh slh dup truncate sub def
+ slh 0 lt { /slh 1 slh add def } if
+ aa 0 gt { /slh 1 slh sub def } if
+
+ % slh now contains the position ot the slur top/bottom in the space
+ % between the nearest staff lines (from <0,1>), regardless direction
+
+ % slur is too low:
+ slh 0.45 lt { /shift 0.45 slh sub def } if
+ % slur is too high, but we can be shift it down:
+ slh 0.7 gt slh 0.85 lt and { /shift 0.7 slh sub def } if
+ % slur is too high, must be shifted up:
+ slh 0.85 ge { /shift 1.45 slh sub def } if
+ } if
+
+ aa 0 gt { /shift shift neg def } if
+
+ ifadjust 0 eq {
+ /shift 0 def
+ } if
+
+
+% and finally draw it...
+
+ grestore
+ gsave
+ /linew internote 0.06 mul AR def
+ linew 4 mul setlinewidth
+ 1 setlinecap
+ 0 setlinejoin
+ ifdash 1 eq
+ { [internote 8 mul AR internote 5 mul AR] 0 setdash } if
+ x1 y1 shift neg 2 mul internote mul 4 AR mul add translate
+ s rotate
+% [1 sx 0 1 0 0] concat
+
+% uncomment this to see the control points
+% 5 AR setlinewidth ax1 ay1 moveto 0.1 0 rlineto stroke
+% ax2 ay2 moveto 0.1 0 rlineto stroke linew setlinewidth
+
+ drawseg
+ 1 VS
+ drawseg
+ -2 VS
+ drawseg
+ x2 20 AR gt {
+ 3 VS
+ drawseg
+ } if
+ x2 50 AR gt {
+ -4 VS
+ drawseg
+ } if
+ x2 80 AR gt {
+ 5 VS
+ drawseg
+ } if
+ stroke
+
+ grestore
+
+ % now some \slurtext code...
+
+ /x1 ax1 ax2 add 2 div def % middle of the slur
+ /y1 ay1 ay2 add 2 div def
+ x1 s cos mul y1 s sin mul add neg
+ y1 s cos mul x1 s sin mul sub
+ aa 0 lt {1} {0} ifelse
+ end
+
+ % this is a hack to place the slurtext in the middle of the slur.
+ % From unknown reasons simple 'ax1 ay1 translate' did not work,
+ % so we have to overlay some definitions with our own, namely
+ % 'a', which is originally 'moveto' and 'V' for drawing rules.
+ % maybe there are some other operations that should be redefined,
+ % but for almost all cases this will be sufficient. If you find
+ % anything that won't be typeset at the correct position, let me know...
+
+ temp@xx@dict begin
+ /dir exch def
+ /ay1 exch def
+ /ax1 exch def
+} def
+
+% crescendos
+/DC {
+ /y2 ED
+ /x2 ED
+ /y1 ED
+ /x1 ED
+ gsave
+ 1 AR ceiling setlinewidth % line thickness: this results
+ 1 setlinecap % to exactly 2 pixels in 300 dpi
+ 1 setlinejoin
+ x2 y2 10 AR add moveto % the 10's specify wideness of the
+ x1 y1 lineto % open end of the crescendo,
+ x2 y2 10 AR sub lineto % similarly the 11's below
+ stroke
+ grestore
+} def
+
+% half crescendos
+/DHC {
+ /y2 ED
+ /x2 ED
+ /y1 ED
+ /x1 ED
+ gsave
+ 1 AR ceiling setlinewidth
+ 1 setlinecap
+ 1 setlinejoin
+ x2 y2 11 AR add moveto
+ x1 y1 4 AR add lineto stroke
+ x1 y1 4 AR sub moveto
+ x2 y2 11 AR sub lineto
+ stroke
+ grestore
+} def
+
+% differenced line
+
+/DLN {
+ gsave
+ GDAR ceiling setlinewidth
+ GDAR exch GDAR neg rlineto
+ stroke
+ grestore
+} def
+
+% sloped line
+
+/DSLN {
+ gsave
+ GDAR ceiling setlinewidth
+ GDAR exch 1.125 mul neg rotate 0 rlineto
+ stroke
+ grestore
+} def
+
+% free line (init & terminate)
+
+/DFLN {
+ gsave
+ GDAR ceiling setlinewidth
+ CP moveto
+ lineto
+ stroke
+ grestore
+} def
+
+end
+
diff --git a/Master/texmf-dist/dvips/musixtex/config.musixtex b/Master/texmf-dist/dvips/musixtex/config.musixtex
new file mode 100644
index 00000000000..77ce78946a8
--- /dev/null
+++ b/Master/texmf-dist/dvips/musixtex/config.musixtex
@@ -0,0 +1 @@
+p+ musixtex.map
diff --git a/Master/texmf-dist/dvips/ncntrsbk/config.unc b/Master/texmf-dist/dvips/ncntrsbk/config.unc
new file mode 100644
index 00000000000..fbd8979d54b
--- /dev/null
+++ b/Master/texmf-dist/dvips/ncntrsbk/config.unc
@@ -0,0 +1 @@
+p +unc.map
diff --git a/Master/texmf-dist/dvips/norasi/config.norasi b/Master/texmf-dist/dvips/norasi/config.norasi
new file mode 100644
index 00000000000..3ecae74d073
--- /dev/null
+++ b/Master/texmf-dist/dvips/norasi/config.norasi
@@ -0,0 +1 @@
+p +norasi.map
diff --git a/Master/texmf-dist/dvips/omega/config.omega b/Master/texmf-dist/dvips/omega/config.omega
new file mode 100644
index 00000000000..d9034cfcad1
--- /dev/null
+++ b/Master/texmf-dist/dvips/omega/config.omega
@@ -0,0 +1 @@
+p +omega.map
diff --git a/Master/texmf-dist/dvips/omega/omega.cfg b/Master/texmf-dist/dvips/omega/omega.cfg
new file mode 100644
index 00000000000..d9034cfcad1
--- /dev/null
+++ b/Master/texmf-dist/dvips/omega/omega.cfg
@@ -0,0 +1 @@
+p +omega.map
diff --git a/Master/texmf-dist/dvips/ot2cyr/wncyrps.vec b/Master/texmf-dist/dvips/ot2cyr/wncyrps.vec
new file mode 100644
index 00000000000..7e8fdb99e45
--- /dev/null
+++ b/Master/texmf-dist/dvips/ot2cyr/wncyrps.vec
@@ -0,0 +1,126 @@
+000 Nj
+001 Elj
+002 Dsche
+003 E
+004 I
+005 Ye
+006 Djsche
+007 Tjsche
+008 nj
+009 elj
+010 dsche
+011 e
+012 i
+013 ye
+014 djsche
+015 tjsche
+016 Ju
+017 Schiwete
+018 Ischedipthong
+019 Jehstdieresis
+020 Jschiza
+021 Fita
+022 Zelo
+023 Ja
+024 ju
+025 schiwete
+025 schiwetebulg
+026 ischedipthong
+027 jehstdieresis
+028 jschiza
+029 fita
+030 zelo
+031 ja
+032 dieresis
+033 exclam
+034 quotedblright
+035 Jat
+037 percent
+038 acute
+039 quoteright
+040 parenleft
+041 parenright
+042 asterisk
+043 jat
+044 comma
+045 hyphen
+046 period
+047 slash
+048 zero
+049 one
+050 two
+051 three
+052 four
+053 five
+054 six
+055 seven
+056 eight
+057 nine
+058 colon
+059 semicolon
+061 dotlessi
+062 guillemotleft
+062 guillemotright
+063 question
+065 As
+066 Buki
+067 Zui
+068 Dobro
+069 Jehst
+070 Fert
+071 Glagol
+072 Chherr
+073 Ische
+074 Je
+075 Kako
+076 Ljudi
+077 Muislete
+078 Nasche
+079 On
+080 Pakoy
+081 Tscherw
+082 Rzui
+083 Ssiowo
+084 Twerdo
+085 U
+086 Wjedi
+087 Schtscha
+088 Scha
+089 Jerui
+090 Semlja
+092 quotedblleft
+094 Jher
+095 Jerr
+096 quoteleft
+097 as
+098 buki
+099 zui
+100 dobro
+101 jehst
+102 fert
+103 glagol
+104 chherr
+105 ische
+106 je
+107 kako
+108 ljudi
+109 muislette
+110 nasch
+111 on
+112 pakoy
+113 tscherw
+114 rzui
+115 ssiowo
+116 twerdo
+117 u
+118 wjedi
+119 schtscha
+120 scha
+121 jerui
+122 semlja
+123 endash
+124 emdash
+125 nosign
+126 jher
+127 jerr
+
diff --git a/Master/texmf-dist/dvips/palatino/config.upl b/Master/texmf-dist/dvips/palatino/config.upl
new file mode 100644
index 00000000000..5790ba20e03
--- /dev/null
+++ b/Master/texmf-dist/dvips/palatino/config.upl
@@ -0,0 +1 @@
+p +upl.map
diff --git a/Master/texmf-dist/dvips/pl/config.pl b/Master/texmf-dist/dvips/pl/config.pl
new file mode 100644
index 00000000000..50e8181263e
--- /dev/null
+++ b/Master/texmf-dist/dvips/pl/config.pl
@@ -0,0 +1,2 @@
+p +pltext.map
+p +plother.map
diff --git a/Master/texmf-dist/dvips/psfrag/psfrag.pro b/Master/texmf-dist/dvips/psfrag/psfrag.pro
new file mode 100644
index 00000000000..4a4a2ffb9a7
--- /dev/null
+++ b/Master/texmf-dist/dvips/psfrag/psfrag.pro
@@ -0,0 +1,155 @@
+%%
+%% This is file `psfrag.pro',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% psfrag.dtx (with options: `filepro')
+%%
+%% Copyright (c) 1996 Craig Barratt, Michael C. Grant, and David Carlisle.
+%% All rights reserved.
+%%
+%% This file is part of the PSfrag package.
+%%
+userdict begin
+/PSfragLib 90 dict def
+/PSfragDict 6 dict def
+/PSfrag { PSfragLib begin load exec end } bind def
+end
+PSfragLib begin
+/RO /readonly load def
+/CP /currentpoint load def
+/CM /currentmatrix load def
+/B { bind RO def } bind def
+/X { exch def } B
+/MD { { X } forall } B
+/OE { end exec PSfragLib begin } B
+/S false def
+/tstr 8 string def
+/islev2 { languagelevel } stopped { false } { 2 ge } ifelse def
+[ /sM /tM /srcM /dstM /dM /idM /srcFM /dstFM ] { matrix def } forall
+sM currentmatrix RO pop
+dM defaultmatrix RO idM invertmatrix RO pop
+srcFM identmatrix pop
+/Hide { gsave { CP } stopped not newpath clip { moveto } if } B
+/Unhide { { CP } stopped not grestore { moveto } if } B
+/setrepl islev2 {{ /glob currentglobal def true setglobal array astore
+ globaldict exch /PSfrags exch put glob setglobal }}
+ {{ array astore /PSfrags X }} ifelse B
+/getrepl islev2 {{ globaldict /PSfrags get aload length }}
+ {{ PSfrags aload length }} ifelse B
+/convert {
+ /src X src length string
+ /c 0 def src length {
+ dup c src c get dup 32 lt { pop 32 } if put /c c 1 add def
+ } repeat
+} B
+/Begin {
+ /saver save def
+ srcFM exch 3 exch put
+ 0 ne /debugMode X 0 setrepl
+ dup /S exch dict def { S 3 1 roll exch convert exch put } repeat
+ srcM CM dup invertmatrix pop
+ mark { currentdict { end } stopped { pop exit } if } loop
+ PSfragDict counttomark { begin } repeat pop
+} B
+/End {
+ mark { currentdict end dup PSfragDict eq { pop exit } if } loop
+ counttomark { begin } repeat pop
+ getrepl saver restore
+ 7 idiv dup /S exch dict def {
+ 6 array astore /mtrx X tstr cvs /K X
+ S K [ S K known { S K get aload pop } if mtrx ] put
+ } repeat
+} B
+/Place {
+ tstr cvs /K X
+ S K known {
+ bind /proc X tM CM pop
+ CP /cY X /cX X
+ 0 0 transform idtransform neg /aY X neg /aX X
+ S K get dup length /maxiter X
+ /iter 1 def {
+ iter maxiter ne { /saver save def } if
+ tM setmatrix aX aY translate
+ [ exch aload pop idtransform ] concat
+ cX neg cY neg translate cX cY moveto
+ /proc load OE
+ iter maxiter ne { saver restore /iter iter 1 add def } if
+ } forall
+ /noXY { CP /cY X /cX X } stopped def
+ tM setmatrix noXY { newpath } { cX cY moveto } ifelse
+ } {
+ Hide OE Unhide
+ } ifelse
+} B
+/normalize {
+ 2 index dup mul 2 index dup mul add sqrt div
+ dup 4 -1 roll exch mul 3 1 roll mul
+} B
+/replace {
+ aload pop MD
+ CP /bY X /lX X gsave sM setmatrix
+ str stringwidth abs exch abs add dup 0 eq
+ { pop } { 360 exch div dup scale } ifelse
+ lX neg bY neg translate newpath lX bY moveto
+ str { /ch X ( ) dup 0 ch put false charpath ch Kproc } forall
+ flattenpath pathbbox [ /uY /uX /lY /lX ] MD
+ CP grestore moveto
+ currentfont /FontMatrix get dstFM copy dup
+ 0 get 0 lt { uX lX /uX X /lX X } if
+ 3 get 0 lt { uY lY /uY X /lY X } if
+ /cX uX lX add 0.5 mul def
+ /cY uY lY add 0.5 mul def
+ debugMode { gsave 0 setgray 1 setlinewidth
+ lX lY moveto lX uY lineto uX uY lineto uX lY lineto closepath
+ lX bY moveto uX bY lineto lX cY moveto uX cY lineto
+ cX lY moveto cX uY lineto stroke
+ grestore } if
+ dstFM dup invertmatrix dstM CM srcM
+ 2 { dstM concatmatrix } repeat pop
+ getrepl /temp X
+ S str convert get {
+ aload pop [ /rot /scl /loc /K ] MD
+ /aX cX def /aY cY def
+ loc {
+ dup 66 eq { /aY bY def } { % B
+ dup 98 eq { /aY lY def } { % b
+ dup 108 eq { /aX lX def } { % l
+ dup 114 eq { /aX uX def } { % r
+ dup 116 eq { /aY uY def } % t
+ if } ifelse } ifelse } ifelse } ifelse pop
+ } forall
+ K srcFM rot tM rotate dstM
+ 2 { tM concatmatrix } repeat aload pop pop pop
+ 2 { scl normalize 4 2 roll } repeat
+ aX aY transform
+ /temp temp 7 add def
+ } forall
+ temp setrepl
+} B
+/Rif {
+ S 3 index convert known { pop replace } { exch pop OE } ifelse
+} B
+/XA { bind [ /Kproc /str } B /XC { ] 2 array astore def } B
+/xs { pop } XA XC
+/xks { /kern load OE } XA /kern XC
+/xas { pop ax ay rmoveto } XA /ay /ax XC
+/xws { c eq { cx cy rmoveto } if } XA /c /cy /cx XC
+/xaws { ax ay rmoveto c eq { cx cy rmoveto } if }
+ XA /ay /ax /c /cy /cx XC
+/raws { xaws { awidthshow } Rif } B
+/rws { xws { widthshow } Rif } B
+/rks { xks { kshow } Rif } B
+/ras { xas { ashow } Rif } B
+/rs { xs { show } Rif } B
+/rrs { getrepl dup 2 add -1 roll //restore exec setrepl } B
+PSfragDict begin
+islev2 not { /restore { /rrs PSfrag } B } if
+/show { /rs PSfrag } B
+/kshow { /rks PSfrag } B
+/ashow { /ras PSfrag } B
+/widthshow { /rws PSfrag } B
+/awidthshow { /raws PSfrag } B
+end PSfragDict RO pop
+end
diff --git a/Master/texmf-dist/dvips/pst-3dplot/pst-3dplot.pro b/Master/texmf-dist/dvips/pst-3dplot/pst-3dplot.pro
new file mode 100644
index 00000000000..23cd5be3db9
--- /dev/null
+++ b/Master/texmf-dist/dvips/pst-3dplot/pst-3dplot.pro
@@ -0,0 +1,108 @@
+%%
+%% This is file `pst-3dplot.pro',
+%%
+%% IMPORTANT NOTICE:
+%%
+%% Package `pst-3dplot.tex'
+%%
+%% Herbert Voss <voss _at_ PSTricks.de>
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%%
+%% DESCRIPTION:
+%% `pst-3dplot' is a PSTricks package to draw 3d curves and graphical objects
+%%
+%%
+%% version 0.2 / 2005-01-14 Herbert Voss <voss _at_ PSTricks.de>
+%
+/tx@3DPlotDict 40 dict def
+tx@3DPlotDict begin
+%
+/saveCoor {
+ dzUnit mul /z exch def
+ dyUnit mul /y exch def
+ dxUnit mul /x exch def
+} def
+%
+/ConvertTo2D {
+ RotatePoint
+ /x2D x neg Alpha cos mul y Alpha sin mul add def
+ /y2D x Alpha sin mul y Alpha cos mul add neg Beta sin mul z Beta cos mul add def
+} def
+%
+/ConvertToCartesian {
+ /latitude exch def
+ /longitude exch def
+ /Radius exch def
+ /z { Radius latitude sin mul } def
+ /x { Radius longitude cos mul latitude cos mul } def
+ /y { Radius longitude sin mul latitude cos mul } def
+} def
+%
+/SphericalTo2D {
+ x y z ConvertToCartesian ConvertTo2D
+} def
+%
+/convertStackTo2D {
+ counttomark
+ /n exch def /n3 n 3 div cvi def
+ n3 {
+ n -3 roll
+ SphericalCoor { ConvertToCartesian } { saveCoor } ifelse
+ ConvertTo2D
+ x2D xUnit y2D yUnit
+ /n n 1 sub def
+ } repeat
+} def
+%
+/CalcCoordinates {% from pst-vue3d
+ formulesTroisD
+ Xi 28.45 mul Yi 28.45 mul
+} def
+% pour la 3D conventionnelle
+/DScreen 1 def
+/Dobs 0 def
+/formulesTroisD{%
+ /xObservateur x Sin1 mul neg y Cos1 mul add def
+ /yObservateur x Cos1Sin2 mul neg y Sin1Sin2 mul sub z Cos2 mul add def
+ /zObservateur x neg Cos1Cos2 mul y Sin1Cos2 mul sub z Sin2 mul sub Dobs add def
+ /Xi DScreen xObservateur mul zObservateur div def
+ /Yi DScreen yObservateur mul zObservateur div def
+} def
+%
+/RotatePointXYZ{% Mxx are defined in the TeX file
+ /xi M11 x mul M12 y mul add M13 z mul add def
+ /yi M21 x mul M22 y mul add M23 z mul add def
+ /zi M31 x mul M32 y mul add M33 z mul add def
+ /x xi def
+ /y yi def
+ /z zi def
+} def
+%
+/RotXaxis {
+ /yTemp y RotX cos mul z RotX sin mul sub def
+ /z y RotX sin mul z RotX cos mul add def
+ /y yTemp def
+} def
+/RotYaxis {
+ /xTemp x RotY cos mul z RotY sin mul add def
+ /z x RotY sin mul neg z RotY cos mul add def
+ /x xTemp def
+} def
+/RotZaxis {
+ /xTemp x RotZ cos mul y RotZ sin mul sub def
+ /y x RotZ sin mul y RotZ cos mul add def
+ /x xTemp def
+} def
+/xyz { RotXaxis RotYaxis RotZaxis } def
+/yxz { RotYaxis RotXaxis RotZaxis } def
+/yzx { RotYaxis RotZaxis RotXaxis } def
+/xzy { RotXaxis RotZaxis RotYaxis } def
+/zxy { RotZaxis RotXaxis RotYaxis } def
+/zyx { RotZaxis RotYaxis RotXaxis } def
+%
+/RotatePoint { RotSequence cvx exec } def
+%
+end
diff --git a/Master/texmf-dist/dvips/pst-bar/pst-bar.pro b/Master/texmf-dist/dvips/pst-bar/pst-bar.pro
new file mode 100644
index 00000000000..608a8c42616
--- /dev/null
+++ b/Master/texmf-dist/dvips/pst-bar/pst-bar.pro
@@ -0,0 +1,30 @@
+%!
+% PostScript prologue for pst-bar.tex.
+% Version 0.2, 2004/08/22
+% For distribution, see pstricks.tex.
+%
+/tx@BarDict 5 dict def tx@BarDict begin
+%
+% transpose -- Matrix transpose
+%
+/transpose {
+ /X exch def
+ /row X length def
+ /col X 0 get length def
+ [
+ /i 0 def
+ col {
+ [
+ /j 0 def
+ row {
+ X j get i get
+ /j j 1 add def
+ } repeat
+ /i i 1 add def
+ ]
+ } repeat
+ ]
+} def
+%
+end
+% END pst-bar.pro
diff --git a/Master/texmf-dist/dvips/pst-barcode/pst-barcode.pro b/Master/texmf-dist/dvips/pst-barcode/pst-barcode.pro
new file mode 100644
index 00000000000..31667b82ba7
--- /dev/null
+++ b/Master/texmf-dist/dvips/pst-barcode/pst-barcode.pro
@@ -0,0 +1,2589 @@
+%!PS-Adobe-2.0
+%%Creator: Terry Burton
+%%DocumentPaperSizes: a4
+%%EndComments
+%%EndProlog
+
+% Barcode Writer in Pure PostScript - Version 2005-10-24
+% http://www.terryburton.co.uk/barcodewriter/
+%
+% Copyright (c) 2005 Terry Burton - tez@terryburton.co.uk
+%
+% Permission is hereby granted, free of charge, to any
+% person obtaining a copy of this software and associated
+% documentation files (the "Software"), to deal in the
+% Software without restriction, including without
+% limitation the rights to use, copy, modify, merge,
+% publish, distribute, sublicense, and/or sell copies of
+% the Software, and to permit persons to whom the Software
+% is furnished to do so, subject to the following
+% conditions:
+%
+% The above copyright notice and this permission notice
+% shall be included in all copies or substantial portions
+% of the Software.
+%
+% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+% KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
+% THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+% PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+% THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+% DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+% CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+% CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+% IN THE SOFTWARE.
+
+% Uncomment this next line to allow these procedure definitions to
+% remain resident within a printer's PostScript virtual machine
+% so that the barcode generation capability persists between jobs.
+
+% serverdict begin 0 exitserver
+
+% --BEGIN TEMPLATE--
+
+% --BEGIN ENCODER ean13--
+/ean13 {
+
+ 0 begin
+
+ /options exch def % We are given an option string
+ /renderopts options def
+ /barcode exch def % We are given a barcode string
+
+ /includetext false def % Enable/disable text
+ /textfont /Helvetica def
+ /textsize 12 def
+ /textpos -2 def
+ /height 1 def
+ /guardwhitespace false def
+ /guardpos (unset) def
+
+ % Parse the input options
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textpos textpos cvr def
+ guardpos (unset) eq {
+ /guardpos textpos 1 add def
+ } {
+ /guardpos guardpos cvr def
+ } ifelse
+ /height height cvr def
+
+ /barlen barcode length def % Length of the code
+
+ % Add checksum digit to barcode if length is even
+ barlen 2 mod 0 eq {
+ /pad barlen 1 add string def % Create pad one bigger than barcode
+ /checksum 0 def
+ 0 1 barlen 1 sub {
+ /i exch def
+ /barchar barcode i get 48 sub def
+ i 2 mod 0 eq {
+ /checksum barchar checksum add def
+ } {
+ /checksum barchar 3 mul checksum add def
+ } ifelse
+ } for
+ /checksum 10 checksum 10 mod sub 10 mod def
+ pad 0 barcode putinterval % Add barcode to the start of the pad
+ pad barlen checksum 48 add put % Put ascii for checksum at end of pad
+ /barcode pad def % barcode=pad
+ /barlen barlen 1 add def % barlen++
+ } if
+
+ % Create an array containing the character mappings
+ /encs
+ [ (3211) (2221) (2122) (1411) (1132)
+ (1231) (1114) (1312) (1213) (3112)
+ (111) (11111) (111)
+ ] def
+
+ % Create a string of the available characters
+ /barchars (0123456789) def
+
+ % Digits to mirror on left side
+ /mirrormaps
+ [ (000000) (001011) (001101) (001110) (010011)
+ (011001) (011100) (010101) (010110) (011010)
+ ] def
+
+ /sbs barlen 1 sub 4 mul 11 add string def
+
+ guardwhitespace {
+ /txt barlen 1 add array def
+ txt barlen [(>) 99 guardpos textfont textsize] put
+ } {
+ /txt barlen array def
+ } ifelse
+
+ % Put the start character
+ sbs 0 encs 10 get putinterval
+
+ % First digit - determine mirrormap by this and show before guard bars
+ /mirrormap mirrormaps barcode 0 get 48 sub get def
+ txt 0 [barcode 0 1 getinterval -10 textpos textfont textsize] put
+
+ % Left side - performs mirroring
+ 1 1 6 {
+ % Lookup the encoding for the each barcode character
+ /i exch def
+ barcode i 1 getinterval barchars exch search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard seek and post
+ /enc encs indx get def % Get the indxth encoding
+ mirrormap i 1 sub get 49 eq { % Reverse enc if 1 in this position in mirrormap
+ /enclen enc length def
+ /revenc enclen string def
+ 0 1 enclen 1 sub {
+ /j exch def
+ /char enc j get def
+ revenc enclen j sub 1 sub char put
+ } for
+ /enc revenc def
+ } if
+ sbs i 1 sub 4 mul 3 add enc putinterval % Put encoded digit into sbs
+ txt i [barcode i 1 getinterval i 1 sub 7 mul 4 add textpos textfont 0] put
+ } for
+
+ % Put the middle character
+ sbs 7 1 sub 4 mul 3 add encs 11 get putinterval
+
+ % Right side
+ 7 1 12 {
+ % Lookup the encoding for the each barcode character
+ /i exch def
+ barcode i 1 getinterval barchars exch search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard seek and post
+ /enc encs indx get def % Get the indxth encoding
+ sbs i 1 sub 4 mul 8 add enc putinterval % Put encoded digit into sbs
+ txt i [barcode i 1 getinterval i 1 sub 7 mul 8 add textpos textfont 0] put
+ } for
+
+ % Put the end character
+ sbs barlen 1 sub 4 mul 8 add encs 12 get putinterval
+
+ % Return the arguments
+ /retval 4 dict def
+ retval (sbs) sbs put
+ includetext {
+ retval (bhs) [height height 12{height .1 sub}repeat height height 12{height .1 sub}repeat height height] put
+ retval (bbs) [0 0 12{.1}repeat 0 0 12{.1}repeat 0 0] put
+ retval (txt) txt put
+ } {
+ retval (bhs) [30{height}repeat] put
+ retval (bbs) [30{0}repeat] put
+ } ifelse
+ retval (opt) renderopts put
+ retval
+
+ end
+
+} bind def
+/ean13 load 0 1 dict put
+% --END ENCODER ean13--
+
+% --BEGIN ENCODER ean8--
+/ean8 {
+
+ 0 begin
+
+ /options exch def % We are given an option string
+ /renderopts options def
+ /barcode exch def % We are given a barcode string
+
+ /includetext false def % Enable/disable text
+ /textfont /Helvetica def
+ /textsize 12 def
+ /textpos -2 def
+ /height 1 def
+ /guardwhitespace false def
+ /guardpos (unset) def
+
+ % Parse the input options
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textpos textpos cvr def
+ guardpos (unset) eq {
+ /guardpos textpos 1 add def
+ } {
+ /guardpos guardpos cvr def
+ } ifelse
+ /height height cvr def
+
+ % Create an array containing the character mappings
+ /encs
+ [ (3211) (2221) (2122) (1411) (1132)
+ (1231) (1114) (1312) (1213) (3112)
+ (111) (11111) (111)
+ ] def
+
+ % Create a string of the available characters
+ /barchars (0123456789) def
+
+ /barlen barcode length def % Length of the code
+ /sbs barlen 4 mul 11 add string def
+
+ guardwhitespace {
+ /txt barlen 2 add array def
+ txt barlen [(<) -9 guardpos textfont textsize] put
+ txt barlen 1 add [(>) 69 guardpos textfont textsize] put
+ } {
+ /txt barlen array def
+ } ifelse
+
+ % Put the start character
+ sbs 0 encs 10 get putinterval
+
+ % Left side
+ 0 1 3 {
+ % Lookup the encoding for the each barcode character
+ /i exch def
+ barcode i 1 getinterval barchars exch search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard seek and post
+ /enc encs indx get def % Get the indxth encoding
+ sbs i 4 mul 3 add enc putinterval % Put encoded digit into sbs
+ txt i [barcode i 1 getinterval i 7 mul 4 add textpos textfont textsize] put
+ } for
+
+ % Put the middle character
+ sbs 4 4 mul 3 add encs 11 get putinterval
+
+ % Right side
+ 4 1 7 {
+ % Lookup the encoding for the each barcode character
+ /i exch def
+ barcode i 1 getinterval barchars exch search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard seek and post
+ /enc encs indx get def % Get the indxth encoding
+ sbs i 4 mul 8 add enc putinterval % Put encoded digit into sbs
+ txt i [barcode i 1 getinterval i 7 mul 8 add textpos textfont 0] put
+ } for
+
+ % Put the end character
+ sbs barlen 4 mul 8 add encs 12 get putinterval
+
+ % Return the arguments
+ /retval 4 dict def
+ retval (sbs) sbs put
+ includetext {
+ retval (bhs) [height height 8{height .1 sub}repeat height height 8{height .1 sub}repeat height height] put
+ retval (bbs) [0 0 8{.1}repeat 0 0 8{.1}repeat 0 0] put
+ retval (txt) txt put
+ } {
+ retval (bhs) [22{height}repeat] put
+ retval (bbs) [22{0}repeat] put
+ } ifelse
+ retval (opt) renderopts put
+ retval
+
+ end
+
+} bind def
+/ean8 load 0 1 dict put
+% --END ENCODER ean8--
+
+% --BEGIN ENCODER upca--
+/upca {
+
+ 0 begin
+
+ /options exch def
+ /renderopts options def
+ /barcode exch def % We are given a barcode string
+
+ /includetext false def % Enable/disable text
+ /textfont /Helvetica def
+ /textsize 12 def
+ /textpos -2 def
+ /height 1 def
+
+ % Parse the input options
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textpos textpos cvr def
+ /height height cvr def
+
+ /barlen barcode length def % Length of the code
+
+ % Add checksum digit to barcode if length is odd
+ barlen 2 mod 0 ne {
+ /pad barlen 1 add string def % Create pad one bigger than barcode
+ /checksum 0 def
+ 0 1 barlen 1 sub {
+ /i exch def
+ /barchar barcode i get 48 sub def
+ i 2 mod 0 ne {
+ /checksum checksum barchar add def
+ } {
+ /checksum checksum barchar 3 mul add def
+ } ifelse
+ } for
+ /checksum 10 checksum 10 mod sub 10 mod def
+ pad 0 barcode putinterval % Add barcode to the start of the pad
+ pad barlen checksum 48 add put % Put ascii for checksum at end of pad
+ /barcode pad def % barcode=pad
+ /barlen barlen 1 add def % barlen++
+ } if
+
+ % Create an array containing the character mappings
+ /encs
+ [ (3211) (2221) (2122) (1411) (1132)
+ (1231) (1114) (1312) (1213) (3112)
+ (111) (11111) (111)
+ ] def
+
+ % Create a string of the available characters
+ /barchars (0123456789) def
+
+ /sbs barlen 4 mul 11 add string def
+ /txt barlen array def
+
+ % Put the start character
+ sbs 0 encs 10 get putinterval
+
+ % Left side
+ 0 1 5 {
+ % Lookup the encoding for the each barcode character
+ /i exch def
+ barcode i 1 getinterval barchars exch search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard seek and post
+ /enc encs indx get def % Get the indxth encoding
+ sbs i 4 mul 3 add enc putinterval % Put encoded digit into sbs
+ i 0 eq { % First digit is before the guard bars
+ txt 0 [barcode 0 1 getinterval -7 textpos textfont textsize 2 sub] put
+ } {
+ txt i [barcode i 1 getinterval i 7 mul 4 add textpos textfont textsize] put
+ } ifelse
+ } for
+
+ % Put the middle character
+ sbs 6 4 mul 3 add encs 11 get putinterval
+
+ % Right side
+ 6 1 11 {
+ % Lookup the encoding for the each barcode character
+ /i exch def
+ barcode i 1 getinterval barchars exch search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard seek and post
+ /enc encs indx get def % Get the indxth encoding
+ sbs i 4 mul 8 add enc putinterval % Put encoded digit into sbs
+ i 11 eq { % Last digit is after guard bars
+ txt 11 [barcode 11 1 getinterval 96 textpos textfont textsize 2 sub] put
+ } {
+ txt i [barcode i 1 getinterval i 7 mul 8 add textpos textfont 0] put
+ } ifelse
+ } for
+
+ % Put the end character
+ sbs barlen 4 mul 8 add encs 12 get putinterval
+
+ % Return the arguments
+ /retval 4 dict def
+ retval (sbs) sbs put
+ includetext {
+ retval (bhs) [4{height}repeat 10{height .1 sub}repeat height height 10{height .1 sub}repeat 5{height}repeat] put
+ retval (bbs) [0 0 0 0 10{.1}repeat 0 0 10{.1}repeat 0 0 0 0 0] put
+ retval (txt) txt put
+ } {
+ retval (bhs) [31{height}repeat] put
+ retval (bbs) [31{0}repeat] put
+ } ifelse
+ retval (opt) renderopts put
+ retval
+
+ end
+
+} bind def
+/upca load 0 1 dict put
+% --END ENCODER upca--
+
+% --BEGIN ENCODER upce--
+/upce {
+
+ 0 begin
+
+ /options exch def % We are given an option string
+ /renderopts options def
+ /barcode exch def % We are given a barcode string
+
+ /includetext false def % Enable/disable text
+ /textfont /Helvetica def
+ /textsize 12 def
+ /textpos -2 def
+ /height 1 def
+
+ % Parse the input options
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textpos textpos cvr def
+ /height height cvr def
+
+ /barlen barcode length def % Length of the code
+
+ % Create an array containing the character mappings
+ /encs
+ [ (3211) (2221) (2122) (1411) (1132)
+ (1231) (1114) (1312) (1213) (3112)
+ (111) (1111111)
+ ] def
+
+ % Create a string of the available characters
+ /barchars (0123456789) def
+
+ /mirrormaps
+ [ (000111) (001011) (001101) (001110) (010011)
+ (011001) (011100) (010101) (010110) (011010)
+ ] def
+
+ % Add checksum digit to barcode if length is odd
+ barlen 2 mod 0 ne {
+ /pad barlen 1 add string def % Create pad one bigger than barcode
+ /checksum 0 def
+ 0 1 barlen 1 sub {
+ /i exch def
+ /barchar barcode i get 48 sub def
+ i 2 mod 0 ne {
+ /checksum barchar checksum add def
+ } {
+ /checksum barchar 3 mul checksum add def
+ } ifelse
+ } for
+ /checksum 10 checksum 10 mod sub 10 mod def
+ pad 0 barcode putinterval % Add barcode to the start of the pad
+ pad barlen checksum 48 add put % Put ascii for checksum at end of pad
+ /barcode pad def % barcode=pad
+ /barlen barlen 1 add def % barlen++
+ } if
+ /txt barlen array def
+ txt 0 [barcode 0 1 getinterval -7 textpos textfont textsize 2 sub] put
+
+ % Determine the mirror map based on checksum
+ /mirrormap mirrormaps barcode barlen 1 sub get 48 sub get def
+
+ % Invert the mirrormap if we are using a non-zero number system
+ barcode 0 get 48 eq {
+ /invt mirrormap length string def
+ 0 1 mirrormap length 1 sub {
+ /i exch def
+ mirrormap i get 48 eq {
+ invt i 49 put
+ } {
+ invt i 48 put
+ } ifelse
+ } for
+ /mirrormap invt def
+ } if
+
+ /sbs barlen 2 sub 4 mul 10 add string def
+
+ % Put the start character
+ sbs 0 encs 10 get putinterval
+
+ 1 1 6 {
+ /i exch def
+ % Lookup the encoding for the each barcode character
+ barcode i 1 getinterval barchars exch search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard seek and post
+ /enc encs indx get def % Get the indxth encoding
+ mirrormap i 1 sub get 49 eq { % Reverse enc if 1 in this position in mirrormap
+ /enclen enc length def
+ /revenc enclen string def
+ 0 1 enclen 1 sub {
+ /j exch def
+ /char enc j get def
+ revenc enclen j sub 1 sub char put
+ } for
+ /enc revenc def
+ } if
+ sbs i 1 sub 4 mul 3 add enc putinterval % Put encoded digit into sbs
+ txt i [barcode i 1 getinterval i 1 sub 7 mul 4 add textpos textfont textsize] put
+ } for
+
+ txt 7 [barcode 7 1 getinterval 6 7 mul 11 add textpos textfont textsize 2 sub] put
+
+ % Put the end character
+ sbs barlen 2 sub 4 mul 3 add encs 11 get putinterval
+
+ % Return the arguments
+ /retval 4 dict def
+ retval (sbs) sbs put
+ includetext {
+ retval (bhs) [height height 12{height .1 sub}repeat height height height] put
+ retval (bbs) [0 0 12{.1}repeat 0 0 0] put
+ retval (txt) txt put
+ } {
+ retval (bhs) [17{height}repeat] put
+ retval (bbs) [17{0}repeat] put
+ } ifelse
+ retval (opt) renderopts put
+ retval
+
+ end
+
+} bind def
+/upce load 0 1 dict put
+% --END ENCODER upce--
+
+% --BEGIN ENCODER ean5--
+/ean5 {
+
+ 0 begin
+
+ /options exch def % We are given an option string
+ /renderopts options def
+ /barcode exch def % We are given a barcode string
+
+ /includetext false def % Enable/disable text
+ /textfont /Helvetica def
+ /textsize 12 def
+ /textpos (unset) def
+ /height 0.7 def
+ /guardwhitespace false def
+ /guardpos (unset) def
+
+ % Parse the input options
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /height height cvr def
+ textpos (unset) eq {
+ /textpos height 72 mul 1 add def
+ } {
+ /textpos textpos cvr def
+ } ifelse
+ guardpos (unset) eq {
+ /guardpos textpos 1 add def
+ } {
+ /guardpos guardpos cvr def
+ } ifelse
+
+ /barlen barcode length def % Length of the code
+
+ % Create an array containing the character mappings
+ /encs
+ [ (3211) (2221) (2122) (1411) (1132)
+ (1231) (1114) (1312) (1213) (3112)
+ (112) (11)
+ ] def
+
+ % Create a string of the available characters
+ /barchars (0123456789) def
+
+ % Determine the mirror map based on mod 10 checksum
+ /mirrormaps
+ [ (11000) (10100) (10010) (10001) (01100)
+ (00110) (00011) (01010) (01001) (00101)
+ ] def
+ /checksum 0 def
+ 0 1 4 {
+ /i exch def
+ /barchar barcode i get 48 sub def
+ i 2 mod 0 eq {
+ /checksum barchar 3 mul checksum add def
+ } {
+ /checksum barchar 9 mul checksum add def
+ } ifelse
+ } for
+ /checksum checksum 10 mod def
+ /mirrormap mirrormaps checksum get def
+
+ /sbs 31 string def
+
+ guardwhitespace {
+ /txt 6 array def
+ txt 5 [(>) 49 guardpos textfont textsize] put
+ } {
+ /txt 5 array def
+ } ifelse
+
+ 0 1 4 {
+ /i exch def
+
+ % Prefix with either a start character or separator character
+ i 0 eq {
+ sbs 0 encs 10 get putinterval
+ } {
+ sbs i 1 sub 6 mul 7 add encs 11 get putinterval
+ } ifelse
+
+ % Lookup the encoding for the barcode character
+ barcode i 1 getinterval barchars exch search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard seek and post
+ /enc encs indx get def % Get the indxth encoding
+ mirrormap i get 49 eq { % Reverse enc if 1 in this position in mirrormap
+ /enclen enc length def
+ /revenc enclen string def
+ 0 1 enclen 1 sub {
+ /j exch def
+ /char enc j get def
+ revenc enclen j sub 1 sub char put
+ } for
+ /enc revenc def
+ } if
+ sbs i 6 mul 3 add enc putinterval % Put encoded digit into sbs
+ txt i [barcode i 1 getinterval i 1 sub 9 mul 13 add textpos textfont textsize] put
+ } for
+
+ % Return the arguments
+ /retval 4 dict def
+ retval (sbs) sbs put
+ retval (bhs) [16{height}repeat] put
+ retval (bbs) [16{0}repeat] put
+ includetext {
+ retval (txt) txt put
+ } if
+ retval (opt) renderopts put
+ retval
+
+ end
+
+} bind def
+/ean5 load 0 1 dict put
+% --END ENCODER ean5--
+
+% --BEGIN ENCODER ean2--
+/ean2 {
+
+ 0 begin
+
+ /options exch def % We are given an options string
+ /renderopts options def
+ /barcode exch def % We are given a barcode string
+
+ /includetext false def % Enable/disable text
+ /textfont /Helvetica def
+ /textsize 12 def
+ /textpos (unset) def
+ /height 0.7 def
+ /guardwhitespace false def
+ /guardpos (unset) def
+
+ % Parse the input options
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /height height cvr def
+ textpos (unset) eq {
+ /textpos height 72 mul 1 add def
+ } {
+ /textpos textpos cvr def
+ } ifelse
+ guardpos (unset) eq {
+ /guardpos textpos 1 add def
+ } {
+ /guardpos guardpos cvr def
+ } ifelse
+
+ /barlen barcode length def % Length of the code
+
+ % Create an array containing the character mappings
+ /encs
+ [ (3211) (2221) (2122) (1411) (1132)
+ (1231) (1114) (1312) (1213) (3112)
+ (112) (11)
+ ] def
+
+ % Create a string of the available characters
+ /barchars (0123456789) def
+
+ % Determine the mirror map based on mod 4 checksum
+ /mirrormap [(00) (01) (10) (11)] barcode 0 2 getinterval cvi 4 mod get def
+
+ /sbs 13 string def
+
+ guardwhitespace {
+ /txt 3 array def
+ txt 2 [(>) 22 guardpos textfont textsize] put
+ } {
+ /txt 2 array def
+ } ifelse
+
+ 0 1 1 {
+ /i exch def
+
+ % Prefix with either a start character or separator character
+ i 0 eq {
+ sbs 0 encs 10 get putinterval
+ } {
+ sbs i 1 sub 6 mul 7 add encs 11 get putinterval
+ } ifelse
+
+ % Lookup the encoding for the barcode character
+ barcode i 1 getinterval barchars exch search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard seek and post
+ /enc encs indx get def % Get the indxth encoding
+ mirrormap i get 49 eq { % Reverse enc if 1 in this position in mirrormap
+ /enclen enc length def
+ /revenc enclen string def
+ 0 1 enclen 1 sub {
+ /j exch def
+ /char enc j get def
+ revenc enclen j sub 1 sub char put
+ } for
+ /enc revenc def
+ } if
+ sbs i 6 mul 3 add enc putinterval % Put encoded digit into sbs
+ txt i [barcode i 1 getinterval i 1 sub 9 mul 13 add textpos textfont textsize] put
+ } for
+
+ % Return the arguments
+ /retval 4 dict def
+ retval (sbs) sbs put
+ retval (bhs) [12{height}repeat] put
+ retval (bbs) [12{0}repeat] put
+ includetext {
+ retval (txt) txt put
+ } if
+ retval (opt) renderopts put
+ retval
+
+ end
+
+} bind def
+/ean2 load 0 1 dict put
+% --END ENCODER ean2--
+
+% --BEGIN ENCODER isbn--
+% --REQUIRES ean13--
+/isbn {
+
+ 0 begin
+
+ /options exch def % We are given an options string
+ /renderopts options def
+ /isbntxt exch def % We are given the isbn text with dashes
+
+ /includetext false def % Enable/disable ISBN text
+ /isbnfont /Courier def
+ /isbnsize 9 def
+ /isbnpos (unset) def
+ /height 1 def
+
+ % Parse the input options
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+
+ /isbnfont isbnfont cvlit def
+ /isbnsize isbnsize cvr def
+ /height height cvr def
+ isbnpos (unset) eq {
+ /isbnpos height 72 mul 3 add def
+ } {
+ /isbnpos isbnpos cvr def
+ } ifelse
+
+ % Read the digits from isbntxt and calculate checksums
+ /isbn 13 string def
+ /checksum10 0 def
+ /checksum13 0 def
+ /i 0 def /n 0 def
+ { % loop
+ /isbnchar isbntxt i get 48 sub def
+ isbnchar -3 ne { % Ignore dashes
+ isbn n isbnchar 48 add put
+ /checksum10 checksum10 10 n sub isbnchar mul add def
+ n 2 mod 0 eq {
+ /checksum13 isbnchar checksum13 add def
+ } {
+ /checksum13 isbnchar 3 mul checksum13 add def
+ } ifelse
+ /n n 1 add def
+ } if
+ /i i 1 add def
+ i isbntxt length eq {exit} if
+ } loop
+
+ % Add the ISBN header to the isbntxt
+ n 9 eq n 10 eq or {
+ /checksum 11 checksum10 11 mod sub 11 mod def
+ /isbn isbn 0 9 getinterval def
+ /pad 18 string def
+ } {
+ /checksum 10 checksum13 10 mod sub 10 mod def
+ /isbn isbn 0 12 getinterval def
+ /pad 22 string def
+ } ifelse
+ pad 0 (ISBN ) putinterval
+ pad 5 isbntxt putinterval % Add isbntxt to the pad
+
+ % Add checksum digit if isbntxt length is 11 or 15
+ isbntxt length 11 eq isbntxt length 15 eq or {
+ pad isbntxt length 5 add 45 put % Put a dash
+ checksum 10 eq {
+ pad isbntxt length 6 add checksum 78 add put % Check digit for 10 is X
+ } {
+ pad isbntxt length 6 add checksum 48 add put % Put check digit
+ } ifelse
+ } if
+ /isbntxt pad def % isbntxt=pad
+
+ % Convert ISBN digits to EAN-13
+ /barcode 12 string def
+ isbn length 9 eq {
+ barcode 0 (978) putinterval
+ barcode 3 isbn putinterval
+ } {
+ barcode 0 isbn putinterval
+ } ifelse
+
+ % Get the result of encoding with ean13
+ /args barcode options ean13 def
+
+ % Add the ISBN text
+ includetext {
+ isbn length 9 eq {
+ /isbnxpos -1 def
+ } {
+ /isbnxpos -12 def
+ } ifelse
+ args (txt) known {
+ /txt args (txt) get def
+ /newtxt txt length 1 add array def
+ newtxt 0 txt putinterval
+ newtxt newtxt length 1 sub [isbntxt isbnxpos isbnpos isbnfont isbnsize] put
+ args (txt) newtxt put
+ } {
+ args (txt) [ [isbntxt isbnxpos isbnpos isbnfont isbnsize] ] put
+ } ifelse
+ } if
+
+ args (opt) renderopts put
+ args
+
+ end
+
+} bind def
+/isbn load 0 1 dict put
+% --END ENCODER isbn--
+
+% --BEGIN ENCODER code128--
+/code128 {
+
+ 0 begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /renderopts options def
+ /barcode exch def % We are given a barcode string
+
+ /includetext false def % Enable/disable text
+ /textfont /Courier def
+ /textsize 10 def
+ /textpos -7 def
+ /height 1 def
+
+ % Parse the input options
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textpos textpos cvr def
+ /height height cvr def
+
+ % Create an array containing the character mappings
+ /encs
+ [ (212222) (222122) (222221) (121223) (121322) (131222) (122213)
+ (122312) (132212) (221213) (221312) (231212) (112232) (122132)
+ (122231) (113222) (123122) (123221) (223211) (221132) (221231)
+ (213212) (223112) (312131) (311222) (321122) (321221) (312212)
+ (322112) (322211) (212123) (212321) (232121) (111323) (131123)
+ (131321) (112313) (132113) (132311) (211313) (231113) (231311)
+ (112133) (112331) (132131) (113123) (113321) (133121) (313121)
+ (211331) (231131) (213113) (213311) (213131) (311123) (311321)
+ (331121) (312113) (312311) (332111) (314111) (221411) (431111)
+ (111224) (111422) (121124) (121421) (141122) (141221) (112214)
+ (112412) (122114) (122411) (142112) (142211) (241211) (221114)
+ (413111) (241112) (134111) (111242) (121142) (121241) (114212)
+ (124112) (124211) (411212) (421112) (421211) (212141) (214121)
+ (412121) (111143) (111341) (131141) (114113) (114311) (411113)
+ (411311) (113141) (114131) (311141) (411131) (211412) (211214)
+ (211232) (2331112)
+ ] def
+
+ % Create a string of the available characters for alphabets A and B
+ /barchars ( !"#$%&'\(\)*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~) def
+ /barlen barcode length def % Length of the code
+ /sbs barlen 6 mul string def % sbs is 6 times length of barcode
+ /txt barlen array def
+
+ /mode -1 def % A=0, B=1, C=2
+ /checksum barcode 1 3 getinterval cvi def % Initialise the checksum
+
+ /i 0 def /j 0 def
+ { % loop
+ i barlen eq {exit} if
+ barcode i 1 getinterval (^) eq {
+ % indx is given by the next three characters
+ /indx barcode i 1 add 3 getinterval cvi def
+ txt j [( ) j 11 mul textpos textfont textsize] put
+ /i i 4 add def
+ } {
+ % indx depends on the mode
+ mode 2 eq {
+ /indx barcode i 2 getinterval cvi def
+ txt j [barcode i 2 getinterval j 11 mul textpos textfont textsize] put
+ /i i 2 add def
+ } {
+ barchars barcode i 1 getinterval search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard seek and post
+ txt j [barchars indx 1 getinterval j 11 mul textpos textfont textsize] put
+ /i i 1 add def
+ } ifelse
+ } ifelse
+ /enc encs indx get def % Get the indxth encoding
+ sbs j 6 mul enc putinterval % Put encoded digit into sbs
+
+ % Update the mode
+ indx 101 eq indx 103 eq or {/mode 0 def} if
+ indx 100 eq indx 104 eq or {/mode 1 def} if
+ indx 99 eq indx 105 eq or {/mode 2 def} if
+
+ /checksum indx j mul checksum add def % checksum+=indx*j
+ /j j 1 add def
+ } loop
+
+ % Put the checksum character
+ /checksum checksum 103 mod def
+ sbs j 6 mul encs checksum get putinterval
+
+ % Put the end character
+ sbs j 6 mul 6 add encs 106 get putinterval
+
+ % Shrink sbs and txt to fit exactly
+ /sbs sbs 0 j 6 mul 13 add getinterval def
+ /txt txt 0 j getinterval def
+
+ % Return the arguments
+ /retval 1 dict def
+ retval (sbs) sbs put
+ retval (bhs) [sbs length 1 add 2 idiv {height} repeat] put
+ retval (bbs) [sbs length 1 add 2 idiv {0} repeat] put
+ includetext {
+ retval (txt) txt put
+ } if
+ retval (opt) renderopts put
+ retval
+
+ end
+
+} bind def
+/code128 load 0 1 dict put
+% --END ENCODER code128--
+
+% --BEGIN ENCODER code39--
+/code39 {
+
+ 0 begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /renderopts options def
+ /barcode exch def % We are given a barcode string
+
+ /includecheck false def % Enable/disable checkdigit
+ /includetext false def
+ /includecheckintext false def
+ /textfont /Courier def
+ /textsize 10 def
+ /textpos -7 def
+ /height 1 def
+
+ % Parse the input options
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textpos textpos cvr def
+ /height height cvr def
+
+ % Create an array containing the character mappings
+ /encs
+ [ (1113313111) (3113111131) (1133111131) (3133111111) (1113311131)
+ (3113311111) (1133311111) (1113113131) (3113113111) (1133113111)
+ (3111131131) (1131131131) (3131131111) (1111331131) (3111331111)
+ (1131331111) (1111133131) (3111133111) (1131133111) (1111333111)
+ (3111111331) (1131111331) (3131111311) (1111311331) (3111311311)
+ (1131311311) (1111113331) (3111113311) (1131113311) (1111313311)
+ (3311111131) (1331111131) (3331111111) (1311311131) (3311311111)
+ (1331311111) (1311113131) (3311113111) (1331113111) (1313131111)
+ (1313111311) (1311131311) (1113131311) (1311313111)
+ ] def
+
+ % Create a string of the available characters
+ /barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%*) def
+
+ /barlen barcode length def % Length of the code
+
+ includecheck {
+ /sbs barlen 10 mul 30 add string def
+ /txt barlen 3 add array def
+ } {
+ /sbs barlen 10 mul 20 add string def
+ /txt barlen 2 add array def
+ } ifelse
+
+ /checksum 0 def
+
+ % Put the start character
+ sbs 0 encs 43 get putinterval
+ txt 0 [(*) 0 textpos textfont textsize] put
+
+ 0 1 barlen 1 sub {
+ /i exch def
+ % Lookup the encoding for the each barcode character
+ barcode i 1 getinterval barchars exch search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard seek and post
+ /enc encs indx get def % Get the indxth encoding
+ sbs i 10 mul 10 add enc putinterval % Put encoded digit into sbs
+ txt i 1 add [barcode i 1 getinterval i 1 add 16 mul textpos textfont 0] put
+ /checksum checksum indx add def
+ } for
+
+ % Put the checksum and end characters
+ includecheck {
+ /checksum checksum 43 mod def
+ sbs barlen 10 mul 10 add encs checksum get putinterval
+ includecheckintext {
+ txt barlen 1 add [barchars checksum 1 getinterval barlen 1 add 16 mul textpos textfont 0] put
+ } {
+ txt barlen 1 add [() barlen 1 add 16 mul textpos textfont 0] put
+ } ifelse
+ sbs barlen 10 mul 20 add encs 43 get putinterval
+ txt barlen 2 add [(*) barlen 2 add 16 mul textpos textfont 0] put
+ } {
+ sbs barlen 10 mul 10 add encs 43 get putinterval
+ txt barlen 1 add [(*) barlen 1 add 16 mul textpos textfont 0] put
+ } ifelse
+
+ % Return the arguments
+ /retval 2 dict def
+ retval (sbs) sbs put
+ retval (bhs) [sbs length 1 add 2 idiv {height} repeat] put
+ retval (bbs) [sbs length 1 add 2 idiv {0} repeat] put
+ includetext {
+ retval (txt) txt put
+ } if
+ retval (opt) renderopts put
+ retval
+
+ end
+
+} bind def
+/code39 load 0 1 dict put
+% --END ENCODER code39--
+
+% --BEGIN ENCODER code93--
+/code93 {
+
+ 0 begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /renderopts options def
+ /barcode exch def % We are given a barcode string
+
+ /includecheck false def % Enable/disable checkdigit
+ /includetext false def % Enable/disable text
+ /textfont /Courier def
+ /textsize 10 def
+ /textpos -7 def
+ /height 1 def
+
+ % Parse the input options
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textpos textpos cvr def
+ /height height cvr def
+
+ /encs
+ [ (131112) (111213) (111312) (111411) (121113)
+ (121212) (121311) (111114) (131211) (141111)
+ (211113) (211212) (211311) (221112) (221211)
+ (231111) (112113) (112212) (112311) (122112)
+ (132111) (111123) (111222) (111321) (121122)
+ (131121) (212112) (212211) (211122) (211221)
+ (221121) (222111) (112122) (112221) (122121)
+ (123111) (121131) (311112) (311211) (321111)
+ (112131) (113121) (211131) (121221) (312111)
+ (311121) (122211) (111141) (1111411)
+ ] def
+
+ % Create a string of the available characters
+ /barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%) def
+
+ /barlen barcode length def % Length of the code
+ barcode {
+ (^) search false eq {pop exit} if
+ pop pop /barlen barlen 3 sub def
+ } loop
+
+ includecheck {
+ /sbs barlen 6 mul 25 add string def
+ } {
+ /sbs barlen 6 mul 13 add string def
+ } ifelse
+ /txt barlen array def
+
+ % Put the start character
+ sbs 0 encs 47 get putinterval
+
+ /checksum1 0 def /checksum2 0 def
+
+ /i 0 def /j 0 def
+ { % loop
+ j barlen eq {exit} if
+ barcode i 1 getinterval (^) eq {
+ % indx is given by the next three characters
+ /indx barcode i 1 add 3 getinterval cvi def
+ txt j [( ) j 9 mul 9 add textpos textfont textsize] put
+ /i i 4 add def
+ } {
+ barchars barcode i 1 getinterval search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard seek and post
+ txt j [barchars indx 1 getinterval j 9 mul 9 add textpos textfont textsize] put
+ /i i 1 add def
+ } ifelse
+ /enc encs indx get def % Get the indxth encoding
+ sbs j 6 mul 6 add enc putinterval % Put encoded digit into sbs
+ /checksum1 checksum1 barlen j sub 1 sub 20 mod 1 add indx mul add def
+ /checksum2 checksum2 barlen j sub 15 mod 1 add indx mul add def
+ /j j 1 add def
+ } loop
+
+ includecheck {
+ % Put the first checksum character
+ /checksum1 checksum1 47 mod def
+ /checksum2 checksum2 checksum1 add 47 mod def
+ sbs j 6 mul 6 add encs checksum1 get putinterval
+ sbs j 6 mul 12 add encs checksum2 get putinterval
+ % Put the end character
+ sbs j 6 mul 18 add encs 48 get putinterval
+ } {
+ % Put the end character
+ sbs j 6 mul 6 add encs 48 get putinterval
+ } ifelse
+
+ % Return the arguments
+ /retval 1 dict def
+ retval (sbs) sbs put
+ retval (bhs) [sbs length 1 add 2 idiv {height} repeat] put
+ retval (bbs) [sbs length 1 add 2 idiv {0} repeat] put
+ includetext {
+ retval (txt) txt put
+ } if
+ retval (opt) renderopts put
+ retval
+
+ end
+
+} bind def
+/code93 load 0 1 dict put
+% --END ENCODER code93--
+
+% --BEGIN ENCODER interleaved2of5--
+/interleaved2of5 {
+
+ 0 begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /renderopts options def
+ /barcode exch def % We are given a barcode string
+
+ /includecheck false def % Enable/disable checkdigit
+ /includetext false def % Enable/disable text
+ /includecheckintext false def
+ /textfont /Courier def
+ /textsize 10 def
+ /textpos -7 def
+ /height 1 def
+
+ % Parse the input options
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textpos textpos cvr def
+ /height height cvr def
+
+ /barlen barcode length def % Length of the code
+
+ % Prefix 0 to barcode if length is even and including checkdigit
+ % or length is odd and not including checkdigit
+ barlen 2 mod 0 eq includecheck and % even & includecheck
+ barlen 2 mod 0 ne includecheck not and or { % odd & !includecheck
+ /pad barlen 1 add string def % Create pad one bigger than barcode
+ pad 0 48 put % Put ascii 0 at start of pad
+ pad 1 barcode putinterval % Add barcode to the end of pad
+ /barcode pad def % barcode=pad
+ /barlen barlen 1 add def % barlen++
+ } if
+
+ % Add checksum to end of barcode
+ includecheck {
+ /checksum 0 def
+ 0 1 barlen 1 sub {
+ /i exch def
+ i 2 mod 0 eq {
+ /checksum checksum barcode i get 48 sub 3 mul add def
+ } {
+ /checksum checksum barcode i get 48 sub add def
+ } ifelse
+ } for
+ /checksum 10 checksum 10 mod sub 10 mod def
+ /pad barlen 1 add string def % Create pad one bigger than barcode
+ pad 0 barcode putinterval % Add barcode to the start of pad
+ pad barlen checksum 48 add put % Add checksum to end of pad
+ /barcode pad def % barcode=pad
+ /barlen barlen 1 add def % barlen++
+ } if
+
+ % Create an array containing the character mappings
+ /encs
+ [ (11331) (31113) (13113) (33111) (11313)
+ (31311) (13311) (11133) (31131) (13131)
+ (1111) (3111)
+ ] def
+
+ % Create a string of the available characters
+ /barchars (0123456789) def
+ /sbs barlen 5 mul 8 add string def
+ /txt barlen array def
+
+ % Put the start character
+ sbs 0 encs 10 get putinterval
+
+ 0 2 barlen 1 sub {
+ /i exch def
+ % Lookup the encodings for two consecutive barcode characters
+ barcode i 1 getinterval barchars exch search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard seek and post
+ /enca encs indx get def % Get the indxth encoding
+
+ barcode i 1 add 1 getinterval barchars exch search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard seek and post
+ /encb encs indx get def % Get the indxth encoding
+
+ % Interleave the two character encodings
+ /intl enca length 2 mul string def
+ 0 1 enca length 1 sub {
+ /j exch def
+ /achar enca j get def
+ /bchar encb j get def
+ intl j 2 mul achar put
+ intl j 2 mul 1 add bchar put
+ } for
+
+ sbs i 5 mul 4 add intl putinterval % Put encoded digit into sbs
+ txt i [barcode i 1 getinterval i 9 mul 4 add textpos textfont textsize] put
+ includecheck includecheckintext not and barlen 2 sub i eq and {
+ txt i 1 add [( ) i 1 add 9 mul 4 add textpos textfont textsize] put
+ } {
+ txt i 1 add [barcode i 1 add 1 getinterval i 1 add 9 mul 4 add textpos textfont textsize] put
+ } ifelse
+ } for
+
+ % Put the end character
+ sbs barlen 5 mul 4 add encs 11 get putinterval
+
+ % Return the arguments
+ /retval 1 dict def
+ retval (sbs) sbs put
+ retval (bhs) [sbs length 1 add 2 idiv {height} repeat] put
+ retval (bbs) [sbs length 1 add 2 idiv {0} repeat] put
+ includetext {
+ retval (txt) txt put
+ } if
+ retval (opt) renderopts put
+ retval
+
+ end
+
+} bind def
+/interleaved2of5 load 0 1 dict put
+% --END ENCODER interleaved2of5--
+
+% --BEGIN ENCODER code2of5--
+/code2of5 {
+
+ % Thanks to Michael Landers
+
+ 0 begin % Confine variable to local scope
+
+ /options exch def % We are given an option string
+ /renderopts options def
+ /barcode exch def % We are given a barcode string
+
+ /includecheck false def
+ /includetext false def % Enable/disable text
+ /includecheckintext false def
+ /textfont /Courier def
+ /textsize 10 def
+ /textpos -7 def
+ /height 1 def
+
+ % Parse the input options
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textpos textpos cvr def
+ /height height cvr def
+
+ % Create an array containing the character mappings
+ /encs
+ [ (1111313111) (3111111131) (1131111131) (3131111111)
+ (1111311131) (3111311111) (1131311111) (1111113131)
+ (3111113111) (1131113111) (313111) (311131)
+ ] def
+
+ % Create a string of the available characters
+ /barchars (0123456789) def
+
+ /barlen barcode length def % Length of the code
+
+ includecheck {
+ /sbs barlen 10 mul 22 add string def
+ /txt barlen 1 add array def
+ } {
+ /sbs barlen 10 mul 12 add string def
+ /txt barlen array def
+ } ifelse
+
+ % Put the start character
+ sbs 0 encs 10 get putinterval
+
+ /checksum 0 def
+
+ 0 1 barlen 1 sub {
+ /i exch def
+ % Lookup the encoding for the each barcode character
+ barcode i 1 getinterval barchars exch search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard seek and post
+ /enc encs indx get def % Get the indxth encoding
+ sbs i 10 mul 6 add enc putinterval % Put encoded digit into sbs
+ txt i [barcode i 1 getinterval i 14 mul 10 add textpos textfont textsize] put
+ barlen i sub 2 mod 0 eq {
+ /checksum checksum indx add def
+ } {
+ /checksum checksum indx 3 mul add def
+ } ifelse
+ } for
+
+ % Put the checksum and end characters
+ includecheck {
+ /checksum 10 checksum 10 mod sub 10 mod def
+ sbs barlen 10 mul 6 add encs checksum get putinterval
+ sbs barlen 10 mul 16 add encs 11 get putinterval
+ includecheckintext {
+ txt barlen [barchars checksum 1 getinterval barlen 14 mul 10 add textpos textfont textsize] put
+ } {
+ txt barlen [( ) barlen 14 mul 10 add textpos textfont textsize] put
+ } ifelse
+ } {
+ sbs barlen 10 mul 6 add encs 11 get putinterval
+ } ifelse
+
+ % Return the arguments
+ /retval 1 dict def
+ retval (sbs) sbs put
+ retval (bhs) [sbs length 1 add 2 idiv {height} repeat] put
+ retval (bbs) [sbs length 1 add 2 idiv {0} repeat] put
+ includetext {
+ retval (txt) txt put
+ } if
+ retval (opt) renderopts put
+ retval
+
+ end
+
+} bind def
+/code2of5 load 0 1 dict put
+% --END ENCODER code2of5--
+
+% --BEGIN ENCODER code11--
+/code11 {
+
+ 0 begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /renderopts options def
+ /barcode exch def % We are given a barcode string
+
+ /includecheck false def
+ /includetext false def
+ /includecheckintext false def
+ /textfont /Courier def
+ /textsize 10 def
+ /textpos -7 def
+ /height 1 def
+
+ % Parse the input options
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textpos textpos cvr def
+ /height height cvr def
+
+ % Create an array containing the character mappings
+ /encs
+ [ (111131) (311131) (131131) (331111) (113131)
+ (313111) (133111) (111331) (311311) (311111)
+ (113111) (113311)
+ ] def
+
+ % Create a string of the available characters
+ /barchars (0123456789-) def
+
+ /barlen barcode length def % Length of the code
+
+ includecheck {
+ barlen 10 ge {
+ /sbs barlen 6 mul 24 add string def
+ /txt barlen 2 add array def
+ } {
+ /sbs barlen 6 mul 18 add string def
+ /txt barlen 1 add array def
+ } ifelse
+ } {
+ /sbs barlen 6 mul 12 add string def
+ /txt barlen array def
+ } ifelse
+
+ % Put the start character
+ sbs 0 encs 10 get putinterval
+
+ /checksum1 0 def /checksum2 0 def
+
+ /xpos 8 def
+ 0 1 barlen 1 sub {
+ /i exch def
+ % Lookup the encoding for the each barcode character
+ barcode i 1 getinterval barchars exch search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard seek and post
+ /enc encs indx get def % Get the indxth encoding
+ sbs i 6 mul 6 add enc putinterval % Put encoded digit into sbs
+ txt i [barcode i 1 getinterval xpos textpos textfont textsize] put
+ 0 1 5 { % xpos+=width of the character
+ /xpos exch enc exch get 48 sub xpos add def
+ } for
+ /checksum1 checksum1 barlen i sub 1 sub 10 mod 1 add indx mul add def
+ /checksum2 checksum2 barlen i sub 9 mod 1 add indx mul add def
+ } for
+
+ % Put the checksum and end characters
+ includecheck {
+ /checksum1 checksum1 11 mod def
+ barlen 10 ge {
+ /checksum2 checksum2 checksum1 add 11 mod def
+ sbs barlen 6 mul 6 add encs checksum1 get putinterval
+ sbs barlen 6 mul 12 add encs checksum2 get putinterval
+ includecheckintext {
+ txt barlen [barchars checksum1 1 getinterval xpos textpos textfont 0] put
+ /enc encs checksum1 get def
+ 0 1 5 { % xpos+=width of the character
+ /xpos exch enc exch get 48 sub xpos add def
+ } for
+ txt barlen 1 add [barchars checksum2 1 getinterval xpos textpos textfont 0] put
+ } {
+ txt barlen [() xpos textpos textfont 0] put
+ txt barlen 1 add [() xpos textpos textfont 0] put
+ } ifelse
+ sbs barlen 6 mul 18 add encs 11 get putinterval
+ } {
+ sbs barlen 6 mul 6 add encs checksum1 get putinterval
+ includecheckintext {
+ txt barlen [barchars checksum1 1 getinterval xpos textpos textfont 0] put
+ } {
+ txt barlen [() xpos textpos textfont 0] put
+ } ifelse
+ sbs barlen 6 mul 12 add encs 11 get putinterval
+ } ifelse
+ } {
+ sbs barlen 6 mul 6 add encs 11 get putinterval
+ } ifelse
+
+ % Return the arguments
+ /retval 1 dict def
+ retval (sbs) sbs put
+ retval (bhs) [sbs length 1 add 2 idiv {height} repeat] put
+ retval (bbs) [sbs length 1 add 2 idiv {0} repeat] put
+ includetext {
+ retval (txt) txt put
+ } if
+ retval (opt) renderopts put
+ retval
+
+ end
+
+} bind def
+/code11 load 0 1 dict put
+% --END ENCODER code11--
+
+% --BEGIN ENCODER rationalizedCodabar--
+/rationalizedCodabar {
+
+ 0 begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /renderopts options def
+ /barcode exch def % We are given a barcode string
+
+ /includecheck false def % Enable/disable checkdigit
+ /includetext false def % Enable/disable text
+ /includecheckintext false def
+ /textfont /Courier def
+ /textsize 10 def
+ /textpos -7 def
+ /height 1 def
+
+ % Parse the input options
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textpos textpos cvr def
+ /height height cvr def
+
+ % Create an array containing the character mappings
+ /encs
+ [ (11111331) (11113311) (11131131) (33111111) (11311311)
+ (31111311) (13111131) (13113111) (13311111) (31131111)
+ (11133111) (11331111) (31113131) (31311131) (31313111)
+ (11313131) (11331311) (13131131) (11131331) (11133311)
+ ] def
+
+ % Create a string of the available characters
+ /barchars (0123456789-$:/.+ABCD) def
+
+ /barlen barcode length def % Length of the code
+
+ includecheck {
+ /sbs barlen 8 mul 8 add string def
+ /txt barlen 1 add array def
+ } {
+ /sbs barlen 8 mul string def
+ /txt barlen array def
+ } ifelse
+
+ /checksum 0 def
+ /xpos 0 def
+ 0 1 barlen 2 sub {
+ /i exch def
+ % Lookup the encoding for the each barcode character
+ barcode i 1 getinterval barchars exch search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard seek and post
+ /enc encs indx get def % Get the indxth encoding
+ sbs i 8 mul enc putinterval % Put encoded digit into sbs
+ txt i [barcode i 1 getinterval xpos textpos textfont textsize] put
+ 0 1 7 { % xpos+=width of the character
+ /xpos exch enc exch get 48 sub xpos add def
+ } for
+ /checksum checksum indx add def
+ } for
+
+ % Find index of last character
+ barcode barlen 1 sub 1 getinterval barchars exch search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard seek and post
+
+ includecheck {
+ % Put the checksum character
+ /checksum checksum indx add def
+ /checksum 16 checksum 16 mod sub 16 mod def
+ sbs barlen 8 mul 8 sub encs checksum get putinterval
+ includecheckintext {
+ txt barlen 1 sub [barchars checksum 1 getinterval xpos textpos textfont textsize] put
+ } {
+ txt barlen 1 sub [( ) xpos textpos textfont textsize] put
+ } ifelse
+ 0 1 7 { % xpos+=width of the character
+ /xpos exch encs checksum get exch get 48 sub xpos add def
+ } for
+ % Put the end character
+ /enc encs indx get def % Get the indxth encoding
+ sbs barlen 8 mul enc putinterval % Put encoded digit into sbs
+ txt barlen [barcode barlen 1 sub 1 getinterval xpos textpos textfont textsize] put
+ } {
+ % Put the end character
+ /enc encs indx get def % Get the indxth encoding
+ sbs barlen 8 mul 8 sub enc putinterval % Put encoded digit into sbs
+ txt barlen 1 sub [barcode barlen 1 sub 1 getinterval xpos textpos textfont textsize] put
+ } ifelse
+
+ % Return the arguments
+ /retval 1 dict def
+ retval (sbs) sbs put
+ retval (bhs) [sbs length 1 add 2 idiv {height} repeat] put
+ retval (bbs) [sbs length 1 add 2 idiv {0} repeat] put
+ includetext {
+ retval (txt) txt put
+ } if
+ retval (opt) renderopts put
+ retval
+
+ end
+
+} bind def
+/rationalizedCodabar load 0 1 dict put
+% --END ENCODER rationalizedCodabar--
+
+% --BEGIN ENCODER postnet--
+/postnet {
+
+ % Thanks to Ross McFarland
+
+ 0 begin
+
+ /options exch def % We are given an option string
+ /renderopts options def
+ /barcode exch def % We are given a barcode string
+
+ /includetext false def % Enable/disable text
+ /includecheckintext false def
+ /textfont /Courier def
+ /textsize 10 def
+ /textpos -7 def
+ /height 0.2 def
+
+ % Parse the input options
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textpos textpos cvr def
+ /height height cvr def
+
+ /barlen barcode length def
+
+ % Create an array containing the character mappings
+ /encs
+ [ (55222) (22255) (22525) (22552) (25225)
+ (25252) (25522) (52225) (52252) (52522)
+ (5) (5)
+ ] def
+
+ % Create a string of the available characters
+ /barchars (0123456789) def
+
+ /bhs barlen 5 mul 7 add array def
+ /txt barlen 1 add array def
+
+ % Put start character
+ /enc encs 10 get def
+ /heights enc length array def
+ 0 1 enc length 1 sub {
+ /j exch def
+ heights j enc j 1 getinterval cvi height mul 5 div put
+ } for
+ bhs 0 heights putinterval % Put encoded digit into sbs
+
+ /checksum 0 def
+ 0 1 barlen 1 sub {
+ /i exch def
+ % Lookup the encoding for the each barcode character
+ barcode i 1 getinterval barchars exch search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard seek and post
+ /enc encs indx get def % Get the indxth encoding
+ /heights enc length array def
+ 0 1 enc length 1 sub {
+ /j exch def
+ heights j enc j 1 getinterval cvi height mul 5 div put
+ } for
+ bhs i 5 mul 1 add heights putinterval % Put encoded digit into sbs
+ txt i [barcode i 1 getinterval i 20 mul 4 add textpos textfont textsize] put
+ /checksum checksum indx add def % checksum+=indx
+ } for
+
+ % Put the checksum character
+ /checksum 10 checksum 10 mod sub 10 mod def
+ /enc encs checksum get def
+ /heights enc length array def
+ 0 1 enc length 1 sub {
+ /j exch def
+ heights j enc j 1 getinterval cvi height mul 5 div put
+ } for
+ bhs barlen 5 mul 1 add heights putinterval
+
+ includecheckintext {
+ txt barlen [barchars checksum 1 getinterval barlen 20 mul 4 add textpos textfont textsize] put
+ } {
+ txt barlen [( ) barlen 10 mul 4 add textpos textfont textsize] put
+ } ifelse
+
+ % Put end character
+ /enc encs 11 get def
+ /heights enc length array def
+ 0 1 enc length 1 sub {
+ /j exch def
+ heights j enc j 1 getinterval cvi height mul 5 div put
+ } for
+ bhs barlen 5 mul 6 add heights putinterval
+
+ /retval 1 dict def
+ retval (bhs) bhs put
+ retval (bbs) [bhs length {0} repeat] put
+ /sbs bhs length 2 mul 1 sub string def
+ 0 1 sbs length 1 sub {
+ sbs exch 50 put % Fill with 2s
+ } for
+ retval (sbs) sbs put
+ includetext {
+ retval (txt) txt put
+ } if
+ retval (opt) renderopts put
+ retval
+
+ end
+
+} bind def
+/postnet load 0 1 dict put
+% --END ENCODER postnet--
+
+% --BEGIN ENCODER royalmail--
+/royalmail {
+
+ 0 begin
+
+ /options exch def % We are given an option string
+ /renderopts options def
+ /barcode exch def % We are given a barcode string
+
+ /includetext false def % Enable/disable text
+ /includecheckintext false def
+ /textfont /Courier def
+ /textsize 10 def
+ /textpos -7 def
+ /height 0.3 def
+
+ % Parse the input options
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textpos textpos cvr def
+ /height height cvr def
+
+ % Create an array containing the character mappings
+ /encs
+ [ (3300) (2211) (2301) (2310) (3201) (3210)
+ (1122) (0033) (0123) (0132) (1023) (1032)
+ (1302) (0213) (0303) (0312) (1203) (1212)
+ (1320) (0231) (0321) (0330) (1221) (1230)
+ (3102) (2013) (2103) (2112) (3003) (3012)
+ (3120) (2031) (2121) (2130) (3021) (3030)
+ (2) (3)
+ ] def
+
+ % Create a string of the available characters
+ /barchars (ZUVWXY501234B6789AHCDEFGNIJKLMTOPQRS) def
+
+ /barlen barcode length def
+ /encstr barlen 4 mul 6 add string def
+ /txt barlen 1 add array def
+
+ % Put start character
+ encstr 0 encs 36 get putinterval
+
+ /checksumrow 0 def
+ /checksumcol 0 def
+ 0 1 barlen 1 sub {
+ /i exch def
+ % Lookup the encoding for the each barcode character
+ barcode i 1 getinterval barchars exch search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard seek and post
+ /enc encs indx get def % Get the indxth encoding
+ encstr i 4 mul 1 add enc putinterval
+ txt i [barcode i 1 getinterval i 16 mul 4 add textpos textfont textsize] put
+ /checksumrow checksumrow indx 6 idiv add def
+ /checksumcol checksumcol indx 6 mod add def
+ } for
+
+ % Put the checksum character
+ /checksum checksumrow 6 mod 6 mul checksumcol 6 mod add def
+ /enc encs checksum get def
+ encstr barlen 4 mul 1 add enc putinterval
+ includecheckintext {
+ txt barlen [barchars checksum 1 getinterval barlen 16 mul 4 add textpos textfont textsize] put
+ } {
+ txt barlen [( ) barlen 16 mul 4 add textpos textfont textsize] put
+ } ifelse
+
+ % Put end character
+ encstr barlen 4 mul 5 add encs 37 get putinterval
+
+ /bbs encstr length array def
+ /bhs encstr length array def
+ 0 1 encstr length 1 sub {
+ /i exch def
+ /enc encstr i 1 getinterval def
+ enc (0) eq {
+ bbs i 3 height mul 8 div put
+ bhs i 2 height mul 8 div put
+ } if
+ enc (1) eq {
+ bbs i 0 height mul 8 div put
+ bhs i 5 height mul 8 div put
+ } if
+ enc (2) eq {
+ bbs i 3 height mul 8 div put
+ bhs i 5 height mul 8 div put
+ } if
+ enc (3) eq {
+ bbs i 0 height mul 8 div put
+ bhs i 8 height mul 8 div put
+ } if
+ } for
+
+ /retval 4 dict def
+ retval (bbs) bbs put
+ retval (bhs) bhs put
+ /sbs bhs length 2 mul 1 sub string def
+ 0 1 sbs length 1 sub {
+ sbs exch 50 put % Fill with 2s
+ } for
+ retval (sbs) sbs put
+ includetext {
+ retval (txt) txt put
+ } if
+ retval (opt) renderopts put
+ retval
+
+ end
+
+} bind def
+/royalmail load 0 1 dict put
+% --END ENCODER royalmail--
+
+% --BEGIN ENCODER auspost--
+/auspost {
+
+ 0 begin
+
+ /options exch def % We are given an option string
+ /renderopts options def
+ /barcode exch def % We are given a barcode string
+
+ /includetext false def % Enable/disable text
+ /textfont /Courier def
+ /textsize 10 def
+ /textpos -7 def
+ /height 0.3 def
+
+ % Parse the input options
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textpos textpos cvr def
+ /height height cvr def
+
+ % Create an array containing the character mappings
+ /encs
+ [ (000) (001) (002) (010) (011) (012) (020) (021)
+ (022) (100) (101) (102) (110) (111) (112) (120)
+ (121) (122) (200) (201) (202) (210) (211) (212)
+ (220) (221) (222) (300) (301) (302) (310) (311)
+ (312) (320) (321) (322) (023) (030) (031) (032)
+ (033) (103) (113) (123) (130) (131) (132) (133)
+ (203) (213) (223) (230) (231) (232) (233) (303)
+ (313) (323) (330) (331) (332) (333) (003) (013)
+ (13) (3)
+ ] def
+
+ % Create a string of the available characters
+ /barchars (ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz #) def
+
+ % Create an array of numeric mappings
+ /nencs
+ [ (00) (01) (02) (10) (11)
+ (12) (20) (21) (22) (30)
+ ] def
+
+ /barlen barcode length def
+ /encstr 37 string def
+ /txt 8 array def
+
+ % Put start character
+ encstr 0 encs 64 get putinterval
+
+ % Encode the type
+ 0 1 1 {
+ /i exch def
+ nencs barcode i 1 getinterval cvi get
+ encstr i 2 mul 2 add 3 2 roll putinterval
+ } for
+
+ % Encode the DPID
+ 2 1 9 {
+ /i exch def
+ nencs barcode i 1 getinterval cvi get
+ encstr i 2 mul 2 add 3 2 roll putinterval
+ txt i 2 sub [barcode i 1 getinterval i 2 sub 8 mul 24 add textpos textfont textsize] put
+ } for
+
+ % Add a pad character
+ encstr 22 encs 65 get putinterval
+
+ % Create the 64x64 multiplication table
+ /rstable 64 64 mul array def
+ rstable 0 [ 64 {0} repeat ] putinterval
+ rstable 64 [ 0 1 63 {} for ] putinterval
+ /prev 1 def
+ 1 1 63 {
+ /i exch def
+ /next prev 1 bitshift def
+ next 64 and 0 ne {
+ /next next 67 xor def
+ } if
+ 0 1 63 {
+ /j exch def
+ /nextcell {rstable 64 next mul j add} def
+ nextcell rstable 64 prev mul j add get 1 bitshift put
+ nextcell get 64 and 0 ne {
+ nextcell nextcell get 67 xor put
+ } if
+ } for
+ /prev next def
+ } for
+
+ % Calculate the reed-solomon codes for triples
+ /rscodes 11 array def
+ rscodes 0 [ 4 {0} repeat ] putinterval
+ 2 3 22 {
+ /i exch def
+ rscodes rscodes length i 2 sub 3 idiv sub 1 sub
+ encstr i 1 getinterval cvi 16 mul
+ encstr i 1 add 1 getinterval cvi 4 mul add
+ encstr i 2 add 1 getinterval cvi add
+ put
+ } for
+ rscodes length 5 sub -1 0 {
+ /i exch def
+ 0 1 4 {
+ /j exch def
+ rscodes i j add rscodes i j add get
+ rstable 64 [48 17 29 30 1] j get mul rscodes i 4 add get add get
+ xor put
+ } for
+ } for
+
+ /checkcode (000000000000) def
+ 0 1 3 {
+ /i exch def
+ /enc rscodes 3 i sub get 4 3 string cvrs def
+ checkcode i 3 mul 3 enc length sub add enc putinterval
+ } for
+
+ % Put checkcode and end characters
+ encstr 23 checkcode putinterval
+ encstr 35 encs 64 get putinterval
+
+ /bbs encstr length array def
+ /bhs encstr length array def
+ 0 1 encstr length 1 sub {
+ /i exch def
+ /enc encstr i 1 getinterval def
+ enc (0) eq {
+ bbs i 0 height mul 8 div put
+ bhs i 8 height mul 8 div put
+ } if
+ enc (1) eq {
+ bbs i 3 height mul 8 div put
+ bhs i 5 height mul 8 div put
+ } if
+ enc (2) eq {
+ bbs i 0 height mul 8 div put
+ bhs i 5 height mul 8 div put
+ } if
+ enc (3) eq {
+ bbs i 3 height mul 8 div put
+ bhs i 2 height mul 8 div put
+ } if
+ } for
+
+ /retval 4 dict def
+ retval (bbs) bbs put
+ retval (bhs) bhs put
+ /sbs bhs length 2 mul 1 sub string def
+ 0 1 sbs length 1 sub {
+ sbs exch 50 put % Fill with 2s
+ } for
+ retval (sbs) sbs put
+ includetext {
+ retval (txt) txt put
+ } if
+ retval (opt) renderopts put
+ retval
+
+ end
+
+} bind def
+/auspost load 0 1 dict put
+% --END ENCODER auspost--
+
+% --BEGIN ENCODER kix--
+/kix {
+
+ 0 begin
+
+ /options exch def % We are given an option string
+ /renderopts options def
+ /barcode exch def % We are given a barcode string
+
+ /includetext false def % Enable/disable text
+ /includecheckintext false def
+ /textfont /Courier def
+ /textsize 10 def
+ /textpos -7 def
+ /height 0.3 def
+
+ % Parse the input options
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textpos textpos cvr def
+ /height height cvr def
+
+ % Create an array containing the character mappings
+ /encs
+ [ (0033) (0123) (0132) (1023) (1032) (1122)
+ (0213) (0303) (0312) (1203) (1212) (1302)
+ (0231) (0321) (0330) (1221) (1230) (1320)
+ (2013) (2103) (2112) (3003) (3012) (3102)
+ (2031) (2121) (2130) (3021) (3030) (3120)
+ (2211) (2301) (2310) (3201) (3210) (3300)
+ ] def
+
+ % Create a string of the available characters
+ /barchars (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ) def
+
+ /barlen barcode length def
+ /encstr barlen 4 mul string def
+ /txt barlen array def
+
+ 0 1 barlen 1 sub {
+ /i exch def
+ % Lookup the encoding for the each barcode character
+ barcode i 1 getinterval barchars exch search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard seek and post
+ /enc encs indx get def % Get the indxth encoding
+ encstr i 4 mul enc putinterval
+ txt i [barcode i 1 getinterval i 16 mul textpos textfont textsize] put
+ } for
+
+ /bbs encstr length array def
+ /bhs encstr length array def
+ 0 1 encstr length 1 sub {
+ /i exch def
+ /enc encstr i 1 getinterval def
+ enc (0) eq {
+ bbs i 3 height mul 8 div put
+ bhs i 2 height mul 8 div put
+ } if
+ enc (1) eq {
+ bbs i 0 height mul 8 div put
+ bhs i 5 height mul 8 div put
+ } if
+ enc (2) eq {
+ bbs i 3 height mul 8 div put
+ bhs i 5 height mul 8 div put
+ } if
+ enc (3) eq {
+ bbs i 0 height mul 8 div put
+ bhs i 8 height mul 8 div put
+ } if
+ } for
+
+ /retval 4 dict def
+ retval (bbs) bbs put
+ retval (bhs) bhs put
+ /sbs bhs length 2 mul 1 sub string def
+ 0 1 sbs length 1 sub {
+ sbs exch 50 put % Fill with 2s
+ } for
+ retval (sbs) sbs put
+ includetext {
+ retval (txt) txt put
+ } if
+ retval (opt) renderopts put
+ retval
+
+ end
+
+} bind def
+/kix load 0 1 dict put
+% --END ENCODER kix--
+
+% --BEGIN ENCODER msi--
+/msi {
+
+ 0 begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /renderopts options def
+ /barcode exch def % We are given a barcode string
+
+ /includecheck false def % Enable/disable checkdigit
+ /includetext false def % Enable/disable text
+ /includecheckintext false def
+ /textfont /Courier def
+ /textsize 10 def
+ /textpos -7 def
+ /height 1 def
+
+ % Parse the input options
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textpos textpos cvr def
+ /height height cvr def
+
+ % Create an array containing the character mappings
+ /encs
+ [ (13131313) (13131331) (13133113) (13133131) (13311313)
+ (13311331) (13313113) (13313131) (31131313) (31131331)
+ (31) (131)
+ ] def
+
+ % Create a string of the available characters
+ /barchars (0123456789) def
+
+ /barlen barcode length def % Length of the code
+
+ includecheck {
+ /sbs barlen 8 mul 13 add string def
+ /txt barlen 1 add array def
+ } {
+ /sbs barlen 8 mul 5 add string def
+ /txt barlen array def
+ } ifelse
+
+
+ % Put start character
+ sbs 0 encs 10 get putinterval
+ /checksum 0 def
+
+ 0 1 barlen 1 sub {
+ /i exch def
+ % Lookup the encoding for the each barcode character
+ barcode i 1 getinterval barchars exch search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard seek and post
+ /enc encs indx get def % Get the indxth encoding
+ sbs i 8 mul 2 add enc putinterval % Put encoded digit into sbs
+ txt i [barcode i 1 getinterval i 16 mul 4 add textpos textfont textsize] put
+ barlen i sub 2 mod 0 eq {
+ /checksum indx checksum add def
+ } {
+ /checksum indx 2 mul dup 10 idiv add checksum add def
+ } ifelse
+ } for
+
+ % Put the checksum and end characters
+ includecheck {
+ /checksum 10 checksum 10 mod sub 10 mod def
+ sbs barlen 8 mul 2 add encs checksum get putinterval
+ includecheckintext {
+ txt barlen [barchars checksum 1 getinterval barlen 16 mul 4 add textpos textfont textsize] put
+ } {
+ txt barlen [( ) barlen 16 mul 4 add textpos textfont textsize] put
+ } ifelse
+ sbs barlen 8 mul 10 add encs 11 get putinterval
+ } {
+ sbs barlen 8 mul 2 add encs 11 get putinterval
+ } ifelse
+
+ % Return the arguments
+ /retval 1 dict def
+ retval (sbs) sbs put
+ retval (bhs) [sbs length 1 add 2 idiv {height} repeat] put
+ retval (bbs) [sbs length 1 add 2 idiv {0} repeat] put
+ includetext {
+ retval (txt) txt put
+ } if
+ retval (opt) renderopts put
+ retval
+
+ end
+
+} bind def
+/msi load 0 1 dict put
+% --END ENCODER msi--
+
+% --BEGIN ENCODER plessey--
+/plessey {
+
+ 0 begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /renderopts options def
+ /barcode exch def % We are given a barcode string
+
+ /includetext false def % Enable/disable text
+ /includecheckintext false def
+ /textfont /Courier def
+ /textsize 10 def
+ /textpos -7 def
+ /height 1 def
+
+ % Parse the input options
+ options {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+
+ /textfont textfont cvlit def
+ /textsize textsize cvr def
+ /textpos textpos cvr def
+ /height height cvr def
+
+ % Create an array containing the character mappings
+ /encs
+ [ (13131313) (31131313) (13311313) (31311313)
+ (13133113) (31133113) (13313113) (31313113)
+ (13131331) (31131331) (13311331) (31311331)
+ (13133131) (31133131) (13313131) (31313131)
+ (31311331) (331311313)
+ ] def
+
+ % Create a string of the available characters
+ /barchars (0123456789ABCDEF) def
+
+ /barlen barcode length def % Length of the code
+ /sbs barlen 8 mul 33 add string def
+ /txt barlen 2 add array def
+ /checkbits barlen 4 mul 8 add array def
+ checkbits barlen 4 mul [ 0 0 0 0 0 0 0 0 ] putinterval
+
+ % Put start character
+ sbs 0 encs 16 get putinterval
+
+ 0 1 barlen 1 sub {
+ /i exch def
+ % Lookup the encoding for the each barcode character
+ barcode i 1 getinterval barchars exch search
+ pop % Discard true leaving pre
+ length /indx exch def % indx is the length of pre
+ pop pop % Discard seek and post
+ /enc encs indx get def % Get the indxth encoding
+ sbs i 8 mul 8 add enc putinterval % Put encoded digit into sbs
+ txt i [barcode i 1 getinterval i 16 mul 16 add textpos textfont textsize] put
+ checkbits i 4 mul [
+ indx 1 and
+ indx -1 bitshift 1 and
+ indx -2 bitshift 1 and
+ indx -3 bitshift
+ ] putinterval
+ } for
+
+ % Checksum is last 8 bits of a CRC using a salt
+ /checksalt [ 1 1 1 1 0 1 0 0 1 ] def
+ 0 1 barlen 4 mul 1 sub {
+ /i exch def
+ checkbits i get 1 eq {
+ 0 1 8 {
+ /j exch def
+ checkbits i j add checkbits i j add get checksalt j get xor put
+ } for
+ } if
+ } for
+
+ % Calculate the value of the checksum digits
+ /checkval 0 def
+ 0 1 7 {
+ /i exch def
+ /checkval checkval 2 7 i sub exp cvi checkbits barlen 4 mul i add get mul add def
+ } for
+
+ % Put the checksum characters
+ /checksum1 checkval -4 bitshift def
+ /checksum2 checkval 15 and def
+ sbs barlen 8 mul 8 add encs checksum1 get putinterval
+ sbs barlen 8 mul 16 add encs checksum2 get putinterval
+ includecheckintext {
+ txt barlen [barchars checksum1 1 getinterval barlen 16 mul 16 add textpos textfont textsize] put
+ txt barlen 1 add [barchars checksum2 1 getinterval barlen 1 add 16 mul 16 add textpos textfont textsize] put
+ } {
+ txt barlen [( ) barlen 16 mul 16 add textpos textfont textsize] put
+ txt barlen 1 add [( ) barlen 1 add 16 mul 16 add textpos textfont textsize] put
+ } ifelse
+
+ % Put end character
+ sbs barlen 8 mul 24 add encs 17 get putinterval
+
+ % Return the arguments
+ /retval 1 dict def
+ retval (sbs) sbs put
+ retval (bhs) [sbs length 1 add 2 idiv {height} repeat] put
+ retval (bbs) [sbs length 1 add 2 idiv {0} repeat] put
+ includetext {
+ retval (txt) txt put
+ } if
+ retval (opt) renderopts put
+ retval
+
+ end
+
+} bind def
+/plessey load 0 1 dict put
+% --END ENCODER plessey--
+
+% --BEGIN ENCODER symbol--
+/symbol {
+
+ 0 begin % Confine variables to local scope
+
+ /options exch def % We are given an option string
+ /barcode exch def % We are given a barcode string
+
+ barcode (fima) eq {
+ /sbs (111515111) def
+ /bhs [.25 .25 .25 .25 .25] def
+ /bbs [0 0 0 0 0] def
+ } if
+
+ barcode (fimb) eq {
+ /sbs (13111311131) def
+ /bhs [.25 .25 .25 .25 .25 .25] def
+ /bbs [0 0 0 0 0 0] def
+ } if
+
+ barcode (fimc) eq {
+ /sbs (11131313111) def
+ /bhs [.25 .25 .25 .25 .25 .25] def
+ /bbs [0 0 0 0 0 0] def
+ } if
+
+ barcode (fimd) eq {
+ /sbs (1111131311111) def
+ /bhs [.25 .25 .25 .25 .25 .25 .25] def
+ /bbs [0 0 0 0 0 0 0] def
+ } if
+
+ % Return the arguments
+ /retval 4 dict def
+ retval (sbs) sbs put
+ retval (bhs) bhs put
+ retval (bbs) bbs put
+ retval (opt) options put
+ retval
+
+ end
+
+} bind def
+/symbol load 0 1 dict put
+% --END ENCODER symbol--
+
+% --BEGIN RENDERER--
+/barcode {
+
+ 0 begin % Confine variables to local scope
+
+ /args exch def % We are given some arguments
+ /sbs args (sbs) get def
+ /bhs args (bhs) get def
+ /bbs args (bbs) get def
+ /renderopts args (opt) get def
+
+ % Get the text if known, otherwise it is empty
+ args (txt) known {
+ /txt args (txt) get def
+ } {
+ /txt [] def
+ } ifelse
+
+ % Default options
+ /inkspread 0.15 def
+ /width 0 def
+ /barratio 1 def
+ /spaceratio 1 def
+ /showborder false def
+ /borderleft 10 def
+ /borderright 10 def
+ /bordertop 1 def
+ /borderbottom 1 def
+ /borderwidth 0.5 def
+
+ % Parse the render options
+ renderopts {
+ token false eq {exit} if dup length string cvs (=) search
+ true eq {cvlit exch pop exch def} {cvlit true def} ifelse
+ } loop
+
+ /inkspread inkspread cvr def
+ /width width cvr def
+ /barratio barratio cvr def
+ /spaceratio spaceratio cvr def
+ /borderleft borderleft cvr def
+ /borderright borderright cvr def
+ /bordertop bordertop cvr def
+ /borderbottom borderbottom cvr def
+ /borderwidth borderwidth cvr def
+
+ % Create bar elements and put them into the bars array
+ /bars sbs length 1 add 2 idiv array def
+ /x 0.00 def
+ 0 1 sbs length 1 add 2 idiv 2 mul 2 sub {
+ /i exch def
+ i 2 mod 0 eq { % i is even
+ /d sbs i get 48 sub barratio mul barratio sub 1 add def % d=digit*r-r+1
+ /h bhs i 2 idiv get 72 mul def % Height from bhs
+ /c d 2 div x add def % Centre of the bar = x + d/2
+ /y bbs i 2 idiv get 72 mul def % Baseline from bbs
+ /w d inkspread sub def % bar width = digit - inkspread
+ bars i 2 idiv [h c y w] put % Add the bar entry
+ } {
+ /d sbs i get 48 sub spaceratio mul spaceratio sub 1 add def % d=digit*r-r+1
+ } ifelse
+ /x x d add def % x+=d
+ } for
+
+ gsave
+
+ % Force symbol to given width
+ width 0 ne {
+ width 72 mul x div 1 scale
+ } if
+
+ % Display the bars for elements in the bars array
+ bars {
+ {} forall
+ setlinewidth moveto 0 exch rlineto stroke
+ } forall
+
+ % Display the border
+ showborder {
+ borderwidth setlinewidth
+ borderleft neg borderbottom neg moveto
+ x borderleft add borderright add 0 rlineto
+ 0 h borderbottom add bordertop add rlineto
+ x borderleft add borderright add neg 0 rlineto
+ 0 h borderbottom add bordertop add neg rlineto
+ closepath stroke
+ } if
+
+ % Display the text for elements in the text array
+ txt {
+ {} forall
+ dup 0 ne {exch findfont exch scalefont setfont} {pop pop} ifelse
+ moveto show
+ } forall
+
+ grestore
+
+ end
+
+} bind def
+/barcode load 0 1 dict put
+% --END RENDERER--
+
+% --END TEMPLATE--
diff --git a/Master/texmf-dist/dvips/pst-blur/pst-blur.pro b/Master/texmf-dist/dvips/pst-blur/pst-blur.pro
new file mode 100644
index 00000000000..f480366f328
--- /dev/null
+++ b/Master/texmf-dist/dvips/pst-blur/pst-blur.pro
@@ -0,0 +1,67 @@
+%%
+%% This is file `pst-blur.pro',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% pst-blur.dtx (with options: `prolog')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from pst-blur.pro.
+%%
+%% For distribution of the original source see the terms
+%% for copying and modification in the file pst-blur.dtx.
+%%
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+/tx@PstBlurDict 60 dict def
+tx@PstBlurDict begin
+/Iterate {
+ /SegLines ED
+ /ThisB ED /ThisG ED /ThisR ED
+ /NextB ED /NextG ED /NextR ED
+ /W 2.0 BlurRadius mul def
+ /WDec W SegLines div def
+ /RInc NextR ThisR sub SegLines div def
+ /GInc NextG ThisG sub SegLines div def
+ /BInc NextB ThisB sub SegLines div def
+ /R ThisR def
+ /G ThisG def
+ /B ThisB def
+ SegLines {
+ R G B
+ sqrt 3 1 roll sqrt 3 1 roll sqrt 3 1 roll
+ setrgbcolor
+ gsave W setlinewidth
+ stroke grestore
+ /W W WDec sub def
+ /R R RInc add def
+ /G G GInc add def
+ /B B BInc add def
+ } bind repeat
+} def
+/BlurShadow {
+ Shadow
+ /BlurSteps ED
+ /BlurRadius ED
+ dup mul /BEnd ED dup mul /GEnd ED dup mul /REnd ED
+ dup mul /BBeg ED dup mul /GBeg ED dup mul /RBeg ED
+ RBeg REnd add 0.5 mul /RMid ED
+ GBeg GEnd add 0.5 mul /GMid ED
+ BBeg BEnd add 0.5 mul /BMid ED
+ /OuterSteps BlurSteps 2 div cvi def
+ /InnerSteps BlurSteps OuterSteps sub def
+ 1 setlinejoin
+ RMid GMid BMid REnd GEnd BEnd OuterSteps Iterate
+ gsave RBeg sqrt GBeg sqrt BBeg sqrt setrgbcolor fill grestore
+ clip
+ 0 setlinejoin
+ RMid GMid BMid RBeg GBeg BBeg InnerSteps Iterate
+} def
+end
diff --git a/Master/texmf-dist/dvips/pst-circ/pst-circ.pro b/Master/texmf-dist/dvips/pst-circ/pst-circ.pro
new file mode 100644
index 00000000000..2b6b1914ec5
--- /dev/null
+++ b/Master/texmf-dist/dvips/pst-circ/pst-circ.pro
@@ -0,0 +1,23 @@
+%!
+% PostScript prologue for pst-circ.tex.
+% For distribution, see pstricks.tex.
+%
+/GetNode {
+ tx@NodeDict begin
+ tx@NodeDict 1 index known { load GetCenter } { pop 0 0 } ifelse
+ end
+} bind def /ZeroEq { abs 1E-10 lt } bind def /EqDr {
+ 4 copy 3 -1 roll sub 7 1 roll exch sub 5 1 roll 4 -1 roll
+ mul 3 1 roll mul exch sub } bind def
+/InterLines {
+ EqDr /D1c exch def /D1b exch def /D1a exch def
+ EqDr /D2c exch def /D2b exch def /D2a exch def
+ D1a D2b mul D1b D2a mul sub dup ZeroEq
+ { pop pop pop 0 0 }
+ {
+ /Det exch def
+ D1b D2c mul D1c D2b mul sub Det div
+ D1a D2c mul D2a D1c mul sub Det div
+ }
+ ifelse } bind def
+% END pst-circ.pro
diff --git a/Master/texmf-dist/dvips/pst-eucl/pst-eucl.pro b/Master/texmf-dist/dvips/pst-eucl/pst-eucl.pro
new file mode 100644
index 00000000000..c243e1403c9
--- /dev/null
+++ b/Master/texmf-dist/dvips/pst-eucl/pst-eucl.pro
@@ -0,0 +1,132 @@
+%!
+% PostScript prologue for pst-eucl.tex.
+% Version 2002.12, 2002/12/01
+% For distribution, see pstricks.tex.
+%
+/tx@EcldDict 40 dict def tx@EcldDict begin
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Pi
+/Pi 3.14159265359 def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% e
+/E 2.718281828459045 def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% x -> true (if |x| < 1E-6)
+/ZeroEq { abs 1E-6 lt } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% x1 y1 x2 y2 -> a b c (ax-by+c=0 with a^2+b^2=1)
+/EqDr {
+ 4 copy 3 -1 roll sub 7 1 roll exch sub 5 1 roll 4 -1 roll
+ mul 3 1 roll mul exch sub
+ 2 index dup mul 2 index dup mul add sqrt
+ 4 -1 roll 1 index div exch
+ 4 -1 roll 1 index div exch
+ 4 -1 roll 1 index div exch pop
+} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% orthogonal projection of M1 onto (OM2)
+%% x1 y1 x2 y2 -> x3 y3
+/Project {
+ 2 copy dup mul exch dup mul add 5 1 roll 2 copy 5 -1 roll mul exch
+ 5 -1 roll mul add 4 -1 roll div dup 4 -1 roll mul exch 3 -1 roll mul
+} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a b c (ax2+bx+c=0) -> x1 y1
+/SolvTrin {
+ /c exch def /b exch def /a exch def
+ b dup mul a c mul 4 mul sub dup 0 lt
+ { pop 0 0 } %% no solutions
+ {sqrt dup b neg add a 2 mul div exch b add neg 2 a mul div }
+ ifelse } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% x1 y1 x2 y2 -> Dist
+/ABDist { 3 -1 roll sub dup mul 3 1 roll sub dup mul add sqrt } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% x1 y1 x2 y2 -> x1-x2 y1-y2
+/ABVect { 3 -1 roll exch sub 3 1 roll sub exch } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% x1 y1 x2 y2 x3 y3 x4 y4 -> x y
+/InterLines {
+ EqDr /D1c exch def /D1b exch def /D1a exch def
+ EqDr /D2c exch def /D2b exch def /D2a exch def
+ D1a D2b mul D1b D2a mul sub dup ZeroEq
+ { pop pop pop 0 0 } %% parallel lines
+ {
+ /Det exch def
+ D1b D2c mul D1c D2b mul sub Det div
+ D1a D2c mul D2a D1c mul sub Det div
+ }
+ ifelse } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a b c R -> x1 y1 x2 y2
+/InterLineCircle {
+ /CR exch def /Dc exch def neg /Db exch def /Da exch def
+ ABVect /Vy exch def /Vx exch def
+ %% Dc==0 then O belong to the line
+ %% First project O on the line -> M (-ca;-cb)
+ %% l'abscisse de M sur (OM) divisée par R donne le cosinus
+ %Dc neg dup Db mul exch Da mul 2 copy 0 0
+ %ABDist dup CR gt { pop pop pop 0 0 0 0 }
+ %{ ZeroEq { pop pop Db Da } if Atan /alpha exch def
+ Dc abs CR gt { 0 0 0 0 }
+ { Db neg Da neg Atan /alpha exch def
+ Dc CR div dup dup mul 1 exch sub sqrt exch Atan /beta exch def
+ alpha beta add dup cos CR mul exch sin CR mul
+ alpha beta sub dup cos CR mul exch sin CR mul
+ 4 copy ABVect Vy mul 0 le exch Vx mul 0 le and
+ { 4 2 roll } if } ifelse
+ } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% R R' OO' -> x1 y1 x2 y2
+/InterCircles {
+ /OOP exch def /CRP exch def /CR exch def
+ OOP dup mul CRP dup mul sub CR dup mul add OOP div 2 div
+ dup dup mul CR dup mul exch sub dup
+ 0 lt { pop pop 0 0 0 0 } { sqrt 2 copy neg } ifelse
+} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% x y theta -> x' y' (rotation of theta)
+/Rotate {
+ dup sin /sintheta exch def cos /costheta exch def /y exch def /x exch def
+ x costheta mul y sintheta mul sub
+ y costheta mul x sintheta mul add
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% N -> x y
+/GetNode {
+ tx@NodeDict begin
+ tx@NodeDict 1 index known { load GetCenter } { pop 0 0 } ifelse
+ end
+} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% x -> ch(x)
+/ch { dup Ex exch neg Ex add 2 div } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% x -> sh(x)
+/sh { dup Ex exch neg Ex sub 2 div } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% x -> e^(x)
+/Ex { E exch exp } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% x f g -> x y n
+/NewtonSolving {
+ /g exch def /f exch def 0
+ { %%% STACK: x0 n
+ 1 add exch %% one more loop
+ dup ZeroEq
+ { dup 0.0005 add fgeval
+ 1 index 0.0005 sub fgeval sub .001 div }
+ { dup 1.0005 mul fgeval
+ 1 index 0.9995 mul fgeval sub .001 2 index mul div } ifelse %%% STACK: n x0 fg'(x0)
+ %%% compute x1=x0-fg(x0)/fg'(x0)
+ 1 index fgeval exch div dup 4 1 roll sub exch %% stack: dx x0 n
+ 3 -1 roll ZeroEq %% exit if root found
+ 1 index 100 eq or { exit } if %% or looping for more than 100 times
+ } loop
+ dup 100 lt { exch dup /x exch def f } { pop 0 0 } ifelse
+ 3 -1 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+/fgeval { /x exch def f g sub } bind def
+end
+% END ps-euclide.pro
diff --git a/Master/texmf-dist/dvips/pst-func/pst-func.pro b/Master/texmf-dist/dvips/pst-func/pst-func.pro
new file mode 100644
index 00000000000..580e702c837
--- /dev/null
+++ b/Master/texmf-dist/dvips/pst-func/pst-func.pro
@@ -0,0 +1,117 @@
+%%
+%% This is file `pst-func.pro',
+%%
+%% IMPORTANT NOTICE:
+%%
+%% Package `pst-func.tex'
+%%
+%% Herbert Voss <voss _at_ perce.de>
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%%
+%% DESCRIPTION:
+%% `pst-func' is a PSTricks package to plot special math functions
+%%
+%%
+%% version 0.02 / 2004-11-08 Herbert Voss <voss _at_ pstricks.de>
+%
+/tx@FuncDict 40 dict def
+tx@FuncDict begin
+%
+/eps1 1.0e-05 def
+/eps2 1.0e-04 def
+/MaxIter 255 def
+/func { coeff Derivation FuncValue } def
+/func' { coeff Derivation 1 add FuncValue } def
+/func'' { coeff Derivation 2 add FuncValue } def
+%
+/NewtonMehrfach {% the start value must be on top of the stack
+ /Nx exch def
+ /Iter 0 def
+ {
+ /Iter Iter 1 add def
+ Nx func /F exch def % f(Nx)
+ F abs eps2 lt { exit } if
+ Nx func' /FS exch def % f'(Nx)
+ FS 0 eq { /FS 1.0e-06 def } if
+ Nx func'' /F2S exch def % f''(Nx)
+ 1.0 1.0 F F2S mul FS dup mul div sub div /J exch def
+ J F mul FS div /Diff exch def
+ /Nx Nx Diff sub def
+ Diff abs eps1 lt Iter MaxIter gt or { exit } if
+ } loop
+ Nx % the returned value ist the zero point
+} def
+
+/Steffensen {% the start value must be on top of the stack
+ /y0 exch def % the start value
+ /Iter 0 def
+ {
+ y0 func /F exch def
+ F abs eps2 lt { exit } if
+ y0 F sub /Phi exch def
+ Phi func /F2 exch def
+ F2 abs eps2 le { exit }{
+ Phi y0 sub dup mul Phi F2 sub 2 Phi mul sub y0 add div /Diff exch def
+ y0 Diff sub /y0 exch def
+ Diff abs eps1 le { exit } if
+ } ifelse
+ /Iter Iter 1 add def
+ Iter MaxIter gt { exit } if
+ } loop
+ y0 % the returned value ist the zero point
+} def
+%
+/Horner {% x [coeff] must be on top of the stack
+ aload length
+ dup 2 add -1 roll
+ exch 1 sub {
+ dup 4 1 roll
+ mul add exch
+ } repeat
+ pop % the y value is on top of the stack
+} def
+%
+/FuncValue {% x [coeff] Derivation must be on top of the stack
+ {
+ aload % a0 a1 a2 ... a(n-1) [array]
+ length % a0 a1 a2 ... a(n-1) n
+ 1 sub /grad exch def % a0 a1 a2 ... a(n-1)
+ grad -1 1 { % for n=grad step -1 until 1
+ /n exch def % Laufvariable speichern
+ n % a0 a1 a2 ... a(n-1) n
+ mul % a0 a1 a2 ... a(n-1)*n
+ grad 1 add % a0 a1 a2 ... a(n-1)*n grad+1
+ 1 roll % an*na0 a1 a2 ... a(n-2)
+ } for
+ pop % loesche a0
+ grad array astore % [ a1 a2 ... a(n-2)]
+ } repeat
+ Horner
+} def
+%
+/FindZeros { % dxN dxZ must be on top of the stack (x0..x1 the intervall)
+ /dxZ exch def /dxN exch def
+ /pstZeros [] def
+ x0 dxZ x1 { % suche Nullstellen
+ /xWert exch def
+ xWert NewtonMehrfach
+ %xWert Steffensen
+ /xNull exch def
+ pstZeros aload length /Laenge exch def % now test if value is a new one
+ Laenge 0 eq
+ { xNull 1 }
+ { /newZero true def
+ Laenge {
+ xNull sub abs dxN lt { /newZero false def } if
+ } repeat
+ pstZeros aload pop
+ newZero { xNull Laenge 1 add } { Laenge } ifelse } ifelse
+ array astore /pstZeros exch def
+ } for
+} def
+%
+%
+end
diff --git a/Master/texmf-dist/dvips/pst-geo/map3d.pro b/Master/texmf-dist/dvips/pst-geo/map3d.pro
new file mode 100644
index 00000000000..f65513ce4bf
--- /dev/null
+++ b/Master/texmf-dist/dvips/pst-geo/map3d.pro
@@ -0,0 +1,216 @@
+%version 29 novembre 2003
+% modification 11/05/2004
+% allégée de 3D.pro
+/tx@map3DDict 100 dict def
+tx@map3DDict begin
+%
+ /CalculsPoints{%
+ /region exch def
+ newpath
+ /nbr region length def % nombre de régions
+ 0 1 nbr 1 sub {
+ /counter exch def % pour mémoriser le premier point vu
+ counter
+ region exch get aload pop
+ /Y exch def /X exch def
+ /Xpoint { Y cos X cos mul Rsphere mul } def
+ /Ypoint { Y cos X sin mul Rsphere mul } def
+ /Zpoint { Y sin Rsphere mul } def
+ CalculsPointsAfterTransformations
+ CalcCoordinates
+ Test
+ PS 0 lt {% marque le point
+ /X1 X def
+ /Y1 Y def
+ moveto
+ exit % termine
+ }{ pop pop } ifelse
+ } for
+ nbr counter sub 1 gt {
+ /ncount 0 def % hv 2004-05-04
+ counter 1 nbr 1 sub {
+ /ctrl exch def
+ /ncount ncount 1 add def
+ region ctrl get aload pop
+ ncount step mod 0 eq ctrl nbr sub 1 eq or { % hv 2004-05-11
+ /Y exch def /X exch def
+ /Xpoint { Y cos X cos mul Rsphere mul } def
+ /Ypoint { Y cos X sin mul Rsphere mul } def
+ /Zpoint { Y sin Rsphere mul } def
+ CalculsPointsAfterTransformations
+ CalcCoordinates
+ Test
+ PS 0 le { lineto } if
+ PS 0 gt { /Angle Yi Xi atan def
+ RsphereScreen Angle cos mul
+ RsphereScreen Angle sin mul
+ lineto
+ } if
+ }{ pop pop } ifelse % hv 2004-05-11
+ } for
+ } if
+} def
+%
+/MatriceTransformation{%
+ /Sin1 THETA sin def
+ /Sin2 PHI sin def
+ /Cos1 THETA cos def
+ /Cos2 PHI cos def
+ /Cos1Sin2 Cos1 Sin2 mul def
+ /Sin1Sin2 Sin1 Sin2 mul def
+ /Cos1Cos2 Cos1 Cos2 mul def
+ /Sin1Cos2 Sin1 Cos2 mul def
+ /XpointVue Dobs Cos1Cos2 mul def
+ /YpointVue Dobs Sin1Cos2 mul def
+ /ZpointVue Dobs Sin2 mul def
+ /M11 RotZ cos RotY cos mul def
+ /M12 RotZ cos RotY sin mul RotX sin mul
+ RotZ sin RotX cos mul sub def
+ /M13 RotZ cos RotY sin mul RotX cos mul
+ RotZ sin RotX sin mul add def
+ /M21 RotZ sin RotY cos mul def
+ /M22 RotZ sin RotY sin RotX sin mul mul
+ RotZ cos RotX cos mul add def
+ /M23 RotZ sin RotY sin mul RotX cos mul
+ RotZ cos RotX sin mul sub def
+ /M31 RotY sin neg def
+ /M32 RotX sin RotY cos mul def
+ /M33 RotX cos RotY cos mul def
+ } def
+/CalcCoordinates{%
+ formulesTroisD
+ Xi xunit Yi yunit
+ }
+ def
+% pour la 3D conventionnelle
+/formulesTroisD{%
+ /xObservateur Xabscisse Sin1 mul neg Yordonnee Cos1 mul add def
+ /yObservateur Xabscisse Cos1Sin2 mul neg Yordonnee Sin1Sin2 mul sub Zcote Cos2 mul add def
+ /zObservateur Xabscisse neg Cos1Cos2 mul Yordonnee Sin1Cos2 mul sub Zcote Sin2 mul sub Dobs add def
+ /Xi DScreen xObservateur mul zObservateur div def
+ /Yi DScreen yObservateur mul zObservateur div def
+ }
+def
+%
+/CalculsPointsAfterTransformations{%
+ /Xabscisse M11 Xpoint mul M12 Ypoint mul add M13 Zpoint mul add def
+ /Yordonnee M21 Xpoint mul M22 Ypoint mul add M23 Zpoint mul add def
+ /Zcote M31 Xpoint mul M32 Ypoint mul add M33 Zpoint mul add def
+ }
+def
+%
+/Test { % test de visibilité d'un point
+% rayon vers point de vue
+ /RXvue Xabscisse XpointVue sub def
+ /RYvue Yordonnee YpointVue sub def
+ /RZvue Zcote ZpointVue sub def
+% test de visibilité
+ /PS RXvue Xabscisse mul % produit scalaire
+ RYvue Yordonnee mul add
+ RZvue Zcote mul add
+ def
+} def
+%
+/MaillageSphere {
+gsave
+maillageColor setrgbcolor
+0.25 setlinewidth
+0 increment 360 increment sub {%
+ /theta exch def
+departPhi increment 90 increment sub {%
+ /phi exch def
+% newpath
+ /Xpoint Rsphere theta cos mul phi cos mul def
+ /Ypoint Rsphere theta sin mul phi cos mul def
+ /Zpoint Rsphere phi sin mul def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ moveto
+% Centre de la facette
+ /Xpoint Rsphere theta increment 2 div add cos mul phi increment 2 div add cos mul def
+ /Ypoint Rsphere theta increment 2 div add sin mul phi increment 2 div add cos mul def
+ /Zpoint Rsphere phi increment 2 div add sin mul def
+CalculsPointsAfterTransformations
+ /xCentreFacette Xabscisse def
+ /yCentreFacette Yordonnee def
+ /zCentreFacette Zcote def
+% normale à la facette
+ /nXfacette xCentreFacette def
+ /nYfacette yCentreFacette def
+ /nZfacette zCentreFacette def
+% rayon vers point de vue
+ /RXvue xCentreFacette XpointVue sub def
+ /RYvue yCentreFacette YpointVue sub def
+ /RZvue zCentreFacette ZpointVue sub def
+% test de visibilité
+ /PSfacette RXvue nXfacette mul
+ RYvue nYfacette mul add
+ RZvue nZfacette mul add
+ def
+condition {
+theta 1 theta increment add {%
+ /theta1 exch def
+ /Xpoint Rsphere theta1 cos mul phi cos mul def
+ /Ypoint Rsphere theta1 sin mul phi cos mul def
+ /Zpoint Rsphere phi sin mul def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+phi 1 phi increment add {
+ /phi1 exch def
+ /Xpoint Rsphere theta increment add cos mul phi1 cos mul def
+ /Ypoint Rsphere theta increment add sin mul phi1 cos mul def
+ /Zpoint Rsphere phi1 sin mul def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+theta increment add -1 theta {%
+ /theta1 exch def
+ /Xpoint Rsphere theta1 cos mul phi increment add cos mul def
+ /Ypoint Rsphere theta1 sin mul phi increment add cos mul def
+ /Zpoint Rsphere phi increment add sin mul def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+phi increment add -1 phi {
+ /phi1 exch def
+ /Xpoint Rsphere theta cos mul phi1 cos mul def
+ /Ypoint Rsphere theta sin mul phi1 cos mul def
+ /Zpoint Rsphere phi1 sin mul def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+} if
+} for
+} for
+stroke
+} def
+%
+/DrawCitys {
+/CITY exch def
+/Rayon exch def
+/nbr CITY length def % nombre de villes
+0 1 nbr 1 sub {
+ /compteur exch def
+ CITY compteur get aload pop
+ /X exch def /Y exch def
+ /Xpoint {%
+ Y cos X cos mul Rsphere mul
+ } def
+ /Ypoint {%
+ Y cos X sin mul Rsphere mul
+ } def
+ /Zpoint { Y sin Rsphere mul } def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+Test
+PS 0 lt %
+ {1 0 0 setrgbcolor newpath Rayon 0 360 arc closepath fill}{pop pop}
+ ifelse
+} for
+} def
+end
diff --git a/Master/texmf-dist/dvips/pst-geo/map3dII.pro b/Master/texmf-dist/dvips/pst-geo/map3dII.pro
new file mode 100644
index 00000000000..543014d2f03
--- /dev/null
+++ b/Master/texmf-dist/dvips/pst-geo/map3dII.pro
@@ -0,0 +1,206 @@
+%version 14 May 2004
+% allégée de 3D.pro
+/tx@mapII3DDict 100 dict def
+tx@mapII3DDict begin
+%
+ /CalculsPoints{%
+ /region exch def
+ newpath
+ /nbr region length def % nombre de régions
+ nbr 2 sub -2 2 {
+ /Counter exch def
+ region Counter get
+ /Y exch def
+ region Counter 1 add get
+ /X exch def
+ /Xpoint { Y cos X cos mul Rsphere mul } def
+ /Ypoint { Y cos X sin mul Rsphere mul } def
+ /Zpoint { Y sin Rsphere mul } def
+ CalculsPointsAfterTransformations
+ CalcCoordinates
+ Test
+ PS 0 lt {% marque le point
+ moveto
+ exit % termine
+ } {pop pop} ifelse
+ } for
+ /ncount 0 def % hv 2004-05-04
+ /stepPoint step def
+ Counter step div 2 lt { stepPoint 1 def } if % hv 2004-05-04
+ Counter 2 sub -2 2 {
+ /Counter exch def
+ /ncount ncount 1 add def % hv 2004-05-04
+ ncount stepPoint ge Counter 2 le or { % hv 2004-05-04
+ region Counter get
+ /Y exch def
+ region Counter 1 add get
+ /X exch def
+ /Xpoint { Y cos X cos mul Rsphere mul } def
+ /Ypoint { Y cos X sin mul Rsphere mul } def
+ /Zpoint { Y sin Rsphere mul } def
+ CalculsPointsAfterTransformations
+ CalcCoordinates
+ Test
+ PS 0 lt { lineto }{ pop pop } ifelse
+ /ncount 0 def % hv 2004-05-04
+ }{ /ncount ncount 1 add def } ifelse % hv 2004-05-04
+ } for
+} def
+%
+/MatriceTransformation{%
+ /Sin1 THETA sin def
+ /Sin2 PHI sin def
+ /Cos1 THETA cos def
+ /Cos2 PHI cos def
+ /Cos1Sin2 Cos1 Sin2 mul def
+ /Sin1Sin2 Sin1 Sin2 mul def
+ /Cos1Cos2 Cos1 Cos2 mul def
+ /Sin1Cos2 Sin1 Cos2 mul def
+ /XpointVue Dobs Cos1Cos2 mul def
+ /YpointVue Dobs Sin1Cos2 mul def
+ /ZpointVue Dobs Sin2 mul def
+ /M11 RotZ cos RotY cos mul def
+ /M12 RotZ cos RotY sin mul RotX sin mul
+ RotZ sin RotX cos mul sub def
+ /M13 RotZ cos RotY sin mul RotX cos mul
+ RotZ sin RotX sin mul add def
+ /M21 RotZ sin RotY cos mul def
+ /M22 RotZ sin RotY sin RotX sin mul mul
+ RotZ cos RotX cos mul add def
+ /M23 RotZ sin RotY sin mul RotX cos mul
+ RotZ cos RotX sin mul sub def
+ /M31 RotY sin neg def
+ /M32 RotX sin RotY cos mul def
+ /M33 RotX cos RotY cos mul def
+ } def
+/CalcCoordinates{%
+ formulesTroisD
+ Xi xunit Yi yunit
+} def
+% pour la 3D conventionnelle
+/formulesTroisD{%
+ /xObservateur Xabscisse Sin1 mul neg Yordonnee Cos1 mul add def
+ /yObservateur Xabscisse Cos1Sin2 mul neg Yordonnee Sin1Sin2 mul sub Zcote Cos2 mul add def
+ /zObservateur Xabscisse neg Cos1Cos2 mul Yordonnee Sin1Cos2 mul sub Zcote Sin2 mul sub Dobs add def
+ /Xi DScreen xObservateur mul zObservateur div def
+ /Yi DScreen yObservateur mul zObservateur div def
+ }
+def
+%
+/CalculsPointsAfterTransformations{%
+ /Xabscisse M11 Xpoint mul M12 Ypoint mul add M13 Zpoint mul add def
+ /Yordonnee M21 Xpoint mul M22 Ypoint mul add M23 Zpoint mul add def
+ /Zcote M31 Xpoint mul M32 Ypoint mul add M33 Zpoint mul add def
+ }
+def
+%
+/Test { % test de visibilité d'un point
+% rayon vers point de vue
+ /RXvue Xabscisse XpointVue sub def
+ /RYvue Yordonnee YpointVue sub def
+ /RZvue Zcote ZpointVue sub def
+% test de visibilité
+ /PS RXvue Xabscisse mul % produit scalaire
+ RYvue Yordonnee mul add
+ RZvue Zcote mul add
+ def
+} def
+%
+/MaillageSphere {
+0 increment 360 increment sub {%
+ /theta exch def
+departPhi increment 90 increment sub {%
+ /phi exch def
+% newpath
+ /Xpoint Rsphere theta cos mul phi cos mul def
+ /Ypoint Rsphere theta sin mul phi cos mul def
+ /Zpoint Rsphere phi sin mul def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ moveto
+% Centre de la facette
+ /Xpoint Rsphere theta increment 2 div add cos mul phi increment 2 div add cos mul def
+ /Ypoint Rsphere theta increment 2 div add sin mul phi increment 2 div add cos mul def
+ /Zpoint Rsphere phi increment 2 div add sin mul def
+CalculsPointsAfterTransformations
+ /xCentreFacette Xabscisse def
+ /yCentreFacette Yordonnee def
+ /zCentreFacette Zcote def
+% normale à la facette
+ /nXfacette xCentreFacette def
+ /nYfacette yCentreFacette def
+ /nZfacette zCentreFacette def
+% rayon vers point de vue
+ /RXvue xCentreFacette XpointVue sub def
+ /RYvue yCentreFacette YpointVue sub def
+ /RZvue zCentreFacette ZpointVue sub def
+% test de visibilité
+ /PSfacette RXvue nXfacette mul
+ RYvue nYfacette mul add
+ RZvue nZfacette mul add
+ def
+condition {
+theta 1 theta increment add {%
+ /theta1 exch def
+ /Xpoint Rsphere theta1 cos mul phi cos mul def
+ /Ypoint Rsphere theta1 sin mul phi cos mul def
+ /Zpoint Rsphere phi sin mul def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+phi 1 phi increment add {
+ /phi1 exch def
+ /Xpoint Rsphere theta increment add cos mul phi1 cos mul def
+ /Ypoint Rsphere theta increment add sin mul phi1 cos mul def
+ /Zpoint Rsphere phi1 sin mul def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+theta increment add -1 theta {%
+ /theta1 exch def
+ /Xpoint Rsphere theta1 cos mul phi increment add cos mul def
+ /Ypoint Rsphere theta1 sin mul phi increment add cos mul def
+ /Zpoint Rsphere phi increment add sin mul def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+phi increment add -1 phi {
+ /phi1 exch def
+ /Xpoint Rsphere theta cos mul phi1 cos mul def
+ /Ypoint Rsphere theta sin mul phi1 cos mul def
+ /Zpoint Rsphere phi1 sin mul def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+} if
+} for
+} for
+gsave
+0 setgray
+stroke
+grestore
+} def
+%
+/DrawCitys {
+ /CITY exch def
+ /Rayon exch def
+ /nbr CITY length def % nombre de villes
+ 0 1 nbr 1 sub {
+ /compteur exch def
+ CITY compteur get aload pop
+ /X exch def /Y exch def
+ /Xpoint { Y cos X cos mul Rsphere mul } def
+ /Ypoint { Y cos X sin mul Rsphere mul } def
+ /Zpoint { Y sin Rsphere mul } def
+ CalculsPointsAfterTransformations
+ CalcCoordinates
+ Test
+ PS 0 lt %
+ { 1 0 0 setrgbcolor newpath Rayon 0 360 arc closepath fill }{ pop pop } ifelse
+ } for
+} def
+end
diff --git a/Master/texmf-dist/dvips/pst-ghsb/pst-ghsb.pro b/Master/texmf-dist/dvips/pst-ghsb/pst-ghsb.pro
new file mode 100644
index 00000000000..23dc9135cf7
--- /dev/null
+++ b/Master/texmf-dist/dvips/pst-ghsb/pst-ghsb.pro
@@ -0,0 +1,90 @@
+%!
+% -*- Mode: Postscript -*-
+% pst-ghsb.pro --- PostScript header file pst-ghsb.pro
+% For the PSTricks HSB mode gradient fillstyle
+% Based on pst-grad.pro from Timothy van Zandt
+% Syntax:
+% H0 S0 B0 H1 S1 B1 MidPoint NumLines Angle GradientFillHSB
+%
+% Author : Denis GIROU (CNRS/IDRIS - France) <Denis.Girou@idris.fr>
+% Created the : Tue May 13 11:12:36 1997
+% Version : 1.0
+% Last mod. by : Denis GIROU (CNRS/IDRIS - France) <Denis.Girou@idris.fr>
+% Last mod. the : Wed May 14 18:48:03 1997
+%
+
+% Syntax:
+% H0 S0 B0 H1 S1 B1 NumLines MidPoint Angle GradientFillHSB
+
+/tx@GradientHSBDict 40 dict def
+tx@GradientHSBDict begin
+/GradientFillHSB {
+ rotate
+ /MidPoint ED
+ /NumLines ED
+ /LastBrightness ED
+ /LastSaturation ED
+ /LastHue ED
+ /FirstBrightness ED
+ /FirstSaturation ED
+ /FirstHue ED
+ % This avoids gaps due to rounding errors:
+ clip
+ pathbbox %leave llx,lly,urx,ury on stack
+ /y ED /x ED
+ 2 copy translate
+ y sub neg /y ED
+ x sub neg /x ED
+ % This avoids gaps due to rounding errors:
+ LastHue FirstHue add 2 div
+ LastSaturation FirstSaturation add 2 div
+ LastBrightness FirstBrightness add 2 div
+ sethsbcolor
+ fill
+ /YSizePerLine y NumLines div def
+ /CurrentY 0 def
+ /MidLine NumLines 1 MidPoint sub mul abs cvi def
+ MidLine NumLines 2 sub gt
+ { /MidLine NumLines def }
+ { MidLine 2 lt { /MidLine 0 def } if }
+ ifelse
+ MidLine 0 gt
+ {
+ /Hue FirstHue def
+ /Saturation FirstSaturation def
+ /Brightness FirstBrightness def
+ /HueIncrement LastHue FirstHue sub MidLine 1 sub div def
+ /SaturationIncrement LastSaturation FirstSaturation sub MidLine 1 sub
+ div def
+ /BrightnessIncrement LastBrightness FirstBrightness sub MidLine 1 sub
+ div def
+ MidLine { GradientLoopHSB } repeat
+ } if
+ MidLine NumLines lt
+ {
+ /Hue LastHue def
+ /Saturation LastSaturation def
+ /Brightness LastBrightness def
+ /HueIncrement FirstHue LastHue sub NumLines MidLine sub 1 sub div def
+ /SaturationIncrement FirstSaturation LastSaturation sub
+ NumLines MidLine sub 1 sub div def
+ /BrightnessIncrement FirstBrightness LastBrightness sub
+ NumLines MidLine sub 1 sub div def
+ NumLines MidLine sub { GradientLoopHSB } repeat
+ } if
+} def
+/GradientLoopHSB {
+ 0 CurrentY moveto
+ x 0 rlineto
+ 0 YSizePerLine rlineto
+ x neg 0 rlineto
+ closepath
+ Hue Saturation Brightness sethsbcolor fill
+ /CurrentY CurrentY YSizePerLine add def
+ /Brightness Brightness BrightnessIncrement add def
+ /Saturation Saturation SaturationIncrement add def
+ /Hue Hue HueIncrement add def
+} def
+
+end
+% END pst-ghsb.pro
diff --git a/Master/texmf-dist/dvips/pst-light3d/pst-light3d.pro b/Master/texmf-dist/dvips/pst-light3d/pst-light3d.pro
new file mode 100644
index 00000000000..edb6494350e
--- /dev/null
+++ b/Master/texmf-dist/dvips/pst-light3d/pst-light3d.pro
@@ -0,0 +1,88 @@
+%%
+%% This is file `pst-li3d.pro',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% pst-li3d.dtx (with options: `postscript-header')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from pst-li3d.pro.
+%%
+%% For distribution of the original source see the terms
+%% for copying and modification in the file pst-li3d.dtx.
+%%
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+%%
+%% Package `pst-li3d.dtx'
+%%
+%% Denis Girou (CNRS/IDRIS - France) <Denis.Girou@idris.fr>
+%% and Peter Kleiweg (Rijksuniversiteit Groningen - Nederlands)
+%% <kleiweg@let.rug.nl> %% %% July 10, 2003
+%%
+%% This program can be redistributed and/or modified under
+%% the terms of the LaTeX Project Public License Distributed
+%% from CTAN archives in directory macros/latex/base/lppl.txt.
+%%
+%% DESCRIPTION:
+%% `pst-li3d' is a PSTricks package for three dimensional
+%% lighten effect on characters and PSTricks graphics.
+%%
+%%
+/tx@LightThreeDDict 40 dict def
+tx@LightThreeDDict begin
+/LightThreeDMove {
+ /y0c exch def
+ /x0c exch def
+ /xc x0c def
+ /yc y0c def
+ newpath } def
+/LightThreeDLine {
+ /yyc exch def
+ /xxc exch def
+ yyc yc sub xxc xc sub 1 index 0 eq 1
+ index 0 eq and not { atan
+ /ac exch def
+ ac LightThreeDMINangle le ac LightThreeDMAXangle ge or
+ { ac LightThreeDAngle sub 2 mul cos 1 add LightThreeDColorPsCommand
+ xc yc moveto xxc yyc lineto LightThreeDDXa LightThreeDDYa
+ rlineto xc LightThreeDDXa add yc LightThreeDDYa add
+ lineto closepath fill } if } if
+ /xc xxc def
+ /yc yyc def } def
+/LightThreeDCurve {
+ /y4c exch def
+ /x4c exch def
+ /y3c exch def
+ /x3c exch def
+ /y2c exch def
+ /x2c exch def
+ /y1c yc def
+ /x1c xc def
+1 LightThreeDSteps div 1 LightThreeDSteps div 1 {
+ /t exch def
+ 3 t sub x1c mul t 2 sub x2c mul 1 t sub x3c mul add 3 mul add x4c
+ t mul add t mul x2c x1c sub 3 mul add t mul x1c add % X
+ 3 t sub y1c mul t 2 sub y2c mul
+ 1 t sub y3c mul add 3 mul add y4c t mul add t
+ mul y2c y1c sub 3 mul add t mul y1c add % Y
+ LightThreeDLine
+ } for
+} def
+/LightThreeDClose {
+ x0c 0 eq {x0c} {x0c 1 add} ifelse y0c 0 eq {y0c} {y0c 1 add} ifelse
+ LightThreeDLine newpath
+} def
+/LightThreeDPathForAll {
+ { LightThreeDMove} { LightThreeDLine } { LightThreeDCurve } { LightThreeDClose }
+ pathforall} def
+end
+%%
+%% End of file `pst-li3d.pro'.
diff --git a/Master/texmf-dist/dvips/pst-math/pst-math.pro b/Master/texmf-dist/dvips/pst-math/pst-math.pro
new file mode 100644
index 00000000000..1dd5efc7769
--- /dev/null
+++ b/Master/texmf-dist/dvips/pst-math/pst-math.pro
@@ -0,0 +1,108 @@
+%!
+% -*- Mode: Postscript -*-
+% pst-math.pro --- PostScript header file pst-math.pro
+%
+% Author : Christophe JORSSEN <christophe.jorssen@libre.fr.invalid>
+% ('libre' is the french word for 'free' if you want to contact me ;-))
+% Created the : Sat 20 March 2004
+% Last Mod : $Date: 2004/05/08 13:40:15 $
+% Version : 1.0 $Revision: 1.1 $
+%
+/PI 3.14159265359 def
+/ENeperian 2.71828182846 def
+
+/DegToRad {PI mul 180 div} bind def
+/RadToDeg {180 mul PI div} bind def
+
+/COS {RadToDeg cos} bind def
+/SIN {RadToDeg sin} bind def
+/TAN {dup SIN exch COS Div} bind def
+/tan {dup sin exch cos Div} bind def
+/ATAN {neg -1 atan 180 sub DegToRad} bind def
+/ACOS {dup dup mul neg 1 add sqrt exch atan DegToRad} bind def
+/acos {dup dup mul neg 1 add sqrt exch atan} bind def
+/ASIN {neg dup dup mul neg 1 add sqrt neg atan 180 sub DegToRad} bind def
+/asin {neg dup dup mul neg 1 add sqrt neg atan 180 sub} bind def
+
+/EXP {ENeperian exch exp} bind def
+
+/COSH {dup EXP exch neg EXP add 2 div} bind def
+/SINH {dup EXP exch neg EXP sub 2 div} bind def
+/TANH {dup SINH exch COSH div} bind def
+/ACOSH {dup dup mul 1 sub sqrt add ln} bind def
+/ASINH {dup dup mul 1 add sqrt add ln} bind def
+/ATANH {dup 1 add exch neg 1 add Div ln 2 div} bind def
+
+/SINC {dup SIN exch Div} bind def
+
+/GAUSS {dup mul 2 mul dup 4 -2 roll sub dup mul exch div neg EXP exch PI mul sqrt div} bind def
+
+/GAMMALN {dup dup dup 5.5 add dup ln 3 -1 roll .5 add mul sub neg 1.000000000190015
+ 0 1 5 {
+ [76.18009172947146 -86.50532032941677 24.0140982483091 -1.231739572450155
+ .1208650973866179E-2 -.5395239384953E-5 2.5066282746310005] exch get
+ 4 -1 roll 1 add dup 5 1 roll div add} for
+ 4 -1 roll div 2.5066282746310005 mul ln add exch pop} bind def
+
+/BETA {2 copy add GAMMALN neg exch GAMMALN 3 -1 roll GAMMALN EXP} bind def
+
+/HORNER {aload length
+ dup 2 add -1 roll
+ exch 1 sub {
+ dup 4 1 roll
+ mul add exch
+ } repeat
+ pop
+} bind def
+
+/BESSEL_J0 {dup abs 8 lt {
+ dup mul dup [57568490574 -13362590354 651619640.7 -11214424.18 77392.33017 -184.9052456] HORNER
+ exch [57568490411 1029532985 9494680.718 59272.64853 267.8532712 1] HORNER
+ Div}
+ {abs dup .636619772 exch div sqrt exch dup .785398164 sub exch 8 exch div dup dup mul dup
+ [1 -1.098628627E-2 .2734510407E-4 -.2073370639E-5 .2093887211E-6] HORNER
+ 3 index COS mul
+ exch [-.1562499995E-1 .1430488765E-3 -.6911147651E-5 .7621095161E-6 -.934945152E-7] HORNER
+ 4 -1 roll SIN mul 3 -1 roll mul neg add mul}
+ ifelse} bind def
+
+/BESSEL_Y0 {dup 8 lt {
+ dup dup mul dup [-2957821389 7062834065 -512359803.6 10879881.29 -86327.92757 228.4622733] HORNER
+ exch [40076544269 745249964.8 7189466.438 47447.26470 226.1030244 1] HORNER
+ Div exch dup ln exch BESSEL_J0 .636619772 mul mul add}
+ {dup .636619772 exch div sqrt exch dup .785398164 sub exch 8 exch div dup dup mul dup
+ [1 -.1098628627E-2 .2734510407E-4 -.2073370639E-5 .2093887211E-6] HORNER
+ 3 index SIN mul
+ exch [-.1562499995E-1 .1430488765E-3 -.6911147651E-5 .7621095161E-6 -.934945152E-7] HORNER
+ 4 -1 roll COS mul 3 -1 roll mul add mul}
+ ifelse} bind def
+
+/BESSEL_J1 {dup abs 8 lt {
+ dup dup mul dup 3 -2 roll [72362614232 -7895059235 242396853.1 -2972611.439 15704.48260 -30.16036606] HORNER mul
+ exch [144725228442 2300535178 18583304.74 99447.43394 376.9991397 1] HORNER
+ Div}
+ {dup abs dup .636619772 exch div sqrt exch dup 2.356194491 sub exch 8 exch div dup dup mul dup
+ [1 .183105E-2 -.3516396496E-4 .2457520174E-5 -.240337019E-6] HORNER
+ 3 index COS mul
+ exch [.04687499995 6.2002690873E-3 .8449199096E-5 -.88228987E-6 .105787412E-6] HORNER
+ 4 -1 roll SIN mul 3 -1 roll mul neg add mul exch dup abs Div mul}
+ ifelse} bind def
+
+/BESSEL_Y1 {dup 8 lt {
+ dup dup dup mul dup [-.4900604943E13 .1275274390E13 -.5153428139E11 .7349264551E9 -.4237922726E7 .8511937935E4] HORNER
+ exch [.2499580570E14 .4244419664E12 .3733650367E10 .2245904002E8 .1020426050E6 .3549632885E3 1] HORNER
+ Div mul exch dup dup ln exch BESSEL_J1 mul exch 1 exch div sub .636619772 mul add}
+ {dup .636619772 exch div sqrt exch dup 2.356194491 sub exch 8 exch div dup dup mul dup
+ [1 .183105E-2 -.3516396496E-4 .2457520174E-5 -.240337019E-6] HORNER
+ 3 index SIN mul
+ exch [.04687499995 -.2002690873E-3 .8449199096E-5 6.88228987E-6 .105787412E-6] HORNER
+ 4 -1 roll COS mul 3 -1 roll mul add mul}
+ ifelse} bind def
+
+% En cours...
+/BESSEL_Yn {dup 0 eq {pop BESSEL_Y0}{dup 1 eq {pop BESSEL_Y1}{
+ exch dup BESSEL_Y0 exch dup BESSEL_Y1 exch 2 exch Div {
+ mul 3 -1 roll mul 2 index sub pstack} for
+ } ifelse } ifelse } bind def
+
+% END pst-math.pro
diff --git a/Master/texmf-dist/dvips/pst-slpe/pst-slpe.pro b/Master/texmf-dist/dvips/pst-slpe/pst-slpe.pro
new file mode 100644
index 00000000000..806765693f7
--- /dev/null
+++ b/Master/texmf-dist/dvips/pst-slpe/pst-slpe.pro
@@ -0,0 +1,153 @@
+%%
+%% This is file `pst-slpe.pro',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% pst-slpe.dtx (with options: `prolog')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from pst-slpe.pro.
+%%
+%% For distribution of the original source see the terms
+%% for copying and modification in the file pst-slpe.dtx.
+%%
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+/tx@PstSlopeDict 60 dict def tx@PstSlopeDict begin
+/max {2 copy lt {exch} if pop} bind def
+/Iterate {
+ 1 sub /NumSegs ED
+ dup mul 3 1 roll dup mul 3 1 roll dup mul 3 1 roll
+ setrgbcolor currenthsbcolor
+ /ThisB ED
+ /ThisS ED
+ /ThisH ED
+ /ThisPt ED
+ gsave fill grestore
+ NumSegs {
+ dup mul 3 1 roll dup mul 3 1 roll dup mul 3 1 roll
+ setrgbcolor currenthsbcolor
+ /NextB ED
+ /NextS ED
+ /NextH ED
+ /NextPt ED
+ ThisPt NextPt sub ThisPt div NumSteps mul cvi /SegSteps exch def
+ /NumSteps NumSteps SegSteps sub def
+ SegSteps 0 eq not {
+ ThisS 0 eq {/ThisH NextH def} if
+ NextS 0 eq {/NextH ThisH def} if
+ ThisH NextH sub 0.5 gt
+ {/NextH NextH 1.0 add def}
+ { NextH ThisH sub 0.5 ge {/ThisH ThisH 1.0 add def} if }
+ ifelse
+ /B ThisB def
+ /S ThisS def
+ /H ThisH def
+ /BInc NextB ThisB sub SegSteps div def
+ /SInc NextS ThisS sub SegSteps div def
+ /HInc NextH ThisH sub SegSteps div def
+ SegSteps {
+ H dup 1. gt {1. sub} if S B sethsbcolor
+ currentrgbcolor
+ sqrt 3 1 roll sqrt 3 1 roll sqrt 3 1 roll
+ setrgbcolor
+ DrawStep
+ /H H HInc add def
+ /S S SInc add def
+ /B B BInc add def
+ } bind repeat
+ /ThisH NextH def
+ /ThisS NextS def
+ /ThisB NextB def
+ /ThisPt NextPt def
+ } if
+ } bind repeat
+} def
+/PatchRadius {
+ Radius 0 eq {
+ /UpdRR { dup mul exch dup mul add RR max /RR ED } bind def
+ gsave
+ flattenpath
+ /RR 0 def
+ {UpdRR} {UpdRR} {} {} pathforall
+ grestore
+ /Radius RR sqrt def
+ } if
+} def
+/SlopesFill {
+ gsave
+ 180 add rotate
+ /NumSteps ED
+ clip
+ pathbbox
+ /h ED /w ED
+ 2 copy translate
+ h sub neg /h ED
+ w sub neg /w ED
+ /XInc w NumSteps div def
+ /DrawStep {
+ 0 0 XInc h rectfill
+ XInc 0 translate
+ } bind def
+ Iterate
+ grestore
+} def
+/CcSlopesFill {
+ gsave
+ /Radius ED
+ /CenterY ED
+ /CenterX ED
+ /NumSteps ED
+ clip
+ pathbbox
+ /h ED /w ED
+ 2 copy translate
+ h sub neg /h ED
+ w sub neg /w ED
+ w CenterX mul h CenterY mul translate
+ PatchRadius
+ /RadPerStep Radius NumSteps div neg def
+ /Rad Radius def
+ /DrawStep {
+ 0 0 Rad 0 360 arc
+ closepath fill
+ /Rad Rad RadPerStep add def
+ } bind def
+ Iterate
+ grestore
+} def
+/RadSlopesFill {
+ gsave
+ rotate
+ /Radius ED
+ /CenterY ED
+ /CenterX ED
+ /NumSteps ED
+ clip
+ pathbbox
+ /h ED /w ED
+ 2 copy translate
+ h sub neg /h ED
+ w sub neg /w ED
+ w CenterX mul h CenterY mul translate
+ PatchRadius
+ /AngleIncrement 360 NumSteps div neg def
+ /dY AngleIncrement sin AngleIncrement cos div Radius mul def
+ /DrawStep {
+ 0 0 moveto
+ Radius 0 rlineto
+ 0 dY rlineto
+ closepath fill
+ AngleIncrement rotate
+ } bind def
+ Iterate
+ grestore
+} def
+end
diff --git a/Master/texmf-dist/dvips/pst-vue3d/3D.pro b/Master/texmf-dist/dvips/pst-vue3d/3D.pro
new file mode 100644
index 00000000000..dc7bf00331d
--- /dev/null
+++ b/Master/texmf-dist/dvips/pst-vue3d/3D.pro
@@ -0,0 +1,2089 @@
+%version 31 octobre 2003
+%
+/tx@3DDict 100 dict def
+tx@3DDict begin
+/Cube{%
+ /XA M11 A mul M12 B mul add M13 C mul add CX add def
+ /YA M21 A mul M22 B mul add M23 C mul add CY add def
+ /ZA M31 A mul M32 B mul add M33 C mul add CZ add def
+ /XB M11 A mul neg M12 B mul add M13 C mul add CX add def
+ /YB M21 A mul neg M22 B mul add M23 C mul add CY add def
+ /ZB M31 A mul neg M32 B mul add M33 C mul add CZ add def
+ /XC M11 A mul neg M12 B mul neg add M13 C mul add CX add def
+ /YC M21 A mul neg M22 B mul neg add M23 C mul add CY add def
+ /ZC M31 A mul neg M32 B mul neg add M33 C mul add CZ add def
+ /XD M11 A mul M12 B mul neg add M13 C mul add CX add def
+ /YD M21 A mul M22 B mul neg add M23 C mul add CY add def
+ /ZD M31 A mul M32 B mul neg add M33 C mul add CZ add def
+ /XE M11 A mul M12 B mul add M13 C mul sub CX add def
+ /YE M21 A mul M22 B mul add M23 C mul sub CY add def
+ /ZE M31 A mul M32 B mul add M33 C mul sub CZ add def
+ /XF M11 A mul neg M12 B mul add M13 C mul sub CX add def
+ /YF M21 A mul neg M22 B mul add M23 C mul sub CY add def
+ /ZF M31 A mul neg M32 B mul add M33 C mul sub CZ add def
+ /XG M11 A mul neg M12 B mul sub M13 C mul sub CX add def
+ /YG M21 A mul neg M22 B mul sub M23 C mul sub CY add def
+ /ZG M31 A mul neg M32 B mul sub M33 C mul sub CZ add def
+ /XH M11 A mul M12 B mul sub M13 C mul sub CX add def
+ /YH M21 A mul M22 B mul sub M23 C mul sub CY add def
+ /ZH M31 A mul M32 B mul sub M33 C mul sub CZ add def
+% Centres des faces : condition de visibilité
+% FACE 1
+% OC1
+ /XC1 M13 C mul CX add def
+ /YC1 M23 C mul CY add def
+ /ZC1 M33 C mul CZ add def
+% Normale à la face 1
+ /NX1 M13 C mul def
+ /NY1 M23 C mul def
+ /NZ1 M33 C mul def
+% rayon vers point de vue
+ /RXvue1 XC1 XpointVue sub def
+ /RYvue1 YC1 YpointVue sub def
+ /RZvue1 ZC1 ZpointVue sub def
+% produit scalaire
+ /PS1 RXvue1 NX1 mul RYvue1 NY1 mul add RZvue1 NZ1 mul add def
+% FACE 2
+% OC2
+ /XC2 M11 A mul CX add def
+ /YC2 M21 A mul CY add def
+ /ZC2 M31 A mul CZ add def
+% normale à la face 2
+ /NX2 M11 A mul def
+ /NY2 M21 A mul def
+ /NZ2 M31 A mul def
+% rayon vers point de vue
+ /RXvue2 XC2 XpointVue sub def
+ /RYvue2 YC2 YpointVue sub def
+ /RZvue2 ZC2 ZpointVue sub def
+% produit scalaire
+ /PS2 RXvue2 NX2 mul RYvue2 NY2 mul add RZvue2 NZ2 mul add def
+% FACE 3
+% OC3
+ /XC3 M13 C neg mul CX add def
+ /YC3 M23 C neg mul CY add def
+ /ZC3 M33 C neg mul CZ add def
+% normale à la face 3
+ /NX3 M13 C neg mul def
+ /NY3 M23 C neg mul def
+ /NZ3 M33 C neg mul def
+% rayon vers point de vue
+ /RXvue3 XC3 XpointVue sub def
+ /RYvue3 YC3 YpointVue sub def
+ /RZvue3 ZC3 ZpointVue sub def
+% produit scalaire
+ /PS3 RXvue3 NX3 mul RYvue3 NY3 mul add RZvue3 NZ3 mul add def
+% FACE 4
+% OC4
+ /XC4 M11 A neg mul CX add def
+ /YC4 M21 A neg mul CY add def
+ /ZC4 M31 A neg mul CZ add def
+% normale à la face 4
+ /NX4 M11 A neg mul def
+ /NY4 M21 A neg mul def
+ /NZ4 M31 A neg mul def
+% rayon vers point de vue
+ /RXvue4 XC4 XpointVue sub def
+ /RYvue4 YC4 YpointVue sub def
+ /RZvue4 ZC4 ZpointVue sub def
+% produit scalaire
+ /PS4 RXvue4 NX4 mul RYvue4 NY4 mul add RZvue4 NZ4 mul add def
+% FACE 5
+% OC5
+ /XC5 M12 B neg mul CX add def
+ /YC5 M22 B neg mul CY add def
+ /ZC5 M32 B neg mul CZ add def
+% normale à la face 5
+ /NX5 M12 B neg mul def
+ /NY5 M22 B neg mul def
+ /NZ5 M32 B neg mul def
+% rayon vers point de vue
+ /RXvue5 XC5 XpointVue sub def
+ /RYvue5 YC5 YpointVue sub def
+ /RZvue5 ZC5 ZpointVue sub def
+% produit scalaire
+ /PS5 RXvue5 NX5 mul RYvue5 NY5 mul add RZvue5 NZ5 mul add def
+% FACE 6
+% OC6
+ /XC6 M12 B mul CX add def
+ /YC6 M22 B mul CY add def
+ /ZC6 M32 B mul CZ add def
+% normale à la face 6
+ /NX6 M12 B mul def
+ /NY6 M22 B mul def
+ /NZ6 M32 B mul def
+% rayon vers point de vue
+ /RXvue6 XC6 XpointVue sub def
+ /RYvue6 YC6 YpointVue sub def
+ /RZvue6 ZC6 ZpointVue sub def
+% produit scalaire
+ /PS6 RXvue6 NX6 mul RYvue6 NY6 mul add RZvue6 NZ6 mul add def
+% faceOne
+PS1 0 Condition { %
+reduction reduction scale
+1 setlinejoin
+newpath
+ /Yordonnee YA def
+ /Zcote ZA def
+ /Xabscisse XA def
+ CalcCoordinates
+ moveto
+ /Zcote ZB def
+ /Xabscisse XB def
+ /Yordonnee YB def
+ CalcCoordinates
+ lineto
+ /Zcote ZC def
+ /Xabscisse XC def
+ /Yordonnee YC def
+ CalcCoordinates
+ lineto
+ /Zcote ZD def
+ /Xabscisse XD def
+ /Yordonnee YD def
+ CalcCoordinates
+ lineto
+ /Zcote ZA def
+ /Xabscisse XA def
+ /Yordonnee YA def
+ CalcCoordinates
+ lineto
+closepath
+gsave
+CubeColorFaceOne setrgbcolor
+fill
+grestore
+stroke
+} if
+% faceTwo
+PS2 0 Condition{ %
+reduction reduction scale
+1 setlinejoin
+newpath
+ /Xabscisse XA def
+ /Yordonnee YA def
+ /Zcote ZA def
+ CalcCoordinates
+ moveto
+ /Zcote ZD def
+ /Xabscisse XD def
+ /Yordonnee YD def
+ CalcCoordinates
+ lineto
+ /Zcote ZH def
+ /Xabscisse XH def
+ /Yordonnee YH def
+ CalcCoordinates
+ lineto
+ /Zcote ZE def
+ /Xabscisse XE def
+ /Yordonnee YE def
+ CalcCoordinates
+ lineto
+ /Zcote ZA def
+ /Xabscisse XA def
+ /Yordonnee YA def
+ CalcCoordinates
+ lineto
+closepath
+gsave
+CubeColorFaceTwo setrgbcolor
+fill
+grestore
+stroke
+} if
+% face three
+PS3 0 Condition{ %
+reduction reduction scale
+1 setlinejoin
+newpath
+ /Xabscisse XE def
+ /Yordonnee YE def
+ /Zcote ZE def
+ CalcCoordinates
+ moveto
+ /Zcote ZF def
+ /Xabscisse XF def
+ /Yordonnee YF def
+ CalcCoordinates
+ lineto
+ /Zcote ZG def
+ /Xabscisse XG def
+ /Yordonnee YG def
+ CalcCoordinates
+ lineto
+ /Zcote ZH def
+ /Xabscisse XH def
+ /Yordonnee YH def
+ CalcCoordinates
+ lineto
+ /Zcote ZE def
+ /Xabscisse XE def
+ /Yordonnee YE def
+ CalcCoordinates
+ lineto
+closepath
+gsave
+CubeColorFaceThree setrgbcolor
+fill
+grestore
+stroke
+} if
+% face four
+PS4 0 Condition{ %
+reduction reduction scale
+1 setlinejoin
+newpath
+ /Xabscisse XB def
+ /Yordonnee YB def
+ /Zcote ZB def
+ CalcCoordinates
+ moveto
+ /Zcote ZF def
+ /Xabscisse XF def
+ /Yordonnee YF def
+ CalcCoordinates
+ lineto
+ /Zcote ZG def
+ /Xabscisse XG def
+ /Yordonnee YG def
+ CalcCoordinates
+ lineto
+ /Zcote ZC def
+ /Xabscisse XC def
+ /Yordonnee YC def
+ CalcCoordinates
+ lineto
+ /Zcote ZB def
+ /Xabscisse XB def
+ /Yordonnee YB def
+ CalcCoordinates
+ lineto
+closepath
+gsave
+CubeColorFaceFour setrgbcolor
+fill
+grestore
+stroke
+} if
+% face five
+PS5 0 Condition{ %
+reduction reduction scale
+1 setlinejoin
+newpath
+ /Xabscisse XC def
+ /Yordonnee YC def
+ /Zcote ZC def
+ CalcCoordinates
+ moveto
+ /Zcote ZD def
+ /Xabscisse XD def
+ /Yordonnee YD def
+ CalcCoordinates
+ lineto
+ /Zcote ZH def
+ /Xabscisse XH def
+ /Yordonnee YH def
+ CalcCoordinates
+ lineto
+ /Zcote ZG def
+ /Xabscisse XG def
+ /Yordonnee YG def
+ CalcCoordinates
+ lineto
+ /Zcote ZC def
+ /Xabscisse XC def
+ /Yordonnee YC def
+ CalcCoordinates
+ lineto
+closepath
+gsave
+CubeColorFaceFive setrgbcolor
+fill
+grestore
+stroke
+} if
+% face six
+PS6 0 Condition{ %
+reduction reduction scale
+1 setlinejoin
+newpath
+ /Xabscisse XB def
+ /Yordonnee YB def
+ /Zcote ZB def
+ CalcCoordinates
+ moveto
+ /Zcote ZA def
+ /Xabscisse XA def
+ /Yordonnee YA def
+ CalcCoordinates
+ lineto
+ /Zcote ZE def
+ /Xabscisse XE def
+ /Yordonnee YE def
+ CalcCoordinates
+ lineto
+ /Zcote ZF def
+ /Xabscisse XF def
+ /Yordonnee YF def
+ CalcCoordinates
+ lineto
+ /Zcote ZB def
+ /Xabscisse XB def
+ /Yordonnee YB def
+ CalcCoordinates
+ lineto
+closepath
+gsave
+CubeColorFaceSix setrgbcolor
+fill
+grestore
+stroke
+} if
+}
+def
+%
+/PointsDie{%
+PS6 0 Condition{ %
+reduction reduction scale
+A 2 div neg A A 2 div {
+ /XCpoint exch def
+C 2 div neg C C 2 div {
+ /ZCpoint exch def
+newpath
+ /Zpoint Rpoint ZCpoint add def
+ /Xpoint XCpoint def
+ /Ypoint B def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ moveto
+0 1 359 {%
+ /Angle exch def
+ /Zpoint Rpoint Angle cos mul ZCpoint add def
+ /Xpoint Rpoint Angle sin mul XCpoint add def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ lineto
+ } for
+closepath
+0 setgray
+fill
+ } for
+ } for
+ } if
+PS5 0 Condition{ %
+reduction reduction scale
+newpath
+ /Ypoint B neg def
+ /XCpoint A 2 div neg def
+ /ZCpoint C 2 div def
+ /Xpoint Rpoint XCpoint add def
+ /Zpoint ZCpoint def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ moveto
+0 1 359 {%
+ /Angle exch def
+ /Xpoint Rpoint Angle cos mul XCpoint add def
+ /Zpoint Rpoint Angle sin mul ZCpoint add def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ lineto
+ } for
+closepath
+0 setgray
+fill
+%
+newpath
+ /XCpoint A 2 div def
+ /ZCpoint C 2 div neg def
+ /Xpoint Rpoint XCpoint add def
+ /Zpoint ZCpoint def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ moveto
+0 1 359 {%
+ /Angle exch def
+ /Xpoint Rpoint Angle cos mul XCpoint add def
+ /Zpoint Rpoint Angle sin mul ZCpoint add def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ lineto
+ } for
+closepath
+0 setgray
+fill
+%
+newpath
+ /XCpoint 0 def
+ /ZCpoint 0 def
+ /Xpoint Rpoint XCpoint add def
+ /Zpoint ZCpoint def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ moveto
+0 1 359 {%
+ /Angle exch def
+ /Xpoint Rpoint Angle cos mul XCpoint add def
+ /Zpoint Rpoint Angle sin mul ZCpoint add def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ lineto
+ } for
+closepath
+0 setgray
+fill
+} if
+PS4 0 Condition{ %
+reduction reduction scale
+C 2 div neg C C 2 div {
+ /ZCpoint exch def
+B 2 div neg B B 2 div {
+ /YCpoint exch def
+newpath
+ /Zpoint Rpoint ZCpoint add def
+ /Ypoint YCpoint def
+ /Xpoint A neg def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ moveto
+0 1 359 {%
+ /Angle exch def
+ /Zpoint Rpoint Angle cos mul ZCpoint add def
+ /Ypoint Rpoint Angle sin mul YCpoint add def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ lineto
+ } for
+closepath
+0 setgray
+fill
+ } for
+ } for
+% le point du milieu
+newpath
+ /Zpoint Rpoint def
+ /Ypoint 0 def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ moveto
+0 1 359 {%
+ /Angle exch def
+ /Zpoint Rpoint Angle cos mul def
+ /Ypoint Rpoint Angle sin mul def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ lineto
+ } for
+closepath
+0 setgray
+fill
+} if
+PS3 0 Condition{ %
+reduction reduction scale
+A 2 div neg A A 2 div {
+ /XCpoint exch def
+B 2 div neg B 2 div B 2 div {
+ /YCpoint exch def
+newpath
+ /Xpoint Rpoint XCpoint add def
+ /Ypoint YCpoint def
+ /Zpoint C neg def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ moveto
+0 1 359 {%
+ /Angle exch def
+ /Xpoint Rpoint Angle cos mul XCpoint add def
+ /Ypoint Rpoint Angle sin mul YCpoint add def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ lineto
+ } for
+closepath
+0 setgray
+fill
+ } for
+ } for
+} if
+PS2 0 Condition{ %
+reduction reduction scale
+newpath
+ /Xpoint A def
+ /Ypoint Rpoint B 2 div add def
+ /Zpoint C 2 div neg def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ moveto
+0 1 359 {%
+ /Angle exch def
+ /Ypoint Rpoint Angle cos mul B 2 div add def
+ /Zpoint Rpoint Angle sin mul C 2 div sub def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ lineto
+ } for
+closepath
+0 setgray
+fill
+newpath
+ /Xpoint A def
+ /Ypoint Rpoint B 2 div sub def
+ /Zpoint C 2 div def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ moveto
+0 1 359 {%
+ /Angle exch def
+ /Xpoint A def
+ /Ypoint Rpoint Angle cos mul B 2 div sub def
+ /Zpoint Rpoint Angle sin mul A 2 div add def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ lineto
+ } for
+closepath
+0 setgray
+fill
+} if
+PS1 0 Condition{ %
+reduction reduction scale
+newpath
+ /Xpoint Rpoint def
+ /Ypoint 0 def
+ /Zpoint C def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ moveto
+0 1 359 {%
+ /Angle exch def
+ /Xpoint Rpoint Angle cos mul def
+ /Ypoint Rpoint Angle sin mul def
+CalculsPointsAfterTransformations
+CalcCoordinates
+ lineto
+ } for
+closepath
+0 setgray
+fill
+} if
+} def
+%
+/CalcCoordinates{%
+ formulesTroisD
+ Xi 28.45 mul Yi 28.45 mul
+ }
+ def
+% pour la 3D conventionnelle
+/formulesTroisD{%
+ /xObservateur Xabscisse Sin1 mul neg Yordonnee Cos1 mul add def
+ /yObservateur Xabscisse Cos1Sin2 mul neg Yordonnee Sin1Sin2 mul sub Zcote Cos2 mul add def
+ /zObservateur Xabscisse neg Cos1Cos2 mul Yordonnee Sin1Cos2 mul sub Zcote Sin2 mul sub Dobs add def
+ /Xi DScreen xObservateur mul zObservateur div def
+ /Yi DScreen yObservateur mul zObservateur div def
+ }
+def
+%
+/CalculsPointsAfterTransformations{%
+ /Xabscisse M11 Xpoint mul M12 Ypoint mul add M13 Zpoint mul add CX add def
+ /Yordonnee M21 Xpoint mul M22 Ypoint mul add M23 Zpoint mul add CY add def
+ /Zcote M31 Xpoint mul M32 Ypoint mul add M33 Zpoint mul add CZ add def
+ }
+def
+%
+/SommetsTetraedre{%
+ /xA RayonBaseTetraedre neg def
+ /yA 0 def
+ /zA 0 def
+ /xB 0.5 RayonBaseTetraedre mul def
+ /yB RayonBaseTetraedre 0.866 mul neg def
+ /zB 0 def
+ /xC xB def
+ /yC yB neg def
+ /zC 0 def
+ /xD 0 def
+ /yD 0 def
+ /zD RayonBaseTetraedre 1.414 mul def
+% coordonnées centre des faces
+ /xFaceA xA xB xC add add 3 div def
+ /yFaceA yA yB yC add add 3 div def
+ /zFaceA zA zB zC add add 3 div def
+ /xFaceB xD xA xB add add 3 div def
+ /yFaceB yD yA yB add add 3 div def
+ /zFaceB zD zA zB add add 3 div def
+ /xFaceC xA xD xC add add 3 div def
+ /yFaceC yA yD yC add add 3 div def
+ /zFaceC zA zD zC add add 3 div def
+ /xFaceD xD xB xC add add 3 div def
+ /yFaceD yD yB yC add add 3 div def
+ /zFaceD zD zB zC add add 3 div def
+% sommets après rotation et translation
+ /XA M11 xA mul M12 yA mul add M13 zA mul add CX add def
+ /YA M21 xA mul M22 yA mul add M23 zA mul add CY add def
+ /ZA M31 xA mul M32 yA mul add M33 zA mul add CZ add def
+ /XB M11 xB mul M12 yB mul add M13 zB mul add CX add def
+ /YB M21 xB mul M22 yB mul add M23 zB mul add CY add def
+ /ZB M31 xB mul M32 yB mul add M33 zB mul add CZ add def
+ /XC M11 xC mul M12 yC mul add M13 zC mul add CX add def
+ /YC M21 xC mul M22 yC mul add M23 zC mul add CY add def
+ /ZC M31 xC mul M32 yC mul add M33 zC mul add CZ add def
+ /XD M11 xD mul M12 yD mul add M13 zD mul add CX add def
+ /YD M21 xD mul M22 yD mul add M23 zD mul add CY add def
+ /ZD M31 xD mul M32 yD mul add M33 zD mul add CZ add def
+% centres de faces après transformations
+ /XFaceA M11 xFaceA mul M12 yFaceA mul add M13 zFaceA mul add CX add def
+ /YFaceA M21 xFaceA mul M22 yFaceA mul add M23 zFaceA mul add CY add def
+ /ZFaceA M31 xFaceA mul M32 yFaceA mul add M33 zFaceA mul add CZ add def
+ /XFaceB M11 xFaceB mul M12 yFaceB mul add M13 zFaceB mul add CX add def
+ /YFaceB M21 xFaceB mul M22 yFaceB mul add M23 zFaceB mul add CY add def
+ /ZFaceB M31 xFaceB mul M32 yFaceB mul add M33 zFaceB mul add CZ add def
+ /XFaceC M11 xFaceC mul M12 yFaceC mul add M13 zFaceC mul add CX add def
+ /YFaceC M21 xFaceC mul M22 yFaceC mul add M23 zFaceC mul add CY add def
+ /ZFaceC M31 xFaceC mul M32 yFaceC mul add M33 zFaceC mul add CZ add def
+ /XFaceD M11 xFaceD mul M12 yFaceD mul add M13 zFaceD mul add CX add def
+ /YFaceD M21 xFaceD mul M22 yFaceD mul add M23 zFaceD mul add CY add def
+ /ZFaceD M31 xFaceD mul M32 yFaceD mul add M33 zFaceD mul add CZ add def
+% Normales aux faces
+ /NxA XFaceA XD sub def
+ /NyA YFaceA YD sub def
+ /NzA ZFaceA ZD sub def
+ /NxB XFaceB XC sub def
+ /NyB YFaceB YC sub def
+ /NzB ZFaceB ZC sub def
+ /NxC XFaceC XB sub def
+ /NyC YFaceC YB sub def
+ /NzC ZFaceC ZB sub def
+ /NxD XFaceD XA sub def
+ /NyD YFaceD YA sub def
+ /NzD ZFaceD ZA sub def
+% Conditions de visibilité
+% rayon vers point de vue
+ /RXvueA XFaceA XpointVue sub def
+ /RYvueA YFaceA YpointVue sub def
+ /RZvueA ZFaceA ZpointVue sub def
+ /RXvueB XFaceB XpointVue sub def
+ /RYvueB YFaceB YpointVue sub def
+ /RZvueB ZFaceB ZpointVue sub def
+ /RXvueC XFaceC XpointVue sub def
+ /RYvueC YFaceC YpointVue sub def
+ /RZvueC ZFaceC ZpointVue sub def
+ /RXvueD XFaceD XpointVue sub def
+ /RYvueD YFaceD YpointVue sub def
+ /RZvueD ZFaceD ZpointVue sub def
+% produit scalaire
+ /PSA RXvueA NxA mul RYvueA NyA mul add RZvueA NzA mul add def
+ /PSB RXvueB NxB mul RYvueB NyB mul add RZvueB NzB mul add def
+ /PSC RXvueC NxC mul RYvueC NyC mul add RZvueC NzC mul add def
+ /PSD RXvueD NxD mul RYvueD NyD mul add RZvueD NzD mul add def
+ }
+ def
+/Tetraedre{%
+SommetsTetraedre
+% face ABC
+ PSA 0 le { %
+reduction reduction scale
+1 setlinejoin
+ /Xabscisse XA def
+ /Yordonnee YA def
+ /Zcote ZA def
+ CalcCoordinates
+ moveto
+ /Xabscisse XB def
+ /Yordonnee YB def
+ /Zcote ZB def
+ CalcCoordinates
+ lineto
+ /Xabscisse XC def
+ /Yordonnee YC def
+ /Zcote ZC def
+ CalcCoordinates
+ lineto
+ /Xabscisse XA def
+ /Yordonnee YA def
+ /Zcote ZA def
+ CalcCoordinates
+ lineto
+} if
+% face DAB
+ PSB 0 le { %
+reduction reduction scale
+1 setlinejoin
+ /Xabscisse XD def
+ /Yordonnee YD def
+ /Zcote ZD def
+ CalcCoordinates
+ moveto
+ /Xabscisse XA def
+ /Yordonnee YA def
+ /Zcote ZA def
+ CalcCoordinates
+ lineto
+ /Xabscisse XB def
+ /Yordonnee YB def
+ /Zcote ZB def
+ CalcCoordinates
+ lineto
+ /Xabscisse XD def
+ /Yordonnee YD def
+ /Zcote ZD def
+ CalcCoordinates
+ lineto
+} if
+% face DAC
+PSC 0 le { %
+reduction reduction scale
+1 setlinejoin
+ /Xabscisse XD def
+ /Yordonnee YD def
+ /Zcote ZD def
+ CalcCoordinates
+ moveto
+ /Xabscisse XA def
+ /Yordonnee YA def
+ /Zcote ZA def
+ CalcCoordinates
+ lineto
+ /Xabscisse XC def
+ /Yordonnee YC def
+ /Zcote ZC def
+ CalcCoordinates
+ lineto
+ /Xabscisse XD def
+ /Yordonnee YD def
+ /Zcote ZD def
+ CalcCoordinates
+ lineto
+} if
+% face DBC
+ PSD 0 le { %
+reduction reduction scale
+1 setlinejoin
+ /Xabscisse XD def
+ /Yordonnee YD def
+ /Zcote ZD def
+ CalcCoordinates
+ moveto
+ /Xabscisse XB def
+ /Yordonnee YB def
+ /Zcote ZB def
+ CalcCoordinates
+ lineto
+ /Xabscisse XC def
+ /Yordonnee YC def
+ /Zcote ZC def
+ CalcCoordinates
+ lineto
+ /Xabscisse XD def
+ /Yordonnee YD def
+ /Zcote ZD def
+ CalcCoordinates
+ lineto
+} if
+}
+def
+%
+/SommetsPyramide{%
+ /xA A def
+ /yA A neg def
+ /zA 0 def
+ /xB A def
+ /yB A def
+ /zB 0 def
+ /xC A neg def
+ /yC A def
+ /zC 0 def
+ /xD A neg def
+ /yD A neg def
+ /zD 0 def
+ /xS 0 def
+ /yS 0 def
+ /zS Hpyramide def
+% coordonnées centre des faces
+ /Alpha A Hpyramide atan def
+ /xFaceSAB Hpyramide Alpha dup sin exch cos mul mul def
+ /yFaceSAB 0 def
+ /zFaceSAB Hpyramide Alpha sin dup mul mul def
+ /xFaceSBC 0 def
+ /yFaceSBC xFaceSAB def
+ /zFaceSBC zFaceSAB fracHeight mul def
+ /xFaceSCD xFaceSAB neg def
+ /yFaceSCD 0 def
+ /zFaceSCD zFaceSAB fracHeight mul def
+ /xFaceSDA 0 def
+ /yFaceSDA xFaceSAB neg def
+ /zFaceSDA zFaceSAB fracHeight mul def
+% sommets après rotation et translation
+ /XA M11 xA mul M12 yA mul add M13 zA mul add CX add def
+ /YA M21 xA mul M22 yA mul add M23 zA mul add CY add def
+ /ZA M31 xA mul M32 yA mul add M33 zA mul add CZ add def
+ /XB M11 xB mul M12 yB mul add M13 zB mul add CX add def
+ /YB M21 xB mul M22 yB mul add M23 zB mul add CY add def
+ /ZB M31 xB mul M32 yB mul add M33 zB mul add CZ add def
+ /XC M11 xC mul M12 yC mul add M13 zC mul add CX add def
+ /YC M21 xC mul M22 yC mul add M23 zC mul add CY add def
+ /ZC M31 xC mul M32 yC mul add M33 zC mul add CZ add def
+ /XD M11 xD mul M12 yD mul add M13 zD mul add CX add def
+ /YD M21 xD mul M22 yD mul add M23 zD mul add CY add def
+ /ZD M31 xD mul M32 yD mul add M33 zD mul add CZ add def
+ /XS M11 xS mul M12 yS mul add M13 zS mul add CX add def
+ /YS M21 xS mul M22 yS mul add M23 zS mul add CY add def
+ /ZS M31 xS mul M32 yS mul add M33 zS mul add CZ add def
+% centres de faces après transformations
+ /XFaceSAB M11 xFaceSAB mul M12 yFaceSAB mul add M13 zFaceSAB mul add CX add def
+ /YFaceSAB M21 xFaceSAB mul M22 yFaceSAB mul add M23 zFaceSAB mul add CY add def
+ /ZFaceSAB M31 xFaceSAB mul M32 yFaceSAB mul add M33 zFaceSAB mul add CZ add def
+ /XFaceSBC M11 xFaceSBC mul M12 yFaceSBC mul add M13 zFaceSBC mul add CX add def
+ /YFaceSBC M21 xFaceSBC mul M22 yFaceSBC mul add M23 zFaceSBC mul add CY add def
+ /ZFaceSBC M31 xFaceSBC mul M32 yFaceSBC mul add M33 zFaceSBC mul add CZ add def
+ /XFaceSCD M11 xFaceSCD mul M12 yFaceSCD mul add M13 zFaceSCD mul add CX add def
+ /YFaceSCD M21 xFaceSCD mul M22 yFaceSCD mul add M23 zFaceSCD mul add CY add def
+ /ZFaceSCD M31 xFaceSCD mul M32 yFaceSCD mul add M33 zFaceSCD mul add CZ add def
+ /XFaceSDA M11 xFaceSDA mul M12 yFaceSDA mul add M13 zFaceSDA mul add CX add def
+ /YFaceSDA M21 xFaceSDA mul M22 yFaceSDA mul add M23 zFaceSDA mul add CY add def
+ /ZFaceSDA M31 xFaceSDA mul M32 yFaceSDA mul add M33 zFaceSDA mul add CZ add def
+% Normales aux faces
+ /NxSAB XFaceSAB CX sub def
+ /NySAB YFaceSAB CY sub def
+ /NzSAB ZFaceSAB CZ sub def
+ /NxSBC XFaceSBC CX sub def
+ /NySBC YFaceSBC CY sub def
+ /NzSBC ZFaceSBC CZ sub def
+ /NxSCD XFaceSCD CX sub def
+ /NySCD YFaceSCD CY sub def
+ /NzSCD ZFaceSCD CZ sub def
+ /NxSDA XFaceSDA CX sub def
+ /NySDA YFaceSDA CY sub def
+ /NzSDA ZFaceSDA CZ sub def
+ /NxABCD CX XS sub def
+ /NyABCD CY YS sub def
+ /NzABCD CZ ZS sub def
+% Conditions de visibilité
+% rayon vers point de vue
+ /RXvueSAB XFaceSAB XpointVue sub def
+ /RYvueSAB YFaceSAB YpointVue sub def
+ /RZvueSAB ZFaceSAB ZpointVue sub def
+ /RXvueSBC XFaceSBC XpointVue sub def
+ /RYvueSBC YFaceSBC YpointVue sub def
+ /RZvueSBC ZFaceSBC ZpointVue sub def
+ /RXvueSCD XFaceSCD XpointVue sub def
+ /RYvueSCD YFaceSCD YpointVue sub def
+ /RZvueSCD ZFaceSCD ZpointVue sub def
+ /RXvueSDA XFaceSDA XpointVue sub def
+ /RYvueSDA YFaceSDA YpointVue sub def
+ /RZvueSDA ZFaceSDA ZpointVue sub def
+ /RXvueABCD CX XpointVue sub def
+ /RYvueABCD CY YpointVue sub def
+ /RZvueABCD CZ ZpointVue sub def
+ /PSAB RXvueSAB NxSAB mul RYvueSAB NySAB mul add RZvueSAB NzSAB mul add def
+ /PSBC RXvueSBC NxSBC mul RYvueSBC NySBC mul add RZvueSBC NzSBC mul add def
+ /PSCD RXvueSCD NxSCD mul RYvueSCD NySCD mul add RZvueSCD NzSCD mul add def
+ /PSDA RXvueSDA NxSDA mul RYvueSDA NySDA mul add RZvueSDA NzSDA mul add def
+ /PSABCD RXvueABCD NxABCD mul RYvueABCD NyABCD mul add RZvueABCD NzABCD mul add def
+ }
+ def
+%
+/MaillageSphere {
+0 increment 360 increment sub {%
+ /theta exch def
+departPhi increment 90 increment sub {%
+ /phi exch def
+% newpath
+ /Xpoint Rsphere theta cos mul phi cos mul def
+ /Ypoint Rsphere theta sin mul phi cos mul def
+ /Zpoint Rsphere phi sin mul def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ moveto
+% Centre de la facette
+ /Xpoint Rsphere theta increment 2 div add cos mul phi increment 2 div add cos mul def
+ /Ypoint Rsphere theta increment 2 div add sin mul phi increment 2 div add cos mul def
+ /Zpoint Rsphere phi increment 2 div add sin mul def
+CalculsPointsAfterTransformations
+ /xCentreFacette Xabscisse def
+ /yCentreFacette Yordonnee def
+ /zCentreFacette Zcote def
+% normale à la facette
+ /nXfacette xCentreFacette CX sub def
+ /nYfacette yCentreFacette CY sub def
+ /nZfacette zCentreFacette CZ sub def
+% rayon vers point de vue
+ /RXvue xCentreFacette XpointVue sub def
+ /RYvue yCentreFacette YpointVue sub def
+ /RZvue zCentreFacette ZpointVue sub def
+% test de visibilité
+ /PSfacette RXvue nXfacette mul
+ RYvue nYfacette mul add
+ RZvue nZfacette mul add
+ def
+condition {
+theta 1 theta increment add {%
+ /theta1 exch def
+ /Xpoint Rsphere theta1 cos mul phi cos mul def
+ /Ypoint Rsphere theta1 sin mul phi cos mul def
+ /Zpoint Rsphere phi sin mul def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+phi 1 phi increment add {
+ /phi1 exch def
+ /Xpoint Rsphere theta increment add cos mul phi1 cos mul def
+ /Ypoint Rsphere theta increment add sin mul phi1 cos mul def
+ /Zpoint Rsphere phi1 sin mul def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+theta increment add -1 theta {%
+ /theta1 exch def
+ /Xpoint Rsphere theta1 cos mul phi increment add cos mul def
+ /Ypoint Rsphere theta1 sin mul phi increment add cos mul def
+ /Zpoint Rsphere phi increment add sin mul def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+phi increment add -1 phi {
+ /phi1 exch def
+ /Xpoint Rsphere theta cos mul phi1 cos mul def
+ /Ypoint Rsphere theta sin mul phi1 cos mul def
+ /Zpoint Rsphere phi1 sin mul def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+} if
+} for
+} for
+} def
+%
+/CylinderThreeD{
+reduction reduction scale
+1 setlinejoin
+0 incrementANGLE 360 {%
+ /theta exch def
+ 0 incrementHAUTEUR Hcylindre incrementHAUTEUR sub {%
+ /H exch def
+% newpath
+ /X1 Rcylindre theta cos mul def
+ /Y1 Rcylindre theta sin mul def
+ /Z1 H def
+ /Xpoint X1 def
+ /Ypoint Y1 def
+ /Zpoint Z1 def
+CalculsPointsAfterTransformations
+ /Xfacette Xabscisse def
+ /Yfacette Yordonnee def
+ /Zfacette Zcote def
+ CalcCoordinates
+ moveto
+% coordonnées du centre de la facette
+ /Xpoint Rcylindre theta incrementANGLE 2 div add cos mul def
+ /Ypoint Rcylindre theta incrementANGLE 2 div add sin mul def
+ /Zpoint H incrementHAUTEUR 2 div add def
+CalculsPointsAfterTransformations
+% Point sur l'axe du cylindre
+% à la même hauteur que M1
+ /Zpoint Z1 def
+ /Xpoint 0 def
+ /Ypoint 0 def
+CalculsPointsAfterTransformations
+% normale à la facette
+ /nXfacette Xfacette Xabscisse sub def
+ /nYfacette Yfacette Yordonnee sub def
+ /nZfacette Zfacette Zcote sub def
+% rayon vers point de vue
+ /RXvue Xfacette XpointVue sub def
+ /RYvue Yfacette YpointVue sub def
+ /RZvue Zfacette ZpointVue sub def
+% test de visibilité
+ /PSfacette nXfacette RXvue mul
+ nYfacette RYvue mul add
+ nZfacette RZvue mul add
+ def
+PSfacette 0 le {
+theta 1 theta incrementANGLE add {%
+ /theta1 exch def
+ /Xpoint Rcylindre theta1 cos mul def
+ /Ypoint Rcylindre theta1 sin mul def
+ /Zpoint H def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+H 1 H incrementHAUTEUR add {
+ /H1 exch def
+ /Xpoint Rcylindre theta incrementANGLE add cos mul def
+ /Ypoint Rcylindre theta incrementANGLE add sin mul def
+ /Zpoint H1 def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+theta incrementANGLE add -1 theta {%
+ /theta1 exch def
+ /Xpoint Rcylindre theta1 cos mul def
+ /Ypoint Rcylindre theta1 sin mul def
+ /Zpoint H incrementHAUTEUR add def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+H incrementHAUTEUR add -1 H {
+ /H1 exch def
+ /Xpoint Rcylindre theta cos mul def
+ /Ypoint Rcylindre theta sin mul def
+ /Zpoint H1 def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+} if
+} for
+} for
+% Face supérieure
+% centre de la face supérieure
+ /Xpoint 0 def
+ /Zpoint Hcylindre def
+ /Ypoint 0 def
+CalculsPointsAfterTransformations
+ /CxFaceSup Xabscisse def
+ /CyFaceSup Yordonnee def
+ /CzFaceSup Zcote def
+% centre de la face inférieure
+ /CxFaceInf CX def
+ /CyFaceInf CY def
+ /CzFaceInf CZ def
+% Normale à la face supérieure
+ /nXFaceSup CxFaceSup CxFaceInf sub def
+ /nYFaceSup CyFaceSup CyFaceInf sub def
+ /nZFaceSup CzFaceSup CzFaceInf sub def
+% rayon vers point de vue verd la face inférieure
+ /RXvueInf CxFaceInf XpointVue sub def
+ /RYvueInf CyFaceInf YpointVue sub def
+ /RZvueInf CzFaceInf ZpointVue sub def
+% rayon vers point de vue verd la face supérieure
+ /RXvueSup CxFaceSup XpointVue sub def
+ /RYvueSup CyFaceSup YpointVue sub def
+ /RZvueSup CzFaceSup ZpointVue sub def
+% Visibilité face supérieure
+ /PSfaceSup RXvueSup nXFaceSup mul
+ RYvueSup nYFaceSup mul add
+ RZvueSup nZFaceSup mul add def
+% Visibilité face inférieure
+ /PSfaceInf RXvueInf nXFaceSup neg mul
+ RYvueInf nYFaceSup mul sub
+ RZvueInf nZFaceSup mul sub def
+PSfaceSup 0 le {
+/TableauxPoints [
+0 1 359 {% on décrit le cercle
+ /theta exch def [
+ /Xpoint Rcylindre theta cos mul def
+ /Ypoint Rcylindre theta sin mul def
+ /Zpoint Hcylindre def
+CalculsPointsAfterTransformations
+ CalcCoordinates ]
+ } for
+ ] def
+gsave
+newpath
+ TableauxPoints 0 get aload pop moveto
+0 1 359 {
+ /compteur exch def
+ TableauxPoints compteur get aload pop
+ lineto } for
+0.7 setgray
+closepath
+fill
+grestore
+ } if
+% face inférieure
+PSfaceInf 0 le {
+/TableauxPoints [
+0 1 359 {% on décrit le cercle
+ /theta exch def [
+ /Xpoint Rcylindre theta cos mul def
+ /Ypoint Rcylindre theta sin mul def
+ /Zpoint 0 def
+CalculsPointsAfterTransformations
+ CalcCoordinates ]
+ } for
+ ] def
+gsave
+newpath
+ TableauxPoints 0 get aload pop moveto
+ 0 1 359 {
+ /compteur exch def
+ TableauxPoints compteur get aload pop
+ lineto } for
+0.7 setgray
+closepath
+fill
+grestore
+ } if
+ } def
+%
+ %
+/ConeThreeD{
+ /AngleCone Rcone Hcone atan def
+ /TanAngleCone AngleCone dup sin exch cos div def
+ /incrementANGLE 10 def
+ /incrementHAUTEUR Hcone fracHeight mul 5 div def
+1 setlinejoin
+newpath
+0 incrementANGLE 360 {%
+ /theta exch def
+ 0 incrementHAUTEUR Hcone fracHeight mul incrementHAUTEUR sub {%
+ /H exch def
+ % normale à la facette
+ /nXfacette Hcone AngleCone dup sin exch cos mul theta incrementANGLE 2 div add cos mul
+ mul def
+ /nYfacette Hcone AngleCone dup sin exch cos mul theta incrementANGLE 2 div add sin mul
+ mul def
+ /nZfacette Hcone AngleCone sin dup mul mul def
+ /Xpoint nXfacette def
+ /Ypoint nYfacette def
+ /Zpoint nZfacette def
+CalculsPointsAfterTransformations
+ /nXfacette Xabscisse CX sub def
+ /nYfacette Yordonnee CY sub def
+ /nZfacette Zcote CZ sub def
+%
+ /OK Hcone H sub TanAngleCone mul def
+ /Xpoint OK theta cos mul def
+ /Ypoint OK theta sin mul def
+ /Zpoint H def
+CalculsPointsAfterTransformations
+ /Xfacette Xabscisse def
+ /Yfacette Yordonnee def
+ /Zfacette Zcote def
+ CalcCoordinates
+ moveto
+% coordonnées du centre de la facette
+ /OK Hcone H incrementHAUTEUR 2 div add sub TanAngleCone mul def
+ /Xpoint OK theta incrementANGLE 2 div add cos mul def
+ /Ypoint OK theta incrementANGLE 2 div add sin mul def
+ /Zpoint H incrementHAUTEUR 2 div add def
+CalculsPointsAfterTransformations
+ /XcentreFacette Xabscisse def
+ /YcentreFacette Yordonnee def
+ /ZcentreFacette Zcote def
+% rayon vers point de vue
+ /RXvue XcentreFacette XpointVue sub def
+ /RYvue YcentreFacette YpointVue sub def
+ /RZvue ZcentreFacette ZpointVue sub def
+% test de visibilité
+ /PSfacette nXfacette RXvue mul
+ nYfacette RYvue mul add
+ nZfacette RZvue mul add
+ def
+PSfacette 0 le {
+theta 1 theta incrementANGLE add {%
+ /theta1 exch def
+ /OK Hcone H sub TanAngleCone mul def
+ /Xpoint OK theta1 cos mul def
+ /Ypoint OK theta1 sin mul def
+ /Zpoint H def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+H 1 H incrementHAUTEUR add {
+ /H1 exch def
+ /OK Hcone H1 sub TanAngleCone mul def
+ /Xpoint OK theta incrementANGLE add cos mul def
+ /Ypoint OK theta incrementANGLE add sin mul def
+ /Zpoint H1 def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+theta incrementANGLE add -1 theta {%
+ /theta1 exch def
+ /OK Hcone H incrementHAUTEUR add sub TanAngleCone mul def
+ /Xpoint OK theta1 cos mul def
+ /Ypoint OK theta1 sin mul def
+ /Zpoint H incrementHAUTEUR add def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+H incrementHAUTEUR add -1 H {
+ /H1 exch def
+ /OK Hcone H1 sub TanAngleCone mul def
+ /Xpoint OK theta cos mul def
+ /Ypoint OK theta sin mul def
+ /Zpoint H1 def
+CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+} if
+} for
+} for
+% centre de la base inférieure après transformations
+ /CxFaceInf CX def
+ /CyFaceInf CY def
+ /CzFaceInf CZ def
+% modification du 16/11/2002
+% /Xpoint CxFaceInf def
+% /Ypoint CyFaceInf def
+% /Zpoint CzFaceInf def
+ /Xpoint 0 def
+ /Ypoint 0 def
+ /Zpoint 0 def
+% fin modification du 16/11/2002
+CalculsPointsAfterTransformations
+ /CxBaseInf Xabscisse def
+ /CyBaseInf Yordonnee def
+ /CzBaseInf Zcote def
+% centre de la base supérieure avant transformations
+ /CxFaceSup 0 def
+ /CyFaceSup 0 def
+ /CzFaceSup Hcone fracHeight mul def
+% Sommet du cone
+ /Xpoint 0 def
+ /Ypoint 0 def
+ /Zpoint Hcone def
+CalculsPointsAfterTransformations
+ /XsommetCone Xabscisse def
+ /YsommetCone Yordonnee def
+ /ZsommetCone Zcote def
+% Normale extérieure à la base inférieure
+ /nXBaseInf CxFaceInf XsommetCone sub def
+ /nYBaseInf CyFaceInf YsommetCone sub def
+ /nZBaseInf CzFaceInf ZsommetCone sub def
+% centre de la base supérieure
+ /Xpoint CxFaceSup def
+ /Ypoint CyFaceSup def
+ /Zpoint CzFaceSup def
+CalculsPointsAfterTransformations
+ /CxBaseSup Xabscisse def
+ /CyBaseSup Yordonnee def
+ /CzBaseSup Zcote def
+% Normale extérieure à la base supérieure
+ /nXBaseSup XsommetCone CxFaceSup sub def
+ /nYBaseSup YsommetCone CyFaceSup sub def
+ /nZBaseSup ZsommetCone CzFaceSup sub def
+% rayon vers point de vue
+ /RXvueSup CxBaseSup XpointVue sub def
+ /RYvueSup CyBaseSup YpointVue sub def
+ /RZvueSup CzBaseSup ZpointVue sub def
+ /RXvueInf CxBaseInf XpointVue sub def
+ /RYvueInf CyBaseInf YpointVue sub def
+ /RZvueInf CzBaseInf ZpointVue sub def
+% Visibilité de la base inférieure
+ /PSbaseInfCone nXBaseInf RXvueInf mul
+ nYBaseInf RYvueInf mul add
+ nZBaseInf RZvueInf mul add def
+% Visibilité de la base supérieure
+ /PSbaseSupCone nXBaseSup RXvueSup mul
+ nYBaseSup RYvueSup mul add
+ nZBaseSup RZvueSup mul add def
+PSbaseInfCone 0 le {
+/TableauxPoints [
+0 1 359 {% on décrit le cercle
+ /theta exch def [
+ /Xpoint Rcone theta cos mul def
+ /Ypoint Rcone theta sin mul def
+ /Zpoint 0 def
+CalculsPointsAfterTransformations
+ CalcCoordinates ]
+ } for
+ ] def
+gsave
+newpath
+ TableauxPoints 0 get aload pop moveto
+0 1 359 {
+ /compteur exch def
+ TableauxPoints compteur get aload pop
+ lineto } for
+0.7 setgray
+closepath
+fill
+grestore
+ } if
+%% PSbaseSupCone 0 le {
+%% modifié le 31/10/2003
+%PSbaseSupCone 0 ge {
+PSbaseSupCone 0 le {
+/TableauxPoints [
+0 1 359 {% on décrit le cercle
+ /theta exch def [
+ /OK Hcone 1 fracHeight sub mul TanAngleCone mul def
+ /Xpoint OK theta cos mul def
+ /Ypoint OK theta sin mul def
+ /Zpoint Hcone fracHeight mul def
+CalculsPointsAfterTransformations
+ CalcCoordinates ]
+ } for
+ ] def
+gsave
+newpath
+ TableauxPoints 0 get aload pop moveto
+0 1 359 {
+ /compteur exch def
+ TableauxPoints compteur get aload pop
+ lineto } for
+0.7 setgray
+closepath
+fill
+grestore
+ } if
+ } def
+/PortionSphere{%
+ /Xpoint Rsphere psTHETA dTHETA neg add cos mul psPHI dPHI sub cos mul def
+ /Ypoint Rsphere psTHETA dTHETA neg add sin mul psPHI dPHI sub cos mul def
+ /Zpoint Rsphere psPHI dPHI sub sin mul def
+CalculsPointsAfterTransformations
+ /xCentreFacette Xabscisse def
+ /yCentreFacette Yordonnee def
+ /zCentreFacette Zcote def
+% normale à la facette
+ /nXfacette xCentreFacette CX sub def
+ /nYfacette yCentreFacette CY sub def
+ /nZfacette zCentreFacette CZ sub def
+% rayon vers point de vue
+ /RXvue xCentreFacette XpointVue sub def
+ /RYvue yCentreFacette YpointVue sub def
+ /RZvue zCentreFacette ZpointVue sub def
+% test de visibilité
+ /PSfacette RXvue nXfacette mul
+ RYvue nYfacette mul add
+ RZvue nZfacette mul add
+ def
+PSfacette 0 le {
+CalcCoordinates
+newpath
+ moveto
+psTHETA dTHETA sub 1 psTHETA dTHETA add {
+ /Theta exch def
+ /Xpoint Rsphere Theta cos psPHI dPHI sub cos mul mul def
+ /Ypoint Rsphere Theta sin psPHI dPHI sub cos mul mul def
+ /Zpoint Rsphere psPHI dPHI sub sin mul def
+ CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+psPHI dPHI sub 1 psPHI dPHI add {
+ /Phi exch def
+ /Xpoint Rsphere psTHETA dTHETA add cos Phi cos mul mul def
+ /Ypoint Rsphere psTHETA dTHETA add sin Phi cos mul mul def
+ /Zpoint Rsphere Phi sin mul def
+ CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+psTHETA dTHETA add -1 psTHETA dTHETA sub {
+ /Theta exch def
+ /Xpoint Rsphere Theta cos psPHI dPHI add cos mul mul def
+ /Ypoint Rsphere Theta sin psPHI dPHI add cos mul mul def
+ /Zpoint Rsphere psPHI dPHI add sin mul def
+ CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+psPHI dPHI add -1 psPHI dPHI sub {
+ /Phi exch def
+ /Xpoint Rsphere psTHETA dTHETA sub cos Phi cos mul mul def
+ /Ypoint Rsphere psTHETA dTHETA sub sin Phi cos mul mul def
+ /Zpoint Rsphere Phi sin mul def
+ CalculsPointsAfterTransformations
+ CalcCoordinates
+ lineto
+ } for
+closepath
+} if
+} def
+% Dodecahedron : 31 décembre 2003
+% datas : Graphisme scientifique R.Dony
+% Masson ed. page 240
+/Dodecahedron{%
+ /XA M11 0 mul M12 A 0.607062 mul mul add M13 A mul 0.794655 mul add CX add def
+ /YA M21 0 mul M22 A 0.607062 mul mul add M23 A mul 0.794655 mul add CY add def
+ /ZA M31 0 mul M32 A 0.607062 mul mul add M33 A mul 0.794655 mul add CZ add def
+ /XB M11 A mul -0.5773503 mul M12 A mul 0.1875925 mul add M13 A mul 0.7946545 mul add CX add def
+ /YB M21 A mul -0.5773503 mul M22 A mul 0.1875925 mul add M23 A mul 0.7946545 mul add CY add def
+ /ZB M31 A mul -0.5773503 mul M32 A mul 0.1875925 mul add M33 A mul 0.7946545 mul add CZ add def
+ /XC M11 A mul -0.3568221 mul M12 A mul -0.4911235 mul add M13 A mul 0.7946545 mul add CX add def
+ /YC M21 A mul -0.3568221 mul M22 A mul -0.4911235 mul add M23 A mul 0.7946545 mul add CY add def
+ /ZC M31 A mul -0.3568221 mul M32 A mul -0.4911235 mul add M33 A mul 0.7946545 mul add CZ add def
+ /XD M11 A mul 0.3568221 mul M12 A mul -0.4911235 mul add M13 A mul 0.7946545 mul add CX add def
+ /YD M21 A mul 0.3568221 mul M22 A mul -0.4911235 mul add M23 A mul 0.7946545 mul add CY add def
+ /ZD M31 A mul 0.3568221 mul M32 A mul -0.4911235 mul add M33 A mul 0.7946545 mul add CZ add def
+ /XE M11 A mul 0.5773503 mul M12 A mul 0.1875925 mul add M13 A mul 0.7946545 mul add CX add def
+ /YE M21 A mul 0.5773503 mul M22 A mul 0.1875925 mul add M23 A mul 0.7946545 mul add CY add def
+ /ZE M31 A mul 0.5773503 mul M32 A mul 0.1875925 mul add M33 A mul 0.7946545 mul add CZ add def
+ /XF M11 A mul 0 mul M12 A mul 0.982247 mul add M13 A mul 0.175925 mul add CX add def
+ /YF M21 A mul 0 mul M22 A mul 0.982247 mul add M23 A mul 0.175925 mul add CY add def
+ /ZF M31 A mul 0 mul M32 A mul 0.982247 mul add M33 A mul 0.175925 mul add CZ add def
+ /XG M11 A mul -0.9341724 mul M12 A mul 0.303531 mul add M13 A mul 0.1875925 mul add CX add def
+ /YG M21 A mul -0.9341724 mul M22 A mul 0.303531 mul add M23 A mul 0.1875925 mul add CY add def
+ /ZG M31 A mul -0.9341724 mul M32 A mul 0.303531 mul add M33 A mul 0.1875925 mul add CZ add def
+ /XH M11 A mul -0.5773503 mul M12 A mul -0.7946545 mul add M13 A mul 0.1875925 mul add CX add def
+ /YH M21 A mul -0.5773503 mul M22 A mul -0.7946545 mul add M23 A mul 0.1875925 mul add CY add def
+ /ZH M31 A mul -0.5773503 mul M32 A mul -0.7946545 mul add M33 A mul 0.1875925 mul add CZ add def
+ /XI M11 A mul 0.5773503 mul M12 A mul -0.7946545 mul add M13 A mul 0.1875925 mul add CX add def
+ /YI M21 A mul 0.5773503 mul M22 A mul -0.7946545 mul add M23 A mul 0.1875925 mul add CY add def
+ /ZI M31 A mul 0.5773503 mul M32 A mul -0.7946545 mul add M33 A mul 0.1875925 mul add CZ add def
+ /XJ M11 A mul 0.9341724 mul M12 A mul 0.303531 mul add M13 A mul 0.1875925 mul add CX add def
+ /YJ M21 A mul 0.9341724 mul M22 A mul 0.303531 mul add M23 A mul 0.1875925 mul add CY add def
+ /ZJ M31 A mul 0.9341724 mul M32 A mul 0.303531 mul add M33 A mul 0.1875925 mul add CZ add def
+ /XK M11 A mul 0 mul M12 A mul -0.982247 mul add M13 A mul -0.1875925 mul add CX add def
+ /YK M21 A mul 0 mul M22 A mul -0.982247 mul add M23 A mul -0.1875925 mul add CY add def
+ /ZK M31 A mul 0 mul M32 A mul -0.982247 mul add M33 A mul -0.1875925 mul add CZ add def
+ /XL M11 A mul 0.9341724 mul M12 A mul -0.303531 mul add M13 A mul -0.1875925 mul add CX add def
+ /YL M21 A mul 0.9341724 mul M22 A mul -0.303531 mul add M23 A mul -0.1875925 mul add CY add def
+ /ZL M31 A mul 0.9341724 mul M32 A mul -0.303531 mul add M33 A mul -0.1875925 mul add CZ add def
+ /XM M11 A mul 0.5773503 mul M12 A mul 0.7946545 mul add M13 A mul -0.1875925 mul add CX add def
+ /YM M21 A mul 0.5773503 mul M22 A mul 0.7946545 mul add M23 A mul -0.1875925 mul add CY add def
+ /ZM M31 A mul 0.5773503 mul M32 A mul 0.7946545 mul add M33 A mul -0.1875925 mul add CZ add def
+ /XN M11 A mul -0.5773503 mul M12 A mul 0.7946545 mul add M13 A mul -0.1875925 mul add CX add def
+ /YN M21 A mul -0.5773503 mul M22 A mul 0.7946545 mul add M23 A mul -0.1875925 mul add CY add def
+ /ZN M31 A mul -0.5773503 mul M32 A mul 0.7946545 mul add M33 A mul -0.1875925 mul add CZ add def
+ /XO M11 A mul -0.9341724 mul M12 A mul -0.303531 mul add M13 A mul -0.1875925 mul add CX add def
+ /YO M21 A mul -0.9341724 mul M22 A mul -0.303531 mul add M23 A mul -0.1875925 mul add CY add def
+ /ZO M31 A mul -0.9341724 mul M32 A mul -0.303531 mul add M33 A mul -0.1875925 mul add CZ add def
+ /XP M11 A mul -0.5773503 mul M12 A mul -0.1875925 mul add M13 A mul -0.7946545 mul add CX add def
+ /YP M21 A mul -0.5773503 mul M22 A mul -0.1875925 mul add M23 A mul -0.7946545 mul add CY add def
+ /ZP M31 A mul -0.5773503 mul M32 A mul -0.1875925 mul add M33 A mul -0.7946545 mul add CZ add def
+ /XQ M11 A mul -0.3568221 mul M12 A mul 0.4911235 mul add M13 A mul -0.7946545 mul add CX add def
+ /YQ M21 A mul -0.3568221 mul M22 A mul 0.4911235 mul add M23 A mul -0.7946545 mul add CY add def
+ /ZQ M31 A mul -0.3568221 mul M32 A mul 0.4911235 mul add M33 A mul -0.7946545 mul add CZ add def
+ /XR M11 A mul 0.3568221 mul M12 A mul 0.4911235 mul add M13 A mul -0.7946545 mul add CX add def
+ /YR M21 A mul 0.3568221 mul M22 A mul 0.4911235 mul add M23 A mul -0.7946545 mul add CY add def
+ /ZR M31 A mul 0.3568221 mul M32 A mul 0.4911235 mul add M33 A mul -0.7946545 mul add CZ add def
+ /XS M11 A mul 0.5773503 mul M12 A mul -0.1875925 mul add M13 A mul -0.7946545 mul add CX add def
+ /YS M21 A mul 0.5773503 mul M22 A mul -0.1875925 mul add M23 A mul -0.7946545 mul add CY add def
+ /ZS M31 A mul 0.5773503 mul M32 A mul -0.1875925 mul add M33 A mul -0.7946545 mul add CZ add def
+ /XT M11 0 mul M12 A -0.607062 mul mul add M13 A mul -0.794655 mul add CX add def
+ /YT M21 0 mul M22 A -0.607062 mul mul add M23 A mul -0.794655 mul add CY add def
+ /ZT M31 0 mul M32 A -0.607062 mul mul add M33 A mul -0.794655 mul add CZ add def
+% Centres des faces : condition de visibilité
+% FACE 1 pentagone régulier ABCDE
+% OC1
+ /XC1 XA XB add XC add XD add XE add 5 div def
+ /YC1 YA YB add YC add YD add YE add 5 div def
+ /ZC1 ZA ZB add ZC add ZD add ZE add 5 div def
+% Normale à la face 1
+ /NX1 XC1 CX sub def
+ /NY1 YC1 CY sub def
+ /NZ1 ZC1 CZ sub def
+% rayon vers point de vue
+ /RXvue1 XC1 XpointVue sub def
+ /RYvue1 YC1 YpointVue sub def
+ /RZvue1 ZC1 ZpointVue sub def
+% produit scalaire
+ /PS1 RXvue1 NX1 mul RYvue1 NY1 mul add RZvue1 NZ1 mul add def
+% FACE 2 pentagone régulier EDILJ
+% OC2
+ /XC2 XE XD add XI add XL add XJ add 5 div def
+ /YC2 YE YD add YI add YL add YJ add 5 div def
+ /ZC2 ZE ZD add ZI add ZL add ZJ add 5 div def
+% Normale à la face 2
+ /NX2 XC2 CX sub def
+ /NY2 YC2 CY sub def
+ /NZ2 ZC2 CZ sub def
+% rayon vers point de vue
+ /RXvue2 XC2 XpointVue sub def
+ /RYvue2 YC2 YpointVue sub def
+ /RZvue2 ZC2 ZpointVue sub def
+% produit scalaire
+ /PS2 RXvue2 NX2 mul RYvue2 NY2 mul add RZvue2 NZ2 mul add def
+% FACE 3 pentagone régulier EJMFA
+% OC3
+ /XC3 XE XJ add XM add XF add XA add 5 div def
+ /YC3 YE YJ add YM add YF add YA add 5 div def
+ /ZC3 ZE ZJ add ZM add ZF add ZA add 5 div def
+% Normale à la face 2
+ /NX3 XC3 CX sub def
+ /NY3 YC3 CY sub def
+ /NZ3 ZC3 CZ sub def
+% rayon vers point de vue
+ /RXvue3 XC3 XpointVue sub def
+ /RYvue3 YC3 YpointVue sub def
+ /RZvue3 ZC3 ZpointVue sub def
+% produit scalaire
+ /PS3 RXvue3 NX3 mul RYvue3 NY3 mul add RZvue3 NZ3 mul add def
+% FACE 4 pentagone régulier AFNGB
+% OC4
+ /XC4 XA XF add XN add XG add XB add 5 div def
+ /YC4 YA YF add YN add YG add YB add 5 div def
+ /ZC4 ZA ZF add ZN add ZG add ZB add 5 div def
+% Normale à la face 4
+ /NX4 XC4 CX sub def
+ /NY4 YC4 CY sub def
+ /NZ4 ZC4 CZ sub def
+% rayon vers point de vue
+ /RXvue4 XC4 XpointVue sub def
+ /RYvue4 YC4 YpointVue sub def
+ /RZvue4 ZC4 ZpointVue sub def
+% produit scalaire
+ /PS4 RXvue4 NX4 mul RYvue4 NY4 mul add RZvue4 NZ4 mul add def
+% FACE 5 pentagone régulier BGOHC
+% OC5
+ /XC5 XB XG add XO add XH add XC add 5 div def
+ /YC5 YB YG add YO add YH add YC add 5 div def
+ /ZC5 ZB ZG add ZO add ZH add ZC add 5 div def
+% Normale à la face 5
+ /NX5 XC5 CX sub def
+ /NY5 YC5 CY sub def
+ /NZ5 ZC5 CZ sub def
+% rayon vers point de vue
+ /RXvue5 XC5 XpointVue sub def
+ /RYvue5 YC5 YpointVue sub def
+ /RZvue5 ZC5 ZpointVue sub def
+% produit scalaire
+ /PS5 RXvue5 NX5 mul RYvue5 NY5 mul add RZvue5 NZ5 mul add def
+% FACE 6 pentagone régulier CHKID
+% OC6
+ /XC6 XC XH add XK add XI add XD add 5 div def
+ /YC6 YC YH add YK add YI add YD add 5 div def
+ /ZC6 ZC ZH add ZK add ZI add ZD add 5 div def
+% Normale à la face 6
+ /NX6 XC6 CX sub def
+ /NY6 YC6 CY sub def
+ /NZ6 ZC6 CZ sub def
+% rayon vers point de vue
+ /RXvue6 XC6 XpointVue sub def
+ /RYvue6 YC6 YpointVue sub def
+ /RZvue6 ZC6 ZpointVue sub def
+% produit scalaire
+ /PS6 RXvue6 NX6 mul RYvue6 NY6 mul add RZvue6 NZ6 mul add def
+% FACE 7 pentagone régulier KTSLI
+% OC7
+ /XC7 XK XT add XS add XL add XI add 5 div def
+ /YC7 YK YT add YS add YL add YI add 5 div def
+ /ZC7 ZK ZT add ZS add ZL add ZI add 5 div def
+% Normale à la face 7
+ /NX7 XC7 CX sub def
+ /NY7 YC7 CY sub def
+ /NZ7 ZC7 CZ sub def
+% rayon vers point de vue
+ /RXvue7 XC7 XpointVue sub def
+ /RYvue7 YC7 YpointVue sub def
+ /RZvue7 ZC7 ZpointVue sub def
+% produit scalaire
+ /PS7 RXvue7 NX7 mul RYvue7 NY7 mul add RZvue7 NZ7 mul add def
+% FACE 8 pentagone régulier LSRMJ
+% OC8
+ /XC8 XL XS add XR add XM add XJ add 5 div def
+ /YC8 YL YS add YR add YM add YJ add 5 div def
+ /ZC8 ZL ZS add ZR add ZM add ZJ add 5 div def
+% Normale à la face 8
+ /NX8 XC8 CX sub def
+ /NY8 YC8 CY sub def
+ /NZ8 ZC8 CZ sub def
+% rayon vers point de vue
+ /RXvue8 XC8 XpointVue sub def
+ /RYvue8 YC8 YpointVue sub def
+ /RZvue8 ZC8 ZpointVue sub def
+% produit scalaire
+ /PS8 RXvue8 NX8 mul RYvue8 NY8 mul add RZvue8 NZ8 mul add def
+% FACE 9 pentagone régulier MRQNF
+% OC9
+ /XC9 XM XR add XQ add XN add XF add 5 div def
+ /YC9 YM YR add YQ add YN add YF add 5 div def
+ /ZC9 ZM ZR add ZQ add ZN add ZF add 5 div def
+% Normale à la face 6
+ /NX9 XC9 CX sub def
+ /NY9 YC9 CY sub def
+ /NZ9 ZC9 CZ sub def
+% rayon vers point de vue
+ /RXvue9 XC9 XpointVue sub def
+ /RYvue9 YC9 YpointVue sub def
+ /RZvue9 ZC9 ZpointVue sub def
+% produit scalaire
+ /PS9 RXvue9 NX9 mul RYvue9 NY9 mul add RZvue9 NZ9 mul add def
+% FACE 10 pentagone régulier NQPOG
+% OC10
+ /XC10 XN XQ add XP add XO add XG add 5 div def
+ /YC10 YN YQ add YP add YO add YG add 5 div def
+ /ZC10 ZN ZQ add ZP add ZO add ZG add 5 div def
+% Normale à la face 6
+ /NX10 XC10 CX sub def
+ /NY10 YC10 CY sub def
+ /NZ10 ZC10 CZ sub def
+% rayon vers point de vue
+ /RXvue10 XC10 XpointVue sub def
+ /RYvue10 YC10 YpointVue sub def
+ /RZvue10 ZC10 ZpointVue sub def
+% produit scalaire
+ /PS10 RXvue10 NX10 mul RYvue10 NY10 mul add RZvue10 NZ10 mul add def
+% FACE 11 pentagone régulier OPTKH
+% OC11
+ /XC11 XO XP add XT add XK add XH add 5 div def
+ /YC11 YO YP add YT add YK add YH add 5 div def
+ /ZC11 ZO ZP add ZT add ZK add ZH add 5 div def
+% Normale à la face 11
+ /NX11 XC11 CX sub def
+ /NY11 YC11 CY sub def
+ /NZ11 ZC11 CZ sub def
+% rayon vers point de vue
+ /RXvue11 XC11 XpointVue sub def
+ /RYvue11 YC11 YpointVue sub def
+ /RZvue11 ZC11 ZpointVue sub def
+% produit scalaire
+ /PS11 RXvue11 NX11 mul RYvue11 NY11 mul add RZvue11 NZ11 mul add def
+% FACE 12 pentagone régulier PQRST
+% OC12
+ /XC12 XP XQ add XR add XS add XT add 5 div def
+ /YC12 YP YQ add YR add YS add YT add 5 div def
+ /ZC12 ZP ZQ add ZR add ZS add ZT add 5 div def
+% Normale à la face 12
+ /NX12 XC12 CX sub def
+ /NY12 YC12 CY sub def
+ /NZ12 ZC12 CZ sub def
+% rayon vers point de vue
+ /RXvue12 XC12 XpointVue sub def
+ /RYvue12 YC12 YpointVue sub def
+ /RZvue12 ZC12 ZpointVue sub def
+% produit scalaire
+ /PS12 RXvue12 NX12 mul RYvue12 NY12 mul add RZvue12 NZ12 mul add def
+% faceOne ABDCE
+PS1 0 Condition { %
+reduction reduction scale
+1 setlinejoin
+newpath
+ /Yordonnee YA def
+ /Zcote ZA def
+ /Xabscisse XA def
+ CalcCoordinates
+ moveto
+ /Zcote ZB def
+ /Xabscisse XB def
+ /Yordonnee YB def
+ CalcCoordinates
+ lineto
+ /Zcote ZC def
+ /Xabscisse XC def
+ /Yordonnee YC def
+ CalcCoordinates
+ lineto
+ /Zcote ZD def
+ /Xabscisse XD def
+ /Yordonnee YD def
+ CalcCoordinates
+ lineto
+ /Zcote ZE def
+ /Xabscisse XE def
+ /Yordonnee YE def
+ CalcCoordinates
+ lineto
+closepath
+gsave
+0.05 0.1 0.1 0 setcmykcolor
+fill
+grestore
+stroke
+} if
+% face2 EDILJ
+PS2 0 Condition { %
+reduction reduction scale
+1 setlinejoin
+newpath
+ /Yordonnee YE def
+ /Zcote ZE def
+ /Xabscisse XE def
+ CalcCoordinates
+ moveto
+ /Zcote ZD def
+ /Xabscisse XD def
+ /Yordonnee YD def
+ CalcCoordinates
+ lineto
+ /Zcote ZI def
+ /Xabscisse XI def
+ /Yordonnee YI def
+ CalcCoordinates
+ lineto
+ /Zcote ZL def
+ /Xabscisse XL def
+ /Yordonnee YL def
+ CalcCoordinates
+ lineto
+ /Zcote ZJ def
+ /Xabscisse XJ def
+ /Yordonnee YJ def
+ CalcCoordinates
+ lineto
+closepath
+gsave
+0.05 0.15 0.15 0 setcmykcolor
+fill
+grestore
+stroke
+} if
+% face3 EJMFA
+PS3 0 Condition { %
+reduction reduction scale
+1 setlinejoin
+newpath
+ /Yordonnee YE def
+ /Zcote ZE def
+ /Xabscisse XE def
+ CalcCoordinates
+ moveto
+ /Zcote ZJ def
+ /Xabscisse XJ def
+ /Yordonnee YJ def
+ CalcCoordinates
+ lineto
+ /Zcote ZM def
+ /Xabscisse XM def
+ /Yordonnee YM def
+ CalcCoordinates
+ lineto
+ /Zcote ZF def
+ /Xabscisse XF def
+ /Yordonnee YF def
+ CalcCoordinates
+ lineto
+ /Zcote ZA def
+ /Xabscisse XA def
+ /Yordonnee YA def
+ CalcCoordinates
+ lineto
+closepath
+gsave
+0.05 0.2 0.2 0 setcmykcolor
+fill
+grestore
+stroke
+} if
+% face4 AFNGB
+PS4 0 Condition { %
+reduction reduction scale
+1 setlinejoin
+newpath
+ /Yordonnee YA def
+ /Zcote ZA def
+ /Xabscisse XA def
+ CalcCoordinates
+ moveto
+ /Zcote ZF def
+ /Xabscisse XF def
+ /Yordonnee YF def
+ CalcCoordinates
+ lineto
+ /Zcote ZN def
+ /Xabscisse XN def
+ /Yordonnee YN def
+ CalcCoordinates
+ lineto
+ /Zcote ZG def
+ /Xabscisse XG def
+ /Yordonnee YG def
+ CalcCoordinates
+ lineto
+ /Zcote ZB def
+ /Xabscisse XB def
+ /Yordonnee YB def
+ CalcCoordinates
+ lineto
+closepath
+gsave
+0.05 0.25 0.25 0 setcmykcolor
+fill
+grestore
+stroke
+} if
+% face5 BGOHC
+PS5 0 Condition { %
+reduction reduction scale
+1 setlinejoin
+newpath
+ /Yordonnee YB def
+ /Zcote ZB def
+ /Xabscisse XB def
+ CalcCoordinates
+ moveto
+ /Zcote ZG def
+ /Xabscisse XG def
+ /Yordonnee YG def
+ CalcCoordinates
+ lineto
+ /Zcote ZO def
+ /Xabscisse XO def
+ /Yordonnee YO def
+ CalcCoordinates
+ lineto
+ /Zcote ZH def
+ /Xabscisse XH def
+ /Yordonnee YH def
+ CalcCoordinates
+ lineto
+ /Zcote ZC def
+ /Xabscisse XC def
+ /Yordonnee YC def
+ CalcCoordinates
+ lineto
+closepath
+gsave
+0.05 0.3 0.3 0 setcmykcolor
+fill
+grestore
+stroke
+} if
+% face6 CHKID
+PS6 0 Condition { %
+reduction reduction scale
+1 setlinejoin
+newpath
+ /Yordonnee YC def
+ /Zcote ZC def
+ /Xabscisse XC def
+ CalcCoordinates
+ moveto
+ /Zcote ZH def
+ /Xabscisse XH def
+ /Yordonnee YH def
+ CalcCoordinates
+ lineto
+ /Zcote ZK def
+ /Xabscisse XK def
+ /Yordonnee YK def
+ CalcCoordinates
+ lineto
+ /Zcote ZI def
+ /Xabscisse XI def
+ /Yordonnee YI def
+ CalcCoordinates
+ lineto
+ /Zcote ZD def
+ /Xabscisse XD def
+ /Yordonnee YD def
+ CalcCoordinates
+ lineto
+closepath
+gsave
+0.05 0.35 0.35 0 setcmykcolor
+fill
+grestore
+stroke
+} if
+% face7 KTSLI
+PS7 0 Condition { %
+reduction reduction scale
+1 setlinejoin
+newpath
+ /Yordonnee YK def
+ /Zcote ZK def
+ /Xabscisse XK def
+ CalcCoordinates
+ moveto
+ /Zcote ZT def
+ /Xabscisse XT def
+ /Yordonnee YT def
+ CalcCoordinates
+ lineto
+ /Zcote ZS def
+ /Xabscisse XS def
+ /Yordonnee YS def
+ CalcCoordinates
+ lineto
+ /Zcote ZL def
+ /Xabscisse XL def
+ /Yordonnee YL def
+ CalcCoordinates
+ lineto
+ /Zcote ZI def
+ /Xabscisse XI def
+ /Yordonnee YI def
+ CalcCoordinates
+ lineto
+closepath
+gsave
+0.05 0.4 0.4 0 setcmykcolor
+fill
+grestore
+stroke
+} if
+% face8 LSRMJ
+PS8 0 Condition { %
+reduction reduction scale
+1 setlinejoin
+newpath
+ /Yordonnee YL def
+ /Zcote ZL def
+ /Xabscisse XL def
+ CalcCoordinates
+ moveto
+ /Zcote ZS def
+ /Xabscisse XS def
+ /Yordonnee YS def
+ CalcCoordinates
+ lineto
+ /Zcote ZR def
+ /Xabscisse XR def
+ /Yordonnee YR def
+ CalcCoordinates
+ lineto
+ /Zcote ZM def
+ /Xabscisse XM def
+ /Yordonnee YM def
+ CalcCoordinates
+ lineto
+ /Zcote ZJ def
+ /Xabscisse XJ def
+ /Yordonnee YJ def
+ CalcCoordinates
+ lineto
+closepath
+gsave
+0.05 0.45 0.45 0 setcmykcolor
+fill
+grestore
+stroke
+} if
+% face9 MRQNF
+PS9 0 Condition { %
+reduction reduction scale
+1 setlinejoin
+newpath
+ /Yordonnee YM def
+ /Zcote ZM def
+ /Xabscisse XM def
+ CalcCoordinates
+ moveto
+ /Zcote ZR def
+ /Xabscisse XR def
+ /Yordonnee YR def
+ CalcCoordinates
+ lineto
+ /Zcote ZQ def
+ /Xabscisse XQ def
+ /Yordonnee YQ def
+ CalcCoordinates
+ lineto
+ /Zcote ZN def
+ /Xabscisse XN def
+ /Yordonnee YN def
+ CalcCoordinates
+ lineto
+ /Zcote ZF def
+ /Xabscisse XF def
+ /Yordonnee YF def
+ CalcCoordinates
+ lineto
+closepath
+gsave
+0.05 0.5 0.5 0 setcmykcolor
+fill
+grestore
+stroke
+} if
+% face10 NQPOG
+PS10 0 Condition { %
+reduction reduction scale
+1 setlinejoin
+newpath
+ /Yordonnee YN def
+ /Zcote ZN def
+ /Xabscisse XN def
+ CalcCoordinates
+ moveto
+ /Zcote ZQ def
+ /Xabscisse XQ def
+ /Yordonnee YQ def
+ CalcCoordinates
+ lineto
+ /Zcote ZP def
+ /Xabscisse XP def
+ /Yordonnee YP def
+ CalcCoordinates
+ lineto
+ /Zcote ZO def
+ /Xabscisse XO def
+ /Yordonnee YO def
+ CalcCoordinates
+ lineto
+ /Zcote ZG def
+ /Xabscisse XG def
+ /Yordonnee YG def
+ CalcCoordinates
+ lineto
+closepath
+gsave
+0.05 0.55 0.55 0 setcmykcolor
+fill
+grestore
+stroke
+} if
+% face11 OPTKH
+PS11 0 Condition { %
+reduction reduction scale
+1 setlinejoin
+newpath
+ /Yordonnee YO def
+ /Zcote ZO def
+ /Xabscisse XO def
+ CalcCoordinates
+ moveto
+ /Zcote ZP def
+ /Xabscisse XP def
+ /Yordonnee YP def
+ CalcCoordinates
+ lineto
+ /Zcote ZT def
+ /Xabscisse XT def
+ /Yordonnee YT def
+ CalcCoordinates
+ lineto
+ /Zcote ZK def
+ /Xabscisse XK def
+ /Yordonnee YK def
+ CalcCoordinates
+ lineto
+ /Zcote ZH def
+ /Xabscisse XH def
+ /Yordonnee YH def
+ CalcCoordinates
+ lineto
+closepath
+gsave
+0.05 0.6 0.6 0 setcmykcolor
+fill
+grestore
+stroke
+} if
+% face12 PQRST
+PS12 0 Condition { %
+reduction reduction scale
+1 setlinejoin
+newpath
+ /Yordonnee YP def
+ /Zcote ZP def
+ /Xabscisse XP def
+ CalcCoordinates
+ moveto
+ /Zcote ZQ def
+ /Xabscisse XQ def
+ /Yordonnee YQ def
+ CalcCoordinates
+ lineto
+ /Zcote ZR def
+ /Xabscisse XR def
+ /Yordonnee YR def
+ CalcCoordinates
+ lineto
+ /Zcote ZS def
+ /Xabscisse XS def
+ /Yordonnee YS def
+ CalcCoordinates
+ lineto
+ /Zcote ZT def
+ /Xabscisse XT def
+ /Yordonnee YT def
+ CalcCoordinates
+ lineto
+closepath
+gsave
+0.05 0.65 0.65 0 setcmykcolor
+fill
+grestore
+stroke
+} if
+}
+def
+end
diff --git a/Master/texmf-dist/dvips/pstricks-add/pstricks-add.pro b/Master/texmf-dist/dvips/pstricks-add/pstricks-add.pro
new file mode 100644
index 00000000000..21547282722
--- /dev/null
+++ b/Master/texmf-dist/dvips/pstricks-add/pstricks-add.pro
@@ -0,0 +1,792 @@
+%!
+% PostScript prologue for pstricks-add.tex.
+% Version 0.01, 2005/09/27
+% For distribution, see pstricks.tex.
+%
+% HISTORY
+% 2005/09/28 : - rename it to pstricks-add.pro
+% - agg support for Gouraud shading
+% 2005/05/20 : small (unimportant) changes (hv)
+% 2005/02/25 : white space removal from expression
+% 2004/12/16 : addition of SUM and IFTE
+% 2004/11/14 : correction of a priority problem
+% ^ before unary - (new rule FS)
+/tx@addDict 410 dict def tx@addDict begin
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Pi and Euler are defined in pstricks.pro
+/PIdiv2 1.57079632680 def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12
+% E->T|E+T
+% T->FS|T*FS %%% NEW 2004/11/14
+% FS -> F | +SF | -SF %%% NEW 2004/11/14
+% F->P|F^P %%% OLD
+% F->P|F^SF %%% NEW 2004/11/14 ???? ^FS
+% P->(E)|literal
+% literal->number|var|var[E]|func(params)%%|-P|+P%%% OLD
+% params->E|E,param
+%
+% E expression, T term, SF signed factor, F factor, P power
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% parser
+%% str -> [ LIFO vector ]
+/AlgParser { InitParser SetExpr LexStr 0 exch AnalyzeListOfE ExpressionVector /ExpressionVector [] def} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+/SetExpr { RemoveWS /ExpressionString exch def } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+/InitParser {
+ /ExpressionVector [] def /AddVector [] def
+ /AddVectorfree [] def /MulVector [] def
+ /MulVectorfree [] def /PowVector [] def
+ /PowVectorfree [] def /OpParVector [] def
+ /ClParVector [] def /ParVectorFree [] def
+ %%/CompVector [] def /CompVectorFree [] def
+ /BraVector [] def /SemVector [] def
+ /ComVector [] def /ExpressionVector [] def
+ /LoopLevel -1 def /LoopContext [] def %%% NEW for SUM function
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+/FLbreak { tst not {/L exch def /F exch def 2 copy L eq exch F eq and /tst exch def} {pop pop} ifelse} def
+/Negbreak { tst not { dup 0 lt /tst exch def } if } def
+/STOP { tst {TOUF} if} def
+/tst false def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% analyze Expression List
+%% first last
+/AnalyzeListOfE {
+ exch SemVector {
+ exch 1 index 1 sub AnalyzeExpr 1 add
+ } forall%%last_char
+ exch AnalyzeExpr
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% analyze Expr
+%% first last
+/AnalyzeExpr {
+ FindFirstAdd%% first last pos+
+ 2 copy abs 1 sub ne
+ { 3 -1 roll 1 index abs 1 sub AnalyzeExpr dup abs 1 add 3 -1 roll AnalyzeTerm EvalAdd }
+ { pop AnalyzeTerm } ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% analyze Term
+%% first last
+/AnalyzeTerm {%%19 28 FLbreak STOP
+ FindFirstMul%% first last pos*
+ 2 copy abs 1 sub ne
+ { 3 -1 roll 1 index abs 1 sub AnalyzeTerm dup abs 1 add 3 -1 roll AnalyzeSignedFactor EvalMul }%%% NEW 2004/11/14
+ { pop AnalyzeSignedFactor } ifelse%%% NEW 2004/11/14
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% NEW 2004/11/14
+%% analyze Signed Factor
+%% first last ->
+/AnalyzeSignedFactor {
+ ExpressionString 2 index get
+ dup 45 eq%% a - sign
+ { pop exch 1 add exch AnalyzeSignedFactor EvalNeg }
+ { 43 eq%%a + sign
+ { exch 1 add exch AnalyzeSignedFactor }
+ { AnalyzeFactor } ifelse } ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% analyze Factor
+%% first last ->
+/AnalyzeFactor {
+ FindFirstPow%% first last pos*
+ 2 copy abs 1 sub ne
+% { 3 -1 roll 1 index abs 1 sub AnalyzeFactor dup abs 1 add 3 -1 roll AnalyzePower EvalPow }
+ { 3 -1 roll 1 index abs 1 sub AnalyzeFactor dup abs 1 add 3 -1 roll AnalyzeSignedFactor EvalPow }% NEW 2004/11/14
+ { pop AnalyzePower } ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% analyze Power
+%% first last ->
+/compteur 0 def
+/AnalyzePower {
+ ExpressionString 2 index get
+ dup 40 eq%% an open parenthesis
+ { pop 1 index UnfreePar 1 sub exch 1 add exch AnalyzeExpr }
+ { dup 45 eq%% a - sign
+ { pop exch 1 add exch AnalyzePower EvalNeg }
+ { dup 43 eq%%a + sign
+ { pop exch 1 add exch AnalyzePower }
+ { dup 46 eq 1 index 48 ge 2 index 57 le and or%%a digit or a dot
+ { pop AnalyzeNumber }
+ { pop AnalyzeLiteral } ifelse } ifelse } ifelse } ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% analyze parameters list
+%% first last
+/AnalyzeParam {
+ { FindFirstCom%% first last pos,
+ 3 -1 roll 1 index 1 sub AnalyzeExpr
+ 2 copy 1 sub ne { 1 add exch } { pop pop exit } ifelse
+ } loop
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Find the eventual addition at this level
+%% first last -> position
+/FindFirstAdd {
+ 2 copy /Last exch def /First exch def false 0
+ AddVector {
+ AddVectorFree 2 index get
+ { /pos exch def
+ %% if it is in the current part of the analysed expr
+ pos abs First gt pos abs Last lt and
+ { true 0 1 ClParVector length
+ dup 0 eq%% no parenthesis
+ { pop pop pop pop exch not exch exit }
+ { 1 sub
+ { ParVectorFree 1 index get
+ { OpParVector 1 index get pos abs lt%% in this parenthesis level
+ ClParVector 2 index get pos abs gt and
+ { pop pop false exit } if%%then exit loop
+ } if
+ pop } for
+ { pop pop true dup exit } if } ifelse } if
+ } { pop } ifelse
+ 1 add
+ } forall
+ pop
+ { pos UnfreeAdd} %% find one mul
+ { Last 1 add } ifelse
+} def
+%% {
+%% 2 copy /Last exch def /First exch def false 0
+%% AddVector {
+%% AddVectorFree 2 index get
+%% { /pos exch def
+%% true 0 1 ClParVector length 1 sub
+%% { ParVectorFree 1 index get
+%% { OpParVector 1 index get pos abs le
+%% ClParVector 2 index get pos abs ge and
+%% pos abs First lt pos abs Last gt or or
+%% { pop pop false exit } if
+%% } if
+%% pop
+%% } for
+%% { pop pop true dup exit } if
+%% }
+%% { pop } ifelse
+%% 1 add
+%% } forall
+%% pop
+%% { pos UnfreeAdd}%% find one add
+%% { Last 1 add } ifelse
+%% } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Find the eventual multiplication at this level
+%% first last -> first last position
+/FindFirstMul {
+ 2 copy /Last exch def /First exch def false 0
+ MulVector {
+ MulVectorFree 2 index get
+ { /pos exch def
+ %% if it is in the current part of the analysed expr
+ pos abs First gt pos abs Last lt and
+ { true 0 1 ClParVector length
+ dup 0 eq%% no parenthesis
+ { pop pop pop pop exch not exch exit }
+ { 1 sub
+ { ParVectorFree 1 index get
+ { OpParVector 1 index get pos abs lt%% in this parenthesis level
+ ClParVector 2 index get pos abs gt and
+ { pop pop false exit } if%%then exit loop
+ } if
+ pop } for
+ { pop pop true dup exit } if } ifelse } if
+ } { pop } ifelse
+ 1 add
+ } forall
+ pop
+ { pos UnfreeMul} %% find one mul
+ { Last 1 add } ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Find the eventual power at this level
+%% first last -> first last position
+/FindFirstPow {
+ 2 copy /Last exch def /First exch def false 0
+ PowVector {
+ PowVectorFree 2 index get
+ { /pos exch def
+ %% if it is in the current part of the analysed expr
+ pos First gt pos Last lt and
+ { true 0 1 ClParVector length
+ dup 0 eq%% no parenthesis
+ { pop pop pop pop exch not exch exit }
+ { 1 sub
+ { ParVectorFree 1 index get
+ { OpParVector 1 index get pos abs lt%% in this parenthesis level
+ ClParVector 2 index get pos abs gt and
+ { pop pop false exit } if%%then exit loop
+ } if
+ pop } for
+ { pop pop true dup exit } if } ifelse } if
+ } { pop } ifelse
+ 1 add
+ } forall
+ pop
+ { pos UnfreePow} %% find one ^
+ { Last 1 add } ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Find the eventual comma at this level
+%% first last -> first last position
+/FindFirstCom {
+ 2 copy /Last exch def /First exch def false 0
+ ComVector {
+ ComVectorFree 2 index get
+ { /pos exch def
+ %% if it is in the current part of the analysed expr
+ pos First gt pos Last lt and
+ { true 0 1 ClParVector length
+ dup 0 eq%% no parenthesisSTOP
+ { pop pop pop pop exch not exch exit }
+ { 1 sub
+ { ParVectorFree 1 index get
+ { OpParVector 1 index get pos abs lt%% in this parenthesis level
+ ClParVector 2 index get pos abs gt and
+ { pop pop false exit } if%%then exit loop
+ } if
+ pop } for
+ { pop pop true dup exit } if } ifelse } if
+ } { pop } ifelse
+ 1 add
+ } forall
+ pop
+ { pos UnfreeCom} %% find one comma
+ { Last 1 add } ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Find the first opened parenthesis (only for func call)
+%% first last -> first last position
+/FindFirstPar {
+ 2 copy /Last exch def /First exch def false 0
+ OpParVector {
+ ParVectorFree 2 index get
+ { /pos exch def
+ pos First gt pos Last lt and
+ { exch not exch exit } if
+ } { pop } ifelse
+ 1 add
+ } forall
+ pop
+ { pos dup UnfreePar }%% find one par
+ { Last 1 add } ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Find the first opening bracket
+%% first last -> first last position
+/FindFirstBra {
+ 2 copy /Last exch def /First exch def
+ BraVector {
+ /pos exch def
+ pos First gt pos Last lt and
+ { exit } if
+ } forall
+ pos dup UnfreePar%% finding it is mandatory
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Read the number and push it in the vector
+%% first last ->
+/AnalyzeNumber {
+ 1 index sub 1 add ExpressionString 3 1 roll getinterval cvr /n exch def
+ /ExpressionVector ExpressionVector aload length n exch 1 add array astore def
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Read the literal and push it in the vector
+%% first last ->
+/AnalyzeLiteral {
+ ExpressionString 1 index get dup 41 eq %%close par at the end => function call
+ { pop FindFirstPar%%first last parpos
+ ExpressionString 3 index dup 3 index exch sub getinterval
+ dup (SUM) eq { sumation }
+ { dup (IFTE) eq { condition }
+ { 1 index 1 add 3 index 1 sub AnalyzeParam
+ dup cvn /n exch def TrigoFunc
+ /ExpressionVector ExpressionVector aload length
+ /tx@addDict cvx /begin cvx n cvx /end cvx 5 -1 roll 4 add array astore def
+ %%n cvx exch 1 add array astore def
+ pop pop pop } ifelse } ifelse }
+ { 93 eq%%close bracket => vector element
+ { FindFirstBra%%first last brapos
+ ExpressionString 3 index dup 3 index exch sub getinterval cvn /n exch def
+ /ExpressionVector ExpressionVector aload length n cvx exch 1 add array astore def
+ 2 copy 1 add exch 1 sub AnalyzeExpr
+ /ExpressionVector ExpressionVector aload length /cvi cvx exch /get cvx exch 2 add array astore def
+ pop pop pop
+ }
+ { 1 index sub 1 add ExpressionString 3 1 roll getinterval cvn /n exch def
+ /ExpressionVector ExpressionVector aload length n cvx exch 1 add array astore def } ifelse } ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% push add in the vector
+%% kind ->
+%% if kind>0 then add else sub
+/EvalAdd {
+ /ExpressionVector ExpressionVector aload length dup 3 add -1 roll
+ 0 gt { /add } { /sub } ifelse cvx exch 1 add array astore def
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% push mul in the vector
+%% ->
+/EvalMul {
+ /ExpressionVector ExpressionVector aload length dup 3 add -1 roll
+ 0 gt { /mul } { /div } ifelse cvx exch 1 add array astore def
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% push exp in the vector
+%% ->
+/EvalPow {
+ pop /ExpressionVector ExpressionVector aload length
+ /tx@addDict cvx exch /begin cvx exch /EXP cvx exch /end cvx exch 4 add array astore def
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% push neg in the vector
+%% ->
+/EvalNeg {
+ /ExpressionVector ExpressionVector aload length /neg cvx exch 1 add array astore def
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Lexical Analyzis of the string
+%% ->
+/LexStr {
+ /freepar 0 def /lastpar 0 def /lastchar 0 def
+ 0 ExpressionString
+ { dup 40 eq 1 index 91 eq or %% open parenthesis
+ { /OpParVector OpParVector aload length dup 3 add index exch 1 add array astore def
+ /ClParVector ClParVector aload length -1 exch 1 add array astore def
+ /lastpar freepar def /freepar freepar 1 add def /NoPar false def} if
+ dup 41 eq 1 index 93 eq or %% close parenthesis
+ { ClParVector lastpar 3 index put lastpar
+ dup 0 eq
+ { pop }
+ { { 1 sub dup ClParVector exch get -1 eq { /lastpar exch def exit } { dup 0 eq { pop exit} if } ifelse } loop }
+ ifelse } if
+ dup 42 eq %% * operator
+ %%{ /MulVector MulVector aload length dup 3 add index exch 1 add array astore def } if
+ { /MulVector 2 index MulVector aload length 1 add array astore def } if
+ dup 43 eq %% + operator
+ { %%test if it is a real operator and not the unary operator
+ lastchar dup 40 ne %% open parenthesis
+ 1 index 59 ne and %% ;
+ 1 index 42 ne and %% *
+ 1 index 43 ne and %% +
+ 1 index 44 ne and %% ,
+ 1 index 45 ne and %% -
+ 1 index 47 ne and %% /
+ 1 index 0 ne and %% first char
+ 1 index 94 ne and %% ^%%2004/11/14
+ exch 124 ne and %% |
+ %%{/AddVector AddVector aload length dup 3 add index exch 1 add array astore def } if}
+ {/AddVector 2 index AddVector aload length 1 add array astore def } if}
+ if
+ dup 44 eq %% , separator
+ { /ComVector ComVector aload length dup 3 add index exch 1 add array astore def }
+ if
+ dup 45 eq %% - operator
+ { %%test if it is a real operator and not the unary operator
+ lastchar dup 40 ne %% open parenthesis
+ 1 index 59 ne and %% ;
+ 1 index 42 ne and %% *
+ 1 index 43 ne and %% +
+ 1 index 44 ne and %% ,
+ 1 index 45 ne and %% -
+ 1 index 47 ne and %% /
+ 1 index 0 ne and %% first char
+ 1 index 94 ne and %% ^%%2004/11/14
+ exch 124 ne and %% |
+ %%{/AddVector AddVector aload length dup 3 add index neg exch 1 add array astore def } if}
+ {/AddVector 2 index neg AddVector aload length 1 add array astore def } if}
+ if
+ dup 47 eq %% / operator
+ %%{ /MulVector MulVector aload length dup 3 add index neg exch 1 add array astore def }
+ { /MulVector 2 index neg MulVector aload length 1 add array astore def }
+ if
+ dup 59 eq 1 index 124 eq or%% ; separator |
+ { /SemVector SemVector aload length dup 3 add index exch 1 add array astore def }
+ if
+ dup 91 eq %% open bracket
+ { /BraVector BraVector aload length dup 3 add index exch 1 add array astore def }
+ if
+ dup 94 eq %% ^ operator
+ %%{ /PowVector PowVector aload length dup 3 add index exch 1 add array astore def }
+ { /PowVector 2 index PowVector aload length 1 add array astore def }%%2004/11/14
+ if
+ /lastchar exch def 1 add
+ } forall
+ /AddVectorFree AddVector CreateFree def
+ /MulVectorFree MulVector CreateFree def
+ /ParVectorFree OpParVector CreateFree def
+ /PowVectorFree PowVector CreateFree def
+ /ComVectorFree ComVector CreateFree def
+ 1 sub
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Create Free vector
+%% ->
+/CreateFree {
+ dup length array exch
+ { pop true exch } forall astore
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Unfree parenthesis
+%% pos ->
+/UnfreePar {
+ /pos exch def ParVectorFree 0
+ OpParVector { pos eq { exit } if 1 add } forall
+ false put
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Unfree mul
+%% pos ->
+/UnfreeMul {
+ MulVectorFree 0
+ MulVector { pos eq { exit } if 1 add } forall
+ false put
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Unfree add
+%% pos ->
+/UnfreeAdd {
+ AddVectorFree 0
+ AddVector { pos eq { exit } if 1 add } forall
+ false put
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Unfree exp
+%% pos ->
+/UnfreePow {
+ PowVectorFree 0
+ PowVector { pos eq { exit } if 1 add } forall
+ false put
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Unfree com
+%% pos ->
+/UnfreeCom {
+ ComVectorFree 0
+ ComVector { pos eq { exit } if 1 add } forall
+ false put
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Convert to radians if trigo function call
+%% (name) ->
+/TrigoFunc {
+ dup (cos) eq 1 index (sin) eq or exch (tan) eq or
+ { /ExpressionVector ExpressionVector aload length 3.14159265359 /div cvx 180 /mul cvx 5 -1 roll 4 add
+ array astore def
+ } if
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% the condition function
+%% ->
+/condition {
+ %% manage the condition
+ 1 index 1 add 3 index 1 sub FindFirstCom
+ %% find the test char <,>,=,!
+ 4 index 1 index 1 sub FindTestChar
+ 4 index 2 index 1 sub AnalyzeExpr 3 1 roll
+ 1 add 1 index 1 sub AnalyzeExpr exch
+ /ExpressionVector ExpressionVector aload length dup 1 add array exch 3 add -1 roll cvx exch astore def
+ %% manage the then clause
+ MngClause
+ %% manage the else clause
+ MngClause
+ /ExpressionVector ExpressionVector aload length 1 add /ifelse cvx exch array astore def
+ mark 8 1 roll cleartomark
+} def
+/FindTestChar {
+ 1 exch
+ { dup ExpressionString exch get
+ dup 60 eq { pop /lt exit } if%%<
+ dup 61 eq { pop /eq exit } if%%=
+ dup 62 eq { pop /gt exit } if%%>
+ pop pop } for
+} def
+/MngClause {
+ 3 1 roll FindFirstCom 4 -1 roll 1 add 1 index 1 sub
+ /ExpressionVector ExpressionVector exch [] def 3 1 roll AnalyzeExpr
+ /ExpressionVector exch aload length 1 add ExpressionVector cvx exch array astore def
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% the sumation function
+%% ->
+/sumation {
+ /LoopLevel LoopLevel 1 add def
+ %% create the accumulator
+ /ExpressionVector ExpressionVector aload length 1 add 0 exch array astore def
+ %% read the variable name
+ 1 index 1 add 3 index 1 sub FindFirstCom
+ ExpressionString 4 -1 roll 2 index 1 index sub getinterval cvn
+ /tempvar exch def
+ %% read the initial value
+ GetNextNumber
+ /ExpressionVector ExpressionVector aload length 1 add temp exch array astore def
+ %% read the increment value
+ GetNextNumber
+ /ExpressionVector ExpressionVector aload length 1 add temp exch array astore def
+ %% read the limit value
+ GetNextNumber
+ /ExpressionVector ExpressionVector aload length 1 add temp exch array astore def
+ /LoopContext LoopContext aload length 1 add ExpressionVector exch array astore def
+ /ExpressionVector [ tempvar /exch cvx /def cvx ] def
+ 1 add exch AnalyzeExpr
+ %% add each term of the sum
+ /ExpressionVector ExpressionVector aload length 1 add /add cvx exch array astore def
+ /ExpressionVector LoopContext LoopLevel get aload length 2 add
+ ExpressionVector cvx exch /for cvx exch array astore def pop pop pop pop } def
+/GetNextNumber {
+ exch FindFirstCom ExpressionString 4 -1 roll 1 add 2 index 1 index sub getinterval cvi
+ /temp exch def } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% METHODS FUNC
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% MISC FUNC
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+/RemoveWS {%
+ dup length
+ 0 2 index { 32 ne { 1 add } if } forall
+ 2 copy ne
+ { exch pop string 0 2 index
+ { dup 32 ne { 2 index 2 index 3 -1 roll put 1 add } { pop } ifelse } forall
+ pop exch pop } { pop pop } ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% NEW FUNC
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Make a discrete sum
+%% var n begin end expr ->
+/SUM {} def
+%% function arcsine in radians
+%% x -> theta
+/asin {%
+ dup abs 1 gt { EQDFasinrangeerror } if
+ dup abs 1 eq
+ { PIdiv2 exch -1 eq { neg } if }
+ { .1 %% asin(x)
+ { dup dup PI div 180 mul sin 3 index sub exch PI div 180 mul cos div
+ dup abs 1e-6 lt { sub exit } if sub
+ } loop
+ exch pop } ifelse
+} def
+%% function arccosine in radians
+%% x -> theta
+/acos {%
+ dup abs 1 gt { EQDFacosrangeerror } if
+ dup abs 1 eq
+ { -1 eq { PI } { 0 } ifelse }
+ { 1.5 %% asin(x)
+ { dup dup PI div 180 mul cos 3 index sub exch PI div 180 mul sin neg div
+ dup abs 1e-6 lt { sub exit } if sub
+ } loop
+ exch pop } ifelse
+} def
+%% factorial function
+%% n -> n!
+/fact { 1 exch 2 exch 1 exch { mul } for } def
+
+%end
+
+%% modified exponential funtion for 0
+%% x n -> x^n
+/EXP { dup 0 eq { pop pop 1 } { exp } ifelse } def
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+/GTriangle {
+ gsave
+ /mtrx CM def
+ /colorA ED /colorB ED /colorC ED % save the colors
+ /xA ED /yA ED % save the origin
+ xA yA translate
+ rotate % \psk@gangle
+ /yB ED /xB ED /yC ED /xC ED % save other coordinates
+ /ds [ % save data in a array
+ 0 0 0 colorA aload pop % fd x y xr xg xb
+ 0 xB xA sub yB yA sub colorB aload pop
+ 0 xC xA sub yC yA sub colorC aload pop
+% 1 xC xB add yB colorA aload pop % for use with 4 points ABCD
+ ] def
+ newpath
+ <<
+ /ShadingType 4 % single Gouraud
+ /ColorSpace [ /DeviceRGB ]
+ /DataSource ds
+ >>
+ shfill
+ closepath
+ mtrx
+ setmatrix grestore} def
+%
+%% convertisseur longueur d'onde ->R,G,B Manuel Luque
+%% lambda max=780 nanomètres
+%% lambda min=380 nanomètres
+%% adaptation de :
+%% http://www.physics.sfasu.edu/astro/color.html
+%% www.efg2.com/lab
+%
+/Gamma 0.8 def
+/calculateRGB {
+ lambda 379 le {/Red 0 def /Green 0 def /Blue 0 def} if
+ lambda 781 ge {/Red 0 def /Green 0 def /Blue 0 def} if
+ lambda 380 ge {lambda 439 le {
+ /R {lambda 440 sub neg 440 380 sub div} def
+ /Red R factor mul Gamma exp def
+ /G 0 def
+ /Green G factor mul Gamma exp def
+ /B 1 def
+ /Blue B factor mul Gamma exp def} if
+ } if
+ lambda 440 ge { lambda 489 le {
+ /G {lambda 440 sub 490 440 sub div} def
+ /Green G factor mul Gamma exp def
+ /R 0 def /Red 0 def
+ /B 1 def
+ /Blue B factor mul Gamma exp def } if
+ } if
+ lambda 490 ge {lambda 509 le {
+ /B {lambda 510 sub neg 510 490 sub div} def
+ /Blue B factor mul Gamma exp def
+ /R 0 def /Red 0 def
+ /G 1 def
+ /Green G factor mul Gamma exp def } if
+ } if
+ lambda 510 ge {lambda 579 le {
+ /R {lambda 510 sub 580 510 sub div } def
+ /Red R factor mul Gamma exp def
+ /Blue 0 def
+ /G 1 def
+ /Green G factor mul Gamma exp def } if
+ } if
+ lambda 580 ge {lambda 644 le {
+ /G {lambda 645 sub neg 645 580 sub div } def
+ /Green G factor mul Gamma exp def
+ /Blue 0 def
+ /R 1 def
+ /Red R factor mul Gamma exp def } if
+ } if
+ lambda 645 ge { lambda 780 le {
+ /Red 1 factor mul Gamma exp def
+ /Blue 0 def
+ /Green 0 def } if
+ } if
+} def
+%
+/factor {
+ lambda 380 ge {lambda 419 le { 0.3 0.7 lambda 380 sub mul 420 380 sub div add} if } if
+ lambda 420 ge {lambda 700 le { 1 } if } if
+ lambda 701 ge {lambda 780 le { 0.3 0.7 780 lambda sub mul 780 700 sub div add} if } if
+} def
+
+/wavelengthToRGB { % the wavelength in nm must be on top of the stack
+ /lambda exch def
+ calculateRGB
+} def
+
+
+/axfill {
+ 8 dict begin
+ /xw exch def /nl exch def
+ /C1 exch def /y1 exch def/x1 exch def
+ /C0 exch def /y0 exch def/x0 exch def
+ << /ShadingType 2
+ /ColorSpace /DeviceRGB
+ /Coords [ x0 y0 x1 y1 ]
+ /EmulatorHints [ xw 2 div dup ]
+ /Function <<
+ /FunctionType 2
+ /Domain [0 1]
+ /C0 C0
+ /C1 C1
+ /N 1
+ >>
+ >> shfill
+ end
+} bind def
+
+systemdict /shfill known not {
+
+/Emulate_shfill 32 dict def Emulate_shfill begin
+
+/NumberOfLayers 128 def
+
+/assert { not { (assert) /typecheck signalerror} if } bind def
+/assert /pop load def
+
+% generic interpolation
+% takes two n-arrays, returns a hopefully optimized procedure taking one
+% argument, and returning a correct blend of the two arrays (hence an
+% n-array)
+/interpolating_function {
+ 10 dict begin /a1 exch def /a0 exch def
+ a0 length a1 length eq assert
+ [ /mark load /exch load
+ 0 1 a0 length 1 sub { /i exch def /dup load a1 i get a0 i get sub /mul load a0 i get /add load /exch load } for /pop load (]) cvn load ] cvx end
+} bind def
+
+% Emulates (rather poorly) a radial or axial fill.
+% For radial fills, we _require_ that the inner circle be specified
+% first.
+% For axial fills, the ``Extend'' behaviour is ignored, and we _require_
+% an additional parameters in the dictionary, named EmulatorHints. It's a
+% 2-array denoting the left and right extent of the area to paint. These
+% are taken as multiples of the vector orthogonal to the direction vector.
+/xshfill { begin gsave
+ % do some checks.
+ Function begin FunctionType 2 eq assert
+ Domain 0 get 0 eq Domain 1 get 1 eq and assert end
+ ColorSpace setcolorspace
+ % we assume ll2 at least, so that dicts can be extended. anyway
+ % the syntax we request is ll2 only.
+ /mkcol Function begin C0 C1 end interpolating_function bind def
+ ShadingType 3 eq {
+ /mkcoords
+ [ Coords cvx exec 7 3 roll ] [ 5 -3 roll ]
+ interpolating_function
+ bind def
+ /one { newpath mkcoords cvx dup exec 3 -1 roll add exch moveto
+ exec 0 360 arc fill } bind def
+ } if
+ ShadingType 2 eq {
+ /dv [ Coords cvx exec exch 4 1 roll exch sub 3 1 roll sub exch
+ ] cvx def % normal vector
+ /nv [ dv neg exch ] cvx def
+ /mkcoords
+ [ Coords cvx exec 5 2 roll nv
+ exch 4 -1 roll exch EmulatorHints 0 get mul add
+ 3 1 roll EmulatorHints 0 get mul add ]
+ [ 4 -2 roll nv
+ exch 4 -1 roll exch EmulatorHints 0 get mul add
+ 3 1 roll EmulatorHints 0 get mul add ]
+ interpolating_function
+ % rescale to adapt to our reverse scan behaviour.
+ /dv [ dv neg NumberOfLayers div exch neg NumberOfLayers div exch ] cvx def
+ /bnv [ nv EmulatorHints cvx exec add mul exch
+ EmulatorHints cvx exec add mul exch ] cvx def
+ /nv [ bnv neg exch neg exch ] cvx def
+ bind def
+ /one { newpath mkcoords cvx exec moveto
+ nv rlineto
+ dv rlineto
+ bnv rlineto
+ closepath fill } bind def
+ } if
+ % The space is traversed backwards, since it is more customary
+ % for me at least to put the inner circle first for radial fills.
+ % For axial fills, this does not matter afaict.
+ 1 1 NumberOfLayers div neg 0
+ { dup Function /N get exp mkcol cvx exec setcolor one }
+ for
+ grestore end
+} bind def
+
+end
+userdict /shfill { Emulate_shfill begin xshfill end } bind put } if
+
+end
+
+% END pst-eqdf.pro
diff --git a/Master/texmf-dist/dvips/pstricks/Changes b/Master/texmf-dist/dvips/pstricks/Changes
new file mode 100644
index 00000000000..73c4f68079d
--- /dev/null
+++ b/Master/texmf-dist/dvips/pstricks/Changes
@@ -0,0 +1,4 @@
+---- pstricks.pro
+97, patch 6 2005-05-17 (hv) added some helper stuff
+ RadtoDeg, DegtoRad, Pi, TwoPi, ATAN
+97, patch 5 2005-03-08 (hv) bugfix for DashLine
diff --git a/Master/texmf-dist/dvips/pstricks/pst-blur.pro b/Master/texmf-dist/dvips/pstricks/pst-blur.pro
new file mode 100644
index 00000000000..4cc4963cd82
--- /dev/null
+++ b/Master/texmf-dist/dvips/pstricks/pst-blur.pro
@@ -0,0 +1,64 @@
+%%
+%% This is file `pst-blur.pro',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% pst-blur.dtx (with options: `prolog')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% You are *not* allowed to modify this file.
+%%
+%% You are *not* allowed to distribute this file.
+%% For distribution of the original source see the terms
+%% for copying and modification in the file pst-blur.dtx.
+%%
+/tx@PstBlurDict 60 dict def
+tx@PstBlurDict begin
+/Iterate {
+ /SegLines ED
+ /ThisB ED /ThisG ED /ThisR ED
+ /NextB ED /NextG ED /NextR ED
+ /W 2.0 BlurRadius mul def
+ /WDec W SegLines div def
+ /RInc NextR ThisR sub SegLines div def
+ /GInc NextG ThisG sub SegLines div def
+ /BInc NextB ThisB sub SegLines div def
+ /R ThisR def
+ /G ThisG def
+ /B ThisB def
+ SegLines {
+ R G B
+ sqrt 3 1 roll sqrt 3 1 roll sqrt 3 1 roll
+ setrgbcolor
+ gsave W setlinewidth
+ stroke grestore
+ /W W WDec sub def
+ /R R RInc add def
+ /G G GInc add def
+ /B B BInc add def
+ } bind repeat
+} def
+/BlurShadow {
+ Shadow
+ /BlurSteps ED
+ /BlurRadius ED
+ dup mul /BEnd ED dup mul /GEnd ED dup mul /REnd ED
+ dup mul /BBeg ED dup mul /GBeg ED dup mul /RBeg ED
+ RBeg REnd add 0.5 mul /RMid ED
+ GBeg GEnd add 0.5 mul /GMid ED
+ BBeg BEnd add 0.5 mul /BMid ED
+ /OuterSteps BlurSteps 2 div cvi def
+ /InnerSteps BlurSteps OuterSteps sub def
+ 1 setlinejoin
+ RMid GMid BMid REnd GEnd BEnd OuterSteps Iterate
+ gsave RBeg sqrt GBeg sqrt BBeg sqrt setrgbcolor fill grestore
+ clip
+ 0 setlinejoin
+ RMid GMid BMid RBeg GBeg BBeg InnerSteps Iterate
+} def
+end
+
diff --git a/Master/texmf-dist/dvips/pstricks/pst-coil.pro b/Master/texmf-dist/dvips/pstricks/pst-coil.pro
new file mode 100644
index 00000000000..4b635cea9f6
--- /dev/null
+++ b/Master/texmf-dist/dvips/pstricks/pst-coil.pro
@@ -0,0 +1,33 @@
+%!
+% PostScript prologue for pst-coil.tex.
+% Version 97 patch 1, 98/06/02
+% For distribution, see pstricks.tex.
+%
+/tx@CoilDict 40 dict def tx@CoilDict begin
+/CoilLoop { /t ED t sin AspectSin mul t 180 div AspectCos mul add t cos
+lineto } def
+/Coil { /Inc ED dup sin /AspectSin ED cos /AspectCos ED /ArmB ED /ArmA ED
+/h ED /w ED /y1 ED /x1 ED /y0 ED /x0 ED x0 y0 translate y1 y0 sub x1 x0
+sub 2 copy Pyth /TotalLength ED Atan rotate /BeginAngle ArmA AspectCos
+Div w h mul Div 360 mul def /EndAngle TotalLength ArmB sub AspectCos Div
+w h mul Div 360 mul def 1 0 0 0 ArrowA ArmA 0 lineto /mtrx CM def w h
+mul 2 Div w 2 Div scale BeginAngle Inc EndAngle { CoilLoop } for
+EndAngle CoilLoop mtrx setmatrix TotalLength ArmB sub 0 lineto CP
+% DG/SR modification begin - Jun. 2, 1998 - Patch 1 (from Michael Vulis)
+% TotalLength 0 ArrowB lineto } def
+TotalLength 0 ArrowB lineto
+pop pop pop pop } def
+% DG/SR modification end
+/AltCoil { /Inc ED dup sin /AspectSin ED cos /AspectCos ED /h ED /w ED
+/EndAngle ED /BeginAngle ED /mtrx CM def w h mul 2 Div w 2 Div scale
+BeginAngle sin AspectSin mul BeginAngle 180 div AspectCos mul add
+BeginAngle cos /lineto load stopped { moveto } if BeginAngle Inc
+EndAngle { CoilLoop } for EndAngle CoilLoop mtrx setmatrix } def
+/ZigZag { /ArmB ED /ArmA ED 2 div /w ED w mul /h ED /y1 ED /x1 ED /y0 ED
+/x0 ED x1 y1 translate y0 y1 sub x0 x1 sub 2 copy Pyth /TotalLength ED
+Atan rotate TotalLength ArmA sub ArmB sub dup h div cvi /n ED n h mul
+sub 2 div dup ArmA add /ArmA ED ArmB add /ArmB ED /x ArmB h 2 div add
+def mark 0 0 ArmB 0 n { x w /w w neg def /x x h add def } repeat
+TotalLength ArmA sub 0 TotalLength 0 } def
+end
+% END pst-coil.pro
diff --git a/Master/texmf-dist/dvips/pstricks/pst-dots.pro b/Master/texmf-dist/dvips/pstricks/pst-dots.pro
new file mode 100644
index 00000000000..8c83b963525
--- /dev/null
+++ b/Master/texmf-dist/dvips/pstricks/pst-dots.pro
@@ -0,0 +1,132 @@
+%!PS-Adobe-2.0
+%%Title: Dot Font for PSTricks
+%%Creator: Timothy Van Zandt <tvz@Princeton.EDU>
+%%Creation Date: May 7, 1993
+%% Version 97 patch 1, 99/12/16
+%% Modified by Etienne Riga <etienne.riga@skynet.be> - Dec. 16, 1999
+%% to add /Diamond, /SolidDiamond and /BoldDiamond
+10 dict dup begin
+ /FontType 3 def
+ /FontMatrix [ .001 0 0 .001 0 0 ] def
+ /FontBBox [ 0 0 0 0 ] def
+ /Encoding 256 array def
+ 0 1 255 { Encoding exch /.notdef put } for
+ Encoding
+ dup (b) 0 get /Bullet put
+ dup (c) 0 get /Circle put
+ dup (C) 0 get /BoldCircle put
+ dup (u) 0 get /SolidTriangle put
+ dup (t) 0 get /Triangle put
+ dup (T) 0 get /BoldTriangle put
+ dup (r) 0 get /SolidSquare put
+ dup (s) 0 get /Square put
+ dup (S) 0 get /BoldSquare put
+ dup (q) 0 get /SolidPentagon put
+ dup (p) 0 get /Pentagon put
+ dup (P) 0 get /BoldPentagon put
+% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga
+ dup (l) 0 get /SolidDiamond put
+ dup (d) 0 get /Diamond put
+ (D) 0 get /BoldDiamond put
+% DG/SR modification end
+ /Metrics 13 dict def
+ Metrics begin
+ /Bullet 1000 def
+ /Circle 1000 def
+ /BoldCircle 1000 def
+ /SolidTriangle 1344 def
+ /Triangle 1344 def
+ /BoldTriangle 1344 def
+ /SolidSquare 886 def
+ /Square 886 def
+ /BoldSquare 886 def
+ /SolidPentagon 1093.2 def
+ /Pentagon 1093.2 def
+ /BoldPentagon 1093.2 def
+% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga
+ /SolidDiamond 1008 def
+ /Diamond 1008 def
+ /BoldDiamond 1008 def
+% DG/SR modification end
+ /.notdef 0 def
+ end
+ /BBoxes 13 dict def
+ BBoxes begin
+ /Circle { -550 -550 550 550 } def
+ /BoldCircle /Circle load def
+ /Bullet /Circle load def
+ /Triangle { -571.5 -330 571.5 660 } def
+ /BoldTriangle /Triangle load def
+ /SolidTriangle /Triangle load def
+ /Square { -450 -450 450 450 } def
+ /BoldSquare /Square load def
+ /SolidSquare /Square load def
+ /Pentagon { -546.6 -465 546.6 574.7 } def
+ /BoldPentagon /Pentagon load def
+ /SolidPentagon /Pentagon load def
+% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga
+ /Diamond { -428.5 -742.5 428.5 742.5 } def
+ /BoldDiamond /Diamond load def
+ /SolidDiamond /Diamond load def
+% DG/SR modification end
+ /.notdef { 0 0 0 0 } def
+ end
+ /CharProcs 20 dict def
+ CharProcs begin
+ /Adjust {
+ 2 copy dtransform floor .5 add exch floor .5 add exch idtransform
+ 3 -1 roll div 3 1 roll exch div exch scale
+ } def
+ /CirclePath { 0 0 500 0 360 arc closepath } def
+ /Bullet { 500 500 Adjust CirclePath fill } def
+ /Circle { 500 500 Adjust CirclePath .9 .9 scale CirclePath
+ eofill } def
+ /BoldCircle { 500 500 Adjust CirclePath .8 .8 scale CirclePath
+ eofill } def
+ /BoldCircle { CirclePath .8 .8 scale CirclePath eofill } def
+ /TrianglePath { 0 660 moveto -571.5 -330 lineto 571.5 -330 lineto
+ closepath } def
+ /SolidTriangle { TrianglePath fill } def
+ /Triangle { TrianglePath .85 .85 scale TrianglePath eofill } def
+ /BoldTriangle { TrianglePath .7 .7 scale TrianglePath eofill } def
+ /SquarePath { -450 450 moveto 450 450 lineto 450 -450 lineto
+ -450 -450 lineto closepath } def
+ /SolidSquare { SquarePath fill } def
+ /Square { SquarePath .89 .89 scale SquarePath eofill } def
+ /BoldSquare { SquarePath .78 .78 scale SquarePath eofill } def
+ /PentagonPath {
+ -337.8 -465 moveto
+ 337.8 -465 lineto
+ 546.6 177.6 lineto
+ 0 574.7 lineto
+ -546.6 177.6 lineto
+ closepath
+ } def
+ /SolidPentagon { PentagonPath fill } def
+ /Pentagon { PentagonPath .89 .89 scale PentagonPath eofill } def
+ /BoldPentagon { PentagonPath .78 .78 scale PentagonPath eofill } def
+% DG/SR modification begin - Dec. 16, 1999 - From Etienne Riga
+ /DiamondPath { 0 742.5 moveto -428.5 0 lineto 0 -742.5 lineto
+ 428.5 0 lineto closepath } def
+ /SolidDiamond { DiamondPath fill } def
+ /Diamond { DiamondPath .85 .85 scale DiamondPath eofill } def
+ /BoldDiamond { DiamondPath .7 .7 scale DiamondPath eofill } def
+% DG/SR modification end
+ /.notdef { } def
+ end
+ /BuildGlyph {
+ exch
+ begin
+ Metrics 1 index get exec 0
+ BBoxes 3 index get exec
+ setcachedevice
+ CharProcs begin load exec end
+ end
+ } def
+ /BuildChar {
+ 1 index /Encoding get exch get
+ 1 index /BuildGlyph get exec
+ } bind def
+end
+/PSTricksDotFont exch definefont pop
+%END pst-dots.pro
diff --git a/Master/texmf-dist/dvips/pstricks/pst-grad.pro b/Master/texmf-dist/dvips/pstricks/pst-grad.pro
new file mode 100644
index 00000000000..84b0ebfefc2
--- /dev/null
+++ b/Master/texmf-dist/dvips/pstricks/pst-grad.pro
@@ -0,0 +1,106 @@
+%!
+% PostScript prologue for pst-grad.tex.
+% Version 1.04, 2004/06/23 (adding %GradientCircle style - D.G.)
+% prepared by Herbert Voss
+% For copying restrictions, see pstricks.tex.
+%
+% For the PSTricks gradient fillstyle.%
+% Based on some EPS files by leeweyr!bill@nuchat.sccsi.com (W. R. Lee).%
+% Syntax:% D.G. modification begin - Apr. 9, %1998
+%%%%%% R0 G0 B0 R1 G1 B1 NumLines MidPoint Angle GradientFill
+% ifGradientCircle GradientScale %GradientPosX GradientPosY
+% R0 G0 B0 R1 G1 B1 NumLines MidPoint %Angle GradientFill
+% D.G. modification end
+%
+/tx@GradientDict 40 dict def
+tx@GradientDict begin
+/GradientFill {
+ rotate
+ /MidPoint ED
+ /NumLines ED
+ /LastBlue ED
+ /LastGreen ED
+ /LastRed ED
+ /FirstBlue ED
+ /FirstGreen ED
+/FirstRed ED
+% D.G. modification begin - Apr. 9, 1998
+/GradientPosY ED
+/GradientPosX ED
+ /GradientScale ED
+ /ifGradientCircle ED
+% D.G. modification end
+ % This avoids gaps due to rounding errors:
+ clip
+ pathbbox %leave llx,lly,urx,ury on stack
+% D.G. modification begin - Apr. 10, 1998
+ 4 copy /ury ED /urx ED /lly ED /llx ED
+% D.G. modification end
+ /y ED /x ED
+% D.G. modification begin - Apr. 10, 1998
+ifGradientCircle
+ {0 GradientPosX eq
+ {0 GradientPosX eq {2 copy translate} if} if}
+ {2 copy translate} ifelse
+% D.G. modification end
+ y sub neg /y ED
+ x sub neg /x ED % This avoids gaps due to rounding errors:
+ LastRed FirstRed add 2 div
+ LastGreen FirstGreen add 2 div
+ LastBlue FirstBlue add 2 div
+ setrgbcolor
+% D.G. modification begin - Jul. 23, 1997 / Apr. 9, 1998
+ ifGradientCircle
+ {/YSizePerLine y NumLines div def
+ /CurrentY y 2 div def
+ /MidLine NumLines 2 div 1 MidPoint sub mul abs cvi def}
+ {fill
+ /YSizePerLine y NumLines div def
+ /CurrentY 0 def
+ /MidLine NumLines 1 MidPoint sub mul abs cvi def} ifelse
+% DG modification end
+ MidLine NumLines 2 sub gt
+ { /MidLine NumLines def }
+ { MidLine 2 lt { /MidLine 0 def } if }
+ ifelse
+ MidLine 0 gt
+ {
+ /Red FirstRed def
+ /Green FirstGreen def
+ /Blue FirstBlue def
+ /RedIncrement LastRed FirstRed sub MidLine 1 sub div def
+ /GreenIncrement LastGreen FirstGreen sub MidLine 1 sub div def
+ /BlueIncrement LastBlue FirstBlue sub MidLine 1 sub div def
+ MidLine { GradientLoop } repeat
+ } if
+ MidLine NumLines lt
+ {
+ /Red LastRed def
+ /Green LastGreen def
+ /Blue LastBlue def
+ /RedIncrement FirstRed LastRed sub NumLines MidLine sub 1 sub div def
+ /GreenIncrement FirstGreen LastGreen sub NumLines MidLine sub 1 sub div def
+ /BlueIncrement FirstBlue LastBlue sub NumLines MidLine sub 1 sub div def
+ NumLines MidLine sub { GradientLoop } repeat }
+ if
+ } def/GradientLoop {
+% D.G. modification begin - Jul. 23, 1997 / Apr. 9, 1998
+ ifGradientCircle
+ {CurrentY 0 gt {
+% The default center used is the center of the bounding box of the object
+ 0 GradientPosX eq {0 GradientPosX eq
+ {/GradientPosX urx llx sub 2 div def
+ /GradientPosY ury lly sub 2 div def} if} if
+ GradientPosX GradientPosY CurrentY GradientScale mul 0 360 arc
+ Red Green Blue setrgbcolor fill
+ /CurrentY CurrentY YSizePerLine sub def
+ /Blue Blue BlueIncrement add def
+ /Green Green GreenIncrement add def
+ /Red Red RedIncrement add def} if} {0 CurrentY moveto x 0 rlineto
+ 0 YSizePerLine rlineto x neg 0 rlineto closepath
+ Red Green Blue setrgbcolor fill /CurrentY CurrentY YSizePerLine add def
+ /Blue Blue BlueIncrement add def /Green Green GreenIncrement add def
+ /Red Red RedIncrement add def} ifelse% D.G. modification end
+ }def
+ end
+% END pst-grad.pro
diff --git a/Master/texmf-dist/dvips/pstricks/pst-node.pro b/Master/texmf-dist/dvips/pstricks/pst-node.pro
new file mode 100644
index 00000000000..7168f9c457c
--- /dev/null
+++ b/Master/texmf-dist/dvips/pstricks/pst-node.pro
@@ -0,0 +1,210 @@
+%!
+% PostScript prologue for pst-node.tex.
+% Version 97 patch 1, 97/05/09.
+% For distribution, see pstricks.tex.
+%
+/tx@NodeDict 400 dict def tx@NodeDict begin
+tx@Dict begin /T /translate load def end
+/NewNode { gsave /next ED dict dup 3 1 roll def exch { dup 3 1 roll def }
+if begin tx@Dict begin STV CP T exec end /NodeMtrx CM def next end
+grestore } def
+/InitPnode { /Y ED /X ED /NodePos { NodeSep Cos mul NodeSep Sin mul } def
+} def
+/InitCnode { /r ED /Y ED /X ED /NodePos { NodeSep r add dup Cos mul exch
+Sin mul } def } def
+/GetRnodePos { Cos 0 gt { /dx r NodeSep add def } { /dx l NodeSep sub def
+} ifelse Sin 0 gt { /dy u NodeSep add def } { /dy d NodeSep sub def }
+ifelse dx Sin mul abs dy Cos mul abs gt { dy Cos mul Sin div dy } { dx
+dup Sin mul Cos Div } ifelse } def
+/InitRnode { /Y ED /X ED X sub /r ED /l X neg def Y add neg /d ED Y sub
+/u ED /NodePos { GetRnodePos } def } def
+/DiaNodePos { w h mul w Sin mul abs h Cos mul abs add Div NodeSep add dup
+Cos mul exch Sin mul } def
+/TriNodePos { Sin s lt { d NodeSep sub dup Cos mul Sin Div exch } { w h
+mul w Sin mul h Cos abs mul add Div NodeSep add dup Cos mul exch Sin mul
+} ifelse } def
+/InitTriNode { sub 2 div exch 2 div exch 2 copy T 2 copy 4 index index /d
+ED pop pop pop pop -90 mul rotate /NodeMtrx CM def /X 0 def /Y 0 def d
+sub abs neg /d ED d add /h ED 2 div h mul h d sub Div /w ED /s d w Atan
+sin def /NodePos { TriNodePos } def } def
+/OvalNodePos { /ww w NodeSep add def /hh h NodeSep add def Sin ww mul Cos
+hh mul Atan dup cos ww mul exch sin hh mul } def
+/GetCenter { begin X Y NodeMtrx transform CM itransform end } def
+/XYPos { dup sin exch cos Do /Cos ED /Sin ED /Dist ED Cos 0 gt { Dist
+Dist Sin mul Cos div } { Cos 0 lt { Dist neg Dist Sin mul Cos div neg }
+{ 0 Dist Sin mul } ifelse } ifelse Do } def
+/GetEdge { dup 0 eq { pop begin 1 0 NodeMtrx dtransform CM idtransform
+exch atan sub dup sin /Sin ED cos /Cos ED /NodeSep ED NodePos NodeMtrx
+dtransform CM idtransform end } { 1 eq {{exch}} {{}} ifelse /Do ED pop
+XYPos } ifelse } def
+/AddOffset { 1 index 0 eq { pop pop } { 2 copy 5 2 roll cos mul add 4 1
+roll sin mul sub exch } ifelse } def
+/GetEdgeA { NodeSepA AngleA NodeA NodeSepTypeA GetEdge OffsetA AngleA
+AddOffset yA add /yA1 ED xA add /xA1 ED } def
+/GetEdgeB { NodeSepB AngleB NodeB NodeSepTypeB GetEdge OffsetB AngleB
+AddOffset yB add /yB1 ED xB add /xB1 ED } def
+/GetArmA { ArmTypeA 0 eq { /xA2 ArmA AngleA cos mul xA1 add def /yA2 ArmA
+AngleA sin mul yA1 add def } { ArmTypeA 1 eq {{exch}} {{}} ifelse /Do ED
+ArmA AngleA XYPos OffsetA AngleA AddOffset yA add /yA2 ED xA add /xA2 ED
+} ifelse } def
+/GetArmB { ArmTypeB 0 eq { /xB2 ArmB AngleB cos mul xB1 add def /yB2 ArmB
+AngleB sin mul yB1 add def } { ArmTypeB 1 eq {{exch}} {{}} ifelse /Do ED
+ArmB AngleB XYPos OffsetB AngleB AddOffset yB add /yB2 ED xB add /xB2 ED
+} ifelse } def
+/InitNC { /b ED /a ED /NodeSepTypeB ED /NodeSepTypeA ED /NodeSepB ED
+/NodeSepA ED /OffsetB ED /OffsetA ED tx@NodeDict a known tx@NodeDict b
+known and dup { /NodeA a load def /NodeB b load def NodeA GetCenter /yA
+ED /xA ED NodeB GetCenter /yB ED /xB ED } if } def
+/LPutLine { 4 copy 3 -1 roll sub neg 3 1 roll sub Atan /NAngle ED 1 t sub
+mul 3 1 roll 1 t sub mul 4 1 roll t mul add /Y ED t mul add /X ED } def
+/LPutLines { mark LPutVar counttomark 2 div 1 sub /n ED t floor dup n gt
+{ pop n 1 sub /t 1 def } { dup t sub neg /t ED } ifelse cvi 2 mul { pop
+} repeat LPutLine cleartomark } def
+/BezierMidpoint { /y3 ED /x3 ED /y2 ED /x2 ED /y1 ED /x1 ED /y0 ED /x0 ED
+/t ED /cx x1 x0 sub 3 mul def /cy y1 y0 sub 3 mul def /bx x2 x1 sub 3
+mul cx sub def /by y2 y1 sub 3 mul cy sub def /ax x3 x0 sub cx sub bx
+sub def /ay y3 y0 sub cy sub by sub def ax t 3 exp mul bx t t mul mul
+add cx t mul add x0 add ay t 3 exp mul by t t mul mul add cy t mul add
+y0 add 3 ay t t mul mul mul 2 by t mul mul add cy add 3 ax t t mul mul
+mul 2 bx t mul mul add cx add atan /NAngle ED /Y ED /X ED } def
+/HPosBegin { yB yA ge { /t 1 t sub def } if /Y yB yA sub t mul yA add def
+} def
+/HPosEnd { /X Y yyA sub yyB yyA sub Div xxB xxA sub mul xxA add def
+/NAngle yyB yyA sub xxB xxA sub Atan def } def
+/HPutLine { HPosBegin /yyA ED /xxA ED /yyB ED /xxB ED HPosEnd } def
+/HPutLines { HPosBegin yB yA ge { /check { le } def } { /check { ge } def
+} ifelse /xxA xA def /yyA yA def mark xB yB LPutVar { dup Y check { exit
+} { /yyA ED /xxA ED } ifelse } loop /yyB ED /xxB ED cleartomark HPosEnd
+} def
+/VPosBegin { xB xA lt { /t 1 t sub def } if /X xB xA sub t mul xA add def
+} def
+/VPosEnd { /Y X xxA sub xxB xxA sub Div yyB yyA sub mul yyA add def
+/NAngle yyB yyA sub xxB xxA sub Atan def } def
+/VPutLine { VPosBegin /yyA ED /xxA ED /yyB ED /xxB ED VPosEnd } def
+/VPutLines { VPosBegin xB xA ge { /check { le } def } { /check { ge } def
+} ifelse /xxA xA def /yyA yA def mark xB yB LPutVar { 1 index X check {
+exit } { /yyA ED /xxA ED } ifelse } loop /yyB ED /xxB ED cleartomark
+VPosEnd } def
+/HPutCurve { gsave newpath /SaveLPutVar /LPutVar load def LPutVar 8 -2
+roll moveto curveto flattenpath /LPutVar [ {} {} {} {} pathforall ] cvx
+def grestore exec /LPutVar /SaveLPutVar load def } def
+/NCCoor { /AngleA yB yA sub xB xA sub Atan def /AngleB AngleA 180 add def
+GetEdgeA GetEdgeB /LPutVar [ xB1 yB1 xA1 yA1 ] cvx def /LPutPos {
+LPutVar LPutLine } def /HPutPos { LPutVar HPutLine } def /VPutPos {
+LPutVar VPutLine } def LPutVar } def
+/NCLine { NCCoor tx@Dict begin ArrowA CP 4 2 roll ArrowB lineto pop pop
+end } def
+/NCLines { false NArray n 0 eq { NCLine } { 2 copy yA sub exch xA sub
+Atan /AngleA ED n 2 mul dup index exch index yB sub exch xB sub Atan
+/AngleB ED GetEdgeA GetEdgeB /LPutVar [ xB1 yB1 n 2 mul 4 add 4 roll xA1
+yA1 ] cvx def mark LPutVar tx@Dict begin false Line end /LPutPos {
+LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def }
+ifelse } def
+/NCCurve { GetEdgeA GetEdgeB xA1 xB1 sub yA1 yB1 sub Pyth 2 div dup 3 -1
+roll mul /ArmA ED mul /ArmB ED /ArmTypeA 0 def /ArmTypeB 0 def GetArmA
+GetArmB xA2 yA2 xA1 yA1 tx@Dict begin ArrowA end xB2 yB2 xB1 yB1 tx@Dict
+begin ArrowB end curveto /LPutVar [ xA1 yA1 xA2 yA2 xB2 yB2 xB1 yB1 ]
+cvx def /LPutPos { t LPutVar BezierMidpoint } def /HPutPos { { HPutLines
+} HPutCurve } def /VPutPos { { VPutLines } HPutCurve } def } def
+/NCAngles { GetEdgeA GetEdgeB GetArmA GetArmB /mtrx AngleA matrix rotate
+def xA2 yA2 mtrx transform pop xB2 yB2 mtrx transform exch pop mtrx
+itransform /y0 ED /x0 ED mark ArmB 0 ne { xB1 yB1 } if xB2 yB2 x0 y0 xA2
+yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin false Line end /LPutVar [ xB1
+yB1 xB2 yB2 x0 y0 xA2 yA2 xA1 yA1 ] cvx def /LPutPos { LPutLines } def
+/HPutPos { HPutLines } def /VPutPos { VPutLines } def } def
+/NCAngle { GetEdgeA GetEdgeB GetArmB /mtrx AngleA matrix rotate def xB2
+yB2 mtrx itransform pop xA1 yA1 mtrx itransform exch pop mtrx transform
+/y0 ED /x0 ED mark ArmB 0 ne { xB1 yB1 } if xB2 yB2 x0 y0 xA1 yA1
+tx@Dict begin false Line end /LPutVar [ xB1 yB1 xB2 yB2 x0 y0 xA1 yA1 ]
+cvx def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos {
+VPutLines } def } def
+/NCBar { GetEdgeA GetEdgeB GetArmA GetArmB /mtrx AngleA matrix rotate def
+xA2 yA2 mtrx itransform pop xB2 yB2 mtrx itransform pop sub dup 0 mtrx
+transform 3 -1 roll 0 gt { /yB2 exch yB2 add def /xB2 exch xB2 add def }
+{ /yA2 exch neg yA2 add def /xA2 exch neg xA2 add def } ifelse mark ArmB
+0 ne { xB1 yB1 } if xB2 yB2 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict
+begin false Line end /LPutVar [ xB1 yB1 xB2 yB2 xA2 yA2 xA1 yA1 ] cvx
+def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos {
+VPutLines } def } def
+/NCDiag { GetEdgeA GetEdgeB GetArmA GetArmB mark ArmB 0 ne { xB1 yB1 } if
+xB2 yB2 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin false Line end
+/LPutVar [ xB1 yB1 xB2 yB2 xA2 yA2 xA1 yA1 ] cvx def /LPutPos {
+LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def }
+def
+/NCDiagg { GetEdgeA GetArmA yB yA2 sub xB xA2 sub Atan 180 add /AngleB ED
+GetEdgeB mark xB1 yB1 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin
+false Line end /LPutVar [ xB1 yB1 xA2 yA2 xA1 yA1 ] cvx def /LPutPos {
+LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def }
+def
+/NCLoop { GetEdgeA GetEdgeB GetArmA GetArmB /mtrx AngleA matrix rotate
+def xA2 yA2 mtrx transform loopsize add /yA3 ED /xA3 ED /xB3 xB2 yB2
+mtrx transform pop def xB3 yA3 mtrx itransform /yB3 ED /xB3 ED xA3 yA3
+mtrx itransform /yA3 ED /xA3 ED mark ArmB 0 ne { xB1 yB1 } if xB2 yB2
+xB3 yB3 xA3 yA3 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin false
+Line end /LPutVar [ xB1 yB1 xB2 yB2 xB3 yB3 xA3 yA3 xA2 yA2 xA1 yA1 ]
+cvx def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos {
+VPutLines } def } def
+% DG/SR modification begin - May 9, 1997 - Patch 1
+%/NCCircle { 0 0 NodesepA nodeA \tx@GetEdge pop xA sub 2 div dup 2 exp r
+%r mul sub abs sqrt atan 2 mul /a ED r AngleA 90 add PtoC yA add exch xA add
+%exch 2 copy /LPutVar [ 4 2 roll r AngleA ] cvx def /LPutPos { LPutVar t 360
+%mul add dup 5 1 roll 90 sub \tx@PtoC 3 -1 roll add /Y ED add /X ED /NAngle ED
+/NCCircle { NodeSepA 0 NodeA 0 GetEdge pop 2 div dup 2 exp r
+r mul sub abs sqrt atan 2 mul /a ED r AngleA 90 add PtoC yA add exch xA add
+exch 2 copy /LPutVar [ 4 2 roll r AngleA ] cvx def /LPutPos { LPutVar t 360
+mul add dup 5 1 roll 90 sub PtoC 3 -1 roll add /Y ED add /X ED /NAngle ED
+% DG/SR modification end
+} def /HPutPos { LPutPos } def /VPutPos { LPutPos } def r AngleA 90 sub a add
+AngleA 270 add a sub tx@Dict begin /angleB ED /angleA ED /r ED /c 57.2957 r
+Div def /y ED /x ED } def
+/NCBox { /d ED /h ED /AngleB yB yA sub xB xA sub Atan def /AngleA AngleB
+180 add def GetEdgeA GetEdgeB /dx d AngleB sin mul def /dy d AngleB cos
+mul neg def /hx h AngleB sin mul neg def /hy h AngleB cos mul def
+/LPutVar [ xA1 hx add yA1 hy add xB1 hx add yB1 hy add xB1 dx add yB1 dy
+add xA1 dx add yA1 dy add ] cvx def /LPutPos { LPutLines } def /HPutPos
+{ xB yB xA yA LPutLine } def /VPutPos { HPutPos } def mark LPutVar
+tx@Dict begin false Polygon end } def
+/NCArcBox { /l ED neg /d ED /h ED /a ED /AngleA yB yA sub xB xA sub Atan
+def /AngleB AngleA 180 add def /tA AngleA a sub 90 add def /tB tA a 2
+mul add def /r xB xA sub tA cos tB cos sub Div dup 0 eq { pop 1 } if def
+/x0 xA r tA cos mul add def /y0 yA r tA sin mul add def /c 57.2958 r div
+def /AngleA AngleA a sub 180 add def /AngleB AngleB a add 180 add def
+GetEdgeA GetEdgeB /AngleA tA 180 add yA yA1 sub xA xA1 sub Pyth c mul
+sub def /AngleB tB 180 add yB yB1 sub xB xB1 sub Pyth c mul add def l 0
+eq { x0 y0 r h add AngleA AngleB arc x0 y0 r d add AngleB AngleA arcn }
+{ x0 y0 translate /tA AngleA l c mul add def /tB AngleB l c mul sub def
+0 0 r h add tA tB arc r h add AngleB PtoC r d add AngleB PtoC 2 copy 6 2
+roll l arcto 4 { pop } repeat r d add tB PtoC l arcto 4 { pop } repeat 0
+0 r d add tB tA arcn r d add AngleA PtoC r h add AngleA PtoC 2 copy 6 2
+roll l arcto 4 { pop } repeat r h add tA PtoC l arcto 4 { pop } repeat }
+ifelse closepath /LPutVar [ x0 y0 r AngleA AngleB h d ] cvx def /LPutPos
+{ LPutVar /d ED /h ED /AngleB ED /AngleA ED /r ED /y0 ED /x0 ED t 1 le {
+r h add AngleA 1 t sub mul AngleB t mul add dup 90 add /NAngle ED PtoC }
+{ t 2 lt { /NAngle AngleB 180 add def r 2 t sub h mul t 1 sub d mul add
+add AngleB PtoC } { t 3 lt { r d add AngleB 3 t sub mul AngleA 2 t sub
+mul add dup 90 sub /NAngle ED PtoC } { /NAngle AngleA 180 add def r 4 t
+sub d mul t 3 sub h mul add add AngleA PtoC } ifelse } ifelse } ifelse
+y0 add /Y ED x0 add /X ED } def /HPutPos { LPutPos } def /VPutPos {
+LPutPos } def } def
+/Tfan { /AngleA yB yA sub xB xA sub Atan def GetEdgeA w xA1 xB sub yA1 yB
+sub Pyth Pyth w Div CLW 2 div mul 2 div dup AngleA sin mul yA1 add /yA1
+ED AngleA cos mul xA1 add /xA1 ED /LPutVar [ xA1 yA1 m { xB w add yB xB
+w sub yB } { xB yB w sub xB yB w add } ifelse xA1 yA1 ] cvx def /LPutPos
+{ LPutLines } def /VPutPos@ { LPutVar flag { 8 4 roll pop pop pop pop }
+{ pop pop pop pop 4 2 roll } ifelse } def /VPutPos { VPutPos@ VPutLine }
+def /HPutPos { VPutPos@ HPutLine } def mark LPutVar tx@Dict begin
+/ArrowA { moveto } def /ArrowB { } def false Line closepath end } def
+/LPutCoor { NAngle tx@Dict begin /NAngle ED end gsave CM STV CP Y sub neg
+exch X sub neg exch moveto setmatrix CP grestore } def
+/LPut { tx@NodeDict /LPutPos known { LPutPos } { CP /Y ED /X ED /NAngle 0
+def } ifelse LPutCoor } def
+/HPutAdjust { Sin Cos mul 0 eq { 0 } { d Cos mul Sin div flag not { neg }
+if h Cos mul Sin div flag { neg } if 2 copy gt { pop } { exch pop }
+ifelse } ifelse s add flag { r add neg } { l add } ifelse X add /X ED }
+def
+/VPutAdjust { Sin Cos mul 0 eq { 0 } { l Sin mul Cos div flag { neg } if
+r Sin mul Cos div flag not { neg } if 2 copy gt { pop } { exch pop }
+ifelse } ifelse s add flag { d add } { h add neg } ifelse Y add /Y ED }
+def
+end
+% END pst-node.pro
diff --git a/Master/texmf-dist/dvips/pstricks/pst-slpe.pro b/Master/texmf-dist/dvips/pstricks/pst-slpe.pro
new file mode 100644
index 00000000000..552e63f10aa
--- /dev/null
+++ b/Master/texmf-dist/dvips/pstricks/pst-slpe.pro
@@ -0,0 +1,150 @@
+%%
+%% This is file `pst-slpe.pro',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% pst-slpe.dtx (with options: `prolog')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% You are *not* allowed to modify this file.
+%%
+%% You are *not* allowed to distribute this file.
+%% For distribution of the original source see the terms
+%% for copying and modification in the file pst-slpe.dtx.
+%%
+/tx@PstSlopeDict 60 dict def tx@PstSlopeDict begin
+/max {2 copy lt {exch} if pop} bind def
+/Iterate {
+ 1 sub /NumSegs ED
+ dup mul 3 1 roll dup mul 3 1 roll dup mul 3 1 roll
+ setrgbcolor currenthsbcolor
+ /ThisB ED
+ /ThisS ED
+ /ThisH ED
+ /ThisPt ED
+ gsave fill grestore
+ NumSegs {
+ dup mul 3 1 roll dup mul 3 1 roll dup mul 3 1 roll
+ setrgbcolor currenthsbcolor
+ /NextB ED
+ /NextS ED
+ /NextH ED
+ /NextPt ED
+ ThisPt NextPt sub ThisPt div NumSteps mul cvi /SegSteps exch def
+ /NumSteps NumSteps SegSteps sub def
+ SegSteps 0 eq not {
+ ThisS 0 eq {/ThisH NextH def} if
+ NextS 0 eq {/NextH ThisH def} if
+ ThisH NextH sub 0.5 gt
+ {/NextH NextH 1.0 add def}
+ { NextH ThisH sub 0.5 ge {/ThisH ThisH 1.0 add def} if }
+ ifelse
+ /B ThisB def
+ /S ThisS def
+ /H ThisH def
+ /BInc NextB ThisB sub SegSteps div def
+ /SInc NextS ThisS sub SegSteps div def
+ /HInc NextH ThisH sub SegSteps div def
+ SegSteps {
+ H dup 1. gt {1. sub} if S B sethsbcolor
+ currentrgbcolor
+ sqrt 3 1 roll sqrt 3 1 roll sqrt 3 1 roll
+ setrgbcolor
+ DrawStep
+ /H H HInc add def
+ /S S SInc add def
+ /B B BInc add def
+ } bind repeat
+ /ThisH NextH def
+ /ThisS NextS def
+ /ThisB NextB def
+ /ThisPt NextPt def
+ } if
+ } bind repeat
+} def
+/PatchRadius {
+ Radius 0 eq {
+ /UpdRR { dup mul exch dup mul add RR max /RR ED } bind def
+ gsave
+ flattenpath
+ /RR 0 def
+ {UpdRR} {UpdRR} {} {} pathforall
+ grestore
+ /Radius RR sqrt def
+ } if
+} def
+/SlopesFill {
+ gsave
+ 180 add rotate
+ /NumSteps ED
+ clip
+ pathbbox
+ /h ED /w ED
+ 2 copy translate
+ h sub neg /h ED
+ w sub neg /w ED
+ /XInc w NumSteps div def
+ /DrawStep {
+ 0 0 XInc h rectfill
+ XInc 0 translate
+ } bind def
+ Iterate
+ grestore
+} def
+/CcSlopesFill {
+ gsave
+ /Radius ED
+ /CenterY ED
+ /CenterX ED
+ /NumSteps ED
+ clip
+ pathbbox
+ /h ED /w ED
+ 2 copy translate
+ h sub neg /h ED
+ w sub neg /w ED
+ w CenterX mul h CenterY mul translate
+ PatchRadius
+ /RadPerStep Radius NumSteps div neg def
+ /Rad Radius def
+ /DrawStep {
+ 0 0 Rad 0 360 arc
+ closepath fill
+ /Rad Rad RadPerStep add def
+ } bind def
+ Iterate
+ grestore
+} def
+/RadSlopesFill {
+ gsave
+ rotate
+ /Radius ED
+ /CenterY ED
+ /CenterX ED
+ /NumSteps ED
+ clip
+ pathbbox
+ /h ED /w ED
+ 2 copy translate
+ h sub neg /h ED
+ w sub neg /w ED
+ w CenterX mul h CenterY mul translate
+ PatchRadius
+ /AngleIncrement 360 NumSteps div neg def
+ /dY AngleIncrement sin AngleIncrement cos div Radius mul def
+ /DrawStep {
+ 0 0 moveto
+ Radius 0 rlineto
+ 0 dY rlineto
+ closepath fill
+ AngleIncrement rotate
+ } bind def
+ Iterate
+ grestore
+} def
+end
+
diff --git a/Master/texmf-dist/dvips/pstricks/pst-text.pro b/Master/texmf-dist/dvips/pstricks/pst-text.pro
new file mode 100644
index 00000000000..2f001e2af23
--- /dev/null
+++ b/Master/texmf-dist/dvips/pstricks/pst-text.pro
@@ -0,0 +1,101 @@
+%!
+% PostScript header file pst-text.pro
+% Version 97, 94/04/20; patched MV 10-09-99 00:36
+% For distribution, see pstricks.tex.
+
+/tx@TextPathDict 40 dict def
+tx@TextPathDict begin
+
+% Syntax: <dist> PathPosition -
+% Function: Searches for position of currentpath distance <dist> from
+% beginning. Sets (X,Y)=position, and Angle=tangent.
+/PathPosition
+{ /targetdist exch def
+ /pathdist 0 def
+ /continue true def
+ /X { newx } def /Y { newy } def /Angle 0 def
+ gsave
+ flattenpath
+ { movetoproc } { linetoproc } { } { firstx firsty linetoproc }
+ /pathforall load stopped { pop pop pop pop /X 0 def /Y 0 def } if
+ grestore
+} def
+
+/movetoproc { continue { @movetoproc } { pop pop } ifelse } def
+
+/@movetoproc
+{ /newy exch def /newx exch def
+ /firstx newx def /firsty newy def
+} def
+
+/linetoproc { continue { @linetoproc } { pop pop } ifelse } def
+
+/@linetoproc
+{
+ /oldx newx def /oldy newy def
+ /newy exch def /newx exch def
+ /dx newx oldx sub def
+ /dy newy oldy sub def
+ /dist dx dup mul dy dup mul add sqrt def
+ /pathdist pathdist dist add def
+ pathdist targetdist ge
+ { pathdist targetdist sub dist div dup
+ dy mul neg newy add /Y exch def
+ dx mul neg newx add /X exch def
+ /Angle dy dx atan def
+ /continue false def
+ } if
+} def
+
+/TextPathShow
+{ /String exch def
+ /CharCount 0 def
+ String length
+ { String CharCount 1 getinterval ShowChar
+ /CharCount CharCount 1 add def
+ } repeat
+} def
+
+% Syntax: <pathlength> <position> InitTextPath -
+/InitTextPath
+{ gsave
+ currentpoint /Y exch def /X exch def
+ exch X Hoffset sub sub mul
+ Voffset Hoffset sub add
+ neg X add /Hoffset exch def
+ /Voffset Y def
+ grestore
+} def
+
+/Transform
+{ PathPosition
+ dup
+ Angle cos mul Y add exch
+ Angle sin mul neg X add exch
+ translate
+ Angle rotate
+} def
+
+/ShowChar
+{ /Char exch def
+ gsave
+ Char end stringwidth
+ tx@TextPathDict begin
+ 2 div /Sy exch def 2 div /Sx exch def
+
+%%% MV 10-09-99 00:36
+ /sc?currentpoint where {pop sc?currentpoint} {currentpoint} ifelse
+% currentpoint
+
+ Voffset sub Sy add exch
+ Hoffset sub Sx add
+ Transform
+ Sx neg Sy neg moveto
+ Char end tx@TextPathSavedShow
+ tx@TextPathDict begin
+ grestore
+ Sx 2 mul Sy 2 mul rmoveto
+} def
+
+end
+% END pst-text.pro
diff --git a/Master/texmf-dist/dvips/pstricks/pstricks.pro b/Master/texmf-dist/dvips/pstricks/pstricks.pro
new file mode 100644
index 00000000000..8c67d1cb7da
--- /dev/null
+++ b/Master/texmf-dist/dvips/pstricks/pstricks.pro
@@ -0,0 +1,410 @@
+%!
+% PostScript prologue for pstricks.tex.
+% Version 1.00, 2005/09/18
+% For distribution, see pstricks.tex.
+%
+/tx@Dict 200 dict def tx@Dict begin
+/ADict 25 dict def
+/CM { matrix currentmatrix } bind def
+/SLW /setlinewidth load def
+/CLW /currentlinewidth load def
+/CP /currentpoint load def
+/ED { exch def } bind def
+/L /lineto load def
+/T /translate load def
+/TMatrix { } def
+/RAngle { 0 } def
+/Atan { /atan load stopped { pop pop 0 } if } def
+/ATAN1 {neg -1 atan 180 sub } def % atan(x) (only one parameter)
+/Div { dup 0 eq { pop } { div } ifelse } def % control the division
+/NET { neg exch neg exch T } def % change coordinate system to the negative one
+/Pyth { dup mul exch dup mul add sqrt } def % Pythagoras, epects 2 parameter
+/PtoC { 2 copy cos mul 3 1 roll sin mul } def % Polar to Cartesian
+%----------------- hv added 20050516 ---------------
+/Pi 3.14159265359 def
+/TwoPi 6.28318530718 def
+/Euler 2.71828182846 def
+/RadtoDeg { 180 mul Pi div } def % convert from radian to degrees
+/DegtoRad { Pi mul 180 div } def % viceversa
+%----------------- hv end---------------------------
+/PathLength@ { /z z y y1 sub x x1 sub Pyth add def /y1 y def /x1 x def } def
+/PathLength { flattenpath /z 0 def
+ { /y1 ED /x1 ED /y2 y1 def /x2 x1 def
+ }{ /y ED /x ED PathLength@ } {} { /y y2 def /x x2 def PathLength@ }
+ /pathforall load stopped { pop pop pop pop } if z } def
+/STP { .996264 dup scale } def
+/STV { SDict begin normalscale end STP } def
+%
+%%-------------- DG begin patch 15 ---------------%%
+%/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def
+%PathLength } ifelse /b ED /x ED /y ED /z y x add def b a .5 sub 2 mul y
+%mul sub z Div round z mul a .5 sub 2 mul y mul add b exch Div dup y mul
+%/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ]
+%0 } ifelse setdash stroke } def
+/DashLine {
+ dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse
+ /b ED /x1 ED /y1 ED /x ED /y ED
+ /z y x add y1 add x1 add def
+ /Coef b a .5 sub 2 mul y mul sub z Div round
+ z mul a .5 sub 2 mul y mul add b exch Div def
+ /y y Coef mul def
+ /x x Coef mul def
+ /y1 y1 Coef mul def
+ /x1 x1 Coef mul def
+ x1 0 gt y1 0 gt or x 0 gt or y 0 gt and
+ { [ y x y1 x1 ] 1 a sub y mul }
+ { [ 1 0 ] 0 } ifelse
+ setdash stroke
+} def
+%%-------------- DG end patch 15 ---------------%%
+/DotLine {
+ /b PathLength def
+ /a ED /z ED /y CLW def
+ /z y z add def
+ a 0 gt {
+ /b b a div def
+ }{
+ a 0 eq {
+ /b b y sub def
+ }{ a -3 eq {
+ /b b y add def } if
+ } ifelse
+ } ifelse
+ [ 0 b b z Div round Div dup 0 le { pop 1 } if ]
+ a 0 gt { 0 }{ y 2 div a -2 gt { neg }if } ifelse
+ setdash 1 setlinecap stroke
+} def
+%
+/LineFill { % hv ------------ patch 7 -------------
+ gsave
+ abs /hatchWidthInc ED
+ abs /hatchSepInc ED
+ abs CLW add /a ED
+ a 0 dtransform round exch round exch
+ 2 copy idtransform
+ exch Atan rotate
+ idtransform pop /a ED
+ .25 .25 itransform pathbbox
+ /y2 ED
+ a Div ceiling cvi /x2 ED /y1 ED
+ a Div cvi /x1 ED /y2 y2 y1 sub def
+ clip
+ newpath
+ 2 setlinecap
+ systemdict
+ /setstrokeadjust known { true setstrokeadjust } if
+ x2 x1 sub 1 add {
+ x1 a mul y1 moveto 0 y2 rlineto stroke
+ /x1 x1 1 add
+ hatchWidthInc 0 gt { CLW add } if
+ def
+ hatchSepInc 0 gt hatchWidthInc 0 gt or {
+ /a a hatchSepInc add def
+ CLW hatchWidthInc add SLW
+ } if
+ } repeat
+ grestore
+ pop pop } def
+%
+%gsave abs CLW add /a ED a 0 dtransform round exch round exch
+%2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25
+%% DG/SR modification begin - Dec. 12, 1997 - Patch 2
+%%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a
+%itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a
+%% DG/SR modification end
+%Div cvi /x1 ED /y2 y2 y1 sub def clip newpath 2 setlinecap systemdict
+%/setstrokeadjust known { true setstrokeadjust } if x2 x1 sub 1 add { x1
+%% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis)
+%% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore }
+%% def
+%a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore
+%pop pop } def
+%% DG/SR modification end
+%
+/BeginArrow { ADict begin /@mtrx CM def gsave 2 copy T 2 index sub neg
+exch 3 index sub exch Atan rotate newpath } def
+/EndArrow { @mtrx setmatrix CP grestore end } def
+/Arrow { CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 h T 1 -1
+scale } if w neg h moveto 0 0 L w h L w neg a neg rlineto gsave fill
+grestore } def
+/Tbar { CLW mul add /z ED z -2 div CLW 2 div moveto z 0 rlineto stroke 0
+CLW moveto } def
+/Bracket { CLW mul add dup CLW sub 2 div /x ED mul CLW add /y ED /z CLW 2
+div def x neg y moveto x neg CLW 2 div L x CLW 2 div L x y L stroke 0
+CLW moveto } def
+/RoundBracket { CLW mul add dup 2 div /x ED mul /y ED /mtrx CM def 0 CLW
+2 div T x y mul 0 ne { x y scale } if 1 1 moveto .85 .5 .35 0 0 0
+curveto -.35 0 -.85 .5 -1 1 curveto mtrx setmatrix stroke 0 CLW moveto }
+def
+/SD { 0 360 arc fill } def
+/EndDot { { /z DS def } { /z 0 def } ifelse /b ED 0 z DS SD b { 0 z DS
+CLW sub SD } if 0 DS z add CLW 4 div sub moveto } def
+/Shadow { [ { /moveto load } { /lineto load } { /curveto load } {
+/closepath load } /pathforall load stopped { pop pop pop pop CP /moveto
+load } if ] cvx newpath 3 1 roll T exec } def
+/NArray { aload length 2 div dup dup cvi eq not { exch pop } if /n exch
+cvi def } def
+/NArray { % holds the coordinates and on top of stack the showpoints boolean
+ /f ED
+ counttomark 2 div dup cvi /n ED
+ n eq not { exch pop } if
+ f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse
+} def
+/Line {
+ NArray n 0 eq not
+ { n 1 eq { 0 0 /n 2 def } if ArrowA /n n 2 sub def
+ n { Lineto } repeat
+ CP 4 2 roll ArrowB L pop pop
+ } if
+} def
+/Arcto { /a [ 6 -2 roll ] cvx def a r /arcto load stopped { 5 } { 4 }
+ ifelse { pop } repeat a } def
+/CheckClosed { dup n 2 mul 1 sub index eq 2 index n 2 mul 1 add index eq
+ and { pop pop /n n 1 sub def } if } def
+/Polygon { NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop }
+ repeat } { n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1
+ ED /x1 ED x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div def x1 y1
+ moveto /n n 2 sub def n { Lineto } repeat x1 y1 x0 y0 6 4 roll Lineto
+ Lineto pop pop closepath } ifelse } def
+/Diamond {
+ /mtrx CM def
+ T rotate
+ /h ED
+ /w ED
+ dup 0 eq { pop } { CLW mul neg
+ /d ED
+ /a w h Atan def
+ /h d a sin Div h add def
+ /w d a cos Div w add def } ifelse
+ mark w 2 div h 2 div w 0 0 h neg w neg 0 0 h w 2 div h 2 div
+ /ArrowA { moveto } def
+ /ArrowB { } def
+ false Line
+ closepath mtrx setmatrix } def
+% DG modification begin - Jan. 15, 1997
+%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq {
+%pop } { CLW mul /d ED /h h d w h Atan sin Div sub def /w w d h w Atan 2
+%div dup cos exch sin Div mul sub def } ifelse mark 0 d w neg d 0 h w d 0
+%d /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx
+%setmatrix } def
+/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup
+CLW mul /d ED /h h d w h Atan sin Div sub def /w w d h w Atan 2
+div dup cos exch sin Div mul sub def mark 0 d w neg d 0 h w d 0
+d /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx
+% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis)
+% setmatrix } def
+setmatrix pop } def
+% DG/SR modification end
+/CCA { /y ED /x ED 2 copy y sub /dy1 ED x sub /dx1 ED /l1 dx1 dy1 Pyth
+def } def
+/CCA { /y ED /x ED 2 copy y sub /dy1 ED x sub /dx1 ED /l1 dx1 dy1 Pyth
+def } def
+/CC { /l0 l1 def /x1 x dx sub def /y1 y dy sub def /dx0 dx1 def /dy0 dy1
+def CCA /dx dx0 l1 c exp mul dx1 l0 c exp mul add def /dy dy0 l1 c exp
+mul dy1 l0 c exp mul add def /m dx0 dy0 Atan dx1 dy1 Atan sub 2 div cos
+abs b exp a mul dx dy Pyth Div 2 div def /x2 x l0 dx mul m mul sub def
+/y2 y l0 dy mul m mul sub def /dx l1 dx mul m mul neg def /dy l1 dy mul
+m mul neg def } def
+/IC { /c c 1 add def c 0 lt { /c 0 def } { c 3 gt { /c 3 def } if }
+ifelse /a a 2 mul 3 div 45 cos b exp div def CCA /dx 0 def /dy 0 def }
+def
+/BOC { IC CC x2 y2 x1 y1 ArrowA CP 4 2 roll x y curveto } def
+/NC { CC x1 y1 x2 y2 x y curveto } def
+/EOC { x dx sub y dy sub 4 2 roll ArrowB 2 copy curveto } def
+/BAC { IC CC x y moveto CC x1 y1 CP ArrowA } def
+/NAC { x2 y2 x y curveto CC x1 y1 } def
+/EAC { x2 y2 x y ArrowB curveto pop pop } def
+/OpenCurve {
+ NArray n 3 lt
+ { n { pop pop } repeat }
+ { BOC /n n 3 sub def n { NC } repeat EOC } ifelse
+} def
+/AltCurve { { false NArray n 2 mul 2 roll [ n 2 mul 3 sub 1 roll ] aload
+/Points ED n 2 mul -2 roll } { false NArray } ifelse n 4 lt { n { pop
+pop } repeat } { BAC /n n 4 sub def n { NAC } repeat EAC } ifelse } def
+/ClosedCurve { NArray n 3 lt { n { pop pop } repeat } { n 3 gt {
+CheckClosed } if 6 copy n 2 mul 6 add 6 roll IC CC x y moveto n { NC }
+repeat closepath pop pop } ifelse } def
+/SQ { /r ED r r moveto r r neg L r neg r neg L r neg r L fill } def
+/ST { /y ED /x ED x y moveto x neg y L 0 x L fill } def
+/SP { /r ED gsave 0 r moveto 4 { 72 rotate 0 r L } repeat fill grestore }
+def
+/FontDot { DS 2 mul dup matrix scale matrix concatmatrix exch matrix
+rotate matrix concatmatrix exch findfont exch makefont setfont } def
+/Rect { x1 y1 y2 add 2 div moveto x1 y2 lineto x2 y2 lineto x2 y1 lineto
+x1 y1 lineto closepath } def
+/OvalFrame { x1 x2 eq y1 y2 eq or { pop pop x1 y1 moveto x2 y2 L } { y1
+y2 sub abs x1 x2 sub abs 2 copy gt { exch pop } { pop } ifelse 2 div
+exch { dup 3 1 roll mul exch } if 2 copy lt { pop } { exch pop } ifelse
+/b ED x1 y1 y2 add 2 div moveto x1 y2 x2 y2 b arcto x2 y2 x2 y1 b arcto
+x2 y1 x1 y1 b arcto x1 y1 x1 y2 b arcto 16 { pop } repeat closepath }
+ifelse } def
+/Frame { CLW mul /a ED 3 -1 roll 2 copy gt { exch } if a sub /y2 ED a add
+/y1 ED 2 copy gt { exch } if a sub /x2 ED a add /x1 ED 1 index 0 eq {
+pop pop Rect } { OvalFrame } ifelse } def
+/BezierNArray { /f ED counttomark 2 div dup cvi /n ED n eq not { exch pop
+} if n 1 sub neg 3 mod 3 add 3 mod { 0 0 /n n 1 add def } repeat f { ]
+aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse } def
+/OpenBezier { BezierNArray n 1 eq { pop pop } { ArrowA n 4 sub 3 idiv { 6
+2 roll 4 2 roll curveto } repeat 6 2 roll 4 2 roll ArrowB curveto }
+ifelse } def
+/ClosedBezier { BezierNArray n 1 eq { pop pop } { moveto n 1 sub 3 idiv {
+6 2 roll 4 2 roll curveto } repeat closepath } ifelse } def
+/BezierShowPoints { gsave Points aload length 2 div cvi /n ED moveto n 1
+sub { lineto } repeat CLW 2 div SLW [ 4 4 ] 0 setdash stroke grestore }
+def
+/Parab { /y0 exch def /x0 exch def /y1 exch def /x1 exch def /dx x0 x1
+sub 3 div def /dy y0 y1 sub 3 div def x0 dx sub y0 dy add x1 y1 ArrowA
+x0 dx add y0 dy add x0 2 mul x1 sub y1 ArrowB curveto /Points [ x1 y1 x0
+y0 x0 2 mul x1 sub y1 ] def } def
+/Grid { newpath /a 4 string def /b ED /c ED /n ED cvi dup 1 lt { pop 1 }
+if /s ED s div dup 0 eq { pop 1 } if /dy ED s div dup 0 eq { pop 1 } if
+/dx ED dy div round dy mul /y0 ED dx div round dx mul /x0 ED dy div
+round cvi /y2 ED dx div round cvi /x2 ED dy div round cvi /y1 ED dx div
+round cvi /x1 ED /h y2 y1 sub 0 gt { 1 } { -1 } ifelse def /w x2 x1 sub
+0 gt { 1 } { -1 } ifelse def b 0 gt { /z1 b 4 div CLW 2 div add def
+/Helvetica findfont b scalefont setfont /b b .95 mul CLW 2 div add def }
+if systemdict /setstrokeadjust known { true setstrokeadjust /t { } def }
+{ /t { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add
+exch itransform } bind def } ifelse gsave n 0 gt { 1 setlinecap [ 0 dy n
+div ] dy n div 2 div setdash } { 2 setlinecap } ifelse /i x1 def /f y1
+dy mul n 0 gt { dy n div 2 div h mul sub } if def /g y2 dy mul n 0 gt {
+dy n div 2 div h mul add } if def x2 x1 sub w mul 1 add dup 1000 gt {
+pop 1000 } if { i dx mul dup y0 moveto b 0 gt { gsave c i a cvs dup
+stringwidth pop /z2 ED w 0 gt {z1} {z1 z2 add neg} ifelse h 0 gt {b neg}
+{z1} ifelse rmoveto show grestore } if dup t f moveto g t L stroke /i i
+w add def } repeat grestore gsave n 0 gt
+% DG/SR modification begin - Nov. 7, 1997 - Patch 1
+%{ 1 setlinecap [ 0 dx n div ] dy n div 2 div setdash }
+{ 1 setlinecap [ 0 dx n div ] dx n div 2 div setdash }
+% DG/SR modification end
+{ 2 setlinecap } ifelse /i y1 def /f x1 dx mul
+n 0 gt { dx n div 2 div w mul sub } if def /g x2 dx mul n 0 gt { dx n
+div 2 div w mul add } if def y2 y1 sub h mul 1 add dup 1000 gt { pop
+1000 } if { newpath i dy mul dup x0 exch moveto b 0 gt { gsave c i a cvs
+dup stringwidth pop /z2 ED w 0 gt {z1 z2 add neg} {z1} ifelse h 0 gt
+{z1} {b neg} ifelse rmoveto show grestore } if dup f exch t moveto g
+exch t L stroke /i i h add def } repeat grestore } def
+/ArcArrow { /d ED /b ED /a ED gsave newpath 0 -1000 moveto clip newpath 0
+1 0 0 b grestore c mul /e ED pop pop pop r a e d PtoC y add exch x add
+exch r a PtoC y add exch x add exch b pop pop pop pop a e d CLW 8 div c
+mul neg d } def
+/Ellipse { /mtrx CM def T scale 0 0 1 5 3 roll arc mtrx setmatrix } def
+%
+/ArcAdjust {
+% given a target length (targetLength) and an initial angle (angle0) [in the stack],
+% let M(angle0)=(rx*cos(angle0),ry*sin(angle0))=(x0,y0).
+% This computes an angle t such that (x0,y0) is at distance targetLength from the point M(t)=(rx*cos(t),ry*sin(t)).
+% NOTE: this an absolute angle, it does not have to be added or substracted to angle0
+% contrary to TvZ's code.
+% To achieve, this, one iterates the following process: start with some angle t,
+% compute the point M' at distance targetLength of (x0,y0) on the semi-line [(x0,y0) M(t)].
+% Now take t' (= new angle) so that (0,0) M(t') and M' are aligned.
+%
+% Another difference with TvZ's code is that we need d (=add/sub) to be defined.
+% the value of d = add/sub is used to know on which side we have to move.
+% It is only used in the initialisation of the angle before the iteration.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Input stack: 1: target length 2: initial angle
+% variables used : rx, ry, d (=add/sub)
+%
+ /targetLength ED /angle0 ED
+ /x0 rx angle0 cos mul def
+ /y0 ry angle0 sin mul def
+% we are looking for an angle t such that (x0,y0) is at distance targetLength from the point M(t)=(rx*cos(t),ry*sin(t)))
+%initialisation of angle (using 1st order approx = TvZ's code)
+ targetLength 57.2958 mul
+ angle0 sin rx mul dup mul
+ angle0 cos ry mul dup mul
+ add sqrt div
+% if initialisation angle is two large (more than 90 degrees) set it to 90 degrees
+% (if the ellipse is very curved at the point where we draw the arrow, the value can be much more than 360 degrees !)
+% this should avoid going on the wrong side (more than 180 degrees) or go near
+% a bad attractive point (at 180 degrees)
+ dup 90 ge { pop 90 } if
+ angle0 exch d
+% maximum number of times to iterate the iterative procedure:
+ 30
+% iterative procedure: takes an angle t on top of stack, computes a better angle (an put it on top of stack)
+ { dup
+% compute distance D between (x0,y0) and M(t)
+ dup cos rx mul x0 sub dup mul exch sin ry mul y0 sub dup mul add sqrt
+% if D almost equals targetLength, we stop
+ dup targetLength sub abs 1e-5 le { pop exit } if
+% stack now contains D t
+% compute the point M(t') at distance targetLength of (x0,y0) on the semi-line [(x0,y0) M(t)]:
+% M(t')= ( (x(t)-x0)*targetLength/d+x0 , (y(t)-y0)*targetLength/d+y0 )
+ exch dup cos rx mul x0 sub exch sin ry mul y0 sub
+% stack contains: y(t)-y0, x(t)-x0, d
+ 2 index Div targetLength mul y0 add ry Div exch
+ 2 index Div targetLength mul x0 add rx Div
+% stack contains x(t')/rx , y(t')/ry , d
+% now compute t', and remove D from stack
+ atan exch pop
+ } repeat
+% we don't look at what happened... in particular, if targetLength is greater than the diameter of the ellipse...
+% the final angle will be around /angle0 + 180. maybe we should treat this pathological case...
+%after iteration, stack contains an angle t such that M(t) is the tail of the arrow
+% to give back the result as a an angle relative to angle0 we could add the following line:
+% angle0 sub 0 exch d
+%
+} def
+%
+/EllipticArcArrow {
+ /d ED % add/sub
+ /b ED % arrow procedure
+ /a1 ED % angle
+ gsave
+ newpath
+ 0 -1000 moveto
+ clip % Set clippath far from arrow.
+ newpath
+ 0 1 0 0 b % Draw arrow to determine length.
+ grestore
+% Length of arrow is on top of stack. Next 3 numbers are junk.
+%
+ a1 exch ArcAdjust % Angular position of base of arrow.
+ /a2 ED
+ pop pop pop
+ a2 cos rx mul x add
+ a2 sin ry mul y add
+ a1 cos rx mul x add
+ a1 sin ry mul y add
+% Now arrow tip coor and base coor are on stack.
+ b pop pop pop pop % Draw arrow, and discard coordinates.
+ a2 CLW 8 div
+% change value of d (test it by looking if `` 1 1 d '' gives 2 or not )
+ 1 1 d 2 eq { /d { sub } def } { /d { add } def } ifelse
+ ArcAdjust
+% resets original value of d
+ 1 1 d 2 eq { /d { sub } def } { /d { add } def } ifelse % Adjust angle to give overlap.
+} def
+%%------------------ tvz/DG/hv (2004-05-10) end -------------------%%
+%
+/Rot { CP CP translate 3 -1 roll neg rotate NET } def
+/RotBegin { tx@Dict /TMatrix known not { /TMatrix { } def /RAngle { 0 }
+def } if /TMatrix [ TMatrix CM ] cvx def /a ED a Rot /RAngle [ RAngle
+dup a add ] cvx def } def
+/RotEnd { /TMatrix [ TMatrix setmatrix ] cvx def /RAngle [ RAngle pop ]
+cvx def } def
+/PutCoor { gsave CP T CM STV exch exec moveto setmatrix CP grestore } def
+/PutBegin { /TMatrix [ TMatrix CM ] cvx def CP 4 2 roll T moveto } def
+/PutEnd { CP /TMatrix [ TMatrix setmatrix ] cvx def moveto } def
+/Uput { /a ED add 2 div /h ED 2 div /w ED /s a sin def /c a cos def /b s
+abs c abs 2 copy gt dup /q ED { pop } { exch pop } ifelse def /w1 c b
+div w mul def /h1 s b div h mul def q { w1 abs w sub dup c mul abs } {
+h1 abs h sub dup s mul abs } ifelse } def
+/UUput { /z ED abs /y ED /x ED q { x s div c mul abs y gt } { x c div s
+mul abs y gt } ifelse { x x mul y y mul sub z z mul add sqrt z add } { q
+{ x s div } { x c div } ifelse abs } ifelse a PtoC h1 add exch w1 add
+exch } def
+/BeginOL { dup (all) eq exch TheOL eq or { IfVisible not { Visible
+/IfVisible true def } if } { IfVisible { Invisible /IfVisible false def
+} if } ifelse } def
+/InitOL { /OLUnit [ 3000 3000 matrix defaultmatrix dtransform ] cvx def
+/Visible { CP OLUnit idtransform T moveto } def /Invisible { CP OLUnit
+neg exch neg exch idtransform T moveto } def /BOL { BeginOL } def
+/IfVisible true def } def
+end
+% END pstricks.pro
diff --git a/Master/texmf-dist/dvips/qfonts/config.qbk b/Master/texmf-dist/dvips/qfonts/config.qbk
new file mode 100644
index 00000000000..67e035195b5
--- /dev/null
+++ b/Master/texmf-dist/dvips/qfonts/config.qbk
@@ -0,0 +1 @@
+p +qbk.map
diff --git a/Master/texmf-dist/dvips/qfonts/config.qcr b/Master/texmf-dist/dvips/qfonts/config.qcr
new file mode 100644
index 00000000000..14495282d20
--- /dev/null
+++ b/Master/texmf-dist/dvips/qfonts/config.qcr
@@ -0,0 +1 @@
+p +qcr.map
diff --git a/Master/texmf-dist/dvips/qfonts/config.qhv b/Master/texmf-dist/dvips/qfonts/config.qhv
new file mode 100644
index 00000000000..79246725da4
--- /dev/null
+++ b/Master/texmf-dist/dvips/qfonts/config.qhv
@@ -0,0 +1 @@
+p +qhv.map
diff --git a/Master/texmf-dist/dvips/qfonts/config.qpl b/Master/texmf-dist/dvips/qfonts/config.qpl
new file mode 100644
index 00000000000..df60dc3d5a0
--- /dev/null
+++ b/Master/texmf-dist/dvips/qfonts/config.qpl
@@ -0,0 +1 @@
+p +qpl.map
diff --git a/Master/texmf-dist/dvips/qfonts/config.qtm b/Master/texmf-dist/dvips/qfonts/config.qtm
new file mode 100644
index 00000000000..b0f3d7d5ef5
--- /dev/null
+++ b/Master/texmf-dist/dvips/qfonts/config.qtm
@@ -0,0 +1 @@
+p +qtm.map
diff --git a/Master/texmf-dist/dvips/qfonts/config.qzc b/Master/texmf-dist/dvips/qfonts/config.qzc
new file mode 100644
index 00000000000..e1fecfd360e
--- /dev/null
+++ b/Master/texmf-dist/dvips/qfonts/config.qzc
@@ -0,0 +1 @@
+p +qzc.map
diff --git a/Master/texmf-dist/dvips/symbol/config.usy b/Master/texmf-dist/dvips/symbol/config.usy
new file mode 100644
index 00000000000..0cdbd7e3edd
--- /dev/null
+++ b/Master/texmf-dist/dvips/symbol/config.usy
@@ -0,0 +1 @@
+p +usy.map
diff --git a/Master/texmf-dist/dvips/tex-ps/crops.pro b/Master/texmf-dist/dvips/tex-ps/crops.pro
new file mode 100644
index 00000000000..79614ba8b1f
--- /dev/null
+++ b/Master/texmf-dist/dvips/tex-ps/crops.pro
@@ -0,0 +1,196 @@
+userdict begin
+% [PL] Domy/slne parametry | [E] Default parameters
+% Odst/ep linii obci/ecia od | Cutting distance from the sheet
+% arkusza (mm) | body (in mm)
+/cropmarkdistance 3 def % [0..5]
+% Rozmiar paser/ow (mm) | Cropmarks size (in mm)
+/cropmarksize 10 def
+% Rozmiar pask/ow barwnych (mm) | Color bar size (in mm)
+/barsize 5 def
+/colorbars 1 def
+% 0 - bez paskow barwnych | 0 - without color steps and bars
+% (np. do monta/zu) | (e.g. for plate composition)
+% 1 - komplet pask/ow barwnych | 1 - complete set of color steps and bars
+% 2 - tylko ze skalami kolor/ow | 2 - color steps only
+% 3 - tylko z brudzikami | 3 - color bars only
+%
+/mirror 0 def
+% 0 - normalny widok | 0 - normal view
+% 1 - lustrzane odbicie | 1 - mirror
+%
+% opis na marginesie | marginal label
+/marglabel 1 def % 0 -- off, 1 -- on
+% dodatkowe przesuni/ecie strony | additional page offset
+/xoffset 0 def
+/yoffset 0 def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+/h_size {hsize} def /v_size {vsize} def
+statusdict /setpageparams known {
+ statusdict /orisetpageparams statusdict /setpageparams get put
+ statusdict /setpageparams {4 2 roll CMdim 2 mul add x_offset add 4 1 roll
+ CMdim 2 mul add y_offset add 4 1 roll orisetpageparams} put
+}{
+ statusdict /setpage known {
+ statusdict /orisetpage statusdict /setpage get put
+ statusdict /setpage {3 1 roll CMdim 2 mul add x_offset add 3 1 roll
+ CMdim 2 mul add y_offset add 3 1 roll orisetpage} put
+ } if
+} ifelse
+%
+ /mm{25.4 div 72 mul}def
+ /bd{bind def}def
+ /_y{exch}def
+ /origin{0 0 moveto}def
+ /T{translate}def
+ /K{setcmykcolor}def
+ /box{_y dup 0 rlineto _y 0 _y rlineto neg 0 rlineto closepath}bd
+ /_distance {cropmarkdistance mm} def
+ /CMdim {cropmarksize mm} def
+ /boxdim {barsize mm} def
+ /dist{_distance 5 mm le{_distance}{5 mm}ifelse}def
+ /x_offset {xoffset mm} def
+ /y_offset {yoffset mm} def
+ /cmdim{dist neg CMdim add}def
+ /cmhalf{cmdim 2 div}def
+ /horver{h_size v_size le}def
+ /setsep 0 def
+%
+/rm {
+ 0 cmhalf moveto cmdim cmhalf lineto stroke
+ cmhalf 0 moveto cmhalf cmdim lineto stroke
+ cmhalf cmhalf cmdim 3 div 0 360 arc stroke
+ } bd
+/cm {
+ 0 CMdim moveto cmdim CMdim lineto stroke
+ CMdim 0 moveto CMdim cmdim lineto stroke
+ rm} bd
+/cmarks{ cm
+ h_size CMdim 2 mul add 0 T -1 1 scale cm
+ 0 v_size CMdim 2 mul add T 1 -1 scale cm
+ CMdim 2 mul h_size add 0 T -1 1 scale cm
+ } bd
+%
+/halfmarks{gsave
+ 0 v_size 2 div CMdim 2 div add dist 2 div add T rm
+ h_size cmdim add dist 2 mul add 0 T rm
+ h_size 2 div neg cmhalf sub dist sub
+ v_size 2 div cmdim 2 div add dist add T rm
+ 0 v_size neg cmdim sub dist 2 mul sub T rm
+ grestore}bd
+%
+/boxfill{boxdim boxdim box fill}bd
+/_step{boxfill horver{0 boxdim}{boxdim 0} ifelse T}bd
+/contour{origin
+ horver{boxdim boxdim 11 mul}{boxdim 11 mul boxdim} ifelse
+ box stroke}bd
+/csteps{
+ setsep 1 eq {
+ gsave 0 .1 1 {origin setgray _step} for grestore
+ 0 setgray contour % /cbar {0 setgray} bd
+ }{
+ setsep 0 eq {
+ gsave 1 .1 neg 0 {origin 0 _y 0 0 _y 0 _y K _step} for grestore
+ 1 0 0 0 K contour % /cbar {1 0 0 0 K} bd
+ }{ % /cbar {1 setgray} bd
+ } ifelse
+ } ifelse
+ } bd
+/cbar {setsep 1 eq {0 setgray}{setsep 0 eq {1 0 0 0 K}{1 setgray
+ } ifelse} ifelse} bd
+%
+/msteps{setsep 2 eq {gsave 0 .1 1 {origin setgray _step} for grestore
+ 0 setgray contour % /mbar {0 setgray} bd
+ }{setsep 0 eq {
+ gsave 1 .1 neg 0 {origin 0 _y 0 _y 0 0 _y K _step} for grestore
+ 0 1 0 0 K contour %/mbar {0 1 0 0 K} bd
+ }{ % /mbar {1 setgray} bd
+ } ifelse
+ } ifelse } bd
+/mbar {setsep 2 eq {0 setgray}{setsep 0 eq {0 1 0 0 K}{1 setgray
+ } ifelse} ifelse} bd
+%
+/ysteps{setsep 3 eq {gsave 0 .1 1 {origin setgray _step} for grestore
+ 0 setgray contour % /ybar {0 setgray} bd
+ }{setsep 0 eq {
+ gsave 1 .1 neg 0 {origin 0 _y 0 _y 0 _y 0 K _step} for grestore
+ 0 0 1 0 K contour % /ybar {0 0 1 0 K} bd
+ }{ % /ybar {1 setgray} bd
+ } ifelse
+ } ifelse } bd
+/ybar {setsep 3 eq {0 setgray}{setsep 0 eq {0 0 1 0 K}{1 setgray
+ } ifelse} ifelse} bd
+%
+/gsteps{setsep 4 eq {gsave 0 .1 1 {origin setgray _step} for grestore
+ 0 setgray contour % /gbar {0 setgray} bd
+ }{setsep 0 eq {
+ gsave 0 .1 1 {origin setgray _step} for grestore
+ 0 setgray contour % /gbar {0 setgray} bd
+ }{ % /gbar {1 setgray} bd
+ } ifelse
+ } ifelse } bd
+/gbar {setsep 4 eq {0 setgray}{setsep 0 eq {0 setgray}{1 setgray
+ } ifelse} ifelse} bd
+%
+/colorsteps{gsave
+ horver {CMdim boxdim sub dist sub CMdim boxdim add}
+ {CMdim boxdim add CMdim boxdim sub dist sub} ifelse T gsteps
+ horver {0 boxdim 12 mul}{boxdim 12 mul 0} ifelse T ysteps
+ grestore gsave
+ horver {CMdim boxdim sub dist sub v_size CMdim add boxdim 12 mul sub}
+ {h_size CMdim add boxdim 12 mul sub CMdim boxdim sub dist sub}
+ ifelse T csteps
+ horver {0 boxdim 12 mul neg}{boxdim 12 mul neg 0} ifelse T msteps
+ grestore} bd
+%
+/colorbar {gsave
+ horver {
+ h_size CMdim add dist add CMdim T
+ /begbar {boxdim 4 boxdim mul v_size CMdim 2 mul sub} bd
+ /endbar {for 0 boxdim T}bd /mt {0 exch moveto} bd
+ }{
+ CMdim boxdim add v_size CMdim add dist add T
+ /begbar {boxdim 4 boxdim mul h_size CMdim 2 mul sub} bd
+ /endbar {for boxdim 0 T} bd /mt {exch 0 moveto} bd
+ } ifelse
+ begbar {mt cbar boxfill} endbar begbar {mt mbar boxfill} endbar
+ begbar {mt ybar boxfill} endbar begbar {mt gbar boxfill} endbar
+ grestore} bd
+%
+/color_sep -1 def
+/label_s{
+ marglabel 1 eq {
+ /Helvetica findfont 8 scalefont setfont
+ (Page (PS/TeX): ) show page_num_ps 20 string cvs show
+ ( / ) show page_num_tex 20 string cvs show
+ color_sep 0 ge {
+ color_sep 0 eq {(, \ \ Plate CYAN ) show} if
+ color_sep 1 eq {(, \ \ Plate MAGENTA ) show} if
+ color_sep 2 eq {(, \ \ Plate YELLOW ) show} if
+ color_sep 3 eq {(, \ \ Plate BLACK ) show} if
+ }{(, \ \ COMPOSITE) show} ifelse
+ } if
+ } bd
+/page_number{gsave
+ horver {CMdim 2 mul 10 moveto label_s}
+ {10 CMdim 2 mul moveto 90 rotate label_s} ifelse
+ grestore} def
+%
+/_mirror {mirror 1 eq {-1 1 scale h_size neg 0 T} if}bd
+%
+/full {.1 setlinewidth
+ 1 colorbars eq {colorsteps colorbar}{
+ 2 colorbars eq {colorsteps}{
+ 3 colorbars eq {colorbar}{} ifelse
+ } ifelse
+ } ifelse
+ 1 1 1 1 setcmykcolor page_number cmarks halfmarks} bd
+%
+/save_page_num{pstack 2 copy 1 add
+ /page_num_ps exch def /page_num_tex exch def}def
+%
+[/bop-hook where {pop /bop-hook load aload pop} if
+{x_offset y_offset T
+ gsave save_page_num full grestore
+ CMdim CMdim T _mirror} aload pop] cvx
+/bop-hook exch def
+end
diff --git a/Master/texmf-dist/dvips/tex-ps/mirr.hd b/Master/texmf-dist/dvips/tex-ps/mirr.hd
new file mode 100644
index 00000000000..5c39e74fa79
--- /dev/null
+++ b/Master/texmf-dist/dvips/tex-ps/mirr.hd
@@ -0,0 +1,32 @@
+% The following header can be used for producing mirrored output on
+% printers (phototypesetters don't need this) with T. Rokicki's DVIPS
+% driver.
+%
+% USAGE:
+% dvips -hmirr.hd [other_options1] <file_name> [other_options2]
+%
+% WARNING:
+% Be careful when you use DVIDVI or DVI2DVI in the context of global
+% specials like `\special{landscape}'; fortunately, `\special{landscape}'
+% works smoothly with DVIDVI but not with DVI2DVI (Sawatzki's
+% implementation)---you have to use `\special{landscape}' on every
+% page that appears to be the first one after splitting a DVI by DVI2DVI;
+% the same technique concerns both DVIDVI and DVI2DVI if user-defined
+% global specials are used.
+%
+% In the case of difficulties mail to:
+% Piotr Pianowski or Bogus\l{}aw Jackowski or Piotr Strzelczyk
+% B.Jackowski@GUST.org.pl
+%
+userdict begin
+/bop-hook {-1 1 scale isls {vsize} {hsize} ifelse neg 0 translate} def
+/appenddef {
+% use this for lengthening `bop-hook' in your TeX program, i.e.,
+% instead of \special{ps:... userdict begin ... /bop-hook{...}def ... end}
+% say \special{ps:... userdict begin ... /bop-hook{...}appenddef ... end}
+ /stuff-to-append exch def /to-append exch def
+ [/to-append load where {pop /to-append load load aload pop} if
+ /stuff-to-append load aload pop] cvx /to-append load exch store
+} def
+end
+
diff --git a/Master/texmf-dist/dvips/tex-ps/separate.pro b/Master/texmf-dist/dvips/tex-ps/separate.pro
new file mode 100644
index 00000000000..44eb9ce9849
--- /dev/null
+++ b/Master/texmf-dist/dvips/tex-ps/separate.pro
@@ -0,0 +1,144 @@
+% [PL] Parametry separacji: [E] Separation parameters:
+% Odkomentuj TYLKO JEDNO Uncomment EXACTLY ONE
+% z poni/zszych ustawie/n: of the following settings:
+%%%%%
+% /color_sep 0 def % cyan
+% /color_sep 1 def % magenta
+% /color_sep 2 def % yellow
+/color_sep 3 def % black
+%%%%%
+/ScreenFrequency 150 def
+/Cangle 15 def
+/Mangle 75 def
+/Yangle 0 def
+/Kangle 45 def
+%
+userdict begin /ori_setcmykcolor where {pop} {/ori_setcmykcolor /setcmykcolor
+load def} ifelse /ori_setrgbcolor where {pop} {/ori_setrgbcolor /setrgbcolor
+load def} ifelse /ori_setgray where {pop} {/ori_setgray /setgray load
+def} ifelse /ori_colorimage where {pop} {/ori_colorimage /colorimage
+load def} ifelse /ori_image where {pop} {/ori_image /image load def}
+ifelse /ori_imagemask where {pop} {/ori_imagemask /imagemask load def}
+ifelse /ori_fill where {pop} {/ori_fill /fill load def} ifelse /ori_eofill
+where {pop} {/ori_eofill /eofill load def} ifelse /ori_stroke where
+{pop} {/ori_stroke /stroke load def} ifelse /ori_show where {pop} {/ori_show
+/show load def} ifelse /hax_setcmykcolor /ori_setcmykcolor load def
+/maybe_black { 4 copy 1 sub abs epsilon le exch 0 sub abs epsilon le
+and exch 0 sub abs epsilon le and exch 0 sub abs epsilon le and /if_delblack
+exch def } def /my_fill {userdict begin if_delblack {newpath} {ori_fill}
+ifelse end} def /my_eofill {userdict begin if_delblack {newpath} {ori_eofill}
+ifelse end} def /my_stroke {userdict begin if_delblack {newpath} {ori_stroke}
+ifelse end} def /my_show {userdict begin if_delblack {false charpath
+currentpoint newpath moveto} {ori_show} ifelse end} def /eofill {userdict
+begin my_eofill end} def /fill {userdict begin my_fill end} def /stroke
+{userdict begin my_stroke end} def /show {userdict begin my_show end}
+def /setcmykcolor {userdict begin /k_ exch def /y_ exch def /m_ exch
+def /c_ exch def c_ m_ y_ k_ hax_setcmykcolor end} def /setgray {ori_setgray
+currentcmykcolor setcmykcolor} def /setrgbcolor {ori_setrgbcolor currentcmykcolor
+setcmykcolor} def /hax_image { dup type cvlit /dicttype eq { /ImageDict
+exch def currentcolorspace dup length 1 eq ImageDict /ImageType get
+1 eq and {0 get dup /DeviceRGB eq {/ncomp 3 def} if dup /DeviceGray
+eq {/ncomp 1 def} if /DeviceCMYK eq {/ncomp 4 def} if ImageDict /BitsPerComponent
+get 8 ne /ncomp 1 ne and {/ncomp 0 def} if } {pop /ncomp 0 def} ifelse
+} { false 1 makeimagedict } ifelse ncomp 0 eq {ImageDict ori_image}
+{hax_image_} ifelse } def /hax_colorimage { makeimagedict hax_image_
+} def /makeimagedict { dup /ncomp exch def dup 4 eq {/DeviceCMYK setcolorspace}
+if dup 3 eq {/DeviceRGB setcolorspace} if 1 eq {/DeviceGray setcolorspace}
+if /ImageDict 7 dict def ImageDict begin {/MultipleDataSources true
+def ncomp array astore} if /DataSource exch def /ImageMatrix exch def
+/BitsPerComponent exch def /Height exch def /Width exch def /Decode
+[ncomp {0 1} repeat] def /ImageType 1 def end } def /data_str 65532
+string def /data_str_ 8192 string def /merge_multi4 { ImageDict /DataSource
+get aload pop dup type cvlit /filetype eq { /fdatsrck exch def /fdatsrcy
+exch def /fdatsrcm exch def /fdatsrcc exch def /datasrck {fdatsrck
+data_str_ readstring pop} def /datasrcy {fdatsrcy data_str_ readstring
+pop} def /datasrcm {fdatsrcm data_str_ readstring pop} def /datasrcc
+{fdatsrcc data_str_ readstring pop} def } { /datasrck exch def /datasrcy
+exch def /datasrcm exch def /datasrcc exch def } ifelse ImageDict /DataSource
+{ data_str 0 datasrcc {3 copy put pop 4 add} forall pop 1 datasrcm
+{3 copy put pop 4 add} forall pop 2 datasrcy {3 copy put pop 4 add}
+forall pop 3 datasrck {3 copy put pop 4 add} forall 3 sub 0 exch getinterval
+} put } def /merge_multi3 { ImageDict /DataSource get aload pop dup
+type cvlit /filetype eq { /fdatsrcb exch def /fdatsrcg exch def /fdatsrcr
+exch def /datasrcb {fdatsrcb data_str_ readstring pop} def /datasrcg
+{fdatsrcg data_str_ readstring pop} def /datasrcr {fdatsrcr data_str_
+readstring pop} def } { /datasrcb exch def /datasrcg exch def /datasrcr
+exch def } ifelse ImageDict /DataSource { data_str 0 datasrcr {3 copy
+put pop 3 add} forall pop 1 datasrcg {3 copy put pop 3 add} forall
+pop 2 datasrcb {3 copy put pop 3 add} forall 2 sub 0 exch getinterval
+} put } def /i_Str 3 string def /O_Str 4 string def /UCR {0.5 mul}
+def /BG {0.5 mul} def /min {1 index 1 index le {pop} {exch pop} ifelse}
+def /max {1 index 1 index ge {pop} {exch pop} ifelse} def /RGBtoCMYK
+{dup 0 get R_scale mul R_shift add /c_i exch def dup 1 get G_scale
+mul G_shift add /m_i exch def 2 get B_scale mul B_shift add /y_i exch
+def /k_i c_i m_i y_i min min def O_Str dup 0 255 0 c_i k_i UCR sub
+cvi max min put dup 1 255 0 m_i k_i UCR sub cvi max min put dup 2 255
+0 y_i k_i UCR sub cvi max min put dup 3 255 0 k_i BG cvi max min put
+} def /RGBtoCMYKfilter { ImageDict /Decode get aload pop 2 copy sub
+/B_scale exch def pop 255 mul 255 exch sub /B_shift exch def 2 copy
+sub /G_scale exch def pop 255 mul 255 exch sub /G_shift exch def 2
+copy sub /R_scale exch def pop 255 mul 255 exch sub /R_shift exch def
+/rtc_file ImageDict /DataSource get def ImageDict /DataSource {rtc_file
+i_Str readstring {RGBtoCMYK} if} 0 () /SubFileDecode filter put /DeviceCMYK
+setcolorspace /ncomp 4 def ImageDict /Decode [0 1 0 1 0 1 0 1] put
+} def /sep_str 8192 string def /SEP_CMYK { 0 hax_sep 4 3 index length
+1 sub { 2 index exch get 3 copy put pop 1 add } for dup 0 ne {0 exch
+getinterval}{pop pop ()} ifelse } def /SEPfilters { ncomp 4 eq { hax_sep
+3 le { /sepproc /SEP_CMYK load def ImageDict begin /Decode [ Decode
+hax_sep 2 mul 1 add get Decode hax_sep 2 mul get ] def end } { /sepproc
+{dup length 4 idiv 0 exch getinterval} def } ifelse /sep_file ImageDict
+/DataSource get def ImageDict /DataSource {sep_file sep_str readstring
+pop sepproc} 0 () /SubFileDecode filter put /DeviceGray setcolorspace
+} {hax_sep 3 ne {ImageDict /Decode [ 1 1 ] put} if } ifelse hax_sep
+4 eq {ImageDict /Decode [ 1 1 ] put} if hax_sep 5 eq {ImageDict /Decode
+[ 0 0 ] put} if } def /change_str 12288 string def /CHANGEfilter {
+/change_file ImageDict /DataSource get def ImageDict /DataSource {
+change_file change_str readstring pop 0 ncomp 2 index length ncomp
+sub { 1 index exch 2 copy ncomp getinterval changebits putinterval
+} for } 0 () /SubFileDecode filter put } def /hax_image_ { ImageDict
+/MultipleDataSources known { ImageDict /MultipleDataSources get { ImageDict
+/MultipleDataSources false put ImageDict /DataSource get length dup
+4 eq {merge_multi4} if dup 3 eq {merge_multi3} if 1 eq {ImageDict begin
+/DataSource DataSource aload pop def end} if } if } if ImageDict begin
+/DataSource dup load Width BitsPerComponent mul 7 add 8 idiv Height
+ncomp mul mul () /SubFileDecode filter def end to_change_bitmap {CHANGEfilter}
+if ncomp 3 eq to_convert_bitmap and {RGBtoCMYKfilter} if ncomp 3 ne
+to_sep_bitmap and {SEPfilters} if ImageDict ori_image } def /zero_data_str
+65532 string def /hax_imagemask { if_delblack { dup type cvlit /dicttype
+eq { /ImageDict exch def } { /ImageDict 7 dict def ImageDict begin
+/DataSource exch def /ImageMatrix exch def /Decode exch {[1 0]} {[0
+1]} ifelse def /Height exch def /Width exch def /BitsPerComponent 1
+def /ImageType 1 def end } ifelse ImageDict begin /DataSource load
+Width 7 add 8 idiv Height mul () /SubFileDecode filter end /mask_file
+exch def ImageDict /DataSource { zero_data_str 0 mask_file data_str
+readstring pop length getinterval } 0 () /SubFileDecode filter put
+ImageDict /Decode [1 0] put ImageDict ori_imagemask } {ori_imagemask}
+ifelse } def /epsilon 0.005 def /if_delblack false def /to_change_bitmap
+false def /to_convert_bitmap false def /to_sep_bitmap false def
+currentcmykcolor setcmykcolor end
+%
+ /dot_spot {dup mul exch dup mul add 1 exch sub 2 div} def 150 0 {dot_spot}
+setscreen
+%
+userdict begin
+ color_sep 0 eq
+ {/hax_setcmykcolor {maybe_black pop pop pop 1 exch sub ori_setgray} def
+ ScreenFrequency Cangle {dot_spot} setscreen}
+ {color_sep 1 eq
+ {/hax_setcmykcolor {maybe_black pop pop exch pop 1 exch sub ori_setgray} def
+ ScreenFrequency Mangle {dot_spot} setscreen}
+ {color_sep 2 eq
+ {/hax_setcmykcolor {maybe_black pop exch pop exch pop 1 exch sub ori_setgray} def
+ ScreenFrequency Yangle {dot_spot} setscreen}
+ {/hax_setcmykcolor {exch pop exch pop exch pop 1 exch sub ori_setgray} def
+ ScreenFrequency Kangle {dot_spot} setscreen}
+ ifelse
+ } ifelse
+ } ifelse
+end
+%
+userdict begin /image /hax_image load def /colorimage /hax_colorimage
+ load def /imagemask /hax_imagemask load def
+ /to_sep_bitmap true def /to_convert_bitmap true def
+end
+currentcmykcolor setcmykcolor
diff --git a/Master/texmf-dist/dvips/times/config.utm b/Master/texmf-dist/dvips/times/config.utm
new file mode 100644
index 00000000000..3c31eef1c48
--- /dev/null
+++ b/Master/texmf-dist/dvips/times/config.utm
@@ -0,0 +1 @@
+p +utm.map
diff --git a/Master/texmf-dist/dvips/tree-dvips/tree-dvips.pro b/Master/texmf-dist/dvips/tree-dvips/tree-dvips.pro
new file mode 100644
index 00000000000..2ce5859c8f1
--- /dev/null
+++ b/Master/texmf-dist/dvips/tree-dvips/tree-dvips.pro
@@ -0,0 +1,85 @@
+%!
+TeXDict begin /@beginspec{gsave texpsmatrix setmatrix treedict begin}def
+/@endspec{end grestore}def /texpsmatrix matrix defaultmatrix isls{dup[0.0 -1.0
+1.0 0.0 0.0 0.0]exch concatmatrix}if def userdict begin /bop-hook{
+/texpsmatrix matrix defaultmatrix isls{dup[0.0 -1.0 1.0 0.0 0.0 0.0]exch
+concatmatrix}if def}B end /treedict 200 dict def treedict begin /pt{72 mul
+72.07 div}def /nodemargin 2 def /nodes 100 dict def /node{/dpth exch def /hght
+exch def /wdth exch def 4 dict dup begin /x /y currentpoint dpth sub
+nodemargin sub exch 3 1 roll def nodemargin sub def /h hght dpth add
+nodemargin dup add add def /w wdth nodemargin dup add add def end nodes 3 1
+roll put}def /nodebottom{begin x w 2 div add y end}def /nodetop{begin x w 2
+div add y h add end}def /nodeleft{begin x y h 2 div add end}def /noderight{
+begin x w add y h 2 div add end}def /nodetopleft{begin x y h add end}def
+/nodetopright{begin x w add y h add end}def /nodebottomleft{begin x y end}def
+/nodebottomright{begin x w add y end}def /farright{begin x w add depth add h 2
+div y add end}def /farleft{begin x depth sub h 2 div y add end}def /farbottom{
+begin x w 2 div add y depth sub end}def /fartop{begin x w 2 div add y h add
+depth add end}def /farbottomleft{begin x depth 45 cos mul sub y depth 45 sin
+mul sub end}def /farbottomright{begin x w add depth 45 cos mul add y depth 45
+sin mul sub end}def /fartopright{begin x w add depth 45 cos mul add y h add
+depth 45 sin mul add end}def /fartopleft{begin x depth 45 cos mul sub y h add
+depth 45 sin mul add end}def /alignpoint{2 copy sub abs 1 le{add 2 div round
+dup}if}def /getnode{nodes exch get}def /nodeconnect{gsave transform 4 2 roll
+transform exch 4 1 roll alignpoint 4 2 roll alignpoint 4 1 roll exch
+itransform moveto itransform lineto stroke grestore}def /arrowdict 14 dict def
+arrowdict begin /mtrx matrix def end /arrow{arrowdict begin /headlength exch
+def /halfheadthickness exch 2 div def /tipy exch def /tipx exch def /taily
+exch def /tailx exch def /dx tipx tailx sub def /dy tipy taily sub def /angle
+dy dx atan def /savematrix mtrx currentmatrix def tipx tipy translate angle
+rotate 0 0 moveto headlength neg halfheadthickness neg lineto headlength neg
+halfheadthickness lineto closepath savematrix setmatrix end}def
+/arrownodeconnect{gsave transform 4 2 roll transform exch 4 1 roll alignpoint
+4 2 roll alignpoint 4 1 roll exch itransform 4 2 roll itransform 4 2 roll 4
+copy moveto lineto gsave newpath 4 2 roll arrowwidth arrowlength arrow fill
+grestore stroke grestore}def /barnodeconnect{4 2 roll 2 copy moveto 5 -1 roll
+add dup 3 1 roll lineto 2 index exch lineto lineto stroke}def
+/arrowbarnodeconnect{4 2 roll 2 copy moveto 5 -1 roll add dup 3 1 roll lineto
+2 index exch 4 copy lineto lineto gsave newpath 4 2 roll arrowwidth
+arrowlength arrow fill grestore stroke}def /nodetriangle{gsave exch nodes exch
+get nodebottom moveto dup nodes exch get nodetopleft lineto nodes exch get
+nodetopright lineto closepath stroke grestore}def /slope{/y1 exch def /x1 exch
+def /y0 exch def /x0 exch def y1 y0 sub x1 x0 sub div}def /midpoint{/y1 exch
+def /x1 exch def /y0 exch def /x0 exch def x1 x0 sub abs x1 x0 ge{x0 add}{x1
+add}ifelse y1 y0 sub abs y1 y0 ge{y0 add}{y1 add}ifelse}def /tancurveto{1
+index exch curveto}def /nodetancurve{/depth exch def /to exch def /from exch
+def gsave nodes from get noderight moveto nodes to get noderight tancurveto
+stroke grestore}def /rightcur{nodes exch get dup noderight 3 -1 roll farright}
+def /leftcur{nodes exch get dup nodeleft 3 -1 roll farleft}def /topcur{nodes
+exch get dup nodetop 3 -1 roll fartop}def /bottomcur{nodes exch get dup
+nodebottom 3 -1 roll farbottom}def /topleftcur{nodes exch get dup nodetopleft
+3 -1 roll fartopleft}def /toprightcur{nodes exch get dup nodetopright 3 -1
+roll fartopright}def /bottomleftcur{nodes exch get dup nodebottomleft 3 -1
+roll farbottomleft}def /bottomrightcur{nodes exch get dup nodebottomright 3 -1
+roll farbottomright}def /nodecurve{gsave 4 2 roll moveto 6 2 roll 4 2 roll
+curveto stroke grestore}def /arrownodecurve{gsave 4 2 roll moveto 6 2 roll 4 2
+roll 4 copy 10 4 roll curveto gsave newpath arrowwidth arrowlength arrow fill
+grestore stroke grestore}def /nodebox{nodes exch get begin gsave newpath x y
+moveto h w dobox cleanup stroke grestore end}def /nodecircle{nodes exch get
+begin gsave newpath w 2 div x add h 2 div y add w w mul h h mul add sqrt 2 div
+4 -1 roll add 360 0 arcn cleanup stroke grestore end}def /nodecircletrans{
+nodes exch get begin gsave newpath w 2 div x add h 2 div y add w w mul h h mul
+add sqrt 2 div 4 -1 roll add 360 0 arcn stroke grestore end}def /nodeoval{
+nodes exch get begin gsave newpath x 2 sub y 2 sub moveto h 4 add w 4 add
+dooval cleanup stroke grestore end}def /testnodeoval{nodes exch get begin
+gsave newpath h h mul w w mul add sqrt div dup dup dup w mul neg x add exch h
+mul neg y add moveto dup h mul 2 mul h add exch w mul 2 mul w add testdooval
+stroke grestore end}def /cleanup{gsave x y moveto h nodemargin sub .5 add w
+nodemargin sub .5 add doccbox 1 setgray fill grestore}def /boxdict 4 dict def
+boxdict /mtrx matrix put /dobox{boxdict begin /w exch def /h exch def
+/savematrix mtrx currentmatrix def 0 h rlineto w 0 rlineto 0 h neg rlineto
+closepath savematrix setmatrix end}def /doccbox{boxdict begin /w exch def /h
+exch def /savematrix mtrx currentmatrix def w 0 rlineto 0 h rlineto w neg 0
+rlineto closepath savematrix setmatrix end}def /ovaldict 6 dict def ovaldict
+/mtrx matrix put /dooval{ovaldict begin /w exch def /h exch def /savematrix
+mtrx currentmatrix def 0 h 2 div rmoveto 0 h 2 div nodemargin sub nodemargin h
+2 div w 2 div h 2 div rcurveto w 2 div nodemargin sub 0 w 2 div nodemargin neg
+w 2 div h 2 div neg rcurveto 0 h 2 div neg nodemargin add nodemargin neg h 2
+div neg w 2 div neg h 2 div neg rcurveto w 2 div neg nodemargin add 0 w 2 div
+neg nodemargin w 2 div neg h 2 div rcurveto savematrix setmatrix end}def
+/testdooval{ovaldict begin /w exch def /h exch def /r exch def h 2 div neg r
+mul dup h 2 div dup r mul 3 1 roll 2 r sub mul 0 h rcurveto w 2 div dup r mul
+exch 2 r sub mul w 2 div r mul dup 3 1 roll w 0 rcurveto h 2 div r mul dup h 2
+div neg dup r mul 3 1 roll 2 r sub mul 0 h neg rcurveto w 2 div neg dup r mul
+exch 2 r sub mul w 2 div neg r mul dup 3 1 roll w neg 0 rcurveto end}def end
+end
diff --git a/Master/texmf-dist/dvips/uhc/config.uhc b/Master/texmf-dist/dvips/uhc/config.uhc
new file mode 100644
index 00000000000..6b3daccb598
--- /dev/null
+++ b/Master/texmf-dist/dvips/uhc/config.uhc
@@ -0,0 +1 @@
+p +umj.map
diff --git a/Master/texmf-dist/dvips/wadalab/config.wadalab b/Master/texmf-dist/dvips/wadalab/config.wadalab
new file mode 100644
index 00000000000..9f55a08ee94
--- /dev/null
+++ b/Master/texmf-dist/dvips/wadalab/config.wadalab
@@ -0,0 +1 @@
+p +wadalab.map
diff --git a/Master/texmf-dist/dvips/xcolor/xcolor.pro b/Master/texmf-dist/dvips/xcolor/xcolor.pro
new file mode 100644
index 00000000000..e68446a7101
--- /dev/null
+++ b/Master/texmf-dist/dvips/xcolor/xcolor.pro
@@ -0,0 +1,43 @@
+%!
+%%
+%% This is file `xcolor.pro',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xcolor.dtx (with options: `dvips')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from xcolor.pro.
+%%
+%% For distribution of the original source see the terms
+%% for copying and modification in the file xcolor.dtx.
+%%
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+%%
+%% xcolor.pro (PostScript/dvips header file)
+%% [2005/10/15 v2.06 LaTeX color extensions (UK)]
+%%
+%% ----------------------------------------------------------------
+%% Copyright (C) 2003-2005 by Dr. Uwe Kern <xcolor at ukern dot de>
+%% ----------------------------------------------------------------
+%%
+userdict begin
+/setcmycolor{0 setcmykcolor}def
+/XCdef{exch dup TeXDict exch known{pop pop}{exch def}ifelse}bind def
+/XCbdef{bind XCdef}bind def
+/XCsetcolor{cvx counttomark array astore cvx exch pop XCdef}XCbdef
+/XCcmy{mark exch exec /setcmycolor XCsetcolor}XCbdef
+/XCcmyk{mark exch exec /setcmykcolor XCsetcolor}XCbdef
+/XCgray{mark exch exec /setgray XCsetcolor}XCbdef
+/XChsb{mark exch exec /sethsbcolor XCsetcolor}XCbdef
+/XCrgb{mark exch exec /setrgbcolor XCsetcolor}XCbdef
+end
+%% End of file `xcolor.pro'.
diff --git a/Master/texmf-dist/dvips/xypic/xy37dict.pro b/Master/texmf-dist/dvips/xypic/xy37dict.pro
new file mode 100644
index 00000000000..d368b669617
--- /dev/null
+++ b/Master/texmf-dist/dvips/xypic/xy37dict.pro
@@ -0,0 +1,380 @@
+%!PS-Adobe-3.0 Resource-procset
+%%Title: xy37dict.pro
+%%Version: 3.7
+%%Creator: Xy-ps backend to Xy-pic
+%%DocumentSuppliedProcSets: XYdict
+%%For: nulluse of Xy-pic
+%%BeginResource: procset XYdict
+/XYdict where not{250 dict /XYdict exch def
+ /xy{mark exch XYdict begin countdictstack /xylevel exch def
+ xyopen xycolor mark xypatt xypattern stopped xyclose end
+ cleartomark}def /xyg{gsave xy}def
+ /xyf{currentfont exch xy grestore setfont}def
+ /xycc{{xychgcol}xy}def /xyc{XYdict begin xycolstore end}def
+ /xyx{/xyYpos exch def /xyXpos exch def}def
+ /xyp{currentpoint xyx}def
+ /xyd{setupDirection XYdirection 2 mul}def
+ /xyct{currentpoint xyt 2 copy 6 2 roll}def
+ /xyt{xyXpos xyYpos 2 copy translate}def /xyr{neg rotate xynt}def
+ /xyrs{neg rotate 3 -1 roll sub neg 3 1 roll sub exch moveto xynt}def
+ /xynt{neg exch neg exch translate}def /xys{scale xynt}def
+ /xyss{scale 3 -1 roll sub neg 3 1 roll sub exch moveto xynt}def
+ /xyi{0 0 transform grestore gsave itransform}def
+ }if
+
+/XYdict where pop begin XYdict begin
+ /xyopen{currentdict /XYddict known{XYddict null eq{}
+ {XYddict begin xyopen}ifelse}if}def
+ /xyclose{countdictstack -1 xylevel 1 add{pop end}for}def
+ /xychgcol{/xycolor exch def}def /xysetcol{xypush xychgcol}def
+
+ /xypush{16 dict /XYddict exch def XYddict begin}def
+ /undef where
+ {pop /xypop{countdictstack xylevel eq{}{end}ifelse
+ currentdict /XYddict undef}def}
+ {/xypop{countdictstack xylevel eq{}{end}ifelse
+ /XYddict null def}def}ifelse
+ /pu /xypush load def /pp /xypop load def
+ /xypspt{72 72.27 div dup scale}bind def /pscorrect{.85 mul}bind def
+ /gstartxy{gsave xypspt xywidth xycap xyjoin xymiter newpath 0 0 moveto}def
+ /xypath{gstartxy rmoveto counttomark 2 idiv -1 1{pop lineto}for}def
+ /xystroke{stroke grestore}bind def
+ /xyfill{closepath fill grestore}bind def
+ /xystfil{closepath gsave fill grestore 0 setgray
+ 0 setlinewidth xystroke}bind def
+ /xyeofill{closepath eofill grestore}bind def
+
+ /xypolyline{xypath xystroke}def /xypolyfill{xypath xyfill}def
+ /xydotsep{/@ currentlinewidth 2 mul def}def
+ /xypolydot{xypath xydotsep [xydt @] 0 setdash xystroke}def
+ /xypolydash{xypath xydotsep [@ @] 0 setdash xystroke}def
+ /xypolyeofill{xypath xyeofill}def /pe /xypolyeofill load def
+ /pl /xypolyline load def /pf /xypolyfill load def
+ /pt /xypolydot load def /pd /xypolydash load def
+ /arc4pop{arcto 4{pop}repeat}bind def
+ /xyoval{gstartxy oval closepath xystroke}def
+ /xycircle{gstartxy circle xystroke}def
+ /circle{dup 0 moveto 0 0 3 -1 roll 0 360 arc}def
+ /oval{newpath 2 copy exch 5 index add 2 div exch 3 copy 10 3 roll
+ moveto 1 index dup 5 1 roll 3 index 7 index arc4pop
+ dup dup 4 1 roll 4 index exch 6 index arc4pop
+ 1 index dup 8 1 roll 4 index 4 index arc4pop
+ arc4pop closepath}def
+ /xyellipse{gstartxy counttomark 1 gt{squarify pop pop 1}if
+ circle xystroke}def
+ /ov /xyoval load def /ox /xyellipse load def
+ /dotit{dup currentlinewidth 6 mul div round div
+ /@ exch def [xydt @] 0 setdash}def
+ /elldash{dup 4 -1 roll 10 exch div dashit}def
+ /ovdash{dup 10 dashit}def
+ /dashit{div round 2 mul div /@ exch def [@ @] 0 setdash}def
+ /dotcirc{gstartxy cirlen dotit circle xystroke}def
+ /dashcirc{gstartxy cirlen dashit circle xystroke}def
+ /dotoval{gstartxy 5 copy ovlen dotit oval xystroke}def
+ /dashoval{gstartxy 5 copy ovlen ovdash oval xystroke}def
+ /cirlen{dup 6.283185 mul}bind def
+ /ovlen{3 -1 roll sub 3 1 roll sub add exch 1.716815 mul sub}def
+ /dotellipse{gstartxy counttomark 1 gt{squarify pop pop 1}if
+ cirlen dotit circle closepath xystroke}def
+ /dashellipse{gstartxy counttomark 1 gt{squarify add 2 div 1}
+ {1 exch 1 exch}ifelse cirlen elldash circle xystroke}def
+ /ot /dotellipse load def /od /dashellipse load def
+ /vt /dotoval load def /vd /dashoval load def
+ /filloval{gstartxy oval xyfill}def
+ /stfiloval{gstartxy oval xystfil}def
+ /fillcircle{gstartxy circle xyfill}def
+ /stfilcircle{gstartxy circle xystfil}def
+ /fillellipse{gstartxy squarify pop pop 1 circle xyfill}def
+ /stfilellipse{gstartxy squarify pop pop 1 circle xystfil}def
+ /squarify{4 copy sub 2 div 3 1 roll sub 2 div translate
+ add 2 div 3 1 roll add 2 div 2 copy scale
+ 2 copy add 2 div currentlinewidth exch div setlinewidth
+ newpath}def
+ /fe /fillellipse load def /sfe /stfilellipse load def
+ /fo /filloval load def /sfo /stfiloval load def
+ /fc /fillcircle load def /sfc /stfilcircle load def
+ /xywidth{.4 pscorrect setlinewidth}bind def
+ /xydash{[] 0 setdash}bind def /xycap{1 setlinecap}bind def
+ /xyjoin{1 setlinejoin}bind def /xymiter{10 setmiterlimit}bind def
+
+ /cc{dup exec xychgcol}def
+ /lw{dup setlinewidth /@l exch def
+ /xywidth{@l setlinewidth}bind def}def
+ /lc{dup setlinecap /@c exch def
+ /xycap{@c setlinecap}bind def}def
+ /lj{dup setlinejoin /@j exch def
+ /xyjoin{@j setlinejoin}bind def}def
+ /ml{dup setmitrelimit /@m exch def
+ /xymiter{@m setmitrelimit}bind def}def
+
+ /setupDirection{dup -2048 lt{3072 add neg 1024 exch}
+ {dup 0 lt{1024 add neg -1024}{dup 2048 lt{1024 sub -1024 exch}
+ {3072 sub 1024}ifelse}ifelse}ifelse atan
+ dup 180 gt{360 sub}if dup /XYdirection exch def rotate}def
+
+ userdict begin
+ /gray{setgray}bind def /gray@{setgray}bind def
+ /rgb{setrgbcolor}bind def /rgb@{setrgbcolor}bind def
+ /hsb{sethsbcolor}bind def /hsb@{sethsbcolor}bind def
+ /setcmykcolor where{pop}{/setcmykcolor{dup 3 1 roll dup 5 1 roll
+ exch sub 1 add 5 1 roll exch sub 1 add 4 1 roll
+ exch sub 1 add 3 1 roll setrgbcolor}bind def}ifelse
+ /cmyk{setcmykcolor}bind def /cmyk@{setcmykcolor}bind def
+ /sethalftone where{/sethalftone load /tone exch def}if
+ /xycolarray 3 array def /xycolstore{currentrgbcolor 2 -1 0
+ {exch xycolarray 3 1 roll put}for}def xycolstore
+ /xycolor{0 1 2{xycolarray exch get}for setrgbcolor}def
+ /xypatt{}def /xypattern{cleartomark}bind def
+ end
+end end
+/XYdict where pop begin XYdict begin
+/:patt
+{XYddict begin
+14 dict begin
+/BGnd exch def
+/FGnd exch def
+/PaintData exch def
+/PatternType 1 def
+/PaintType 1 def
+/BBox[0 0 1 1]def
+/TilingType 1 def
+/XStep 1 def
+/YStep 1 def
+/PatternMtx[24 0 0 24 0 0]def
+/PaintProc BGnd null ne
+ {{begin BGnd aload pop setrgbcolor 0 0 1 1 rF
+ FGnd aload pop setrgbcolor
+ 24 24 true PatternMtx PaintData imagemask end}}
+ {{begin FGnd aload pop setrgbcolor
+ 24 24 true PatternMtx PaintData imagemask end}}
+ ifelse def
+ currentdict PatternMtx end
+ gsave patangle xyland{180 add}if
+ rotate macfreq patfreq div dup neg exch scale matrix currentmatrix
+ grestore gsave setmatrix /DeviceRGB setcolorspace makepattern grestore
+ end}def
+/rF{gsave
+ newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto
+ fill grestore}bind def
+ /setpatscreen{/pattstring exch store patfreq
+ patangle xyport not{90 add}if
+ {1 add 4 mul cvi pattstring exch get exch 1 add 4 mul cvi 7 sub
+ bitshift 1 and}setscreen}bind def
+ /setcolpattern{setpatscreen 64 div 1 exch sub currentrgbcolor
+ 1 1 3{pop 1 exch sub 3 index mul 1 exch sub 3 1 roll}for
+ setrgbcolor pop}def
+ /setgraypattern{setpatscreen 64 div setgray}def
+ /macfreq 9.375 def /patangle 0 def /patfreq 12.5 def
+/checkland{ /normland where{pop normland not}{false}ifelse
+ /xyland exch def
+ /por where{pop por}{/isls where{pop isls not /xyland true def}
+ {/land where{pop land not}{true}
+ ifelse}ifelse}ifelse /xyport exch def}def
+ /setpatfreq{/patfreq exch def}def
+ /setpatangle{/patangle exch def}def
+ /setbackcolor{/backcolor exch def}def
+ /setforecolor{/forecolor exch def}def
+ [1 1 1] setbackcolor xycolarray setforecolor
+ /bg /setbackcolor load def /fg /setforecolor load def
+ /pa /setpatangle load def /pq /setpatfreq load def
+ /xypattern{checkland counttomark dup 0 eq{pop}
+ {dup 1 eq{pop setpatscreen}
+ {dup 2 eq{pop setcolpattern}
+ {dup 3 eq{pop
+ /setcolorspace where {
+ /.setcolorspace where{pop pop pop setcolpattern}
+ {/.buildpattern where {pop
+ forecolor backcolor :patt setpattern
+ }{pop pop setcolpattern}ifelse}ifelse}
+ {pop setcolpattern}ifelse}
+ {5 eq{/setcolorspace where{
+ /.setcolorspace where{pop pop pop pop pop setcolpattern}
+ {/.buildpattern where {pop
+ :patt setpattern
+ }{pop pop pop pop setcolpattern}ifelse}ifelse}
+ {pop pop pop setcolpattern}ifelse
+ }{}ifelse}ifelse}ifelse}ifelse}ifelse cleartomark }def
+ /xysetpattern{/xypatt exch def}def
+ /sp /xysetpattern load def
+end end
+/XYdict where pop begin XYdict begin
+ /xysize 10 def /T true def /F false def
+ /dimendiv{65536 div}bind def
+ /xysegl 327680 dimendiv def
+ /xyopp{1 -1 scale}bind def
+ /xynormwidth{26213 dimendiv pscorrect}bind def
+ /xywidth{xynormwidth setlinewidth}bind def
+
+ /xyfont{4096 add 64 div round 64 mul 4096 sub}def /xydt 0.01 def
+ /xysdfont{4096 add 32 div round 32 mul 4096 sub}def
+ /xydots{xywidth 1 setlinecap [xydt 2] 0 setdash}bind def
+ /f /xyfont load def /fs /xysdfont load def
+ /xyCheckDir{dup 8 div 3 mul 3 -1 roll sub neg exch div 360 mul
+ dup dup XYdirection sub 180 div round 180 mul XYdirection add
+ dup 3 -1 roll sub abs 10 gt not{exch}if pop}def
+
+ /xyrulth{26213 dimendiv pscorrect setlinewidth
+ 0 setlinecap}bind def
+
+ /gsavexy{gsave xypspt XYdirection rotate xywidth newpath 0 0 moveto}def
+ /gchksavexy{gsave xypspt setupDirection xywidth newpath 0 0 moveto}def
+
+ /xyswap{XYdirection 180 add /XYdirection exch def}def
+ /xyline{gstartxy setupDirection rlineto xystroke}def
+
+ /dash{exch gchksavexy xysegl XYdirection dup
+ -90 lt{pop neg}{90 gt{neg}if}ifelse exch{neg}if
+ 0 rlineto xystroke}def
+ /stopper{gstartxy setupDirection 0 xysegl 2 div rmoveto
+ 0 xysegl neg rlineto xystroke }def
+ /d /dash load def /st /stopper load def
+ /solid{gstartxy xydash neg exch neg exch rlineto xystroke}def
+ /dashed{gstartxy 2 copy dup mul exch dup mul add sqrt dup
+ xysegl add xysegl 2 mul div round 2 mul 1 sub div [ exch dup ] 0 setdash
+ neg exch neg exch rlineto xystroke}def
+ /l /solid load def /dd /dashed load def
+ /dot{gstartxy 2 setlinecap [xydt 2] 0 setdash
+ 1 0 rlineto xystroke}def
+ /dotted{gstartxy 2 copy dup mul exch dup mul add sqrt dup
+ 2 div round 1 add div 2 setlinecap [xydt 3 -1 roll] 0 setdash
+ neg exch neg exch rlineto 0 0 rlineto xystroke}def
+ /p /dot load def /dt /dotted load def
+ /cubic{gstartxy docubic} def
+ /docubic{chkvalid
+ {chkcubedge 8 -2 roll moveto curveto xystroke pop}
+ {cleartomark grestore}ifelse}def
+ /chkcubedge{2 copy 1.0 eq{0.0 eq{pop pop}{cubicedge}ifelse}
+ {pop cubicedge}ifelse}def
+ /bz /cubic load def
+ /dotcubic{gstartxy 1 setlinecap [xydt 2] 0 setdash docubic}def
+ /dashcubic{gstartxy [5 5] 0 setdash docubic}def
+ /bt /dotcubic load def /bd /dashcubic load def
+ /squine{gstartxy dosquine}def
+ /dosquine{chkvalid
+ {chksquedge 2 copy moveto xysq2cub curveto xystroke pop}
+ {cleartomark grestore}ifelse}def
+ /q /squine load def
+ /chkvalid{2 copy lt{dup 1 gt{false}{true}ifelse}{false}ifelse}def
+
+ /chksquedge{2 copy 1.0 eq{0.0 eq{pop pop}{squineedge}ifelse}
+ {pop squineedge}ifelse}def
+ /xysq2cub{xysq2cubit 6 1 roll xysq2cubit 6 1 roll 3 index 3 index
+ xysq2cubit 6 1 roll xysq2cubit 6 1 roll pop pop}def
+ /xysq2cubit{2 index 2 mul add 3 div}def
+
+ /dotsquine{gstartxy 1 setlinecap [xydt 2] 0 setdash dosquine}def
+ /dashsquine{gstartxy [5 5] 0 setdash dosquine}def
+ /qt /dotsquine load def /qd /dashsquine load def
+/xy4mul{8 copy
+ 5 -1 roll mul 5 1 roll 6 -1 roll mul 6 1 roll
+ 3 -1 roll mul exch 4 -1 roll mul 3 1 roll
+ add 3 1 roll add exch 10 2 roll
+ 7 -1 roll mul 7 1 roll 4 -1 roll mul 5 1 roll
+ 4 -1 roll mul 4 1 roll mul add 3 1 roll add
+ exch 3 -1 roll }def
+
+ /xy44mul{4 copy 16 4 roll exch 3 1 roll 4 copy 12 4 roll
+ xy4mul 12 4 roll xy4mul 12 -4 roll 4 copy 16 4 roll
+ 8 4 roll xy4mul 12 4 roll xy4mul}def
+
+ /cubicedge{10 2 roll exch 8 1 roll 3 -1 roll dup dup 9 2 roll
+ 5 -1 roll dup dup 9 1 roll 8 3 roll
+ 4 1 roll dup dup 5 3 roll dup dup 5 1 roll 3 -1 roll
+ 18 -2 roll 2 copy 1 sub neg 4 1 roll 1 sub neg exch 4 1 roll
+ xy444mul
+ pop pop pop 13 1 roll pop pop pop 9 1 roll 10 1 roll
+ pop 8 1 roll 7 1 roll 8 1 roll pop 5 1 roll 3 1 roll}def
+
+ /xy444mul{4 copy 24 4 roll 12 -4 roll 16 4 roll 4 copy 16 4 roll
+ xy44mul 20 8 roll xy44mul
+ 12 -4 roll 4 -1 roll 7 1 roll exch 4 1 roll exch 6 -1 roll exch
+ 4 2 roll 16 8 roll 8 4 roll
+ 4 -1 roll 7 1 roll exch 4 1 roll exch 6 -1 roll exch 4 2 roll
+ 8 4 roll 16 4 roll 8 4 roll 20 -4 roll exch 3 1 roll
+ 4 copy 20 4 roll 4 copy 16 4 roll 4 copy 12 4 roll
+ xy4mul 28 4 roll xy4mul 20 4 roll xy4mul 12 4 roll xy4mul}def
+
+ /squineedge{8 2 roll
+ exch 5 1 roll 3 -1 roll dup 6 2 roll 1 index exch
+ 10 -2 roll 2 copy 1 sub neg 4 1 roll 1 sub neg exch 4 1 roll
+ xy44mul 4 1 roll pop 5 1 roll 6 1 roll 3 -1 roll pop}def
+
+ /xyshort{2 copy abs exch abs add xysegl .5 mul lt
+ {pop pop grestore}{rlineto xystroke}ifelse}def
+
+ /tipwidth{xywidth xynormwidth dup currentlinewidth exch div
+ sqrt dup dup scale mul setlinewidth 1 setlinecap}def
+
+ /halftip{tipwidth xysize 10 div 0 0 moveto
+ -.25 0 3 -1 roll -2.5 mul 0 xysize 2 div neg
+ dup .62 mul 2 div neg curveto}bind def
+
+/atip{gchksavexy halftip xystroke}def
+ /btip{gchksavexy xyopp halftip xystroke}def
+ /tip{gchksavexy gsave halftip stroke grestore
+ xyopp halftip xystroke}def
+ /t /tip load def /a /atip load def /b /btip load def
+/cmatip{gchksavexy halfcmtip xystroke}def
+ /cmbtip{gchksavexy xyopp halfcmtip xystroke}def
+ /cmtip{gchksavexy gsave halfcmtip stroke grestore
+ xyopp halfcmtip xystroke}def
+ /halfcmtip{tipwidth 0 0 moveto
+ -.1333 0 .25 neg dup .125 3 -1 roll .25 curveto}bind def
+ /ct /cmtip load def /ca /cmatip load def /cb /cmbtip load def
+ /xyfscale{/xyfsize exch def}def /xyfsize{10}def
+ /eu{-0.0551 0.0643 -0.0976 0.1386 -0.125 0.2188}def
+ /cm{-0.105 0.0437 -0.1804 0.1380 -0.2 0.25}def
+ /XY{-0.1753 0.0181 -0.3452 0.0708 -0.5 0.155}def
+ /tipstart{3 -1 roll gchksavexy exch xyfscale tipwidth dup XYdict exch
+ known{dup /xy eq{pop /XY}if}{pop /XY}ifelse XYdict exch get}def
+ /tipend{halfxytip xystroke}def
+ /halfxytip{1 1 6{pop xyfsize mul 6 1 roll}for 0 0 moveto curveto}def
+ /A{tipstart D}def /B{tipstart C}def /C{xyopp D}def /D{exec tipend}def
+ /AB{tipstart dup gsave exec halfxytip stroke grestore C}def
+
+ /Tip{exch gchksavexy /xyfsize{10}def tipwidth gsave
+ dup XYdict exch known{dup /xy eq{pop /XT}if}{pop /XT}ifelse
+ XYdict exch get dup
+ halfTip stroke grestore xyopp halfTip xystroke}def
+ /XT{360 32 div neg}def /Xt{-1 .31 mul 1 atan}def
+ /ET{360 64 div 5 mul neg}def /Et{-1 .31 mul 1 atan}def
+ /halfTip{exec rotate XY halfxytip}def /halfTtip{halfTip}def
+ /Ttip{exch gchksavexy /xyfsize{10}def tipwidth gsave
+ dup XYdict exch known{dup /xy eq{pop /Xt}if}{pop /Xt}ifelse
+ XYdict exch get dup
+ halfTtip stroke grestore xyopp halfTtip xystroke}def
+ /tt /Tip load def /tT /Ttip load def
+/halfturn{xysegl 2 div dup dup neg exch rmoveto
+ 0 exch dup exch -180 -90 arc}bind def
+ /aturn{gchksavexy halfturn xystroke}def
+ /bturn{gchksavexy xyopp halfturn xystroke}def
+ /ta /aturn load def /tb /bturn load def
+ /xysqll 231705 dimendiv def
+ /squigl{gchksavexy xysqll dup neg 0 rmoveto
+ 2 div dup dup neg dup 3 -1 roll
+ 2 sqrt mul dup 5 1 roll
+ 135 45 arcn dup 3 -1 roll -135 -45 arc
+ xystroke}def
+ /g /squigl load def
+/fullhook{0 xysegl 2 div dup -90 90 arcn}bind def
+ /halfhook{xysegl 2 div dup 0 exch 180 90 arcn}bind def
+
+/ahook{gchksavexy fullhook xystroke}def
+ /bhook{gchksavexy xyopp fullhook xystroke}def
+ /hook{gchksavexy gsave halfhook stroke grestore
+ xyopp halfhook xystroke}def
+ /h /hook load def /ha /ahook load def /hb /bhook load def
+ /xyqcirc{dup dup neg exch translate newpath
+ dup neg 0 exch moveto 0 0 3 -1 roll -90 0 arc}bind def
+
+ /circ{gstartxy
+ 3 copy pop 2 copy cos mul 3 1 roll sin mul
+ rmoveto 0 0 5 2 roll arc xystroke}bind def
+ /o /circ load def
+ /circhar{gsave dup 3 gt{7 sub neg}if dup
+ 3 eq{pop dup 2 sqrt -2 div mul}{dup 1 eq{pop dup 2 sqrt 2 div mul}
+ {0 eq{dup}{0}ifelse}ifelse}ifelse
+ 0 translate 3 1 roll circ grestore}bind def
+ /c /circhar load def
+end end
+%%EndResource
diff --git a/Master/texmf-dist/dvips/zapfchan/config.uzc b/Master/texmf-dist/dvips/zapfchan/config.uzc
new file mode 100644
index 00000000000..e22f542c4b4
--- /dev/null
+++ b/Master/texmf-dist/dvips/zapfchan/config.uzc
@@ -0,0 +1 @@
+p +uzc.map
diff --git a/Master/texmf-dist/dvips/zapfding/config.uzd b/Master/texmf-dist/dvips/zapfding/config.uzd
new file mode 100644
index 00000000000..46bf7d5dcee
--- /dev/null
+++ b/Master/texmf-dist/dvips/zapfding/config.uzd
@@ -0,0 +1 @@
+p +uzd.map
diff --git a/Master/texmf-dist/dvips/zefonts/slantcm.cfg b/Master/texmf-dist/dvips/zefonts/slantcm.cfg
new file mode 100644
index 00000000000..4dea883ef92
--- /dev/null
+++ b/Master/texmf-dist/dvips/zefonts/slantcm.cfg
@@ -0,0 +1 @@
+p +slantcm.map