%% xy.tex from $Id: xy.doc,v 3.35 2013/10/06 01:14:17 krisrose Exp $ %% %% Basic Xy-pictures: Xy-pic bootstrap and kernel macros. %% Copyright (c) 1991-2011 Kristoffer H. Rose %% %% This file is part of the Xy-pic package for graphs and diagrams in TeX. %% Copyright (c) 1991-2011 Kristoffer H. Rose %% %% The Xy-pic package is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by the %% Free Software Foundation; either version 2 of the License, or (at your %% option) any later version. %% %% The Xy-pic package is distributed in the hope that it will be useful, but %% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY %% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License %% for more details. %% %% You should have received a copy of the GNU General Public License along %% with this package; if not, see http://www.gnu.org/licenses/. %% \ifx\xyloaded\undefined\else\message{not reloaded}\endinput\fi \let\xyloaded=\relax \message{Bootstrap\string'ing\string:} {\catcode96 12\catcode`\#6\catcode`\.12\catcode`\:12\catcode`\'12\catcode`\@11 \ifx\xywarnifdefined\undefined\else \immediate\write16{}% \immediate\write16{Xy-pic Warning: \string\xywarnifdefined\space redefined.}% \immediate\write16{}\fi \gdef\xywarnifdefined#1{\ifx#1\undefined\else \immediate\write16{}% \immediate\write16{Xy-pic Warning: `\string#1' redefined.}% \immediate\write16{}\fi} \xywarnifdefined\xydef@ \gdef\xydef@#1{\xywarnifdefined#1\gdef#1} \xywarnifdefined\xylet@ \gdef\xylet@#1{\xywarnifdefined#1\global\let#1} \xywarnifdefined\xynew@ \gdef\xynew@#1#2{\xywarnifdefined#2\csname new#1\endcsname#2}} \message{catcodes\string,} \xywarnifdefined\xyuncatcodes \xywarnifdefined\xyreuncatcodes \def\xyreuncatcodes{\edef\xyuncatcodes{% \catcode92 0 \catcode123 1 \catcode125 2 \catcode37 14 \catcode 9 \the\catcode 9 \catcode10 \the\catcode10 \catcode12 \the\catcode12 \catcode35 \the\catcode35 \catcode36 \the\catcode36 \catcode38 \the\catcode38 \catcode43 \the\catcode43 \catcode45 \the\catcode45 \catcode46 \the\catcode46 \catcode47 \the\catcode47 \catcode60 \the\catcode60 \catcode61 \the\catcode61 \catcode62 \the\catcode62 \catcode64 \the\catcode64 \catcode96 \the\catcode96 \newlinechar \the\newlinechar \endlinechar \the\endlinechar }} \xyreuncatcodes \xywarnifdefined\xycatcodes \def\xycatcodes{% \catcode 9 10 \catcode 35 6 \catcode 36 3 \catcode 38 4 \catcode 43 12 \catcode 45 12 \catcode 46 12 \catcode 47 12 \catcode 60 12 \catcode 61 12 \catcode 62 12 \catcode 64 11 \catcode 96 12 } \xycatcodes \message{docmode,} {\catcode`\|0 \xywarnifdefined|DOCMODE \gdef|DOCMODE#1{\ifx(#1\relax \xycatcodes \expandafter\ignorespaces \else \skipspecials@ \expandafter\docm@\fi}% \xywarnifdefined\skipspecials@ \gdef\skipspecials@{% \catcode`\\12 \catcode`\{12 \catcode`\}12 \catcode`\#12 \catcode`\%12 \catcode`\^^L12 \endlinechar`\^^J }% \catcode`\/=12 \lccode`\/`\\% \lccode`\D`\D \lccode`\O`\O \lccode`\C`\C \lccode`\M`\M \lccode`\E`\E \lowercase{% \xywarnifdefined\docm@ \gdef\docm@{\docm@i}% \xywarnifdefined\docm@i \gdef\docm@i#1^^J{\docm@ii#1/DOCMODE\docm@iii}% \xywarnifdefined\docm@ii \gdef\docm@ii#1/DOCMODE{\def\next@{#1}\futurelet\next\docm@iii}% \xywarnifdefined\docm@iii \gdef\docm@iii#1\docm@iii{% \ifx\next\docm@iii \let\next\next@ \docecho@ \let\next@\docm@ \else\ifx\next@\empty \let\next@\docfinish@ \else \edef\next@{\noexpand\docm@iv\next@/DOCMODE#1\noexpand\docm@iv}% \fi\fi \next@}% \xywarnifdefined\docm@iv \gdef\docm@iv#1/DOCMODE\docm@iv{\def\next{#1}\docecho@ \docm@}}% \xywarnifdefined\docecho@ \global\let\docecho@\relax \xywarnifdefined\docfinish@ \gdef\docfinish@{\xyuncatcodes|DOCMODE\next}} \xydef@\xydefcsname@#1{\DN@{#1}\DNii@##1{% \ifx ##1\relax\else \xywarning@{\string`\string##1\string' redefined}\fi \def##1}% \expandafter\nextii@\csname\codeof\next@\endcsname} \xydef@\xyletcsnamecsname@#1#2{\def\1{#1}\def\2{#2}\DN@##1##2{% \ifx ##1\relax\else \xywarning@{`\string##1\string' redefined}\fi \let##1=##2}% \expandafter\expandafter\expandafter\next@ \expandafter\csname\expandafter\codeof\expandafter\1\expandafter\endcsname \csname\codeof\2\endcsname} \xywarnifdefined\codeof \xywarnifdefined\codeof@ {\catcode`\:=12 \gdef\codeof#1{\expandafter\codeof@\meaning#1<-:} \gdef\codeof@#1:->#2<-:{#2}} \xywarnifdefined\addAT@ \xywarnifdefined\addHASH@ \xywarnifdefined\addDOLL@ \xywarnifdefined\addAND@ \xywarnifdefined\addRQ@ \xywarnifdefined\addPLUS@ \xywarnifdefined\addDASH@ \xywarnifdefined\addDOT@ \xywarnifdefined\addLT@ \xywarnifdefined\addEQ@ \xywarnifdefined\addGT@ \xywarnifdefined\addLQ@ \xydef@\xymakeADD@#1#2 #3 {\ifnum\catcode#3=6 \def#1##1{##1#2#2}% \else \def#1##1{##1#2}\fi} \xydef@\xyrecat@{\xymakeADD@\addAT@} \xydef@\xyrecat{\xyrecat@} \xydef@\xyresetcatcodes{\def\xyrecat{\xyrecat@}\xyreuncatcodes \input xyrecat \relax \xyuncatcodes} \xyuncatcodes \xyresetcatcodes \xycatcodes \xydef@\testAND@{{\aftergroup\ifx \addAND@\ifx\next\addFalse@\else\addTrue@\fi}} \xydef@\addFalse@{\aftergroup\iffalse} \xydef@\addTrue@{\aftergroup\iftrue} \input xyidioms \xydef@\stripRCS$#1${\stripRCS@#1: @@ @@@} \xydef@\stripRCS@#1: #2@ #3@@@{% \ifx @#2\string?\else\ifx :#2\else\stripRCS@@#2\fi\fi} \xydef@\stripRCS@@#1 #2: @{#1} \xydef@\xyversion{3.8.9} \edef\next{\stripRCS$Date: 2013/10/06 01:14:17 $} \xylet@\xydate=\next \xydef@\Xygreet@{% \W@{}% \W@{ Xy-pic version \xyversion\space<\xydate>}% \W@{ Copyright (c) 1991-2013 by Kristoffer H. Rose and others}% \W@{ Xy-pic is free software: see the User\string's Guide for details.}% \W@{}} \Xygreet@ \expandafter\everyjob\expandafter{\the\everyjob\Xygreet@} \message{Loading kernel:} \xydef@\Xy@{\leavevmode \hbox{\kern-.1em X\kern-.3em\lower.4ex\hbox{Y\kern-.15em}}} \ifx\undefined\DeclareRobustCommand\let\Xy=\Xy@ \else\DeclareRobustCommand{\Xy}{\Xy@}\fi \message{messages;} \xywarnifdefined\thelineno@ \ifx\inputlineno\undefined \edef\thelineno@{\string?} \else \def\thelineno@{\the\inputlineno}\fi \xydef@\xytracelineno@{ \string[\jobname:\thelineno@\string]} \xydef@\xywarning@#1{{\newlinechar=10 \W@{}\W@{Xy-pic Warning: #1\xytracelineno@.}\W@{}}} \xydef@\xyerror@#1#2{\if\inxy@\xy@{ERROR #1}{}\fi {\def\2{#2}\newlinechar=10 \ifx\2\empty \errhelp{See the Xy-pic manual for further information.}% \else \errhelp{#2}\fi \errmessage{Xy-pic error: #1}}} \xydef@\xybug@#1{{\newlinechar=10 \errhelp{This is a bug in Xy-pic and should not happen!^^J% If it did then please send a bug report with the offending Xy-pic code^^J% to the author of Xy-pic, krisrose@tug.org.}% \errmessage{Xy-pic BUG: #1 -- notify krisrose@tug.org.}}} \message{fonts;} \xydef@\xyfont@#1{\ifx#1\undefined \DN@{\global\font#1}\expandafter\next@ \else \xywarning@{Using previously loaded \string#1\space font}\fi} \xyfont@\xydashfont=xydash10 \xydef@\xydashl@{\fontdimen6\xydashfont} \xydef@\xydashh@{\fontdimen5\xydashfont} \xydef@\xydashw@{\fontdimen8\xydashfont} \xyfont@\xyatipfont=xyatip10 \xyfont@\xybtipfont=xybtip10 \xyfont@\xybsqlfont=xybsql10 \xydef@\xybsqll@{\fontdimen6\xybsqlfont} \xydef@\xybsqlh@{\fontdimen5\xybsqlfont} \xydef@\xybsqlw@{\fontdimen8\xybsqlfont} \xyfont@\xycircfont=xycirc10 \message{allocations:} \message{state,} \xynew@{dimen}\X@c \xynew@{dimen}\Y@c \xynew@{dimen}\U@c \xynew@{dimen}\D@c \xynew@{dimen}\L@c \xynew@{dimen}\R@c \xynew@{toks}\Edge@c \xynew@{dimen}\X@p \xynew@{dimen}\Y@p \xynew@{dimen}\U@p \xynew@{dimen}\D@p \xynew@{dimen}\L@p \xynew@{dimen}\R@p \xynew@{toks}\Edge@p \xynew@{dimen}\X@origin \X@origin=\z@ \xynew@{dimen}\Y@origin \X@origin=\z@ \xynew@{dimen}\X@xbase \X@xbase=1mm \xynew@{dimen}\Y@xbase \Y@xbase=\z@ \xynew@{dimen}\X@ybase \X@ybase=\z@ \xynew@{dimen}\Y@ybase \Y@ybase=1mm \xynew@{dimen}\X@min \xynew@{dimen}\Y@min \xynew@{dimen}\X@max \xynew@{dimen}\Y@max \xynew@{box}\lastobjectbox@ \xynew@{box}\zerodotbox@ \setbox\zerodotbox@=\hbox{\dimen@=.5\xydashw@ \kern-\dimen@ \vrule width\xydashw@ height\dimen@ depth\dimen@} \wd\zerodotbox@=\z@ \ht\zerodotbox@=\z@ \dp\zerodotbox@=\z@ \xynew@{dimen}\almostz@ \almostz@=50sp \xydef@\zz@#1{\ifdim#1<\z@-\fi#1<\almostz@\relax} \xynew@{if}\iftmp@ \message{direction,} \xynew@{dimen}\d@X \xynew@{dimen}\d@Y \xydef@\sd@X{} \xydef@\sd@Y{} \xynew@{count}\K@ \K@=1024 \xynew@{count}\KK@ \KK@=32 \xynew@{count}\Direction \xynew@{dimen}\K@dXdY \xynew@{dimen}\K@dYdX \xydef@\cosDirection{} \xydef@\sinDirection{} \xywarnifdefined\DirectionChar \xywarnifdefined\SemiDirectionChar \xynew@{read}\xyread@ \xynew@{write}\xywrite@ \xynew@{count}\csp@ \xynew@{dimen}\quotPTK@ \message{utility macros;} \xydef@\addtotoks@#1{\toks@=\expandafter{\the\toks@#1}} \xydef@\xyinputorelse@#1#2{% \expandafter\let\expandafter\next@\csname#1loaded\endcsname \ifx\next@\empty \else \DN@{\xyinputorelse@@{#1}{\xyinputorelse@@{#1.doc}{#2}}}% \fi \next@} \xydef@\xyinputorelse@@#1#2{\openin\xyread@=#1 \ifeof\xyread@ \DN@{#2}\else \DN@{\closein\xyread@\input#1 }\fi \next@} \global\csp@=\z@ \xydef@\enter@#1{\global\advance\csp@\@ne \expandafter\xdef\csname cs@\number\csp@\endcsname{#1}\ignorespaces} \xydef@\nter@#1{\global\advance\csp@\@ne \expandafter\gdef\csname cs@\number\csp@\endcsname{#1}\ignorespaces} \xydef@\dontleave@{\csname cs@\number\csp@\endcsname} \xydef@\unenter@{\global\advance\csp@\m@ne} \xydef@\leave@{\expandafter\unenter@\csname cs@\number\csp@\endcsname} \quotPTK@=\p@ \divide\quotPTK@\K@ \xylet@\quotsign@@=\empty \xywarnifdefined\removePT@ {\catcode`p=12 \catcode`t=12 \gdef\removePT@#1pt{#1}} \xydef@\quotient@#1#2#3{\A@=#2\relax \B@=#3\relax \ifdim\A@<\z@\def\quotsign@@{-}\else\def\quotsign@@{+}\fi \ifdim\quotsign@@\A@<15pt \multiply\A@\K@ \else\ifdim\quotsign@@\A@<511pt \multiply\A@\KK@ \advance\B@\ifdim\B@<\z@-\fi 16sp \divide\B@\KK@ \else \advance\B@\ifdim\B@<\z@-\fi 512sp \divide\B@\K@ \fi\fi \ifdim\ifdim\B@<\z@-\fi\B@<\quotPTK@ \xywarning@{division overflow}% \else \advance\A@.5\B@ \divide\A@\B@ \fi \multiply\A@\quotPTK@ \edef#1{\expandafter\removePT@\the\A@}} \xydef@\quotient@@#1#2#3{\A@=#2\relax \B@=#3\relax \multiply\A@\KK@ \advance\B@\ifdim\B@<\z@-\fi 128sp \divide\B@\KK@ \divide\B@ 8 \ifdim\B@=\z@\else \advance\A@.5\B@ \divide\A@\B@ \fi \B@=.125\quotPTK@ \multiply\A@\B@ \edef#1{\expandafter\removePT@\the\A@}} \xydef@\loop@#1\repeat@{\def\body@{#1}\iterate@}\xylet@\repeat@=\fi \xydef@\iterate@{\body@\expandafter\iterate@\else\fi} \xydef@\xyinitial@#1#2{\DN@{#1}% \xyerror@{command used out of context: \codeof\next@}{}} \xylet@\xy@=\xyinitial@ \xylet@\oxy@=\xy@ \xydef@\change@oxy@#1{\let\oxy@=#1\relax } \xydef@\inxy@{T\ifx\xy@\xyinitial@ F\else T\fi} \xydef@\xyxy@@ix@{\begingroup \xyuncatcodes\afterassignment\endgroup\global\toks9=} \xydef@\xy@@{\xy@{}} \xydef@\plainxy@{\let\xy@=\xyxy@ \change@oxy@\xy@ \let\xy@@ix@=\xyxy@@ix@} \message{pictures: \string\xy,} \xydef@\xy{\ifmmode\expandafter\xymath@\else\expandafter\xynomath@\fi} \xydef@\xymath@{\hbox\bgroup \dimen@=\the\fontdimen22\textfont\tw@ \xyinside@} \xydef@\xynomath@{\hbox\bgroup \dimen@=\z@ \xyinside@} \xydef@\xyinside@{% \saveXyStyle@ \aftergroup\xycheck@end \setboxz@h\bgroup \plainxy@ \X@c=\z@ \Y@c=\z@ \czeroEdge@ \X@p=\z@ \Y@p=\z@ \U@p=\z@ \D@p=\z@ \L@p=\z@ \R@p=\z@ \Edge@p={\zeroEdge}% \X@min=\hsize \X@max=-\hsize \Y@min=\hsize \Y@max=-\hsize \mathsurround=\z@ \expandafter\POS\everyxy@@} \xydef@\czeroEdge@{\U@c=\z@ \D@c=\U@c \L@c=\U@c \R@c=\U@c \Edge@c={\zeroEdge}} \xydef@\xyxy@#1#2{#2} \xywarnifdefined\everyxy \expandafter\def\addEQ@\everyxy#1{\def\everyxy@@{#1}\ignorespaces} \xylet@\everyxy@@=\empty \xydef@\endxy{\if\inxy@\else\xyerror@{Unexpected \string\endxy}{}\fi \relax \dimen@=\Y@max \advance\dimen@-\Y@min \ifdim\dimen@<\z@ \dimen@=\z@ \Y@min=\z@ \Y@max=\z@ \fi \dimen@=\X@max \advance\dimen@-\X@min \ifdim\dimen@<\z@ \dimen@=\z@ \X@min=\z@ \X@max=\z@ \fi \edef\tmp@{\egroup \setboxz@h{\kern-\the\X@min\boxz@}% \ht\z@=\the\Y@max \dp\z@=-\the\Y@min \wdz@=\the\dimen@ \noexpand\maybeunraise@ \raise\dimen@\boxz@ \noexpand\recoverXyStyle@ \egroup \noexpand\xy@end \U@c=\the\Y@max \D@c=-\the\Y@min \L@c=-\the\X@min \R@c=\the\X@max}\tmp@} \xydef@\maybeunraise@{\if\inxy@\else \dimen@ii=\dp\z@ \ifdim\dimen@ii<\z@ \advance\dimen@\dimen@ii \fi\fi} \xydef@\xycheck@end{\xyFN@\xycheck@end@} \xydef@\xycheck@end@{\ifx\next\xy@end\DN@\xy@end{}\else\DN@{\xy@end}\fi\next@} \xydef@\xy@end{% \xyerror@{An \string\xy\space environment is not closed correctly.}% {I expected \string\endxy. You probably have an umatched {} grouping.}} \message{positions,} \xydef@\POS{\afterPOS{}} \xydef@\afterPOS#1{% \DN@##1{\def\afterPOS@{\def\afterPOS@{##1}#1}}% \expandafter\next@\expandafter{\afterPOS@}% \afterCOORD{\xyFN@\POS@}} \xylet@\afterPOS@=\empty \xydef@\afterCOORD#1{% \DN@##1{\def\afterCOORD@{\def\afterCOORD@{##1}#1}}% \expandafter\next@\expandafter{\afterCOORD@}% \afterVECTORorEMPTY{\xy@@\czeroEdge@ \afterCOORD@}{\xyFN@\COORD@}} \xylet@\afterCOORD@=\empty \xydef@\afterVECTORorEMPTY#1#2{% \DN@##1{\def\afterVECTOR@{\def\afterVECTOR@{##1}% \ifVECTORempty@\DN@{#2}\else\DN@{#1}\fi \next@}}% \expandafter\next@\expandafter{\afterVECTOR@}% \xyFN@\VECTOR@} \xynew@{if}\ifVECTORempty@ \xylet@\afterVECTOR@=\empty \xydef@\xyVECTOR@{% \ifx \space@\next \expandafter\DN@\space{\xyFN@\VECTOR@}% \else \ifcat A\noexpand\next \let\next@=\VECTOR@letter \else \let\next@=\VECTOR@other \fi\fi \next@} \xylet@\VECTOR@=\xyVECTOR@ \def\notrelaxorelse@#1#2{\ifx#1\relax \expandafter#2\else\expandafter#1\fi} \xydef@\VECTOR@letter{% \ifx a\next \expandafter\VECTOR@a \else \expandafter\CORNER@ \fi} \xydef@\VECTOR@a a(#1){\xy@{a(#1)}{\vfromcartesianangle@{#1}}% \VECTORempty@false \afterVECTOR@} \xydef@\CORNER@{% \xy@{}{\A@=-.5\L@c \advance\A@.5\R@c \B@=-.5\D@c \advance\B@.5\U@c \let\nextii@=\zeroit@}% \VECTORempty@true\CORNER@i} \xydef@\zeroit@#1{#1=\z@} \xydef@\CORNER@i{% \ifx D\next \DN@ D{\xy@{D}{\Y@c=-\D@c \nextii@\X@c \B@=\Y@c}\CORNER@ii}% \else\ifx U\next \DN@ U{\xy@{U}{\Y@c= \U@c \nextii@\X@c \B@=\Y@c}\CORNER@ii}% \else\ifx L\next \DN@ L{\xy@{L}{\X@c=-\L@c \nextii@\Y@c \A@=\X@c}\CORNER@ii}% \else\ifx R\next \DN@ R{\xy@{R}{\X@c= \R@c \nextii@\Y@c \A@=\X@c}\CORNER@ii}% \else\ifx C\next \DN@ C{\xy@{C}{\X@c= \A@ \Y@c= \B@}\CORNER@ii}% \else\ifx E\next \DN@ E{\xy@{E}{% \A@=\X@c \B@=\Y@c \the\Edge@c\z@ \advance\X@c-\A@ \advance\Y@c-\B@}% \CORNER@ii}% \else\ifx P\next \DN@ P{\xy@{P}{% \A@=\X@c \B@=\Y@c \the\Edge@c\thr@@ \advance\X@c-\A@ \advance\Y@c-\B@}% \CORNER@ii}% \else\ifx (\next \DN@(##1){\xy@{(##1)}{\X@c=##1\X@c \Y@c=##1\Y@c}\afterVECTOR@}% \else\ifx A\next \DN@ A{\xy@{A}{\Y@c=\fontdimen22\textfont\tw@ \nextii@\X@c \B@=\Y@c}\CORNER@ii}% \else\ifx V\next \DN@ V{\xy@{V}{\nextii@\X@c \Y@c=\U@p}\CORNER@ii}% \else\ifx H\next \DN@ H{\xy@{H}{\nextii@\Y@c \X@c=\R@p}\CORNER@ii}% \else \let\next@=\afterVECTOR@ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next@} \xydef@\CORNER@ii{\xy@@{\let\nextii@=\eat@}% \VECTORempty@false \xyFN@\CORNER@i} \xydef@\VECTOR@other{% \addLT@\ifx \next \addGT@{\addLT@\DN@##1}{\xy@{<##1>}{\vfromabsolute@{##1}}% \VECTORempty@false\afterVECTOR@}% \else\ifx (\next \DN@({\xyFN@\VECTOR@other@open}% \else\ifx /\next \DN@/##1/{\xy@@ix@{{##1}}% \xy@{/##1/}{\expandafter\vfromslide@\the\toks9 }% \VECTORempty@false\afterVECTOR@}% \else\ifx 0\next \DN@ 0{\xy@{0}{\X@c=\z@ \Y@c=\z@}\VECTORempty@false\afterVECTOR@}% \else \DN@{\VECTORempty@true\afterVECTOR@}% \fi\fi\fi\fi \next@} \xydef@\VECTOR@other@open{% \ifx *\next \DN@{\VECTORempty@true \xyFN@\afterVECTOR@(}% \else \DN@##1){\xy@{(##1)}{\vfromcartesian@{##1}}\VECTORempty@false\afterVECTOR@}% \fi \next@} \xydef@\xyCOORD@{% \ifx \space@\next \expandafter\DN@\space{\xyFN@\COORD@}% \else \ifcat A\noexpand\next \let\next@=\xyCOORD@letter \else \let\next@=\xyCOORD@other \fi\fi \next@} \xylet@\COORD@=\xyCOORD@ \xydef@\xyCOORD@letter{% \ifx c\next \DN@ c{\xy@{c}{}\afterCOORD@}% \else\ifx p\next \DN@ p{\xy@{p}\cfromp@ \afterCOORD@}% \else\ifx x\next \DN@ x{\xy@{x}{\R@c=\X@xbase \U@c=\Y@xbase \intersect@}\afterCOORD@}% \else\ifx y\next \DN@ y{\xy@{y}{\R@c=\X@ybase \U@c=\Y@ybase \intersect@}\afterCOORD@}% \else\ifx s\next \DN@ s##1{\xy@{s{##1}}{\cfroms@{##1}}\afterCOORD@}% \else \let\next@=\afterCOORD@ \fi\fi\fi\fi\fi \next@} \xydef@\xyCOORD@other{% \ifx "\next \DN@"##1"{\xy@{"##1"}{\cfromid@{##1}}\afterCOORD@}% \else\ifx \bgroup\next \DN@##1{\xy@{{##1}}{\enter@{\pfromthep@\basefromthebase@}}% \silencexy@ \POS##1\relax \unsilencexy@ \xy@@\leave@ \afterCOORD@}% \else\ifx (\next \DN@({\xyFN@\xyCOORD@other@open}% \else \let\next@=\afterCOORD@ \fi\fi\fi \next@} \xynew@{if}\ifsilentxy@ \xydef@\silencexy@{% \ifsilentxy@ \nter@{}% \else \nter@{\silentxy@false \let\xy@=\unsilent@@xy@} \silentxy@true \let\unsilent@@xy@=\xy@ \def\xy@##1##2{\unsilent@@xy@{}{##2}}% \fi} \xydef@\unsilencexy@{\leave@} \xydef@\xyCOORD@other@open{% \ifx *\next \DN@*##1*){\xy@{(*}{\enter@{\pfromthep@\basefromthebase@}}% \POS##1\relax \xy@{*)}\leave@ \afterCOORD@}% \else \DN@{\xyFN@\afterCOORD@(}% \fi \next@} \xydef@\xyPOS@{% \ifx \space@\next \expandafter\DN@\space{\xyFN@\POS@}% \else\addPLUS@\ifx \next \addPLUS@\DN@{\xy@+{\enter@\cplusthec@}% \afterCOORD{\xy@@\leave@ \xyFN@\POS@}}% \else\addDASH@\ifx \next \addDASH@\DN@{\xy@-{\enter@\cplusthec@}% \afterCOORD{\xy@@{\X@c=-\X@c \Y@c=-\Y@c\leave@}\xyFN@\POS@}}% \else\ifx !\next \DN@ !{\xy@!{\enter@\cskewthec@}\afterCOORD{\xy@@\leave@ \xyFN@\POS@}}% \else\addDOT@\ifx \next \addDOT@\DN@{\xy@.{\enter@\cmergethec@}\afterCOORD{\xy@@\leave@ \xyFN@\POS@}}% \else\ifx ,\next \DN@ ,{\xy@,{\comma@@}\afterCOORD{\xyFN@\POS@}}% \else\ifx ;\next \DN@ ;{\xy@;{\swap@}\afterCOORD{\xyFN@\POS@}}% \else\ifx :\next \DN@ :{\xyFN@\POS@colon}% \else\addEQ@\ifx \next \addEQ@\DN@{\xyFN@\saveid@}% \else\ifx *\next \DN@ *{\xyFN@\POS@star}% \else\ifx ?\next \DN@ ?{\xy@?{}\afterPLACE{\xyFN@\POS@}}% \else \addAT@\ifx \next \addAT@\DN@{\xyFN@\STACK@}% \else \let\next@=\afterPOS@ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next@} \xylet@\comma@@=\relax \xylet@\POS@=\xyPOS@ \xydef@\POS@colon{\DNii@{\afterCOORD{\xyFN@\POS@}}% \ifx :\next \xy@{::}{\setbase@@\X@c\Y@c}\DN@:{\nextii@}% \else \xy@:{\setbase@\X@p\Y@p\X@c\Y@c}\let\next@=\nextii@ \fi \next@} \xydef@\POS@star{% \ifx *\next \DN@*##1##{\nextii@{##1}}% \DNii@##1##2{\xy@@ix@{{##1}{##2}}% \xy@{**##1{##2}}{\expandafter\connect@\the\toks9 }\xyFN@\POS@}% \else \DN@##1##{\nextii@{##1}}% \DNii@##1##2{\xy@@ix@{{##1}{##2}}% \xy@{*##1{##2}}{\expandafter\drop@\the\toks9 }\xyFN@\POS@}% \fi \next@} \xydef@\cfromp@{\X@c=\X@p \Y@c=\Y@p \U@c=\U@p \D@c=\D@p \L@c=\L@p \R@c=\R@p \Edge@c=\expandafter{\the\Edge@p}} \xydef@\pfromc@{\X@p=\X@c \Y@p=\Y@c \U@p=\U@c \D@p=\D@c \L@p=\L@c \R@p=\R@c \Edge@p=\expandafter{\the\Edge@c}} \xydef@\swapdimen@#1#2{\dimen@=#1\relax #1=#2\relax #2=\dimen@} \xynew@{toks}\swaptoks@@ \xydef@\swap@{\swapdimen@\X@c\X@p \swapdimen@\Y@c\Y@p \swapdimen@\U@c\U@p\swapdimen@\D@c\D@p \swapdimen@\L@c\L@p\swapdimen@\R@c\R@p \swaptoks@@=\Edge@c \Edge@c=\Edge@p \Edge@p=\swaptoks@@} \xydef@\vfromabsolute@#1{\vfromabsolute@@#1,@} \xydef@\vfromabsolute@@#1,#2@{\X@c=#1\relax \DN@{#2}\ifx\next@\empty \Y@c=\X@c \else \DN@##1,{\Y@c=##1}\next@#2\relax \fi } \xydef@\cfromthec@{\X@c=\the\X@c \Y@c=\the\Y@c \U@c=\the\U@c \D@c=\the\D@c \L@c=\the\L@c \R@c=\the\R@c \Edge@c={\expandafter\noexpand\the\Edge@c}} \xydef@\cfromthep@{\X@c=\the\X@p \Y@c=\the\Y@p \U@c=\the\U@p \D@c=\the\D@p \L@c=\the\L@p \R@c=\the\R@p \Edge@c={\expandafter\noexpand\the\Edge@p}} \xydef@\pfromthep@{\X@p=\the\X@p \Y@p=\the\Y@p \U@p=\the\U@p \D@p=\the\D@p \L@p=\the\L@p \R@p=\the\R@p \Edge@p={\expandafter\noexpand\the\Edge@p}} \xydef@\pfromthec@{\X@p=\the\X@c \Y@p=\the\Y@c \U@p=\the\U@c \D@p=\the\D@c \L@p=\the\L@c \R@p=\the\R@c \Edge@p={\expandafter\noexpand\the\Edge@c}} \xydef@\cplusthec@{\advance\X@c\the\X@c \advance\Y@c\the\Y@c} \xydef@\cskewthec@{% \noexpand\cskew@{\the\Y@c}{\the\X@c}{\the\D@c}{\the\U@c}{\the\L@c}{\the\R@c}} \xydef@\cskew@#1#2#3#4#5#6{% \D@c=#3\advance\D@c \Y@c \ifdim\D@c<\z@ \D@c=\z@ \fi \U@c=#4\advance\U@c-\Y@c \ifdim\U@c<\z@ \U@c=\z@ \fi \advance\Y@c#1% \L@c=#5\advance\L@c \X@c \ifdim\L@c<\z@ \L@c=\z@ \fi \R@c=#6\advance\R@c-\X@c \ifdim\R@c<\z@ \R@c=\z@ \fi \advance\X@c#2% \Edge@c={\rectangleEdge}} \xydef@\cmergethec@{% \noexpand\cmerge@{\the\Y@c}{\the\X@c}{\the\D@c}{\the\U@c}{\the\L@c}{\the\R@c}} \xydef@\cmerge@#1#2#3#4#5#6{\the\Edge@c4% \A@=#2\advance\A@-\X@c \B@=#1\advance\B@-\Y@c \dimen@=#5\advance\L@c \A@ \ifdim\L@c<\dimen@ \L@c=\dimen@ \fi \dimen@=#6\advance\R@c-\A@ \ifdim\R@c<\dimen@ \R@c=\dimen@ \fi \dimen@=#3\advance\D@c \B@ \ifdim\D@c<\dimen@ \D@c=\dimen@ \fi \dimen@=#4\advance\U@c-\B@ \ifdim\U@c<\dimen@ \U@c=\dimen@ \fi \advance\X@c\A@ \advance\Y@c\B@} \xydef@\halfroottwo{.70710678} \xydef@\partroottwo{.29289322} \xydef@\halfrootthree{.8660254} \xydef@\vfromcartesian@#1{\vfromcartesian@@#1@} \xydef@\vfromcartesian@@#1,#2@{% \X@c=\X@origin \advance\X@c#1\X@xbase \advance\X@c#2\X@ybase \Y@c=\Y@origin \advance\Y@c#1\Y@xbase \advance\Y@c#2\Y@ybase} \xydef@\setbase@#1#2#3#4{% \X@origin=#1\relax \Y@origin=#2\relax \X@xbase=#3\relax \advance\X@xbase-\X@origin \Y@xbase=#4\relax \advance\Y@xbase-\Y@origin \X@ybase=-\Y@xbase \Y@ybase=\X@xbase} \xydef@\setbase@@#1#2{% \X@ybase=#1\relax \advance\X@ybase-\X@origin \Y@ybase=#2\relax \advance\Y@ybase-\Y@origin} \xydef@\basefromthebase@{\X@origin=\the\X@origin \Y@origin=\the\Y@origin \X@xbase=\the\X@xbase \Y@xbase=\the\Y@xbase \X@ybase=\the\X@ybase \Y@ybase=\the\Y@ybase} \xydef@\vfromcartesianangle@#1{\enter@\basefromthebase@ \R@=#1\p@ \B@=360\p@ \loop@ \ifdim\R@<\z@ \advance\R@\B@ \repeat@ \loop@ \ifdim\R@>\B@ \advance\R@-\B@ \repeat@ \ifdim\R@<.5\B@\else \R@=-\R@ \advance\R@\B@ \X@ybase=-\X@ybase \Y@ybase=-\Y@ybase \fi \B@=180\p@ \ifdim\R@<.5\B@\else \R@=-\R@ \advance\R@\B@ \X@xbase=-\X@xbase \Y@xbase=-\Y@xbase \fi \B@=90\p@ \ifdim\R@<.5\B@ \let\nextiii@=\literal@ \else \R@=-\R@ \advance\R@\B@ \def\nextiii@##1,##2@{##2,##1@}\fi \dimen@=\z@ \DN@{1,0@}% \dimen@ii=45\p@ \DNii@{.70710678,.70710678@}% \chooseangleinterval@ {\chooseangleinterval@ {\chooseangleinterval@ {\chooseangleinterval@ {\chooseangleinterval@ {}% {4.090909}{.99677570,.08023846@}% {}}% {6}{.99452190,.10452846@}% {\chooseangleinterval@ {}% {8.181818}{.98982144,.14231484@}% {}}}% {10}{.98480775,.17364818@}% {\chooseangleinterval@ {}% {12.857143}{.97492791,.22252093@}% {}}}% {15}{.96592583,.25881905@}% {\chooseangleinterval@ {\chooseangleinterval@ {}% {16.363636}{.95949297,.28173256@}% {}}% {18}{.95105652,.30901699@}% {\chooseangleinterval@ {}% {20}{.93969262,.34202014@}% {}}}}% {22.5}{.92387953,.38268343@}% {\chooseangleinterval@ {\chooseangleinterval@ {\chooseangleinterval@ {}% {24.545455}{.90963200,.41541501@}% {}}% {25.714286}{.90096887,.43388374@}% {}}% {30}{.86602540,.5@}% {\chooseangleinterval@ {\chooseangleinterval@ {}% {32.727273}{.84125353,.54064082@}% {}}% {36}{.80901699,.58778525@}% {\chooseangleinterval@ {\chooseangleinterval@ {}% {38.571429}{.78183148,.62348980@}% {}}% {40.909091}{.75574957,.65486073@}% {\chooseangleinterval@ {}% {40}{.76604444,.64278761@}% {}}}}}% \A@=\R@ \advance\A@-\dimen@ \ifdim\ifdim\A@<\z@-\fi\A@<.01\p@ \edef\next@{\expandafter\nextiii@\next@}% \else \B@=\dimen@ii \advance\B@-\R@ \ifdim\A@<\B@ \dimen@=\toradians@\A@ \edef\next@{\next@ \expandafter\removePT@\the\dimen@ @}% \else \dimen@=-\toradians@\B@ \edef\next@{\nextii@ \expandafter\removePT@\the\dimen@ @}% \fi \expandafter\interpolatepoint@\next@ \edef\next@{\expandafter\nextiii@\next@}% \fi \expandafter\vfromcartesian@@\next@ \leave@} \xydef@\chooseangleinterval@#1#2#3#4{% \B@=#2\p@ \def\next{#3}% \ifdim\R@<\B@ \dimen@ii=\B@ \let\nextii@=\next #1% \else \dimen@=\B@ \let\next@=\next \ifdim\B@<\R@ #4\fi\fi} \xydef@\interpolateinterval@#1,#2@#3,#4@{% \A@=#1\p@ \dimen@=#3\p@ \advance\dimen@-\A@ \advance\A@\next\dimen@ \B@=#2\p@ \dimen@=#4\p@ \advance\dimen@-\B@ \advance\B@\next\dimen@ \edef\next@{\expandafter\removePT@\the\A@,\expandafter\removePT@\the\B@ @}} \xydef@\toradians@{0.01745329} \xydef@\interpolatepoint@#1,#2@#3@{% \A@=#1\p@ \dimen@ii=#3\A@ \dimen@ii=-.5\dimen@ii \advance\A@#3\dimen@ii \dimen@=-#2\p@ \advance\A@#3\dimen@ \B@=#2\p@ \dimen@ii=#3\B@ \dimen@ii=-.5\dimen@ii \advance\B@#3\dimen@ii \dimen@=#1\p@ \advance\B@#3\dimen@ \edef\next@{\expandafter\removePT@\the\A@,\expandafter\removePT@\the\B@ @}} \xydef@\drop@#1#2{% \global\setbox\lastobjectbox@=\object#1{#2}% \ifHidden@ \dimen@=\X@c \advance\dimen@-\L@c \else \dimen@=\Y@c \advance\dimen@ \U@c \ifdim\Y@max<\dimen@ \Y@max=\dimen@ \fi \dimen@=\Y@c \advance\dimen@-\D@c \ifdim\dimen@<\Y@min \Y@min=\dimen@ \fi \dimen@=\X@c \advance\dimen@ \R@c \ifdim\X@max<\dimen@ \X@max=\dimen@ \fi \dimen@=\X@c \advance\dimen@-\L@c \ifdim\dimen@<\X@min \X@min=\dimen@ \fi \fi \ifInvisible@\else \setboxz@h{\kern\dimen@ \raise\Y@c\box\lastobjectbox@}% \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ {\Drop@@}\fi} \xydef@\connect@#1#2{\setupDirection@ \enter@{\cfromthec@}% \global\setbox\lastobjectbox@=\object#1{#2}\leave@ \Connect@@} \xydef@\preconnect@#1#2{\setupDirection@ \enter@{\cfromthec@}% \global\setbox\lastobjectbox@=\object#1{#2}\leave@ \connectStore@ \ifInvisible@ \Connect@@ \else \Invisible@true\Connect@@\Invisible@false \fi} \xynew@{box}\connectobjectbox@@ \xylet@\connectDrop@@=\empty \xylet@\connectpreXY@style@=\empty \xylet@\connectpostXY@style@=\empty \xylet@\connectRest@@=\empty \xydef@\connectStore@{% \global\setbox\connectobjectbox@@=\copy\lastobjectbox@ \let\connectDrop@@=\Drop@@ \let\connectpreXY@style@ =\preXY@style@ \let\connectpostXY@style@=\postXY@style@ \xdef\connectRest@@{% \def\noexpand\Upness@{\Upness@}% \def\noexpand\Leftness@{\Leftness@}% \ifInvisible@ \noexpand\Invisible@true \else \noexpand\Invisible@false \fi \ifHidden@ \noexpand\Hidden@true \else \noexpand\Hidden@false \fi}} \xydef@\connectRestore@{% \ifvbox\connectobjectbox@@ \setbox\lastobjectbox@=\copy\voidb@x \else \global\setbox\lastobjectbox@=\copy\connectobjectbox@@ \fi \let\Drop@@=\connectDrop@@ \global\let\preXY@style@ =\connectpreXY@style@ \global\let\postXY@style@=\connectpostXY@style@ \connectRest@@} \xydef@\afterPLACE#1{% \DN@##1{\def\afterPLACE@{\xy@@\leave@ \def\afterPLACE@{##1}#1}}% \expandafter\next@\expandafter{\afterPLACE@}% \def\PLACEf@{{.5}}% \xy@@{\enter@{\pfromthep@}% \Creset@@ \def\PLACEf@{{.5}}% \let\PLACEedgep@@=\PLACEedgep@ \let\PLACEedgec@@=\PLACEedgec@}% \xyFN@\PLACE@} \xydef@\PLACEf@{} \xydef@\PLACEedgep@@{} \xydef@\PLACEedgec@@{} \xydef@\PLACEedgep@{\Cshavep@@ \def\PLACEedgep@@{\Cslidep@@\jot}} \xydef@\PLACEedgec@{\Cshavec@@ \def\PLACEedgec@@{\Cslidec@@{-\jot}}} \xylet@\afterPLACE@=\empty \xydef@\PLACE@{% \ifx \space@\next \expandafter\DN@\space{\xyFN@\PLACE@}% \else\addLT@\ifx \next \addLT@\DN@{\addLT@\xy@{\def\PLACEf@{{0}}\PLACEedgep@@}\xyFN@\PLACE@}% \else\addGT@\ifx \next \addGT@\DN@{\addGT@\xy@{\def\PLACEf@{{1}}\PLACEedgec@@}\xyFN@\PLACE@}% \else\ifx (\next \DN@(##1){\def\PLACEf@{{##1}}\xy@{(##1)}{\def\PLACEf@{{##1}}}\xyFN@\PLACE@}% \else\ifx !\next \DN@!{\xyFN@\PLACE@intercept}% \else \DN@{\xy@@{\expandafter\Calong@@\PLACEf@ \czeroEdge@}\PLACE@@}% \fi\fi\fi\fi\fi \next@} \xydef@\PLACE@intercept{% \ifx \space@\next \expandafter\DN@\space{\xyFN@\PLACE@intercept}% \else\ifx \bgroup\next \DN@##1{\xy@{!{##1}}{}\PLACE@intercept@{##1}}% \else\ifx (\next \DN@(*##1*){\xy@{!(*##1*)}{}\PLACE@intercept@{##1}}% \else \DN@{\xyerror@{{} expected after ! in }{}}% \fi\fi\fi \next@} \xydef@\PLACE@intercept@#1{% \xy@@{\enter@{\pfromthep@\basefromthebase@}\begingroup}% \xy@@ix@{#1}\xy@@{\plainxy@ \expandafter\POS\the\toks9\relax \edef\next@{\endgroup \X@c =\the\X@c \Y@c=\the\Y@c \X@p=\the\X@p \Y@p=\the\Y@p}% \next@ \Cintercept@@ \leave@}% \PLACE@@} \xydef@\PLACE@@{% \ifx \space@\next \expandafter\DN@\space{\xyFN@\PLACE@@}% \else\ifx /\next \DN@/##1/{\xy@{/##1/}{\Cslidec@@{##1}}\afterPLACE@}% \else \let\next@=\afterPLACE@ \fi\fi \next@} \xydef@\intersect@{% \d@X=\X@c \advance\d@X-\X@p \d@Y=\Y@c \advance\d@Y-\Y@p \A@=\X@c \advance\A@-\X@origin \B@=\Y@c \advance\B@-\Y@origin \edef\next@{\expandafter\removePT@\the\R@c}% \edef\nextii@{\expandafter\removePT@\the\U@c}% \D@c=\next@\d@Y \advance\D@c-\nextii@\d@X \divide\D@c\KK@ \L@c=\next@\B@ \advance\L@c-\nextii@\A@ \divide\L@c\KK@ \ifdim\D@c=\z@\zeroDivide@\else \quotient@\next@\L@c\D@c \fi \advance\X@c-\next@\d@X \advance\Y@c-\next@\d@Y \czeroEdge@} \xydef@\zeroDivide@@{\zeroDivide@message{\intersect@}{treated as 0}\DN@{0}} \xydef@\zeroDivide@message#1#2{\xywarning@{division by 0 in \string#1, #2}} \xylet@\zeroDivide@=\zeroDivide@@ \xydef@\zeroDivideLimit@@{\ifdim\L@c=\z@ \DN@{0}% \else\ifdim\L@c<\z@\DN@{-\zeroDivide@Limit}% \else\DN@{\zeroDivide@Limit}\fi\fi \zeroDivide@message{\intersect@}{replaced by \zeroDivide@Limit}} \xydef@\zeroDivideLimit@#1{\edef\zeroDivide@Limit{#1}% \let\zeroDivide@=\zeroDivideLimit@@} \xylet@\zeroDivideLimit=\zeroDivideLimit@ \xydef@\vfromslide@#1{\enter@\DirectionfromtheDirection@ \begingroup \plainxy@\afterDIRECTIONorEMPTY\vfromslide@i\vfromslide@i#1@} \xydef@\vfromslide@i#1@{\DN@{#1}% \edef\next{\endgroup \ifx\next@\empty \dimen@=.5pc \else \dimen@=#1\relax \fi \X@c=\cosDirection\dimen@ \Y@c=\sinDirection\dimen@}\next \leave@} \xydef@\s@bot{-1} \xydef@\s@top{-1} \xydef@\cfroms@#1{\tests@{#1}\runs@\outofranges@} \xydef@\tests@#1#2#3{\DN@{#3}% \count@=\s@top \advance\count@-#1\relax \ifnum\count@>\s@bot\relax \ifnum\count@>\s@top\else\DN@{#2}\fi\fi \next@} \xydef@\runs@{\csname S@\the\count@\endcsname} \xydef@\outofranges@{\count@=\s@top \advance\count@-\s@bot \xyerror@{stack index out of range (should be 0..\the\count@)}{}} \xydef@\STACK@{% \addPLUS@\ifx\next \addPLUS@\DN@{\xy@{@+}{}\afterCOORD{\xy@@\spushc@ \xyFN@\POS@}}% \else\addDASH@\ifx\next \addDASH@\DN@{\xy@{@-}{}\afterCOORD{\xy@@\spop@ \xyFN@\POS@}}% \else \ifx i\next \DN@ i{\xy@{@i}\sinit@ \xyFN@\POS@}% \else \ifx (\next \DN@ ({\xy@{@(}\senter@ \xyFN@\POS@}% \else \ifx )\next \DN@ ){\xy@{@)}\sleave@ \xyFN@\POS@}% \else\addEQ@\ifx\next \addEQ@\DN@{\STACK@load}% \else\addAT@\ifx\next \addAT@\DN@{\xy@{@@}{}\smap@}% \else \DN@##1{\xyerror@{illegal stack command ##1}{}\afterCOORD{\xyFN@\POS@}}% \fi\fi\fi\fi\fi\fi\fi \next@} \xydef@\STACK@load{\xy@{@=}{% \if\sempty@\else \xywarning@{loading on top of non-empty stack}\sinit@ \fi \let\comma@@=\spushc@}% \afterCOORD{\xy@@{\spushc@ \let\comma@@=\relax}\xyFN@\POS@}} \xydef@\spushc@{% \count@=\s@top \advance\count@\@ne \edef\s@top{\the\count@}% \expandafter\edef\csname S@\s@top\endcsname{\cfromthec@}} \xydef@\spushid@#1{\DNii@{#1}\edef\nextii@{\codeof\nextii@}% \expandafter\let\expandafter\next@\csname Q@\nextii@\endcsname \ifx\next@\relax \xyerror@{ \string"\nextii@\string" not defined}{}% \else \count@=\s@top \advance\count@\@ne \edef\s@top{\the\count@}% \DNii@##1{\expandafter\def\csname S@\s@top\endcsname{##1}}% \expandafter\nextii@\expandafter{\next@}% \fi} \xydef@\idfroms@#1#2{% \tests@{#2}{\DN@{\idfromxy@{#1}}% \expandafter\expandafter\expandafter\next@ \expandafter\expandafter\expandafter{\csname S@\the\count@\endcsname}% }\outofranges@} \xydef@\spop@{\count@=\s@top \ifnum\count@>\s@bot \advance\count@\m@ne \edef\s@top{\the\count@}% \else \xyerror@{nothing to pop from stack}{}\fi} \xydef@\sinit@{\edef\s@top{\s@bot}} \xydef@\senter@{% \count@=\s@top \advance\count@\@ne \expandafter\edef\csname S@\the\count@\endcsname{\s@bot}% \edef\s@bot{\the\count@}\edef\s@top{\the\count@}} \xydef@\sleave@{% \ifnum\s@bot=\s@top\else \xywarning@{leaving non-empty stack}\sinit@ \fi \ifnum\s@bot>\m@ne \edef\s@bot{\csname S@\s@top\endcsname}% \count@=\s@top \advance\count@\m@ne \edef\s@top{\the\count@}% \edef\sbot{\the\count@}\fi} \xydef@\sempty@{\ifnum\s@top=\s@bot TT\else TF\fi} \xydef@\xytotoks@#1#2{\addtotoks@{#2}} \xydef@\xytotoks@@toksix@#1{\addtotoks@{\toks9={#1}}} \xydef@\smap@{% \begingroup \toks@={}\let\xy@=\xytotoks@ \change@oxy@\xy@ \let\xy@@ix@=\xytotoks@@toksix@ \afterCOORD{\expandafter\endgroup \expandafter\smapxy@@\expandafter{\the\toks@}\xyFN@\POS@}} \xydef@\smapxy@@#1{\xy@@{\edef\smapp@@{\s@bot}\smapxy@i{#1}}} \xylet@\smapp@@=\empty \xydef@\smapxy@i#1{% \ifnum\smapp@@<\s@top \count@=\smapp@@ \advance\count@\@ne \edef\smapp@@{\the\count@}% \DN@{\csname S@\smapp@@\endcsname #1\relax \smapxy@i{#1}}% \else \let\next@=\relax \fi \next@} \xydef@\saveid@{% \ifx \space@\next \expandafter\DN@\space{\xyFN@\saveid@}% \else \ifx "\next\DN@"##1"{\xy@{="##1"}{\idfromc@{##1}}\xyFN@\POS@}% \else \ifx :\next\DN@:##1"##2"{\xy@{=:"##2"}{\idfrombase@{##2}}\xyFN@\POS@}% \else\addAT@\ifx\next \addAT@\DN@"##1"{\xy@{=@"##1"}{\idfromstack@{##1}}\xyFN@\POS@}% \else \ifx s\next \DN@ s##1"##2"{\xy@{=s##1"##2"}{\idfroms@{##2}{##1}}\xyFN@\POS@}% \else\addEQ@\ifx\next \let\saveid@COORD@@=\saveid@COORDii \addEQ@\DN@{\xyFN@\saveid@COORD}% \else \let\saveid@COORD@@=\saveid@COORDi \let\next@=\saveid@COORD \fi\fi\fi\fi\fi\fi \next@} \xylet@\saveid@COORD@@=\relax \xydef@\idfromc@#1{\DN@{#1}% \expandafter\edef\csname Q@\codeof\next@\endcsname{\cfromthec@}} \xydef@\idfrombase@#1{\DN@{#1}% \expandafter\edef\csname Q@\codeof\next@\endcsname{\basefromthebase@}} \xydef@\idfromstack@#1{% \toks@={\if\sempty@\else \xywarning@{loading on top of non-empty stack}\sinit@ \fi}% \count@=\s@bot \advance\count@\@ne \ifnum\count@>\s@top\else \loop@ \expandafter\let\expandafter\next@\csname S@\the\count@\endcsname \expandafter\addtotoks@\expandafter{\next@}% \ifnum\count@<\s@top \advance\count@\@ne \addtotoks@{\spushc@}\repeat@ \fi \DN@{#1}\edef\next@##1{% \def\expandafter\noexpand\csname Q@\codeof\next@\endcsname{##1}}% \expandafter\next@\expandafter{\the\toks@}} \xydef@\saveid@COORD{% \begingroup \toks@={}\let\xy@=\xytotoks@ \change@oxy@\xy@ \let\xy@@ix@=\xytotoks@@toksix@ \afterCOORD{\expandafter\saveid@COORDi\expandafter{\the\toks@}}} \xydef@\saveid@COORDi#1#2"#3"{\endgroup \xy@@{\idfromxy@{#3}{#1}}\xyFN@\POS@} \xydef@\saveid@COORDii#1#2"#3"{\endgroup \xy@@{\idfromcxy@{#3}{#1}}\xyFN@\POS@} \xydef@\idfromxy@#1#2{\DN@{#1}% \expandafter\def\csname Q@\codeof\next@\endcsname{#2}} \xydef@\idfromcxy@#1#2{\DN@{#1}% \expandafter\edef\csname Q@\codeof\next@\endcsname{\cfromthec@#2}} \xydef@\cfromid@#1{\DNii@{#1}\edef\nextii@{\codeof\nextii@}% \expandafter\let\expandafter\next@\csname Q@\nextii@\endcsname \ifx\next@\relax \xyerror@{ \string"\nextii@\string" not defined}{}% \else \expandafter\next@\fi} \message{objects,} \xydef@\OBJECT@{% \ifx \space@\next \expandafter\DN@\space{\xyFN@\OBJECT@}% \else\ifcat A\noexpand\next \let\next@=\OBJECT@letter \else \let\next@=\OBJECT@other \fi\fi \next@} \xydef@\OBJECT@letter{% \ifx i\next \DN@ i{\addtotoks@\Invisible@true \xyFN@\OBJECT@}% \else\ifx h\next\DN@ h{\addtotoks@\Hidden@true \xyFN@\OBJECT@}% \else\ifx o\next\DN@ o{\xywarning@{Obsolete o modifier used}\OBJECT@shape{o}}% \else\ifx x\next\DN@ x{\xywarning@{Obsolete x modifier used}\OBJECT@shape{}}% \else\ifx @\next\DN@ @##1##{% \xywarning@{Impossible @ (letter) should not be here!!} \OBJECT@@{\dir##1}}% \else \let\next@=\OBJECT@direction \fi\fi\fi\fi\fi \next@} \xydef@\OBJECT@other{% \ifx !\next \DN@!{\OBJECT@shift}% \else\addPLUS@\ifx \next \DN@{\OBJECT@change}% \else\addDASH@\ifx \next \DN@{\OBJECT@change}% \else\addEQ@\ifx \next \DN@{\OBJECT@set}% \else\ifx [\next \DN@[##1]{\xy@{[##1]}{\OBJECT@shape{##1}}}% \else\ifx ^\next \let\next@=\OBJECT@direction \else\ifx _\next \let\next@=\OBJECT@direction \else\ifx :\next \let\next@=\OBJECT@direction \else\ifx ?\next \DN@ ?{\xywarning@{\string? modifier used}\xyFN@\OBJECT@direction}% \else\ifx (\next \let\next@=\OBJECT@direction \else\addAT@\ifx\next \addAT@\DN@##1##{\OBJECT@@{\dir##1}}% \else \DN@##1##{\OBJECT@@{##1}}% \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next@} \xydef@\prevEdge@@{\zeroEdge} \xydef@\OBJECT@@#1#2{% \expandafter\def\expandafter\prevEdge@@\expandafter{\the\Edge@c}% \expandafter\Edge@c\expandafter{\objectEdge}% \Invisible@false\Hidden@false \def\Leftness@{.5}\def\Upness@{.5}% \gdef\preXY@style@{}\gdef\postXY@style@{}% \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@\relax}% \DN@{#1}\ifx\next@\empty \DNii@{#2}% \ifx\nextii@\empty \DN@{\hbox\bgroup\no@}\else \let\next@=\objectbox \fi\fi \setbox\z@=\next@{#2}\L@c=\Leftness@\wdz@ \R@c=\wdz@ \advance\R@c-\L@c \D@c=\dp\z@ \advance\D@c\ht\z@ \U@c=\Upness@\D@c \advance\D@c-\U@c \R@p=\z@ \L@p=\L@c \U@p=\U@c \advance\U@p-\ht\z@ \D@p=-\U@p \the\toks@\toks@={}\setboxz@h{\kern\R@p \raise\U@p\boxz@}% \checkZeroEdge@ \dimen@=\L@c \advance\dimen@\R@c \wdz@=\dimen@ \ht\z@=\U@c \dp\z@=\D@c \boxz@ \OBJECT@x} \xydef@\adjustLR@{% \ifdim\zz@\wdz@ \L@c=\z@ \R@c=\z@ \dimen@=\Leftness@\p@ \ifdim\dimen@<\z@ \L@c=\dimen@ \R@c=-\L@c \else\ifdim\dimen@>\p@ \L@c=\dimen@ \advance\L@c-\p@ \R@c=-\L@c \fi\fi \else \L@c=\Leftness@\wdz@ \R@c=\wdz@ \advance\R@c-\L@c \fi} \xydef@\adjustUD@{\dimen@=\ht\z@ \advance\dimen@\dp\z@ \ifdim\zz@\dimen@ \U@c=\z@ \D@c=\z@ \dimen@=\Upness@\p@ \ifdim\dimen@<\z@ \U@c=\dimen@ \D@c=-\L@c \else\ifdim\dimen@>\p@ \U@c=\dimen@ \advance\U@c-\p@ \D@c=-\L@c \fi\fi \else \D@c=\dimen@ \U@c=\Upness@\dimen@ \advance\D@c-\U@c \fi} \def\checkZeroEdge@{% \expandafter\DN@\expandafter{\the\Edge@c}\def\nextii@{\zeroEdge}% \ifx\next@\nextii@\Edge@c={\rectangleEdge}\fi \DN@{}\def\nextii@{}% \ifdim\zz@\L@c \ifdim\zz@\R@c \ifdim\zz@\U@c \ifdim\zz@\D@c \DN@{\Edge@c={\zeroEdge}}\fi\fi\fi\fi \next@} \xydef@\OBJECT@x{\toks@={\egroup\def\Drop@@}% \expandafter\addtotoks@\expandafter{\expandafter{\Drop@@}\def\Connect@@}% \expandafter\addtotoks@\expandafter{\expandafter{\Connect@@}}% \edef\tmp@{\D@c=\the\D@c \U@c=\the\U@c \L@c=\the\L@c \R@c=\the\R@c \Edge@c={\expandafter\noexpand\the\Edge@c}% \ifInvisible@\noexpand\Invisible@true\else\noexpand\Invisible@false\fi \ifHidden@\noexpand\Hidden@true\else\noexpand\Hidden@false\fi \def\noexpand\Leftness@{\Leftness@}\def\noexpand\Upness@{\Upness@}}% \expandafter\addtotoks@\expandafter{\tmp@}\the\toks@} \xynew@{if}\ifInvisible@ \xynew@{if}\ifHidden@ \xydef@\Leftness@{} \xydef@\Upness@{} \xydef@\Drop@@{\styledboxz@} \xydef@\Connect@@{} \xydef@\objectbox#1{\hbox{$\m@th\objectstyle{#1}$}} \xylet@\objectstyle=\textstyle \xydef@\object{\hbox\bgroup\resetStyle@\object@} \xydef@\object@{% \edef\next@{={\DirectionfromtheDirection@}}\expandafter\toks@\next@ \plainxy@ \xyFN@\OBJECT@} \xydef@\composite#1#{\hbox\bgroup\composite@{#1}} \xydef@\composite@#1#2{% \DN@{#1}\ifx\next@\empty\else\xywarning@{no variants of \string\composite\space allowed}\fi \global\setbox9=\hbox\bgroup \D@p=-\maxdimen \U@p=-\maxdimen \L@p=-\maxdimen \R@p=-\maxdimen \xyFN@\composite@i#2@} \xydef@\composite@i{% \ifx \space@\next \expandafter\DN@\space{\xyFN@\composite@i}% \else\ifx *\next \DN@ *{\xyFN@\composite@i}% \else\ifx @\next \DN@ @{\composite@x}% \xyerror@{ object expected}{}\czeroEdge@ \else \DN@{\composite@ii}\fi\fi\fi \next@} \xydef@\composite@ii#1#{\composite@iii{#1}} \xydef@\composite@iii#1#2{% \setbox\z@=\object#1{#2}% \ifInvisible@ \setboxz@h{}\else \setboxz@h{\kern-\L@c \boxz@}\ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ {\Drop@@}\fi \ifHidden@\else \ifdim\U@p<\U@c \U@p=\U@c \fi \ifdim\D@p<\D@c \D@p=\D@c \fi \ifdim\R@p<\R@c \R@p=\R@c \fi \ifdim\L@p<\L@c \L@p=\L@c \fi \fi \xyFN@\composite@iv} \xydef@\composite@iv{% \ifx \space@\next \expandafter\DN@\space{\xyFN@\composite@iv}% \else \ifx @\next \DN@ @{\composite@x}% \else \let\next@=\composite@i \fi\fi \next@} \xydef@\composite@x{% \edef\tmp@{\egroup \D@c=\the\D@p \U@c=\the\U@p \L@c=\the\L@p \R@c=\the\R@p}\tmp@ \setboxz@h{\kern\L@c\box9}\ht\z@=\U@c \dp\z@=\D@c \dimen@=\L@c \advance\dimen@\R@c \wdz@=\dimen@ \Edge@c={\rectangleEdge}\computeLeftUpness@ \boxz@ \OBJECT@x} \xydef@\computeLeftUpness@{% \dimen@=\L@c \advance\dimen@\R@c \ifdim\zz@\dimen@ \def\Connect@@{\straight@{\dottedSpread@\jot}}% \ifdim\zz@\L@c\else \DN@{\zeroEdge}\expandafter\DNii@\expandafter{\the\Edge@c}% \ifx\next@\nextii@\Edge@c={\rectangleEdge}\fi\fi \else \quotient@\Leftness@\L@c\dimen@ \fi \dimen@=\U@c \advance\dimen@\D@c \ifdim\zz@\dimen@ \def\Connect@@{\straight@{\dottedSpread@\jot}}% \ifdim\zz@\U@c\else \DN@{\zeroEdge}\expandafter\DNii@\expandafter{\the\Edge@c}% \ifx\next@\nextii@\Edge@c={\rectangleEdge}\fi\fi \else \quotient@\Upness@\U@c\dimen@ \fi} \xydef@\xybox#1{\xy#1\endxy \Edge@c={\rectangleEdge}\computeLeftUpness@} \xydef@\OBJECT@shift{% \let\xy@=\xytotoks@ \afterVECTORorEMPTY {\OBJECT@shift@}% {\addtotoks@{\X@c=-\L@c \advance\X@c\R@p \advance\X@c\L@p \Y@c=\U@p}% \OBJECT@shift@}} \xydef@\OBJECT@shift@{% \addtotoks@{\advance\U@p-\Y@c \advance\L@c\X@c \advance\R@c-\X@c \advance\D@c\Y@c \advance\U@c-\Y@c \computeLeftUpness@}% \let\xy@=\oxy@ \xyFN@\OBJECT@} \xylet@\objectmargin@=\jot \xylet@\objectwidth@=\z@ \xylet@\objectheight@=\z@ \xydef@\objectmargin{\afterADDOP{\Addop@@\objectmargin@}} \xydef@\objectwidth{\afterADDOP{\Addop@@\objectwidth@}} \xydef@\objectheight{\afterADDOP{\Addop@@\objectheight@}} \xydef@\OBJECT@change{% \afterADDOP{% \addEQ@\ifx \next \addtotoks@{\X@c=\D@c \advance\X@c\U@c \Y@c=\L@c \advance\Y@c\R@c}% \else \addtotoks@{\X@c=\objectmargin@ \advance\X@c\X@c \Y@c=\X@c}% \fi \let\xy@=\xytotoks@ \afterVECTORorEMPTY\OBJECT@change@\OBJECT@change@}} \xydef@\OBJECT@set{% \afterADDOP{% \let\xy@=\xytotoks@ \afterVECTORorEMPTY\OBJECT@change@ {\addtotoks@{\X@c=\objectwidth@ \Y@c=\objectheight@}\OBJECT@change@}}} \xydef@\OBJECT@change@{% \addtotoks@{\advance\R@c\L@c \advance\R@p-\L@c \let\tmp@=\R@c}% \expandafter\addtotoks@\expandafter{\Addop@@\tmp@\X@c\R@c=\tmp@ \L@c=\Leftness@\R@c \advance\R@p\L@c \advance\R@c-\L@c}% \addtotoks@{\advance\D@c\U@c \let\tmp@=\D@c}% \expandafter\addtotoks@\expandafter{\Addop@@\tmp@\Y@c\D@c=\tmp@ \U@c=\Upness@\D@c \advance\D@c-\U@c}% \let\xy@=\oxy@ \xyFN@\OBJECT@} \xydef@\afterADDOP#1{\def\afterADDOP@{#1}\xyFN@\ADDOP@} \xylet@\afterADDOP@=\empty \xydef@\ADDOP@{% \ifx \space@\next \expandafter\DN@\space{\xyFN@\ADDOP@}% \else\addPLUS@\ifx \next \addPLUS@\DN@{\xyFN@\ADDOP@plus}% \else\addDASH@\ifx \next \addDASH@\DN@{\xyFN@\ADDOP@minus}% \else\addEQ@\ifx \next \addEQ@\DN@{\def\Addop@@{\Addop@0+=}\afterADDOP@}% \else \DN@{\def\Addop@@{\Addop@0+=}\afterADDOP@}% \fi\fi\fi\fi \next@} \xydef@\ADDOP@plus{% \addEQ@\ifx \next \addEQ@\DN@{\def\Addop@@{\Addop@0+<}\afterADDOP@}% \else \DN@{\def\Addop@@{\Addop@1+=}\afterADDOP@}% \fi \next@} \xydef@\ADDOP@minus{% \addEQ@\ifx \next \addEQ@\DN@{\def\Addop@@{\Addop@0+>}\afterADDOP@}% \else \DN@{\def\Addop@@{\Addop@1-=}\afterADDOP@}% \fi \next@} \xydef@\Addop@#1#2#3#4#5{% \dimen@=#4\relax \edef#4{\the\dimen@}% \dimen@=#1\dimen@ \advance\dimen@#2#5\relax \ifdim\dimen@#3#4\else \edef#4{\the\dimen@}\fi \ifx\xy@\xyinitial@\else \DN@##1{\xy@@{\edef#4{##1}\checkZeroEdge@}}% \expandafter\next@\expandafter{#4}\fi} \xydef@\objectEdge{\rectangleEdge} \xydefcsname@{shape [r]}{\advance\U@p\D@c \centerobject@ \ifdim\L@c>\D@c \advance\R@c\L@c \L@c=.5\U@c \advance\L@c.5\D@c \advance\R@c-\L@c \fi \advance\U@p-\D@c} \xydefcsname@{shape [l]}{\advance\U@p\D@c \centerobject@ \ifdim\L@c>\D@c \advance\L@c\R@c \R@c=.5\U@c \advance\R@c.5\D@c \advance\L@c-\R@c \fi \advance\U@p-\D@c} \xydefcsname@{shape [u]}{\advance\U@p\D@c \centerobject@ \ifdim\D@c>\L@c \advance\U@c\D@c \D@c=.5\L@c \advance\D@c.5\R@c \advance\U@c-\D@c \fi \advance\U@p-\D@c} \xydefcsname@{shape [d]}{\advance\U@p\D@c \centerobject@ \ifdim\D@c>\L@c \advance\D@c\U@c \U@c=.5\L@c \advance\U@c.5\R@c \advance\D@c-\U@c \fi \advance\U@p-\D@c} \xydefcsname@{shape [c]}{\advance\U@p\D@c \centerobject@ \advance\U@p-\D@c} \xydef@\centerobject@{% \advance\D@c\U@c \D@c=.5\D@c \U@c=\D@c \advance\L@c\R@c \L@c=.5\L@c \R@c=\L@c} \xydef@\OBJECT@shape#1{\DN@{shape [#1]}% \expandafter\let\expandafter\nextii@\csname\codeof\next@\endcsname \ifx\nextii@\relax\DN@{style [#1]}% \expandafter\let\expandafter\nextii@\csname\codeof\next@\endcsname \ifx\nextii@\relax \DN@{\OBJECT@shapei[#1]}% \else\DN@{\nextii@\xyFN@\OBJECT@}\fi \else \expandafter\addtotoks@\expandafter{\nextii@}% \DN@{\xyFN@\OBJECT@}% \fi \next@} \xydefcsname@{shape []}{\the\Edge@c5\relax}% \xydefcsname@{shape [Outer]}{\the\Edge@c5\relax}% \xydefcsname@{shape [Inner]}{\the\Edge@c4\relax}% \xydefcsname@{shape [o]}{\Edge@c={\circleEdge}\the\Edge@c5\relax \Edge@c={\circleEdge}\def\prevEdge@@{\circleEdge}} \xydefcsname@{shape [.]}{\czeroEdge@} \def\OBJECT@shapei[#1#2]{\DN@{shape [#1...]}% \expandafter\let\expandafter\next\csname\codeof\next@\endcsname \ifx\next\relax\DN@{*stylechar@#1@}% \expandafter\let\expandafter\next\csname\codeof\next@\endcsname \ifx\next\relax\DNii@{shape [#1#2]}% \xywarning@{illegal [] ignored: \codeof\nextii@\space not defined}% \DN@{\xyFN@\OBJECT@}% \else% Delete this: \expandafter\addtotoks@\expandafter{\next{#2}}% \DN@{\next{#2}\xyFN@\OBJECT@}% \fi \else \expandafter\addtotoks@\expandafter{\next{#2}}\DN@{\next{#2}\xyFN@\OBJECT@}% \fi \next@} \xydef@\preXY@style@{} \xydef@\postXY@style@{} \xydef@\resetStyle@{\gdef\preXY@style@{}\gdef\postXY@style@{}} \xynew@{toks}{\styletoks@} \xydef@\addtostyletoks@#1{% \expandafter\styletoks@\expandafter{\the\styletoks@#1}} \xydef@\styledboxz@{% \xypre@Style@@ \boxz@ \xypost@Style@@} \xydef@\xypre@Style@{\styletoks@={}\saveXyStyle@\preXY@style@ \expandafter\DN@\expandafter{\the\styletoks@}% \ifx\next@\empty \DN@{\let\xypre@Style@@=\relax \let\xypost@Style@@=\relax \xypre@skipStyle@}% \else \let\xypre@Style@@=\relax \let\xypost@Style@@=\xypost@Style@ \DN@{\expandafter\xydoprestyles@\expandafter{\the\styletoks@}}% \fi \next@ } \xydef@\xypost@Style@{\styletoks@={}\postXY@style@ \expandafter\xydopoststyles@\expandafter{\the\styletoks@}% \let\xypost@Style@@=\relax \let\xypre@Style@@=\xypre@Style@ } \xydef@\xypre@skipStyle@#1\xypost@Style@@{#1\relax \let\xypre@Style@@=\xypre@Style@ } \xydef@\xydoprestyles@@{\literal@} \xydef@\xydopoststyles@@{\literal@} \xylet@\xydoprestyles@=\xydoprestyles@@ \xylet@\xydopoststyles@=\xydopoststyles@@ \xydef@\modXYstyle@{% \ifx\xy@style@\empty\resetStyle@\fi \checkXyStyle@ \expandafter\expandafter\expandafter\DN@ \expandafter\expandafter\expandafter{\preXYstyle@@}% \ifx\next@\empty\else\DN@{\modXYstyle@@}\fi \next@ } \xydef@\modXYstyle@@{% \DN@##1{\expandafter\def\expandafter\tmp@\expandafter{##1}}% \expandafter\next@\expandafter{\preStyle@@}% \DN@##1{\expandafter\gdef\expandafter\preXY@style@\expandafter{% \preXY@style@ ##1}}\expandafter\next@\expandafter{\tmp@}% \DN@##1{\expandafter\def\expandafter\tmp@\expandafter{##1}}% \expandafter\next@\expandafter{\postStyle@@}% \DN@##1{\expandafter\gdef\expandafter\postXY@style@\expandafter{% \tmp@ ##1}}\expandafter\next@\expandafter{\postXY@style@}} \xydef@\xy@style@{} \xydef@\checkXyStyle@{\ifx\xy@style@\empty\resetStyle@\fi \let\xy@style@=\relax} \xydef@\preStyle@@{} \xydef@\postStyle@@{} \xydef@\preXYstyle@@{\relax} \xydef@\loadxystyle@{% \let\xypre@Style@@=\xypre@Style@ \def\preXYstyle@@{\preStyle@@}} \loadxystyle@ \xydef@\Unloadstyle@{% \let\xypre@Style@@=\relax \let\xypost@Style@@=\relax \def\preXYstyle@@{\relax}} \xydefcsname@{shape [=...]}#1{\checkXyStyle@ \addtotoks@{\xynamestyle@{#1}}} \xydef@\xynamestyle@#1{\checkXyStyle@ \expandafter\DNii@\expandafter{\csname shape [#1]\endcsname}% \expandafter\ifx\nextii@\relax \else\xywarning@{Redefining style [#1]}\fi \expandafter\xynamestyle@@\csname shape [#1]\endcsname } \xydef@\xynamestyle@@#1{% \expandafter\def\expandafter\tmp@\expandafter{\preXY@style@}% \DN@##1{\def\tmp@{\checkXyStyle@\gdef\preXY@style@{##1}}}% \expandafter\next@\expandafter{\preXY@style@}% \DN@##1{\expandafter\gdef\expandafter#1\expandafter{\tmp@ \gdef\postXY@style@{##1}}}% \expandafter\next@\expandafter{\postXY@style@}\DN@{}} \xydef@\prevXypreStyle@@{} \xydef@\prevXypostStyle@@{} \xydef@\saveXyStyle@{\expandafter \def\expandafter\prevXypreStyle@@\expandafter{\preXY@style@}% \expandafter\def\expandafter\prevXypostStyle@@\expandafter{% \postXY@style@}} \xydef@\recoverXyStyle@{\expandafter \gdef\expandafter\preXY@style@\expandafter{\prevXypreStyle@@}% \expandafter\gdef\expandafter\postXY@style@\expandafter{% \prevXypostStyle@@}} \xydef@\newxystyle#1#2#3{% \DN@{#3}\ifx\next@\empty \xydefcsname@{shape [#1]}{\csname xyshape@#1@\endcsname}% \else \expandafter\def\csname shape [#1]\endcsname{% \csname xyshape@#1@\endcsname}\fi \DN@{#2}\ifx\next@\empty \expandafter\def\csname xyshape@#1@\endcsname{% \xyundefinedStyle@{#1}{}@@}% \else \expandafter\def\csname xyshape@#1@\endcsname{#2}\fi} \xydef@\xyundefinedStyle@#1#2@@{% \xywarning@{style #1 not defined, nothing to apply}} \xydef@\applyFIFOstyle@#1#2#3#4{\bgroup \styletoks@={\egroup\gdef\preXY@style@}% \expandafter\toks@\expandafter{\preXY@style@}% \expandafter\addtotoks@\expandafter{\expandafter#1\expandafter{#2}}% \expandafter\addtostyletoks@\expandafter{\expandafter{\the\toks@}% \gdef\postXY@style@}% \expandafter\toks@\expandafter{\expandafter#3\expandafter{#4}}% \expandafter\addtotoks@\expandafter{\postXY@style@}% \expandafter\addtostyletoks@\expandafter{\expandafter{\the\toks@}}% \the\styletoks@ } \xydef@\applyLIFOstyle@#1#2#3#4{\bgroup \styletoks@={\egroup\gdef\preXY@style@}% \expandafter\toks@\expandafter{\expandafter#1\expandafter{#2}}% \expandafter\addtotoks@\expandafter{\preXY@style@}% \expandafter\addtostyletoks@\expandafter{\expandafter{\the\toks@}% \gdef\postXY@style@}% \expandafter\toks@\expandafter{\postXY@style@}% \expandafter\addtotoks@\expandafter{\expandafter#3\expandafter{#4}}% \expandafter\addtostyletoks@\expandafter{\expandafter{\the\toks@}}% \the\styletoks@ } \xydef@\OBJECT@direction{\afterDIRECTIONorEMPTY{% \edef\next@{{\DirectionfromtheDirection@}}\expandafter\addtotoks@\next@ \xyFN@\OBJECT@}% {\xyFN@\OBJECT@}} \xydef@\afterDIRECTIONorEMPTY#1#2{% \DN@##1{\def\afterDIRECTION@{\def\afterDIRECTION@{##1}% \ifDIRECTIONempty@\DN@{#2}\else\DN@{#1}\fi \next@}}% \expandafter\next@\expandafter{\afterDIRECTION@}% \xyFN@\DIRECTION@} \xylet@\afterDIRECTION@=\empty \xynew@{if}\ifDIRECTIONempty@ \xydef@\DIRECTION@{% \ifx \space@\next \expandafter\DN@\space{\xyFN@\DIRECTION@}% \else\ifx v\next \DN@ v{\DIRECTION@v}% \else\ifx \bgroup\next \let\next@=\DIRECTION@group \else\ifx (\next \DN@({\xyFN@\DIRECTION@open}% \else \DN@{\count@=8 \afterDIAG{\ifnum\count@=8 \DN@{\DIRECTIONempty@true \xyFN@\DIRECTION@i}% \else \DN@{\xy@@{\dimen@=\xydashl@}\Directionfromdiag@}\fi \next@}}% \fi\fi\fi\fi \next@} \xydef@\DIRECTION@open{% \ifx *\next \DN@*##1*){\DIRECTION@group{##1}}% \else \DN@{\xyerror@{(* *) expected}{} \xyFN@\DIRECTION@i}% \fi \next@} \def\afterDIAG#1{\def\afterDIAG@{#1}\xyFN@\DIAG@} \xydef@\DIAG@{% \ifx d\next \DN@ d{\count@=1 \xyFN@\DIAG@@}% \else\ifx r\next \DN@ r{\count@=3 \xyFN@\DIAG@@}% \else\ifx u\next \DN@ u{\count@=5 \xyFN@\DIAG@@}% \else\ifx l\next \DN@ l{\count@=7 \xyFN@\DIAG@@}% \else \let\next@=\afterDIAG@ \fi\fi\fi\fi \next@} \xydef@\DIAG@@{\ifcase\count@ \or \DIAG@@@ l0r2\or\or \DIAG@@@ d2u4\or\or \DIAG@@@ r4l6\or\or \DIAG@@@ u6d0% \else\xybug@{impossible number}\fi \next@} \xydef@\DIAG@@@#1#2#3#4{% \ifx #1\next \count@=#2\DN@#1{\afterDIAG@}% \else \ifx #3\next \count@=#4\DN@#3{\afterDIAG@}% \else \let\next@=\afterDIAG@ \fi\fi} \xydef@\Directionfromdiag@{\ifcase\count@ \xy@@{\dlDirection@\dimen@}% \or \xy@@{\dDirection@\dimen@}% \or \xy@@{\drDirection@\dimen@}% \or \xy@@{\rDirection@\dimen@}% \or \xy@@{\urDirection@\dimen@}% \or \xy@@{\uDirection@\dimen@}% \or \xy@@{\ulDirection@\dimen@}% \or \xy@@{\lDirection@\dimen@}% \or \else\xybug@{impossible }\fi \DIRECTIONempty@false \xyFN@\DIRECTION@i} \xydef@\DIRECTION@v{% \xy@{v}{\enter@{\cfromthec@ \X@origin=\the\X@origin \Y@origin=\the\Y@origin \X@p=\the\X@p \Y@p=\the\Y@p}% \X@origin=\z@ \Y@origin=\z@}% \afterVECTORorEMPTY {\xy@@{\X@p=\z@ \Y@p=\z@ \setupDirection@ \leave@}% \DIRECTIONempty@false \xyFN@\DIRECTION@i}% {\xy@@\leave@ \xyerror@{ expected after v}{}% \DIRECTIONempty@false \xyFN@\DIRECTION@i}} \xydef@\DIRECTION@group#1{% \xy@@{\begingroup}\xy@@ix@{#1}\xy@@{\plainxy@\expandafter\POS\the\toks9\relax \setupDirection@\edef\next@{\endgroup \DirectionfromtheDirection@}\next@}% \DIRECTIONempty@false \xyFN@\DIRECTION@i} \xydef@\DIRECTION@i{% \ifx ^\next \DN@ ^{\xy@^{\aboveDirection@\xydashl@}% \DIRECTIONempty@false \xyFN@\DIRECTION@i}% \else\ifx _\next \DN@ _{\xy@_{\belowDirection@\xydashl@}% \DIRECTIONempty@false \xyFN@\DIRECTION@i}% \else\ifx :\next \DN@ :{% \xy@{:}{\enter@{\cfromthec@ \basefromthebase@ \X@p=\the\X@p \Y@p=\the\Y@p}% \X@origin=\z@ \Y@origin=\z@ \X@xbase=\cosDirection\xydashl@ \Y@xbase=\sinDirection\xydashl@ \X@ybase=-\Y@xbase \Y@ybase=\X@xbase}% \afterVECTORorEMPTY {\xy@@{\X@p=\z@ \Y@p=\z@ \setupDirection@ \leave@}% \DIRECTIONempty@false \xyFN@\DIRECTION@i}% {\xy@@\leave@ \xyerror@{ expected after :}{}% \DIRECTIONempty@false \xyFN@\DIRECTION@i}}% \else \let\next@=\afterDIRECTION@ \fi\fi\fi \next@} \message{decorations;} \xydef@\drop#1#{\DN@##1{\xy@@ix@{{#1}{##1}}% \xy@{\drop#1{##1}}{\expandafter\drop@\the\toks9 }\ignorespaces}\next@} \xydef@\connect#1#{\DN@##1{\xy@@ix@{{#1}{##1}}% \xy@{\connect#1{##1}}{\expandafter\connect@\the\toks9 }\ignorespaces}\next@} \xydef@\preconnect#1#{\DN@##1{\xy@@ix@{{#1}{##1}}% \xy@{\connect#1{##1}}{\expandafter\preconnect@\the\toks9 }\ignorespaces}\next@} \xydef@\save{\relax\saveC} \xydef@\saveC{\xy@\save\save@ \POS} \xydef@\save@{\enter@{\cfromthec@ \pfromthep@ \basefromthebase@}} \xydef@\restore{\xy@\restore\leave@ \ignorespaces} \xydef@\xyecho{% \xy@\xyecho{\let\xy@=\xyecho@ \message{\string\xyecho}}\POS} \xydef@\xyecho@#1#2{{\def\1{#1}\ifx\1\empty\else\message{\codeof\1}\fi}% \oxy@{#1}{#2}} \xydef@\xyverbose{% \xy@\xyverbose{\let\xy@=\xyverbose@ \W@{Xy: \string\xyverbose\xytracelineno@}}\POS} \xydef@\xyverbose@#1#2{% {\def\1{#1}\ifx\1\empty\else\W@{Xy: \codeof\1\xytracelineno@}\fi}% \oxy@{#1}{#2}} \xydef@\xytracing{% \xy@\xytracing{\let\xy@=\xytracing@ \W@{Xy TRACE: \string\xytracing\xytracelineno@}\xystatus@:}\POS} \xydef@\xytracing@#1#2{{\def\1{#1}\def\2{#2}% \W@{Xy TRACE: \codeof\1 {\codeof\2}\xytracelineno@}}\oxy@{#1}{#2}\xystatus@:} \xydef@\xystatus@#1{\xystatus@cp{#1}% \W@{#1 d=<\the\d@X,\the\d@Y> Direction=\the\Direction=\string(\cosDirection,\sinDirection\string)}% \W@{#1 base=<\the\X@origin,\the\Y@origin>+% <\the\X@xbase,\the\Y@xbase>x+<\the\X@ybase,\the\Y@ybase>y}% \W@{#1 min/max=<\the\X@min,\the\Y@min>/<\the\X@max,\the\Y@max> S=\the\csp@}} \xydef@\xystatus@cp#1{% \W@{#1 c=<\the\X@c,\the\Y@c> \expandafter\string\the\Edge@c \string[\the\L@c+\the\R@c,\the\D@c+\the\U@c\string] \ifInvisible@ I\fi\ifHidden@ H\fi}% \W@{#1 p=<\the\X@p,\the\Y@p> \expandafter\string\the\Edge@p \string[\the\L@p+\the\R@p,\the\D@p+\the\U@p\string]}} \xydef@\xystatus@c#1{% \W@{#1<\the\X@c,\the\Y@c> \expandafter\string\the\Edge@c \string[\the\L@c+\the\R@c,\the\D@c+\the\U@c\string]}} \xydef@\xyquiet{\xy@\xyquiet{\let\xy@=\oxy@}} \xydef@\xyignore#1{\xy@\xyignore{\xyignore@{#1}}\ignorespaces} \xydef@\xyignore@#1{{\let\xy@=\xyeat@ \change@oxy@\xy@ \POS#1\relax}} \xydef@\xyeat@#1#2{} \xydef@\xycompile@@{\jobname-} \xydef@\xycompileno@@{0} \xydef@\CompilePrefix#1{% \def\xycompile@@{#1}\xdef\xycompile@@{\codeof\xycompile@@}% \xdef\xycompileno@@{0}} \xydef@\xycompile{% \count@=\xycompileno@@ \advance\count@\@ne \xdef\xycompileno@@{\ifnum10>\count@ 0\fi \the\count@}% \edef\next{\noexpand\xycompileto{\xycompile@@\xycompileno@@}}\next} \xylet@\compilename@@=\empty \xylet@\xyrecompile@@=\relax \xydef@\xycompileto#1#2{% \if\inxy@ \DN@{\xy@@{\nter@{}}}% \else \DN@{\xy \xy@@{\nter@{\endxy}}}\fi \next@ \ifxysaving@ \xyerror@{Compilations can not be nested}{}\fi \DN@{#1}\edef\compilename@@{\codeof\next@}\DNii@{#2}% \def\xyrecompile@@{recompiling TRUNCATED}% \expandafter\xyinputorelse@@\expandafter{\compilename@@.xyc}% {\def\xyrecompile@@{compiling to}}% \ifx\xyrecompile@@\relax \else \expandafter\xyrecompile@ \fi \xy@@\leave@ \ignorespaces} \xydef@\xyrecompile@{% \message{(\xyrecompile@@\space\string`\compilename@@.xyc\string'}% \DN@{\immediate\openout\xywrite@=}\expandafter\next@\compilename@@.xyc \immediate\write\xywrite@{% \string\xycompiled{\compilename@@}% {\the\year/\the\month/\the\day\string:\the\time\xytracelineno@}% {Xy-pic \xyversion}\xycomment@}% \immediate\write\xywrite@{{\codeof\nextii@}\relax}% {\xysaving@ \expandafter\POS\nextii@ \relax}% \immediate\write\xywrite@{\string\xyendcompiled}% \immediate\closeout\xywrite@ \message{done)}% \expandafter\input\compilename@@.xyc \outlines@@\writeoutline@\writeoutline@} \xydef@\xysaving@{\let\xy@=\xysave@ \change@oxy@\xy@ \let\xy@@ix@=\xysave@@toksix@ \xysaving@true} \xynew@{if}\ifxysaving@ \xysaving@false \xydef@\xysave@#1#2{{\DN@{{#1}{#2}}% \immediate\write\xywrite@{\string\xy@\codeof\next@\xycomment@}}} \xydef@\xysave@@toksix@#1{{\DN@{{#1}}% \immediate\write\xywrite@{\string\xy@@ix@\codeof\next@\relax}}} \xywarnifdefined\xycomment@ {\catcode`\%=12 \catcode`\(=1 \catcode`\)=2 \gdef\xycomment@(%)} \xydef@\xycompiled#1#2#3#4{\DN@{#1}\edef\next@{\codeof\next@}% \ifx\next@\compilename@@\else \xywarning@{This file does not contain the result of \string\xycompileto{\compilename@@}{...}^^J% but of \string\xycompileto{\next@}}\fi \edef\next{Xy-pic \xyversion}\DN@{#3}\ifx\next\next@ \DN@{#4}\ifx\next@\nextii@ \xycatcodes \outlines@@\relax\readoutline@ \else \def\xyrecompile@@{recompiling to}\endinput \fi \else \def\xyrecompile@@{Xy-pic version change - recompiling}\endinput \fi} \xydef@\xyendcompiled{\let\xyrecompile@@=\relax \xyuncatcodes\endinput} \xydef@\CompileFixPoint#1{% \expandafter\ifx\csname#1FIX@@\endcsname\relax \expandafter\xdef\csname#1FIX@@\endcsname{\xycompileno@@}% \else \xdef\xycompileno@@{\csname#1FIX@@\endcsname}\fi} \xydef@\outlines@no#1#2{} \xydef@\outlines@make#1#2{#1} \xydef@\outlines@only#1#2{#2} \xylet@\outlines@@=\outlines@no \xylet@\writeoutline@@=\relax \xylet@\readoutline@@=\relax \xydef@\MakeOutlines{\let\outlines@@=\outlines@make} \xydef@\OnlyOutlines{\xywarning@{Compiled pictures only shown as outlines}% \let\outlines@@=\outlines@only} \xydef@\ShowOutlines{\let\readoutline@@=\typesetoutline@} \xydef@\NoOutlines{\let\outlines@@=\outlines@no} \xydef@\writeoutline@{% \DN@{\immediate\openout\xywrite@=}\expandafter\next@\compilename@@.xyd \immediate\write\xywrite@{\xycomment@\space\compilename@@.xyd} \immediate\write\xywrite@{% \string\X@min=\the\X@min \string\X@max=\the\X@max \string\Y@min=\the\Y@min \string\Y@max=\the\Y@max \string\relax}% \writeoutline@@ \immediate\closeout\xywrite@} \xynew@{if}\ifoutlineread@ \xydef@\readoutline@{\outlineread@true \expandafter\xyinputorelse@@\expandafter{\compilename@@.xyd}% {\def\xyrecompile@@{outline missing - recompiling to}\outlineread@false}% \ifoutlineread@ \readoutline@@ \writeoutline@\expandafter\xyendcompiled\fi} \xydef@\typesetoutline@{% \xy@@{\czeroEdge@ \U@p=\z@ \D@p=\z@ \L@p=\z@ \R@p=\z@ \Edge@p={\zeroEdge}% \X@p=\X@min \Y@p=\Y@min \X@c=\X@min \Y@c=\Y@max \connect@\dir{.}% \X@p=\X@c \Y@p=\Y@c \X@c=\X@max \Y@c=\Y@max \connect@\dir{.}% \X@p=\X@c \Y@p=\Y@c \X@c=\X@max \Y@c=\Y@min \connect@\dir{.}% \X@p=\X@c \Y@p=\Y@c \X@c=\X@min \Y@c=\Y@min \connect@\dir{.}}} \message{kernel objects:} \message{directionals,} \xydef@\dir{\hbox\bgroup\xyFN@\dir@i} \xydef@\dir@i{\ifx *\next \DN@*{\resetStyle@\object@}% \else \let\next@=\dir@ii \fi \next@} \xydef@\dir@ii#1#{\dir@{#1}} \xydef@\dir@#1#2{\DN@{dir#1{#2}}% \expandafter\let\expandafter\next\csname\codeof\next@\endcsname \ifx\next\relax \DN@{dir{#2}}% \expandafter\let\expandafter\next\csname\codeof\next@\endcsname \ifx\next\relax \DN@{\dir#1{#2}}% \xyerror@{illegal : \codeof\next@\space not defined}{}% \let\next=\no@ \fi\fi \next} \xydefcsname@{dir{}}{\no@} \xyletcsnamecsname@{dir0{}}{dir{}} \xyletcsnamecsname@{dir1{}}{dir{}} \xyletcsnamecsname@{dir^{}}{dir{}} \xyletcsnamecsname@{dir_{}}{dir{}} \xyletcsnamecsname@{dir2{}}{dir{}} \xyletcsnamecsname@{dir3{}}{dir{}} \xyletcsnamecsname@{dir{ }}{dir{}} \xydef@\no@{\egroup \czeroEdge@ \def\Leftness@{.5}\def\Upness@{.5}% \def\Drop@@{\setbox\z@=\copy\voidb@x}\def\Connect@@{\no@@}} \xydefcsname@{dir1{-}}{\line@} \xydefcsname@{dir2{-}}{\line@ \double@\xydashh@} \xydefcsname@{dir3{-}}{\line@ \triple@\xydashh@} \xyletcsnamecsname@{dir0{-}}{dir{}} \xyletcsnamecsname@{dir{-}}{dir1{-}} \xyletcsnamecsname@{dir{=}}{dir2{-}} \xydef@\line@{\dimen@=\sd@Y\sinDirection\xydashl@ \ifnum\SemiDirectionChar<31 \D@c=\z@ \U@c=\dimen@ \DN@{\d@Y<\z@}% \else\ifnum\SemiDirectionChar<64 \D@c=\dimen@ \U@c=\z@ \DN@{\z@<\d@Y}% \else\ifnum\SemiDirectionChar<96 \D@c=\dimen@ \U@c=\z@ \DN@{\d@X<\z@}% \else \D@c=\z@ \U@c=\dimen@ \DN@{\d@X<\z@}\fi\fi\fi \setboxz@h{\line@@}\ht\z@=\U@c \dp\z@=\D@c \L@c=\z@ \R@c=\wdz@ \ifdim\next@ \dimen@=\R@c \R@c=\L@c \L@c=\dimen@ \dimen@=\U@c \U@c=\D@c \D@c=\dimen@ \advance\dimen@-\U@c \lower\dimen@\boxz@ \else \boxz@ \fi \edef\tmp@{\egroup \U@c=\the\U@c \D@c=\the\D@c \L@c=\the\L@c \R@c=\the\R@c}% \tmp@ \Edge@c={\rectangleEdge}% \ifdim\z@<\U@c \def\Upness@{1}\else \def\Upness@{0}\fi \ifdim\z@<\L@c \def\Leftness@{1}\else \def\Leftness@{0}\fi \def\Drop@@{\styledboxz@}\def\Connect@@{\solid@}} \xydef@\line@@{{\xydashfont\SemiDirectionChar\/}} \xydef@\solid@{% \checkXy@rules@\solidhrule@\solidvrule@{\straight@\solidSpread@}} \xydef@\checkXy@rules@#1#2#3{% \dimen@=\Y@c \advance\dimen@-\Y@p \ifjusthvtest@.05pt>\ifdim\dimen@<\z@-\fi\dimen@ \DN@{#1}% \else \dimen@=\X@c \advance\dimen@-\X@p \ifjusthvtest@.05pt>\ifdim\dimen@<\z@-\fi\dimen@ \DN@{#2}% \else \DN@{#3}\fi\fi \next@} \xydef@\solidSpread@{\ifnum\z@<\count@@ \advance\count@@\@ne \fi} \xylet@\ifjusthvtest@=\ifdim \xydef@\NoRules{\let\ifjusthvtest@=\iffalse} \xydef@\UseRules{\let\ifjusthvtest@=\ifdim} \xydef@\solidvrule@{\no@@ \solidvrule@typeset \ifHidden@\else\noinsert@\fi \solidvrule@pre} \xydef@\solidvrule@pre{% \def\Cbreak@@{% \connectRestore@ \swap@\lastbreak@@\swap@ \solidvrule@typeset \edef\lastbreak@@{\cfromthec@}\Creset@@}% \def\Clast@@{% \connectRestore@ \Creset@@\swap@\lastbreak@@\swap@ \solidvrule@typeset \Creset@@ \edef\lastbreak@@{\cfromthep@}}% } \xydef@\solidvrule@typeset{% \ifInvisible@ \let\next@=\relax \else \let\next@=\solidvrule@typeset@ \fi \checkoverlap@@ \next@} \xydef@\solidvrule@typeset@{{% \advance\X@c\X@p \X@c=.5\X@c \X@p=\X@c \advance\X@c-.5\xydashw@ \advance\X@p.5\xydashw@ \ifdim\Y@c<\Y@p \advance\Y@c\U@c \advance\Y@p-\D@p \else \swapdimen@\Y@c\Y@p \advance\Y@c\U@p \advance\Y@p-\D@c \fi \Droprule@}} \xydef@\solidhrule@{\no@@ \solidhrule@typeset \ifHidden@\else\noinsert@\fi \solidhrule@pre} \xydef@\solidhrule@pre{% \def\Cbreak@@{% \connectRestore@ \swap@\lastbreak@@\swap@ \solidhrule@typeset \edef\lastbreak@@{\cfromthec@}\Creset@@}% \def\Clast@@{% \connectRestore@ \Creset@@\swap@\lastbreak@@\swap@ \solidhrule@typeset \Creset@@ \edef\lastbreak@@{\cfromthep@}}% } \xydef@\solidhrule@typeset{% \ifInvisible@ \let\next@=\relax \else \let\next@=\solidhrule@typeset@ \fi \checkoverlap@@ \next@} \xydef@\solidhrule@typeset@{{% \ifdim\X@c<\X@p \advance\X@c\R@c \advance\X@p-\L@p \else \swapdimen@\X@c\X@p \advance\X@c\R@p \advance\X@p-\L@c \fi \advance\Y@c\Y@p \Y@c=.5\Y@c \Y@p=\Y@c \advance\Y@c-.5\xydashw@ \advance\Y@p.5\xydashw@ \Droprule@}} \xydef@\Droprule@{\advance\X@p-\X@c \setboxz@h{\kern\X@c \vrule width\X@p depth-\Y@c height\Y@p}% \ht\z@=\z@ \wd\z@=\z@ \dp\z@=\z@ \Drop@@} \xydef@\zerodot{\copy\zerodotbox@} \xydefcsname@{dir1{.}}{\point@} \xydefcsname@{dir2{.}}{\point@ \double@\xydashh@} \xydefcsname@{dir3{.}}{\point@ \triple@\xydashh@} \xyletcsnamecsname@{dir0{.}}{dir{}} \xyletcsnamecsname@{dir{.}}{dir1{.}} \xyletcsnamecsname@{dir{:}}{dir2{.}} \xydef@\point@{\pointlike@\zerodot\p@} \xydef@\pointlike@#1#2{% \setboxz@h{#1}\wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@\egroup \def\Leftness@{.5}\def\Upness@{.5}\ctipEdge@ \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@{\dottedSpread@{#2}}}} \xydef@\dottedSpread@#1{% \dimen@=#1\relax \DN@{\A@=2\A@ \B@=2\B@ \dottedSpread@i}% \A@=\sd@X\cosDirection\dimen@ \B@=\sd@Y\sinDirection\dimen@ \dimen@=\A@ \advance\dimen@\B@ \dimen@ii=\sd@X\d@X \advance\dimen@ii\sd@Y\d@Y \ifdim\dimen@>\dimen@ii \DN@{\count@@=\z@}\fi \next@} \xydef@\dottedSpread@i{% \global\setbox8=\hbox to\A@{\hss \kern.5\A@\box\lastobjectbox@\kern.5\A@\hss}\dp8=.5\B@ \ht8=.5\B@ \advance\d@X\sd@X\A@ \advance\d@Y\sd@Y\B@ \advance\X@c\sd@X.5\A@ \advance\Y@c\sd@Y.5\B@ \ifdim\sd@Y\d@Y<\sd@X\d@X \dimen@=\sd@X\d@X \ifdim\zz@\A@\else \divide\dimen@\A@ \fi \count@@=\dimen@ \else \dimen@=\sd@Y\d@Y \ifdim\zz@\B@\else \divide\dimen@\B@ \fi \count@@=\dimen@ \fi \advance\count@@\@ne} \xydefcsname@{dir1{~}}{\squiggle@} \xydefcsname@{dir2{~}}{\squiggle@ \double@\xybsqlh@} \xydefcsname@{dir3{~}}{\squiggle@ \triple@\xybsqlh@} \xyletcsnamecsname@{dir0{~}}{dir{}} \xyletcsnamecsname@{dir{~}}{dir1{~}} \xydef@\squiggle@{\xybsqlfont \dimen@=\sd@X\cosDirection\xybsqll@ \advance\dimen@.1\p@ \dimen@ii=\sd@Y\sinDirection\xybsqll@ \kern\dimen@\squiggle@@ \edef\tmp@{\egroup \U@c=\the\dimen@ii \L@c=\the\dimen@}\tmp@ \wdz@=2\L@c \R@c=\L@c \ht\z@=\U@c \D@c=\U@c \dp\z@=\U@c \Edge@c={\rectangleEdge}% \def\Leftness@{.5}\def\Upness@{.5}% \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@\squiggledSpread@}} \xydef@\squiggle@@{\DirectionChar \count@=\DirectionChar \advance\count@-64 \ifnum\count@<\z@ \advance\count@128 \fi \char\count@} \xydef@\squiggledSpread@{% \dimen@=\d@X \advance\dimen@-\sd@X\count@@\A@ \advance\dimen@\sd@X.3\p@ \advance\X@c-.5\dimen@ \advance\d@X-\dimen@ \dimen@=\d@Y \advance\dimen@-\sd@Y\count@@\B@ \advance\dimen@\sd@Y.3\p@ \advance\Y@c-.5\dimen@ \advance\d@Y-\dimen@} \xydef@\double@#1{\edef\Drop@@{\dimen@=#1\relax \dimen@=.5\dimen@ \A@=-\sinDirection\dimen@ \B@=\cosDirection\dimen@ \setboxz@h{\setbox2=\hbox{\kern\A@\raise\B@\copy\z@}% \dp2=\z@ \ht2=\z@ \wd2=\z@ \box2 \setbox2=\hbox{\kern-\A@\raise-\B@ \noexpand\boxz@}% \dp2=\z@ \ht2=\z@ \wd2=\z@ \box2 }% \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \noexpand\styledboxz@}} \xydef@\triple@#1{\edef\Drop@@{\dimen@=#1\relax \A@=-\sinDirection\dimen@ \B@=\cosDirection\dimen@ \setboxz@h{\setbox2=\hbox{\kern\A@\raise\B@\copy\z@}% \dp2=\z@ \ht2=\z@ \wd2=\z@ \box2 \setbox2=\hbox{\kern-\A@\raise-\B@\copy\z@}% \dp2=\z@ \ht2=\z@ \wd2=\z@ \box2 \dp\z@=\z@ \ht\z@=\z@ \wdz@=\z@ \noexpand\boxz@}% \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \noexpand\styledboxz@}} \xydefcsname@{dir1{--}}{\dash@} \xydefcsname@{dir2{--}}{\dash@ \double@\xydashh@} \xydefcsname@{dir3{--}}{\dash@ \triple@\xydashh@} \xyletcsnamecsname@{dir0{--}}{dir{}} \xyletcsnamecsname@{dir{--}}{dir1{--}} \xyletcsnamecsname@{dir{==}}{dir2{--}} \xydef@\dash@{\line@ \wdz@=2\wdz@ \ht\z@=2\ht\z@ \dp\z@=2\dp\z@ \multiply\D@c\tw@ \multiply\U@c\tw@ \multiply\L@c\tw@ \multiply\R@c\tw@ \def\Connect@@{\straight@\dashedSpread@}} \xydef@\dashedSpread@{\ifnum\z@<\count@@ \advance\count@@\@ne \fi \advance\d@X\sd@X.5\A@ \advance\d@Y\sd@Y.5\B@ \ifdim\z@<\d@X \advance\X@c.5\A@ \fi \advance\Y@c\sd@Y.5\B@} \xydefcsname@{dir1{~~}}{\dashsquiggle@} \xydefcsname@{dir2{~~}}{\dashsquiggle@ \double@\xybsqlh@} \xydefcsname@{dir3{~~}}{\dashsquiggle@ \triple@\xybsqlh@} \xyletcsnamecsname@{dir0{~~}}{dir{}} \xyletcsnamecsname@{dir{~~}}{dir1{~~}} \xydef@\dashsquiggle@{\squiggle@ \multiply\D@c\tw@ \multiply\U@c\tw@ \multiply\L@c\tw@ \multiply\R@c\tw@ \dimen@=\L@c \advance\dimen@\R@c \wdz@=\dimen@ \ht\z@=\U@c \dp\z@=\D@c \def\Connect@@{\straight@\dashsquiggledSpread@}} \xydef@\dashsquiggledSpread@{\ifnum\z@<\count@@ \advance\count@@\@ne \fi \advance\X@c.5\A@ \advance\d@X.5\A@ \advance\Y@c.25\B@ \advance\d@Y.5\B@} \xyletcsnamecsname@{dir1{..}}{dir{.}} \xyletcsnamecsname@{dir2{..}}{dir2{.}} \xyletcsnamecsname@{dir3{..}}{dir3{.}} \xyletcsnamecsname@{dir{..}}{dir1{.}} \xyletcsnamecsname@{dir{::}}{dir2{.}} \xylet@\ctipEdge@=\czeroEdge@ \xydefcsname@{dir1{>}}{\tip@} \xydefcsname@{dir^{>}}{\atip@} \xydefcsname@{dir_{>}}{\btip@} \xyletcsnamecsname@{dir0{>}}{dir{}} \xyletcsnamecsname@{dir{>}}{dir1{>}} \xydefcsname@{dir1{<}}{\reverseDirection@\tip@} \xydefcsname@{dir^{<}}{\reverseDirection@\btip@} \xydefcsname@{dir_{<}}{\reverseDirection@\atip@} \xyletcsnamecsname@{dir0{<}}{dir{}} \xyletcsnamecsname@{dir{<}}{dir1{<}} \xydef@\tip@{\tip@x\tip@@} \xydef@\atip@{\tip@x\atip@@} \xydef@\btip@{\tip@x\btip@@} \xydef@\tip@x#1{#1\egroup \ctipEdge@ \def\Leftness@{.5}\def\Upness@{.5}% \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@{\dottedSpread@\jot}}} \xydef@\tip@@{\atip@@\btip@@} \xydef@\atip@@{\xyatipfont\DirectionChar} \xydef@\btip@@{\xybtipfont\DirectionChar} \xydefcsname@{dir2{>}}{\Tip@} \xydefcsname@{dir2{<}}{\reverseDirection@\Tip@} \xydef@\Tip@{\kern2.5pt \vrule height2.5pt depth2.5pt width\z@ \Tip@@ \kern2.5pt \egroup \U@c=2.5pt \D@c=2.5pt \L@c=2.5pt \R@c=2.5pt \Edge@c={\circleEdge}% \def\Leftness@{.5}\def\Upness@{.5}% \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@{\dottedSpread@\jot}}} \xydef@\Tip@@{\count@=\DirectionChar \advance\count@-4 \ifnum\count@<\z@ \advance\count@128 \fi \xyatipfont\char\count@ \advance\count@ 8 \ifnum127<\count@ \advance\count@-128 \fi \xybtipfont\char\count@} \xydefcsname@{dir3{>}}{\Ttip@} \xydefcsname@{dir3{<}}{\composite@{}{:(-1,0)\dir3{>}}} \xydef@\Ttip@{\kern3.2pt \vrule height3.2pt depth3.2pt width\z@ \Ttip@@ \kern3.2pt \egroup \U@c=3.2pt \D@c=3.2pt \L@c=3.2pt \R@c=3.2pt \Edge@c={\circleEdge}% \def\Leftness@{.5}\def\Upness@{.5}% \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@{\dottedSpread@\jot}}} \xydef@\Ttip@@{% \setboxz@h\bgroup\reverseDirection@\line@ \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \kern-\L@c \boxz@ \kern\L@c {\vDirection@(1,-.31)\xydashl@ \xyatipfont\char\DirectionChar}% {\vDirection@(1,+.31)\xydashl@ \xybtipfont\char\DirectionChar}} \xydefcsname@{dir1{|}}{\stopper@} \xydefcsname@{dir^{|}}{\aboveDirection@\xydashl@ \shiftdir@\line@\z@ \pointlike@{}\xydashh@} \xydefcsname@{dir_{|}}{\belowDirection@\xydashl@ \shiftdir@\line@\z@ \pointlike@{}\xydashh@} \xydefcsname@{dir2{|}}{\stopper@ \double@\xydashh@} \xydefcsname@{dir3{|}}{\stopper@ \double@{2\xydashh@}} \xyletcsnamecsname@{dir0{|}}{dir{}} \xyletcsnamecsname@{dir{|}}{dir1{|}} \xydef@\stopper@{\tip@x\stopper@@} \xydef@\stopper@@{\setboxz@h{\count@=\SemiDirectionChar \advance\count@64 \ifnum127<\count@ \advance\count@-128 \fi \xydashfont\char\count@\/}% \setboxz@h{\kern-.5\wdz@ \dimen@=\sd@Y\cosDirection\xydashl@ \ifnum\SemiDirectionChar=95 \dimen@=\sd@X\sd@Y\dimen@ \fi \raise.5\dimen@\boxz@}% \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@} \xydefcsname@{dir1{(}}{\hook@} \xydefcsname@{dir^{(}}{\ahook@} \xydefcsname@{dir_{(}}{\bhook@} \xyletcsnamecsname@{dir0{(}}{dir{}} \xyletcsnamecsname@{dir{(}}{dir1{(}} \xydefcsname@{dir1{)}}{\reverseDirection@\hook@} \xydefcsname@{dir^{)}}{\reverseDirection@\bhook@} \xydefcsname@{dir_{)}}{\reverseDirection@\ahook@} \xyletcsnamecsname@{dir0{)}}{dir{}} \xyletcsnamecsname@{dir{)}}{dir1{)}} \xydef@\hook@{\tip@x\hook@@} \xydef@\hook@@{\setboxz@h{\xybsqlfont \vDirection@(1,-1){.707107\xybsqll@}% \hbox{\DirectionChar \kern-\d@Y\raise\d@X\hbox{\count@=\DirectionChar \advance\count@-32 \ifnum\count@<\z@ \advance\count@128 \fi \char\count@}}}% \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@} \xydef@\ahook@{\tip@x\ahook@@} \xydef@\ahook@@{\setboxz@h{\xybsqlfont \vDirection@(1,-1){.707107\xybsqll@}\kern-\d@X \lower\d@Y\hbox{\DirectionChar \kern-\d@Y\raise\d@X\hbox{\count@=\DirectionChar \advance\count@-32 \ifnum\count@<\z@ \advance\count@128 \fi \char\count@}}}% \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@} \xydef@\bhook@{\tip@x\bhook@@} \xydef@\bhook@@{\setboxz@h{\xybsqlfont \vDirection@(-1,-1){.707107\xybsqll@}\DirectionChar \kern\d@X\raise\d@Y\hbox{\count@=\DirectionChar \advance\count@-96 \ifnum\count@<\z@ \advance\count@128 \fi \char\count@}}% \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@} \xydefcsname@{dir^{'}}{\reverseDirection@\bturn@} \xydefcsname@{dir_{'}}{\reverseDirection@\aturn@} \xydefcsname@{dir^{`}}{\aturn@} \xydefcsname@{dir_{`}}{\bturn@} \xydef@\aturn@{\tip@x\aturn@@} \xydef@\aturn@@{\setboxz@h{\xybsqlfont \vDirection@(1,-1){.707107\xybsqll@}\kern-\d@X \lower\d@Y\hbox{\DirectionChar}}% \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@} \xydef@\bturn@{\tip@x\bturn@@} \xydef@\bturn@@{\setboxz@h{\xybsqlfont \vDirection@(-1,-1){.707107\xybsqll@}\DirectionChar}% \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@} \xydef@\newdir#1#{\newdir@{#1}} \xydef@\newdir@#1#2#3{\xydefcsname@{dir#1{#2}}{\composite@{}{#3}}} \xydef@\shiftdir@#1#2{% \setbox\z@=\hbox\bgroup#1\relax \setboxz@h{\dimen@ii=#2\relax \dimen@=-\cosDirection\dimen@ii \advance\dimen@-\L@c \kern\dimen@ \lower\sinDirection\dimen@ii\boxz@}% \wdz@\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@} \xylet@\tipjot@=\jot \xydefcsname@{dir1{>>}}{\shiftdir@\tip@\tipjot@ \tip@} \xydefcsname@{dir^{>>}}{\shiftdir@\atip@\tipjot@ \atip@} \xydefcsname@{dir_{>>}}{\shiftdir@\btip@\tipjot@ \btip@} \xydefcsname@{dir2{>>}}{\composite@{}{h!/\tipjot@/\dir2{>}*\dir2{>}}} \xydefcsname@{dir3{>>}}{\composite@{}{h!/\tipjot@/\dir3{>}*\dir3{>}}} \xyletcsnamecsname@{dir0{>>}}{dir{}} \xyletcsnamecsname@{dir{>>}}{dir1{>>}} \xydefcsname@{dir1{<<}}{\reverseDirection@ \shiftdir@\tip@\tipjot@ \tip@} \xydefcsname@{dir^{<<}}{\reverseDirection@ \shiftdir@\btip@\tipjot@ \btip@} \xydefcsname@{dir_{<<}}{\reverseDirection@ \shiftdir@\atip@\tipjot@ \atip@} \xydefcsname@{dir2{<<}}{\composite@{}{h!/-\tipjot@/\dir2{<}*\dir2{<}}} \xydefcsname@{dir3{<<}}{\composite@{}{h!/-\tipjot@/\dir3{<}*\dir3{<}}} \xyletcsnamecsname@{dir0{<<}}{dir{}} \xyletcsnamecsname@{dir{<<}}{dir1{<<}} \xydefcsname@{dir1{||}}{\shiftdir@\stopper@\xydashh@ \shiftdir@\stopper@\z@ \pointlike@{}\jot} \xydefcsname@{dir^{||}}{\shiftdir@{\aboveDirection@\xydashl@\line@}\xydashh@ \shiftdir@{\aboveDirection@\xydashl@\line@}\z@ \pointlike@{}\jot} \xydefcsname@{dir_{||}}{\shiftdir@{\belowDirection@\xydashl@\line@}\xydashh@ \shiftdir@{\belowDirection@\xydashl@\line@}\z@ \pointlike@{}\jot} \xydefcsname@{dir2{||}}{\shiftdir@\stopper@\xydashh@ \shiftdir@\stopper@\z@ \pointlike@{}\jot \double@\xydashh@} \xydefcsname@{dir3{||}}{\shiftdir@\stopper@\xydashh@ \shiftdir@\stopper@\z@ \pointlike@{}\jot \double@{2\xydashh@}} \xyletcsnamecsname@{dir0{||}}{dir{}} \xyletcsnamecsname@{dir{||}}{dir1{||}} \xydefcsname@{dir1{>|}}{\shiftdir@\stopper@\z@ \tip@} \xydefcsname@{dir2{>|}}{\composite@{}{\dir2{>}*\dir2{|}}} \xydefcsname@{dir3{>|}}{\composite@{}{\dir3{>}*\dir3{|}}} \xyletcsnamecsname@{dir0{>|}}{dir{}} \xyletcsnamecsname@{dir{>|}}{dir1{>|}} \xydefcsname@{dir1{>>|}}{\shiftdir@\stopper@\z@ \shiftdir@\tip@\tipjot@ \tip@} \xydefcsname@{dir2{>>|}}{\composite@{}{h!/\tipjot@/\dir2{>}*\dir2{>}*\dir2{|}}} \xydefcsname@{dir3{>>|}}{\composite@{}{h!/\tipjot@/\dir3{>}*\dir3{>}*\dir3{|}}} \xyletcsnamecsname@{dir0{>>|}}{dir{}} \xyletcsnamecsname@{dir{>>|}}{dir1{>>|}} \xydefcsname@{dir1{|<}}{\reverseDirection@ \shiftdir@\stopper@\z@ \tip@} \xydefcsname@{dir2{|<}}{\reverseDirection@ \shiftdir@\stopper@\z@ \Tip@} \xydefcsname@{dir3{|<}}{\reverseDirection@ \shiftdir@\stopper@\z@ \Ttip@} \xyletcsnamecsname@{dir0{|<}}{dir{}} \xyletcsnamecsname@{dir{|<}}{dir1{|<}} \xydefcsname@{dir1{|<<}}{\reverseDirection@ \shiftdir@\stopper@\z@ \shiftdir@\tip@\tipjot@ \tip@} \xydefcsname@{dir2{|<<}}{% \composite@{}{h!/-\tipjot@/\dir2{<}*\dir2{<}*\dir2{|}}} \xydefcsname@{dir3{|<<}}{% \composite@{}{h!/-\tipjot@/\dir3{<}*\dir3{<}*\dir3{|}}} \xyletcsnamecsname@{dir0{|<<}}{dir{}} \xyletcsnamecsname@{dir{|<<}}{dir1{|<<}} \xydefcsname@{dir1{|-}}{\shiftdir@\stopper@\z@ \shiftdir@\line@\z@ \pointlike@{}\jot} \xydefcsname@{dir^{|-}}{\shiftdir@{\aboveDirection@\xydashl@ \line@}\z@ \shiftdir@\line@\z@ \pointlike@{}\jot} \xydefcsname@{dir_{|-}}{\shiftdir@{\belowDirection@\xydashl@ \line@}\z@ \shiftdir@\line@\z@ \pointlike@{}\jot} \xydefcsname@{dir2{|-}}{\shiftdir@\stopper@\z@ \shiftdir@\line@\z@ \pointlike@{}\jot \double@\xydashh@} \xydefcsname@{dir3{|-}}{\shiftdir@\stopper@\z@ \shiftdir@\line@\z@ \pointlike@{}\jot \triple@\xydashh@} \xyletcsnamecsname@{dir0{|-}}{dir{}} \xyletcsnamecsname@{dir{|-}}{dir1{|-}} \xyletcsnamecsname@{dir{|=}}{dir2{|-}} \xydefcsname@{dir{+}}{% \DN@##1{\composite@{}{##10\dir{|}*!C##10\dir{-}}}\addEQ@\next@} \xyletcsnamecsname@{dir0{+}}{dir{}} \xydefcsname@{dir{x}}{\vDirection@(1,1)\jot \DN@##1{\composite@{}{##10\dir{|}*!C##10\dir{-}}}\addEQ@\next@} \xyletcsnamecsname@{dir0{x}}{dir{}} \xydefcsname@{dir{/}}{\vDirection@(1,-.3)\jot \stopper@} \xyletcsnamecsname@{dir0{/}}{dir{}} \xydefcsname@{dir{//}}{\vDirection@(1,-.3)\jot \shiftdir@\stopper@\xydashh@ \stopper@} \xyletcsnamecsname@{dir0{//}}{dir{}} \xydefcsname@{dir{*}}{\solidpoint@} \xydef@\solidpoint@{% \pointlike@{\kern-1.8pt\lower1.8pt\hbox{$\scriptstyle\bullet$}}\jot} \xyletcsnamecsname@{dir0{*}}{dir{}} \xydefcsname@{dir{o}}{\hollowpoint@} \xydef@\hollowpoint@{% \pointlike@{\kern-1.8pt\lower1.8pt\hbox{$\scriptstyle\circ$}}\jot} \xyletcsnamecsname@{dir0{o}}{dir{}} \message{circles,} \xydef@\cir#1#{\hbox\bgroup \afterVECTORorEMPTY{\xy@@{\R@=\X@c}\cir@}{\xy@@{\R@=\R@c}\cir@}#1@} \xydef@\cir@#1@#2{% \DN@{#1}\ifx\next@\empty\else \xyerror@{illegal circle : must be or }{}\fi \afterCIRorDIAG{\xyFN@\cir@cir}{\xyFN@\cir@diag}#2@} \xydef@\cir@cir{% \ifx \space@\next \expandafter\DN@\space{\xyFN@\cir@cir}% \else \ifx @\next \DN@ @{\cir@i}% \else \xyerror@{illegal : must have form or }{}% \fi\fi \next@} \xydef@\cir@diag{% \DN@{\xyerror@{illegal : must have form or }{}}% \ifx @\next \ifnum\count@=8 \DN@ @{\def\CIRin@@{0}\def\CIRorient@@{\CIRfull@}\def\CIRout@@{7}\cir@i}% \fi\fi \next@} \xydef@\cir@i{% \ifnum\CIRin@@=8 \xyerror@{incomplete specification}{% The you specified as is not sufficiently specific.}% \def\CIRin@@{0}\fi \ifdim\R@<.5\p@ \R@=\z@ \zerodot \else \CIRorient@@ \cirbuild@ \fi \L@c=\R@ \R@c=\R@ \D@c=\R@ \U@c=\R@ \def\Leftness@{.5}\def\Upness@{.5}% \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@\relax}% \Edge@c={\circleEdge}\OBJECT@x} \xydef@\CIRin@@{3} \xydef@\CIRout@@{3} \xylet@\CIRorient@@=\empty \xydef@\afterCIRorDIAG#1#2{\def\afterCIR@{#1}\def\afterCIRDIAG@{#2}\xyFN@\CIR@} \xylet@\afterCIR@=\empty \xylet@\afterCIRDIAG@=\empty \xydef@\CIR@{\count@=8 \afterDIAG{\edef\CIRin@@{\the\count@}\xyFN@\CIR@@}} \xydef@\CIR@@{% \ifx \space@\next \expandafter\DN@\space{\xyFN@\CIR@@}% \else\ifx ^\next \DN@ ^{\def\CIRorient@@{\CIRacw@}% \afterDIAG{\edef\CIRout@@{\the\count@}\afterCIR@}}% \else\ifx _\next \DN@_{\def\CIRorient@@{\CIRcw@}% \afterDIAG{\edef\CIRout@@{\the\count@}\afterCIR@}}% \else \DN@{\def\CIRorient@@{\relax}\afterCIRDIAG@}% \fi\fi\fi \next@} \xylet@\CIRtest@@=\relax \xydef@\CIRlo@@{0} \xydef@\CIRhi@@{0} \xydef@\CIRfull@{\def\CIRtest@@##1##2{##2}} \xydef@\cirbuild@{\cirrestrict@@ \multiply\count@8 \circhar@0\circhar@7\kern\dimen@ \circhar@1\circhar@6\kern\dimen@ \circhar@2\circhar@5\kern\dimen@ \circhar@3\circhar@4\kern\dimen@} \xydef@\circhar@#1{% \setboxz@h{\circhar@@{#1}}\dimen@=\wdz@ \wdz@=\z@ \ht\z@=\R@ \dp\z@=\R@ \CIRtest@@#1{\styledboxz@}\setbox\z@=\copy\voidb@x} \xydef@\circhar@@#1{{\xycircfont \advance\count@#1\relax \char\count@}} \xydef@\cirrestrict@@{\begingroup \dimen@=\R@ \setboxz@h{\xycircfont\char\z@\char\@ne}\A@=\wdz@ \ifdim\R@<8\A@ \count@=\dimen@ \divide\count@\A@ \advance\count@\m@ne \else\ifdim\R@<16\A@ \count@=\dimen@ \dimen@=2\A@ \divide\count@\dimen@ \advance\count@3 \else\ifdim\R@<32\A@ \count@=\dimen@ \dimen@=4\A@ \divide\count@\dimen@ \advance\count@7 \else \count@=15 \fi\fi\fi \R@=\A@ \ifnum\count@<8 \multiply\R@\count@ \advance\R@\A@ \else\ifnum\count@<12 \multiply\R@\count@ \multiply\R@\tw@ \advance\R@-6\A@ \else\ifnum\count@<16 \multiply\R@\count@ \multiply\R@ 4 \advance\R@-28\A@ \else \multiply\R@ 32 \fi\fi\fi \edef\@tmp{\endgroup \R@=\the\R@ \count@=\the\count@}\@tmp} \xydef@\CIRacw@{\count@@=\CIRin@@ \count@=\CIRout@@ \ifnum\count@=8 \count@=\count@@ \ifnum\count@<6 \advance\count@\tw@ \else \advance\count@-6 \fi \fi \ifnum\count@@<\@ne \advance\count@@7 \else \advance\count@@\m@ne \fi \ifnum\count@<\@ne \advance\count@7 \else \advance\count@\m@ne \fi \ifnum\count@@>\count@ \let\CIRtest@@=\CIRtest@outside \edef\CIRlo@@{\the\count@}\edef\CIRhi@@{\the\count@@}% \else \let\CIRtest@@=\CIRtest@inside \edef\CIRlo@@{\the\count@@}\edef\CIRhi@@{\the\count@}% \fi} \xydef@\CIRcw@{\count@@=\CIRin@@ \count@=\CIRout@@ \ifnum\count@=8 \count@=\count@@ \ifnum\count@>\@ne \advance\count@-\tw@ \else \advance\count@6 \fi \fi \ifnum\count@@<5 \advance\count@@\thr@@ \else \advance\count@@-5 \fi \ifnum\count@<5 \advance\count@\thr@@ \else \advance\count@-5 \fi \ifnum\count@@<\count@ \let\CIRtest@@=\CIRtest@outside \edef\CIRlo@@{\the\count@@}\edef\CIRhi@@{\the\count@}% \else \let\CIRtest@@=\CIRtest@inside \edef\CIRlo@@{\the\count@}\edef\CIRhi@@{\the\count@@}% \fi} \xydef@\CIRtest@inside#1#2{\let\next@=\relax \ifnum\CIRlo@@>#1\else \ifnum#1<\CIRhi@@\DN@{#2}\fi\fi \next@} \xydef@\CIRtest@outside#1#2{\let\next@=\relax \ifnum\CIRlo@@>#1\DN@{#2}\else \ifnum#1<\CIRhi@@\else\DN@{#2}\fi\fi \next@} \message{text;} \xydef@\txt{\hbox\bgroup \xyFN@\txt@} \xydef@\txt@{% \addLT@\ifx\next \addGT@{\addLT@\DN@##1}{\A@=##1\txt@i}% \else \DN@{\A@=\maxdimen \txt@i}\fi \next@} \xydef@\txt@i#1#{% \setboxz@h{#1\mathstrut}\dimen@=\ht\z@ \advance\dimen@\dp\z@ \baselineskip=1.1\dimen@ \lineskip=.2\dimen@ \lineskiplimit=\lineskip \def\txtline@@##1{\txtline@{#1}{##1}}\object@\txt@ii} \xylet@\txtline@@=\eat@ \xydef@\txtline@#1#2{\relax\setboxz@h{#1{\ignorespaces #2\unskip}}% \ifdim\A@<\wdz@ \setboxz@h{\hsize=\A@ \leftskip=0pt plus4em \rightskip=\leftskip \parfillskip=0pt \parindent=0pt \spaceskip=.3333em \xspaceskip=.5em \pretolerance=9999 \tolerance=9999 \hyphenpenalty=9999 \exhyphenpenalty=9999 \vbox{#1\noindent\ignorespaces #2\unskip}}% \else\ifdim\A@<\maxdimen\setboxz@h to\A@{\hfil\boxz@\hfil}\fi\fi \boxz@} \xydef@\txt@ii#1{\vbox{% \let\\=\cr \tabskip=\z@skip \halign{\relax\hfil\txtline@@{##}\hfil\cr\leavevmode#1\crcr}}} \message{options;} \xylet@\xyoption@@=\relax \xydef@\xyoption#1{\DN@{#1}\edef\next@{\codeof\next@}% \csname xyeveryrequest@\next@ @\endcsname \xyinputorelse@{xy#1}{\xyoption@truncated#1@@@@@@@@@,#1@}% \def\xyoption@@{#1}\edef\xyoption@@{\codeof\xyoption@@} \expandafter\let\expandafter\next@\csname xy\xyoption@@ version\endcsname \expandafter\let\csname xy\xyoption@@ loaded\endcsname=\next@ \runxywith@ \ignorespaces} \xydef@\xyoption@truncated#1#2#3#4#5#6#7@#8,#9@{% \DN@{#7}\ifx\next@\empty \DN@##1##2{##2}\else\let\next@=\xyinputorelse@ \fi \next@{xy#1#2#3#4#5#6}% {\DN@{#1#2#3#4#5#6}\edef\next@{\codeof\next@}% \xyerror@{No `\next@' option}{% Your \xyoption{#9} request could not be granted: the required^^J% file `xy#9.tex' could not be located. Please make sure that it is^^J% properly installed before continuing.}}} \xydef@\xyrequire#1{\DN@{#1}\edef\next@{\codeof\next@}% \csname xyeveryrequest@\next@ @\endcsname \expandafter\let\expandafter\next@\csname xy\codeof\next@ loaded\endcsname \ifx \next@\relax \DN@{\xyoption{#1}}\else \DN@{\ignorespaces}\fi \next@} \xylet@\xywith@@=\empty \xydef@\runxywith@{\let\xywithdo@@=\xywithtest@ \xywith@@} \xydef@\xywithoption#1#2{\DN@{#1}\edef\next@{\codeof\next@}% \expandafter\let\expandafter\nextii@\csname xy\next@ loaded\endcsname \ifx \nextii@\relax \expandafter\def\expandafter\xywith@@\expandafter{\xywith@@ \xywithdo@@{#1}{#2}}% \else \expandafter\xywithrun@\expandafter{\next@}{#2}\fi} \xydef@\xywithtest@#1#2{\DN@{#1}\edef\next@{\codeof\next@}% \ifx\next@\xyoption@@ \expandafter\xywithrun@\expandafter{\next@}{#2}\fi} \xydef@\xywithrun@#1#2{\csname xyeverywithoption@#1@\endcsname #2} \xydef@\xyevery@#1#2#3{\DN@{#2}\edef\next@{\codeof\next@}% \expandafter\ifx\csname xyevery#1@\next@ @\endcsname\relax \expandafter\let\csname xyevery#1@\next@ @\endcsname=\empty \fi \DNii@##1{\expandafter\def\expandafter##1\expandafter{##1#3}}% \expandafter\nextii@\csname xyevery#1@\next@ @\endcsname} \xydef@\xyeveryrequest{\xyevery@{request}} \xydef@\xyeverywithoption{\xyevery@{withoption}} \xydef@\xyprovide#1#2#3#4#5#6{% \def\xyoption@@{#1}\edef\xyoption@@{\codeof\xyoption@@}\edef\next@{#3}% \message{ Xy-pic option: #2 v.\next@}% \expandafter\let\expandafter\nextii@\csname xy\xyoption@@ loaded\endcsname \ifx \next@\nextii@ \message{not reloaded}\endinput \else \ifx \nextii@\relax\else \xyerror@{Option `\xyoption@@' version mismatch}{% You previously loaded, or the format has preloaded, a different version^^J% of this option. Just continue to try to load this version instead (and^^J% be prepared for a lot of warnings about redefinitions).}% \fi \expandafter\let\csname xy\xyoption@@ version\endcsname=\next@ \expandafter\let\expandafter\xyenddocmode@\csname DOCMODE\endcsname \expandafter\let\csname DOCMODE\endcsname\xyprovidedocmode@ \xycatcodes \fi \ignorespaces} \xydef@\xyendinput{\expandafter\let\csname DOCMODE\endcsname=\xyenddocmode@ \message{loaded}\xyuncatcodes\endinput} \expandafter\xylet@\expandafter\xyprovidedocmode@\csname DOCMODE\endcsname \xylet@\xyenddocmode@=\relax \xydef@\xydriversloaded@none{\do{unload}} \xylet@\xydriversloaded@@=\xydriversloaded@none \xylet@\xydriversselected@@=\empty \xylet@\xydriver@unload@support@@=\empty \xydef@\selectdriver@#1{\DN@{#1}\edef\next@{\codeof\next@}% \expandafter\selectdriver@@\expandafter{\next@}} \xydef@\selectdriver@single#1{\xysetup@@{\def\xydriversselected@@{\do{#1}}% \xyLoadDrivers@}\let\selectdriver@@=\changedriver@single} \xydef@\changedriver@single#1{\xysetup@@{\def\xydriversselected@@{\do{#1}}% \xyReloadDrivers@}} \xydef@\selectdriver@multiple#1{\expandafter\xysetup@@\expandafter{% \expandafter\def\expandafter\xydriversselected@@\expandafter{% \xydriversselected@@ \do{#1}}% \let\do=\activatedriver@ \xydriversselected@@}} \xydef@\UseSingleDriver{\let\selectdriver@@=\selectdriver@single} \xydef@\MultipleDrivers{\let\selectdriver@@=\selectdriver@multiple} \xydef@\xyLoadDrivers@{\let\do=\activatedriver@ \xydriversselected@@} \xydef@\xyReloadDrivers@{\activatedriver@{unload}\xyLoadDrivers@} \xylet@\xyReloadDrivers=\xyReloadDrivers@ \xydef@\activatedriver@#1{% \let\doii=\activatedriversupport@ \csname xydriver@#1@support@@\endcsname} \xydef@\activatedriversupport@#1#2{% \expandafter\ifx\csname xy#1loaded\endcsname\relax\DN@{}% \else\DN@{#2}\fi \next@} \UseSingleDriver \xydef@\xyselectoptionsupport@{\let\do=\activatedriver@ \xydriversselected@@} \xydef@\xyShowDrivers{{\W@{Loaded:}\let\do=\doShow \xydriversloaded@@ \let\next@=\empty \def\do##1{\ifx\next@\empty \DN@{##1}% \else \expandafter\DN@\expandafter{\next@, ##1}\fi}% \xydriversselected@@\W@{Selected: \next@.}}} \def\doShow#1{\let\next@=\empty \def\doii##1##2{\ifx\next@\empty \DN@{##1}% \else \expandafter\DN@\expandafter{\next@, ##1}\fi}% \csname xydriver@#1@support@@\endcsname \W@{ #1 supports \next@.}} \xydef@\newdriver#1{% \def\nextiii@##1{% \expandafter\def\expandafter\xydriversloaded@@ \expandafter{\xydriversloaded@@\do{##1}}% \expandafter\let\csname xydriver@\xyoption@@ @support@@\endcsname=\empty}% \def\do##1{\DNii@{##1}\ifx\xyoption@@\nextii@ \let\nextiii@=\eat@ \fi}% \xydriversloaded@@ \expandafter\nextiii@\expandafter{\xyoption@@}% #1\relax \DN@##1{\xywithoption{##1}{% \selectdriver@{##1}\xyeveryrequest{##1}{\selectdriver@{##1}}}}% \expandafter\next@\expandafter{\xyoption@@}\ignorespaces} \xydef@\xyaddsupport{\expandafter\xyadddriversupport@\expandafter{\xyoption@@}} \xydef@\xyaddunsupport{\xyadddriversupport@{unload}} \xydef@\xyadddriversupport@#1#2#3{% \DNii@{#1}\edef\nextii@{\codeof\nextii@}% \def\nextiii@{#2}\edef\nextiii@{\codeof\nextiii@}% \def\next{\xybug@{ \nextii@\space not loaded}}% \def\do##1{\DN@{##1}\edef\next@{\codeof\next@}% \ifx\next@\nextii@ \let\next=\relax \fi}\xydriversloaded@@ \next \def\next{\xybug@{ \nextii@\space already supports \nextiii@}}% \def\doii##1##2{\DN@{##1}\edef\next@{\codeof\next@}% \ifx\next@\nextiii@ \let\next=\relax \fi}\xydriversloaded@@ \next \DN@##1##2{\ifx##1\relax \let##1=\empty \fi \expandafter\def\expandafter##1\expandafter{##1\doii{##2}{#3}}}% \expandafter\expandafter\expandafter\next@ \expandafter\expandafter\csname xydriver@\nextii@ @support@@\endcsname \expandafter{\nextiii@}% \DN@##1{\expandafter\xyeverywithoption\expandafter{\nextiii@}{% \xytestforsupport@{##1}}}% \expandafter\next@\expandafter{\nextii@}\xydriversloaded@@ \ignorespaces} \xydef@\xytestforsupport@#1{\def\do##1{\DN@{##1}\DNii@{#1}% \ifx\next@\nextii@ \expandafter\xyselectoptionsupport@ \fi}} \xynew@{if}\ifunsupportwarnings@ \xydef@\xyunsupportwarning@#1#2{{% \DN@{#1}\edef\next@{\codeof\next@} \expandafter\ifx\csname xywarn@unload@\next@ @\endcsname\relax \expandafter\gdef\csname xywarn@unload@\next@ @\endcsname{}% \ifunsupportwarnings@ \xyclosedown@@\xyunsupportwarnings@@ \fi \global\unsupportwarnings@true \expandafter\gdef\expandafter\xyunsupportwarnings@@\expandafter{% \xyunsupportwarnings@@ \W@{ #2.}}% \W@{}% \W@{Xy-pic Warning: `\next@' reproduction is NOT EXACT\xytracelineno@:}% \W@{ #2.}% \W@{}% \fi}} \xydef@\xyunsupportwarnings@@{\W@{}% \W@{Xy-pic Warning: The produced DVI file is NOT EXACT:}} \xynew@{if}\ifsupportwarnings@ \xydef@\xysupportwarning@#1#2{{% \DN@{#1}\edef\next@{\codeof\next@}\DNii@{#2}\edef\nextii@{\codeof\nextii@}% \expandafter\ifx\csname xywarn@\next@ @\nextii@ @\endcsname\relax \expandafter\gdef\csname xywarn@\next@ @\nextii@ @\endcsname{}% \ifsupportwarnings@ \xyclosedown@@\xysupportwarnings@@ \fi \global\supportwarnings@true \expandafter\gdef\expandafter\xysupportwarnings@@\expandafter{% \xysupportwarnings@@ \driverextensioncomplain@{#1}{#2}}% \W@{}% \W@{Xy-pic Warning: The produced DVI file is NOT PORTABLE\xytracelineno@:}% \driverextensioncomplain@{#1}{#2}% \W@{}% \fi}} \xydef@\xysupportwarnings@@{% \W@{Xy-pic Warning: The produced DVI file is NOT PORTABLE:}} \xydef@\driverextensioncomplain@#1#2{% \DN@{#1}\edef\next@{\codeof\next@}\DNii@{#2}\edef\nextii@{\codeof\nextii@}% \W@{ It contains `\next@' \string\special s for the `\nextii@' extension.}} \xydef@\dvimessage@#1#2{\xysupportwarning@{#1}{#2}} \xynew@{if}\ifxydrivernoloads@ \xydef@\xydrivernoload@#1{\xyerror@{Could not load xy#1.tex}{}% \xydrivernoloads@true} \xydef@\xydriverfail@#1{\xyerror@{Sorry, #1 not supported.}{}} \xydef@\xyunload@#1{\xywarning@{Unloading #1.}} \message{algorithms: directions,} \xydef@\DirectionfromtheDirection@{\noexpand\Direction=\the\Direction \noexpand\d@X=\the\d@X \noexpand\d@Y=\the\d@Y \def\noexpand\sd@X{\sd@X}\def\noexpand\sd@Y{\sd@Y}% \noexpand\K@dXdY=\the\K@dXdY \noexpand\K@dYdX=\the\K@dYdX \chardef\noexpand\DirectionChar=\the\DirectionChar \chardef\noexpand\SemiDirectionChar=\the\SemiDirectionChar \def\noexpand\cosDirection{\cosDirection}% \def\noexpand\sinDirection{\sinDirection}% \noexpand\resetupDirection@} \xydef@\Directiontest@@#1#2{#2} \xydef@\setupDirection@{% \d@X=\X@c\advance\d@X-\X@p \d@Y=\Y@c\advance\d@Y-\Y@p \Directiontest@@\relax\setupDirection@i} \xydef@\setupDirection@i{\DN@{\setupDirection@ii}% \ifdim\d@X=\d@Y \ifdim\zz@\d@Y \DN@{}% \else\ifdim\d@X<\z@ \DN@{\dlDirection@{-1.4142\d@X}}% \else \DN@{\urDirection@{1.4142\d@X}}\fi\fi \else\ifdim\d@X<\d@Y \ifdim\zz@\d@X \DN@{\uDirection@\d@Y}% \else\ifdim\zz@\d@Y \DN@{\lDirection@{-\d@X}}% \else\ifdim-\d@X=\d@Y \DN@{\ulDirection@{-1.4142\d@X}}\fi\fi\fi \else \ifdim\zz@\d@X \DN@{\dDirection@{-\d@Y}}% \else\ifdim\zz@\d@Y \DN@{\rDirection@\d@X}% \else\ifdim\d@X=-\d@Y \DN@{\drDirection@{1.4142\d@X}}\fi\fi\fi \fi\fi \next@} \xydef@\dlDirection@{\Direction=\z@ \def\cosDirection{-.7071}\def\sinDirection{-.7071}\def\sd@X{-}\def\sd@Y{-}% \chardef\DirectionChar=127\relax\chardef\SemiDirectionChar=127\relax \K@dXdY=1\K@ \K@dYdX=1\K@ \fixedDirection@} \xydef@\dDirection@{\Direction=\K@ \def\cosDirection{0}\def\sinDirection{-1}\def\sd@Y{-}% \edef\sd@X{\ifdim\X@c<\X@p-\else+\fi}% \chardef\DirectionChar=15\relax\chardef\SemiDirectionChar=31\relax \K@dXdY=\z@ \K@dYdX=\KK@\K@ \fixedDirection@} \xydef@\drDirection@{\dimen@ii=2\K@ \Direction=\dimen@ii \def\cosDirection{+.7071}\def\sinDirection{-.7071}\def\sd@X{+}\def\sd@Y{-}% \chardef\DirectionChar=31\relax\chardef\SemiDirectionChar=63\relax \K@dXdY=-1\K@ \K@dYdX=-1\K@ \fixedDirection@} \xydef@\rDirection@{\dimen@ii=3\K@ \Direction=\dimen@ii \def\cosDirection{+1}\def\sinDirection{0}\def\sd@X{+}% \edef\sd@Y{\ifdim\Y@c<\Y@p-\else+\fi}% \chardef\DirectionChar=47\relax\chardef\SemiDirectionChar=95\relax \K@dXdY=\KK@\K@ \K@dYdX=\z@ \fixedDirection@} \xydef@\urDirection@{\dimen@ii=4\K@ \Direction=\dimen@ii \def\cosDirection{+.7071}\def\sinDirection{+.7071}\def\sd@X{+}\def\sd@Y{+}% \chardef\DirectionChar=63\relax\chardef\SemiDirectionChar=127\relax \K@dXdY=1\K@ \K@dYdX=1\K@ \fixedDirection@} \xydef@\uDirection@{\dimen@ii=-3\K@ \Direction=\dimen@ii \def\cosDirection{0}\def\sinDirection{+1}\def\sd@Y{+}% \edef\sd@X{\ifdim\X@c<\X@p-\else+\fi}% \chardef\DirectionChar=79\relax\chardef\SemiDirectionChar=31\relax \K@dXdY=\z@ \K@dYdX=\KK@\K@ \fixedDirection@} \xydef@\ulDirection@{\dimen@ii=-2\K@ \Direction=\dimen@ii \def\cosDirection{-.7071}\def\sinDirection{+.7071}\def\sd@X{-}\def\sd@Y{+}% \chardef\DirectionChar=95\relax\chardef\SemiDirectionChar=63\relax \K@dXdY=-1\K@ \K@dYdX=-1\K@ \fixedDirection@} \xydef@\lDirection@{\Direction=-\K@ \def\cosDirection{-1}\def\sinDirection{0}\def\sd@X{-}% \edef\sd@Y{\ifdim\Y@c<\Y@p-\else+\fi}% \chardef\DirectionChar=111\relax\chardef\SemiDirectionChar=95\relax \K@dXdY=\KK@\K@ \K@dYdX=\z@ \fixedDirection@} \xydef@\fixedDirection@#1{\dimen@ii=#1\relax \d@X=\cosDirection\dimen@ii \d@Y=\sinDirection\dimen@ii \resetupDirection@} \xydef@\setupDirection@ii{% \ifdim\d@X<\z@ \def\sd@X{-}\else \def\sd@X{+}\fi \ifdim\d@Y<\z@ \def\sd@Y{-}\else \def\sd@Y{+}\fi \K@dXdY=\sd@X\d@X \ifdim\K@dXdY<500pt \multiply\K@dXdY\KK@ \fi \dimen@=\sd@Y\d@Y \advance\dimen@\ifdim\dimen@<\z@-\fi.5\KK@ \divide\dimen@\KK@ \ifdim\dimen@=\z@\else \advance\K@dXdY by.5\dimen@\relax \divide\K@dXdY\dimen@ \fi \K@dXdY=\sd@X\sd@Y\K@dXdY \K@dYdX=\sd@Y\d@Y \ifdim\K@dYdX<500pt \multiply\K@dYdX\KK@ \fi \dimen@=\sd@X\d@X \advance\dimen@\ifdim\dimen@<\z@-\fi.5\KK@ \divide\dimen@\KK@ \ifdim\dimen@=\z@\else \advance\K@dYdX by.5\dimen@\relax \divide\K@dYdX\dimen@ \fi \K@dYdX=\sd@X\sd@Y\K@dYdX \Direction=\maxdimen \ifnum\K@dXdY<-\K@ \else \ifnum\K@<\K@dXdY \else \ifdim \d@Y<\z@ \Direction=\K@ \advance\Direction-\K@dXdY \else \Direction=\K@ \multiply\Direction-\thr@@ \advance\Direction-\K@dXdY \fi\fi\fi \ifnum-\K@<\K@dYdX \ifnum\K@dYdX<\K@ \ifdim \d@X<\z@ \Direction=-\K@ \advance\Direction\K@dYdX \else \Direction=\K@ \multiply\Direction\thr@@ \advance\Direction\K@dYdX \fi\fi\fi \ifnum\Direction=\maxdimen \Direction=\K@dYdX \advance\Direction-\K@dXdY \advance\Direction\ifnum\Direction<\z@-\fi\@ne \divide\Direction\tw@ \ifnum\K@dXdY<\z@ \advance\Direction\K@ \advance\Direction\K@ \else \advance\Direction-\K@ \advance\Direction-\K@ \fi \fi \imposeDirection@i \resetupDirection@ } \xydef@\imposeDirection@{\count@@=\Direction \loop@\ifnum\count@@>4096 \advance\count@@-8192 \repeat@ \loop@\ifnum\count@@<-4096 \advance\count@@8192 \repeat@ \def\sd@X{+}\ifnum\count@@<\K@ \relax \ifnum\count@@>-3072 \def\sd@X{-}\fi\fi \def\sd@Y{+}\ifnum\count@@<3072 \relax \ifnum\count@@>-\K@ \relax\def\sd@Y{-}\fi\fi \imposeDirection@i \d@X=\cosDirection\xydashl@ \d@Y=\sinDirection\xydashl@ \resetupDirection@} \xydef@\imposeDirection@i{% \count@@=\K@ \multiply\count@@ by8 \advance\count@@\Direction \count@=\count@@ \advance\count@\KK@ \divide\count@64 \advance\count@\m@ne \loop@\ifnum127<\count@ \advance\count@-128 \repeat@ \chardef\DirectionChar\count@ \advance\count@@16 \divide\count@@\KK@ \advance\count@@\m@ne \loop@\ifnum127<\count@@ \advance\count@@-128 \repeat@ \chardef\SemiDirectionChar\count@@ \setbox8=\hbox{\xydashfont\SemiDirectionChar\/}% \quotient@@\cosDirection{\sd@X\wd8}\xydashl@ \setbox8=\hbox{\xydashfont\count@=\SemiDirectionChar\advance\count@-64 \ifnum\count@<\z@ \advance\count@128 \fi \char\count@\/}% \quotient@@\sinDirection{\sd@Y\wd8}\xydashl@} \xydef@\getxyDirection@#1{\xy@@\bgroup\xy@@ix@{#1}% \xy@@{\expandafter\POS\the\toks9\relax\setupDirection@ \edef\next@{\egroup \Direction=\the\Direction}\next@ \imposeDirection@ }} \xydef@\reverseDirection@{% \d@X=-\d@X \d@Y=-\d@Y \ifdim\d@X<\z@ \def\sd@X{-}\else \def\sd@X{+}\fi \ifdim\d@Y<\z@ \def\sd@Y{-}\else \def\sd@Y{+}\fi \dimen@=4\K@ \ifnum\Direction<\z@ \advance\Direction\dimen@ \else \advance\Direction-\dimen@ \fi \count@=\DirectionChar \ifnum\count@<64 \advance\count@64 \else \advance\count@-64 \fi \chardef\DirectionChar=\count@ \edef\cosDirection{\if-\cosDirection\else-\cosDirection\fi}% \edef\sinDirection{\if-\sinDirection\else-\sinDirection\fi}% \resetupDirection@} \xydef@\aboveDirection@#1{% \dimen@=\d@X \d@X=-\d@Y \d@Y=\dimen@ \dimen@=\K@dXdY \K@dXdY=-\K@dYdX \K@dYdX=-\dimen@ \ifdim\d@X<\z@ \def\sd@X{-}\else \def\sd@X{+}\fi \ifdim\d@Y<\z@ \def\sd@Y{-}\else \def\sd@Y{+}\fi \dimen@=2\K@ \ifdim 1\Direction<\dimen@\else \dimen@=-6\K@ \fi \advance\Direction\dimen@ \count@=\DirectionChar \ifnum\count@<96 \advance\count@32 \else \advance\count@-96 \fi \chardef\DirectionChar=\count@ \count@=\SemiDirectionChar \ifnum\count@<64 \advance\count@64 \else \advance\count@-64 \fi \chardef\SemiDirectionChar=\count@ \let\tmp@=\cosDirection \edef\cosDirection{\if-\sinDirection\else-\sinDirection\fi}% \let\sinDirection=\tmp@ \dimen@=#1\relax \d@X=\cosDirection\dimen@ \d@Y=\sinDirection\dimen@ \resetupDirection@} \xydef@\belowDirection@#1{% \dimen@=\d@X \d@X=\d@Y \d@Y=-\dimen@ \dimen@=\K@dXdY \K@dXdY=-\K@dYdX \K@dYdX=-\dimen@ \ifdim\d@X<\z@ \def\sd@X{-}\else \def\sd@X{+}\fi \ifdim\d@Y<\z@ \def\sd@Y{-}\else \def\sd@Y{+}\fi \dimen@=-2\K@\ifdim 1\Direction<\dimen@\dimen@=6\K@\fi \advance\Direction\dimen@ \count@=\DirectionChar \ifnum\count@<32 \advance\count@96 \else \advance\count@-32 \fi \chardef\DirectionChar=\count@ \count@=\SemiDirectionChar \ifnum\count@<64 \advance\count@64 \else \advance\count@-64 \fi \chardef\SemiDirectionChar=\count@ \let\tmp@=\sinDirection \edef\sinDirection{\if-\cosDirection\else-\cosDirection\fi}% \let\cosDirection=\tmp@ \dimen@=#1\relax \d@X=\cosDirection\dimen@ \d@Y=\sinDirection\dimen@ \resetupDirection@} \xydef@\vDirection@(#1,#2)#3{\dimen@ii=#3\relax \dimen@=#1\dimen@ii \dimen@ii=#2\dimen@ii \d@X=\cosDirection\dimen@ \advance\d@X-\sinDirection\dimen@ii \d@Y=\sinDirection\dimen@ \advance\d@Y \cosDirection\dimen@ii \X@p=\X@c \advance\X@p-\d@X \Y@p=\Y@c \advance\Y@p-\d@Y \setupDirection@\ignorespaces} \xydef@\resetDirection@{% \d@X=\X@c\advance\d@X-\X@p \d@Y=\Y@c\advance\d@Y-\Y@p \let\next@=\resetupDirection@ \ifdim\sd@X\d@X<\z@ \let\next@=\setupDirection@i \fi \ifdim\sd@Y\d@Y<\z@ \let\next@=\setupDirection@i \fi \next@} \xydef@\resetupDirection@{% \edef\Directiontest@@##1##2{\noexpand\DN@{##2}% \noexpand\ifdim\noexpand\d@X=\the\d@X\relax \noexpand\ifdim\noexpand\d@Y=\the\d@Y\relax \noexpand\DN@{##1}% \noexpand\fi\noexpand\fi \noexpand\next@}} \xydef@\unsetupDirection@{\def\Directiontest@@##1##2{##2}} \uDirection@\xydashl@ \message{edges,} \xynew@{if}\ifInside@ \xydef@\zeroEdge#1{% \ifcase#1\relax \or \Inside@false \or \dimen@=\z@ \or \else \Edge@c={\rectangleEdge}\fi} \xydef@\circleEdge#1{\ifcase#1\expandafter\circleEdge@ \or \expandafter\circleUnder@ \or \dimen@=\R@c \or \expandafter\circleProp@ \or \expandafter\circleInner@ \else \expandafter\circleOuter@ \fi} \xydef@\circleEdge@{\DN@{\ellipseEdge@}% \ifdim\R@c=\L@c\relax \ifdim\U@c=\D@c\relax \ifdim\R@c=\U@c\DN@{\circlecentredEdge@}% \else\DN@{\ellipsecentredEdge@}\fi \fi\fi \next@} \xydef@\circleProp@{\DN@{\reverseDirection@\ellipseEdge@}% \ifdim\R@c=\L@c\relax \ifdim\U@c=\D@c\relax \ifdim\R@c=\U@c\DN@{\reverseDirection@\circlecentredEdge@}% \else\DN@{\reverseDirection@\ellipsecentredEdge@}\fi \fi\fi \next@} \xydef@\circleUnder@{\Inside@false \ifdim\X@p=\X@c \relax \ifdim\Y@p=\Y@c \Inside@true \fi \fi \ifInside@ \else \expandafter \circleCentre@ \fi} \xydef@\circleCentre@{{% \ifdim\L@c=\R@c \relax\else \dimen@=\R@c\advance\dimen@-\L@c \divide\dimen@\tw@ \advance\X@c\dimen@ \advance\R@c-\dimen@ \fi \d@X=\X@c \advance\d@X-\X@p \d@X=\ifdim\d@X<\z@-\fi\d@X \ifdim\U@c=\D@c\relax \else \dimen@=\U@c\advance\dimen@-\D@c \divide\dimen@\tw@ \advance\Y@c\dimen@ \advance\U@c-\dimen@ \fi \d@Y=\Y@c \advance\d@Y-\Y@p \d@Y=\ifdim\d@Y<\z@-\fi\d@Y \DN@{}\ifdim\d@X>\R@c \relax \else \ifdim\d@Y>\U@c \relax \else \ifdim\U@c=\R@c \DN@{\circlecentredUnder@}% \else \DN@{\ellipsecentredUnder@}\fi \fi\fi \next@}} \xydef@\circleInner@{\DN@{\ellipseInner@}% \ifdim\R@c=\L@c\relax \ifdim\U@c=\D@c\relax \ifdim\R@c=\U@c\DN@{\circlecentredInner@}% \else\DN@{\ellipsecentredInner@}\fi \fi\fi \next@} \xydef@\circleOuter@{\DN@{\ellipseOuter@}% \ifdim\R@c=\L@c\relax \ifdim\U@c=\D@c\relax \ifdim\R@c=\U@c\DN@{\circlecentredOuter@}% \else\DN@{\ellipsecentredOuter@}\fi \fi\fi \next@} \xydef@\circlecentredEdge@{% \dimen@=-\cosDirection\R@c \advance\X@c\dimen@ \dimen@=-\sinDirection\R@c \advance\Y@c\dimen@} \xydef@\circlecentredUnder@{% \loop\ifdim\R@c>100\p@ \circlescale@ \repeat \edef\tmp@{\expandafter\removePT@\the\R@c}\dimen@=\tmp@\R@c \edef\tmp@{\expandafter\removePT@\the\d@X}\advance\dimen@-\tmp@\d@X \edef\tmp@{\expandafter\removePT@\the\d@Y}\advance\dimen@-\tmp@\d@Y \ifdim\dimen@>\z@ \aftergroup\Inside@true \fi} %%\xydef@\circlescale@{\divide\R@c\KK@ \divide\d@X\KK@ \divide\d@Y\KK@ } \xydef@\circlescale@{\divide\R@c\KK@ \divide\d@X\KK@ \divide\d@Y\KK@ } \xydef@\circlecentredInner@{% \L@c=\sd@X\cosDirection\R@c \D@c=\sd@Y\sinDirection\R@c \R@c=\L@c \U@c=\D@c \Edge@c={\rectangleEdge}} \xydef@\circlecentredOuter@{% \L@c=\R@c \D@c=\R@c \U@c=\D@c \Edge@c={\rectangleEdge}} \xydef@\ellipsecentredEdge@{\bgroup \X@p=\X@c \Y@p=\Y@c \ifdim\U@c>\R@c \X@c=\cosDirection\U@c \Y@c=\sinDirection\U@c \quotient@\tmp@\U@c\R@c \X@c=\tmp@\X@c \R@c=\U@c \else \X@c=\cosDirection\R@c \Y@c=\sinDirection\R@c \quotient@\tmp@\R@c\U@c \Y@c=\tmp@\Y@c \fi \advance\X@c\X@p \advance\Y@c\Y@p \setupDirection@ \X@c=\X@p \Y@c=\Y@p \circlecentredEdge@ \d@X=\X@c \advance\d@X-\X@p \d@Y=\Y@c \advance\d@Y-\Y@p \ifdim\U@c>\L@c \quotient@\tmp@\L@c\U@c \d@X=\tmp@\d@X \else \quotient@\tmp@\U@c\R@c \d@Y =\tmp@\d@Y \fi \X@c=\X@p \advance\X@c\d@X \Y@c=\Y@p \advance\Y@c\d@Y \edef\next@{\egroup \X@c=\the\X@c \Y@c=\the\Y@c}\next@ }% \xydef@\ellipsecentredUnder@{% \ifdim\R@c>64\p@ \circlescale@ \divide\U@c\KK@ \else \ifdim\U@c>64\p@ \circlescale@ \divide\U@c\KK@ \fi\fi \edef\tmp@{\expandafter\removePT@\the\R@c}\d@Y=\tmp@\d@Y \edef\tmp@{\expandafter\removePT@\the\U@c}\d@X=\tmp@\d@X \R@c=\tmp@\R@c \circlecentredUnder@ } \xydef@\ellipsecentredOuter@{\Edge@c={\rectangleEdge}} \xydef@\ellipsecentredInner@{% \bgroup \X@p=\X@c \Y@p=\Y@c \ellipsecentredEdge@ \advance\X@c-\X@p \L@c=\ifdim\X@c<\z@-\fi\X@c \advance\Y@c-\Y@p \D@c=\ifdim\Y@c<\z@-\fi\Y@c \edef\next@{\egroup \L@c=\the\L@c \D@c=\the\D@c}\next@ \R@c=\L@c \U@c=\D@c \Edge@c={\rectangleEdge}} \xydef@\ellipseEdge@{\bgroup \A@=\R@c \B@=\U@c \ifdim\R@c=\L@c \d@X=\z@ \else \d@X=.5\R@c \advance\d@X-.5\L@c \advance\A@\L@c \divide\A@\tw@ \fi \ifdim\U@c=\D@c \d@Y=\z@ \else \d@Y=.5\U@c \advance\d@Y-.5\D@c \advance\B@\D@c \divide\B@\tw@ \fi \bgroup \L@c=\A@ \U@c=\B@ \R@p=\U@c \advance\R@p\L@c \multiply\R@p\tw@ \ifdim\B@<\A@ \quotient@\tmp@\U@c\L@c \R@c=\tmp@\p@ \D@c=\p@ \quotient@\tmp@\R@p\L@c \R@p=\tmp@\p@ \else \ifdim\A@<\B@ \quotient@\tmp@\L@c\U@c \D@c=\tmp@\p@ \R@c=\p@ \quotient@\tmp@\R@p\U@c \R@p=\tmp@\p@ \else \R@c=\p@ \D@c=\p@ \quotient@\tmp@\R@p\U@c \R@p=\tmp@\p@ \fi\fi \quotient@\sd@X\d@X\L@c \d@X=\sd@X\p@ \quotient@\sd@Y\d@Y\U@c \d@Y=\sd@Y\p@ \loop \bgroup \U@p=-\p@ \D@p=\z@ \ifdim\R@c<\p@ \edef\tmp@{\expandafter\removePT@\the\R@c}\dimen@=\tmp@\R@p \advance\d@X\cosDirection\dimen@ \else \advance\d@X\cosDirection\R@p \fi \edef\sd@X{\expandafter\removePT@\the\d@X}% \advance\U@p\sd@X\d@X \ifdim\R@c<\p@ \edef\tmp@{\expandafter\removePT@\the\R@c}\dimen@=\tmp@\d@X \advance\D@p\cosDirection\dimen@ \else \advance\D@p\cosDirection\d@X \fi \ifdim\D@c<\p@ \edef\tmp@{\expandafter\removePT@\the\D@c}\dimen@=\tmp@\R@p \advance\d@Y\sinDirection\dimen@ \else \advance\d@Y\sinDirection\R@p \fi \edef\sd@Y{\expandafter\removePT@\the\d@Y}% \advance\U@p\sd@Y\d@Y \ifdim\D@c<\p@ \edef\tmp@{\expandafter\removePT@\the\D@c}\dimen@=\tmp@\d@Y \advance\D@p\sinDirection\dimen@ \else \advance\D@p\sinDirection\d@Y \fi \multiply\D@p\tw@ \dimen@=\ifdim\U@p<\z@-\fi\U@p \ifdim\dimen@<.01\p@ \U@p=\z@ \else \quotient@\tmp@\U@p\D@p \U@p=\tmp@\p@ \ifdim\U@p<\z@\xywarning@{poor convergence}\U@p=\z@ \else \advance\R@p-\U@p \U@p=\ifdim\U@p<\z@-\fi\U@p \fi \fi \edef\next@{\egroup \R@p=\the\R@p \U@p=\the\U@p \D@p=\the\D@p}\next@ \ifdim\U@p>\z@ \repeat \edef\next@{\egroup \dimen@=\the\R@p}\next@ \edef\tmp@{\expandafter\removePT@\the\dimen@}% \ifdim\B@<\A@ \dimen@=\tmp@\B@ \else \dimen@=\tmp@\A@ \fi \dimen@=-\dimen@ \advance\X@c\cosDirection\dimen@ \advance\Y@c\sinDirection\dimen@ \edef\next@{\egroup \X@c=\the\X@c \Y@c=\the\Y@c}\next@ }% \xydef@\ellipseOuter@{\Edge@c={\rectangleEdge}} \xydef@\ellipseInner@{% \bgroup \X@p=\X@c \Y@p=\Y@c \ellipseEdge@ \d@X=\X@c\advance\d@X-\X@p \ifdim\d@X>\z@ \R@p=\d@X \L@p=\R@p \ifdim\L@c=\R@c\else\advance\L@p\L@c \advance\L@p-\R@c \fi \else \L@p=-\d@X \R@p=\L@p \ifdim\L@c=\R@c \else\advance\R@p\R@c \advance\R@p-\L@c \fi \fi \d@Y=\Y@c\advance\d@Y-\Y@p \ifdim\d@Y>\z@ \U@p=\d@Y \D@p=\U@p \ifdim\D@c=\U@c\else\advance\D@p\D@c \advance\D@p-\U@c \fi \else \D@p=-\d@Y \U@p=\D@p \ifdim\D@c=\U@c\else\advance\U@p\U@c \advance\U@p-\D@c \fi \fi \edef\next@{\egroup \L@c=\the\L@p \D@c=\the\D@p \R@c=\the\R@p \U@c=\the\U@p}% \next@ \Edge@c={\rectangleEdge}} \xydef@\rectangleEdge#1{\ifcase#1\expandafter\rectangleEdge@ \or \expandafter\rectangleUnder@ \or \expandafter\rectangleDist@ \or \expandafter\rectangleProp@ \else \relax \fi} \xydef@\rectangleEdge@{% \ifdim\d@Y<-.05\p@ \rectangleEdge@i \else\ifdim\d@Y<.05\p@ \rectangleEdge@ii \else \rectangleEdge@iii\fi\fi \resetupDirection@} \xydef@\rectangleEdge@i{% \ifdim\d@X<-.05\p@ \settomin@\X@c+\R@c\U@c\d@X\d@Y \settomin@\Y@c+\U@c\R@c\d@Y\d@X%1a \else\ifdim\d@X<.05\p@ \advance\Y@c\U@c \else \settomin@\X@c-\L@c\U@c\d@X\d@Y \settomin@\Y@c+\U@c\L@c\d@Y\d@X \fi\fi} \xydef@\rectangleEdge@ii{% \ifdim\d@X<-.05\p@ \advance\X@c\R@c \else\ifdim\d@X<.05\p@ \else \advance\X@c-\L@c \fi\fi} \xydef@\rectangleEdge@iii{% \ifdim\d@X<-.05\p@ \settomin@\X@c+\R@c\D@c\d@X\d@Y \settomin@\Y@c-\D@c\R@c\d@Y\d@X%3a \else\ifdim\d@X<.05\p@ \advance\Y@c-\D@c \else \settomin@\X@c-\L@c\D@c\d@X\d@Y \settomin@\Y@c-\D@c\L@c\d@Y\d@X \fi\fi} \xydef@\settomin@#1#2#3#4#5#6{% \edef\nextii@{\A@=\the\A@ \B@=\the\B@}\quotient@\next@{#5}{#6}\nextii@ \dimen@=\sd@X\sd@Y\next@#4\relax \ifdim#3<\dimen@ \dimen@=#3\fi \advance#1#2\dimen@} \xydef@\rectangleUnder@{\Inside@false \ifdim\X@p=\X@c \ifdim\Y@p=\Y@c \Inside@true \fi\fi \ifInside@ \else \dimen@=\X@p \advance\dimen@-\X@c \ifdim \dimen@>-\L@c \relax \ifdim\dimen@<\R@c \dimen@=\Y@p \advance\dimen@-\Y@c \ifdim \dimen@>-\D@c \relax \ifdim\dimen@<\U@c \Inside@true \fi\fi\fi\fi\fi } \xydef@\rectangleDist@{\let\next@=\rectangleDist@i \ifdim\d@X<-.05\p@ \dimen@=\R@c \else\ifdim\d@X<.05\p@ \dimen@=\z@ \DN@{\dimen@=\dimen@ii}% \else \dimen@=\L@c \fi\fi \ifdim\d@Y<-.05\p@ \dimen@ii=\U@c \else\ifdim\d@Y<.05\p@ \DN@{}% \else \dimen@ii=\D@c \fi\fi \next@} \xydef@\rectangleDist@i{% \begingroup \quotient@\next\p@{\sd@X\cosDirection\p@}% \edef\next{\endgroup \dimen@=\next\dimen@}\next \begingroup \quotient@\next\p@{\sd@Y\sinDirection\p@}% \edef\next{\endgroup \dimen@ii=\the\dimen@ii}\next \ifdim\dimen@ii<\dimen@ \dimen@=\dimen@ii \fi} \xydef@\rectangleProp@{% \enter@{\A@=\the\A@ \B@=\the\B@ \DirectionfromtheDirection@}% \reverseDirection@ \dimen@=1\Direction \count@=\K@ \multiply\count@\tw@ \ifnum \Direction>\count@ \DN@{0}% \advance\dimen@-2\K@ \quotient@\nextii@{\dimen@}{2\K@}% \else\ifnum \Direction>\z@ \dimen@=-\dimen@ \advance\dimen@2\K@ \quotient@\next@{\dimen@}{2\K@}% \DNii@{0}% \else\ifnum \Direction>-\count@ \DN@{1}% \quotient@\nextii@{-\dimen@}{2\K@}% \else \advance\dimen@4\K@ \quotient@\next@{\dimen@}{2\K@}% \DNii@{1}% \fi\fi\fi \advance\X@c-\L@c \dimen@=\L@c \advance\dimen@\R@c \ifdim\dimen@=\z@ \advance\X@c 2\L@c \else \advance\X@c\next@\dimen@ \fi \advance\Y@c+\U@c \dimen@=\D@c \advance\dimen@\U@c \ifdim\dimen@=\z@ \advance\Y@c-2\U@c \advance\Y@c\Upness@\U@c \else \advance\Y@c-\nextii@\dimen@ \fi \leave@} \message{connections;} \xydef@\Creset@@{} \xydef@\Cshavep@@{\noCshavep@@} \xydef@\Cshavec@@{\noCshavec@@} \xydef@\Cslidep@@{\noCslidep@@} \xydef@\Cslidec@@{\noCslidec@@} \xydef@\Calong@@{\noCalong@@} \xydef@\Cintercept@@{\noCintercept@@} \xydef@\Cbreak@@{\noCbreak@@} \xydef@\Clast@@{\noClast@@} \xylet@\lastbreak@@=\empty \xydef@\noCshavep@@{\setupDirection@ \enter@{\cfromthec@ \DirectionfromtheDirection@}% \reverseDirection@ \cfromp@ \the\Edge@c\z@ \pfromc@ \leave@ \resetDirection@} \xydef@\noCshavec@@{\setupDirection@ \the\Edge@c\z@ \resetDirection@} \xydef@\noCslidep@@#1{\dimen@=#1\relax \advance\X@p\cosDirection\dimen@ \advance\Y@p\sinDirection\dimen@ \resetDirection@} \xydef@\noCslidec@@#1{\dimen@=#1\relax \advance\X@c\cosDirection\dimen@ \advance\Y@c\sinDirection\dimen@ \resetDirection@} \xydef@\noCalong@@#1{% \d@X=#1\d@X \d@Y=#1\d@Y \X@c=\X@p \Y@c=\Y@p \advance\X@c\d@X \advance\Y@c\d@Y \resetupDirection@} \xydef@\noCintercept@@{\enter@{\pfromthep@}% \begingroup\Creset@@ \edef\tmp@{\endgroup \X@origin=\the\X@p \Y@origin=\the\Y@p \R@c=\the\d@X \U@c=\the\d@Y}\tmp@ \loop@\dimen@=\ifdim\R@c<\z@-\fi\R@c \advance\dimen@\ifdim\U@c<\z@-\fi\U@c \ifdim\dimen@>10\p@ \advance\R@c \ifdim\R@c<\z@-\fi 16sp \divide\R@c\KK@ \advance\U@c \ifdim\U@c<\z@-\fi 16sp \divide\U@c\KK@ \repeat@ \intersect@ \leave@} \xydef@\noCbreak@@{\edef\lastbreak@@{\cfromthec@}} \xydef@\noClast@@{\Creset@@ \edef\lastbreak@@{\cfromthep@}} \xydef@\no@@{\setupDirection@ \edef\lastbreak@@{\cfromthep@}% \enter@{\cfromthec@\pfromthep@\DirectionfromtheDirection@}% \edef\Creset@@{\cfromthec@ \pfromthep@ \DirectionfromtheDirection@}% \edef\next@{{\sd@X}{\sd@Y}}\expandafter\straightcheckoverlap@\next@ \setupDirection@ \the\Edge@c\z@ \swap@\reverseDirection@\the\Edge@c\z@\swap@\reverseDirection@ \resetDirection@ \edef\Cshavep@@{\DirectionfromtheDirection@ \pfromthep@\noexpand\resetDirection@}% \edef\Cshavec@@{\DirectionfromtheDirection@ \cfromthec@\noexpand\resetDirection@}% \leave@ \def\Cslidep@@{\noCslidep@@}\def\Cslidec@@{\noCslidec@@}% \def\Calong@@{\noCalong@@}\def\Cintercept@@{\noCintercept@@}% \def\Cbreak@@{\noCbreak@@}\def\Clast@@{\noClast@@}\noinsert@} \xydef@\noinsert@{\ifHidden@\else \ifdim\Y@c>\Y@max \Y@max=\Y@c \fi \ifdim\Y@p>\Y@max \Y@max=\Y@p \fi \ifdim\Y@c<\Y@min \Y@min=\Y@c \fi \ifdim\Y@p<\Y@min \Y@min=\Y@p \fi \ifdim\X@c>\X@max \X@max=\X@c \fi \ifdim\X@p>\X@max \X@max=\X@p \fi \ifdim\X@c<\X@min \X@min=\X@c \fi \ifdim\X@p<\X@min \X@min=\X@p \fi \fi} \xydef@\Spread@@{} \xydef@\checkoverlap@@{} \xydef@\straight@#1{\setupDirection@ \def\Spread@@{#1}% \edef\Creset@@{\cfromthec@ \pfromthep@ \DirectionfromtheDirection@}% \edef\lastbreak@@{\cfromthep@}% \edef\next@{{\sd@X}{\sd@Y}}\expandafter\straightcheckoverlap@\next@ \setupDirection@ \the\Edge@c\z@ \swap@\reverseDirection@\the\Edge@c\z@\swap@\reverseDirection@ \resetDirection@ \edef\Cshavep@@{\DirectionfromtheDirection@ \pfromthep@\noexpand\resetDirection@}% \edef\Cshavec@@{\DirectionfromtheDirection@ \cfromthec@\noexpand\resetDirection@}% \noinsert@ \straight@typeset \def\Cbreak@@{\straightCbreak@}\def\Clast@@{\straightClast@}% \def\Cslidep@@{\noCslidep@@}\def\Cslidec@@{\noCslidec@@}% \def\Calong@@{\noCalong@@}\def\Cintercept@@{\noCintercept@@}% \Creset@@} \xydef@\straightcheckoverlap@#1#2{\def\checkoverlap@@{% \ifdim#1\X@p>#1\X@c \let\next@=\relax \fi \ifdim#2\Y@p>#2\Y@c \let\next@=\relax \fi}} \xydef@\straight@typeset{% \ifInvisible@ \let\next@=\relax \else\ifdim 1\Direction<-2\K@ \DN@{\straightv@}% \else\ifdim 1\Direction<\z@ \DN@{\straighth@}% \else\ifdim 1\Direction<2\K@ \DN@{\straightv@}% \else \DN@{\straighth@}% \fi\fi\fi\fi \checkoverlap@@ \next@} \xylet@\nextbreak@@=\empty \xydef@\straightCbreak@{\connectRestore@ \edef\nextbreak@@{\cfromthec@}% \Creset@@ \swap@ \the\Edge@c4\enter@{\cmergethec@}\lastbreak@@ \leave@ \swap@ \the\Edge@c4\enter@{\cmergethec@}\nextbreak@@ \leave@ \setupDirection@ \the\Edge@c\z@ \swap@ \reverseDirection@ \the\Edge@c\z@ \swap@ \reverseDirection@ \resetDirection@ \noinsert@ \straight@typeset \Creset@@ \let\lastbreak@@=\nextbreak@@} \xydef@\straightClast@{\connectRestore@ \Creset@@ \swap@ \the\Edge@c4\enter@{\cmergethec@}\lastbreak@@ \leave@ \swap@ \setupDirection@ \the\Edge@c\z@ \swap@\reverseDirection@ \the\Edge@c\z@ \swap@\reverseDirection@ \resetDirection@ \noinsert@ \straight@typeset \Creset@@ \edef\lastbreak@@{\cfromthep@}} \xydef@\straighth@{\setbox\z@=\hbox{% \setbox8=\copy\lastobjectbox@ \A@=\wd8\relax \B@=\dp8\relax \advance\B@\ht8\relax \ifdim \A@=\z@ \count@@=\m@ne \else \dimen@=\sd@X\d@X \divide\dimen@\A@ \count@@=\dimen@ \fi \Spread@@ \ifdim\d@X>\z@ \advance\X@c-\wd8\relax\fi \dimen@=-\sd@X\wd8\relax \multiply\dimen@\K@dYdX \divide\dimen@\K@ \ifdim\d@X>\z@ \advance\Y@c\dimen@ \advance\Y@c-\Leftness@\dimen@ \else \advance\Y@c\Leftness@\dimen@ \fi \dimen@=\wd8\relax \A@=\sd@X\d@X \advance\A@-\dimen@ \B@=\sd@X\dimen@ \multiply\B@\K@dYdX \divide\B@\K@ \advance\B@-\d@Y \B@=\sd@Y\B@ \count@=\count@@ \advance\count@\m@ne \ifnum\z@<\count@ \divide\A@\count@ \divide\B@\count@ \fi \A@=-\sd@X\A@ \B@=\sd@Y\B@ \wd8=\A@ \kern\X@c \count@=\z@ \loop@\ifnum\count@<\count@@ \advance\count@\@ne \raise\Y@c\copy8\relax \advance\Y@c\B@ \repeat@}% \ht\z@=\z@ \wd\z@=\z@ \dp\z@=\z@ {\Drop@@}} \xydef@\straightv@{\setbox\z@=\vtop{% \setbox8=\copy\lastobjectbox@ \A@=\wd8\relax \B@=\dp8\relax \advance\B@\ht8\relax \ifdim \B@=\z@ \count@@=\m@ne \else \dimen@=\sd@Y\d@Y \divide\dimen@\B@ \count@@=\dimen@ \fi \Spread@@ \dimen@=\dp8\relax \advance\dimen@\ht8\relax \B@=\sd@Y\d@Y \advance\B@-\dimen@ \A@=\sd@Y\dimen@ \multiply\A@\K@dXdY \divide\A@\K@ \advance\A@-\d@X \A@=\sd@X\A@ \count@=\count@@ \advance\count@\m@ne \ifnum\z@<\count@ \divide\B@\count@ \divide\A@\count@ \fi \B@=\sd@Y\B@ \A@=\sd@X\A@ \ht8=\B@ \dp8=\z@ \ifdim\d@Y<\z@ \advance\Y@c\dimen@ \advance\Y@c\Upness@\B@ \else \advance\dimen@\Upness@\B@ \advance\Y@c-\dimen@ \advance\Y@c\B@ \fi \advance\Y@c\B@ \ifdim\d@X<\z@ \else \advance\X@c-\wd8\relax \fi \null \kern-\Y@c \count@=\z@ \loop@\ifnum\count@<\count@@ \advance\count@\@ne \nointerlineskip \moveright\X@c\copy8\relax \advance\X@c\A@ \repeat@}% \ht\z@=\z@ \wd\z@=\z@ \dp\z@=\z@ {\Drop@@}} \message{ Xy-pic loaded}\xyuncatcodes \endinput