summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/dratex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2008-09-20 00:38:11 +0000
committerKarl Berry <karl@freefriends.org>2008-09-20 00:38:11 +0000
commit4047de0425ceb45ea0b331e48efe2c6937a4a961 (patch)
tree62cdcb17409b431cbf1d56c887ddf71689c0911d /Master/texmf-dist/tex/generic/dratex
parent4be602aabb747be11a542f7d567a76e126ecef88 (diff)
interim dratex update
git-svn-id: svn://tug.org/texlive/trunk@10648 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic/dratex')
-rw-r--r--Master/texmf-dist/tex/generic/dratex/AlDraTex.sty2258
-rw-r--r--Master/texmf-dist/tex/generic/dratex/AlProTex.sty1576
-rw-r--r--Master/texmf-dist/tex/generic/dratex/DraTex.sty1626
-rw-r--r--Master/texmf-dist/tex/generic/dratex/TeXProject.sty2678
4 files changed, 0 insertions, 8138 deletions
diff --git a/Master/texmf-dist/tex/generic/dratex/AlDraTex.sty b/Master/texmf-dist/tex/generic/dratex/AlDraTex.sty
deleted file mode 100644
index 505aa496425..00000000000
--- a/Master/texmf-dist/tex/generic/dratex/AlDraTex.sty
+++ /dev/null
@@ -1,2258 +0,0 @@
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% v 1.7
-% AlDraTex %
-% Copyright (C) 1992 Eitan M. Gurari %
-% %
-% This program can redistributed and/or modified under %
-% the terms of the LaTeX Project Public License %
-% Distributed from CTAN archives in directory %
-% macros/latex/base/lppl.txt; either version 1 of the %
-% License, or (at your option) any later version. %
-% %
-% However, you are allowed to modify this program %
-% without changing its name, if you modify its %
-% signature. Changes to the signature can be introduced %
-% with a directive of the form %
-% \message{signature} %
-% %
-% gurari@cis.ohio-state.edu %
-% http://http://www.cis.ohio-state.edu/~gurari/ %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\expandafter\edef\csname :RestoreCatcodes\endcsname{%
- \catcode`\noexpand\noexpand\noexpand \^=\the\catcode`\^%
-}
-\catcode`\^=7
-\expandafter\edef\csname :RestoreCatcodes\endcsname{%
- \csname :RestoreCatcodes\endcsname
- \catcode`\noexpand \_=\the\catcode`\_%
- \catcode`\noexpand :=\the\catcode`:%
- \catcode`\noexpand &=\the\catcode`&%
- \catcode`\noexpand \#=\the\catcode`\#%
- \catcode`\noexpand \^^M=\the\catcode`\^^M%
- \let\expandafter\noexpand
- \csname:RestoreCatcodes\endcsname=\noexpand\undefined}
-\catcode`\:=11
-\ifx \AlDraTex\:undefined \def\AlDraTex{chart,diagram} \fi
-
-\newif\if:circle
-\newif\if:option
-\def\:CheckOption#1{ \def\:temp{#1}
- \:optionfalse
- \expandafter\:GetOptions\AlDraTex,,// }
-
-\def\:GetOptions#1,#2//{ \def\:next{#1}
- \ifx \:next\empty
- \else \ifx \:temp\:next \:optiontrue \let\:next=\relax
- \else \def\:next{\:GetOptions#2//}
- \fi \fi \:next }
-\def\:DefineExt#1{%
- \Define#1{\begingroup \:DraCatCodes
- \csname .:\string#1\endcsname}%
- \expandafter\Define\csname .:\string#1\endcsname}\IntVar\:C \IntVar\:Ca
-\IntVar\:Cb \IntVar\:Cc \newtoks\:tk
-\DecVar\Va \DecVar\Vb
-\DecVar\:Vc \DecVar\:Vd \DecVar\:Ve
-
-\Define\:GetX(2){\Va=#1;}
-\Define\:GetY(2){\Vb=#2;}
-\Define\:GetXY(2){\Va=#1;\Vb=#2;}\Define\:GetExit(2){
- \:Vc=#1; \IF \LtDec(\:Vc,0) \THEN \:Vc=-\:Vc; \FI
- \:Vd=#2; \IF \LtDec(\:Vd,0) \THEN \:Vd=-\:Vd; \FI
- \IF \LtDec(\:Vd,\:Vc) \THEN \:Vd=\:Vc; \FI
- \Va=#1; \Vb=#2;
- \IF \GtDec(\:Vd,0) \THEN \Va/\:Vd; \Vb/\:Vd; \FI }
-\Define\:GetEdgeFront(1){\def\:EdgeFront{#1}}
-\Define\:Count(1){\:C+1;}\let\Defend=\noexpand
-\def\KeepSpaces{\def\:Spaces{\catcode`\ =10 \relax}}
-\def\RemoveSpaces{\let\:Spaces=\relax}
-\RemoveSpaces\def\:edef#1#2{\edef\:Temp{\noexpand\Define
- \noexpand#1{#2}}\:Temp }
-\:CheckOption{chart}\if:option
- \edef\AlDraTex{\AlDraTex,pie,bar,xy}
-\else \:CheckOption{pie}\if:option
- \edef\AlDraTex{\AlDraTex,chart}
-\else \:CheckOption{xy}\if:option
- \edef\AlDraTex{\AlDraTex,chart}
-\else \:CheckOption{bar}\if:option
- \edef\AlDraTex{\AlDraTex,chart}
-\fi\fi\fi\fi
-\:CheckOption{chart}\if:option
- \def\Compute#1(#2){\def\NextDefine{\::Comp#1(#2)}\Define\:Comp(#2)}
-
-\def\::Comp#1(#2){\Define\:Temp(#2){}\ifx \:Temp\:Comp
- \let\:Compute=\empty
- \else \Define\:Compute(1){\:Comp(##1)\:Return#1}\fi}
-
-\Compute\I(1){}\Define\:ChooseColor(1){
-\IF \EqDec(#1,1) \THEN \SetBrush(0,0){}
-\ELSE\IF \EqDec(#1,2) \THEN
- \SetBrush(2pt\du,1pt\du){ \PenSize(0.2pt)
- \Units(1pt,1pt) \Move(0,-0.37) \Line(0,0.75)}
-\ELSE\IF \EqDec(#1,3) \THEN
- \SetBrush(1pt\du,2pt\du){ \PenSize(0.2pt)
- \Units(1pt,1pt) \Move(-0.37,0) \Line(0.75,0)}
-\ELSE\IF \EqDec(#1,4) \THEN
- \SetBrush(2pt\du,2pt\du){ \PenSize(0.2pt)
- \Units(1pt,1pt){\Move(-1,0)\Line(2,0)}
- \Move(0,-1)\Line(0,2)}
-\ELSE\IF \EqDec(#1,5) \THEN
- \SetBrush(5pt\du,2pt\du){ \PenSize(0.2pt)
- \Units(1pt,1pt) \Move(0,-0.37) \Line(0,0.75)}
-\ELSE\IF \EqDec(#1,6) \THEN
- \SetBrush(2pt\du,5pt\du){ \PenSize(0.2pt)
- \Units(1pt,1pt) \Move(-0.37,0) \Line(0.75,0)}
-\ELSE
- \SetBrush(#1pt\du,#1pt\du){
- \Units(1pt,1pt)\PaintRect(0.37,0.37)}
-\FI\FI\FI\FI\FI\FI}
-\fi
-\:CheckOption{pie}\if:option
- \Define\PieChart{\begingroup \:Spaces \:PieChart}
-
-\Define\:PieChart(1){\endgroup
- \Table\:Temp{#1}
- \:Ve=0; \:Temp(0,99){\:total}
- \MarkLoc(o:) \MoveF(\:PieR) \MarkLoc(b:)
- \DSeg\:Vd(o:,b:) \MoveToLoc(o:)
- \:C=0; \:Temp(0,99){\:InsertSlice} } \Define\PieChartSpec(1){
- \IF \EqText(,#1) \THEN\ELSE \:PieSpec(#1)
- \FI \:PieCol}
-
-\Define\:PieSpec(3){
- \:edef\:PieR{#2} \:edef\:LblDist{#3}
- \IF \EqInt(1,#1) \THEN
- \def\:ReturnComp##1{\:slice(\Val##1,\Val##1)}
- \Define\:total(1){
- \ifx \:Compute\empty \:Ve+##1;
- \else \let\:Return=\:ReturnAdd \:Compute(##1)\fi}
- \Define\:InsertSlice(1){
- \ifx \:Compute\empty \:slice(##1,##1)
- \else \let\:Return=\:ReturnComp\:Compute(##1) \fi}
- \ELSE
- \def\:ReturnComp##1{\edef\:tempa{\Val##1}}
- \Define\:total(2){
- \ifx \:Compute\empty \:Ve+##1;
- \else \let\:Return=\:ReturnAdd \:Compute(##1)\fi}
- \Define\:InsertSlice(2){
- \ifx \:Compute\empty \:slice(##1,##2)
- \else \let\:Return=\:ReturnComp\:Compute(##1)
- \:slice(\:tempa,##2) \fi}
- \FI }
-\def\:ReturnAdd#1{\:Ve+#1;}\Define\:slice(2){ \:C+1; \Va=#1; \Va/\:Ve;
- \Va*360; {
- \Va/2; \Rotate(\Val\Va) \:DetachSlice
- \MarkLoc(o:)
- \MoveF(1pt\du) \MarkLoc(x:) \CSeg\:SetEnEx(x:,o:)
- \MoveToLoc(o:) \MoveF(\:LblDist) \:AdjChatLbl(0,99){\:MvLbl}
- \SliceText(--#2--) \MoveToLoc(o:)
- \Vb=\:Vd; \Vb+\Va; \Vb+\Va;
- \DrawOvalArc(\:PieR,\:PieR)(\Val\:Vd,\Val\Vb)
- \:Ca=0; \:PieColors(0,99){\:Ca+1;\:PaintPie}
- {\RotateTo(\Val\:Vd) \LineF(\:PieR)}
- \RotateTo(\Val\Vb) \LineF(\:PieR)
- } \Rotate(\Val\Va) \:Vd+\Va; }
-
-\Define\:SetEnEx(2){\:Vc=#1; \Vb=#2; \EntryExit(\Val\:Vc,\Val\Vb,0,0)}
-\Define\DetachSlices(2){
- \IF \EqInt(#2,0) \THEN
- \Define\:DetachSlice{}
- \ELSE\IF \EqText(,#1) \THEN
- \def\:DetachSlice{ \MoveF(#2) }
- \ELSE
- \Table\:DSlice{#1}
- \Define\:OptDSlice(1){
- \IF \EqInt(\:C,##1) \THEN
- \MoveF(#2)
- \FI}
- \Define\:DetachSlice{ \:DSlice(0,99){\:OptDSlice} }
- \FI \FI } \Define\MovePieLabels(1){
- \IF \EqText(,#1) \THEN
- \Table\:AdjChatLbl{0,0,0}
- \ELSE \Table\:AdjChatLbl{0,0,0&#1} \FI}
-
-\Define\:MvLbl(3){
- \IF \EqInt(\:C,#1) \THEN \Move(#2,#3) \FI }
-\:DefineExt\:PieCol(1){\endgroup
- \IF \EqText(,#1) \THEN
- \ELSE \Table\:PieColors{#1} \FI}
-\Define\:PaintPie(1){{
- \IF \EqInt(\:C,\:Ca) \THEN
- \IF \GtDec(#1,0) \THEN
- \:ChooseColor(#1)
- \:Ve=\:PieR;
- \IF \GtDec(\Va,90) \THEN
- \Va=\:Vd; \Va+181;
- \PaintOvalArc(\Val\:Ve,\Val\:Ve)(\Val\:Vd,\Val\Va)
- \Va-1; \:Vd=\Va; \FI
- \PaintOvalArc(\Val\:Ve,\Val\:Ve)(\Val\:Vd,\Val\Vb)
- \RotateTo(\Val\Vb) \MoveF(\:PieR) \MarkLoc(a:)
-\MoveToLoc(o:) \RotateTo(\Val\:Vd) \MoveF(\:PieR)
-\MarkLoc(b:) \PaintQuad(o:,o:,a:,b:)
- \MoveF(-0.5pt\du) \MarkLoc(b:) \MoveToLoc(o:)
-\Rotate(1) \MoveF(\:PieR) \MarkLoc(b':)
-\MoveToLoc(o:) \RotateTo(\Val\Vb) \MoveF(\:PieR)
-\MoveF(-0.5pt\du) \MarkLoc(a:) \MoveToLoc(o:)
-\Rotate(-1) \MoveF(\:PieR) \MarkLoc(a':)
-\PaintQuad(a:,a':,b':,b:)
- \FI \FI }}\Define\Legend(1){ \AlignGrid(-1,\:LgEn)
- \PictNode(2){ \EntryExit(-1,\:LgEn,0,0)
- \DrawRect(\:LgSzX,\:LgSzY)
- \IF \GtDec(##1,0) \THEN
- \:ChooseColor(##1)
- \IF \EqDec(##1,4) \THEN
- \Move(0.05,0.05) \:Vd=\:LgSzX; \:Ve=\:LgSzY;
- \:Vd-0.1; \:Ve-0.1;
- \PaintRect(\Val\:Vd,\Val\:Ve) \Move(-0.05,-0.05)
- \ELSE \PaintRect(\:LgSzX,\:LgSzY) \FI
- \FI
- \:Vd=\:LgSzX; \:Vd+5;
- \:Ve=\:LgEn; \:Ve+1; \:Ve*\:LgSzY; \:Ve/2;
- \Move(\Val\:Vd,\Val\:Ve)
- \Text(--\ignorespaces##2--) }
- \GridDiagram(#1)()()}
-
-\:DefineExt\LegendSpec(3){\endgroup
- \:edef\:LgSzX{#1}\:edef\:LgSzY{#2}\:edef\:LgEn{#3}}
-
-\LegendSpec(10,10,0)
-\PieChartSpec(1,40,20)(0)
-\TextPar\Define\SliceText(1){\Text(--#1--)}
-\DetachSlices(,0) \MovePieLabels()
-
-\fi
-\:CheckOption{xy}\if:option
- \Define\Axis(2){ \MoveToLoc(#1) \CSeg\:GetXY(#1,#2)
- \begingroup \:Spaces \:axis}
-
-\Define\:axis(2){ \endgroup\:axs#1//{#2}}
-
-\def\:axs#1#2//#3{\::axs(#1,#2,#3)}
-\Define\::axs(3){ \SaveAll \Units(1pt,1pt)
- \def\:tic{\:ticLn( \Val\:Vc,0)}
-\IF \EqText(W,#1) \THEN
- \def\:MvTicTxt{\Move(-\:TxtPos,0)}
- \IF \LtDec(\Va,0) \THEN \Move(\Val\Va,0) \:Vc=-\Va;
- \ELSE \:Vc=\Va; \FI
- \EntryExit(1,0,0,0) \Va=0;
-\ELSE\IF \EqText(E,#1) \THEN
- \IF \GtDec(\Va,0) \THEN
- \Move(\Val\Va,0) \:Vc=-\Va;
- \ELSE \:Vc=\Va; \FI
- \def\:MvTicTxt{\Move(\:TxtPos,0)}
- \Va=0; \EntryExit(-1,0,0,0)
-\ELSE
- \def\:tic{\:ticLn(0, \Val\:Vc)}
- \IF \EqText(N,#1) \THEN
- \IF \GtDec(\Vb,0) \THEN
- \Move(0,\Val\Vb) \:Vc=-\Vb;
- \ELSE \:Vc=\Vb; \FI
- \EntryExit(0,-1,0,0)
- \def\:MvTicTxt{\Move(0,\:TxtPos)}
- \ELSE \EntryExit(0,1,0,0)
- \IF \LtDec(\Vb,0) \THEN
- \Move(0,\Val\Vb) \:Vc=-\Vb;
- \ELSE \:Vc=\Vb; \FI
- \def\:MvTicTxt{\Move(0,-\:TxtPos)}
- \FI
- \Vb=0;
-\FI\FI
- \:Ca=#2; \IF \EqText(#2,-0) \THEN \:Ca=-1; \FI
- \IF \LtInt(\:Ca,0) \THEN
- \:Ca=-#2; { \Line(\Val\Va,\Val\Vb)
-\MarkLoc(bk:)
-\IF \EqDec(\Va,0) \THEN
- \IF \GtDec(\Vb,0) \THEN
- \ifx \:FrArrowHead\empty \else \Line(0,5) \fi
- \Vb=\:ArrowLength;
- \ELSE
- \ifx \:FrArrowHead\empty \else \Line(0,-5) \fi
- \Vb=-\:ArrowLength; \FI
-\ELSE
- \IF \GtDec(\Va,0) \THEN
- \ifx \:FrArrowHead\empty \else \Line(5,0) \fi
- \Va=\:ArrowLength;
- \ELSE
- \ifx \:FrArrowHead\empty \else \Line(-5,0) \fi
- \Va=-\:ArrowLength; \FI
-\FI
-\Move(\Val\Va,\Val\Vb) \MarkLoc(fr:) \:FrArrowHead }
-
- \FI
- \:C=\:Ca; \:C/10; \:C*10; \:Ca-\:C;
- \IF \GtInt(\:Ca,4) \THEN \:Ca-5; \let\:PutTics=\:TicsByLoc \FI
- \IF \EqInt(\:Ca,4) \THEN
- \Define\:ticLn(2){\DoLine(##1,##2)(7pt\du){
- \Units(1pt,1pt) \MoveF(-4) \LineF(2) }}
- \:Ca-1;
-\ELSE \let\:ticLn=\Line \FI
- \IF \LtInt(\:Ca,3) \THEN
- \IF \GtDec(\:Vc,0) \THEN \:Vc= \:TicLn;
- \ELSE \:Vc=-\:TicLn;
-\FI\FI
-\ifcase \Val\:Ca
- \:Vc= 0; \def\:TxtPos{3} % 0
- \or \:Vc=-\:Vc; \:Vd=\:TicLn; \:Vd+3; \edef\:TxtPos{\Val\:Vd} % 1
-\else \def\:TxtPos{3} \fi
- \:Ca=\:C; \:Ca/10;
- \Table\:Temp{#3} \:C=-1; \:Temp(0,99){\:Count}
- \IF \GtInt(\:C,0) \THEN \:PutTics \FI \RecallAll}
-\Define\:PutTics{ \Va/\:C; \Vb/\:C;
- { \:Temp(0,99){ {\PenSize(\:TicTh)\:tic} \:TicText } }
- \IF \GtInt(\:Ca,0) \THEN
- \:C*\:Ca; \Va/\:Ca; \Vb/\:Ca;
- \IF \GtDec(\:Vc,\:TicLn) \THEN \:Vc= \:TicLn; \FI
- \IF \LtDec(\:Vc,-\:TicLn) \THEN \:Vc=-\:TicLn; \FI
- \:Vc*\:TicFc; { \let\:ticLn=\:Ln
- \Do(0,\Val\:C){ {\PenSize(\:TicTh)\:tic}
- \Move(\Val\Va,\Val\Vb) }}
- \FI}\Define\:TicsByLoc{ \MarkLoc(x:)
- \Define\:tempa(2){\MoveTo(0,##1) \MarkLoc(a:)
- \MoveTo(0,##2) \MarkLoc(b:)
- \LSeg\:Ve(a:,b:)}
- \:Temp(0,0){\:tempa }
- \Define\:tempa(2){ \MoveTo(0,##1) \MarkLoc(b:)
- \LSeg\:Vd(a:,b:) \:Vd/\:Ve;
- { \Va*\:Vd; \Vb*\:Vd; \MoveToLoc(x:)
- \Move(\Val\Va,\Val\Vb)
- {\PenSize(\:TicTh)\:tic} \:TicText(##2) }}
- \:Temp(1,99){\:tempa } }\Define\:TicText(1){ \MarkLoc(o:)
- \:MvTicTxt\TicText(--#1--) \MoveToLoc(o:)
- \Move(\Val\Va,\Val\Vb)}
-
-\Define\TicSpec(3){
- \:edef\:TicLn{#1} \:edef\:TicFc{#2} \:edef\:TicTh{#3}}
-
-\TicSpec(6,0.6,0.2 pt)
-
-\TextPar\Define\TicText(1){ \IF \EqText(,#1) \THEN
- \ELSE \Text(--\strut#1--) \FI}
-\fi
-\:CheckOption{bar}\if:option
- \:DefineExt\BarChart(1){\endgroup
- \Table\:Chart{#1} \MarkLoc(Origin)
- \XSaveUnits \:Ca=0; \Vb=0; \:Vc=0;
-\:Chart(0,999){\:Ca+1;\:MaxBar}
-\ifx \:Hchart\empty
- \:Ca*10; \:Vc+\:BarGrdOver;
-\ifx H\:BarDir
- \Move(\Val\:Vc,0) \MarkLoc(NE)
- \Move(0,-\Val\:Ca) \MarkLoc(SE)
- \Vb-\:Vc; \Move(\Val\Vb,0) \Move(-\:BarGrdUnder,0)
- \MarkLoc(SW) \Move(0,\Val\:Ca) \MarkLoc(NW)
- \edef\:BsLn{{\noexpand\Line(0,-10)}}
-\else
- \Move(0,\Val\:Vc) \MarkLoc(NW)
- \Move(\Val\:Ca,0) \MarkLoc(NE)
- \Vb-\:Vc; \Move(0,\Val\Vb)
- \Move(0,-\:BarGrdUnder) \MarkLoc(SE)
- \Move(-\Val\:Ca,0) \MarkLoc(SW)
- \edef\:BsLn{{\noexpand\Line(10,0)}}
-\fi \MoveToLoc(Origin)
-\else
- \Va=\:Vc; \:Vd=\:Vc; \:Vd-\Vb; \Va/\:Vd;
-\ifx H\:BarDir
- \Va*\:Hchart; \Move(\Val\Va,0)
- \Move(\:BarGrdOver,0) \MarkLoc(NE)
- \Move(0,-\:Vchart) \MarkLoc(SE)
- \Move(-\:Hchart,0) \Move(-\:BarGrdOver,0)
- \Move(-\:BarGrdUnder,0) \MarkLoc(SW)
- \Move(0,\:Vchart) \MarkLoc(NW)
- \:Ca*10; \edef\:BsLn{{\noexpand\Line(0,-10)}}
-\else
- \Va*\:Vchart; \Move(0,\Val\Va)
- \Move(0,\:BarGrdOver) \MarkLoc(NW)
- \Move(\:Hchart,0) \MarkLoc(NE)
- \Move(0,-\:Vchart) \Move(0,-\:BarGrdOver)
- \Move(0,-\:BarGrdUnder) \MarkLoc(SE)
- \Move(-\:Hchart,0) \MarkLoc(SW)
- \:Ca*10; \edef\:BsLn{{\noexpand\Line(10,0)}}
-\fi \MoveToLoc(Origin)
- \Va=\:Hchart; \Va/\:Ca;
- \:Vc-\Vb; \:Vd=\:Vchart; \:Vd/\:Vc;
- \:Hflip\Units(\Val\Va pt,\Val\:Vd pt)
- \:Vc+\Vb;
-\fi
- \def\:GrdLn{}
-\ifx \:BarGrdDist\empty \def\:BsLn{} \else
- \let\du=\relax
- \IF \GtInt(\:BarGrdDist,0) \THEN
- \:Vd=\:Vc; \:Vd/\:BarGrdDist; \:C[\:Vd];
- \IF \GtDec(\:C,\:Vd) \THEN \:C-1; \FI
- \IF \GtInt(\:C,0) \THEN
- \edef\:GrdLn{{ { \noexpand\noexpand\noexpand\:BsLn }
- \PenSize(\:TicTh)
- \noexpand\noexpand\noexpand\Do(1,\Val\:C){
- \:Hflip{\noexpand\noexpand\noexpand\Move}(0,\:BarGrdDist)
- { \:HflipMY{\noexpand\noexpand\noexpand\Line}(10,0) } }}}
-\:GridLoc(Max)
-
- \FI
- \Vb+\:Vc; \Vb-\:BarGrdUnder;
- \Vb/\:BarGrdDist; \:C[\Vb];
- \IF \LtDec(\:C,\:Vd) \THEN \:C+1; \FI
- \IF \LtInt(\:C,0) \THEN
- \edef\:GrdLn{
- \ifx\:AddBarDepth\:AddBarDp\:HflipMY{\noexpand\Move}(-\:HBarx,\:VBarx) \fi
- { \noexpand\:BsLn }
- \:GrdLn { \PenSize(\:TicTh)
- \noexpand\Do(-1,\Val\:C){ \:Hflip{\noexpand\Move}(0,-\:BarGrdDist)
- { \:HflipMY{\noexpand\Line}(10,0) } }}
-}
-\:GridLoc(Min)
-
- \ELSE \edef\:GrdLn{{\ifx\:AddBarDepth\:AddBarDp
- \:HflipMY{\noexpand\Move}(-\:HBarx,\:VBarx) \fi
-
- {\noexpand\:BsLn} \:GrdLn}}
- \FI
- \MoveToLoc(Origin)
- \FI
- \let\du=\:SvDu
-\fi
- \Va=0; \:Vc=0;
- \:Chart(0,99){
- \:Hflip\Move(0,\Val\:Vc)
- \:NoBarClip() \:DrawBars}
- \ifx\:AddBarDepth\:AddBarDp
- \MoveToLoc(Origin) \:HflipMY\Move(-\:HBarx,\:VBarx) \MarkLoc(Origin)
- \MoveToLoc(NW) \:HflipMY\Move(-\:HBarx,\:VBarx) \MarkLoc(NW)
- \MoveToLoc(NE) \:HflipMY\Move(-\:HBarx,\:VBarx) \MarkLoc(NE)
- \MoveToLoc(SW) \:HflipMY\Move(-\:HBarx,\:VBarx) \MarkLoc(SW)
- \MoveToLoc(SE) \:HflipMY\Move(-\:HBarx,\:VBarx) \MarkLoc(SE)
-\fi
- \XRecallUnits \MoveToLoc(Origin)
- \let\:Return=\:undefined \:NoBarClip() } \Define\:DrawBar(2){
- \:Bars(#1,#1){\:GetXY} \Vb-\Va;
- \ifx \:Compute\empty \edef\:tempa{#2}
- \else \def\:Return##1{\edef\:tempa{\Val##1}}\:Compute(#2)
- \fi
- \ifx H\:BarDir \Move(0,-\Val\Va)
- \:DrawBr(\:tempa,-\Val\Vb) \:AddBarPaint(#1,\:tempa)
- \Clip(\:tempa,-\Val\Vb)
- \:AddBarDepth(#1,\:tempa) \:Cluster(\:tempa) \Move(0,\Val\Va)
- \else \Move(\Val\Va,0)
- \:DrawBr(\Val\Vb,\:tempa) \:AddBarPaint(#1,\:tempa)
- \Clip(\Val\Vb,\:tempa)
- \:AddBarDepth(#1,\:tempa) \:Cluster(\:tempa) \Move(-\Val\Va,0)
- \fi }
-
-
-\Define\DrawBar(2){ \DrawRect(#1,#2)}
-
-\Define\:DrawBr(1){\MarkLoc(x:)\DrawBar(#1)\MoveToLoc(x:)}
-\:DefineExt\BarChartSpec(1){\endgroup
- \IF \EqText(,#1) \THEN \ELSE \:BarSpc(#1) \FI \:BarCol }
-
-\Define\:BarSpc(2){
- \let\:Temp=\:SeqBars \let\:BarDir=V \let\:newStck=\empty
-\let\:endnewStck=\empty
-\Define\:AddBarDepth(2){} \Define\:Cluster(1){}
-\:OptBars#1...// \Table\:Bars{#2}
- \:C=-1; \:Bars(0,999){\:Count}
- \ifx \:Temp\:TxtBar \IF \GtInt(\:C,1) \THEN
- \:tk{#1,#2} \:aldwarn8{}
- \FI \fi
- \:Temp }\def\:OptBars#1#2#3#4//{\:OpBr(#1)\:OpBr(#2)\:OpBr(#3)}
-
-\Define\:OpBr(1){
- \IF \EqText(H,#1) \THEN \let\:BarDir=H
- \ELSE\IF \EqText(T,#1) \THEN \let\:Temp=\:TxtBar
- \ELSE\IF \EqText(S,#1) \THEN \Define\:Cluster(1){ \:Vc-##1;
- \:Hflip\Move(0,##1) }
-\def\:newStck{
- \edef\:svMinBar{\Val\Vb} \Vb=0;
- \edef\:svMaxBar{\Val\:Vc} \:Vc=0; }
-\def\:endnewStck {
- \IF \LtDec(\:svMinBar,\Vb) \THEN \Vb=\:svMinBar; \FI
- \IF \GtDec(\:svMaxBar,\:Vc) \THEN \:Vc=\:svMaxBar; \FI }
-
-
- \ELSE\IF \EqText(3,#1) \THEN \let\:AddBarDepth=\:AddBarDp
- \FI\FI\FI\FI } \def\:BarsCommand#1{\EqInt(\Val\:C,#1)\THEN
- \Define\:DrawBars(}
-
-\Define\:SeqBars{
- \IF \:BarsCommand01){ \:DrawBar(0,##1) \:GrdLn
- \:HflipMY\Move(10,0) \:Vc=0;}
- \Define\:MaxBar{\:maxBar}
-
- \ELSE \IF \:BarsCommand12){ \:DrawBar(0,##1) \:DrawBar(1,##2)
- \:slotgrdln
- }
- \Define\:MaxBar(2){
- \:newStck \:maxBar(##1)\:maxBar(##2) \:endnewStck }
-
- \ELSE \IF \:BarsCommand23){ \:DrawBar(0,##1)
- \:DrawBar(1,##2) \:DrawBar(2,##3)
- \:slotgrdln
- }
- \Define\:MaxBar(3){
- \:newStck \:maxBar(##1)\:maxBar(##2)\:maxBar(##3) \:endnewStck }
-
- \ELSE \IF \:BarsCommand34){ \:DrawBar(0,##1)
- \:DrawBar(1,##2) \:DrawBar(2,##3) \:DrawBar(3,##4)
- \:slotgrdln
- }
- \Define\:MaxBar(4){ \:newStck
- \:maxBar(##1)\:maxBar(##2)\:maxBar(##3)\:maxBar(##4) \:endnewStck }
-
- \ELSE \IF \:BarsCommand45){ \:DrawBar(0,##1)
- \:DrawBar(1,##2) \:DrawBar(2,##3)
- \:DrawBar(3,##4) \:DrawBar(4,##5)
- \:slotgrdln
- }
- \Define\:MaxBar(5){ \:newStck \:maxBar(##1)
- \:maxBar(##2)\:maxBar(##3)\:maxBar(##4)\:maxBar(##5) \:endnewStck }
-
- \ELSE \:aldwarn7{}
- \FI \FI \FI \FI \FI }\Define\:GOBBLE(1){}
-\Define\:AddBarDp(2){ \MarkLoc(a:)
- \:HflipMY\Line(-\:HBarx,\:VBarx) \MarkLoc(b:)
- \:HflipMY\Line(0,#2) \MarkLoc(c:)
- \:HflipMY\Line(\:HBarx,-\:VBarx) \MarkLoc(d:)
- \ifx \:Cluster\:GOBBLE \:TopIIIdTop
- \else
- \IF \GtInt(\:C,#1) \THEN\ELSE \:TopIIIdTop \FI
- \fi
- \:HflipMY\Move(\:HBarx,0) \MarkLoc(f:) \MoveToLoc(b:)
- \:HflipMY\Move(0,-\:VBarx) \MarkLoc(b:) \CSeg\Clip(b:,f:)
- \MoveToLoc(a:) }
-
-\Define\BarDepth(1){
- \edef\:HBarx{#1pt\noexpand\du} \Va=#1; \Va*1.25;
- \edef\:VBarx{\Val\Va pt\noexpand\du} }
-
-
-\BarDepth(3)
-
-\def\:Hflip#1(#2,#3){%
- \ifx H\:BarDir #1(#3,#2)\else #1(#2,#3)\fi}
-\def\:HflipMY#1(#2,#3){%
- \ifx H\:BarDir #1(#3,-#2)\else #1(#2,#3)\fi} \Define\:TopIIIdTop{
- \:HflipMY\Line(\Val\Vb,0) \MarkLoc(e:)
- \:HflipMY\Line(-\:HBarx,\:VBarx) \MarkLoc(f:)
- {\LineToLoc(c:)}}\def\::Compute#1{\ifx \:Compute\empty
- \edef\:tempa{#1}%
- \else \def\:Return##1{\edef\:tempa{\Val##1}}\:Compute(#1)\fi}
-
-\Define\:TxtBar{
- \Define\:DrawBars(2){
- \MarkLoc(a:) \:Bars(0,0){\:GetXY} \Va+\Vb; \Va/2;
-\:HflipMY\Move(\Val\Va,0) \MarkLoc(BarBot)
-\::Compute{##1} \:Hflip\Move(0,\:tempa) \MarkLoc(BarTop)
- \BarText(--##2--) \MoveToLoc(a:)
- \:DrawBar(0,##1) \:GrdLn
- \:HflipMY\Move(10,0) \:Vc=0;}
- \Define\:MaxBar{\:maxTxtBar}}
-
-\Define\:maxTxtBar(2){\:maxBar(#1)}
-
-\TextPar\Define\BarText(1){
- \:Hflip\Move(0,4pt\du) \:Hflip\EntryExit(0,-1,0,0)
- \Text(--\ignorespaces#1--)}\:DefineExt\:BarCol(1){\endgroup
- \IF \EqText(,#1) \THEN\ELSE
- \Table\:Color{#1&0&0&0&0} \FI} \Define\:GetColor(1){\:Vc=#1;}
-
-\Define\:AddBarPaint(2){{ \PenSize(0.2pt)
- \MarkLoc(a:) \MoveTo(0,0) \MarkLoc(b:)
-\ifx V\:BarDir \MoveTo(\Val\Vb,#2)
-\else \MoveTo(#2,-\Val\Vb) \fi
-\MarkLoc(c:) \MoveToLoc(a:) \Units(1pt,1pt)
- \:Color(#1,#1){\:GetColor}
- \IF \EqDec(\:Vc,2) \THEN
- \:VrPnt
- \ELSE\IF \EqDec(\:Vc,3) \THEN
- \:HrPnt
- \ELSE\IF \EqDec(\:Vc,4) \THEN
- \PenSize(0.2pt) {\:VrPnt} \:HrPnt
- \ELSE \IF \GtDec(\:Vc,0) \THEN
- \:ChooseColor(\Val\:Vc)
- \CSeg\PaintRect(b:,c:)
- \FI \FI \FI \FI}}\Define\:VrPnt{ \CSeg\:GetXY(b:,c:) \:C[\Va];
- \:Vc=\Va; \:Vc-2; \:Vc/1.5; \:C[\:Vc];
- \:Vc=\:C; \:Vc*1.5; \:Vc-\Va; \:Vc/-2; \Move(\Val\:Vc,0)
- \Do(0,\Val\:C){ {\Line(0,\Val\Vb)} \Move(1.5,0) } }
-\Define\:HrPnt{ \CSeg\:GetXY(b:,c:) \:C[\Vb];
- \:Vc=\Vb; \ifx V\:BarDir \:Vc-2; \else \:Vc+2; \fi
- \:Vc/1.5; \:C[\:Vc]; \:Vc=\:C; \:Vc*1.5;
- \:Vc-\Vb; \:Vc/-2; \Move(0,\Val\:Vc)
- \Do(0,\Val\:C){ {\Line(\Val\Va,0)}
- \Move(0,\ifx H\:BarDir-\fi 1.5)} }
-\Define\BarClipOn{\Define\:NoBarClip(1){}}
-\Define\BarClipOff{\let\:NoBarClip=\Clip}
-
-\BarClipOff\Define\:maxBar(1){
- \ifx \:Compute\empty \edef\:tempa{#1}
- \else \def\:Return##1{\edef\:tempa{\Val##1}}\:Compute(#1)
- \fi
- \IF \GtDec(\:tempa,0) \THEN
- \ifx \:Cluster\:GOBBLE
- \IF \GtDec(\:tempa,\:Vc) \THEN \:Vc=\:tempa; \FI
-\else
- \:Vc+\:tempa;
-\fi
-
- \ELSE
- \ifx \:Cluster\:GOBBLE
- \IF \LtDec(\:tempa,\Vb) \THEN \Vb=\:tempa; \FI
-\else
- \Vb-\:tempa;
-\fi
-
- \FI}
-\Define\ChartSize(1){
- \IF \EqText(,#1) \THEN
- \def\:Hchart{} \def\:Vchart{}
- \ELSE \:ChartSz(#1) \FI}
-
-\Define\:ChartSz(2){
- \MarkLoc(o:) \Move(#1 \du,#2 \du) \MarkLoc(x:)
- \CSeg\:GetXY(o:,x:) \edef\:Hchart{\Val\Va}
- \edef\:Vchart{\Val\Vb} \MoveToLoc(o:) }
-
-\ChartSize()\let\:SvDu=\du
-
-\Define\:GridLoc(1){
- \:Vd=\:C; \:Vd*\:BarGrdDist; \MoveToLoc(Origin)
- \ifx V\:BarDir
- \Move(10,0) \MarkLoc(#1)
- \MoveToLL(Origin,#1)(NE,SE) \Move(0,\Val\:Vd)
- \else
- \Move(0,-10) \MarkLoc(#1)
- \MoveToLL(Origin,#1)(SW,SE) \Move(\Val\:Vd,0)
- \fi
- \let\du=\:SvDu
- \ifx\:AddBarDepth\:AddBarDp \:HflipMY\Move(-\:HBarx,\:VBarx) \fi
- \let\du=\relax \MarkLoc(#1)}
-\Define\BarGrid(3){
- \def\:BarGrdDist{#1} \def\:BarGrdUnder{#2}
- \def\:BarGrdOver{#3}}
-\BarChartSpec(V,2.5,7.5)(0)\BarGrid(0,0,0)
-\Define\:slotgrdln{
- \:HflipMY\Move(0,\Val\:Vc) \:GrdLn
- \:HflipMY\Move(10,0) \:Vc=0; }
-
-\fi
-\:CheckOption{diagram}\if:option
- \edef\AlDraTex{spread,grid,tree,\AlDraTex}
-\else \:CheckOption{spread}\if:option
- \edef\AlDraTex{diagram,\AlDraTex}
-\else \:CheckOption{grid}\if:option
- \edef\AlDraTex{diagram,\AlDraTex}
-\else \:CheckOption{tree}\if:option
- \edef\AlDraTex{diagram,\AlDraTex}
-\fi\fi\fi\fi
-\:CheckOption{xy} \if:option \:circletrue \fi
-\:CheckOption{diagram}\if:option \:circletrue \fi
-\if:circle \Define\ArrowHeads(1){
- \Define\:FrArrowHead{}
- \Define\:BkArrowHead{}
- \Define\:FrCrvArrowHead{}
- \Define\:BkCrvArrowHead{}
- \IF \GtInt(#1,0) \THEN
- \Define\:FrArrowHead{\:ArrowHead(bk:,fr:)}
- \Define\:FrCrvArrowHead{
- \DSeg\RotateTo(2:,2':)
- \MoveToLoc(2:) \MoveF(\:ArrowLength pt\du)
- \MoveF(0.1 pt\du) \MarkLoc(1'':) \MarkLoc(2'':)
- \MoveToLoc(2':) \MoveF(\:ArrowLength pt\du)
- \MoveF(0.1 pt\du) \MarkLoc(1'':) \MarkLoc(2':)
- \:ArrowHead(2'':,2:) }
- \FI
- \IF \GtInt(#1,1) \THEN
- \Define\:BkArrowHead{\:ArrowHead(fr:,bk:)}
- \Define\:BkCrvArrowHead{
- \DSeg\RotateTo(1:,1':)
- \MoveToLoc(1:) \MoveF(\:ArrowLength pt\du)
- \MoveF(0.1 pt\du) \MarkLoc(1'':) \MarkLoc(1'':)
- \MoveToLoc(1':) \MoveF(\:ArrowLength pt\du)
- \MoveF(0.1 pt\du) \MarkLoc(1'':) \MarkLoc(1':)
- \:ArrowHead(1'':,1:) }
- \FI }
-
-\Define\:ArrowHead(2){
- \LSeg\Va(#1,#2)
- \IF \LtDec(\Va,\:ArrowLength) \THEN \:aldwarn0{}
- \ELSE \MoveToLoc(#2) \DSeg\RotateTo(#1,#2)
- \MoveF(-\:ArrowLength pt\du)
- { \Ragged(\:ArrowRagged) \Rotate(90) \Va=\:ArrowWidth;
- \Va/2; \MoveF(\Val\Va pt\du) \MarkLoc(#2')
- \Va*2; \MoveF(-\Val\Va pt\du) \MarkLoc(#2'')
- \:head(#2) } \MarkLoc(#2) \FI }
-
-\Define\ArrowSpec(1){\:ArSp(#1,)}
-
-\Define\:ArSp(2){
- \IF \EqText(V,#1) \THEN \Define\:head(1){
- { \Va/2; \MoveF(\Val\Va pt\du) \MarkLoc(a:)
- \CSeg\:EdgeLine(a:,##1) }
- \MarkLoc(a:) \CSeg\:EdgeLine(a:,##1)
- \MarkLoc(a:) \CSeg\:EdgeLine(a:,##1') } \FI
- \IF \EqText(H,#1) \THEN \Define\:head(1){
- \MarkLoc(a:) \CSeg\:EdgeLine(a:,##1)
- \MarkLoc(a:) \CSeg\:EdgeLine(a:,##1')
- \MarkLoc(a:) \CSeg\:EdgeLine(a:,##1'')} \FI
- \IF \EqText(F,#1) \THEN \Define\:head(1){\PaintQuad(##1,##1,##1',##1'')}
- \FI
- \IF \EqText(,#2) \THEN\ELSE \:ArrowHeadSpec(#2) \FI }
-
-\Define\:ArrowHeadSpec(4){ \:edef\:ArrowLength{#1}
- \:edef\:ArrowWidth{#2} \:edef\:ArrowRagged{#3}}
-\ArrowHeads(0) \ArrowSpec(F,10,6,5) \:circlefalse \fi
-\:CheckOption{diagram}\if:option
- \Define\NewNode(2){
- \Define#1(1){
- \Define\:FrameType{\csname \string#1:Frame\endcsname}
- \Define\:NodeName{##1}
- \Indirect\Define<##1.mvto>{#2} \:NodeBody}
- \expandafter\Define\csname \string#1:Frame\endcsname}
-\Define\TextNode{
- \TextPar\Define\:NodeBody(1){
- \Object\:tmp{
- \:NodeContent(--##1--)
- \:FrameType }
- \:SetNode }
- \TextPar\Define\:NodeContent}
-
-\Define\PictNode{
- \Define\:NodeBody(1){
- \Object\:tmp{ \Object\:temp{\:NodeContent(##1)}
- \:temp \:FrameType }
- \:SetNode }
- \TextPar\Define\:NodeContent}
-
-\TextNode(1){\Text(--#1--)}\Define\:SetNode{\:SetNodeA }
-
-\Define\:SetNodeA{ \:tmp
- \MarkLoc(a:) \MoveToExit(0,0) \MarkLoc(\:NodeName)
- \MoveToExit(1,1) \MarkLoc(\:NodeName;:11)
- \MoveToLoc(a:) \:circlefalse }
-\Define\DefNode{
- \Define\:SetNode{
- \Indirect\let<\:NodeName :call> = \:tmp
-\def\:temp{\Indirect\let<\:NodeName :bdy> = }
- \expandafter\:temp \csname \string \:tmp .\endcsname
-\Indirect\let<\:NodeName :frm> = \:FrameType
-\Indirect\let<\:NodeName :cnt> = \:NodeContent
-\Indirect\edef<\:NodeName :crc>{
- \if:circle \noexpand\:circletrue
- \else \noexpand\:circlefalse \fi}
-
- \FigSize\Va\Vb{ \:SetNodeA } \Va/2; \Vb/2;
-\MarkLoc(\:NodeName) \Move(\Val\Va,\Val\Vb)
-\MarkLoc(\:NodeName;:11) \MoveToLoc(\:NodeName)
-
- \:circlefalse
- \Define\:SetNode{\:SetNodeA } }
- \:DefNode
-}
-\def\:DefNode#1(#2){#1(#2)}
-\Define\PutNode(1){
- \def\:NodeName{#1}
- \Indirect{ \expandafter \let \csname \string \:tmp .\endcsname = }
- <#1:bdy>
- \Indirect<#1:crc>
- \Indirect{ \let\:FrameType = }<#1:frm>
- \Indirect{ \let\:NodeContent = }<#1:cnt>
- \Indirect{ \let\:tmp = }<#1:call>
- \ifx\:tmp\relax \:aldwarn{10}{#1}\fi
- \:SetNodeA
- \Indirect\let<\:NodeName :call> = \:undef
-\Indirect\let<\:NodeName :cnt> = \:undef
-\Indirect\let<\:NodeName :frm> = \:undef
-\Indirect\let<\:NodeName :bdy> = \:undef
-\Indirect\let<\:NodeName :crc> = \:undef
- }
-\Define\ZeroNodesDim{
- \def\MaxX{0} \def\MaxY{0}
- \def\WidthX{0} \def\WidthY{0} }
-\Define\AddNodeDim(1){
- \CSeg\:GetXY(#1,#1;:11)
- \IF \GtDec(\Va,\MaxX) \THEN \edef\MaxX{\Val\Va} \FI
- \Va*2; \edef\Widthx{\Val\Va} \Va+\WidthX; \edef\WidthX{\Val\Va}
- \IF \GtDec(\Vb,\MaxY) \THEN \edef\MaxY{\Val\Vb} \FI
- \Vb*2; \edef\Widthy{\Val\Vb} \Vb+\WidthY; \edef\WidthY{\Val\Vb} }
-
-\Define\NewCIRCNode(3){
- \ifx \CIRC\:undefined \:aldwarn9\relax
- \font\CIRC=lcircle10\space scaled\magstep5
- \fi
- \Define\:Temp(2){
- \IF \EqText(,#3) \THEN
- \NewNode(#1,\MoveToOval){
- \Text(--\hbox to##1pt{%
- \vrule height ##2pt depth ##2pt%
- width0pt%
- \hss\hbox to##2pt{%
- \CIRC \char #2\hss}}--)}
- \ELSE
- \NewNode(#1,\MoveToOval){
- \Text(--\hbox to##1pt{%
- \hss\hbox to##2pt{%
- \CIRC \char #3\hss}}--)
- \Text(--\hbox to##1pt{%
- \vrule height ##2pt depth ##2pt%
- width0pt%
- \hss\hbox to##2pt{%
- \CIRC \char #2\hss}}--)}
- \FI }
- \setbox\:box=\hbox{\CIRC \char #2}
- \IF \EqText(,#3) \ELSE \IF \GtInt(#3,#2) \THEN
- \setbox\:box=\hbox{\CIRC \char #3}
- \FI \FI
- \edef\:tempa{\noexpand\Va=\:Cons\wd\:box;}
- \:tempa \Vb=\Va; \Vb/2;
- \edef\:tempa{\noexpand\:Temp(\Val\Va,\Val\Vb)}
- \:tempa }
-\Define\NodeMargin(2){\def\:XNodeMargin{#1}\def\:YNodeMargin{#2}}
-\NodeMargin(2,2) \Define\GetNodeSize{
- \MoveToExit(1,1)
- \Move(\:XNodeMargin pt\du,\:YNodeMargin pt\du)
- \MarkLoc(:11) \MoveToExit(0,0) \MarkLoc(:00)
- \CSeg\:GetXY(:00,:11)}
-
-\Define\SetMinNodeSize{
- \IF \LtDec(\Va,\:NodeX) \THEN \Va=\:NodeX; \FI
- \IF \LtDec(\Vb,\:NodeY) \THEN \Vb=\:NodeY; \FI }
-
-
-\Define\MinNodeSize(1){\:MinNodeSize(#1,)}
-\Define\:MinNodeSize(2){
- \IF \EqText(,#2) \THEN
- \edef\:Temp{\noexpand\:MinNdSz(\csname :#1::\endcsname,)}
- \ELSE
- \def\:Temp{\:MinNdSz(#1,#2)}
- \FI \:Temp}
-\Define\:MinNdSz(3){
- \Va=#1; \Va/2; \edef\:NodeX{\Val\Va}
- \Va=#2; \Va/2; \edef\:NodeY{\Val\Va} }
-
-\Define\SaveNodeSize(1){ \CSeg\:GetXY(#1,#1;:11)
- \Va*2; \Vb*2;
- \expandafter\edef\csname :#1::\endcsname{\Val\Va,\Val\Vb} }
-
- \Define\:Temp{
-\def\SaveDrawSize(##1)##2{
- \FigSize\Va\Vb{##2}
- \expandafter\edef\csname :##1::\endcsname{\Val\Va,\Val\Vb} }
- }\:Temp
-
-\MinNodeSize(0,0)\def\:NodeLine{\Line} \def\:NodeArc{\DrawOvalArc}
-\Define\SRectNodeSpec(1){\:edef\:ShadowSize{#1}}
-\Define\VRectNodeSpec(1){\:edef\:Vdepth{#1}}
-
-\VRectNodeSpec(4) \SRectNodeSpec(3) \def\NodeIx#1#2{#1=\:C;#2=\:Ca;}
-\NewNode(\RectNode,\MoveToRect){ \:RectShape }
-\NewNode(\VRectNode,\:MoveToVRect){ \:RectShape
- \:Vc=\:Vdepth; \:Vc/2; \:NodeLine(\:Vdepth,-\Val\:Vc)
- \:NodeLine(\Val\Va,0) {\:NodeLine(-\:Vdepth,\Val\:Vc)}
- \:NodeLine(0,\Val\Vb) \:NodeLine(-\:Vdepth,\Val\:Vc) }
-\NewNode(\SRectNode,\MoveToRect){ \Units(1pt,1pt)
- \GetNodeSize \SetMinNodeSize
- \Move(-\Val\Va,-\Val\Vb) \Va*2; \Vb*2;
- \:NodeLine(0,\Val\Vb) \:NodeLine(\Val\Va,0)
- \PenSize(\:ShadowSize pt)
- \:Ve=\:ShadowSize; \:Ve/2; \Va+\:ShadowSize;
- \Move(\Val\:Ve,0) \Line(0,-\Val\Vb)
- \Move(\Val\:Ve,-\Val\:Ve) \Line(-\Val\Va,0) }
-
-\Define\:RectShape{ \Units(1pt,1pt)
- \GetNodeSize \SetMinNodeSize
- \Move(-\Val\Va,-\Val\Vb) \Va*2; \Vb*2;
- \:NodeLine(0,\Val\Vb) \:NodeLine(\Val\Va,0)
- \:NodeLine(0,-\Val\Vb) \:NodeLine(-\Val\Va,0) }
-
-\Define\MoveToRect(3){
- \CSeg[#2]\:GetX(#1,#1;:11)
- \CSeg[#3]\:GetY(#1,#1;:11) \MoveToLoc(#1)
- \Move(\Val\Va pt\du,\Val\Vb pt\du)}
-\NewNode(\RRectNode,\:MoveToRRect){ \Units(1pt,1pt)
- \GetNodeSize \SetMinNodeSize
- \Va+3; \Move(-\Val\Va,-\Val\Vb) \Va*2; \Vb*2;
- \:Vc=\Va; \:Vc/4; \:Vd=\Vb; \:Vd/4;
-\IF \GtDec(\:Vc,9) \THEN \:Vc=9; \FI
-\IF \GtDec(\:Vd,9) \THEN \:Vd=9; \FI
-\Va-\:Vc; \Va-\:Vc; \Vb-\:Vd; \Vb-\:Vd;
- { \Move (\Val\:Vc,\Val\:Vd)
- \:NodeArc(\Val\:Vc,\Val\:Vd)(180,225) }
- \Move(0,\Val\:Vd) \:NodeLine(0,\Val\Vb) \Move(\Val\:Vc,0)
- \:NodeArc(\Val\:Vc,\Val\:Vd)(90,180)
- \Move(0,\Val\:Vd) \:NodeLine(\Val\Va,0) \Move(0,-\Val\:Vd)
- \:NodeArc(\Val\:Vc,\Val\:Vd)(45,90)
- \:NodeArc(\Val\:Vc,\Val\:Vd)(0,45)
- \Move(\Val\:Vc,0) \:NodeLine(0,-\Val\Vb) \Move(-\Val\:Vc,0)
- \:NodeArc(\Val\:Vc,\Val\:Vd)(270,360)
- \Move(0,-\Val\:Vd) \:NodeLine(-\Val\Va,0) \Move(0,\Val\:Vd)
- \:NodeArc(\Val\:Vc,\Val\:Vd)(225,270)
-}\NewNode(\ORectNode,\:MoveToORect){ \Units(1pt,1pt)
- \GetNodeSize \SetMinNodeSize \Va-2;
- { \Move(\Val\Va,0) \:NodeArc(9,\Val\Vb)(-90,90) }
- { \Move(-\Val\Va,0) \:NodeArc(9,\Val\Vb)(90,-90) }
- \Move(-\Val\Va,\Val\Vb) \Va*2; \Vb*2;
- \:NodeLine(\Val\Va,0)
- { \Move(0,-\Val\Vb) \:NodeLine(-\Val\Va,0)} }
-\NewNode(\DRectNode,\:MoveToDRect){ \Units(1pt,1pt)
- \GetNodeSize \SetMinNodeSize
- { \Move(\Val\Va,0) \Move(9,0)
- {\:NodeLine(-9,\Val\Vb)}
- {\:NodeLine(-9,-\Val\Vb)} }
- { \Move(-\Val\Va,0) \Move(-9,0) {\:NodeLine(9,\Val\Vb)}
- {\:NodeLine(9,-\Val\Vb)} }
- \Move(\Val\Va,\Val\Vb) \Va*2;
- \:NodeLine(-\Val\Va,0) { \Move(0,-\Val\Vb)
- \Move(0,-\Val\Vb)
- \:NodeLine(\Val\Va,0)} }\Define\CircleNode{ \:circletrue \OvalNode}
-
-\NewNode(\OvalNode,\MoveToOval){
- \Units(1pt,1pt) \GetNodeSize \Va/0.707; \Vb/0.707;
- \SetMinNodeSize
- \if:circle
- \IF \LtDec(\Va,\Vb) \THEN \Va=\Vb;
- \ELSE \IF \LtDec(\Vb,\Va) \THEN \Vb=\Va;
- \FI \FI
- \fi \:NodeArc(\Val\Va,\Val\Vb) (0,360) }
-\NewNode(\DiamondNode,\:MoveToDiamond){
- \Units(1pt,1pt) \GetNodeSize
- \Vb*1.66; \Va+\Vb; \Vb=\Va; \Vb*0.66; \SetMinNodeSize
- \Move(0,\Val\Vb) \:NodeLine(-\Val\Va,-\Val\Vb)
- \:NodeLine(\Val\Va,-\Val\Vb)
- \:NodeLine(\Val\Va,\Val\Vb)
- \:NodeLine(-\Val\Va,\Val\Vb)}\NewNode(\Node,\MoveToRect){ \:NoShape }
-
-\Define\:NoShape{
- \GetNodeSize \SetMinNodeSize
- \MoveToExit(0,0) \EntryExit(0,0,0,0) \Va*2; \Vb*2;
- \Text(--\vbox to\Val\Vb pt{\hsize=\Val\Va pt
- \leavevmode\hfil\vfil}--)}\Define\FcNode(1){
- \edef\:Temp{\noexpand\Indirect\let<#1.mvto>=\noexpand\MoveToRect}
- \:Temp \MarkLoc(#1) \Move(0.01pt\du,0.01pt\du)
- \MarkLoc(#1;:11) \MoveToLoc(#1) }
-\Define\MoveToNodeDir(1){\edef\:Temp{\noexpand\::MvToExit(#1)}\:Temp}
-
-\Define\::MvToExit(2){
- \DSeg\:Vc(#1,#2) \let\:Temp=\relax
- \IF \EqDec(\:Vc,0) \THEN \MoveToNode(#1,1,0)
- \ELSE \IF \EqDec(\:Vc,90) \THEN \MoveToNode(#1,0,1)
- \ELSE \IF \EqDec(\:Vc,180)\THEN \MoveToNode(#1,-1,0)
- \ELSE \IF \EqDec(\:Vc,270)\THEN \MoveToNode(#1,0,-1)
- \ELSE \DSeg\Va(#1,#1;:11)
-\IF \LtDec(\:Vc,\Va) \THEN \:PreSrchExit(#1,1,\Val\:Ve,0,1)
-\ELSE \Vb=180; \Vb-\Va;
- \IF \LtDec(\:Vc,\Vb) \THEN \:PreSrchExit(#1,\Val\:Ve,1,1,-1)
- \ELSE \Vb=180; \Vb+\Va;
- \IF \LtDec(\:Vc,\Vb) \THEN \:PreSrchExit(#1,-1,\Val\:Ve,1,-1)
- \ELSE \Vb=360; \Vb-\Va;
- \IF \LtDec(\:Vc,\Vb) \THEN\:PreSrchExit(#1,\Val\:Ve,-1,-1,1)
- \ELSE \:PreSrchExit(#1,1,\Val\:Ve,-1,0)
-\FI\FI\FI\FI \FI\FI\FI\FI \:Temp }\Define\:PreSrchExit(5){
- \def\:Temp{\def\:tempa{(#1,#2,#3}\:SearchExit(#1,#4,#5)} }
-\Define\:SearchExit(3){
- \:Ve=#3; \:Ve-#2; \IF \LtDec(\:Ve,0) \THEN \:Ve=-\:Ve; \FI
- \IF \LtDec(\:Ve,0.01) \THEN \let\:Temp=\relax
- \ELSE
- \:Ve=#2; \:Ve+#3; \:Ve/2; \edef\:tempb{\Val\:Ve}
- \expandafter\MoveToNode\:tempa) \MarkLoc(x:)
- \DSeg\:Vd(#1,x:)
- \IF \GtDec(\:Vd,\:Vc) \THEN
- \edef\:Temp{\noexpand\:SearchExit(#1,#2,\:tempb)}
- \ELSE
- \edef\:Temp{\noexpand\:SearchExit(#1,\:tempb,#3)}
- \FI \FI \:Temp }\Define\TraceDiagramOn{\def\:TrcDiag##1{##1}}
-\Define\TraceDiagramOff{\def\:TrcDiag##1{}}
-\TraceDiagramOff \Define\TagNode(1){{\:TagNode(#1)}}
-
-\Define\::TagNode(1){ \let&=\relax
- \xdef\:tgnd{\:tgnd&#1,\Val\:C..\Val\:Ca}}
-
-\Define\:bgDiTags{
- \Define\:TagNode(1){}
- \Define\:EdgeNode(1){}
- \let\:svTgNd=\:tgnd \gdef\:tgnd{}
- \let\:svEdNd=\:ednd \gdef\:ednd{} }
-
-\Define\:endDiTags{
- \MarkLoc(o:)
- \ifx\:tgnd\empty \else
- \Table\:Temp{\:tgnd}
- \:Temp(1,999){\:SetNdTg} \fi
- \global\let\:tgnd=\:svTgNd
- \ifx\:ednd\empty \else
- \Table\:Temp{\:ednd}
- \:C=0;
- \:Temp(1,999){\::CurrEdge} \fi
- \global\let\:ednd=\:svEdNd
-
- \MoveToLoc(o:)}
-
-\Define\:SetNdTg(2){
- \Indirect{ \Indirect\let<#1.mvto>= }<#2.mvto>
- \MoveToLoc(#2) \MarkLoc(#1)
- \MoveToLoc(#2;:11) \MarkLoc(#1;:11) }
-
- \fi
- \:CheckOption{diagram}\if:option
- \Define\MoveToNode(3){
- \XSaveUnits \Units(1pt,1pt)
- \edef\:Temp{\noexpand\Indirect<#1.mvto>(#1,#2,#3)}
- \:Temp \XRecallUnits }\Define\:MoveToVRect(3){
- \MoveToRect(#1,#2,#3) \:Ve=\:Vdepth; \:Ve/2;
- \:Vd=\:Ve; \:Vd/2;
- \IF \GtDec(#2,0.98) \THEN \Move(-\Val\:Ve,0)
- \IF \GtDec(#3,0.98) \THEN \Move(0,-\Val\:Vd)
- \FI \FI
- \IF \LtDec(#3,-0.98) \THEN \Move(0,\Val\:Vd)
- \IF \LtDec(#2,-0.98) \THEN \Move(\Val\:Ve,0)
- \FI \FI} \Define\:MoveToRRect(3){ \MoveToRect(#1,#2,#3)
- \Va=#2; \IF \LtDec(\Va,0) \THEN \Va=-\Va; \FI
- \Vb=#3; \IF \LtDec(\Vb,0) \THEN \Vb=-\Vb; \FI
- \IF \GtDec(\Va,1) \THEN \Va=1; \FI
- \IF \GtDec(\Vb,1) \THEN \Vb=1; \FI
- \IF \LtDec(\Va,0.9) \THEN \Va=0; \Vb=0;
- \ELSE \IF \LtDec(\Vb,0.9) \THEN \Va=0; \Vb=0;
- \ELSE \Va-1; \Va=-\Va; \Vb-1; \Vb=-\Vb; \FI \FI
- \IF \GtDec(#2,0) \THEN \Va=-\Va; \FI
- \IF \GtDec(#3,0) \THEN \Vb=-\Vb; \FI
- \Va*30; \Vb*30;
- \Move(\Val\Va pt\du,\Val\Vb pt\du) }\Define\:MoveToORect(3){
- \MoveToRect(#1,0,0) \MarkLoc(o:mv)
- \MoveToRect(#1,#2,#3) \MarkLoc(x:mv) \MarkLoc(y:mv)
- \CSeg\:GetX(o:mv,x:mv)
- \MoveToRect(#1,1,0) \MarkLoc(a:mv) \LSeg\:Ve(a:mv,x:mv)
-\IF \LtDec(\:Ve,0.1) \THEN \Move(9pt\du,0)
-\ELSE \DSeg\:Ve(a:mv,x:mv)
- \IF \LtDec(\:Ve,90) \THEN
- \MoveToRect(#1,1,1) \MarkLoc(1:mv)
- \DSeg\:Vd(o:mv,x:mv) \DSeg\:Ve(o:mv,1:mv)
- \:Vd/\:Ve; \:Vd*90; \RotateTo(\Val\:Vd) \MoveToLoc(a:mv)
- \MoveFToOval(9 pt\du,\Val\Vb pt\du) \MarkLoc(y:mv)
- \ELSE \IF \GtDec(\:Ve,270)\THEN
- \MoveToRect(#1,1,-1) \MarkLoc(1:mv)
- \DSeg\:Vd(o:mv,x:mv) \DSeg\:Ve(o:mv,1:mv)
- \:Vd-360; \:Ve-360; \:Vd/\:Ve;
- \:Vd*90; \RotateTo(-\Val\:Vd) \MoveToLoc(a:mv)
- \MoveFToOval(9 pt\du,\Val\Vb pt\du) \MarkLoc(y:mv)
-\FI \FI \FI
- \MoveToRect(#1,-1,0) \MarkLoc(a:mv) \LSeg\:Ve(a:mv,x:mv)
-\IF \LtDec(\:Ve,0.1) \THEN \Move(-9pt\du,0)
-\ELSE \DSeg\:Ve(a:mv,x:mv)
- \IF \GtDec(\:Ve,90) \THEN
- \IF \LtDec(\:Ve,180) \THEN
- \MoveToRect(#1,-1,1) \MarkLoc(1:mv)
- \DSeg\:Vd(o:mv,x:mv) \DSeg\:Ve(o:mv,1:mv)
- \:Vd-180; \:Ve-180; \:Vd/\:Ve;
- \:Vd*90; \:Vd-180; \:Vd=-\:Vd;
- \RotateTo(\Val\:Vd) \MoveToLoc(a:mv)
- \MoveFToOval(9 pt\du,\Val\Vb pt\du) \MarkLoc(y:mv)
- \ELSE\IF \LtDec(\:Ve,180) \THEN
- \MoveToRect(#1,-1,-1) \MarkLoc(1:mv)
- \DSeg\:Vd(o:mv,x:mv) \DSeg\:Ve(o:mv,1:mv)
- \:Vd-180; \:Ve-180; \:Vd/\:Ve;
- \:Vd*90; \:Vd+180; \:Vd=-\:Vd;
- \RotateTo(\Val\:Vd) \MoveToLoc(a:mv)
- \MoveFToOval(9 pt\du,\Val\Vb pt\du) \MarkLoc(y:mv)
-\FI \FI \FI \FI \MoveToLoc(y:mv) }\Define\:MoveToDRect(3){ \XSaveUnits
- \MoveToRect(#1,0,0) \MarkLoc(o:mv)
- \MoveToRect(#1,#2,#3) \MarkLoc(x:mv) \MarkLoc(y:mv)
- \CSeg\:GetX(o:mv,x:mv)
- \MoveToRect(#1,1,0) \MarkLoc(a:mv) \LSeg\:Ve(a:mv,x:mv)
-\IF \LtDec(\:Ve,0.1) \THEN \Move(9pt\du,0)
-\ELSE \DSeg\:Ve(a:mv,x:mv)
- \IF \LtDec(\:Ve,90) \THEN
- \Move(0,\Val\Vb) \MarkLoc(.:)
- \Move(9,-\Val\Vb) \MarkLoc(..:)
- \MoveToLL(.:,..:) \MarkLoc(y:mv)
- \ELSE \IF \GtDec(\:Ve,270) \THEN
- \Move(0,-\Val\Vb) \MarkLoc(.:)
- \Move(9,\Val\Vb) \MarkLoc(..:)
- \MoveToLL(.:,..:) \MarkLoc(y:mv)
-\FI \FI \FI
- \MoveToRect(#1,-1,0) \MarkLoc(a:mv) \LSeg\:Ve(a:mv,x:mv)
-\IF \LtDec(\:Ve,0.1) \THEN \Move(-9pt\du,0)
-\ELSE \DSeg\:Ve(a:mv,x:mv)
- \IF \GtDec(\:Ve,90) \THEN
- \IF \LtDec(\:Ve,180)\THEN
- \Move(0,\Val\Vb) \MarkLoc(.:)
- \Move(-9,-\Val\Vb) \MarkLoc(..:)
- \MoveToLL(.:,..:) \MarkLoc(y:mv)
- \ELSE \IF \LtDec(\:Ve,270)\THEN
- \Move(0,-\Val\Vb) \MarkLoc(.:)
- \Move(-9,\Val\Vb) \MarkLoc(..:)
- \MoveToLL(.:,..:) \MarkLoc(y:mv)
-\FI \FI \FI \FI
-\XRecallUnits \MoveToLoc(y:mv) }\Define\MoveToOval(3){
- \CSeg[#2]\:GetX(#1,#1;:11)
- \CSeg[#3]\:GetY(#1,#1;:11)
- \MoveTo(0,0) \MarkLoc(00:)
- \MoveTo(\Val\Va pt\du,\Val\Vb pt\du) \MarkLoc(11:)
- \MoveToLoc(#1) \LSeg\Va(00:,11:)
- \IF \GtDec(\Va,0.001) \THEN
- \DSeg\RotateTo(00:,11:)
- \CSeg\MoveFToOval(#1,#1;:11)
- \FI}\Define\:MoveToDiamond(3){
- \CSeg\:GetXY(#1,#1;:11)
- \IF \LtDec(#2,0) \THEN \Va=-\Va; \FI
- \IF \LtDec(#3,0) \THEN \Vb=-\Vb; \FI
- \MoveToLoc(#1) \Move(\Val\Va pt\du,0) \MarkLoc(.:)
- \MoveToLoc(#1) \Move(0,\Val\Vb pt\du) \MarkLoc(..:)
- \CSeg\:GetXY(#1,#1;:11) \Va*#2; \Vb*#3;
- \MoveToLoc(#1) \Move(\Val\Va pt\du,\Val\Vb pt\du)
- \MarkLoc(..:..) \LSeg\Va(#1,..:..)
- \IF \GtDec(\Va,0) \THEN \MoveToLL(.:,..:)(#1,..:..) \FI }
-
- \fi
- \:CheckOption{diagram}\if:option
- \Define\EdgeSpec(1){\:EdgeSpec#1....//}
-\def\:EdgeSpec#1#2#3#4.//{\:EdSp(#1)\:EdSp(#2)\:EdSp(#3)}
-
-\Define\:EdSp(1){
- \IF \EqText(L,#1) \THEN
- \def\:EdgeLine{\Line} \def\:EdgeCurve{\Curve}
- \FI
- \IF \EqText(D,#1) \THEN
- \let\:EdgeLine=\:DotLine \let\:EdgeCurve=\:DotCurve
- \FI
- \IF \EqText(C,#1) \THEN
- \def\:LocByAddr##1(##2){ \MoveTo(##2)
- \MarkLoc(;:) ##1(;:)}
- \FI
- \IF \EqText(T,#1) \THEN
- \let\:LocByAddr=\relax
- \FI
- \IF \EqText(R,#1) \THEN
- \Define\:EdgeCorner{
- \MoveToLoc(fr:) \MarkLoc(nxt':) \MarkLoc(fr':)
- \:SetEndCorner(fr:,bk:) \:SetEndCorner(nxt':,nxt:)
- \:EdgeCurve(fr:,fr:1,nxt':1,nxt':) }
- \FI
- \IF \EqText(S,#1) \THEN
- \Define\:EdgeCorner{\MoveToLoc(fr:) \MarkLoc(nxt':)}
- \FI}
-
-\Define\:DotLine(1){
- { \MarkLoc(a:) \Move(#1) \MarkLoc(b:)
- \DSeg\RotateTo(a:,b:) \LineF(-\:thickness \du)
- \MoveToLoc(a:) \LineF(\:thickness\du)}
- \DoLine(#1)(3pt\du){
- \Units(1pt,1pt) \MoveF(-0.5) \LineF(1) }}
-
-\Define\:DotCurve(4){
- { \DSeg\RotateTo(#1,#2) \MoveToLoc(#1)
- \divide\:thickness by2 \LineF(\:thickness \du) }
- { \DSeg\RotateTo(#4,#3) \MoveToLoc(#4)
- \divide\:thickness by2 \LineF(\:thickness \du) }
- \DoCurve(#1,#2,#3,#4)(3pt\du){
- \Units(1pt,1pt) \MoveF(-0.5) \LineF(1) } }
-
-\Define\EdgeAt(6){
- \MoveToNode(#1,#2,#3) \MarkLoc(EdgeBack)
- \Table\:EdgePath{#6}
- \:EdgePath(0,0){\:GetEdgeFront}
- \MoveToNode(#4,#5,\:EdgeFront) \:InsertEdge(#6)}\Define\Edge(2){
- \Table\:EdgePath{#1&#2}
- \:C=-1; \:EdgePath(0,99){\:Count}
- \IF \EqDec(\:C,1) \THEN
- \MoveToNodeDir(#1,#2) \MarkLoc(EdgeBack)
- \MoveToNodeDir(#2,#1)
- \ELSE \:EdgePath(2,2){\:LocByAddr\MoveToLoc} \MarkLoc(:)
-\MoveToNodeDir(#1,:) \MarkLoc(EdgeBack)
-\Define\:Temp(1){\def\:Temp{##1}}
-\:EdgePath(1,1){\:Temp}
-\:EdgePath(\Val\:C,\Val\:C){\:LocByAddr\MoveToLoc}
-\MarkLoc(EdgeFront) \MoveToNodeDir(\:Temp,EdgeFront) \FI
- \Table\:EdgePath{#2} \:InsertEdge(#2) }\Define\EdgeTo(4){
- \Table\:EdgePath{#4}
- \:C=-1; \:EdgePath(0,1){\:Count}
- \IF \EqDec(\:C,0) \THEN
- \MoveToNode(#2,#3,#4) \MarkLoc(EdgeFront)
- \MoveToNodeDir(#1,EdgeFront) \MarkLoc(EdgeBack)
- \MoveToLoc(EdgeFront)
- \ELSE \:EdgePath(1,1){\:LocByAddr\MoveToLoc} \MarkLoc(:)
-\MoveToNodeDir(#1,:) \MarkLoc(EdgeBack)
-\:EdgePath(0,0){\:GetEdgeFront}
-\MoveToNode(#2,#3,\:EdgeFront) \FI
- \:InsertEdge(#4) }\Define\EdgeFrom(4){
- \Table\:EdgePath{#1&#4}
- \:C=-1; \:EdgePath(0,99){\:Count}
- \MoveToNode(#1,#2,#3) \MarkLoc(EdgeBack)
- \IF \EqDec(\:C,1) \THEN
- \MoveToNodeDir(#4,EdgeBack)
- \ELSE \Define\:Temp(1){\def\:Temp{##1}}
-\:EdgePath(1,1){\:Temp}
-\:EdgePath(\Val\:C,\Val\:C){\:LocByAddr\MoveToLoc}
-\MarkLoc(EdgeFront) \MoveToNodeDir(\:Temp,EdgeFront) \FI
- \Table\:EdgePath{#4} \:InsertEdge(#4) }\Define\:InsertEdge(1){
- \MarkLoc(EdgeFront) \:C=-1; \:EdgePath(0,2){\:Count}
- \IF \EqInt(\:C,0) \THEN
- \:OneSegmentEdge
- \ELSE
- \Define\:Temp(1){
- \:LocByAddr\MoveToLoc(##1)\MarkLoc(temp:)}
-\:EdgePath(1,1){\:Temp}
-\MoveToLoc(EdgeBack) \MarkLoc(bk:)
-\MoveToLoc(temp:) \MarkLoc(fr:) \:BkArrowHead
- \IF \GtInt(\:C,1) \THEN
- \def\:temp##1&##2(&){\Table\:EdgePath{##2}}
- \:temp#1(&) \:EdgePath(1,99){\:InterEdge}
- \FI
- \MoveToLoc(EdgeFront) \MarkLoc(nxt:)
-\:EdgeCorner \:EdgeSegment
-\MoveToLoc(nxt':) \MarkLoc(bk:)
-\MoveToLoc(nxt:) \MarkLoc(fr:)
-\:FrArrowHead \:EdgeSegment
- \FI \def\EdgeLabel{\:PutLabel\:LineLbl} }\Define\:OneSegmentEdge{
- \MoveToLoc(EdgeBack) \MarkLoc(bk:)
- \MoveToLoc(EdgeFront) \MarkLoc(fr:)
- \:BkArrowHead \:FrArrowHead \:EdgeSegment }\Define\:InterEdge(1){
- \:LocByAddr\MoveToLoc(#1) \MarkLoc(nxt:)
- \:EdgeCorner \:EdgeSegment
- \MoveToLoc(nxt':) \MarkLoc(bk:)
- \MoveToLoc(nxt:) \MarkLoc(fr:)}
-
-\Define\:EdgeSegment{\MoveToLoc(bk:) \CSeg\:EdgeLine(bk:,fr:)}
-\Define\:SetEndCorner(2){ \MoveToLoc(fr':)
- \CSeg[0.5]\Move(fr':,#2) \MarkLoc(#1) \LSeg\Va(fr':,#1)
- \IF \GtDec(\Val\Va,10) \THEN
- \MoveToLoc(fr':) \DSeg\RotateTo(fr':,#2)
- \MoveF(10) \MarkLoc(#1)
- \FI
- \MoveToLoc(fr':) \CSeg[0.5]\Move(fr':,#1) \MarkLoc(#1 1)}
-\Define\CurvedEdgeAt(6){
- \MoveToNode(#1,#2,#3) \MarkLoc(1:) \MarkLoc(EdgeBack)
- \MoveToNode(#4,#5,#6) \MarkLoc(2:) \MarkLoc(EdgeFront)
- \:CurvedEdgeAtDir}
-
-\Define\:CurvedEdgeAtDir(4){
- \RotateTo(#3) \LSeg[#4]\MoveF(1:,2:)
- \MarkLoc(2':) \MoveToLoc(1:)
- \RotateTo(#1) \LSeg[#2]\MoveF(1:,2:)
- \MarkLoc(1':) \:InCrvEd }
-
-\Define\CurvedEdge(2){
- \DSeg\RotateTo(#1,#2) \Rotate(\:StartEdgeDir)
- \MoveToLoc(#1) \MoveF(50) \MarkLoc(1:)
- \MoveToNodeDir(#1,1:) \MarkLoc(EdgeBack)
- \MarkLoc(1:) \LSeg[\:StartEdgeTension]\MoveF(#2,#1)
- \MarkLoc(1':)
- \DSeg\RotateTo(#2,#1) \Rotate(\:EndEdgeDir)
- \MoveToLoc(#2) \MoveF(50) \MarkLoc(2:)
- \MoveToNodeDir(#2,2:) \MarkLoc(EdgeFront)
- \MarkLoc(2:) \LSeg[\:EndEdgeTension]\MoveF(#2,#1)
- \MarkLoc(2':) \:InCrvEd }\Define\:InCrvEd{
- \:BkCrvArrowHead\:FrCrvArrowHead
- \MoveToLoc(1:) \MarkLoc(EdgeBack')
- \MoveToLoc(1':) \MarkLoc(EdgeBack'')
- \MoveToLoc(2':) \MarkLoc(EdgeFront'')
- \MoveToLoc(2:) \MarkLoc(EdgeFront')
- \:EdgeCurve(1:,1':,2':,2:) \def\EdgeLabel{\:PutLabel\:CurveLbl} }
-
-\Define\CurvedEdgeSpec(4){
- \:edef\:StartEdgeDir{#1} \:edef\:StartEdgeTension{#2}
- \:edef\:EndEdgeDir{#3} \:edef\:EndEdgeTension{#4} }
-
-\CurvedEdgeSpec(10,0.2,-10,0.2)\Define\HVEdge(2){ \:XYEdge(#1,#2,1,) }
-\Define\VHEdge(2){ \:XYEdge(#1,#2,,1) } \Define\:XYEdge(4){
- \MoveToNode(#1,0,0) \MarkLoc(1:) \Move(#30,#40) \MarkLoc(1':)
-\MoveToNode(#2,0,0) \MarkLoc(2:) \Move(#40,#30) \MarkLoc(2':)
-\MoveToLL(1:,1':)(2:,2':)
- \MarkLoc(x:) \MarkLoc(bk:)
- \CSeg\:GetExit(1:,x:) \MoveToNode(#1,\Val\Va,\Val\Vb)
- \MarkLoc(EdgeBack)
- \CSeg\:GetExit(2:,x:) \MoveToNode(#2,\Val\Va,\Val\Vb)
- \MarkLoc(EdgeFront)
- \LSeg\Va(#1,EdgeBack) \LSeg\Vb(#1,x:)
-\IF \GtDec(\Vb,\Va) \THEN
- \LSeg\Va(#2,EdgeFront) \LSeg\Vb(#2,x:)
- \IF \GtDec(\Vb,\Va) \THEN \:Vc=1; \ELSE \:Vc=-1; \FI
-\ELSE \:Vc=-1; \FI
- \IF \GtDec(\:Vc,0) \THEN
- \MarkLoc(fr:) \:FrArrowHead
- \CSeg\:EdgeLine(fr:,bk:) \MarkLoc(fr:)
- \MoveToLoc(EdgeBack) \MarkLoc(bk:) \:BkArrowHead
- \CSeg\:EdgeLine(bk:,fr:)
- \def\EdgeLabel{\:PutLabel\:XYLbl}
- \ELSE \CSeg\:GetExit(#1,#2)
-\IF \LtDec(\Va,0) \THEN
- \Va=-\Va; \:Vc=-1; \ELSE \:Vc=1;
-\FI
-\IF \LtDec(\Vb,0) \THEN
- \Vb=-\Vb; \:Vd=-1; \ELSE \:Vd=1;
-\FI
-\IF \GtDec(\Va,\Vb) \THEN
- \:Vd=0; \:MarkMid(#1,#2) \HHEdge(#1,#2,A:)
-\ELSE \:Vc=0; \:MarkMid(#1,#2) \VVEdge(#1,#2,A:) \FI
- \FI }\Define\:MarkMid(2){
- \MoveToNode(#1,\Val\:Vc,\Val\:Vd) \MarkLoc(1:)
- \MoveToNode(#2,-\Val\:Vc,-\Val\:Vd) \MarkLoc(2:)
- \CSeg[0.5]\Move(2:,1:) \MarkLoc(A:)}
-\Define\VVEdge(3){ \:XXedge(#1,#2,#3,,1) }
-\Define\HHEdge(3){ \:XXedge(#1,#2,#3,1,) }\Define\:XXedge(5){
- \MoveToNode(#1,0,0) \MarkLoc(1:) \Move(#40,#50) \MarkLoc(1':)
- \MoveToNode(#2,0,0) \MarkLoc(2:) \Move(#40,#50) \MarkLoc(2':)
- \MoveToLoc(#3) \MarkLoc(3:) \Move(#50,#40) \MarkLoc(3':)
- \DSeg\Va(1:,3:) \IF \GtDec(\Va,179) \THEN \Va-180; \FI
-\DSeg\Vb(2:,3:) \IF \GtDec(\Vb,179) \THEN \Vb-180; \FI
-\IF \EqText(,#4) \THEN
- \IF \EqDec(\Va,0) \THEN \HVEdge(#1,#2)
- \ELSE \IF \EqDec(\Vb,0) \THEN \VHEdge(#1,#2)
- \ELSE \::XXEdge(#1,#2) \FI\FI
-\ELSE
- \IF \EqDec(\Va,90) \THEN \VHEdge(#1,#2)
- \ELSE \IF \EqDec(\Vb,90) \THEN \HVEdge(#1,#2)
- \ELSE \::XXEdge(#1,#2) \FI\FI
-\FI}
-
-\Define\::XXEdge(2){
- \MoveToLL(2:,2':)(3:,3':) \MarkLoc(y:)
- \MoveToLL(1:,1':)(3:,3':) \MarkLoc(x:) \MarkLoc(fr:)
- \CSeg\:GetExit(1:,x:) \MoveToNode(#1,\Val\Va,\Val\Vb)
- \MarkLoc(EdgeBack) \MarkLoc(bk:) \:BkArrowHead
- \CSeg\:EdgeLine(bk:,fr:)
- \CSeg\:EdgeLine(x:,y:) \MarkLoc(bk:)
- \CSeg\:GetExit(2:,y:) \MoveToNode(#2,\Val\Va,\Val\Vb)
- \MarkLoc(EdgeFront) \MarkLoc(fr:) \:FrArrowHead
- \CSeg\:EdgeLine(fr:,bk:)
- \def\EdgeLabel{\:PutLabel\:XXLbl} } \Define\CycleEdge(1){
- \MoveToNode(#1,0,0) \MarkLoc(o:) \MoveF(10)
- \MarkLoc(oo:) \Rotate(\:CrvEdgeDir) \MoveF(10)
- \MarkLoc(1':) \CSeg\:GetExit(oo:,1':)
- \MoveToNode(#1,\Val\Va,\Val\Vb) \MarkLoc(EdgeBack)
- \MarkLoc(1:) \MoveF(\:CrvEdgeTension)
- \MarkLoc(1':) \DSeg\RotateTo(o:,oo:)
- \MoveToLoc(o:) \Rotate(-\:CrvEdgeDir) \MoveF(10)
- \MarkLoc(2':) \CSeg\:GetExit(o:,2':)
- \MoveToNode(#1,\Val\Va,\Val\Vb) \MarkLoc(EdgeFront)
- \MarkLoc(2:) \MoveF(\:CrvEdgeTension)
- \MarkLoc(2':) \:InCrvEd \:EdgeCurve(1:,1':,2':,2:) }
-
-\Define\CycleEdgeSpec(2){
- \:edef\:CrvEdgeDir{#1} \:edef\:CrvEdgeTension{#2}}
-
-\CycleEdgeSpec(30,20)\EdgeSpec(LTS) \Define\TransEdge(4){
- \IF \EqText(,#3) \THEN
- \IF \EqText(,#4) \THEN
- \Edge(#1,#2)
- \ELSE \Edge(#2,#1)
- \EdgeLabel(--#4--) \relax \FI
- \ELSE \IF \EqText(,#4) \THEN
- \Edge(#1,#2) \EdgeLabel(--#3--)\relax
- \ELSE \IF \EqText(#1,#2) \THEN
- \RotateTo(#3) \CycleEdge(#1)
- \EdgeLabel(--#4--)\relax
- \ELSE \CurvedEdge(#1,#2)
- \EdgeLabel(--#3--) \relax \CurvedEdge(#2,#1)
- \EdgeLabel(--#4--) \relax \FI \FI \FI }
-\:DefineExt\:DiagEg(1){\endgroup
- \IF \EqText(,#1) \THEN \ELSE
- \Define\:DiagramEdge{#1}
- \FI }\Define\GridEdge(2){
- \LSeg\Va(#1,#2)
- \IF \EqDec(\Va,0) \THEN \:aldwarn2{#2} \FI
- \MoveToNode(#1,0,1) \MarkLoc(1:)
-\MoveToNode(#2,0,-1) \MarkLoc(2:) \CSeg\:GetXY(1:,2:)
-\IF \GtDec(\Vb,-0.1) \THEN
- \MoveToNode(#1,1,0) \MarkLoc(1:)
- \MoveToNode(#2,-1,0) \MarkLoc(2:) \CSeg\:GetXY(1:,2:)
- \IF \GtDec(\Va,-0.1) \THEN \EdgeAt(#1,1,1,#2,-1,-1)
- \ELSE
- \MoveToNode(#1,-1,0) \MarkLoc(1:)
- \MoveToNode(#2,1,0) \MarkLoc(2:) \CSeg\:GetXY(1:,2:)
- \IF \LtDec(\Va,0.1) \THEN \EdgeAt(#1,-1,1,#2,1,-1)
- \ELSE \EdgeAt(#1,0,1,#2,0,-1)
- \FI \FI
- \ELSE \MoveToNode(#1,0,-1) \MarkLoc(1:)
-\MoveToNode(#2,0,1) \MarkLoc(2:) \CSeg\:GetXY(1:,2:)
-\IF \LtDec(\Vb,0.1) \THEN
- \MoveToNode(#1,1,0) \MarkLoc(1:)
- \MoveToNode(#2,-1,0) \MarkLoc(2:) \CSeg\:GetXY(1:,2:)
- \IF \GtDec(\Va,-0.1) \THEN \EdgeAt(#1,1,-1,#2,-1,1)
- \ELSE
- \MoveToNode(#1,-1,0) \MarkLoc(1:)
- \MoveToNode(#2,1,0) \MarkLoc(2:) \CSeg\:GetXY(1:,2:)
- \IF \LtDec(\Va,0.1) \THEN \EdgeAt(#1,-1,-1,#2,1,1)
- \ELSE \EdgeAt(#1,0,-1,#2,0,1)
- \FI\FI
- \ELSE \IF \GtDec(\Va,0) \THEN \EdgeAt(#1,1,0,#2,-1,0)
-\ELSE \EdgeAt(#1,-1,0,#2,1,0) \FI
- \FI\FI} \Define\EdgeToNode(1){{\:EdgeNode(#1)}}
-
-\Define\::EdgeNode(1){ \let&=\relax
- \xdef\:ednd{\:ednd&\Val\:C..\Val\:Ca,#1} }
-
-\Define\::CurrEdge(2){ \:C+1;
- \IF \EqInt(\:C,2) \THEN
- \:CurrEdge(#1,#2) \:C=0;
- \FI }
-
- \fi
- \:CheckOption{diagram}\if:option
- \Define\:Temp{
-\def\:PutLabel##1{
- \Define\:Lbl{\def\:Temp{\noexpand##1}
- \begingroup \:DraCatCodes \:GetLbl}
- \edef\:Temp{\noexpand\:Opt[]
- \noexpand\:Lbl\noexpand{\:LblAdj\noexpand}}
- \:Temp}
-
-\def\:GetLbl[##1]{\endgroup
- \IF \EqText(+,##1) \THEN
- \edef\:Temp{\:Temp[+\:LblAdj]}
- \ELSE \edef\:Temp{\:Temp[##1]} \FI
- \:Temp }
- }\:Temp\Define\:PutLbl(1){
- \MarkLoc(1:) \XSaveUnits \Units(1pt,1pt)
- \MoveF(\:LblDis) \XRecallUnits
- \IF \EqText(,#1) \THEN \ELSE \:AdjLbl(#1)
- \FI \MarkLoc(2:) \CSeg\:GetExit(1:,2:)
- \EntryExit(-\Val\Va,-\Val\Vb,0,0) \:EdgeLabel }
-
-\def\:AdjLbl(#1;#2){\Move(#1,#2)}\Define\LabelPos(2){
- \def\:LblAdj{#1} \def\:LblDis{#2} }
-\LabelPos(0.5;,3) \Define\:Temp{
-\def\:LineLbl[##1##2;##3]{
- \MoveToLoc(EdgeBack) \MarkLoc(a:)
- \MoveToLoc(EdgeFront) \MarkLoc(b:)
- \DSeg\RotateTo(a:,b:)
- \:C=-1; \:EdgePath(0,99){\:Count}
-\IF \EqInt(\:C,1) \THEN
- \:EdgePath(1,1){\:LocByAddr\MoveToLoc}
- \MarkLoc(a:) \MarkLoc(b:)
-\ELSE \IF \GtInt(\:C,1) \THEN
- \:C/2; \:EdgePath(\Val\:C,\Val\:C){\:LocByAddr\MoveToLoc}
- \MarkLoc(a:)
- \:C+1; \:EdgePath(\Val\:C,\Val\:C){\:LocByAddr\MoveToLoc}
- \MarkLoc(b:)
- \DSeg\RotateTo(a:,b:)
-\FI \FI
- \MoveToLoc(a:)
- \IF \EqText(+,##1) \THEN \Rotate(-90)
- \CSeg[##2]\Move(a:,b:)
- \ELSE \Rotate(90)
- \CSeg[##1##2]\Move(a:,b:)
- \FI
- \:PutLbl(##3) }
- }\:Temp \Define\:Temp{
-\def\:CurveLbl[##1##2;##3]{
- \MoveToLoc(EdgeBack') \MarkLoc(a:)
- \MoveToLoc(EdgeBack'') \MarkLoc(A:)
- \MoveToLoc(EdgeFront'') \MarkLoc(B:)
- \MoveToLoc(EdgeFront') \MarkLoc(b:)
- \DSeg\RotateTo(a:,b:)
- \IF \EqText(+,##1) \THEN
- \Rotate(-90)
- \ELSE
- \Rotate(90)
- \FI
- \MoveToCurve[##2](a:,A:,B:,b:) \:PutLbl(##3) } }\:Temp
- \Define\:Temp{
-\def\:XYLbl[##1##2;##3]{
- \IF \EqText(+,##1) \THEN \Vb=-1; \Va=##2;
- \ELSE \Vb= 1; \Va=##1##2;
- \FI
- \MoveToLoc(x:)
- \IF \LtDec(\Va,0.5) \THEN
- \MarkLoc(b:) \MoveToLoc(EdgeBack) \MarkLoc(a:)
- \DSeg[\Val\Vb]\RotateTo(EdgeFront,x:)
- \ELSE
- \MarkLoc(a:) \Va-0.5;
- \MoveToLoc(EdgeFront) \MarkLoc(b:)
- \DSeg[\Val\Vb]\RotateTo(EdgeBack,x:)
- \FI
- \Va*2;
- \MoveToLoc(a:) \CSeg[\Val\Va]\Move(a:,b:)
- \:PutLbl(##3) }
- }\:Temp \Define\:Temp{
-\def\:XXLbl[##1##2;##3]{
- \LSeg\Va(x:,y:)
-\IF \LtDec(\Va,0.01) \THEN
- \MoveToLoc(x:)
- \DSeg\RotateTo(EdgeBack,EdgeFront)
- \MoveF(0.1pt\du) \MarkLoc(y:)
-\FI
- \IF \EqText(+,##1) \THEN
- \Vb=-90; \Va=##2;
- \ELSE
- \Vb=90; \Va=##1##2;
- \FI
- \IF \LtDec(\Va,0.333) \THEN
- \MoveToLoc(x:) \MarkLoc(b:)
- \MoveToLoc(EdgeBack) \MarkLoc(a:)
- \ELSE \IF \LtDec(\Va,0.666) \THEN
- \MoveToLoc(x:) \MarkLoc(a:)
- \MoveToLoc(y:) \MarkLoc(b:) \Va-0.3333;
- \ELSE
- \MoveToLoc(y:) \MarkLoc(a:)
- \MoveToLoc(EdgeFront) \MarkLoc(b:) \Va-0.666;
- \FI \FI
- \Va*3;
- \DSeg\RotateTo(a:,b:) \Rotate(\Val\Vb)
- \MoveToLoc(a:) \CSeg[\Val\Va]\Move(a:,b:)
- \:PutLbl(##3) }
- }\:Temp \Define\LabelSpec{
- \TextPar\Define\:EdgeLabel }
-\def\PictLabel#1{\Object\:Temp{#1}\:Temp}
-\LabelSpec(1){\Text(--#1--)}
-\fi
-\:CheckOption{spread}\if:option
- \:DefineExt\DiagramSpec(1){\endgroup
- \:C=0; \let\:Next=\:DiagNodes \:Next#1&&
- \Indirect\let<DiagNod:\Val\:C>=\relax }
-
- \Define\:Temp{
-\def\:DiagNodes##1&{
- \def\:Temp{##1}
- \ifx \:Temp\empty \let\:Next=\relax
- \else
- \:tk={##1} \:Ca=\:C; \:C+1;
- \edef\:Temp{\noexpand\:AddDiagNodes
- (\Val\:C,\Val\:Ca,\the\:tk)} \:Temp
- \fi \:Next }
- }\:Temp
-
-\Define\:AddDiagNodes(3){
- \Indirect\def<DiagNod:#2>{\begingroup\:Spaces
- \:DiagNds(#1,#3)}}
-
- \Define\:Temp{
-\def\:DiagNds(##1,##2)(##3){\endgroup
- \Table\:Temp{##3} \:SetDiaNodes##2
- \Indirect<DiagNod:##1>}
- }\:Temp \Define\Diagram{ \Indirect<DiagNod:0> }
-
-\def\:SetDiaNodes#1{\:Temp(0,999){#1}}
-\DiagramSpec(\DiagramNode&\Edge)
-\Define\DiagramNode(4){ \MoveTo(#2,#3) \Node(#1)(--#4--) }
-\fi
-\:CheckOption{grid}\if:option
- \:DefineExt\GridDiagramSpec(1){\endgroup
- \IF \EqText(,#1) \THEN \ELSE
- \:CheckSpecTyp(#1,&)
- \IF \:Temp \THEN \Table\:PolyShapes{u,\noexpand#1}
-\Define\:ShapeTyp{u,}
- \ELSE \Define\:ShapeTyp{}
-\:SetPolyNodes#1&,& \let\:Temp=\:PolyShapes
-\Table\:PolyShapes{\:Temp} \FI
- \FI
- \:DiagEg }\Define\:CheckSpecTyp(2){
- \IF \EqText(#2,&) \THEN \def\:Temp{\EqInt(1,1)}
- \ELSE \def\:Temp{\EqInt(1,2)}
- \FI }\GridDiagramSpec(\Node)(\GridEdge)
- \Define\:Temp{
-\def\:SetPolyNodes##1,##2&{
- \Define\:PolyShapes{##1,\noexpand##2}
- \:MorePolyNodes } }\:Temp
-
-\Define\:MorePolyNodes{
- \def\:Temp{\Define\:PolyShapes}
- \Define\:Next{\:GetPolyNodes} \:Next }
-
- \Define\:Temp{
-\def\:GetPolyNodes##1,##2&{
- \IF \EqText(,##1) \THEN \Define\:Next{}
- \ELSE
- \expandafter\expandafter\expandafter\:Temp\expandafter{
- \:PolyShapes & ##1,\noexpand##2 }
- \FI \:Next}} \:Temp
-\Define\GridSpace(2){
- \:edef\:VGridSp{#2} \:edef\:HGridSp{#1}}
-\GridSpace(20,20)\Define\AlignGrid(2){
- \def\:XGridEntry{#1} \def\:YGridEntry{#2}}
-\AlignGrid(0,0)
-
-\Define\GridDiagram(2){ \MarkLoc(GridOrg)
- \IF \LtInt(#1,2) \:aldwarn{11}{#1,#2} \THEN \FI
- \IF \LtInt(#2,2) \:aldwarn{11}{#1,#2} \THEN \FI
- \EntryExit(\:XGridEntry,\:YGridEntry,0,0)
- \Do(0,#1){ \:C=\DoReg; \Indirect\DecVar<y.\Val\:C> }
- \Do(0,#2){ \:C=\DoReg; \Indirect\DecVar<x.\Val\:C> }
- \Define\:Nrows{#1} \Define\:Ncols{#2}
- \:VGridSpace }
- \Define\:VGridSpace(1){
- \IF \EqText(,#1) \THEN
- \Define\:Temp{\:VGridSp,0,1000}
- \ELSE \Define\:Temp{#1} \FI
- \Table\:VerAdj{\:Temp}
- \:C=0; \:VerAdj(0,99){\:Count}
- \IF \LtInt(\:C,\:Nrows) \THEN
- \:C=-\:C; \:C+\:Nrows; \:C-1;
-\IF \LtInt(\Val\:C,\:Nrows) \THEN
- \def\:tempA{\def\:Temp}
- \IF \GtInt(\Val\:C,0) \THEN
- \Do(1,\Val\:C){ \expandafter\expandafter
- \expandafter\:tempA\expandafter{
- \:Temp & \:VGridSp,0,1000}}
- \FI
- \Table\:VerAdj{\:Temp}
-\FI
- \ELSE \IF \GtInt(\:Nrows,1) \THEN
- { \def&{\string&}\:aldwarn4{#1} }
- \FI \FI
- \:HGridSpace}
- \Define\:HGridSpace(1){
- \IF \EqText(,#1) \THEN
- \Define\:Temp{\:HGridSp,0,1000}
- \ELSE \Define\:Temp{#1} \FI
- \Table\:HorAdj{\:Temp}
- \:C=0; \:HorAdj(0,99){\:Count}
- \IF \LtInt(\:C,\:Ncols) \THEN
- \:C=-\:C; \:C+\:Ncols; \:C-1;
-\IF \LtInt(\:C,\:Ncols) \THEN
- \def\:tempA{\def\:Temp}
- \IF \GtInt(\:C,0) \THEN
- \Do(1,\Val\:C){ \expandafter\expandafter
- \expandafter\:tempA\expandafter{
- \:Temp & \:HGridSp,0,1000}}
- \FI
- \Table\:HorAdj{\:Temp}
-\FI
- \ELSE \IF \GtInt(\:Ncols,1) \THEN
- { \def&{\string&}\:aldwarn4{#1} }
- \FI \FI
- \:GridEntries}
-
- \Define\:GridEntries{\begingroup \:Spaces \::GridEntries}
-
-\Define\::GridEntries(1){\endgroup
- \:bgDiTags
- \:C=0; \Define\:Next{\:C+1;\:GetGridRows} \:Next#1//
- \Do(1,\:Nrows){\:C=\DoReg; \:Ca=0;
- \Indirect<row.\Val\:C>(0,99){\:Ca+1;
- \IF \GtInt(\Val\:C,\:Nrows) \THEN \:aldwarn5{} \FI
- \IF \GtInt(\Val\:Ca,\:Ncols) \THEN \:aldwarn6{} \FI
- \:GetEntrySize}}
- \IF \GtInt(\:Nrows,1) \THEN
- \Do(2,\:Nrows){ \:C=\DoReg;
- \Indirect{\Va=-}<y.\Val\:C>; \:C-1;
- \Indirect{\Va+}<y.\Val\:C>;
- \Va*\:YGridEntry; \:C+1;
- \Indirect{\Va+}<y.\Val\:C>; \:C-1;
- \Indirect<y.\Val\:C>+\Va; }
-\:C=0; \:VerAdj(0,99){\:C+1; \:AdjGridHeight}
-\Do(2,\:Nrows){ \:C=\DoReg; \:C-1;
- \Indirect{\Va=}<y.\Val\:C>; \:C+1;
- \Indirect<y.\Val\:C>+\Va; } \FI
-\IF \GtInt(\:Ncols,1) \THEN
- \Do(2,\:Ncols){ \:C=\DoReg;
- \Indirect{\Va=+}<x.\Val\:C>; \:C-1;
- \Indirect{\Va-}<x.\Val\:C>;
- \Va*\:XGridEntry; \:C+1;
- \Indirect{\Va+}<x.\Val\:C>; \:C-1;
- \Indirect<x.\Val\:C>+\Va; }
-\:C=0; \:HorAdj(0,99){\:C+1; \:AdjGridWidth}
-\Do(2,\:Ncols){ \:C=\DoReg; \:C-1;
- \Indirect{\Va=}<x.\Val\:C>; \:C+1;
- \Indirect<x.\Val\:C>+\Va; } \FI
-\Do(1,\:Nrows){ \:C=\DoReg;
- \Indirect{\Indirect<y.\Val\:C>=-}<y.\Val\:C>; }
- \let\:TagNode=\::TagNode
-\let\:EdgeNode=\::EdgeNode
-
-\Do(1,\:Nrows){ \:C=\DoReg;
- \Do(1,\:Ncols){ \:Ca=\DoReg;
- \Indirect<\Val\:C..\Val\:Ca>}}
- \Do(1,\:Nrows){ \:C=\DoReg;
- \Do(1,\:Ncols){ \:Ca=\DoReg;
- \Indirect\let<\Val\:C..\Val\:Ca>=\:undefined}}
- \Table\:PolyBaseEdges{\:BaseEdges}
-\:C=-1; \:PolyBaseEdges(0,1){\:Count}
-\IF \EqInt(\:C,1) \THEN
- \:PolyBaseEdges(1,999){\:InsertBaseEdge}
-\FI
- \let\:CurrEdge=\:DiagramEdge
-\:endDiTags }
- \Define\:Temp{
-\def\:GetGridRows##1//{
- \IF \EqText(,##1) \THEN \let\:Next=\relax
- \ELSE {\:C-1; \:TrcDiag{\immediate\write16{...read\space
- row\space \Val\:C}}}
- \def\Defend{\noexpand\noexpand\noexpand}
-\def\:Comma{,} \let\:CsCom=\,
-\def\,{\noexpand\:Comma}
-\let\:Temp=& \def&{\:Temp\:ShapeTyp}
-
- \Indirect\Table<row.\Val\:C>{\:ShapeTyp##1}
- \let\Defend=\noexpand\let&=\:Temp
- \FI \:Next } }\:Temp\Define\:GetEntrySize(1){
- \IF \EqText(,#1) \THEN \ELSE
- \:TrcDiag{{ \:C-1; \:Ca-1; \:tk={#1}
- \immediate\write16{\Val\:C..\Val\:Ca\space\space\the\:tk}}}
- \:GetEntrySizeA(#1,) \FI }\Define\:GetEntrySizeA(3){
- \def\:Temp{\:tk=} \:AddBaseEdges(#3)
- \:PolyShapes(0,99){\:GetEntrySizeB(#1,#2)}} \Define\:Temp{
-\def\:GetEntrySizeB(##1,##2)(##3,##4){
- \IF \EqText(,##2) \THEN \ELSE
- \IF \EqText(##1,##3) \THEN
- \Indirect\Define<\Val\:C..\Val\:Ca>{
- \:AddGridNode(##4,##2)}
- \let\:SvWg=~ \let~=\relax
- \edef\:Temp{\noexpand##4(.;)(--##2--)}
- \let~=\:SvWg
- \FigSize\Va\Vb{\:Temp} \Va/2; \Vb/2;
- \Indirect{\:Ve=}<x.\Val\:Ca>;
- \IF \GtDec(\Va,\:Ve) \THEN
- \Indirect<x.\Val\:Ca>=\Va; \FI
- \Indirect{\:Ve=}<y.\Val\:C>;
- \IF \GtDec(\Vb,\:Ve) \THEN
- \Indirect<y.\Val\:C>=\Vb;
- \FI \FI \FI }} \:Temp \Define\:AddGridNode(2){
- \:C-1; \:Ca-1; \MoveToGrid(\Val\:C,\Val\:Ca)
- \let\:SvWg=~\let~=\relax
- \edef\:Temp{ \noexpand #1(\Val\:C..\Val\:Ca)(--#2--) }
- \let~=\:SvWg
- \:Temp \:C+1; }\Define\MoveToGrid(2){
- \IF \LtInt(#1,0) \THEN \:aldwarn3{(#1,#2)} \FI
- \IF \LtInt(#2,0) \THEN \:aldwarn3{(#1,#2)} \FI
- \IF \GtInt(#1,\:Nrows) \THEN \:aldwarn3{(#1,#2)} \FI
- \IF \GtInt(#2,\:Ncols) \THEN \:aldwarn3{(#1,#2)} \FI
- \Indirect{\Va=}<x.#2>;
- \Indirect{\Vb=}<y.#1>;
- \MoveToLoc(GridOrg)
- \Move(\Val\Va pt\du,\Val\Vb pt\du) }
-\Define\:AddBaseEdges(1){
- \IF \EqText(,#1) \THEN \def\:Next{}
- \ELSE
- \:AddBaseEdgesB(#1)
- \FI \:Next}
-
-\Define\:AddBaseEdgesB(2){
- \expandafter\expandafter\expandafter\:Temp
- \expandafter{\:BaseEdges &}
- \edef\:BaseEdges{ \the\:tk \Val\:C,\Val\:Ca,#1 }
- \def\:Next{\:AddBaseEdges(#2)}}
-
-\Define\:BaseEdges{0,0,0,0}\Define\:AdjGridWidth(3){
- \Indirect{\Va=}<x.\Val\:C>; \Va+#1;
- \IF \LtDec(\Va,#2) \THEN \Va=#2; \ELSE
- \IF \GtDec(\Va,#3) \THEN \Va=#3; \FI \FI
- \Indirect<x.\Val\:C>=\Va; }\Define\:AdjGridHeight(3){
- \Indirect{\Va=}<y.\Val\:C>; \Va+#1;
- \IF \LtDec(\Va,#2) \THEN \Va=#2; \ELSE
- \IF \GtDec(\Va,#3) \THEN \Va=#3; \FI \FI
- \Indirect<y.\Val\:C>=\Va; }\Define\:InsertBaseEdge(3){
- \:C=#1; \:Ca=#2; \:TargetNode(#3,)
-\IF \EqInt(\:C,1) \THEN \:GetGridLbl(#3) \FI
-\:C=#1; \:Ca=#2;
-\expandafter\:GetTarget\:Temp..
- \:C=#1; \:C-1; \:Ca=#2; \:Ca-1;
- \edef\:Temp{\noexpand\:DiagramEdge(\Val\:C..\Val\:Ca,\:Temp\the\:tk)}
- \:Temp} \Define\:TargetNode(2){
- \def\:Temp{#1}
- \IF \EqText(,#2) \THEN \:C=0; \:tk={}
- \ELSE \:C=1; \FI }
-
-\Define\:GetGridLbl(2){ \:tk={,#2} } \Define\:Temp{
-\def\:GetTarget##1##2..##3##4..{
- \:C-1; \:Ca-1; \edef\:tempa{\Val\:C..\Val\:Ca}
- \IF \EqText(+,##1) \THEN
- \:C+##2; \:Ca##3##4; \edef\:Temp{\Val\:C..\Val\:Ca}
- \ELSE\IF \EqText(-,##1) \THEN
- \:C-##2; \:Ca##3##4; \edef\:Temp{\Val\:C..\Val\:Ca}
- \ELSE \def\:Temp{##1##2..##3##4} \FI\FI
- \:TrcDiag{\immediate\write16{\:tempa-->\:Temp}} }
- }\:Temp
-\fi
-\:CheckOption{tree}\if:option
- \Define\:MoveH(2){
- \ifx H\:TreeDir \Move(0,-#2)
- \else \Move(#1,0) \fi }
-
-\Define\:MoveV(2){
- \ifx H\:TreeDir \Move(#1,0)
- \else \Move(0,#2) \fi }
-
-\Define\:MoveHV(2){
- \ifx H\:TreeDir \Move(0,#2)
- \else \Move(#1,0) \fi }
-
-\Define\:DistH(2){
- \ifx H\:TreeDir \Va=#2; \else \Va=#1; \fi}
-\def\:oochild{0} \Define\:MoveLFr(2){
- \ifx H\:TreeDir \MoveToNode(#2,0,-1) \else \MoveToNode(#2,1,0) \fi}
-\Define\:FrDs(2){ \MoveToLoc(:a) \MarkLoc(:a')
- \if H\:TreeDir\relax \MoveToNode(#2,0,-1)
- \else \MoveToNode(#2,1,0) \fi
- \MarkLoc(:a)
- \:tempb(\DoReg,\DoReg){\:MoveRFr}
- \CSeg\:AddX(:a,:a') \CSeg\:AddX(:b',:b)
- \ifx H\:TreeDir
- \IF \GtDec(\:va,0) \THEN \:vb-\:va; \:va=0; \FI
-\else
- \IF \LtDec(\:vb,0) \THEN \:va-\:vb; \:vb=0; \FI
-\fi
- }
-
-\Define\:MoveRFr(2){
- \MoveToLoc(:b) \MarkLoc(:b')
- \ifx H\:TreeDir \MoveToNode(#1,0,1) \else \MoveToNode(#1,-1,0) \fi
- \MarkLoc(:b) }
-\Define\:AddX(2){ \ifx H\:TreeDir \:va+#2; \else \:vb+#1; \fi }
-\Define\:Temp{ \let\:aprsnd=& }
-\:Temp \Define\:left(2){ \def\:frL{#1}}
-\Define\:right(2){ \let&=\relax
- \edef\:frL{\:frL,#2} \let&=\:aprsnd }
-\Define\:copy(1){ \let&=\relax
- \edef\:frL{\:frL & #1} \let&=\:aprsnd }
-
-\Define\:addleft(2){ \let&=\relax
- \edef\:frL{\:frL&#1} \let&=\:aprsnd}
-
-\Define\:both(1){
- \IF \GtInt(#1,0) \THEN
- \Do(1,#1){
- \:tempa(\DoReg,\DoReg){\:addleft}
- \:tempb(\DoReg,\DoReg){\:right} }
- \FI }
- \:DefineExt\TreeSpec(1){\endgroup
- \IF \EqText(,#1) \THEN \ELSE
- \:TrNodes#1&&\let \:LeafNode=\:TreeNode
- \FI \:DecideLeafNode }
-
-\def\:Temp{\catcode`\ =10 \catcode`\^^M=5 \catcode`\&=4 }
-\catcode`\ =9 \catcode`\^^M=9 \catcode`\&=13
-\def\:TrNodes#1&#2&{
- \IF \EqText(,#2) \THEN
- \Define\:TreeNode(2){#1(##1)(--##2--)}
- \let\:Next=\relax
- \ELSE
- \Define\:TreeNode{
- \expandafter\:CondTreeNode\:pars(#1)
- \expandafter\:CondTreeNode\:pars(#2) }
- \def\:tempa{ \Define\:TreeNode }
- \let\:Next=\:DecideTreeNodes
- \FI \:Next}
-
-\def\:DecideTreeNodes#1&{
- \IF \EqText(,#1) \THEN \let\:Next=\relax
- \def\:tempa{\Define\:TrNd}
- \expandafter\expandafter\expandafter
- \:tempa\expandafter{ \:TreeNode \:Temp }
- \def\:TreeNode(##1,##2){
- \def\:pars{(##1)(##2)} \:TrNd}
- \ELSE
- \expandafter\expandafter\expandafter
- \:tempa\expandafter{ \:TreeNode
- \expandafter\:CondTreeNode\:pars(#1)}
- \FI \:Next}
- \:Temp
-
- \Define\:Temp{
-\def\:CondTreeNode(##1)(##2,##3)(##4,##5){
- \IF \EqText(##2,##4) \THEN
- \def\:Temp{##5(##1)(--##3--)}
- \FI}
- }\:Temp\:DefineExt\:DecideLeafNode(1){\endgroup
- \IF \EqText(,#1) \THEN \ELSE
- \Define\:LeafNode(2){#1(##1)(--##2--)}
- \FI
- \:DecideTreeEdge}\:DefineExt\:DecideTreeEdge(1){\endgroup
- \IF \EqText(,#1) \THEN \ELSE
- \Define\:TreeEdge(2){
- \Indirect{\let\:Temp=} <##2.mvto>
- \ifx \:Temp\:ChkInv \else
- \:TrcDiag{\immediate\write16{##1,##2}}
- \ifx H\:TreeDir \MoveToNode(##1,\:EntryX,0)
- \else \MoveToNode(##1,0,\:EntryY) \fi
- \:MvToDivider##1.. \MarkLoc(EdgeGuide)
- #1(##1,##2)
- \fi }
- \FI} \Define\Tree(1){
- \Define\:PolyVerTreeSp{#1}
- \Define\:BareTr(1){,##1}
- \begingroup \:Spaces \:Tree }
-
-\Define\LTree(1){
- \Define\:PolyVerTreeSp{#1} \:LTree }
-
-\catcode`\#=13
-\Define\:LTree{\def#{\Defend&} \let\-=# \let\:BareTr=\relax
- \begingroup \catcode`\#=13 \:Spaces \:Tree }
-\catcode`\#=6
-
-\Define\:Tree(1){\endgroup
- \:bgDiTags
- \let\:MergTree=\relax
-\ifx \:Cspace\:InInx \let\:MergTree=\::MergTree \fi
-\:TrSp(0,99){\:copt}
- \ifx H\:TreeDir \let\:tempc=\Va
- \def\:TreeEnEx{\EntryExit(\:EntryX,\:EntryY,0,0)}
-\else \let\:tempc=\Vb
- \def\:TreeEnEx{\EntryExit(\:EntryX,\:EntryY,0,0)} \fi
-\:C=-1;
- \let\:Next=\:GetTreeRows \:Next#1//
- \Do(1,\Val\:C){ \:Ca=\DoReg;
- \Indirect{\Va=-}<y.\Val\:Ca>; \:Ca-1;
- \Indirect\DecVar<x.\Val\:Ca>
-\ifx H\:TreeDir \Indirect<x.\Val\:Ca>=-\:EntryX;
-\else \Indirect<x.\Val\:Ca>=\:EntryY; \fi
-\Indirect<x.\Val\:Ca>+1;
-\Indirect{\Indirect<x.\Val\:Ca>*}<y.\Val\:Ca>;
-\Indirect<x.\Val\:Ca>/2;
- \Indirect{\Va+}<y.\Val\:Ca>;
- \ifx H\:TreeDir \Va*-\:EntryX;
- \else \Va*\:EntryY; \fi
- \:Ca+1; \Indirect{\Va+}<y.\Val\:Ca>; \:Ca-1;
- \Indirect<y.\Val\:Ca>+\Va;
- \Indirect<y.\Val\:Ca>/2;}\:Ca=-1;
-\ifx \:PolyVerTreeSp\empty \else
- \let\:tempa=\:PolyVerTreeSp
- \Table\:PolyVerTreeSp{\:tempa}
- \:PolyVerTreeSp(0,99){\:AddVerTreeSp}
-\fi
-\:Cb=\:Ca; \:Cb+1;
-\IF \GtInt(\:C,\:Cb) \THEN
- \:Cb+1;
- \Do(\Val\:Cb,\Val\:C){\:AddVerTreeSp(\:VerTreeSp)}
-\ELSE \IF \GtInt(\:Cb,\:C) \THEN
- \:aldwarn1{}\FI\FI
-
- \Indirect{\let\:va=}<x.0>
-\Indirect{\let\:vb=}<y.0>
- \let\:TagNode=\::TagNode
-\let\:EdgeNode=\::EdgeNode
-
-\Do(0,\Val\:C){ \:Ca=-1; \:Cb=-1;
- \Indirect<row.\DoReg>(0,99){
- \:Ca+1; \:DefSubTree} }
-\gdef\:GetNodesAddr{} \:AddrCount=1;
-\Indirect<0..0> \global\let\:GetNodesAddr=\:undefined
- \ifx \:BareTr\relax \let\:EnterTreeEdge=\:::EnterTreeEdge
-\else \let\:EnterTreeEdge=\::EnterTreeEdge \fi
-\:C-1;
-\Do(0,\Val\:C){ \:C=\DoReg; \:Ca=-1; \:Cb=\DoReg; \:Cb+1; \:Cc=-1;
- \Indirect<row.\DoReg>(0,99){
- \:Ca+1; \:EnterTreeEdge} }
- \let\:CurrEdge=\:TreeEdge
-\let\:tempa=\:MvToDivider
-\def\:MvToDivider##1..##2..{\Move(0.001pt\du,0.001pt\du)}
-\:endDiTags \let\:MvToDivider=\:tempa
- \let\-=\:svneg }
-
-\let\:svneg=\- \Define\:Temp{
-\def\:GetTreeRows##1//{
- \def\:Temp{##1}
- \ifx \:Temp\empty \let\:Next=\relax \else
- \:C+1;
- \ifx \:BareTr\relax \else
- \TableData\:Temp\:BareTr{##1}
- \fi
- \Indirect\Table<row.\Val\:C>{\:Temp}
- \def\:tempa{} \:Vc=0;
-\def\:tempb{\:tk=} \:Ca=-1;
-\Indirect<row.\Val\:C>(0,99){\:Ca+1; \:MeasureRow}
-\Indirect\DecVar<y.\Val\:C>
-\Indirect<y.\Val\:C>=\:Vc;
- \fi \:Next}
- }\:Temp\Define\::EnterTreeEdge(3){
- \IF \GtInt(#2,0) \THEN
- \Do(1,#2){ \:Cc+1;
- \edef\:temp{\noexpand\:TreeEdge
- (\Val\:C..\Val\:Ca,\Val\:Cb..\Val\:Cc)
- \noexpand\:C=\Val\:C; \noexpand\:Ca=\Val\:Ca;}
- \:temp }
- \FI }\Define\:::EnterTreeEdge(3){
- \edef\:temp{\:tk={\noexpand\:C=\Val\:C;
- \noexpand\:Ca=\Val\:Ca;}} \:temp
- \IF \GtInt(#2,0) \THEN
- \Table\:BareTr{#1}
- \:BareTr(0,99){ \:Cc+1; \the\:tk
- \edef\:temp{\noexpand\:TreeEdgePos
- (\Val\:C..\Val\:Ca,\Val\:Cb..\Val\:Cc) }
- \:temp \:TreeLabel }
- \FI \the\:tk }
-
-\Define\:TreeEdgePos(2){ \:TreeEdge(#1,#2) \LTreePos(#1,#2) }
-
-\Define\:TreeLabel(1){ \EdgeLabel(--#1--) }
-\Define\LTreePos(2){ \DSeg\Va(#1,#2)
- \IF \LtDec(\Va,270) \THEN \LabelPos(0.65;-3;3,)
- \ELSE \LabelPos(+0.65;3;3,) \FI }\Define\:DefSubTree(3){ \:tk={#3}
- \edef\:Temp{
- \noexpand\::DefSubTree(#2,\the\DoReg,\Val\:Ca,\Val\:Cb,\the\:tk)}
- \:Cb+#2; \:Temp}\Define\::DefSubTree(5){
- \Indirect\Object<#2..#3>{
- \let\:ochild=\:oochild \let\:currFrL=\:frL \let\:currDpL=\:dpL
-\def\:dpL{-1} \def\:frL{}
- \:Ca=#3; \:Cc=#2;
- \:TrSp(0,99){\:unl}
- \:Cc+1; \:Cb=#4; \:Cb+1;
- \IF \GtInt(#1,0) \THEN
- \edef\:parmA{#1} \edef\:parmB{#2}
- \:tk={#5} \def\:parmC{\the\:tk}
- \def\:Temp{\:Cind }
- \ELSE \:tk={#5}
- \edef\:Temp{\noexpand \:Clnd (#2,\noexpand\the\:tk) }
- \FI
- \edef\:Temp{\expandafter\noexpand\:Temp
- \noexpand\:endSubTr (#1,#2,#3)}
- \:Temp }}\Define\:endSubTr(3){
- \Indirect{\Indirect
- { \global\let}<#2..\Val\:Ca.mvto>= }<#2..\Val\:Ca.mvto>
-\MoveToLoc(#2..\Val\:Ca) \MarkXLoc(#2..\Val\:Ca)
-\MoveToLoc(#2..\Val\:Ca;:11) \MarkXLoc(#2..\Val\:Ca;:11)
-\edef\:temp{\noexpand\:AddNodesAddr(#2..\Val\:Ca) } \:temp
- \:Ca=\:dpL; \:Ca+1; \xdef\:dpR{\Val\:Ca} \let&=\relax
-\xdef\:frR{ #2..#3,#2..#3 & \:frL }
-\ifx \:Cspace\:InInx
- \let&=\:aprsnd
- \:Ca=#2; \:Ca*#1; \:Ca*\:ochild; \:Ca*\:lchild;
-\IF \GtInt(\:Ca,0) \THEN
- \IF \GtInt(\:currDpL,\:dpR) \THEN \def\:tempc{\:dpR}
-\ELSE \def\:tempc{\:currDpL} \FI
-\Table\:tempa{\:currFrL}
-\Table\:tempb{\:frR} \if H\:TreeDir \MoveToNode(#2..#3,0,1)
-\else \MoveToNode(#2..#3,-1,0) \fi \MarkLoc(:b)
-\:tempa(0,0){\:MoveLFr} \MarkLoc(:a)
-\:va=0; \:vb=0; \IF \GtInt(\:tempc,0) \THEN
- \let\:MoveToInv=\::MoveToInv
- \DoReg=0\relax \:tempa(1,\:tempc){\advance\DoReg by 1 \:FrDs}
-\FI
- \MoveToLoc(a:) \:MoveH(-\Val\:va,\Val\:vb)
- \MarkXLoc(INc:)
-\FI \fi } \Define\:Cind{
- \edef\:lchild{\Val\:Cb}
-\def\:oochild{0}
-\:trcTree
-\Indirect<\Val\:Cc..\Val\:Cb>[\:InInx] \:SubTreeAddrs
-\let\:dpL=\:dpR \let\:frL=\:frR
-\MoveToLoc(INx:) \MarkLoc(-12:)
-\MoveToLoc(IN:) \MarkLoc(-11:)
-\MoveToLoc(OUTx:) \MarkLoc(12:)
-\MoveToLoc(OUT:) \MarkLoc(11:)
-\IF \GtInt(\:parmA,1) \THEN
- \def\:oochild{1}
- \Do(2,\:parmA){
- \MoveToLoc(\:OutOutx)
- \:MoveH(\:HorTreeSp,\:HorTreeSp)
- \:TrSp(0,99){\:spbn} \:Cb+1;
- \:trcTree
- \Indirect<\Val\:Cc..\Val\:Cb>[\:InInx] \:SubTreeAddrs
- \MarkLoc(o:)
-\MoveToLoc(INx:) \MarkLoc(-\DoReg2:)
-\MoveToLoc(IN:) \MarkLoc(-\DoReg1:)
-\MoveToLoc(OUTx:) \MarkLoc(\DoReg2:)
-\MoveToLoc(OUT:) \MarkLoc(\DoReg1:)
-\MoveToLoc(o:)
- \:MergTree }
-\FI \:C=\:parmB; \:TrSp(0,99){\:lcalg}
-\:ChildLoc(\:AlignA,-12:,-11:,11:,12:) \MarkLoc(a:)
-\:ChildLoc(\:AlignB,INx:,IN:,OUT:,OUTx:) \MarkLoc(b:)
-\:C=\:parmB;
-\IF \LtDec(\:AlignC,-1) \THEN
- \MoveToLoc(a:) \:MoveH(\:AlignC,\:AlignC)
-\ELSE \IF \GtDec(\:AlignC,1) \THEN
- \MoveToLoc(b:) \:MoveH(\:AlignC,\:AlignC)
-\ELSE
- \CSeg[0.5]\Move(b:,a:) \MarkLoc(o:)
- \CSeg[\:AlignC]\Move(o:,b:)
-\FI \FI
-\:TrSp(0,99){\:mvpr}
-\ifx H\:TreeDir \Indirect{\Move(-\Val}<y.\Val\:C>,0)
-\else \Indirect{\Move(0,\Val}<y.\Val\:C>) \fi
- \MarkLoc(o:) \:TreeEnEx
-\edef\:Temp{\noexpand\:TreeNode(\:parmB..\Val\:Ca,\:parmC)}\:Temp
-\ifx H\:TreeDir
- \MoveToNode(\:parmB..\Val\:Ca,0,1) \MarkLoc(a:)
- \MoveToNode(\:parmB..\Val\:Ca,0,-1) \MarkLoc(b:)
-\else
- \MoveToNode(\:parmB..\Val\:Ca,-1,0) \MarkLoc(a:)
- \MoveToNode(\:parmB..\Val\:Ca,1,0) \MarkLoc(b:)
-\fi
-\MoveToLoc(o:) \CSeg\:MoveHV(o:,a:)
-\MarkLoc(a:) \MarkXLoc(IN:)
-\MarkXLoc(INc:)
-\MoveToLoc(o:) \CSeg\:MoveHV(o:,b:)
-\MarkXLoc(OUT:) \MarkLoc(b:)
-\MoveToLoc(o:) \CSeg\:MoveHV(o:,-12:) \MarkLoc(-12:)
-\MoveToLoc(a:) \CSeg\:DistH(a:,-12:)
-\IF \LtDec(\Va,0) \THEN
- \ifx H\:TreeDir
- \else \Move(\Val\Va,0) \fi
-\ELSE
- \ifx H\:TreeDir \Move(0,\Val\Va)
- \else \fi
- \FI
-\MarkXLoc(INx:)
-\MoveToLoc(o:) \CSeg\:MoveHV(o:,OUTx:) \MarkLoc(OUTx:)
-\MoveToLoc(b:) \CSeg\:DistH(b:,OUTx:)
-\IF \GtDec(\Va,0) \THEN
- \ifx H\:TreeDir
- \else \Move(\Val\Va,0) \fi
-\ELSE
- \ifx H\:TreeDir \Move(0,\Val\Va)
- \else \fi
- \FI
-\MarkXLoc(OUTx:) }
-\Define\:Clnd(2){
- \MarkLoc(o:) \:TreeEnEx \:C=#1; \:LeafNode(#1..\Val\:Ca,#2)
-\ifx H\:TreeDir
- \MoveToNode(#1..\Val\:Ca,0,1) \MarkLoc(IN:)
- \MoveToNode(#1..\Val\:Ca,0,-1)
-\else
- \MoveToNode(#1..\Val\:Ca,-1,0) \MarkLoc(IN:)
- \MoveToNode(#1..\Val\:Ca,1,0) \fi
-\MarkLoc(OUT:) \MoveToLoc(o:) \CSeg\:MoveHV(o:,IN:)
-\MarkXLoc(IN:) \MarkXLoc(INc:) \MarkXLoc(INx:)
-\MoveToLoc(o:) \CSeg\:MoveHV(o:,OUT:)
-\MarkXLoc(OUT:) \MarkXLoc(OUTx:) }
-\Define\TreeAlign(3){ \let\:TreeDir=#1
- \def\:EntryX{#2} \def\:EntryY{#3} \:AlignTree}
-
-\Define\:AlignTree(3){
- \def\:AlignA{#1} \def\:AlignB{#2} \def\:AlignC{#3}}
-
-\TreeAlign(V,0,0)(0,0,0)
-\Define\:trcTree{\:TrcDiag{\immediate\write16{\space
- \:parmB..\Val\:Ca,\Val\:Cc..\Val\:Cb}}}
-\Define\:ChildLoc(2){
-\IF \LtDec(#1,0) \THEN \Va=-#1;
- \ELSE \Va= #1; \FI
-\IF \LtDec(\Va,100) \THEN
- \::ChildLoc(#1,#2)
-\ELSE \Va/100; \:C[\Va]; \Vb=#1;
- \IF \GtDec(#1,0) \THEN \Vb-\:C 00;
- \ELSE \Vb+\:C 00; \FI
- \edef\:Temp{\noexpand\::ChildLoc
- (\Val\Vb,-\Val\:C2:,-\Val\:C1:,\Val\:C1:,\Val\:C2:)}\:Temp
-\FI } \Define\::ChildLoc(5){
- \IF \LtDec(#1,-2) \THEN
- \MoveToLoc(#2) \:MoveH(#1,#1)
- \ELSE \IF \GtDec(#1,2) \THEN
- \MoveToLoc(#4) \:MoveH(#1,#1)
- \ELSE \IF \LtDec(#1,-1) \THEN
- \MoveToLoc(#3) \Va=#1; \Va+1;
- \CSeg[\Val\Va]\Move(#2,#3)
- \ELSE \IF \GtDec(#1,1) \THEN
- \MoveToLoc(#4) \Va=#1; \Va-1;
- \CSeg[\Val\Va]\Move(#4,#5)
- \ELSE \MoveToLoc(#3)
- \CSeg[0.5]\Move(#3,#4) \:MoveH(#1,#1)
- \FI \FI \FI \FI}\def\:GetIx#1..#2//{\:Ca=#1;\:Cb=#2;}
-
-\Define\::MoveToInv(3){
- \Indirect{\let\:temp=}<#1.mvto>
- \expandafter\ifx\:temp\MoveToInv
- \:GetIx#1// \ifx H\:TreeDir \:Cb-#3; \else \:Cb-#2; \fi
- \edef\:Temp{\noexpand\MoveToInv(\Val\:Ca..\Val\:Cb,
- \ifx H\:TreeDir 0,#3 \else -#2,0 \fi)}
- \expandafter\:Temp
- \ELSE
- \ifx H\:TreeDir \Indirect<#1.mvto>(#1,0,#3)
- \else \Indirect<#1.mvto>(#1,-#2,0) \fi
- \FI }
-
-\def\MoveToInv{\:MoveToInv}
-\let\:MoveToInv=\MoveToRect \Define\::MergTree{
- \edef\:Temp{\DoReg=\the\DoReg\relax}
- \Table\:tempa{\:frL}
-\Table\:tempb{\:frR}
-\:tempa(0,0){\:left}
-\:tempb(0,0){\:right}
-\IF \GtInt(\:dpR,\:dpL) \THEN
- \:both(\:dpL) \:DoReg=\:dpL \advance\:DoReg by 1\relax
-\:tempb(\:DoReg,\:dpR){\:copy}
- \let\:dpL=\:dpR
-\ELSE
- \:both(\:dpR)
-\IF \GtInt(\:dpL,\:dpR) \THEN
- \:DoReg=\:dpR \advance\:DoReg by 1\relax
- \:tempa(\:DoReg,\:dpL){\:copy}
-\FI
-\FI \:Temp } \Define\:copt(3){\::copt(#3,)}
-\Define\::copt(2){
- \IF \EqText(#1,C) \THEN
- \let\:MergTree=\::MergTree \FI }
-\Define\:MeasureRow(3){
- \:TrcDiag{{ \:tk={#1,#2,#3}
- \immediate\write16{\Val\:C..\Val\:Ca\space\space\the\:tk}}}
- \IF \EqInt(#2,0) \THEN
- \FigSize\Va\Vb{\:LeafNode(x,#3)}
- \ELSE \FigSize\Va\Vb{\:TreeNode(x,#3)} \FI
- \expandafter\expandafter\expandafter\:tempb
- \expandafter{\:tempa &}
- \edef\:tempa{\the\:tk #2,\Val\Va,\Val\Vb}
- \IF \LtDec(\:Vc,\:tempc) \THEN \:Vc=\:tempc; \FI }
-\Define\:AddVerTreeSp(1){
- \:Ca+1; \Indirect<y.\Val\:Ca>+#1;
- \Va=#1; \Va*\:TreeEdgeSpec; \Indirect<x.\Val\:Ca>+\Va; }
-
-\:DefineExt\TreeSpace(3){\endgroup
- \IF \EqText(D,#1) \THEN
- \def\:OutOutx{OUT:} \def\:InInx{IN:} \FI
- \IF \EqText(C,#1) \THEN
- \def\:OutOutx{OUT:} \def\:InInx{INc:}
- \let\:Cspace=\:InInx \FI
- \IF \EqText(S,#1) \THEN
- \def\:OutOutx{OUTx:} \def\:InInx{INx:} \FI
- \:edef\:HorTreeSp{#2}
- \:edef\:VerTreeSp{#3} }
-
-\TreeSpace(S,10,20)\:DefineExt\AdjTree(1){\endgroup
- \IF \EqText(#1,) \THEN \Table\:TrSp{,,}
- \ELSE \Table\:TrSp{#1} \FI }
-
-\AdjTree()\Define\:unl(3){
- \IF \EqText(#1,L) \THEN
- \IF \EqInt(\:Cc,#2) \THEN \TreeSpace(#3,0) \FI
- \ELSE \IF \EqText(#1,N) \THEN
- \:edef\:Temp{\noexpand\EqText(\Val\:Cc..\Val\:Ca,#2)}
- \IF \:Temp \THEN \TreeSpace(#3,0) \FI
- \FI \FI}\Define\:spbn(3){
- \IF \EqText(#1,B) \THEN
- \:edef\:Temp{\noexpand\EqText(\Val\:Cc..\Val\:Cb,#2)}
- \IF \:Temp \THEN \:MoveH(#3,#3)
- \FI\FI}\Define\:lcalg(3){
- \IF \EqText(#1,A) \THEN
- \:edef\:Temp{\noexpand\EqText(\Val\:C..\Val\:Ca,#2)}
- \IF \:Temp \THEN
- \:xalg(#3)
- \FI\FI}
-\Define\:xalg(2){ \def\:EntryX{#1} \:AlignTree(#2) }
-\Define\:mvpr(3){
- \IF \EqText(#1,M) \THEN
- \:edef\:Temp{\noexpand\EqText(\Val\:C..\Val\:Ca,#2)}
- \IF \:Temp \THEN \:MoveH(#3,-#3)
- \FI\FI}\Define\TreeEdgeSpec(1){\:edef\:TreeEdgeSpec{#1}}
-\TreeEdgeSpec(0.5) \def\:ChkInv{\MoveToInv}
-
- \Define\:Temp{
-\def\:MvToDivider##1..##2..{
- \ifx H\:TreeDir \Indirect{\Move(\Val}<x.##1>,0)
- \else \Indirect{\Move(0,-\Val}<x.##1>) \fi }
- }\:Temp \Define\TreeEdge(2){
- \ifx H\:TreeDir \HHEdge(#1,#2,EdgeGuide)
- \else \VVEdge(#1,#2,EdgeGuide) \fi }
-\Define\:AddNodesAddr(1){
- \Define\:temp{\gdef\:GetNodesAddr}
- \expandafter\expandafter\expandafter
- \:temp\expandafter{\:GetNodesAddr & #1 }}
-
-\Define\:SubTreeAddrs{
- \Table\:AddrPoly{ \:GetNodesAddr}
- \:AddrPoly(\Val\:AddrCount,999){\:AddrCount+1;\:RecordAddr} }
-
-\Define\:RecordAddr(1){\MoveToLoc(#1) \MarkXLoc(#1)
- \MoveToLoc(#1;:11) \MarkXLoc(#1;:11)}
-
-\IntVar\:AddrCount\TreeSpec(\Node)()(\TreeEdge)
-\fi
-\let\if:option=\:undefined
-\let\:CheckOption=\:undefined
-\let\:GetOptions=\:undefined
-\let\AlDraTex=\:undefined
-\def\:aldwarn#1#2{\immediate
- \write16{---AlDraTeX warning--- \ifcase #1
- insufficient space for arrow head %0
- \or \string\Tree(too many values)(...) %1
- \or edge from node #2 to itself %2
- \or #2 not a grid point %3
- \or too many entries in (#2) %4
- \or too many rows: \Val\:C %5
- \or row \Val\:C\space has too many columns: \Val\:Ca %6
- \or \Val\:C\space(>5) entries in \string\BarChartSpec %7
- \or more than one bar in \string\BarChartSpec(\the\:tk) %8
- \or no font for \string\NewCIRCNode, trying `\string
- \font\string\CIRC=lcircle10 scaled\string\magstep5' %9
- \or \string\PutNode(#2)? %10
- \or \string\GridDiagram(#2)? less than 2 rows/columns %11
- \fi}}
-
-\:RestoreCatcodes \endinput
-
diff --git a/Master/texmf-dist/tex/generic/dratex/AlProTex.sty b/Master/texmf-dist/tex/generic/dratex/AlProTex.sty
deleted file mode 100644
index b8d63d28ba2..00000000000
--- a/Master/texmf-dist/tex/generic/dratex/AlProTex.sty
+++ /dev/null
@@ -1,1576 +0,0 @@
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% AlProTex.sty 2001-11-28-00:02 %
-% Copyright (C) 1992--2001 by Eitan M. Gurari %
-% %
-% This program can redistributed and/or modified under %
-% the terms of the LaTeX Project Public License %
-% Distributed from CTAN archives in directory %
-% macros/latex/base/lppl.txt; either version 1 of the %
-% License, or (at your option) any later version. %
-% %
-% However, you are allowed to modify this program %
-% without changing its name, if you modify its %
-% signature. Changes to the signature can be introduced %
-% with a directive of the form %
-% \message{signature} %
-% %
-% gurari@cis.ohio-state.edu %
-% http://www.cis.ohio-state.edu/~gurari %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\immediate\write-1{version 2001-11-28-00:02}
-
-\expandafter\edef\csname :RestoreCatcodes\endcsname{%
- \catcode`\noexpand\noexpand\noexpand \^=\the\catcode`\^%
- \catcode`\noexpand\noexpand\noexpand \_=\the\catcode`\_%
-}
-\catcode`\^=7 \catcode`\_=8
-\expandafter\edef\csname :RestoreCatcodes\endcsname{%
- \csname :RestoreCatcodes\endcsname
- \csname du:cc\endcsname
- \catcode`\noexpand "=\the\catcode`\"%
- \catcode`\noexpand |=\the\catcode`\|%
- \catcode`\noexpand :=\the\catcode`:%
- \catcode`\noexpand @=\the\catcode`@%
- \catcode`\noexpand -=\the\catcode`-%
- \catcode`\noexpand +=\the\catcode`+%
- \catcode`\noexpand /=\the\catcode`/%
- \catcode`\noexpand .=\the\catcode`.%
- \catcode`\noexpand \^^M=\the\catcode`\^^M%
- \catcode`\noexpand \^^I=\the\catcode`\^^I%
- \catcode`\noexpand \%=\the\catcode`\%%
- \let\expandafter\noexpand
- \csname:RestoreCatcodes\endcsname=\noexpand\undefined}
-\catcode`\@=11 \catcode`\:=11 \catcode`\"=12 \catcode`\|=12
-\def\TagLine[#1]{} \def\ResetLineCount{}
-\def\RefLine[#1]{} \def\ShowLineCount{}
-\def\HideLineCount{} \def\PauseLineCount{}
-\def\ContLineCount{} \def\:InitAlProTex#1,#2//{
- \def\:InitAlProTex{#1}%
- \let\:ModifyOutputCodeO=\ModifyOutputCode
- \def\ModifyOutputCode{\def\Extension{#1}\:ModifyOutputCodeO}
- \ifx \html:addr\:UnDeF \def\AlProTex{#2}\else
- \ifx \html:addr\empty \def\AlProTex{#2}\else
- \def\AlProTex{html,#2}\fi \fi}
-
-\expandafter\:InitAlProTex\AlProTex,//
-
-
-\def\:temp{\csname newif\endcsname}
-\expandafter\ifx \csname :Optionfalse\endcsname\relax
- \expandafter\:temp \csname if:Option\endcsname
-\fi
-\def\:CheckOption#1{ \def\:temp{#1}
- \:Optionfalse
- \expandafter\:GetOptions\AlProTex,,// }
-
-\def\:GetOptions#1,#2//{ \def\:next{#1}
- \ifx \:next\empty
- \else \ifx \:temp\:next \:Optiontrue \let\:next=\relax
- \else \def\:next{\:GetOptions#2//}
- \fi \fi \:next }
-\def\:CntrlChar{`\\}
-\catcode`\|=0 |catcode`|\=12
-|def|:notex{\}
-|catcode`|\=0 |catcode`||=12
-\def\:temp{ \catcode`\@=12
- \def\:temp##1{\catcode`\@=11
- \:CheckOption{##1}} \:temp}
-\:temp{@}
-\if:Option \def\:CntrlChar{`\@}
-\catcode`\@=12
-\def\:notex{@}
-\catcode`\@=11
-\let\:ModifyAppendCodeII=\ModifyAppendCode
-\let\:ModifyShowCodeII=\ModifyShowCode
-\let\:ModifyOutputCodeII=\ModifyOutputCode
-\def\ModifyAppendCode{\catcode`\@=0 \catcode`\\=12
- \:ModifyAppendCodeII}
-\def\ModifyOutputCode{\def\@{@}\:ModifyOutputCodeII}
-\def\ModifyShowCode#1{\:ModifyShowCodeII{#1}\def\@{\char64 }}
-\else \ifx \:ModifyAppendCodeII\:undefined
- \:CheckOption{|} \if:Option
- \def\:CntrlChar{`\|}
-\def\:notex{|}
-\let\:ModifyAppendCodeII=\ModifyAppendCode
-\let\:ModifyShowCodeII=\ModifyShowCode
-\let\:ModifyOutputCodeII=\ModifyOutputCode
-\def\ModifyAppendCode{\catcode`\|=0 \catcode`\\=12
- \:ModifyAppendCodeII}
-\def\ModifyOutputCode{\def\|{|}\:ModifyOutputCodeII}
-\def\ModifyShowCode#1{\:ModifyShowCodeII{#1}\def\|{\char124 }}
-\else \ifx \:ModifyAppendCodeII\:undefined
- \:CheckOption{`} \if:Option
- \def\:CntrlChar{`\`}
-\def\:notex{`}
-\let\:ModifyAppendCodeII=\ModifyAppendCode
-\let\:ModifyShowCodeII=\ModifyShowCode
-\let\:ModifyOutputCodeII=\ModifyOutputCode
-\def\ModifyAppendCode{\catcode`\`=0 \catcode`\\=12
- \:ModifyAppendCodeII}
-\def\ModifyOutputCode{\def\`{`}\:ModifyOutputCodeII}
-\def\ModifyShowCode#1{\:ModifyShowCodeII{#1}\def\`{\char96 }}
-\else \ifx \:ModifyAppendCodeII\:undefined
- \:CheckOption{?} \if:Option
- \def\:CntrlChar{`\?}
-\def\:notex{?}
-\let\:ModifyAppendCodeII=\ModifyAppendCode
-\let\:ModifyShowCodeII=\ModifyShowCode
-\let\:ModifyOutputCodeII=\ModifyOutputCode
-\def\ModifyAppendCode{\catcode`\?=0 \catcode`\\=12
- \:ModifyAppendCodeII}
-\def\ModifyOutputCode{\def\?{?}\:ModifyOutputCodeII}
-\def\ModifyShowCode#1{\:ModifyShowCodeII{#1}\def\?{\char63 }}
-\fi \fi \fi \fi \fi \fi \fi\:CheckOption{xref} \if:Option
- \csname newread\endcsname\sdx:file
-\immediate\openin\sdx:file=\jobname.sdx
-\csname newwrite\endcsname\cdx:file
-\immediate\openout\cdx:file=\jobname.cpg
-\let\xref:OutputCode=\OutputCode
-\def\OutputCode#1{%
- {\Comment{ startcodefragment}{//}%
- \let\ProTexMssg=\:gobble
- \let\xref:ModifyOutputCode=\ModifyOutputCode
- \def\wrt:index##115{\immediate\write\cdx:file }%
- \def\ModifyOutputCode##1{\xref:ModifyOutputCode{##1}\bgroup
- \def\relax####115####215{\egroup
- \expandafter\wrt:index\:WriteCode
- }}%
- \xref:OutputCode#1}%
- \xref:OutputCode#1}
-
- \expandafter\ifx \csname tmp:cnt\endcsname\relax
- \csname newcount\endcsname\tmp:cnt
-\fi
-\def\change:cats#1#2#3{%
- \tmp:cnt#1
- \def\no::catcodes{%
- \catcode\tmp:cnt#3
- \ifnum\tmp:cnt<#2
- \advance\tmp:cnt 1 \expandafter\no::catcodes
- \fi }%
- \no::catcodes }
-
-\def\scan:token{\futurelet\:next\check:ch}
-\def\check:ch{\ifx \:next\par \expandafter\end
- \else \expandafter\scan:ch\fi}
-\def\scan:ch#1{\relax
- \ifx #1\egroup \index:tok \expandafter\egroup\else
- \ifcat #1a%
- \ifx \index:tok\empty
- \change:cats{48}{57}{11}% 0--9
- \fi
- \edef\index:tok{\index:tok#1}%
- \ifx \index:tok\start:comment
- \let\index:tok=\empty \let~=\scan:comment
- \change:cats{48}{57}{12}% 0--9
- \fi
- \else
- \change:cats{48}{57}{12}% 0--9
- \if \index:tok\empty \else
- \write:index{1
- \sp:id\index:id \space1 \l:idel\index:tok\r:idel }%
- \write:index{2
- \l:idel\index:tok\r:idel \space \sp:id\index:id }%
- \fi
- \let\index:tok=\empty
- \fi \expandafter~\fi}
-\def\sp:id#1{%
- \ifnum #1<10000 \space\fi
- \ifnum #1<1000 \space\fi
- \ifnum #1<100 \space\fi
- \ifnum #1<10 \space\fi
- #1}
-
-\catcode`\@=0 \catcode`\\=12 @relax
- @:CheckOption{html} @if:Option
-@def@scan:comment#1\<#2\>{%
- @def@index:tok{#2}%
- @afterassignment@exit:comment@tmp:cnt=}
- @else
-@def@scan:comment#1\<#2\>.{%
- @def@index:tok{#2}%
- @afterassignment@exit:comment@tmp:cnt=}
- @fi
-@catcode`@\=0 \catcode`\@=11
-
-\def\start:comment{startcodefragment}
-\def\exit:comment#1//{\def\:temp{#1}%
- \ifx \:temp\open:comment
- \index:push
- \edef\index:level{I\index:level}%
- \ifx \prev:comment\index:tok \else
- \code:index{}%
- \fi
- \expandafter\edef\csname L \index:level\endcsname{%
- \expandafter\ifx \csname L \index:level\endcsname\relax \else
- \csname L \index:level\endcsname,
- \fi \the\tmp:cnt
- }%
- \let\prev:dir=u%
- \let\prev:comment=\index:tok%
- \else
- \code:index{I}%
- \edef\index:level{\expandafter\:gobble\index:level}%
- \let\prev:dir=d%
- \index:pop\index:pop\index:push
- \fi
- \let\index:tok=\empty \edef\index:id{\the\tmp:cnt}%
- \let~=\scan:token ~}
-\def\open:comment{...}
-\def\index:id{0}
-\def\index:level{}
-\let\prev:dir=f
-\def\:gobble#1{}
-
-
-
-\def\index:push{\edef\pd:mem{\the\tmp:cnt,\pd:mem}}
-\def\index:pop{\expandafter\do:pop\pd:mem//}
-\def\do:pop#1,#2//{%
- \if !#1!\tmp:cnt=-1 \else \tmp:cnt=#1\def\pd:mem{#2}\fi}
-\def\pd:mem{,}
-
-
-\def\code:index#1{%
- \if d\prev:dir
- \bgroup
- \edef\index:tok{\l:idel\prev:comment\r:idel\space /\the\tmp:cnt/%
- \expandafter\ifx \csname L #1\index:level\endcsname\relax \else
- , \csname L #1\index:level\endcsname
- \fi}%
- \write:index{3 \index:tok }%
- \expandafter\ifx \csname L #1\index:level\endcsname\relax \else
- \edef\:tmp{\noexpand\derive:index \space
- \csname L #1\index:level\endcsname,,}\:tmp
- \fi
- \egroup
- \expandafter\let\csname L #1\index:level\endcsname=\:UnDe
- \fi
-}
-
-\def\derive:index#1,{%
- \if !#1!\else
- \write:index{1\sp:id{#1} 2
- \index:tok}\expandafter\derive:index\fi}
-
-\def\write:index{\immediate\write\cdx:file }
-\def\l:idel{<}
-\def\r:idel{>}
-
-\def\CodeIndex{%
- \immediate\closeout\cdx:file \def\read:sdx{%
- \ifeof\sdx:file \else
- \immediate\read\sdx:file to\sdx:in \sdx:in
- \expandafter\read:sdx
- \fi
-}\noindent\vrule\vbox{\tt
-\hsize=0.8\hsize
-\rightskip=3em plus 4em
-\leftskip=3em
-\parindent=0pt
-
-\ifnum \index:typ<4
- \sdx:in \fi
- \read:sdx
-}%
-\immediate\closein\sdx:file
- %
- \immediate\openout\cdx:file=\jobname.cdx
- \bgroup
- \change:cats{0}{255}{12}%
- \change:cats{97}{122}{11}% a--z
- \change:cats{65}{90}{11}% A--Z
- \change:cats{95}{95}{11}% _
- \let\index:tok=\empty \let~=\scan:token
- \expandafter~\input \jobname.cpg \egroup
- \immediate\write16{-- Have \jobname.cdx processed
- into \jobname.sdx --}%
-}%
-
- \let\xref:ModifyShowCode=\ModifyShowCode
-\def\ModifyShowCode#1{%
- \xref:ModifyShowCode{#1}%
- \let\xref:ModifyShowLastCode=\ModifyShowLastCode
- \def\ModifyShowLastCode{\xref:ModifyShowLastCode{#1}%
- \def\:BackTitle{\noindent\vrule\vtop{%
-\tt
-\hsize=0.8\hsize
-\rightskip=3em plus 4em
-\leftskip=3em
-\parindent=0pt
- --\the\:CodeNumber--: \small:index
-}}}}
-\def\small:index{%
- \ifnum \:CodeNumber<\index:num \else
- \sdx:in
- \ifeof\sdx:file
- \def\index:num{1000000}\gdef\index:typ{4}%
- \else
- \immediate\read\sdx:file to\sdx:in
- \expandafter\get:typ \sdx:in //%
- \fi
- \expandafter\small:index
- \fi}
-\def\get:typ#1 {%
- \gdef\index:typ{#1}%
- \ifnum #1>1 \def\index:num{1000000}\expandafter\id:gobble
- \else \expandafter\get:nm\fi}
-\def\id:gobble#1//{}
-\def\get:nm#1 #2//{\def\index:num{#1}}
-\def\index:num{0}
-\let\sdx:in=\empty
-
-\fi
-\:CheckOption{basic} \if:Option
- \def\AlProTex{[[]],<<<>>>,list,title,ClearCode}
- \def\:temp{\catcode`\`=12}
-\catcode`\;=0 \catcode`\\=12
-;expandafter;catcode ;:CntrlChar=13
-;ifnum 92=;:CntrlChar
- ;edef;:notex{;noexpand;::notex;noexpand\;:notex}
-;fi
-;ifnum 124=;:CntrlChar
- ;edef;:notex{;noexpand;::notex;noexpand|;:notex}
-;fi
-;ifnum 64=;:CntrlChar
- ;edef;:notex{;noexpand;::notex;noexpand@;:notex}
-;fi
-;ifnum 96=;:CntrlChar
- ;edef;:notex{;noexpand;::notex;noexpand`;:notex}
-;fi
-;:temp ;catcode`;\=0 ;catcode`;;=12
- \def\::notex#1#2{\let\:notex=\:undefined
- \let\::notex=\:undefined
- %
- \ifx \documentstyle\:undefined \errmessage{LaTeX is missing}\fi
- \documentstyle{book} \let\cleardoublepage=\clearpage
- \textwidth=469.75499pt \textheight=643.20255pt
- \topmargin=-0.5in \oddsidemargin=0pt \evensidemargin=0pt
- \begin{document}
- \hbadness=10000 \vbadness=10000 \hfuzz=99in \vfuzz=\hfuzz
- \tableofcontents \begingroup
- %
- \def\:amp{#2}
- \def#1{\begingroup
- \catcode`\ =12 \catcode`\^^M=12 \catcode`\^^I=12
- \expandafter\catcode\:CntrlChar=12 \:doAmp }
- %
- \def\:doAmp##1{\endgroup
- \if ##1< \def\:next####1#1>{\<####1\>}%
-\else \def\:next{##1}%
-\ifx \:next\:amp
-\else\if ##1c \def\:next{\:sect\chapter}%
-\else\if ##1s \def\:next{ \vfil\:sect\section}%
-\else\if ##1u \def\:next{ \vfil\:sect\subsection}%
-\else\if ##1v \def\:next{\expandafter\def\csname\string
- @xverbatim\endcsname########1#2{%
- ########1\end{verbatim}\egroup}%
- \bgroup\expandafter\catcode\:CntrlChar=12
- \begin{verbatim}}%
-\else\if ##1o \def\:next####1#1<####2#1>{\OutputCode####1\<####2\>}%
-\else\if ##1n \def\:next{\ClearCode}%
-\else\if ##1e \def\:next{\endgroup\end{document}}%
-\else \edef\:next{\noexpand\errmessage{\:amp##1?}}%
-\fi\fi \fi\fi \fi\fi \fi\fi \fi
-\:next }
- %
- \:NoSpecials{12}{0}{255}
- \catcode`\ =10 \catcode`\^^M=5 \catcode`\^^I=10
- \escapechar=\:CntrlChar
- \expandafter\catcode\:CntrlChar=13 }
- \def\:specialactive{\catcode`\_=13
- \catcode`\~=13 \catcode`\\=13 \catcode`\#=13
- \catcode`\$=13 \catcode`\%=13 \catcode`\^=13
- \catcode`\&=13 \catcode`\{=13 \catcode`\}=13 }
-
-\def\:sect{\begingroup \:specialactive \::sect}
-
-\catcode`\/=0 \catcode`\[=1 \catcode`\]=2
-\catcode`\@=6 \catcode`\*=14 \:specialactive
-
-/def/::sect@1@2/par[/endgroup/begingroup
- /def~[/bgroup/tt/char126/egroup]*
- /def\[/bgroup/tt/char92/egroup]*
- /def#[/bgroup/tt/char35/egroup]*
- /def$[/bgroup/tt/char36/egroup]*
- /def%[/bgroup/tt/char37/egroup]*
- /def^[/bgroup/tt/char94/egroup]*
- /def_[/bgroup/tt/char95/egroup]*
- /def&[/bgroup/tt/char38/egroup]*
- /def{[/bgroup/tt/char123/egroup]*
- /def}[/bgroup/tt/char125/egroup]*
- /escapechar=92 @1[@2]/endgroup]
-
-/catcode`/\=0 \catcode`\#=6 \catcode`\$=3 \catcode`\%=14
-\catcode`\^=7 \catcode`\&=4 \catcode`\{=1 \catcode`\}=2
-\catcode`\_=8 \catcode`\/=12 \catcode`\[=12 \catcode`\]=12
-\catcode`\@=11 \catcode`\*=12
-
-\else
- \let\:CntrlChar=\:undefined
- \def\:notex{\let\:notex=\:undefined}
-\fi
-\:CheckOption{<<<>>>} \if:Option
-\def\:OpenCode#1#2{\def\:OpenCode{#1}\def\:CloseCode{#2}}
-\edef\:CloseCode{\noexpand\:OpenCode
- \ifx \CodeDel\:UnDefined{<<<}{>>>}\else \CodeDel\fi } \:CloseCode
-\let\:ModifyAppendCodeI=\ModifyAppendCode
- \catcode`\^^M=13
-\edef\ModifyAppendCode{%
-\catcode`\noexpand\{=12 \catcode`\noexpand\}=12 %
-\let\noexpand\::ScanAppend=\noexpand\:ScanAppend %
- \def\noexpand\:ScanAppend\:OpenCode##1^^M##2\:CloseCode{%
- \noexpand\::ScanAppend{##2}}%
-\noexpand\:ModifyAppendCodeI}%
- \catcode`\^^M=5
-\fi \:CheckOption{[]}
-\if:Option \else \:CheckOption{[[]]}\fi
-\def\:temp{}
-\if:Option
- \def\:temp{\csname newdimen\endcsname\:BoxDepth}
-\def\WindowTitle#1{{\leavevmode
- \leftskip=0em \rightskip=0em
- \parindent=0em \:BoxDepth=0.4pt
- \setbox0=\hbox{#1}%
- \advance\:BoxDepth by \dp0
- \advance\:BoxDepth by 0.4mm \raise -\:BoxDepth
- \hbox{\vrule
- \vbox{\hrule \vskip 0.4mm
- \hbox{\hskip 0.4mm\relax #1\hskip 0.4mm}%
- \vskip 0.4mm \hrule}%
- \vrule}}}
-\let\:ModifyShowCodeIII=\ModifyShowCode
-\def\ModifyShowCode#1{\:ModifyShowCodeIII{#1}%
- \def\PortTitle##1{\WindowTitle{\WindowTitle{##1}}}%
- \def\:BackTitle{\hbox{---}}}
-\fi \:temp \:CheckOption{[[]]}
-\def\:temp{}
-\if:Option
- \let\:ShowCodeI=\:ShowCode
-\def\:ShowCode#1{\par\:FrameCode{\:ShowCodeI{#1}}}
-\def\:FrameCode#1{\vtop{%
- \advance\hsize by -\leftskip
- \noindent\vrule
- \vtop{\leftskip=0pt \advance\hsize by -0.8pt
- \hrule#1\hrule}\vrule}\vskip3pt minus1pt\relax}
-\let\:ModifyShowCodeV=\ModifyShowCode
-\def\ModifyShowCode#1{\:ModifyShowCodeV{#1}%
- \let\PortTitle=\:PortTitleI
- \def\:BottomTitle{}}
-\def\:PortTitleI#1{{\parindent=0pt
- \leftskip=0pt plus 0.5\hsize
- \rightskip=\leftskip #1\par \vskip-1ex
- \noindent\dotfill\null}}
-\let\:ModifyShowLastCodeI=\ModifyShowLastCode
-\def\ModifyShowLastCode#1{\:ModifyShowLastCodeI{#1}%
- \advance\leftskip by -2em }
-\fi \:temp \:CheckOption{list} \if:Option
-\def\:show{%
- \ifx \:title\empty \def\:show{\ShowCode-}%
- \else \def\:show{\ShowCode}%
- \fi \:show}
-\fi
-
-\catcode`\-=13 \catcode`\+=13 \if:Option
-\def\AfterCode#1{{%
- \def-##1##2{\def\:title{##1}}%
- \let+=\:ignoreII
- #1\relax
- \:show #1}}
-\def\:ignoreII#1#2{}
-\fi
-\catcode`\-=12 \catcode`\+=12
-
- \:CheckOption{enumerate} \def\:temp{} \if:Option
- \def\:temp{\csname newcount\endcsname\:LineCount}
- \let\:ModifyShowLastCode=\ModifyShowLastCode
- \def\ModifyShowLastCode{\everypar={\:CountLines
- {\it \:ShowLineCount \quad}}%
- \let\:BottomTitleX=\:BottomTitle
- \def\:BottomTitle{\everypar={}\:BottomTitleX}%
- \:ModifyShowLastCode}
- \def\ResetLineCount{ \global\:LineCount=0 }
- \def\ShowLineCount{\def\:ShowLineCount{\ifnum\:LineCount<100 0\fi
- \ifnum\:LineCount<10 0\fi
- \the\:LineCount}}
- \def\HideLineCount{\def\:ShowLineCount{}}
- \def\ContLineCount{\def\:CountLines{\global\advance\:LineCount by 1 }}
- \def\PauseLineCount{\def\:CountLines{}}
- \ShowLineCount \ContLineCount
- \def\TagLine[#1]{%
- \edef\:temp{\noexpand\Tag\noexpand{C #1\noexpand}\noexpand{%
- \the\:LineCount\noexpand}}\:temp}
- \def\RefLine[#1]{\Ref{C #1}}
- \let\:ModifyOutputCodeZ=\ModifyOutputCode
- \def\ModifyOutputCode{\def\RefLine[##1]{}%
- \def\TagLine[##1]{}\:ModifyOutputCodeZ}
-\fi
-\:temp \:CheckOption{ClearCode}
-\if:Option
- \gdef\:EraseCode{}
- \def\ModifyCode#1{%
- \let\clearcode:id=\clearcode::id
- \def\:temp{\gdef\:EraseCode}%
- \expandafter\expandafter\expandafter
- \:temp\expandafter{\:EraseCode~#1}}
- \def\ClearCode{{%
- \def~##1{\global\let##1=\:undefined}%
- \:EraseCode \:CodeNumber=\clearcode::id
-\advance\:CodeNumber by 1
-\xdef\clearcode::id{\the\:CodeNumber }
-}%
- \gdef\:EraseCode{}}
- \let\:ModifyShowCodeVI=\ModifyShowCode
-\let\:AfterCodeI=\AfterCode
-\let\:RefLineI=\RefLine
-\let\:TagLineI=\TagLine
-\def\ModifyShowCode#1{\:ModifyShowCodeVI{#1}%
- \def\RefLine[##1]{{\def\clearcode:id{0}\:RefLineI[##1]}}%
- \def\TagLine[##1]{{\def\clearcode:id{0}\:TagLineI[##1]}}%
- \let\clearcode:id=\clearcode::id}
-\def\AfterCode#1{\:AfterCodeI{#1}\def\clearcode:id{0}}
-\ifx\clearcode:id\:UnDef
- \gdef\clearcode:id{0} \gdef\clearcode::id{0}
-\fi
-
-\fi\:CheckOption{LibCode}
-\if:Option
-\def\LibCode{\bgroup \catcode`\ =9 \catcode`\^^M=9 \catcode`\^^I=9
- \catcode`\,=13 \:LibCode}
-\def\:LibCode[#1]{\catcode`\,=12 \:LibC[#1]}
- \catcode`\,=13 \catcode`\^^M=13
-\def\:LibC[#1]#2(){\egroup %
- \def,{ \noexpand\input\space}%
- \edef\:LibFiles{\noexpand\:checkoption , #1 }%
- \def\:next{\let\:xparms=\:parms %
- \begingroup %
- \let\LibCall=\:LibCall %
- \def\AddLibCall####1{}%
- \def\AddNestedLibCall####1{}%
- \def\ifLibEnd{\csname ifx\endcsname\:parms\empty}%
- \csname :LibFiles\endcsname \Comment{}{}%
- \FreeCode\<\:TempFileName\>
- \<\:TempFileName\><<<
- \<lib code\> >>> %
- \edef\:temp{\noexpand\OutputCodE
- \noexpand\<\:TempFileName\noexpand\>}%
- \:temp \input \:TempFileName %
- \endgroup %
- \::LibC }%
- \def\:parms{#2}%
- \let\:xparms=\empty \::LibC %
- \let\:parms=\:UnDef \let\:xparms=\:UnDef}%
-\def\LibTempFileName#1{\def\:TempFileName{#1}}
-\LibTempFileName{lib.lib}
- \catcode`\,=12 \catcode`\^^M=9
-\def\::LibC{%
- \ifx \:parms\empty \let\:next=\relax
- \else\ifx \:parms\:xparms \let\:next=\relax
- \:warn{No code for \string\LibCode\space\:parms}
- \fi\fi \:next}
-
-\def\LibShow#1{{\tt\par--- Include library component #1}}
-
-\def\:LibShow#1{%
- \AddLibCall{#1}%
- \LibShow{#1}}
-
-\def\:LibCall(#1,#2,#3){%
- \xdef\:parms{%
- (#1,#2,#3)%
- \:parms}%
- \def\temp{\global\let}%
- \expandafter\temp\csname#2 \endcsname=\:LibShow
- \gdef\:LibShow##1{%
- \AddNestedLibCall{(#1,#2,#3)}%
- \def\temp{\global\let\:LibShow=}%
- \expandafter\temp\csname#2 \endcsname
- }%
-}
-
-\def\:checkoption{%
- \def\:ShowCode##1{}%
- \def\ProTexMssg##1{}%
- %
- \def\ifoption##1{%
- \let\:rparms=\:parms
- \def\parms{}%
- \def\:lparms{}%
- \def\:cond{##1}%
- \def\:type{}%
- \let\:next=\:ifoption \:next
- \xdef\:parms{\:lparms\parms\:rparms}%
- \csname ifx\endcsname \:type\:cond
- \xdef\:parms{\:lparms\:rparms}%
- \edef\:next{\noexpand\:LibShow{\parms}}%
- \:next
- }%
- %
- \def\:ifoption{%
- \expandafter\:getoption\:rparms()%
- \ifx \:type\:cond \let\:next=\relax \fi
- \:next }%
- %
- \def\:getoption##1(){%
- \def\:temp{##1}%
- \ifx \:temp\empty \let\:next=\relax
- \else \::getoption##1()\fi }%
- %
- \def\::getoption(##1,##2,##3)##4(){%
- \edef\:lparms{\:lparms\parms}%
- \def\parms{(##1,##2,##3)}%
- \def\:rparms{##4}%
- \def\:type{##2}}%
-}
-\fi\def\TextIndex#1{} \def\SecIndex#1{}
-\def\ShowIndex{\:warn{\string\ShowIndex?}}
-
-\:CheckOption{ShowIndex}
-
-\def\:temp{}
-\catcode`\-=13 \catcode`\+=13
-
-\if:Option
-\def\:temp{\csname newcount\endcsname \:IdxCount}
-\def\:GetTrc{%
- \immediate\read15 to \:x
- \ifx \:PAR\:x \let\:GetTrc=\relax
- \else \expandafter\:AddEntry\:x \fi
- \:GetTrc} \def\:PAR{\par}
-
-\def\:AddEntry#1{\def\:cs{#1}\futurelet\:p\:RemoveField}
-\def\:RemoveField{\ifx .\:p \def\:next##1 {\:AppendEntry}
- \else \let\:next=\:AppendEntry \fi \:next}
-
-\def\:AppendEntry#1#2#3{\def\:y{#1}%
- \ifx \:y\:NS \AppendCode\:idx{\endgroup
- \:Section{#2}{#3}\begingroup}%
- \expandafter\let\csname :idx\the\:IdxCount\endcsname=\:idx
- \def\:temp{\Code\:idx{}}%
- \expandafter\expandafter\expandafter\:temp\expandafter
- {\csname :idx\the\:IdxCount\endcsname}%
- \advance\:IdxCount by 1
- \else\ifx \:y\:V
- \expandafter\ifx \csname :\:Title #2;;:\endcsname\relax
- \expandafter\Code\csname :\:Title #2;;:\endcsname{}{\?{#2}}%
- \fi
- \expandafter\AppendCode\csname :\:Title #2;;:\endcsname{ #3}%
- \:AddIdx{\csname :\:Title #2;;:\endcsname}%
- \else
- \edef\:cs{\expandafter\string\:cs.:}
-\edef\:cs{\expandafter\noexpand\csname\:cs\endcsname}
- \ifx \:y\:DT \expandafter\Code\:cs{}{\tr{#2}}%
- \else\ifx \:y\:ST \expandafter\AppendCode\:cs{ \underbar{#3}}%
- \:AddIdx{\:cs}%
- \else\ifx \:y\:SC \expandafter\AppendCode\:cs{ #3}%
- \:AddIdx{\:cs}%
- \fi\fi\fi\fi\fi}\def\:AddIdx{%
- \def\:y{\AppendCode\:idx}%
- \expandafter\expandafter\expandafter\:y\expandafter}
-
-\def\SecIndex#1{{\let\:refout=\:trcfile \def\:TagCs{.}%
- \Tag{section}{{#1};;}}}
-
-\def\TextIndex#1{{\let\:refout=\:trcfile \def\:TagCs{.}%
- \Tag{user}{#1;;}}}
-
-\let\i:ModifyShowCode=\ModifyShowCode
-\let\i:ModifyOutputCode=\ModifyOutputCode
-\def\ModifyOutputCode{%
- \ifx \:OpenCode\:UnDef \def\TextIndex##1{}%
- \else \let\TextIndex=\Text:Index \fi
- \i:ModifyOutputCode}
-\def\ModifyShowCode{%
- \ifx \:OpenCode\:UnDef \else \let\TextIndex=\::TextIndex \fi
- \i:ModifyShowCode }
-\let\:TextIndex=\TextIndex
-\catcode`\[=1 \catcode`\{=12 \catcode`\]=2 \catcode`\}=12
-\def\::TextIndex{#1}[\:TextIndex[#1]]
-\def\Text:Index{#1}[]
-\catcode`\[=12 \catcode`\{=1 \catcode`\]=12 \catcode`\}=2
-
-\def\:V{user}
-\def\:DT{DefineTitle} \def\:ST{ShowTitle} \def\:SC{ShowCode}
-\def\:NS{section}
-
-\def\:Title#1;;#2;;{#1}
-\def\:TitleA#1;;#2;;{$\triangleleft\triangleleft$ #1
- $\triangleright\triangleright$}
-
-\def\:Index{\vfil\eject \Comment{}{}%
- \immediate\closeout\:trcfile
- \def\ModifyShowCode##1{}%
- \def\ModifyAppendCode##1{}%
- \def\ModifyFrontTitle##1{}%
- \def\ModifyShowLastCode##1{##1}%
- \def\AfterCode##1{}%
- \def\:WriteTrc##1{}%
- \let\:TraceDef=\:ignoreII
- \def\:warn##1{}%
- \def\:gobble##1{}%
- \let\CodeId=\:ignoreII
- \def\ModifyOutputCode##1{\def\:FileName{\jobname.xidx}}%
- \Code\:idx{}{\BeforeIndex\begingroup}%
- \:PauseIndex \immediate\openin15=\:jobname
- \:GetTrc \AppendCode\:idx{\endgroup}%
- {\def\?##1{\par\noindent{\tt\:Title ##1;;}\hfill}%
- \def\tr##1{\par\noindent{\tt\:TitleA ##1;;}\hfill}%
- \def\:Section##1##2{{\bf\smallskip\noindent{\:Title ##1;;}\hfill
- ##2\smallskip}}%
- \def\ModifyShowLastCode##1{%
- \leftskip=0pt \rightskip=0pt
- \def\:LastCode{\:idx}%
- \:SetShowIndex}%
- \let\:FrameCode=\empty
- \expandafter \ShowCode\:minus\:idx }}
-
-
-\def\:ignoreII#1#2{}
-
-\def\:SetShowIndex{\def-##1##2{\expandafter\def\csname
- \expandafter\:gobble##2\endcsname{}}%
- \def+##1##2{##1}}
-
-\def\BeforeIndex{}
-\def\:PauseIndex{}
-\def\PauseIndex{\def\PauseIndex{\immediate\read16 to \PressReturn}}
-\def\ShowIndex{{%
- \let\:SvCode=\Code
- \def\Code##1{\ModifyCode{##1}\:SvCode##1}%
- \ifx \::AddEntry\:undefined
- \else \let\:AddEntry=\::AddEntry \fi
- \:Index \global\let\:idx=\:undefined }%
- \xdef\:jobname{\jobname.trc\the\pageno}%
- \immediate\openout\:trcfile=\:jobname \relax }
-
-\xdef\:jobname{\jobname.trc}
- \fi \catcode`\-=12 \catcode`\+=12 \:temp
-\:CheckOption{title+} \if:Option
- \def\:temp{\def\AlProTex}
- \def\temp:{title,}
- \expandafter\expandafter\expandafter\expandafter\expandafter
- \expandafter\expandafter\:temp\expandafter\expandafter
- \expandafter{\expandafter \temp:\AlProTex}
-\fi
-\:CheckOption{title} \if:Option
- \def\:Name#1{<#1\string\>\endcsname}
-\def\:DoName#1{\expandafter#1\csname\:Name}
-
-\def\<#1\>{\edef\CodeInputLineNo{\the\inputlineno}%
- \:DoName\ifx{#1}\relax
- \edef\:temp{\noexpand\Code\:DoName
- \noexpand{#1}\noexpand{#1\noexpand}}%
- \:DoName\let{#1}=\:undefined
- \else \def\:temp{\:DoName\AppendCode{#1}}\fi\:temp}
-
- \catcode`\.=10 \catcode`\ =13
-\let\:ModifyShowCodeIV=\ModifyShowCode%
-\def\ModifyShowCode{%
-..\def\:gobble##1{}%
-..\def\<##1\>{{\def {\space}%
-...\:DoName\ifx{##1}\relax%
-.....\let\AppendCode=\:gobble%
-.....\:DoName\Code{##1}{##1}{}\fi%
-..\csname\:Name{##1}}}\:ModifyShowCodeIV}%
-\def\:OutputCodeI#1\<#2\>{%
-...\let\:SaveSp= \def {}%
-...\def\:temp{#2}%
-...\ifx\:temp\empty.\def\:temp{ProTexOutput}%
-...\else.\let\:temp=\empty.\fi%
-...\expandafter\ifx.\csname.\:temp#2\endcsname\relax%
-...\else.\immediate\write16{---.AlProTex. warning.---.%
-......\string\OutputCode#1%
-......\string\<#2\string\>\space.temporarily\space.%
-......redefines.\:backslash#2}\fi%
-...\edef\:FileName{\:temp#2}%
-...\let =\:SaveSp%
-...\expandafter\def\csname\:FileName\endcsname{\csname\:Name{#2}}%
-...\def\:tempa{\:OutputCodeIV#1}%
-...\expandafter\:tempa\csname\:FileName\endcsname%
-..\endgroup}%
-\catcode`\ =10\catcode`\.=12
-
-\let\:OutputCodeIV=\OutputCode
-\def\OutputCode{%
- \begingroup
- \def\<##1\>{\csname\:Name{##1}}%
- \let\:WriteTrcI=\:WriteTrc \def\:gobble##1{}%
- \def\:WriteTrc{\edef\:TagCs{\string\<\expandafter\expandafter
- \expandafter\:gobble \:TagCs\string\>}%
- \:WriteTrcI}
- \catcode` =13 \:OutputCodeI}
-
-\def\OutputCodE\<#1.#2\>{{
- \:DoName\def{#1}{\<#1.#2\>}
- \OutputCode[#2]\<#1\>}}
-
-\def\FreeCode\<#1\>{{%
- \def\temp##1{\global\let##1=\:UnDefined}%
- \:DoName\temp{#1}}}
-
-\def\ShowCode#1{%
- \def\:test{#1}%
- \ifx \:test\:minus \def\:next{\:iname\:ShowCode}\else
- \def\:next{\:iname\:ShowCode#1}\fi
- \:next}
-
-\def\:iname#1#2{\def\:next{#2}\def\:temp{\<}%
- \ifx \:next\:temp
- \def\:next##1\>{\expandafter#1\csname\:Name{##1}}\else
- \def\:next{#1#2}\fi \:next}
-
-\def\::AddEntry#1{%
- \ifx #1\< \let\:Next=\:AddEntryA
- \else \def\:Next{\def\:cs{#1}\:AddEntryB}\fi
- \:Next }
-
-\def\:AddEntryA#1\>{%
- \edef\:cs{\expandafter\noexpand
- \csname#1:.\endcsname}\:AddEntryB}
-
-\def\:AddEntryB{%
- \futurelet\:p\:RemoveField}%
- \def\:RemoveField{\ifx .\:p \def\:next##1 {\:AppendEntry}%
- \else \let\:next=\:AppendEntry \fi \:next}
-
-\let\id:WriteTrc=\:WriteTrc
-\def\:WriteTrc#1{%
- \def\:temp{#1}\def\:tempa{ShowTitle}\ifx\:temp\:tempa
- \expandafter\def\expandafter\:TagCs\expandafter
- {\:TagCs.\the\:CodeNumber}%
- \fi
- \id:WriteTrc{#1}}
-
- \:CheckOption{macro} \if:Option
-\let\:saveMusp=\>
-
-\def\>{\ifmmode \expandafter\:saveMusp \else \expandafter\:CodeMacro \fi }
-
-\def\:CodeMacro(#1)#2\<{%
- \begingroup
- \:getcodeprms(\string\1,\string\2,\string\3,\string\4,%
- \string\5,\string\6,\string\7,\string\8,\string\9)%
- \xdef\:temp{()#2}%
- \endgroup
- \def\:next{#1}%
- \ifx\:next\empty
- \expandafter\ifx\csname\:temp\space :<\endcsname\relax
- \ifx\:EraseCode\:UnDef\else
- \expandafter\:adderase \csname\:temp\space :<\endcsname
- \fi
- \else
- \:warn{Redefine \string\>\:temp\string\<}%
- \fi
- \def\:next{\expandafter\:getpseducode
- \csname\:temp\space :<\endcsname{#2}}%
- \else
- \begingroup
- \:getcodeprms(#1,,,,,,,,,)%
- \:protectcommands \ModifyIndirectCode{(#1)#2}%
- \xdef\:next{\csname\:temp\space :<\endcsname}%
- \endgroup
- \fi
- \:next}
-
-\def\:adderase#1{%
- \def\:next{\gdef\:EraseCode}%
- \expandafter\expandafter\expandafter\:next\expandafter{\:EraseCode~#1}%
-}
-
-\def\:getpseducode#1#2{\begingroup
- \:defaultcats
- \ModifyAppendCode{}%
- \:getpseducodeI#1{#2}}
-
-\def\:getpseducodeI#1#2#3{\endgroup
- \def#1{\<#2\>{#3}}%
-}%
-
-\def\:getpseducodeII{%
- \ifx \:OpenCode\:UndDef
- \else
- \edef\:getpseducodeI{%
- \def\noexpand
- \:getpseducodeI####1####2####3\:OpenCode####4\:CloseCode{%
- \endgroup
- \def\noexpand\:temp{####3}%
- \noexpand\ifx\noexpand\:temp\noexpand\empty
- \def####1{\noexpand\<####2\noexpand
- \>\:OpenCode####4\:CloseCode}%
- \noexpand\else
- \errmessage{\string\>()...\string
- \<...?...\:OpenCode...\:CloseCode}
- \let####1=\noexpand\:UnDef
- \noexpand\fi
- }%
- }%
- \:getpseducodeI
- \fi
- \let\:getpseducodeII=\:UndDef
-}
- \catcode`\ =13 \catcode`\^^M=13 \catcode`\^^I=13
- \catcode`\#=14 \catcode`\%=12
-\def\:protectcommands{#
-\let\<=\relax#
-\let\>=\relax#
-\let\%=\csname#
-\expandafter\let\%NL%\endcsname=\relax#
-\let\%=\relax#
-\let\ =\relax#
-\let^^M=\relax#
-\let^^I=\relax#
-\ifx\TagLine\:UnDef\else\let\TagLine=\relax\fi#
-\ifx\RefLine\:UnDef\else\let\RefLine=\relax\fi#
-}
- \catcode`\#=6 \catcode`\%=14
- \catcode`\ =10 \catcode`\^^M=9 \catcode`\^^I=10
-
-\def\ModifyIndirectCode#1{}
-\def\:getcodeprms(#1,#2,#3,#4,#5,#6,#7,#8,#9){%
- \def\1{#1}%
- \def\2{#2}%
- \def\3{#3}%
- \def\4{#4}%
- \def\5{#5}%
- \def\6{#6}%
- \def\7{#7}%
- \def\8{#8}%
- \def\9##1,##2){\def\9{##1}}%
- \9#9,)} \fi
- \:CheckOption{title}\if:Option \def\TitleAlias#1#2{%
- \expandafter\let\csname C\string#1\endcsname=\<%
- \expandafter\let\csname O\string#1\endcsname=\OutputCode
- \def\<##1\>{\def\:temp{##1}\def\:tempa{#2}%
- \ifx \:temp\:tempa
- \def\:temp{\csname C\string#1\endcsname#1\>}\else
- \def\:temp{\csname C\string#1\endcsname##1\>}\fi \:temp}
- \def\OutputCode##1\<##2\>{\def\:temp{##2}\def\:tempa{#2}%
- \ifx \:temp\:tempa
- \def\:temp{\csname O\string#1\endcsname##1\<#1\>}%
- \else \def\:temp{\csname O\string#1\endcsname##1\<##2\>}\fi
- \:temp}}
- \fi
-\fi
-\:CheckOption{eline}
-\catcode`\%=12
-\if:Option
- \let\:ModifyOutputCodeJ=\ModifyOutputCode
- \def\ModifyOutputCode{\def\:Ln{ %^^J}\:ModifyOutputCodeJ}
-\fi \catcode`\%=14
-\:CheckOption{ShowFile}
-\if:Option
-\catcode`\^^I=13\catcode`\ =13\catcode`\^^M=13%
-\def\:ObeyIn{\CodeFont\parindent=0pt%
- \parskip=0pt\everypar{}%
- \:NoSpecials{12}{0}{255}\catcode`\ =13%
- \catcode`\^^M=13\catcode`\^^I=13%
- \def^^M{\leavevmode\par}\def^^I{ }%
- \def {\leavevmode\:Sp}}%
-\catcode`\^^M=5\catcode`\ =10\catcode`\^^I=10
-
-\def\ShowFile#1{{\:ObeyIn \openin15=#1
- \ifeof15 \:warn{\string\ShowFile{#1}?}\else
- \input #1 \fi \closein15 }}
-\else \def\ShowFile#1{\:warn{\string\ShowFile?}}
-\fi\let\Note=\empty \let\EndNote=\empty
-
-\:CheckOption{NoShow} \if:Option
- \let\:svShowCode=\:ShowCode
- \def\ShowOn{\let\Note=\empty
- \let\:ShowCode=\:svShowCode}
- \def\ShowOff{\let\Note=\:NoShow
- \def\:ShowCode##1{}}
- \def\:NoShow{\begingroup
- \:NoSpecials{11}{0}{255}\:EndNoShow}
- \catcode`\/=0 \catcode`\\=11
- /def/:EndNoShow#1\EndNote{/endgroup}
- /catcode`/\=0 /catcode`//=12
-\fi\:CheckOption{ShowTop}
-\catcode`\-=13 \catcode`\+=13
-\if:Option
-\def\:ShowTop#1{{\par
- \def\ModifyFrontTitle##1{\def\:AppendSign{}}%
- \def\ModifyShowLastCode##1{\let\:save=-%
- \def\:LastCode{#1}%
- \def-####1####2{\let-=\:save}%
- \def+####1####2{{\ShowSep\let+=\:ignoreII ####1}}}%
- \ShowCode#1}}
-
-\def\ShowSep{}
-\def\ShowTop{\:iname\:ShowTop}
-\def\:ignoreII#1#2{}
-\def\:iname#1#2{\def\:next{#2}\def\:temp{\<}%
- \ifx \:next\:temp
- \def\:next##1\>{\expandafter#1\csname\:Name{##1}}\else
- \def\:next{#1#2}\fi \:next}
-\fi
-\catcode`\-=12 \catcode`\+=12
-\def\LinkPort{\:HRefCode{)\clearcode:id P:}}
-\def\LinkWindow{\:HRefCode{)\clearcode:id Z:}}
-\def\:HRefCode#1\<#2\>{}
-\:CheckOption{info} \if:Option
- \let\inf:ModifyOutputCode=\ModifyOutputCode
- \def\ModifyOutputCode#1{%
- \inf:ModifyOutputCode{#1}%
- \expandafter\ifx \csname \Extension :cdinfo\endcsname \relax \else
- \edef\:FileName{\:FileName}%
- \expandafter\expandafter\csname \Extension :cdinfo\endcsname
- \:FileName!*?: %
- \fi }
- \def\CodeInfo{\futurelet\:temp\cd:inf}
- \edef\cd:inf{\noexpand\ifx [\noexpand\:temp
- \let\noexpand\:temp=\noexpand\cdi:nf
- \noexpand\else \def\noexpand\:temp{\noexpand\cdi:nf
- [\:InitAlProTex]}\noexpand\fi
- \noexpand\:temp}
- \def\cdi:nf[#1]{\expandafter\def\csname
- #1:cdinfo\endcsname##1.##2!*?: }
-\fi
-
-\ifx \HCode\:UnDef \ifx \Htmltrue\:UnDef
- \def\:temp{\csname newif\endcsname}
- \expandafter\:temp \csname ifHtml\endcsname \Htmlfalse
-\fi
-
-\def\EndLink{\ifx \empty:lnk\empty \HCode{</\tag:A>}\fi}
-\def\:HRef{\ifx [\:temp \expandafter\::HRef
- \else \expandafter\:::HRef \fi }
-\def\HT:tag{\ifx -\let:val \expandafter\H:Tag
- \else \expandafter\HTa:g\fi }
-\def\HTa:g{\H:Tag-}
-\def\Link{\let\:attr\empty \futurelet\let:val\HRefT:ag}
-\def\HRefT:ag{\ifx -\let:val \expandafter\H:RefTag
- \else \expandafter\HRefTa:g\fi }
-\def\HRefTa:g{\H:RefTag-}
-\def\H:RefTag#1{\futurelet\:temp\:HRefTag}
-\def\:HRefTag{\ifx [\:temp \expandafter\::HRefTag
- \else \expandafter\:::HRefTag \fi }
-
-\def\HCode#1{}
-\def\H:Tag#1#2{}
-\def\::HRef[#1]#2{}
-\def\:::HRef#1{}
-\def\::HRefTag[#1]#2#3{}
-\def\:::HRefTag#1#2{}
-\def\:TagHTag#1{}
-
-
- \fi
-\:CheckOption{html}
- \if:Option \else \:CheckOption{xhtml}\fi
-\if:Option
- \def\WindowTitle#1{\leavevmode\hbox{%
- \disable:
- \expandafter\ifx\csname \clearcode:id W-#1\endcsname\relax
- \let \:temp=\empty
-\else
- \edef\:temp{ \HREF:"\expandafter\get:href
- \csname \clearcode:id W-#1\endcsname -"}%
-\fi
-\html:addr
-\HCode{<\tag:A\:newlnch \NAME:"\expandafter\get:htag\last:haddr -"\:temp
- >}\ttl:del{<.}\HCode{</\tag:A>}%
-\expandafter\expandafter\expandafter\global\expandafter\let
- \csname \clearcode:id W-#1\endcsname=\last:haddr
-%
- \expandafter\ifx\csname \clearcode:id :cw:#1\endcsname\relax
- \expandafter\expandafter\expandafter\global
- \expandafter\def\csname \clearcode:id :cw:#1\endcsname{0}%
- \Tag{)\clearcode:id Z:#1}{\last:haddr}%
-\fi
-\frag:href{)\clearcode:id P:#1}{}#1\HCode{</\tag:A>}%
-%
- \:nextlink{\clearcode:id :cw:#1}{.>}%
-%
- }}
-\def\disable:{\let\rm=\empty \let\tt=\empty
- \let\sl=\empty \let\bf=\empty \let\it=\empty }
-\def\frag:href#1#2{%
- \HCode{<\tag:A\:newlnch \HREF:"%
- \expandafter\ifx \csname cw:#1\endcsname \relax
- \expandafter\get:href\last:haddr -%
- \else
- \expandafter\expandafter\expandafter\get:href\csname
- cw:#1\endcsname -%
- \fi
-"#2>}}
-\def\html:PortTitle#1{\hbox{%
- \disable:
- \bgroup \def\:Sp{\space}%
- \html:addr
- \ifx\:AppendSign\empty
- \HCode{<\tag:A\:newlnch \NAME:"\get:htag\last:haddr-">}%
- \expandafter\expandafter\expandafter\global\expandafter\edef
- \csname \clearcode:id 9:#1\endcsname{0}%
- \else
- \HCode{<\tag:A\:newlnch \HREF:"\expandafter\get:href
- \csname \space\clearcode:id P:#1\endcsname-"
- \NAME:"\get:htag\last:haddr-">}%
- \fi
- \ttl:del{<..}\HCode{</\tag:A>}%
- \expandafter\expandafter\expandafter\global\expandafter\let
- \csname \space\clearcode:id P:#1\endcsname=\last:haddr
-\egroup
-%
- \bgroup \def\:Sp{\space}%
- \ifx\:AppendSign\empty
- \Tag{)\clearcode:id P:#1}{\last:haddr}%
- \fi
- \frag:href{)\clearcode:id Z:#1}{\ifx \:LastCodeLabel\empty \else
- \expandafter\html:codeid\:LastCodeLabel</\tag:A>\fi
-%
-}%
-\egroup
-#1\HCode{</\tag:A>}%
-%
- \:nextlink{\clearcode:id 9:#1}{..}%
-%
- }}
-\def\:HRefCode#1\<#2\>{{%
- \let\clearcode:id=\clearcode::id
- \expandafter\ifx\csname
- cw:#1#2\endcsname\relax
- \HCode{<\tag:A>}\else
- \HCode{<\tag:A\:newlnch \HREF:"}\expandafter\get:href
- \csname cw:#1#2\endcsname
- -\HCode{">}%
- \fi}}
-\def\:nextlink#1#2{%
- \bgroup \def\:Sp{\space}%
- \def\:lbl{)\the\tmp:cnt :#1}%
- \tmp:cnt=\csname #1\endcsname\space
- \html:addr
- \Tag{\:lbl}{\last:haddr}%
- \advance\tmp:cnt by 1\space
- \expandafter\xdef\csname #1\endcsname{\the\tmp:cnt}%
- \expandafter\ifx\csname cw:\:lbl\endcsname\relax
- \HCode{<\tag:A\:newlnch
- \NAME:"\expandafter\get:htag\last:haddr-">}%
- \else
- \HCode{<\tag:A\:newlnch
- \NAME:"\expandafter\get:htag\last:haddr-"\space
- \HREF:"\expandafter\expandafter\expandafter
- \get:href\:LikeRef{\:lbl}-">}%
- \fi
- \ttl:del{#2>}\HCode{</\tag:A>}%
- \egroup
-}
-\def\:LikeRef#1{\csname cw:#1\endcsname}
-\let\html:ShowCode=\ShowCode
-\def\ShowCode{\par \html:ShowCode}
-\let\html:ModifyShowCode=\ModifyShowCode
-\def\ModifyShowCode#1{%
- \def\%##1\%{\c:protex##1\d:protex}%
- \html:ModifyShowCode{#1}%
- \let\PortTitle=\html:PortTitle
- \let\:FrontTitle=\frnt:ttl
- \def\:BackTitle{\b:protex\par}%
- \let\:CodeSkip=\empty
- \def\:TopTitle##1{{\:FrontTitle{##1}}}%
- \def\:BottomTitle{\:BackTitle}%
- \let\html:ModifyShowLastCode=\ModifyShowLastCode
-\ifx\:ModifyShowLastCode\:UnDeF \def\:CntLines##1{}\else
- \def\:CntLines{\:CountLines}\fi
-\def\ModifyShowLastCode##1{%
- \ifx \:test\:minus
- \def\:CodeSkip{{\par\parindent=0pt\leftskip=0pt
- \everypar{}\b:protex\par}%
- \global\:removeindenttrue}%
- \leavevmode\a:protex\par
- \else \global\:removeindenttrue \fi
- \html:ModifyShowLastCode{##1}%
- \everypar{\e:protex \:CntLines {\it \:ShowLineCount \quad}}%
-}%
-\f:protex
-%
- }
-\def\frnt:ttl#1{{\htmlprotex:par
- {\expandafter\ifx \csname ListCounter\endcsname\relax
- \else \:removeindentfalse \fi \leavevmode}%
- \PortTitle{#1}\:AppendSign}\a:protex
- }%
-\def\a:protex{%
-% \ifvmode \csname IgnorePar\endcsname
-% \else \hfil\break\fi
-% \csname EndP\endcsname
- \HCode{\ifx \:test\:minus \else <br />\fi
- \html:src<span class="ShowCode"
- style="font-family:monospace;white-space:nowrap;"
- >\html:invisible}%
- \nobreak % \hskip\leftskip \hskip\parindent
-}
-\def\b:protex{\HCode{\html:BackTitle\html:src</span>}}
-\def\e:protex{\HCode{<br />\html:invisible}}
-\def\c:protex{\HCode{<i>}}
-\def\d:protex{\HCode{</i>}}
-\def\f:protex{\def\:Sp{\HCode{\string&nbsp;}}}
-\long\def\c:ShowCode:#1#2#3#4#5#6{\def\a:protex{#1}%
- \def\b:protex{#2}\def\e:protex{#3}\def\c:protex{#4}%
- \def\d:protex{#5}\def\f:protex{\def\:Sp{#6}}}
-\def\L:Del{<..}
-\def\l:Del{<.}
-\def\R:Del{..>}
-\def\ttl:del#1{\def\:tempa{#1}%
- \ifx \:tempa\L:Del \L:del
- \else \ifx \:tempa\l:Del \l:del
- \else \ifx \:tempa\R:Del \R:del
- \else \r:del \fi\fi\fi}
-\def\HShowCode#1#2#3#4#5{%
- \def\:temp{#1#2}\ifx \:temp\empty \else
- \def\L:del{#1}\def\R:del{#2}\fi
- \def\:temp{#3#4}\ifx \:temp\empty \else
- \def\l:del{#3}\def\r:del{#4}\fi
- \def\:temp{#5}\ifx \:temp\empty \else
- \def\html:BackTitle{#5}\fi
-}
-\bgroup
-\catcode`\_=12
-\gdef\:temp{\HShowCode{<..}{..>}{<.}{.>}{-_-_-}} \aftergroup\:temp
-\egroup
-\let\html:ProTexMssg=\ProTexMssg
-\def\ProTexMssg{%
- {\let\:gobble=\empty\def\:TagCs{\:FileName}\:WriteTrc{FileName}}%
- \html:ProTexMssg }
-\catcode`\^^I=13\catcode`\ =13\catcode`\^^M=13%
-\def\:ObeyIn{\CodeFont\parindent=0pt%
- \parskip=0pt\everypar{}%
- \:NoSpecials{12}{0}{255}\catcode`\ =13%
- \catcode`\^^M=13\catcode`\^^I=13%
- \def^^M{\leavevmode\e:protex\par}\def^^I{ }%
- \def {\leavevmode\:Sp}}%
-\catcode`\^^M=5\catcode`\ =10\catcode`\^^I=10
-
-\def\ShowFile#1{{\:ObeyIn \openin15=#1
- \ifeof15 \:warn{\string\ShowFile{#1}?}\else
- \a:ShowFile\input #1 \b:ShowFile \fi \closein15 }}
-\def\a:ShowFile{\ifvmode \csname IgnorePar\endcsname\fi
- \csname EndP\endcsname
- \HCode{<div class="ShowFile"
- style="font-family:monospace;white-space:nowrap;"
- >\html:src\html:invisible}\hfill\break
- \f:protex }
-\def\b:ShowFile{\HCode{</div>\html:src}}
-\long\def\c:ShowFile:#1#2{\def\a:ShowFile{#1}\def\b:ShowFile{#2}}
-\def\html:codeid#1Q#2"#3</\tag:A>{ \NAME:
- "Q#2"}
-\ifx \aXrefFile\:UnDef \let\aXrefFile=\empty \fi
-
-\def\CodeId#1#2{\expandafter\ifx
- \csname cw:)F\aXrefFile \file:id
- \empty F-\endcsname\relax
- \else\:LikeRef{)F\aXrefFile \file:id\empty F-}\fi
- \:sharp Q\make:addr{#2}"#1%
- \ifx \CodeInputLineNo\:UnDef \the\inputlineno \else \CodeInputLineNo\fi}
-\let\showttl:WriteTrc=\:WriteTrc
-\def\:WriteTrc#1{%
- \def\:temp{#1}\def\:tempa{ShowCode}\ifx\:temp\:tempa
- \def\:TagCs{\expandafter\trc:shw\:LastCodeLabel\trc:shw}%
- \else \ifx \id:WriteTrc\:Undef
- \def\:tempa{ShowTitle}\ifx\:temp\:tempa
- \expandafter\def\expandafter\:TagCs\expandafter
- {\:TagCs.\the\:CodeNumber}%
- \fi \fi \fi
- \showttl:WriteTrc{#1}}
-\def\trc:shw#1"#2\trc:shw{#2 "#1"}
-\def\HREF:{ href=}
-\def\tag:A{a}
-\def\NAME:{ name=}
-\def\make:addr#1{%
- \ifnum\clearcode:id>0 \romannumeral\clearcode:id Q\else PrTx\fi
- #1}
-\ifx\clearcode:id\:UnDef
- \def\clearcode::id{0} \def\clearcode:id{0}
-\fi
-\ifx \html:par\:UnDef \def\html:par{\HCode{<p>}} \fi
-\def\html:invisible{<!--x-->\string&nbsp;}
-\expandafter\ifx\csname htmlprotex:par\endcsname\relax
- \ifx\:removeindenttrue\:UnDef
- \def\:removeindenttrue{\let\:Undef=\:Undef}
- \fi
- \def\htmlprotex:par{{\everypar{}\csname
- HtmlPar\endcsname}\HCode{\html:src}}
-\fi
-\ifx\html:addr\:UnDeF
- \immediate\write16{--- needs --- tex4ht \jobname\space ---}%
-\ifx\tmp:cnt\:UnDeF \csname newcount\endcsname\tmp:cnt \fi
-\def\g:advance#1{\bgroup \def\:temp{#1}%
- \tmp:cnt=#1\afterassignment\:gplus \advance\tmp:cnt}
-\def\:gplus{\expandafter\xdef\:temp{\the\tmp:cnt}\egroup}
-\def\html:lbl{1}
-\def\html:addr{\xdef\last:haddr{\file:id-\html:lbl}%
- \g:advance\html:lbl by 1\relax }
-\ifx \file:id\:UnDef
- \gdef\file:id{1}
- \global\let\maxfile:id=\file:id
-\fi
-\hbadness=10000 \vbadness=10000
-\:CheckOption{fussy} \if:Option \else
- \hfuzz=99in \vfuzz=\hfuzz
-\fi
-\hyphenpenalty=1000 \exhyphenpenalty=1000
-\def\html:rightskip{\rightskip = 0pt plus 0.5\hsize minus0.5\hsize }
-\html:rightskip
-\ifx \documentstyle\:UnDef
- \footline={\hfil} \headline={\hfil}
-\fi
-\ifx \ht:special\:UnDef
- \let\ht:special=\special
-\fi
-\def\HCode#1{\ifx \EndPicture\:UnDef
- \ifvmode\leavevmode\fi\ht:special{t4ht=#1}\fi}
-\let\:HCode=\HCode
-\def\NewLineChar{\bgroup \catcode`\^=7 \:NewLineChar}
-\def\:NewLineChar#1{\egroup \def\:newlnch{ #1}}
-\NewLineChar{^^J}
-\def\::HRef[#1]{\get:attr{#1}\::hRef\:::HRef}
-\def\::HRefTag[#1]{\get:attr{#1}\::hRefTag\:::HRefTag}
-\def\get:attr#1{\edef\:attr{\noexpand\get:atr #1 !*?: }\:attr}
-\def\get:atr#1 #2!*?: #3#4{\def\:attr{\space#2}%
- \def\:te:mpa{#1}\ifx \:te:mpa\empty \let\:te:mpa#4\else
- \def\:te:mpa{#3[#1]}\fi \:te:mpa}
-\def\H:Tag#1#2{\:TagHTag{#2}\HCode{<\tag:A\:newlnch
- \NAME:"#2"\empty:lnk>}}
-\def\::hRef[#1]#2{%
- \HCode{<\tag:A\:newlnch \if\relax#1#2\relax \NOHREF: \else
- \HREF:"#1\if\relax#1\relax \else\:sharp #2\fi"\fi
- \:attr \empty:lnk>}}
-\def\:::HRef#1{%
- \HCode{<\tag:A\:newlnch \if\relax#1\relax \NOHREF: \else
- \HREF:"\get:hfile{#1}\:sharp #1"\fi \:attr \empty:lnk>}}
-\def\::hRefTag[#1]#2#3{%
- \if\relax#3\relax\else\:TagHTag{#3}\fi
- \HCode{<\tag:A\:newlnch \if\relax#1#2\relax \NOHREF: \else
- \HREF:"#1\if\relax#2\relax \else\:sharp #2\fi"\fi
- \if\relax#3\relax\else\space \NAME:"#3"\fi
- \:attr \empty:lnk>}}
-\def\:::HRefTag#1#2{%
- \if\relax#2\relax\else\:TagHTag{#2}\fi
- \HCode{<\tag:A\:newlnch \if\relax#1\relax \NOHREF:
- \else\HREF:"\get:hfile{#1}\:sharp #1"\fi
- \if\relax#2\relax\else\space \NAME:"#2"\fi
- \:attr \empty:lnk>}}
-\let\empty:lnk=\empty
-\let\NOHREF:=\space
-\def\:TagHTag#1{\ifx -\let:val\else \Tag{)Q\aXrefFile #1}{\file:id}\fi}
-\def\get:href{\expandafter\get::href}
-\def\get::href#1-#2-{\ifnum #1=\file:id\space \else
- \:LikeRef{)F\aXrefFile #1\empty F-}\fi
- \:sharp \make:addr{#2}}
-\def\get:htag{\expandafter\get::htag}
-\def\get::htag#1-#2-{\make:addr{#2}}
-\ifx \aXrefFile\:UnDef \let\aXrefFile=\empty \fi
-
-\def\get:hfile#1{%
- \expandafter\ifx\csname
- cw:)Q\aXrefFile #1\endcsname\relax
- \get@hfile{#1}%
- \else
- \expandafter\expandafter\expandafter\get::hfile
- \csname cw:)Q\aXrefFile #1\endcsname,//%
- \fi }
-\def\get::hfile#1,#2//{%
- \ifnum \file:id=0#1 \else
- \expandafter\ifx
- \csname cw:)F\aXrefFile #1%
- \empty F-\endcsname\relax \else
- \:LikeRef{)F\aXrefFile #1\empty F-}%
-\fi %
- \fi }
-\ifx\get@hfile\:Undef \let\get@hfile=\:gobble \fi
- \let\html:src=\empty
-\catcode`\#=12 \def\:sharp{#} \catcode`\#=6
-
- \Htmltrue
-\fi
-
-
-\fi\:CheckOption{_^} \if:Option
-\def\du:cc{\catcode`\_=13 \catcode`\^=13 \let\du:cc=\:UnDef}
-\let\:sub=_ \let\:sup=^
-\catcode`\_=13 \catcode`\^=13
-\def_{\ifmmode \:sub \else \string_\fi}
-\def^{\ifmmode \:sup \else \string^\fi}
-\:CheckOption{html}
- \if:Option \else \:CheckOption{xhtml}\fi
-\if:Option
- \append:def\SUBOn{\def_{\ifmmode \:sub \else \string_\fi}}
- \append:def\SUPOn{\def^{\ifmmode \:sup \else \string^\fi}}
-\fi
-
- \fi\:CheckOption{pdf}
-\if:Option
- \ifx \hyper:link\:UnDef \let\:temp=\hyper:target
-\else \let\:temp=\:UnDef \fi
- \ifx \:temp\:UnDef
-\def\hyper:link{\hyperlink}
-\def\hyper:target{\hypertarget}
-\def\:temp{\ifx\pdfstartlink\:UnDef
- \let\pdfstartlink\pdfannotlink
- \fi
- \ifx \pdfstartlink\:UnDef
- \long\def\hyper:target##1##2{\special
- {html:<a name="##1">}\special{html:</a>}}%
- \long\def\hyper:link##1##2{\special
- {html:<a href="##1">}##2\special{html:</a>}}%
- \else
- \long\def\hyper:target##1##2{\pdfdest name {##1} xyz}%
- \long\def\hyper:link##1##2{%
- \leavevmode \pdfstartlink goto name {##1}##2\pdfendlink } %
- \fi
-}
-\ifx \hyperlink\:UnDef \:temp
-\else \ifx \hypertarget\:UnDef \:temp \fi \fi
- \fi
-\let\hyper::WindowTitle=\WindowTitle
-\def\WindowTitle#1{\bgroup
- \def\WindowTitle##1{##1}%
- \xdef\:temp{\noexpand\H:WindowTitle{#1}}\egroup \:temp}
-
-\def\H:WindowTitle#1{\leavevmode\hbox{%
- \expandafter\ifx\csname \clearcode:id W-#1\endcsname\relax
- \ttl:del{<.}%
- \else
- \hyper:link{\expandafter\get:href
- \csname \clearcode:id W-#1\endcsname -}{\ttl:del{<.}}%
- \fi
- \html:addr
- \hyper:target{\expandafter\get:htag\last:haddr -}{}%
- \expandafter\expandafter\expandafter\global\expandafter\let
- \csname \clearcode:id W-#1\endcsname=\last:haddr
- \expandafter\ifx\csname \clearcode:id :cw:#1\endcsname\relax
- \expandafter\expandafter\expandafter\global
- \expandafter\def\csname \clearcode:id :cw:#1\endcsname{0}%
- \Tag{)\clearcode:id Z:#1}{\last:haddr}%
- \fi
- \def\:temp##1{\leavevmode \hbox{$\triangleleft
- \triangleleft$}~##1~\hbox{$\triangleright \triangleright$}}%
- \ifx \:temp \hyper::WindowTitle \def\hyper::WindowTitle##1{~##1~}\fi
- \hyper::WindowTitle{\frag:href{)\clearcode:id P:#1}{#1}}%
- \:nextlink{\clearcode:id :cw:#1}{.>}%
- }}
-\let\hyper::ModifyShowCode=\ModifyShowCode
-\def\ModifyShowCode#1{%
- \hyper::ModifyShowCode{#1}%
- \let\H:PortTitle=\PortTitle
- \let\PortTitle=\hyper::PortTitle
- }
-\let\hyper::PortTitle=\PortTitle
-\def\hyper::PortTitle#1{\hbox{%
- \bgroup
- \html:addr
- \hyper:target{\get:htag\last:haddr-}{}%
- \ifx\:AppendSign\empty
- \expandafter\expandafter\expandafter\global\expandafter\edef
- \csname \clearcode:id 9:#1\endcsname{0}%
- \ttl:del{<..}%
- \else
- \hyper:link{\expandafter\get:href
- \csname \space\clearcode:id P:#1\endcsname-}{\ttl:del{<..}}%
- \fi
- \expandafter\expandafter\expandafter\global\expandafter\let
- \csname \space\clearcode:id P:#1\endcsname=\last:haddr
- \egroup
- \bgroup
- \ifx\:AppendSign\empty
- \Tag{)\clearcode:id P:#1}{\last:haddr}%
- \fi
- \def\:temp##1{\leavevmode \hbox{$\triangleright
- \triangleright$}~##1~\hbox{$\triangleleft \triangleleft$}}%
- \ifx \:temp\H:PortTitle \def\H:PortTitle##1{~##1~}\fi
- \H:PortTitle{\frag:href{)\clearcode:id Z:#1}{#1}}%
- \egroup
- \:nextlink{\clearcode:id 9:#1}{..}%
-}}
-\def\frag:href#1#2{%
- \hyper:link{%
- \expandafter\ifx \csname cw:#1\endcsname \relax
- \expandafter\get:href\last:haddr -%
- \else
- \expandafter\expandafter\expandafter
- \get:href\csname cw:#1\endcsname -%
- \fi}{#2}}
-\def\:nextlink#1#2{%
- \bgroup \def\:Sp{\space}%
- \def\:lbl{)\the\tmp:cnt :#1}%
- \tmp:cnt=\csname #1\endcsname\space
- \Tag{\:lbl}{\last:haddr}%
- \advance\tmp:cnt by 1\space
- \expandafter\xdef\csname #1\endcsname{\the\tmp:cnt}%
- \expandafter\ifx\csname cw:\:lbl\endcsname\relax
- \ttl:del{#2}%
- \else
- \hyper:link{\expandafter\expandafter\expandafter
- \get:href\:LikeRef{\:lbl}-}{\ttl:del{#2}}%
- \fi
- \egroup
-}
-\let\:sharp=\empty \def\clearcode::id{0} \def\clearcode:id{0}
-\def\file:id{1}
-\def\get:href{\expandafter\get::href}
-\def\get::href#1-#2-{\ifnum #1=\file:id\space \else
- \:LikeRef{)F\aXrefFile#1\empty F-}\fi
- \:sharp \make:addr{#2}}
-\def\get:htag{\expandafter\get::htag}
-\def\get::htag#1-#2-{\make:addr{#2}}
-\def\get:hfile#1{%
- \expandafter\ifx\csname
- cw:)Q\aXrefFile#1\endcsname\relax
- \get@hfile{#1}%
- \else
- \expandafter\expandafter\expandafter\get::hfile
- \csname cw:)Q\aXrefFile#1\endcsname,//%
- \fi }
-\ifx \aXrefFile\:UnDef \let\aXrefFile=\empty \fi
-\def\get::hfile#1,#2//{%
- \ifnum \file:id=0#1 \else
- \expandafter\ifx
- \csname cw:)F\aXrefFile#1%
- \empty F-\endcsname\relax \else
- \:LikeRef{)F\aXrefFile#1\empty F-}%
-\fi %
- \fi }
-\ifx\get@hfile\:Undef \let\get@hfile=\:gobble \fi
-\def\L:Del{<..}
-\def\l:Del{<.}
-\def\R:Del{..>}
-\def\ttl:del#1{\def\:tempa{#1}%
- \ifx \:tempa\L:Del \L:del
- \else \ifx \:tempa\l:Del \l:del
- \else \ifx \:tempa\R:Del \R:del
- \else \r:del \fi\fi\fi}
-\def\HShowCode#1#2#3#4#5{%
- \def\:temp{#1#2}\ifx \:temp\empty \else
- \def\L:del{#1}\def\R:del{#2}\fi
- \def\:temp{#3#4}\ifx \:temp\empty \else
- \def\l:del{#3}\def\r:del{#4}\fi
- \def\:temp{#5}\ifx \:temp\empty \else
- \def\html:BackTitle{#5}\fi
-}
-\HShowCode{$\triangleleft\triangleleft$}
- {$\triangleright\triangleright$}
- {$\triangleright\triangleright$}
- {$\triangleleft\triangleleft$} {}
-\ifx\tmp:cnt\:UnDeF \csname newcount\endcsname\tmp:cnt \fi
-\def\g:advance#1{\bgroup \def\:temp{#1}%
- \tmp:cnt=#1\afterassignment\:gplus \advance\tmp:cnt}
-\def\:gplus{\expandafter\xdef\:temp{\the\tmp:cnt}\egroup}
-\def\html:lbl{1}
-\def\html:addr{\xdef\last:haddr{\file:id-\html:lbl}%
- \g:advance\html:lbl by 1\relax }
-\def\make:addr#1{%
- \ifnum\clearcode:id>0 \romannumeral\clearcode:id Q\else PrTx\fi
- #1}
-
-\def\:LikeRef#1{\csname cw:#1\endcsname}
-
-\fi \def\AlProTex{\:warn{AlProTex already loaded}}
-\let\:InitAlProTex=\:undefined
-\let\:CheckOption=\:undefined
-\let\:GetOptions=\:undefined
-
-\def\:temp{ \let\:temp=\:undefined
- \csname :notex\endcsname \csname :getpseducodeII\endcsname
- \endinput}
-\:RestoreCatcodes
-\csname :temp\endcsname
-
diff --git a/Master/texmf-dist/tex/generic/dratex/DraTex.sty b/Master/texmf-dist/tex/generic/dratex/DraTex.sty
deleted file mode 100644
index 31cc870ae73..00000000000
--- a/Master/texmf-dist/tex/generic/dratex/DraTex.sty
+++ /dev/null
@@ -1,1626 +0,0 @@
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% v 1.5
-% DraTex %
-% Copyright (C) 1992 by Eitan M. Gurari %
-% %
-% This program can redistributed and/or modified under %
-% the terms of the LaTeX Project Public License %
-% Distributed from CTAN archives in directory %
-% macros/latex/base/lppl.txt; either version 1 of the %
-% License, or (at your option) any later version. %
-% %
-% However, you are allowed to modify this program %
-% without changing its name, if you modify its %
-% signature. Changes to the signature can be introduced %
-% with a directive of the form %
-% \message{signature} %
-% %
-% gurari@cis.ohio-state.edu %
-% http://www.cis.ohio-state.edu/~gurari %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\expandafter\edef\csname :RestoreCatcodes\endcsname{%
- \catcode`\noexpand\noexpand\noexpand \^=\the\catcode`\^%
-}
-\catcode`\^=7
-\expandafter\edef\csname :RestoreCatcodes\endcsname{%
- \csname :RestoreCatcodes\endcsname
- \catcode`\noexpand \_=\the\catcode`\_%
- \catcode`\noexpand :=\the\catcode`:%
- \catcode`\noexpand @=\the\catcode`@%
- \catcode`\noexpand /=\the\catcode`/%
- \catcode`\noexpand &=\the\catcode`&%
- \catcode`\noexpand \^^M=\the\catcode`\^^M%
- \catcode`\noexpand \^^I=\the\catcode`\^^I%
- \let\expandafter\noexpand
- \csname:RestoreCatcodes\endcsname=\noexpand\undefined}
-\catcode`\:11 \catcode`\@11
- \let\:wlog\wlog \def\wlog#1{}
- \def\:wrn#1#2{\immediate\write\sixt@@n{--DraTeX warning--
- \ifcase #1
- DraTex.sty already loaded
-\or \string\Draw\space within \string\Draw
-\or Changing definition of \string#2
-\or No intersection points: #2
-\or Improper rotation of axes: #2
-\or (#2) in \string\DSeg\space is a point
-\fi}}
-\def\:err#1#2{\errmessage{--DraTeX error-- \ifcase #1
- \string#2\space meaningless in three dimensions
-\or \string#2\space meaningless in two dimensions
-\or No \string\MarkLoc(#2)
-\or \string#2 in three dimensions
-\or Too many parameters in definition
-\or \string\MoveFToOval(#2)?
-\fi}}
- \ifx\:Xunits\:undefined \else \:wrn0{} \fi
- \catcode`\ 9 \catcode`\^^M9 \catcode`\^^I9
- \def\:UBorder{0}
-\newdimen\:LBorder \newdimen\:RBorder\chardef\:eight=8
-\mathchardef\:cccvx=360
-\newdimen\:mp \:mp 0.1\p@
-\newdimen\:mmp \:mmp 0.01\p@
-\newdimen\:mmmp \:mmmp 0.001\p@
-\newdimen\:XC \:XC 90\p@
-\newdimen\:CVXXX \:CVXXX180\p@
-\newdimen\:CCCVX \:CCCVX\:cccvx\p@ \newdimen\:TeXLoc
-\newbox\:box\newif\if:IIID \newdimen\:Z \newdimen\:Zunits
-\newdimen\:Ex \newdimen\:Ey \newdimen\:Ez
-
-\def\:AbsVal#1{ \ifdim#1<\z@-\fi #1 }
-\def\:abs#1{\ifdim #1<\z@ #1-#1 \fi}
-\def\:AbsDif#1#2#3{ #1#2 \advance#1 -#3
- \ifdim #1<\z@ #1-#1 \fi}
-\def\:diff#1#2#3{ #1#2 \advance#1 -#3 }
-\def\:average#1#2#3{
- #1#2 \advance#1 #3 \divide#1 \tw@}\def\:Opt#1#2#3#4{
- \def\:temp{
- \ifx \:next\ifnum \def\:next{#3#1#4#2}
- \else\ifx \:next#1 \def\:next{#3}
- \else \def\:next{#3#1#4#2}\fi\fi \:next}
- \futurelet\:next\:temp}\def\Define#1{\:multid#1
- \:Opt(){\:Define#1}0}
-
-\def\:DraCatCodes{\catcode`\ 9 \catcode`\^^M9
- \catcode`\^^I9 \catcode`\&13 \catcode`\~13 }
-
-\def\:Define#1(#2){\begingroup \:DraCatCodes \::Define#1(#2)}
-
-\def\::Define#1(#2)#3{\endgroup
- \let\:NextDefine\NextDefine
- \let\NextDefine\relax
- \ifcase#2\relax
- \def#1{#3}\or
- \:TxtPar\def#1(##1){#3}\or
- \:TxtPar\def#1(##1,##2){#3}\or
- \:TxtPar\def#1(##1,##2,##3){#3}\or
- \:TxtPar\def#1(##1,##2,##3,##4){#3}\or
- \:TxtPar\def#1(##1,##2,##3,##4,##5){#3}\or
- \:TxtPar\def#1(##1,##2,##3,##4,##5,##6){#3}\or
- \:TxtPar\def#1(##1,##2,##3,##4,##5,##6,##7){#3}\or
- \:TxtPar\def#1(##1,##2,##3,##4,##5,##6,##7,##8){#3}\or
- \:TxtPar\def#1(##1,##2,##3,##4,##5,##6,##7,##8,##9){#3}\or
- \:err4{}\fi \let\:TxtPar\relax \:NextDefine}
-
-\let\NextDefine\relax\let\:TxtPar\relax
-\def\WarningOn{\def\:multid##1{
- \ifx ##1\:undefined \else \:wrn2##1\fi}}
-\def\:gobble#1{}
-\def\WarningOff{\let\:multid\:gobble} \WarningOff
-\Define\Indirect{\futurelet\:next\:Indirect}
-
-\Define\:Indirect{\:theDoReg
- \ifx \:next<
- \def\:temp{\let\DoReg\:DoReg}
- \def\:next<##1>{\expandafter\:temp\csname :<##1>\endcsname}
- \else
- \def\:next##1<##2>{
- \expandafter\ifx \csname :<##2> \endcsname \relax
- \def\:next{##1} \fi
-\:indrwrn\Define \:indrwrn\Object
-\:indrwrn\Table \:indrwrn\IntVar \:indrwrn\DecVar
- \def\:temp{\let\DoReg\:DoReg##1}
- \expandafter\:temp \csname :<##2> \endcsname}
- \fi \:next} \def\:indrwrn#1{ \def\:temp{#1}
- \ifx \:next\:temp \def\:wrn##1##2{\let\:wrn\::wrn} \fi}
-\let\::wrn\:wrn
-\Define\:Hline{
- \setbox\:box\hbox{\vrule height0.5\:thickness
- depth 0.5\:thickness width\:x}
- {\:d\:X \advance\:d \wd\:box
- \advance\:X -\:TeXLoc \global\:TeXLoc\:d
- \vrule width\:X depth\z@ height\z@
- \raise \:Y \box\:box} }\Define\:Vline{
- \setbox\:box\hbox{\vrule width\:thickness
- \ifdim \:y>\z@ height\:y depth\z@
- \else height\z@ depth-\:y \fi}
- \advance\:X -0.5\:thickness
- {\:d\:X \advance\:d \wd\:box
- \advance\:X -\:TeXLoc \global\:TeXLoc\:d
- \vrule width\:X depth\z@ height\z@
- \raise \:Y \box\:box} }\Define\:MvTo(2){\:X#1\:Xunits \:Y#2\:Yunits}
-\Define\:Mv(2){\advance\:X #1\:Xunits
- \advance\:Y #2\:Yunits}
-\def\:DLn(#1,#2,{\:MvTo(#1,#2) \:LnTo(}\Define\:LnTo(2){
- \:x#1\:Xunits \advance\:x -\:X
- \:y#2\:Yunits \advance\:y -\:Y
- \:Ln(\:x\du,\:y\du) }\Define\:Ln(2){
- \:x#1\:Xunits \:y#2\:Yunits
- { \ifdim \:x<\z@
- \advance\:X \:x \:x-\:x
- \advance\:Y \:y \:y-\:y
- \fi
- \:yy\:AbsVal\:y
- \:dd\:yy \advance\:dd \:x
- \ifdim \:dd>\:mmmp
- \ifdim \:x>\:yy
- { \ifdim\:X<\:LBorder \global\:LBorder\:X\fi
-\advance \:X \:x
-\ifdim \:X>\:RBorder \global\:RBorder\:X\fi\advance \:Y 0.5\:thickness
-\ifdim \:Y>\:UBorder \xdef\:UBorder{\the\:Y} \fi
-\advance \:Y \:y
-\ifdim \:Y>\:UBorder \xdef\:UBorder{\the\:Y} \fi }
- \let\:Yunitsy\:x \let\:Xunitsx\:y \let\:temp\:Hline
- \:dd0.6\:yy \:divide\:dd\:x
- \else
- { \advance \:X -0.5\:thickness
-\ifdim \:X<\:LBorder \global\:LBorder\:X \fi
-\advance \:X \:thickness
-\advance \:X \:x
-\ifdim \:X>\:RBorder \global\:RBorder\:X\fi
-\ifdim \:Y>\:UBorder \xdef\:UBorder{\the\:Y} \fi
-\advance \:Y \:y
-\ifdim \:Y>\:UBorder \xdef\:UBorder{\the\:Y} \fi }
- \let\:Yunitsy\:y \let\:Xunitsx\:x \let\:temp\:Vline
- \:dd0.6\:x
-\ifdim \:x>\:mmp \:divide\:dd\:yy \fi
- \fi
- \advance\:dd 0.4\p@
-\:ragged\:Cons\:dd\:ragged
- \:HVLn
- \fi }
- \advance\:X \:x \advance\:Y \:y}\Define\:HVLn{
- \:xx\:AbsVal\:Xunitsx \:divide\:xx\:ragged
- \advance\:xx 0.99\p@ \:K\:InCons\:xx \relax
- \ifnum \:K>\z@
- \divide\:Xunitsx \:K \advance\:K \@ne
- \divide\:Yunitsy \:K
- \else \:K\@ne \fi \:NextLn}
-
-
-\Define\:NextLn{
- \ifnum\:K=\z@ \let\:NextLn\relax
- \else { \:temp } \advance\:K \m@ne
- \advance\:X \:x \advance\:Y \:y
- \fi \:NextLn}\newdimen\:ragged
-
-\Define\Ragged(1){ \:ragged#1\p@ \:ragged0.1\:ragged }
-\Ragged(7.5)
-\Define\PaintUnderCurve(4){{
- \:Z\:Y \def\:next{\Curve(#1,#2,#3,#4)}
- \MoveToLoc(#1) \:d\:X \MoveToLoc(#4)
- \advance\:d -\:X
- \ifdim \:AbsVal\:d<\:mmp \def\:next{}
- \else
- \def\:CrvLnTo(##1,##2){
- \:x \:X \:y \:Y \:X\:DJ \:Y\:yyyy
- \:xx\:X \:dddd \:Y \:X\:x \:Y\:y
- { \advance\:Y \:dddd \divide\:Y \tw@
- \advance\:Z -\:Y
- \advance\:Y 0.5\:Z
- \:dddd \:AbsVal \:Z \:d\z@
- \def\:CrvLnTo{\:LnTo}
- \:yy\:Y \:dd\:dddd \:ddd\:dddd
- \::paint }}
- \fi \:next }}
-\Define\DoCurve(1){ \let\:StopCurve\:SlowCurve
- \def\:CMv(##1){ \:x\:X \:y\:Y \:MvTo(##1)
- \advance\:x -\:X \advance\:y -\:Y
- \:xxx \:x \:yyy\:y}
- \:DoCurve{\Curve(#1)}
- \let\:StopCurve\:FastCurve}
-
-\def\:DoCurve#1(#2)#3{{\XSaveUnits
- \def\:next{#1} \:MvTo(#2,#2)
- \:x\:AbsVal\:X \:y\:Y \:ddd\z@ \:length
- \:Z\:d \:divide\:Z{1.41421\p@}
- \edef\:tempa{\the\:DoDist} \global\:DoDist\z@
- \def\:CrvLnTo(##1){ \MarkLoc(1^) \:CMv(##1)
- { \MarkLoc(2^) \:ddd\z@ \:length
-\:dd \:DoDist \global\advance\:DoDist \:d
-\:ddd \:DoDist \:divide\:ddd\:Z
-\DoReg\:InCons\:ddd \:Z\DoReg\:Z
-
- \ifdim \:Z>\:dd
- \advance\:Z -\:DoDist
-\advance\:dd -\:DoDist
-\:divide\:Z\:dd
-\advance\:X \:Cons\:Z\:xxx
-\advance\:Y \:Cons\:Z\:yyy \:DoRot
- \def\:CrvLnTo{\:LnTo}
- \def\:OvalLn{\:Ln} \XRecallUnits #3 \fi}}
- \:next \xdef\:DoDim{\:Cons\:DoDist}
- \global\:DoDist\:tempa }
- \let\DoDim\:DoDim}
-
-\newdimen\:DoDist\def\:DoRot{ \DSeg\RotateTo(1^,2^) }
-\def\DoLine(#1,#2)(#3)#4{
- \MarkLoc($1) \Move(#1,#2)
- \def\:next{ { \MarkLoc($2)
- \DSeg\RotateTo($1,$2) \let\:DoRot\relax
- \edef\:RecallRagged{\the\:ragged} \MoveTo(#3,#3)
- \:x\:AbsVal\:X \:y\:Y \:ddd\z@ \:length
- \:ragged\:d \divide\:ragged \tw@
- \DoCurve($1,$1,$2,$2)(#3)
- {\:ragged\:RecallRagged #4} }
- \let\DoDim\:DoDim} \:next }
-\def\Table#1{\begingroup \:DraCatCodes \:multid#1
- \:DefineData#1}
-
-
-\def\:DefineData#1#2{\endgroup
- \let\:temp~ \def~{\noexpand~}
- \edef#1{\noexpand\:DoPoly\expandafter\noexpand\csname :\string#1\endcsname}
- \expandafter\edef \csname :\string#1\endcsname
- ##1{\noexpand\ifcase##1(#2)\noexpand\fi}
- \let~\:temp \:DoNextPoly \:DoNextPoly}
-
-\def\:OR{\let\:or\or} \:OR \catcode`\&13 \def&{)\noexpand\:or(}
-
-\def\TableData{\begingroup \:DraCatCodes \:TableData}
-
-\def\:TableData#1#2#3{\endgroup \Table\:temp{#3}
- \:K\z@ \:J\z@ \def\:tempa(##1){\advance\:J \@ne }
- \:temp(0,999){\:tempa} \let\:tempa& \def\:temp{\def#1}
- \def&##1&{
- \ifnum \:K<\:J
- \advance\:K \@ne
- \ifnum \:K=\@ne \def#1{#2(##1)}
- \else
- \:IIIexpandafter\:temp\expandafter{
- #1 & #2(##1) }
- \fi
- \else \let\:next\relax \fi
- \:next}
- \let\:next& &#3&& \let&\:tempa }
-
-\catcode`\&4 \def\:DoPoly#1(#2,#3)#4{
- \expandafter\let \csname :Back\the\:level\endcsname\:or
-\expandafter\edef\csname :DoVars\the\:level\endcsname{
- \:DoB\the\:DoB}
-\advance\:level \@ne
- \:DoB#3 \advance\:DoB -#2
- \def\:PolyOr(##1){
- \ifnum \:DoB=\z@ \:OR
- \else #4(##1) \advance\:DoB \m@ne \fi}
- \:OR
- \def\:temp{\let\:or\:PolyOr #4}
- \:IIIexpandafter\:temp#1{#2}
- \advance\:level \m@ne
-\csname :DoVars\the\:level\endcsname
-\def\:temp{\let\:or}
-\expandafter\:temp\csname :Back\the\:level\endcsname }
-\Define\PaintRect(2){\def\:next{{ \MarkLoc(^)
- \MoveToLoc(^) \Move( #1,0) \MarkLoc(^1) \Move(0,#2)
- \MarkLoc(^2) \Move(-#1,0) \MarkLoc(^3)
- \PaintQuad(^,^1,^2,^3) }}\:next}
-\Define\PaintRectAt(4){\def\:next{{ \MoveTo(#1,#2)
- \:Ex#3\p@ \advance\:Ex -#1\p@
- \:Ey#4\p@ \advance\:Ey -#2\p@
- \PaintRect(\:Cons\:Ex,\:Cons\:Ey)}}
- \:next}\def\::paint{
- \ifdim \:d<\:ragged \advance\:xx -\:X
- \:yyy\:Y \:xxx\:dddd
- \advance\:Y \:yy \divide\:Y \tw@
- \:average\:dddd\:dd\:ddd
- \def\:next{\:brush(\:xx,\z@)\:Y\:yyy\:dddd\:xxx}
- \else \divide\:d \tw@
- \:average\:x\:X\:xx
- \:average\:y\:Y\:yy
- \:average\:dddd\:dd\:ddd
- \fi \:next}\Define\:paint{{ \:AbsDif\:d\:xx\:x
- \ifdim \:d<\:mmp \let\::paint\relax
- \else
- \ifdim \:y >\:yyy \:dd\:y \:y \:yyy \:yyy \:dd \fi
- \ifdim \:yy>\:yyyy \:dd\:yy \:yy\:yyyy \:yyyy\:dd \fi
- \:AbsDif\:dd\:yyyy\:yyy \:AbsDif\:ddd\:yy\:y
- \ifdim \:dd<\:ddd \:dd\:ddd \fi
- \ifdim \:d >\:dd \:d\:dd \fi
- \advance\:d \:d \:diff\:dd\:y\:yyy
- \:diff\:ddd\:yy\:yyyy
- \advance\:y -0.5\:dd \:abs\:dd
- \advance\:yy -0.5\:ddd \:abs\:ddd
- \:X\:x \:Y\:y
- \:average\:dddd\:dd\:ddd
- \def\:next{ \:lpaint \:rpaint }
- \fi
- \::paint }}
-
-\Define\:lpaint{ { \:xx\:x \:yy \:y \:ddd\:dddd \::paint} }
-\Define\:rpaint{ { \:X \:x \:Y \:y \:dd \:dddd \::paint} }
-\Define\PaintQuad(4){\def\:next{{\Units(1pt,1pt)
- \MoveToLoc(#1) \:x \:X \:y \:Y
- \MoveToLoc(#2) \:xx \:X \:yy \:Y
- \MoveToLoc(#3) \:xxx\:X \:yyy\:Y
- \MoveToLoc(#4) \:xxxx \:X \:yyyy \:Y
-
- \:paintQuad }}\:next}
-
-\def\:paintQuad{{
- \:SetVal\:a\:x\:y\:xx\:yy\:xxxx\:yyyy
-\:SetVal\:b\:xx\:yy\:xxx\:yyy\:x\:y
-\:SetVal\:c\:xxx\:yyy\:xx\:yy\:xxxx\:yyyy
-\:SetVal\:cc\:xxxx\:yyyy\:xxx\:yyy\:x\:y
-\def\:A{\:a} \def\:B{\:b} \def\:C{\:c} \def\:D{\:cc}
-\:sort\:B\:A
-\:sort\:C\:B \:sort\:B\:A
-\:sort\:D\:C \:sort\:C\:B \:sort\:B\:A
-\let\:temp\relax
-\:IsTriang\:A\:B
-\:IsTriang\:B\:C
-\:IsTriang\:C\:D
-\:temp
- \:Quad\:A\:temp> \:xxxx\:xx \:yyyy\:yy \:Z\:d
-\:Quad\:D\:next<
- \:PrePaint(\:xx,\:yy,\:d,\:xxxx,\:yyyy,\:Z)
- \:temp \:next }}
-\Define\:PrePaint(6){
- \:x#1 \:y#2 \:yyy#3 \:xx#4 \:yy#5 \:yyyy#6
- \:paint }\def\:Quad#1#2#3{
- \:GetVal#1\:x\:y0
- \:GetVal#1\:xx\:yy1
- \:GetVal#1\:xxx\:yyy2
- \ifdim \:xx#3\:xxx
- \:ddd\:xx \:xx\:xxx \:xxx\:ddd
- \:ddd\:yy \:yy\:yyy \:yyy\:ddd
- \fi
- \def#2{}
- \:diff\:dd\:xxx\:xx
- \ifdim \ifdim\:AbsVal\:dd<\:mp \:yy=\:yyy \else \z@>\z@ \fi
-
- \:d\:yy
- \else
- \ifdim \:AbsVal\:dd>\:mp
- \:diff\:dd\:xxx\:x \:diff\:ddd\:yyy\:y
- \:divide\:ddd\:dd \:diff\:dd\:xx\:xxx
- \:ddd\:Cons\:ddd\:dd \advance\:ddd \:yyy
- \:d\:ddd
- \else \:d\:yyy \fi
- \edef#2{ \noexpand\:PrePaint
- (\the\:x ,\the\:y ,\the\:y,
- \the\:xx,\the\:yy,\the\:d) }
- \fi}\def\:SetVal#1#2#3#4#5#6#7{
- \edef#1{(\the#2,\the#3,\the#4,\the#5,\the#6,\the#7)}}
-
-\def\:sort#1#2{
- \ifdim \:IIIexpandafter\:field#1 <
- \:IIIexpandafter\:field#2
- \let\:temp#1 \let#1#2 \let#2\:temp
- \fi }
-
-\Define\:field(6){#1}
-
-\def\:GetVal#1#2#3{
- \:IIIexpandafter\::GetVal #1#2#3}
-
-\def\::GetVal(#1,#2,#3,#4,#5,#6)#7#8#9{
- \ifcase #9 #7#1 #8#2\or #7#3 #8#4\or #7#5 #8#6 \fi}
-\def\:IsTriang#1#2{
- \ifdim \:IIIexpandafter\:field#1 =
- \:IIIexpandafter\:field#2
- \ifdim \:IIIexpandafter\:fieldB#1 =
- \:IIIexpandafter\:fieldB#2
- \def\:temp{ \:FixTria }
- \fi \fi }
-
-
-\def\:FixTria{
- \edef\:temp{\:IIIexpandafter\:FrsII\:B}
- \ifdim \:IIIexpandafter\:field\:A =
- \:IIIexpandafter\:field\:B
- \ifdim \:IIIexpandafter\:fieldB\:A =
- \:IIIexpandafter\:fieldB\:B
- \edef\:temp{\:IIIexpandafter\:FrsII\:C}
- \fi\fi
- \edef\:A{\:IIIexpandafter\:FrsII\:A}
- \edef\:D{\:IIIexpandafter\:FrsII\:D}
- \edef\:temp{
- \def\noexpand\:a{(\:A,\:temp,\:D)}
- \def\noexpand\:b{(\:temp,\:A,\:D)}
- \def\noexpand\:c{\noexpand\:b}
- \def\noexpand\:cc{(\:D,\:A,\:temp)}}
- \:temp
- \def\:A{\:a} \def\:B{\:b} \def\:C{\:c} \def\:D{\:cc} }
-
-\Define\:fieldB(6){#2}
-\Define\:FrsII(6){#1,#2}
-\def\:IIIexpandafter{\expandafter\expandafter\expandafter}
-
-\Define\DrawRect(2){ \Line( #1,0) \Line(0, #2)
- \Line(-#1,0) \Line(0,-#2)}
-
-\Define\DrawRectAt(4){{
- \MoveTo(#1,#2) \LineTo(#3,#2) \LineTo(#3,#4)
- \LineTo(#1,#4) \LineTo(#1,#2)}}
-\def\du#1{ \ifx#1\:Xunits \else\ifx#1\:Yunits
- \else\ifx#1\:Zunits \else #1
- \fi \fi \fi}
-\let\:svdu=\du
-\Define\XSaveUnits{
- \expandafter\edef\csname XRecallUnits\the\:level\endcsname{
- \:StoreUnits}
- \advance\:level \@ne}
-
-\Define\XRecallUnits{
- \advance\:level \m@ne
- \csname XRecallUnits\the\:level \endcsname}
-
-\Define\SaveUnits{
- \edef\RecallUnits{ \:StoreUnits } }
-
-\Define\:StoreUnits{ \:Xunits \the\:Xunits
- \:Yunits \the\:Yunits \:Zunits \the\:Zunits
- \:Xunitsx\the\:Xunitsx \:Xunitsy\the\:Xunitsy
-\:Yunitsx\the\:Yunitsx \:Yunitsy\the\:Yunitsy }
-\Define\:SearchDir{
- \ifdim \:x<\z@ \:x-\:x \:y-\:y
- \edef\:tempA{\advance\:ddd \ifdim \:y<\z@ - \fi\:CVXXX}
-\else \def\:tempA{} \fi
-\ifdim \:y<\z@
- \edef\:tempA{\:ddd-\:ddd \advance\:ddd \:CCCVX \:tempA}
- \:y-\:y
-\fi
-\ifdim \:y>\:x
- \:ddd\:y \:y\:x \:x\:ddd
- \edef\:tempA{\advance\:ddd -\:XC \:ddd-\:ddd \:tempA}
-\fi
- \:divide\:y\:x \:d57.29578\:y
- \:ddd\:d \:sqr\:y \:K \@ne
- \Do(1,30){\advance\:K \tw@
- \:d-\:Cons\:y\:d \:dd\:d \divide\:dd \:K
- \advance\:ddd \:dd }
- \advance\:ddd -0.49182\:dd
- \:tempA }\Define\Curve(4){\def\:next{{ \XSaveUnits \Units(1pt,1pt)
- \MoveToLoc(#1) \:DI \:X \:DK \:Y
- \MoveToLoc(#2) \:ddd \:X \:Ez \:Y
- \MoveToLoc(#3) \:dd\:X \:Ey\:Y
- \MoveToLoc(#4) \:DJ\:X \:yyyy\:Y \:Curve }}\:next}
-\Define\:FastCurve{ \:AbsDif\:d\:DI\:ddd \:AbsDif\:dddd\:DK\:Ez
- \advance\:d \:dddd
- \ifnum \:d<\:ragged
- \:AbsDif\:d\:DJ\:dd \:AbsDif\:dddd\:yyyy\:Ey
- \advance\:d \:dddd \fi}
-\let\:StopCurve\:FastCurve
-\Define\:SlowCurve{
- \:AbsDif\:d\:DI\:DJ \:AbsDif\:dddd\:DK\:yyyy
- \advance\:d \:dddd }
-\Define\:Curve{ \:StopCurve
- \ifnum \:d<\:ragged \:X\:DI \:Y\:DK
- \:CrvLnTo(\:Cons\:DJ,\:Cons\:yyyy)
- \def\:SubCurves{} \fi
- \:SubCurves}
-
-\def\:CrvLnTo{\:LnTo}\Define\:SubCurves{
- \:average\:yy\:DI\:ddd \:average\:Ex\:DK\:Ez
- \:average\:ddd\:ddd\:dd \:average\:Ez\:Ez\:Ey
- \:average\:dd\:dd\:DJ \:average\:Ey\:Ey\:yyyy
- \:average\:Zunits\:yy\:ddd \:average\:Vdirection\:Ex\:Ez
- \:average\:ddd\:ddd\:dd \:average\:Ez\:Ez\:Ey
- \:average\:DL\:Zunits\:ddd \:average\:xxxx\:Vdirection\:Ez
- { \:ddd \:yy \:Ez \:Ex \:dd\:Zunits
- \:Ey\:Vdirection \:DJ\:DL \:yyyy\:xxxx \:Curve }
- \:DI \:DL \:DK \:xxxx \:Curve }
-\def\MoveToCurve[#1]{
- \Define\:BiSect(3){\MoveToLoc(##1)
- \CSeg[#1]\Move(##1,##2)
- \MarkLoc(##3) }\:MvToCrv}
-
-\Define\:MvToCrv(4){ \:BiSect(#1,#2,:a) \:BiSect(#2,#3,:b)
- \:BiSect(#3,#4,:c) \:BiSect(:a,:b,:A) \:BiSect(:b,:c,:B)
- \:BiSect(:A,:B,:Q)}
-\Define\:OvalDir(3){ \:CosSin{#3\p@}
- \:Zunits\p@ \:d#2\:Zunits \:x\:Cons\:d\:x
- \:Zunits\p@ \:d#1\:Zunits \:y\:Cons\:d\:y
- \:SearchDir }\Define\DrawOval (2){ \DrawOvalArc(#1,#2)(0,\:cccvx) }
-\Define\PaintOval (2){ \PaintOvalArc(#1,#2)(0,\:cccvx) }
-\Define\DrawCircle (1){ \DrawOval(#1,#1) }
-\Define\PaintCircle(1){ \PaintOval(#1,#1) }
-\def\DrawOvalArc(#1,#2)(#3,#4){{
- \:xxxx#4\p@ \advance\:xxxx -#3\p@
- \ifdim \:xxxx=\z@ \else
- \let\:SinOne\:SinB \:OvalDir(#1,#2,#3) \:DJ\:ddd
-\:OvalDir(#1,#2,#4) \:diff\:DI\:ddd\:DJ
-\ifdim\:DI<\z@ \advance\:DI \:CCCVX \fi
-\ifdim \:xxxx<\:CCCVX \else \:DI\:CCCVX \fi
-\:InitOval(#1,#2) \:CosSin\:DJ
- \:xxxx\:x \:yyyy\:y \:xx\:X \:yy\:Y
- \advance\:X \:Xx\:x \advance\:X \:Yx\:y
- \advance\:Y \:Xy\:x \advance\:Y \:Yy\:y
- \let\:Xunits\empty \let\:Yunits\empty
- \Do(1,\:InCons\:DI){
- \:dd\:X \:ddd\:Y \:X\:xx \:Y\:yy
- \:AdvOv\:xxx\:yyy\:xxxx\:yyyy
- \:X\:dd \:Y\:ddd
- \advance\:xxx -\:X \advance\:yyy -\:Y
- \:d\:AbsVal\:xxx
- \advance\:d \:AbsVal\:yyy
- \ifdim \:d>\:ragged
- \:OvalLn(\:xxx,\:yyy) \fi }
- \:OvalDir(#1,#2,#4) \:CosSin\:ddd
- \advance\:xx \:Xx\:x \advance\:xx \:Yx\:y
- \advance\:yy \:Xy\:x \advance\:yy \:Yy\:y
- \advance\:xx -\:X \advance\:yy -\:Y
- \:OvalLn(\:xx,\:yy) \fi }}
-
-\def\:OvalLn{\:Ln}\def\DoOvalArc(#1)(#2){ \:xx\:X \:yy\:Y
- \def\:CMv(##1){ \:Mv(\:xxx,\:yyy)
- \:x\:xxx \:y\:yyy}
- \:DoCurve{ \:X\:xx \:Y\:yy
- \def\:DoRot{ \let\:Xunits\:XunitsReg
- \let\:Yunits\:YunitsReg
- \DSeg\RotateTo(1^,2^) }
- \let\::OvalLn\:CrvLnTo
-\Define\:OvalLn(2){ \:dd\:AbsVal####1
- \advance\:dd \:AbsVal####2 \:divide\:dd\:ragged
- \:J\:InCons\:dd \advance\:J \@ne
- \divide####1 \:J \divide####2 \:J
- \Do(1,\:J){\::OvalLn(####1,####2)}}
- \DrawOvalArc(#1)(#2)}}
-\def\NextTable{\begingroup \:DraCatCodes \:NextTable}
-
-\def\:NextTable#1{\endgroup
- \def\:DoNextPoly{#1\NextTable{}}}
-\NextTable{}\def\:AdvOv#1#2#3#4{
- \:d\:CosOne#3 \advance\:d -\:SinOne#4
- #4\:CosOne#4 \advance#4 \:SinOne#3 #3\:d
- \divide#3 \:eight \divide#4 \:eight
- #1\:X #2\:Y
- \:d\:Xx#3 \advance\:d \:Yx#4 \advance#1 \:d
- \:d\:Xy#3 \advance\:d \:Yy#4 \advance#2 \:d }
-
-\def\:CosOne{7.99878} \def\:SinB{0.13962}
-\def\PaintOvalArc(#1,#2)(#3,#4){{ \ifdim #3\p@=#4\p@
- \let\:next\relax \else
- \:d\:AbsVal{#1\:Xunits} \advance\:d \:AbsVal{#2\:Yunits}
- \ifdim \:d<3\:ragged \divide \:d \tw@ \PenSize(\:d)
-\:Mv(-0.5\:d\du,0) \:Ln(\:d\du,0)
- \else \:InitOval(#1,#2)
- \MarkLoc(o$) \RotateTo(#3) \MoveFToOval(#1,#2)
- \:Ex\:X \:Ey\:Y \edef\:FirstOvDir{\:Cons\:ddd\p@}
- \MoveToLoc(o$) \RotateTo(#4) \MoveFToOval(#1,#2)
- \:Ez \:X \:Vdirection \:Y \edef\:LastOvDir{\:Cons\:ddd\p@}
- \MoveToLoc(o$)
- \if:rotated
- \:Zunits\p@ \:Zunits#1\:Zunits
- \:xx\:Cons\:Zunits\:Xunitsx
- \:Zunits\p@ \:Zunits#2\:Zunits
- \:yy\:Cons\:Zunits\:Yunitsx
- \:x\:xx \:y\:yy \:ddd\z@ \:length
- \:ddd\:d \:divide\:xx\:ddd \:divide\:yy\:ddd
-\else \:xx\p@ \:yy\z@ \fi
- \:AbsDif\:d{#3\p@}{#4\p@}
- \ifdim \:d>359\p@ \:Ez-\:Xx\:xx \advance\:Ez -\:Yx\:yy
-\:Vdirection-\:Xy\:xx \advance\:Vdirection -\:Yy\:yy
-\advance\:Ez \:X \advance\:Vdirection \:Y
-\:setpaint\:PaintOvOv<>
- \else
- \:x\:xx \:y\:yy \:SearchDir
-\:xxx\:FirstOvDir \advance\:xxx -\:ddd
-\ifdim \:xxx<\z@ \advance\:xxx \:CCCVX \fi
-\:yyy\:LastOvDir \advance\:yyy -\:ddd
-\ifdim \:yyy<\z@ \advance\:yyy \:CCCVX \fi
-\:J\z@
-\ifdim \:xxx<\:yyy \ifdim \:yyy<\:CVXXX
- \:Pntovln\:FirstOvDir\:FirstOvDir\:LastOvDir
-\else \ifdim \:xxx>\:CVXXX
- \:Pntovln\:FirstOvDir\:FirstOvDir\:LastOvDir
-\else \:yyy-\:yyy \advance\:yyy \:CCCVX
- \ifdim \:xxx<\:yyy
- \:setpaint\:PntLeftOvOv>< \:PntMovln\:FirstOvDir\:xx
- \else \:FxLx \:setpaint\:PntLeftOvOv>< \:Pntmovln\:LastOvDir
-\fi \fi \fi
-\else \ifdim \:xxx<\:CVXXX
- { \:setpaint\:PaintOvOv<> } \:FxLx \:setpaint\:PntLeftOvOv><
-\:Usrch \:PaintMidOvLn\:LastOvDir\:FirstOvDir
-\else \ifdim \:yyy>\:CVXXX
- { \:FxLx \:setpaint\:PaintOvOv<> } \:setpaint\:PntLeftOvOv><
- \:Dsrch \:PaintMidOvLn\:LastOvDir\:FirstOvDir
-\else \:xxx-\:xxx \advance\:xxx \:CCCVX
- \ifdim \:yyy<\:xxx
- \:setpaint\:PaintOvOv<> \:PntMovln\:FirstOvDir\:xx
- \else
- \:FxLx \:setpaint\:PaintOvOv<> \:Pntmovln\:LastOvDir
-\fi \fi \fi \fi
- \fi \fi \fi}}\def\:setpaint#1#2#3{{\aftergroup#1
-\:d\:Xx\:xx \advance\:d \:Yx\:yy
-\ifdim \:d<\z@ \aftergroup#3
-\else \aftergroup#2 \fi}}
-\def\:FxLx{\:d\:Ex \:Ex\:Ez \:Ez\:d}
-
-\def\:Pntovln#1{
- \let\:SinOne\:SinB \:CosSin#1
- \:xxxx\:Ex \:yyyy\:Ey \:Z\z@
- \:PaintOvLn}
-
-\def\:PntMovln{
- \:Dsrch \:FxLx \:xx\:ddd \:PaintOvLn}
-
-\def\:Pntmovln{
- \:Usrch \:FxLx \:xx\:ddd \:PaintOvLn\:xx}
-\def\:PaintMidOvLn#1#2{
- \:FxLx \:xx\:ddd \:PaintOvLn#1#2
- \:xxx\:Ez \:yyy\:Vdirection
- \:ddd\:Xy\:x \advance\:ddd \:Yy\:y \advance\:ddd \:Y
- \:PaintSlice}
-
-\def\:PntLeftOvOv{
- \:xx-\:xx \:yy-\:yy \:PaintOvOv}
-
-\def\:Dsrch{ \def\:SinOne{-\:SinB}
- \:xx\:x \:yy\:y \:SearchDir
- \:x\:xx \:y\:yy
- \:d\:Ey \:Ey\:Vdirection \:Vdirection\:d }
-
-\def\:Usrch{
- \let\:SinOne\:SinB
- \:x\:xx \:y\:yy \:SearchDir
- \:x\:xx \:y\:yy}\def\:PaintOvLn#1#2{
- \:diff\:dd\:Ey\:Vdirection \:diff\:ddd\:Ex\:Ez
- \ifdim \:AbsVal\:ddd>\:mp
- \:divide\:dd\:ddd \:d#2
- \advance\:d -#1
- \ifnum \:d<\z@ \advance\:d \:CCCVX \fi
- \:DoB\:InCons\:d \let\:next\:PntDo \:next
- \fi}
-
-\def\:PntDo{
- \ifnum\:DoB=\z@ \let\:next\relax
- \else
- \::AdvOv\:x\:y
- \ifdim \:d>\:ragged
- \:ddd\:xxx \advance\:ddd -\:Ez
- \:ddd\:Cons\:dd\:ddd
- \advance\:ddd \:Vdirection \:PaintSlice
- \fi
- \advance\:DoB \m@ne
- \fi \:next}\Define\:PaintSlice{ \:AbsDif\:dddd\:yyy\:ddd
- \advance\:yyy \:ddd \divide\:yyy \tw@
- { \advance\:dddd \:Z \divide\:dddd \tw@
- \:X\:xxxx \:Y\:yyy
- \:xx\:xxx \advance\:xxx -\:xxxx
- \:d\z@
- \:yy\:Y \:dd\:dddd \:ddd\:dddd
- \::paint }
- \:xxxx\:xxx \:yyyy\:yyy \:Z\:dddd \:J\z@}
-\def\::AdvOv#1#2{ \:AdvOv\:xxx\:yyy#1#2
- \:AbsDif\:d\:xxxx\:xxx \advance\:J \@ne
- \ifnum \:J=\sixt@@n \multiply\:d \@cclvi
- \fi }\def\:PaintOvOv#1{ \def\:hdir{#1}
- \:xxx\:Xx\:xx \advance\:xxx \:Yx\:yy
- \:yyy\:Xy\:xx \advance\:yyy \:Yy\:yy
- \advance\:xxx \:X \advance\:yyy \:Y
- \:Z\z@ \:xxxx\:xxx \:yyyy\:yyy
- \:x\:xx \:y\:yy \:DoB\z@ \:J\z@
- \let\:next\:scanOvOv \:next }
-\Define\:scanOvOv{ \advance\:DoB \@ne
- \advance\:J \@ne
- \:AbsDif\:d\:xxx\:Ez
- \ifdim \ifdim \:xxx\:hdir\:Ez -
- \else\ifdim \thr@@\:d<\:ragged -
- \else\ifnum \:DoB>358 -
- \fi \fi \fi \p@<\z@
- \:ddd\:yyyy \advance\:ddd -0.5\:dddd
- \:yyy\:yyyy \advance\:yyy 0.5\:dddd
- \:xxx\:Ez \:PaintSlice
- \let\:next\relax
- \else
- \:d\:xx \advance\:d -\:x
- \:xxx\:yy \advance\:xxx -\:y
- \ifdim -\:Xx\:d\:hdir\:Yx\:xxx
- \let\:SinOne\:SinB
- \::AdvOv\:xx\:yy
- \ifdim \ifdim \:d >\:ragged -
- \else \ifnum \:J>\sixt@@n -
- \fi\fi \p@<\z@
- \:J\z@ \def\:SinOne{-\:SinB}
- \:AdvOv\:dd\:ddd\:x\:y \:PaintSlice \fi
- \else
- \def\:SinOne{-\:SinB}
- \::AdvOv\:x\:y
- \ifdim \ifdim \:d >\:ragged -
- \else \ifnum \:J>\sixt@@n -
- \fi\fi \p@<\z@
- \:J\z@ \let\:SinOne\:SinB
- \:AdvOv\:dd\:ddd\:xx\:yy \:PaintSlice \fi
- \fi \fi
- \:next}\Define\SetBrush{\:Opt[]\:SetBrush{}}
-
-\def\:SetBrush[#1](#2,#3)#4{ \def\:temp{#4}
- \ifx \:temp\empty
- \def\:brush{ \let\:Xunits\empty \let\:Yunits\empty
- \:thickness\:dddd \:Ln }
- \else \def\:BruShape{#4}
- \:dd#2\:Xunits \:ddd#3\:Yunits
- \edef\:Grd{ \:dd\the\:dd \:ddd\the\:ddd }
- \MarkLoc($$) \def\:temp{#1}
-\ifx \:temp\empty \:X\z@ \:Y\z@
-\else \MoveTo(#1) \fi
-\edef\:BrOrg{ \:x\the\:X \:y\the\:Y }
-\MoveToLoc($$)
- \def\:brush(##1,##2){ \::brush } \fi }
-
-\SetBrush(,){}\def\::brush{{ \SetBrush(,){}
-\let\:Xunits\:XunitsReg \let\:Yunits\:YunitsReg
-\advance\:Y -0.5\:dddd \:yy\:Y
-\advance\:yy \:dddd
-\:BrOrg \:Grd \advance\:xx \:X
-\ifdim \:xx<\:X \:d\:X \:X\:xx \:xx\:d \fi
- \:GridPt\:X\:x\:dd
- \:GridPt\:Y\:y\:ddd \:x\:X
- \:DoBrush }}\Define\:DoBrush{
- \ifdim \:Y>\:yy \let\:DoBrush\relax
- \else \ifdim \:X>\:xx \advance\:Y \:ddd \:X\:x
- \else { \:BruShape } \advance\:X \:dd
- \fi \fi \:DoBrush }\def\:GridPt#1#2#3{ \:xxxx#1
- \advance#1 -#2 \:divide#1#3
- #1\:InCons#1#3 \advance#1 #2
- \ifdim #1=\:xxxx
- \else \ifdim \:xxxx>#2 \advance#1 #3 \fi \fi }
-\newcount\:IntId \edef\:IntCount{0\space}
-\newcount\:DecId \edef\:DecCount{0\space}
-
-\Define\:NewCount{\alloc@ 0\count \countdef \insc@unt }
-\Define\:NewDimen{\alloc@ 1\dimen \dimendef \insc@unt }
-
-\def\:NewVar#1#2#3#4#5{ \:multid#1
- \def\:temp{ \csname \string#4\the#4\endcsname\z@
- \edef#1{\noexpand#3 \csname \string#4\the#4\endcsname}}
- \def\:next{ \xdef#5{\the#4\space} #2#1 \def\:next{\global\let}
- \expandafter\:next \csname \string#4\the#4\endcsname#1 \:temp }
- \advance#4 \@ne
- \ifnum #4 > #5 \expandafter\:next \else \expandafter\:temp \fi }
-
-\def\IntVar#1{\:NewVar#1\:NewCount\:IntOp\:IntId\:IntCount}
-\def\DecVar#1{\:NewVar#1\:NewDimen\:DecOp\:DecId\:DecCount}
-
-
-\DecVar\Q \DecVar\R \DecVar\T
-\IntVar\I \IntVar\J \IntVar\K
-\def\WriteVal#1{\immediate\write\sixt@@n{...\string#1=#1;}}
-
-\newdimen\:X \newdimen\:Y
-\newdimen\:x \newdimen\:y \newdimen\:d
-\newdimen\:xx \newdimen\:yy \newdimen\:dd
-\newdimen\:xxx \newdimen\:yyy \newdimen\:ddd
-\newdimen\:xxxx\newdimen\:yyyy\newdimen\:dddd
-\newcount\:J \newcount\:K
-\newdimen\:DI \newdimen\:DJ
-\newdimen\:DK \newdimen\:DL \newtoks\:t
-\def\:IntFromPt#1#2{
- \:d#2\relax
- \advance\:d \ifdim\:d<-0.5\p@-\fi 0.5\p@
- #1\:d \divide#1 65536\relax}
-\def\:temp{\catcode`\p12 \catcode`\t12}
-\def\:Cons{\catcode`\p11 \catcode`\t11}
-\:temp \def\:Frac#1pt{#1}
- \def\:rnd#1.#2pt{#1} \:Cons
-
-\def\:Cons#1{\expandafter\:Frac\the#1}
-\def\:sqr#1{#1\expandafter\:Frac\the#1#1}
-\def\:InCons#1{\expandafter\:rnd\the#1}\def\:Val#1{#1;}
-\let\Val\:Val\def\:IntOp#1#2{\csname :Op#2\endcsname#1}
-\let\:SvIntOp\:IntOp
-\def\:PreIntOp{\let\:IntOp\empty
- \let\Val\empty}
-\def\:PostIntOp{\let\:IntOp\:SvIntOp
- \let\Val\:Val}
-
-\expandafter\def\csname :Op;\endcsname#1{ \the#1}
-\expandafter\def\csname :Op=\endcsname#1#2;{
- \:PreIntOp#1#2\:PostIntOp}
-\expandafter\def\csname :Op+\endcsname#1#2;{
- \:PreIntOp\advance #1 #2\:PostIntOp}
-\expandafter\def\csname :Op-\endcsname#1#2;{
- \:PreIntOp\advance #1 -#2\:PostIntOp}
-\expandafter\def\csname :Op/\endcsname#1#2;{
- \:PreIntOp\divide#1 #2\:PostIntOp}
-\expandafter\def\csname :Op*\endcsname#1#2;{
- \:PreIntOp\multiply#1 #2\:PostIntOp}
-\def\:DecOp#1#2{ \csname :xOp#2\endcsname#1}
-\let\:SvDecOp\:DecOp
-\def\:PreDecOp{\let\:IntOp\the \def\:DecOp{\:Cons}
- \let\Val\empty \let\:du\empty}
-\def\:PostDecOp{\let\:IntOp\:SvIntOp \let\Val\:Val
- \let\:DecOp\:SvDecOp \let\:du\::du }
-
-\def\::du#1{\p@
- \ifx#1\p@ \let\:temp\relax
- \else \def\:temp{\du{#1}}
- \fi\:temp} \:PostDecOp
-
-\expandafter\def\csname :xOp;\endcsname#1{ \:Cons#1}
-\expandafter\def\csname :Op[\endcsname#1#2];{
- \:PreDecOp \:dd#2\p@ \:IntFromPt#1\:dd
- \:PostDecOp }
-\expandafter\def\csname :xOp=\endcsname#1#2;{
- \:PreDecOp#1#2\p@\:PostDecOp }
-\expandafter\def\csname :xOp(\endcsname#1#2){
- \:PreDecOp#1#2\p@\:PostDecOp }
-\expandafter\def\csname :xOp+\endcsname#1#2;{
- \:PreDecOp\advance #1 #2\p@\:PostDecOp }
-\expandafter\def\csname :xOp-\endcsname#1#2;{
- \:PreDecOp\advance #1 -#2\p@\:PostDecOp }
-\expandafter\def\csname :xOp*\endcsname#1#2;{
- \:PreDecOp#1 #2#1\:PostDecOp }
-\expandafter\def\csname :xOp/\endcsname#1#2;{
- \:PreDecOp \:divide#1{#2\p@} \:PostDecOp }
-\let\IF\ifnum \let\THEN\relax
-\let\ELSE\else \let\FI\fi
-
-\def\EqText(#1,#2){
- \z@=\z@ \fi \def\:temp{#1}
- \def\:next{#2} \ifx \:temp\:next }
-
-\def\:IfInt#1(#2,#3){ \z@=\z@ \fi
- \:IntOp\:K=#2; \:IntOp\:J=#3; \ifnum \:K#1\:J }
-
-\def\:IfDim#1(#2,#3){ \z@=\z@ \fi
- \:DecOp\:d=#2; \:DecOp\:dd=#3; \ifdim \:d#1\:dd }
-
-\def\EqInt{ \:IfInt= } \def\LtInt{ \:IfInt< }
-\def\GtInt{ \:IfInt> }
-
-\def\EqDec{ \:IfDim= } \def\LtDec{ \:IfDim< }
-\def\GtDec{ \:IfDim> } \def\Do(#1,#2)#3{
- \expandafter\let
- \csname :Back\the\:level\endcsname\:Do
-\expandafter\edef\csname :DoVars\the\:level\endcsname{
- \DoReg\the\DoReg \:DoB\the\:DoB}
-\advance\:level \@ne
- \DoReg#1 \:DoB#2 \relax
- \ifnum \DoReg<\:DoB
- \def\:Do{\ifnum \DoReg>\:DoB
- \let\:Do\relax
- \else #3\advance\DoReg \@ne \fi
- \:Do}
- \else
- \def\:Do{\ifnum \DoReg<\:DoB
- \let\:Do\relax
- \else #3\advance\DoReg \m@ne \fi
- \:Do}
- \fi \def\:nextdo{ \:Do \advance\:level \m@ne
-\csname :DoVars\the\:level\endcsname
-\def\:temp{\let\:Do}
-\expandafter\:temp\csname
- :Back\the\:level\endcsname } \:nextdo}
-
-\let\:Do\relax
-
-\newcount\DoReg \let\:DoReg\DoReg \newcount\:DoB
- \newcount\:level\def\::divide#1{ \:DI\:DK \:dddd\:DL
- \advance\:DI -\:Cons\:dddd#1
- \:IntFromPt\:J\:dddd \advance\:dddd -\:J\p@
- \multiply\:J \@M \:IntFromPt\:K{\@M\:dddd}
- \advance\:J \:K \:dddd\@M\p@
- \divide\:dddd \:J \advance#1 \:Cons\:DI\:dddd }
-
-\def\:divide#1#2{ \:DK#1 \:DL#2 #1\z@
- \::divide#1 \::divide#1 \::divide#1
- \::divide#1 \::divide#1 }
-\def\:Sqrt#1{ \ifdim #1<\:mmp #1\z@ \else
- \:dd#1 \divide\:dd \tw@
- \def\::Sqrt{ \:ddd#1
- \:divide\:ddd\:dd \:AbsDif\:d\:dd\:ddd
- \advance\:dd \:ddd \divide\:dd \tw@
- \ifdim \:d < \:mmmp
- \let\::Sqrt\relax \fi
- \::Sqrt}
- \::Sqrt #1\:dd \fi }\Define\:length{
- \:dd \:AbsVal \:ddd
- \:abs\:x \:abs\:y
- \ifdim \:dd<\:x \:dd\:x \fi
- \ifdim \:dd<\:y \:dd\:y \fi
- \ifdim \:dd>\:mp
- \:divide\:x\:dd \:sqr\:x
- \:divide\:y\:dd \:sqr\:y
- \:divide\:ddd\:dd \:sqr\:ddd
- \advance\:x \:y \advance\:x \:ddd
- \:y\:dd \:Sqrt\:x \:d\:Cons\:x\:y
- \else \:d\:dd \fi}\Define\:distance(2){\MarkLoc(@^)
- \MoveToLoc(#1) \:x \:X \:y \:Y \:ddd\:Z
- \MoveToLoc(#2)
- \advance\:x -\:X \advance\:y -\:Y
- \advance\:ddd -\if:IIID \:Z \else \:ddd \fi
- \:length \MoveToLoc(@^)}\def\:NormalizeDeg#1{
- \:DL#1 \:K\:InCons\:DL
- \divide\:K \:cccvx \multiply\:K \:cccvx
- \advance #1 -\:K\p@
- \ifdim #1<\z@ \advance #1 \:CCCVX \fi
- \ifdim #1=\z@
- \ifdim\:DL=\z@ \else
- \advance #1 \:CCCVX \fi \fi }\def\:CosSin#1{ \:DK#1
- \:NormalizeDeg\:DK \def\:tempA{}
-\ifdim \:CVXXX<\:DK
- \def\:tempA{\:y-\:y}
- \advance\:DK -\:CCCVX \:DK-\:DK \fi
-\ifdim \:XC<\:DK
- \edef\:tempA{\:x-\:x \:tempA}
- \advance\:DK -\:CVXXX \:DK-\:DK \fi
-\ifdim 45\p@<\:DK
- \edef\:tempA{\:d\:x \:x\:y \:y\:d \:tempA}
- \advance\:DK -\:XC \:DK-\:DK \fi
- \:x\p@ \:y0.01745\:DK \:d\:y \:K\@ne
- \edef\:next{\advance\:K \@ne
- \:sqr\:d \divide\:d \:K \advance}
- \:next \:x -\:d \:next \:y -\:d
- \:next \:x \:d \:next \:y \:d
- \:next \:x -\:d \:next \:y -\:d
- \:next \:x \:d \:next \:y \:d
- \:tempA } \Define\:rInitOval(2){
- \XSaveUnits \let\du=\:rdu
- \:Zunits\p@ \:dd#1\:Zunits
- \:d\:Cons\:dd\:Xunitsx \edef\:Xx{\:Cons\:d}
- \:d\:Cons\:dd\:Xunitsy \edef\:Xy{\:Cons\:d}
- \:dd#2\:Zunits
- \:d\:Cons\:dd\:Yunitsx \edef\:Yx{\:Cons\:d}
- \:d\:Cons\:dd\:Yunitsy \edef\:Yy{\:Cons\:d}
- \XRecallUnits \let\du=\:svdu
-}
-\Define\:xyInitOval(2){
- \:d#1\:Xunits \edef\:Xx{\:Cons\:d} \def\:Xy{0}
- \:d#2\:Yunits \edef\:Yy{\:Cons\:d} \def\:Yx{0} }
- \def\:FigSize#1#2#3{
- \:x\:LBorder \:y\:RBorder \:d\:TeXLoc
- {\Object\:temp{#3}
- \setbox\:box\hbox{ \:temp
- \multiply\:x by \tw@ \multiply\:y by \tw@
- \xdef\:FSize{ \noexpand#1=\:Cons\:x;
- \noexpand#2=\:Cons\:y;}}}
- \global\:LBorder\:x \global\:RBorder\:y
- \global\:TeXLoc \:d
- \:FSize}
-\expandafter\let \csname 0:Ln \endcsname\:Ln
-\expandafter\def\csname 1:Ln \endcsname{
- \advance\:x -\:X \advance\:y -\:Y
- \csname 0:Ln \endcsname(\:x,\:y) }
-
-\newcount\:ClipLevel \:ClipLevel\@ne
-
-\Define\Clip{\futurelet\:next\:Clip}
-
-\Define\:Clip{
- \ifx \:next[ \expandafter\:DefClipOut
- \else \expandafter\:DefClip \fi }
-
-\def\:DefClipOut[#1]{ \:DefClip(#1) }
-\Define\:DefClip(1){ \def\:temp{#1}
- \ifx \:temp\empty
- \:ClipLevel\@ne \def\:next{\let\:Ln}
- \expandafter\:next\csname 0:Ln \endcsname
- \else \def\:temp{\::DefClip(#1)} \fi \:temp }
-\Define\::DefClip(1){ \MarkLoc(^)
- \:x\:X \:y \:Y \Move(#1)
- \ifdim\:x>\:X \:dd\:X \:X\:x \:x\:dd \fi
- \ifdim\:y>\:Y \:dd\:Y \:Y\:y \:y\:dd \fi
- \advance\:ClipLevel \@ne
- \expandafter\edef\csname \the
- \:ClipLevel :Ln \endcsname{
- \:xxx \the\:x \:yyy \the\:y
- \:xxxx\the\:X \:yyyy\the\:Y
- \ifx \:next[ \noexpand\:ClipOut
- \else \noexpand\:ClipIn \fi }
- \let\:Ln\:ClipLn \MoveToLoc(^) }\def\:ClipLn(#1,#2){
- \:x#1\:Xunits \:y#2\:Yunits
- { \let\:Xunits\empty \let\:Yunits\empty
- \advance\:x \:X \advance\:y \:Y
- \ifdim \:x<\:X \:dd\:X \:X\:x \:x\:dd
- \:dd\:Y \:Y\:y \:y\:dd \fi
- \:diff\:dd\:X\:x \:diff\:ddd\:Y\:y
-\:Z \:AbsVal \:dd
-\advance\:Z \:AbsVal\:ddd
-\ifdim \:Z>\sixt@@n\p@
- \divide\:dd 128
- \divide\:ddd 128 \fi
-\:Z\:Cons\:y\:dd
-\advance\:Z -\:Cons\:x\:ddd
-\ifdim \:dd<\z@
- \:dd-\:dd \:ddd-\:ddd \:Z-\:Z
-\fi
- \csname \the \:ClipLevel :Ln \endcsname }
- \advance\:X \:x \advance\:Y \:y }\Define\:ClipIn{
- \def\:next{\let\:next}
- \expandafter\:next\csname \the
- \:ClipLevel :Ln \endcsname
- \advance\:ClipLevel \m@ne
- { \:ClipLeft\:xxxx \:ClipDown\:yyy \:ClipUp\:yyyy \:next }
- { \:ClipRight\:xxx \:ClipDown\:yyy \:ClipUp\:yyyy \:next }
- { \:ClipDown\:yyyy \:next }
- \:ClipUp\:yyy \:next }
-
-\Define\:ClipOut{
- \:ClipLeft\:xxx \:ClipRight\:xxxx
- \:ClipUp \:yyyy \:ClipDown \:yyy
- \def\:next{\let\:next}
- \expandafter\:next
- \csname \the\:ClipLevel :Ln \endcsname
- \advance\:ClipLevel \m@ne \:next }\def\:ClipLeft#1{
- \ifdim \:x<#1 \:KilledLine
- \else \ifdim \:X<#1 \:X#1
- \ifdim \:dd>\:mmmp
- \:Y\:Cons\:ddd\:X \advance\:Y \:Z
- \:divide\:Y\:dd
- \fi \fi \fi \:CondKilLn }
-
-\def\:ClipRight#1{
- \ifdim \:X>#1 \:KilledLine
- \else \ifdim \:x>#1 \:x#1
- \ifdim \:dd>\:mmmp
- \:y\:Cons\:ddd\:x \advance\:y \:Z
- \:divide\:y\:dd
- \fi \fi \fi \:CondKilLn }
-
-\Define\:CondKilLn{
- \:d\:x \advance\:d -\:X
- \ifdim \:d<\z@ \:d-\:d \fi
- \ifdim \:y<\:Y \advance\:d \:Y \advance\:d -\:y
- \else \advance\:d \:y \advance\:d -\:Y \fi
- \ifdim \:d<\:mmp \:KilledLine \fi
- \ifdim \:thickness=\z@ \:KilledLine \fi}
-
-\Define\:KilledLine{
- \let\:ClipLeft\:gobble \let\:ClipRight\:gobble
- \let\:ClipUp \:gobble \let\:ClipDown \:gobble
- \let\:next\relax
- \expandafter\def\csname 1:Ln \endcsname{}}\def\:ClipUp#1{
- \:AbsDif\:d\:y\:Y
- \ifdim \:d<\:ragged
- \advance\:y 0.5\:thickness
-\advance\:Y -0.5\:thickness
-\ifdim \:Y>#1 \:KilledLine
-\else \ifdim \:y>#1
- \:thickness#1 \advance\:thickness -\:Y
- \advance\:Y 0.5\:thickness \:y\:Y
-\else
- \advance\:Y 0.5\:thickness
- \advance\:y -0.5\:thickness
-\fi \fi
-\:dd\p@ \:ddd\z@
-\def\:temp{ \:Z\:Y } \:temp
- \else \let\:temp\relax
- \ifdim \ifdim\:Y<\:y\:Y\else\:y\fi >#1 \:KilledLine
- \else \ifdim \::ClipUp#1\:X\:Y
- \else \ifdim \::ClipUp#1\:x\:y
- \fi \fi \fi \fi \:CondKilLn }
-
-\def\::ClipUp#1#2#3{
-#3>#1 #3#1
-\ifdim \:AbsVal\:ddd>\:mmmp
- #2\:Cons\:dd#3 \advance#2 -\:Z
- \:divide#2\:ddd
-\fi }\def\:ClipDown#1{ \:Ex2#1
- \:Flip\:y \:Flip\:Y \:ClipUp#1
- \:Flip\:y \:Flip\:Y \:temp }
-
-\def\:Flip#1{ #1-#1 \advance#1 \:Ex }
-\Define\:SetDrawWidth{
- \hsize\:RBorder \advance\hsize -\:LBorder
- \leftskip -\:LBorder \rightskip\z@}
-\newdimen\:thickness \:thickness0.75\p@
-
-\Define\PenSize(1){\:thickness#1\relax}
-\Define\:Draw{ \ifvmode \noindent\hfil\fi
- \global\:TeXLoc\z@
- \vbox\bgroup
- \begingroup
- \def\EndDraw{
- \endgroup \:SetDrawWidth
- \egroup}
- \:DraCatCodes \parindent\z@ \everypar{}
-\leftskip\z@ \rightskip\z@ \boxmaxdepth\maxdimen
-\linepenalty10 \let\FigSize\:FigSize
-\def\Draw{\:wrn1{}} \:CommonIID \:InDraw }
-\Define\:CommonIID{\def\RotateTo{\:RotateTo}
-\def\Rotate{\:Rotate}
-\def\MoveF{\:MvF}\def\LineToLoc{\:LnToLoc}}\newdimen\:Xunits \:Xunits\p@
-\newdimen\:Yunits \:Yunits\p@
-\Define\:InDraw{\:Opt()\::InDraw{\:Xunits,\:Yunits}}
-\Define\::InDraw(2){ \:X\z@ \:Y\z@
- \:Xunits#1 \relax \:Yunits#2 \:AdjRunits
- \global\:LBorder\z@ \global\:RBorder\z@ \gdef\:UBorder{0pt}
- \:loadIID \leavevmode }
-
-\Define\:Resize(2){
- \:Xunits#1\:Xunits \relax
- \:Yunits#2\:Yunits \:AdjRunits }
-\Define\:Units(2){
- \:Xunits#1 \relax \:Yunits#2 \:AdjRunits }
-\Define\:loadIID{
- \def\LineAt{\:DLn}
- \def\LineTo{\:LnTo}
- \def\MoveTo{\:MvTo}
- \def\Line{\:Ln}
- \def\Move{\:Mv}
- \def\MoveF{\:MvF}
- \:rotatedfalse\def\:InitOval{\:xyInitOval}
- \def\Scale{\:Resize}
- \def\Units{\:Units}}\let\SaveAll\begingroup
-\let\RecallAll\endgroup
-\def\DrawOn{\def\Draw{\:Draw}} \DrawOn
-\def\DrawOff{\def\Draw{\begingroup \:J\@cclv
- \:NoDrawSpecials \:NoDraw}}
-\catcode`\/0 \catcode`\\11
-/def/:NoDraw#1\EndDraw{/endgroup}
-/catcode`/\0 /catcode`//12
-
-\def\:NoDrawSpecials{\catcode\:J11
- \ifnum \:J=\z@
- \let \:NoDrawSpecials\relax \fi
- \advance\:J \m@ne \:NoDrawSpecials}
-\let\:XunitsReg\:Xunits \let\:YunitsReg\:Yunits \Define\EntryExit(4){
- \edef\:InOut##1{
- \noexpand\ifcase ##1\space
- #1\noexpand\or #2\noexpand\or
- #3\noexpand\or #4\noexpand\fi}}
-
-\EntryExit(0,0,0,0)\Define\:DrawBox{ \:x0.5\wd\:box
- \:y\ht\:box \advance\:y \dp\:box
- \divide\:y \tw@
- \advance \:X -\:InOut0\:x
- \advance \:Y -\:InOut1\:y
- { \advance \:X -\:x
- { \advance \:Y \:y
-\ifdim\:Y>\:UBorder \xdef\:UBorder{\the\:Y}\fi
-\ifdim\:X<\:LBorder \global\:LBorder\:X\fi
-\advance\:X \wd\:box
-\ifdim\:X>\:RBorder \global\:RBorder\:X\fi }
- \advance \:Y -\:y \advance \:Y \dp\:box
- {\:d\:X \advance\:d \wd\:box
- \advance\:X -\:TeXLoc \global\:TeXLoc\:d
- \vrule width\:X depth\z@ height\z@
- \raise \:Y \box\:box} }
- \edef\MoveToExit(##1,##2){
- \:X\the\:X \:Y\the\:Y
- \:x\the\:x \:y\the\:y
- \advance\:X ##1\:x
- \advance\:Y ##2\:y}
- \advance \:X \:InOut2\:x
- \advance \:Y \:InOut3\:y }
- \Define\ThreeDim{\:Opt[]\:ThreeDim{\p@}}
-
-\def\:ThreeDim[#1](#2){\::ThreeDim[#1](#2,,)}
-
-\def\::ThreeDim[#1](#2,#3,#4,#5){ \bgroup\begingroup
- \def\EndThreeDim{ \endgroup\egroup}
- \:IIIDtrue \:Zunits#1 \:Z\z@
- \def\:temp{#4}
- \ifx \:temp\empty \:CosSin{#3\p@} \:divide\:x\:y \:Ey\:x
-\:CosSin{#2\p@} \:Ex\:Cons\:Ey\:x \:Ey\:Cons\:Ey\:y
-\let\:project\:projectPar
-
- \else \:Ex#2\:Xunits \:Ey#3\:Yunits \:Ez#4\:Zunits
-\let\:project\:projectPer
- \fi
- \def\LineAt{\:tDLn}
-\def\LineTo{\:tLnTo}
-\def\MoveTo{\:tMvTo}
-\def\Line{\:tLn}
-\def\Move{\:tMv}
-\def\Scale{\:tResize}
-\def\Units{\:tUnits}\def\RotateTo{\:tRotateTo}
-\def\Rotate{\:tRotate}
-\def\MoveF{\:tMvF}
-\:Vdirection\z@ \def\LineToLoc{\:tLnToLoc} } \Define\:projectPer{
- \:diff\:x\:X\:Ex \:diff\:y\:Y\:Ey
- \:diff\:xxxx\:Z\:Ez
- \:divide\:x\:xxxx \:divide\:y\:xxxx
- \:x-\:Cons\:Ez\:x \:y-\:Cons\:Ez\:y
- \advance\:x \:Ex \advance\:y \:Ey}
-\Define\:projectPar{
- \:x\:Cons\:Ex\:Z \advance\:x \:X
- \:y\:Cons\:Ey\:Z \advance\:y \:Y}
-\def\:tDLn(#1,#2,#3,{\:tMvTo(#1,#2,#3)
- \:tLnTo(}
-\Define\:tMvTo(3){ \:X#1\:Xunits
- \:Y#2\:Yunits \:Z#3\:Zunits}
-\Define\:tMv(3){ \advance\:X #1\:Xunits
- \advance\:Y #2\:Yunits
- \advance\:Z #3\:Zunits}
-\Define\:tResize(3){ \:Xunits#1\:Xunits
- \:Yunits#2\:Yunits \:Zunits#3\:Zunits
- \:AdjRunits}
-\Define\:tUnits(3){ \:Xunits#1 \relax
- \:Yunits#2 \relax \:Zunits#3
- \:AdjRunits}\Define\:tLnTo(3){
- \:project \edef\:temp{\:x\the\:x \:y\the\:y}
- \:X#1\:Xunits \:Y#2\:Yunits \:Z#3\:Zunits
- \:DLN}
-
-\Define\:tLn(3){
- \:project \edef\:temp{\:x\the\:x \:y\the\:y}
- \advance\:X #1\:Xunits
- \advance\:Y #2\:Yunits
- \advance\:Z #3\:Zunits \:DLN}
-
-\Define\:DLN{
- \TwoDim \:temp \LineTo(\:x\du,\:y\du)
- \EndTwoDim }\Define\TwoDim{\bgroup\begingroup
- \def\EndTwoDim{\endgroup\egroup}
- \:loadIID
- \if:IIID \:IIIDfalse \:project \:X\:x \:Y\:y
- \:CommonIID \fi
- \Units(\:Xunits,\:Yunits)}
-\newif\if:rotated
-\Define\RotatedAxes(2){\begingroup
- \def\EndRotatedAxes{\endgroup}
- \if:IIID \:IIIDfalse
- \:project \:X\:x \:Y\:y
- \:CommonIID \fi
- \:DK#2\p@ \advance\:DK -#1\p@
-\advance\:DK -\:CVXXX \:NormalizeDeg\:DK
-\ifdim \:DK<\:mmp \:wrn4{(#1,#2)}
-\else
- \:DK#1\p@ \:NormalizeDeg\:DK \:CosSin\:DK
- \:Xunitsx\:x \:Xunitsy\:y
- \:DK#2\p@ \advance\:DK -\:XC \:NormalizeDeg\:DK \:CosSin\:DK
- \edef\Units(##1,##2){\noexpand\:Units(##1,##2)
- \:Xunitsx \:Cons\:Xunitsx\:Xunits
- \:Xunitsy \:Cons\:Xunitsy\:Xunits
- \:Yunitsx-\:Cons\:y\:Yunits
- \:Yunitsy \:Cons\:x\:Yunits } \fi
-\def\Scale{\:rResize} \def\MoveTo{\:rMvTo}
-\def\Move{\:rMv}
-\def\LineTo{\:rLnTo}
-\def\Line{\:rLn}
-\def\LineAt{\:rDLn}
-\def\MoveF{\:rMvF}\def\:InitOval{\:rInitOval}
-
- \MarkLoc(:org) \Units(\:Xunits,\:Yunits) \:rotatedtrue }
-\newdimen\:Xunitsx \newdimen\:Xunitsy
-\newdimen\:Yunitsx \newdimen\:Yunitsy
-\Define\:rResize(2){
- \:Xunits #1\:Xunits \:Yunits #2\:Yunits
- \:Xunitsx#1\:Xunitsx \:Xunitsy#1\:Xunitsy
- \:Yunitsx#2\:Yunitsx \:Yunitsy#2\:Yunitsy }
-\def\:rdu#1{%
- \ifx #1\:Xunits \units:i\else
- \ifx #1\:Yunits \units:i\else
- \ifx #1\:Zunits \units:i\else #1\fi \fi \fi }
-\def\units:i{\Units(\p@,\p@)}
-\Define\:rMvTo{\MoveToLoc(:org) \:rMv}
-\Define\:rMv(1){ \:rxy(#1)
- \advance\:X \:x \advance\:Y \:y}
-\Define\:rLnTo(1){ \MarkLoc(:a) \:rMvTo(#1) {\LineToLoc(:a)} }
-\Define\:rLn(1){ \:rxy(#1) \:Ln(\:x\du,\:y\du) }
-\def\:rDLn(#1,#2,{\:rMvTo(#1,#2)\:rLnTo(}
-\Define\:rxy(2){ \XSaveUnits \let\du=\:rdu
- \:Zunits\p@ \:Zunits#1\:Zunits
- \:x\:Cons\:Zunits\:Xunitsx
- \:y\:Cons\:Zunits\:Xunitsy \XRecallUnits \XSaveUnits
- \:Zunits\p@ \:Zunits#2\:Zunits
- \advance\:x \:Cons\:Zunits\:Yunitsx
- \advance\:y \:Cons\:Zunits\:Yunitsy \XRecallUnits \let\du=\:svdu}
-\Define\:rMvF(1){ \:CosSin\:direction \XSaveUnits \let\du=\:rdu
- \:Zunits\p@ \:Zunits#1\:Zunits
- \:x\:Cons\:Zunits\:x \:y\:Cons\:Zunits\:y
- \edef\:temp{(\:Cons\:x,\:Cons\:y)} \expandafter\Move\:temp
- \XRecallUnits \let\du=\:svdu}
-\Define\:AdjRunits{
- \:Xunitsx\:Xunits \:Xunitsy\z@
- \:Yunitsx\z@ \:Yunitsy\:Yunits}
-\Define\Text{ \setbox\:box
- \vtop\bgroup \edef\DoReg{\the\DoReg}
- \hyphenpenalty\@M \exhyphenpenalty\@M
- \catcode`\ 10 \catcode`\^^M13 \catcode`\^^I10
- \catcode`\&4 \let~\space
- \:Text} \catcode`\^^M13 %
-\def\:Text(--#1--){%
- \:SetLines#1\hbox{}^^M--)^^M %
- \egroup %
- \if:IIID \TwoDim \:DrawBox \EndTwoDim %
- \else \:DrawBox \fi} %
-\def\:SetLines#1^^M{ %
- \def\:TextLine{#1} %
- \ifx \:TextLine\:LastLine \let\:temp\relax %
- \else \def\:temp{ %
- \:IndirectLines#1\relax~~--)~~\:SetLines}%
- \fi \:temp } \catcode`\^^M9
-\def\:IndirectLines#1~~{ \def\:TextLine{#1}
- \ifx \:TextLine\:LastLine \let\:temp\relax
- \else \def\:temp{\:AddLine{#1}\:IndirectLines}
- \fi \:temp }
-
-\Define\:LastLine{--)}
-
-\def\:AddLine#1{
- \ifvmode \noindent \hsize\z@ \else
- \hfil \penalty-500 \hbox{} \fi
- \hfil#1
- \setbox\:box\hbox{#1}
- \ifdim \wd\:box>\hsize \hsize\wd\:box \fi}\def\TextPar#1#2{
- \def\:TxtPar##1(##2){##1(--##2--)}
- \edef\:temp{\expandafter\noexpand\csname :\string#2\endcsname}
- \edef#2{\noexpand\:TextPar\expandafter\noexpand\:temp}
- \expandafter\let\:temp\:undefined
- \expandafter#1\:temp}
- \catcode`\^^M13
-\def\:TextPar#1{\begingroup \catcode`\&4 %
- \catcode`\ 10 \catcode`\^^M13 \catcode`\^^I10 %
- \:TPar{#1}} \catcode`\^^M9 %
-
-\def\:TPar#1(--#2--){\endgroup
- #1(--#2--) }
- \newdimen\:direction \newdimen\:Vdirection
-\Define\:Rotate(1){ \advance \:direction #1\p@
- \:NormalizeDeg\:direction }
-\Define\:RotateTo(1){ \:direction #1\p@
- \:NormalizeDeg\:direction }
-
-\Define\:tRotate(2){
- \advance\:Vdirection #2\p@
- \:NormalizeDeg\:Vdirection \:Rotate(#1)}
-\Define\:tRotateTo(2){
- \:Vdirection #2\p@
- \:NormalizeDeg\:Vdirection \:RotateTo(#1)}
-\Define\LineF(1){\MarkLoc(,)\MoveF(#1) {\LineToLoc(,)}}
-\Define\:MvF(1){ \:CosSin\:direction
- \:d#1\:Xunits \advance\:X \:Cons\:d\:x
- \:d#1\:Yunits \advance\:Y \:Cons\:d\:y }
-\Define\MoveFToOval(2){
- \:NormalizeDeg\:direction \:CosSin\:direction \:Zunits\p@
- \:d#2\:Zunits \:x\:Cons\:d\:x
- \ifdim \:d=\z@ \:err5{...,\:Cons\:d} \fi
- \:d#1\:Zunits \:y\:Cons\:d\:y
- \ifdim \:d=\z@ \:err5{\:Cons\:d,...} \fi \:SearchDir
- \XSaveUnits
- \if:rotated
- \:Zunits\p@ \:Zunits#1\:Zunits
- \:x\:Cons\:Zunits\:Xunits
- \:Zunits\p@ \:Zunits#2\:Zunits
- \:y\:Cons\:Zunits\:Yunits
- \else
- \:x#1\:Xunits \:y#2\:Yunits \fi \relax
- \Units(\:x,\:y)
- \:Vdirection\:direction \:direction\:ddd
- \MoveF(\@ne) \:direction\:Vdirection \XRecallUnits }
-\Define\:tMvF(1){ \:CosSin\:Vdirection
- \:d #1\:Zunits \advance\:Z \:Cons\:y\:d
- \:xx#1\:Xunits \:yy#1\:Yunits
- \:xx\:Cons\:x\:xx \:yy\:Cons\:x\:yy
- \:CosSin\:direction
- \:x\:Cons\:xx\:x \:y\:Cons\:yy\:y
- \advance\:X \:x \advance\:Y \:y } \Define\CSeg{\:Opt[]\:CSeg1}
-\def\:CSeg[#1]#2(#3,#4){ \MarkLoc($^)
- \MoveToLoc(#4) \:x\:X \:y\:Y
- \if:IIID \:d\:Z \fi \MoveToLoc(#3)
- \advance\:x -\:X \:x#1\:x
- \advance\:y -\:Y \:y#1\:y
- \if:IIID \advance\:d -\:Z \:d#1\:d \fi
- \:t{#2}
- \edef\:temp{\the\:t(
- \expandafter\:Frac\the\:x\noexpand\:du,
- \expandafter\:Frac\the\:y\noexpand\:du \if:IIID ,
- \expandafter\:Frac\the\:d\noexpand\:du \fi)}
- \MoveToLoc($^) \:temp}\Define\LSeg{\:Opt[]\:LSeg1}
-\def\:LSeg[#1]#2(#3,#4){ \:distance(#3,#4)
- \:d#1\:d \:t{#2}
- \edef\:temp{\the\:t(\expandafter\:Frac\the\:d\noexpand\:du)}
- \:temp}\Define\DSeg{\:Opt[]\:DSeg1}
-
-\def\:DSeg[#1]#2(#3,#4){ \MarkLoc(^)
- \MoveToLoc(#4) \:xxx\:X \:yyy\:Y \:xxxx\:Z
- \MoveToLoc(#3)
- \advance\:xxx -\:X \advance\:yyy -\:Y
- \ifdim \:AbsVal\:xxx<\:mmmp
- \ifdim \:AbsVal\:yyy<\:mmmp \:wrn5{#3,#4}
- \fi\fi
- \if:IIID
- \advance \:xxxx -\:Z
- \:divide\:xxx\:Xunitsx
- \:divide\:yyy\:Yunitsy
- \:divide\:xxxx\:Zunits
- \:x\:xxx \:y\:yyy \:ddd\z@ \:length
- \:x\:d \:y\:xxxx \:SearchDir
- \:yyyy\:ddd
- \:x\:xxx \:y\:yyy
- \else
- \:x \:AbsVal\:Yunitsy
-\:y \:AbsVal\:Xunitsy \ifdim \:y>\:x \:x\:y \fi
-\:y \:AbsVal\:Yunitsx \ifdim \:y>\:x \:x\:y \fi
-\:y \:AbsVal\:Xunitsx \ifdim \:y>\:x \:x\:y \fi
-\:K \:InCons\:x \relax
- \ifnum \:K<\thr@@ \:K\@ne
-\else \ifnum \:K<\sixt@@n \:K4
-\else \ifnum \:K<\:XC \:K\sixt@@n
-\else \ifnum \:K<\@m \:K\@cclvi
-\fi \fi \fi \fi
-\divide\:xxx \:K
-\divide\:yyy \:K
- \:x \:Cons\:Yunitsy\:xxx
-\advance\:x -\:Cons\:Yunitsx\:yyy
- \:y-\:Cons\:Xunitsy\:xxx
-\advance\:y \:Cons\:Xunitsx\:yyy
- \fi
- \:SearchDir \:ddd#1\:ddd \:t{#2}
- \edef\:temp{\the\:t(
- \:Cons\:ddd \if:IIID ,\:Cons\:yyyy \fi)}
- \MoveToLoc(^) \:temp} \def\:theDoReg{\def\DoReg{\the\:DoReg}}
-
-\Define\MarkLoc{ \:theDoReg
- \expandafter\edef \csname \:MarkLoc}
-
-\Define\MarkGLoc{ \:theDoReg
- \expandafter\xdef \csname \:MarkLoc}
-
-\Define\:MarkLoc(1){ Loc\space#1:\endcsname{
- \:X\the\:X \:Y\the\:Y
- \if:IIID \:Z\the\:Z \fi } \let\DoReg\:DoReg }
-
-\Define\MoveToLoc(1){ \:theDoReg \expandafter\ifx
- \csname Loc\space#1:\endcsname\relax \:err2{#1}\fi
- \csname Loc\space#1:\endcsname \let\DoReg\:DoReg }
-
-\Define\MarkPLoc(1){ \:theDoReg
- \if:IIID \:project
- \expandafter\edef \csname Loc\space#1:\endcsname{
- \:X\the\:x \:Y\the\:y \:Z\z@}
- \else \:err1\MarkPLoc \fi \let\DoReg\:DoReg}
-
-\Define\WriteLoc(1){{ \:theDoReg \edef\:temp{#1}
- \ifx \:temp\empty \else \MoveToLoc(#1) \fi
- \immediate\write\sixt@@n{...
- \:temp=(\the\:X,\the\:Y\if:IIID,\the\:Z\fi)}}}
-
-\Define\:LnToLoc(1){
- \:x\:X \:y\:Y \MoveToLoc(#1)
- { \:LnTo(\:x\du,\:y\du) }}
-
-\Define\:tLnToLoc(1){
- \:xx\:X \:yy\:Y \:dd\:Z \MoveToLoc(#1)
- { \:tLnTo(\:xx\du,\:yy\du,\:dd\du) }}\def\:GetLine#1#2#3#4#5{
- \MoveToLoc(#1) \divide\:X \:eight \divide\:Y \:eight
- #3\:X #4\:Y
- \MoveToLoc(#2) \divide\:X \:eight \divide\:Y \:eight
- \advance #3 -\:X \advance #4 -\:Y
- #5\:Cons#3\:Y \advance #5 -\:Cons#4\:X
- \divide #3 \:eight \divide #4 \:eight \relax }
-\def\MoveToLL(#1,#2)(#3,#4){
- \:GetLine{#1}{#2}\:x \:y \:xxx
- \:GetLine{#3}{#4}\:xx\:yy\:xxxx
- \:ddd \:Cons\:x \:yy \advance\:ddd -\:Cons\:xx\:y
- \ifdim \:AbsVal\:ddd < \:mmmp
- \:X\@cclv\p@ \:Y\:X
- \:wrn3{(\string#1,\string#2)(\string#3,\string#4)}
- \else
- \:divide\:xxx\:ddd \:divide\:xxxx\:ddd
- \:X\:Cons\:xxx\:xx \advance\:X -\:Cons\:xxxx\:x
- \:Y\:Cons\:xxx\:yy \advance\:Y -\:Cons\:xxxx\:y
- \fi }\Define\MoveToCC{\:Opt[]\:MoveToCC{}}
-
-\def\:MoveToCC[#1](#2,#3)(#4,#5){
- \:UserUnits(#2,#3)(#4,#5)
- \:distance($#2,$#4)
-\ifnum \:d<\:mp \MoveToLoc(#3)
- \:wrn3{(#1,#2)(#3,#4)}
-\else \:xx \:d
- \:distance($#2,$#3) \:xxx\:d
- \:distance($#5,$#4)
- \:yy \:xxx \advance\:yy -\:d
-\:yyy\:xxx \advance\:yyy \:d
-\:divide\:yy\:xx \:yy\:Cons\:yy\:yyy
-\advance\:yy \:xx \divide\:yy \tw@
- \:yyy \ifdim \:AbsVal\:xxx>\:AbsVal\:yy \:xxx \else \:yy \fi
-\ifdim \:AbsVal\:yyy<\:mp \:yyy\z@ \else
- \:divide\:xxx\:yyy \:sqr\:xxx
- \:yyyy\:yy \:divide\:yyyy\:yyy \:sqr\:yyyy
- \advance\:xxx -\:yyyy \:Sqrt\:xxx
- \:yyy\:Cons\:yyy\:xxx
-\fi
- \MoveToLoc($#4) \:x\:X \:y\:Y \:divide\:yy\:xx
-\MoveToLoc($#2)
-\advance\:x -\:X \advance\:y -\:Y
-\advance\:X \:Cons\:yy\:x
-\advance\:Y \:Cons\:yy\:y
- \:divide\:yyy\:xx
-\advance\:X #1\:Cons\:yyy\:y
-\advance\:Y -#1\:Cons\:yyy\:x
-
- \fi \:SysUnits }\def\:UserUnits(#1,#2)(#3,#4){
- \:xx\:Xunitsx \:xxx\:Xunitsy
- \:yy\:Yunitsx \:yyy\:Yunitsy
- \:xxxx\:Cons\:yy\:xxx \advance\:xxxx \:Cons\:yyy\:xx
- \ifdim \:AbsVal\:xxxx>\:mmmp
- \:divide\:xx\:xxxx \:divide\:xxx{-\:xxxx}
- \:divide\:yy{\:xxxx} \:divide\:yyy\:xxxx
- \fi
- \:UnLoc(#1) \:UnLoc(#2)
- \:UnLoc(#3) \:UnLoc(#4)}\Define\:SysUnits{
- \MoveTo(\:Cons\:X,\:Cons\:Y)}\Define\:UnLoc(1){
- \MoveToLoc(#1) \:d\:Cons\:yyy\:X
- \advance\:d \:Cons\:yy\:Y
- \:Y\:Cons\:xx\:Y
- \advance\:Y \:Cons\:xxx\:X \:X\:d
- \MarkLoc($#1)}\def\MoveToLC{\:Opt[]\:MoveToLC{}}
-
-\def\:MoveToLC[#1](#2,#3)(#4,#5){
- \:UserUnits(#2,#3)(#4,#5)
- \MoveToLoc($#2) \:x\:X \:y\:Y
-\MoveToLoc($#3) \advance\:x -\:X
- \advance\:y -\:Y
- \edef\:temp{ \:xxx\the\:x \:yyy\the\:y }
-\MoveToLoc($#4)
-\advance\:X \:y \advance\:Y -\:x
-\MarkLoc(^$) \MoveToLL($#4,^$)($#2,$#3)
-\MarkLoc(^$)
- \:distance($#4,$#5) \:xx\:d \:distance($#4,^$)
-\ifdim \:d>\:xx \:wrn3{(#2,#3)(#4,#5)}
-\else \ifdim \:d<\:mmp \:yy\:xx \else \:yy\:d
- \:divide\:yy\:xx \:sqr\:yy
- \:yy-\:yy \advance\:yy \p@
- \:Sqrt\:yy \:yy\:Cons\:xx\:yy
-\fi \fi
- \:temp \:x\:xxx \:y\:yyy \:length \:xx\:d
-\:divide\:xxx\:xx
-\:divide\:yyy\:xx
-\advance\:X #1\:Cons\:yy\:xxx
-\advance\:Y #1\:Cons\:yy\:yyy
- \:SysUnits } \def\Object#1{\:Opt(){\:DefineSD#1}0}
-
-\def\:DefineSD#1(#2){\begingroup \:multid#1
- \:DraCatCodes \:DefSD#1(#2)}
-
-\def\:DefSD#1(#2)#3{
- \expandafter\::Define\csname\string#1.\endcsname(#2){
- \:t{\:SubD{#3}}
- \if:IIID \edef\:temp{\noexpand\TwoDim \the\:t
- \noexpand\EndTwoDim}
- \else \def\:temp{\the\:t} \fi \:temp}
- \def#1{\def\:SDname{\csname\string#1.\endcsname}
- \:Opt[]\:CallSD{}}}
-
-\def\:CallSD[#1]{ \edef\:Entry{#1} \:SDname }\def\:SubD#1{
- \let\::RecallXLoc\:AddXLoc \gdef\:AddXLoc{}
- \edef\:RecallBor{ \global\:LBorder \the\:LBorder
- \global\:RBorder \the\:RBorder
- \xdef\noexpand\:UBorder{\:UBorder}
- \global\:TeXLoc\the\:TeXLoc }
-\global\:TeXLoc\z@
-\setbox\:box\vbox{\EntryExit(0,0,0,0)
-\begingroup
- \def\MarkXLoc{\:MarkXLoc}
- \:InDraw #1
-\endgroup
-\:SetDrawWidth \let\:XLoc\relax
-\xdef\:AddXLoc{\:dd\the\:LBorder \:AddXLoc}}
-\:RecallBor
- \:ddd\dp\:box
- \ifx \:Entry\empty
- \:DrawBox
-\else
- \let\:RecallIn\:InOut
- \:x\:X \:y\:Y
- \def\:XLoc(##1,##2,##3){
- \def\:temp{##1}
- \ifx \:temp\:Entry \:X\:x \advance\:X -##2
- \:Y\:y \advance\:Y -##3
- \fi}
- \:AddXLoc
- \advance\:X \:dd \advance\:Y -\:ddd
- \EntryExit(-1,-1,\:InOut2,\:InOut3) \:DrawBox
- \let\:InOut\:RecallIn
-\fi
- \MarkLoc(^)
- \MoveToExit(-1,-1)
- \:xxx\:X \:yyy\:Y \advance\:yyy \:ddd
- \def\:XLoc(##1,##2,##3){
- \:X\:xxx \advance\:X ##2 \advance\:X -\:dd
- \:Y\:yyy \advance\:Y ##3
- \MarkLoc(##1)}
- \:AddXLoc
- \MoveToLoc(^)
- \ifx \:Entry\empty \else \MoveToLoc(\:Entry) \fi
- \global\let\:AddXLoc\::RecallXLoc }
-\Define\:MarkXLoc(1){ \:theDoReg
- \let\:XLoc\relax
- \xdef\:AddXLoc{\:AddXLoc \:XLoc(#1,\the\:X,\the\:Y)}
- \let\DoReg\:DoReg}
- \catcode`\ 10 \catcode`\^^M5 \catcode`\^^I10
- \let\wlog\:wlog \let\:wlog\:undefined
-\:RestoreCatcodes \tracingstats1 \endinput
diff --git a/Master/texmf-dist/tex/generic/dratex/TeXProject.sty b/Master/texmf-dist/tex/generic/dratex/TeXProject.sty
deleted file mode 100644
index 056e9eca835..00000000000
--- a/Master/texmf-dist/tex/generic/dratex/TeXProject.sty
+++ /dev/null
@@ -1,2678 +0,0 @@
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2001-02-14-12:58
-% TeXProject.sty %
-% Copyright (C) 1995 Stephane Bressan & Eitan M. Gurari %
-% %
-% This program can redistributed and/or modified under %
-% the terms of the LaTeX Project Public License %
-% Distributed from CTAN archives in directory %
-% macros/latex/base/lppl.txt; either version 1 of the %
-% License, or (at your option) any later version. %
-% %
-% However, you are allowed to modify this program %
-% without changing its name, if you modify its %
-% signature. Changes to the signature can be introduced %
-% with a directive of the form %
-% \message{signature} %
-% %
-% Stephane.Bressan@ecrc.de gurari@cis.ohio-state.edu %
-% http://www.cis.ohio-state.edu/~gurari/ %
-% Needs: %
-% DraTex.sty and AlDraTex.sty %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\immediate\write-1{version 2001-02-14-12:58}
-\ifx\Draw\UnDefined
- \def\DrawRect{\input DraTex.sty }
- \expandafter\DrawRect
-\fi
-\ifx\Tree\UnDefined
- \def\Tree{\input AlDraTex.sty }
- \expandafter\Tree
-\fi
-\expandafter\edef\csname :RestoreCatcodes\endcsname{%
- \catcode`\noexpand\noexpand\noexpand \^=\the\catcode`\^%
-}
-\catcode`\^=7
-\expandafter\edef\csname :RestoreCatcodes\endcsname{%
- \csname :RestoreCatcodes\endcsname
- \catcode`\noexpand \_=\the\catcode`\_%
- \catcode`\noexpand \ =\the\catcode`\ %
- \catcode`\noexpand \&=\the\catcode`\&%
- \catcode`\noexpand :=\the\catcode`:%
- \catcode`\noexpand \^^M=\the\catcode`\^^M%
- \let\expandafter\noexpand
- \csname:RestoreCatcodes\endcsname=\noexpand\undefined}
-\catcode`\^^M=9 \catcode`\ =9 \catcode`\&=13 \relax
- \expandafter
- \def\csname reseffB:\endcsname#1{\csname reseffC:\endcsname#1:}
-\expandafter
- \def\csname reseffC:\endcsname#1:#2:{
- \csname reseff:\endcsname{#1}{#2}}
- \catcode`\:=11 \relax
- \newif\ifpwarnn:
-\def\warningsoff{\pwarnn:false}
-\def\warningson{\pwarnn:true}
-\warningson
-\def\pwarn:#1{\ifpwarnn: \immediate\write16{l.\the\inputlineno
- \space--- warning ---\space #1}\fi}
-\def\whitedef:#1{
- \expandafter\def\csname #1\endcsname{\bgroup
- \ignorewhite: \csname #1:X\endcsname}
-
- \expandafter\def\csname #1:X\endcsname##1{\egroup
- \expandafter\ifx\csname##1 :type\endcsname\relax \else
- \pwarn:{Redefining\space##1?}
- \fi
- \edef\items:{\item:{##1}\items:}
- \expandafter\let\csname##1 :bool\endcsname=\empty
- \expandafter\edef\csname##1 :prjid\endcsname{
- \expandafter\noexpand\csname\projectid: :minmax\endcsname}
- \csname #1:Y\endcsname{##1}}
- \expandafter\def\csname #1:Y\endcsname}
-
-\def\ignorewhite:{ \ifnum \the\catcode`\ =9 \else
- \catcode`\ =9 \catcode`\^^M=9 \catcode`\^^I=9 \relax \fi }
-\def\forbiencomm:{\pwarn:{\string\newproject\space missing}}
-\def\defcom#1{
- \expandafter\def\csname#1\endcsname{
- \bgroup \ignorewhite: \csname#1:A\endcsname}
- \expandafter\def\csname#1:A\endcsname##1{\egroup
- \csname#1:B\endcsname{##1}}
- \expandafter\def\csname#1:B\endcsname}
-\def\verify:::#1{
- \expandafter\ifx\csname#1 :title\endcsname\relax \pwarn:{#1?} \fi
- \csname#1 :prjid\endcsname
-%
-}
-\IntVar\I:I \IntVar\J:J \IntVar\K:K
-\DecVar\Q:Q \DecVar\R:R \DecVar\T:T
-
- \def\tasknode:{0}
-\def\milestonenode:{1}
-\def\projectnode:{2}
-\whitedef:{DEFTASK:}#1#2{
- \expandafter\edef\csname#1 :type\endcsname{\tasknode:}
- \expandafter\def\csname#1 :title\endcsname{#2}
- \bgroup \ignorewhite: \deftaskA:{#1}}
-
-\def\deftaskA:#1#2#3#4#5{\egroup
- \expandafter\edef\csname#1 :date1\endcsname{#2}
- \expandafter\edef\csname#1 :date2\endcsname{#3}
- \def\temp:{#4}
-\ifx\temp:\empty
- \pwarn:{`#1'\space has\space no\space contributions}
-\else
- \getlist:{#1 :eff}{#4}\reseffA:
- \let\reseff:=\relax
- \let\reseffA:=\reseffB:
- \expandafter\edef\csname#1 :eff\endcsname{\csname#1 :eff\endcsname}
-\fi
-
- \setprev:{#1}{#5}
- \deftaskB:{#1}}
-
-\def\deftaskB:#1#2{
- \expandafter\def\csname#1 :desc\endcsname{#2}
- \trace:{#1} }
-\whitedef:{DEFMILESTONE:}#1#2#3{
- \expandafter\edef\csname#1 :type\endcsname{\milestonenode:}
- \expandafter\def\csname#1 :title\endcsname{#2}
- \expandafter\edef\csname#1 :date\endcsname{#3}
- \bgroup \ignorewhite: \defmilestoneA:{#1}}
-
-\def\defmilestoneA:#1#2{\egroup
- \setprev:{#1}{#2}
- \defmilestoneB:{#1}}
-
-\def\defmilestoneB:#1#2{
- \expandafter\def\csname#1 :desc\endcsname{#2}
- \trace:{#1}}
-\whitedef:{DEFPROJECT:}#1#2{
- \expandafter\edef\csname#1 :type\endcsname{\projectnode:}
- \edef\projects:{{#1}{\projects:}}
- \expandafter\def\csname#1 :title\endcsname{#2}
- \bgroup \ignorewhite: \defprojectA:{#1}}
-
-\def\defprojectA:#1#2#3{\egroup
- \getlist:{#1 :under}{#2}\utask:
-\def\utask:##1{%
- \sapply{:temp,merge,
- {\expandafter \ifx \csname ##1:ancs\endcsname\relax\else
- \csname ##1:ancs\endcsname\fi},{#1}}
- \expandafter \let \csname ##1: ancs\endcsname= \:temp:mkls
- \let\:temp:mkls =\:UnDef
- }
-\csname#1: under\endcsname
-
-
- \setprev:{#1}{#3}
- \defprojectB:{#1}}
-
-\def\defprojectB:#1#2{
- \expandafter\def\csname#1 :desc\endcsname{#2}
- \trace:{#1}}
-\def\setproject:data#1{
- \expandafter\ifx\csname#1 :type\endcsname\relax
- \pwarn:{Missing\space `#1'}
- \fi
- \ifnum\csname#1 :type\endcsname=\projectnode:\relax
- \expandafter\ifx\csname#1 :date1\endcsname\relax
- \def\minY:{10000} \def\minM:{10000} \def\minD:{10000}
-\def\maxY:{0} \def\maxM:{0} \def\maxD:{0}
-
- \let\utask:=\utask:I
-\csname#1 :under\endcsname
-
- \expandafter\edef\csname#1 :date1\endcsname{\minD:/\minM:/\minY:}
-\expandafter\edef\csname#1 :date2\endcsname{\maxD:/\maxM:/\maxY:}
-
- \fi \fi
-}
-
- \def\newproject{
- \let\item:=\relax
-\def\items:{}
-\tcount:=0\relax
-\let\deftask=\DEFTASK:
-\let\defmilestone=\DEFMILESTONE:
-\let\defproject=\DEFPROJECT:
-\let\restoregal::=~
-\def\restoregal:{\let~=\restoregal::}
-\def\projects:{}
-\def\verify:##1{}
-\def\verify::##1{}
-\let\minmaxdates=\MINMAXDATES:
-\MINMAXDATES:{1/1/0//31/12/99}
-
-}
-\def\endprojectdefA:{ \let\deftask=\forbiencomm:
-\let\defmilestone=\deftask
-\let\defproject=\deftask
-\let\minmaxdates=\forbiencomm:
-
-}
-\endprojectdefA:
-
-\def\endnewproject{
- \endprojectdefA: \def\item:##1{
- \let\prev:=\checkmemb: \csname##1 :prev\endcsname
- \let\utask:=\checkmemb: \csname##1 :under\endcsname
-}
-\items:
-
-\ifx \projects:\empty\else
- \expandafter\setproject:\projects:
- \expandafter\verify:dates:\projects:
-\fi
-
- \def\item:##1{ \expandafter\let\csname##1 :bool\endcsname=\UnDef: }
-\items:
-\let\item:=\UnDef:
-\let\items:=\UnDef:
-\restoregal:
-\let\projects:=\UnDef:
-\let\verify:=\verify:::
-\let\verify::=\verify:::
-
- \I:I=\projectid:; \I:I+1; \edef\projectid:{\Val\I:I}
-}
-
- \def\filtercommand{
- \def\filtercommand:##1{
- \def\putcommand{##1}
- \let\filtercommand:=\empty
-} }
-\let\filtercommand:=\empty
-\defcom{name}#1{ \verify:{#1}
- \expandafter\expandafter\expandafter\filtercommand:
- \expandafter\expandafter\expandafter{\csname#1 :title\endcsname }}
-\defcom{annotation}#1{ \verify:{#1}
- \expandafter\expandafter\expandafter\filtercommand:
- \expandafter\expandafter\expandafter{\csname#1 :desc\endcsname}}
-\defcom{resource}#1{{ \verify:{#1}
-\ifnum\csname#1 :type\endcsname=\milestonenode:\space
- \pwarn:{`#1'\space has\space no\space resources} ???
-\fi
-\def\sepitems:{\def\sepitems:{\append:Def\all:des{,\space}}}
-\let\reseff:=\reseffI: \let\all:des=\empty
-\traversedo:{#1}\listrsrc:
-\expandafter\def\expandafter\all:des
- \expandafter{\expandafter\filtercommand:\expandafter{\all:des}}
- \expandafter}\all:des}
-\defcom{effort}#1{{ \def\temp:##1,##2,##3//{
- \def\first:{##1} \def\second:{##2}
-}
-\temp:#1,,// \verify:{\first:}
-\ifnum\csname\first: :type\endcsname=\milestonenode:\space
- \pwarn:{`#1'\space has\space no\space resources} ???
- \let\:temp=\empty
-\else
- \findeffort:\first:\second:
- \edef\:temp{\noexpand\filtercommand:{\temp:}}
-\fi
- \expandafter}\:temp}
-\defcom{contributions}#1{{ \verify:{#1}
-\ifnum\csname#1 :type\endcsname=\milestonenode:\space
- \pwarn:{`#1'\space has\space no\space contributions} ???
-\else \findthecontri:{#1} \fi
- }}
-\defcom{start}#1{ \verify:{#1} \startfinish:{#1}1 }
-
-\defcom{finish}#1{\verify:{#1} \startfinish:{#1}2 }
-
-\def\startfinish:#1#2{
- \ifnum\csname#1 :type\endcsname=\milestonenode:\relax
- \expandafter\expandafter\expandafter
- \filtercommand: \expandafter\expandafter\expandafter
- {\expandafter\expandafter\expandafter
- \showdate:\csname#1 :date\endcsname/0/0/0//}
- \else
- \expandafter\expandafter\expandafter
- \filtercommand: \expandafter\expandafter\expandafter
- {\expandafter\expandafter\expandafter
- \showdate:\csname#1 :date#2\endcsname/0/0/0//}
- \fi }
-\defcom{apply}#1{ \apply:#1,,,,// }
-\defcom{rapply}#1{ \rapply:#1,,,,// }
-\defcom{sapply}#1{
- \edef\:temp{\Val\I:I}
-\push:macro\:temp
-
- \def\temp:##1,##2,##3,##4/+/-]/[{
- \def\result:lst{##1} \let\list:op=\empty
- \IF \EqText(##2,merge)\THEN
- \def\list:op{\two:args#1,/+/-]/[
-\expandafter\edef\csname \result:lst :mkls\endcsname{\arg:one,\arg:two}
-\cln:res
-
-}\FI
- \IF \EqText(##2,intersect)\THEN
- \def\list:op{\two:args#1,/+/-]/[
-\get:result\in:both
-\cln:res
-
-} \FI
- \IF \EqText(##2,subtract)\THEN
- \def\list:op{\two:args#1,/+/-]/[
-\get:result\first:only
-\cln:res
-
-} \FI
- \IF \EqText(##2,milestones)\THEN
- \def\list:op{\one:args#1,/+/-]/[
-\let\arg:one=\arg:two
-\get:result\scr:mi
-\cln:res
-
-} \FI
- \IF \EqText(##2,tasks)\THEN
- \def\list:op{\one:args#1,/+/-]/[
-\let\arg:one=\arg:two
-\get:result\scr:ta
-\cln:res
-
-} \FI
- \IF \EqText(##2,projects)\THEN
- \def\list:op{\one:args#1,/+/-]/[
-\let\arg:one=\arg:two
-\get:result\scr:pr
-\cln:res
-
-} \FI
- \IF \EqText(##2,after)\THEN
- \def\list:op{\one:args#1,/+/-]/[
-\let\arg:one=\arg:two
-\get:result\scr:af
-\cln:res
-
-}\FI
- \IF \EqText(##2,before)\THEN
- \def\list:op{\one:args#1,/+/-]/[
-\let\arg:one=\arg:two \def\prev:########1{,########1}
-\get:result\scr:be
-\cln:res
-
-}\FI
- \IF \EqText(##2,up)\THEN
- \def\list:op{\one:args#1,/+/-]/[
-\let\arg:one=\arg:two
-\get:result\scr:up
-\cln:res
-
-} \FI
- \IF \EqText(##2,down)\THEN
- \def\list:op{\one:args#1,/+/-]/[
-\let\arg:one=\arg:two \def\utask: ########1{,########1}
-\get:result\scr:dw
-\cln:res
-
-} \FI
- \IF \EqText(##2,sort)\THEN
- \def\list:op{\one:args#1,/+/-]/[
-\let\arg:one=\arg:two
-\let\:temp\empty
-\get:result\scr:srt \sapply{##1,\gob:I}
-
-} \FI
- \IF \EqText(##2,defproject)\THEN
- \def\list:op{\one:args#1,/+/-]/[
-\df:spr#1/+/-]/[
-\ifx \arg:two\empty
- \pwarn:{defproject\space ##1\space without\space members?}
-\else
- \let\arg:one=\arg:two
- \get:result\scr:df
- \edef\:temp{{##1}{\AA:k}{\:temp}{}{\BB:k}}
- \expandafter\let\csname##1 :date1\endcsname\relax
- \expandafter\let\csname##1 :date2\endcsname\relax
- \push:macro\checkmemb: \def\checkmemb:########1{}
- \newproject \expandafter\defproject\:temp \endnewproject
- \pop:macro\checkmemb:
-\fi
-} \FI
- \IF \EqText(##1,traceon)\THEN
- \def\list:op{\let\rs:trc=\empty
-} \FI
- \IF \EqText(##1,traceoff)\THEN
- \def\list:op{\def\rs:trc########1{}
-} \FI
- \ifx \list:op\empty
- \def\list:op{\futurelet
- \:temp\sapply:apply #1,,,,/+/-]/[
-}
- \fi
- \list:op }
-\temp:#1,,,,/+/-]/[
-
- \pop:macro\:temp
-\I:I=\:temp;
-
-}
-\IntVar\s:appN
-\def\sapply:apply#1,#2,#3/+/-]/[{
- \ifx \:temp\bgroup \else
- \expandafter\ifx\csname #1:mkls\endcsname\relax
- \pwarn:{\string\sapply{#1,\string#2,...}?}
-\fi\fi
-
- \expandafter\edef\csname \result:lst :mkls\endcsname{\ifx
- \:temp\bgroup #1\else
- \expandafter\ifx\csname #1:mkls\endcsname\relax #1
- \else \csname #1:mkls\endcsname
- \fi \fi}
- \cln:res
-
- \def\breadth{0}
- \def\app:mi{#2}
- \expandafter\expandafter\expandafter\r:app
- \expandafter\expandafter\expandafter\s:app
- \csname \result:lst :mkls\endcsname,/+/-]/[
-}
-\def\s:app#1{\I:I=\breadth; \I:I+1; \edef\breadth{\Val\I:I}
- \push:macro\breadth
-\push:macro\app:mi
-\push:macro\app:pr
-\push:macro\app:ta
-
- \app:mi{#1}
- \pop:macro\app:ta
-\pop:macro\app:pr
-\pop:macro\app:mi
-\pop:macro\breadth
-
-}
-\def\s:appA#1{\I:I=\breadth; \I:I+1; \edef\breadth{\Val\I:I}
- \push:macro\breadth
-\push:macro\app:mi
-\push:macro\app:pr
-\push:macro\app:ta
-
- \apply{#1,\app:mi,\app:pr,\app:ta}
- \pop:macro\app:ta
-\pop:macro\app:pr
-\pop:macro\app:mi
-\pop:macro\breadth
-
-}
-\def\scr:ta#1{\ifnum\csname#1:type\endcsname=\tasknode:\space
- \edef\:temp{\:temp,#1}\fi }
-\def\scr:mi#1{\ifnum\csname#1:type\endcsname=\milestonenode:\space
- \edef\:temp{\:temp,#1}\fi }
-\def\scr:pr#1{\ifnum\csname#1:type\endcsname=\projectnode:\space
- \edef\:temp{\:temp,#1}\fi }
-\def\df:spr#1,#2,#3,#4,#5/+/-]/[{%
- \def\AA:k{#4}
- \def\BB:k{#5}
-}
-\def\scr:df#1{\edef\:temp{\ifx\:temp\empty \else \:temp,\fi #1}}
-\def\first:only#1{
- \def\a:temp{#1}
- \expandafter\r:app\expandafter\also:second\arg:two,,/+/-]/[
- \ifx \a:temp\empty\else \edef\:temp{\:temp,#1}\fi
-}
-\def\also:second#1{\def\b:temp{#1}\ifx \a:temp\b:temp
- \let\a:temp\empty\fi}
-\def\in:both#1{
- \def\a:temp{#1}
- \expandafter\r:app\expandafter\found:both\arg:two,,/+/-]/[
-}
-\def\found:both#1{\def\b:temp{#1}\ifx \a:temp\b:temp
- \edef\:temp{\:temp,#1}\fi}
-\def\two:args#1,#2,{\futurelet\:temp\first:arg}
-\def\first:arg#1,{\verify:arg{#1}
- \edef\arg:one{\ifx \:temp\bgroup
- #1\else \csname #1:mkls\endcsname \fi}
- \futurelet\:temp\second:arg}
-\def\second:arg#1,#2/+/-]/[{\verify:arg{#1}
- \edef\arg:two{\ifx \:temp\bgroup
- #1\else \csname #1:mkls\endcsname \fi}}
-\def\one:args#1,#2,{\futurelet\:temp\second:arg}
-\def\verify:arg#1{
- \ifx \:temp\bgroup\else
- \expandafter\ifx \csname #1:mkls\endcsname\relax
- \pwarn:{`#1'\space in\space \string\sapply?}
- \fi \fi}
-\def\cln:res{
- \let\:temp=\empty \car:dinality=0;
- \expandafter\expandafter\expandafter\r:app
- \expandafter\expandafter\expandafter\pre:dup
- \csname \result:lst :mkls\endcsname,,/+/-]/[%
- \expandafter\let\csname \result:lst :mkls\endcsname=\:temp
- \edef\breadth{\Val\car:dinality}
- \rs:trc{\immediate\write16{...[\result:lst]........\:temp}}
-}
-\IntVar\car:dinality
-\def\scr:srt#1{
-\expandafter\let\expandafter\:temp\expandafter\empty
- \expandafter\next:compare\:temp,,,/+/-]/[#1/+/-]/[
-}
-\def\next:compare#1,#2/+/-]/[#3/+/-]/[{
- \if :#1:
- \edef\:temp{\ifx\:temp\empty\else \:temp,\fi#3}
- \def\next:##1/+/-]/[##2/+/-]/[{}
- \else \comp:r{#1}{#3}
- \ifnum \com:p>0
- \edef\:temp{\ifx\:temp\empty\else \:temp,\fi#3,#1}
- \def\next:##1,,##2/+/-]/[##3/+/-]/[{\edef
- \:temp{\ifx\:temp\empty\else \:temp,\fi##1}}
- \else \edef\:temp{\ifx\:temp\empty\else \:temp,\fi#1}
- \if :#2:
- \edef\:temp{\ifx\:temp\empty\else \:temp,\fi#3}
- \def\next:##1/+/-]/[##2/+/-]/[{}
- \else
- \let\next:=\next:compare
- \fi\fi \fi
- \next: #2/+/-]/[#3/+/-]/[
-}
-\def\comp:r#1#2{
- \def\com:p{0}%
- \comp:re#1/+/-]/[#2/+/-]/[%
-}
-\def\comp:re#1#2/+/-]/[#3#4/+/-]/[{%
- \ifnum `#1<`#3\def\com:p{-1}\let\next:=\relax
- \else \ifnum `#1>`#3\def\com:p{1}\let\next:=\relax
- \else \def\next:{\comp:re#2/+/-]/[#4/+/-]/[}%
- \if !#2!\let\next:=\relax \fi
- \if !#4!\let\next:=\relax \fi
- \def\:tempa{#2}\def\:tempb{#4}%
- \ifx \:tempa\space
- \ifx \:tempb\:tempa \else \def\com:p{-1}\fi
- \let\next:=\relax
- \else\ifx \:tempb\space \def\com:p{1}\let\next:=\relax
- \fi\fi
- \fi\fi
- \next:
-}
-\def\rs:trc#1{}
-\def\get:result#1{
- \let\:temp=\empty
- \expandafter\r:app\expandafter#1\arg:one,,/+/-]/[%
- \expandafter\let\csname \result:lst :mkls\endcsname=\:temp}
-\def\scr:af#1{%
-\expandafter\ifx \csname#1:succe\endcsname\relax\else
- \expandafter\expandafter\expandafter\r:app
- \expandafter\expandafter\expandafter\scr:aff
- \csname #1:succe\endcsname,/+/-]/[
-\fi}
-\def\scr:aff#1{\edef\:temp{\:temp,#1}}
-\def\scr:up#1{%
-\expandafter\ifx \csname#1:ancs\endcsname\relax\else
- \expandafter\expandafter\expandafter\r:app
- \expandafter\expandafter\expandafter\scr:aff
- \csname #1:ancs\endcsname,/+/-]/[
-\fi}
-\def\scr:dw#1{\expandafter\ifx \csname #1:under\endcsname\relax\else
- \edef\:temp{\:temp,\csname #1:under\endcsname}\fi}
-\def\scr:be#1{\expandafter\ifx \csname #1:prev\endcsname\relax\else
- \edef\:temp{\:temp,\csname #1:prev\endcsname}\fi}
-\def\pre:dup#1{%
- \def\a:temp{#1}\let\c:temp=\empty
- \expandafter\r:app\expandafter\is:dup\:temp,/+/-]/[%
- \ifx \c:temp\empty
- \car:dinality+1;
- \edef\:temp{\:temp\ifx \:temp\empty\else ,\fi#1}\fi}
-\def\is:dup#1{\def\b:temp{#1}\ifx \a:temp\b:temp \let\c:temp=\b:temp\fi}
-\def\r:app#1#2,#3/+/-]/[{%
- \if !#2!\else #1{#2}\fi
- \if !#3!\expandafter\r:gobble\else \expandafter\r:app\fi
- #1#3/+/-]/[}
-\def\r:gobble#1/+/-]/[{}
-
-
- \def\prjc:VII#1#2#3#4#5#6#7{
- \gdef\all:prjc{}
- { \contributionsstyle{
- \expandafter \gdef \expandafter\all:prjc
- \expandafter{\all:prjc\add:contrib{##1}{#1}}
- }{}{}
- \contributions{#1}
- }
- \all:prjc
-}
-\def\gob:V#1#2#3#4#5{}
-\def\f:cntr#1{\apply{#1,\gob:V,\findcontribution,\gob:V}}
-
-\IntVar\cntr:N
-
-\def\add:contrib#1#2{
- \let\N:EXT=\empty
- \def\findcontribution##1##2##3##4##5{
- \IF \EqText(##2,#1) \THEN
- \gdef\N:EXT{##1}
- \FI
- }
- \sapply{con.TRIB,\f:cntr}
- \ifx \N:EXT\empty
- \cntr:N+1;
- \sapply{\pc:id.\Val\cntr:N,defproject,{#2},#1,}
- \sapply{con.TRIB,merge,con.TRIB,{\pc:id.\Val\cntr:N}}
- \else
- \sapply{ts.k,down,{\N:EXT}}
- \sapply{ts.k,merge,ts.k,{#2}}
- \expandafter\let\csname\N:EXT :type\endcsname\relax
- \sapply{\N:EXT,defproject,ts.k,#1,}
- \fi
-}
-\def\contributorsproject#1#2#3#4{
- \push:macro\checkmemb: \def\checkmemb:##1{}
- \cntr:N=0; \def\pc:id{#1}
- \sapply{con.TRIB,merge,{},{}}
- \sapply{#1,defproject,{#3},,}
- \rapply{#1,\gob:V,\gob:V,\prjc:VII}
- \expandafter\let\csname#1 :type\endcsname\relax
- \sapply{#1,defproject,con.TRIB,#2,#4}
- \pop:macro\checkmemb:
- \sapply{#1,down,{#1}}
-\sapply{#1,\connect:up{#1}}
-\sapply{#1,merge,{},{}}
-
- \sapply{con.TRIB,merge,{},{}}
-}
-
- \def\setnumericdate#1#2{{
- \expandafter \ifx \csname maxMM:\endcsname\relax
- \getminmaxdates:1/1/0//31/12/99//
- \fi
- \def\yrS:{0} \def\moS:{0} \def\dateS:{0}
- \if /\actual:date #2///+/-]/[/
- \date:Coordinate#1#2,,/+/-]/[
- \else
- \def\real::date##1,##2/+/-]/[{##1}
- \edef\real::date{\real::date #2,/+/-]/[}
- \axisdate:#1{real:}\empty
- \fi
- \edef#1{\def\noexpand#1{#1}}
- \expandafter}#1}
-
-\def\actual:date#1/#2/#3/+/-]/[{#2}
-\def\date:Coordinate#1#2,#3,#4/+/-]/[{
- \expandafter \ifx \csname#2 :type\endcsname\relax
- \def#1{0}
- \pwarn:{\noexpand\setnumericdate for\space `#2'?}
- \else\ifnum\csname#2 :type\endcsname=\milestonenode:\relax
- \axisdate:#1{#2}\empty
- \else
- \IF \EqText(start,#3) \THEN
- \axisdate:#1{#2}1
- \ELSE \IF \EqText(finish,#3) \THEN
- \axisdate:#1{#2}2
- \ELSE
- \def#1{0}
- \pwarn:{\noexpand\setnumericdate for\space `#3'?}
- \FI \FI
- \fi \fi
-}
-\def\datesproject#1#2#3#4{
- \push:macro\checkmemb: \def\checkmemb:##1{} \def\pc:id{#1}
- \let\all:prjc=\empty
- \sapply{#1,defproject,{#3},,}
- \cntr:N=1000;
-\bck:N=2;
-\rapply{#1,\cnt:V,\cnt:V,\cnt:VII}
-\bck:N*2; \bck:N+1000;
-
- \rapply{#1,\prjd:V,\prjd:V,\prjd:VII}
- \edef\:temp{\noexpand \sapply{#1,sort,{\all:prjc}}}\:temp
- \let\all:prjc=\empty
- \sapply{#1.m,merge,{},{}}
- \let\prv:=\empty \cntr:N=0;
- \push:macro\pwarn: \def\pwarn:##1{}
- \sapply{#1,\set:dateprj}
- \sapply{#1,defproject,#1.m,#2,#4}
- \pop:macro\pwarn:
- \pop:macro\checkmemb:
- \sapply{#1,\cp:dt}
-
- \sapply{#1,down,{#1}}
-\sapply{#1,\connect:up{#1}}
-\sapply{#1,merge,{},{}}
-
- \sapply{#1.m,merge,{},{}}
-}
-\def\connect:up#1#2{\expandafter \edef \csname #2: ancs\endcsname{#1}}
-\def\prjd:VII#1#2#3#4#5#6#7{\prjd:{#1}}
-\def\prjd:V#1#2#3#4#5{\prjd:{#1}}
-\def\prjd:#1{
- \cntr:N+1; \bck:N-1;
- {\datestyle{
- \setnumericdate\:dateA{#1,start}
-\setnumericdate\:dateB{#1,finish}
-\I:I=\:dateA; \I:I+1000000000; \edef\:dateA{\Val\I:I}
-\I:I=\:dateB; \I:I+1000000000; \edef\:dateB{\Val\I:I}
-\def\xx{#1}\ifx \xx\pc:id \else
- \xdef\all:prjc{\ifx \all:prjc\empty \else \all:prjc,\fi}
- \ifnum\csname#1 :type\endcsname=\milestonenode:\relax
- \xdef\all:prjc{\all:prjc \:dateA.\Val\cntr:N.0.#1}
- \else
- \xdef\all:prjc{\all:prjc \:dateA.\Val\cntr:N.1.#1,
- \:dateB.
- \ifnum\csname#1 :type\endcsname=\projectnode:\space
- \Val\bck:N\else \Val\cntr:N\fi
- .2.#1}
-\fi \fi
-
- }{}{}
- \def\pwarn:##1{} \start{#1}
- }
-}
-\def\cp:dt#1{
- \def\:temp##1##2{##2}
- \edef\:tmp{\expandafter\expandafter\expandafter
- \:temp\csname#1 :under\endcsname}
- \ifnum\csname\:tmp :type\endcsname=\milestonenode:\relax
- \edef\:temp{\csname\:tmp :date\endcsname}
- \else
- \edef\:tempa{\noexpand\IF\noexpand\EqText(\csname#1
- :desc\endcsname,start)}
- \:tempa
- \edef\:temp{\csname\:tmp :date1\endcsname}
- \ELSE
- \edef\:temp{\csname\:tmp :date2\endcsname}
- \FI
- \fi
- \expandafter\let\csname#1 :date1\endcsname=\:temp
- \expandafter\let\csname#1 :date2\endcsname=\:temp
-}
-\IntVar\bck:N
-\def\cnt:V#1#2#3#4#5{\bck:N+1;}
-\def\cnt:VII#1#2#3#4#5#6#7{\bck:N+1;}
-
- \newif\iftrace: \trace:false
-\def\traceon{\trace:true }
-\def\traceoff{\trace:false }
-
-\def\trace:#1{%
- \iftrace:
- \apply{#1,\traceM:,\traceP:,\traceT:}%
- \fi
-}
-\def\traceM:#1#2#3#4#5{%
- \immediate\write16{\string\defmilestone{#1}{#2}{#3}{#4}{#5}}}
-\def\traceP:#1#2#3#4#5{%
- \immediate\write16{\string\defproject{#1}{#2}{#3}{#4}{#5}}}
-\def\traceT:#1#2#3#4#5#6#7{%
- \immediate\write16{\string\deftask{#1}{#2}{#3}{#4}{#5}{#6}{#7}}}
-\def\getlist:#1#2#3{
- \def\op:{#3} \let#3=\relax
- \let~=\space \let\temp:=\empty \getlist::#2,,,/+/-]/[ \restoregal:
- \expandafter\let\csname#1\endcsname=\temp:
-}
-\def\getlist::#1,#2,#3/+/-]/[{
- \def\next:{#1}
- \ifx\next:\empty
- \def\temp::{#3} \ifx\temp::\empty\else \missingiem:#3// \fi
- \else
- \edef\temp:{\temp: \op:{#1}}
- \def\next:{\getlist::#2,#3/+/-]/[} \expandafter\next:
- \fi
-}
-\def\missingiem:#1,,,//{
- \pwarn:{missing\space item\space in\space,,#1}
-}
-\def\setprev:#1#2{
- \def\temp:{#2}
- \ifx\temp:\empty \expandafter\def\csname#1 :prev\endcsname{}
- \else
- \getlist:{#1 :prev}{#2}\prev:
- \def\prev:##1{\expandafter \edef \csname ##1: succe\endcsname
- {\expandafter \ifx \csname ##1: succe\endcsname\relax\else
- \csname ##1: succe\endcsname ,\fi#1}}
-\csname#1: prev\endcsname
-
- \fi
-}
-\def\projectid:{0}
-\def\setproject:#1#2{
- \traversedo:{#1}\setproject:data
-
- \def\temp:{#2}
- \ifx\temp:\empty\else \def\temp:{\setproject:#2} \fi
- \temp:
-}
-\def\verify:dates:#1#2{
- \traversedo:{#1}\checknodedates:
-
- \def\temp:{#2}
- \ifx\temp:\empty\else \def\temp:{\verify:dates:#2} \fi
- \temp:
-}
-\def\traversedo:#1#2{
- \def\utask:##1{
- \expandafter\let\csname##1 :sve\endcsname =\utask:
- \csname##1 :under\endcsname
- #2{##1}
- \def\utask:{\let\utask: =}
- \expandafter\utask:\csname##1 :sve\endcsname
- }
- \csname#1 :under\endcsname #2{#1}
-}
-\def\checkmemb:#1{
- \expandafter\ifx\csname#1 :bool\endcsname\relax
- \pwarn:{definition\space for\space '#1'?}
- \fi
-}
-\def\utask:I#1{
- \ifnum\csname#1 :type\endcsname=\milestonenode:\relax
- \edef\temp:{\csname#1 :date\endcsname}
- \expandafter\maxDate:\temp:/
-\else
- \edef\temp:{\csname#1 :date2\endcsname}
- \expandafter\maxDate:\temp:/
- \edef\temp:{\csname#1 :date1\endcsname}
-\fi
-\expandafter\minDate:\temp:/
-
-}
-\def\minDate:#1/#2/#3/{
- \ifnum #3<\minY:\relax \def\minD:{#1} \def\minM:{#2} \def\minY:{#3}
- \else \ifnum #3=\minY:\relax
- \ifnum #2<\minM: \def\minD:{#1} \def\minM:{#2}
- \else \ifnum #2=\minM:
- \ifnum #1<\minD:\relax\def\minD:{#1} \fi
- \fi\fi
- \fi\fi }
-
-\def\maxDate:#1/#2/#3/{
- \ifnum #3>\maxY:\relax \def\maxD:{#1} \def\maxM:{#2} \def\maxY:{#3}
- \else \ifnum #3=\maxY:\relax
- \ifnum #2>\maxM: \def\maxD:{#1} \def\maxM:{#2}
- \else \ifnum #2=\maxM:
- \ifnum #1>\maxD:\relax\def\maxD:{#1} \fi
- \fi\fi
- \fi\fi }
-\def\getitems:#1#2{
- \def\items:{} \let\item:=\relax
- \tcount:=#2 \relax \advance\tcount: by -1\relax
- \let\utask:=\getchi:
- \csname#1 :under\endcsname
- \def\item:##1{ \expandafter\let\csname##1 :bool\endcsname=\UnDef: }
- \items:
-}
-\def\getchi:#1{
- \expandafter\ifx\csname#1 :bool\endcsname\relax
- \def\next:{ \edef\items:{ \item:{#1} \items: } }
- \ifnum\csname#1 :type\endcsname=\projectnode:\space
- \ifnum 0<\tcount:
- \def\next:{
- \advance\tcount: by -1 \relax
- \csname#1 :under\endcsname \relax
- \advance\tcount: by 1 \relax
- }
-\fi
-
- \fi
- \expandafter\next:
- \fi
- }
-\newcount\tcount:
-\def\checknodedates:#1{
- \def\prev:##1{ \checkafter:{#1}{##1} }
- \csname#1 :prev\endcsname
-}
-\def\checkafter:#1#2{
- \getdate:\temp:A{#1}1
- \getdate:\temp:B{#2}2
- \edef\temp:{\temp:A/\temp:B/{`#1'\space starts\space
- before\space `#2'\space ends}}
- \expandafter\checkdates:\temp:
-}
-
-\def\getdate:#1#2#3{
- \ifnum\csname#2 :type\endcsname=\milestonenode:\space
- \edef#1{\csname#2 :date\endcsname}
- \else \edef#1{\csname#2 :date#3\endcsname}
- \fi
-}
-
-\def\checkdates:#1/#2/#3/#4/#5/#6/#7{
- \ifnum #6>#3\space \pwarn:{#7}
- \else \ifnum #6=#3\space
- \ifnum #5>#2\space \pwarn:{#7}
- \else \ifnum #5=#2\space
- \ifnum #4>#1\space \pwarn:{#7} \fi
- \fi\fi
- \fi\fi }
-\def\listrsrc:#1{
- \ifnum\csname#1 :type\endcsname=\tasknode:\space
- \csname#1 :eff\endcsname
- \else
- \expandafter\expandafter \csname#1 :under\endcsname
- \fi
-}
-\long\def\append:Def#1#2{%
- \def\:temp{\def#1}%
- \expandafter\expandafter\expandafter\:temp\expandafter{#1#2}}
-\def\reseffI:#1#2{
- \expandafter\ifx\csname#1 :bool\endcsname\relax
- \sepitems: \append:Def\all:des{#1}
- \expandafter\let\csname#1 :bool\endcsname=\empty
- \fi
-}
-\def\effortout:{
- \I:I[\Q:Q];
- \IF \EqDec(\I:I,\Q:Q) \THEN \edef\temp:{\Val\I:I}
- \ELSE \edef\temp:{\Val\Q:Q} \FI
-}
-\long\def\contr::#1#2#3{
- \def\contr:##1##2{ \ifnum 0<\tcount:\relax#3\fi #1#2 }
-}
-\def\contributionsstyle{ \contr::
-}
-\contributionsstyle{#1}{\space (#2)}{,\space}
-
-\def\findeffort:#1#2{ \ifx#2\empty
- \def\reseff:##1##2{ \Q:Q + ##2; }
-\else
- \def\reseff:##1##2{
- \def\temp:{##1}
- \ifx\temp:#2 \Q:Q + ##2; \fi
- }
-\fi
-\Q:Q=0;
-\ifnum\csname#1 :type\endcsname=\tasknode:\space
- \csname#1 :eff\endcsname
-\else
- \getitems:{#1}{999}
- \def\item:##1{ \csname##1 :eff\endcsname }
- \items:
-\fi
-\effortout:
- }
-\def\findthecontri:#1{\def\reseff:##1##2{
- \expandafter\ifx\csname##1 :bool\endcsname\relax
- \expandafter\def\csname##1 :bool\endcsname{##2}
- \edef\alls:{\alls: \all:{##1}}
- \else
- \Q:Q=\csname##1 :bool\endcsname;
- \Q:Q+##2;
- \expandafter\edef\csname##1 :bool\endcsname{\Val\Q:Q}
- \fi
-}
-\let\alls:=\empty \let\all:=\relax
-\ifnum\csname#1 :type\endcsname=\tasknode:\space
- \csname#1 :eff\endcsname
-\else
- \getitems:{#1}{999}
- \def\item:##1{ \ifx \yrS: \:UnDef \csname##1 :eff\endcsname
-\else
- \edef\svK:K{\Val\K:K}
- \axisdate:\temp:{##1}1 \ifnum \temp:<\dateA:\else
- \axisdate:\temp:{##1}2 \ifnum \temp:>\dateB:\else
- \csname##1 :eff\endcsname
- \fi\fi
- \K:K=\svK:K;
-\fi
- }
- \items:
-\fi
-\tcount:=0
-\def\all:##1{
- \Q:Q=\csname##1 :bool\endcsname;
- \contr:{##1}{{\effortout:\temp:}}
- \tcount:=1
-}
-\alls:
-}
-\def\datestyle{\def\showdate:##1/##2/##3/##4//}
-\datestyle{#1/#2/#3}
-\def\apply:#1,#2,#3,#4,#5//{
- \verify:{#1} \def\verify:##1{}
- \extract:
- \def\mop:{#2} \def\pop:{#3} \def\top:{#4}
- \apply::{#1}
- \let\verify:=\verify::
-}
-\def\rapply:#1,#2,#3,#4,#5//{
- \verify:{#1} \def\verify:##1{}
- \def\utask:##1{
- \def\mop:{#2} \def\pop:{#3} \def\top:{#4}
- \apply::{##1}
- \I:I=\depth; \I:I+1; \edef\depth{\Val\I:I}
- \ifnum\csname#1 :type\endcsname=\projectnode:\space
- \csname##1 :under\endcsname
- \fi
- \I:I=\depth; \I:I-1; \edef\depth{\Val\I:I}
- }
- \utask:{#1} \let\verify:=\verify::
-}
-
-\def\depth{0}\def\apply::#1{
- \push:macro\utask:
-\push:macro\contr:
-
- \extract:
- \let\temp:=\empty
- \ifnum \csname#1 :type\endcsname=\milestonenode:\space
- \ifx \mop:\empty \else
- \edef\temp:{\expandafter\noexpand\mop:{#1}{\csname#1 :title\endcsname}{\csname#1 :date\endcsname}
-{\expandafter\ifx\csname#1 :prev\endcsname\empty\else
- \pp:\csname#1 :prev\endcsname
- \fi}
-{\expandafter\noexpand\csname#1 :desc\endcsname}
-}
-\fi
-
- \else
- \ifnum \csname#1 :type\endcsname=\projectnode:\space
- \ifx \pop:\empty \else
- \edef\temp:{\expandafter\noexpand\pop:{#1}{\csname#1 :title\endcsname}{
-\expandafter\ifx\csname#1 :under\endcsname\relax\else
- \pp:\csname#1 :under\endcsname
-\fi}
-{\expandafter\ifx\csname#1 :prev\endcsname\empty\else
- \pp:\csname#1 :prev\endcsname
-\fi}{\expandafter\noexpand\csname#1 :desc\endcsname}
-}
-\fi
-
- \else
- \ifx \top:\empty \else
- \edef\temp:{\expandafter\noexpand
- \top:{#1}{\csname#1 :title\endcsname}
-{\csname#1 :date1\endcsname}
-{\csname#1 :date2\endcsname}
-{\expandafter\ifx\csname#1 :eff\endcsname\relax\else
- \pp:\csname#1 :eff\endcsname
-\fi}
-{\expandafter\ifx\csname#1 :prev\endcsname\empty\else
- \pp:\csname#1 :prev\endcsname
-\fi}{\expandafter\noexpand\csname#1 :desc\endcsname}
-}
-\fi
-
- \fi
- \fi
- \temp:
- \pop:macro\contr:
-\pop:macro\utask:
-
-}
-\def\extract:{
- \def\pp:{\expandafter\expandafter\expandafter\expandafter\expandafter
- \expandafter\expandafter\ppp:}
- \def\ppp:##1,{}
- \def\prev:##1{,##1}
- \def\utask:##1{,##1}
- \edef\reseff:##1##2{,##1\string :##2}
-}
-\def\push:macro#1{
- \expandafter\let\csname appl:\Val\s:appN\endcsname#1
- \s:appN+1;
-}
-\def\pop:macro#1{
- \s:appN-1;
- \expandafter\let\expandafter#1\csname appl:\Val\s:appN\endcsname
-}
-\def\set:dateprj#1{\set:dtpr#1,}
-\def\set:dtpr#1.#2.#3.#4,{
- \I:I=#1; \I:I-1000000000;
- \edef\:temp{\noexpand \sapply{\pc:id.#4\ifcase#3\space\else .#3\fi
- ,defproject,{#4},\Val\I:I,
- \ifcase#3\space \or start\or finish\else \fi}} \:temp
- \ifx \prv:\empty \else
- \expandafter\edef\csname \pc:id.#4\ifcase#3\space\else .#3\fi
- :prev\endcsname {\noexpand \prev:{\pc:id.\prv:}}
- \expandafter\edef\csname \pc:id.\prv: :succe\endcsname
- {\pc:id.#4\ifcase#3\space\else .#3\fi}
- \fi
- \edef\prv:{#4\ifcase#3\space\else .#3\fi}
- \edef\all:prjc{\ifx \all:prjc\empty\else \all:prjc,\fi
- \pc:id.#4\ifcase#3\space\else .#3\fi}
- \edef\:temp{\noexpand \sapply{\pc:id.m,merge,
- \pc:id.m,{\pc:id.#4\ifcase#3\space\else .#3\fi}}} \:temp
-}
-\def\gettree:{
- \let\nextrow:=\empty \J:J=0; \row: \edef\tree:{ \tree: // }
- \ifx\nextrow:\empty \else
- \let\row:=\nextrow: \K:K-1;
- \expandafter\gettree:
- \fi
-}
-\def\getnode:#1{
- \I:I=0; \J:J+1;
- \ifnum\csname#1 :type\endcsname=\projectnode:\space
- \expandafter\expandafter \csname#1 :under\endcsname
- \fi
- \expandafter\ifx\csname#1 :bool\endcsname\relax
- \expandafter\let\csname#1 :bool\endcsname=\empty
-\else
- \advance\tcount: by 1\space
- \expandafter\edef\csname##1 :id\endcsname{\the\tcount:}
-\fi
-
- \edef\tree:{ \tree:
- \ifnum\Val\J:J>1\empty~ \fi
- \Val\I:I, \csname#1 :type\endcsname, {\treetext:{#1}}
- \nodeid:{#1}
- }
-}
-\:DefineExt\treestyle(5){\endgroup
- \def\temp:{#1} \ifx\temp:\empty\else \let\project:node=#1 \fi
- \def\temp:{#2} \ifx\temp:\empty\else \let\milestone:node=#2 \fi
- \def\temp:{#3} \ifx\temp:\empty\else \let\task:node=#3 \fi
- \def\temp:{#4} \ifx\temp:\empty\else \let\project:edge=#4 \fi
- \def\temp:{#5} \ifx\temp:\empty\else \def\treenodewidth:{#5pt} \fi
-}
-\treestyle(\VRectNode, \RectNode, \SRectNode,\TreeEdge,70)
-\def\getparms:#1,#2,#3,#4,#5,#6,#7,#8,#9//{
- \def\first:{#1} \def\second:{#2} \def\third:{#3}
- \def\fourth:{#4} \def\fifth:{#5} \def\sixth:{#6}
- \def\seventh:{#7} \def\eighth:{#8} }
-\def\axisdate:#1#2#3{
- \breakdate:\DD:\MM:\YY:{#2}#3
- \K:K=\YY:; \IF \LtInt(\K:K,\yrS:) \THEN \K:K+\maxYY:; \FI
- \K:K*\maxMM:; \K:K+\MM:;
- \IF \EqInt(\maxYY:,0) \THEN
- \IF \LtInt(\K:K,\moS:) \THEN \K:K+\maxMM:; \FI
- \FI
- \K:K*\maxDD:; \K:K+\DD:;
- \K:K-\dateS:; \edef#1{\Val\K:K}
-}
-\def\breakdate:#1#2#3#4#5{
- \expandafter\ifx \csname#4 :date#5\endcsname\relax
- \pwarn:{Dates\space not\space available\space for\space #4}
- \else
- \def\temp:##1/##2/##3/{\def#1{##1}\def#2{##2}\def#3{##3}}
- \expandafter\expandafter
- \expandafter\temp:\csname#4 :date#5\endcsname/
- \fi
-}
-
-\def\titletext:#1{
- \Text(--\titletextA:{#1}--)
-}
-
-\def\titletextA:#1{\ifdim\nodewidth:>0in
- \vbox\bgroup \hsize=\nodewidth:
- \leftskip 0pt plus 0.5\hsize
- \rightskip 0pt plus 0.5\hsize
- \parfillskip 0pt \fi
- #1 \ifdim\nodewidth:>0in
- \egroup \fi}
-\def\treenodestyle{\def\treetext:##1}
-\treenodestyle{\csname#1 :title\endcsname}
-\def\last:segdraw#1{
- \ifnum \effort:n>1
- \I:I=\effort:n; \I:I-1; \edef\effort:n{\Val\I:I}
- \I:I=\effort:from; \I:I+\effort:step; \edef\effort:from{\Val\I:I}
- \I:I=\effort:to; \I:I+\effort:step; \edef\effort:to{\Val\I:I}
- \ifnum \effort:max < \effort:to \let\effort:to=\effort:max \fi
- \expandafter\expandafter\expandafter#1
- \fi
-}
-\def\doelements:#1{%
- \ifx\fifth:\empty \def\fifth:{1}\fi
- \IF \EqInt(\fifth:,0)\THEN \chartelement:{#1}%
- \ELSE \rapply{#1,\milestonechild:,\projectchild:,\taskchild:}\FI}
-
-\def\milestonechild:#1#2#3#4#5{\child:{#1}}
-\def\taskchild:#1#2#3#4#5#6#7{\child:{#1}}
-\def\projectchild:#1#2#3#4#5{\IF \EqInt(\depth,\fifth:)\THEN
- \chartelement:{#1}\FI}
-
-\def\child:#1{\IF \GtInt(\depth,\fifth:)\ELSE
- \chartelement:{#1}\FI }
-\def\getscale:#1{
- \def\scale:{1}
- \K:K=#1;
- \Do(0,4){ \IF \GtInt(\K:K,1000) \K:K/10; \edef\scale:{\scale:0} \FI }
- \R:R=200; \R:R/\K:K; \R:R*\:Cons\:Xunits; \Scale(\Val\R:R,4)
-}
-\defcom{MINMAXDATES:}#1{
- \expandafter\edef\csname\projectid: :minmax\endcsname{
- \noexpand \getminmaxdates:#1//}
- }
-\def\getminmaxdates:#1/#2/#3//#4/#5/#6//{
- \I:I=#4; \I:I-#1; \I:I+1; \edef\maxDD:{\Val\I:I}
- \I:I=#5; \I:I-#2; \I:I+1; \edef\maxMM:{\Val\I:I}
- \I:I=#6; \I:I-#3; \I:I+1; \edef\maxYY:{\Val\I:I}
-}
-\newif\ifpflag:
-\def\cutprojectstasksA:#1{
- \axisdate:\dateA:{#1}1
- \axisdate:\dateB:{#1}2
- \ifnum \dateB:<0\space \pflag:false \fi
- \ifnum \dateA:>\dateF:\space \pflag:false \fi
- \ifnum \dateA:<0\space \def\dateA:{0} \fi
- \ifnum \dateB:>\dateF:\space \let\dateB:=\dateF: \fi
- \ifnum \optt:=\csname#1 :type\endcsname\space \pflag:false \fi
- \ifnum \optp:=\csname#1 :type\endcsname\space \pflag:false \fi
-}
-\Define\ignoredepth:{
- \let\sv:AddBarDepth=\:AddBarDepth
- \Define\:AddBarDepth(2){\let\:AddBarDepth=\sv:AddBarDepth }
-}
-\def\movemilestonesym:#1,#2//{\Q:Q=#1;\Q:Q-#2; \Q:Q/2;
- \Move(0,\Val\Q:Q) }
-\def\putbartext:{
- \if E\bareff: \efforts:(\Val\K:K,\Val\K:K){ \geteff: }
- \else \if T\bartext:
- \K:K+1; \names:Tbl:(\Val\K:K,\Val\K:K){ \getname: }
- \else \let\bareff:=X
- \fi\fi
- \if X\bareff: \else
- \K:K+1;
- \let\nodewidth:=\scnodewidth: \titletext:{\temp:}
- \MoveToExit(-1.1,1.1) \MarkLoc(1-:)
- \MoveToExit(1.1,-1.1) \MarkLoc(2-:) \CSeg\Clip(2-:,1-:)
- \fi
-}
-\Define\getname:(1){ \def\temp:{#1} }
-\Define\geteff:(1){\findeffort:{#1}\empty}
-\def\datesaxis(#1)(#2){ \scheaxis:{#1}{#2}\dates:}
-\def\nonamesaxis(#1)(#2){ \scheaxis:{#1}{#2}\nonames:}
-\def\namesaxis(#1)(#2){{\let\TicText=\TicName::
- \scheaxis:{#1}{#2}\names: }}
-\def\scheaxis:#1#2#3{ \def~{\noexpand&}
- \edef\temp:{\noexpand\Axis(#1)(#2,#3) } \temp: }
-\TextPar\Define\TicName::(1){\IF \EqText(,#1) \THEN
- \ELSE \let\nodewidth:=\scnodewidth:
- \titletext:{#1} \FI}
-\:DefineExt\schedulestyle(7){\endgroup
- \def\baropt:##1##2##3##4//{
- \let\baropt:=\empty \let\txtopt:=\UndDef:
- \baroptA:##1 \baroptA:##2 \baroptA:##3
- }
- \let\baropts:=\empty \let\bartext:=x \let\barIIID:=x
- \let\baraxis:=x \let\bareff:=x
- \def\temp:{#1} \ifx\temp:\empty\else \baropt:#1......// \fi
- \def\temp:{#2#3} \ifx\temp:\empty\else \def\barloc:{#2,#3} \fi
- \def\temp:{#4} \ifx\temp:\empty\else \def\projectcolor:{#4} \fi
- \def\temp:{#5} \ifx\temp:\empty\else \def\taskcolor:{#5} \fi
- \def\temp:{#6} \ifx\temp:\empty\else \def\milestonesym:{#6} \fi
- \def\temp:{#7} \ifx\temp:\empty\else \def\scnodewidth:{#7pt} \fi
-}
-\:DefineExt\schedulelimits(1){\endgroup
- \schedulelimits:#1,,,//
-}
-\expandafter\long\expandafter\def\csname
- .:\string \schedulelimits\endcsname(#1){\endgroup
- \schedulelimits:#1,,,//
-}
-\long\def\schedulelimits:#1,#2,#3//{
- \def\temp:{#1} \ifx\temp:\empty\else \def\schedulelimit:{#1} \fi
- \def\temp:{#2} \ifx\temp:\empty\else \def\schedulecode:{#2} \fi
-}
-\schedulelimits(10000,\par)
-\def\baroptA:#1{
- \if#1T \let\bartext:=T \fi
- \if#1A \let\baraxis:=A \fi
- \if#1E \let\bareff:=E \let\baraxis:=A \fi
- \if3#1 \let\barIID:=3 \edef\baropts:{\baropts: 3} \fi
-}
-
-\schedulestyle(A,2.5,7.5,3,0,$\otimes$,70)
-\def\cutoffdates:{
- \def\yrS:{0} \def\moS:{0} \def\dateS:{0}
-\ifx\second:\empty
- \axisdate:\dateS:{\first:}1
-\else
- \let\:date:=\second:
- \axisdate:\dateS:{}:
-\fi
-\let\dyS:=\DD: \let\moS:=\MM: \let\yrS:=\YY:
-\ifx\third:\empty
- \axisdate:\dateF:{\first:}2
-\else
- \let\:date:=\third:
- \axisdate:\dateF:{}:
-\fi
-\let\dyF:=\DD: \let\moF:=\MM: \let\yrF:=\YY:
-
-}
-\def\cutofftypes:{
- \def\optm:{-1} \def\optt:{-1} \def\optp:{-1}
- \expandafter\cutofftypesA:\fourth:....//
-}
-\def\cutofftypesA:#1#2#3#4//{
- \chkop:#1 \chkop:#2 \chkop:#3
-}
-\def\chkop:#1{
- \if M#1 \let\optm:=\milestonenode: \fi
- \if T#1 \let\optt:=\tasknode: \fi
- \if P#1 \let\optp:=\projectnode: \fi
-}
-\def\getint:#1.#2.#3//{ \K:K=#1; \def\frac:{0.#2} }
-\def\utaskII:#1{
- \ifnum \csname#1 :type\endcsname=\milestonenode:\space \else
- \pflag:true
- \edef\svK:K{\Val\K:K} \cutprojectstasks:{#1} \K:K=\svK:K;
- \ifpflag: \ifnum \csname#1 :type\endcsname=\projectnode:\space
- \J:J=0; \contributionsstyle{}{}{} \findthecontri:{#1}
-\def\all:##1{ \reseffII:{##1}{\csname##1 :bool\endcsname}
- \expandafter\let\csname##1 :bool\endcsname=\:UnDef
- }
-\alls:
-
-\else \J:J=0;
-\let\reseff:=\reseffII:
-\csname#1 :eff\endcsname
- \fi
-\R:R=\J:J; \R:R/2; \R:R+\K:K; \K:K+\J:J;
-\edef\names:{ \names: \ifx\names: \empty\else ~ \fi
- \Val\R:R,\csname#1 :title\endcsname }
-\edef\nonames:{ \nonames: \ifx\nonames:\empty\else ~ \fi
- \Val\K:K,\relax
- }
-\edef\lastnames:{ \Val\K:K }
-
- \fi
- \fi
-}
-\def\reseffII:#1#2{ \J:J+1;
-\IF \GtDec(#2,\maxeffort:) \edef\maxeffort:{#2} \fi
-\edef\bars:{ #2,#1 \ifx\bars:\empty\else ~ \fi \bars: }
- }
-\def\dec:dim#1{%
- \def~{\noexpand&} \edef\tmp:i{\bars:}
- \expandafter\Table\expandafter\tmp:i\expandafter{\tmp:i}
- \Define\tmp:ii(1){} \I:I=0; \tmp:i(0,999){\I:I+1; \tmp:ii}
- \edef\effort:max{\Val\I:I} \I:I+#1; \I:I-1;
- \I:I / #1;
- \edef\effort:n{\Val\I:I} \J:J=\effort:max; \J:J/\effort:n;
- \I:I=\J:J; \I:I*\effort:n; \IF \LtInt(\I:I,\effort:max) \J:J+1;\FI
- \def\effort:from{1} \edef\effort:to{\Val\J:J}
- \let\effort:step=\effort:to
-}
-\def\cnd:starts#1{
- \aft:edraw
-
- \df:bfs
-
- \snd:bxo #1
- \global \expandafter\setbox
- \csname dra:bx\effort:n\endcsname=\hbox
-}
-\def\aft:edraw{
- \ifx \effort:boxes\:Undef
- \gdef\effort:boxes{\global\let\effort:boxes=\:Undef}
- \global\let\ef:EndDraw=\EndDraw
- \gdef\EndDraw{\ef:EndDraw \global\let\EndDraw=\:UnDef \effort:boxes }
- \fi
-}
-\def\df:bfs{
- \expandafter\ifx \csname dra:bx\effort:n\endcsname\relax
- \global\csname newbox\expandafter
- \endcsname \csname dra:bx\effort:n\endcsname \fi
-}
-\def\snd:bxo#1{
- \expandafter\ifx \csname right:mrk\endcsname\relax
- \tmp:dim=\:RBorder
- \advance\tmp:dim by -\:LBorder
-\else
- \tmp:dim=\right:mrk pt \advance\tmp:dim by - \left:mrk pt
- \global\let\right:mrk\:UnDef
-\fi
-
- \expandafter\tmp:toks\expandafter{\effort:boxes}
- \expandafter\expandafter\expandafter\tmp:toks
- \expandafter\expandafter\expandafter{\expandafter
- \the\expandafter\tmp:toks #1}
- \xdef\effort:boxes{\the\tmp:toks \noexpand\Draw
- \noexpand\Text(--\noexpand \hbox to\the\tmp:dim{
-\hss
-
- \box \csname dra:bx\effort:n\endcsname
- }
-
- --)\noexpand\EndDraw }
-}
-\ifx \tmp:toks\:UnDef \csname newtoks\endcsname \tmp:toks \fi
-\def\sv:forchart{
- \let\sv:bars=\bars:
- \let\sv:names=\names:
- \let\sv:nonames=\nonames:
- \let\gall:=~
-}
-\def\recall:forchart{
- \let\bars:=\sv:bars
- \let\names:=\sv:names
- \let\nonames:=\sv:nonames
- \let~=\gall:
-}
-\TextPar\Define\EffortBarText:(1){
- \MoveToLoc(BarBot) \Move(5pt\du,0)
- \EntryExit(-1,0,0,0) \Text(--#1--)
- \MoveToExit(-1.1,1.1) \MarkLoc(1-:)
- \MoveToExit(1.1,-1.1) \MarkLoc(2-:) \CSeg\Clip(2-:,1-:)
-}
-\:DefineExt\effortstyle(1){\endgroup\effortstyle:(#1,,,)}
-\Define\effortstyle:(6){
- \def\baropt:##1##2##3##4//{
- \effortbaroptA:##1 \effortbaroptA:##2 \effortbaroptA:##3
- }
- \let\effortbaropts:=\empty \let\effortbaraxis:=x
- \let\effortbartext:=x \let\effortbarIIID:=x
- \def\temp:{#1} \ifx\temp:\empty\else \baropt:#1......// \fi
- \def\temp:{#2#3} \ifx\temp:\empty\else \def\effortbarloc:{#2,#3} \fi
- \def\temp:{#4} \ifx\temp:\empty\else \def\effortcolor:{#4} \fi
- \def\temp:{#5} \ifx\temp:\empty\else \def\efftextwidth:{#5pt} \fi
-}
-\:DefineExt\effortlimits(1){\endgroup
- \effortlimits:#1,,,//
-}
-\expandafter\long\expandafter\def\csname
- .:\string \effortlimits\endcsname(#1){\endgroup
- \effortlimits:#1,,,//
-}
-\long\def\effortlimits:#1,#2,#3//{
- \def\temp:{#1} \ifx\temp:\empty\else \def\effortlimit:{#1} \fi
- \def\temp:{#2} \ifx\temp:\empty\else \def\effortcode:{#2} \fi
-}
-\effortlimits(10000,\par)
-\def\effortbaroptA:#1{
- \if#1A \let\effortbaraxis:=A \fi
- \if#1T \let\effortbartext:=T \fi
- \if3#1 \let\effortbarIIID:=3
- \edef\effortbaropts:{\effortbaropts: 3} \fi
-}
-
-\effortstyle(A,2.5,7.5,1,70)
-\let\effortaxis=\datesaxis
-\TextPar\Define\TicName:(1){ \IF \EqText(,#1) \THEN
- \ELSE \let\nodewidth:=\efftextwidth:
- \titletext:{#1} \FI}
-\def\sort:{
- \let\sorted:=\empty
- \pflag:false
- \expandafter\sortA:\dates:{}
- \let\dates:=\sorted:
- \ifpflag: \expandafter\sort: \fi}
-\def\sortA:#1#2{
- \def\temp:{#2}
- \ifx\temp:\empty \edef\sorted:{\sorted: {#1}} \let\next:=\relax
- \else
- \ifnum #1>#2\space
- \pflag:true
- \edef\sorted:{\sorted: {#2}} \def\next:{\sortA:{#1}}
- \else
- \edef\sorted:{\sorted: {#1}} \def\next:{\sortA:{#2}}
- \fi
- \fi
- \next:
-}
-\def\indexIII:#1{
- \Q:Q = 0; \I:I = 0;
- \csname#1 :prev\endcsname
- \IF \GtInt(\I:I,0) \THEN \Q:Q / \I:I; \FI
- \def\entry:{#1} \let\next:=\empty
- \expandafter\addtocurrow:\currow:{}{}
-}
-\def\prevI:#1{
- \expandafter\ifx\csname#1 : in/cl: \endcsname\relax \else
- \Q:Q + \csname#1 : in/cl: \endcsname;
- \I:I + 1;
- \fi
-}
-\def\addtocurrow:#1#2{
- \def\temp:{#1}
- \ifx\temp:\empty
- \edef\next:{\next:{\Val\Q:Q}{\entry:}} \let\currow:=\next:
- \else
- \IF \GtDec(#1,\Q:Q) \THEN
- \edef\next:{\next:{\Val\Q:Q}{\entry:}}
- \Q=#1; \def\entry:{#2}
- \ELSE
- \edef\next:{\next:{#1}{#2}}
- \FI
- \expandafter\addtocurrow:
- \fi }
-\def\inserttocol:#1#2{
- \def\temp:{#1} \ifx\temp:\empty \else
- \expandafter\edef\csname \the\tcount: :nodes\endcsname{
- \csname\the\tcount: :nodes\endcsname
- \node:{#2} }
- \expandafter\edef\csname#2 : in/cl: \endcsname{\the\tcount:}
- \advance\tcount: by 1\relax
- \expandafter\inserttocol:
- \fi
-}
-\def\pertnodestyle{\def\perttext:##1}
-\pertnodestyle{\csname#1 :title\endcsname}
-\def\subsort:{
- \pflag:false
- \expandafter\subsortA:\elms:{}
- \ifpflag: \expandafter\subsort: \fi
-}
-
-\def\subsortA:#1{
- \def\cur:{#1}
- \ifx\cur:\empty \else
- \csname#1 :prev\endcsname
- \expandafter\subsortA:
- \fi
-}
-
-\def\compr:#1{
- \def\temp:{#1}
- \ifx\temp:\bef:
- \I:I=\csname#1 :boolA\endcsname; \I:I+1;
- \IF \GtInt(\I:I,\csname\cur: :boolA\endcsname) \THEN
- \pflag:true
- \expandafter\edef\csname\cur: :boolA\endcsname{\Val\I:I}
- \IF \GtInt(\I:I,\maxsub:) \THEN \edef\maxsub:{\Val\I:I} \FI
- \FI
- \fi
- \ifx\temp:\empty\else \expandafter\compr:\fi
-}
-\def\indexII:#1{
- \ifnum\csname#1 :boolA\endcsname=\DoReg
- \I:I=\csname#1 : in/cl:\endcsname;
- \CSeg\:GetXY(origin:,col.\Val\I:I)
- \def\adjprt:{0}
-\ifx\prtadjtbl:\empty\else
- \Define\searchadj:(2){ \IF \EqText(##1,#1) \THEN \def\adjprt:{##2}\FI}
- \prtadjtbl:(0,999){\searchadj:}
-\fi
-
- \if H\hpert:
- \IF \LtDec(\Va,\T:T) \THEN \Va=\T:T; \FI
- \IF \LtDec(\R:R,\Va) \THEN \R:R=\Va; \FI
- \Vb+\adjprt:;
-
- \else
- \IF \GtDec(\Vb,\T:T) \THEN \Vb=\T:T; \FI
- \IF \GtDec(\R:R,\Vb) \THEN \R:R=\Vb; \FI
- \Va+\adjprt:;
-
- \fi
- \MoveTo(\Val\Va,\Val\Vb)
-\seg:prt
-
-\ifx \:tmp\def
- \if H\hpert:
- \IF \LtInt(\I:I,\u:pert) \THEN
- \sapply{up,merge,up,{#1}}
-
- \ELSE \IF \GtInt(\I:I,\d:pert) \THEN
- \sapply{down,merge,down,{#1}}
-
- \ELSE \IF \LtInt(\DoReg,\l:pert) \THEN
- \sapply{temp,intersect,done,{#1}}
-\sapply{temp,\Va=1;\gob:I}
-\sapply{left,merge,left,{#1}}
-
- \ELSE \IF \GtInt(\DoReg,\r:pert) \THEN
- \MarkLoc(here) \CSeg\:GetY(col.maxY,here)
-\IF \LtDec(\Vb,0) \THEN \MarkLoc(col.maxY) \FI
-\CSeg\:GetX(col.maxX,here)
-\IF \LtDec(\Va,0) \THEN
- \CSeg\:GetX(origin:,here)
- \Va/\node:wh; \Va+\l:pert; \Va-1;
- \IF \LtDec(\Va,\r:pert) \Va=-1; \FI
-\FI
-\sapply{temp,intersect,done,{#1}}
-\sapply{temp,\Va=1;\gob:I}
-\IF \LtDec(\Va,0) \THEN
- \Va=-1;
-\sapply{temp,intersect,done,{#1}}
-\sapply{temp,\Va=1;\gob:I}
-\IF \LtDec(\Va,0) \THEN
- \IF \GtInt(\DoReg,\r:pert) \THEN \ELSE
- \MarkLoc(.) \CSeg\:GetX(origin:,.)
- \Va/\node:wh; \Va/\step:right;
-% \immediate\write16{..(\the\DoReg,\Val\I:I).......\Val\Vb....\step:down}
- \IF \GtDec(\Va,1.3) \THEN
- \gdef\overflow:col{Y}
- \ELSE
- \Va=-1;
- \FI
-\FI
-
-\FI
-\IF \LtDec(\Va,0) \THEN
- \MarkLoc(before) \PutNode(#1) \MarkLoc(here)
-\CSeg\:GetX(before,here)
-\IF \LtDec(\Va,\node:wh) \THEN
- \edef\node:wh{\Val\Va}
-\FI
-\sapply{in,merge,in,{#1}}
-
- \Move(\openpertH:,-\adjprt:)
-\ELSE
- \sapply{temp,intersect,done,{#1}}
-\sapply{temp,\Va=1;\gob:I}
-\sapply{left,merge,left,{#1}}
-
-\FI
-
-\ELSE
- \sapply{right,merge,right,{#1}}
-\FI
-
- \ELSE \Va=-1;
-\sapply{temp,intersect,done,{#1}}
-\sapply{temp,\Va=1;\gob:I}
-\IF \LtDec(\Va,0) \THEN
- \IF \GtInt(\DoReg,\r:pert) \THEN \ELSE
- \MarkLoc(.) \CSeg\:GetX(origin:,.)
- \Va/\node:wh; \Va/\step:right;
-% \immediate\write16{..(\the\DoReg,\Val\I:I).......\Val\Vb....\step:down}
- \IF \GtDec(\Va,1.3) \THEN
- \gdef\overflow:col{Y}
- \ELSE
- \Va=-1;
- \FI
-\FI
-
-\FI
-\IF \LtDec(\Va,0) \THEN
- \MarkLoc(before) \PutNode(#1) \MarkLoc(here)
-\CSeg\:GetX(before,here)
-\IF \LtDec(\Va,\node:wh) \THEN
- \edef\node:wh{\Val\Va}
-\FI
-\sapply{in,merge,in,{#1}}
-
- \Move(\openpertH:,-\adjprt:)
-\ELSE
- \sapply{temp,intersect,done,{#1}}
-\sapply{temp,\Va=1;\gob:I}
-\sapply{left,merge,left,{#1}}
-
-\FI
-
- \FI \FI \FI \FI
-\else
- \IF \LtInt(\I:I,\l:pert) \THEN
- \sapply{left,merge,left,{#1}}
-
- \ELSE \IF \GtInt(\I:I,\r:pert) \THEN
- \sapply{right,merge,right,{#1}}
-
- \ELSE \IF \LtInt(\DoReg,\u:pert) \THEN
- \sapply{temp,intersect,done,{#1}}
-\sapply{temp,\Va=1;\gob:I}
-\sapply{up,merge,up,{#1}}
-
- \ELSE \IF \GtInt(\DoReg,\d:pert) \THEN
- \MarkLoc(here) \CSeg\:GetY(here,col.maxY)
-\IF \LtDec(\Vb,0) \THEN
- \CSeg\:GetY(here,origin:)
- \Vb/\node:wh; \Vb+\u:pert; \Vb-1;
- \IF \LtDec(\Vb,\d:pert) \Vb=-1; \FI
-\FI
-\sapply{temp,intersect,done,{#1}}
-\sapply{temp,\Vb=1;\gob:I}
-\IF \LtDec(\Vb,0) \THEN
- \Va=-1;
-\sapply{temp,intersect,done,{#1}}
-\sapply{temp,\Va=1;\gob:I}
-\IF \LtDec(\Va,0) \THEN
- \IF \GtInt(\DoReg,\d:pert) \THEN \ELSE
- \MarkLoc(.) \CSeg\:GetY(.,origin:)
- \Vb/\node:wh; \Vb/\step:down;
-% \immediate\write16{..(\the\DoReg,\Val\I:I).......\Val\Vb....\step:down}
- \IF \GtDec(\Vb,1.2) \THEN
- \gdef\overflow:col{Y} \Va=1;
- \FI
-\FI
-
-\FI
-\IF \LtDec(\Va,0) \THEN
- \MarkLoc(before) \PutNode(#1)
-\MarkLoc(here)
-\CSeg\:GetY(here,before)
-\IF \LtDec(\Vb,\node:wh) \THEN
- \edef\node:wh{\Val\Vb}
-\FI
-\CSeg\:GetY(here,col.maxY)
-\IF \GtDec(\Vb,0) \THEN \MarkLoc(col.maxY) \FI
-\sapply{in,merge,in,{#1}}
-
- \Move(-\adjprt:,-\openpertV:)
-\ELSE
- \sapply{down,merge,down,{#1}}
-\FI
-
-\ELSE
- \sapply{down,merge,down,{#1}}
-
-\FI
-
- \ELSE \Va=-1;
-\sapply{temp,intersect,done,{#1}}
-\sapply{temp,\Va=1;\gob:I}
-\IF \LtDec(\Va,0) \THEN
- \IF \GtInt(\DoReg,\d:pert) \THEN \ELSE
- \MarkLoc(.) \CSeg\:GetY(.,origin:)
- \Vb/\node:wh; \Vb/\step:down;
-% \immediate\write16{..(\the\DoReg,\Val\I:I).......\Val\Vb....\step:down}
- \IF \GtDec(\Vb,1.2) \THEN
- \gdef\overflow:col{Y} \Va=1;
- \FI
-\FI
-
-\FI
-\IF \LtDec(\Va,0) \THEN
- \MarkLoc(before) \PutNode(#1)
-\MarkLoc(here)
-\CSeg\:GetY(here,before)
-\IF \LtDec(\Vb,\node:wh) \THEN
- \edef\node:wh{\Val\Vb}
-\FI
-\CSeg\:GetY(here,col.maxY)
-\IF \GtDec(\Vb,0) \THEN \MarkLoc(col.maxY) \FI
-\sapply{in,merge,in,{#1}}
-
- \Move(-\adjprt:,-\openpertV:)
-\ELSE
- \sapply{down,merge,down,{#1}}
-\FI
-
- \FI \FI \FI \FI
-\fi
-
-\else
- \PutNode(#1)
- \if H\hpert: \Move(\openpertH:,-\adjprt:)
- \else \Move(-\adjprt:,-\openpertV:) \fi
-
-\fi
-\MarkLoc(col.\Val\I:I)
-\MoveToNode(#1,1,1) \MarkLoc(.)
-\CSeg\:GetX(col.maxX,.)
-\IF \GtDec(\Va,0) \THEN \MarkLoc(col.maxX) \FI
-
-
- \fi
-}
-\Define\adjustpert(1){
- \def\prtadjtbl:{#1}
- \ifx\prtadjtbl:\empty \else \Table\prtadjtbl:{#1} \fi
-}
-\adjustpert()
-\def\utaskIV:#1{ \def\cur:{#1} \csname#1 :prev\endcsname }
-\def\clipper:#1{
- \pflag:true
- \seg:prt
-
-\ifx \:tmp\def \pflag:false \fi
-\sapply{temp,merge,in,left}
-\sapply{temp,merge,right,temp}
-\sapply{temp,merge,up,temp}
-\sapply{temp,merge,down,temp}
-\sapply{temp,intersect,temp,{#1}}
-\sapply{temp,\pflag:true \gob:I}
-
- \ifpflag:
- \def\temp::{#1}
-\ifx \temp::\cur: \pflag:false
-\else\ifx\temp::\from: \pflag:false
- \else \MoveToLoc(\cur:) \CSeg[0.5]\Move(\cur:,\from:) \MarkLoc(:=center=:)
-\CSeg\:GetXY(\cur:,:=center=:)
-\IF \LtDec(\Va,0) \THEN \Va=-\Va; \FI \edef\HH:{\Val\Va}
-\IF \LtDec(\Vb,0) \THEN \Vb=-\Vb; \FI \edef\VV:{\Val\Vb}
-
- \MoveToNode(#1,0,-1) \MarkLoc(:=loc=:)
-\CSeg\:GetY(:=center=:,:=loc=:)
-\IF \GtDec(\Vb,\VV:) \THEN \pflag:false \ELSE
- \MoveToNode(#1,0,1) \MarkLoc(:=loc=:)
- \CSeg\:GetY(:=loc=:,:=center=:)
- \IF \GtDec(\Vb,\VV:) \THEN \pflag:false \ELSE
- \MoveToNode(#1,1,0) \MarkLoc(:=loc=:)
- \CSeg\:GetX(:=loc=:,:=center=:)
- \IF \GtDec(\Va,\HH:) \THEN \pflag:false \ELSE
- \MoveToNode(#1,-1,0) \MarkLoc(:=loc=:)
- \CSeg\:GetX(:=center=:,:=loc=:)
- \IF \GtDec(\Va,\HH:) \THEN \pflag:false \FI
- \FI
- \FI
-\FI
-
-\fi \fi
-
- \fi
- \ifpflag:
- \MoveToNode(#1,1,1) \MarkLoc(b:)
- \MoveToNode(#1,-1,-1) \MarkLoc(a:) \CSeg\Clip(a:,b:)
- \fi
-}
-\:DefineExt\pertstyle(7){\endgroup
- \def\baropt:##1##2//{
- \pertoptA:##1
- }
- \let\hpert:=x
- \def\temp:{#1} \ifx\temp:\empty\else \baropt:#1......// \fi
- \def\temp:{#2} \ifx\temp:\empty\else \def\openpertH:{#2} \fi
- \def\temp:{#3} \ifx\temp:\empty\else \def\openpertV:{#3} \fi
- \def\temp:{#4} \ifx\temp:\empty\else \let\MilestoneNode:=#4\fi
- \def\temp:{#5} \ifx\temp:\empty\else \let\ProjectNode:=#5 \fi
- \def\temp:{#6} \ifx\temp:\empty\else \let\TaskNode:=#6 \fi
- \def\temp:{#7} \ifx\temp:\empty\else \def\pertw:{#7pt} \fi
-}
-\def\pertoptA:#1{
- \if#1H \let\hpert:=H \fi
-}
-
-\pertstyle(,30,20,\RectNode,\VRectNode,\SRectNode,70)
-
- \def\treediagram(#1){{ \getparms:#1,,,,,,,,,//
- \verify:{\first:} \def\verify:##1{}
- \ifx\EndDraw\UnDef:
- \pwarn:{\string\treediagram\space not\space within\space
- \string\Draw...\string\EndDraw}
- \fi
- \ifx\second:\empty \def\second:{999} \fi \K:K=\second:;
- \ifnum\csname\first: :type\endcsname=\projectnode:\space
- \else \K:K=0; \fi
- \IF \EqInt(\K:K,0) \THEN
- \ifnum\csname\first: type\endcsname=\projectnode:\space
- \let\temp:=\projectnode
-\else
- \ifnum\csname\first: type\endcsname=\tasknode:\space
- \let\temp:=\tasknode
- \else \let\temp:=\milestonenode
- \fi
-\fi
-\temp:()(--{\treetext:{\first:}}--)
-
- \ELSE
- \tcount: = 0 \let\nodeid: = \relax
-
-\let\node:=\getnode:
-\def\row:{ \node:{\first:} }
-\let~=\relax
-\let\tree:=\empty
-\def\utask:##1{
- \IF \GtInt(\K:K,0) \THEN
- \I:I+1;
- \let\node:=\relax
- \edef\nextrow:{ \nextrow: \node:{##1} }
- \let\node:=\getnode:
- \FI
- }
-
- \TextNode(1){ \titletext:{##1} }
-\let\nodewidth:=\treenodewidth:
-\def\temp:{\noexpand&}
-\edef\temp:{
- \noexpand\TreeSpec
- (\projectnode: ,\noexpand\project:node \temp:
- \tasknode: ,\noexpand\task:node \temp:
- \milestonenode:,\noexpand
- \milestone:node)()(\noexpand\project:edge)
-} \temp:
-
- \gettree: \def~{\noexpand&}
- \def\nodeid:##1{
- \expandafter\ifx\csname##1 :id\endcsname\relax \else
- ${}^{\csname##1 :id\endcsname}$
- \fi }
-
- \edef~{\noexpand\Tree()(\tree:)} ~
- \FI
-}}
-
-\def\schedulechart(#1){ \getparms:#1,,,,,,,,,//
- \verify:{\first:} \def\verify:##1{}
- \def\efforts:##1{}
-
- \let\gal:=~
- \let~=\relax
- \let\cutprojectstasks:=\cutprojectstasksA:
- \cutoffdates: \getscale:\dateF:
- \I:I=\K:K;
-\IF \LtInt(\I:I,3) \THEN \I:I=3;
-\ELSE
- \I:I=\yrF:; \I:I-\yrS:; \IF \LtInt(\I:I,0) \I:I+\maxYY:; \FI
- \IF \LtInt(\I:I,2) \THEN
- \I:I*\maxMM:; \I:I+\moF:; \I:I-\moS:;
- \FI
-\FI
-\let\nodates:=\empty
-\Do(1,\Val\I:I){ \edef\nodates:{\nodates: ~} }
-
-\edef\dates:{\showdate:\dyS:/\moS:/\yrS:/0// \nodates:
- \showdate:\dyF:/\moF:/\yrF:/0//}
-
- \cutofftypes:
- \let\bars:=\empty \let\names:=\empty \let\nonames:=\empty
-\def\chartelement:##1{ \pflag:true
-\ifnum \csname##1 :type\endcsname=\milestonenode:\space
- \axisdate:\dateA:{##1}\empty
-\I:I=\dateA:; \def\temp:{-1} \J:J=0; \K:K=0;
-\ifnum \dateA:<0\space \pflag:false \fi
-\ifnum \dateA:>\dateF:\space \pflag:false \fi
-\ifnum \optm:=\csname##1 :type\endcsname\space \pflag:false \fi
-
-\else
- \cutprojectstasks:{##1}
-\def\temp:{0}
-\ifnum \csname##1 :type\endcsname=\projectnode:\space
- \I:I=\dateA:; \J:J=\dateB:; \K:K=0; \J:J-\I:I;
-\else \I:I=\dateA:; \J:J=0; \K:K=\dateB:; \K:K-\I:I;
-\fi
-
-\fi
-\I:I/\scale:; \J:J/\scale:; \K:K/\scale:;
-\ifpflag:
- \edef\bars:{ \bars: \ifx\bars:\empty\else ~ \fi
- \Val\I:I,\temp:,\Val\J:J,\Val\K:K }
- \edef\names:{ ~ \csname##1 :title\endcsname ~ \names:}
-\edef\nonames:{\nonames:~}
-\edef\efforts:{\efforts: ~ ##1 }
-
-\fi
- }
-\doelements:{\first:}
-
- \Define\DrawBar(2){
-\IF \GtInt(\J:J,0) \THEN
- \IF \EqInt(\J:J,1) \THEN
- \IF \EqInt(##1,-1) \THEN
- \EntryExit(0,0,0,0) \expandafter\movemilestonesym:\barloc://
- \Text(--\milestonesym:--)
- \MoveToExit(0,1) \Move(0,5pt\du) \EntryExit(0,-1,0,0) \putbartext:
-
- \ignoredepth:
- \FI
- \ELSE
- \IF \GtDec(##1,0) \THEN
- \MarkLoc(o) \R:R=##1; \R:R/2; \Q:Q=##2; \Q:Q/2;
-\Move(\Val\R:R,\Val\Q:Q)
-\EntryExit(0,0,0,0) \putbartext: \MoveToLoc(o)
-
- \DrawRect(##1,##2)
- \FI
- \FI
-\ELSE \ignoredepth: \FI
-\J:J+1; \IF \EqInt(\J:J,4) \THEN \J:J=0; \FI
-}
-\edef\temp:{\noexpand\BarChartSpec(HS\baropts:,\barloc: \noexpand &
- \barloc: \noexpand & \barloc: \noexpand & \barloc:)
- (0 \noexpand& 0 \noexpand& \projectcolor: \noexpand& \taskcolor:)}
-\temp:
-
- \let~=\gal:
- \sv:forchart
-
- \ifnum \schedulelimit:=10000 \else
- \ifnum \schedulelimit:=10000 \else
- \def~{\noexpand&} \edef\tmp:i{\bars:} \let~=\relax
- \expandafter\Table\expandafter\tmp:i\expandafter{\tmp:i}
- \def\maxeffort:{0}
- \Define\tmp:ii(4){
- \K:K=##1; \K:K+##4;
- \IF \GtInt(\K:K,\maxeffort:) \THEN \edef\maxeffort:{\Val\K:K}\FI
- }
- \tmp:i(0,999){\tmp:ii}
-\fi
-
- \dec:dim\schedulelimit:
-
- \fi
- \put:schedulechart
- \let~=\gal:
- \let\verify:=\verify::
-}
-\Define\put:schedulechart{
- \ifnum \schedulelimit:=10000 \else
- \I:I=\effort:from; \J:J=\effort:to; \let~=\relax
-\I:I-1; \J:J-1;
-\def~{\noexpand&} \edef\tmp:i{\bars:} \let~=\relax
-\expandafter\Table\expandafter\tmp:i\expandafter{\tmp:i}
-\let\bars:=\empty
-\Define\tmp:ii(1){\edef\bars:{\ifx\bars:\empty\else\bars:~\fi##1}}
-\tmp:i(\Val\I:I,\Val\J:J){\tmp:ii}
-
- \def~{\noexpand&} \edef\tmp:i{\names:} \let~=\relax
-\expandafter\Table\expandafter\tmp:i\expandafter{\tmp:i}
-\let\names:=\empty
-\Define\tmp:ii(1){
- \IF \GtDec(\K:K,\min:sg) \THEN
- \IF \LtDec(\K:K,\max:sg) \THEN
- \edef\names:{\names:~ ##1}
- \FI \FI
- \K:K+1;
-}
-\K:K=\effort:max; \K:K-\effort:to; \K:K*2; \edef\min:sg{\Val\K:K}
-\K:K=\effort:max; \K:K-\effort:from; \K:K+1;
- \K:K*2; \K:K+1; \edef\max:sg{\Val\K:K}
-\K:K=0; \tmp:i(0,9999){\tmp:ii}
-
- \def~{\noexpand&} \edef\tmp:i{\nonames:} \let~=\relax
-\expandafter\Table\expandafter\tmp:i\expandafter{\tmp:i}
-\let\nonames:=\empty
-\Define\tmp:ii(1){
- \IF \GtDec(\K:K,\min:sg) \THEN
- \IF \LtDec(\K:K,\max:sg) \THEN
- \edef\nonames:{\nonames:~##1}
- \FI \FI
- \K:K+1;
-}
-\K:K=\effort:from; \K:K-2; \edef\min:sg{\Val\K:K}
-\K:K=\effort:to; \edef\max:sg{\Val\K:K}
-\K:K=0; \tmp:i(0,9999){\tmp:ii}
-
- \ifnum \effort:from>1
- \cnd:starts \schedulecode:
- \fi
- \bgroup
- \fi
- \def~{\noexpand&} \pflag:true
-\edef\temp:{ \noexpand\Table\noexpand\efforts:{ \efforts: } }
-\temp:
-\if T\bartext:
- \edef\temp:{ \noexpand\Table\noexpand\names:Tbl:{ \names: } }
- \temp:
- \let~=\relax
-\Define\temp:(1){\edef\names:{##1~\names:}}
-\let\names:=\empty
-\names:Tbl:(0,99){\temp:}
-\def~{\noexpand&}
-\edef\temp:{ \noexpand\Table\noexpand\names:Tbl:{ \names: } }
-\temp:
-
-\fi
- \J:J=0; \K:K=0;
-\edef\temp:{ \noexpand\BarChart( \bars: ) } \temp:
-
- \ifnum \schedulelimit:=10000 \else
- \MoveToLoc(Origin) \Move(\maxeffort:,0)
-\MarkLoc(NE) \CSeg\Move(NW,SW) \MarkLoc(SE)
-\MoveToLoc(NE) \Text(----)
-
-
- \fi
- \let\nodewidth:=\scnodewidth:
-\if A\baraxis: \datesaxis(SW,NE)(S-1)
-
- \MoveToLoc(NE) {\Text(--\phantom{\showdate:00/00/00/0//}--)
-\MoveToExit(1,0) \Text(----)}
-
-
- \if T\bartext:
- \else \MoveToLoc(SW) \Move(-5pt\du,0) \MarkLoc(sw:)
-\MoveToLoc(NE) \Move(5pt\du,0) \MarkLoc(ne:)
-\CSeg\DrawRect(ne:,sw:)
-\namesaxis(sw:,ne:)(W-0)
-\nonamesaxis(sw:,ne:)(W-1)
-\MoveToLoc(ne:) {\Text(--\phantom{\showdate:00/00/00/0//}--)
-\MoveToExit(1,0) \Text(----)}
-
-
-
- \fi
-\fi
-
- \ifnum \schedulelimit:=10000 \else
- \egroup
- \recall:forchart
-
- \last:segdraw\put:schedulechart
-
- \fi
-}
-
-\def\effortchart(#1){ \getparms:#1,,,,,,,,,//
- \verify:{\first:} \def\verify:##1{}
- \ifnum\csname\first: :type\endcsname= \milestonenode: \space
- \pwarn:{\string\effortchart{\first:}?\space `\first:'\space is
- \space a\space milestone}
- \else
- \let\gal:=~
- \let~=\relax
- \edef\temp:{\second:\third:\fourth:}
-\ifx\temp:\empty \def\cutprojectstasks:##1{}
-\else \cutoffdates: \cutofftypes:
- \let\cutprojectstasks:=\cutprojectstasksA:
-\fi
-
- \let\bars:=\empty \let\names:=\empty \let\nonames:=\empty
-\def\maxeffort:{0} \K:K=0;
-\let\chartelement:=\utaskII:
-\doelements:{\first:}
-
- \IF \EqInt(\K:K,0) \THEN
- \pwarn:{empty\space effort\space chart\space for\space `#1'}
- \ELSE
- \expandafter\getint:\maxeffort:.0.0// \getscale:\K:K
- \IF \GtInt(\scale:,1) \THEN
- \def~{\noexpand&}
- \edef\temp:{\noexpand\Table\noexpand\temp:{\bars:}}
- \temp:
- \let~=\relax
- \def\bars:##1{}
- \Define\tempa:(2){ \Q:Q=##1;
- \Q:Q/\scale:; \edef\bars:{\bars: ~ \Val\Q:Q,##2} }
- \temp:(0,99){\tempa:}
-\FI
-
- \let\BarText=\EffortBarText:
-
-\edef\temp:{\noexpand\BarChartSpec( HT\effortbaropts: , \effortbarloc: )
- ( \effortcolor: ) }
-\temp:
-\if A\effortbaraxis: \if 3\effortbarIIID: \BarGrid(0,,) \FI\FI
-
-
- \edef\dates:{\maxeffort:}
-\expandafter\getint:\maxeffort:.0.0//
-\I:I=\K:K; \I:I/2; \K:K-\I:I; \K:K-\I:I;
-\Q:Q=\frac:; \Q:Q+\K:K; \Q:Q/2;
-\IF \EqDec(\Q:Q,0)
- \edef\dates:{0 ~ \Val\I:I ~ \dates:}
-\ELSE \Q:Q*10; \J:J[\Q:Q]; \edef\dates:{0 ~ \Val\I:I.\Val\J:J ~ \dates:}
-\FI
-
- \edef\names:{0,\lastnames:~\names:}
-\edef\nonames:{0,\lastnames: ~0,\relax~ \nonames:}
-
- \sv:forchart
-
- \ifnum \effortlimit:=10000 \else
- \dec:dim\effortlimit:
-
- \fi
- \put:effortchart
- \FI
- \let~=\gal:
- \fi
- \let\verify:=\verify::
-}
-\Define\put:effortchart{
- \ifnum \effortlimit:=10000 \else
- \I:I=\effort:from; \J:J=\effort:to; \let~=\relax
-\I:I-1; \J:J-1;
-\def~{\noexpand&} \edef\tmp:i{\bars:} \let~=\relax
-\expandafter\Table\expandafter\tmp:i\expandafter{\tmp:i}
-\let\bars:=\empty
-\Define\tmp:ii(1){\edef\bars:{\ifx\bars:\empty\else\bars:~\fi##1}}
-\tmp:i(\Val\I:I,\Val\J:J){\tmp:ii}
-
- \def~{\noexpand&} \edef\tmp:i{\names:} \let~=\relax
-\expandafter\Table\expandafter\tmp:i\expandafter{\tmp:i}
-\let\names:=\empty
-\Define\tmp:ii(2){
- \T:T=\effort:max; \T:T-##1;
- \IF \GtDec(\T:T,\I:I) \THEN
- \IF \GtDec(\T:T,\effort:to) \THEN\ELSE
- \T:T=##1; \T:T-\effort:max; \T:T+\effort:to;
- \IF \EqDec(\T:T,0.0) \THEN \T:T=0.25; \FI
- \edef\names:{\ifx\names:\empty\else\names:~\fi \Val\T:T,##2}
- \FI \FI
-}
-\tmp:i(1,9999){\tmp:ii}
-\K:K=\effort:to; \K:K-\I:I;
-\edef\names:{0,\Val\K:K\ifx \names:\empty\else ~\names:\fi}
-
- \def~{\noexpand&} \edef\tmp:i{\nonames:} \let~=\relax
-\expandafter\Table\expandafter\tmp:i\expandafter{\tmp:i}
-\let\nonames:=\empty
-\Define\tmp:ii(2){
- \T:T=\effort:max; \T:T-##1;
- \IF \LtDec(\T:T,\I:I) \THEN \ELSE
- \IF \GtDec(\T:T,\effort:to) \THEN\ELSE
- \T:T=##1; \T:T-\effort:max; \T:T+\effort:to;
- \edef\nonames:{\ifx\nonames:\empty\else\nonames:~\fi \Val\T:T,##2}
- \FI \FI
-}
-\tmp:i(1,9999){\tmp:ii}
-\K:K=\effort:to; \K:K-\I:I;
-\edef\nonames:{0,\Val\K:K\ifx \nonames:\empty\else ~\nonames:\fi}
-
- \ifnum \effort:from>1
- \cnd:starts \effortcode:
- \fi
- \bgroup
- \fi
- \def~{\noexpand&}
-\edef\temp:{ \noexpand\BarChart( \bars: ) } \temp:
-
- \ifnum \effortlimit:=10000 \else
- \MoveToLoc(Origin) \Move(\maxeffort:,0)
-\MarkLoc(NE) \CSeg\Move(NW,SW) \MarkLoc(SE)
-\MoveToLoc(NE) \Text(----)
-
-
- \fi
- \if A\effortbaraxis:
- \MoveToLoc(NE) \Move(5pt\du,0) \MarkLoc(ne:)
- \if 3\effortbarIIID:
- {\CSeg\Line(ne:,NW) } \CSeg\Line(NW,SW) \CSeg\Line(ne:,NW)
- \else \CSeg\DrawRect(ne:,SW) \fi
- \effortaxis(SW,NE)(S-1)
- \namesaxis(SW,NE)(W5)
- \nonamesaxis(SW,ne:)(W8)
- \ifnum \effortlimit:=10000 \else
- \nonamesaxis(SW,ne:)(W-6)
-
- \fi
- \MoveToLoc(ne:) \Text(----)
-
-\fi
-
- \ifnum \effortlimit:=10000 \else
- \egroup
- \recall:forchart
-
- \last:segdraw\put:effortchart
-
- \fi
-}
-\def\pertdiagram{\futurelet\:temp\pertd:ag}
-\def\pertd:ag{\ifx \:temp*
- \def\date:less{\def\dateA:{0}}
- \def\:temp##1{\pertdiagram:}
- \else
- \let\date:less=\empty
- \let\:temp=\pertdiagram:
- \fi
- \:temp}
-\def\pertdiagram:(#1){ \getparms:#1,,,,,,,,,//
- \verify:{\first:} \def\verify:##1{}
- \ifnum\csname\first: :type\endcsname= \projectnode: \space
- \let\gal:=~
- \let~=\relax
- \cutoffdates:
- \cutofftypes:
- \let\index:=\relax \let\dates:=\empty
-\def\utask:##1{
- \expandafter\def\csname##1 :bool\endcsname{0}
- \ifnum\csname##1 :type\endcsname=\milestonenode:\space
- \axisdate:\dateA:{##1}\empty
- \else
- \axisdate:\dateA:{##1}1
- \fi
- \date:less
- \expandafter\ifx\csname -\dateA:-:\endcsname\relax
- \edef\dates:{ \dates: {\dateA:} }
- \fi
- \expandafter\edef\csname -\dateA:-:\endcsname{
- \expandafter\ifx\csname -\dateA:-:\endcsname\relax \else
- \csname -\dateA:-:\endcsname
- \fi
- \index:{##1} }
- }
-\csname\first: :under\endcsname
-\sort:
-\def\prev:##1{
- \expandafter\ifx\csname##1 :bool\endcsname\relax
-
- \else
- \J:J=\csname##1 :bool\endcsname; \J:J+1;
-\IF \GtInt(\J:J,\csname\cur: :bool\endcsname) \THEN
- \pflag:true
- \expandafter\edef\csname\cur: :bool\endcsname{\Val\J:J}
-\FI
-
- \fi }
-\def\utask:##1{
- \def\cur:{##1}
- \csname##1 :prev\endcsname }
-\def\setrows:{ \pflag:false
- \csname\first: :under\endcsname
- \ifpflag:
- \expandafter\setrows:
- \fi }
-\setrows:
-
- \J:J=-1;
-\def\colsno:{0} \expandafter\let\csname 0 :nodes\endcsname=\empty
-\def\utask:##1{ \tcount:=\csname##1 :bool\endcsname\space
-\expandafter\ifx\csname col-:\the\tcount:\endcsname\relax
- \expandafter
- \def\csname col-:\the\tcount: :+\endcsname{ \index:{##1} }
-
- \expandafter\def\csname col-:\the\tcount:\endcsname{0}
- \tcount:=0\space \J:J+1;
-\else
- \expandafter\edef\csname col-:\the\tcount: :+\endcsname{
- \csname col-:\the\tcount: :+\endcsname \index:{##1} }
-
- \I:I=\csname col-:\the\tcount:\endcsname; \I:I+1;
- \expandafter\edef\csname col-:\the\tcount:\endcsname{ \Val\I:I }
- \tcount:=\Val\I:I\space
- \ifnum \tcount:>\colsno:\space
- \expandafter\let\csname \the\tcount: :nodes\endcsname=\empty
- \edef\colsno:{\the\tcount:}
-\fi
-
-\fi
- }
-\csname\first: :under\endcsname
-
-\Do(0,\Val\J:J){
- \J:J=\colsno:; \J:J-\csname col-:\the\DoReg\endcsname; \J:J/2;
- \let\node:=\relax
-\let\currow:=\empty
-\let\index:=\indexIII:
-\let\prev:=\prevI:
-\csname col-:\the\DoReg :+\endcsname
-
-\tcount:=\Val\J:J
-\expandafter\inserttocol:\currow:{}{}
-
-
-}
-
-
-
-
- \let\nodewidth:=\pertw: \MarkLoc(origin:) \edef\rowsno:{0}
-\sapply{all,merge,{},{}}
-\def\node:##1{
- \IF \GtInt(\I:I,\rowsno:) \edef\rowsno:{\Val\I:I} \FI \I:I+1;
- \ifnum\csname##1 :type\endcsname=\milestonenode:\space
- \let\PertNode:=\MilestoneNode:
-\else
- \ifnum\csname##1 :type\endcsname=\projectnode:\space
- \let\PertNode:=\ProjectNode:
- \else
- \let\PertNode:=\TaskNode:
- \fi
-\fi
-
-\DefNode\PertNode:(##1)(--\titletextA:{\perttext:{##1}}--)
-\sapply{all,merge,all,{##1}}
-
- \AddNodeDim(##1)
-}
-\sapply{MaxXYI,merge,{},{}}
-\Do(0,\colsno:){
- \I:I=0;
- \ZeroNodesDim
- \csname \the\DoReg :nodes\endcsname
- \sapply{MaxXYI,merge,MaxXYI,{\if H\hpert: \MaxY
- \else \MaxX\fi :\the\DoReg}}
-
-}
-
- \def\l:pert{0} \def\u:pert{0}
-\if H\hpert:
- \grps:ns\step:right\colsno:\pert:cols
- \grps:ns\step:down\rowsno:\pert:rows
-\else
- \grps:ns\step:right\colsno:\pert:cols
- \grps:ns\step:down\rowsno:\pert:rows
-\fi
-\I:I=\step:right; \I:I-1; \edef\r:pert{\Val\I:I}
-\I:I=\step:down; \I:I-1; \edef\d:pert{\Val\I:I}
-\sapply{in,merge,{},{}}
-\sapply{done,merge,{},{}}
-\def\overflow:col{N}
-\MoveToLoc(origin:) \MarkLoc(col.minX) \MarkLoc(col.maxX)
-\MarkLoc(col.maxY) \edef\node:wh{1000}
-
- \def\:temp{ \def\effort:n{-1} \pert:diag{#1}
- }
- \let~=\gal:
- \else \pwarn:{\string\pertdiagram{\first:}?\space
- not \space a \space project}
- \let\:temp\empty
- \fi
- \let\verify:=\verify::
- \:temp
-}
-\def\getnodesbydate:#1{
- \def\temp:{#1}
- \ifx \temp:\empty \else
- \def\temp:{
- \let\index:=\indexI:
-\Q:Q=0; \R:R=0;
-\csname -#1-:\endcsname
-
- \let\elms:=\empty
-\def\index:####1{
- \edef\elms:{\elms: {####1}}
- \expandafter\def\csname####1 :boolA\endcsname{0}
- }
-\csname -#1-:\endcsname
-\def\maxsub:{0}
-\def\prev:####1{
- \def\bef:{####1}
- \expandafter\compr:\elms:{}
-}
-\subsort:
-
- \let\index:=\indexII: \T:T=\prevstart:;
-\Do(0,\maxsub:){
- \R:R=0;
- \csname -#1-:\endcsname
- \IF \GtDec(\R:R,\T:T)
- \T:T=\R:R;
- \if H\hpert: \T:T+\openpertH:; \else \T:T-\openpertV:; \fi
- \FI
-}
-
- \getnodesbydate: }
- \expandafter\temp:
- \fi
-}
-\def\indexI:#1{
- \I:I=\csname#1 : in/cl:\endcsname;
- \CSeg\:GetXY(origin:,col.\Val\I:I)
- \if H\hpert:
- \IF \GtDec(\Va,\Q:Q) \THEN \Q:Q=\Va; \FI
- \IF \GtDec(\prevstart:,\Q:Q) \THEN \Q:Q=\prevstart:;
- \Q:Q+\openpertH:; \FI
- \else
- \IF \GtDec(\Q:Q,\Vb) \THEN \Q:Q=\Vb; \FI
- \IF \GtDec(\Q:Q,\prevstart:) \THEN \Q:Q=\prevstart:;
- \Q:Q-\openpertV:; \FI
- \fi
- \edef\prevstart:{\Val\Q:Q}
-}
-\def\pert:diag#1{
- \seg:prt
-
-\ifx \:tmp\def
- \ifnum \effort:n>-1
- \sapply{prevdone,merge,done,{}}
- \global \expandafter\setbox
- \csname dra:bx\effort:n\endcsname=\hbox
- \fi
- \bgroup
-\fi
-
- \def\MaxX##1{\MaxY##1/+/-]/[}
-\def\MaxY##1:##2/+/-]/[{
- \def\:tmp####1{
- \ifnum \csname####1 : in/cl:\endcsname=##2
- \sapply{used,merge,used,{####1}}
- \fi
-}
-\sapply{used,merge,{},{}}
-\sapply{all,\:tmp}
-\sapply{used,subtract,used,done}
-\let\:tmp=\relax
-\sapply{used,\let\:tmp=\def\gob:I}
-
- \if H\hpert:
- \IF \LtInt(##2,\u:pert) \THEN \let\:tmp=\relax
- \ELSE \IF \GtInt(##2,\d:pert) \THEN \let\:tmp=\relax
- \FI \FI
-\else
- \IF \LtInt(##2,\l:pert) \THEN \let\:tmp=\relax
- \ELSE \IF \GtInt(##2,\r:pert) \THEN \let\:tmp=\relax
- \FI \FI
-\fi
-
- \ifx \:tmp\def
- \if H\hpert:
- \Move(0,-##1) \MarkLoc(col.##2) \Move(0,-##1)
- \Move(0,-\openpertV:)
- \else
- \Move(##1,0) \MarkLoc(col.##2) \Move(##1,0)
- \Move(\openpertH:,0)
- \fi
- \else \ifnum ##2>0
- \MarkLoc(.) \I:I=##2; \I:I-1; \MoveToLoc(col.\Val\I:I)
- \MarkLoc(col.##2) \MoveToLoc(.)
-\else \MarkLoc(col.##2) \fi
- \fi
-}
-\sapply{MaxXYI,\MaxX}
-
-\sapply{in,merge,{},{}}
-\sapply{up,merge,{},{}}
-\sapply{down,merge,{},{}}
-\sapply{left,merge,{},{}}
-\sapply{right,merge,{},{}}
-\let\M:N\empty
-\let\M:X\empty
-
- \if H\hpert: \EntryExit(-1,0,1,0) \def\prevstart:{-10}
-\else \EntryExit(0,1,0,-1) \def\prevstart:{10} \fi
-\expandafter\getnodesbydate:\dates:{}
-
- \sapply{edges,merge,{},{}}
-\def\prev:##1{ \sapply{temp,intersect,in,{##1,\cur:}}
-\sapply{temp,\sapply{edges,merge,edges,{##1,\cur:}}\gob:I}
- }
-\let\utask:=\utaskIV:
-\csname\first: :under\endcsname
-\sapply{edges,subtract,edges,in}
-\sapply{up,intersect,up,edges}
-\sapply{down,intersect,down,edges}
-\sapply{left,intersect,left,edges}
-\sapply{right,intersect,right,edges}
-
-\MoveToLoc(origin:) \Move(10,0) \MarkLoc(.)
-\MoveToLoc(col.maxX) \Move(0,10) \MarkLoc(..)
-\MoveToLL(origin:,.)(col.maxX,..) \Move(0,5) \MarkLoc(col.maxX)
-\MoveToLoc(col.minX) \Move(0,5) \MarkLoc(col.minX)
-
-\K:K=0;
-\sapply{left,\K:K+1;\gob:I} \J:J=\K:K;
-\sapply{right,\K:K+1;\gob:I}
-\sapply{down,\K:K+1;\gob:I}
-\sapply{up,\K:K+1;\gob:I}
-\CSeg\:GetY(col.maxY,origin:) \Vb/\node:wh; \Vb*0.7;
-\IF \GtDec(\Vb,\K:K) \K:K*2;
- \IF \EqInt(\J:J,0) \K:K=-\K:K; \FI
-\ELSE \K:K/2; \K:K-1; \FI
-
-\sapply{up,\put:nd}
-\sapply{left,\put:nd}
-\sapply{right,\put:nd}
-\sapply{down,\put:nd}
-
- \def\prev:##1{ \expandafter\ifx\csname##1 :bool\endcsname\relax
-
-\else
- \def\from:{##1}
-\let\utask:=\clipper:
-\csname\first: :under\endcsname
-\seg:prt
-
-\ifx \:tmp\def
- \sapply{do,merge,{},{}}
-\sapply{temp,intersect,in,{##1,\cur:}}
-\sapply{temp,\sapply{do,merge,{##1},{}}\gob:I}
-\sapply{do,\ifx\M:N\empty \edef\M:N{##1}\edef\M:X{##1}\fi
-\def\:temp{
- \CSeg\:GetX(##1,\M:N) \IF \GtDec(\Va,0) \edef\M:N{##1}\FI
- \CSeg\:GetX(\cur:,\M:N) \IF \GtDec(\Va,0) \edef\M:N{\cur:}\FI
- \CSeg\:GetX(\M:X,##1) \IF \GtDec(\Va,0) \edef\M:X{##1}\FI
- \CSeg\:GetX(\M:X,\cur:) \IF \GtDec(\Va,0) \edef\M:X{\cur:}\FI
-}
-\:temp
-{\Edge(##1,\cur:)}\gob:I}
-
-\else
- \Edge(##1,\cur:)
-
-\fi
-
-\fi
-\Clip()
-\let\utask:=\utaskIV:
- }
-\let\utask:=\utaskIV:
-\csname\first: :under\endcsname
-
- \sapply{in,\extrm:in}
-\ifx \M:N\empty\else
- \MoveToNode(\M:N,-1,0) \MarkLoc(.\M:N)
- \MoveToNode(\M:X,1,0) \MarkLoc(.\M:X)
- {\Text(----)}
-
- \CSeg\:GetX(origin:,.\M:N) \xdef\left:mrk{\Val\Va}
- \CSeg\:GetX(origin:,.\M:X) \xdef\right:mrk{\Val\Va}
-\fi
-
- \seg:prt
-
-\ifx \:tmp\def
- \sapply{done,merge,done,in}
-\edef\:temp{\noexpand \sapply{done,merge,{\csname
- done:mkls\endcsname},{}}}
-\expandafter
-
- \egroup \:temp
- \ifnum \effort:n>-1
- \sapply{leftover,subtract,done,prevdone}
- \let\:tmp=\relax
- \sapply{leftover,\let\:tmp=\def\gob:I}
- \ifx \:tmp\def
- \snd:bxo \pertcode:
- \else
- \global \expandafter\setbox
- \csname dra:bx\effort:n\endcsname=\hbox{}
- \I:I=\effort:n; \I:I-1; \edef\effort:n{\Val\I:I}
- \fi
-\fi
-
- \sapply{leftover,subtract,all,done}
- \let\:tmp=\relax
- \sapply{leftover,\let\:tmp=\def\gob:I}
- \ifx \:tmp\def
- \I:I=\effort:n; \I:I+1; \edef\effort:n{\Val\I:I}
- \if Y\overflow:col
- \def\overflow:col{N}
-\else
- \I:I=\r:pert; \I:I+1; \edef\l:pert{\Val\I:I}
- \I:I=\r:pert; \I:I+\step:right; \edef\r:pert{\Val\I:I}
- \ifnum \l:pert > \if H\hpert: \rowsno: \else \colsno: \fi
- \I:I=\d:pert; \I:I+1; \edef\u:pert{\Val\I:I}
- \I:I=\d:pert; \I:I+\step:down; \edef\d:pert{\Val\I:I}
- \def\l:pert{0} \I:I=\step:right; \I:I-1; \edef\r:pert{\Val\I:I}
- \fi
-\fi
-\if H\hpert: \else
- \I:I=\l:pert; \I:I+7;
- \Do(\l:pert,\Val\I:I){
- \def\:tmp####1{
- \ifnum \csname####1 : in/cl:\endcsname=\DoReg
- \sapply{used,merge,used,{####1}}
- \fi
-}
-\sapply{used,merge,{},{}}
-\sapply{all,\:tmp}
-\sapply{used,subtract,used,done}
-\let\:tmp=\relax
-\sapply{used,\let\:tmp=\def\gob:I}
-\ifx \:tmp\relax
- \I:I=\r:pert; \I:I+1; \edef\r:pert{\Val\I:I}
-\fi
-
- }
-\fi
-
-
- \aft:edraw
-
-\df:bfs
-
-
- \expandafter\expandafter\expandafter\pert:diag
- \else
- \expandafter\expandafter\expandafter\gob:I
- \fi
-\else
- \expandafter\gob:I
-\fi {#1}
-
-}
-\def\seg:prt{
- \let\:tmp=\def
- \ifnum \pert:rows=10000
- \ifnum \pert:cols=10000
- \let\:tmp=\relax
- \fi \fi
-}
-\def\grps:ns#1#2#3{{
- \ifnum #3>#2
- \I:I=#3; \I:I+1;
- \else
- \R=#2; \R+1; \R/#3; \R+0.49999; \J:J[\R];
- \R=#2; \R+1; \R/\J:J; \I:I[\R];
- \fi
- \edef#1{\def\noexpand#1{\Val\I:I}}
- \expandafter}#1}
-\def\put:nd#1{
- \let\sv:EntryExit\:InOut
- \IF \LtInt(\K:K,0)
- \EntryExit(-1,1,-1,-1)
-\MoveToLoc(col.maxX) \Move(\openpertH:,0)
-\FcNode(#1) \pert:bnode(#1)
-\MoveToExit(0,1) \MarkLoc(from) \MoveToExit(0,-1) \MarkLoc(to)
-\MoveToLoc(col.maxX) \CSeg\Move(from,to)
-\Move(0,-\openpertV:) \MarkLoc(col.maxX)
-
- \ELSE
- \EntryExit(1,1,1,-1)
-\MoveToLoc(col.minX) \Move(-\openpertH:,0)
-\FcNode(#1) \pert:bnode(#1)
-\MoveToExit(0,1) \MarkLoc(from) \MoveToExit(0,-1) \MarkLoc(to)
-\MoveToLoc(col.minX) \CSeg\Move(from,to)
-\Move(0,-\openpertV:) \MarkLoc(col.minX)
-
- \FI
- \K:K-1;
- \let\:InOut\sv:EntryExit
-}
-\def\gob:I#1{}
-\:DefineExt\pertlimits(1){\endgroup
- \pertlimits:#1,,,,,//
-}
-\expandafter\long\expandafter\def\csname
- .:\string \pertlimits\endcsname(#1){\endgroup
- \pertlimits:#1,,,,,//
-}
-\long\def\pertlimits:#1,#2,#3,#4,#5//{
- \def\temp:{#1} \ifx\temp:\empty\else \def\pert:rows{#1} \fi
- \def\temp:{#2} \ifx\temp:\empty\else \def\pert:cols{#2} \fi
- \def\temp:{#3} \ifx\temp:\empty\else \def\pert:bnode{#3} \fi
- \def\temp:{#3} \ifx\temp:\empty\else \def\pertcode:{#4} \fi
-}
-\pertlimits(10000,10000,\ExtNode,\par)
-\Define\ExtNode(1){
- \filtercommand\name{#1}
- \OvalNode(#1)(--\putcommand--)}
-\def\extrm:in#1{\ifx\M:N\empty \edef\M:N{#1}\edef\M:X{#1}\fi
-\def\:temp{
- \CSeg\:GetX(#1,\M:N) \IF \GtDec(\Va,0) \edef\M:N{#1}\FI
- \CSeg\:GetX(\M:X,#1) \IF \GtDec(\Va,0) \edef\M:X{#1}\FI
-}
-\:temp
-}
-\expandafter \ifx \csname tmp:dim\endcsname \relax
- \csname newdimen\endcsname \tmp:dim
-\fi
-
-
-\:RestoreCatcodes \endinput
-
-