summaryrefslogtreecommitdiff
path: root/graphics/pstricks/base/generic
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /graphics/pstricks/base/generic
Initial commit
Diffstat (limited to 'graphics/pstricks/base/generic')
-rw-r--r--graphics/pstricks/base/generic/pst-fp.tex717
-rw-r--r--graphics/pstricks/base/generic/pst-key.tex101
-rw-r--r--graphics/pstricks/base/generic/pstricks-tex.def85
-rw-r--r--graphics/pstricks/base/generic/pstricks-xetex.def34
-rw-r--r--graphics/pstricks/base/generic/pstricks.con360
-rw-r--r--graphics/pstricks/base/generic/pstricks.tex4595
-rw-r--r--graphics/pstricks/base/generic/pstricks97.tex2626
7 files changed, 8518 insertions, 0 deletions
diff --git a/graphics/pstricks/base/generic/pst-fp.tex b/graphics/pstricks/base/generic/pst-fp.tex
new file mode 100644
index 0000000000..2d4e748193
--- /dev/null
+++ b/graphics/pstricks/base/generic/pst-fp.tex
@@ -0,0 +1,717 @@
+%% $Id: pst-fp.tex 465 2017-05-22 17:50:57Z herbert $
+%%
+%%
+%% This is file `pst-fp.tex',
+%%
+%% IMPORTANT NOTICE:
+%%
+%% Package `pst-fp.tex'
+%%
+%% Herbert Voss <hvoss@tug.org>
+%% stolen from the fp package by Michael Mehlich
+%%
+%% 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-fp' is a PSTricks related package for a division,
+%% multiplication and addition
+%%
+\csname PSTFPloaded\endcsname
+\let\PSTFPloaded\endinput
+%
+% Requires some packages
+\ifx\PSTricksLoaded\endinput\else\input pstricks \fi
+%
+\def\fileversion{0.05}
+\def\filedate{2010/01/17}
+\message{`pst-fp' v\fileversion, \filedate\space (hv)}
+%
+\edef\PstAtCode{\the\catcode`\@} \catcode`\@=11\relax
+
+%fixed point arithmetic with values between (including)
+% -999999999999999999.999999999999999999
+% and +999999999999999999.999999999999999999
+
+\def\pstFPadd#1#2#3{\pstFP@callc\pstFP@add#1{#2}{#3}+\relax} % #1 := #2+#3
+\def\pstFPsub#1#2#3{\pstFP@callc\pstFP@add#1{#2}{-#3}-\relax}% #1 := #2-#3
+\def\pstFPmul#1#2#3{\pstFP@callc\pstFP@mul#1{#2}{#3}} % #1 := #2*#3
+\def\pstFPdiv#1#2#3{\pstFP@callc\pstFP@div#1{#2}{#3}} % #1 := #2/#3
+
+\def\pst@int#1{\expandafter\pst@@int#1..\@nil}
+\def\pst@@int#1.#2.\@nil{#1}
+\def\pst@Int#1{%
+ \@tempdima=#1\relax%
+ \expandafter\pst@@Int\the\@tempdima\@nil}
+\def\pst@@Int#1.#2\@nil{#1}
+
+%
+\def\pstFPMul#1#2#3{\pstFP@callc\pstFP@mul#1{#2}{#3}% % #1 := int(#2*#3)
+ \edef#1{\pst@int{#1}}}%
+\def\pstFPDiv#1#2#3{\pstFP@callc\pstFP@div#1{#2}{#3}% % #1 := int(#2/#3)
+ \edef#1{\pst@int{#1}}}%
+\def\pstFPstripZeros#1#2{\pst@dimm=#1pt\relax \edef#2{\strip@pt\pst@dimm}}
+%
+\countdef\pstFP@actcounter=10 % register 0 for counter
+\ifnum\pstFP@actcounter<60\relax \pstFP@actcounter=60\fi
+
+\newcount\pstFP@xs %sign of 1st value
+\newcount\pstFP@xia%integer part of 1st value
+\newcount\pstFP@xib%integer part of 1st value
+\newcount\pstFP@xfa%fractional part of 1st value
+\newcount\pstFP@xfb%fractional part of 1st value
+
+\countdef\pstFP@ys=5 %sign of 2nd value
+\countdef\pstFP@yia=6%integer part of 2nd value
+\countdef\pstFP@yib=7%integer part of 2nd value
+\countdef\pstFP@yfa=8%fractional part of 2nd value
+\countdef\pstFP@yfb=9%fractional part of 2nd value
+
+\countdef\pstFP@xk=10 %registers for splitting 1st value
+\countdef\pstFP@xl=11
+\countdef\pstFP@xm=12
+\countdef\pstFP@xn=13
+\countdef\pstFP@xo=14
+\countdef\pstFP@xp=15
+\countdef\pstFP@xq=16
+\countdef\pstFP@xr=17
+\countdef\pstFP@xz=18
+\countdef\pstFP@xt=19
+\countdef\pstFP@xu=20
+\countdef\pstFP@xv=21
+
+\countdef\pstFP@yk=22 %registers for splitting 2nd value
+\countdef\pstFP@yl=23
+\countdef\pstFP@ym=24
+\countdef\pstFP@yn=25
+\countdef\pstFP@yo=26
+\countdef\pstFP@yp=27
+\countdef\pstFP@yq=28
+\countdef\pstFP@yr=29
+\countdef\pstFP@yz=30
+\countdef\pstFP@yt=31
+\countdef\pstFP@yu=32
+\countdef\pstFP@yv=33
+
+\newcount\pstFP@rega %auxiliary registers
+\newcount\pstFP@regb
+\countdef\pstFP@regc=36
+\countdef\pstFP@regd=37
+\countdef\pstFP@rege=38
+
+\countdef\pstFP@rs=39 %result registers
+\countdef\pstFP@ria=40
+\countdef\pstFP@rib=41
+\countdef\pstFP@rfa=42
+\countdef\pstFP@rfb=43
+
+\newcount\pstFP@regs %local auxiliary registers
+\countdef\pstFP@count=45
+\countdef\pstFP@res=46
+\countdef\pstFP@shift=47
+\newcount\pstFP@times
+\countdef\pstFP@prod=49
+
+%auxiliary macros which may be used in all of the following macros
+\newif\ifpstFP@test
+
+\def\pstFP@ignorenext#1{}
+\def\pstFP@first#1#2\relax{#1}
+\def\pstFP@swallow#1\relax{}
+%
+\def\ifpstFP@zero#1{%
+ \ifnum
+ \expandafter\ifnum\csname pstFP@#1ia\endcsname=0 0\else1\fi
+ \expandafter\ifnum\csname pstFP@#1ib\endcsname=0 0\else1\fi
+ \expandafter\ifnum\csname pstFP@#1fa\endcsname=0 0\else1\fi
+ \expandafter\ifnum\csname pstFP@#1fb\endcsname=0 0\else1\fi%
+ =0\relax
+}
+%
+%read value
+%
+\def\pstFP@correctintcounter#1\relax{%
+ {\edef\pstFP@tmp{#1}%
+ \pstFP@count=0\relax%
+ \loop%
+ \edef\pstFP@tmpa{\expandafter\pstFP@first\pstFP@tmp\noexpand\relax}%
+ \expandafter\ifx\pstFP@tmpa0\relax%
+ \advance\pstFP@count1\relax%
+ \edef\pstFP@tmp{\expandafter\pstFP@ignorenext\pstFP@tmp}%
+ \repeat%
+ \ifnum\pstFP@count>18\relax \typeout{>>>> Overflow}\fi%
+ \expandafter\if!\pstFP@tmp!%
+ \advance\pstFP@count-18\relax%
+ \pstFP@count=-\pstFP@count%
+ \loop%
+ \ifnum\pstFP@count>0\relax%
+ \pstFP@regc=\pstFP@rega%
+ \divide\pstFP@rega10\relax\multiply\pstFP@rega10\relax%
+ \advance\pstFP@regc-\pstFP@rega\multiply\pstFP@regc100000000\relax%
+ \divide\pstFP@rega10\relax%
+ \divide\pstFP@regb10\relax\advance\pstFP@regb\pstFP@regc%
+ \advance\pstFP@count-1\relax%
+ \repeat%
+ \global\pstFP@rega=\pstFP@rega%
+ \global\pstFP@regb=\pstFP@regb%
+ \else%
+ \typeout{>>>>Number too big}%
+ \fi%
+ }%
+}
+\def\pstFP@@setintcounter#1#2#3#4#5#6#7#8#9{%
+ \pstFP@regb=#1#2#3#4#5#6#7#8#9\relax%
+ \pstFP@correctintcounter%
+}
+\def\pstFP@setintcounter#1#2#3#4#5#6#7#8#9{%
+ \pstFP@rega=#1#2#3#4#5#6#7#8#9\relax%
+ \pstFP@@setintcounter%
+}
+
+\def\pstFP@@setfractcounter#1#2#3#4#5#6#7#8#9{%
+ \pstFP@regb=#1#2#3#4#5#6#7#8#9\relax%
+ \pstFP@swallow%
+}
+\def\pstFP@setfractcounter#1#2#3#4#5#6#7#8#9{%
+ \pstFP@rega=#1#2#3#4#5#6#7#8#9\relax%
+ \pstFP@@setfractcounter%
+}
+
+\def\pstFP@getsign#1\relax{%
+ {\pstFP@regs=1\relax%
+ \edef\pstFP@tmp{#1}%
+ \loop%
+ \edef\pstFP@tmpa{\expandafter\pstFP@first\pstFP@tmp\noexpand\relax}%
+ \expandafter\ifx\pstFP@tmpa-\relax%
+ \multiply\pstFP@regs-1\relax%
+ \fi%
+ \ifnum\expandafter\ifx\pstFP@tmpa-1\else0\fi\expandafter\ifx\pstFP@tmpa+1\else0\fi>0%
+ \edef\pstFP@tmp{\expandafter\pstFP@ignorenext\pstFP@tmp}%
+ \repeat%
+ \global\let\pstFP@tmp\pstFP@tmp%
+ \global\pstFP@regs=\pstFP@regs%
+ }%
+}
+
+\def\pstFP@removeleadingzeros#1\relax{%
+ {\edef\pstFP@tmp{#1}%
+ \loop%
+ \edef\pstFP@tmpa{\expandafter\pstFP@first\pstFP@tmp\noexpand\relax}%
+ \expandafter\ifx\pstFP@tmpa0\relax%
+ \edef\pstFP@tmp{\expandafter\pstFP@ignorenext\pstFP@tmp}%
+ \repeat%
+ \global\let\pstFP@tmp\pstFP@tmp%
+ }%
+}
+
+\newif\ifpstFP@nonstop
+\def\pstFP@strip#1{%
+ {\edef\pstFP@tmp{#1}%
+ \edef\pstFP@tmpb{}%
+ \ifx\pstFP@tmp\@empty\else%
+ \pstFP@nonstoptrue%
+ \loop%
+ \edef\pstFP@tmpa{\expandafter\pstFP@first\pstFP@tmp\noexpand\relax}%
+ \expandafter\ifx\pstFP@tmpa-\relax\edef\pstFP@tmpb{\pstFP@tmpb\pstFP@tmpa}\else%
+ \expandafter\ifx\pstFP@tmpa+\relax\edef\pstFP@tmpb{\pstFP@tmpb\pstFP@tmpa}\else%
+ \expandafter\ifx\pstFP@tmpa0\relax\edef\pstFP@tmpb{\pstFP@tmpb\pstFP@tmpa}\else%
+ \expandafter\ifx\pstFP@tmpa1\relax\edef\pstFP@tmpb{\pstFP@tmpb\pstFP@tmpa}\else%
+ \expandafter\ifx\pstFP@tmpa2\relax\edef\pstFP@tmpb{\pstFP@tmpb\pstFP@tmpa}\else%
+ \expandafter\ifx\pstFP@tmpa3\relax\edef\pstFP@tmpb{\pstFP@tmpb\pstFP@tmpa}\else%
+ \expandafter\ifx\pstFP@tmpa4\relax\edef\pstFP@tmpb{\pstFP@tmpb\pstFP@tmpa}\else%
+ \expandafter\ifx\pstFP@tmpa5\relax\edef\pstFP@tmpb{\pstFP@tmpb\pstFP@tmpa}\else%
+ \expandafter\ifx\pstFP@tmpa6\relax\edef\pstFP@tmpb{\pstFP@tmpb\pstFP@tmpa}\else%
+ \expandafter\ifx\pstFP@tmpa7\relax\edef\pstFP@tmpb{\pstFP@tmpb\pstFP@tmpa}\else%
+ \expandafter\ifx\pstFP@tmpa8\relax\edef\pstFP@tmpb{\pstFP@tmpb\pstFP@tmpa}\else%
+ \expandafter\ifx\pstFP@tmpa9\relax\edef\pstFP@tmpb{\pstFP@tmpb\pstFP@tmpa}\else%
+ \ifx\pstFP@tmpa\@empty\pstFP@nonstopfalse\else%
+ \ifx\pstFP@tmpa\space\pstFP@nonstopfalse\else%
+ \typeout{>>> Illegal character \pstFP@tmpa\space found in float number}%
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi%
+ \edef\pstFP@tmp{\expandafter\pstFP@ignorenext\pstFP@tmp}%
+ \ifx\pstFP@tmp\@empty\pstFP@nonstopfalse\fi%
+ \ifpstFP@nonstop%
+ \repeat%
+ \fi%
+ \global\let\pstFP@tmp\pstFP@tmpb%
+ }%
+}
+
+\def\pstFP@readvalue#1#2#3{%
+ % #1 macro family to catch the value
+ % #2.#3 value
+ %
+ % regular expression [+|-]*[d]_0^18.[d]*
+ %
+ \pstFP@strip{#2}%
+ %sign
+ \expandafter\pstFP@getsign\pstFP@tmp\relax%
+ \csname pstFP@#1s\endcsname=\pstFP@regs%
+ %
+ %integer part
+ \pstFP@removeleadingzeros\pstFP@tmp\relax%
+ \expandafter\pstFP@setintcounter\pstFP@tmp000000000000000000\relax%
+ \csname pstFP@#1ia\endcsname=\pstFP@rega%
+ \csname pstFP@#1ib\endcsname=\pstFP@regb%
+ %
+ %fractional part
+ \pstFP@strip{#3}%
+ \expandafter\pstFP@setfractcounter\pstFP@tmp000000000000000000\relax%
+ \csname pstFP@#1fa\endcsname=\pstFP@rega%
+ \csname pstFP@#1fb\endcsname=\pstFP@regb%
+ %
+ %correct sign
+ \ifnum\pstFP@rega=0\relax%
+ \ifnum\pstFP@regb=0\relax%
+ \expandafter\ifnum\csname pstFP@#1ib\endcsname=0\relax%
+ \expandafter\ifnum\csname pstFP@#1ia\endcsname=0\relax%
+ \csname pstFP@#1s\endcsname=1\relax%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+}
+%
+%store value in macro
+%
+\def\pstFP@store#1#2{%
+ % #1 macro
+ % #2 macro family (value) to store
+ %
+ \ifpstFP@zero{#2}%
+ \csname pstFP@#2s\endcsname=1\relax%
+ \fi%
+ \expandafter\ifnum\csname pstFP@#2s\endcsname<0\relax%
+ \edef#1{-}%
+ \else%
+ \edef#1{}%
+ \fi%
+ \expandafter\ifnum\csname pstFP@#2ia\endcsname=0\relax%
+ \expandafter\ifnum\csname pstFP@#2ib\endcsname=0\relax%
+ \edef#1{#10}%
+ \else%
+ \edef#1{#1\expandafter\the\csname pstFP@#2ib\endcsname}%
+ \fi%
+ \else%
+ \expandafter\advance\csname pstFP@#2ib\endcsname1000000000\relax%
+ \edef#1{#1\expandafter\the\csname pstFP@#2ia\endcsname\expandafter\pstFP@ignorenext\the\csname pstFP@#2ib\endcsname}%
+ \fi%
+ \expandafter\advance\csname pstFP@#2fa\endcsname1000000000\relax%
+ \expandafter\advance\csname pstFP@#2fb\endcsname1000000000\relax%
+ \edef#1{#1\noexpand.\expandafter\pstFP@ignorenext\the\csname pstFP@#2fa\endcsname\expandafter\pstFP@ignorenext\the\csname pstFP@#2fb\endcsname}%
+}
+%macros to expand some arguments
+%
+\def\pstFP@callc#1#2#3#4{%
+ % #1 macro to call
+ % #2 macro, which gets the result
+ % #3 1st value
+ % #4 2nd value
+ % expand the values and split them into the integer and the fractional parts
+ \edef\next{\noexpand#1\noexpand#2#3..\noexpand\relax#4..\noexpand\relax}%
+ \next%
+}
+%
+\def\pstFP@divten#1{%
+ \expandafter\pstFP@regc\csname pstFP@#1ia\endcsname%
+ \expandafter\divide\csname pstFP@#1ia\endcsname10\relax%
+ \expandafter\pstFP@regb\csname pstFP@#1ia\endcsname%
+ \multiply\pstFP@regb10\relax%
+ \advance\pstFP@regc-\pstFP@regb%
+ \multiply\pstFP@regc100000000\relax%
+ %
+ \expandafter\pstFP@rega\csname pstFP@#1ib\endcsname%
+ \expandafter\divide\csname pstFP@#1ib\endcsname10\relax%
+ \expandafter\pstFP@regb\csname pstFP@#1ib\endcsname%
+ \multiply\pstFP@regb10\relax%
+ \advance\pstFP@rega-\pstFP@regb%
+ \multiply\pstFP@rega100000000\relax%
+ \expandafter\advance\csname pstFP@#1ib\endcsname\pstFP@regc%
+ %
+ \expandafter\pstFP@regc\csname pstFP@#1fa\endcsname%
+ \expandafter\divide\csname pstFP@#1fa\endcsname10\relax%
+ \expandafter\pstFP@regb\csname pstFP@#1fa\endcsname%
+ \multiply\pstFP@regb10\relax%
+ \advance\pstFP@regc-\pstFP@regb%
+ \multiply\pstFP@regc100000000\relax%
+ \expandafter\advance\csname pstFP@#1fa\endcsname\pstFP@rega%
+ %
+ \expandafter\divide\csname pstFP@#1fb\endcsname10\relax%
+ \expandafter\advance\csname pstFP@#1fb\endcsname\pstFP@regc%
+}
+%
+\def\pstFP@multen#1{%
+ \expandafter\multiply\csname pstFP@#1ia\endcsname10\relax%
+ \expandafter\ifnum\csname pstFP@#1ib\endcsname<100000000\relax%
+ \else%
+ \expandafter\pstFP@regc\csname pstFP@#1ib\endcsname%
+ \divide\pstFP@regc100000000%
+ \expandafter\advance\csname pstFP@#1ia\endcsname\pstFP@regc%
+ \multiply\pstFP@regc100000000%
+ \expandafter\advance\csname pstFP@#1ib\endcsname-\pstFP@regc%
+ \fi%
+ \expandafter\multiply\csname pstFP@#1ib\endcsname10\relax%
+ \expandafter\ifnum\csname pstFP@#1fa\endcsname<100000000\relax%
+ \else%
+ \expandafter\pstFP@regc\csname pstFP@#1fa\endcsname%
+ \divide\pstFP@regc100000000%
+ \expandafter\advance\csname pstFP@#1ib\endcsname\pstFP@regc%
+ \multiply\pstFP@regc100000000%
+ \expandafter\advance\csname pstFP@#1fa\endcsname-\pstFP@regc%
+ \fi%
+ \expandafter\multiply\csname pstFP@#1fa\endcsname10\relax%
+ \expandafter\ifnum\csname pstFP@#1fb\endcsname<100000000\relax%
+ \else%
+ \expandafter\pstFP@regc\csname pstFP@#1fb\endcsname%
+ \divide\pstFP@regc100000000%
+ \expandafter\advance\csname pstFP@#1fa\endcsname\pstFP@regc%
+ \multiply\pstFP@regc100000000%
+ \expandafter\advance\csname pstFP@#1fb\endcsname-\pstFP@regc%
+ \fi%
+ \expandafter\multiply\csname pstFP@#1fb\endcsname10\relax%
+}
+%
+\def\pstFP@counttimes{%
+ {\global\pstFP@times=0\relax%
+ \loop%
+ \ifnum%
+ \ifnum\pstFP@xia>\pstFP@yia1%
+ \else\ifnum\pstFP@xia<\pstFP@yia0%
+ \else%
+ \ifnum\pstFP@xib>\pstFP@yib1%
+ \else\ifnum\pstFP@xib<\pstFP@yib0%
+ \else%
+ \ifnum\pstFP@xfa>\pstFP@yfa1%
+ \else\ifnum\pstFP@xfa<\pstFP@yfa0%
+ \else%
+ \ifnum\pstFP@xfb>\pstFP@yfb1%
+ \else\ifnum\pstFP@xfb<\pstFP@yfb0%
+ \else%
+ 1%
+ \fi\fi%
+ \fi\fi%
+ \fi\fi%
+ \fi\fi%
+ =1\relax%
+ \global\advance\pstFP@times1\relax%
+ \global\advance\pstFP@xfb-\pstFP@yfb%
+ \ifnum\pstFP@xfb<0\relax%
+ \global\advance\pstFP@xfb1000000000\relax%
+ \global\advance\pstFP@xfa-1\relax%
+ \fi%
+ \global\advance\pstFP@xfa-\pstFP@yfa%
+ \ifnum\pstFP@xfa<0\relax%
+ \global\advance\pstFP@xfa1000000000\relax%
+ \global\advance\pstFP@xib-1\relax%
+ \fi%
+ \global\advance\pstFP@xib-\pstFP@yib%
+ \ifnum\pstFP@xib<0\relax%
+ \global\advance\pstFP@xib1000000000\relax%
+ \global\advance\pstFP@xia-1\relax%
+ \fi%
+ \global\advance\pstFP@xia-\pstFP@yia%
+ \repeat%
+ }%
+}
+%
+\def\pstFP@add#1#2.#3.#4\relax#5.#6.#7\relax#8\relax{%
+ % #1 macro, which gets the result
+ % #2 integer part of 1st value
+ % #3 fractional part of 1st value
+ % #4 dummy to swallow everthing after the 2nd '.'
+ % #5 integer part of 2nd value
+ % #6 fractional part of 2nd value
+ % #7 dummy to swallow everthing after the 2nd '.'
+ %
+ {\pstFP@readvalue{x}{#2}{#3}%
+ \pstFP@readvalue{y}{#5}{#6}%
+ %
+ \ifnum\pstFP@xs=\pstFP@ys%
+ \advance\pstFP@xfb\pstFP@yfb%
+ \advance\pstFP@xfa\pstFP@yfa%
+ \ifnum\pstFP@xfb<1000000000\relax\else%
+ \advance\pstFP@xfb-1000000000\relax%
+ \advance\pstFP@xfa1\relax%
+ \fi%
+ \advance\pstFP@xib\pstFP@yib%
+ \ifnum\pstFP@xfa<1000000000\relax\else%
+ \advance\pstFP@xfa-1000000000\relax%
+ \advance\pstFP@xib1\relax%
+ \fi%
+ \advance\pstFP@xia\pstFP@yia%
+ \ifnum\pstFP@xib<1000000000\relax\else%
+ \advance\pstFP@xib-1000000000\relax%
+ \advance\pstFP@xia1\relax%
+ \fi%
+ \ifnum\pstFP@xia<1000000000\relax\else%
+ \pstFP@errmessage{Overflow}%
+ \fi%
+ \pstFP@store\pstFP@tmp{x}%
+ \else%
+ \advance\pstFP@xfb-\pstFP@yfb%
+ \ifnum\pstFP@xfb<0\relax%
+ \advance\pstFP@yfa1\relax%
+ \advance\pstFP@xfb1000000000\relax%
+ \fi%
+ \advance\pstFP@xfa-\pstFP@yfa%
+ \ifnum\pstFP@xfa<0\relax%
+ \advance\pstFP@yib1\relax%
+ \advance\pstFP@xfa1000000000\relax%
+ \fi%
+ \advance\pstFP@xib-\pstFP@yib%
+ \ifnum\pstFP@xib<0\relax%
+ \advance\pstFP@yia1\relax%
+ \advance\pstFP@xib1000000000\relax%
+ \fi%
+ \advance\pstFP@xia-\pstFP@yia%
+ \ifnum\pstFP@xia<0\relax%
+ \pstFP@xs=-\pstFP@xs%
+ \ifnum\pstFP@xfb=0\relax\else%
+ \advance\pstFP@xfb-1000000000\relax\pstFP@xfb=-\pstFP@xfb%
+ \advance\pstFP@xfa1\relax%
+ \fi%
+ \ifnum\pstFP@xfa=0\relax\else%
+ \advance\pstFP@xfa-1000000000\relax\pstFP@xfa=-\pstFP@xfa%
+ \advance\pstFP@xib1\relax%
+ \fi%
+ \ifnum\pstFP@xib=0\relax\else%
+ \advance\pstFP@xib-1000000000\relax\pstFP@xib=-\pstFP@xib%
+ \advance\pstFP@xia1\relax%
+ \fi%
+ \relax\pstFP@xia=-\pstFP@xia%
+ \fi%
+ \pstFP@store\pstFP@tmp{x}%
+ \fi%
+ \global\let\pstFP@tmp\pstFP@tmp%
+ }%
+% \pstFPstripZeros\pstFP@tmp{#1}%
+ \let#1\pstFP@tmp
+}
+
+
+\def\pstFP@div#1#2.#3.#4\relax#5.#6.#7\relax{%
+ % #1 macro, which gets the result
+ % #2 integer part of 1st value
+ % #3 fractional part of 1st value
+ % #4 dummy to swallow everthing after the 2nd '.'
+ % #5 integer part of 2nd value
+ % #6 fractional part of 2nd value
+ % #7 dummy to swallow everthing after the 2nd '.'
+ %
+ % algorithmic idea (for x>0, y>0)
+ % - %determine \pstFP@shift such that y*10^\pstFP@shift <100000000<=y*10^(\pstFP@shift+1)
+ % - %determine \pstFP@shift' such that x*10^\pstFP@shift'<100000000<=x*10^(\pstFP@shift+1)
+ % - x=x*\pstFP@shift'
+ % - y=y*\pstFP@shift
+ % - \pstFP@shift=\pstFP@shift-\pstFP@shift'
+ % - res=0
+ % - while y>0 %fixed-point representation!
+ % - \pstFP@times=0
+ % - while x>y
+ % - \pstFP@times=\pstFP@times+1
+ % - x=x-y
+ % - end
+ % - y=y/10
+ % - res=10*res+\pstFP@times/1000000000
+ % - end
+ % - %shift the result according to \pstFP@shift
+ %
+ {\pstFP@readvalue{x}{#2}{#3}%
+ \pstFP@readvalue{y}{#5}{#6}%
+ %
+ %sign
+ \multiply\pstFP@xs\pstFP@ys%
+ \pstFP@rs=\pstFP@xs%
+ %
+ %compute division
+ \ifpstFP@zero{y}%
+ \typeout{>>>>Division by zero}%
+ \else%
+ \ifpstFP@zero{x}\def\next##1{\edef\pstFP@tmp{0}}\else\def\next##1{##1}\fi%
+ \next%
+ {\pstFP@shift=0\relax%
+ \loop%
+ \ifnum\pstFP@yia<100000000\relax%
+ \pstFP@multen{y}%
+ \advance\pstFP@shift1\relax%
+ \repeat%
+ \loop%
+ \ifnum\pstFP@xia<100000000\relax%
+ \pstFP@multen{x}%
+ \advance\pstFP@shift-1\relax%
+ \repeat%
+ \pstFP@ria=0\pstFP@rib=0\pstFP@rfa=0\pstFP@rfb=0\relax%
+ \loop%
+ \ifpstFP@zero{y}\else%
+ \pstFP@counttimes%divides x by \pstFP@times*y
+ \pstFP@divten{y}%
+ \pstFP@multen{r}%
+ \advance\pstFP@rfb\pstFP@times%
+ \ifnum\pstFP@rfb<1000000000\relax\else%
+ \advance\pstFP@rfa1\advance\pstFP@rfb-1000000000\relax%
+ \ifnum\pstFP@rfa<1000000000\relax\else%
+ \advance\pstFP@rib1\advance\pstFP@rfa-1000000000\relax%
+ \ifnum\pstFP@rib<1000000000\relax\else%
+ \advance\pstFP@ria1\advance\pstFP@rib-1000000000\relax%
+ \fi%
+ \fi%
+ \fi%
+ \repeat%
+ \loop%
+ \ifnum\pstFP@shift>17%
+ \advance\pstFP@shift-1\relax%
+ \ifnum\pstFP@ria<100000000\else\pstFP@ria=-1\fi%
+ \ifnum\pstFP@ria<0\pstFP@ria=-1\fi%
+ \pstFP@multen{r}%
+ \repeat%
+ \ifnum\pstFP@ria<1000000000\else\pstFP@ria=-1\fi%
+ \loop%
+ \ifnum\pstFP@shift<17%
+ \advance\pstFP@shift1\relax%
+ \pstFP@divten{r}%
+ \repeat%
+ \ifnum\pstFP@ria<0\relax%
+ \typeout{>>>>Overflow}%
+ \else%
+ \pstFP@store\pstFP@tmp{r}%
+ \fi%
+ }%
+ \fi%
+ %
+ \global\let\pstFP@tmp=\pstFP@tmp%
+ %
+ }%
+% \pstFPstripZeros\pstFP@tmp{#1}%
+ \let#1\pstFP@tmp
+}
+%multiply two values
+
+\def\pstFP@firstnine#1#2#3#4#5#6#7#8#9{%
+ \pstFP@res=#1#2#3#4#5#6#7#8#9\relax%
+}
+\def\pstFP@@ninesplit#1\relax#2\end#3{%
+ #1%
+ \edef#3{#2}%
+}
+\def\pstFP@ninesplit#1{%
+ \edef#1{\expandafter\pstFP@firstnine\pstFP@rd}%
+ \expandafter\pstFP@@ninesplit#1\end#1\relax%
+}
+
+\def\pstFP@split#1#2#3#4{%
+ % #1 highest three digits
+ % #2 medium three digits
+ % #3 least three digits
+ % #4 counter
+ \pstFP@regc=#4%
+ \divide\pstFP@regc1000000\relax%
+ #1=\pstFP@regc%
+ \multiply\pstFP@regc-1000000\relax\advance\pstFP@regc#4%
+ #3=\pstFP@regc%
+ \divide\pstFP@regc1000\relax%
+ #2=\pstFP@regc%
+ \multiply\pstFP@regc-1000\relax\advance\pstFP@regc#3%
+ #3=\pstFP@regc%
+}
+
+\def\pstFP@@mul#1#2#3{%
+ \pstFP@regc=\csname pstFP@x#1\endcsname%
+ \multiply\pstFP@regc\csname pstFP@y#2\endcsname%
+ \advance\pstFP@prod\pstFP@regc%
+ %
+ \ifx#3\relax%
+ \let\next=\relax%
+ \else%
+ \let\next=\pstFP@@mul%
+ \fi%
+ \next#3%
+}
+
+\def\pstFP@saveshift{%
+ % save rightmost three digits
+ \pstFP@regc=\pstFP@prod%
+ \divide\pstFP@prod1000\relax%
+ \multiply\pstFP@prod1000\relax%
+ \advance\pstFP@regc-\pstFP@prod%
+ \advance\pstFP@regc1000\relax%
+ \edef\pstFP@rd{\expandafter\pstFP@ignorenext\the\pstFP@regc\pstFP@rd}%
+ %
+ \divide\pstFP@prod1000\relax%
+}
+
+\def\pstFP@mul#1#2.#3.#4\relax#5.#6.#7\relax{%
+ % #1 macro, which gets the result
+ % #2 integer part of 1st value
+ % #3 fractional part of 1st value
+ % #4 dummy to swallow everthing after the 2nd '.'
+ % #5 integer part of 2nd value
+ % #6 fractional part of 2nd value
+ % #7 dummy to swallow everthing after the 2nd '.'
+ %
+ % split value in various parts
+ % x y = 123 456 789 123 456 789 . 123 456 789 123 456 789
+ % -> xk xl xm xn xo xp xq xr xs xt xu xv
+ % -> yk yl ym yn yo yp yq yr ys yt yu yv
+ % multiply these parts and save the result wrt the necessary shifts
+ %
+ {\pstFP@readvalue{x}{#2}{#3}%
+ \pstFP@readvalue{y}{#5}{#6}%
+ %
+ %sign
+ \multiply\pstFP@xs\pstFP@ys%
+ \pstFP@rs=\pstFP@xs%
+ %
+ % split parts
+ \pstFP@split\pstFP@xk\pstFP@xl\pstFP@xm\pstFP@xia\pstFP@split\pstFP@xn\pstFP@xo\pstFP@xp\pstFP@xib%
+ \pstFP@split\pstFP@xq\pstFP@xr\pstFP@xz\pstFP@xfa\pstFP@split\pstFP@xt\pstFP@xu\pstFP@xv\pstFP@xfb%
+ \pstFP@split\pstFP@yk\pstFP@yl\pstFP@ym\pstFP@yia\pstFP@split\pstFP@yn\pstFP@yo\pstFP@yp\pstFP@yib%
+ \pstFP@split\pstFP@yq\pstFP@yr\pstFP@yz\pstFP@yfa\pstFP@split\pstFP@yt\pstFP@yu\pstFP@yv\pstFP@yfb%
+ %
+ \pstFP@prod=0\relax%
+ \edef\pstFP@rd{}%
+ %
+ %compute result
+ \pstFP@@mul vv \relax\pstFP@saveshift%
+ \pstFP@@mul vu uv \relax\pstFP@saveshift%
+ \pstFP@@mul uu vt tv \relax\pstFP@saveshift%
+ \pstFP@@mul ut tu vz zv \relax\pstFP@saveshift%
+ \pstFP@@mul tt zu uz rv vr \relax\pstFP@saveshift%
+ \pstFP@@mul zt tz ur ru vq qv \relax\pstFP@saveshift%
+ \pstFP@@mul zz rt tr uq qu vp pv \relax\pstFP@saveshift%
+ \pstFP@@mul zr rz tq qt up pu vo ov \relax\pstFP@saveshift%
+ \pstFP@@mul rr qz zq tp pt uo ou vn nv \relax\pstFP@saveshift%
+ \pstFP@@mul rq qr zp pz to ot un nu vm mv \relax\pstFP@saveshift%
+ \pstFP@@mul qq rp pr zo oz tn nt um mu vl lv \relax\pstFP@saveshift%
+ \pstFP@@mul qp pq ro or zn nz tm mt ul lu kv vk \relax\pstFP@saveshift%
+ \pstFP@@mul pp oq qo rn nr zm mz tl lt ku uk \relax\pstFP@saveshift%
+ \pstFP@@mul op po nq qn rm mr zl lz tk kt \relax\pstFP@saveshift%
+ \pstFP@@mul oo pn np mq qm rl lr kz zk \relax\pstFP@saveshift%
+ \pstFP@@mul no on mp pm lq ql kr rk \relax\pstFP@saveshift%
+ \pstFP@@mul nn mo om pl lp qk kq \relax\pstFP@saveshift%
+ \pstFP@@mul mn nm lo ok pk kp \relax\pstFP@saveshift%
+ \pstFP@@mul mm ln nl ko ok \relax\pstFP@saveshift%
+ \pstFP@@mul lm ml kn nk \relax\pstFP@saveshift%
+ \pstFP@@mul ll km mk \relax\pstFP@saveshift%
+ \pstFP@@mul kl lk \relax\pstFP@saveshift%
+ \pstFP@@mul kk \relax\pstFP@saveshift\pstFP@saveshift%
+ \pstFP@ninesplit\pstFP@rd%
+ \ifnum\pstFP@res=0\relax%
+ \pstFP@ninesplit\pstFP@rd%
+ \ifnum\pstFP@res=0\relax%
+ \pstFP@ninesplit\pstFP@rd\pstFP@ria=\pstFP@res%
+ \pstFP@ninesplit\pstFP@rd\pstFP@rib=\pstFP@res%
+ \pstFP@ninesplit\pstFP@rd\pstFP@rfa=\pstFP@res%
+ \pstFP@ninesplit\pstFP@rd\pstFP@rfb=\pstFP@res%
+ \pstFP@store\pstFP@tmp{r}%
+ \else\typeout{pstFPmul: Overflow}\fi%
+ \else\typeout{pstFPmul: Overflow}\fi%
+ \global\let\pstFP@tmp\pstFP@tmp}%
+% \pstFPstripZeros\pstFP@tmp{#1}%
+ \let#1\pstFP@tmp
+}
+%
+\catcode`\@=\PstAtCode\relax
+%
+%% END: pst-fp.tex
+\endinput
diff --git a/graphics/pstricks/base/generic/pst-key.tex b/graphics/pstricks/base/generic/pst-key.tex
new file mode 100644
index 0000000000..8c1204bc17
--- /dev/null
+++ b/graphics/pstricks/base/generic/pst-key.tex
@@ -0,0 +1,101 @@
+%% $Id: pst-key.tex 446 2017-04-19 11:40:55Z herbert $
+%%
+%% This is file `pst-key.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% keyval.dtx (with options: `package,plain,pstricks')
+%%
+%% This file is based on keyval.dtx from the LaTeX tools distribution.
+%% It may be distributed and used with the conditions applying to the
+%% PSTricks distribution. See the comments in pstricks.tex for details.
+%%
+%% File: keyval.dtx Copyright (C) 1993 1994 1995 1997 1998 David Carlisle
+\def\next[#1]{\catcode`\@=11
+ \expandafter\let\csname ver@keyval.sty\endcsname\empty
+ \wlog{keyval: #1}}\next
+ [1998/07/23 v1.11 key=value parser (DPC)]
+\def\setkeys{%
+ \@ifnextchar[%
+ \KV@list
+ {\let\KV@undefined\KV@error
+ \KV@setkeys}}
+\def\KV@psset{psset}
+\def\KV@setkeys#1#2{%
+ \def\@tempa{#1}%
+ \edef\KV@prefix{%
+ \ifx\@tempa\KV@psset\else
+ KV@%
+ \fi
+ #1@}%
+ \KV@do#2,\relax,}
+\def\psset#1{%
+ \def\KV@prefix{psset@}%
+ \KV@do#1,\relax,}
+\def\use@par{\expandafter\psset\expandafter{\pst@par}%
+ \let\pst@par\@empty}
+\def\KV@list[#1]{%
+ \def\KV@undefined{\KV@add#1}%
+ \ifx#1\@undefined
+ \let#1\@empty
+ \fi
+ \KV@setkeys}
+\def\KV@do#1,{%
+ \ifx\relax#1\empty\else
+ \KV@split#1==\relax
+ \expandafter\KV@do\fi}
+\def\KV@split#1=#2=#3\relax{%
+ \KV@@sp@def\@tempa{#1}%
+ \ifx\@tempa\@empty\else
+ \expandafter\let\expandafter\@tempc
+ \csname\KV@prefix\@tempa\endcsname
+ \ifx\@tempc\relax
+ \KV@undefined{#2}{#3}%
+ \else
+ \ifx\@empty#3\@empty
+ \KV@default
+ \else
+ \KV@@sp@def\@tempb{#2}%
+ \expandafter\@tempc\expandafter{\@tempb}\relax
+ \fi
+ \fi
+ \fi}
+\def\KV@default{%
+ \expandafter\let\expandafter\@tempb
+ \csname\KV@prefix\@tempa @default\endcsname
+ \ifx\@tempb\relax
+ \KV@err{No value specified for \@tempa}%
+ \else
+ \@tempb\relax
+ \fi}
+\def\KV@add#1#2#3{%
+ \toks2\expandafter{#1}%
+ \KV@@sp@def\@tempb{#2}%
+ \toks4\expandafter{\@tempb}%
+ \edef#1{\the\toks2
+ \ifx#1\@empty\else,\fi
+ \@tempa
+ \ifx\KV@add#3\KV@add\else={\the\toks4}\fi}}
+\def\KV@err#1{\errmessage{keyval: #1}}
+\def\KV@error#1#2{\KV@err{\@tempa\space undefined}}
+\def\@tempa#1{%
+\def\KV@@sp@def##1##2{\KV@@sp@b##2\@nil\@nil#1\@nil\relax##1}}
+\@tempa{ }
+\def\KV@@sp@b#1#2 \@nil{\KV@@sp@c#1#2}
+\def\KV@@sp@c#1\@nil#2\relax#3{\def#3{#1}}
+\def\define@key#1#2{%
+ \def\KV@prefix{#1}%
+ \edef\KV@prefix{%
+ \ifx\KV@prefix\KV@psset\else
+ KV@%
+ \fi
+ #1@#2}%
+ \@ifnextchar[\KV@def{\@namedef\KV@prefix####1}}
+\def\KV@def[#1]{%
+ \@namedef{\KV@prefix @default\expandafter}\expandafter
+ {\csname \KV@prefix\endcsname{#1}}%
+ \@namedef\KV@prefix##1}
+\endinput
+%%
+%% End of file `pst-key.tex'.
diff --git a/graphics/pstricks/base/generic/pstricks-tex.def b/graphics/pstricks/base/generic/pstricks-tex.def
new file mode 100644
index 0000000000..d5e7311030
--- /dev/null
+++ b/graphics/pstricks/base/generic/pstricks-tex.def
@@ -0,0 +1,85 @@
+%% $Id: pstricks-tex.def 1044 2019-04-11 09:32:09Z herbert $
+%% pstricks-tex.def
+%% Copyright 2017- Herbert Voss
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+ \newwrite\@unused
+ \def\typeout#1{\immediate\write\@unused{#1}}%
+ \typeout{we are running tex and have to make it etex and latex compatible ...}%
+ \ifx\eTeXversion\@undefined
+ \gdef\ch@ck#1#2#3{\ifnum\count1#1<#2 \else\errmessage{No room for a new #3}\fi}
+ \countdef\allocationnumber=21
+ \chardef\sixt@@n=16
+ \def\alloc@#1#2#3#4#5{\global\advance\count1#1\@ne
+ \ch@ck#1#4#2% make sure there's still room
+ \allocationnumber\count1#1%
+ \global#3#5\allocationnumber
+ \wlog{\string#5=\string#2\the\allocationnumber}}
+ \alloc@7\write\chardef\sixt@@n\@unused
+ \else
+ \def\e@alloc#1#2#3#4#5#6{%
+ \global\advance#3\@ne
+ \e@ch@ck{#3}{#4}{#5}#1%
+ \allocationnumber#3\relax
+ \global#2#6\allocationnumber
+ \wlog{\string#6=\string#1\the\allocationnumber}}%
+ \gdef\e@ch@ck#1#2#3#4{%
+ \ifnum#1<#2\else
+ \ifnum#1=#2\relax
+ \global#1\@cclvi
+ \ifx\count#4\global\advance#1 10 \fi
+ \fi
+ \ifnum#1<#3\relax
+ \else
+ \errmessage{No room for a new \string#4}%
+ \fi
+ \fi}%
+ \fi
+%
+ \newif\ifpst@psfonts \pst@psfontsfalse % defined in pstricks.sty
+ \newif\ifpst@useCalc \pst@useCalcfalse % defined in pstricks.sty
+%
+ \long\def\@ifundefined#1#2#3{\expandafter\ifx\csname #1\endcsname\relax#2\else#3\fi}
+ \def\@namedef#1{\expandafter\def\csname #1\endcsname}
+ \def\@nameuse#1{\csname #1\endcsname}
+ \def\@eha{%
+ Your command was ignored.^^J
+ Type \space I <command> <return> \space to replace
+ it with another command,^^J
+ or \space <return> \space to continue without it.}
+ \def\@spaces{\space\space\space\space}
+ \def\@empty{}
+ \def\@gobble#1{}
+ \def\@nnil{\@nil}
+%
+ \def\@ifnextchar#1#2#3{%
+ \let\@tempe#1\def\@tempa{#2}\def\@tempb{#3}\futurelet\@tempc\@ifnch}
+%
+ \def\@ifnch{%
+ \ifx\@tempc\@sptoken \let\@tempd\@xifnch
+ \else\ifx\@tempc\@tempe \let\@tempd\@tempa \else \let\@tempd\@tempb \fi
+ \fi
+ \@tempd
+ }%
+ \begingroup
+ \def\:{\global\let\@sptoken= } \:
+ \def\:{\@xifnch} \expandafter\gdef\: {\futurelet\@tempc\@ifnch}
+ \endgroup
+ \def\endtabular{\crcr\egroup\egroup $\egroup}
+ \def\@width{width}% needed by pst-node
+ \def\@tfor#1:={\@tf@r#1 }
+ \long\def\@tf@r#1#2\do#3{\def\@fortmp{#2}\ifx\@fortmp\space\else
+ \@tforloop#2\@nil\@nil\@@#1{#3}\fi}%
+ \long\def\@tforloop#1#2\@@#3#4{\def#3{#1}\ifx #3\@nnil
+ \expandafter\@fornoop \else
+ #4\relax\expandafter\@tforloop\fi#2\@@#3{#4}}
+ \long\def\@break@tfor#1\@@#2#3{\csname fi\endcsname\csname fi\endcsname}
+%%
+%% END: pstricks-tex.def
diff --git a/graphics/pstricks/base/generic/pstricks-xetex.def b/graphics/pstricks/base/generic/pstricks-xetex.def
new file mode 100644
index 0000000000..8e9efc2026
--- /dev/null
+++ b/graphics/pstricks/base/generic/pstricks-xetex.def
@@ -0,0 +1,34 @@
+%% $Id: pstricks-xetex.def 872 2018-12-21 20:39:31Z herbert $
+%%
+%% Copyright 2019- Herbert Voss
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+% The xdvipdfmx driver does not support all node macros. In the following
+% there are alternatives defined:
+%
+%% \ncput -> \NCput
+%
+\def\NCput{\pst@object{NCput}}
+\def\NCput@i#1{%
+ \begingroup
+ \use@par
+ \pst@getcoor{@@A}\pst@tempA% defined by \pcline and \ncline
+ \pst@getcoor{@@B}\pst@tempB
+ \if@star\def\next{\rput*}\else\def\next{\rput}\fi
+ \next(!
+ \pst@tempA /yA ED /xA ED
+ \pst@tempB /yB ED /xB ED
+ xA xB add 2 div
+ yA yB add 2 div \tx@UserCoor){#1}
+ \endgroup
+ \ignorespaces
+}
+%%
+%% END: pstricks-xetex.def
diff --git a/graphics/pstricks/base/generic/pstricks.con b/graphics/pstricks/base/generic/pstricks.con
new file mode 100644
index 0000000000..83bba1f7bb
--- /dev/null
+++ b/graphics/pstricks/base/generic/pstricks.con
@@ -0,0 +1,360 @@
+%% $Id: pstricks.con 617 2017-10-04 16:16:21Z herbert $
+%% BEGIN: pstricks.con (for dvips driver)
+%%
+%% Configuration file for PSTricks
+%%
+%% Version 1.00 (2010/01/16)
+%%
+%% For use with Rokicki's dvips (tested with v5.74 and older)
+
+\def\pstdriver{Rokicki's dvips}
+{\catcode`\"=12\gdef\pstverb#1{\special{" #1}}} % Check catcode of "
+\def\pstunit{1bp}%
+\def\pstVerb#1{\special{ps:#1}}% hv write it without a preceding space
+\def\pstverbscale{SDict begin normalscale end}
+\def\pstnodescale{}
+% DG/SR modification begin - Apr. 28, 1997 (D. Carlisle + S. Rahtz)
+% \def\pstheader#1{\special{header=#1}}
+% We used to check for |\AtBeginDvi|, but that was broken in early release
+% so we now check for the existence of |\textsuperscript| (added 1995/05/16)
+\ifx\textsuperscript\@undefined
+ \def\pstheader#1{\special{header=#1}}
+\else
+ \ifx\Gin@PS@file@header\@undefined
+ \def\pstheader#1{\AtBeginDvi{\special{header=#1}}}
+ \else
+ \let\pstheader\Gin@PS@file@header
+ \fi
+\fi
+% DG/SR modification end
+%%
+%% In the following, CP is short for currentpoint.
+%% The neg is necessary because dvips scales the coordinates by 1 -1.
+%% \tx@NET means neg exch neg exch translate.
+\def\pstrotate{CP CP translate 3 -1 roll neg rotate \tx@NET}
+%%
+%% ****************** END Rokicki's dvips *****************************
+
+%%%%%%%%%%%%%%%%%%% !! CUSTOMIZATION STUFF GOES HERE: !! %%%%%%%%%%%%%%%%%%
+%% If you want to include your own customizations to pstricks.tex, then
+%% uncomment the \pstcustomize command, and include your modifications
+%% after \pstcustomize. These will be read in after pstricks.tex.
+%\pstcustomize
+
+\endinput
+
+%%
+%%%%%%%%%%%%%%%%%%% !! GENERAL INSTRUCTIONS !! %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Because there are no standards for dvi-to-PS driver \special's,
+some driver-dependent commands must be defined in this file.
+
+Possibly correct definitions for some dvi drivers are given below.
+Copy the section for the driver you want to use to the indicated place
+near the beginning of the file, replacing any other definitions you
+might find there.
+
+When changing drivers, you may need to remake the header file.
+
+See the PSTricks read-me file for further installation instructions.
+
+Please report good and bad experiences with dvi-to-PS drivers,
+along with the definitions of these commands that worked
+for you, to tvz@Princeton.EDU. Thanks.
+
+
+%%%%%%%%%%%%%%%% DESCRIPTION OF CONFIGURATION DEFINITIONS %%%%%%%%%%%%%%%
+
+Here are the commands that must be defined in this file:
+
+ \pstverb{} - The argument is included as verbatim PostScript,
+ grouped by save and restore. The coordinate system
+ should be square, not rotated, and with the origin
+ at TeX's currentpoint.
+
+ \pstVerb{} - The argument is included as verbatim PostScript, not
+ grouped by (g)save and (g)restore. The currentpoint
+ should be TeX's currentpoint.
+
+ \pstunit - The units used by driver for graphics included with
+ \pstverb. Probably 1bp or 1sp.
+
+ \pstverbscale - The PostScript code that scales the coordinate system
+ from that in effect with \pstVerb to that in effect
+ with \pstverb. Should not translate to the currentpoint.
+
+ \pstrotate - The PostScript code that takes a number off the stack
+ and rotates the axes properly. I.e.,
+ \pstVerb{angle \pstrotate} is used to begin rotations.
+
+ \pstheader{} - The argument is a header file (e.g., .pro file).
+ If your driver does not support such a special, then
+ the command might just remind you to include the header
+ when printing. You can use PSTricks without a header,
+ in which case it does not matter how you define
+ \pstheader. See read-me.pst for details.
+ If you cannot change the default directory where your
+ driver looks for header files, and you cannot write to
+ that directory, then you include the path for your
+ PSTricks header files.
+ E.g., \def\pstheader#1{\special{header=~/tex/#1}}.
+
+ \pstdriver - The name of the driver.
+
+
+%%%%%%%%% !! HOW TO MAKE A TEX FORMAT WITH PSTRICKS PRELOADED !! %%%%%%%%
+
+See your local TeX documentation for instructions on creating a TeX format.
+
+Before making the format, be sure that this configuration file is correct.
+It will be read only when creating the format, and not with every job.
+
+If you are not using header files, there are no more special instructions.
+
+Special instructions when using header files:
+
+ - If you want to include supplementary PSTricks files (e.g., pst-node.tex),
+ add \input commands in the customization section above.
+
+ - If your definition of \pstheader is, e.g.
+
+ \def\pstheader#1{\special{\header=#1}}
+
+ then change it to
+
+ \def\pstheader#1{%
+ \expandafter\everyjob\expandafter{\the\everyjob
+ \special{header=#1}}}
+
+ and put your original definition in the customization section, AFTER
+ any \input commands. E.g., the customization section might look like:
+
+ \pstcustomize
+ \input pst-node.tex
+ \input pst-coil.tex
+ \def\pstheader#1{\special{header=#1}}
+
+ - Input pstricks.tex at the appropriate time when creating the format.
+ E.g., when initex stops running:
+ *\input pstricks
+ *\dump
+
+
+%%%%%%%%%% !! CONFIGURATIONS FOR SOME DRIVERS !! %%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%% **********************************************************************
+%% ***** Rokicki's dvips ***** Rokicki's dvips ***** Rokicki's dvips ****
+%% **********************************************************************
+%% Life is bliss with Rokicki's dvips (tested with v5.396, v5.47, 5.491):
+%%
+\def\pstdriver{Rokicki's dvips}
+{\catcode`\"=12\gdef\pstverb#1{\special{" #1}}} % Check catcode of "
+\def\pstunit{1bp}%
+\def\pstVerb#1{\special{ps: #1}}
+\def\pstverbscale{SDict begin normalscale end}
+\def\pstheader#1{\special{header=#1}}
+%%
+%% In the following, CP is short for currentpoint.
+%% The neg is necessary because dvips scales the coordinates by 1 -1.
+%% \tx@NET means neg exch neg exch translate.
+\def\pstrotate{%
+ CP CP translate 3 -1 roll neg rotate \tx@NET}
+%%
+%% If using a version before 5.47, clipping may not work. You can
+%% try the following definition of \pstverb:
+%\def\pstverb#1{\special{ps: @beginspecial #1 @endspecial}}
+%% or change "{initclip}ifelse" to "if" in the definition of @setspecial
+%% in dvips' special.pro.
+%%
+%% ****************** END Rokicki's dvips *****************************
+
+
+%% **********************************************************************
+%% **** Arbortext's dvips *** Arbortext's dvips *** Arbortext's dvips ***
+%% **********************************************************************
+%% Thanks to Wolfgang Sienel:
+%%
+\def\pstdriver{Arbortext's dvips}
+\def\pstverb#1{%
+ \special{ps::[asis] 0 SPB /ChartCheckPoint save def
+ Xpos Ypos translate #1 ChartCheckPoint restore 0 SPE}}
+\def\pstunit{1bp}
+\def\pstVerb#1{\special{ps:: #1}}
+\def\pstverbscale{}
+\def\pstrotate{CP CP translate 3 -1 roll rotate \tx@NET}
+\def\pstheader#1{%
+ \typeout{**********************************************************}%
+ \typeout{** Don't forget to include #1 when printing:}%
+ \typeout{** \space\space dvips -PRO #1 myfile}%
+ \typeout{**********************************************************}}
+%%
+%% Comments by Wolfgang on header files:
+%% Normally the standard prolog file is downloaded once to the printer
+%% with psload.ps (the initializing file for your TeX-printer) before
+%% printing TeX-documents. If you don't make any changes to psload.ps
+%% you have to type dvips -PRO PATH/pstricks.pro myfile (-PRO just
+%% works for UNIX systems. I don't have any idea about other systems).
+%% If psload.ps was not downloaded to the printer you have to append
+%% pstricks.pro to the standard prolog file dvips.pro. In this case
+%% invoke dvips as always. Note that after hitting the enter key you
+%% have to specify the option download all prolog in both cases. If you
+%% are frequently using pstricks you might want to change psload.ps. In
+%% this case contact your local TeX-guru and ask him politely to do this
+%% for you. Attention: If psload.ps is getting too big you may run into
+%% trouble with printer memory!
+%%
+%% ****************** END Arbortext's dvips *****************************
+
+
+%% **********************************************************************
+%% **** Textures *** Textures *** Textures *** Textures *** Textures ****
+%% **********************************************************************
+%% These have been tested with v1.3. It is nice to have a PostScript
+%% screen previewer, such as TScript (USA: 1-617-734-9700). (The
+%% Textures preview window will not show the PSTricks graphics.)
+%%
+\def\pstdriver{Textures}
+\def\pstunit{1bp}
+\def\pstverb#1{\special{postscript /TX@Save save def #1 TX@save restore}}
+\def\pstVerb#1{\special{postscript grestore #1 gsave}}
+\def\pstverbscale{Mag 1000 div 72.27 72 div mul dup neg scale}
+\def\pstrotate{%
+ CP CP translate 3 -1 roll neg rotate \tx@NET}
+%%
+%% \pstVerb does not define the currentpoint properly. As a workaround,
+%% insert the following lines in the customization section above.
+%%
+%% \def\pst@Verb#1{%
+%% \special{postscript \pst@dict /sps { moveto /Mag ed } def
+%% userdict begin}%
+%% \special{postscript #1 end gsave}}
+%%
+%% Textures does not support header files.
+%% However, it may still be worth using a header file for increased speed.
+%% Also, some macros can overload Textures 1.3 when not used with a header
+%% file. You can include the header file pstricks.pro by saving the
+%% PostScript output to a file and inserting the pstricks.pro with an
+%% editor. Probably a better solution is to append pstricks.pro to a
+%% copy of the laserprep, and, by changing file names of the modified
+%% laserprep and the original laserprep, use the laserprep with pstricks.pro
+%% whenever you are printing pstricks documents.
+\def\pstheader#1{%
+ \typeout{******************************************}%
+ \typeout{*** Include header file #1!! ***}%
+ \typeout{******************************************}}
+%%
+%% ****************** END Textures **************************************
+
+
+%% **********************************************************************
+%% ***** dvi2ps ***** dvi2ps ***** dvi2ps ***** dvi2ps ***** dvi2ps *****
+%% **********************************************************************
+%% I.e., dvi2ps, v2.xx. There are lot's of such things around.
+%% This probably doesn't work. Considering upgrading to Rokicki's dvips.
+%%
+\def\pstdriver{dvi2ps v2.xx}
+\def\pstunit{1pt}
+\def\pstverb#1{ pstext="save currentpoint translate
+ Resolution 72.27 div neg scale #1 restore" \space}
+\def\pstVerb#1{ pstext="#1" \space}
+\def\pstverbscale{Resolution 72.27 div neg scale}
+\def\pstrotate{%
+ CP CP translate 3 -1 roll neg rotate \tx@NET}
+\def\pstheader#1{%
+ \typeout{******************************************************}
+ \typeout{Don't forget to include the header file #1!!}
+ \typeout{******************************************************}
+%%
+%% ***************************** END dvi2ps *****************************
+
+
+%% **********************************************************************
+%% ***** dvi3ps ***** dvi3ps ***** dvi3ps ***** dvi3ps ***** dvi3ps *****
+%% **********************************************************************
+%% I.e., dvi2ps, version 3.xx, by Kevin Coombes.
+%% This has not been tested. Consider upgrading to Rokicki's dvips.
+%%
+\def\pstdriver{dvi2ps v3.xx}
+\def\pstunit{1bp}
+\def\pstverb#1{pstext="#1"}
+% \def\pstVerb#1{%
+% \special{pstext="@endspecial #1 @beginspecial @setspecial"}} % v3.0
+\def\pstVerb#1{\special{psraw="#1"}} % v3.3
+\def\pstverbscale{Resolution 72.27 div neg scale}
+\def\pstrotate{%
+ CP CP translate 3 -1 roll neg rotate \tx@NET}
+\def\pstheader#1{%
+ \typeout{******************************************************}
+ \typeout{Don't forget to include the header file #1!!}
+ \typeout{******************************************************}
+%%
+%% ******************* END dvi3ps ***************************************
+
+
+%% **********************************************************************
+%% **** OzTeX **** OzTeX **** OzTeX **** OzTeX **** OzTeX **** OzTeX ****
+%% **********************************************************************
+%% Only the pure graphics objects are supported for OzTeX.
+%% No color, rotation, clipping, nodes and node connections, overlays, etc.
+%% Also, \rput cannot be used with \SpecialCoor.
+%%
+%% The reason is given in the documentation for Version 1.3, September 1990:
+%%
+%% OzTeX generates highly efficient PostScript code but it does so at
+%% the expense of some \special functionality. Many DVI-to-PostScript
+%% translators allow you to do things like use one \verb|\special| to start
+%% rotating TeX text and another to stop the rotation. The way OzTeX
+%% interprets a DVI page makes this impossible.
+%%
+%% If using the header file, you should copy pstricks.pro to global.ps, in
+%% the same directory as your dvi file.
+%%
+\def\pstdriver{OzTeX}
+\def\pstverb#1{\special{null.ps #1}}
+\def\pstunit{1bp}
+\def\pstVerb#1{%
+ \typeout{PSTRICKS WARNING:}%
+ \typeout{\space\space You are using features not supported by OzTeX.}%
+ \typeout{\space\space These will be ignored.}%
+ \gdef\pstVerb##1{}}
+\def\pstverbscale{}
+\def\pstrotate{}
+\def\pstheader#1{%
+ \typeout{******************************************************}
+ \typeout{Don't forget to include the header file #1!!}
+ \typeout{******************************************************}}
+%%
+%% ************************* END OzTeX **********************************
+
+
+%% **********************************************************************
+%% ***** DirectTeX ***** DirectTeX ***** DirectTeX ***** DirectTeX ******
+%% **********************************************************************
+%% DirectTeX is for the Macintosh. These has been tested unsuccessfully,
+%% apparently due to a problem with DirectTeX.
+%%
+\def\pstdriver{DirectTeX}
+%%
+%% Check catcode of "
+{\catcode`\"=12\gdef\pstverb#1{\special{" #1 /Foo{}def }}}
+\def\pstunit{1bp}
+\def\pstVerb#1{\special{ps: #1 }}
+\def\pstverbscale{TeXDict begin normalscale end}
+%%
+%% In the following, CP is short for currentpoint. The neg is necessary
+%% because dvips scales the coordinates by 1 -1:
+\def\pstrotate{%
+ CP CP translate 3 -1 roll neg rotate \tx@NET}
+%%
+\def\pstheader#1{%
+ \typeout{**********************************************************}%
+ \typeout{** Don't forget to include #1 when printing:}%
+ \typeout{** \space\space DVIReader -header #1 myfile}%
+ \typeout{**********************************************************}}
+%%
+%% ****************** END DirectTeX *****************************
+
+
+%%
+%% END: pstricks.con
diff --git a/graphics/pstricks/base/generic/pstricks.tex b/graphics/pstricks/base/generic/pstricks.tex
new file mode 100644
index 0000000000..70283822fc
--- /dev/null
+++ b/graphics/pstricks/base/generic/pstricks.tex
@@ -0,0 +1,4595 @@
+%% pstricks.tex
+%% COPYRIGHT 1993, 1994, 1999 by Timothy Van Zandt
+%% COPYRIGHT 2000-2003 by Denis Girou.
+%% Copyright 2004-2019 Herbert Voss <hvoss@tug.org>
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+% This work has the LPPL maintenance status "maintained".
+%
+% This Current Maintainer of this work is Herbert Voss
+%
+\csname PSTricksLoaded\endcsname
+\let\PSTricksLoaded\endinput
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% !! loading additional TeX packages see line 38,39 and 72ff
+%% !! loading config file pstricks.con line 439
+%% !! loading pro files line 452ff
+%% !! fileversion and date see line 83
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\edef\PstAtCode{\the\catcode`\@}
+\catcode`\@=11\relax
+%
+%\if@check@engine
+ \ifx\c@lor@to@ps\@undefined
+ \def\c@lor@to@ps{\PSTricks_Not_Configured_For_This_Format}% message for a pdflatex run
+ \fi
+%\fi
+\expandafter\ifx\csname @latexerr\endcsname\relax % do we have TeX? then @latexerr isn't defined
+ \input pstricks-tex.def
+\fi
+
+\let\ifpstUndefined\@ifundefined
+
+%\catcode`\@=\PstAtCode\relax
+\ifx\PSTXKeyLoaded\endinput\else\input pst-xkey.tex \fi
+\ifx\PSTFPloaded\endinput\else\input pst-fp.tex\fi
+%
+%\catcode`\@=11\relax
+\def\XKV@ch@ckch@ice#1#2#3{% bugfix for xkeyval
+ \def\XKV@tempa{#1}%
+ \ifx\XKV@tempa\@nnil\let\XKV@tempa\@empty\else
+ \def\XKV@tempa{\def#1{#2}}%
+ \fi
+% \in@{,#2,}{,#3,}%
+\begingroup\edef\x{\endgroup\noexpand\in@{,#2,}}\x{,#3,}%
+%\expandafter\in@\expandafter{\expandafter,#2,}{,#3,}% --- hv 2012-04-27
+ \ifin@
+ \ifXKV@pl
+ \XKV@addtomacro@n\XKV@tempa\@firstoftwo
+ \else
+ \XKV@addtomacro@n\XKV@tempa\@firstofone
+ \fi
+ \else
+ \ifXKV@pl
+ \XKV@addtomacro@n\XKV@tempa\@secondoftwo
+ \else
+ \XKV@toks{#2}%
+ \XKV@err{value `\the\XKV@toks' is not allowed}%
+ \XKV@addtomacro@n\XKV@tempa\@gobble
+ \fi
+ \fi
+ \XKV@tempa
+}
+%
+\def\ProvidesPackageRCS#1{\typeout{Loading #1}}%
+%\@ifnextchar[\ProvidesPackageRCS@i{\ProvidesPackageRCS@i[] }}%$
+%\def\ProvidesPackageRCS@i[#1]#2{}
+
+\ifx\pgfkeysloaded\relax\else
+ \input pgfutil-common.tex
+ \input pgfkeys.code.tex
+ \input pgffor.code.tex
+\fi
+\let\pgfforeach\foreach
+%
+\def\fileversion{2.97}
+\def\filedate{2019/05/11}
+\pst@addfams{pstricks}
+%
+%\define@boolkey[psset]{pstricks}[Pst@]{useURWfonts}[true]{}
+%\psset{useURWfonts}
+%
+% stolen from latex.ltx to make it TeX compatible
+\newcount\psLoopIndex
+\long\def\@fornoop#1\@@#2#3{}
+\long\def\@for#1:=#2\do#3{%
+ \pst@cntm=0
+ \expandafter\def\expandafter\@fortmp\expandafter{#2}%
+ \ifx\@fortmp\@empty \else
+ \expandafter\@forloop#2,\@nil,\@nil\@@#1{#3}\fi}
+%
+\long\def\@forloop#1,#2,#3\@@#4#5{\def#4{#1}\ifx#4\@nnil \else
+ #5\def#4{#2}\ifx#4\@nnil \else\global\advance\psLoopIndex by \@ne\relax
+ #5\@iforloop #3\@@#4{#5}\fi\fi}
+%
+\long\def\@iforloop#1,#2\@@#3#4{\global\advance\psLoopIndex by \@ne\relax%
+ \def#3{#1}\ifx #3\@nnil
+ \expandafter\@fornoop \else
+ #4\relax\expandafter\@iforloop\fi#2\@@#3{#4}}
+%
+\long\def\psforeach#1#2#3{%
+ \global\psLoopIndex=0\relax
+ \if$\ifnum9<1#2$\else\fi\psforeach@ii{#1}{#2}{#3}%
+ \else \expandafter\psforeach@i#2,..,,..,\@nil{#1}{#3}\fi}
+\long\def\psforeach@i#1,#2,..,#3,..,#4\@nil#5#6{%
+ \ifx\relax#3\relax\psforeach@ii{#5}{#1,#2}{#6}%
+ \else\psforeach@iii{#5}{#1}{#2}{#3}{#6}\fi}
+\long\def\psforeach@ii#1#2#3{%
+ \begingroup
+ \edef\reserved@a{#2}%
+ \@for#1:=\reserved@a\do{#3}%
+ \endgroup}
+\long\def\psforeach@iii#1#2#3#4#5{%
+ \pstFPsub\pst@tempA{#3}{#2}%
+ \pst@dimm=\pst@tempA pt%
+ \pstFPstripZeros{\pst@tempA}\pst@tempB%
+ \def\pst@tempA{#2}%
+ \def\pst@tempa{#2}%
+ \pst@dimn=#4pt%
+ \loop
+ \pst@dimm=\pst@tempA pt
+ \ifdim\pst@dimm<\pst@dimn
+ \pstFPadd\pst@tempA{\pst@tempA}{\pst@tempB}%
+ \pstFPstripZeros{\pst@tempA}\pst@tempA%
+ \edef\pst@tempa{\pst@tempa,\pst@tempA}%
+ \repeat%
+ \psforeach@ii{#1}{\pst@tempa}{#5}}
+%
+\long\def\psForeach#1#2#3{% without grouping the contents
+ \global\psLoopIndex=0\relax%
+ \if$\ifnum9<1#2$\else\fi\psforeach@ii{#1}{#2}{#3}%
+ \else \expandafter\psForeach@i#2,..,,..,\@nil{#1}{#3}\fi}
+\long\def\psForeach@i#1,#2,..,#3,..,#4\@nil#5#6{%
+ \ifx\relax#3\relax\psForeach@ii{#5}{#1,#2}{#6}%
+ \else\psForeach@iii{#5}{#1}{#2}{#3}{#6}\fi%
+}
+\long\def\psForeach@ii#1#2#3{%
+ \edef\reserved@a{#2}%
+ \@for#1:=\reserved@a\do{#3}}
+\long\def\psForeach@iii#1#2#3#4#5{%
+ \pstFPsub\pst@tempA{#3}{#2}%
+ \pst@dimm=\pst@tempA pt%
+ \pstFPstripZeros{\pst@tempA}\pst@tempB%
+ \def\pst@tempA{#2}%
+ \def\pst@tempa{#2}%
+ \pst@dimn=#4pt%
+ \loop%
+ \pst@dimm=\pst@tempA pt%
+ \ifdim\pst@dimm<\pst@dimn%
+ \pstFPadd\pst@tempA{\pst@tempA}{\pst@tempB}%
+ \pstFPstripZeros{\pst@tempA}\pst@tempA
+ \edef\pst@tempa{\pst@tempa,\pst@tempA}%
+ \repeat%
+ \psForeach@ii{#1}{\pst@tempa}{#5}
+}
+
+\def\psrecur@i#1{\csname ps@rn#1\psrecur@i}
+\long\def\ps@rnm#1{\endcsname{#1}#1\global\advance\psLoopIndex by \@ne}
+\long\def\ps@rn#1{}
+\def\psLoop#1{\global\psLoopIndex=0\relax%
+ \csname ps@rn\expandafter\psrecur@i
+ \romannumeral\number\number#1 000\endcsname\endcsname}
+
+%
+% hv 2007-10-16 to fix the bug in pst-node with \\[name=...]
+% hv fix bug with empty fnodes in psmatrix
+\def\ps@ifnextchar#1#2#3{%
+ \let\reserved@d= #1%
+ \def\reserved@a{#2}\def\reserved@b{#3}%
+ \futurelet\@let@token\ps@ifnch}
+\def\ps@ifnch{%
+ \ifx\@let@token\reserved@d \let\reserved@b\reserved@a \fi
+ \reserved@b
+}
+\def\pshskip#1{\vrule \@width\z@\nobreak \hskip #1\hskip \z@skip}
+% end bugfix
+\typeout{`PSTricks' v\fileversion\space\space <\filedate> (tvz,hv)}
+\def\@pstrickserr#1#2{%
+ \begingroup
+ \newlinechar`\^^J
+ \edef\pst@tempc{#2}%
+ \expandafter\errhelp\expandafter{\pst@tempc}%
+ \typeout{%
+ PSTricks error. \space See User's Guide for further information.^^J
+ \@spaces\@spaces\@spaces\@spaces
+ Type \space H <return> \space for immediate help.}%
+ \errmessage{#1}%
+ \endgroup}
+\def\@ehpa{%
+ Your command was ignored. Default value substituted.^^J
+ Type \space <return> \space to procede.}
+\def\@ehpb{%
+ Your command was ignored. Will recover best I can.^^J
+ Type \space <return> \space to procede.}
+\def\@ehpc{%
+ You better fix this before proceding.^^J
+ See the PSTricks User's Guide or ask your system administrator for help.^^J
+ Type \space X <return> \space to quit.}
+\def\@ehpd{%
+ Not allowed optional argument.^^J
+ Will proceed with the default setting.^^J
+ Type \space X <return> \space to quit.}
+\def\pst@misplaced#1{\@pstrickserr{Misplaced \string#1 command}\@ehpb}
+\newdimen\pst@dima
+\newdimen\pst@dimb
+\newdimen\pst@dimc
+\newdimen\pst@dimd
+\newdimen\pst@dimg
+\newdimen\pst@dimh
+\newdimen\pst@dimm
+\newdimen\pst@dimn
+\newdimen\pst@dimo
+\newdimen\pst@dimp
+\chardef\f@ur=4
+%
+\newbox\pst@hbox
+\newbox\pst@ibox
+\newbox\pst@boxg
+\newcount\pst@cnta
+\newcount\pst@cntb
+\newcount\pst@cntc
+\newcount\pst@cntd
+\newcount\pst@cntg
+\newcount\pst@cnth
+\newcount\pst@cntm
+\newcount\pst@cntn
+\newcount\pst@cnto
+\newcount\pst@cntp
+\newcount\@zero\@zero=0\relax
+%
+\newif\ifPst@SpecialLength
+\Pst@SpecialLengthfalse
+%
+\newif\if@pst
+\newtoks\pst@toks
+\newif\if@star
+\def\pst@ifstar#1{%
+ \@ifnextchar*{\@startrue\def\ps@next*{#1}\ps@next}{\@starfalse#1}}
+%
+\def\pst@expandafter#1#2{%
+ \def\ps@next{#1}%
+ \edef\@tempa{#2}%
+ \ifx\@tempa\@empty
+ \@pstrickserr{Unexpected empty argument!}\@ehpb
+ \def\@tempa{\@empty}%
+ \fi
+ \expandafter\ps@next\@tempa}
+%
+\def\pst@dimtonum#1#2{\edef#2{\pst@@dimtonum#1}}
+\def\pst@@dimtonum#1{\expandafter\pst@@@dimtonum\the#1}
+{\catcode`\p=12 \catcode`\t=12 \global\@namedef{pst@@@dimtonum}#1pt{#1}}
+%
+\def\pst@getdimdim#1 #2 #3\@nil{%
+ \def\pst@tempA{#2}%
+ \ifx\pst@tempA\@empty
+ \pssetlength\pst@dimn{#1}%
+ \pst@dimm=\z@%
+ \else%
+ \pssetlength\pst@dimm{#1}%
+ \pssetlength\pst@dimn{#2}%
+ \fi%
+}
+\def\pst@getxdimdim#1 #2 #3\@nil{%
+ \def\pst@tempA{#2}%
+ \ifx\pst@tempA\@empty
+ \pssetxlength\pst@dimn{#1}%
+ \pst@dimm=\z@
+ \else%
+ \pssetxlength\pst@dimm{#1}%
+ \pssetxlength\pst@dimn{#2}%
+ \fi%
+}
+\def\pst@getydimdim#1 #2 #3\@nil{%
+ \def\pst@tempA{#2}%
+ \ifx\pst@tempA\@empty
+ \pssetylength\pst@dimn{#1}%
+ \pst@dimm=\z@%
+ \else
+ \pssetylength\pst@dimm{#1}%
+ \pssetylength\pst@dimn{#2}%
+ \fi}
+%
+% A modulo macro for integer values
+% \pst@mod{34}{6}\value ==> \value is 4
+%
+\def\pst@mod#1#2#3{%
+ \begingroup%
+ \pst@cntm=#1\pst@cntn=#2\relax%
+ \pst@cnto=\pst@cntm%
+ \divide\pst@cntm by \pst@cntn%
+ \multiply\pst@cntn by \pst@cntm%
+ \advance\pst@cnto by -\pst@cntn%
+ \edef\value{\endgroup\def\noexpand#3{\number\pst@cnto}}\value%
+}
+\def\pst@max#1#2#3{%
+ \begingroup%
+ \pst@cntm=#1\pst@cntn=#2\relax%
+ \ifnum\pst@cntm<\pst@cntn\pst@cntm=\pst@cntn\fi
+ \global#3=\the\pst@cntm%
+ \endgroup%
+}
+\def\pst@maxdim#1#2#3{%
+ \begingroup%
+ \pst@dimm=#1\pst@dimn=#2\relax%
+ \ifdim\pst@dimm<\pst@dimn\pst@dimm=\pst@dimn\fi
+ \global#3=\the\pst@dimm%
+ \endgroup%
+}
+\def\pst@mindim#1#2#3{%
+ \begingroup%
+ \pst@dimm=#1\pst@dimn=#2\relax%
+ \ifdim\pst@dimm>\pst@dimn\pst@dimm=\pst@dimn\fi
+ \global#3=\the\pst@dimm%
+ \endgroup%
+}
+\def\pst@abs#1#2{%
+ \begingroup%
+ \pst@cntm=#1\relax%
+ \ifnum\pst@cntm<\z@\pst@cntm=-\pst@cntm\fi%
+ \global#2=\the\pst@cntm
+ \endgroup%
+}
+\def\pst@absdim#1#2{%
+ \begingroup%
+ \pst@dimm=#1\relax%
+ \ifdim\pst@dimm<\z@\pst@dimm=-\pst@dimm\fi%
+ \global#2=\the\pst@dimm%
+ \endgroup%
+}
+%
+\def\pst@pyth#1#2#3{% from pst-3d
+ \begingroup%
+ \pst@dima=#1\relax%
+ \ifnum\pst@dima<\z@\pst@dima=-\pst@dima\fi% dima=abs(x)
+ \pst@dimb=#2\relax%
+ \ifnum\pst@dimb<\z@\pst@dimb=-\pst@dimb\fi% dimb=abs(y)
+ \advance\pst@dimb\pst@dima % dimb=s=abs(x)+abs(y)
+ \ifnum\pst@dimb=\z@
+ \global\pst@dimg=\z@ % dimg=z=sqrt(x^2+y^2)
+ \else
+ \multiply\pst@dima 8\relax % dima= 8abs(x)
+ \pst@@divide\pst@dima\pst@dimb % dimg =8t=8abs(x)/s
+ \advance\pst@dimg -4pt % dimg = 4tau = (8t-4)
+ \multiply\pst@dimg 2
+ \pst@dimtonum\pst@dimg\pst@tempa
+ \pst@dima=\pst@tempa\pst@dimg % dima=(8tau)^2
+ \advance\pst@dima 64pt % dima=u=[64+(8tau)^2]/2
+ \divide\pst@dima 2\relax % =(8f)^2
+ \pst@dimd=7pt % initial guess at sqrt(u)
+ \pst@@pyth\pst@@pyth\pst@@pyth % dimd=sqrt(u)
+ \pst@dimtonum\pst@dimd\pst@tempa
+ \pst@dimg=\pst@tempa\pst@dimb
+ \global\divide\pst@dimg 8 % dimg=z=(8f)*s/8
+ \fi
+ \endgroup
+ #3=\pst@dimg}
+%
+\def\pst@@pyth{% dimd = g <-- (g + u/g)/2
+ \pst@@divide\pst@dima\pst@dimd
+ \advance\pst@dimd\pst@dimg
+ \divide\pst@dimd 2\relax}
+%
+% ----- the old pst@pyth begin ----- did not use dimens
+\def\pst@Pyth#1#2#3{\ifdim#1>#2\pst@@Pyth#1#2#3\else\pst@@Pyth#2#1#3\fi}
+\def\pst@@Pyth#1#2#3{%
+ \ifdim4#1>9#2\relax
+ #3=#1\advance#3 .2122#2%
+ \else
+ #3=.8384#1\advance#3 .5758#2%
+ \fi%
+}
+% ----- the old pst@pyth end -----
+%
+%------ new version \pst@divide ̣-------- by Michael Sharpe
+\def\pst@divide#1#2#3{%
+ \pst@@divide{#1}{#2}%
+ \advance\pst@dimg \pst@cnta pt%
+ \pst@dimtonum\pst@dimg{#3}%
+}
+\def\pst@@divide#1#2{%
+ \pst@dimg=#1\relax%
+ \pst@dimh=#2\relax%
+ \pst@cnth=\pst@dimh%
+ \pst@cntg=\pst@dimg%
+ \pst@cnta=\pst@cntg%
+ \divide\pst@cnta\pst@cnth%
+ \advance\pst@dimg -\pst@cnta\pst@dimh%
+ \pst@cntm=67108863\relax %2^26 -1
+ \pst@@@divide\pst@@@divide\pst@@@divide\pst@@@divide%
+ \divide\pst@dimg\pst@cnth%
+}%
+\def\pst@@@divide{%
+ \ifnum%
+ \ifnum\pst@dimg<\z@-\fi\pst@dimg<\pst@cntm%
+ \multiply\pst@dimg\sixt@@n%
+ \else%
+ \divide\pst@cnth\sixt@@n%
+ \fi%
+}%
+%
+%-------------- the old version ----------
+\iffalse
+\def\pst@divide#1#2#3{%
+ \pst@@divide{#1}{#2}%
+ \pst@dimtonum\pst@dimg{#3}%
+}
+\def\pst@@divide#1#2{%
+ \pst@dimg=#1\relax
+ \pst@dimh=#2\relax
+ \pst@cntg=\pst@dimh
+ \pst@cnth=67108863
+ \pst@@@divide\pst@@@divide\pst@@@divide\pst@@@divide
+ \divide\pst@dimg\pst@cntg%
+}
+\def\pst@@@divide{%
+ \ifnum
+ \ifnum\pst@dimg<\z@-\fi\pst@dimg<\pst@cnth
+ \multiply\pst@dimg\sixt@@n
+ \else
+ \divide\pst@cntg\sixt@@n
+ \fi%
+}
+\fi
+%-------------- end old vesrion ---------------
+%
+\def\pst@configerr#1{\@pstrickserr{\string#1 not defined in pstricks.con}\@ehpc}
+%
+\def\pstVerb#1{\pst@configerr\pstVerb}
+\def\pstverb#1{\pst@configerr\pstverb}
+\def\pstverbscale{\pst@configerr\pstverbscale}
+\def\pstrotate{\pst@configerr\pstrotate}
+\def\pstheader#1{\pst@configerr\pstheader}
+\def\pstdriver{\pst@configerr\pstdriver}
+\@ifundefined{pstcustomize}%
+ {\def\pstcustomize{\endinput\let\pstcustomize\relax}}{}
+%
+\input pstricks.con % local config file
+%
+\newif\ifPSTricks
+\PSTrickstrue
+\def\PSTricksOff{%
+ \def\pstheader##1{}%
+ \def\pstverb##1{}%
+ \def\pstVerb##1{}%
+ \PSTricksfalse%
+}
+\@ifundefined{pst@def}{\def\pst@def#1<#2>{\@namedef{tx@#1}{#2 }}}{}
+\@ifundefined{pst@ATH}{\def\pst@ATH<#1>{}}{}
+%
+\pstheader{pstricks.pro}
+%\pstheader{pstricks-fonts.pro}
+\pstheader{pst-algparser.pro}
+\pstheader{pst-tools.pro}
+%
+\def\pst@dict{tx@Dict begin }
+\def\pst@theheaders{pstricks.pro, pst-algparser.pro}
+\def\pst@Verb#1{\pstVerb{\pst@dict #1 end}}
+\def\tx@Atan{Atan }
+\def\tx@Div{Div }
+\def\tx@NET{NET }
+\def\tx@Pyth{Pyth }
+\def\tx@PtoC{PtoC }
+\def\tx@PathLength@{PathLength@ }
+\def\tx@PathLength{PathLength }
+\pst@dimg=\pstunit\relax
+\ifdim\pst@dimg=1bp
+\def\pst@stp{.996264 dup scale}
+\else
+\edef\pst@stp{1 \pst@@dimtonum\pst@dimg\space div dup scale}
+\fi
+\def\tx@STP{STP }
+\def\tx@STV{STV }
+%
+%--------------------------------------- PS stuff ---------------------------------
+% on stack x y
+\pst@def{UserCoor}< \pst@number\psyunit div exch \pst@number\psxunit div exch >
+\pst@def{ScreenCoor}< \pst@number\psyunit mul exch \pst@number\psxunit mul exch >
+%--------------------------------------- PS stuff end -----------------------------
+%
+\def\pst@number#1{\pst@@dimtonum#1\space}
+%
+%-----------------------% hv 20100413
+\def\pst@strip@dot#1{\expandafter\pst@strip@dot@i#1..\@nil}
+\def\pst@strip@dot@i#1.#2.#3\@nil{%
+ \ifnum1#2>10\relax #1.#2\else#1\fi}
+%-----------------------% hv 20100413
+\def\pst@checknum#1#2{%
+ \edef\ps@next{#1}%
+ \ifx\ps@next\@empty
+ \let\pst@num\z@
+ \else
+ \expandafter\pst@@checknum\ps@next..\@nil
+ \fi
+ \ifcase\pst@num\relax
+ \@pstrickserr{Bad number: `#1'. 0 substituted.}\@ehpa
+ \def#2{0 }%
+ \or% 1
+ \edef#2{\ifnum\pst@num=\tw@-\fi\the\pst@cntg.%
+ \expandafter\@gobble\the\pst@cnth\space}%
+ \or% 2
+ \edef#2{\ifnum\pst@num=\tw@-\fi\the\pst@cntg.%
+ \expandafter\@gobble\the\pst@cnth\space}%
+ \or% 3
+ \edef#2{\pst@tempA\space}%
+ \fi}
+\def\pst@@checknum{%
+ \@ifnextchar-%
+ {\let\pst@num\tw@\expandafter\pst@@@checknum\@gobble}%
+ {\@ifnextchar !%
+ {\def\pst@num{3}\pst@@@@@checknum}
+ {\let\pst@num\@ne\pst@@@checknum}}%
+}
+\def\pst@@@checknum#1.#2.#3\@nil{%
+\afterassignment\pst@@@@checknum\pst@cntg=0#1\relax\@nil%
+\afterassignment\pst@@@@checknum\pst@cnth=1#2\relax\@nil}
+\def\pst@@@@checknum#1\relax\@nil{\ifx\@nil#1\@nil\else\let\pst@num\z@\fi}
+%
+\def\pst@@@@@checknum#1#2.#3\@nil{\def\pst@tempA{#2}}% PostScript Notation with !<code>
+%
+\def\pst@getnumii#1 #2 #3\@nil{%
+ \pst@checknum{#1}\pst@tempg%
+ \ifx\relax#2\relax\let\pst@temph\pst@tempg\else\pst@checknum{#2}\pst@temph\fi}
+\def\pst@getnumiii#1 #2 #3 #4\@nil{%
+\pst@checknum{#1}\pst@tempg%
+\pst@checknum{#2}\pst@temph%
+\pst@checknum{#3}\pst@tempi}
+\def\pst@getnumiv#1 #2 #3 #4 #5\@nil{%
+\pst@checknum{#1}\pst@tempg%
+\pst@checknum{#2}\pst@temph%
+\pst@checknum{#3}\pst@tempi%
+\pst@checknum{#4}\pst@tempj}
+%
+\def\pst@getdimnum#1 #2 #3\@nil{%
+ \pssetlength\pst@dimg{#1}%
+ \pst@checknum{#2}\pst@tempg%
+}
+\def\pst@getscale#1#2{% read and check a scale input x [y]
+ \edef\pst@tempg{#1}%
+ \ifx\pst@tempg\@none
+ \def#2{}%
+ \else
+ \pst@expandafter\pst@getnumii{#1 #1} {} {} {}\@nil
+ \ifdim\pst@tempg\p@=\z@
+ \@pstrickserr{Bad scaling argument `#1'}\@ehpa
+ \def#2{}%
+ \else
+ \ifdim\pst@temph\p@=\z@
+ \@pstrickserr{Bad scaling argument `#1'}\@ehpa
+ \def#2{}%
+ \else
+ \edef#2{\pst@tempg\space \pst@temph\space scale }%
+ \fi
+ \fi
+ \fi%
+}
+\def\pst@getint#1#2{% read and check an integer
+ \pst@cntg=#1\relax
+ \edef#2{\the\pst@cntg\space}%
+}
+\begingroup
+\catcode`\{=12
+\catcode`\}=12
+\catcode`\[=1
+\catcode`\]=2
+\gdef\pslbrace[{ ]
+\gdef\psrbrace[} ]
+\endgroup
+%
+\pstVerb{
+ /pssetRGBcolor /setrgbcolor load def
+ /pssetCMYKcolor /setcmykcolor load def
+ /pssetGraycolor /setgray load def
+}
+\def\@newcolor#1#2{%
+ \expandafter\edef\csname #1\endcsname{\noexpand\pst@color{#2}}%
+ %\expandafter\edef\csname color@#1\endcsname{#2}%
+ \expandafter\edef\csname\string\color@#1\endcsname{#2}% hv 1.14 2005-12-17
+ \ignorespaces}
+%
+\def\pst@color#1{\def\pst@currentcolor{#1}\pstVerb{#1}\aftergroup\pst@endcolor}%
+\def\pst@endcolor{\pstVerb{\pst@currentcolor}}
+\def\pst@currentcolor{0 setgray}
+\def\altcolormode{%
+\def\pst@color##1{%
+ \pstVerb{gsave ##1}\aftergroup\pst@endcolor}%
+\def\pst@endcolor{\pstVerb{\pst@grestore}}}
+\def\pssetMonochrome{%
+ \pstVerb{
+ /setrgbcolor { add add 0 gt {0}{1} ifelse setgray } def
+ /setcmykcolor{ 4 dict begin
+ /k ED /y ED /m ED /c ED
+ 1 1 k sub c mul k add sub 0.29 mul
+ 1 1 k sub m mul k add sub 0.587 mul add
+ 1 1 k sub y mul k add sub 0.114 mul add
+ end 0 gt {0}{1} ifelse setgray } def }}
+\def\pssetGrayscale{%
+ \pstVerb{
+ /setrgbcolor { 0.07 mul exch 0.71 mul add exch 0.21 mul add setgray } def
+ /setcmykcolor{ 4 dict begin
+ /k ED /y ED /m ED /c ED
+ 1 1 k sub c mul k add sub 0.29 mul
+ 1 1 k sub m mul k add sub 0.587 mul add
+ 1 1 k sub y mul k add sub 0.114 mul add
+ end setgray } def }}
+\def\psresetColor{\pstVerb{
+ /setrgbcolor tx@Dict begin /pssetRGBcolor load end def
+ /setcmykcolor tx@Dict begin /pssetCMYKcolor load end def }}
+
+\def\pst@grestore{
+ currentpoint
+ matrix currentmatrix
+ currentfont
+ grestore
+ setfont
+ setmatrix
+ moveto
+}
+%\def\pst@usecolor#1{\csname color@#1\endcsname\space}% hv 1.14 2005--12-17
+\def\pst@usecolor#1{\csname\string\color@#1\endcsname\space}
+%
+\def\newgray#1#2{%
+ \pst@checknum{#2}\pst@tempg
+ \@newcolor{#1}{\pst@tempg setgray}}%
+\def\newrgbcolor#1#2{%
+ \pst@expandafter\pst@getnumiii{#2} {} {} {} {}\@nil
+ \@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi setrgbcolor}}
+\def\newhsbcolor#1#2{%
+ \pst@expandafter\pst@getnumiii{#2} {} {} {} {}\@nil
+ \@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi sethsbcolor}}
+\def\newcmykcolor#1#2{%
+ \pst@expandafter\pst@getnumiv{#2} {} {} {} {} {}\@nil
+ \@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi \pst@tempj setcmykcolor}}
+\newgray{black}{0}
+\newgray{darkgray}{.25}
+\newgray{gray}{.5}
+\newgray{lightgray}{.75}
+\newgray{white}{1}
+\newrgbcolor{red}{1 0 0}
+\newrgbcolor{green}{0 1 0}
+\newrgbcolor{blue}{0 0 1}
+\newrgbcolor{yellow}{1 1 0}
+\newrgbcolor{cyan}{0 1 1}
+\newrgbcolor{magenta}{1 0 1}
+
+\@ifundefined{xglobal}% do we have xcolor loaded?
+ {\@newcolor{randomgray}{tx@Dict begin Rand setgray end}%
+ \@newcolor{randomrgb}{tx@Dict begin Rand Rand Rand setrgbcolor end}%
+ \@newcolor{randomcmyk}{tx@Dict begin Rand Rand Rand Rand setcmykcolor end}%
+ \@newcolor{randomhsb}{tx@Dict begin Rand Rand Rand sethsbcolor end}%
+ }{%
+ \definecolor[ps]{randomgray}{gray}{tx@Dict begin Rand end}%
+ \definecolor[ps]{randomrgb}{rgb}{tx@Dict begin Rand Rand Rand end}%
+ \definecolor[ps]{randomcmyk}{cmyk}{tx@Dict begin Rand Rand Rand Rand end}%
+ \definecolor[ps]{randomhsb}{hsb}{tx@Dict begin Rand Rand Rand end}%
+ }
+%
+\define@boolkey[psset]{pstricks}[Pst@]{draft}[true]{}
+\define@key[psset]{pstricks}{bgcolor}{\def\pst@bgcolor{#1}}% background for pspicture
+\psset[pstricks]{bgcolor={},draft=false}% \pst@bgcolor is \@empty
+
+\define@key[psset]{pstricks}{style}{%
+ \@ifundefined{pscs@#1}%
+ {\@pstrickserr{Custom style `#1' undefined}\@ehpa}%
+ {\@nameuse{pscs@#1}}%
+}
+\def\newpsstyle{\@ifnextchar[\newpsstyle@ii{\newpsstyle@ii[]}}%% hv 2016-12-23
+%
+%\def\newpsstyle@i#1#2{\@namedef{pscs@#1}{%
+% \def\pst@tempA{#2}%
+% \ifx\pst@tempA\@empty\else\psset{#2}\fi}}
+%
+\def\newpsstyle@ii[#1]#2#3{%
+ \@namedef{pscs@#2}{\if$#1$\psset{#3}\else\psset[#1]{#3}\fi}}%% end
+%
+\def\addto@psstyle#1#2{%
+ \pst@toks=\expandafter{#1#2}%
+ \edef#1{\the\pst@toks}}
+\def\addtopsstyle#1#2{%
+ \def\pst@tempA{#2}%
+ \ifx\pst@tempA\@empty\else
+ \@ifundefined{pscs@#1}%
+ {\newpsstyle{#1}{#2}}%
+ {\expandafter\addto@psstyle\csname pscs@#1\endcsname{\psset{#2}}}%
+ \fi}
+%------------ hv 1.16 end -------------------
+%
+\def\@none{none}
+\def\pst@getcolor#1#2{%
+% \@ifundefined{color@#1}% hv 1.14 2005-12-17
+ \@ifundefined{\string\color@#1}%
+ {\@pstrickserr{Color `#1' not defined}\@eha}%
+ {\edef#2{#1}}%
+}
+\newdimen\psunit \psunit 1cm
+\newdimen\psxunit \psxunit 1cm
+\newdimen\psyunit \psyunit 1cm
+\let\psrunit\psunit
+%
+\def\pstunit@off{\let\@psunit\ignorespaces\ignorespaces}
+%
+\def\pssetlength#1#2{%
+ \let\@psunit\psunit
+ \afterassignment\pstunit@off
+ #1 #2\@psunit%
+}
+\def\psaddtolength#1#2{%
+ \let\@psunit\psunit
+ \afterassignment\pstunit@off
+ \advance#1 #2\@psunit%
+}
+\def\pssetxlength#1#2{%
+ \let\@psunit\psxunit
+ \ifpst@useCalc
+ \edef\@@temp{\pscalculate{#2}}%
+ \afterassignment\pstunit@off
+ #1 \@@temp\@psunit
+ \else
+ \afterassignment\pstunit@off
+ #1 #2\@psunit
+ \fi
+}
+\def\pssetylength#1#2{%
+ \let\@psunit\psyunit
+ \ifpst@useCalc
+ \edef\@@temp{\pscalculate{#2}}%
+ \afterassignment\pstunit@off
+ #1 \@@temp\@psunit
+ \else
+ \afterassignment\pstunit@off
+ #1 #2\@psunit
+ \fi
+}
+\define@key[psset]{pstricks}{unit}[1cm]{%
+ \pssetlength\psunit{#1}%
+ \psxunit=\psunit%
+ \psyunit=\psunit%
+}
+\define@key[psset]{pstricks}{runit}[1cm]{\pssetlength\psrunit{#1}}
+\define@key[psset]{pstricks}{xunit}[1cm]{\pssetxlength\psxunit{#1}}
+\define@key[psset]{pstricks}{yunit}[1cm]{\pssetylength\psyunit{#1}}
+%
+\define@key[psset]{pstricks}{PstDebug}[0]{\pst@getint{#1}\Pst@Debug}% hv 2004-06-22
+\psset[pstricks]{PstDebug=0}
+\def\psDEBUG{\@ifnextchar[\psDEBUG@i{\psDEBUG@i[PSTricks]}}%
+\def\psDEBUG@i[#1]#2{\ifnum\Pst@Debug>0 \expandafter\typeout{<#1>: #2}\fi}%
+%
+\def\pst@getlength#1#2{%
+ \pssetlength\pst@dimg{#1}%
+ \edef#2{\pst@number\pst@dimg}%
+}
+\def\pst@@getlength#1#2{%
+ \pssetlength\pst@dimg{#1}%
+ \edef#2{\number\pst@dimg sp}%
+}
+\def\pst@getcoor#1#2{\pst@@getcoor{#1}\let#2\pst@coor}
+\def\pst@coor{0 0 }
+%
+\def\pst@getcoors#1#2{%
+ \def\pst@aftercoors{\addto@pscode{#1 \pst@coors }#2}%
+ \def\pst@coors{}%
+ \pst@@getcoors
+}
+\def\pst@@getcoors(#1){%
+ \pst@@getcoor{#1}%
+ \edef\pst@coors{\pst@coor\pst@coors}%
+ \@ifnextchar({\pst@@getcoors}{\pst@aftercoors}%
+}
+%
+\newcount\pst@C@@rType% 0: default cartesian coordinates and angles
+%
+\def\pst@getangle#1#2{\pst@@getangle{#1}\let#2\pst@angle}
+\def\pst@angle{0 }
+%
+\def\cartesian@coor#1,#2,#3\@nil{%
+ \pssetxlength\pst@dimg{#1}%
+ \pssetylength\pst@dimh{#2}%
+ \edef\pst@coor{\pst@number\pst@dimg \pst@number\pst@dimh}%
+}
+\def\NormalCoor{%
+ \def\pst@@getcoor##1{\pst@expandafter\cartesian@coor{##1},\relax,\@nil}%
+ \def\pstCheckCoorType##1{\global\pst@C@@rType=0}%
+ \Pst@SpecialLengthfalse
+ \def\pssetlength##1##2{%
+ \let\@psunit\psunit
+ \afterassignment\pstunit@off
+ ##1 ##2\@psunit%
+ }%
+ \def\pst@@getangle##1{%
+ \pst@checknum{##1}\pst@angle%
+ \edef\pst@angle{\pst@angle \pst@angleunit}%
+ }%
+ \def\psput@##1{\pst@@getcoor{##1}\leavevmode\psput@cartesian}%
+}
+%\NormalCoor% set to normal read of coors, angles and lengths
+%
+\def\degrees{\@ifnextchar[{\@degrees}{\def\pst@angleunit{}}}
+\def\@degrees[#1]{%
+ \pst@checknum{#1}\pst@tempg
+ \edef\pst@angleunit{360 \pst@tempg div mul }%
+ \pstVerb{tx@Dict begin startGlobal /pst@angleunit {\pst@angleunit} def endGlobal end}%
+ \ignorespaces}
+%
+\def\radians{\def\pst@angleunit{57.2956 mul }%
+ \pstVerb{tx@Dict begin startGlobal /pst@angleunit {\pst@angleunit} def endGlobal end}}%
+\def\pst@angleunit{}%
+
+%
+\def\SpecialCoor{%
+ \def\pst@@getcoor##1{%
+ \begingroup%
+ \pst@activecoor
+ \xdef\pst@tempg{##1}%
+ \endgroup
+ \expandafter\special@coor\pst@tempg||\@nil}%
+ \def\pstCheckCoorType##1{%
+ \begingroup
+ \pst@activecoor
+ \xdef\pst@tempg{##1}%
+ \endgroup
+ \psDEBUG[pstCheckCoorType]{:Checking coor \pst@tempg:}%
+ \expandafter\pst@CheckCoorType\pst@tempg||\@nil%
+ \psDEBUG[pstCheckCoorType]{::Coor type=\the\pst@C@@rType::}%
+ }%
+ \def\pssetlength##1##2{%
+ \begingroup%
+ \pst@activecoor%
+ \xdef\pst@tempg{##2}%
+ \endgroup%
+ \expandafter\special@length\pst@tempg\@nil{##1}%
+ \ignorespaces}%
+ \def\pst@@getangle##1{%
+ \begingroup%
+ \pst@activecoor%
+ \xdef\pst@tempg{##1}%
+ \endgroup%
+ \expandafter\special@angle\pst@tempg\@empty)\@nil%
+ }%
+ \def\psput@##1{\pst@@getcoor{##1}\leavevmode\psput@special}%
+}
+\SpecialCoor% set to special read of coors, angles and lengths
+%
+\define@key[psset]{}{precode}{\def\pst@prepscode{#1 }}
+\define@key[psset]{}{postcode}{\def\pst@postpscode{#1 }}
+\psset{precode={},postcode={}}% For use in other packages
+%
+%
+\begingroup
+\catcode`\|=13
+\catcode`\;=13
+\catcode`\!=13
+\catcode`\*=13
+\catcode`\>=13
+\catcode`\+=13
+\gdef\pst@activecoor{%
+ \def|{\string|}%
+ \def;{\string;}%
+ \def!{\string!}%
+ \def*{\string*}% algebraic expression hv 2007-11-17
+ \def>{\string>}%
+ \def+{\string+}% pure algebaric 2013-04-23
+}
+\endgroup
+% \pst@C@@rType = 0 cartesian (x,y)
+% = 1 polar (r;phi)
+% = 2 PS (! x y)
+% = 3 mixed ((x,y)|(x,y))
+% = 4 algebraic (*x f(x)) x in PostScript notation
+% = 5 node (A)
+% = 6 special node ([...]A)
+% = 7 node (>A)
+% = 8 algebraic (+x,f(x)) _both_ algebraic
+\def\pst@CheckCoorType#1|#2|#3\@nil{%
+ \ifx#3|\relax
+ \global\pst@C@@rType=3\relax
+ \else
+ \expandafter\pst@@CheckCoorType#1;;\@nil%
+ \fi}
+%
+\def\pst@@CheckCoorType#1#2;#3;#4\@nil{%
+%\typeout{====1:#1}%
+%\typeout{====2:#2}%
+%\typeout{====3:#3}%
+%\typeout{====4:#4}%
+ \ifx#1>\relax% node with special rotation for \uput
+ \global\pst@C@@rType=7
+ \else
+ \ifcat#1a\relax% node names should start with a letter
+ \global\pst@C@@rType=5
+ \else
+ \ifx#1[\relax% special node coor: [..]A
+ \global\pst@C@@rType=6
+ \else
+ \ifx#1!\relax% PostScript code: x y
+ \global\pst@C@@rType=2
+ \else
+ \ifx#1*\relax% algebraic PostScript code: x f(x)
+ \global\pst@C@@rType=4
+ \else
+ \ifx#1+\relax% algebraic algebraic: x, f(x)
+ \global\pst@C@@rType=8
+ \else
+ \ifx#4;\relax% polar coordinates
+ \global\pst@C@@rType=1
+ \else
+ \global\pst@C@@rType=0
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \psDEBUG[pstCheckCoorType]{::\the\pst@C@@rType::}%
+ }%
+%
+%
+\def\special@coor#1|#2|#3\@nil{%
+ \ifx#3|\relax
+ \mixed@coor{#1}{#2}%
+ \else
+ \special@@coor#1;;\@nil%
+ \fi}
+%
+\def\special@@coor#1{%
+ \ifcat#1a\relax% node names should start with a letter
+ \def\ps@next{\node@coor#1}%
+ \else
+ \ifx#1[\relax% special node coor: [..]A
+ \def\ps@next{\Node@coor[}%
+ \else
+ \ifx#1>\relax% PostScript code: x y
+ \def\ps@next{\special@@@@coor}%
+ \else
+ \ifx#1!\relax% PostScript code: x y
+ \def\ps@next{\raw@coor}%
+ \else
+ \ifx#1*\relax% PostScript/algebraic code: x f(x)
+ \def\ps@next{\alg@coor}%
+ \else
+ \ifx#1+\relax% algebraic code: x,f(x)
+ \def\ps@next{\algalg@coor}%
+ \else%
+ \def\ps@next{\special@@@coor#1}%
+ \fi%
+ \fi%
+ \fi%
+ \fi\fi%
+ \fi%
+ \ps@next%
+}
+\def\special@@@coor#1;#2;#3\@nil{%
+ \ifx#3;\relax
+ \polar@coor{#1}{#2}%
+ \else
+ \cartesian@coor#1,\relax,\@nil
+ \fi%
+}
+\def\special@@@@coor#1#2;#3;#4\@nil{%
+ \def\ps@A{A}\def\ps@B{#1}%
+ \ifcat\ps@A\ps@B\relax%
+ \node@coor#1#2;;\@nil%
+ \else%
+ \cartesian@coor#1#2,\relax,\@nil
+ \fi%
+}
+\def\mixed@coor#1#2{%
+ \begingroup%
+% DG/SR modification begin - Oct. 27, 1997 - Patch 6
+%\specialcoor@ii#1;;\@nil
+%\let\pst@tempa\pst@coor
+%\specialcoor@ii#2;;\@nil
+ \special@@coor#1;;\@nil%
+ \let\pst@tempa\pst@coor%
+ \special@@coor#2;;\@nil%
+% DG/SR modification end
+ \xdef\pst@tempg{\pst@tempa pop \pst@coor exch pop }%
+ \endgroup%
+ \let\pst@coor\pst@tempg%
+}
+%
+\def\polar@coor#1#2{%
+% \pssetlength\pst@dimg{#1}%
+ \pssetlength\pst@dimb{#1}% hv 2007-10-16 g is already used in get@@angle
+ \pst@@getangle{#2}%
+% \edef\pst@coor{\pst@number\pst@dimg \pst@angle \tx@PtoC}% dito
+ \edef\pst@coor{\pst@number\pst@dimb \pst@angle \tx@PtoC }%
+}
+%
+\def\raw@coor{\@ifnextchar !\raw@@coor\raw@@@coor}
+\def\raw@@coor!#1;#2\@nil{% PostScript code without using \tx@ScreenCoor
+ \edef\pst@coor{#1 }}
+\def\raw@@@coor#1;#2\@nil{% PostScript code
+ \edef\pst@coor{ #1 \tx@ScreenCoor }}
+%
+\def\alg@coor{\@ifnextchar*{\alg@@coor}{\alg@@@@coor}}
+\def\alg@@coor*#1;#2\@nil{\expandafter\alg@@@coor#1\@nil}
+\def\alg@@@coor#1 #2\@nil{% algebraic PostScript code
+%\typeout{Nummer1: #1}%
+%\typeout{Nummer2: #2}%
+ \edef\pst@coor{%
+ /Func (#1) AlgParser cvx def
+ /y #2 def
+ y Func exch \tx@ScreenCoor }}
+%
+\def\alg@@@@coor#1;#2\@nil{\expandafter\alg@@@@@coor#1\@nil}
+\def\alg@@@@@coor#1 #2\@nil{% algebraic PostScript code
+ \edef\pst@coor{%
+ /x #1 def
+ /Func (#2) AlgParser cvx def
+ x Func \tx@ScreenCoor }}
+%
+\define@boolkey[psset]{}[Pst@]{exchange}[true]{}
+\psset{exchange=false}
+%
+\def\algalg@coor#1;#2\@nil{\expandafter\algalg@@@coor#1\@nil}
+\def\algalg@@@coor#1,#2\@nil{% algebraic algebraic code
+ \edef\pst@coor{%
+ /x (#1) AlgParser cvx def
+ /Func (#2) AlgParser cvx def
+ x Func \tx@ScreenCoor }}
+%
+\def\node@coor#1\@nil{%
+ \@pstrickserr{You must load `pst-node.tex' to use node coordinates.}\@ehps
+ \def\pst@coor{0 0 }%
+}
+\def\Node@coor{\node@coor}
+%
+\def\special@angle#1#2)#3\@nil{%
+ \ifx !#1\relax
+ \edef\pst@angle{#2\space \pst@angleunit}%
+ \else\ifx(#1\relax
+ \pst@@getcoor{#2}%
+ \edef\pst@angle{\pst@coor exch \tx@Atan}%
+ \else
+ \pst@checknum{#1#2}\pst@angle
+ \edef\pst@angle{\pst@angle \pst@angleunit}%
+ \fi\fi}
+%
+\def\special@length#1#2\@nil#3{%
+ \ifx !#1\relax
+ \edef\pst@SpecialLength{ #2 \pst@number\psunit mul }%
+ \Pst@SpecialLengthtrue
+ \else
+ \let\@psunit\psunit
+ \afterassignment\pstunit@off
+ #3 #1#2\@psunit
+ \Pst@SpecialLengthfalse
+ \fi
+}
+%
+\def\Cartesian{%
+ \def\cartesian@coor##1,##2,##3\@nil{%
+ \pssetxlength\pst@dimg{##1}%
+ \pssetylength\pst@dimh{##2}%
+ \edef\pst@coor{\pst@number\pst@dimg \pst@number\pst@dimh}%
+ }%
+ \@ifnextchar({\Cartesian@}{}%
+}
+\def\Cartesian@(#1,#2){%
+ \pssetxlength\psxunit{#1}%
+ \pssetylength\psyunit{#2}%
+ \ignorespaces
+}
+\def\Polar{%
+ \def\psput@cartesian{\psput@special}%
+ \def\cartesian@coor##1,##2,##3\@nil{\polar@coor{##1}{##2}}%
+}%
+\define@key[psset]{pstricks}{origin}[]{%
+ \pst@@getcoor{#1}%
+ \edef\psk@origin{\pst@coor T }}
+\def\psk@origin{}
+%
+\define@boolkey[psset]{pstricks}[Pst@]{algebraic}[true]{}
+\psset{algebraic=false}
+%
+\define@boolkey[psset]{pstricks}[]{swapaxes}[true]{% \if@pst
+ \@nameuse{@pst#1}%
+ \if@pst\def\psk@swapaxes{-90 rotate -1 1 scale }%
+ \else\def\psk@swapaxes{}%
+ \fi
+}
+\psset[pstricks]{swapaxes=false}
+%
+\define@boolkey[psset]{pstricks}[]{showpoints}[true]{}
+\psset[pstricks]{showpoints=false}
+%
+\let\pst@setrepeatarrowsflag\relax
+%
+\define@key[psset]{pstricks}{border}[0pt]{\pst@getlength{#1}\psk@border \pst@setrepeatarrowsflag}
+\psset[pstricks]{border=0pt}
+\define@key[psset]{pstricks}{bordercolor}[white]{\pst@getcolor{#1}\psbordercolor}
+\psset[pstricks]{bordercolor=white}
+\define@boolkey[psset]{pstricks}[ps]{doubleline}[true]{\pst@setrepeatarrowsflag}
+\psset[pstricks]{doubleline=false}
+\define@key[psset]{pstricks}{doublesep}[1.25\pslinewidth]{\def\psdoublesep{#1}}
+\psset[pstricks]{doublesep=1.25\pslinewidth}
+\define@key[psset]{pstricks}{doublecolor}[white]{\pst@getcolor{#1}\psdoublecolor}
+\psset[pstricks]{doublecolor=white}
+%
+\define@boolkey[psset]{pstricks}[ps]{shadow}[true]{\pst@setrepeatarrowsflag}
+\psset[pstricks]{shadow=false}
+\define@key[psset]{pstricks}{shadowsize}[3pt]{\pst@getlength{#1}\psk@shadowsize}
+\psset[pstricks]{shadowsize=3pt}
+\define@key[psset]{pstricks}{shadowangle}[-45]{\pst@getangle{#1}\psk@shadowangle}
+\psset[pstricks]{shadowangle=-45}
+\define@key[psset]{pstricks}{shadowcolor}[darkgrey]{\pst@getcolor{#1}\psshadowcolor}
+\psset[pstricks]{shadowcolor=darkgray}
+%
+\def\pst@repeatarrowsflag{\z@}
+\def\pst@setrepeatarrowsflag{%
+ \edef\pst@repeatarrowsflag{%
+ \ifdim\psk@border\p@>\z@ 1\else\ifpsdoubleline 1\else
+ \ifpsshadow 1\else \z@\fi\fi\fi}}
+%
+\def\psls@none{}
+\def\psls@solid{ \psk@linejoin\space setlinejoin \psk@linecap\space setlinecap stroke }
+\def\psls@coloreddashed{ \psls@solid grestore gsave \pst@usecolor\psdashcolor \tx@setlinejoin \psls@dashed }
+%
+\newdimen\pslinewidth
+\define@key[psset]{pstricks}{linewidth}[0.8pt]{\pssetlength\pslinewidth{#1}}
+\psset[pstricks]{linewidth=.8pt}
+\define@key[psset]{pstricks}{linecolor}[black]{\pst@getcolor{#1}\pslinecolor}
+\psset[pstricks]{linecolor=black}
+\define@key[psset]{pstricks}{kitecolor}[red]{\pst@getcolor{#1}\ps@kitecolor}
+\define@key[psset]{pstricks}{dartcolor}[blue]{\pst@getcolor{#1}\ps@dartcolor}
+\psset[pstricks]{kitecolor,dartcolor}
+%
+\newif\ifPst@coloreddashed
+\define@key[psset]{pstricks}{dashcolor}[white]{%
+ \ifx\relax#1\relax\Pst@coloreddashedfalse%
+ \else\Pst@coloreddashedtrue\pst@getcolor{#1}\psdashcolor
+ \fi}
+\psset{dashcolor=\relax}
+%\define@key[psset]{pstricks}{linecap}[0]{\pst@getint{#1}\psk@linecap}% hv 2007-12-01
+%\psset[pstricks]{linecap=0} >>>>>>>>>>>>> siehe unten
+\define@key[psset]{pstricks}{linejoin}[0]{\pst@getint{#1}\psk@linejoin}% hv 2007-10-13
+\psset[pstricks]{linejoin=0}
+\def\tx@setlinejoin{\psk@linejoin\space setlinejoin }% hv 2007-10-13
+%
+\def\pst@missing{%
+ \z@
+ \@pstrickserr{Missing number or dimension. 0 substituted}\@ehpa}
+%
+%%------------------- begin patch 15 HV 2004-05-15 -------------
+\def\pst@empty{\z@}
+
+\define@key[psset]{pstricks}{dash}[5pt 3pt 0pt 0pt]{% defined in pstricks.tex
+ \pst@expandafter\psset@@dash{#1}\@nil}% Error handling for empty argument.
+\define@key[psset]{pstricks}{maxdashes}[11]{\def\psk@maxdashes{#1}}
+\psset[pstricks]{maxdashes=11}
+%
+\def\psset@@dash#1\@nil{%
+ \def\psk@dash{}%
+ \pst@cntm0
+ \def\next##1 ##2\relax{%
+ \expandafter\ifnum\psk@maxdashes>\pst@cntm\relax % 04-08-07
+ \edef\@tempa{##1}%
+ \ifx\@tempa\@empty\else% gobble leading spaces
+ \pssetlength\pst@dimc{##1}%
+ \advance\pst@cntm by 1
+ \edef\psk@dash{\psk@dash\space\pst@number\pst@dimc}%
+ \fi%
+ \edef\@tempa{##2}%
+ \ifx\@tempa\@empty\else% detect end
+ \ifx\@tempa\space\else% gobble trailing spaces
+ \next##2\relax%
+ \fi\fi%
+ \else% 04-08-07
+ \@pstrickserr{Number of dashes > \psk@maxdashes. Increasing
+ 'maxdashes' might work.}\@ehpa% 04-08-07
+ \fi% 04-08-07
+ }%
+ \expandafter\next#1 \relax}
+\psset[pstricks]{dash=5pt 3pt 0pt 0pt}% black white black white
+%%------------------- end patch 15 HV 2004-05-15 -------------
+\define@boolkey[psset]{pstricks}[ps]{dashadjust}[true]{}
+\psset[pstricks]{dashadjust}
+\def\tx@DashLine{DashLine }
+%
+\def\psls@dashed{
+ \ifPst@coloreddashed \psls@solid grestore gsave \pst@usecolor\psdashcolor \tx@setlinejoin \fi
+ \psk@linecap\space setlinecap
+ \ifpsdashadjust
+ [ \psk@dash ] \pst@linetype\space \tx@DashLine
+ \else
+ [ \psk@dash ] 0 setdash stroke
+ \fi}
+%% End patch TN; Date (YY-MM-DD): 04-07-17; 2nd part
+%
+\define@key[psset]{pstricks}{dotsep}[3pt]{\pst@getlength{#1}\psk@dotsep}
+\psset[pstricks]{dotsep=3pt}
+\def\tx@DotLine{DotLine }
+\def\psls@dotted{
+ \ifpsdashadjust
+ \psk@dotsep \pst@linetype\space \tx@DotLine
+ \else
+ [ 0 \psk@dotsep CLW add ] 0 setdash 1 setlinecap stroke
+ \fi
+}
+%
+\define@key[psset]{pstricks}{linestyle}[solid]{%
+ \@ifundefined{psls@#1}%
+ {\@pstrickserr{Line style `#1' not defined}\@eha}%
+ {\def\pslinestyle{#1}}}
+\psset[pstricks]{linestyle=solid}
+%
+\define@key[psset]{pstricks}{linecap}[0]{%
+ \def\psk@linecap{0}%
+ \ifnum#1>-1
+ \ifnum#1<3
+ \pst@getint{#1}\psk@linecap%
+ \fi\fi}
+\psset{linecap=0}
+%------------------------- Transparency modes ----------------------------
+\pst@def{setTransparency}< \psk@opacityalpha .setopacityalpha >
+\pst@def{setStrokeTransparency}< \psk@strokeopacityalpha .setopacityalpha >
+\pst@def{setBlendmode}<
+ \ifcase\psk@blendmode
+ /Normal \or
+ /Compatible \or
+ /Screen \or
+ /Multiply \or
+ /HardLight \or
+ /Darken \or
+ /Lighten \or
+ /Difference\or
+ /ColorDodge\or
+ /ColorBurn\or
+ /SoftLight\or
+ /Hue\or
+ /Saturation\or
+ /Luminosity\or
+ /Overlay\or
+ /Exclusion\or
+ /Color
+ \else
+ /Normal
+ \fi
+ .setblendmode \psk@shapealpha .setshapealpha >
+%
+%--------------------------------- hv 2007-09-09 begin ---------------------
+% transparency needs a run through latex -> dvips -> ps2pdf14(!)
+%
+\def\e@fill@inverse{oefill}
+\define@key[psset]{pstricks}{fillcolor}[white]{%
+ \ifx\psk@fillstylename\e@fill@inverse
+ \pst@getcolor{#1}\psk@oefillcolor
+ \pst@getcolor{white}\psfillcolor
+ \else \pst@getcolor{white}\psk@oefillcolor
+ \pst@getcolor{#1}\psfillcolor
+ \fi}
+
+\psset[pstricks]{fillcolor=white}
+\define@key[psset]{pstricks}{strokeopacity}[1]{\pst@checknum{#1}\psk@strokeopacityalpha }% for lines
+\psset[pstricks]{strokeopacity=1}
+\define@key[psset]{pstricks}{opacity}[1]{\pst@checknum{#1}\psk@opacityalpha }% for filled areas
+\psset[pstricks]{opacity=1}
+\define@key[psset]{pstricks}{shapealpha}[0.6]{\pst@checknum{#1}\psk@shapealpha }
+\psset[pstricks]{shapealpha=0.6}
+\define@key[psset]{pstricks}{blendmode}[0]{\pst@getint{#1}\psk@blendmode }% must be one of
+% /Normal 0
+% /Compatible 1
+% /Screen 2
+% /Multiply 3
+% /HardLight 4
+\psset[pstricks]{blendmode=0}
+\define@key[psset]{pstricks}{fsAngle}[137.50775]{\pst@getangle{#1}\pst@fsAngle }
+\define@key[psset]{pstricks}{fsOrigin}[(0,0)]{%
+ \pst@@getcoor{#1}\edef\pst@fsOrigin{\pst@coor T }}
+\psset[pstricks]{fsOrigin={0,0},fsAngle=137.50775}
+%
+\def\tx@LineFill{LineFill }
+\def\tx@DotFill{DotFill }
+\def\tx@PenroseFill{PenroseFill }
+\def\tx@PenroseFillA{PenroseFillA }
+\def\tx@TruchetFill{TruchetFill }
+%
+\def\psfs@none{}
+\def\psfs@solid{\pst@fill{\pst@usecolor\psfillcolor \tx@setTransparency fill }}
+\def\psfs@eofill{\pst@fill{\pst@usecolor\psfillcolor \tx@setTransparency eofill}}
+\def\psfs@oefill{\pst@fill{\pst@usecolor\psk@oefillcolor \tx@setTransparency fill }\psfs@eofill }
+\def\psfs@shape{\pst@fill{\pst@usecolor\psfillcolor \tx@setBlendmode fill }}
+\def\psfs@spiral{\pst@fill{\pst@fsOrigin \pst@usecolor\psfillcolor clip newpath
+ 0 .1 500 { dup dup sqrt 4 div 0 360 arc fill \pst@fsAngle rotate } for }}
+%
+\define@key[psset]{pstricks}{hatchwidth}[0.8pt]{\pst@getlength{#1}\psk@hatchwidth}
+\psset[pstricks]{hatchwidth=.8pt}
+\define@key[psset]{pstricks}{hatchsep}[4pt]{\pst@getlength{#1}\psk@hatchsep}
+\psset[pstricks]{hatchsep=4pt}
+\define@key[psset]{pstricks}{hatchcolor}[black]{\pst@getcolor{#1}\pshatchcolor}
+\psset[pstricks]{hatchcolor=black}
+\define@key[psset]{pstricks}{hatchangle}[45]{\pst@getangle{#1}\psk@hatchangle}
+\psset[pstricks]{hatchangle=45}
+\define@key[psset]{pstricks}{hatchsepinc}[0pt]{\pst@getlength{#1}\psk@hatchsepinc}
+\define@key[psset]{pstricks}{hatchwidthinc}[0pt]{\pst@getlength{#1}\psk@hatchwidthinc}
+\psset[pstricks]{hatchwidthinc=0pt,hatchsepinc=0pt}
+%
+\def\pst@linefill#1{
+ /clipType { \ifx\relax#1\relax clip \else#1\fi} def
+ \psk@hatchangle rotate
+ \psk@hatchwidth SLW
+ \pst@usecolor\pshatchcolor
+ \psk@hatchsep
+ \psk@hatchsepinc
+ \psk@hatchwidthinc
+ \tx@LineFill }
+%
+\def\psfs@vlines{\pst@fill{\pst@linefill{}}}
+\def\psfs@eovlines{\pst@fill{\pst@linefill{eoclip}}}
+\@namedef{psfs@vlines*}{\psfs@solid \psfs@vlines}
+\@namedef{psfs@eovlines*}{\psfs@eofill \psfs@eovlines}
+\def\psfs@hlines{\pst@fill{90 rotate \pst@linefill{}}}
+\def\psfs@eohlines{\pst@fill{90 rotate \pst@linefill{eoclip}}}
+\@namedef{psfs@hlines*}{\psfs@solid \psfs@hlines}
+\@namedef{psfs@eohlines*}{\psfs@eofill \psfs@eohlines}
+\def\psfs@crosshatch{\psfs@vlines \psfs@hlines}
+\@namedef{psfs@crosshatch*}{\psfs@solid \psfs@vlines \psfs@hlines}
+\@namedef{psfs@eocrosshatch*}{\psfs@eofill \psfs@eovlines \psfs@eohlines}
+%
+\define@key[psset]{pstricks}{psscale}[1]{%
+ \def\psk@@psscale{#1}% for use with \psscalebox
+ \pst@checknum{#1}\psk@psscale}
+\psset[pstricks]{psscale=1}
+%
+\def\pst@dotFill[#1]{%
+ /clipType { \ifx\relax#1\relax clip \else #1 \fi } def
+ gsave
+ \pst@number\pslinewidth SLW
+ \pst@usecolor\pshatchcolor
+% /DotLineColor { \pst@usecolor\pslinecolor } def
+ \psk@hatchsep
+ \psk@hatchwidth
+ \tx@DotFill }
+
+\def\psfs@dots{\pst@fill{ /SolidDot false def \pst@dotFill[] }}
+\def\psfs@eodots{\pst@fill{ /SolidDot false def \pst@dotFill[eoclip] }}
+\@namedef{psfs@dots*}{\pst@fill{ /SolidDot true def \pst@dotFill[] }}
+\@namedef{psfs@eodots*}{\pst@fill{ /SolidDot true def \pst@dotFill[eoclip] }}
+%
+\def\pst@penroseFill{%
+% gsave % restore in PenroseFill
+ \pst@number\pslinewidth SLW
+ \pst@usecolor\pshatchcolor
+ \psk@psscale
+ \tx@PenroseFill }
+\def\psfs@penrose{\pst@fill\pst@penroseFill}
+\@namedef{psfs@penrose*}{\psfs@solid \psfs@penrose}
+%
+\def\pst@penroseFillA{%
+% gsave % restore in PenroseFillA
+ \pst@number\pslinewidth SLW
+% \pst@usecolor\pshatchcolor
+% on stack: scaling factor, border color, kite color, dart color
+% dup dup scale
+% /border_colour ED %
+% /kite_colour ED %
+% /dart_colour
+ { \pst@usecolor\ps@dartcolor }
+ { \pst@usecolor\ps@kitecolor }
+ { \pst@usecolor\pshatchcolor }
+ \psk@psscale
+ \tx@PenroseFillA }
+\def\psfs@penroseA{\pst@fill\pst@penroseFillA}
+\@namedef{psfs@penroseA*}{\psfs@solid \psfs@penroseA}
+%
+\def\pst@truchetFill{%
+ gsave % restore in PenroseFill
+ \pst@number\pslinewidth SLW
+ \pst@usecolor\pshatchcolor
+ \psk@psscale
+ \tx@TruchetFill }
+\def\psfs@truchet{ \pst@fill\pst@truchetFill }
+\@namedef{psfs@truchet*}{\psfs@solid \psfs@truchet}
+%
+\define@key[psset]{pstricks}{fillstyle}[none]{%
+ \def\psk@fillstylename{#1}% needed for inverse eofill
+ \edef\pst@tempg{#1}\def\pst@temph{none}%
+ \ifx\pst@tempg\pst@temph
+ \let\psk@fillstyle\relax
+ \else
+ \@ifundefined{psfs@#1}%
+ {\@pstrickserr{Undefined fill style: `#1'}\@eha}%
+ {\edef\psk@fillstyle{\expandafter\noexpand\csname psfs@#1\endcsname}}%
+ \fi%
+}
+\define@key[psset]{pstricks}{addfillstyle}[]{%
+ \@ifundefined{psfs@#1}%
+ {\@pstrickserr{Undefined fill style: `#1'}\@eha}%
+ {\edef\psk@fillstyle{%
+ \expandafter\noexpand\psk@fillstyle
+ \expandafter\noexpand\csname psfs@#1\endcsname}%
+ }}
+\psset[pstricks]{fillstyle=none}
+%
+%--------------------------- continous linewidth -------------------
+\newdimen\psk@startLW
+\newdimen\psk@endLW
+\define@key[psset]{pstricks}{startLW}[\pslinewidth]{\pssetlength{\psk@startLW}{#1}}%
+\define@key[psset]{pstricks}{endLW}[\pslinewidth]{\pssetlength{\psk@endLW}{#1}}%
+\define@key[psset]{pstricks}{startWL}[380]{\pst@getint{#1}\psk@startWL}%
+\define@key[psset]{pstricks}{endWL}[780]{\pst@getint{#1}\psk@endWL}%
+\define@boolkey[psset]{pstricks}[Pst@]{variableLW}[true]{}
+\define@boolkey[psset]{pstricks}[Pst@]{variableColor}[true]{}
+\define@key[psset]{pstricks}{setflat}[0.1]{\pst@checknum{#1}\psk@setflat}%
+\psset[pstricks]{startLW=\pslinewidth,endLW=\pslinewidth,variableColor=false,
+ variableLW=false,startWL=380,endWL=780,setflat=0.1}
+%
+\def\pst@flattenpath{
+ /Coors [] def % the array of all points
+ /lambda \psk@startWL\space def
+ %
+ /add2Values { Coors aload length 2 add array astore /Coors exch def } def
+ /add6Values { Coors aload length 6 add array astore /Coors exch def } def
+%
+ \psk@setflat\space setflat % the value for the line snippets
+ flattenpath % flatten the existing path into line segments
+%
+ { add2Values } % what to do with moveto
+ { add2Values } % what to do with lineto
+ { add6Values } % what to do with curveto (not needed here)
+ { } % what to do with closepath
+ pathforall % do it for the existing path
+%
+ \pst@number\psk@startLW setlinewidth
+ \tx@setlinejoin
+ \psk@linecap\space setlinecap
+ Coors aload length 2 sub 2 div cvi /N0 exch def % set number of points
+ /NN 0 def
+ /N N0 def
+ { N 3 gt { N 3 sub /N ED }{ N 1 sub /N ED } ifelse
+ NN 1 add /NN ED
+ N 0 eq { exit } if
+ } loop
+ /dLW \pst@number\psk@endLW \pst@number\psk@startLW sub NN div def % the step for the linewidth
+ \ifPst@variableColor
+ /dColor \psk@endWL\space \psk@startWL\space sub NN div def
+ lambda dColor add dup /lambda ED
+ tx@addDict begin wavelengthToRGB Red Green Blue end setrgbcolor
+ \else
+ \pst@usecolor\pslinecolor
+ \fi
+ moveto % move to the first one
+ /N N0 def
+ {
+ N 3 gt {
+% CP 6 2 roll
+ \psk@curvature\space /c ED /b ED /a ED
+ /ArrowA {} def
+ /ArrowB {} def
+ BOC NC EOC % curveto
+ N 3 sub /N ED }{ lineto N 1 sub /N ED } ifelse
+ currentlinewidth dLW add setlinewidth % increase line width
+ \ifPst@variableColor
+ lambda dColor add dup /lambda ED
+ tx@addDict begin wavelengthToRGB Red Green Blue end setrgbcolor
+ \else
+ \pst@usecolor\pslinecolor
+ \fi
+ CP /Y ED /X ED % put coors of current point on the stack
+% 0.4 .setopacityalpha
+ stroke % draw the line segment
+ N 0 eq { exit }{ X Y moveto } ifelse
+ } loop
+% N { % repeat for the other N coords
+% lineto % line to next point
+% currentlinewidth dLW add setlinewidth % increase line width
+% lambda dColor add dup /lambda ED
+% tx@addDict begin wavelengthToRGB Red Green Blue end setrgbcolor
+% currentpoint % put coors of current point on the stack
+% 0.4 .setopacityalpha
+% stroke % draw the line segment
+% moveto
+% } repeat
+}
+
+%
+%--------------------------- A R R O W S ---------------------------
+%
+\def\psk@arrowA{}
+\def\psk@arrowB{}
+\def\pst@arrowtable{,-,<->,<<->>,>-<,>>-<<,(-),[-],)-(,]-[,|>-<|,<D-D>,D>-<D,<D<D-D>D>} % hv --1.16
+\edef\pst@arrowtable{\pst@arrowtable,|<*->|*,|<->|}
+\begingroup
+ \catcode`\<=13
+ \catcode`\>=13
+ \catcode`\|=13
+ \gdef\pst@activearrows{\def<{\string<}\def>{\string>}\def|{\string|}}
+\endgroup
+\def\tx@BeginArrow{BeginArrow }
+\def\tx@EndArrow{EndArrow }
+%
+\def\tx@Arrow{ \tx@setStrokeTransparency Arrow }% hv 2008-01-13
+\def\tx@ArrowD{ \tx@setStrokeTransparency ArrowD }% hv 2008-01-13
+%
+\@namedef{psas@<|}{
+ \psk@tbarsize\space \tx@Tbar
+ 0 CLW 2 div T
+ newpath
+ true
+ \psk@arrowinset
+ \psk@arrowlength
+ \psk@arrowsize
+ \tx@Arrow
+}
+% ]-[ arrow
+\def\tx@BracketOut{BracketOut }
+\@namedef{psas@[}{%
+ /BracketOut {%
+ CLW mul add dup CLW sub 2 div
+%/x ED mul CLW add
+ /x ED mul neg
+ /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
+ \psk@bracketlength\space \psk@tbarsize\space \tx@BracketOut
+}
+% )-( arrow
+\def\tx@RoundBracketOut{ \tx@setStrokeTransparency RoundBracketOut }% hv 2008-01-13
+\@namedef{psas@(}{%
+ /RoundBracketOut {%
+ CLW mul add dup 2 div
+%/x ED mul
+ /x ED mul neg
+ /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
+ \psk@rbracketlength\space \psk@tbarsize\space \tx@RoundBracketOut
+}
+% end of new definitions of the missing arrows ---- hv 1.12
+\@namedef{psas@>}{ false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow }
+\@namedef{psas@>>}{%
+ false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow
+ 0 h T gsave newpath
+ false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow
+ CP grestore CP newpath moveto 2 copy
+ CLW \pst@arrowscale\space div SLW % set the original line width
+ L stroke moveto
+}
+\@namedef{psas@<}{true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow}
+\@namedef{psas@<<}{
+ true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow
+ CP newpath moveto 0 a neg
+ gsave
+ CLW \pst@arrowscale\space div SLW % set the original line width
+ L stroke
+ grestore
+ 0 h neg T
+ false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow
+}
+\@namedef{psas@D>}{ false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD }% hv 20071211
+\@namedef{psas@D>D>}{ % hv 20071211
+ false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD
+ 0 h Inset sub T gsave newpath
+ false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD
+ CP grestore moveto
+}
+\@namedef{psas@<D}{ % hv 20071211
+ true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD
+}
+\@namedef{psas@<D<D}{ % hv 20071211
+ true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD
+ CP newpath moveto 0 a neg L stroke 0 h neg T
+ true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD
+}
+\define@key[psset]{pstricks}{tbarsize}[2pt 5]{%
+ \pst@expandafter\pst@getdimnum{#1} 0 {} {}\@nil
+ \edef\psk@tbarsize{\pst@number\pst@dimg \pst@tempg}}
+\psset[pstricks]{tbarsize=2pt 5}
+%
+\def\tx@Tbar{Tbar }
+\@namedef{psas@|}{\psk@tbarsize \tx@Tbar}
+\@namedef{psas@|*}{0 CLW -2 div T \psk@tbarsize \tx@Tbar}
+\@namedef{psas@>|}{%
+ \psk@tbarsize \tx@Tbar
+ 0 CLW 2 div T
+ newpath
+ false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow
+}
+\@namedef{psas@>|*}{%
+ 0 CLW -2 div T
+ \psk@tbarsize \tx@Tbar
+ 0 CLW 2 div T
+ newpath
+ false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow
+}
+%
+\define@key[psset]{pstricks}{bracketlength}[0.15]{\pst@checknum{#1}\psk@bracketlength}
+\psset[pstricks]{bracketlength=.15}
+\def\tx@Bracket{Bracket }
+\@namedef{psas@]}{\psk@bracketlength \psk@tbarsize \tx@Bracket}
+\define@key[psset]{pstricks}{rbracketlength}[0.15]{\pst@checknum{#1}\psk@rbracketlength}
+\psset[pstricks]{rbracketlength=.15}
+\def\tx@RoundBracket{RoundBracket }
+\@namedef{psas@)}{\psk@rbracketlength \psk@tbarsize \tx@RoundBracket}
+%
+\def\psas@c{1 \psas@@c}
+\def\psas@cc{0 CLW 2 div T 1 \psas@@c}
+\def\psas@C{2 \psas@@c}
+\def\psas@@c{%
+ setlinecap
+ 0 0 moveto
+ 0 0.1 L % changed value from 0.5 to 0.1
+ stroke
+ 0 0 moveto }
+%
+\def\psas@{}
+%
+\define@key[psset]{pstricks}{arrowLW}{\pst@getlength{#1}\psk@arrowLW}
+\psset[pstricks]{arrowLW=0}
+% arrowLW as LineWidth for the circled line ends
+%
+\def\psas@o{\psk@arrowLW\space dup 0 eq { pop }{ SLW } ifelse
+ {\pst@usecolor\psfillcolor true} false \psk@dotsize \tx@EndDot }
+\def\psas@oo{\psk@arrowLW\space dup 0 eq { pop }{ SLW } ifelse
+ {\pst@usecolor\psfillcolor true} true \psk@dotsize \tx@EndDot }
+\@namedef{psas@*}{\psk@arrowLW\space dup 0 eq { pop }{ SLW } ifelse
+ {false} false \psk@dotsize \tx@EndDot }
+\@namedef{psas@**}{\psk@arrowLW\space dup 0 eq { pop }{ SLW } ifelse
+ {false} true \psk@dotsize \tx@EndDot }
+%
+\define@key[psset]{pstricks}{arrows}[-]{%
+ \begingroup
+ \pst@activearrows
+ \xdef\pst@tempg{#1}%
+ \endgroup
+ \expandafter\psset@@arrows\pst@tempg\@empty-\@empty\@nil
+ \if@pst\else\@pstrickserr{Bad arrows specification: #1}\@ehpa\fi}
+\def\psset@@arrows#1-#2\@empty#3\@nil{%
+ \@psttrue
+ \def\ps@next##1,#1-##2,##3\@nil{\def\pst@tempg{##2}}%
+ \expandafter\ps@next\pst@arrowtable,#1-#1,\@nil
+ \@ifundefined{psas@\pst@tempg}{\@pstfalse\def\psk@arrowA{}}{\let\psk@arrowA\pst@tempg}%
+ \@ifundefined{psas@#2}{\@pstfalse\def\psk@arrowB{}}{\def\psk@arrowB{#2}}}
+\psset[pstricks]{arrows=-}
+%
+\define@key[psset]{pstricks}{arrowscale}[1]{% hv --1.12
+ \pst@getscale{#1}\psk@arrowscale
+ \pst@@arrowscale@i#1 \@nil}% hv --1.12
+\def\pst@@arrowscale@i#1 #2\@nil{\edef\pst@arrowscale{#1}}% hv --1.12
+\psset[pstricks]{arrowscale=1}
+%
+\define@key[psset]{pstricks}{arrowsize}[1.5pt 2]{%
+ \pst@expandafter\pst@getdimnum{#1} 0 {} {}\@nil
+ \edef\psk@arrowsize{\pst@number\pst@dimg \pst@tempg}%
+}
+\psset[pstricks]{arrowsize=1.5pt 2}
+\define@key[psset]{pstricks}{arrowlength}[1.4]{\pst@checknum{#1}\psk@arrowlength}
+\psset[pstricks]{arrowlength=1.4}
+\define@key[psset]{pstricks}{arrowinset}[0.4]{\pst@checknum{#1}\psk@arrowinset}%
+\psset[pstricks]{arrowinset=0.4}
+%
+\def\tx@SD{ \tx@setTransparency SD }
+\def\tx@EndDot{EndDot }
+%
+\def\pst@par{}
+\def\addto@par#1{%
+ \ifx\pst@par\@empty
+ \def\pst@par{#1}%
+ \else
+ \expandafter\def\expandafter\pst@par\expandafter{\pst@par,#1}%
+ \fi%
+}
+\def\addbefore@par#1{%
+ \ifx\pst@par\@empty
+ \def\pst@par{#1}%
+ \else
+ \toks@{#1}%
+ \pst@toks\expandafter{\pst@par}%
+ \edef\pst@par{\the\toks@,\the\pst@toks}%
+ \fi%
+}
+\def\use@par{%
+ \ifx\pst@par\@empty\else
+ \expandafter\@psset\pst@par,\@nil
+ \def\pst@par{}%
+ \fi
+}
+\def\use@keep@par{% same as \use@par, but keeps the values
+ \ifx\pst@par\@empty\else
+ \expandafter\@psset\pst@par,\@nil
+% \def\pst@par{}%
+ \fi}
+%
+\def\pst@object#1{%
+ \def\pst@par{}%
+ \pst@ifstar{%
+ \@ifnextchar[{\pst@@object{#1}}{\@nameuse{#1@i}}}%
+}
+\def\pst@@object#1[#2]{%
+ \def\pst@par{#2}%
+ \@ifnextchar+{\@nameuse{#1@i}}{\@nameuse{#1@i}}%
+}
+\def\newpsobject#1#2#3{%
+\@ifundefined{#2@i}%
+{\@pstrickserr{Graphics object `#2' not defined}\@eha}{%
+\@namedef{#1}{\pst@object{#1}}%
+\@namedef{#1@i}{\addbefore@par{#3}\@nameuse{#2@i}}}%
+\ignorespaces}
+%
+\def\pst@getarrows#1{\@ifnextchar({#1}{\pst@@getarrows{#1}}}
+% ------------------------- hv 1.10 beg ------------------------
+%\def\pst@@getarrows#1#2{\addto@par{arrows=#2}#1}
+\def\pst@@getarrows#1#2{%
+ \def\pst@tempa{#2}% prevent empty arrow arguments, to allow \psline{}(...)(...)
+ \ifx\pst@tempa\@empty
+ \addto@par{arrows=-}%
+ \else
+ \addto@par{arrows=#2}%
+ \fi
+ #1%
+}
+% ------------------------- hv 1.10 end ------------------------
+%
+\def\begin@ClosedObj{%
+ \leavevmode
+ \pst@killglue
+ \begingroup
+ \use@par
+ \solid@star
+ \ifpsdoubleline\pst@setdoublesep\fi
+ \pst@addarrowdef% DG addition
+ \init@pscode}
+%
+\def\end@ClosedObj{%
+ \ifpsshadow \pst@closedshadow \fi
+ \ifdim\psk@border\p@>\z@ \pst@addborder \fi
+ \psk@fillstyle
+ \pst@stroke
+ \ifpsdoubleline \pst@doublestroke \fi
+ \ifshowpoints
+% DG modification begin - Mar. 4, 1995
+%\addto@pscode{Points aload length 2 div cvi /N ED \psdots@iii}%
+ \pst@OpenShowPoints
+% DG modification end
+ \fi
+ \use@pscode
+ \endgroup
+ \ignorespaces%
+}
+\def\begin@OpenObj{%
+ \begin@ClosedObj%
+ \let\pst@linetype\pst@arrowtype%
+ \pst@addarrowdef%
+}
+\def\begin@AltOpenObj{%
+ \begin@ClosedObj
+ \def\pst@repeatarrowsflag{\z@}%
+ \def\pst@linetype{0}}
+%
+\def\end@OpenObj{%
+ \ifpsshadow \pst@openshadow \fi
+ \ifdim\psk@border\p@>\z@ \pst@addborder \fi
+ \psk@fillstyle
+ \pst@stroke
+ \ifpsdoubleline \pst@doublestroke \fi
+ \ifnum\pst@repeatarrowsflag>\z@ \pst@repeatarrows \fi
+ \ifshowpoints \pst@OpenShowPoints \fi
+ \use@pscode
+ \endgroup
+ \ignorespaces}
+%
+\def\begin@SpecialObj{%
+ \leavevmode
+ \pst@killglue
+ \begingroup
+ \use@par
+ \init@pscode}
+%
+\def\end@SpecialObj{%
+ \use@pscode
+ \endgroup
+ \ignorespaces}
+%
+\def\pst@code{}%
+\def\init@pscode{%
+ \addto@pscode{%
+ \pst@number\pslinewidth SLW
+ \pst@usecolor\pslinecolor}%
+}
+\def\addto@pscode#1{\xdef\pst@code{\pst@code#1\space}}
+\def\use@pscode{%
+ \pstverb{
+ \pst@dict
+ \tx@STP
+ \pst@newpath
+ \psk@origin
+ \psk@swapaxes
+ \pst@code
+ end
+ }%
+ \gdef\pst@code{}%
+}
+\def\use@psCode{%
+ \pstVerb{
+ \pst@dict
+ \tx@STP
+ \pst@newpath
+ \psk@origin
+ \psk@swapaxes
+ \pst@code
+ end
+ }%
+ \gdef\pst@code{}%
+}
+\def\pst@newpath{newpath }
+%
+\def\pst@@killglue{\unskip\ifdim\lastskip>\z@\expandafter\pst@@killglue\fi}
+\def\KillGlue{\let\pst@killglue\pst@@killglue}
+\def\DontKillGlue{\let\pst@killglue\relax}
+\DontKillGlue
+%
+\def\solid@star{%
+ \if@star
+ \pslinewidth=\z@
+ \psdoublelinefalse
+ \def\pslinestyle{none}%
+ \def\psk@fillstyle{\psfs@solid}%
+ \let\psfillcolor\pslinecolor
+ \fi}
+%
+\def\pst@setdoublesep{%
+\pst@getlength\psdoublesep\psdoublesep
+\pslinewidth=2\pslinewidth
+\advance\pslinewidth\psdoublesep\p@
+\let\pst@setdoublesep\relax}
+\def\tx@Shadow{Shadow }
+\def\pst@closedshadow{%
+ \addto@pscode{%
+ gsave
+ \psk@shadowsize \psk@shadowangle \tx@PtoC
+ \tx@Shadow
+ \pst@usecolor\psshadowcolor
+ gsave fill grestore
+ stroke
+ grestore
+ gsave
+ \pst@usecolor\psfillcolor
+ gsave fill grestore
+ stroke
+ grestore}}
+%
+\def\pst@openshadow{%
+ \addto@pscode{%
+ gsave
+ \psk@shadowsize \psk@shadowangle \tx@PtoC
+ \tx@Shadow
+ \pst@usecolor\psshadowcolor
+ \ifx\psk@fillstyle\relax\else
+ gsave fill grestore
+ \fi
+ stroke}%
+ \pst@repeatarrows%
+ \addto@pscode{grestore}%
+ \ifx\psk@fillstyle\relax\else
+ \addto@pscode{%
+ gsave
+ \pst@usecolor\psfillcolor
+ gsave fill grestore
+ stroke
+ grestore}%
+ \fi}
+%
+\def\pst@addborder{%
+ \addto@pscode{%
+ gsave
+ \psk@border 2 mul
+ CLW add SLW
+ \pst@usecolor\psbordercolor
+ stroke
+ grestore}}
+%
+\def\pst@stroke{%
+ \ifx\pslinestyle\@none\else
+ \addto@pscode{%
+ gsave
+ \pst@number\pslinewidth SLW
+ \pst@usecolor\pslinecolor
+ \tx@setStrokeTransparency % hv 2008-01-13
+ \@nameuse{psls@\pslinestyle}
+ grestore}%
+ \fi}
+%
+\def\pst@fill#1{\addto@pscode{gsave #1 grestore}}%
+%
+\def\pst@doublestroke{%
+ \addto@pscode{%
+ gsave
+ \psdoublesep SLW
+ \pst@usecolor\psdoublecolor
+ \tx@setStrokeTransparency % hv 2016-09-23
+ stroke
+ grestore
+}}
+%
+\def\pst@arrowtype{%
+ \ifx\psk@arrowB\@empty 0 \else -2 \fi
+ \ifx\psk@arrowA\@empty 0 \else -1 \fi
+ add }
+%
+\def\pst@addarrowdef{%
+ \addto@pscode{%
+ /ArrowA {
+ \ifx\psk@arrowA\@empty
+ \pst@oplineto
+ \else
+ \pst@arrowdef{A}
+ moveto
+ \fi
+ } def
+ /ArrowB { \ifx\psk@arrowB\@empty \else \pst@arrowdef{B} \fi } def
+}}
+%
+\def\pst@arrowdef#1{%
+ \ifnum\pst@repeatarrowsflag>\z@
+ /Arrow#1c [ 6 2 roll ] cvx def Arrow#1c
+ \fi
+ \tx@BeginArrow
+ \psk@arrowscale
+ \@nameuse{psas@\@nameuse{psk@arrow#1}}
+ \tx@EndArrow
+}
+%
+\def\pst@repeatarrows{%
+ \addto@pscode{%
+ gsave
+ \ifx\psk@arrowA\@empty\else ArrowAc ArrowA pop pop \fi
+ \ifx\psk@arrowB\@empty\else ArrowBc ArrowB pop pop pop pop \fi
+ grestore
+}}
+%
+\def\pst@OpenShowPoints{%
+ \addto@pscode{%
+ gsave
+ \psk@dotsize
+ \@nameuse{psds@\psk@dotstyle}
+ newpath
+ Points aload length 2 div 2 sub cvi /N ED
+ N 0 ge
+ { \ifx\psk@arrowA\@empty Dot \else pop pop \fi
+ N { Dot } repeat
+ \ifx\psk@arrowB\@empty Dot \else pop pop \fi }
+ { N 2 mul { pop } repeat } ifelse
+ grestore
+}}
+%
+\newif\ifPst@custom\Pst@customfalse
+\define@boolkey[psset]{pstricks}[Pst@]{noCurrentPoint}[true]{}
+\psset[pstricks]{noCurrentPoint=false}
+%
+%
+\def\pscustom{\pst@object{pscustom}}
+\long\def\pscustom@i#1{%
+ \begin@SpecialObj%
+ \solid@star%
+ \let\pst@ifcustom\iftrue%
+ \Pst@customtrue%
+ \let\begin@ClosedObj\begin@CustomObj%
+ \let\end@ClosedObj\endgroup%
+ \def\begin@OpenObj{\begin@CustomObj\pst@addarrowdef}%
+ \let\end@OpenObj\endgroup%
+ \let\begin@AltOpenObj\begin@CustomObj%
+ \def\begin@SpecialObj{%
+ \begingroup%
+ \pst@misplaced{special graphics object}%
+ \def\addto@pscode####1{}%
+ \let\end@SpecialObj\endgroup}%
+ \def\@multips(##1)(##2)##3##4{\pst@misplaced\multips}%
+ \def\psclip##1{\pst@misplaced\psclip}%
+ \def\pst@repeatarrowsflag{\z@}%
+ \let\pst@setrepeatarrowsflag\relax%
+ \showpointsfalse%
+ \def\pst@linetype{\pslinetype}%
+ \def\psk@liftpen{\z@}%
+% \psset{liftpen=0}%
+ \def\pst@cp{/currentpoint load stopped pop }%
+ \def\pst@oplineto{/lineto load stopped { moveto } if }%
+ \def\pst@optcp##1##2{\ifnum##1=\z@\def##2{/currentpoint load stopped { 0 0 } if }\fi}%
+ \let\caddto@pscode\addto@pscode%
+ \def\cuse@par##1{{\use@par##1}}%
+ \the\pst@customdefs%
+ \setbox\pst@hbox=\hbox{#1}%
+ \psk@fillstyle
+ \pst@stroke
+ \end@SpecialObj
+ \let\pst@ifcustom\iffalse
+ \ignorespaces
+}
+%
+\let\pst@ifcustom\iffalse
+%
+\def\begin@CustomObj{%
+ \begingroup%
+ \use@par%
+ \addto@pscode{
+ \pst@number\pslinewidth SLW
+ \pst@usecolor\pslinecolor
+ }%
+}
+\def\pst@oplineto{moveto }
+\def\pst@cp{}
+\def\pst@optcp#1#2{}
+\define@key[psset]{pstricks}{liftpen}[0]{%
+ \ifPst@custom%
+ \ifcase#1\relax%
+ \def\psk@liftpen{\z@}%
+ \def\pst@cp{/currentpoint load stopped pop }%
+ \def\pst@oplineto{/lineto load stopped { moveto } if }%
+ \or%
+ \def\psk@liftpen{1}%
+ \def\pst@cp{}%
+ \def\pst@oplineto{/lineto load stopped { moveto } if }%
+ \or%
+ \def\psk@liftpen{2}%
+ \def\pst@cp{}%
+ \def\pst@oplineto{moveto }%
+ \fi\fi%
+}
+\psset[pstricks]{liftpen=0}
+\def\psk@liftpen{-1}
+%
+\define@key[psset]{pstricks}{linetype}[2]{%
+ \pst@getint{#1}\pslinetype
+ \ifnum\pst@cntg<-3
+ \@pstrickserr{linetype must be greater than -3}\@ehpa
+ \def\pslinetype{2}%
+ \fi}
+\psset[pstricks]{linetype=2}% otherwise there is a problem when using e.g.
+% \psaxes[axesstyle=frame,linestyle=dashed]{->}(3,-2)
+%
+\def\caddto@pscode#1{%
+ \@pstrickserr{Command can only be used in \string\pscustom}\@ehpa}
+\let\cuse@par\caddto@pscode
+%
+\def\tx@MSave{%
+ /msavematrx
+ [ tx@Dict /msavematrx known % does msavematrix exists?
+ { msavematrx aload pop } if
+ CM % matrix currentmatrix
+ ]
+ def
+%----------------- hv begin 2004-05-07 ------------- patch 15
+ msavematrx
+%----------------- hv end 2004-05-07 ------------- patch 15
+}
+\def\tx@MRestore{% a typo in pstricks with msavematrx
+ tx@Dict /msavematrx known { length 0 gt } { false } ifelse
+ { msavematrx aload pop setmatrix } if
+}
+%
+\newtoks\pst@customdefs
+\pst@customdefs{%
+ \def\newpath{\addto@pscode{newpath}}%
+ \def\reversepath{\addto@pscode{ reversepath }}% 20131209 hv
+ \def\moveto(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor moveto}}%
+ \def\rmoveto(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor rmoveto}}%
+ \def\closepath{\addto@pscode{closepath}}%
+ \def\gsave{\begingroup\addto@pscode{gsave}}%
+ \def\grestore{\endgroup\addto@pscode{grestore}}%
+ \def\translate(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor translate}}%
+ \def\rotate#1{\pst@@getangle{#1}\addto@pscode{\pst@angle rotate}}%
+ \def\scale#1{\pst@getscale{#1}\pst@tempg\addto@pscode{\pst@tempg}}%
+ \def\msave{\addto@pscode{\tx@MSave}}%
+ \def\mrestore{\addto@pscode{\tx@MRestore}}%
+ \def\swapaxes{\addto@pscode{-90 rotate -1 1 scale}}%
+ \def\stroke{\def\pst@par{}\pst@object{stroke}}%
+ \def\fill{\def\pst@par{}\pst@object{fill}}%
+ \def\openshadow{\def\pst@par{}\pst@object{openshadow}}%
+ \def\closedshadow{\def\pst@par{}\pst@object{closedshadow}}%
+ \def\movepath(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor \tx@Shadow}}%
+ \def\lineto{\pst@onecoor{lineto}}%
+ \def\rlineto{\pst@onecoor{rlineto}}%
+ \def\curveto{\pst@threecoor{curveto}}%
+ \def\rcurveto{\pst@threecoor{rcurveto}}%
+ \def\code#1{\addto@pscode{#1}}%
+ \def\coor(#1){\pst@@getcoor{#1}\addto@pscode\pst@coor\@ifnextchar({\coor}{}}%
+ \def\rcoor{\pst@getcoors{}{}}%
+ \def\dim#1{\pssetlength\pst@dimg{#1}\addto@pscode{\pst@number\pst@dimg}}%
+ \def\setcolor#1{%
+ \@ifundefined{\string\color@#1}{}{\addto@pscode{\pst@usecolor{#1}}}}% hv 1.14 2005-12-17
+ \def\arrows#1{{\psset[pstricks]{arrows=#1}\pst@addarrowdef}}%
+ \let\file\pst@rawfile%
+} % END \pst@customdefs
+%
+\def\closedshadow@i{\cuse@par\pst@closedshadow}
+\def\openshadow@i{\cuse@par\pst@openshadow}
+\def\stroke@i{\cuse@par\pst@stroke}%
+\def\fill@i{\cuse@par\psk@fillstyle}%
+\def\pst@onecoor#1(#2){%
+\pst@@getcoor{#2}%
+\addto@pscode{\pst@coor #1}}
+\def\pst@threecoor#1(#2)#3(#4)#5(#6){%
+ \begingroup
+ \pst@getcoor{#2}\pst@tempa
+ \pst@getcoor{#4}\pst@tempb
+% DG/SR modification begin - Aug. 4, 1999 - Patch 11
+%\pst@getcoor{#6}\pst@tembc
+ \pst@getcoor{#6}\pst@tempc
+% DG/SR modification end
+ \addto@pscode{\pst@tempa \pst@tempb \pst@tempc #1}%
+ \endgroup}
+%
+\def\pst@rawfile#1{%
+ \begingroup
+ \def\do##1{\catcode`##1=12\relax}"
+ \dospecials
+ \catcode`\%=14
+ \pst@@rawfile{#1}%
+ \endgroup}
+%
+\def\pst@@rawfile#1{%
+ \immediate\openin1 #1
+ \ifeof1
+ \@pstrickserr{File `#1' not found}\@ehpa
+ \else
+ \immediate\read1 to \pst@tempg
+ \loop
+ \ifeof1 \@pstfalse\else\@psttrue\fi
+ \if@pst
+ \addto@pscode\pst@tempg
+ \immediate\read1 to \pst@tempg
+ \repeat
+ \fi
+ \immediate\closein1\relax}
+%
+\def\tx@NArray{NArray }
+\def\tx@Line{Line }
+\def\tx@Arcto{Arcto }
+\def\tx@CheckClosed{CheckClosed }
+\def\tx@Polygon{Polygon }
+\define@key[psset]{pstricks}{gangle}[0]{\pst@getangle{#1}\psk@gangle}
+\define@boolkey[psset]{pstricks}[Pst@]{trueAngle}[true]{}
+\psset[pstricks]{trueAngle=false,gangle=0}
+%
+\def\tx@Diamond{Diamond }
+\def\psdiamond{\def\pst@par{}\pst@object{psdiamond}}
+\def\psdiamond@i(#1){\@ifnextchar({\psdiamond@ii(#1)}{\psdiamond@ii(0,0)(#1)}}
+\def\psdiamond@ii(#1)(#2){%
+ \begin@ClosedObj
+ \pst@getcoor{#1}\pst@tempa
+ \pst@getcoor{#2}\pst@tempb
+ \addto@pscode{%
+ \psline@iii
+ pop
+ \psk@dimen
+ \pst@tempb
+ \psk@gangle
+ \pst@tempa
+ \tx@Diamond
+ }%
+ \def\pst@linetype{4}%
+ \end@ClosedObj}
+%
+\def\tx@Triangle{Triangle }
+\def\pstriangle{\def\pst@par{}\pst@object{pstriangle}}
+\def\pstriangle@i(#1){\@ifnextchar({\pstriangle@ii(#1)}{\pstriangle@ii(0,0)(#1)}}
+\def\pstriangle@ii(#1)(#2){%
+ \begin@ClosedObj
+ \pst@getcoor{#1}\pst@tempa% the center of the baseline
+ \pst@getcoor{#2}\pst@tempb% the height of the triangle
+ \addto@pscode{%
+ \psline@iii
+ pop % no showpoints option
+ \psk@dimen % outer/inner/middle
+ \pst@tempb
+ \psk@gangle % rotating angle
+ \pst@tempa
+ \tx@Triangle
+ }%
+ \def\pst@linetype{2}%
+ \end@ClosedObj}
+%
+\def\tx@CCA{CCA }
+\def\tx@CCA{CCA }
+\def\tx@CC{CC }
+\def\tx@IC{IC }
+\def\tx@BOC{BOC }
+\def\tx@NC{NC }
+\def\tx@EOC{EOC }
+\def\tx@BAC{BAC }
+\def\tx@NAC{NAC }
+\def\tx@EAC{EAC }
+\def\tx@OpenCurve{OpenCurve }
+\def\tx@AltCurve{AltCurve }
+\def\tx@ClosedCurve{ClosedCurve }
+%
+\define@key[psset]{pstricks}{curvature}[1 0.1 0]{%
+ \edef\pst@tempg{#1 }%
+ \expandafter\psset@@curvature\pst@tempg * * * \@nil}
+\def\psset@@curvature#1 #2 #3 #4\@nil{%
+ \pst@checknum{#1}\pst@tempg
+ \pst@checknum{#2}\pst@temph
+ \pst@checknum{#3}\pst@tempi
+ \edef\psk@curvature{\pst@tempg \pst@temph \pst@tempi}}
+%
+\psset[pstricks]{curvature=1 .1 0}
+%
+\def\pscurve{\pst@object{pscurve}}
+\def\pscurve@i{%
+ \pst@getarrows{%
+ \begin@OpenObj
+ \pst@getcoors[\pscurve@ii%
+ }%
+}
+\def\pscurve@ii{%
+ \addto@pscode{
+ \ifPst@noCurrentPoint\else\pst@cp\fi % current point
+ \psk@curvature\space /c ED /b ED /a ED
+ \ifshowpoints true \else false \fi
+ \ifx\pslinestyle\psls@@symbol \psls@symbol OpenSymbolCurve \else \tx@OpenCurve \fi
+ \ifPst@variableLW \pst@flattenpath \fi
+ }%
+ \ifx\pslinestyle\psls@@symbol\def\pslinestyle{none}\fi%
+ \end@OpenObj%
+}
+\def\psecurve{\pst@object{psecurve}}
+\def\psecurve@i{\pst@getarrows{\begin@OpenObj\pst@getcoors[\psecurve@ii}}
+\def\psecurve@ii{%
+ \addto@pscode{
+ \psk@curvature\space /c ED /b ED /a ED
+ \ifshowpoints true \else false \fi
+ \ifx\pslinestyle\psls@@symbol \psls@symbol AltOpenSymbolCurve \else \tx@AltCurve \fi
+ }%
+ \ifx\pslinestyle\psls@@symbol\def\pslinestyle{none}\fi%
+ \end@OpenObj}
+%
+\def\psccurve{\pst@object{psccurve}}
+\def\psccurve@i{\begin@ClosedObj\pst@getcoors[\psccurve@ii}
+\def\psccurve@ii{%
+ \addto@pscode{%
+ \psk@curvature\space /c ED /b ED /a ED
+ \ifshowpoints true \else false \fi
+ \ifx\pslinestyle\psls@@symbol \psls@symbol ClosedSymbolCurve \else \tx@ClosedCurve \fi
+ }%
+ \def\pst@linetype{1}%
+ \ifx\pslinestyle\psls@@symbol\def\pslinestyle{none}\fi%
+ \end@ClosedObj}
+%
+\def\pscspline{\pst@object{pscspline}}% Christoph Bersch
+\def\pscspline@i{%
+ \pst@getarrows{%
+ \begin@OpenObj
+ \pst@getcoors[\pscspline@ii
+ }%
+}
+\def\tx@Spline{Spline }
+\def\pscspline@ii{%
+ \addto@pscode{
+ \ifPst@noCurrentPoint\else\pst@cp\fi
+ \tx@setlinejoin
+ \ifshowpoints true \else false \fi
+ \ifx\pslinestyle\psls@@symbol
+ \psls@symbol OpenSymbolSpline
+ \else
+ \tx@Spline
+ \fi
+ }%
+ \end@OpenObj
+}
+%
+\define@key[psset]{pstricks}{dotsize}[2pt 2]{%
+ \pst@expandafter\pst@getdimnum{#1} 0 {} {}\@nil%
+ \edef\psk@@dotsize{\pst@number\pst@dimg}%
+ \let\psk@@@dotsize\pst@tempg%
+ \edef\psk@dotsize{ /DS \psk@@dotsize \psk@@@dotsize CLW mul add 2 div def }}
+\psset[pstricks]{dotsize=2pt 2}
+%
+\define@key[psset]{pstricks}{dotscale}[1]{%
+ \pst@getscale{#1}\psk@dotscale
+ \ifx\psk@dotscale\@empty
+ \def\psk@xdotscale{1 }%
+ \def\psk@ydotscale{1 }%
+ \else
+ \let\psk@xdotscale\pst@tempg
+ \let\psk@ydotscale\pst@temph
+ \fi}
+%
+\def\pst@Getangle#1#2{%
+ \pst@getangle{#1}\pst@tempg
+ \def\pst@temph{0. }%
+ \ifx\pst@tempg\pst@temph\def#2{}\else\edef#2{\pst@tempg\space rotate }\fi}
+%
+\define@key[psset]{pstricks}{dotangle}[0]{%
+ \pst@getangle{#1}\psk@@dotangle
+ \ifdim\psk@@dotangle\p@=\z@
+ \let\psk@dotangle\@empty
+ \else
+ \edef\psk@dotangle{\psk@@dotangle rotate }%
+ \fi}
+\psset[pstricks]{dotangle=0}
+%
+\def\pst@getdotsize{%
+\pst@dimg=\psk@@@dotsize\pslinewidth
+\advance\pst@dimg\psk@@dotsize\p@
+\pst@dimh=\psk@ydotscale\pst@dimg
+\pst@dimg=\psk@xdotscale\pst@dimg
+\divide\pst@dimh 2
+\divide\pst@dimg 2\relax}
+%
+\psset[pstricks]{dotscale=1}
+%
+\def\psdot{\pst@object{psdot}}
+\def\psdot@i{\@ifnextchar({\psdot@ii}{\psdot@ii(\z@,\z@)}}
+\def\psdot@ii(#1){%
+ \begin@SpecialObj%
+% hv modification 1.13 2005-11-28
+ \solid@star%
+% hv modification end
+ \pst@@getcoor{#1}%
+ \addto@pscode{
+ \psk@dotsize
+ \@nameuse{psds@\psk@dotstyle}
+ \tx@setStrokeTransparency
+ \pst@coor Dot}%
+ \end@SpecialObj}
+%
+\def\psdots{\pst@object{psdots}}
+\def\psdots@i{%
+ \begin@SpecialObj%
+ \pst@getcoors[\psdots@ii}
+\def\psdots@ii{%
+ \addto@pscode{ false \tx@NArray \psdots@iii }%
+ \end@SpecialObj}
+\def\psdots@iii{%
+ \psk@dotsize
+ \@nameuse{psds@\psk@dotstyle}
+ \tx@setStrokeTransparency
+ newpath
+ n { transform floor .5 add exch floor .5 add exch itransform Dot } repeat }
+%
+% DG: dead code (to suppress until \psset[pstricks]{dotstyle) ? - Aug. 4, 1997
+\def\tx@SQ{SQ }
+\def\tx@ST{ST }
+\def\tx@SP{SP }
+%
+\def\pst@gdot#1{ /Dot { gsave T \psk@dotangle \psk@dotscale #1 grestore } def }
+%
+\@namedef{psds@*}{\pst@gdot{ 0 0 DS \tx@SD }}
+\@namedef{psds@o}{%
+ /r2 DS CLW sub def
+ \pst@gdot{ 0 0 DS \tx@SD \pst@usecolor\psfillcolor SLW 0 0 r2 \tx@SD }}
+\@namedef{psds@square*}{ /r1 DS .886 mul def \pst@gdot{r1 \tx@SQ }}
+\@namedef{psds@square}{%
+ /r1 DS .886 mul def /r2 r1 CLW sub def
+ \pst@gdot{r1 \tx@SQ \pst@usecolor\psfillcolor r2 \tx@SQ}}
+\@namedef{psds@triangle*}{%
+ /y1 DS .778 mul neg def /x1 y1 1.732 mul neg def
+ \pst@gdot{x1 y1 \tx@ST}}
+\@namedef{psds@triangle}{%
+ /y1 DS .778 mul neg def /x1 y1 1.732 mul neg def
+ /y2 y1 CLW add def /x2 y2 1.732 mul neg def
+ \pst@gdot{x1 y1 \tx@ST \pst@usecolor\psfillcolor x2 y2 \tx@ST}}
+\@namedef{psds@pentagon*}{%
+ /r1 DS 1.149 mul def
+ \pst@gdot{r1 \tx@SP}}
+\@namedef{psds@pentagon}{%
+ DS .93 mul dup 1.236 mul /r1 ED CLW sub 1.236 mul /r2 ED
+ \pst@gdot{r1 \tx@SP \pst@usecolor\psfillcolor r2 \tx@SP}}
+\@namedef{psds@+}{%
+ /DS DS 1.253 mul def
+ \pst@gdot{DS 0 moveto DS neg 0 L stroke 0 DS moveto 0 DS neg L stroke}}
+\@namedef{psds@|}{%
+ \psk@tbarsize CLW mul add 2 div /DS ED
+ \pst@gdot{0 DS moveto 0 DS neg L stroke}}
+% DG: end dead code?
+%
+\define@key[psset]{pstricks}{dotstyle}[*]{%
+ \@ifundefined{psds@#1}%
+ {\@pstrickserr{Dot style `#1' not defined}\@eha}%
+ {\edef\psk@dotstyle{#1}}}
+\psset[pstricks]{dotstyle=*}
+%
+\def\tx@FontDot{FontDot }
+\def\newpsfontdot#1[#2]#3#4{%
+ \@namedef{psds@#1}{%
+ /#3 \psk@@dotangle [#2] \tx@FontDot
+% DG/SR modification begin - Dec. 12, 1999 - Patch 14
+%/Dot { moveto #4 show } bind def }}
+ /Dot { moveto gsave \psk@dotscale #4 show grestore } bind def
+}}
+% DG/SR modification end
+\def\newpsfontdotH#1[#2]#3#4#5{% for filled objects
+ \@namedef{psds@#1}{%
+ /#3 \psk@@dotangle [#2] \tx@FontDot
+ /Dot {
+ moveto
+% \iftrue
+% DG/SR modification begin - Dec. 23, 1999 - Patch 14
+%gsave \pst@usecolor\psfillcolor #5 show grestore
+%\fi
+%#4 show
+ gsave \psk@dotscale \pst@usecolor\psfillcolor #5 show grestore % fill first
+% \fi
+ gsave \psk@dotscale #4 show grestore % show the unfilled one
+% DG/SR modification end
+ } bind def
+}}
+%
+\pstheader{pst-dots.pro}
+\newpsfontdot{*}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(b)}
+\newpsfontdotH{o}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(c)}{(b)}
+\newpsfontdotH{Bo}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(C)}{(b)}
+\newpsfontdotH{triangle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(t)}{(u)}
+\newpsfontdotH{Btriangle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(T)}{(u)}
+\newpsfontdot{triangle*}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(u)}
+\newpsfontdotH{square}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(s)}{(r)}
+\newpsfontdotH{Bsquare}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(S)}{(r)}
+\newpsfontdot{square*}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(r)}
+\newpsfontdotH{pentagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(p)}{(q)}
+\newpsfontdotH{Bpentagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(P)}{(q)}
+\newpsfontdot{pentagon*}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(q)}
+% DG/SR modification begin - Mar. 18, 1997 and Dec. 16, 1999 - Patch 14
+%\newpsfontdot{diamond*}[1.9 0.0 0.0 1.9 -0.4598 -0.70775]{StandardSymL}{<E0>}
+%\newpsfontdot{diamond}[2.3 0.0 0.0 2.3 -0.8533 -0.5336]{StandardSymL}{<A8>}
+% D.G. modification begin - Jan. 17, 2000
+\newpsfontdotH{diamond}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(d)}{(l)}
+\newpsfontdotH{Bdiamond}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(D)}{(l)}
+\newpsfontdot{diamond*}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(l)}
+% DG/SR modification end
+\newpsfontdot{oplus}[1.44928 0.0 0.0 1.44928 -0.562319 -0.478261]{StandardSymL}{<C5>}
+\newpsfontdot{otimes}[1.44928 0.0 0.0 1.44928 -0.562319 -0.475362]{StandardSymL}{<C4>}
+\newpsfontdot{x}[1.8 0.0 0.0 1.8 -0.495 -0.4788]{StandardSymL}{<B4>}
+\newpsfontdot{+}[2.3 0.0 0.0 2.3 -0.6486 -0.5819]{NimbusRomNo9L-Regu}{<2B>}
+\newpsfontdot{asterisk}[2.43309 0.0 0.0 2.43309 -0.609489 -1.14477]{NimbusRomNo9L-Regu}{<2A>}
+\newpsfontdot{B+}[2.3 0.0 0.0 2.3 -0.6555 -0.5819]{NimbusRomNo9L-Bold}{<2B>}
+\newpsfontdot{Basterisk}[2.29358 0.0 0.0 2.29358 -0.576835 -1.08486]{NimbusRomNo9L-Bold}{<2A>}
+\newpsfontdot{|}[1.98413 0.0 0.0 1.38 -0.258929 -0.5]{NimbusSanL-Regu}{(|)}
+% DG/SR modification begin - Oct. 27, 1997 - Patch 7
+%[1.98413 0.0 0.0 1.98413 -0.258929 -0.712302]{NimbusSanL-Regu}{(|)}
+% DG/SR modification end
+\newpsfontdot{B|}[1.98413 0.0 0.0 1.38 -0.277778 -0.5]{NimbusSanL-Bold}{(|)}%
+% DG/SR modification begin - Oct. 27, 1997 - Patch 7
+%[1.98413 0.0 0.0 1.98413 -0.277778 -0.78302]{NimbusSanL-Bold}{(|)}
+
+% DG/SR modification end
+\iffalse
+\newpsfontdot{*}[2.77778 0.0 0.0 2.77778 -0.638889 -0.813889]{StandardSymL}{<B7>}
+\newpsfontdot{o}[3.33333 0.0 0.0 3.33333 -0.666667 -1.78167]{StandardSymL}{<B0>}
+\newpsfontdot{Bo}[4.69484 0.0 0.0 4.69484 -0.78169 -2.97418]{NimbusRomNo9L-Bold}{<CA>}
+\fi
+% Etienne Riga
+\newpsfontdot{Asterisk}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(k)}
+\newpsfontdot{BoldAsterisk}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(K)}
+\newpsfontdotH{SolidAsterisk}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(J)}{(b)}
+%
+\newpsfontdotH{Pentagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(p)}{(q)}
+\newpsfontdotH{BoldPentagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(P)}{(q)}
+\newpsfontdot{SolidPentagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(q)}
+\newpsfontdotH{Hexagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(h)}{(G)}
+\newpsfontdotH{BoldHexagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(H)}{(G)}
+\newpsfontdot{SolidHexagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(G)}
+\newpsfontdotH{Octogon}[1 0 0 1 0 0]{PSTricksDotFont}{(f)}{(g)}
+\newpsfontdotH{BoldOctogon}[1 0 0 1 0 0]{PSTricksDotFont}{(F)}{(g)}
+\newpsfontdot{SolidOctogon}[1 0 0 1 0 0]{PSTricksDotFont}{(g)}
+%
+\newpsfontdot{Bullet}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(b)}
+\newpsfontdotH{Circle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(c)}{(b)}
+\newpsfontdotH{BoldCircle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(C)}{(b)}
+%\newpsfontdot{SolidCircle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(u)}
+\newpsfontdotH{Triangle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(t)}{(u)}
+\newpsfontdotH{BoldTriangle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(T)}{(u)}
+\newpsfontdot{SolidTriangle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(u)}
+\newpsfontdotH{Square}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(s)}{(r)}
+\newpsfontdotH{BoldSquare}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(S)}{(r)}
+\newpsfontdot{SolidSquare}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(r)}
+\newpsfontdot{Add}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(a)}
+\newpsfontdot{BoldAdd}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(A)}
+\newpsfontdot{Mul}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(x)}
+\newpsfontdot{BoldMul}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(X)}
+\newpsfontdotH{Oplus}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(m)}{(b)}
+\newpsfontdotH{BoldOplus}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(M)}{(b)}
+\newpsfontdotH{SolidOplus}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(e)}{(b)}
+\newpsfontdotH{Otimes}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(n)}{(b)}
+\newpsfontdotH{BoldOtimes}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(N)}{(b)}
+\newpsfontdotH{SolidOtimes}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(E)}{(b)}
+\newpsfontdot{Bar}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(i)}
+\newpsfontdot{BoldBar}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(I)}
+\newpsfontdotH{Diamond}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(d)}{(l)}
+\newpsfontdotH{BoldDiamond}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(D)}{(l)}
+\newpsfontdot{SolidDiamond}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(l)}
+%
+\newdimen\pslinearc
+\define@key[psset]{pstricks}{linearc}[0pt]{\pssetlength\pslinearc{#1}}
+\psset[pstricks]{linearc=0pt}
+%
+\def\psline{\pst@object{psline}}
+\def\psline@i{%
+ \pst@getarrows{%
+ \begin@OpenObj
+ \pst@getcoors[\psline@ii
+ }%
+}
+\def\psline@ii{%
+ \ifx\pslinestyle\psls@@symbol\addto@pscode{ \psls@symbol SymbolLine }%
+ \else
+ \addto@pscode{
+ \ifPst@noCurrentPoint\else\pst@cp\fi % current point?
+ \psline@iii % arc and lineto type
+ \tx@Line % .pro function
+ }%
+ \fi
+ \end@OpenObj
+}
+\def\psline@iii{%
+ \ifdim\pslinearc>\z@
+ /r \pst@number\pslinearc def
+ /Lineto { \tx@Arcto } def
+ \else
+ /Lineto /lineto load def
+ \fi
+ \tx@setlinejoin % hv 2007-10-13
+ \ifshowpoints true \else false \fi
+}
+%
+\def\psLine{\pst@object{psLine}}
+\def\psLine@i{%
+ \pst@getarrows{%
+ \begin@OpenObj
+ \psLine@ii}}
+\def\psLine@ii(#1){\@ifnextchar({\psLine@iii(#1)}{\psLine@iii(0,0)(#1)}}%
+\def\psLine@iii(#1)(#2){%
+ \pst@getcoor{#1}\pst@tempA
+ \pst@getcoor{#2}\pst@tempB
+ \addto@pscode{
+ \ifPst@noCurrentPoint\else\pst@cp\fi % current point?
+ [ % start for coordinate array
+ \pst@tempB
+ \pst@tempA % order vice versa
+ 4 copy Pyth2 \psk@arrowlength ge
+ { \psline@iii \tx@Line }
+ { pop pop pop pop pop } ifelse
+ }%
+ \end@OpenObj
+ \ignorespaces
+}
+\def\psLineSegments{\leavevmode\pst@killglue\pst@object{psLineSegments}}
+\def\psLineSegments@i{\pst@getarrows{\psLineSegments@ii}}
+\def\psLineSegments@ii(#1)(#2){%
+ \begingroup
+ \use@keep@par
+ \solid@star
+ \ifpsdoubleline\pst@setdoublesep\fi
+ \init@pscode
+ \let\pst@linetype\pst@arrowtype
+ \pst@addarrowdef
+ \pst@getcoor{#1}\pst@tempA
+ \pst@getcoor{#2}\pst@tempB
+ \addto@pscode{
+ \ifPst@noCurrentPoint\else\pst@cp\fi % current point?
+ [ % start for coordinate array
+ \pst@tempB
+ \pst@tempA % order vice versa
+ 4 copy Pyth2 \psk@arrowlength ge
+ { \psline@iii \tx@Line }
+ { pop pop pop pop pop } ifelse
+ }%
+ \end@OpenObj
+ \ignorespaces
+ \@ifnextchar(\psLineSegments@ii{}%
+}%
+\def\pst@isnum#1{\pst@isnum@i\zap@space#1 \@empty\@nil}%
+\def\pst@isnum@i#1\@nil{%
+ \if!\ifnum9<1#1!\else_\fi%
+ \expandafter\@firstoftwo%
+ \else%
+ \expandafter\@secondoftwo%
+ \fi}
+%
+\def\psset@@symbol#1#2#3#4\@nil{%
+ \ifx\relax#4\relax\def\psk@symbol{(#1)}%
+ \else%
+ \pst@isnum{#1#2#3}{%
+ \pst@cnta='#1#2#3\relax%
+ \ifnum\pst@cnta>'377\relax%
+ \@pstrickserr{Number too large!}\@ehpb%
+ \else%
+ \def\psk@symbol{(\@backslashchar#1#2#3)}%
+ \fi%
+}{\@pstrickserr{Not a number!}\@ehpb}%
+ \fi}
+%
+\define@key[psset]{pstricks}{symbol}[a]{\expandafter\psset@@symbol#1!!\@nil}
+\psset[pstricks]{symbol=a}
+%
+\newdimen\pst@symbolStep
+\define@key[psset]{pstricks}{symbolStep}[20pt]{\pst@expandafter\pst@@symbolStep#1\@nil}
+\def\pst@@symbolStep#1#2\@nil{\if-#1\pssetlength\pst@symbolStep{-#2pt}\else\pssetlength\pst@symbolStep{#1#2}\fi}
+\psset[pstricks]{symbolStep=20pt}
+
+\newdimen\pst@symbolWidth
+\newdimen\pst@symbolLinewidth
+\define@key[psset]{pstricks}{symbolWidth}[10pt]{\pssetlength\pst@symbolWidth{#1}}
+\define@key[psset]{pstricks}{symbolLinewidth}[0.5pt]{\pssetlength\pst@symbolLinewidth{#1}}
+\psset[pstricks]{symbolWidth=10pt,symbolLinewidth=0.5pt}
+
+\define@key[psset]{pstricks}{symbolFont}[Dingbats]{\def\psk@symbolFont{/#1 }}
+\psset[pstricks]{symbolFont=Dingbats}
+\define@boolkey[psset]{pstricks}[Pst@]{rotateSymbol}[true]{}
+\psset[pstricks]{rotateSymbol=false}
+\define@key[psset]{pstricks}{startAngle}[0]{\pst@getangle{#1}\psk@startAngle}
+\define@key[psset]{pstricks}{tickAngle}[0]{\pst@getangle{#1}\psk@tickAngle}
+\psset[pstricks]{startAngle=0,tickAngle=0}
+\define@boolkey[psset]{pstricks}[Pst@]{curveticks}[true]{}
+\psset[pstricks]{curveticks=false}
+
+%
+\def\psls@symbol{
+ /Symbol \psk@symbol def
+ /SymbolWidth \pst@number\pst@symbolWidth def
+ /SymbolLinewidth \pst@number\pst@symbolLinewidth def
+ /SymStep \pst@number\pst@symbolStep def
+ \psk@symbolFont findfont %0. [1.0 0.0 0.0 1.0 0.0 0.0]
+ \pst@number\pst@symbolWidth scalefont %dup
+ setfont
+ /rotateSymbol \ifPst@rotateSymbol true \else false \fi def
+ /tickAngle \psk@tickAngle\space def
+ /startAngle \psk@startAngle\space def
+ /CorrAngle \ifx\psk@rot\@empty 0 \else \psk@rot \fi def
+ /curveticks \ifPst@curveticks true \else false \fi def
+ \pst@number\pslinewidth SLW
+}
+\def\psls@@symbol{symbol}
+%
+\def\psPline{\def\pst@par{}\pst@object{psPline}}% perpendicular to another line B-C
+\def\psPline@i{%
+ \pst@getarrows{%
+ \begin@OpenObj
+ \pst@getcoors[\psPline@ii}% \pst@coors on stack
+}
+\def\psPline@ii{%
+ \addto@pscode{ % [ pC pB pA is on stack
+ /yA ED /xA ED
+ /yB ED /xB ED
+ yB sub exch xB sub div /mBC ED % the slope
+ /mA 1 mBC neg div def % orthogonal
+ /xS yA yB sub mBC xB mul add mA xA mul sub mBC mA sub div def
+ /yS mBC xS xB sub mul yB add def
+ xS yS xA yA
+ \ifPst@noCurrentPoint\else\pst@cp\fi % current point
+ \psline@iii % arc and lineto type
+ \tx@Line % .pro function
+ }%
+ \end@OpenObj%
+ \ignorespaces%
+}
+%
+\def\qline(#1)(#2){%
+ \def\pst@par{}%
+ \begin@SpecialObj
+ \def\pst@linetype{0}%
+ \pst@getcoor{#1}\pst@tempa
+ \pst@@getcoor{#2}%
+ \addto@pscode{%
+ \pst@tempa moveto \pst@coor L
+ \@nameuse{psls@\pslinestyle}%
+ }%
+ \end@SpecialObj}
+%
+\def\pspolygon{\pst@object{pspolygon}}
+\def\pspolygon@i{%
+ \begin@ClosedObj%
+ \def\pst@cp{}%
+ \pst@getcoors[\pspolygon@ii%
+}
+\def\pspolygon@ii{%
+ \ifx\pslinestyle\psls@@symbol\addto@pscode{ \psls@symbol SymbolPolygon }%
+ \else \addto@pscode{\psline@iii \tx@Polygon}%
+ \fi%
+ \def\pst@linetype{1}%
+ \end@ClosedObj}
+%
+\define@key[psset]{pstricks}{framearc}[0]{\pst@checknum{#1}\psk@framearc}
+\psset[pstricks]{framearc=0}
+%
+\define@key[psset]{pstricks}{cornersize}[relative]{\pst@expandafter\psset@@cornersize{#1}\@nil}
+\def\psset@@cornersize#1#2\@nil{%
+ \if #1a\relax
+ \def\psk@cornersize{\pst@number\pslinearc false }%
+ \else\def\psk@cornersize{\psk@framearc true }%
+ \fi}
+\psset[pstricks]{cornersize=relative}
+%
+\def\tx@Rect{Rect }
+\def\tx@OvalFrame{OvalFrame }
+\def\tx@Frame{Frame }
+%
+\define@key[psset]{pstricks}{dimen}[outer]{\pst@expandafter\psset@@dimen{#1}\@nil}
+\def\psset@@dimen#1#2\@nil{%
+ \if #1o\relax% outer
+ \def\psk@dimen{.5 }%
+ \else
+ \if #1m\relax% middle
+ \def\psk@dimen{0 }%
+ \else
+ \if #1i\relax% inner
+ \def\psk@dimen{-.5 }%
+ \fi\fi\fi}
+\psset[pstricks]{dimen=outer}
+%
+\def\psframe{\pst@object{psframe}}
+\def\psframe@i(#1){%
+ \@ifnextchar({\psframe@ii(#1)}{\psframe@ii(0,0)(#1)}}
+\def\psframe@ii(#1)(#2){%
+ \begin@ClosedObj
+ \pst@getcoor{#1}\pst@tempa
+ \pst@@getcoor{#2}%
+ \addto@pscode{ \psk@cornersize \pst@tempa \pst@coor \psk@dimen \tx@Frame }%
+ \def\pst@linetype{2}%
+ \showpointsfalse
+ \end@ClosedObj
+}
+
+\iffalse
+\def\psSquare{\pst@object{psSquare}}
+\def\psSquare@i(#1)(#2){%
+ \begin@ClosedObj
+ \pst@getcoor{#1}\pst@tempa
+ \pst@getcoor{#2}\pst@tempb
+ \addto@pscode{ \psk@cornersize
+ \pst@tempa /yA ED /xA ED
+ \pst@tempb /yB ED /xB ED
+ xA yA moveto xB yB L
+ xA xB sub yA yB sub atan /Angle ED
+ xA yA xB yB Pyth2 dup xA add exch yA add
+ \psk@dimen
+ \tx@Frame
+% grestore
+ }%
+ \def\pst@linetype{2}%
+ \showpointsfalse
+ \end@ClosedObj
+}
+\fi
+%
+\def\psTextFrame{\pst@object{psTextFrame}}
+\def\psTextFrame@i(#1)(#2)#3{%
+ \addbefore@par{ref=c}% to prevent an empty value
+ \leavevmode%
+ \pst@killglue
+ \begingroup
+ \use@par
+ \ifx\psk@yref\relax \def\psk@yref{0}\fi% no Baseline possible
+ \SpecialCoor
+ \pst@getcoor{#1}\pst@tempA
+ \pst@getcoor{#2}\pst@tempB
+ \if@star\psframe*(#1)(#2)\else\psframe(#1)(#2)\fi
+ \rput(! \pst@tempA \pst@tempB % x1 y1 x2 y2
+ exch 4 -1 roll % y1 y2 x2 x1
+ dup /x1 ED % y1 y2 x2 x1
+ sub /dx ED % y1 y2
+ exch dup /y1 ED % y2 y1
+ sub /dy ED
+ x1 dx \psk@xref\space mul add \pst@number\psxunit div
+ y1 dy \psk@yref\space mul add \pst@number\psyunit div ){#3}
+ \endgroup
+ \ignorespaces}
+%
+\def\tx@BezierNArray{ BezierNArray }
+\def\tx@OpenBezier{ OpenBezier }
+\def\tx@ClosedBezier{ ClosedBezier }
+\def\tx@BezierShowPoints{ BezierShowPoints }
+\def\tx@BezierCurve{ BezierCurve }
+\def\pst@BezierType{2 } % the default
+%
+\def\psbezier{\pst@object{psbezier}}
+\def\psbezier@i{%
+ \pst@getarrows{%
+ \begin@OpenObj
+ \pst@getcoors[\psbezier@ii%
+ }%
+}
+\def\psbezier@ii{%
+ \addto@pscode{
+ \ifPst@noCurrentPoint\else\pst@cp\fi
+ \ifshowpoints true \else false \fi
+ \ifx\pslinestyle\psls@@symbol \psls@symbol OpenSymbolBezier
+ \else
+ \tx@OpenBezier
+ \ifshowpoints \tx@BezierShowPoints \fi
+ \fi
+ }%
+ \def\pst@linetype{1}%
+ \ifx\pslinestyle\psls@@symbol\def\pslinestyle{none}\fi%
+ \end@OpenObj}
+%
+\def\pscbezier{\def\pst@par{}\pst@object{pscbezier}}
+\def\pscbezier@i{%
+ \begin@ClosedObj
+ \pst@getcoors[\pscbezier@ii}
+%
+\def\pscbezier@ii{%
+ \addto@pscode{%
+ \ifshowpoints true \else false \fi
+ \ifx\pslinestyle\psls@@symbol \psls@symbol ClosedSymbolBezier
+ \else
+ \tx@ClosedBezier
+ \ifshowpoints \tx@BezierShowPoints \fi
+ \fi}%
+% \chardef\pst@linetype=1
+ \def\pst@linetype{1}%
+ \ifx\pslinestyle\psls@@symbol\def\pslinestyle{none}\fi%
+ \end@ClosedObj}
+%
+\iffalse
+\define@key[psset]{pstricks}{epsilon}[0.005]{\pst@checknum{#1}\psk@epsilon}
+\psset[pstricks]{epsilon=0.005} % 200 steps for one curve
+%
+\def\psBezier#1{% % allowed order is 1 ... 9
+ \ifnum#1>0 \ifnum#1<10 \def\pst@BezierType{#1 }\fi\fi%
+ \def\pst@par{}\pst@object{psBezier}}
+\def\psBezier@i{%
+ \pst@getarrows{%
+ \begin@OpenObj
+ \pst@getcoors[\psBezier@ii%
+}}
+\def\psBezier@ii{%
+ \addto@pscode{%
+ \psk@epsilon % step for Bezier T=0,0+epsilon,0+i*epsilon,...,1
+ \pst@BezierType % type of the Bezier curve 2,3,4,...
+ \tx@BezierCurve
+ \ifshowpoints \tx@BezierShowPoints \fi
+ }%
+ \end@OpenObj}
+\fi
+%
+\define@key[psset]{pstricks}{pType}[0]{\pst@cntg=#1\relax\edef\psk@pType{\the\pst@cntg}}
+\psset[pstricks]{pType=0}
+\def\tx@Parab{Parab }% given by 1 point and the min/max
+\def\tx@Parabo{Parab1 }% given by 2 points for y-a=(x-b)^2
+%
+\def\psparabola{\pst@object{psparabola}}% 2009-05-19 (hv)
+\def\psparabola@i{\pst@getarrows\psparabola@ii}
+\def\psparabola@ii#1(#2)#3(#4){% #2 P #4 SP
+ \begin@OpenObj
+ \pst@getcoor{#2}\pst@tempa
+ \pst@@getcoor{#4}%
+ \addto@pscode{\pst@tempa \pst@coor
+ \ifcase\psk@pType
+ \tx@Parab \or
+ \tx@Parabo
+ \fi}%
+ \end@OpenObj}
+\let\parabola\psparabola% compatibility (hv)
+%
+%
+\define@key[psset]{pstricks}{gridwidth}[0.8pt]{\pst@getlength{#1}\psk@gridwidth}
+\psset[pstricks]{gridwidth=.8pt}
+\define@key[psset]{pstricks}{griddots}[0]{%
+ \pst@cntg=#1\relax
+ \edef\psk@griddots{\the\pst@cntg}}
+\psset[pstricks]{griddots=0}
+\define@key[psset]{pstricks}{gridcolor}[black]{\pst@getcolor{#1}\psgridcolor}
+\psset[pstricks]{gridcolor=black}
+\define@key[psset]{pstricks}{subgridwidth}[0.4pt]{\pst@getlength{#1}\psk@subgridwidth}
+\psset[pstricks]{subgridwidth=0.4pt}
+\define@key[psset]{pstricks}{subgridcolor}[gray]{\pst@getcolor{#1}\pssubgridcolor}
+\psset[pstricks]{subgridcolor=gray}
+\define@key[psset]{pstricks}{subgriddots}[0]{%
+ \pst@cntg=#1\relax\edef\psk@subgriddots{\the\pst@cntg}}
+\psset[pstricks]{subgriddots=0}
+\define@key[psset]{pstricks}{subgriddiv}[5]{%
+ \pst@cntg=#1\relax\edef\psk@subgriddiv{\the\pst@cntg}}
+\psset[pstricks]{subgriddiv=5}
+%
+\define@key[psset]{pstricks}{gridfont}[NimbusSanL-Regu]{\def\psk@gridfont{/#1 }}% hv 2007-11-13
+\ifpst@psfonts
+ \psset[pstricks]{gridfont=Helvetica}%
+\else
+ \psset[pstricks]{gridfont=NimbusSanL-Regu}%
+\fi
+%
+\define@key[psset]{pstricks}{gridlabels}[10pt]{\pst@getlength{#1}\psk@gridlabels}
+\psset[pstricks]{gridlabels=10pt}
+\define@key[psset]{pstricks}{gridlabelcolor}[black]{\pst@getcolor{#1}\psgridlabelcolor}
+\psset[pstricks]{gridlabelcolor=black}
+\define@key[psset]{pstricks}{xgridoffset}[0]{\pst@getlength{#1}\psk@xgridoffset}
+\define@key[psset]{pstricks}{ygridoffset}[0]{\pst@getlength{#1}\psk@ygridoffset}
+\psset[pstricks]{xgridoffset=0,ygridoffset=0}
+
+\def\tx@Grid{Grid }
+
+\def\psgrid{\pst@object{psgrid}}
+\def\psgrid@i{\@ifnextchar({\psgrid@ii}{\expandafter\psgrid@iv\pic@coor}}
+\def\psgrid@ii(#1){\@ifnextchar({\psgrid@iii(#1)}{\psgrid@iv(0,0)(0,0)(#1)}}
+\def\psgrid@iii(#1)(#2){\@ifnextchar({\psgrid@iv(#1)(#2)}{\psgrid@iv(#1)(#1)(#2)}}
+\def\psgrid@iv(#1)(#2)(#3){%
+ \begin@SpecialObj%
+ \pst@getcoor{#1}\pst@tempA% hv 1.11
+ \pst@getcoor{#2}\pst@tempB% hv 1.11
+ \pst@@getcoor{#3}%
+ \ifnum\psk@subgriddiv>1\relax
+ \addto@pscode{
+ /xGridOffset \psk@xgridoffset\space def
+ /yGridOffset \psk@ygridoffset\space def
+ gsave
+ \tx@setStrokeTransparency
+ \psk@subgridwidth SLW
+ \pst@usecolor\pssubgridcolor
+ \pst@tempB \pst@coor \pst@tempA % hv 1.11
+% \pst@number\psxunit \pst@number\psyunit % hv 1.11
+ \pst@number\psxunit abs \pst@number\psyunit abs % hv 1.11
+ \psk@subgriddiv\space \psk@subgriddots\space
+ {} 0
+ \psk@gridfont findfont 0 scalefont setfont % hv 1.16
+ \tx@Grid
+ grestore
+ }%
+ \fi%
+ \addto@pscode{
+ gsave
+ /xGridOffset \psk@xgridoffset def
+ /yGridOffset \psk@ygridoffset def
+ \tx@setStrokeTransparency
+ \psk@gridwidth SLW
+ \pst@usecolor\psgridcolor
+ \pst@tempB \pst@coor \pst@tempA % hv 1.11
+ \pst@number\psxunit abs \pst@number\psyunit abs % hv 1.11
+% \pst@number\psxunit \pst@number\psyunit % hv 1.11
+ 1 \psk@griddots\space { \pst@usecolor\psgridlabelcolor }
+ \psk@gridlabels
+ \psk@gridfont findfont \psk@gridlabels scalefont setfont % hv 1.16
+ \tx@Grid
+ grestore
+ }%
+ \end@SpecialObj}
+%
+\newif\ifpsmathbox
+\psmathboxtrue
+\def\pst@mathflag{\z@}
+\newtoks\everypsbox
+\let\pst@thisbox\relax
+%
+\long\def\pst@makenotverbbox#1#2{%
+ \edef\pst@mathflag{%
+ \ifpsmathbox\ifmmode\ifinner 1\else 2\fi\else\z@\fi\else\z@\fi}%
+ \setbox\pst@hbox=\hbox{%
+ \ifcase\pst@mathflag\or$\m@th\textstyle\or$\m@th\displaystyle\fi%
+ {\pst@thisbox\the\everypsbox#2}%
+ \ifnum\pst@mathflag>\z@$\fi% $
+ }%
+ #1}
+%
+\def\pst@makeverbbox#1{%
+ \def\pst@afterbox{#1}%
+ \edef\pst@mathflag{\ifpsmathbox\ifmmode\ifinner1\else2\fi\else\z@\fi\else\z@\fi}%
+ \afterassignment\pst@beginbox%
+ \setbox\pst@hbox\hbox%
+}
+\def\pst@beginbox{%
+ \ifcase\pst@mathflag\or$\m@th\or$\m@th\displaystyle\fi%
+ \bgroup\aftergroup\pst@endbox%
+ \pst@thisbox%
+ \the\everypsbox%
+}
+\def\pst@endbox{%
+ \ifnum\pst@mathflag>\z@\relax$\fi% $
+ \egroup%
+ \pst@afterbox%
+}
+\def\pst@makebox{\pst@@makebox}
+\def\psverbboxtrue{\def\pst@@makebox{\pst@makeverbbox}}
+\def\psverbboxfalse{\def\pst@@makebox{\pst@makenotverbbox}}
+\psverbboxfalse
+\def\pst@longbox{%
+ \def\pst@makebox{%
+ \gdef\pst@makebox{\pst@@makebox}%
+ \pst@makelongbox%
+ }%
+}
+\def\pst@makelongbox#1{%
+ \def\pst@afterbox{#1}%
+ \edef\pst@mathflag{%
+ \ifpsmathbox\ifmmode\ifinner 1\else 2\fi\else \z@\fi\else \z@\fi%
+ }%
+ \setbox\pst@hbox\hbox\bgroup
+ \aftergroup\pst@afterbox
+ \ifcase\pst@mathflag\or$\m@th\or$\m@th\displaystyle\fi
+ \begingroup
+ \pst@thisbox
+ \the\everypsbox%
+}
+\def\pst@endlongbox{%
+ \endgroup
+ \ifnum\pst@mathflag>\z@$\fi %$
+ \egroup%
+}
+\def\pslongbox#1#2{%
+ \@namedef{#1}{\pst@longbox#2}%
+ \@namedef{end#1}{\pst@endlongbox}}
+%
+\newdimen\psframesep
+\define@key[psset]{pstricks}{framesep}[3pt]{\pssetlength\psframesep{#1}}
+\psset[pstricks]{framesep=3pt}
+%
+\define@boolkey[psset]{pstricks}[ps]{boxsep}[true]{}
+\psset[pstricks]{boxsep}
+%
+\def\pst@useboxpar{%
+ \use@par
+ \if@star
+ \let\pslinecolor\psfillcolor
+ \solid@star
+ \let\solid@star\relax
+ \fi
+ \ifpsdoubleline \pst@setdoublesep \fi}
+%
+\def\psframebox{\def\pst@par{}\pst@object{psframebox}}
+\def\psframebox@i{\pst@makebox\psframebox@ii}
+\def\psframebox@ii{%
+ \begingroup
+ \pst@useboxpar
+ \pst@dima=\pslinewidth
+ \advance\pst@dima by \psframesep
+ \pst@dimc=\wd\pst@hbox\advance\pst@dimc by \pst@dima
+ \pst@dimb=\dp\pst@hbox\advance\pst@dimb by \pst@dima
+ \pst@dimd=\ht\pst@hbox\advance\pst@dimd by \pst@dima
+ \setbox\pst@hbox=\hbox{%
+ \ifpsboxsep\kern\pst@dima\fi
+ \begin@ClosedObj
+ \addto@pscode{%
+ \psk@cornersize % arcradius boolean
+ \pst@number\pst@dima neg
+ \pst@number\pst@dimb neg
+ \pst@number\pst@dimc
+ \pst@number\pst@dimd
+ .5
+ \tx@Frame%
+ }%
+ \def\pst@linetype{2}%
+ \showpointsfalse
+ \end@ClosedObj
+ \box\pst@hbox
+ \ifpsboxsep\kern\pst@dima\fi%
+ }%
+ \ifpsboxsep\dp\pst@hbox=\pst@dimb\ht\pst@hbox=\pst@dimd\fi
+ \leavevmode\box\pst@hbox
+ \endgroup}
+%
+\def\psdblframebox{\def\pst@par{}\pst@object{psdblframebox}}
+\def\psdblframebox@i{\addto@par{doubleline=true}\psframebox@i}
+%
+\define@key[psset]{pstricks}{clipcommand}[clip]{\def\pst@clipcommand{#1 }}
+\psset[pstricks]{clipcommand=clip}% alternative is eoclip
+%
+\def\psclip{\@ifnextchar[\psclip@i{\psclip@i[]}}%
+\def\psclip@i[#1]#2{%
+ \leavevmode%
+ \begingroup%
+ \ifx\relax#1\relax\else\psset{#1}\fi%
+ \begin@psclip%
+ \begingroup%
+ \def\use@pscode{%
+ \pstVerb{
+ \pst@dict
+ /mtrxc CM def
+ CP CP T
+ \tx@STV
+ \psk@origin
+ \psk@swapaxes
+ newpath
+ \pst@code
+ \pst@clipcommand
+ newpath
+ mtrxc setmatrix
+ moveto
+ 0 setgray
+ end
+ }%
+ \gdef\pst@code{}}%
+ \def\@multips(##1)(##2)##3##4{\pst@misplaced\multips}%
+ \def\nc@object##1##2##3##4{\pst@misplaced{node connection}}%
+ \hbox to\z@{#2}%
+ \endgroup%
+ \def\endpsclip{%
+ \end@psclip%
+ \endgroup}%
+ \ignorespaces}
+%
+\def\endpsclip{\pst@misplaced\endpsclip}
+\let\begin@psclip\relax
+\def\end@psclip{\pstVerb{currentpoint initclip moveto}}
+%
+\def\AltClipMode{%
+ \def\end@psclip{\pstVerb{\pst@grestore}}%
+ \def\begin@psclip{\pstVerb{gsave}}}
+ \def\clipbox{\@ifnextchar[{\clipbox@}{\clipbox@[\z@]}}
+% DG modification begin - Apr. 3, 1997
+% From paulus@immd5.informatik.uni-erlangen.de (Dietrich Paulus)
+%\def\clipbox@[#1]{\pst@makebox\clipbox@@{#1}}
+\def\clipbox@[#1]{\pst@makebox{\clipbox@@{#1}}}
+% DG modification end
+\def\clipbox@@#1{%
+ \pssetlength\pst@dimg{#1}%
+ \leavevmode\hbox{%
+ \begin@psclip%
+ \pst@Verb{
+ CM \tx@STV CP T newpath
+ /a \pst@number\pst@dimg def
+ /w \pst@number{\wd\pst@hbox}a add def
+ /d \pst@number{\dp\pst@hbox}a add neg def
+ /h \pst@number{\ht\pst@hbox}a add def
+ a neg d moveto
+ a neg h L
+ w h L
+ w d L
+ closepath
+ \pst@clipcommand
+ newpath
+ 0 0 moveto
+ setmatrix}%
+ \unhbox\pst@hbox%
+ \end@psclip}}
+%
+\def\psshadowbox{\def\pst@par{}\pst@object{psshadowbox}}
+\def\psshadowbox@i{\pst@makebox\psshadowbox@ii}
+\def\psshadowbox@ii{%
+\begingroup
+\pst@useboxpar
+\psshadowtrue
+\psboxseptrue
+\def\psk@shadowangle{-45 }%
+\setbox\pst@hbox=\hbox{\psframebox@ii}%
+\pst@dimh=\psk@shadowsize\p@
+\pst@dimh=.7071\pst@dimh
+\pst@dimg=\dp\pst@hbox
+\advance\pst@dimg\pst@dimh
+\dp\pst@hbox=\pst@dimg
+\pst@dimg=\wd\pst@hbox
+\advance\pst@dimg\pst@dimh
+\wd\pst@hbox=\pst@dimg
+\leavevmode
+\box\pst@hbox
+\endgroup}
+%
+\def\pscirclebox{\pst@object{pscirclebox}}
+\def\pscirclebox@i{\pst@makebox\pscirclebox@ii}
+\def\pscirclebox@ii{%
+ \begingroup
+ \pst@useboxpar
+ \setbox\pst@hbox=\hbox{%
+ \pst@nodehook
+ \pscirclebox@iii
+ \box\pst@hbox}%
+ \ifpsboxsep\pscirclebox@sep\fi
+ \leavevmode
+ \box\pst@hbox
+ \endgroup
+ \ignorespaces
+}
+\def\pscirclebox@iii{%
+\if@star
+ \pslinewidth\z@
+ \pstverb{\pst@dict \tx@STP \pst@usecolor\psfillcolor
+ newpath \pscirclebox@iv \tx@SD end}%
+\else
+ \begin@ClosedObj
+ \def\pst@linetype{4}\showpointsfalse
+ \addto@pscode{ \pscirclebox@iv\space CLW 2 div add 0 360 arc closepath}%
+ \end@ClosedObj
+\fi
+}
+%
+\def\pscirclebox@iv{
+ \pst@number{\wd\pst@hbox} 2 div
+ \pst@number{\ht\pst@hbox} \pst@number{\dp\pst@hbox} add 2 div
+ 2 copy \pst@number{\dp\pst@hbox} sub 4 2 roll
+ \tx@Pyth \pst@number\psframesep add }
+%
+\def\pscirclebox@sep{%
+ \pst@dimn=\ht\pst@hbox% % the height of the box
+ \advance\pst@dimn by \dp\pst@hbox% % the depth of the box added to \pst@dimn
+ \divide\pst@dimn by 2% % \pst@dimn/2
+ \pst@dimm=0.5\wd\pst@hbox% % the half of the width
+ \pst@Pyth\pst@dimm\pst@dimn\pst@dimo% % the diameter
+ \advance\pst@dimo by \pslinewidth%
+ \advance\pst@dimo by \psframesep%
+ \advance\pst@dimn by -\pst@dimo%
+ \setbox\pst@hbox=\hbox to 2\pst@dimo{\hss\vbox{\kern-\pst@dimn\box\pst@hbox}\hss}%
+ \advance\pst@dimn by -\dp\pst@hbox%
+ \dp\pst@hbox=-\pst@dimn}
+%
+\let\pst@nodehook\relax
+%
+\def\psCirclebox{\def\pst@par{}\pst@object{psCirclebox}}
+\def\psCirclebox@i{\pst@makebox\psCirclebox@ii}
+\def\psCirclebox@ii{%
+ \begingroup
+ \pst@useboxpar
+ \pst@dima=\ht\pst@hbox
+ \advance\pst@dima by -\dp\pst@hbox
+ \divide\pst@dima\tw@
+ \pssetlength\pst@dimb\psk@radius
+ \setbox\pst@hbox=\hbox{%
+ \pst@nodehook
+ \pscircle(.5\wd\pst@hbox,\pst@dima){\pst@dimb}%
+ \box\pst@hbox}%
+ \ifpsboxsep \psCirclebox@sep \fi
+ \leavevmode
+ \box\pst@hbox
+ \endgroup
+}
+%
+\def\psCirclebox@sep{%
+ \pst@dimc=\pst@dimb
+ \advance\pst@dimb-\pst@dima
+ \advance\pst@dima\pst@dimc
+ \setbox\pst@hbox=\hbox to\tw@\pst@dimc{%
+ \hss\vrule width \z@ depth \pst@dimb height \pst@dima
+ \box\pst@hbox\hss}}
+%
+\def\psovalbox{\def\pst@par{}\pst@object{psovalbox}}
+\def\psovalbox@i{\pst@makebox{\psovalbox@ii}}
+\def\psovalbox@ii{%
+ \begingroup
+ \pst@useboxpar
+ \psovalbox@iii
+ \ifpsboxsep\psovalbox@sep\fi
+ \leavevmode
+ \box\pst@hbox
+ \endgroup}
+%
+\def\psovalbox@iii{%
+ \psovalbox@iv
+ \setbox\pst@hbox=\hbox{%
+ \begin@ClosedObj
+ \addto@pscode{%
+ 0 360
+ \pst@number\pst@dimc CLW 2 div sub
+ \pst@number\pst@dimd CLW 2 div sub
+ \pst@number\pst@dima
+ \pst@number\pst@dimb
+ \tx@Ellipse
+ closepath }%
+ \def\pst@linetype{2}%
+ \end@ClosedObj
+ \unhbox\pst@hbox}}
+%
+\def\psovalbox@iv{%
+ \pst@dimc=\pslinewidth\advance\pst@dimc\psframesep
+ \pst@dimd=\ht\pst@hbox\advance\pst@dimd\dp\pst@hbox
+ \pst@dima=.5\wd\pst@hbox
+ \pst@dimb=.5\pst@dimd\advance\pst@dimb-\dp\pst@hbox
+ \pst@dimd=.707\pst@dimd
+ \advance\pst@dimd\pst@dimc
+ \advance\pst@dimc.707\wd\pst@hbox}
+%
+\def\psovalbox@sep{%
+ \setbox\pst@hbox\hbox to 2\pst@dimc{\hss\unhbox\pst@hbox\hss}%
+ \pst@dimg=\pst@dimd
+ \advance\pst@dimg-\pst@dimb
+ \dp\pst@hbox=\pst@dimg
+ \advance\pst@dimd\pst@dimb
+ \ht\pst@hbox=\pst@dimd}
+%
+\def\psdiabox{\def\pst@par{}\pst@object{psdiabox}}
+\def\psdiabox@i{\pst@makebox{\psdiabox@ii}}
+\def\psdiabox@ii{%
+\begingroup
+\pst@useboxpar
+\psdiabox@iii
+\ifpsboxsep\psdiabox@sep\fi
+\leavevmode
+\box\pst@hbox
+\endgroup}
+\def\psdiabox@iv{%
+\pst@dimg=.707\pslinewidth
+\advance\pst@dimg.707\psframesep
+\pst@dima=\wd\pst@hbox
+\divide\pst@dima 2
+\pst@dimc=\pst@dima
+\advance\pst@dimc\pst@dimg
+\pst@dimd=\ht\pst@hbox
+\advance\pst@dimd\dp\pst@hbox
+\divide\pst@dimd 2
+\pst@dimb=\pst@dimd
+\advance\pst@dimb-\dp\pst@hbox
+\advance\pst@dimd\pst@dimg}
+\def\psdiabox@iii{%
+\psdiabox@iv
+\setbox\pst@hbox=\hbox{%
+\begin@ClosedObj
+\addto@pscode{%
+\psline@iii
+pop
+.5
+\pst@number\pst@dimc 2 mul \pst@number\pst@dimd 2 mul
+0
+\pst@number\pst@dima \pst@number\pst@dimb
+\tx@Diamond}%
+\def\pst@linetype{4}%
+\end@ClosedObj
+\box\pst@hbox}}
+\def\psdiabox@sep{%
+\setbox\pst@hbox\hbox to 4\pst@dimc{\hss\unhbox\pst@hbox\hss}%
+\multiply\pst@dimd 2
+\advance\pst@dimd\pst@dimb
+\ht\pst@hbox\pst@dimd
+\advance\pst@dimd-2\pst@dimb
+\dp\pst@hbox\pst@dimd}
+%
+\define@key[psset]{pstricks}{trimode}[U]{\pst@expandafter\psset@@trimode{#1}\@empty\@empty\@nil}
+\def\psset@@trimode#1#2#3\@nil{%
+ \let\pst@tempg#1\relax
+ \ifx\pst@tempg*
+ \let\psk@@trimode\@empty
+ \let\pst@tempg#2\relax
+ \else
+ \let\psk@@trimode\relax
+ \fi
+ \edef\psk@trimode{%
+ \ifx R\pst@tempg 1 % Right
+ \else
+ \ifx D\pst@tempg 2 % Down
+ \else
+ \ifx L\pst@tempg 3 % Left
+ \else
+ \ifx l\pst@tempg 4 % |_
+ \else
+ \ifx r\pst@tempg 5 % _|
+ \else 0 \fi % Up
+ \fi
+ \fi
+ \fi
+ \fi}%
+}
+\psset[pstricks]{trimode=U}
+%
+\def\pstribox{\pst@object{pstribox}}
+\def\pstribox@i{\pst@makebox{\pstribox@ii}}
+\def\pstribox@ii{%
+ \begingroup
+ \pst@useboxpar
+ \pstribox@iii
+ \ifpsboxsep\pstribox@sep\fi
+ \leavevmode
+ \box\pst@hbox
+ \endgroup}
+%
+\def\pstribox@iii{%
+ \pstribox@iv
+ \setbox\pst@hbox=\hbox{%
+ \begin@ClosedObj
+ \addto@pscode{
+ \psline@iii
+ pop
+ 0.5
+ \pst@number\pst@dimc % Width
+ \pst@number\pst@dimd % Height
+ \ifcase\psk@trimode
+ \or %% 0
+ exch \or %% 1
+ \or %% 2
+ exch \or %% 3
+ \or %% 4
+ \or %% 5
+ \fi
+ \psk@trimode -90 mul
+ \pst@number\pst@dima % x coor for text
+ \pst@number\pst@dimb % y coor for text
+ \tx@Triangle}%
+ \def\pst@linetype{2}%
+ \end@ClosedObj
+ \box\pst@hbox}%
+}
+%
+\def\pstribox@iv{%
+ \pst@dimh=\pslinewidth
+ \advance\pst@dimh\psframesep
+ \pst@dimg=\ht\pst@hbox
+ \advance\pst@dimg-\dp\pst@hbox % totalheight
+ \divide\pst@dimg 2 % 0.5 totalheight
+ \edef\pst@tempa{\number\pst@dimg sp}% % For use by nodes.
+ \ifodd\psk@trimode %
+ \pst@dimb\pst@dimg
+ \else
+ \pst@dima=\wd\pst@hbox
+ \divide\pst@dima 2
+ \fi
+ \ifcase\psk@trimode
+ \pst@dimb=-\dp\pst@hbox
+ \advance\pst@dimb-\pst@dimh
+ \or\pst@dima=-\pst@dimh
+ \or\pst@dimb=\ht\pst@hbox
+ \advance\pst@dimb\pst@dimh
+ \or\pst@dima=\wd\pst@hbox
+ \advance\pst@dima\pst@dimh
+ \fi
+ \pst@dimd=\dp\pst@hbox
+ \advance\pst@dimd\ht\pst@hbox
+ \ifx\psk@@trimode\relax% no star for trimode=
+ \pst@dimc=\wd\pst@hbox
+ \advance\pst@dimc\ifodd\psk@trimode 1.447\else 1.789\fi\pst@dimh
+ \multiply\pst@dimc 2
+ \advance\pst@dimd\ifodd\psk@trimode 1.789\else 1.447\fi\pst@dimh
+ \multiply\pst@dimd 2
+ \else% trimode=R*,L*,U*,D*
+ \ifodd\psk@trimode
+ \advance\pst@dimd 1.1547\wd\pst@hbox
+ \advance\pst@dimd 3.4641\pst@dimh
+ \pst@dimc=.866\pst@dimd
+ \else
+ \advance\pst@dimd .866\wd\pst@hbox %.866=(sqrt(3)/2)
+ \advance\pst@dimd 3\pst@dimh
+ \pst@dimc=1.1547\pst@dimd % 1.1547=(2/sqrt(3))
+ \fi
+ \fi}
+%
+\def\pstribox@sep{%
+\ifodd\psk@trimode
+\advance\pst@dimb.5\pst@dimd
+\ht\pst@hbox=\pst@dimb
+\advance\pst@dimd-\pst@dimb
+\dp\pst@hbox=\pst@dimd
+\else
+\setbox\pst@hbox\hbox to \pst@dimc{\hss\unhbox\pst@hbox\hss}%
+\global\pst@dimg=.5\pst@dimc
+\fi
+\ifcase\psk@trimode
+\dp\pst@hbox-\pst@dimb
+\advance\pst@dimd\pst@dimb
+\ht\pst@hbox\pst@dimd
+\or
+\pst@dimg=.5\wd\pst@hbox
+\global\advance\pst@dimg-\pst@dima
+\setbox\pst@hbox\hbox to \pst@dimc{\kern-\pst@dima\box\pst@hbox\hss}%
+\or
+\ht\pst@hbox\pst@dimb
+\advance\pst@dimd-\pst@dimb
+\dp\pst@hbox\pst@dimd
+\or
+\pst@dimg=\pst@dimc
+\advance\pst@dimg-\pst@dima
+\global\advance\pst@dimg.5\wd\pst@hbox
+\setbox\pst@hbox\hbox to \pst@dimc{%
+\hss\box\pst@hbox\kern\psframesep\kern\pslinewidth}%
+\fi}
+%
+\define@key[psset]{pstricks}{arcsepA}[0]{\pst@getlength{#1}\psk@arcsepA}
+\define@key[psset]{pstricks}{arcsepB}[0]{\pst@getlength{#1}\psk@arcsepB}
+\define@key[psset]{pstricks}{arcsep}[0]{%
+ \pst@getlength{#1}\psk@arcsepA\let\psk@arcsepB\psk@arcsepA}
+\psset[pstricks]{arcsep=0}
+\def\tx@ArcArrow{ArcArrow }
+%
+\def\psarc{\pst@object{psarc}}
+\def\psarc@i{\@ifnextchar({\psarc@iii}{\psarc@ii}}
+\def\psarc@ii#1{\addto@par{arrows=#1}\@ifnextchar(\psarc@iii{\psarc@iii(0,0)}}
+\def\psarc@iii(#1)#2#3#4{%
+ \pst@getangle{#3}\pst@tempa
+ \pst@getangle{#4}\pst@tempb
+ \ifx\pst@tempa\pst@tempb
+ \else
+ \begin@OpenObj
+ \pst@@getcoor{#1}%
+ \pssetlength\pst@dima{#2}%
+ \addto@pscode{\psarc@iv \psarc@v
+ \ifPst@variableLW \pst@flattenpath \fi
+ }%
+ \gdef\psarc@type{0}%
+ \showpointsfalse
+ \end@OpenObj
+ \fi
+}
+%
+\def\psarcOA{\pst@object{psarcOA}}% \psarcOA[..](O)(A){angle1}{angle2}
+\def\psarcOA@i{\@ifnextchar({\psarcOA@iii}{\psarcOA@ii}}
+\def\psarcOA@ii#1{\addto@par{arrows=#1}\@ifnextchar(\psarcOA@iii{\psarcOA@iii(0,0)}}
+\def\psarcOA@iii(#1)(#2)#3#4{%
+ \pst@getangle{#3}\pst@tempa
+ \pst@getangle{#4}\pst@tempb
+ \ifx\pst@tempa\pst@tempb
+ \else
+ \begin@OpenObj
+ \pst@getcoor{#1}\pst@tempA
+ \pst@getcoor{#2}\pst@tempB
+ \addto@pscode{
+ \pst@tempA 2 copy /y ED /x ED \pst@tempB Pyth2 /r ED
+ x y translate
+ /c 57.2957 r \tx@Div def
+ /angleA
+ \pst@tempa
+ \psk@arcsepA c mul 2 div
+ \ifcase\psarc@type add \or sub \fi def
+ /angleB
+ \pst@tempb
+ \psk@arcsepB c mul 2 div
+ \ifcase\psarc@type sub \or add \fi def
+ \ifshowpoints\psarc@showpoints\fi
+ \ifx\psk@arrowA\@empty
+ \ifnum\psk@liftpen=2
+ r angleA \tx@PtoC moveto
+ \fi
+ \fi
+ /angleAtoB angleB angleA gt { true }{ false } ifelse def
+ 0 0 r
+ angleA
+ \ifx\psk@arrowA\@empty\else
+ { ArrowA CP }
+ r 0 gt \pslbrace
+ { \ifcase\psarc@type add \or sub \fi } \psrbrace\pslbrace
+ { \ifcase\psarc@type sub \or add \fi } \psrbrace ifelse
+% { \ifcase\psarc@type add \or sub \fi }
+ \tx@ArcArrow
+% dup AngleA gt AngleAtoB exor { neg } fi
+ \fi
+ angleB
+ \ifx\psk@arrowB\@empty\else
+ { ArrowB }
+ r 0 gt \pslbrace
+ { \ifcase\psarc@type sub \or add \fi } \psrbrace\pslbrace
+ { \ifcase\psarc@type add \or sub \fi } \psrbrace ifelse
+% { \ifcase\psarc@type sub \or add \fi }
+ \tx@ArcArrow
+ dup angleA gt angleAtoB xor { pop angleA } if
+ \fi
+ \ifcase\psarc@type arc \or arcn \fi
+ \ifPst@variableLW \pst@flattenpath \fi
+ x neg y neg translate
+ }%
+ \gdef\psarc@type{0}%
+ \showpointsfalse
+ \end@OpenObj
+ \fi
+}
+\def\psarc@iv{%
+ \pst@coor /y ED /x ED
+ /r \ifPst@SpecialLength \pst@SpecialLength \else \pst@number\pst@dima \fi def
+ /c 57.2957 r \tx@Div def
+ /angleA
+ \pst@tempa
+ \psk@arcsepA c mul 2 div
+ \ifcase\psarc@type add \or sub \fi
+ def
+ /angleB
+ \pst@tempb
+ \psk@arcsepB c mul 2 div
+ \ifcase\psarc@type sub \or add \fi
+ def
+ \ifshowpoints\psarc@showpoints\fi
+ \ifx\psk@arrowA\@empty
+ \ifnum\psk@liftpen=2
+ r angleA \tx@PtoC
+ y add exch x add exch moveto
+ \fi
+ \fi}
+% hv ---- 1.10 2005-05-05 ----------------------> hv begin
+\def\psarc@v{%
+ /angleAtoB angleB angleA gt { true }{ false } ifelse def
+ x y r
+ angleA
+ \ifx\psk@arrowA\@empty\else
+ { ArrowA CP }
+ r 0 gt \pslbrace
+ { \ifcase\psarc@type add \or sub \fi } \psrbrace\pslbrace
+ { \ifcase\psarc@type sub \or add \fi } \psrbrace ifelse
+% { \ifcase\psarc@type add \or sub \fi }
+ \tx@ArcArrow
+% dup AngleA gt AngleAtoB exor { neg } fi
+ \fi
+ angleB
+ \ifx\psk@arrowB\@empty\else
+ { ArrowB }
+ r 0 gt \pslbrace
+ { \ifcase\psarc@type sub \or add \fi } \psrbrace\pslbrace
+ { \ifcase\psarc@type add \or sub \fi } \psrbrace ifelse
+% { \ifcase\psarc@type sub \or add \fi }
+ \tx@ArcArrow
+ dup angleA gt angleAtoB xor { pop angleA } if
+ \fi
+ \ifcase\psarc@type arc \or arcn \fi
+}
+% hv ----- 1.10 2005-05-05 ------------------------> end
+%
+\def\psarc@type{0}
+\def\psarc@showpoints{%
+ gsave
+ newpath
+ x y moveto
+ x y r \pst@tempa \pst@tempb
+ \ifcase\psarc@type arc \or arcn \fi
+ closepath
+ CLW 2 div SLW
+ [ \psk@dash\space ] 0 setdash stroke
+ grestore }
+\def\psarcn{\def\pst@par{}\pst@object{psarcn}}
+\def\psarcn@i{\def\psarc@type{1}\psarc@i}
+%
+\def\psarcAB{\pst@object{psarcAB}}% hv 2008-11-26
+\def\psarcAB@i{%
+ \addbefore@par{psscale=1}% be sure, that it is defined
+ \pst@getarrows{%
+ \begin@OpenObj%
+ \pst@getcoors{}%
+ \psarcAB@ii
+ }%
+}
+\def\psarcAB@ii{%
+ \addto@pscode{
+ /y ED /x ED /yA ED /xA ED /yB ED /xB ED
+ /r xB yB x y Pyth2 \psk@psscale\space mul def
+ /c 57.2957 r \tx@Div def
+ /angleA
+ yA y sub xA x sub atan
+ \psk@arcsepA c mul 2 div
+ \ifcase\psarc@type add \else sub \fi
+ def
+ /angleB
+ yB y sub xB x sub atan
+ \psk@arcsepB c mul 2 div
+ \ifcase\psarc@type sub \else add \fi
+ def
+ \ifx\psk@arrowA\@empty
+ \ifnum\psk@liftpen=2
+ r angleA \tx@PtoC
+ y add exch x add exch moveto
+ \fi
+ \fi
+ \psarc@v}%
+ \gdef\psarc@type{0}%
+ \showpointsfalse%
+ \end@OpenObj%
+}
+\def\psarcnAB{\def\pst@par{}\pst@object{psarcnAB}}
+\def\psarcnAB@i{\def\psarc@type{1}\psarcAB@i}
+%
+%------------------ tvz/DG/hv (2004-05-10) begin -------------------%%
+% from Denis Giroux: http://www.tug.org/pipermail/pstricks/2001/000507.html
+%
+% I - Definition of \psellipticwedge, a generalization of \pswedge for wedges
+% of ellipses (from the code of \pswedge and \psellipse)
+%
+\def\psellipticwedge{\pst@object{psellipticwedge}}
+\def\psellipticwedge@i(#1){%
+ \@ifnextchar({\psellipticwedge@ii(#1)}{\psellipticwedge@ii(0,0)(#1)}}
+\def\psellipticwedge@ii(#1)(#2)#3#4{%
+ \begin@ClosedObj
+ \pst@getangle{#3}\pst@tempa
+ \pst@getangle{#4}\pst@tempb
+ \pst@getcoor{#1}\pst@tempc
+ \pst@@getcoor{#2}%
+ \def\pst@linetype{1}%
+ \addto@pscode{%
+ \pst@coor /ry ED /rx ED
+ \ifx\psk@rot\@empty \else \psk@rot\space rotate \fi
+ \pst@tempa
+ \ifPst@correctAngle
+ cvi 90 mod 0 eq { \pst@tempa }
+ { rx abs ry abs sub cvi 0 eq { \pst@tempa }{ rx ry
+ \tx@UserCoor exch \pst@tempa tan mul exch atan
+ \pst@tempa 180 div 0.5 add floor
+ 180 mul sub } ifelse } ifelse
+ \fi
+ \pst@tempb
+ \ifPst@correctAngle
+ cvi 90 mod 0 eq { \pst@tempb }
+ { rx abs ry abs sub cvi 0 eq { \pst@tempb }{ rx ry
+ \tx@UserCoor exch \pst@tempb tan mul exch atan
+ \pst@tempb 180 div 0.5 add floor
+ 180 mul sub } ifelse } ifelse
+ \fi
+ rx ry
+ \pst@tempc moveto
+ \ifdim\psk@dimen\p@=\z@\else
+ \psk@dimen CLW mul dup 3 1 roll
+ sub 3 1 roll sub exch
+ \fi
+ \pst@tempc
+ \tx@Ellipse
+ closepath
+ }%
+ \showpointsfalse
+ \end@ClosedObj%
+}
+%
+% Code mainly from "pstricks.tex'' 0.94 beta (TvZ)
+%
+\def\psellipticarcn{\pst@object{psellipticarcn}}
+\def\psellipticarcn@i{\let\if@psarcn\iftrue\psellipticarc@ii}
+%
+\def\psellipticarc{\pst@object{psellipticarc}}
+\def\psellipticarc@i{\let\if@psarcn\iffalse\psellipticarc@ii}
+
+\define@boolkey[psset]{pstricks}[Pst@]{correctAngle}[true]{}
+\psset{correctAngle}
+
+\let\if@psarcn\iffalse
+
+\def\psellipticarc@ii{\pst@getarrows\psellipticarc@iii}
+\def\psellipticarc@iii(#1){%
+ \@ifnextchar({\psellipticarc@iv(#1)}{\psellipticarc@iv(0,0)(#1)}}
+\def\psellipticarc@iv(#1)(#2)#3#4{%
+% \addbefore@par{correctAngle=false}
+ \pst@getangle{#3}\pst@tempc % start angle
+ \pst@getangle{#4}\pst@tempd % end angle
+ \ifx\pst@tempc\pst@tempd
+ \else % same angles? then do nothing
+ \begin@OpenObj
+ \pst@getcoor{#1}\pst@tempa % origin
+ \pst@getcoor{#2}\pst@tempb % a b
+ \addto@pscode{
+ \psellipticarc@definearg \psellipticarc@draw
+ \ifPst@variableLW \pst@flattenpath \fi
+ \ifshowpoints{}
+ gsave
+ xOrig yOrig T % set origin to ellipse origin
+ \ifx\psk@rot\@empty \else \psk@rot\space rotate \fi
+ rx ry scale % now we draw a circle :-)
+ 1 \pst@tempc % start angle
+ \ifPst@correctAngle
+ cvi 90 mod 0 eq { \pst@tempc }
+ { rx abs ry abs sub cvi 0 eq { \pst@tempc }{ rx ry
+ \tx@UserCoor exch \pst@tempc tan mul exch atan
+ \pst@tempc 180 div 0.5 add floor
+ 180 mul sub } ifelse } ifelse
+ \fi
+ PtoC moveto
+ 0 0 lineto
+ 1 \pst@tempd % end angle
+ \ifPst@correctAngle
+ cvi 90 mod 0 eq { \pst@tempd }
+ { rx ry \tx@UserCoor exch \pst@tempd tan mul exch atan
+ \pst@tempd 180 div .5 add floor 180 mul sub } ifelse
+ \fi
+ PtoC lineto 0 0 lineto
+ closepath
+ % \ifcase\psarc@type arc \or arcn \fi
+ CLW 3 div \pst@number\psunit div SLW
+ [ 1 1 \tx@UserCoor 2 mul ] 0 setdash
+ stroke
+ grestore
+ \fi
+ }%
+ \showpointsfalse
+ \end@OpenObj
+ \fi
+}
+\def\psellipticarc@definearg{%
+% \ifx\psk@rot\@empty \else \psk@rot\space rotate \fi
+ \pst@tempa /yOrig ED /xOrig ED % Origin
+ \pst@tempb % radii. Now adjust:
+ \ifdim\psk@dimen\p@=\z@\else
+ \psk@dimen CLW mul dup 3 1 roll
+ sub 3 1 roll sub exch
+ \fi
+ /ry ED /rx ED % a b
+ /angleA
+ /d { \if@psarcn sub \else add \fi } def
+% \pst@tempc
+% the angle in the parameter equation is not proportional to the real angle!
+% phi=atan(b*tan(angle)/a)+floor(angle/180+0.5)*180
+ \pst@tempc
+ \ifPst@correctAngle
+ cvi 90 mod 0 eq { \pst@tempc }
+ { rx ry \tx@UserCoor exch \pst@tempc tan mul exch atan
+ \pst@tempc 180 div .5 add floor 180 mul sub } ifelse
+ \fi
+ \psk@arcsepA 2 div
+ ArcAdjust
+ def
+ /angleB
+ /d { \if@psarcn add \else sub \fi } def
+% \pst@tempd
+ \pst@tempd
+ \ifPst@correctAngle
+ cvi 90 mod 0 eq { \pst@tempd }
+ { rx ry \tx@UserCoor exch \pst@tempd tan mul exch atan
+ \pst@tempd 180 div .5 add floor 180 mul sub } ifelse
+ \fi
+ \psk@arcsepB 2 div ArcAdjust def
+% \ifshowpoints\psellipticarc@showpoints\fi
+ \ifx\psk@arrowA\@empty
+ \ifnum\psk@liftpen=2
+ angleA cos rx mul xOrig add
+ angleA sin ry mul yOrig add
+ moveto
+ \fi%
+ \fi%
+}
+\def\psellipticarc@draw{%
+ 0 0 1
+ angleA
+ \ifx\psk@arrowA\@empty\else
+ { ArrowA CP }
+ { \if@psarcn sub \else add \fi }
+ EllipticArcArrow
+ \fi
+ angleB
+ \ifx\psk@arrowB\@empty\else
+ { ArrowB }
+ { \if@psarcn add \else sub \fi }
+ EllipticArcArrow
+ \fi
+ /mtrx CM def
+ xOrig yOrig T
+ \ifx\psk@rot\@empty \else \psk@rot\space rotate \fi
+ rx ry scale
+ \pst@ifcustom\else
+ 0 0 moveto
+ exch dup dup % end start start start
+ cos exch sin moveto % end start
+ exch % start end
+ \fi
+%% \if@star 0 0 moveto \fi % for filling
+ \if@psarcn arcn \else arc \fi
+%% \if@star 0 0 moveto \fi
+ mtrx setmatrix%
+}
+\def\psellipticarc@showpoints{%
+ gsave
+ /mtrx CM def
+ xOrig yOrig T
+ rx ry scale
+ 0 0 moveto
+ 0 0 1
+ \pst@tempc % start angle
+ \ifPst@correctAngle
+ cvi 90 mod 0 eq { \pst@tempc }
+ { rx abs ry abs sub cvi 0 eq { \pst@tempc }{ rx ry
+ \tx@UserCoor exch \pst@tempc tan mul exch atan
+ \pst@tempc 180 div 0.5 add floor
+ 180 mul sub } ifelse } ifelse
+ \fi
+ \pst@tempd % end angle
+ \ifPst@correctAngle
+ cvi 90 mod 0 eq { \pst@tempd }
+ { rx abs ry abs sub cvi 0 eq { \pst@tempd } { rx ry
+ \tx@UserCoor exch \pst@tempd tan mul exch atan
+ \pst@tempd 180 div 0.5 add floor
+ 180 mul sub } ifelse } ifelse
+ \fi
+ \ifcase\psarc@type arc \or arcn \fi
+ closepath
+ mtrx setmatrix
+ CLW 2 div SLW
+ [ \psk@dash\space ] 0 setdash
+ stroke
+ grestore %
+}
+\def\pscircle{\def\pst@par{}\pst@object{pscircle}}
+\def\pscircle@i{\@ifnextchar({\pscircle@do}{\pscircle@do(0,0)}}
+\def\pscircle@do(#1)#2{%
+ \if@star{\use@par\qdisk(#1){#2}}% qdisk does not allow
+ \else% to use opacity option
+ \addbefore@par{dimen=middle}%
+ \begin@ClosedObj
+ \pst@@getcoor{#1}%
+ \pssetlength\pst@dimc{#2}%
+ \def\pst@linetype{4}%
+ \addto@pscode{
+ \pst@coor 2 copy moveto
+ \ifPst@SpecialLength \pst@SpecialLength \else \pst@number\pst@dimc \fi
+ \psk@dimen CLW mul round % prevent rounding errors
+ sub
+ dup 0 rmoveto
+ 0 360 arc
+ \ifPst@variableLW \pst@flattenpath \fi
+ closepath
+ }%
+ \showpointsfalse
+ \end@ClosedObj
+ \fi
+ \ignorespaces}
+%
+\def\pscircleOA{\def\pst@par{}\pst@object{pscircleOA}}% hv 2008-04-14
+\def\pscircleOA@i(#1)(#2){%
+ \addbefore@par{dimen=middle}%
+ \begin@ClosedObj
+ \pst@getcoor{#1}\pst@tempA
+ \pst@@getcoor{#2}%
+ \def\pst@linetype{4}%
+ \addto@pscode{
+ \pst@tempA % x0 y0
+ 2 copy % xO yO xO yO
+ \pst@coor % xO yO xO yO xA yA
+ Pyth2 % xO yO radius
+ \psk@dimen CLW mul sub
+ \if@star \tx@SD \else
+ 0 360 arc
+ closepath
+ \fi }%
+ \showpointsfalse
+ \end@ClosedObj
+ \ignorespaces}
+%
+\def\qdisk(#1)#2{%
+ \def\pst@par{}%
+ \begin@SpecialObj
+ \pst@@getcoor{#1}%
+ \pssetlength\pst@dimg{#2}%
+ \addto@pscode{
+ \pst@coor
+ \ifPst@SpecialLength \pst@SpecialLength \else \pst@number\pst@dimg \fi
+% \pst@number\pst@dimg
+ \tx@SD }%
+ \end@SpecialObj}
+%
+\define@key[psset]{pstricks}{radius}[0.25cm]{\pst@@getlength{#1}\psk@radius}
+\psset[pstricks]{radius=.25cm}
+%
+\def\psCircle{\pst@object{psCircle}}% same as \pscircle, but uses \psk@radius
+\def\psCircle@i{\@ifnextchar({\psCircle@ii}{\psCircle@ii(0,0)}}
+\def\psCircle@ii(#1){\pscircle@do(#1){\psk@radius}}
+%
+\def\psRing{\def\pst@par{}\pst@object{psRing}}%% hv 20130405
+\def\psRing@i{\@ifnextchar({\psRing@ii}{\psRing@ii(0,0)}}
+\def\psRing@ii(#1){%
+ \pst@@getcoor{#1}%
+ \@ifnextchar[{\psRing@iii}{\psRing@iii[0,360]}}
+\def\psRing@iii[#1,#2]#3#4{% origin, inner radius, outer radius
+ \begin@ClosedObj
+ \pssetlength\pst@dimc{#3}%
+ \edef\pst@tempA{\ifPst@SpecialLength \pst@SpecialLength \else \pst@number\pst@dimc \fi}%
+ \pssetlength\pst@dimd{#4}%
+ \edef\pst@tempB{\ifPst@SpecialLength \pst@SpecialLength \else \pst@number\pst@dimd \fi}%
+ \pst@getangle{#1}\pst@tempa
+ \pst@getangle{#2}\pst@tempb
+ \def\pst@linetype{4}%
+ \addto@pscode{
+ \pst@coor translate
+% \pst@number\pst@dimc \psk@dimen CLW mul sub /InnerRadius ED
+% \pst@number\pst@dimd \psk@dimen CLW mul sub /OuterRadius ED
+ \pst@tempA\space \psk@dimen CLW mul sub /InnerRadius ED
+ \pst@tempB\space \psk@dimen CLW mul sub /OuterRadius ED
+ InnerRadius 0 moveto newpath
+ 0 0 InnerRadius \pst@tempa\space \pst@tempb\space arc
+ OuterRadius \pst@tempb\space PtoC
+ \pst@tempb\space \pst@tempa\space sub abs 360 eq { moveto }{ lineto } ifelse % whole circle or not??
+ 0 0 OuterRadius \pst@tempb\space \pst@tempa\space arcn
+ closepath
+ }%
+ \showpointsfalse
+ \end@ClosedObj
+ \ignorespaces}
+%
+\def\pswedge{\def\pst@par{}\pst@object{pswedge}}
+\def\pswedge@i{\@ifnextchar({\pswedge@ii}{\pswedge@ii(0,0)}}
+\def\pswedge@ii(#1)#2#3#4{%
+ \begin@ClosedObj
+ \pssetlength\pst@dimc{#2}%
+ \pst@getangle{#3}\pst@tempa
+ \pst@getangle{#4}\pst@tempb
+ \pst@@getcoor{#1}%
+ \def\pst@linetype{1}%
+ \addto@pscode{
+ \ifx\psk@rot\@empty 0 \else \psk@rot \fi rotate
+ \pst@coor
+ 2 copy
+ moveto
+ \ifPst@SpecialLength \pst@SpecialLength \else \pst@number\pst@dimc \fi
+ \psk@dimen CLW mul sub % Adjusted radius
+ \pst@tempa \pst@tempb
+ arc
+ closepath}%
+ \showpointsfalse
+ \end@ClosedObj
+}
+\def\tx@ellipse#1{ \ifx\psk@rot\@empty 0 \else \psk@rot \fi #1 Ellipse }
+\def\tx@Ellipse{ \ifx\psk@rot\@empty 0 \else \psk@rot \fi Ellipse }
+%
+\def\psellipse{\def\pst@par{}\pst@object{psellipse}}
+\def\psellipse@i(#1){\@ifnextchar({\psellipse@ii(#1)}{\psellipse@ii(0,0)(#1)}}
+\def\psellipse@ii(#1)(#2){%
+ \begin@ClosedObj
+ \pst@getcoor{#1}\pst@tempa
+ \pst@@getcoor{#2}%
+ \addto@pscode{
+ 0 360
+ \pst@coor
+ \ifdim\psk@dimen\p@=\z@\else
+ \psk@dimen CLW mul
+ dup 4 -1 roll sub neg 3 1 roll sub
+ \fi
+ \pst@tempa
+ \tx@ellipse{true}
+ \ifPst@variableLW \pst@flattenpath \fi
+ closepath
+ }%
+ \def\pst@linetype{2}%
+ \end@ClosedObj%
+}
+\def\psellipseAB{\def\pst@par{}\pst@object{psellipseAB}}
+\def\psellipseAB@i(#1)(#2)#3{%
+ \begin@ClosedObj
+ \pst@getcoor{#1}\pst@tempa
+ \pst@getcoor{#2}\pst@tempb
+ \addto@pscode{
+ 0 360
+ #3 \pst@number\psxunit mul
+ \pst@tempa /yA ED /xA ED
+ \pst@tempb /yB ED /xB ED
+ xA xB sub dup mul
+ yA yB sub dup mul add sqrt 2 div
+ \ifdim\psk@dimen\p@=\z@\else
+ \psk@dimen CLW mul
+ dup 4 -1 roll sub neg 3 1 roll sub
+ \fi
+ xA xB add 2 div yA yB add 2 div
+ translate 0 0
+ xB xA sub yA yB sub atan
+ Ellipse % on stack is rotate coordinates
+ \ifPst@variableLW \pst@flattenpath \fi
+ closepath
+ }%
+ \def\pst@linetype{2}%
+ \end@ClosedObj
+}
+\def\multips{\@ifnextchar({\def\pst@par{}\multips@ii}{\multips@i}}
+\def\multips@i#1{\def\pst@par{rot=#1}\multips@ii}
+\def\multips@ii(#1){\@ifnextchar({\multips@iii(#1)}{\multips@iii(\z@,\z@)(#1)}}
+\long\def\multips@iii(#1)(#2)#3#4{%
+ \begingroup
+%----------------- hv 1.10 ------------------
+ \pst@killglue
+%----------------- hv 1.10 ------------------
+ \use@par
+ \pst@getcoor{#1}\pst@tempa
+ \pst@@getcoor{#2}%
+ \pst@cnta=#3\relax
+ \init@pscode
+ \addto@pscode{%
+ \pst@tempa T \the\pst@cnta\space \pslbrace
+ gsave \ifx\psk@rot\@empty\else\psk@rot rotate \fi}%
+ \hbox to\z@{%
+ \def\init@pscode{%
+ \addto@pscode{%
+ gsave
+ \pst@number\pslinewidth SLW
+ \pst@usecolor\pslinecolor}}%
+ \def\use@pscode{\addto@pscode{grestore}}%
+ \def\psclip##1{\pst@misplaced\psclip}%
+ \def\nc@object##1##2##3##4{\pst@misplaced{node connection}}%
+ #4%
+ }%
+ \addto@pscode{grestore \pst@coor T \psrbrace repeat}%
+ \leavevmode
+ \use@pscode
+ \endgroup
+ \ignorespaces}
+\def\psscalebox#1{\pst@makebox{\ps@scalebox{#1}}}
+\def\ps@scalebox#1{%
+ \begingroup%
+ \pst@getscale{#1}\pst@tempa%
+ \let\pst@tempc\pst@tempg%
+ \let\pst@tempd\pst@temph%
+ \ps@@scalebox%
+ \endgroup}
+\def\ps@@scalebox{%
+ \leavevmode%
+ \hbox{%
+ \ifdim\pst@tempd\p@<\z@%
+ \pst@dimg=\pst@tempd\ht\pst@hbox%
+ \pst@dimh=\pst@tempd\dp\pst@hbox%
+ \dp\pst@hbox=-\pst@dimg%
+ \ht\pst@hbox=-\pst@dimh%
+ \else%
+ \ht\pst@hbox=\pst@tempd\ht\pst@hbox%
+ \dp\pst@hbox=\pst@tempd\dp\pst@hbox%
+ \fi%
+ \pst@dima=\pst@tempc\wd\pst@hbox%
+ \ifdim\pst@dima<\z@\kern-\pst@dima\fi%
+ \pst@Verb{CP CP translate \pst@tempa \tx@NET}%
+ \hbox to \z@{\box\pst@hbox\hss}%
+ \pst@Verb{
+ CP CP translate
+ 1 \pst@tempc div 1 \pst@tempd div scale
+ \tx@NET}%
+ \ifdim\pst@dima>\z@\kern\pst@dima\fi%
+ }%
+}
+\pslongbox{Scalebox}{\psscalebox}
+%
+\def\psscaleboxto(#1,#2){\pst@makebox{\ps@scaleboxto(#1,#2)}}
+\def\ps@scaleboxto(#1,#2){%
+ \begingroup
+ \pssetlength\pst@dima{#1}%
+ \pssetlength\pst@dimb{#2}%
+ \ifdim\pst@dima=\z@\else
+ \pst@divide{\pst@dima}{\wd\pst@hbox}\pst@tempc
+ \edef\pst@tempc{\pst@tempc\space}%
+ \fi
+ \ifdim\pst@dimb=\z@
+ \ifdim\pst@dima=\z@
+ \@pstrickserr{%
+ \string\psscaleboxto\space dimensions cannot both be zero}\@ehpa
+ \def\pst@tempa{}%
+ \def\pst@tempc{1 }%
+ \def\pst@tempd{1 }%
+ \else
+ \let\pst@tempd\pst@tempc
+ \fi
+ \else
+ \pst@dimc=\ht\pst@hbox
+ \advance\pst@dimc\dp\pst@hbox
+ \pst@divide{\pst@dimb}{\pst@dimc}\pst@tempd
+ \edef\pst@tempd{\pst@tempd\space}%
+ \ifdim\pst@dima=\z@ \let\pst@tempc\pst@tempd \fi
+ \fi
+ \edef\pst@tempa{\pst@tempc \pst@tempd scale }%
+ \ps@@scalebox
+ \endgroup}
+\pslongbox{Scaleboxto}{\psscaleboxto}
+%
+\def\tx@Rot{Rot }
+\def\psrotateleft{\pst@makebox{\ps@rotateleft\pst@hbox}}
+\def\ps@rotateleft#1{%
+\leavevmode\hbox{\hskip\ht#1\hskip\dp#1\vbox{\vskip\wd#1%
+\pst@Verb{90 \tx@Rot}
+\vbox to \z@{\vss\hbox to \z@{\box#1\hss}\vskip\z@}%
+\pst@Verb{-90 \tx@Rot}}}}
+\def\psrotateright{\pst@makebox{\ps@rotateright\pst@hbox}}
+\def\ps@rotateright#1{%
+% ----------- hv begin 2004-05-07 ----------- patch 15
+% \hbox{%
+ \leavevmode\hbox{%
+% ----------- hv end 2004-05-07 ----------- patch 15
+ \hskip\ht#1\hskip\dp#1\vbox{\vskip\wd#1%
+ \pst@Verb{-90 \tx@Rot}
+ \vbox to \z@{\hbox to \z@{\hss\box#1}\vss}%
+ \pst@Verb{90 \tx@Rot}}}}
+\def\psrotatedown{\pst@makebox{\ps@rotatedown\pst@hbox}}
+\def\ps@rotatedown#1{%
+\hbox{\hskip\wd#1\vbox{\vskip\ht#1\vskip\dp#1%
+\pst@Verb{180 \tx@Rot}%
+\vbox to \z@{\hbox to \z@{\box#1\hss}\vss}%
+\pst@Verb{-180 \tx@Rot}}}}
+\pslongbox{Rotateleft}{\psrotateleft}
+\pslongbox{Rotateright}{\psrotateright}
+\pslongbox{Rotatedown}{\psrotatedown}
+% ----------- hv begin 2004-09-23 ----------- 1.11
+% compatibility stuff
+\let\rotateleft\psrotateleft
+\let\rotateright\psrotateright
+\let\rotatedown\psrotatedown
+% ----------- hv end 2005-09-23 ----------- 1.11
+\def\pst@starbox{%
+\setbox\pst@hbox\hbox{\psframebox*[boxsep=false]{\unhbox\pst@hbox}}}
+\def\pst@@makesmall#1{%
+\setbox#1=\hbox to\z@{\hss\vbox to \z@{\vss\box#1\vss}\hss}}
+\def\pst@@@makesmall#1{%
+\pst@dimh=\psk@xref\wd#1%
+\ifx\psk@yref\relax
+\pst@dimg=\dp#1%
+\else
+\pst@dimg=\psk@yref\ht#1%
+\advance\pst@dimg\psk@yref\dp#1%
+\fi
+\setbox#1=\hbox to\z@{%
+\kern-\pst@dimh\vbox to\z@{\vss\box#1\kern-\pst@dimg}\hss}}
+%
+\define@key[psset]{pstricks}{ref}[c]{\pst@expandafter\psset@@ref{#1}\@empty,,\@nil}
+\def\psset@@ref#1#2,#3,#4\@nil{%
+ \def\psk@xref{.5}%
+ \def\psk@yref{.5}%
+ \let\pst@makesmall\pst@@@makesmall
+ \ifx\@empty#3\@empty
+ \@nameuse{getref@#1}%
+ \@nameuse{getref@#2}%
+ \else
+ \pst@checknum{#1#2}\psk@xref
+ \pst@checknum{#3}\psk@yref
+ \fi}
+%
+\def\getref@c{\let\pst@makesmall\pst@@makesmall}
+\def\getref@t{\def\psk@yref{1}}
+\def\getref@b{\def\psk@yref{0}}
+\def\getref@B{\let\psk@yref\relax}
+\def\getref@l{\def\psk@xref{0}}
+\def\getref@r{\def\psk@xref{1}}
+\psset[pstricks]{ref=c}
+%
+\def\pst@rotlist{ mark RAngle /ps@a ED cleartomark ps@a neg }
+\def\pst@rottable{%
+@0=%
+@U=%
+@L=90 %
+@D=180 %
+@R=-90 %
+@N=\pst@rotlist
+@W=\pst@rotlist 90 add %
+@S=\pst@rotlist 180 add %
+@E=\pst@rotlist 90 sub }
+%
+\define@key[psset]{pstricks}{rot}[0]{%
+ \pst@expandafter{\@ifnextchar*{\psset@@@rot}{\psset@@rot}}{#1}\@nil}
+\def\psset@@rot#1\@nil{%
+ \def\next##1@#1=##2@##3\@nil{%
+ \ifx##2\relax\pst@getangle{#1}\psk@rot \else\def\psk@rot{##2}\fi%
+ \pst@Verb{ gsave STV CP T /ps@rot \ifx\psk@rot\@empty 0 \else \psk@rot \fi def grestore }% (MJS)
+ }%
+ \expandafter\next\pst@rottable @#1=\relax @\@nil}
+%
+\def\psset@@@rot#1#2\@nil{%
+ \psset@@rot#2\@nil%
+ \edef\psk@rot{\pst@rotlist \ifx\psk@rot\@empty\else\space ps@rot add \fi}%
+ \pst@Verb{ gsave STV CP T /ps@rot \ifx\psk@rot\@empty 0 \else \psk@rot \fi def grestore }}% (MJS)
+%
+%\def\psset@@rot#1\@nil{%
+%\def\ps@next##1@#1=##2@##3\@nil{%
+%\ifx\relax##2\pst@getangle{#1}\psk@rot\else\def\psk@rot{##2}\fi}%
+%\expandafter\ps@next\pst@rottable @#1=\relax @\@nil}
+%
+%\def\psset@@@rot#1#2\@nil{%
+%\psset@@rot#2\@nil
+%\edef\psk@rot{\pst@rotlist \ifx\psk@rot\@empty\else\psk@rot add \fi}}
+\psset[pstricks]{rot=0}
+%
+\def\tx@RotBegin{RotBegin }
+\def\tx@RotEnd{RotEnd }
+\def\pst@rotate#1#2{%
+ \ifx#1\@empty\else
+ \setbox#2=\hbox{\pst@Verb{#1 \tx@RotBegin}\box#2\pst@Verb{\tx@RotEnd}}%
+ \fi%
+}
+\def\psput@cartesian#1{%
+\hbox to \z@{\kern\pst@dimg{\vbox to \z@{\vss\box#1\vskip\pst@dimh}\hss}}%
+}
+\def\psput@special#1{%
+ \hbox{%
+ \pst@Verb{{ \pst@coor \pstnodescale } \tx@PutCoor \tx@PutBegin }% 20150911 hv
+ \box#1%
+ \pst@Verb{ \tx@PutEnd }%
+ }%
+}
+\def\tx@PutCoor{PutCoor }
+\def\tx@PutBegin{PutBegin }
+\def\tx@PutEnd{PutEnd }
+\def\rput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\rput@i}{\rput@ii}}}
+\def\rput@i[#1]{%
+ \test@for@options#1=\@nil
+ \ifnum\the\pst@cntm=\z@
+ \addto@par{ref={#1}}%
+ \else
+ \expandafter\addto@par\expandafter{#1}%
+ \fi
+ \rput@ii
+}
+\def\test@for@options#1=#2\@nil{%
+ \if$#2$% #2 is empty -> old syntax
+ \pst@cntm=\z@
+ \else % something like foo=bar
+ \pst@cntm=\@ne
+ \fi
+}
+
+\def\rput@ii{\@ifnextchar({\rput@iv}{\rput@iii}}
+\def\rput@iii#1{\addto@par{rot={#1}}\@ifnextchar({\rput@iv}{\rput@iv(\z@,\z@)}}
+\def\rput@iv(#1){\pst@killglue\pst@makebox{\rput@v{#1}}}
+\def\rput@v#1{%
+ \begingroup
+ \use@par
+ \if@star\pst@starbox\fi
+ \pst@makesmall\pst@hbox
+ \ifx\psk@rot\@empty\else\pst@rotate{ps@rot }\pst@hbox\fi% (MJS)
+% \pst@rotate\psk@rot\pst@hbox%
+ \psput@{#1}\pst@hbox%
+ \endgroup
+ \ignorespaces}
+%
+\def\multirput{%
+ \def\pst@par{}%
+ \pst@ifstar{\@ifnextchar[{\multirput@i}{\multirput@ii}}}
+\def\multirput@i[#1]{\addto@par{ref={#1}}\multirput@ii}
+\def\multirput@ii{\@ifnextchar({\multirput@iv}{\multirput@iii}}
+\def\multirput@iii#1{\addto@par{rot={#1}}\multirput@iv}
+\def\multirput@iv(#1){%
+ \@ifnextchar({\multirput@v(#1)}{\multirput@v(\z@,\z@)(#1)}}
+\def\multirput@v(#1,#2)(#3,#4)#5{%
+ \pst@makebox{\multirput@vi(#1,#2)(#3,#4){#5}}}
+\def\multirput@vi(#1,#2)(#3,#4)#5{%
+ \pst@killglue%
+ \global\psLoopIndex=\@ne\relax
+ \begingroup
+ \use@par
+ \if@star\pst@starbox\fi
+ \pst@makesmall\pst@hbox
+ \ifx\psk@rot\@empty\else\pst@rotate{ps@rot }\pst@hbox\fi% (MJS)
+% \pst@rotate\psk@rot\pst@hbox
+ \pssetxlength\pst@dima{#1}%
+ \pssetylength\pst@dimb{#2}%
+ \pssetxlength\pst@dimc{#3}%
+ \pssetylength\pst@dimd{#4}%
+ \pst@cntg=#5\relax
+ \leavevmode
+ \loop
+ \vbox to \z@{%
+ \vss
+ \hbox to \z@{\kern\pst@dima\copy\pst@hbox\hss}%
+ \vskip\pst@dimb%
+ }%
+ \ifnum\pst@cntg>\psLoopIndex
+ \advance\pst@dima\pst@dimc
+ \advance\pst@dimb\pst@dimd
+ \global\advance\psLoopIndex by \@ne
+ \repeat
+ \endgroup
+ \ignorespaces%
+}
+%
+\newif\if@fixedradius
+\def\cput{\def\pst@par{}\pst@object{cput}}
+\def\cput@i{\@fixedradiusfalse\cput@ii}
+\def\cput@ii{\pst@killglue\@ifnextchar({\cput@iv}{\cput@iii}}
+\def\cput@iii#1{%
+ \addto@par{rot={#1}}%
+ \@ifnextchar({\cput@iv}{\cput@iv(\z@,\z@)}%
+}
+\def\cput@iv(#1){\pst@makebox{\cput@v{#1}}}
+\def\cput@v#1{%
+ \begingroup
+ \use@par
+ \setbox\pst@hbox=\hbox{%
+ \psboxsepfalse
+ \if@fixedradius\psCirclebox@ii\else\pscirclebox@ii\fi%
+ }%
+ \pst@@makesmall\pst@hbox
+ \ifx\psk@rot\@empty\else\pst@rotate{ps@rot }\pst@hbox\fi% (MJS)
+% \pst@rotate\psk@rot\pst@hbox
+ \psput@{#1}\pst@hbox
+ \endgroup
+ \ignorespaces%
+}
+%
+\def\Cput{\def\pst@par{}\pst@object{Cput}}
+\def\Cput@i{\@fixedradiustrue\cput@ii}
+\newdimen\pslabelsep
+\define@key[psset]{pstricks}{labelsep}[5pt]{%
+ \pssetlength\pslabelsep{#1}%
+ \ifx\PSTplotLoaded\endinput% Set labels for pst-plot, if laoded
+ \let\psxlabelsep\pslabelsep%
+ \let\psylabelsep\pslabelsep%
+ \fi}
+\psset[pstricks]{labelsep=5pt}
+%
+\define@key[psset]{pstricks}{refangle}[0]{\pst@expandafter\psset@@refangle{#1}\@nil}
+\def\psset@@refangle#1\@nil{%
+ \def\next##1@#1=##2"##3@##4\@nil{%
+ \ifx\relax##2%
+ \pst@getangle{#1}\psk@refangle
+ \def\psk@uputref{}%
+ \else
+ \def\psk@refangle{##2 }%
+ \def\psk@uputref{##3}%
+ \fi}%
+ \expandafter\next\pst@refangletable @#1=\relax"@\@nil%
+ \pst@Verb{ gsave STV CP T /ps@refangle \psk@refangle\space def grestore }%ADDED (MJS)
+}
+%
+\def\pst@refangletable{%
+@r=0"20%
+@u=90"02%
+@l=180"10%
+@d=-90"01%
+@ur=45"22%
+@ul=135"12%
+@dr=-135"21%
+@dl=-45"11}
+\psset[pstricks]{refangle=0}
+
+% DG/SR modification begin - Mar. 24, 1999 - Patch 10
+%\def\uput{\def\pst@par{}\@ifnextchar[{\uput@ii}{\uput@i}}
+\def\uput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\uput@ii}{\uput@i}}}
+% DG/SR modification end
+\def\uput@i#1{\addto@par{labelsep=#1}\uput@ii}
+%
+\def\uput@ii[#1]{%
+ \addto@par{refangle={#1}}%
+ \@ifnextchar({\uput@iv}{\uput@iii}}
+%
+\def\uput@iii#1{%
+ \addto@par{rot={#1}}%
+ \@ifnextchar({\uput@iv}{\uput@iv(\z@,\z@)}}
+%
+\def\uput@iv(#1){\pst@killglue\pst@makebox{\uput@v{#1}}}
+%
+\def\uput@v#1{%
+ \begingroup
+ \use@par
+ \if@star\pst@starbox\fi
+ \pstCheckCoorType{#1}% needed for \uput@vii
+ \uput@vi
+ \psput@{#1}\pst@hbox
+ \endgroup
+ \ignorespaces}
+%
+\def\uput@vi{%
+ \ifx\psk@uputref\@empty\uput@vii\tx@UUput{}%
+ \else
+ \ifx\psk@rot\@empty\expandafter\uput@viii\psk@uputref
+ \else\uput@vii\tx@UUput{}\fi
+ \fi}
+%
+\def\uput@vii#1#2{%
+ \edef\pst@coor{%
+ \ifPst@SpecialLength\pst@SpecialLength\else\pst@number\pslabelsep\fi
+% \pst@number\pslabelsep % \ifdim\pslabelsep<\z@ neg \fi
+ #2%
+ \pst@number{\wd\pst@hbox}%
+ \pst@number{\ht\pst@hbox}%
+ \pst@number{\dp\pst@hbox}%
+ \ifnum\pst@C@@rType=7
+ ps@refangle % CHANGED (MJS) FROM \psk@refangle\space
+ \ifx\psk@rot\@empty\else ps@rot\space sub \fi
+ \else
+ \psk@refangle\space
+ \ifx\psk@rot\@empty\else \psk@rot\space sub \fi
+ \fi
+ \tx@Uput #1}%
+ %\show\pst@coor
+ \setbox\pst@hbox=\hbox to\z@{\hss\vbox to\z@{\vss\box\pst@hbox\vss}\hss}%
+ \setbox\pst@hbox=\psput@special\pst@hbox
+ \ifnum\pst@C@@rType=7
+ \ifx\psk@rot\@empty\else\pst@rotate{ps@rot }\pst@hbox\fi% CHANGED FROM \psk@rot (MJS)
+ \else
+ \ifx\psk@rot\@empty\else\pst@rotate{\psk@rot}\pst@hbox\fi%
+ \fi}
+%
+%
+\def\uput@viii#1#2{%
+ \ifnum#1>\z@\relax\ifnum#2>\z@\relax\pslabelsep=.707\pslabelsep\fi\fi
+ \setbox\pst@hbox=\vbox to\z@{%
+ \ifnum#2=1\relax\vskip\pslabelsep\else\vss\fi
+ \hbox to\z@{%
+ \ifnum#1=2\relax\hskip\pslabelsep \else\hss\fi
+ \box\pst@hbox%
+ \ifnum#1=1\relax\hskip\pslabelsep\else\hss\fi}%
+ \ifnum#2=2\relax\vskip\pslabelsep\else\vss\fi}}
+%
+\def\tx@Uput{Uput }
+\def\tx@UUput{UUput }
+%
+\def\Rput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\Rput@ii}{\Rput@i}}}
+\def\Rput@i#1{\addto@par{labelsep=#1}\Rput@ii}
+\def\Rput@ii[#1]{\addto@par{ref={#1}}\@ifnextchar({\Rput@iv}{\Rput@iii}}
+\def\Rput@iii#1{\addto@par{rot={#1}}\@ifnextchar({\Rput@iv}{\Rput@iv(\z@,\z@)}}
+\def\Rput@iv(#1){\pst@killglue\pst@makebox{\Rput@v{#1}}}
+\def\Rput@v#1{%
+ \begingroup
+ \use@par
+ \if@star\pst@starbox\fi
+ \Rput@vi
+ \pst@makesmall\pst@hbox
+ \ifx\psk@rot\@empty\else\pst@rotate{ps@rot }\pst@hbox\fi% (MJS)
+% \pst@rotate\psk@rot\pst@hbox
+ \psput@{#1}\pst@hbox
+ \endgroup
+ \ignorespaces}
+%
+\def\Rput@vi{%
+ \pst@dimg=\dp\pst@hbox
+ \advance\pst@dimg\pslabelsep
+ \dp\pst@hbox=\pst@dimg
+ \pst@dimg=\ht\pst@hbox
+ \advance\pst@dimg\pslabelsep
+ \ht\pst@hbox=\pst@dimg
+ \setbox\pst@hbox\hbox{\kern\pslabelsep\box\pst@hbox\kern\pslabelsep}}%
+%
+\def\oldpsput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\oldpsput@i}{\oldpsput@ii}}}
+\def\oldpsput@i[#1]{\addto@par{ref={#1}}\oldpsput@ii}
+\def\oldpsput@ii{\@ifnextchar<{\oldpsput@iii}{\oldpsput@iv}}
+\def\oldpsput@iii<#1>{\rput@iii{#1}}
+\def\OldPsput{\let\psput\oldpsput}
+\def\NewPsput{\let\psput\rput}
+%
+% ----------- hv 20120219 -------------------
+\newpsstyle{gridstyle}{subgriddiv=0,gridcolor=lightgray,griddots=10,gridlabels=8pt}
+\newpsstyle{gridstyleA}{subgriddiv=5,gridcolor=red!30,subgridcolor=green!20!black!10,gridlabels=0pt}
+\newif\ifshowgrid
+\newdimen\sh@wgridXunit
+\newdimen\sh@wgridYunit
+
+\define@key[psset]{pstricks}{showgrid}[b]{\expandafter\pst@@showgrid#1!!\@nil}
+\def\pst@@showgrid#1#2#3\@nil{% hv 20130403
+ \def\showgridp@s{0}%
+ \ifx#1b\showgridtrue\else% bottom
+ \ifx#1f\showgridfalse\else
+ \ifx#1t
+ \ifx#2r \showgridtrue\else% true->bottom
+ \showgridtrue\def\showgridp@s{1}\fi% top
+ \fi\fi\fi
+ \ifnum\showgridp@s>0\relax
+ \sh@wgridXunit=\psxunit
+ \sh@wgridYunit=\psyunit
+ \fi
+
+}
+\psset[pstricks]{showgrid=f}
+\define@boolkey[psset]{pstricks}[Pst@]{pgffunctions}[true]{}
+\psset[pstricks]{pgffunctions=false}
+%
+\newdimen\pst@shift
+\newif\ifPst@shift@star
+\define@key[psset]{pstricks}{shift}[0]{%
+ \ifx#1*
+ \global\Pst@shift@startrue
+ \pst@shift=\p@
+ \else
+ \global\Pst@shift@starfalse
+ \pssetlength\pst@dimg{#1}
+ \global\pst@shift\pst@dimg% only the outer pspicture env can have a shift
+ \fi}
+\psset[pstricks]{shift=0}
+%
+%------------------------------- pspicture ------------------------------
+%
+\def\pspicture{\begingroup\pst@ifstar\pst@picture}
+\def\pst@picture{\@ifnextchar[{\pst@@picture}{\pst@@picture[]}}
+\def\pst@@picture[#1]{\@ifnextchar({\pst@@picture@i[#1]}{\pst@@picture@i[#1](10,10)}}%
+\def\pst@@picture@i[#1]#2(#3,#4){\@ifnextchar(% ignore anything between [] and ()
+ {\pst@@@picture[#1](#3,#4)}%
+ {\pst@@@picture[#1](0,0)(#3,#4)}}
+%
+\def\pst@@@picture[#1](#2,#3)(#4,#5){%
+ \pssetxlength\pst@dima{#2}%
+ \pssetylength\pst@dimb{#3}%
+ \pssetxlength\pst@dimc{#4}%
+ \pssetylength\pst@dimd{#5}%
+ \ifdim\pst@dima>\pst@dimc%
+ \pst@dimg=\pst@dima%
+ \pst@dima=\pst@dimc%
+ \pst@dimc=\pst@dimg%
+ \fi%
+ \ifdim\pst@dimb>\pst@dimd%
+ \pst@dimg=\pst@dimb%
+ \pst@dimb=\pst@dimd%
+ \pst@dimd=\pst@dimg%
+ \fi%
+ \setbox\pst@hbox=\hbox\bgroup
+ \begingroup\KillGlue
+ \@ifundefined{@latexerr}{}{\let\unitlength\psunit}%
+ \edef\pic@coor{(#2,#3)(#2,#3)(#4,#5)}%
+% ----------- 1.10/12 beg hv -------------------
+ \psset{showgrid=false}% % for nested pspicture environemnets
+ \def\pst@tempA{#1}%
+ \ifx\pst@tempA\@empty\else\psset{#1}\fi% sets the shift and grid option
+ \ifx\pst@bgcolor\@empty\else\psframe*[linecolor=\pst@bgcolor](#2,#3)(#4,#5)\fi
+ \ifshowgrid\ifnum\showgridp@s=0\psgrid[style=gridstyle]\fi\fi
+% ----------- 1.10/12 end hv -------------------
+ \ignorespaces% % 2008-12-07
+ \ifPst@pgffunctions\pstVerb{ pgffunctions }\fi% hv 2013-04-17
+}
+\def\pic@coor{(0,0)(0,0)(10,10)}
+\def\endpspicture{%
+ \ifshowgrid\ifnum\showgridp@s>0
+ \psgrid[xunit=\sh@wgridXunit,yunit=\sh@wgridYunit,style=gridstyle]\fi\fi
+ \pst@killglue
+ \endgroup
+ \egroup
+ \ht\pst@hbox=\pst@dimd
+ \dp\pst@hbox=-\pst@dimb
+ \setbox\pst@hbox=\hbox{%
+ \kern-\pst@dima
+ \ifPst@shift@star%\typeout{==pstricks== old behaviour of the shift option}% shift=*
+ \advance\pst@dimd-\pst@dimb
+ \pst@dimd=0.5\pst@dimd
+ \else\pst@dimd-\pst@shift\fi
+ \advance\pst@dimd\pst@dimb
+ \lower\pst@dimd\box\pst@hbox
+ \kern\pst@dimc}%
+ \if@star\setbox\pst@hbox=\hbox{\clipbox@@\z@}\fi
+ \leavevmode
+ \ifPst@draft
+ \expandafter\ifx\csname @latexerr\endcsname\relax
+ \box\pst@hbox
+ \else% do we have LaTeX?
+ \fboxsep=0pt
+ \fbox{\rule[-\pst@shift]{0pt}{\ht\pst@hbox}\rule{\wd\pst@hbox}{0pt}}%
+ \fi
+ \else
+ \box\pst@hbox
+ \fi
+ \endgroup
+ \psset[pstricks]{shift=0}% reset value
+}
+%
+\@namedef{pspicture*}{\pspicture*}
+\@namedef{endpspicture*}{\endpspicture}
+%
+\ifx\pstcustomize\relax \input pstricks.con \fi
+\catcode`\@=\PstAtCode\relax
+%
+\endinput
+%%
+%% END: pstricks.tex
diff --git a/graphics/pstricks/base/generic/pstricks97.tex b/graphics/pstricks/base/generic/pstricks97.tex
new file mode 100644
index 0000000000..e4b0a5a2c9
--- /dev/null
+++ b/graphics/pstricks/base/generic/pstricks97.tex
@@ -0,0 +1,2626 @@
+%% $Id: pstricks97.tex 446 2017-04-19 11:40:55Z herbert $
+%% BEGIN: pstricks.tex
+%%
+%% PostScript macros for Generic TeX: main input file for PSTricks 97.
+%% See the PSTricks User's Guide for description.
+%% This uses the header file `pstricks.pro'.
+%%
+\def\fileversion{97 patch 14}
+\def\filedate{1999/12/23}
+%%
+%% COPYRIGHT 1993, 1994, 1999 by Timothy Van Zandt, tvz@nwu.edu.
+%%
+%% 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.
+%%
+\csname PSTricksLoaded\endcsname
+\let\PSTricksLoaded\endinput
+\edef\PstAtCode{\the\catcode`\@}
+\catcode`\@=11\relax
+\expandafter\ifx\csname @latexerr\endcsname\relax
+\long\def\@ifundefined#1#2#3{\expandafter\ifx\csname
+#1\endcsname\relax#2\else#3\fi}
+\def\@namedef#1{\expandafter\def\csname #1\endcsname}
+\def\@nameuse#1{\csname #1\endcsname}
+\def\@eha{%
+Your command was ignored.^^J
+Type \space I <command> <return> \space to replace
+it with another command,^^J
+or \space <return> \space to continue without it.}
+\def\@spaces{\space\space\space\space}
+\def\typeout#1{\immediate\write\@unused{#1}}
+\alloc@7\write\chardef\sixt@@n\@unused
+\def\@empty{}
+\def\@gobble#1{}
+\def\@nnil{\@nil}
+\def\@ifnextchar#1#2#3{%
+\let\@tempe#1\def\@tempa{#2}\def\@tempb{#3}\futurelet\@tempc\@ifnch}
+\def\@ifnch{%
+\ifx\@tempc\@sptoken
+\let\@tempd\@xifnch
+\else
+\ifx\@tempc\@tempe \let\@tempd\@tempa \else \let\@tempd\@tempb \fi
+\fi
+\@tempd}
+\begingroup
+\def\:{\global\let\@sptoken= } \:
+\def\:{\@xifnch} \expandafter\gdef\: {\futurelet\@tempc\@ifnch}
+\endgroup
+\fi
+\typeout{`PSTricks' v\fileversion\space\space <\filedate> (tvz)}
+\def\@pstrickserr#1#2{%
+\begingroup
+\newlinechar`\^^J
+\edef\pst@tempc{#2}%
+\expandafter\errhelp\expandafter{\pst@tempc}%
+\typeout{%
+PSTricks error. \space See User's Guide for further information.^^J
+\@spaces\@spaces\@spaces\@spaces
+Type \space H <return> \space for immediate help.}%
+\errmessage{#1}%
+\endgroup}
+\def\@ehpa{%
+Your command was ignored. Default value substituted.^^J
+Type \space <return> \space to procede.}
+\def\@ehpb{%
+Your command was ignored. Will recover best I can.^^J
+Type \space <return> \space to procede.}
+\def\@ehpc{%
+You better fix this before proceding.^^J
+See the PSTricks User's Guide or ask your system administrator for help.^^J
+Type \space X <return> \space to quit.}
+\def\pst@misplaced#1{\@pstrickserr{Misplaced \string#1 command}\@ehpb}
+\newdimen\pst@dima
+\newdimen\pst@dimb
+\newdimen\pst@dimc
+\newdimen\pst@dimd
+\newdimen\pst@dimg
+\newdimen\pst@dimh
+\newbox\pst@hbox
+\newbox\pst@boxg
+\newcount\pst@cnta
+\newcount\pst@cntb
+\newcount\pst@cntc
+\newcount\pst@cntd
+\newcount\pst@cntg
+\newcount\pst@cnth
+\newif\if@pst
+\newtoks\pst@toks
+\newif\if@star
+\def\pst@ifstar#1{%
+\@ifnextchar*{\@startrue\def\next*{#1}\next}{\@starfalse#1}}
+\def\pst@expandafter#1#2{%
+\def\next{#1}%
+\edef\@tempa{#2}%
+\ifx\@tempa\@empty
+\@pstrickserr{Unexpected empty argument!}\@ehpb
+\def\@tempa{\@empty}%
+\fi
+\expandafter\next\@tempa}
+\def\pst@dimtonum#1#2{\edef#2{\pst@@dimtonum#1}}
+\def\pst@@dimtonum#1{\expandafter\pst@@@dimtonum\the#1}
+{\catcode`\p=12 \catcode`\t=12 \global\@namedef{pst@@@dimtonum}#1pt{#1}}
+\def\pst@pyth#1#2#3{%
+\ifdim#1>#2\pst@@pyth#1#2#3\else\pst@@pyth#2#1#3\fi}
+\def\pst@@pyth#1#2#3{%
+\ifdim4#1>9#2%
+#3=#1\advance#3 .2122#2%
+\else
+#3=.8384#1\advance#3 .5758#2%
+\fi}
+\def\pst@divide#1#2#3{%
+\pst@@divide{#1}{#2}%
+\pst@dimtonum\pst@dimg{#3}}
+\def\pst@@divide#1#2{%
+\pst@dimg=#1\relax
+\pst@dimh=#2\relax
+\pst@cntg=\pst@dimh
+\pst@cnth=67108863
+\pst@@@divide\pst@@@divide\pst@@@divide\pst@@@divide
+\divide\pst@dimg\pst@cntg}
+\def\pst@@@divide{%
+\ifnum
+\ifnum\pst@dimg<\z@-\fi\pst@dimg<\pst@cnth
+\multiply\pst@dimg\sixt@@n
+\else
+\divide\pst@cntg\sixt@@n
+\fi}
+\def\pst@configerr#1{%
+\@pstrickserr{\string#1 not defined in pstricks.con}\@ehpc}
+% % \begin{macrocode}
+\def\pstVerb#1{\pst@configerr\pstVerb}
+\def\pstverb#1{\pst@configerr\pstverb}
+\def\pstverbscale{\pst@configerr\pstverbscale}
+\def\pstrotate{\pst@configerr\pstrotate}
+\def\pstheader#1{\pst@configerr\pstheader}
+\def\pstdriver{\pst@configerr\pstdriver}
+\@ifundefined{pstcustomize}%
+{\def\pstcustomize{\endinput\let\pstcustomize\relax}}{}
+\input pstricks.con
+\newif\ifPSTricks
+\PSTrickstrue
+\def\PSTricksOff{%
+\def\pstheader##1{}%
+\def\pstverb##1{}%
+\def\pstVerb##1{}%
+\PSTricksfalse}
+\@ifundefined{pst@def}{\def\pst@def#1<#2>{\@namedef{tx@#1}{#2 }}}{}
+\@ifundefined{pst@ATH}{\def\pst@ATH<#1>{}}{}
+\pstheader{pstricks97.pro}
+\def\pst@dict{tx@Dict begin }
+\def\pst@theheaders{pstricks.pro}
+\def\pst@Verb#1{\pstVerb{\pst@dict #1 end}}
+\def\tx@Atan{Atan }
+\def\tx@Div{Div }
+\def\tx@NET{NET }
+\def\tx@Pyth{Pyth }
+\def\tx@PtoC{PtoC }
+\def\tx@PathLength@{PathLength@ }
+\def\tx@PathLength{PathLength }
+\pst@dimg=\pstunit\relax
+\ifdim\pst@dimg=1bp
+\def\pst@stp{.996264 dup scale}
+\else
+\edef\pst@stp{1 \pst@@dimtonum\pst@dimg\space div dup scale}
+\fi
+\def\tx@STP{STP }
+\def\tx@STV{STV }
+\def\pst@number#1{\pst@@dimtonum#1\space}
+\def\pst@checknum#1#2{%
+\edef\next{#1}%
+\ifx\next\@empty
+\let\pst@num\z@
+\else
+\expandafter\pst@@checknum\next..\@nil
+\fi
+\ifnum\pst@num=\z@
+\@pstrickserr{Bad number: `#1'. 0 substituted.}\@ehpa
+\def#2{0 }%
+\else
+\edef#2{\ifnum\pst@num=\tw@-\fi\the\pst@cntg.%
+\expandafter\@gobble\the\pst@cnth\space}%
+\fi}
+\def\pst@@checknum{%
+\@ifnextchar-%
+{\let\pst@num\tw@\expandafter\pst@@@checknum\@gobble}%
+{\let\pst@num\@ne\pst@@@checknum}}
+\def\pst@@@checknum#1.#2.#3\@nil{%
+\afterassignment\pst@@@@checknum\pst@cntg=0#1\relax\@nil
+\afterassignment\pst@@@@checknum\pst@cnth=1#2\relax\@nil}
+\def\pst@@@@checknum#1\relax\@nil{%
+\ifx\@nil#1\@nil\else\let\pst@num\z@\fi}
+\def\pst@getnumii#1 #2 #3\@nil{%
+\pst@checknum{#1}\pst@tempg
+\pst@checknum{#2}\pst@temph}
+\def\pst@getnumiii#1 #2 #3 #4\@nil{%
+\pst@checknum{#1}\pst@tempg
+\pst@checknum{#2}\pst@temph
+\pst@checknum{#3}\pst@tempi}
+\def\pst@getnumiv#1 #2 #3 #4 #5\@nil{%
+\pst@checknum{#1}\pst@tempg
+\pst@checknum{#2}\pst@temph
+\pst@checknum{#3}\pst@tempi
+\pst@checknum{#4}\pst@tempj}
+\def\pst@getdimnum#1 #2 #3\@nil{%
+\pssetlength\pst@dimg{#1}%
+\pst@checknum{#2}\pst@tempg}
+% DG/SR modification begin - Jan. 7, 1998 - Patch 9
+% Missing from pstricks.bug 0.93
+%\def\pst@getscale#1#2{%
+%\pst@expandafter\pst@getnumii{#1 #1} {} {} {}\@nil
+%\@psttrue
+%\ifdim\pst@tempg\p@=\z@
+%\@pstrickserr{Bad scaling argument `#1'}\@ehpa
+%\def\pst@tempg{1 }%
+%\@pstfalse
+%\fi
+%\ifdim\pst@temph\p@=\z@
+%\if@pst\@pstrickserr{Bad scaling argument `#1'}\@ehpa\fi
+%\def\pst@temph{1 }%
+%\fi
+%\edef#2{\pst@tempg\space \pst@temph\space scale }%
+%\ifdim\pst@tempg\p@=\p@ \ifdim\pst@temph\p@=\p@
+%\def#2{}%
+%\fi\fi}
+\def\pst@getscale#1#2{%
+\edef\pst@tempg{#1}%
+\ifx\pst@tempg\@none
+\def#2{}%
+\else
+\pst@expandafter\pst@getnumii{#1 #1} {} {} {}\@nil
+\ifdim\pst@tempg\p@=\z@
+\@pstrickserr{Bad scaling argument `#1'}\@ehpa
+\def#2{}%
+\else
+\ifdim\pst@temph\p@=\z@
+\@pstrickserr{Bad scaling argument `#1'}\@ehpa
+\def#2{}%
+\else
+\edef#2{\pst@tempg\space \pst@temph\space scale }%
+\fi
+\fi
+\fi}
+% DG/SR modification end
+\def\pst@getint#1#2{%
+\pst@cntg=#1\relax
+\edef#2{\the\pst@cntg\space}}
+\begingroup
+\catcode`\{=12
+\catcode`\}=12
+\catcode`\[=1
+\catcode`\]=2
+\gdef\pslbrace[{ ]
+\gdef\psrbrace[} ]
+\endgroup
+\def\@newcolor#1#2{%
+\expandafter\edef\csname #1\endcsname{\noexpand\pst@color{#2}}%
+\expandafter\edef\csname color@#1\endcsname{#2}%
+\ignorespaces}
+\def\pst@color#1{%
+\def\pst@currentcolor{#1}\pstVerb{#1}\aftergroup\pst@endcolor}
+\def\pst@endcolor{\pstVerb{\pst@currentcolor}}
+\def\pst@currentcolor{0 setgray}
+\def\altcolormode{%
+\def\pst@color##1{%
+\pstVerb{gsave ##1}\aftergroup\pst@endcolor}%
+\def\pst@endcolor{\pstVerb{\pst@grestore}}}
+\def\pst@grestore{%
+currentpoint
+matrix currentmatrix
+currentfont
+grestore
+setfont
+setmatrix
+moveto}
+\def\pst@usecolor#1{\csname color@#1\endcsname\space}
+\def\newgray#1#2{%
+\pst@checknum{#2}\pst@tempg
+\@newcolor{#1}{\pst@tempg setgray}}
+\def\newrgbcolor#1#2{%
+\pst@expandafter\pst@getnumiii{#2} {} {} {} {}\@nil
+\@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi setrgbcolor}}
+\def\newhsbcolor#1#2{%
+\pst@expandafter\pst@getnumiii{#2} {} {} {} {}\@nil
+\@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi sethsbcolor}}
+\def\newcmykcolor#1#2{%
+\pst@expandafter\pst@getnumiv{#2} {} {} {} {} {}\@nil
+\@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi \pst@tempj setcmykcolor}}
+\newgray{black}{0}
+\newgray{darkgray}{.25}
+\newgray{gray}{.5}
+\newgray{lightgray}{.75}
+\newgray{white}{1}
+\newrgbcolor{red}{1 0 0}
+\newrgbcolor{green}{0 1 0}
+\newrgbcolor{blue}{0 0 1}
+\newrgbcolor{yellow}{1 1 0}
+\newrgbcolor{cyan}{0 1 1}
+\newrgbcolor{magenta}{1 0 1}
+\def\psset#1{\@psset#1,\@nil\ignorespaces}
+\def\@psset#1,{%
+\@@psset#1==\@nil
+\@ifnextchar\@nil{\@gobble}{\@psset}}
+\def\@@psset#1=#2=#3\@nil{%
+\@ifundefined{psset@#1}%
+{\@pstrickserr{Graphics parameter `#1' not defined.}\@ehpa}%
+{\@nameuse{psset@#1}{#2}}}%
+\def\psset@style#1{%
+\@ifundefined{pscs@#1}%
+{\@pstrickserr{Custom style `#1' undefined}\@ehpa}%
+{\@nameuse{pscs@#1}}}
+\def\newpsstyle#1#2{\@namedef{pscs@#1}{\psset{#2}}}
+\def\@none{none}
+\def\pst@getcolor#1#2{%
+\@ifundefined{color@#1}%
+{\@pstrickserr{Color `#1' not defined}\@eha}%
+{\edef#2{#1}}}
+\newdimen\psunit \psunit 1cm
+\newdimen\psxunit \psxunit 1cm
+\newdimen\psyunit \psyunit 1cm
+\let\psrunit\psunit
+\def\pstunit@off{\let\@psunit\ignorespaces\ignorespaces}
+\def\pssetlength#1#2{%
+\let\@psunit\psunit
+\afterassignment\pstunit@off
+#1 #2\@psunit}
+\def\psaddtolength#1#2{%
+\let\@psunit\psunit
+\afterassignment\pstunit@off
+\advance#1 #2\@psunit}
+\def\pssetxlength#1#2{%
+\let\@psunit\psxunit
+\afterassignment\pstunit@off
+#1 #2\@psunit}
+\def\pssetylength#1#2{%
+\let\@psunit\psyunit
+\afterassignment\pstunit@off
+#1 #2\@psunit}
+\def\psset@unit#1{%
+\pssetlength\psunit{#1}%
+\psxunit=\psunit
+\psyunit=\psunit}
+\def\psset@runit#1{\pssetlength\psrunit{#1}}
+\def\psset@xunit#1{\pssetxlength\psxunit{#1}}
+\def\psset@yunit#1{\pssetylength\psyunit{#1}}
+\def\pst@getlength#1#2{%
+\pssetlength\pst@dimg{#1}%
+\edef#2{\pst@number\pst@dimg}}
+\def\pst@@getlength#1#2{%
+\pssetlength\pst@dimg{#1}%
+\edef#2{\number\pst@dimg sp}}
+\def\pst@getcoor#1#2{\pst@@getcoor{#1}\let#2\pst@coor}
+\def\pst@coor{0 0 }
+\def\pst@getcoors#1#2{%
+\def\pst@aftercoors{\addto@pscode{#1 \pst@coors }#2}%
+\def\pst@coors{}%
+\pst@@getcoors}
+\def\pst@@getcoors(#1){%
+\pst@@getcoor{#1}%
+\edef\pst@coors{\pst@coor\pst@coors}%
+\@ifnextchar({\pst@@getcoors}{\pst@aftercoors}}
+\def\pst@getangle#1#2{\pst@@getangle{#1}\let#2\pst@angle}
+\def\pst@angle{0 }
+\def\cartesian@coor#1,#2,#3\@nil{%
+\pssetxlength\pst@dimg{#1}%
+\pssetylength\pst@dimh{#2}%
+\edef\pst@coor{\pst@number\pst@dimg \pst@number\pst@dimh}}
+\def\NormalCoor{%
+\def\pst@@getcoor##1{\pst@expandafter\cartesian@coor{##1},\relax,\@nil}%
+\def\pst@@getangle##1{%
+\pst@checknum{##1}\pst@angle
+\edef\pst@angle{\pst@angle \pst@angleunit}}%
+\def\psput@##1{\pst@@getcoor{##1}\leavevmode\psput@cartesian}}
+\NormalCoor
+\def\degrees{\@ifnextchar[{\@degrees}{\def\pst@angleunit{}}}
+\def\@degrees[#1]{%
+\pst@checknum{#1}\pst@tempg
+\edef\pst@angleunit{360 \pst@tempg div mul }%
+\ignorespaces}
+\def\radians{\def\pst@angleunit{57.2956 mul }}
+\def\pst@angleunit{}
+\def\SpecialCoor{%
+\def\pst@@getcoor##1{%
+\begingroup
+\pst@activecoor
+\xdef\pst@tempg{##1}%
+\endgroup
+\expandafter\special@coor\pst@tempg||\@nil}%
+\def\pst@@getangle##1{%
+\begingroup
+\pst@activecoor
+\xdef\pst@tempg{##1}%
+\endgroup
+\expandafter\special@angle\pst@tempg\@empty)\@nil}%
+\def\psput@##1{\pst@@getcoor{##1}\leavevmode\psput@special}}
+\begingroup
+\catcode`\|=13
+\catcode`\;=13
+\catcode`\!=13
+\gdef\pst@activecoor{%
+\def|{\string|}%
+\def;{\string;}%
+\def!{\string!}}
+\endgroup
+\def\special@coor#1|#2|#3\@nil{%
+\ifx#3|\relax
+\mixed@coor{#1}{#2}%
+\else
+\special@@coor#1;;\@nil
+\fi}
+\def\special@@coor#1{%
+\ifcat#1a\relax
+\def\next{\node@coor#1}%
+\else
+\ifx#1[\relax
+\def\next{\Node@coor[}%
+\else
+\ifx#1!\relax
+\def\next{\raw@coor}%
+\else
+\def\next{\special@@@coor#1}%
+\fi
+\fi
+\fi
+\next}
+\def\special@@@coor#1;#2;#3\@nil{%
+\ifx#3;\relax
+\polar@coor{#1}{#2}%
+\else
+\cartesian@coor#1,\relax,\@nil
+\fi}
+\def\mixed@coor#1#2{%
+\begingroup
+% DG/SR modification begin - Oct. 27, 1997 - Patch 6
+%\specialcoor@ii#1;;\@nil
+%\let\pst@tempa\pst@coor
+%\specialcoor@ii#2;;\@nil
+\special@@coor#1;;\@nil
+\let\pst@tempa\pst@coor
+\special@@coor#2;;\@nil
+% DG/SR modification end
+\xdef\pst@tempg{\pst@tempa pop \pst@coor exch pop }%
+\endgroup
+\let\pst@coor\pst@tempg}
+\def\polar@coor#1#2{%
+\pssetlength\pst@dimg{#1}%
+\pst@@getangle{#2}%
+\edef\pst@coor{\pst@number\pst@dimg \pst@angle \tx@PtoC}}
+\def\raw@coor#1;#2\@nil{%
+\edef\pst@coor{%
+#1 \pst@number\psyunit mul exch \pst@number\psxunit mul exch }}
+\def\node@coor#1\@nil{%
+\@pstrickserr{You must load `pst-node.tex' to use node coordinates.}\@ehps
+\def\pst@coor{0 0 }}
+\def\Node@coor{\node@coor}
+\def\special@angle#1#2)#3\@nil{%
+\ifx!#1\relax
+\edef\pst@angle{#2 \pst@angleunit}%
+\else
+\ifx(#1\relax
+\pst@@getcoor{#2}%
+\edef\pst@angle{\pst@coor exch \tx@Atan}%
+\else
+\pst@checknum{#1#2}\pst@angle
+\edef\pst@angle{\pst@angle \pst@angleunit}%
+\fi
+\fi}
+\def\Cartesian{%
+\def\cartesian@coor##1,##2,##3\@nil{%
+\pssetxlength\pst@dimg{##1}%
+\pssetylength\pst@dimh{##2}%
+\edef\pst@coor{\pst@number\pst@dimg \pst@number\pst@dimh}}%
+\@ifnextchar({\Cartesian@}{}}
+\def\Cartesian@(#1,#2){%
+\pssetxlength\psxunit{#1}%
+\pssetylength\psyunit{#2}%
+\ignorespaces}
+\def\Polar{%
+\def\psput@cartesian{\psput@special}%
+\def\cartesian@coor##1,##2,##3\@nil{\polar@coor{##1}{##2}}}%
+\def\psset@origin#1{%
+\pst@@getcoor{#1}%
+\edef\psk@origin{\pst@coor \tx@NET }}
+\def\psk@origin{}
+\newif\ifswapaxes
+\def\psset@swapaxes#1{%
+\@nameuse{@pst#1}%
+\if@pst
+\def\psk@swapaxes{-90 rotate -1 1 scale }%
+\else
+\def\psk@swapaxes{}%
+\fi}
+\psset@swapaxes{false}
+\newif\ifshowpoints
+\def\psset@showpoints#1{\@nameuse{showpoints#1}}
+\psset@showpoints{false}
+\let\pst@setrepeatarrowsflag\relax
+\def\psset@border#1{%
+\pst@getlength{#1}\psk@border
+\pst@setrepeatarrowsflag}
+\psset@border{0pt}
+\def\psset@bordercolor#1{\pst@getcolor{#1}\psbordercolor}
+\psset@bordercolor{white}
+\newif\ifpsdoubleline
+\def\psset@doubleline#1{%
+\@nameuse{psdoubleline#1}%
+\pst@setrepeatarrowsflag}
+\psset@doubleline{false}
+\def\psset@doublesep#1{\def\psdoublesep{#1}}
+\psset@doublesep{1.25\pslinewidth}
+\def\psset@doublecolor#1{\pst@getcolor{#1}\psdoublecolor}
+\psset@doublecolor{white}
+\newif\ifpsshadow
+\def\psset@shadow#1{%
+\@nameuse{psshadow#1}%
+\pst@setrepeatarrowsflag}
+\psset@shadow{false}
+\def\psset@shadowsize#1{\pst@getlength{#1}\psk@shadowsize}
+\psset@shadowsize{3pt}
+\def\psset@shadowangle#1{\pst@getangle{#1}\psk@shadowangle}
+\psset@shadowangle{-45}
+\def\psset@shadowcolor#1{\pst@getcolor{#1}\psshadowcolor}
+\psset@shadowcolor{darkgray}
+\def\pst@repeatarrowsflag{\z@}
+\def\pst@setrepeatarrowsflag{%
+\edef\pst@repeatarrowsflag{%
+\ifdim\psk@border\p@>\z@ 1\else\ifpsdoubleline 1\else
+\ifpsshadow 1\else \z@\fi\fi\fi}}
+\def\psls@none{}
+\newdimen\pslinewidth
+\def\psset@linewidth#1{\pssetlength\pslinewidth{#1}}
+\psset@linewidth{.8pt}
+\def\psset@linecolor#1{\pst@getcolor{#1}\pslinecolor}
+\psset@linecolor{black}
+\def\psls@solid{0 setlinecap stroke }
+\def\pst@missing{%
+\z@
+\@pstrickserr{Missing number or dimension. 0 substituted}\@ehpa}
+\def\psset@dash#1{%
+\pst@expandafter\psset@@dash{#1} {\pst@missing} {\pst@missing} {}\@nil
+\edef\psk@dash{\pst@number\pst@dimg \pst@number\pst@dimh}}
+\def\psset@@dash#1 #2 #3\@nil{%
+\pssetlength\pst@dimg{#1}%
+\pssetlength\pst@dimh{#2}}
+\psset@dash{5pt 3pt}
+\newif\ifpsdashadjust
+\def\psset@dashadjust#1{\@nameuse{psdashadjust#1}}
+\psset@dashadjust{true}
+\def\psls@dashed{%
+\ifpsdashadjust
+\psk@dash \pst@linetype\space \tx@DashLine
+\else
+[ \psk@dash ] 0 setdash stroke
+\fi}
+\def\tx@DashLine{DashLine }
+\def\psset@dotsep#1{\pst@getlength{#1}\psk@dotsep}
+\psset@dotsep{3pt}
+\def\psls@dotted{%
+\ifpsdashadjust
+\psk@dotsep \pst@linetype\space \tx@DotLine
+\else
+[ 0 \psk@dotsep CLW add ] 0 setdash 1 setlinecap stroke
+\fi}
+\def\tx@DotLine{DotLine }
+\def\psset@linestyle#1{%
+\@ifundefined{psls@#1}%
+{\@pstrickserr{Line style `#1' not defined}\@eha}%
+{\edef\pslinestyle{#1}}}
+\psset@linestyle{solid}
+\def\psfs@none{}
+\def\psset@fillcolor#1{\pst@getcolor{#1}\psfillcolor}
+\psset@fillcolor{white}
+\def\psfs@solid{\pst@fill{\pst@usecolor\psfillcolor fill}}
+\def\psset@hatchwidth#1{\pst@getlength{#1}\psk@hatchwidth}
+\psset@hatchwidth{.8pt}
+\def\psset@hatchsep#1{\pst@getlength{#1}\psk@hatchsep}
+\psset@hatchsep{4pt}
+\def\psset@hatchcolor#1{\pst@getcolor{#1}\pshatchcolor}
+\psset@hatchcolor{black}
+\def\psset@hatchangle#1{\pst@getangle{#1}\psk@hatchangle}
+\psset@hatchangle{45}
+\def\pst@linefill{%
+\psk@hatchangle rotate
+\psk@hatchwidth SLW
+\pst@usecolor\pshatchcolor
+\psk@hatchsep \tx@LineFill}
+\def\psfs@vlines{\pst@fill\pst@linefill}
+\@namedef{psfs@vlines*}{\psfs@solid \psfs@vlines}
+\def\psfs@hlines{\pst@fill{90 rotate \pst@linefill}}
+\@namedef{psfs@hlines*}{\psfs@solid \psfs@hlines}
+\def\psfs@crosshatch{\psfs@vlines \psfs@hlines}
+\@namedef{psfs@crosshatch*}{\psfs@solid \psfs@vlines \psfs@hlines}
+\def\tx@LineFill{LineFill }
+\def\psset@fillstyle#1{%
+\edef\pst@tempg{#1}\def\pst@temph{none}%
+\ifx\pst@tempg\pst@temph
+\let\psk@fillstyle\relax
+\else
+\@ifundefined{psfs@#1}%
+{\@pstrickserr{Undefined fill style: `#1'}\@eha}%
+{\edef\psk@fillstyle{\expandafter\noexpand\csname psfs@#1\endcsname}}%
+\fi}
+\def\psset@addfillstyle#1{%
+\@ifundefined{psfs@#1}%
+{\@pstrickserr{Undefined fill style: `#1'}\@eha}%
+{\edef\psk@fillstyle{%
+\expandafter\noexpand\psk@fillstyle
+\expandafter\noexpand\csname psfs@#1\endcsname}}}
+\psset@fillstyle{none}
+\def\psset@arrows#1{%
+\begingroup
+\pst@activearrows
+\xdef\pst@tempg{#1}%
+\endgroup
+\expandafter\psset@@arrows\pst@tempg\@empty-\@empty\@nil
+\if@pst\else
+\@pstrickserr{Bad arrows specification: #1}\@ehpa
+\fi}
+\def\psset@@arrows#1-#2\@empty#3\@nil{%
+\@psttrue
+\def\next##1,#1-##2,##3\@nil{\def\pst@tempg{##2}}%
+\expandafter\next\pst@arrowtable,#1-#1,\@nil
+\@ifundefined{psas@\pst@tempg}%
+{\@pstfalse\def\psk@arrowA{}}%
+{\let\psk@arrowA\pst@tempg}%
+\@ifundefined{psas@#2}%
+{\@pstfalse\def\psk@arrowB{}}%
+{\def\psk@arrowB{#2}}}
+\def\psk@arrowA{}
+\def\psk@arrowB{}
+\def\pst@arrowtable{,<->,<<->>,>-<,>>-<<,(-),[-]}
+\begingroup
+\catcode`\<=13
+\catcode`\>=13
+\catcode`\|=13
+\gdef\pst@activearrows{\def<{\string<}\def>{\string>}\def|{\string|}}
+\endgroup
+\def\tx@BeginArrow{BeginArrow }
+\def\tx@EndArrow{EndArrow }
+\def\psset@arrowscale#1{\pst@getscale{#1}\psk@arrowscale}
+\psset@arrowscale{1}
+\def\psset@arrowsize#1{%
+\pst@expandafter\pst@getdimnum{#1} 0 {} {}\@nil
+\edef\psk@arrowsize{\pst@number\pst@dimg \pst@tempg}}
+\psset@arrowsize{1.5pt 2}
+\def\psset@arrowlength#1{\pst@checknum{#1}\psk@arrowlength}
+\psset@arrowlength{1.4}
+\def\psset@arrowinset#1{\pst@checknum{#1}\psk@arrowinset}%
+\psset@arrowinset{.4}
+\def\tx@Arrow{Arrow }
+\@namedef{psas@>}{%
+false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow}
+\@namedef{psas@>>}{%
+false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow
+0 h T
+gsave
+newpath
+false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow
+CP
+grestore
+CP newpath moveto
+2 copy
+L
+stroke
+moveto}
+\@namedef{psas@<}{%
+true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow}
+\@namedef{psas@<<}{%
+true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow
+CP newpath moveto 0 a neg L stroke 0 h neg T
+false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow}
+\def\psset@tbarsize#1{%
+\pst@expandafter\pst@getdimnum{#1} 0 {} {}\@nil
+\edef\psk@tbarsize{\pst@number\pst@dimg \pst@tempg}}
+\psset@tbarsize{2pt 5}
+\def\tx@Tbar{Tbar }
+\@namedef{psas@|}{\psk@tbarsize \tx@Tbar}
+\@namedef{psas@|*}{0 CLW -2 div T \psk@tbarsize \tx@Tbar}
+\@namedef{psas@>|}{%
+\psk@tbarsize \tx@Tbar
+0 CLW 2 div T
+newpath
+false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow}
+\@namedef{psas@>|*}{%
+0 CLW -2 div T
+\psk@tbarsize \tx@Tbar
+0 CLW 2 div T
+newpath
+false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow}
+\edef\pst@arrowtable{\pst@arrowtable,|<*->|*,|<->|}
+\def\psset@bracketlength#1{\pst@checknum{#1}\psk@bracketlength}
+\psset@bracketlength{.15}
+\def\tx@Bracket{Bracket }
+\@namedef{psas@]}{\psk@bracketlength \psk@tbarsize \tx@Bracket}
+\def\psset@rbracketlength#1{\pst@checknum{#1}\psk@rbracketlength}
+\psset@rbracketlength{.15}
+\def\tx@RoundBracket{RoundBracket }
+\@namedef{psas@)}{\psk@rbracketlength \psk@tbarsize \tx@RoundBracket}
+\def\psas@c{1 \psas@@c}
+\def\psas@cc{0 CLW 2 div T 1 \psas@@c}
+\def\psas@C{2 \psas@@c}
+\def\psas@@c{%
+setlinecap
+0 0 moveto
+0 CLW 2 div L
+stroke
+0 0 moveto}
+\def\psas@{}
+\psset@arrows{-}
+\def\tx@SD{SD }
+\def\tx@EndDot{EndDot }
+\def\psas@oo{{\pst@usecolor\psfillcolor true} true \psk@dotsize \tx@EndDot}
+\def\psas@o{{\pst@usecolor\psfillcolor true} false \psk@dotsize \tx@EndDot}
+\@namedef{psas@**}{{false} true \psk@dotsize \tx@EndDot}
+\@namedef{psas@*}{{false} false \psk@dotsize \tx@EndDot}
+\def\pst@par{}
+\def\addto@par#1{%
+\ifx\pst@par\@empty
+\def\pst@par{#1}%
+\else
+\expandafter\def\expandafter\pst@par\expandafter{\pst@par,#1}%
+\fi}
+\def\addbefore@par#1{%
+\ifx\pst@par\@empty
+\def\pst@par{#1}%
+\else
+\toks@{#1}%
+\pst@toks\expandafter{\pst@par}%
+\edef\pst@par{\the\toks@,\the\pst@toks}%
+\fi}
+\def\use@par{%
+\ifx\pst@par\@empty\else
+\expandafter\@psset\pst@par,\@nil
+\def\pst@par{}%
+\fi}
+\def\pst@object#1{%
+\pst@ifstar{%
+\@ifnextchar[%
+{\pst@@object{#1}}%
+{\def\pst@par{}\@nameuse{#1@i}}}}
+\def\pst@@object#1[#2]{%
+\def\pst@par{#2}%
+\@ifnextchar+{\@nameuse{#1@i}}{\@nameuse{#1@i}}}
+\def\newpsobject#1#2#3{%
+\@ifundefined{#2@i}%
+{\@pstrickserr{Graphics object `#2' not defined}\@eha}{%
+\@namedef{#1}{\pst@object{#1}}%
+\@namedef{#1@i}{\addbefore@par{#3}\@nameuse{#2@i}}}%
+\ignorespaces}
+\def\pst@getarrows#1{\@ifnextchar({#1}{\pst@@getarrows{#1}}}
+\def\pst@@getarrows#1#2{\addto@par{arrows=#2}#1}
+\def\begin@ClosedObj{%
+\leavevmode
+\pst@killglue
+\begingroup
+\use@par
+\solid@star
+\ifpsdoubleline \pst@setdoublesep \fi
+\init@pscode}
+\def\end@ClosedObj{%
+\ifpsshadow \pst@closedshadow \fi
+\ifdim\psk@border\p@>\z@ \pst@addborder \fi
+\psk@fillstyle
+\pst@stroke
+\ifpsdoubleline \pst@doublestroke \fi
+\ifshowpoints
+% DG modification begin - Mar. 4, 1995
+%\addto@pscode{Points aload length 2 div cvi /N ED \psdots@iii}%
+\pst@OpenShowPoints
+% DG modification end
+\fi
+\use@pscode
+\endgroup
+\ignorespaces}
+\def\begin@OpenObj{%
+\begin@ClosedObj
+\let\pst@linetype\pst@arrowtype
+\pst@addarrowdef}
+\def\begin@AltOpenObj{%
+\begin@ClosedObj
+\def\pst@repeatarrowsflag{\z@}%
+\def\pst@linetype{0}}
+\def\end@OpenObj{%
+\ifpsshadow \pst@openshadow \fi
+\ifdim\psk@border\p@>\z@ \pst@addborder \fi
+\psk@fillstyle
+\pst@stroke
+\ifpsdoubleline \pst@doublestroke \fi
+\ifnum\pst@repeatarrowsflag>\z@ \pst@repeatarrows \fi
+\ifshowpoints \pst@OpenShowPoints \fi
+\use@pscode
+\endgroup
+\ignorespaces}
+\def\begin@SpecialObj{%
+\leavevmode
+\pst@killglue
+\begingroup
+\use@par
+\init@pscode}
+\def\end@SpecialObj{%
+\use@pscode
+\endgroup
+\ignorespaces}
+\def\pst@code{}%
+\def\init@pscode{%
+\addto@pscode{%
+\pst@number\pslinewidth SLW
+\pst@usecolor\pslinecolor}}
+\def\addto@pscode#1{\xdef\pst@code{\pst@code#1\space}}
+\def\use@pscode{%
+\pstverb{%
+\pst@dict
+\tx@STP
+\pst@newpath
+\psk@origin
+\psk@swapaxes
+\pst@code
+end}%
+\gdef\pst@code{}}
+\def\pst@newpath{newpath }
+\def\pst@@killglue{\unskip\ifdim\lastskip>\z@\expandafter\pst@@killglue\fi}
+\def\KillGlue{\let\pst@killglue\pst@@killglue}
+\def\DontKillGlue{\let\pst@killglue\relax}
+\DontKillGlue
+\def\solid@star{%
+\if@star
+\pslinewidth=\z@
+\psdoublelinefalse
+\def\pslinestyle{none}%
+\def\psk@fillstyle{\psfs@solid}%
+\let\psfillcolor\pslinecolor
+\fi}
+\def\pst@setdoublesep{%
+\pst@getlength\psdoublesep\psdoublesep
+\pslinewidth=2\pslinewidth
+\advance\pslinewidth\psdoublesep\p@
+\let\pst@setdoublesep\relax}
+\def\tx@Shadow{Shadow }
+\def\pst@closedshadow{%
+\addto@pscode{%
+gsave
+\psk@shadowsize \psk@shadowangle \tx@PtoC
+\tx@Shadow
+\pst@usecolor\psshadowcolor
+gsave fill grestore
+stroke
+grestore
+gsave
+\pst@usecolor\psfillcolor
+gsave fill grestore
+stroke
+grestore}}
+\def\pst@openshadow{%
+\addto@pscode{%
+gsave
+\psk@shadowsize \psk@shadowangle \tx@PtoC
+\tx@Shadow
+\pst@usecolor\psshadowcolor
+\ifx\psk@fillstyle\relax\else
+gsave fill grestore
+\fi
+stroke}%
+\pst@repeatarrows
+\addto@pscode{grestore}
+\ifx\psk@fillstyle\relax\else
+\addto@pscode{%
+gsave
+\pst@usecolor\psfillcolor
+gsave fill grestore
+stroke
+grestore}
+\fi}
+\def\pst@addborder{%
+\addto@pscode{%
+gsave
+\psk@border 2 mul
+CLW add SLW
+\pst@usecolor\psbordercolor
+stroke
+grestore}}
+\def\pst@stroke{%
+\ifx\pslinestyle\@none\else
+\addto@pscode{%
+gsave
+\pst@number\pslinewidth SLW
+\pst@usecolor\pslinecolor
+\@nameuse{psls@\pslinestyle}
+grestore}%
+\fi}
+\def\pst@fill#1{\addto@pscode{gsave #1 grestore}}%
+\def\pst@doublestroke{%
+\addto@pscode{%
+gsave
+\psdoublesep SLW
+\pst@usecolor\psdoublecolor
+stroke
+grestore}}
+\def\pst@arrowtype{%
+\ifx\psk@arrowB\@empty 0 \else -2 \fi
+\ifx\psk@arrowA\@empty 0 \else -1 \fi
+add}
+\def\pst@addarrowdef{%
+\addto@pscode{%
+/ArrowA {
+\ifx\psk@arrowA\@empty
+\pst@oplineto
+\else
+\pst@arrowdef{A}
+moveto
+\fi
+} def
+/ArrowB {
+\ifx\psk@arrowB\@empty \else \pst@arrowdef{B} \fi
+} def}}
+\def\pst@arrowdef#1{%
+\ifnum\pst@repeatarrowsflag>\z@
+/Arrow#1c [ 6 2 roll ] cvx def Arrow#1c
+\fi
+\tx@BeginArrow
+\psk@arrowscale
+\@nameuse{psas@\@nameuse{psk@arrow#1}}
+\tx@EndArrow}
+\def\pst@repeatarrows{%
+\addto@pscode{%
+gsave
+\ifx\psk@arrowA\@empty\else
+ArrowAc ArrowA pop pop
+\fi
+\ifx\psk@arrowB\@empty\else
+ArrowBc ArrowB pop pop pop pop
+\fi
+grestore}}
+\def\pst@OpenShowPoints{%
+\addto@pscode{%
+gsave
+\psk@dotsize
+\@nameuse{psds@\psk@dotstyle}
+newpath
+Points aload length 2 div 2 sub cvi /N ED
+N 0 ge
+{ \ifx\psk@arrowA\@empty
+Dot
+\else
+pop pop
+\fi
+N { Dot } repeat
+\ifx\psk@arrowB\@empty
+Dot
+\else
+pop pop
+\fi }
+{ N 2 mul { pop } repeat }
+ifelse
+grestore}}
+\def\pscustom{\pst@object{pscustom}}
+\long\def\pscustom@i#1{%
+\begin@SpecialObj
+\solid@star
+\let\pst@ifcustom\iftrue
+\let\begin@ClosedObj\begin@CustomObj
+\let\end@ClosedObj\endgroup
+\def\begin@OpenObj{\begin@CustomObj\pst@addarrowdef}%
+\let\end@OpenObj\endgroup
+\let\begin@AltOpenObj\begin@CustomObj
+\def\begin@SpecialObj{%
+\begingroup
+\pst@misplaced{special graphics object}%
+\def\addto@pscode####1{}
+\let\end@SpecialObj\endgroup}%
+\def\@multips(##1)(##2)##3##4{\pst@misplaced\multips}%
+\def\psclip##1{\pst@misplaced\psclip}%
+\def\pst@repeatarrowsflag{\z@}%
+\let\pst@setrepeatarrowsflag\relax
+\showpointsfalse
+\let\showpointstrue\relax
+\def\pst@linetype{\pslinetype}%
+\let\psset@liftpen\psset@@liftpen
+\psset@liftpen{\z@}%
+\def\pst@cp{/currentpoint load stopped pop }%
+\def\pst@oplineto{/lineto load stopped { moveto } if }%
+\def\pst@optcp##1##2{%
+\ifnum##1=\z@\def##2{/currentpoint load stopped { 0 0 } if }\fi}%
+\let\caddto@pscode\addto@pscode
+\def\cuse@par##1{{\use@par##1}}%
+\the\pst@customdefs
+\setbox\pst@hbox=\hbox{#1}%
+\psk@fillstyle
+\pst@stroke
+\end@SpecialObj}
+\def\begin@CustomObj{%
+\begingroup
+\use@par
+\addto@pscode{%
+\pst@number\pslinewidth SLW
+\pst@usecolor\pslinecolor}}
+\def\pst@oplineto{moveto }
+\def\pst@cp{}
+\def\pst@optcp#1#2{}
+\def\psset@liftpen#1{}
+\def\psset@@liftpen#1{%
+\ifcase#1\relax
+\def\psk@liftpen{\z@}%
+\def\pst@cp{/currentpoint load stopped pop }%
+\def\pst@oplineto{/lineto load stopped { moveto } if }%
+\or
+\def\psk@liftpen{1}%
+\def\pst@cp{}%
+\def\pst@oplineto{/lineto load stopped { moveto } if }%
+\or
+\def\psk@liftpen{2}%
+\def\pst@cp{}%
+\def\pst@oplineto{moveto }%
+\fi}
+\psset@liftpen{0}
+\def\psk@liftpen{-1}
+\def\psset@linetype#1{%
+\pst@getint{#1}\pslinetype
+\ifnum\pst@dimg<-3
+\@pstrickserr{linetype must be greater than -3}\@ehpa
+\def\pslinetype{0}%
+\fi}
+\psset@linetype{0}
+\def\caddto@pscode#1{%
+\@pstrickserr{Command can only be used in \string\pscustom}\@ehpa}
+\let\cuse@par\caddto@pscode
+\def\tx@MSave{%
+/msavemtrx
+[ tx@Dict /msavemtrx known { msavemtrx aload pop } if CM ]
+def }
+\def\tx@MRestore{%
+tx@Dict /msavemtrx known { length 0 gt } { false } ifelse
+{ /msavematrx [ msavematrx aload pop setmatrix ] def }
+if }
+\newtoks\pst@customdefs
+\pst@customdefs{%
+\def\newpath{\addto@pscode{newpath}}%
+\def\moveto(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor moveto}}%
+\def\closepath{\addto@pscode{closepath}}%
+\def\gsave{\begingroup\addto@pscode{gsave}}%
+\def\grestore{\endgroup\addto@pscode{grestore}}%
+% DG/SR modification begin - May 12, 1997 - Patch 2
+%\def\translate(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor moveto}}%
+\def\translate(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor translate}}%
+% DG/SR modification end
+\def\rotate#1{\pst@@getangle{#1}\addto@pscode{\pst@angle rotate}}%
+\def\scale#1{\pst@getscale{#1}\pst@tempg\addto@pscode{\pst@tempg}}%
+\def\msave{\addto@pscode{\tx@MSave}}%
+\def\mrestore{\addto@pscode{\tx@MRestore}}%
+\def\swapaxes{\addto@pscode{-90 rotate -1 1 scale}}%
+\def\stroke{\pst@object{stroke}}%
+\def\fill{\pst@object{fill}}%
+\def\openshadow{\pst@object{openshadow}}%
+\def\closedshadow{\pst@object{closedshadow}}%
+% DG/SR modification begin - Jan. 7, 1998 - Patch 8
+%\def\movepath(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor tx@Shadow}}%
+\def\movepath(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor \tx@Shadow}}%
+% DG/SR modification end
+\def\lineto{\pst@onecoor{lineto}}%
+\def\rlineto{\pst@onecoor{rlineto}}%
+\def\curveto{\pst@threecoor{curveto}}%
+\def\rcurveto{\pst@threecoor{rcurveto}}%
+\def\code#1{\addto@pscode{#1}}%
+\def\coor(#1){\pst@@getcoor{#1}\addto@pscode\pst@coor\@ifnextchar({\coor}{}}%
+\def\rcoor{\pst@getcoors{}{}}%
+\def\dim#1{\pssetlength\pst@dimg{#1}\addto@pscode{\pst@number\pst@dimg}}%
+\def\setcolor#1{%
+\@ifundefined{color@#1}{}{\addto@pscode{\use@color{#1}}}}%
+\def\arrows#1{{\psset@arrows{#1}\pst@addarrowdef}}%
+\let\file\pst@rawfile
+} % END \pst@customdefs
+\def\closedshadow@i{\cuse@par\pst@closedshadow}
+\def\openshadow@i{\cuse@par\pst@openshadow}
+\def\stroke@i{\cuse@par\pst@stroke}%
+\def\fill@i{\cuse@par\psk@fillstyle}%
+\def\pst@onecoor#1(#2){%
+\pst@@getcoor{#2}%
+\addto@pscode{\pst@coor #1}}
+\def\pst@threecoor#1(#2)#3(#4)#5(#6){%
+\begingroup
+\pst@getcoor{#2}\pst@tempa
+\pst@getcoor{#4}\pst@tempb
+% DG/SR modification begin - Aug. 4, 1999 - Patch 11
+%\pst@getcoor{#6}\pst@tembc
+\pst@getcoor{#6}\pst@tempc
+% DG/SR modification end
+\addto@pscode{\pst@tempa \pst@tempb \pst@tempc #1}%
+\endgroup}
+\def\pst@rawfile#1{%
+\begingroup
+\def\do##1{\catcode`##1=12\relax}"
+\dospecials
+\catcode`\%=14
+\pst@@rawfile{#1}%
+\endgroup}
+\def\pst@@rawfile#1{%
+\immediate\openin1 #1
+\ifeof1
+\@pstrickserr{File `#1' not found}\@ehpa
+\else
+\immediate\read1 to \pst@tempg
+\loop
+\ifeof1 \@pstfalse\else\@psttrue\fi
+\if@pst
+\addto@pscode\pst@tempg
+\immediate\read1 to \pst@tempg
+\repeat
+\fi
+\immediate\closein1\relax}
+\def\tx@NArray{NArray }
+\def\tx@NArray{NArray }
+\def\tx@Line{Line }
+\def\tx@Arcto{Arcto }
+\def\tx@CheckClosed{CheckClosed }
+\def\tx@Polygon{Polygon }
+\def\psset@gangle#1{\pst@getangle{#1}\psk@gangle}
+\psset@gangle{0}
+\def\tx@Diamond{Diamond }
+\def\psdiamond{\pst@object{psdiamond}}
+\def\psdiamond@i(#1){%
+\@ifnextchar({\psdiamond@ii(#1)}{\psdiamond@ii(0,0)(#1)}}
+\def\psdiamond@ii(#1)(#2){%
+\begin@ClosedObj
+\pst@getcoor{#1}\pst@tempa
+\pst@getcoor{#2}\pst@tempb
+\addto@pscode{%
+\psline@iii
+pop
+\psk@dimen
+\pst@tempb
+\psk@gangle
+\pst@tempa
+\tx@Diamond}%
+\def\pst@linetype{4}%
+\end@ClosedObj}
+\def\tx@Triangle{Triangle }
+\def\pstriangle{\pst@object{pstriangle}}
+\def\pstriangle@i(#1){%
+\@ifnextchar({\pstriangle@ii(#1)}{\pstriangle@ii(0,0)(#1)}}
+\def\pstriangle@ii(#1)(#2){%
+\begin@ClosedObj
+\pst@getcoor{#1}\pst@tempa
+\pst@getcoor{#2}\pst@tempb
+\addto@pscode{%
+\psline@iii
+pop
+\psk@dimen
+\pst@tempb
+\psk@gangle
+\pst@tempa
+\tx@Triangle}%
+\def\pst@linetype{2}%
+\end@ClosedObj}
+\def\tx@CCA{CCA }
+\def\tx@CCA{CCA }
+\def\tx@CC{CC }
+\def\tx@IC{IC }
+\def\tx@BOC{BOC }
+\def\tx@NC{NC }
+\def\tx@EOC{EOC }
+\def\tx@BAC{BAC }
+\def\tx@NAC{NAC }
+\def\tx@EAC{EAC }
+\def\tx@OpenCurve{OpenCurve }
+\def\tx@AltCurve{AltCurve }
+\def\tx@ClosedCurve{ClosedCurve }
+\def\psset@curvature#1{%
+\edef\pst@tempg{#1 }%
+\expandafter\psset@@curvature\pst@tempg * * * \@nil}
+\def\psset@@curvature#1 #2 #3 #4\@nil{%
+\pst@checknum{#1}\pst@tempg
+\pst@checknum{#2}\pst@temph
+\pst@checknum{#3}\pst@tempi
+\edef\psk@curvature{\pst@tempg \pst@temph \pst@tempi}}
+\psset@curvature{1 .1 0}
+\def\pscurve{\pst@object{pscurve}}
+\def\pscurve@i{%
+\pst@getarrows{%
+\begin@OpenObj
+\pst@getcoors[\pscurve@ii}}
+\def\pscurve@ii{%
+\addto@pscode{%
+\pst@cp
+\psk@curvature\space /c ED /b ED /a ED
+\ifshowpoints true \else false \fi
+\tx@OpenCurve}%
+\end@OpenObj}
+\def\psecurve{\pst@object{psecurve}}
+\def\psecurve@i{%
+\pst@getarrows{%
+\begin@OpenObj
+\pst@getcoors[\psecurve@ii}}
+\def\psecurve@ii{%
+\addto@pscode{%
+\psk@curvature\space /c ED /b ED /a ED
+\ifshowpoints true \else false \fi
+\tx@AltCurve}%
+\end@OpenObj}
+\def\psccurve{\pst@object{psccurve}}
+\def\psccurve@i{%
+\begin@ClosedObj
+\pst@getcoors[\psccurve@ii}
+\def\psccurve@ii{%
+\addto@pscode{%
+\psk@curvature\space /c ED /b ED /a ED
+\ifshowpoints true \else false \fi
+\tx@ClosedCurve}%
+\def\pst@linetype{1}%
+\end@ClosedObj}
+\def\psset@dotsize#1{%
+\pst@expandafter\pst@getdimnum{#1} 0 {} {}\@nil
+\edef\psk@@dotsize{\pst@number\pst@dimg}%
+\let\psk@@@dotsize\pst@tempg
+\edef\psk@dotsize{%
+/DS \psk@@dotsize \psk@@@dotsize CLW mul add 2 div def }}
+\psset@dotsize{2pt 2}
+\def\psset@dotscale#1{%
+\pst@getscale{#1}\psk@dotscale
+\ifx\psk@dotscale\@empty
+\def\psk@xdotscale{1 }%
+\def\psk@ydotscale{1 }%
+\else
+\let\psk@xdotscale\pst@tempg
+\let\psk@ydotscale\pst@temph
+\fi}
+% DG/SR modification begin - Oct. 17, 1997 - Patch 5
+%\psset@dotscale{1}
+% DG/SR modification end
+\def\pst@Getangle#1#2{%
+\pst@getangle{#1}\pst@tempg
+\def\pst@temph{0. }%
+\ifx\pst@tempg\pst@temph
+\def#2{}%
+\else
+\edef#2{\pst@tempg\space rotate }%
+\fi}
+\def\psset@dotangle#1{%
+\pst@getangle{#1}\psk@@dotangle
+\ifdim\psk@@dotangle\p@=\z@
+\let\psk@dotangle\@empty
+\else
+% DG/SR modification begin - Aug. 8, 1997 - Patch 4
+%\edef\psk@dotangle{\psk@@dotangle rotate }
+\edef\psk@dotangle{\psk@@dotangle rotate }%
+% DG/SR modification end
+\fi}
+\psset@dotangle{0}
+\def\pst@getdotsize{%
+\pst@dimg=\psk@@@dotsize\pslinewidth
+\advance\pst@dimg\psk@@dotsize\p@
+\pst@dimh=\psk@ydotscale\pst@dimg
+\pst@dimg=\psk@xdotscale\pst@dimg
+\divide\pst@dimh 2
+\divide\pst@dimg 2\relax}
+% DG/SR modification begin - Oct. 17, 1997 - Patch 5
+\psset@dotscale{1}
+% DG/SR modification end
+\def\psdot{\pst@object{psdot}}
+\def\psdot@i{\@ifnextchar({\psdot@ii}{\psdot@ii(\z@,\z@)}}
+\def\psdot@ii(#1){%
+\begin@SpecialObj
+\pst@@getcoor{#1}%
+\addto@pscode{%
+\psk@dotsize
+\@nameuse{psds@\psk@dotstyle}%
+\pst@coor Dot}%
+\end@SpecialObj}
+\def\psdots{\pst@object{psdots}}
+\def\psdots@i{%
+\begin@SpecialObj
+\pst@getcoors[\psdots@ii}
+\def\psdots@ii{%
+\addto@pscode{false \tx@NArray \psdots@iii}%
+\end@SpecialObj}
+\def\psdots@iii{%
+\psk@dotsize
+\@nameuse{psds@\psk@dotstyle}
+newpath
+n { transform floor .5 add exch floor .5 add exch itransform Dot } repeat}
+% DG: dead code (to suppress until \psset@dotstyle) ? - Aug. 4, 1997
+\def\tx@SQ{SQ }
+\def\tx@ST{ST }
+\def\tx@SP{SP }
+\def\pst@gdot#1{/Dot { gsave T \psk@dotangle \psk@dotscale #1 grestore } def }
+\@namedef{psds@*}{\pst@gdot{0 0 DS \tx@SD}}
+\@namedef{psds@o}{%
+/r2 DS CLW sub def
+\pst@gdot{0 0 DS \tx@SD \pst@usecolor\psfillcolor 0 0 r2 \tx@SD}}
+\@namedef{psds@square*}{%
+/r1 DS .886 mul def
+\pst@gdot{r1 \tx@SQ}}
+\@namedef{psds@square}{%
+/r1 DS .886 mul def /r2 r1 CLW sub def
+\pst@gdot{r1 \tx@SQ \pst@usecolor\psfillcolor r2 \tx@SQ}}
+\@namedef{psds@triangle*}{%
+/y1 DS .778 mul neg def /x1 y1 1.732 mul neg def
+\pst@gdot{x1 y1 \tx@ST}}
+\@namedef{psds@triangle}{%
+/y1 DS .778 mul neg def /x1 y1 1.732 mul neg def
+/y2 y1 CLW add def /x2 y2 1.732 mul neg def
+\pst@gdot{x1 y1 \tx@ST \pst@usecolor\psfillcolor x2 y2 \tx@ST}}
+\@namedef{psds@pentagon*}{%
+/r1 DS 1.149 mul def
+\pst@gdot{r1 \tx@SP}}
+\@namedef{psds@pentagon}{%
+DS .93 mul dup 1.236 mul /r1 ED CLW sub 1.236 mul /r2 ED
+\pst@gdot{r1 \tx@SP \pst@usecolor\psfillcolor r2 \tx@SP}}
+\@namedef{psds@+}{%
+/DS DS 1.253 mul def
+\pst@gdot{DS 0 moveto DS neg 0 L stroke 0 DS moveto 0 DS neg L stroke}}
+\@namedef{psds@|}{%
+\psk@tbarsize CLW mul add 2 div /DS ED
+\pst@gdot{0 DS moveto 0 DS neg L stroke}}
+% DG: end dead code?
+\def\psset@dotstyle#1{%
+\@ifundefined{psds@#1}%
+{\@pstrickserr{Dot style `#1' not defined}\@eha}%
+{\edef\psk@dotstyle{#1}}}
+\psset@dotstyle{*}
+\def\tx@FontDot{FontDot }
+\def\newpsfontdot#1[#2]#3#4{%
+\@namedef{psds@#1}{%
+/#3 \psk@@dotangle [#2] \tx@FontDot
+% DG/SR modification begin - Dec. 12, 1999 - Patch 14
+%/Dot { moveto #4 show } bind def }}
+/Dot { moveto gsave \psk@dotscale #4 show grestore } bind def }}
+% DG/SR modification end
+\def\newpsfontdotH#1[#2]#3#4#5{%
+\@namedef{psds@#1}{%
+/#3 \psk@@dotangle [#2] \tx@FontDot
+/Dot {
+moveto
+\iftrue
+% DG/SR modification begin - Dec. 23, 1999 - Patch 14
+%gsave \pst@usecolor\psfillcolor #5 show grestore
+%\fi
+%#4 show
+gsave \psk@dotscale \pst@usecolor\psfillcolor #5 show grestore
+\fi
+gsave \psk@dotscale #4 show grestore
+% DG/SR modification end
+} bind def }}
+\pstheader{pst-dots.pro}
+\newpsfontdot{*}%
+[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(b)}
+\newpsfontdotH{o}%
+[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(c)}{(b)}
+\newpsfontdotH{Bo}%
+[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(C)}{(b)}
+\newpsfontdotH{triangle}%
+[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(t)}{(u)}
+\newpsfontdotH{Btriangle}%
+[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(T)}{(u)}
+\newpsfontdot{triangle*}%
+[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(u)}
+\newpsfontdotH{square}%
+[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(s)}{(r)}
+\newpsfontdotH{Bsquare}%
+[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(S)}{(r)}
+\newpsfontdot{square*}%
+[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(r)}
+\newpsfontdotH{pentagon}%
+[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(p)}{(q)}
+\newpsfontdotH{Bpentagon}%
+[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(P)}{(q)}
+\newpsfontdot{pentagon*}%
+[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(q)}
+% DG/SR modification begin - Mar. 18, 1997 and Dec. 16, 1999 - Patch 14
+%\newpsfontdot{diamond*}%
+%[1.9 0.0 0.0 1.9 -0.4598 -0.70775]{Symbol}{<E0>}
+%\newpsfontdot{diamond}%
+%[2.3 0.0 0.0 2.3 -0.8533 -0.5336]{Symbol}{<A8>}
+% D.G. modification begin - Jan. 17, 2000
+\newpsfontdotH{diamond}%
+[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(d)}{(l)}
+\newpsfontdotH{Bdiamond}%
+[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(D)}{(l)}
+\newpsfontdot{diamond*}%
+[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(l)}
+% DG/SR modification end
+\newpsfontdot{oplus}%
+[1.44928 0.0 0.0 1.44928 -0.562319 -0.478261]{Symbol}{<C5>}
+\newpsfontdot{otimes}%
+[1.44928 0.0 0.0 1.44928 -0.562319 -0.475362]{Symbol}{<C4>}
+\newpsfontdot{x}%
+[1.8 0.0 0.0 1.8 -0.495 -0.4788]{Symbol}{<B4>}
+\newpsfontdot{+}%
+[2.3 0.0 0.0 2.3 -0.6486 -0.5819]{Times-Roman}{<2B>}
+\newpsfontdot{asterisk}%
+[2.43309 0.0 0.0 2.43309 -0.609489 -1.14477]{Times-Roman}{<2A>}
+\newpsfontdot{B+}%
+[2.3 0.0 0.0 2.3 -0.6555 -0.5819]{Times-Bold}{<2B>}
+\newpsfontdot{Basterisk}%
+[2.29358 0.0 0.0 2.29358 -0.576835 -1.08486]{Times-Bold}{<2A>}
+\newpsfontdot{|}%
+% DG/SR modification begin - Oct. 27, 1997 - Patch 7
+%[1.98413 0.0 0.0 1.98413 -0.258929 -0.712302]{Helvetica}{(|)}
+[1.98413 0.0 0.0 1.38 -0.258929 -0.5]{Helvetica}{(|)}
+% DG/SR modification end
+\newpsfontdot{B|}%
+% DG/SR modification begin - Oct. 27, 1997 - Patch 7
+%[1.98413 0.0 0.0 1.98413 -0.277778 -0.78302]{Helvetica-Bold}{(|)}
+[1.98413 0.0 0.0 1.38 -0.277778 -0.5]{Helvetica-Bold}{(|)}
+% DG/SR modification end
+\iffalse
+\newpsfontdot{*}%
+[2.77778 0.0 0.0 2.77778 -0.638889 -0.813889]{Symbol}{<B7>}
+\newpsfontdot{o}%
+[3.33333 0.0 0.0 3.33333 -0.666667 -1.78167]{Symbol}{<B0>}
+\newpsfontdot{Bo}%
+[4.69484 0.0 0.0 4.69484 -0.78169 -2.97418]{Times-Bold}{<CA>}
+\fi
+\newdimen\pslinearc
+\def\psset@linearc#1{\pssetlength\pslinearc{#1}}
+\psset@linearc{0pt}
+\def\psline{\pst@object{psline}}
+\def\psline@i{%
+\pst@getarrows{%
+\begin@OpenObj
+\pst@getcoors[\psline@ii}}
+\def\psline@ii{%
+\addto@pscode{\pst@cp \psline@iii \tx@Line}%
+\end@OpenObj}
+\def\psline@iii{%
+\ifdim\pslinearc>\z@
+/r \pst@number\pslinearc def
+/Lineto { \tx@Arcto } def
+\else
+/Lineto /lineto load def
+\fi
+\ifshowpoints true \else false \fi}
+\def\qline(#1)(#2){%
+\def\pst@par{}%
+\begin@SpecialObj
+\def\pst@linetype{0}%
+\pst@getcoor{#1}\pst@tempa
+\pst@@getcoor{#2}%
+\addto@pscode{%
+\pst@tempa moveto \pst@coor L
+\@nameuse{psls@\pslinestyle}}%
+\end@SpecialObj}
+\def\pspolygon{\pst@object{pspolygon}}
+\def\pspolygon@i{%
+\begin@ClosedObj
+\def\pst@cp{}%
+\pst@getcoors[\pspolygon@ii}
+\def\pspolygon@ii{%
+\addto@pscode{\psline@iii \tx@Polygon}%
+\def\pst@linetype{1}%
+\end@ClosedObj}
+\def\psset@framearc#1{\pst@checknum{#1}\psk@framearc}
+\psset@framearc{0}
+\def\psset@cornersize#1{%
+\pst@expandafter\psset@@cornersize{#1}\@nil}
+\def\psset@@cornersize#1#2\@nil{%
+\if #1a\relax
+\def\psk@cornersize{\pst@number\pslinearc false }%
+\else
+\def\psk@cornersize{\psk@framearc true }%
+\fi}
+\psset@cornersize{relative}
+\def\tx@Rect{Rect }
+\def\tx@OvalFrame{OvalFrame }
+\def\tx@Frame{Frame }
+\def\psset@dimen#1{%
+\pst@expandafter\psset@@dimen{#1}\@nil}
+\def\psset@@dimen#1#2\@nil{%
+\if #1o\relax
+\def\psk@dimen{.5 }%
+\else
+\if #1m\relax
+\def\psk@dimen{0 }%
+\else
+\if #1i\relax
+\def\psk@dimen{-.5 }%
+\fi
+\fi
+\fi}
+\psset@dimen{outer}
+\def\psframe{\pst@object{psframe}}
+\def\psframe@i(#1){%
+\@ifnextchar({\psframe@ii(#1)}{\psframe@ii(0,0)(#1)}}
+\def\psframe@ii(#1)(#2){%
+\begin@ClosedObj
+\pst@getcoor{#1}\pst@tempa
+\pst@@getcoor{#2}%
+\addto@pscode{\psk@cornersize \pst@tempa \pst@coor \psk@dimen \tx@Frame}%
+\def\pst@linetype{2}%
+\showpointsfalse
+\end@ClosedObj}
+\def\tx@BezierNArray{BezierNArray }
+\def\tx@OpenBezier{OpenBezier }
+\def\tx@ClosedBezier{ClosedBezier }
+\def\tx@BezierShowPoints{BezierShowPoints }
+\def\psbezier{\pst@object{psbezier}}
+\def\psbezier@i{%
+\pst@getarrows{%
+\begin@OpenObj
+\pst@getcoors[\psbezier@ii}}
+\def\psbezier@ii{%
+\addto@pscode{%
+% DG/SR modification begin - Apr. 28, 1997 - Patch 1
+% \psbezier doesn't work inside \pscustom
+%\pst@cp
+% DG/SR modification end
+\ifshowpoints true \else false \fi
+\tx@OpenBezier
+\ifshowpoints \tx@BezierShowPoints \fi}%
+\end@OpenObj}
+\def\pscbezier{\pst@object{pscbezier}}
+\def\pscbezier@i{%
+\begin@ClosedObj
+\pst@getcoors[\pscbezier@ii}
+\def\pscbezier@ii{%
+\addto@pscode{%
+\ifshowpoints true \else false \fi
+\tx@ClosedBezier
+\ifshowpoints \tx@BezierShowPoints \fi}%
+\chardef\pst@linetype=1
+\end@ClosedObj}
+\def\tx@Parab{Parab }
+\def\parabola{\pst@object{parabola}}
+\def\parabola@i{\pst@getarrows\parabola@ii}
+\def\parabola@ii#1(#2)#3(#4){%
+\begin@OpenObj
+\pst@getcoor{#2}\pst@tempa
+\pst@@getcoor{#4}%
+\addto@pscode{\pst@tempa \pst@coor \tx@Parab}%
+\end@OpenObj}
+\def\psset@gridwidth#1{\pst@getlength{#1}\psk@gridwidth}
+\psset@gridwidth{.8pt}
+\def\psset@griddots#1{%
+\pst@cntg=#1\relax
+\edef\psk@griddots{\the\pst@cntg}}
+\psset@griddots{0}
+\def\psset@gridcolor#1{\pst@getcolor{#1}\psgridcolor}
+\psset@gridcolor{black}
+\def\psset@subgridwidth#1{\pst@getlength{#1}\psk@subgridwidth}
+\psset@subgridwidth{.4pt}
+\def\psset@subgridcolor#1{\pst@getcolor{#1}\pssubgridcolor}
+\psset@subgridcolor{gray}
+\def\psset@subgriddots#1{%
+\pst@cntg=#1\relax\edef\psk@subgriddots{\the\pst@cntg}}
+\psset@subgriddots{0}
+\def\psset@subgriddiv#1{%
+\pst@cntg=#1\relax\edef\psk@subgriddiv{\the\pst@cntg}}
+\psset@subgriddiv{5}
+\def\psset@gridlabels#1{\pst@getlength{#1}\psk@gridlabels}
+\psset@gridlabels{10pt}
+\def\psset@gridlabelcolor#1{\pst@getcolor{#1}\psgridlabelcolor}
+\psset@gridlabelcolor{black}
+\def\tx@Grid{Grid }
+\def\psgrid{\pst@object{psgrid}}
+\def\psgrid@i{\@ifnextchar(%
+{\psgrid@ii}{\expandafter\psgrid@iv\pic@coor}}
+\def\psgrid@ii(#1){\@ifnextchar(%
+{\psgrid@iii(#1)}{\psgrid@iv(0,0)(0,0)(#1)}}
+\def\psgrid@iii(#1)(#2){\@ifnextchar(%
+{\psgrid@iv(#1)(#2)}{\psgrid@iv(#1)(#1)(#2)}}
+\def\psgrid@iv(#1)(#2)(#3){%
+\begin@SpecialObj
+\pst@getcoor{#1}\pst@tempa
+\pst@getcoor{#2}\pst@tempb
+\pst@@getcoor{#3}%
+\ifnum\psk@subgriddiv>1
+\addto@pscode{gsave
+\psk@subgridwidth SLW \pst@usecolor\pssubgridcolor
+\pst@tempb \pst@coor \pst@tempa
+\pst@number\psxunit \pst@number\psyunit
+\psk@subgriddiv\space \psk@subgriddots\space
+{} 0 \tx@Grid grestore}%
+\fi
+\addto@pscode{gsave
+\psk@gridwidth SLW \pst@usecolor\psgridcolor
+\pst@tempb \pst@coor \pst@tempa
+\pst@number\psxunit \pst@number\psyunit
+1 \psk@griddots\space { \pst@usecolor\psgridlabelcolor }
+\psk@gridlabels \tx@Grid grestore}%
+\end@SpecialObj}
+\newif\ifpsmathbox
+\psmathboxtrue
+\def\pst@mathflag{\z@}
+\newtoks\everypsbox
+\let\pst@thisbox\relax
+\long\def\pst@makenotverbbox#1#2{%
+\edef\pst@mathflag{%
+\ifpsmathbox\ifmmode\ifinner 1\else 2\fi\else \z@\fi\else \z@\fi}%
+\setbox\pst@hbox=\hbox{%
+\ifcase\pst@mathflag\or$\m@th\textstyle\or$\m@th\displaystyle\fi
+{\pst@thisbox\the\everypsbox#2}%
+\ifnum\pst@mathflag>\z@$\fi}%
+#1}
+\def\pst@makeverbbox#1{%
+\def\pst@afterbox{#1}%
+\edef\pst@mathflag{%
+\ifpsmathbox\ifmmode\ifinner 1\else 2\fi\else \z@\fi\else \z@\fi}%
+\afterassignment\pst@beginbox
+\setbox\pst@hbox\hbox}
+\def\pst@beginbox{%
+\ifcase\pst@mathflag\or$\m@th\or$\m@th\displaystyle\fi
+\bgroup\aftergroup\pst@endbox
+\pst@thisbox
+\the\everypsbox}
+\def\pst@endbox{%
+\ifnum\pst@mathflag>\z@$\fi
+\egroup
+\pst@afterbox}
+\def\pst@makebox{\pst@@makebox}
+\def\psverbboxtrue{\def\pst@@makebox{\pst@makeverbbox}}
+\def\psverbboxfalse{\def\pst@@makebox{\pst@makenotverbbox}}
+\psverbboxfalse
+\def\pst@longbox{%
+\def\pst@makebox{%
+\gdef\pst@makebox{\pst@@makebox}%
+\pst@makelongbox}}
+\def\pst@makelongbox#1{%
+\def\pst@afterbox{#1}%
+\edef\pst@mathflag{%
+\ifpsmathbox\ifmmode\ifinner 1\else 2\fi\else \z@\fi\else \z@\fi}%
+\setbox\pst@hbox\hbox\bgroup
+\aftergroup\pst@afterbox
+\ifcase\pst@mathflag\or$\m@th\or$\m@th\displaystyle\fi
+\begingroup
+\pst@thisbox
+\the\everypsbox}
+\def\pst@endlongbox{%
+\endgroup
+\ifnum\pst@mathflag>\z@$\fi
+\egroup}
+\def\pslongbox#1#2{%
+\@namedef{#1}{\pst@longbox#2}%
+\@namedef{end#1}{\pst@endlongbox}}
+\newdimen\psframesep
+\def\psset@framesep#1{\pssetlength\psframesep{#1}}
+\psset@framesep{3pt}
+\newif\ifpsboxsep
+\def\psset@boxsep#1{\@nameuse{psboxsep#1}}
+\psset@boxsep{true}
+\def\pst@useboxpar{%
+\use@par
+\if@star
+\let\pslinecolor\psfillcolor
+\solid@star
+\let\solid@star\relax
+\fi
+\ifpsdoubleline \pst@setdoublesep \fi}
+\def\psframebox{\pst@object{psframebox}}
+\def\psframebox@i{\pst@makebox\psframebox@ii}
+\def\psframebox@ii{%
+\begingroup
+\pst@useboxpar
+\pst@dima=\pslinewidth
+\advance\pst@dima by \psframesep
+\pst@dimc=\wd\pst@hbox\advance\pst@dimc by \pst@dima
+\pst@dimb=\dp\pst@hbox\advance\pst@dimb by \pst@dima
+\pst@dimd=\ht\pst@hbox\advance\pst@dimd by \pst@dima
+\setbox\pst@hbox=\hbox{%
+\ifpsboxsep\kern\pst@dima\fi
+\begin@ClosedObj
+\addto@pscode{%
+\psk@cornersize
+\pst@number\pst@dima neg
+\pst@number\pst@dimb neg
+\pst@number\pst@dimc
+\pst@number\pst@dimd
+.5
+\tx@Frame}%
+\def\pst@linetype{2}%
+\showpointsfalse
+\end@ClosedObj
+\box\pst@hbox
+\ifpsboxsep\kern\pst@dima\fi}%
+\ifpsboxsep\dp\pst@hbox=\pst@dimb\ht\pst@hbox=\pst@dimd\fi
+\leavevmode\box\pst@hbox
+\endgroup}
+\def\psdblframebox{\pst@object{psdblframebox}}
+\def\psdblframebox@i{\addto@par{doubleline=true}\psframebox@i}
+\def\psclip#1{%
+\leavevmode
+\begingroup
+\begin@psclip
+\begingroup
+\def\use@pscode{%
+\pstVerb{%
+\pst@dict
+/mtrxc CM def
+CP CP T
+\tx@STV
+\psk@origin
+\psk@swapaxes
+newpath
+\pst@code
+clip
+newpath
+mtrxc setmatrix
+moveto
+0 setgray
+end}%
+\gdef\pst@code{}}%
+\def\@multips(##1)(##2)##3##4{\pst@misplaced\multips}%
+\def\nc@object##1##2##3##4{\pst@misplaced{node connection}}%
+\hbox to\z@{#1}%
+\endgroup
+\def\endpsclip{%
+\end@psclip
+\endgroup}%
+\ignorespaces}
+\def\endpsclip{\pst@misplaced\endpsclip}
+\let\begin@psclip\relax
+\def\end@psclip{\pstVerb{currentpoint initclip moveto}}
+\def\AltClipMode{%
+\def\end@psclip{\pstVerb{\pst@grestore}}%
+\def\begin@psclip{\pstVerb{gsave}}}
+\def\clipbox{\@ifnextchar[{\clipbox@}{\clipbox@[\z@]}}
+% DG modification begin - Apr. 3, 1997
+% From paulus@immd5.informatik.uni-erlangen.de (Dietrich Paulus)
+%\def\clipbox@[#1]{\pst@makebox\clipbox@@{#1}}
+\def\clipbox@[#1]{\pst@makebox{\clipbox@@{#1}}}
+% DG modification end
+\def\clipbox@@#1{%
+\pssetlength\pst@dimg{#1}%
+\leavevmode\hbox{%
+\begin@psclip
+\pst@Verb{%
+CM \tx@STV CP T newpath
+/a \pst@number\pst@dimg def
+/w \pst@number{\wd\pst@hbox}a add def
+/d \pst@number{\dp\pst@hbox}a add neg def
+/h \pst@number{\ht\pst@hbox}a add def
+a neg d moveto
+a neg h L
+w h L
+w d L
+closepath
+clip
+newpath
+0 0 moveto
+setmatrix}%
+\unhbox\pst@hbox
+\end@psclip}}
+\def\psshadowbox{\pst@object{psshadowbox}}
+\def\psshadowbox@i{\pst@makebox\psshadowbox@ii}
+\def\psshadowbox@ii{%
+\begingroup
+\pst@useboxpar
+\psshadowtrue
+\psboxseptrue
+\def\psk@shadowangle{-45 }%
+\setbox\pst@hbox=\hbox{\psframebox@ii}%
+\pst@dimh=\psk@shadowsize\p@
+\pst@dimh=.7071\pst@dimh
+\pst@dimg=\dp\pst@hbox
+\advance\pst@dimg\pst@dimh
+\dp\pst@hbox=\pst@dimg
+\pst@dimg=\wd\pst@hbox
+\advance\pst@dimg\pst@dimh
+\wd\pst@hbox=\pst@dimg
+\leavevmode
+\box\pst@hbox
+\endgroup}
+%$
+\def\pscirclebox{\pst@object{pscirclebox}}
+\def\pscirclebox@i{\pst@makebox\pscirclebox@ii}
+\def\pscirclebox@ii{%
+\begingroup
+\pst@useboxpar
+\setbox\pst@hbox=\hbox{%
+\pst@nodehook
+\pscirclebox@iii
+\box\pst@hbox}%
+\ifpsboxsep \pscirclebox@sep \fi
+\leavevmode
+\box\pst@hbox
+\endgroup}
+\def\pscirclebox@iii{%
+\if@star
+\pslinewidth\z@
+\pstverb{\pst@dict \tx@STP \pst@usecolor\psfillcolor
+newpath \pscirclebox@iv \tx@SD end}%
+\else
+\begin@ClosedObj
+\def\pst@linetype{4}\showpointsfalse
+\addto@pscode{%
+\pscirclebox@iv CLW 2 div add 0 360 arc closepath}%
+\end@ClosedObj
+\fi}
+\def\pscirclebox@iv{%
+\pst@number{\wd\pst@hbox}2 div
+\pst@number{\ht\pst@hbox}\pst@number{\dp\pst@hbox}add 2 div
+2 copy \pst@number{\dp\pst@hbox}sub 4 2 roll
+\tx@Pyth \pst@number\psframesep add }
+\def\pscirclebox@sep{%
+\pst@dimb=\ht\pst@hbox
+\advance\pst@dimb\dp\pst@hbox
+\divide\pst@dimb 2
+\pst@dima=.5\wd\pst@hbox
+\pst@pyth\pst@dima\pst@dimb\pst@dimc
+\advance\pst@dimc\pslinewidth
+\advance\pst@dimc\psframesep
+\advance\pst@dimb-\pst@dimc
+\setbox\pst@hbox=\hbox to2\pst@dimc{%
+\hss
+\vbox{\kern-\pst@dimb\box\pst@hbox}%
+\hss}%
+\advance\pst@dimb-\dp\pst@hbox
+\dp\pst@hbox=-\pst@dimb}
+\let\pst@nodehook\relax
+\def\psCirclebox{\pst@object{psCirclebox}}
+\def\psCirclebox@i{\pst@makebox\psCirclebox@ii}
+\def\psCirclebox@ii{%
+\begingroup
+\pst@useboxpar
+\pst@dima=\ht\pst@hbox
+\advance\pst@dima\dp\pst@hbox
+\divide\pst@dima\tw@
+\pssetlength\pst@dimb\psk@radius
+\setbox\pst@hbox=\hbox{%
+\pst@nodehook
+\pscircle(.5\wd\pst@hbox,\pst@dima){\pst@dimb}%
+\box\pst@hbox}%
+\ifpsboxsep \psCirclebox@sep \fi
+\leavevmode
+\box\pst@hbox
+\endgroup}
+\def\psCirclebox@sep{%
+\pst@dimc=\pst@dimb
+\advance\pst@dimb-\pst@dima
+\advance\pst@dima\pst@dimc
+\setbox\pst@hbox=\hbox to\tw@\pst@dimc{%
+\hss
+\vrule width \z@ depth \pst@dimb height \pst@dima
+\box\pst@hbox
+\hss}}%
+\def\psovalbox{\pst@object{psovalbox}}
+\def\psovalbox@i{\pst@makebox{\psovalbox@ii}}
+\def\psovalbox@ii{%
+\begingroup
+\pst@useboxpar
+\psovalbox@iii
+\ifpsboxsep\psovalbox@sep\fi
+\leavevmode
+\box\pst@hbox
+\endgroup}
+\def\psovalbox@iii{%
+\psovalbox@iv
+\setbox\pst@hbox=\hbox{%
+\begin@ClosedObj
+\addto@pscode{%
+0 360
+\pst@number\pst@dimc CLW 2 div sub
+\pst@number\pst@dimd CLW 2 div sub
+\pst@number\pst@dima
+\pst@number\pst@dimb
+\tx@Ellipse
+closepath}%
+\def\pst@linetype{2}%
+\end@ClosedObj
+\unhbox\pst@hbox}}
+\def\psovalbox@iv{%
+\pst@dimc=\pslinewidth\advance\pst@dimc\psframesep
+\pst@dimd=\ht\pst@hbox\advance\pst@dimd\dp\pst@hbox
+\pst@dima=.5\wd\pst@hbox
+\pst@dimb=.5\pst@dimd\advance\pst@dimb-\dp\pst@hbox
+\pst@dimd=.707\pst@dimd
+\advance\pst@dimd\pst@dimc
+\advance\pst@dimc.707\wd\pst@hbox}
+\def\psovalbox@sep{%
+\setbox\pst@hbox\hbox to 2\pst@dimc{\hss\unhbox\pst@hbox\hss}%
+\pst@dimg=\pst@dimd
+\advance\pst@dimg-\pst@dimb
+\dp\pst@hbox=\pst@dimg
+\advance\pst@dimd\pst@dimb
+\ht\pst@hbox=\pst@dimd}
+\def\psdiabox{\pst@object{psdiabox}}
+\def\psdiabox@i{\pst@makebox{\psdiabox@ii}}
+\def\psdiabox@ii{%
+\begingroup
+\pst@useboxpar
+\psdiabox@iii
+\ifpsboxsep\psdiabox@sep\fi
+\leavevmode
+\box\pst@hbox
+\endgroup}
+\def\psdiabox@iv{%
+\pst@dimg=.707\pslinewidth
+\advance\pst@dimg.707\psframesep
+\pst@dima=\wd\pst@hbox
+\divide\pst@dima 2
+\pst@dimc=\pst@dima
+\advance\pst@dimc\pst@dimg
+\pst@dimd=\ht\pst@hbox
+\advance\pst@dimd\dp\pst@hbox
+\divide\pst@dimd 2
+\pst@dimb=\pst@dimd
+\advance\pst@dimb-\dp\pst@hbox
+\advance\pst@dimd\pst@dimg}
+\def\psdiabox@iii{%
+\psdiabox@iv
+\setbox\pst@hbox=\hbox{%
+\begin@ClosedObj
+\addto@pscode{%
+\psline@iii
+pop
+.5
+\pst@number\pst@dimc 2 mul \pst@number\pst@dimd 2 mul
+0
+\pst@number\pst@dima \pst@number\pst@dimb
+\tx@Diamond}%
+\def\pst@linetype{4}%
+\end@ClosedObj
+\box\pst@hbox}}
+\def\psdiabox@sep{%
+\setbox\pst@hbox\hbox to 4\pst@dimc{\hss\unhbox\pst@hbox\hss}%
+\multiply\pst@dimd 2
+\advance\pst@dimd\pst@dimb
+\ht\pst@hbox\pst@dimd
+\advance\pst@dimd-2\pst@dimb
+\dp\pst@hbox\pst@dimd}
+\def\psset@trimode#1{\pst@expandafter\psset@@trimode{#1}\@empty\@empty\@nil}
+\def\psset@@trimode#1#2#3\@nil{%
+\let\pst@tempg#1\relax
+\ifx\pst@tempg*%
+\let\psk@@trimode\@empty
+\let\pst@tempg#2\relax
+\else
+\let\psk@@trimode\relax
+\fi
+\edef\psk@trimode{%
+\ifx R\pst@tempg 1 \else\ifx D\pst@tempg 2
+\else\ifx L\pst@tempg 3 \else 0 \fi\fi\fi}}
+\psset@trimode{U}
+\def\pstribox{\pst@object{pstribox}}
+\def\pstribox@i{\pst@makebox{\pstribox@ii}}
+\def\pstribox@ii{%
+\begingroup
+\pst@useboxpar
+\pstribox@iii
+\ifpsboxsep\pstribox@sep\fi
+\leavevmode
+\box\pst@hbox
+\endgroup}
+\def\pstribox@iii{%
+\pstribox@iv
+\setbox\pst@hbox=\hbox{%
+\begin@ClosedObj
+\addto@pscode{%
+\psline@iii
+pop
+.5
+\pst@number\pst@dimc \pst@number\pst@dimd
+\ifodd\psk@trimode exch \fi
+\psk@trimode -90 mul
+\pst@number\pst@dima \pst@number\pst@dimb
+\tx@Triangle}%
+\def\pst@linetype{2}%
+\end@ClosedObj
+\box\pst@hbox}}
+\def\pstribox@iv{%
+\pst@dimh=\pslinewidth
+\advance\pst@dimh\psframesep
+\pst@dimg=\ht\pst@hbox
+\advance\pst@dimg-\dp\pst@hbox
+\divide\pst@dimg 2
+\edef\pst@tempa{\number\pst@dimg sp}% For use by nodes.
+\ifodd\psk@trimode
+\pst@dimb\pst@dimg
+\else
+\pst@dima=\wd\pst@hbox
+\divide\pst@dima 2
+\fi
+\ifcase\psk@trimode
+\pst@dimb=-\dp\pst@hbox
+\advance\pst@dimb-\pst@dimh
+\or
+\pst@dima=-\pst@dimh
+\or
+\pst@dimb=\ht\pst@hbox
+\advance\pst@dimb\pst@dimh
+\or
+\pst@dima=\wd\pst@hbox
+\advance\pst@dima\pst@dimh
+\fi
+\pst@dimd=\dp\pst@hbox
+\advance\pst@dimd\ht\pst@hbox
+\ifx\psk@@trimode\relax
+\pst@dimc=\wd\pst@hbox
+\advance\pst@dimc\ifodd\psk@trimode 1.447\else 1.789\fi\pst@dimh
+\multiply\pst@dimc 2
+\advance\pst@dimd\ifodd\psk@trimode 1.789\else 1.447\fi\pst@dimh
+\multiply\pst@dimd 2
+\else
+\ifodd\psk@trimode
+\advance\pst@dimd 1.1547\wd\pst@hbox
+\advance\pst@dimd 3.4641\pst@dimh
+\pst@dimc=.866\pst@dimd
+\else
+\advance\pst@dimd .866\wd\pst@hbox %.866=(sqrt(3)/2)
+\advance\pst@dimd 3\pst@dimh
+\pst@dimc=1.1547\pst@dimd % 1.1547=(2/sqrt(3))
+\fi
+\fi}
+\def\pstribox@sep{%
+\ifodd\psk@trimode
+\advance\pst@dimb.5\pst@dimd
+\ht\pst@hbox=\pst@dimb
+\advance\pst@dimd-\pst@dimb
+\dp\pst@hbox=\pst@dimd
+\else
+\setbox\pst@hbox\hbox to \pst@dimc{\hss\unhbox\pst@hbox\hss}%
+\global\pst@dimg=.5\pst@dimc
+\fi
+\ifcase\psk@trimode
+\dp\pst@hbox-\pst@dimb
+\advance\pst@dimd\pst@dimb
+\ht\pst@hbox\pst@dimd
+\or
+\pst@dimg=.5\wd\pst@hbox
+\global\advance\pst@dimg-\pst@dima
+\setbox\pst@hbox\hbox to \pst@dimc{\kern-\pst@dima\box\pst@hbox\hss}%
+\or
+\ht\pst@hbox\pst@dimb
+\advance\pst@dimd-\pst@dimb
+\dp\pst@hbox\pst@dimd
+\or
+\pst@dimg=\pst@dimc
+\advance\pst@dimg-\pst@dima
+\global\advance\pst@dimg.5\wd\pst@hbox
+\setbox\pst@hbox\hbox to \pst@dimc{%
+\hss\box\pst@hbox\kern\psframesep\kern\pslinewidth}%
+\fi}
+\def\psset@arcsepA#1{\pst@getlength{#1}\psk@arcsepA}
+\def\psset@arcsepB#1{\pst@getlength{#1}\psk@arcsepB}
+\def\psset@arcsep#1{%
+\psset@arcsepA{#1}\let\psk@arcsepB\psk@arcsepA}
+\psset@arcsep{0}
+\def\tx@ArcArrow{ArcArrow }
+\def\psarc{\pst@object{psarc}}
+\def\psarc@i{%
+\@ifnextchar({\psarc@iii}{\psarc@ii}}
+\def\psarc@ii#1{\addto@par{arrows=#1}%
+\@ifnextchar({\psarc@iii}{\psarc@iii(0,0)}}
+\def\psarc@iii(#1)#2#3#4{%
+\begin@OpenObj
+\pst@getangle{#3}\pst@tempa
+\pst@getangle{#4}\pst@tempb
+\pst@@getcoor{#1}%
+\pssetlength\pst@dima{#2}%
+\addto@pscode{\psarc@iv \psarc@v}%
+\gdef\psarc@type{0}%
+\showpointsfalse
+\end@OpenObj}
+\def\psarc@iv{%
+\pst@coor /y ED /x ED
+/r \pst@number\pst@dima def
+/c 57.2957 r \tx@Div def
+/angleA
+\pst@tempa
+\psk@arcsepA c mul 2 div
+\ifcase \psarc@type add \or sub \fi
+def
+/angleB
+\pst@tempb
+\psk@arcsepB c mul 2 div
+\ifcase \psarc@type sub \or add \fi
+def
+\ifshowpoints\psarc@showpoints\fi
+\ifx\psk@arrowA\@empty
+\ifnum\psk@liftpen=2
+r angleA \tx@PtoC
+y add exch x add exch
+moveto
+\fi
+\fi}
+\def\psarc@v{%
+x y r
+angleA
+\ifx\psk@arrowA\@empty\else
+{ ArrowA CP }
+{ \ifcase\psarc@type add \or sub \fi }
+\tx@ArcArrow
+\fi
+angleB
+\ifx\psk@arrowB\@empty\else
+{ ArrowB }
+{ \ifcase\psarc@type sub \or add \fi }
+\tx@ArcArrow
+\fi
+\ifcase\psarc@type arc \or arcn \fi}
+\def\psarc@type{0}
+\def\psarc@showpoints{%
+gsave
+newpath
+x y moveto
+x y r \pst@tempa \pst@tempb
+\ifcase\psarc@type arc \or arcn \fi
+closepath
+CLW 2 div SLW
+[ \psk@dash\space ] 0 setdash stroke
+grestore }
+\def\psarcn{\pst@object{psarcn}}
+\def\psarcn@i{\def\psarc@type{1}\psarc@i}
+\def\pscircle{\pst@object{pscircle}}
+\def\pscircle@i{\@ifnextchar({\pscircle@do}{\pscircle@do(0,0)}}
+\def\pscircle@do(#1)#2{%
+\if@star
+{\use@par\qdisk(#1){#2}}%
+\else
+\begin@ClosedObj
+\pst@@getcoor{#1}%
+\pssetlength\pst@dimc{#2}%
+\def\pst@linetype{4}%
+\addto@pscode{%
+\pst@coor
+\pst@number\pst@dimc
+\psk@dimen CLW mul sub
+0 360 arc
+closepath}%
+\showpointsfalse
+\end@ClosedObj
+\fi
+\ignorespaces}
+\def\qdisk(#1)#2{%
+\def\pst@par{}%
+\begin@SpecialObj
+\pst@@getcoor{#1}%
+\pssetlength\pst@dimg{#2}%
+\addto@pscode{\pst@coor \pst@number\pst@dimg \tx@SD}%
+\end@SpecialObj}
+\def\psset@radius#1{\pst@@getlength{#1}\psk@radius}
+\psset@radius{.25cm}
+\def\psCircle{\pst@object{psCircle}}
+\def\psCircle@i{\@ifnextchar({\psCircle@ii}{\psCircle@ii(0,0)}}
+\def\psCircle@ii(#1){\pscircle@do(#1){\psk@radius}}
+\def\pswedge{\pst@object{pswedge}}
+\def\pswedge@i{\@ifnextchar({\pswedge@ii}{\pswedge@ii(0,0)}}
+\def\pswedge@ii(#1)#2#3#4{%
+\begin@ClosedObj
+\pssetlength\pst@dimc{#2}
+\pst@getangle{#3}\pst@tempa
+\pst@getangle{#4}\pst@tempb
+\pst@@getcoor{#1}%
+\def\pst@linetype{1}%
+\addto@pscode{%
+\pst@coor
+2 copy
+moveto
+\pst@number\pst@dimc \psk@dimen CLW mul sub % Adjusted radius
+\pst@tempa \pst@tempb
+arc
+closepath}%
+\showpointsfalse
+\end@ClosedObj}
+\def\tx@Ellipse{Ellipse }
+\def\psellipse{\pst@object{psellipse}}
+\def\psellipse@i(#1){\@ifnextchar(%
+{\psellipse@ii(#1)}{\psellipse@ii(0,0)(#1)}}
+\def\psellipse@ii(#1)(#2){%
+\begin@ClosedObj
+\pst@getcoor{#1}\pst@tempa
+\pst@@getcoor{#2}%
+\addto@pscode{%
+0 360
+\pst@coor
+\ifdim\psk@dimen\p@=\z@\else
+\psk@dimen CLW mul
+dup 4 -1 roll sub neg 3 1 roll sub
+\fi
+\pst@tempa
+\tx@Ellipse
+closepath}%
+\def\pst@linetype{2}%
+\end@ClosedObj}
+\def\multips{\@ifnextchar({\def\pst@par{}\multips@ii}{\multips@i}}
+\def\multips@i#1{\def\pst@par{rot=#1}\multips@ii}
+\def\multips@ii(#1){\@ifnextchar({\multips@iii(#1)}{\multips@iii(\z@,\z@)(#1)}}
+\long\def\multips@iii(#1)(#2)#3#4{%
+\begingroup
+\use@par
+\pst@getcoor{#1}\pst@tempa
+\pst@@getcoor{#2}%
+\pst@cnta=#3\relax
+\init@pscode
+\addto@pscode{%
+\pst@tempa T \the\pst@cnta\space \pslbrace
+gsave \ifx\psk@rot\@empty\else\psk@rot rotate \fi}%
+\hbox to\z@{%
+\def\init@pscode{%
+\addto@pscode{%
+gsave
+\pst@number\pslinewidth SLW
+\pst@usecolor\pslinecolor}}%
+\def\use@pscode{\addto@pscode{grestore}}%
+\def\psclip##1{\pst@misplaced\psclip}%
+\def\nc@object##1##2##3##4{\pst@misplaced{node connection}}%
+#4}%
+\addto@pscode{grestore \pst@coor T \psrbrace repeat}%
+\leavevmode
+\use@pscode
+\endgroup
+\ignorespaces}
+\def\scalebox#1{\pst@makebox{\@scalebox{#1}}}
+\def\@scalebox#1{%
+\begingroup
+\pst@getscale{#1}\pst@tempa
+\let\pst@tempc\pst@tempg
+\let\pst@tempd\pst@temph
+\@@scalebox
+\endgroup}
+\def\@@scalebox{%
+\leavevmode
+\hbox{%
+\ifdim\pst@tempd\p@<\z@
+\pst@dimg=\pst@tempd\ht\pst@hbox
+\pst@dimh=\pst@tempd\dp\pst@hbox
+\dp\pst@hbox=-\pst@dimg
+\ht\pst@hbox=-\pst@dimh
+\else
+\ht\pst@hbox=\pst@tempd\ht\pst@hbox
+\dp\pst@hbox=\pst@tempd\dp\pst@hbox
+\fi
+\pst@dima=\pst@tempc\wd\pst@hbox
+\ifdim\pst@dima<\z@\kern-\pst@dima\fi
+\pst@Verb{CP CP translate \pst@tempa \tx@NET}%
+\hbox to \z@{\box\pst@hbox\hss}%
+\pst@Verb{%
+CP CP translate
+1 \pst@tempc div 1 \pst@tempd div scale
+\tx@NET}%
+\ifdim\pst@dima>\z@\kern\pst@dima\fi}}
+\pslongbox{Scalebox}{\scalebox}
+\def\scaleboxto(#1,#2){\pst@makebox{\@scaleboxto(#1,#2)}}
+\def\@scaleboxto(#1,#2){%
+\begingroup
+\pssetlength\pst@dima{#1}%
+\pssetlength\pst@dimb{#2}%
+\ifdim\pst@dima=\z@\else
+\pst@divide{\pst@dima}{\wd\pst@hbox}\pst@tempc
+\edef\pst@tempc{\pst@tempc\space}%
+\fi
+\ifdim\pst@dimb=\z@
+\ifdim\pst@dima=\z@
+\@pstrickserr{%
+\string\scaleboxto\space dimensions cannot both be zero}\@ehpa
+\def\pst@tempa{}%
+\def\pst@tempc{1 }%
+\def\pst@tempd{1 }%
+\else
+\let\pst@tempd\pst@tempc
+\fi
+\else
+\pst@dimc=\ht\pst@hbox
+\advance\pst@dimc\dp\pst@hbox
+\pst@divide{\pst@dimb}{\pst@dimc}\pst@tempd
+\edef\pst@tempd{\pst@tempd\space}%
+\ifdim\pst@dima=\z@ \let\pst@tempc\pst@tempd \fi
+\fi
+\edef\pst@tempa{\pst@tempc \pst@tempd scale }%
+\@@scalebox
+\endgroup}
+\pslongbox{Scaleboxto}{\scaleboxto}
+\def\tx@Rot{Rot }
+\def\rotateleft{\pst@makebox{\@rotateleft\pst@hbox}}
+\def\@rotateleft#1{%
+\leavevmode\hbox{\hskip\ht#1\hskip\dp#1\vbox{\vskip\wd#1%
+\pst@Verb{90 \tx@Rot}
+\vbox to \z@{\vss\hbox to \z@{\box#1\hss}\vskip\z@}%
+\pst@Verb{-90 \tx@Rot}}}}
+\def\rotateright{\pst@makebox{\@rotateright\pst@hbox}}
+\def\@rotateright#1{%
+\hbox{\hskip\ht#1\hskip\dp#1\vbox{\vskip\wd#1%
+\pst@Verb{-90 \tx@Rot}
+\vbox to \z@{\hbox to \z@{\hss\box#1}\vss}%
+\pst@Verb{90 \tx@Rot}}}}
+\def\rotatedown{\pst@makebox{\@rotatedown\pst@hbox}}
+\def\@rotatedown#1{%
+\hbox{\hskip\wd#1\vbox{\vskip\ht#1\vskip\dp#1%
+\pst@Verb{180 \tx@Rot}%
+\vbox to \z@{\hbox to \z@{\box#1\hss}\vss}%
+\pst@Verb{-180 \tx@Rot}}}}
+\pslongbox{Rotateleft}{\rotateleft}
+\pslongbox{Rotateright}{\rotateright}
+\pslongbox{Rotatedown}{\rotatedown}
+\def\pst@starbox{%
+\setbox\pst@hbox\hbox{\psframebox*[boxsep=false]{\unhbox\pst@hbox}}}
+\def\pst@@makesmall#1{%
+\setbox#1=\hbox to\z@{\hss\vbox to \z@{\vss\box#1\vss}\hss}}
+\def\pst@@@makesmall#1{%
+\pst@dimh=\psk@xref\wd#1%
+\ifx\psk@yref\relax
+\pst@dimg=\dp#1%
+\else
+\pst@dimg=\psk@yref\ht#1%
+\advance\pst@dimg\psk@yref\dp#1%
+\fi
+\setbox#1=\hbox to\z@{%
+\kern-\pst@dimh\vbox to\z@{\vss\box#1\kern-\pst@dimg}\hss}}
+\def\psset@ref#1{\pst@expandafter\psset@@ref{#1}\@empty,,\@nil}
+\def\psset@@ref#1#2,#3,#4\@nil{%
+\def\psk@xref{.5}%
+\def\psk@yref{.5}%
+\let\pst@makesmall\pst@@@makesmall
+\ifx\@empty#3\@empty
+\@nameuse{getref@#1}%
+\@nameuse{getref@#2}%
+\else
+\pst@checknum{#1#2}\psk@xref
+\pst@checknum{#3}\psk@yref
+\fi}
+\def\getref@c{\let\pst@makesmall\pst@@makesmall}
+\def\getref@t{\def\psk@yref{1}}
+\def\getref@b{\def\psk@yref{0}}
+\def\getref@B{\let\psk@yref\relax}
+\def\getref@l{\def\psk@xref{0}}
+\def\getref@r{\def\psk@xref{1}}
+\psset@ref{c}
+\def\psset@rot#1{%
+\pst@expandafter{\@ifnextchar*{\psset@@@rot}{\psset@@rot}}{#1}\@nil}
+\def\psset@@rot#1\@nil{%
+\def\next##1@#1=##2@##3\@nil{%
+\ifx\relax##2%
+\pst@getangle{#1}\psk@rot
+\else
+\def\psk@rot{##2}%
+\fi}%
+\expandafter\next\pst@rottable @#1=\relax @\@nil}
+\def\psset@@@rot#1#2\@nil{%
+\psset@@rot#2\@nil
+\edef\psk@rot{\pst@rotlist \ifx\psk@rot\@empty\else\psk@rot add \fi}}
+\def\pst@rotlist{mark RAngle /a ED cleartomark a neg }
+\def\pst@rottable{%
+@0=%
+@U=%
+@L=90 %
+@D=180 %
+@R=-90 %
+@N=\pst@rotlist
+@W=\pst@rotlist 90 add %
+@S=\pst@rotlist 180 add %
+@E=\pst@rotlist 90 sub }
+\psset@rot{0}
+\def\tx@RotBegin{RotBegin }
+\def\tx@RotEnd{RotEnd }
+\def\pst@rotate#1#2{%
+\ifx#1\@empty\else
+\setbox#2=\hbox{\pst@Verb{#1 \tx@RotBegin}\box#2\pst@Verb{\tx@RotEnd}}%
+\fi}
+\def\psput@cartesian#1{%
+\hbox to \z@{\kern\pst@dimg{\vbox to \z@{\vss\box#1\vskip\pst@dimh}\hss}}}
+\def\psput@special#1{%
+\hbox{%
+\pst@Verb{{ \pst@coor } \tx@PutCoor \tx@PutBegin}%
+\box#1%
+\pst@Verb{\tx@PutEnd}}}
+\def\tx@PutCoor{PutCoor }
+\def\tx@PutBegin{PutBegin }
+\def\tx@PutEnd{PutEnd }
+\def\rput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\rput@i}{\rput@ii}}}
+\def\rput@i[#1]{\addto@par{ref={#1}}\rput@ii}
+\def\rput@ii{\@ifnextchar({\rput@iv}{\rput@iii}}
+\def\rput@iii#1{\addto@par{rot={#1}}\@ifnextchar({\rput@iv}{\rput@iv(\z@,\z@)}}
+\def\rput@iv(#1){\pst@killglue\pst@makebox{\rput@v{#1}}}
+\def\rput@v#1{%
+\begingroup
+\use@par
+\if@star\pst@starbox\fi
+\pst@makesmall\pst@hbox
+\pst@rotate\psk@rot\pst@hbox
+\psput@{#1}\pst@hbox
+\endgroup
+\ignorespaces}
+\def\multirput{%
+\def\pst@par{}%
+\pst@ifstar{\@ifnextchar[{\multirput@i}{\multirput@ii}}}
+\def\multirput@i[#1]{\addto@par{ref={#1}}\multirput@ii}
+\def\multirput@ii{\@ifnextchar({\multirput@iv}{\multirput@iii}}
+\def\multirput@iii#1{\addto@par{rot={#1}}\multirput@iv}
+\def\multirput@iv(#1){%
+\@ifnextchar({\multirput@v(#1)}{\multirput@v(\z@,\z@)(#1)}}
+\def\multirput@v(#1,#2)(#3,#4)#5{%
+\pst@makebox{\multirput@vi(#1,#2)(#3,#4){#5}}}
+\def\multirput@vi(#1,#2)(#3,#4)#5{%
+\begingroup
+\use@par
+\if@star\pst@starbox\fi
+\pst@makesmall\pst@hbox
+\pst@rotate\psk@rot\pst@hbox
+\pssetxlength\pst@dima{#1}%
+\pssetylength\pst@dimb{#2}%
+\pssetxlength\pst@dimc{#3}%
+\pssetylength\pst@dimd{#4}%
+\pst@cntg=#5\relax
+\pst@cnth=\@ne
+\leavevmode
+\loop
+\vbox to \z@{%
+\vss
+\hbox to \z@{\kern\pst@dima\copy\pst@hbox\hss}%
+\vskip\pst@dimb}%
+\ifnum\pst@cntg>\pst@cnth
+\advance\pst@dima\pst@dimc
+\advance\pst@dimb\pst@dimd
+\advance\pst@cnth\@ne
+\repeat
+\endgroup
+\ignorespaces}
+\newif\if@fixedradius
+\def\cput{\pst@object{cput}}
+\def\cput@i{\@fixedradiusfalse\cput@ii}
+\def\cput@ii{\pst@killglue\@ifnextchar({\cput@iv}{\cput@iii}}
+\def\cput@iii#1{%
+\addto@par{rot={#1}}%
+\@ifnextchar({\cput@iv}{\cput@iv(\z@,\z@)}}
+\def\cput@iv(#1){\pst@makebox{\cput@v{#1}}}
+\def\cput@v#1{%
+\begingroup
+\use@par
+\setbox\pst@hbox=\hbox{%
+\psboxsepfalse
+\if@fixedradius\psCirclebox@ii\else\pscirclebox@ii\fi}%
+\pst@@makesmall\pst@hbox
+\pst@rotate\psk@rot\pst@hbox
+\psput@{#1}\pst@hbox
+\endgroup
+\ignorespaces}
+\def\Cput{\pst@object{Cput}}
+\def\Cput@i{\@fixedradiustrue\cput@ii}
+\newdimen\pslabelsep
+\def\psset@labelsep#1{\pssetlength\pslabelsep{#1}}
+\psset@labelsep{5pt}
+\def\psset@refangle#1{\pst@expandafter\psset@@refangle{#1}\@nil}
+\def\psset@@refangle#1\@nil{%
+\def\next##1@#1=##2"##3@##4\@nil{%
+\ifx\relax##2%
+\pst@getangle{#1}\psk@refangle
+\def\psk@uputref{}%
+\else
+\def\psk@refangle{##2 }%
+\def\psk@uputref{##3}%
+\fi}%
+\expandafter\next\pst@refangletable @#1=\relax"@\@nil}
+\def\pst@refangletable{%
+@r=0"20%
+@u=90"02%
+@l=180"10%
+@d=-90"01%
+@ur=45"22%
+@ul=135"12%
+@dr=-135"21%
+@dl=-45"11}
+\psset@refangle{0}
+% DG/SR modification begin - Mar. 24, 1999 - Patch 10
+%\def\uput{\def\pst@par{}\@ifnextchar[{\uput@ii}{\uput@i}}
+\def\uput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\uput@ii}{\uput@i}}}
+% DG/SR modification end
+\def\uput@i#1{\addto@par{labelsep=#1}\uput@ii}
+\def\uput@ii[#1]{%
+\addto@par{refangle={#1}}%
+\@ifnextchar({\uput@iv}{\uput@iii}}
+\def\uput@iii#1{%
+\addto@par{rot={#1}}%
+\@ifnextchar({\uput@iv}{\uput@iv(\z@,\z@)}}
+\def\uput@iv(#1){\pst@killglue\pst@makebox{\uput@v{#1}}}
+\def\uput@v#1{%
+\begingroup
+\use@par
+\if@star\pst@starbox\fi
+\uput@vi
+\psput@{#1}\pst@hbox
+\endgroup
+\ignorespaces}
+\def\uput@vi{%
+\ifx\psk@uputref\@empty
+\uput@vii\tx@UUput{}%
+\else
+\ifx\psk@rot\@empty
+\expandafter\uput@viii\psk@uputref
+\else
+\uput@vii\tx@UUput{}%
+\fi
+\fi}
+\def\uput@vii#1#2{%
+\edef\pst@coor{%
+\pst@number\pslabelsep
+#2%
+\pst@number{\wd\pst@hbox}%
+\pst@number{\ht\pst@hbox}%
+\pst@number{\dp\pst@hbox}%
+\psk@refangle\space \ifx\psk@rot\@empty\else\psk@rot\space sub \fi
+\tx@Uput #1}%
+\setbox\pst@hbox=\hbox to\z@{\hss\vbox to\z@{\vss\box\pst@hbox\vss}\hss}%
+\setbox\pst@hbox=\psput@special\pst@hbox
+\ifx\psk@rot\@empty\else\pst@rotate\psk@rot\pst@hbox\fi}
+\def\uput@viii#1#2{%
+\ifnum#1>\z@\ifnum#2>\z@\pslabelsep=.707\pslabelsep\fi\fi
+\setbox\pst@hbox=\vbox to\z@{%
+\ifnum#2=1 \vskip\pslabelsep\else\vss\fi
+\hbox to\z@{%
+\ifnum#1=2 \hskip\pslabelsep\else\hss\fi
+\box\pst@hbox
+\ifnum#1=1 \hskip\pslabelsep\else\hss\fi}%
+\ifnum#2=2 \vskip\pslabelsep\else\vss\fi}}
+\def\tx@Uput{Uput }
+\def\tx@UUput{UUput }
+\def\Rput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\Rput@ii}{\Rput@i}}}
+\def\Rput@i#1{\addto@par{labelsep=#1}\Rput@ii}
+\def\Rput@ii[#1]{\addto@par{ref={#1}}\@ifnextchar({\Rput@iv}{\Rput@iii}}
+\def\Rput@iii#1{\addto@par{rot={#1}}\@ifnextchar({\Rput@iv}{\Rput@iv(\z@,\z@)}}
+\def\Rput@iv(#1){\pst@killglue\pst@makebox{\Rput@v{#1}}}
+\def\Rput@v#1{%
+\begingroup
+\use@par
+\if@star\pst@starbox\fi
+\Rput@vi
+\pst@makesmall\pst@hbox
+\pst@rotate\psk@rot\pst@hbox
+\psput@{#1}\pst@hbox
+\endgroup
+\ignorespaces}
+\def\Rput@vi{%
+\pst@dimg=\dp\pst@hbox
+\advance\pst@dimg\pslabelsep
+\dp\pst@hbox=\pst@dimg
+\pst@dimg=\ht\pst@hbox
+\advance\pst@dimg\pslabelsep
+\ht\pst@hbox=\pst@dimg
+\setbox\pst@hbox\hbox{\kern\pslabelsep\box\pst@hbox\kern\pslabelsep}}%
+\def\oldpsput{%
+\def\pst@par{}\pst@ifstar{\@ifnextchar[{\oldpsput@i}{\oldpsput@ii}}}
+\def\oldpsput@i[#1]{\addto@par{ref={#1}}\oldpsput@ii}
+\def\oldpsput@ii{\@ifnextchar<{\oldpsput@iii}{\oldpsput@iv}}
+\def\oldpsput@iii<#1>{\rput@iii{#1}}
+\def\OldPsput{\let\psput\oldpsput}
+\def\NewPsput{\let\psput\rput}
+\def\pspicture{\begingroup\pst@ifstar\pst@picture}
+\def\pst@picture{%
+\@ifnextchar[{\pst@@picture}{\pst@@picture[0]}}
+\def\pst@@picture[#1]#2(#3,#4){%
+\@ifnextchar({\pst@@@picture[#1](#3,#4)}%
+{\pst@@@picture[#1](0,0)(#3,#4)}}
+\def\pst@@@picture[#1](#2,#3)(#4,#5){%
+\pssetxlength\pst@dima{#2}%
+\pssetylength\pst@dimb{#3}%
+\pssetxlength\pst@dimc{#4}%
+\pssetylength\pst@dimd{#5}%
+\ifdim\pst@dima>\pst@dimc
+\pst@dimg=\pst@dima
+\pst@dima=\pst@dimc
+\pst@dimc=\pst@dimg
+\fi
+\ifdim\pst@dimb>\pst@dimd
+\pst@dimg=\pst@dimb
+\pst@dimb=\pst@dimd
+\pst@dimd=\pst@dimg
+\fi
+\def\pst@tempa{#1}%
+\setbox\pst@hbox=\hbox\bgroup
+\begingroup\KillGlue
+\@ifundefined{@latexerr}{}{\let\unitlength\psunit}%
+\edef\pic@coor{(#2,#3)(#2,#3)(#4,#5)}\ignorespaces}
+\def\pic@coor{(0,0)(0,0)(10,10)}
+\def\endpspicture{%
+\pst@killglue
+\endgroup
+\egroup
+\ifdim\wd\pst@hbox=\z@\else
+%\@pstrickserr{Extraneous space in the pspicture environment}%
+%{Type \space <return> \space to procede.}%
+\fi
+\ht\pst@hbox=\pst@dimd
+\dp\pst@hbox=-\pst@dimb
+\setbox\pst@hbox=\hbox{%
+\kern-\pst@dima
+\ifx\pst@tempa\@empty\else
+\advance\pst@dimd-\pst@dimb
+\pst@dimd=\pst@tempa\pst@dimd
+\advance\pst@dimd\pst@dimb
+\lower\pst@dimd
+\fi
+\box\pst@hbox
+\kern\pst@dimc}%
+\if@star\setbox\pst@hbox=\hbox{\clipbox@@\z@}\fi
+\leavevmode\box\pst@hbox
+\endgroup}
+\@namedef{pspicture*}{\pspicture*}
+\@namedef{endpspicture*}{\endpspicture}
+\def\tx@BeginOL{BeginOL }
+\def\tx@InitOL{InitOL }
+\def\pst@initoverlay#1{\pst@Verb{\tx@InitOL /TheOL (#1) def}}
+\def\AltOverlayMode{%
+\def\pst@initoverlay##1{%
+\pst@Verb{%
+\tx@InitOL
+/Visible { initclip } def
+/Invisible {
+CP newpath OLUnit itransform moveto clip newpath moveto
+} def
+/TheOL (##1) def}}}
+\def\pst@overlay#1{%
+\edef\curr@overlay{#1}%
+\pst@Verb{(#1) BOL}%
+\aftergroup\pst@endoverlay}
+\def\pst@endoverlay{%
+\pst@Verb{(\curr@overlay) BOL}}
+\def\curr@overlay{all}
+\newbox\theoverlaybox
+\def\overlaybox{%
+\global\setbox\theoverlaybox=\hbox\bgroup
+\begingroup
+\let\psoverlay\pst@overlay
+\def\overlaybox{%
+\@pstrickserr{Overlays cannot be nested}\@eha}%
+\def\putoverlaybox{%
+\@pstrickserr{You must end the overlay box
+before using \string\putoverlaybox}}%
+\psoverlay{main}%
+\ignorespaces}
+\def\endoverlaybox{\endgroup\egroup}
+\def\putoverlaybox#1{%
+\hbox{\pst@initoverlay{#1}\copy\theoverlaybox}}
+\def\psoverlay{\@pstrickserr{\string\psoverlay\space
+can only be used after \string\overlaybox}}
+\ifx\pstcustomize\relax \input pstricks.con \fi
+\catcode`\@=\PstAtCode\relax
+%
+\endinput
+%%
+%% END: pstricks.tex