%% xytp-f.tex from $Id: xytp-f.doc,v 3.3 1996/12/18 09:49:07 ross Exp $
%%
%% Xy-pic ``Frame extension'' TPIC backend support.
%% Copyright (c) 1995-1996 Ross Moore <ross@mpce.mq.edu.au>
%%
%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
%% See the companion README and INSTALL files for further information.
%% Copyright (c) 1991-1996 Kristoffer H. Rose <krisrose@brics.dk>
%%
%% 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, write to the Free Software Foundation, Inc.,
%% 675 Mass Ave, Cambridge, MA 02139, USA.
%%
\ifx\xytpfloaded\empty \message{not reloaded}\endinput \fi
\let\xytpfloaded=\empty \xycatcodes
\xydef@\installTPICframes@{%
 \let\framed@body@@=\xyTPICframed@body@
 \let\circled@x@@=\xyTPICcircled@x@
 \let\ellipsed@x@@=\xyTPICellipsed@x@
 \installTPICfills@
 \xyuncatcodes}
\xydef@\UseTPICframes{\installTPICframes@}
\xydef@\NoTPICframes{\UnloadFrames@}
\xydef@\xyTPICframed@body@{\DN@{\framed@body@}%
 \ifdim\R@=\z@ 
 \ifx\framehfill\frm@solidh@@
 \DN@{\xyTPICframed@rect@i\xytpic@solid@@}%
 \else\ifx\framehfill\frm@dashh@@
 \DN@{\xyTPICframed@rect@i\xytpic@dashed@@}%
 \else\ifx\framehfill\frm@doth@@
 \DN@{\xyTPICframed@rect@i\xytpic@dotted@@}%
 \fi\fi\fi\fi \next@ }
\xydef@\xyTPICframed@rect@i#1{\vglue\U@c
 \hbox{\hglue\L@c\xyTPICrect@{#1}\hglue\R@c}\vglue\D@c}
\xydef@\xyTPICcircled@x@{\DN@{\xyTPICcircled@xx{}}%
 \ifx\framehfill\frm@doth@@ \DN@{\xyTPICdotcirc@}%
 \else\ifx\framehfill\frm@dashh@@\DN@{\xyTPICdashcirc@}%
 \fi\fi \next@ }
\xydef@\xyTPICcircled@xx#1{\vglue2\R@
 \hbox{\hglue2\R@\xyTPICfullcircle@#1\hglue2\R@}\vglue2\R@}
\xydef@\xyTPICdotcirc@{\let\zerodot=\framezerodot@@ 
 \L@=\R@ \circled@x@@ }
\xydef@\xyTPICdashcirc@{\L@=\R@ \circled@x@@ }
\xydef@\xyTPICdotellip@{\ellipsed@x@@ }
\xydef@\xyTPICdashellip@{\ellipsed@x@@ }
\xydef@\xyTPICellipsed@x@#1#2{\DN@{\xyTPICellipsed@xx{}}%
 \ifx\framehfill\frm@doth@@\DN@{\xyTPICdotellip@}%
 \else\ifx\framehfill\frm@dashh@@\DN@{\xyTPICdashellip@}%
 \fi\fi \next@{#1}{#2}}
\xydef@\xyTPICellipsed@xx#1#2#3{\vglue #3\vglue #3\relax
 \hbox{\L@c = #2\relax \R@c=\L@c \D@c = #3\relax \U@c=\D@c 
 \hglue#2\hglue#2\relax \R@=#2\relax \L@=#3\relax
 \xyTPICfullcircle@#1\hglue#2\hglue#2\relax}%
 \vglue #3\vglue #3\relax}
\xydef@\xyTPICrect@#1{\DNii@{\relax}\DN@{#1}\toks@={}%
 \ifx\next@\nextii@ \xytpic@pn0\relax\xytpic@bk
 \def\xytpic@style@@{\xytpic@fp}%
 \else\DNii@{\empty}%
 \ifx\next@\nextii@\def\xytpic@style@@{\xytpic@ip}\xytpic@bk
 \else\ifx\next@\empty\def\xytpic@style@@{\xytpic@ip}\xytpic@bk
 \else#1\fi\fi\fi 
 \xytpic@pt\R@c 
 \expandafter\addtotoks@\expandafter{\expandafter{\the\count@}}%
 \xytpic@pt\D@c 
 \expandafter\addtotoks@\expandafter{\expandafter{\the\count@}}%
 \xytpic@pt{\L@c}%
 \expandafter\addtotoks@\expandafter{\expandafter{\the\count@}}%
 \xytpic@pt{\U@c}%
 \expandafter\addtotoks@\expandafter{\expandafter{\the\count@}}%
 \expandafter\xyTPICrect@x\the\toks@
 \DNii@{\relax}\DN@{#1}\ifx\next@\nextii@
 \def\xytpic@style@@{\xytpic@fp}\expandafter\xyTPICrect@x\the\toks@\fi }
\xydef@\xyTPICrect@x#1#2#3#4{\xyTPIC@special{pa -#3 -#4}%
 \xyTPIC@special{pa -#3 #2}\xyTPIC@special{pa #1 #2}%
 \xyTPIC@special{pa #1 -#4}\xyTPIC@special{pa -#3 -#4}%
 \xytpic@style@@ }
\xydef@\xyTPICoval@#1{\DN@{#1}\DNii@{\relax}%
 \ifx\next@\nextii@ \DN@{\xyTPICfilledoval@\relax}%
 \else\DNii@{\empty}\ifx\next@\nextii@ \DN@{\xyTPICfilledoval@\empty}%
 \else\DN@{\xyTPICoval@i{#1}}\fi\fi \next@ }
\xylet@\xyTPICoval@i=\eat@
\xydef@\xyTPICfilledoval@#1{%
 {\advance\L@c-\R@ \advance\R@c-\R@ \xyTPICrect@{\empty}}%
 {\advance\U@c-\R@ \advance\D@c-\R@ \xyTPICrect@{\empty}}%
 \L@=\R@ \bgroup 
 \dimen@=-\U@c \advance\dimen@\R@ \xytpic@pt\dimen@ 
 \edef\tmp@{\the\count@}%
 \dimen@=-\L@c \advance\dimen@\R@ \xytpic@pt\dimen@
 \edef\tmp@{\noexpand\toks@={{\the\count@}{\tmp@}}}%
 \setTPICcircstyle@ \xyTPICcircle@{\tmp@}\egroup
 \bgroup 
 \dimen@=-\U@c \advance\dimen@\R@ \xytpic@pt\dimen@ 
 \edef\tmp@{\the\count@}%
 \dimen@=\R@c \advance\dimen@-\R@ \xytpic@pt\dimen@
 \edef\tmp@{\noexpand\toks@={{\the\count@}{\tmp@}}}%
 \setTPICcircstyle@ \xyTPICcircle@{\tmp@}\egroup
 \bgroup 
 \dimen@=\D@c \advance\dimen@-\R@ \xytpic@pt\dimen@ 
 \edef\tmp@{\the\count@}%
 \dimen@=-\L@c \advance\dimen@\R@ \xytpic@pt\dimen@
 \edef\tmp@{\noexpand\toks@={{\the\count@}{\tmp@}}}%
 \setTPICcircstyle@ \xyTPICcircle@{\tmp@}\egroup
 \bgroup 
 \dimen@=\D@c \advance\dimen@-\R@ \xytpic@pt\dimen@ 
 \edef\tmp@{\the\count@}%
 \dimen@=\R@c \advance\dimen@-\R@ \xytpic@pt\dimen@
 \edef\tmp@{\noexpand\toks@={{\the\count@}{\tmp@}}}%
 \setTPICcircstyle@ \xyTPICcircle@{\tmp@}\egroup
 \DN@{#1}\DNii@{\relax}\ifx\next@\nextii@
 \def\tmp@{{\xytpic@pn0\def\xytpic@style@@{\xytpic@fp}}}%
 \DN@{\expandafter\xyTPICoval@i\tmp@}%
 \else\DN@{}\fi \next@ }
\xydef@\setTPICcircstyle@{%
 \def\xytpic@circstyle@@{\xytpic@ia}\xytpic@bk}
\xydef@\xyTPICcircle@#1{\DNii@{\relax}%
 \DN@{#1}\toks@={00}\ifx\next@\nextii@ 
 \xytpic@pn0\relax\xytpic@bk \def\xytpic@circstyle@@{\xytpic@ar}%
 \else\DNii@{\empty}%
 \ifx\next@\nextii@ \setTPICcircstyle@
 \else\ifx\next@\empty \setTPICcircstyle@
 \else#1\fi\fi\fi 
 \xytpic@pt\R@ 
 \expandafter\addtotoks@\expandafter{\expandafter{\the\count@}}%
 \xytpic@pt\L@ 
 \expandafter\addtotoks@\expandafter{\expandafter{\the\count@}}%
 \expandafter\xytpic@circstyle@@\the\toks@ 0\twoPi@}
\xydef@\xyTPICellipse@{%
 \X@p=\R@c \advance\X@p-\L@c \divide\X@p\tw@ \R@=\R@c \advance\R@-\X@p
 \Y@p=\D@c \advance\Y@p-\U@c \divide\Y@p\tw@ \L@=\D@c \advance\L@-\Y@p
 \xyTPICcircle@}
\xydef@\xyTPICrect@Special#1#2#3#4{\TPICmacro@@{#1 fp}}
\xydef@\xyTPICdotrect@Special#1{\TPICmacro@@{#1 fp}}
\xydef@\xyTPICdashrect@Special#1{\TPICmacro@@{#1 fp}}
\xydef@\xyTPICcirc@Special#1{\TPICmacro@@{#1 ar}}
\xydef@\xyTPICdotcirc@Special#1{\TPICmacro@@{#1 ar}}
\xydef@\xyTPICdashcirc@Special#1{\TPICmacro@@{#1 ar}}
\xydef@\xyTPICfilledRegion#1#2{\vglue\U@c
 \hbox{\hglue\L@c#1#2\empty\hglue\R@c}\vglue\D@c}
\xydef@\filledRectangle@TPIC@@{%
 \ifdim\R@=\z@ \DN@{\xyTPICfilledRegion\xyTPICrect@}%
 \else \DN@{\xyTPICfilledRegion\xyTPICoval@}%
 \fi \next@ }
\xydef@\filledCircle@TPIC@@#1{{\R@c=\R@ \L@c=\R@ \U@c=\R@ \D@c=\R@
 \xyTPICfilledRegion\xyTPICcircle@#1{}}}
\xydef@\filledEllipse@TPIC@@{\xyTPICfilledRegion\xyTPICellipse@}
\xydef@\filledOval@TPIC@@{\xyTPICfilledRegion\xyTPICoval@}
\xydef@\installTPICfills@{%
 \let\filledRectangle@@=\filledRectangle@TPIC@@
 \let\filledOval@@=\filledOval@TPIC@@
 \let\filledCircle@@=\filledCircle@TPIC@@
 \let\filledEllipse@@=\filledEllipse@TPIC@@
}
\xydef@\xyTPICfillrect@Special#1#2{%
 \ifx#2\relax\TPICmacro@@{#1 fp}%
 \else\TPICmacro@@{#1 ip}\fi}
\xydef@\xyTPICfilloval@Special#1#2{%
 \ifx#2\relax\TPICmacro@@{#1 fp}%
 \else\TPICmacro@@{#1 ip}\fi}
\xydef@\xyTPICfillcirc@Special#1#2{%
 \ifx#2\relax\TPICmacro@@{#1 ar}%
 \else\TPICmacro@@{#1 ai}\fi}
\xydef@\xyTPICfillellipse@Special#1#2{%
 \ifx#2\relax\TPICmacro@@{#1 ar}%
 \else\TPICmacro@@{#1 ai}\fi}
\endinput
