summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-13 00:02:55 +0000
committerKarl Berry <karl@freefriends.org>2006-01-13 00:02:55 +0000
commit360eba9a78e9d641caf2d1848f298cb3dbe0c67e (patch)
tree64b39232c984e1f20a8361f6490118e66f1fa90f /Master/texmf-dist/tex/latex
parent0e4cad8b7b88057962b4d86375dac862515b46a2 (diff)
pmgraph
git-svn-id: svn://tug.org/texlive/trunk@1204 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex')
-rw-r--r--Master/texmf-dist/tex/latex/pmgraph/pmgraph.sty2094
1 files changed, 2094 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/pmgraph/pmgraph.sty b/Master/texmf-dist/tex/latex/pmgraph/pmgraph.sty
new file mode 100644
index 00000000000..93b58e33e16
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/pmgraph/pmgraph.sty
@@ -0,0 +1,2094 @@
+\chardef\oldatcatcode=\catcode`@
+\catcode`@=11
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% PMGRAPH.STY --- intermediate version %%
+%% of poor-man-graphics style %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%
+% save old LaTeX macro
+%
+
+\let\ltx@thinlines=\thinlines
+\let\ltx@thicklines=\thicklines
+\let\ltx@@getcirc=\@getcirc
+\let\ltx@@circ=\@circ
+\let\ltx@vector=\vector
+\let\ltx@@svector=\@svector
+\let\ltx@@getlarrow=\@getlarrow
+\let\ltx@@gerlarrow=\@getrarrow
+
+
+
+\newif\ifflag@thicklines
+
+\newdimen\@dimenA
+\newdimen\@dimenB
+\newdimen\@dimenC
+\newdimen\@dimenD
+
+% this is \put(x,y) where <x> and <y> are dimensions
+\def\@@put#1#2#3{\@killglue\raise#2\hbox to\z@{\hskip #1 #3\hss}}
+
+% dashed or solid vertical line
+\def\vdashline#1{%
+ \@setdashlength{#1}%
+ \ifnum \@dashcnt>0
+ \setbox\@dashbox\hbox{\vrule height \@dashdim
+ width \@wholewidth}%
+ \@tempcnta=0
+ \leavevmode
+ \lower \@dashdim \hbox{\kern -\@halfwidth
+ \vbox{\@whilenum \@tempcnta<\@dashcnt
+ \do{\copy\@dashbox \vskip\@tempdimb \advance\@tempcnta by 1}%
+ }}%
+ \else
+ \advance\@tempdima \@halfwidth
+ \ifdim \@tempdima>0pt
+ \leavevmode\kern -\@halfwidth
+ \vrule width \@wholewidth
+ height \@tempdima
+ depth \@halfwidth \relax
+ \fi
+ \fi
+}
+
+% dashed or solid horizontal line
+\def\hdashline#1{%
+ \@setdashlength{#1}%
+ \ifnum \@dashcnt>0
+ \setbox\@dashbox\hbox{\vrule width \@dashdim
+ height \@halfwidth
+ depth \@halfwidth
+ \hskip \@tempdimb}%
+ \@tempcnta=0
+ \@whilenum \@tempcnta<\@dashcnt
+ \do{\copy\@dashbox \advance\@tempcnta by 1}%
+ \else
+ \advance\@tempdima \@wholewidth
+ \ifdim \@tempdima>0pt
+ \leavevmode\kern -\@halfwidth
+ \vrule width \@tempdima
+ height \@halfwidth
+ depth \@halfwidth \relax
+ \fi
+ \fi
+}
+
+% length of the line is in \@tempdima
+% output : \@dashdim is the dash length,
+% \@tempdimb is the dash space
+% \@dashcnt is the number of dashes
+\def\@setdashlength#1{%
+ \@dashdim=#1\unitlength
+ \@tempdimb=0.5\@tempdima \advance\@tempdimb by 0.5\@dashdim
+ \@dashcnt=\@tempdimb \@tempcnta=\@dashdim
+ \ifnum \@tempcnta>0
+ \divide\@dashcnt by \@tempcnta
+ \else
+ \@dashcnt=0
+ \fi
+ \advance\@dashcnt by -1
+ \ifnum \@dashcnt>0
+ \@tempdimb=-\@dashdim \multiply\@tempdimb by \@dashcnt
+ \advance\@tempdimb by \@tempdima \advance\@tempdimb by -\@dashdim
+ \divide\@tempdimb by \@dashcnt
+ \advance\@dashcnt by 1
+ \else
+ \@tempdimb=0pt\@dashcnt=0
+ \fi
+}
+
+
+%%%
+%%% romb frame commands
+%%%
+
+\def\romb{\@ifnextchar[{\romb@}{\romb@[c]}}
+\def\romb@[#1](#2,#3)#4{\csname romb@#1\endcsname(#2,#3){#4}}
+
+\def\romb@r(#1,#2)#3{%
+ \put(-#3,0){\romb@c(#1,#2){#3}}
+}
+
+\def\romb@l(#1,#2)#3{%
+ \put(#3,0){\romb@c(#1,#2){#3}}
+}
+
+\def\romb@c(#1,#2)#3{%
+ \put(-#3,0){\line(#1,#2){#3}}
+ \put(-#3,0){\line(#1,-#2){#3}}
+ \put(#3,0){\line(-#1,#2){#3}}
+ \put(#3,0){\line(-#1,-#2){#3}}
+}
+
+\def\rombBox{\@ifnextchar[{\@rombBox}{\@rombBox[x]}}
+\def\rombBoX{\@ifnextchar[{\@rombBoX}{\@rombBoX[x]}}
+\def\rombBOX{\@ifnextchar[{\@rombBOX}{\@rombBOX[x]}}
+
+\def\@rombBox[#1](#2,#3){%
+ \leavevmode\hbox to\z@{\baselineskip \z@ \lineskip \z@
+ \@HelpRomb{#2}{#3}{0}[#1]%
+ }\@makepicbox(#2,#3)}
+
+\def\@rombBoX[#1](#2,#3){%
+ \leavevmode\hbox to\z@{\baselineskip \z@ \lineskip \z@
+ \@HelpRomb{#2}{#3}{0}[#1]%
+ \@HelpRomb{#2}{#3}{1}[#1]%
+ }\@makepicbox(#2,#3)}
+
+\def\@rombBOX[#1](#2,#3){%
+ \leavevmode\hbox to\z@{\baselineskip \z@ \lineskip \z@
+ \@HelpRomb{#2}{#3}{0}[#1]%
+ \@HelpRomb{#2}{#3}{1}[#1]%
+ \@HelpRomb{#2}{#3}{2}[#1]%
+ }\@makepicbox(#2,#3)}
+
+\def\@HelpRomb#1#2#3[#4]{\@makerombslope
+ \@dimenA=\@RombL\relax \multiply\@dimenA by #3 \@dimenB=\@dimenA
+ \multiply\@dimenA by \@xarg \multiply\@dimenB by \@yarg
+ \@dimenC=-\@dimenA \@dimenD=\@dimenC
+ \multiply\@dimenA by 2 \@dimenB=\@dimenA
+ \advance\@dimenA #1\unitlength \advance\@dimenB #2\unitlength
+ \if x#4 \@romblengthX
+ \else \if y#4 \@romblengthY
+ \else \if z#4 \@romblengthZ
+ \else \@romblengthX
+ \fi\fi\fi
+ \@makeromb}
+
+\def\@makerombslope{%
+ \@xarg \@RombX\relax \@yarg \@RombY\relax
+ \ifnum \@xarg<0 \@xarg -\@xarg \fi
+ \ifnum \@yarg<0 \@yarg -\@yarg \fi
+ \ifnum \@xarg=0 \xarg 2 \@yarg 1 \fi
+ \ifnum \@yarg=0 \xarg 2 \@yarg 1 \fi
+}
+
+\def\@romblengthX{\@linelen=0.5\@dimenA}
+
+\def\@romblengthY{\@linelen=0.5\@dimenB
+ \divide\@linelen by \@yarg \multiply\@linelen by \@xarg}
+
+\def\@romblengthZ{\@romblengthY \advance\@linelen by 0.5\@dimenA}
+
+% it is supposed that \@xarg and \@yarg are set to slope values,
+% and \@linelen is equal to the length of the romb side
+\def\@makeromb{%
+ \@makerombhlp \advance\@tempdima by -\@linelen
+ \@@put{\@tempdima}{\@tempdimb}{\@sline}%
+ \@yarg=-\@yarg
+ \@makerombhlp \advance\@tempdima by -\@linelen
+ \@@put{\@tempdima}{\@tempdimb}{\@sline}%
+ \@xarg=-\@xarg
+ \@makerombhlp \advance\@tempdima by \@linelen
+ \@@put{\@tempdima}{\@tempdimb}{\@sline}%
+ \@yarg=-\@yarg
+ \@makerombhlp \advance\@tempdima by \@linelen
+ \@@put{\@tempdima}{\@tempdimb}{\@sline}%
+}
+
+\def\@makerombhlp{\@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima 0.5\@dimenA \advance\@tempdimb 0.5\@dimenB}
+
+\def\rombboxstyle(#1,#2,#3){\def\@RombX{#1}%
+ \def\@RombY{#2}%
+ \def\@RombL{#3}%
+ \ignorespaces}
+
+%%%
+%%% rect frame commands
+%%%
+
+\def\frameBox{\@ifnextchar[{\@frameBox}{\@frameBox[]}}
+\def\frameBoX{\@ifnextchar[{\@frameBoX}{\@frameBoX[]}}
+\def\frameBOX{\@ifnextchar[{\@frameBOX}{\@frameBOX[]}}
+
+\def\ovalBox{\@ifnextchar[{\@ovalBox}{\@ovalBox[]}}
+\def\ovalBoX{\@ifnextchar[{\@ovalBoX}{\@ovalBoX[]}}
+\def\ovalBOX{\@ifnextchar[{\@ovalBOX}{\@ovalBOX[]}}
+
+\def\astroBox{\@ifnextchar[{\@astroBox}{\@astroBox[]}}
+\def\astroBoX{\@ifnextchar[{\@astroBoX}{\@astroBoX[]}}
+\def\astroBOX{\@ifnextchar[{\@astroBOX}{\@astroBOX[]}}
+
+\def\parquetBox{\@ifnextchar[{\@parquetBox}{\@parquetBox[]}}
+\def\parquetBoX{\@ifnextchar[{\@parquetBoX}{\@parquetBoX[]}}
+\def\parquetBOX{\@ifnextchar[{\@parquetBOX}{\@parquetBOX[]}}
+
+\def\octalBox{\@ifnextchar[{\@octalBox}{\@octalBox[]}}
+\def\octalBoX{\@ifnextchar[{\@octalBoX}{\@octalBoX[]}}
+\def\octalBOX{\@ifnextchar[{\@octalBOX}{\@octalBOX[]}}
+
+\def\dashBox#1{\@ifnextchar[{\@dashBox{#1}}{\@dashBox{#1}[]}}
+\def\dashBoX#1{\@ifnextchar[{\@dashBoX{#1}}{\@dashBoX{#1}[]}}
+\def\dashBOX#1{\@ifnextchar[{\@dashBOX{#1}}{\@dashBOX{#1}[]}}
+
+\def\userBox#1#2{\@ifnextchar[{\@userBox{#1}{#2}}{\@userBox{#1}{#2}[]}}
+\def\userBoX#1#2{\@ifnextchar[{\@userBoX{#1}{#2}}{\@userBoX{#1}{#2}[]}}
+\def\userBOX#1#2{\@ifnextchar[{\@userBOX{#1}{#2}}{\@userBOX{#1}{#2}[]}}
+
+\def\@frameBox[#1](#2,#3){\@makeBox{#2}{#3}{#1}{0}{r}}
+\def\@frameBoX[#1](#2,#3){\@makeBoX{#2}{#3}{#1}{0}{r}}
+\def\@frameBOX[#1](#2,#3){\@makeBOX{#2}{#3}{#1}{0}{r}}
+
+\def\@ovalBox[#1](#2,#3){\@makeBox{#2}{#3}{#1}{0}{O}}
+\def\@ovalBoX[#1](#2,#3){\@makeBoX{#2}{#3}{#1}{0}{O}}
+\def\@ovalBOX[#1](#2,#3){\@makeBOX{#2}{#3}{#1}{0}{O}}
+
+\def\@astroBox[#1](#2,#3){\@makeBox{#2}{#3}{#1}{0}{A}}
+\def\@astroBoX[#1](#2,#3){\@makeBoX{#2}{#3}{#1}{0}{A}}
+\def\@astroBOX[#1](#2,#3){\@makeBOX{#2}{#3}{#1}{0}{A}}
+
+\def\@parquetBox[#1](#2,#3){\@makeBox{#2}{#3}{#1}{0}{P}}
+\def\@parquetBoX[#1](#2,#3){\@makeBoX{#2}{#3}{#1}{0}{P}}
+\def\@parquetBOX[#1](#2,#3){\@makeBOX{#2}{#3}{#1}{0}{P}}
+
+\def\@octalBox[#1](#2,#3){\@makeBox{#2}{#3}{#1}{0}{L}}
+\def\@octalBoX[#1](#2,#3){\@makeBoX{#2}{#3}{#1}{0}{L}}
+\def\@octalBOX[#1](#2,#3){\@makeBOX{#2}{#3}{#1}{0}{L}}
+
+\def\@dashBox#1[#2](#3,#4){\@makeBox{#3}{#4}{#2}{#1}{r}}
+\def\@dashBoX#1[#2](#3,#4){\@makeBoX{#3}{#4}{#2}{#1}{r}}
+\def\@dashBOX#1[#2](#3,#4){\@makeBOX{#3}{#4}{#2}{#1}{r}}
+
+\def\@userBox#1#2[#3](#4,#5){\@makeBox{#4}{#5}{#3}{#2}{#1}}
+\def\@userBoX#1#2[#3](#4,#5){\@makeBoX{#4}{#5}{#3}{#2}{#1}}
+\def\@userBOX#1#2[#3](#4,#5){\@makeBOX{#4}{#5}{#3}{#2}{#1}}
+
+% #1 = x, #2 = y
+% #3 = shadows
+% #4 = dash line (real)
+% #5 = frame style (,O,A,C,R,???)
+%
+\def\@makeBox#1#2#3#4#5{%
+ \leavevmode\hbox to\z@{\baselineskip \z@ \lineskip \z@
+ \@HelpFrame{#1}{#2}{0}{#3}{#4}{#5}%
+ }\@makepicbox(#1,#2)}
+%
+\def\@makeBoX#1#2#3#4#5{%
+ \leavevmode\hbox to\z@{\baselineskip \z@ \lineskip \z@
+ \ifdim \framesepH>\z@
+ \@HelpFrame{#1}{#2}{0}{}{#4}{#5}%
+ \@HelpFrame{#1}{#2}{1}{#3}{#4}{#5}%
+ \else
+ \@HelpFrame{#1}{#2}{1}{}{#4}{#5}%
+ \@HelpFrame{#1}{#2}{0}{#3}{#4}{#5}%
+ \fi}\@makepicbox(#1,#2)}
+%
+\def\@makeBOX#1#2#3#4#5{%
+ \leavevmode\hbox to\z@{\baselineskip \z@ \lineskip \z@
+ \ifdim \framesepH>\z@
+ \@HelpFrame{#1}{#2}{0}{}{#4}{#5}%
+ \@HelpFrame{#1}{#2}{1}{}{#4}{#5}%
+ \@HelpFrame{#1}{#2}{2}{#3}{#4}{#5}%
+ \else
+ \@HelpFrame{#1}{#2}{2}{}{#4}{#5}%
+ \@HelpFrame{#1}{#2}{1}{}{#4}{#5}%
+ \@HelpFrame{#1}{#2}{0}{#3}{#4}{#5}%
+ \fi}\@makepicbox(#1,#2)}
+
+\def\@warn@corner{\@warning{Unable to draw corner}}
+
+% #1 = x, #2 = y
+% #3 = multiple frame
+% #4 = list of shadows
+% #5 = dash/solid line (real)
+% #6 = frame corner style (,O,A,C,R,???)
+%
+\def\@HelpFrame#1#2#3#4#5#6{%
+ \@tempdima=\framesepH\relax \multiply\@tempdima by #3
+ \@dimenA=\framesepXM\@tempdima \@dimenB=\framesepYM\@tempdima
+ \@dimenC=-\@dimenA \@dimenD=-\@dimenB
+ \advance\@dimenA by \framesepXP\@tempdima
+ \advance\@dimenB by \framesepYP\@tempdima
+ \advance\@dimenA #1\unitlength \advance\@dimenB #2\unitlength
+ \advance\@dimenA by \frameexpandX\relax
+ \advance\@dimenB by \frameexpandY\relax
+ \@@makeframe{#5}{#6}%
+ \advance\@dimenA by 2\@wholewidth \advance\@dimenB by 2\@wholewidth
+ \advance\@dimenC by -\@wholewidth \advance\@dimenD by -\@wholewidth
+ \@setshadowsize
+ \@tfor \@tempa := #4 \do
+ {\@negargtrue
+ \ifdim \@dimenA>0pt \ifdim \@dimenB>0pt
+ \csname @rectshadow@\@tempa\endcsname{#5}%
+ \@updateshadowsize
+ \@negargfalse
+ \fi\fi
+ \if@negarg \@warning{Shadow position is wrong}\fi
+ }%
+}
+
+% in subsequent commands:
+% \@dimenA is x-size of the box,
+% \@dimenB is y-size of the box
+% \@dimenC is x-shift, \@dimenD is y-shift
+
+%
+% standard corner
+%
+\def\@prepdummy{\@ovxx=0pt \@ovyy=0pt
+ \@ovdx=0pt \@ovdy=0pt
+ \@yyarg=0 \@negargtrue}
+
+\def\@prepframe@R{\@prepdummy}
+\def\tl@corner@R{}
+\def\tr@corner@R{}
+\def\bl@corner@R{}
+\def\br@corner@R{}
+
+%
+% Oval corners
+%
+\def\@prepframe@O{%
+ \@tempdima=\RoundCorner\relax \@tempdima=2\@tempdima
+ \@negargtrue
+ \ifdim \@tempdima>\@dimenA \@negargfalse \fi
+ \ifdim \@tempdima>\@dimenB \@negargfalse \fi
+ \if@negarg
+ \@getcirc\@tempdima \@yyarg=\@tempcnta
+ \@ovxx=0.5\wd\@tempboxa \@ovyy=\@ovxx
+ \@tempdima=0.5\ht\@tempboxa \advance\@tempdima by -0.5\dp\@tempboxa
+ \@ovdx=\@halfwidth \advance\@ovdx by -\@tempdima \@ovdy=\@ovdx
+ \else
+ \@warn@corner
+ \fi
+}
+
+\def\tl@corner@O{\@@TLcircle}
+\def\tr@corner@O{\@@TRcircle}
+\def\bl@corner@O{\@@BLcircle}
+\def\br@corner@O{\@@BRcircle}
+
+%
+% Astro corners
+%
+\def\@prepframe@A{\@prepframe@O}
+\def\tl@corner@A{\@@brcircle}
+\def\tr@corner@A{\@@blcircle}
+\def\bl@corner@A{\@@trcircle}
+\def\br@corner@A{\@@tlcircle}
+
+%
+% Parquet corners
+%
+\def\@prepframe@P{\@negargtrue
+ \@tempdima=\RectCorner\relax
+ \ifdim \@tempdima>0.5\@dimenA \@negargfalse \fi
+ \ifdim \@tempdima>0.5\@dimenB \@negargfalse \fi
+ \if@negarg
+ \@ovxx=\@tempdima \@ovyy=\@tempdima
+ \@yyarg=0 \@ovdx=\@halfwidth \@ovdy=\@halfwidth
+ \else
+ \@warn@corner
+ \fi
+}
+\def\tl@corner@P{%
+ \@tempdima=\@ovyy
+ \setbox\@tempboxa\hbox{\kern \@ovxx \raise -\@ovyy
+ \hbox{\vdashline{\@tempa}}}%
+ \wd\@tempboxa=0pt \copy\@tempboxa
+ \@tempdima=\@ovxx
+ \setbox\@tempboxa\hbox{\kern 0pt \raise -\@ovyy
+ \hbox{\hdashline{\@tempa}}}%
+ \wd\@tempboxa=0pt \copy\@tempboxa
+ \setbox\@tempboxa\hbox{}%
+}
+\def\tr@corner@P{%
+ \@tempdima=\@ovyy
+ \setbox\@tempboxa\hbox{\kern -\@ovxx \raise -\@ovyy
+ \hbox{\vdashline{\@tempa}}}%
+ \wd\@tempboxa=0pt \copy\@tempboxa
+ \@tempdima=\@ovxx
+ \setbox\@tempboxa\hbox{\kern -\@ovxx \raise -\@ovyy
+ \hbox{\hdashline{\@tempa}}}%
+ \wd\@tempboxa=0pt \copy\@tempboxa
+ \setbox\@tempboxa\hbox{}%
+}
+\def\bl@corner@P{%
+ \@tempdima=\@ovyy
+ \setbox\@tempboxa\hbox{\kern \@ovxx \raise 0pt
+ \hbox{\vdashline{\@tempa}}}%
+ \wd\@tempboxa=0pt \copy\@tempboxa
+ \@tempdima=\@ovxx
+ \setbox\@tempboxa\hbox{\kern 0pt \raise \@ovyy
+ \hbox{\hdashline{\@tempa}}}%
+ \wd\@tempboxa=0pt \copy\@tempboxa
+ \setbox\@tempboxa\hbox{}%
+}
+\def\br@corner@P{%
+ \@tempdima=\@ovyy
+ \setbox\@tempboxa\hbox{\kern -\@ovxx \raise 0pt
+ \hbox{\vdashline{\@tempa}}}%
+ \wd\@tempboxa=0pt \copy\@tempboxa
+ \@tempdima=\@ovxx
+ \setbox\@tempboxa\hbox{\kern -\@ovxx \raise \@ovyy
+ \hbox{\hdashline{\@tempa}}}%
+ \wd\@tempboxa=0pt \copy\@tempboxa
+ \setbox\@tempboxa\hbox{}%
+}
+
+%
+% Ordinary corners: init= \def\@prepframe@D{\@prepframe@P}
+%
+\def\tl@corner@D{%
+ \@tempdima=\@ovyy
+ \setbox\@tempboxa\hbox{\raise -\@ovyy
+ \hbox{\vdashline{\@tempa}}}%
+ \wd\@tempboxa=0pt \copy\@tempboxa
+ \@tempdima=\@ovxx
+ \setbox\@tempboxa\hbox{\hdashline{\@tempa}}%
+ \wd\@tempboxa=0pt \copy\@tempboxa
+ \setbox\@tempboxa\hbox{}%
+}
+\def\tr@corner@D{%
+ \@tempdima=\@ovyy
+ \setbox\@tempboxa\hbox{\raise -\@ovyy
+ \hbox{\vdashline{\@tempa}}}%
+ \wd\@tempboxa=0pt \copy\@tempboxa
+ \@tempdima=\@ovxx
+ \setbox\@tempboxa\hbox{\kern -\@ovxx
+ \hbox{\hdashline{\@tempa}}}%
+ \wd\@tempboxa=0pt \copy\@tempboxa
+ \setbox\@tempboxa\hbox{}%
+}
+\def\bl@corner@D{%
+ \@tempdima=\@ovyy
+ \setbox\@tempboxa\hbox{\vdashline{\@tempa}}%
+ \wd\@tempboxa=0pt \copy\@tempboxa
+ \@tempdima=\@ovxx
+ \setbox\@tempboxa\hbox{\hdashline{\@tempa}}%
+ \wd\@tempboxa=0pt \copy\@tempboxa
+ \setbox\@tempboxa\hbox{}%
+}
+\def\br@corner@D{%
+ \@tempdima=\@ovyy
+ \setbox\@tempboxa\hbox{\vdashline{\@tempa}}%
+ \wd\@tempboxa=0pt \copy\@tempboxa
+ \@tempdima=\@ovxx
+ \setbox\@tempboxa\hbox{\kern -\@ovxx
+ \hbox{\hdashline{\@tempa}}}%
+ \wd\@tempboxa=0pt \copy\@tempboxa
+ \setbox\@tempboxa\hbox{}%
+}
+
+%
+% Octal corners
+%
+\def\@prepframe@L{%
+ \@negargtrue
+ \ifnum \@RombX>0 \else \@negargfalse \fi
+ \ifnum \@RombY>0 \else \@negargfalse \fi
+ \if@negarg
+ \ifnum \@RombX>\@RombY
+ \@tempdima=\LineCorner\relax
+ \@tempdimb=\@tempdima
+ \multiply\@tempdimb by \@RombY
+ \divide\@tempdimb by \@RombX
+ \else
+ \@tempdimb=\LineCorner\relax
+ \@tempdima=\@tempdimb
+ \multiply\@tempdima by \@RombX
+ \divide\@tempdima by \@RombY
+ \fi
+ \ifdim \@tempdima>0.5\@dimenA \@negargfalse \fi
+ \ifdim \@tempdimb>0.5\@dimenB \@negargfalse \fi
+ \@ovxx=\@tempdima \@ovyy=\@tempdimb
+ \ifnum \@RombX>\@RombY
+ \ifdim \@ovxx<10pt \@negargfalse \fi
+ \else
+ \ifdim \@ovyy<10pt \@negargfalse \fi
+ \fi
+ \if@negarg
+ \@ovxx=\@tempdima \@ovyy=\@tempdimb
+ \@yyarg=0 \@ovdx=\@halfwidth \@ovdy=\@halfwidth
+ \else
+ \@warn@corner
+ \fi
+ \fi
+}
+
+\def\tl@corner@L{\@xarg=\@RombX \@yarg=\@RombY \@linelen=\@ovxx
+ \hbox{\raise -\@ovyy \hbox{\@sline}}}
+\def\tr@corner@L{\@xarg=-\@RombX \@yarg=\@RombY \@linelen=\@ovxx
+ \hbox{\raise -\@ovyy \hbox{\@sline}}}
+\def\bl@corner@L{\@xarg=\@RombX \@yarg=-\@RombY \@linelen=\@ovxx
+ \hbox{\raise \@ovyy \hbox{\@sline}}}
+\def\br@corner@L{\@xarg=-\@RombX \@yarg=-\@RombY \@linelen=\@ovxx
+ \hbox{\raise \@ovyy \hbox{\@sline}}}
+
+%
+% Black box corners
+%
+\def\@prepframe@b{\@prepframe@P\@ovdx=0pt\@ovdy=0pt}
+\def\tl@corner@b{\@tempdima=\@ovxx \advance\@tempdima by \@halfwidth
+ \@tempdimb=\@ovyy \advance\@tempdimb by \@halfwidth
+ \kern -\@halfwidth \raise -\@ovyy
+ \hbox{\vrule height \@tempdimb depth 0pt width \@tempdima}}
+\def\tr@corner@b{\@tempdima=\@ovxx \advance\@tempdima by \@halfwidth
+ \@tempdimb=\@ovyy \advance\@tempdimb by \@halfwidth
+ \kern -\@ovxx \raise -\@ovyy
+ \hbox{\vrule height \@tempdimb depth 0pt width \@tempdima}}
+\def\bl@corner@b{\@tempdima=\@ovxx \advance\@tempdima by \@halfwidth
+ \@tempdimb=\@ovyy \advance\@tempdimb by \@halfwidth
+ \kern -\@halfwidth \raise -\@halfwidth
+ \hbox{\vrule height \@tempdimb depth 0pt width \@tempdima}}
+\def\br@corner@b{\@tempdima=\@ovxx \advance\@tempdima by \@halfwidth
+ \@tempdimb=\@ovyy \advance\@tempdimb by \@halfwidth
+ \kern -\@ovxx \raise -\@halfwidth
+ \hbox{\vrule height \@tempdimb depth 0pt width \@tempdima}}
+
+%
+% 0.75 Black box corners
+%
+\def\@prepframe@c{\@prepframe@P}
+\def\tl@corner@c{\tl@corner@P\tl@corner@cc}
+\def\tr@corner@c{\tr@corner@P\tr@corner@cc}
+\def\bl@corner@c{\bl@corner@P\bl@corner@cc}
+\def\br@corner@c{\br@corner@P\br@corner@cc}
+
+\def\tl@corner@cc{%
+ \@tempdima=0.75\@ovxx \advance\@tempdima by \@halfwidth
+ \@tempdimb=0.75\@ovyy \advance\@tempdimb by \@halfwidth
+ \setbox\@tempboxa\hbox{\kern -\@halfwidth \raise -0.75\@ovyy
+ \hbox{\vrule width \@tempdima depth 0pt height \@tempdimb}}%
+ \wd\@tempboxa=0pt \copy\@tempboxa
+}
+\def\tr@corner@cc{%
+ \@tempdima=0.75\@ovxx \advance\@tempdima by \@halfwidth
+ \@tempdimb=0.75\@ovyy \advance\@tempdimb by \@halfwidth
+ \setbox\@tempboxa\hbox{\kern -0.75\@ovxx \raise -0.75\@ovyy
+ \hbox{\vrule width \@tempdima depth 0pt height \@tempdimb}}%
+ \wd\@tempboxa=0pt \copy\@tempboxa
+}
+\def\bl@corner@cc{%
+ \@tempdima=0.75\@ovxx \advance\@tempdima by \@halfwidth
+ \@tempdimb=0.75\@ovyy \advance\@tempdimb by \@halfwidth
+ \setbox\@tempboxa\hbox{\kern -\@halfwidth \raise -\@halfwidth
+ \hbox{\vrule width \@tempdima height \@tempdimb depth 0pt}}%
+ \wd\@tempboxa=0pt \copy\@tempboxa
+}
+\def\br@corner@cc{%
+ \@tempdima=0.75\@ovxx \advance\@tempdima by \@halfwidth
+ \@tempdimb=0.75\@ovyy \advance\@tempdimb by \@halfwidth
+ \setbox\@tempboxa\hbox{\kern -0.75\@ovxx \raise -\@halfwidth
+ \hbox{\vrule width \@tempdima height \@tempdimb depth 0pt}}%
+ \wd\@tempboxa=0pt \copy\@tempboxa
+}
+
+%
+% 0.5 centered black box corners
+%
+\def\@prepframe@d{\@prepframe@P}
+\def\tl@corner@d{\tl@corner@P\tl@corner@D\tl@corner@dd}
+\def\tr@corner@d{\tr@corner@P\tr@corner@D\tr@corner@dd}
+\def\bl@corner@d{\bl@corner@P\bl@corner@D\bl@corner@dd}
+\def\br@corner@d{\br@corner@P\br@corner@D\br@corner@dd}
+
+\def\@prepframe@e{\@prepframe@P}
+\def\tl@corner@e{\tl@corner@D\tl@corner@dd}
+\def\tr@corner@e{\tr@corner@D\tr@corner@dd}
+\def\bl@corner@e{\bl@corner@D\bl@corner@dd}
+\def\br@corner@e{\br@corner@D\br@corner@dd}
+
+\def\@prepframe@f{\@prepframe@P}
+\def\tl@corner@f{\tl@corner@P\tl@corner@dd}
+\def\tr@corner@f{\tr@corner@P\tr@corner@dd}
+\def\bl@corner@f{\bl@corner@P\bl@corner@dd}
+\def\br@corner@f{\br@corner@P\br@corner@dd}
+
+\def\tl@corner@dd{%
+ \@tempdima=0.25\@ovxx \advance\@tempdima by 0.5\@halfwidth
+ \@tempdimb=-0.75\@ovyy \advance\@tempdimb by -0.5\@halfwidth
+ \setbox\@tempboxa\hbox{\kern \@tempdima \raise \@tempdimb
+ \hbox{\vrule width 0.5\@ovxx depth 0pt height 0.5\@ovyy}}%
+ \wd\@tempboxa=0pt \copy\@tempboxa
+}
+\def\tr@corner@dd{%
+ \@tempdima=-0.75\@ovxx \advance\@tempdima by -0.5\@halfwidth
+ \@tempdimb=-0.75\@ovyy \advance\@tempdimb by -0.5\@halfwidth
+ \setbox\@tempboxa\hbox{\kern \@tempdima \raise \@tempdimb
+ \hbox{\vrule width 0.5\@ovxx depth 0pt height 0.5\@ovyy}}%
+ \wd\@tempboxa=0pt \copy\@tempboxa
+}
+\def\bl@corner@dd{%
+ \@tempdima=0.25\@ovxx \advance\@tempdima by 0.5\@halfwidth
+ \@tempdimb=0.25\@ovyy \advance\@tempdimb by 0.5\@halfwidth
+ \setbox\@tempboxa\hbox{\kern \@tempdima \raise \@tempdimb
+ \hbox{\vrule width 0.5\@ovxx height 0.5\@ovyy depth 0pt}}%
+ \wd\@tempboxa=0pt \copy\@tempboxa
+}
+\def\br@corner@dd{%
+ \@tempdima=-0.75\@ovxx \advance\@tempdima by -0.5\@halfwidth
+ \@tempdimb=0.25\@ovyy \advance\@tempdimb by 0.5\@halfwidth
+ \setbox\@tempboxa\hbox{\kern \@tempdima \raise \@tempdimb
+ \hbox{\vrule width 0.5\@ovxx height 0.5\@ovyy depth 0pt}}%
+ \wd\@tempboxa=0pt \copy\@tempboxa
+}
+
+%
+% circle blobs at the corners
+%
+\def\@prepframe@o{\@tempdima=\DiskCorner\relax
+ \get@Disk\@tempdima
+ \if@negarg
+ \@yyarg=\@tempcnta \@ovxx=0.5\wd\@tempboxa
+ \@ovyy=\@ovxx \@ovdx=\@halfwidth \@ovdy=\@ovdx
+ \ifdim \@ovxx>0.25\@dimenA \@negargfalse \fi
+ \ifdim \@ovxx>0.25\@dimenB \@negargfalse \fi
+ \fi
+ \if@negarg \else \@warn@corner \fi
+}
+\def\tl@corner@o{%
+ \kern \@ovxx \raise -\@ovyy \hbox{\@circlefnt \char\@tempcnta}}
+\def\tr@corner@o{%
+ \kern -\@ovxx \raise -\@ovyy \hbox{\@circlefnt \char\@tempcnta}}
+\def\bl@corner@o{%
+ \kern \@ovxx \raise \@ovyy \hbox{\@circlefnt \char\@tempcnta}}
+\def\br@corner@o{%
+ \kern -\@ovxx \raise \@ovyy \hbox{\@circlefnt \char\@tempcnta}}
+
+%%%
+%%% frame drawing routine
+%%%
+
+\def\@@makeframe#1#2{\@ovxx=0pt \@ovyy=0pt \@ovdx=0pt \@ovdy=0pt
+ \@yyarg=0 \@negargfalse
+ \csname @prepframe@#2\endcsname
+ \if@negarg
+ \def\@tempa{#1}%
+ \@tempdima=\@dimenC \advance\@tempdima by -\@halfwidth
+ \@tempdimb=\@dimenD \advance\@tempdimb by -\@halfwidth
+ \@@put{\@tempdima}{\@tempdimb}{\@tempcnta=\@yyarg
+ \csname bl@corner@#2\endcsname}%
+ \@tempdima=\@dimenC \advance\@tempdima by \@halfwidth
+ \advance\@tempdima by \@dimenA
+ \@tempdimb=\@dimenD \advance\@tempdimb by -\@halfwidth
+ \@@put{\@tempdima}{\@tempdimb}{\@tempcnta=\@yyarg
+ \csname br@corner@#2\endcsname}%
+ \@tempdima=\@dimenC \advance\@tempdima by -\@halfwidth
+ \@tempdimb=\@dimenD \advance\@tempdimb by \@halfwidth
+ \advance\@tempdimb by \@dimenB
+ \@@put{\@tempdima}{\@tempdimb}{\@tempcnta=\@yyarg
+ \csname tl@corner@#2\endcsname}%
+ \@tempdima=\@dimenC \advance\@tempdima by \@halfwidth
+ \advance\@tempdima by \@dimenA
+ \@tempdimb=\@dimenD \advance\@tempdimb by \@halfwidth
+ \advance\@tempdimb by \@dimenB
+ \@@put{\@tempdima}{\@tempdimb}{\@tempcnta=\@yyarg
+ \csname tr@corner@#2\endcsname}%
+ \fi
+ \@tempdima=\@dimenC \advance\@tempdima by -\@halfwidth
+ \@tempdimb=\@dimenD \advance\@tempdimb by -\@halfwidth
+ \advance\@tempdimb by \@ovyy
+ \advance\@tempdimb by \@ovdy
+ \@@put{\@tempdima}{\@tempdimb}{%
+ \@tempdima=\@dimenB \advance\@tempdima by \@wholewidth
+ \advance\@tempdima by -2\@ovyy
+ \advance\@tempdima by -2\@ovdy
+ \vdashline{#1}}%
+ \@tempdima=\@dimenC \advance\@tempdima by \@halfwidth
+ \advance\@tempdima by \@dimenA
+ \@tempdimb=\@dimenD \advance\@tempdimb by -\@halfwidth
+ \advance\@tempdimb by \@ovyy
+ \advance\@tempdimb by \@ovdy
+ \@@put{\@tempdima}{\@tempdimb}{%
+ \@tempdima=\@dimenB \advance\@tempdima by \@wholewidth
+ \advance\@tempdima by -2\@ovyy
+ \advance\@tempdima by -2\@ovdy
+ \vdashline{#1}}%
+ \@tempdima=\@dimenC \advance\@tempdima by -\@halfwidth
+ \advance\@tempdima by \@ovxx
+ \advance\@tempdima by \@ovdx
+ \@tempdimb=\@dimenD \advance\@tempdimb by -\@halfwidth
+ \@@put{\@tempdima}{\@tempdimb}{%
+ \@tempdima=\@dimenA \advance\@tempdima by \@wholewidth
+ \advance\@tempdima by -2\@ovxx
+ \advance\@tempdima by -2\@ovdx
+ \hdashline{#1}}%
+ \@tempdima=\@dimenC \advance\@tempdima by -\@halfwidth
+ \advance\@tempdima by \@ovxx
+ \advance\@tempdima by \@ovdx
+ \@tempdimb=\@dimenD \advance\@tempdimb by \@halfwidth
+ \advance\@tempdimb by \@dimenB
+ \@@put{\@tempdima}{\@tempdimb}{%
+ \@tempdima=\@dimenA \advance\@tempdima by \@wholewidth
+ \advance\@tempdima by -2\@ovxx
+ \advance\@tempdima by -2\@ovdx
+ \hdashline{#1}}%
+}
+
+
+%%%
+%%% shadow drawing routines
+%%%
+
+%
+% draw shadow corner(s)
+%
+
+\def\@HelpshadowA#1#2{%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by \@dimenA \advance\@tempdima by \@shadowsizeX
+ \advance\@tempdimb by \@dimenB \advance\@tempdimb by -\@shadowstepY
+ \@@put{\@tempdima}{\@tempdimb}{\@tempcnta=\@yyarg
+ \csname tr@corner@#2\endcsname}%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by \@dimenA \advance\@tempdima by \@shadowsizeX
+ \advance\@tempdimb by -\@shadowsizeY
+ \@@put{\@tempdima}{\@tempdimb}{\@tempcnta=\@yyarg
+ \csname br@corner@#2\endcsname}%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by \@shadowstepX \advance\@tempdimb by -\@shadowsizeY
+ \@@put{\@tempdima}{\@tempdimb}{\@tempcnta=\@yyarg
+ \csname bl@corner@#2\endcsname}%
+}
+
+\def\@HelpshadowB#1#2{%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by \@shadowstepX
+ \advance\@tempdimb by \@dimenB \advance\@tempdimb by \@shadowsizeY
+ \@@put{\@tempdima}{\@tempdimb}{\@tempcnta=\@yyarg
+ \csname tl@corner@#2\endcsname}%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by \@dimenA \advance\@tempdima by \@shadowsizeX
+ \advance\@tempdimb by \@shadowstepY
+ \@@put{\@tempdima}{\@tempdimb}{\@tempcnta=\@yyarg
+ \csname br@corner@#2\endcsname}%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by \@dimenA \advance\@tempdima by \@shadowsizeX
+ \advance\@tempdimb by \@dimenB \advance\@tempdimb by \@shadowsizeY
+ \@@put{\@tempdima}{\@tempdimb}{\@tempcnta=\@yyarg
+ \csname tr@corner@#2\endcsname}%
+}
+
+\def\@HelpshadowC#1#2{%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by -\@shadowsizeX
+ \advance\@tempdimb by \@shadowstepY
+ \@@put{\@tempdima}{\@tempdimb}{\@tempcnta=\@yyarg
+ \csname bl@corner@#2\endcsname}%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by \@dimenA \advance\@tempdima by -\@shadowstepX
+ \advance\@tempdimb by \@dimenB \advance\@tempdimb by \@shadowsizeY
+ \@@put{\@tempdima}{\@tempdimb}{\@tempcnta=\@yyarg
+ \csname tr@corner@#2\endcsname}%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by -\@shadowsizeX
+ \advance\@tempdimb by \@dimenB \advance\@tempdimb by \@shadowsizeY
+ \@@put{\@tempdima}{\@tempdimb}{\@tempcnta=\@yyarg
+ \csname tl@corner@#2\endcsname}%
+}
+
+\def\@HelpshadowD#1#2{%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by -\@shadowsizeX
+ \advance\@tempdimb by -\@shadowsizeY
+ \@@put{\@tempdima}{\@tempdimb}{\@tempcnta=\@yyarg
+ \csname bl@corner@#2\endcsname}%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by -\@shadowstepX \advance\@tempdima by \@dimenA
+ \advance\@tempdimb by -\@shadowsizeY
+ \@@put{\@tempdima}{\@tempdimb}{\@tempcnta=\@yyarg
+ \csname br@corner@#2\endcsname}%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by -\@shadowsizeX
+ \advance\@tempdimb by -\@shadowstepY \advance\@tempdimb by \@dimenB
+ \@@put{\@tempdima}{\@tempdimb}{\@tempcnta=\@yyarg
+ \csname tl@corner@#2\endcsname}%
+}
+
+%
+% draw line shadow frame
+%
+
+\def\@helpshadowA#1{%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by \@dimenA
+ \advance\@tempdimb by \@dimenB \advance\@tempdimb by -\@shadowstepY
+ \@@put{\@tempdima}{\@tempdimb}{\@tempdima=\@shadowsizeX
+ \advance\@tempdima by -\@ovxx
+ \advance\@tempdima by -\@ovdx
+ \hdashline{#1}}%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by \@dimenA \advance\@tempdima by \@shadowsizeX
+ \advance\@tempdimb by -\@shadowsizeY \advance\@tempdimb by \@ovyy
+ \advance\@tempdimb by \@ovdy
+ \@@put{\@tempdima}{\@tempdimb}{\@tempdima=\@dimenB
+ \advance\@tempdima by \@shadowsizeY
+ \advance\@tempdima by -\@shadowstepY
+ \advance\@tempdima by -2\@ovyy
+ \advance\@tempdima by -2\@ovdy
+ \vdashline{#1}}%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by \@shadowstepX
+ \advance\@tempdimb by -\@shadowsizeY \advance\@tempdimb by \@ovyy
+ \advance\@tempdimb by \@ovdy
+ \@@put{\@tempdima}{\@tempdimb}{\@tempdima=\@shadowsizeY
+ \advance\@tempdima by -\@ovyy
+ \advance\@tempdima by -\@ovdy
+ \vdashline{#1}}%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by \@shadowstepX \advance\@tempdima by \@ovxx
+ \advance\@tempdima by \@ovdx
+ \advance\@tempdimb by -\@shadowsizeY
+ \@@put{\@tempdima}{\@tempdimb}{\@tempdima=\@dimenA
+ \advance\@tempdima by \@shadowsizeX
+ \advance\@tempdima by -\@shadowstepX
+ \advance\@tempdima by -2\@ovxx
+ \advance\@tempdima by -2\@ovdx
+ \hdashline{#1}}%
+}
+
+\def\@helpshadowB#1{%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by \@shadowstepX
+ \advance\@tempdimb by \@dimenB
+ \@@put{\@tempdima}{\@tempdimb}{\@tempdima=\@shadowsizeY
+ \advance\@tempdima by -\@ovyy
+ \advance\@tempdima by -\@ovdy
+ \vdashline{#1}}%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by \@shadowstepX \advance\@tempdima by \@ovxx
+ \advance\@tempdima by \@ovdx
+ \advance\@tempdimb by \@dimenB \advance\@tempdimb by \@shadowsizeY
+ \@@put{\@tempdima}{\@tempdimb}{\@tempdima=\@dimenA
+ \advance\@tempdima by \@shadowsizeX
+ \advance\@tempdima by -\@shadowstepX
+ \advance\@tempdima by -2\@ovxx
+ \advance\@tempdima by -2\@ovdx
+ \hdashline{#1}}%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by \@dimenA
+ \advance\@tempdimb by \@shadowstepY
+ \@@put{\@tempdima}{\@tempdimb}{\@tempdima=\@shadowsizeX
+ \advance\@tempdima by -\@ovxx
+ \advance\@tempdima by -\@ovdx
+ \hdashline{#1}}%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by \@dimenA \advance\@tempdima by \@shadowsizeX
+ \advance\@tempdimb by \@shadowstepY \advance\@tempdimb by \@ovyy
+ \advance\@tempdimb by \@ovdy
+ \@@put{\@tempdima}{\@tempdimb}{\@tempdima=\@dimenB
+ \advance\@tempdima by \@shadowsizeY
+ \advance\@tempdima by -\@shadowstepY
+ \advance\@tempdima by -2\@ovyy
+ \advance\@tempdima by -2\@ovdy
+ \vdashline{#1}}%
+}
+
+\def\@helpshadowC#1{%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by -\@shadowsizeX \advance\@tempdima by \@ovxx
+ \advance\@tempdima by \@ovdx
+ \advance\@tempdimb by \@shadowstepY
+ \@@put{\@tempdima}{\@tempdimb}{\@tempdima=\@shadowsizeX
+ \advance\@tempdima by -\@ovxx
+ \advance\@tempdima by -\@ovdx
+ \hdashline{#1}}%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by -\@shadowsizeX
+ \advance\@tempdimb by \@shadowstepY \advance\@tempdimb by \@ovyy
+ \advance\@tempdimb by \@ovdy
+ \@@put{\@tempdima}{\@tempdimb}{\@tempdima=\@dimenB
+ \advance\@tempdima by \@shadowsizeY
+ \advance\@tempdima by -\@shadowstepY
+ \advance\@tempdima by -2\@ovyy
+ \advance\@tempdima by -2\@ovdy
+ \vdashline{#1}}%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by \@dimenA \advance\@tempdima by -\@shadowstepX
+ \advance\@tempdimb by \@dimenB
+ \@@put{\@tempdima}{\@tempdimb}{\@tempdima=\@shadowsizeY
+ \advance\@tempdima by -\@ovyy
+ \advance\@tempdima by -\@ovdy
+ \vdashline{#1}}%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by -\@shadowsizeX \advance\@tempdima by \@ovxx
+ \advance\@tempdima by \@ovdx
+ \advance\@tempdimb by \@dimenB \advance\@tempdimb by \@shadowsizeY
+ \@@put{\@tempdima}{\@tempdimb}{\@tempdima=\@dimenA
+ \advance\@tempdima by \@shadowsizeX
+ \advance\@tempdima by -\@shadowstepX
+ \advance\@tempdima by -2\@ovxx
+ \advance\@tempdima by -2\@ovdx
+ \hdashline{#1}}%
+}
+
+\def\@helpshadowD#1{%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by -\@shadowsizeX \advance\@tempdima by \@ovxx
+ \advance\@tempdima by \@ovdx
+ \advance\@tempdimb by -\@shadowsizeY
+ \@@put{\@tempdima}{\@tempdimb}{\@tempdima=\@dimenA
+ \advance\@tempdima by \@shadowsizeX
+ \advance\@tempdima by -\@shadowstepX
+ \advance\@tempdima by -2\@ovxx
+ \advance\@tempdima by -2\@ovdx
+ \hdashline{#1}}%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by -\@shadowstepX \advance\@tempdima by \@dimenA
+ \advance\@tempdimb by -\@shadowsizeY \advance\@tempdimb by \@ovyy
+ \advance\@tempdimb by \@ovdy
+ \@@put{\@tempdima}{\@tempdimb}{\@tempdima=\@shadowsizeY
+ \advance\@tempdima by -\@ovyy
+ \advance\@tempdima by -\@ovdy
+ \vdashline{#1}}%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by -\@shadowsizeX
+ \advance\@tempdimb by -\@shadowsizeY \advance\@tempdimb by \@ovyy
+ \advance\@tempdimb by \@ovdy
+ \@@put{\@tempdima}{\@tempdimb}{\@tempdima=\@dimenB
+ \advance\@tempdima by \@shadowsizeY
+ \advance\@tempdima by -\@shadowstepY
+ \advance\@tempdima by -2\@ovyy
+ \advance\@tempdima by -2\@ovdy
+ \vdashline{#1}}%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by -\@shadowsizeX \advance\@tempdima by \@ovxx
+ \advance\@tempdima by \@ovdx
+ \advance\@tempdimb by -\@shadowstepY \advance\@tempdimb by \@dimenB
+ \@@put{\@tempdima}{\@tempdimb}{\@tempdima=\@shadowsizeX
+ \advance\@tempdima by -\@ovxx
+ \advance\@tempdima by -\@ovdx
+ \hdashline{#1}}%
+}
+
+%
+% draw solid shadow frame
+%
+
+\def\@helpShadowA#1{% #1 is ignored here
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by \@shadowstepX \advance\@tempdima by \@ovxx
+ \advance\@tempdima by \@ovdx
+ \advance\@tempdimb by -\@shadowsizeY
+ \@@put{\@tempdima}{\@tempdimb}{%
+ \@tempdima=\@dimenA \advance\@tempdima by \@shadowsizeX
+ \advance\@tempdima by -\@shadowstepX
+ \advance\@tempdima by -2\@ovxx
+ \advance\@tempdima by -2\@ovdx
+ \@tempdimb=\@shadowsizeY
+ \vrule height \@tempdimb width \@tempdima}%
+%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by \@shadowstepX
+ \advance\@tempdimb by -\@shadowsizeY \advance\@tempdimb by \@ovyy
+ \advance\@tempdimb by \@ovdy
+ \@@put{\@tempdima}{\@tempdimb}{%
+ \@tempdima=\@dimenA \advance\@tempdima by \@shadowsizeX
+ \advance\@tempdima by -\@shadowstepX
+ \@tempdimb=\@shadowsizeY \advance\@tempdimb by -\@ovyy
+ \advance\@tempdimb by -\@ovdy
+ \vrule height \@tempdimb width \@tempdima}%
+%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by \@dimenA
+ \advance\@tempdimb by -\@shadowsizeY \advance\@tempdimb by \@ovyy
+ \advance\@tempdimb by \@ovdy
+ \@@put{\@tempdima}{\@tempdimb}{%
+ \@tempdimb=\@dimenB \advance\@tempdimb by \@shadowsizeY
+ \advance\@tempdimb by -\@shadowstepY
+ \advance\@tempdimb by -2\@ovyy
+ \advance\@tempdimb by -2\@ovdy
+ \@tempdima=\@shadowsizeX
+ \vrule height \@tempdimb width \@tempdima}%
+%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by \@dimenA
+ \advance\@tempdimb by -\@shadowsizeY
+ \@@put{\@tempdima}{\@tempdimb}{%
+ \@tempdimb=\@dimenB \advance\@tempdimb by \@shadowsizeY
+ \advance\@tempdimb by -\@shadowstepY
+ \@tempdima=\@shadowsizeX \advance\@tempdima by -\@ovxx
+ \advance\@tempdima by -\@ovdx
+ \vrule height \@tempdimb width \@tempdima}%
+}
+
+\def\@helpShadowB#1{% #1 is ignored here
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by \@shadowstepX \advance\@tempdima by \@ovxx
+ \advance\@tempdima by \@ovdx
+ \advance\@tempdimb by \@dimenB
+ \@@put{\@tempdima}{\@tempdimb}{%
+ \@tempdima=\@dimenA \advance\@tempdima by \@shadowsizeX
+ \advance\@tempdima by -\@shadowstepX
+ \advance\@tempdima by -2\@ovxx
+ \advance\@tempdima by -2\@ovdx
+ \@tempdimb=\@shadowsizeY
+ \vrule height \@tempdimb width \@tempdima}%
+%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by \@shadowstepX
+ \advance\@tempdimb by \@dimenB
+ \@@put{\@tempdima}{\@tempdimb}{%
+ \@tempdima=\@dimenA \advance\@tempdima by \@shadowsizeX
+ \advance\@tempdima by -\@shadowstepX
+ \@tempdimb=\@shadowsizeY \advance\@tempdimb by -\@ovyy
+ \advance\@tempdimb by -\@ovdy
+ \vrule height \@tempdimb width \@tempdima}%
+%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by \@dimenA
+ \advance\@tempdimb by \@shadowstepY \advance\@tempdimb by \@ovyy
+ \advance\@tempdimb by \@ovdy
+ \@@put{\@tempdima}{\@tempdimb}{%
+ \@tempdimb=\@dimenB \advance\@tempdimb by \@shadowsizeY
+ \advance\@tempdimb by -\@shadowstepY
+ \advance\@tempdimb by -2\@ovyy
+ \advance\@tempdimb by -2\@ovdy
+ \@tempdima=\@shadowsizeX
+ \vrule height \@tempdimb width \@tempdima}%
+%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by \@dimenA
+ \advance\@tempdimb by \@shadowstepY
+ \@@put{\@tempdima}{\@tempdimb}{%
+ \@tempdimb=\@dimenB \advance\@tempdimb by \@shadowsizeY
+ \advance\@tempdimb by -\@shadowstepY
+ \@tempdima=\@shadowsizeX \advance\@tempdima by -\@ovxx
+ \advance\@tempdima by -\@ovdx
+ \vrule height \@tempdimb width \@tempdima}%
+}
+
+\def\@helpShadowC#1{% #1 is ignored here
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by -\@shadowsizeX \advance\@tempdima by \@ovxx
+ \advance\@tempdima by \@ovdx
+ \advance\@tempdimb by \@dimenB
+ \@@put{\@tempdima}{\@tempdimb}{%
+ \@tempdima=\@dimenA \advance\@tempdima by \@shadowsizeX
+ \advance\@tempdima by -\@shadowstepX
+ \advance\@tempdima by -2\@ovxx
+ \advance\@tempdima by -2\@ovdx
+ \@tempdimb=\@shadowsizeY
+ \vrule height \@tempdimb width \@tempdima}%
+%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by -\@shadowsizeX
+ \advance\@tempdimb by \@dimenB
+ \@@put{\@tempdima}{\@tempdimb}{%
+ \@tempdima=\@dimenA \advance\@tempdima by \@shadowsizeX
+ \advance\@tempdima by -\@shadowstepX
+ \@tempdimb=\@shadowsizeY \advance\@tempdimb by -\@ovyy
+ \advance\@tempdimb by -\@ovdy
+ \vrule height \@tempdimb width \@tempdima}%
+%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by -\@shadowsizeX
+ \advance\@tempdimb by \@shadowstepY \advance\@tempdimb by \@ovyy
+ \advance\@tempdimb by \@ovdy
+ \@@put{\@tempdima}{\@tempdimb}{%
+ \@tempdimb=\@dimenB \advance\@tempdimb by \@shadowsizeY
+ \advance\@tempdimb by -\@shadowstepY
+ \advance\@tempdimb by -2\@ovyy
+ \advance\@tempdimb by -2\@ovdy
+ \@tempdima=\@shadowsizeX
+ \vrule height \@tempdimb width \@tempdima}%
+%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by -\@shadowsizeX \advance\@tempdima by \@ovxx
+ \advance\@tempdima by \@ovdx
+ \advance\@tempdimb by \@shadowstepY
+ \@@put{\@tempdima}{\@tempdimb}{%
+ \@tempdimb=\@dimenB \advance\@tempdimb by \@shadowsizeY
+ \advance\@tempdimb by -\@shadowstepY
+ \@tempdima=\@shadowsizeX \advance\@tempdima by -\@ovxx
+ \advance\@tempdima by -\@ovdx
+ \vrule height \@tempdimb width \@tempdima}%
+}
+
+
+\def\@helpShadowD#1{% #1 is ignored here
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by -\@shadowsizeX \advance\@tempdima by \@ovxx
+ \advance\@tempdima by \@ovdx
+ \advance\@tempdimb by -\@shadowsizeY
+ \@@put{\@tempdima}{\@tempdimb}{%
+ \@tempdima=\@dimenA \advance\@tempdima by \@shadowsizeX
+ \advance\@tempdima by -\@shadowstepX
+ \advance\@tempdima by -2\@ovxx
+ \advance\@tempdima by -2\@ovdx
+ \@tempdimb=\@shadowsizeY
+ \vrule height \@tempdimb width \@tempdima}%
+%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by -\@shadowsizeX
+ \advance\@tempdimb by -\@shadowsizeY \advance\@tempdimb by \@ovyy
+ \advance\@tempdimb by \@ovdy
+ \@@put{\@tempdima}{\@tempdimb}{%
+ \@tempdima=\@dimenA \advance\@tempdima by \@shadowsizeX
+ \advance\@tempdima by -\@shadowstepX
+ \@tempdimb=\@shadowsizeY \advance\@tempdimb by -\@ovyy
+ \advance\@tempdimb by -\@ovdy
+ \vrule height \@tempdimb width \@tempdima}%
+%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by -\@shadowsizeX
+ \advance\@tempdimb by -\@shadowsizeY \advance\@tempdimb by \@ovyy
+ \advance\@tempdimb by \@ovdy
+ \@@put{\@tempdima}{\@tempdimb}{%
+ \@tempdimb=\@dimenB \advance\@tempdimb by \@shadowsizeY
+ \advance\@tempdimb by -\@shadowstepY
+ \advance\@tempdimb by -2\@ovyy
+ \advance\@tempdimb by -2\@ovdy
+ \@tempdima=\@shadowsizeX
+ \vrule height \@tempdimb width \@tempdima}%
+%
+ \@tempdima=\@dimenC \@tempdimb=\@dimenD
+ \advance\@tempdima by -\@shadowsizeX \advance\@tempdima by \@ovxx
+ \advance\@tempdima by \@ovdx
+ \advance\@tempdimb by -\@shadowsizeY
+ \@@put{\@tempdima}{\@tempdimb}{%
+ \@tempdimb=\@dimenB \advance\@tempdimb by \@shadowsizeY
+ \advance\@tempdimb by -\@shadowstepY
+ \@tempdima=\@shadowsizeX \advance\@tempdima by -\@ovxx
+ \advance\@tempdima by -\@ovdx
+ \vrule height \@tempdimb width \@tempdima}%
+}
+
+%
+% correct shadow position before drawing
+%
+
+\def\@Help@A{\advance\@dimenC \shadowsepX\relax
+ \advance\@dimenD -\shadowsepY\relax}
+\def\@Help@B{\advance\@dimenC \shadowsepX\relax
+ \advance\@dimenD \shadowsepY\relax}
+\def\@Help@C{\advance\@dimenC -\shadowsepX\relax
+ \advance\@dimenD \shadowsepY\relax}
+\def\@Help@D{\advance\@dimenC -\shadowsepX\relax
+ \advance\@dimenD -\shadowsepY\relax}
+%
+% correct shadow position after drawing
+%
+
+\def\@help@A{\advance\@dimenC \shadowstepX\relax
+ \advance\@dimenC \@halfwidth
+ \advance\@dimenD -\shadowstepY\relax
+ \advance\@dimenD -\@halfwidth}
+\def\@help@B{\advance\@dimenC \shadowstepX\relax
+ \advance\@dimenC \@halfwidth
+ \advance\@dimenD \shadowstepY\relax
+ \advance\@dimenD \@halfwidth}
+\def\@help@C{\advance\@dimenC -\shadowstepX\relax
+ \advance\@dimenC -\@halfwidth
+ \advance\@dimenD \shadowstepY\relax
+ \advance\@dimenD \@halfwidth}
+\def\@help@D{\advance\@dimenC -\shadowstepX\relax
+ \advance\@dimenC -\@halfwidth
+ \advance\@dimenD -\shadowstepY\relax
+ \advance\@dimenD -\@halfwidth}
+
+%%
+%% shadow types
+%%
+
+%
+% pure rectangle
+%
+
+\def\@rectshadow@R#1{%
+ \csname @Help@\s@corn\endcsname
+ \@prepdummy
+ \csname @helpshadow\s@corn\endcsname{#1}%
+ \csname @help@\s@corn\endcsname}
+
+\def\@rectshadow@r#1{%
+ \csname @Help@\s@corn\endcsname
+ \@prepdummy
+ \csname @helpShadow\s@corn\endcsname{#1}%
+ \csname @help@\s@corn\endcsname}
+
+%
+% parquet shadows
+%
+
+\def\@prepshadow@P{\@tempdima=\RectCorner\relax
+ \ifdim \@tempdima>\@shadowsizeX\relax \@negargfalse \fi
+ \ifdim \@tempdima>\@shadowsizeY\relax \@negargfalse \fi
+ \@ovxx=\@tempdima \@ovyy=\@tempdima
+ \@yyarg=0 \@ovdx=\@halfwidth \@ovdy=\@halfwidth
+}
+
+\def\@rectshadow@P#1{%
+ \csname @Help@\s@corn\endcsname
+ \@prepshadow@P
+ \if@negarg
+ \def\@tempa{#1}\csname @Helpshadow\s@corn\endcsname{#1}{P}%
+ \else
+ \@prepdummy
+ \@warn@corner
+ \fi
+ \csname @helpshadow\s@corn\endcsname{#1}%
+ \csname @help@\s@corn\endcsname}
+
+\def\@rectshadow@p#1{%
+ \csname @Help@\s@corn\endcsname
+ \@prepshadow@P
+ \if@negarg
+ \else
+ \@prepdummy
+ \@warn@corner
+ \fi
+ \csname @helpShadow\s@corn\endcsname{#1}%
+ \csname @help@\s@corn\endcsname}
+
+\def\@rectshadow@B#1{%
+ \csname @Help@\s@corn\endcsname
+ \@prepshadow@P
+ \if@negarg
+ \def\@tempa{#1}\csname @Helpshadow\s@corn\endcsname{#1}{c}%
+ \else
+ \@prepdummy
+ \@warn@corner
+ \fi
+ \csname @helpshadow\s@corn\endcsname{#1}%
+ \csname @help@\s@corn\endcsname}
+
+\def\@rectshadow@b#1{%
+ \csname @Help@\s@corn\endcsname
+ \@prepshadow@P
+ \if@negarg
+ \def\@tempa{#1}\csname @Helpshadow\s@corn\endcsname{#1}{cc}%
+ \else
+ \@prepdummy
+ \@warn@corner
+ \fi
+ \csname @helpShadow\s@corn\endcsname{#1}%
+ \csname @help@\s@corn\endcsname}
+
+%
+% octal shadows
+%
+
+\def\@prepshadow@L{\@negargtrue
+ \@ovxx=0pt \@ovyy=0pt \@ovdx=0pt \@ovdy=0pt
+ \ifnum \@RombX>0 \else \@negargfalse \fi
+ \ifnum \@RombY>0 \else \@negargfalse \fi
+ \if@negarg
+ \ifnum \@RombX>\@RombY
+ \@tempdima=\LineCorner\relax
+ \@tempdimb=\@tempdima
+ \multiply\@tempdimb by \@RombY
+ \divide\@tempdimb by \@RombX
+ \else
+ \@tempdimb=\LineCorner\relax
+ \@tempdima=\@tempdimb
+ \multiply\@tempdima by \@RombX
+ \divide\@tempdima by \@RombY
+ \fi
+ \ifdim \@tempdima>\@shadowsizeX\relax \@negargfalse \fi
+ \ifdim \@tempdimb>\@shadowsizeY\relax \@negargfalse \fi
+ \@ovxx=\@tempdima \@ovyy=\@tempdimb
+ \ifnum \@RombX>\@RombY
+ \ifdim \@ovxx<10pt \@negargfalse \fi
+ \else
+ \ifdim \@ovyy<10pt \@negargfalse \fi
+ \fi
+ \if@negarg
+ \@ovxx=\@tempdima \@ovyy=\@tempdimb
+ \@yyarg=0 \@ovdx=\@halfwidth \@ovdy=\@halfwidth
+ \fi
+ \fi
+}
+
+\def\@rectshadow@L#1{%
+ \csname @Help@\s@corn\endcsname
+ \@prepshadow@L
+ \if@negarg
+ \csname @Helpshadow\s@corn\endcsname{#1}{L}%
+ \else
+ \@prepdummy
+ \@warn@corner
+ \fi
+ \csname @helpshadow\s@corn\endcsname{#1}%
+ \csname @help@\s@corn\endcsname}
+
+%
+% oval shadows
+%
+\def\@prepshadow@O{\@negargtrue
+ \@tempdima=\RoundCorner\relax
+ \ifdim \@tempdima>\@shadowsizeX\relax \@negargfalse \fi
+ \ifdim \@tempdima>\@shadowsizeY\relax \@negargfalse \fi
+ \if@negarg \@tempdima=2\@tempdima \@getcirc\@tempdima \fi
+ \if@negarg
+ \@ovxx=0.5\wd\@tempboxa \@ovyy=\@ovxx \@yyarg=\@tempcnta
+ \@tempdima=0.5\ht\@tempboxa
+ \advance\@tempdima by -0.5\dp\@tempboxa
+ \@ovdx=\@halfwidth \advance\@ovdx by -\@tempdima
+ \@ovdy=\@ovdx
+ \fi
+}
+
+\def\@rectshadow@O#1{%
+ \csname @Help@\s@corn\endcsname
+ \@prepshadow@O
+ \if@negarg
+ \csname @Helpshadow\s@corn\endcsname{#1}{O}%
+ \else
+ \@prepdummy
+ \@warn@corner
+ \fi
+ \csname @helpshadow\s@corn\endcsname{#1}%
+ \csname @help@\s@corn\endcsname}
+
+\def\@prepshadow@o{%
+ \@tempdima=\DiskCorner\relax
+ \get@Disk\@tempdima
+ \if@negarg
+ \@yyarg=\@tempcnta \@ovxx=0.5\wd\@tempboxa
+ \@ovyy=\@ovxx \@ovdx=\@halfwidth \@ovdy=\@ovdx
+ \ifdim 2\@ovxx>\@shadowsizeX\relax \@negargfalse \fi
+ \ifdim 2\@ovxx>\@shadowsizeY\relax \@negargfalse \fi
+ \fi
+}
+
+\def\@rectshadow@o#1{%
+ \csname @Help@\s@corn\endcsname
+ \@prepshadow@o
+ \if@negarg
+ \csname @Helpshadow\s@corn\endcsname{#1}{o}%
+ \else
+ \@prepdummy
+ \@warn@corner
+ \fi
+ \csname @helpShadow\s@corn\endcsname{#1}%
+ \csname @help@\s@corn\endcsname}
+
+%
+% astro shadows
+%
+
+\def\@prepshadow@A{\@negargtrue
+ \@tempdima=\RoundCorner\relax
+ \ifdim \@tempdima>\@shadowsizeX\relax \@negargfalse \fi
+ \ifdim \@tempdima>\@shadowsizeY\relax \@negargfalse \fi
+ \if@negarg \@tempdima=2\@tempdima \@getcirc\@tempdima \fi
+ \if@negarg
+ \@ovxx=0.5\wd\@tempboxa \@ovyy=\@ovxx \@yyarg=\@tempcnta
+ \@tempdima=0.5\ht\@tempboxa
+ \advance\@tempdima by -0.5\dp\@tempboxa
+ \@ovdx=\@halfwidth \advance\@ovdx by -\@tempdima
+ \@ovdy=\@ovdx
+ \fi
+}
+
+\def\@rectshadow@A#1{%
+ \csname @Help@\s@corn\endcsname
+ \@prepshadow@A
+ \if@negarg
+ \csname @Helpshadow\s@corn\endcsname{#1}{A}%
+ \else
+ \@prepdummy
+ \@warn@corner
+ \fi
+ \csname @helpshadow\s@corn\endcsname{#1}%
+ \csname @help@\s@corn\endcsname}
+
+%
+% set frame/corner parameters
+%
+
+\def\framesep#1{\def\framesepH{#1}%
+ \def\framesepXM{1.0}\def\framesepYM{1.0}%
+ \def\framesepXP{1.0}\def\framesepYP{1.0}%
+ \frameexpand{0pt}%
+ \ignorespaces}
+
+\def\frameexpand#1{\def\frameexpandX{#1}%
+ \def\frameexpandY{#1}%
+ \ignorespaces}
+
+\def\shadowsep#1{\def\shadowsepX{#1}%
+ \def\shadowsepY{#1}%
+ \ignorespaces}
+
+\def\shadowsize#1{\def\shadowstepX{#1}\def\shadowstepY{#1}%
+ \def\shadowsizeX{#1}\def\shadowsizeY{#1}%
+ \shadowshrink{1.0}\shadowminsize{0pt}%
+ \ignorespaces}
+
+\def\shadowminsize#1{\def\shadowminsizeX{#1}%
+ \def\shadowminsizeY{#1}%
+ \ignorespaces}
+
+\def\shadowshrink#1{%
+ \def\shadowshrinkstepX{#1}\def\shadowshrinkstepY{#1}%
+ \def\shadowshrinksizeX{#1}\def\shadowshrinksizeY{#1}%
+ \ignorespaces}
+
+\def\shadowcorner#1{%
+ \if A#1\relax \def\s@corn{A}%
+ \else \if a#1\relax \def\s@corn{A}%
+ \else \if B#1\relax \def\s@corn{B}%
+ \else \if b#1\relax \def\s@corn{B}%
+ \else \if C#1\relax \def\s@corn{C}%
+ \else \if c#1\relax \def\s@corn{C}%
+ \else \if D#1\relax \def\s@corn{D}%
+ \else \if d#1\relax \def\s@corn{D}%
+ \else \@warning{Illegal shadow corner (#1)}%
+ \fi\fi\fi\fi\fi\fi\fi\fi
+ \ignorespaces}
+
+\def\@setshadowsize{%
+ \let\@shadowstepX=\shadowstepX
+ \let\@shadowstepY=\shadowstepY
+ \let\@shadowsizeX=\shadowsizeX
+ \let\@shadowsizeY=\shadowsizeY
+}
+
+\def\@updateshadowsize{%
+ \advance\@dimenA by \@shadowsizeX
+ \advance\@dimenA by -\@shadowstepX
+ \advance\@dimenB by \@shadowsizeY
+ \advance\@dimenB by -\@shadowstepY
+ \@shrink@size{\@shadowstepX}{\shadowshrinkstepX}%
+ \@shrink@size{\@shadowstepY}{\shadowshrinkstepY}%
+ \@shrink@size{\@shadowsizeX}{\shadowshrinksizeX}%
+ \@shrink@size{\@shadowsizeY}{\shadowshrinksizeY}%
+ \@tempdima=\@shadowstepX \advance\@tempdima by \shadowminsizeX
+ \ifdim \@tempdima<\@dimenA \relax \else \@dimenA=0pt \fi
+ \@tempdima=\@shadowstepY \advance\@tempdima by \shadowminsizeY
+ \ifdim \@tempdima<\@dimenB \relax \else \@dimenB=0pt \fi
+}
+
+\def\@shrink@size#1#2{%
+ \@tempdima=#1\relax
+ \@tempdima=#2\@tempdima\relax
+ \edef #1{\the\@tempdima}%
+}
+
+%%%%%%% !!!!!!!!!!!!!!!!!!!! %%%%%%%%%%%%%
+%%%%%%% These are CIRC macro %%%%%%%%%%%%%
+%%%%%%% !!!!!!!!!!!!!!!!!!!! %%%%%%%%%%%%%
+
+\def\mcircle@scaled{1000}
+
+\def\define@circlefnt{%
+ \ifflag@thicklines
+ \font\m@circlefnt=lcirclew10 scaled \mcircle@scaled
+ \else
+ \font\m@circlefnt=lcircle10 scaled \mcircle@scaled
+ \fi
+ \let\@circlefnt=\m@circlefnt \ignorespaces}
+
+
+\def\magcircle#1{%
+ \edef\mcircle@scaled{%
+ \if 0#1 1000
+ \else \if h#1 1095
+ \else \if 1#1 1200
+ \else \if 2#1 1440
+ \else \if 3#1 1728
+ \else \if 4#1 2074
+ \else \if 5#1 2488
+ \else 1000
+ \fi\fi\fi\fi\fi\fi\fi
+ }\define@circlefnt \ignorespaces}
+
+\def\scaledcircle#1{%
+ \def\mcircle@scaled{#1}%
+ \ifnum #1>0 \def\mcircle@scaled{#1}%
+ \else \def\mcircle@scaled{1000}%
+ \fi
+ \define@circlefnt \ignorespaces}
+
+\def\circle@factor{%
+ \ifdim \@tempdima>16.383pt
+ \divide\@tempdima by \mcircle@scaled\relax
+ \multiply\@tempdima by 1000
+ \else
+ \multiply\@tempdima by 1000
+ \divide\@tempdima by \mcircle@scaled\relax
+ \fi
+}
+
+%%%
+%%% These macro are from LaTeX with some corrections
+%%%
+
+% now set thin/thick flag and update circle scaled font
+%
+\def\thinlines{\flag@thicklinesfalse\define@circlefnt
+ \let\@linefnt\tenln \let\@circlefnt\tencirc
+ \@wholewidth\fontdimen8\tenln \@halfwidth .5\@wholewidth}
+
+% now set thin/thick flag and update circle scaled font
+%
+\def\thicklines{\flag@thicklinestrue\define@circlefnt
+ \let\@linefnt\tenlnw \let\@circlefnt\tencircw
+ \@wholewidth\fontdimen8\tenlnw \@halfwidth .5\@wholewidth}
+
+% calculate \@tempcnta = oval char code,
+% \@tempboxa = base char,
+% \@tempdima = diameter.
+% it is corrected to scale circle font and to indicate
+% diameter error: \@negarg = false if diameter is too small
+%
+\def\@getcirc#1{\@tempdima #1\relax \circle@factor
+ \advance\@tempdima 2\p@ \@tempcnta\@tempdima
+ \@tempdima 4\p@ \divide\@tempcnta\@tempdima
+ \ifnum \@tempcnta >10\relax \@tempcnta 10\relax\fi
+ \ifnum \@tempcnta >\z@ \advance\@tempcnta\m@ne \@negargtrue
+ \else \@warning{Oval segment is too small}\@negargfalse \fi
+ \multiply\@tempcnta 4\relax
+ \setbox \@tempboxa \hbox{\@circlefnt \char \@tempcnta}%
+ \@tempdima \wd \@tempboxa}
+
+% this macro draws blobs and disks,
+% it is corrected to scale circle font
+%
+\def\@circ#1#2{\get@circcode{#1}%
+ \advance\@tempcnta #2\relax
+ \@circlefnt \char\@tempcnta}
+
+
+%%%
+%%% New circle macros
+%%%
+
+% calculate \@tempcnta = blob/circle char code
+\def\get@circcode#1{\@tempdima=#1\relax
+ \circle@factor \@negargfalse
+ \advance\@tempdima by 0.5pt
+ \@tempcnta=\@tempdima \@tempdima=1pt
+ \divide\@tempcnta by \@tempdima
+ \ifnum \@tempcnta>15\relax \@tempcnta=15\relax \fi
+ \ifnum \@tempcnta>0\relax \advance\@tempcnta by -1 \@negargtrue \fi
+}
+
+% it calculates \@tempcnta = blob char code
+% \@tempboxa = base char,
+% \@tempdima = diameter.
+\def\get@Disk#1{\get@circcode{#1}%
+ \advance\@tempcnta by 112
+ \setbox\@tempboxa\hbox{\@circlefnt \char\@tempcnta}%
+}
+
+
+% it calculates \@tempcnta = circle char code
+% \@tempboxa = base char,
+% \@tempdima = diameter.
+\def\get@Circle#1{\get@circcode{#1}%
+ \advance\@tempcnta by 96
+ \setbox\@tempboxa\hbox{\@circlefnt \char\@tempcnta}%
+}
+
+%
+% top right segment: \put(10,10){\trcircle{10}}
+\def\trcircle#1{\@trcircle{#1\unitlength}}
+\def\@trcircle#1{\@tempdima #1\relax \@getcirc\@tempdima \@@trcircle}
+\def\@@trcircle{\sbox{\@tempboxa}{\hbox{\@circlefnt \char \@tempcnta}}%
+ \@tempdima 0.5\wd \@tempboxa
+ \@tempdimb 0.5\ht \@tempboxa
+ \advance \@tempdimb -0.5\dp \@tempboxa
+ \advance \@tempdima -\@tempdimb
+ \hbox{\kern \@tempdima
+ \lower -\@tempdima
+ \hbox{\usebox\@tempboxa}}%
+ \sbox{\@tempboxa}{}%
+ }
+%
+% bottom right segment: \put(10,10){\brcircle{10}}
+\def\brcircle#1{\@brcircle{#1\unitlength}}
+\def\@brcircle#1{\@tempdima #1\relax \@getcirc\@tempdima \@@brcircle}
+\def\@@brcircle{\advance\@tempcnta 1\relax
+ \sbox{\@tempboxa}{\hbox{\@circlefnt \char \@tempcnta}}%
+ \@tempdima 0.5\wd \@tempboxa
+ \@tempdimb 0.5\ht \@tempboxa
+ \advance \@tempdimb -0.5\dp \@tempboxa
+ \advance \@tempdima -\@tempdimb
+ \advance \@tempdimb 0.5\wd \@tempboxa
+ \hbox{\kern \@tempdima
+ \lower \@tempdimb
+ \hbox{\usebox\@tempboxa}}%
+ \sbox{\@tempboxa}{}%
+ }
+%
+% bottom left segment: \put(10,10){\blcircle{10}}
+\def\blcircle#1{\@blcircle{#1\unitlength}}
+\def\@blcircle#1{\@tempdima #1\relax \@getcirc\@tempdima \@@blcircle}
+\def\@@blcircle{\advance\@tempcnta 2\relax
+ \sbox{\@tempboxa}{\hbox{\@circlefnt \char \@tempcnta}}%
+ \@tempdima 0.5\wd \@tempboxa
+ \@tempdimb 0.5\ht \@tempboxa
+ \advance \@tempdimb -0.5\dp \@tempboxa
+ \advance \@tempdimb \@tempdima
+ \hbox{\kern -\@tempdimb
+ \lower \@tempdimb
+ \hbox{\usebox\@tempboxa}}%
+ \sbox{\@tempboxa}{}%
+ }
+%
+% top left segment: \put(10,10){\tlcircle{10}}
+\def\tlcircle#1{\@tlcircle{#1\unitlength}}
+\def\@tlcircle#1{\@tempdima #1\relax \@getcirc\@tempdima \@@tlcircle}
+\def\@@tlcircle{\advance\@tempcnta 3\relax
+ \sbox{\@tempboxa}{\hbox{\@circlefnt \char \@tempcnta}}%
+ \@tempdima 0.5\wd \@tempboxa
+ \@tempdimb 0.5\ht \@tempboxa
+ \advance \@tempdimb -0.5\dp \@tempboxa
+ \advance \@tempdimb \@tempdima
+ \hbox{\kern -\@tempdimb
+ \lower -\@tempdima
+ \hbox{\usebox\@tempboxa}}%
+ \sbox{\@tempboxa}{}%
+ }
+%
+
+\def\TRcircle#1{\@TRcircle{#1\unitlength}}
+\def\@TRcircle#1{\@tempdima #1\relax \@getcirc\@tempdima \@@TRcircle}
+\def\@@TRcircle{\sbox{\@tempboxa}{\hbox{\@circlefnt \char \@tempcnta}}%
+ \@tempdimb 0.5\ht\@tempboxa \advance\@tempdimb -0.5\dp\@tempboxa
+ \hbox{\kern -\@tempdimb
+ \raise -\@tempdimb
+ \hbox{\usebox\@tempboxa}}%
+ \sbox{\@tempboxa}{}%
+}
+
+\def\BRcircle#1{\@BRcircle{#1\unitlength}}
+\def\@BRcircle#1{\@tempdima #1\relax \@getcirc\@tempdima \@@BRcircle}
+\def\@@BRcircle{\advance\@tempcnta 1\relax
+ \sbox{\@tempboxa}{\hbox{\@circlefnt \char \@tempcnta}}%
+ \@tempdimb 0.5\ht\@tempboxa \advance\@tempdimb -0.5\dp\@tempboxa
+ \hbox{\kern -\@tempdimb
+ \raise -\@tempdimb
+ \hbox{\usebox\@tempboxa}}%
+ \sbox{\@tempboxa}{}%
+}
+
+\def\BLcircle#1{\@BLcircle{#1\unitlength}}
+\def\@BLcircle#1{\@tempdima #1\relax \@getcirc\@tempdima \@@BLcircle}
+\def\@@BLcircle{\advance\@tempcnta 2\relax
+ \sbox{\@tempboxa}{\hbox{\@circlefnt \char \@tempcnta}}%
+ \@tempdimb 0.5\ht\@tempboxa \advance\@tempdimb -0.5\dp\@tempboxa
+ \hbox{\kern -\@tempdimb
+ \raise -\@tempdimb
+ \hbox{\usebox\@tempboxa}}%
+ \sbox{\@tempboxa}{}%
+}
+
+
+\def\TLcircle#1{\@TLcircle{#1\unitlength}}
+\def\@TLcircle#1{\@tempdima #1\relax \@getcirc\@tempdima \@@TLcircle}
+\def\@@TLcircle{\advance\@tempcnta 3\relax
+ \sbox{\@tempboxa}{\hbox{\@circlefnt \char \@tempcnta}}%
+ \@tempdimb 0.5\ht\@tempboxa \advance\@tempdimb -0.5\dp\@tempboxa
+ \hbox{\kern -\@tempdimb
+ \raise -\@tempdimb
+ \hbox{\usebox\@tempboxa}}%
+ \sbox{\@tempboxa}{}%
+}
+
+%%%%%%% !!!!!!!!!!!!!!!!!!!!!! %%%%%%%%%%%%%
+%%%%%%% These are VECTOR macro %%%%%%%%%%%%%
+%%%%%%% !!!!!!!!!!!!!!!!!!!!!! %%%%%%%%%%%%%
+
+
+% parameters for vector arrows:
+% \if@negarg shows that the arrow is rotated by 180^{\circ}
+% \@tempb is the relative position of the point of alignment
+% \@tempa is the alignment style:
+% e - arrow
+% b - backside
+% m - middle
+% E - above arrow
+% B - before backside
+\def\Vec@e{\def\@tempa{e}\def\@tempb{1.0}\@negargfalse}
+\def\Vec@E{\def\@tempa{b}\def\@tempb{1.0}\@negargtrue}
+\def\Vec@b{\def\@tempa{b}\def\@tempb{0.0}\@negargfalse}
+\def\Vec@B{\def\@tempa{e}\def\@tempb{0.0}\@negargtrue}
+\def\Vec@m{\def\@tempa{m}\def\@tempb{0.5}\@negargfalse}
+\def\Vec@M{\def\@tempa{m}\def\@tempb{0.5}\@negargtrue}
+\def\Vec@x{\def\@tempa{E}\def\@tempb{1.0}\@negargfalse}
+\def\Vec@X{\def\@tempa{B}\def\@tempb{1.0}\@negargtrue}
+\def\Vec@z{\def\@tempa{B}\def\@tempb{0.0}\@negargfalse}
+\def\Vec@Z{\def\@tempa{E}\def\@tempb{0.0}\@negargtrue}
+
+\def\VectorStyle[#1]#2#3#4{%
+ \expandafter\edef\csname Vec@#1\endcsname{%
+ \def\@tempa{#2}\def\@tempb{#3}%
+ \if b#4 \@negargtrue \else \@negargfalse \fi
+ }%
+}
+
+\def\@VecA@e{\@tempdimb 0pt}
+\def\@VecA@b{\@tempdimb 4pt}
+\def\@VecA@m{\@tempdimb 3pt}
+\def\@VecA@E{\@tempdimb -2pt}
+\def\@VecA@B{\@tempdimb 6pt}
+
+\def\VectorShiftStyle[#1]#2{%
+ \expandafter\edef\csname @VecA@#1\endcsname{\@tempdimb #2\relax}%
+}
+
+\def\Vector{\@ifnextchar[{\@Vector}{\@Vector[e]}}
+
+\def\@Vector[#1](#2,#3)#4{%
+ \@put{0pt}{0pt}{\line(#2,#3){#4}}%
+ \@tfor\@tempa:=#1\do{%
+ \def\@tempb{x} \csname Vec@\@tempa\endcsname
+ \if\@tempb x\relax \else
+% % \@tempdima is the length factor,
+ \ifnum #2=\z@ \@tempdima #4\unitlength
+ \else \ifnum #2<\z@ \@tempdima -#4\unitlength
+ \else \@tempdima #4\unitlength \fi
+ \divide\@tempdima#2
+ \fi
+% % \@tempb contains fraction (0 <= \@tempb <= 1),
+ \@tempdima \@tempb\@tempdima\relax
+% % \@tempa is the alignment type -- set \@tempdimb = shift
+ \@tempdimb 0pt\relax \csname @VecA@\@tempa\endcsname
+% % assign square root value to \@tempa
+ \@VecSqrt{#2}{#3}%
+% % correct alignment shift
+ \@tempdimb \@tempa\@tempdimb\relax
+ \if@negarg \advance\@tempdima -\@tempdimb
+ \else \advance\@tempdima \@tempdimb \fi
+% % calculate final value
+ \@tempdimb \@tempdima\relax
+ \@tempdima #2\@tempdima\relax
+ \@tempdimb #3\@tempdimb\relax
+% % get character
+ \if@negarg \@xarg -#2\relax \@yarg -#3\relax
+ \else \@xarg #2\relax \@yarg #3\relax
+ \fi
+ \setbox\@linechar\hbox{\@linefnt
+ \ifnum \@xarg=0 \ifnum \@yarg>0 \char'66\relax
+ \else \char'77\relax \fi
+ \else
+ \ifnum \@xarg<0 \@getlarrow(-\@xarg,-\@yarg)%
+ \else \@getrarrow(\@xarg,\@yarg)%
+ \fi\fi}%
+% % this is \put(x,y)
+ \ifnum \@xarg>0 \advance\@tempdima -\wd\@linechar \fi
+ \ifnum \@yarg>0 \advance\@tempdimb -\ht\@linechar \fi
+ \@@put{\@tempdima}{\@tempdimb}{\box\@linechar}%
+ \fi%
+ }% enddo \@tfor
+}
+
+% assign square root value to \@tempa
+\def\@VecSqrt#1#2{\@xarg #1\relax \@yarg #2\relax
+ \ifnum\@xarg<0 \@xarg -\@xarg \fi
+ \ifnum\@yarg<0 \@yarg -\@yarg \fi
+ \ifnum\@xarg<\@yarg \@yyarg \@xarg \relax \@xarg \@yarg \relax
+ \@yarg \@yyarg \relax \fi
+ \edef\@tempa{%
+ \ifcase \@xarg 0.0
+ \or \ifcase \@yarg 1.0
+ \else 0.70710678
+ \fi
+ \or \ifcase \@yarg 1.0
+ \or 0.44721360
+ \else 0.35355339
+ \fi
+ \or \ifcase \@yarg 1.0
+ \or 0.31622777
+ \or 0.27735010
+ \else 0.23570226
+ \fi
+ \or \ifcase \@yarg 1.0
+ \or 0.24253563
+ \or 0.22360680
+ \or 0.20000000
+ \else 0.17677670
+ \fi
+ \or \ifcase \@yarg 1.0
+ \or 0.19611614
+ \or 0.18569534
+ \or 0.17149859
+ \or 0.15617376
+ \else 0.14142136
+ \fi
+ \or \ifcase \@yarg 1.0
+ \or 0.16439899
+ \or 0.15811388
+ \or 0.14907120
+ \or 0.13867505
+ \or 0.12803688
+ \else 0.11785113
+ \fi
+ \else 0.0
+ \fi}%
+}
+
+%%%
+%%% these are LaTeX macro which are corrected
+%%% to suite our purposes
+%%%
+
+\def\vector(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax
+\@tempcnta \ifnum\@xarg<\z@ -\@xarg\else\@xarg\fi
+\ifnum\@tempcnta<7\relax %% corr: 7 instead of 5
+\@linelen #3\unitlength
+\ifnum\@xarg =\z@ \@vvector
+ \else \ifnum\@yarg =\z@ \@hvector \else \@svector\fi
+\fi
+\else\@badlinearg\fi}
+
+
+\def\@svector{% %% corr: \@sline is moved from this place
+\@tempcnta\@yarg \ifnum\@tempcnta <\z@ \@tempcnta -\@tempcnta\fi
+\ifnum\@tempcnta <7 %% corr: 7 instead of 5
+ \@sline %% corr: \@sline is moved to this place
+%% original text was:
+% \hskip -\wd\@linechar
+% \@upordown\@clnht \hbox{\@linefnt \if@negarg
+% \@getlarrow(\@xarg,\@yyarg)\else \@getrarrow(\@xarg,\@yyarg)\fi}%
+%% corrected text:
+ \if@negarg \hskip -\wd\@linechar \fi
+ \ifnum \@yarg>\z@ \advance\@clnht \ht\@linechar \fi
+ \setbox\@linechar\hbox{\@linefnt \if@negarg \@getlarrow(\@xarg,\@yyarg)%
+ \else \@getrarrow(\@xarg,\@yyarg)%
+ \fi}%
+ \if@negarg \else \hskip -\wd\@linechar \fi
+ \ifnum \@yarg>\z@ \advance\@clnht -\ht\@linechar \fi
+ \@upordown\@clnht \copy\@linechar
+\else\@badlinearg\fi}
+
+
+%% calculate (\@tempcnta,\@tempcntb) as correct vector slopes
+\def\@corrgetarrow#1#2{\@tempcnta #1\relax \@tempcntb #2\relax
+\ifnum #2<\z@ \@tempcntb -\@tempcntb \fi
+\ifcase \@tempcnta\relax % no action for x=0
+ \or \ifnum \@tempcntb>4 \@tempcntb 4 \fi % action for x=1
+ \or \ifnum \@tempcntb=5 \@tempcnta 1 \@tempcntb 3 \fi % action for x=2
+ \or \ifnum \@tempcntb=5 \@tempcnta 2 \@tempcntb 3 \fi % action for x=3
+ \or \ifnum \@tempcntb=5 \@tempcnta 3 \@tempcntb 4 \fi % action for x=4
+ \or \ifcase \@tempcntb\relax % 5,0
+ \or \@tempcnta 4% 5,1
+ \or \@tempcnta 3 \@tempcntb 1 % 5,2
+ \or \@tempcnta 3 \@tempcntb 2 % 5,3
+ \or \@tempcnta 4 \@tempcntb 3 % 5,4
+ \or \@tempcnta 1 \@tempcntb 1 % 5,5
+ \or \@tempcnta 3 \@tempcntb 4 % 5,6
+ \fi % action for x=5
+ \or \ifnum \@tempcntb=1 \@tempcnta 4 \fi % 6,1
+ \ifnum \@tempcntb=5 \@tempcnta 4 \@tempcntb 3 \fi % 6,5
+ % action for x=6
+\fi
+\ifnum #2<\z@ \@tempcntb -\@tempcntb \fi
+}
+
+\def\@getlarrow(#1,#2){%% this macro is corrected
+\@corrgetarrow{#1}{#2}%
+\ifnum \@tempcntb=\z@ \@tempcnta'33
+ \else \multiply\@tempcnta \sixt@@n
+ \advance\@tempcnta -9
+ \multiply\@tempcntb \tw@
+ \ifnum \@tempcntb >\z@ \advance\@tempcnta \@tempcntb
+ \else \advance\@tempcnta -\@tempcntb
+ \advance\@tempcnta 64
+ \fi
+\fi
+\char\@tempcnta}
+
+\def\@getrarrow(#1,#2){%% this macro is corrected
+\@corrgetarrow{#1}{#2}%
+\ifnum\@tempcntb <\z@ \@tempcntb -\@tempcntb\relax\fi
+\ifcase \@tempcntb \@tempcnta'55
+ \or \ifnum \@tempcnta<\thr@@ \multiply\@tempcnta 24
+ \advance\@tempcnta -6
+ \else \ifnum \@tempcnta=\thr@@ \@tempcnta 49
+ \else\@tempcnta 58 \fi
+ \fi
+ \or \ifnum \@tempcnta<\thr@@ \multiply\@tempcnta 24
+ \advance\@tempcnta -\thr@@
+ \else \@tempcnta 51 \fi
+ \or \multiply\@tempcnta \sixt@@n
+ \advance\@tempcnta -\tw@
+ \else \multiply\@tempcnta \sixt@@n
+ \advance\@tempcnta 7
+\fi
+\ifnum #2<\z@ \advance\@tempcnta 64 \fi
+\char\@tempcnta}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% The command \pictureunit[percent]{xsize}
+% selects the value of \unitlength so that the picture
+% which is xsize units in width occupies percent
+% width of the paper. By default percent=100 which
+% correspond to 90% of the total width of the paper.
+% \pictureunit calculates \unitlength corectly also for
+% twocolumn mode and inside itemize/enumerate/etc.
+%
+% Example:
+% \pictureunit{75}
+% \begin{picture}(120,80)
+% .....
+%
+% Default percentage value can be changed by
+% \renewcommand{\defaultpercent}{50}
+%
+% Environment mcpicture combines \pictureunit and
+% \begin{picture}-\end{picture}.
+%
+% \begin{Picture}(120,80)(-60,-40)
+% .......
+% \end{Picture}
+%
+% Optional parameter can contain percent width value
+% which is used instead of \defaultpercent:
+%
+% \begin{Picture}[50](120,80)(-60,-40)
+% .......
+% \end{Picture}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\pictureunit{\@ifnextchar[{\mc@scaleunit}{\mc@scaleunit[\defaultpercent]}}
+
+\def\mc@scaleunit[#1]#2{\@tempdima=0.009\hsize
+ \@tempdima=#1\@tempdima
+ \@tempdimb=#2pt
+ \@divide{\@tempdima}{\@tempdimb}%
+ {\@tempdima}{\unitlength}%
+ \unitlength=\@tempdima}
+
+\newenvironment{Picture}{}{}
+
+\def\Picture{\@ifnextchar[{\mc@picture}{\mc@picture[\defaultpercent]}}
+
+\def\mc@picture[#1](#2,#3){%
+ \mc@scaleunit[#1]{#2}%
+ \picture(#2,#3)}
+
+\def\endPicture{\endpicture}
+
+
+% *********************************************************************
+% *** The following macros are taken from PiCTeX with minor changes ***
+% *********************************************************************
+
+% DIVISION (Does long division of dimension registers)
+% ** \@divide{DIVIDEND}{DIVISOR}{RESULT}{default}
+
+% ** \@divide DIVIDEND [by] DIVISOR [to get] ANSWER
+% ** Divides the dimension DIVIDEND by the dimension DIVISOR, placing the
+% ** quotient in the dimension register ANSWER. Values are understood to
+% ** be in points. E.g. 12.5pt/1.4pt=8.92857pt.
+% ** Quotient is accurate to 1/65536pt=2**[-16]pt
+% ** |DIVISOR| should be < 2048pt (about 28 inches).
+\def\@divide#1#2#3#4{%
+\ifdim #2=\z@ #3=#4\relax
+\else
+ \@dimenB=#1% ** dimB holds current remainder (r)
+ \@dimenC=#2% ** dimC holds divisor (d)
+ \@dimenD=\@dimenB% ** dimD holds quotient q=r/d for this
+ \divide \@dimenD \@dimenC% ** step, in units of scaled pts
+ \@dimenA=\@dimenD% ** dimA eventually holds answer (a)
+ \multiply\@dimenD \@dimenC% ** r <-- r - dq
+ \advance\@dimenB -\@dimenD% ** First step complete. Have integer part
+% ** of a, and corresponding remainder.
+ \@dimenD=\@dimenC% ** Temporarily use dimD to hold |d|
+ \ifdim\@dimenD<\z@ \@dimenD=-\@dimenD
+ \fi
+ \ifdim\@dimenD<64pt% ** Branch on the magnitude of |d|
+ \@divstep[256]\@divstep[256]%
+ \else
+% ** The following code handles divisors d with
+% ** (1) .88in = 64pt <= d < 256pt = 3.54in
+% ** (2) 3.54in = 256pt <= d < 2048pt = 28.34in
+% ** Anything bigger than that may result in an overflow condition.
+ \ifdim\@dimenD<256pt
+ \@divstep[64]\@divstep[32]\@divstep[32]%
+ \else
+ \@divstep[8]\@divstep[8]\@divstep[8]\@divstep[8]\@divstep[8]%
+ \@dimenA=2\@dimenA
+ \fi
+% ** For our purposes, we should never even see case (2).
+ \fi
+ #3=\@dimenA
+\fi\ignorespaces}
+
+
+% ** The following macro does the real long division work.
+\def\@divstep[#1]{% ** #1 = "B"
+ \@dimenB=#1\@dimenB% ** r <-- B*r
+ \@dimenD=\@dimenB% ** dimD holds quotient q=r/d for this
+ \divide \@dimenD by \@dimenC% ** step, in units of scaled pts
+ \@dimenA=#1\@dimenA% ** a <-- B*a + q
+ \advance\@dimenA by \@dimenD%
+ \multiply\@dimenD by \@dimenC% ** r <-- r - dq
+ \advance\@dimenB by -\@dimenD}
+
+% ************************************************
+% ******** End of PiCTeX division macros *********
+% ************************************************
+
+
+%%%%%%% !!!!!!!!!!!!!!!!!! %%%%%%%%%%%%%
+%%%%%%% Default style data %%%%%%%%%%%%%
+%%%%%%% !!!!!!!!!!!!!!!!!! %%%%%%%%%%%%%
+
+\def\defaultpercent{100}
+
+\thinlines
+
+\def\DiskCorner{5pt}
+\def\RoundCorner{5pt}
+\def\LineCorner{10pt}
+\def\RectCorner{5pt}
+
+\framesep{4pt}
+\shadowsep{1pt}
+\shadowsize{5pt}
+\shadowshrink{1}
+
+\shadowcorner{A}
+
+\rombboxstyle(2,1,2pt)
+
+%
+% save updated LaTeX macro
+%
+
+
+%
+% switch two modes
+%
+
+\let\grf@thinlines=\thinlines
+\let\grf@thicklines=\thicklines
+\let\grf@@getcirc=\@getcirc
+\let\grf@@circ=\@circ
+\let\grf@vector=\vector
+\let\grf@@svector=\@svector
+\let\grf@@getlarrow=\@getlarrow
+\let\grf@@gerlarrow=\@getrarrow
+
+
+\def\setlatexmacro{%
+ \let\thinlines=\ltx@thinlines
+ \let\thicklines=\ltx@thicklines
+ \let\@getcirc=\ltx@@getcirc
+ \let\@circ=\ltx@@circ
+ \let\vector=\ltx@vector
+ \let\@svector=\ltx@@svector
+ \let\@getlarrow=\ltx@@getlarrow
+ \let\@gerlarrow=\ltx@@getrarrow
+ \ignorespaces
+}
+
+\def\settestmacro{%
+ \let\thinlines=\grf@thinlines
+ \let\thicklines=\grf@thicklines
+ \let\@getcirc=\grf@@getcirc
+ \let\@circ=\grf@@circ
+ \let\vector=\grf@vector
+ \let\@svector=\grf@@svector
+ \let\@getlarrow=\grf@@getlarrow
+ \let\@gerlarrow=\grf@@getrarrow
+ \ignorespaces
+}
+
+%
+\catcode`@=\oldatcatcode
+%
+