Retour

pstricks.tex

Télécharger le fichier
%% pstricks.tex
%% COPYRIGHT 1993, 1994, 1999 by Timothy Van Zandt, tvz@nwu.edu.
%% COPYRIGHT 2000-2003 by Denis Girou.
%% Copyright 2004-2008 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.
%
% This work has the LPPL maintenance status "maintained".
%
% This Current Maintainer of this work is Herbert Voss
%
% This work consists of the file pstricks.tex, PostScript macros
% for Generic TeX.
% See the PSTricks User's Guide for description.
% This uses the header file `pstricks.pro'.
%
\def\fileversion{1.16b}
\def\filedate{2007/10/13}
%
\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
%
% hv 2007-10-16 to fix the bug in pst-node with \\[name=...]
\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
}
% end bugfix
\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{% 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 -----
\iffalse
\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%
}
\fi
% ----- the old pst@pyth end -----
%
\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}
%
\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{pstricks.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 }
%
%--------------------------------------- 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}
\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{% 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%
}
% DG/SR modification end
\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
\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\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}
\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}}}
%------------ hv 1.10 beg -------------------
\def\newpsstyle#1#2{\@namedef{pscs@#1}{%
  \def\pst@tempA{#2}%
  \ifx\pst@tempA\@empty\else\psset{#2}\fi}}
%------------ hv 1.10 end -------------------
%------------ hv 1.16 begin -------------------
\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
  \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}}
% v 1.05   begin
\def\psset@PstDebug#1{\pst@getint{#1}{\Pst@Debug}}% hv 2004-06-22
\psset{PstDebug=0}
% end
\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
\catcode`\*=13
\gdef\pst@activecoor{%
  \def|{\string|}%
  \def;{\string;}%
  \def!{\string!}%
  \def*{\string*}%          algebraic expression hv 2007-11-17
}
\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%          node names should start with a letter
    \def\next{\node@coor#1}%
  \else
    \ifx#1[\relax%          special node coor: [..]A
      \def\next{\Node@coor[}%
    \else
      \ifx#1!\relax%            PostScript code: x y
        \def\next{\raw@coor}%
      \else
        \ifx#1*\relax%          algebraic PostScript code: x f(x)
          \def\next{\alg@coor}%
    \else
          \def\next{\special@@@coor#1}%
    \fi
      \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}%
  \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#1;#2\@nil{%       PostScript code
  \edef\pst@coor{%
    #1 \pst@number\psyunit mul exch \pst@number\psxunit mul exch }%
}
\def\alg@coor#1 #2;#3\@nil{%        algebraicPostScript code
  \edef\pst@coor{%
    /x #1 def
    /Func (#2) AlgParser cvx def
    x Func
    \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}%
% ----------- 1.10 beg hv -------------------
%  \edef\psk@origin{\pst@coor \tx@NET }}
  \edef\psk@origin{\pst@coor T }}
% ----------- 1.10 end hv -------------------
\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\psset@linejoin#1{\pst@getint{#1}\psk@linejoin}%    hv 2007-20-13
\def\tx@setlinejoin{\psk@linejoin\space setlinejoin }%  hv 2007-20-13
\psset@linejoin{0}%                 hv 2007-20-13
%
\def\pst@missing{%
  \z@
  \@pstrickserr{Missing number or dimension. 0 substituted}\@ehpa}
%
%%------------------- begin patch 15 HV 2004-05-15 -------------
%\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}
\def\pst@empty{\z@}
\def\psset@dash#1{% black white [ black white ]
  \pst@expandafter\psset@@dash{#1} {\pst@empty} {\pst@empty} %
                  {\pst@missing} {\pst@missing} {}\@nil
  \edef\psk@dash{\pst@number\pst@dimg \pst@number\pst@dimh
                 \pst@number\pst@dimc \pst@number\pst@dimd}%
}
\def\psset@@dash#1 #2 #3 #4 #5\@nil{%
  \pssetlength\pst@dimg{#1}%
  \pssetlength\pst@dimh{#2}%
  \pssetlength\pst@dimc{#3}%
  \pssetlength\pst@dimd{#4}%
}
\psset@dash{5pt 3pt 0pt 0pt}% black white black white
%%------------------- end patch 15 HV 2004-05-15 -------------
\newif\ifpsdashadjust
\def\psset@dashadjust#1{\@nameuse{psdashadjust#1}}
\psset@dashadjust{true}
\def\tx@DashLine{DashLine }
\def\psls@dashed{%
%%--------------------------------- hv 2006-04-29 beg ---------------------
  \psk@linecap\space setlinecap
%%--------------------------------- hv 2006-04-29 end ---------------------
  \ifpsdashadjust
%    \psk@dash \pst@linetype\space \tx@DashLine
    \psk@dash \@ifundefined{pst@linetype}{2}{\pst@linetype}\space \tx@DashLine
  \else
    [ \psk@dash ] 0 setdash stroke
  \fi}
\def\psset@dotsep#1{\pst@getlength{#1}\psk@dotsep}
\psset@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%
}
\def\psset@linestyle#1{%
  \@ifundefined{psls@#1}%
    {\@pstrickserr{Line style `#1' not defined}\@eha}%
    {\edef\pslinestyle{#1}}%
}
\psset@linestyle{solid}
%%--------------------------------- hv 2006-04-29 beg ---------------------
\def\psset@linecap#1{%
  \def\psk@linecap{0}%
  \ifnum#1>-1
    \ifnum#1<3
      \pst@getint{#1}\psk@linecap%
  \fi\fi%
}
\psset{linecap=0}
%--------------------------------- hv 2006-04-29 end ---------------------
%
%--------------------------------- hv 2007-09-09 begin ---------------------
% transparency needs a run through latex -> dvips -> ps2pdf14(!)
% use transpalpha=<mumber> to the the opacity level
%
\def\psset@fillcolor#1{\pst@getcolor{#1}\psfillcolor}
\psset@fillcolor{white}
\def\psset@opacity#1{\pst@checknum{#1}\psk@opacityalpha }
\psset@opacity{1}
\def\psset@shapealpha#1{\pst@checknum{#1}\psk@shapealpha }
\psset@shapealpha{0.6}
\def\psset@blendmode#1{\pst@getint{#1}\psk@blendmode }% must be one of
% /Normal     0
% /Compatible 1
% /Screen     2
% /Multiply   3
% /HardLight  4
\psset@blendmode{0}
%
\def\psfs@none{}
\def\psfs@solid{\pst@fill{\pst@usecolor\psfillcolor \psk@opacityalpha .setopacityalpha fill }}
\def\psfs@eofill{\pst@fill{\pst@usecolor\psfillcolor \psk@opacityalpha .setopacityalpha eofill}}
\def\psfs@shape{%
  \pst@fill{
    \pst@usecolor\psfillcolor
    \ifcase\psk@blendmode
      /Normal \or
      /Compatible \or
      /Screen \or
      /Multiply %\or
%      /Hardlight
    \fi
    .setblendmode \psk@shapealpha .setshapealpha fill }}
%
%--------------------------------- hv 2007-09-09 end ---------------------
%
\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}
% ------------ hv 1.11 ------------
\def\psset@hatchsepinc#1{\pst@getlength{#1}\psk@hatchsepinc}
\def\psset@hatchwidthinc#1{\pst@getlength{#1}\psk@hatchwidthinc}
\psset@hatchwidthinc{0pt}
\psset@hatchsepinc{0pt}
%
\def\pst@linefill{%
  \psk@hatchangle rotate
  \psk@hatchwidth SLW
  \pst@usecolor\pshatchcolor
  \psk@hatchsep
  \psk@hatchsepinc
  \psk@hatchwidthinc
  \tx@LineFill }
% ------------ hv 1.11 ------------
%
\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{,<->,<<->>,>-<,>>-<<,(-),[-]}
\def\pst@arrowtable{,<->,<<->>,>-<,>>-<<,(-),[-],)-(,]-[,|>-<|} % hv --1.12
\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 }
% Redefininition of \psset@arrowscale to store value of X scale factor  hv --1.12
%\def\psset@arrowscale#1{\pst@getscale{#1}\psk@arrowscale}
\def\psset@arrowscale#1{%                                   hv --1.12
  \pst@@arrowscale@i#1 \@nil%                               hv -- 1.12
  \pst@getscale{\pst@arrowscale}\psk@arrowscale}%           hv --1.12
\def\pst@@arrowscale@i#1 #2\@nil{\edef\pst@arrowscale{#1}}% hv --1.12
\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 }
% new definitions of the missing arrows ---- hv 1.1.2
\@namedef{psas@<|}{%
    \psk@tbarsize\space \tx@Tbar
    0 CLW 2 div T
    newpath
    true \psk@arrowinset\space \psk@arrowlength\space \psk@arrowsize\space \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{RoundBracketOut }
\@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
  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
%%-------------------- v.1.04 begin HV 2004-05-18 ----------------
%  0 CLW 2 div L
  0 0.1 L % changed value from 0.5 to 0.1
%%-------------------- v. 1.04 end HV 2004-05-18 ----------------
  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}}}
% ------------------------- 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
    \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
%----------------- hv begin 2006-04-20 ------------- patch 1.14b
  \ifnum\pst@cntg<-3
%  \ifnum\pst@dimg<-3
%----------------- hv end 2004-05-07 ------------- patch 1.14b
    \@pstrickserr{linetype must be greater than -3}\@ehpa
%----------------- hv begin 2004-05-07 ------------- patch 15
%   \def\pslinetype{0}%
    \def\pslinetype{2}%
  \fi%
}
%\psset@linetype{0}
\psset@linetype{2}% otherwise there is a problem when using e.g.
%                     \psaxes[axesstyle=frame,linestyle=dashed]{->}(3,-2)
%----------------- hv end 2004-05-07 ------------- patch 15
%
\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\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{%
% ----------------hv begin 2004-05-07-------------------- patch 15
%  \@ifundefined{color@#1}{}{\addto@pscode{\use@color{#1}}}}%
%    \@ifundefined{color@#1}{}{\addto@pscode{\pst@usecolor{#1}}}}%
    \@ifundefined{\string\color@#1}{}{\addto@pscode{\pst@usecolor{#1}}}}%  hv 1.14  2005-12-17
% ----------------hv end 2004-05-07--------------------
  \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%   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 }
\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%
% hv modification 1.13 2005-11-28
  \solid@star%
% hv modification end
  \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{|}[1.98413 0.0 0.0 1.38 -0.258929 -0.5]{Helvetica}{(|)}
% DG/SR modification begin - Oct. 27, 1997 - Patch 7
%[1.98413 0.0 0.0 1.98413 -0.258929 -0.712302]{Helvetica}{(|)}
% DG/SR modification end
\newpsfontdot{B|}[1.98413 0.0 0.0 1.38 -0.277778 -0.5]{Helvetica-Bold}{(|)}%
% DG/SR modification begin - Oct. 27, 1997 - Patch 7
%[1.98413 0.0 0.0 1.98413 -0.277778 -0.78302]{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
% 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{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)}
%
\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)}
\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)}
\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
\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
  \tx@setlinejoin           % hv 2007-10-13
}
\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%    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@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\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\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\psparabola{\pst@object{psparabola}}%  1.15a  2006-01-05 (hv)
\def\psparabola@i{\pst@getarrows\psparabola@ii}
\def\psparabola@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}
\let\parabola\psparabola% compatibility  (hv)
%
\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@gridfont#1{\def\psk@gridfont{/#1 }}%   hv 2007-11-13
\psset@gridfont{Helvetica}
%
\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%  hv 1.11
    \pst@getcoor{#2}\pst@tempB % hv 1.11
    \pst@@getcoor{#3}%
    \ifnum\psk@subgriddiv>1
      \addto@pscode{
        gsave
        \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
      \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\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 % 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{\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}
% hv ---- 1.10 2005-05-05 ----------------------> hv begin
\def\psarc@v{%
  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
  \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
  \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{\pst@object{psarcn}}
\def\psarcn@i{\def\psarc@type{1}\psarc@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{\def\pst@par{}\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@tempa \pst@tempb
      \pst@coor
      \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{\def\pst@par{}\pst@object{psellipticarcn}}
\def\psellipticarcn@i{\let\if@psarcn\iftrue\psellipticarc@ii}
%
\def\psellipticarc{\def\pst@par{}\pst@object{psellipticarc}}
\def\psellipticarc@i{\let\if@psarcn\iffalse\psellipticarc@ii}
%
\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{%
  \begin@OpenObj
  \pst@getcoor{#1}\pst@tempa
  \pst@getcoor{#2}\pst@tempb
  \pst@getangle{#3}\pst@tempc
  \pst@getangle{#4}\pst@tempd
  \addto@pscode{\psellipticarc@definearg \psellipticarc@draw}%
  \showpointsfalse
  \end@OpenObj%
}
\def\psellipticarc@definearg{%
  \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
  /angleA
    /d {  \if@psarcn sub \else add \fi } def
    \pst@tempc \psk@arcsepA 2 div
    ArcAdjust
  def
  /angleB
    /d { \if@psarcn add \else sub \fi } def
    \pst@tempd \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
  rx ry scale
  \if@psarcn arcn \else arc \fi
  mtrx setmatrix%
}
\def\psellipticarc@showpoints{%
  gsave
  /mtrx CM def
  xOrig yOrig T
  rx ry scale
  0 0 moveto
  0 0 1 \pst@tempc \pst@tempd
  \ifcase\psarc@type arc \or arcn \fi
  closepath
  mtrx setmatrix
  CLW 2 div SLW
  [ \psk@dash\space ] 0 setdash stroke
  grestore %
}
\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}}%    qdisk does not allow
%  \else%               to use opacity option
    \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
%----------------- 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}}
\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{%
  \pst@killglue
  \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}
%
% ----------- 1.10/12 beg hv -------------------
\newpsstyle{gridstyle}{subgriddiv=0,gridcolor=lightgray,griddots=10,gridlabels=8pt}
\newif\ifshowgrid
\def\psset@showgrid#1{\@nameuse{showgrid#1}}
\psset@showgrid{false}
%
\newdimen\pst@shift
\def\psset@shift#1{\pssetlength\pst@dimg{#1}%
  \pst@shift\pst@dimg}
%  \global\pst@shift\pst@dimg}
\psset@shift{0}
% ----------- 1.10/12 end hv -------------------
%
%
%------------------------------- pspicture ------------------------------
%
\def\pspicture{\begingroup\pst@ifstar\pst@picture}
\def\pst@picture{\@ifnextchar[{\pst@@picture}{\pst@@picture[]}}
\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%
  \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
  \ifshowgrid\psgrid[style=gridstyle]\fi%
% ----------- 1.10/12 end hv -------------------
%  \ignorespaces%
}
\def\pic@coor{(0,0)(0,0)(10,10)}
\newdimen\pst@shift
\def\endpspicture{%
  \pst@killglue
  \global\pst@shift=\pst@shift% in fact of the following endgroup
  \endgroup
  \egroup
  \ifdim\wd\pst@hbox=\z@\else
    %\@pstrickserr{Extraneous space in the pspicture environment}%
    %{Type \space <return> \space to proceed.}%
  \fi
  \ht\pst@hbox=\pst@dimd
  \dp\pst@hbox=-\pst@dimb
  \setbox\pst@hbox=\hbox{%
    \kern-\pst@dima
% ----------- 1.10/12 beg hv -------------------
%    \advance\pst@dimd-\pst@dimb%
%    \pst@dimd=\pst@shift\pst@dimd%
%    \advance\pst@dimd\pst@dimb
    \pst@dimd-\pst@shift
% ----------- 1.10/12 end hv -------------------
    \advance\pst@dimd\pst@dimb
    \lower\pst@dimd%
    \box\pst@hbox%
    \kern\pst@dimc}%
  \if@star\setbox\pst@hbox=\hbox{\clipbox@@\z@}\fi
  \leavevmode\box\pst@hbox
  \endgroup%
  \global\pst@shift\z@% restore value
}
\@namedef{pspicture*}{\pspicture*}
\@namedef{endpspicture*}{\endpspicture}
%
%------------------------------- Overlays ------------------------------
%
\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