%\def\TexFiles{}
\def\ext{Changeable}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%  Compile this file with TeX and review the document.         %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\hfill                                                 15 Apr. 94
\bigskip
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
%  Code of examples and exercises from                  %
%                                                       %
%     TeX and LaTeX: Drawing and Literate Programming   %
%                                                       %
%                            gurari@cis.ohio-state.edu  %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


\immediate\write16{<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<}
\immediate\write16{<<< tex Examples.tex <<<<<<<<<<<}
\immediate\write16{<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
                                                                %%
                                                                %%
\input ProTex.sty  %%%%%%%%%%%%%%%%%%%%


\expandafter\def\csname :warn\endcsname#1{}
\Code\top{}{\immediate\write16{<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<}
\immediate\write16{<<<<< \op \name.\ext}
\immediate\write16{<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<}

% \com
}

       \ifx \TexFiles\empty        %%%%%%%%%%%%%%%%%%%%%%%%
\def\tex{tex}

\def\DEFEND{\% LaTeX requires a {\tt\string\Defend} here \%}

\Code\Open{}{\files
\startInput
}

\Code\Close{}{
\endInput
\\bye}
       \else      %%%%%%%%%%%%%%%%%%%%%%%%
\def\tex{latex}

\Code\DEFEND{{\it LaTeX requires a {\tt\string\Defend} 
  here}}{\% LaTeX requires a \string\Defend here \%\string\Defend}

\Code\Open{}{\\documentstyle{book}
\files
\\begin{document}
\startInput}

\Code\Close{}{
\endInput
\\end{document}}
       \fi        %%%%%%%%%%%%%%%%%%%%%%%%

\Code\fileD{}{
\\input DraTex.sty }

\Code\fileAD{}{
\\input DraTex.sty
\\input AlDraTex.sty }

\Code\fileP{}{
\\input ProTex.sty }

\Code\startInput{}{\\Draw}
\Code\endInput{}{\\EndDraw}

\AlProTex{\ext,<<<>>>,[],list,|,ShowFile,NoShow}  %%%%%%%%%%%%%%%%%%%%

\let\SC=\ShowCode                                               
\Code\execute{}<<<
>>>

\newcount\exron
\def\nop#1{\ifnum \exron>0 #1 \fi}

\catcode`\^^M=13  \catcode`\#=12 %
\def\<<<{%
   \edef\temp{%
      \noexpand\AppendCode\noexpand\execute<<<
      \nop#\op\space\space \name.\ext\space\space\space   # \com 
      \nop#xdvi\space\space \name.dvi
      >>>}\ShowOff\temp\ShowOn%
   \def\ShowCode{%
      \expandafter\OutputCode\csname\name\endcsname \def\top
      {} \global\let\ShowCode=\SC  \ShowCode}%
   \expandafter\Code\csname\name\endcsname{}<<<
   \top}%
\catcode`\^^M=5   \catcode`\#=6

\def\newpage{\def\newpage{\par\vfill\break}}        
\newcount\1  \newcount\2  \newcount\3

\def\ForTex{tex}

\def\Ex#1#2#3{\global\advance\exron by -1
                \edef\op{#1}
   \edef\For{for \ifx \op\ForTex \else La\fi TeX}
   \def\com{#2}
   \def\name{#3}      \hrule
   \medskip\noindent$\underline{\hbox{#1\quad\name.\ext}}$
       \qquad{\it #2\/} {\rm(\For)}\medskip}

\def\Exr#1#2#3{\global\exron=2
    \setbox0=\hbox{\global\1#1  \global\2#2  \global\3#3}
    \Ex{\tex}{Exercise \the\1.\the\2.\the\3}{exr#1#2#3}}

\def\Lib#1{\newpage\hrule
   \noindent\hfil{\bf \strut#1}\hrule}

\hbadness=10000     \vbadness=10000  \hfuzz=99in \vfuzz=99in
                                                                %%
                                                                %%
                                                                %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\noindent NOTES

(a) If you want to get TeX files instead of LaTeX files, remove `\%'
from the first line of file `{\tt Examples.tex}'.%%% first line of this file


(b) If you want different extensions in the files' names, 
change the definition of {\tt\string\ext} in the second line 
of file `{\tt Examples.tex}'.%%% second line of this  file

(c) Files carrying names that start with `exr' have been retrieved
from exercises. Many of these files are incomplete, and they expect
that the reader will provide the missing code. (La)TeX will prompt you
with `?' on incomplete files. In such cases, type `x' followed by
RETURN.

\bigskip  \Lib{DraTeX}   \def\files{\fileD}

\Ex{tex}{First example in section 6.2}{sec62a}

\<<<
\input DraTex.sty
\Draw
   \LineAt(0.1,  0,-18,-10)
   \LineAt(-18,-10,- 6, 26)
   \LineAt(- 6, 26, 18,- 4)
   \LineAt( 18,- 4, 12,-40)
   \LineAt( 18,- 4, 24,-40)
   \LineAt( 18,- 4, 58,- 4)
   \LineAt( 58,- 4, 52,-40) 
   \LineAt(58,-4,64,-40) \LineAt(58,-4,66,4)
\EndDraw
\bye >>>

\Ex{latex}{First example in section 6.2}{sec62b}

\<<<
\documentstyle{report}
  \input DraTex.sty
\begin{document}
\Draw
   \LineAt(0.1,  0,-18,-10)
   \LineAt(-18,-10,- 6, 26)
   \LineAt(- 6, 26, 18,- 4)
   \LineAt( 18,- 4, 12,-40)
   \LineAt( 18,- 4, 24,-40)
   \LineAt( 18,- 4, 58,- 4)
   \LineAt( 58,- 4, 52,-40) 
   \LineAt(58,-4,64,-40) \LineAt( 58,-4,66,4)
\EndDraw
\end{document}>>>


\Ex{latex}{First example in section 6.2---second version}{sec62c}

\<<<
\documentstyle[DraTex]{report}
\begin{document}
\Draw
   \LineAt(0.1,  0,-18,-10)
   \LineAt(-18,-10,- 6, 26)
   \LineAt(- 6, 26, 18,- 4)
   \LineAt( 18,- 4, 12,-40)
   \LineAt( 18,- 4, 24,-40)
   \LineAt( 18,- 4, 58,- 4)
   \LineAt( 58,- 4, 52,-40) 
   \LineAt(58,-4,64,-40) \LineAt(58,-4,66,4)
\EndDraw
\end{document}>>>



\Exr672

\<<<
|Open 
   \MarkLoc(a)    \Move(50,0)  
   \MarkLoc(A)    \Move(50,0)    
   \MarkLoc(b)    \Move(-30,30) 
   \MarkLoc(B)    \Move(-30,30)
   \MarkLoc(c)    \Move(-20,-30) 
   \MarkLoc(C)    
   \Curve(A,b,b,B) 
   \Curve(B,c,c,C) 
   \Curve(C,a,a,A)
|Close>>>


  \Ex{tex}{First example in section 6.1}{sec61}

\<<<
\input DraTex.sty 

We can draw clocks of
different styles and sizes.

\Draw 
  \Move(0,20)     \Line(0,-50) \Line(50,0)
  \PenSize(1.5pt) \Line(0,50)  \Line(-50,0)
  \Move(5,-25)    \Text(--9--)
  \Move(20,-18)   \Text(--6--)
  \Move(20,18)    \Text(--3--)
  \Move(-20,18)   \Text(--12--)
  \Move(0,-18)    {\RotateTo(60) \LineF(19)}
  \RotateTo(210)  \LineF(14)
\EndDraw

We can draw people of 
different shapes and looks.

\Draw(0.6pt,0.6pt)
  \DrawOvalArc(30,45)(0,180) 
  \DrawOvalArc(30,12)(180,360) 
  \DrawOvalArc(60,25)(140,400)
  \Move(0,5)
  \DrawOvalArc(30,60)(225,315)
  \DrawOvalArc(20,52)(260,280)
  \Move(-10,-37) {\Text(--$\cdotp$--)}  \Text(--o--)
  \Move(20,0)    {\Text(--$\cdotp$--)}  \Text(--o--)
\EndDraw

And we can produce many other
types of drawings.       \bye>>>



\Ex{latex}{First example in section 6.1}{sec61a}

\<<<
\documentstyle{report}
\input DraTex.sty 
\begin{document}

We can draw clocks of
different styles and sizes.

\Draw 
  \Move(0,20)     \Line(0,-50) \Line(50,0)
  \PenSize(1.5pt) \Line(0,50)  \Line(-50,0)
  \Move(5,-25)    \Text(--9--)
  \Move(20,-18)   \Text(--6--)
  \Move(20,18)    \Text(--3--)
  \Move(-20,18)   \Text(--12--)
  \Move(0,-18)    {\RotateTo(60) \LineF(19)}
  \RotateTo(210)  \LineF(14)
\EndDraw

We can draw people of 
different shapes and looks.

\Draw(0.6pt,0.6pt)
  \DrawOvalArc(30,45)(0,180) 
  \DrawOvalArc(30,12)(180,360) 
  \DrawOvalArc(60,25)(140,400)
  \Move(0,5)
  \DrawOvalArc(30,60)(225,315)
  \DrawOvalArc(20,52)(260,280)
  \Move(-10,-37) {\Text(--$\cdotp$--)}  \Text(--o--)
  \Move(20,0)    {\Text(--$\cdotp$--)}  \Text(--o--)
\EndDraw

And we can produce many other
types of drawings.       \end{document}>>>

\Ex{latex}{First example in section 6.1---second version}{sec61b}

\<<<
\documentstyle[DraTex]{report}
\begin{document}

We can draw clocks of
different styles and sizes.

\Draw 
  \Move(0,20)     \Line(0,-50) \Line(50,0)
  \PenSize(1.5pt) \Line(0,50)  \Line(-50,0)
  \Move(5,-25)    \Text(--9--)
  \Move(20,-18)   \Text(--6--)
  \Move(20,18)    \Text(--3--)
  \Move(-20,18)   \Text(--12--)
  \Move(0,-18)    {\RotateTo(60) \LineF(19)}
  \RotateTo(210)  \LineF(14)
\EndDraw

We can draw people of 
different shapes and looks.

\Draw(0.6pt,0.6pt)
  \DrawOvalArc(30,45)(0,180) 
  \DrawOvalArc(30,12)(180,360) 
  \DrawOvalArc(60,25)(140,400)
  \Move(0,5)
  \DrawOvalArc(30,60)(225,315)
  \DrawOvalArc(20,52)(260,280)
  \Move(-10,-37) {\Text(--$\cdotp$--)}  \Text(--o--)
  \Move(20,0)    {\Text(--$\cdotp$--)}  \Text(--o--)
\EndDraw

And we can produce many other
types of drawings.       \end{document}>>>


\Exr732

\<<<
|Open
\font\ARROWS=line10\space scaled\magstep5
\font\CIRCLES=lcircle10\space scaled\magstep5
%   \newfont{\ARROWS}{line10\space scaled\magstep5}
%   \newfont{\CIRCLES}{lcircle10\space scaled\magstep5}

                             \Text(--\CIRCLES \char 10--)
\Text(--\CIRCLES \char 11--) \Text(--\ARROWS \char 55--)  
\Text(--\CIRCLES \char 110--)\EntryExit(-1,0,-1,0)
\Text(--\CIRCLES \char 114--)|Close>>>

\Exr741

\<<<
|Open
\Ragged(8)
\Line(10,-10) \Line(10,20)
\LineTo(0,0) 
|Close>>>


\Ex{\tex}{First example in section 8.1}{sec81}

\<<<
|Open
\ThreeDim(-150,-60,-600)
   \Line(60,0,0)   \Line(0,0,60)
   \Line(-60,0,0)  \Line(0,0,-60)
   \LineTo(0,60,0) \Line(60,0,0)
   \Line(0,-60,0)  
   \LineAt(0,60,0,0,60,60)
   \Line(0,-60,0)  
\EndThreeDim |Close>>>


\Ex{\tex}{Example of USA map in section 9.3}{usa}

\<<<
|Open(0.9pt,0.9pt)
\Table\USA{       % California
   -60,-35 & -77,-30 & -80,
   -20 & -90,-15 & -100,40 &
   % Oregon
   -100,50 & -90,80 &
   % Wash
    -90,95 & -78,90 & -75,95 &
   % Minn
    100,70 & 85,60 &
   % Wisc-Mich
    95,60 & 105,65 & 102,63 & 110,60 & 125,60 & 110,55 & 110,30 &
    115,25 & 120,30 & 115,40 & 115,50 & 120,55 & 130,55 & 140,40 &
    135,25 &
   % Ohio-NY-Vt
    145,25 & 155,30 & 160,45 & 175,45 & 175,55 & 180,60 & 195,65 &
   % Maine
    200,75 & 200,85 & 205,90 & 210,90 & 215,80 & 220,75 & 205,60 & 205,50 &
   % Mass--NY
    210,43 & 208,47 & 215,43 & 190,30 & 202,35 &
   % NJ--Va
    197,25 & 190,18 & 185,20 & 190,15 & 190,5 & 182,18 & 182,0 & 185,0 &
   % NC
    190,-8 & 185,-4 & 183,-6 & 186,-6 & 182,-15 & 
    190,-18 & 190,-10 & 192,-10 &
    195,-18 &
   % Ga-Fl
    165,-40 & 160,-50 & 175,-80 & 175,-90 & 170,-100 & 165,-100 &
    155,-80 & 155,-65 & 145,-60 & 140,-62 & 136,-62 & 120,-60 &
   % Alaba--La
    102,-63 & 107,-67 & 107,-72 & 110,-75 & 90,-65 &
    78,-65 &
   % Texas
    62,-78 & 57,-78 & 50,-82 & 53,-92 & 48,-90 & 25,-65 & 15,-65 & 
    15,-68 & -10,-50 &
   % New Mexico
    -40,-50 &
   % Back to California
   -60,-35 }
{ \USA(0,0){\MoveTo} \USA(1,99){\LineTo} } \Text(--USA--) 
\Scale(0.5,0.5) \USA(46,46){\MoveTo} \USA(47,92){\LineTo}
\MoveTo(-30,0) \MarkLoc(a) \USA(0,0){\Move} \MarkLoc(b) 
\USA(0,46){{\LineToLoc(b)} \MarkLoc(b) \MoveToLoc(a) \Move} 
|Close>>>


\Exr{10}1{1a}
\<<<
|Open
\Text(--Government~%
              Bonds (\%)--)  
\Table\B{Britain,9.59 &
 Canada,7.98 &  Japan,5.46 &
 U.S.,  6.84 &  Mexico,14.9} 
\B(0,4){\PutBar} 
|Close >>>

\Exr{10}1{1b}
\<<<
|Open
\chick(0,75)  \Scale(-1,1) 
\chick(0,140) 
|Close >>>

\Exr{10}1{1c}
\<<<
|Open
\Table\x{ 30,40
  & 15,60 & 27,15 & 35,35 
  & 50,45 & 25,70 & 20,20 
  & 25,75 }   \x(0,99){\Tr}  
|Close >>>

\Exr{10}1{1d}
\<<<
|Open
\sqr(-24,0) 
\sqr(0,32) 
\sqr(24,-32)
|Close >>>

\Exr{10}1{1e}
\<<<
|Open
\engine(90)  \MoveTo(50,0)  
\engine(180) \MoveTo(100,0) 
\engine(-30) 
|Close >>>

\Exr{10}1{1f}
\<<<
|Open
\MarkLoc(A) 
\spring(110) \Rotate(70) 
\spring(60)  \MarkLoc(B)
\DSeg\RotateTo(B,A)  
\LSeg\spring(B,A)  
|Close >>>

\Exr{10}21
\<<<
|Open
\new(BODY) \<BODY>(20)
\LineF(20) \Rotate(55) \LineF(16) 
\new(hand) \<BODY>(140) \LineF(35)  
\new(hand) \<BODY>(90) \LineF(7)  
\new(head) \<BODY>(-60) \LineF(19)  
\new(left-leg) \<BODY>(210) \LineF(12) 
\Rotate(30) \LineF(14) \new(right-leg)
\Do(1,11){\I+15; \<head>(\Val\I) 
\LineF(11)} 
|Close >>>


\Exr{10}22

\<<<
|Open
\def\DefineSymbol#1{%
   \Indirect\Define<#1>}

\def\DrawText(--#1--){%
     \let\xNextSym=\xDrawSym  \xNextSym#1{}}

\def\xDrawSym#1{\def\temp{#1}%
     \ifx \temp\empty  \let \xNextSym=\relax
     \else \Indirect<#1>\fi   \xNextSym }

\DefineSymbol A{{ \Line(21,60)
   \Line(21,-60)  \Move(-7,20)
   \Line(-28,0) } \Move(52,0)  }
\DefineSymbol B{{ \DrawText(--P--)
   \Move(-25,18)
   \DrawOvalArc(15,18)(-90,90)
   \Move(0,-18)   \Line(-25,0)}
   \Move(50,0) }    \DefineSymbol P
{{      \Line(0,60)    \Line(25,0)
     \Move(0,-12) \DrawOvalArc(15,12)(-90,90)
     \Move(0,-12)  \Line(-25,0) }      \Move(50,0)  }
 \DefineSymbol C{{     \Move(20,30) 
     \DrawOvalArc(20,30)(45,315) }    \Move(46.6,0)  }
 \DefineSymbol D{{    \Line(0,60)    \Line(20,0)
     \Move(0 ,-30) \DrawOvalArc(20,30)(-90,90) \Move(0,-30)
     \Line(-20,0) }   \Move(50,0)  }
 \DefineSymbol E{{  \DrawText(--F--)  \Move(-50,0)
     \Line(40,0) }  \Move(50,0)      }
 \DefineSymbol F{{   \Line(0,60)   \Line(40,0)
     \Move(-40,-30) \Line(30,0)  }  \Move(50,0)     }
 \DefineSymbol G{{ \DrawText(--C--)
    \Move(-10,30) {\Line(-20,0)} \Line(0,-30)   } 
    \Move(46.6,0)     }
 \DefineSymbol H{{ \Line(0,60)  \Move(40,0) 
    \Line(0,-60)  \Move(0,30)  \Line(-40,0)   }  \Move(50,0)     }
 \DefineSymbol I{{ \Line(0,60)  }  \Move(10,0)     }
 \DefineSymbol J{{ \Move(20,17) \DrawOvalArc(20,17)(180,360)
    \Move(20,0) \Line(0,43)   }  \Move(50,0)     }
 \DefineSymbol K{{ \Line(0,60)  \Move(0,-35)
    \Line(40,35) \Move(-32,-28) \Line(32,-32) }  \Move(50,0)     }
 \DefineSymbol L{{ { \Line(0,60) } \Line(40,0)  }  \Move(50,0)     }
 \DefineSymbol M{{ \Line(0,60)  \Line(25,-60)
    \Line(25,60) \Line(0,-60)   }  \Move(60,0)     }
 \DefineSymbol N{{ \Line(0,60) \Line(40,-60)  
    \Line(0,60)  }  \Move(50,0)     }
 \DefineSymbol O{{ \Move(22,30)  \DrawOval(22,30)   }  \Move(54,0)     }
 \DefineSymbol P{{      \Line(0,60)    \Line(25,0)
     \Move(0,-12) \DrawOvalArc(15,12)(-90,90)
     \Move(0,-12)  \Line(-25,0) }      \Move(50,0)  }
 \DefineSymbol Q{{ \DrawText(--O--)  \Move(-10,-5)
     \Line(-15,15)   }  \Move(55,0)     }
 \DefineSymbol R{{ \DrawText(--P--) \Move(-10,0)
     \Line(-15,36)   }  \Move(50,0)     }
 \DefineSymbol S{{  \Move(20,18) \DrawOvalArc(20,18)(-140,90)
     \Move(0,30)  \DrawOvalArc(20,12)(40,270)  }  \Move(50,0)     }
 \DefineSymbol T{{ \Move(22,0) \Line(0,60)  \Move(-22,0)
     \Line(44,0)   }  \Move(54,0)     }
 \DefineSymbol U{{ \Move(20,15)  \DrawOvalArc(20,15)(180,360)
     \Move(-20,0) \Line(0,45) \Move(40,0) \Line(0,-45)   }
     \Move(50,0)     }
 \DefineSymbol V{{ \Move(0,60) \Line(22,-60)
     \Line(22,60)   }  \Move(54,0)     }
 \DefineSymbol W{{  \Move(0,60) \Line(15,-60)
     \Line(15,60)  \Line(15,-60) \Line(15,60)  }  \Move(70,0)     }
 \DefineSymbol X{{ \Line(40,60)  \Move(-40,0)
     \Line(40,-60)   }  \Move(50,0)     }
 \DefineSymbol Y{{ \Move(20,0) \Line(0,34) { \Line(-20,26)}
     \Line(20,26)   }  \Move(50,0)     }
 \DefineSymbol Z{{ \Move(0,60)  \Line(40,0) \Line(-40,-60)
     \Line(40,0)   }  \Move(50,0)     }
 \DefineSymbol 0{{ \Move(25,30) \DrawOval(25,30)   }  \Move(60,0)     }
 \DefineSymbol 1{{ \Line(0,60)   }  \Move(10,0)     }
 \DefineSymbol 2{{ \MarkLoc(a) \Move(0,10)
    \MarkLoc(a')  \Move(40,30)  \MarkLoc(b)
    \Move(0,-10)  \MarkLoc(b')  \Curve(a,a',b',b)
    \Move(-20,10) \DrawOvalArc(20,20)(0,180)
    \Move(-20,-40) \Line(40,0)   }  \Move(50,0)     }
 \DefineSymbol 3{{ \MarkLoc(a')  \Move(0,10)  \MarkLoc(a)
    \Move(20,-10) \MarkLoc(b) \Move(-10,0) \MarkLoc(b')
    \Curve(a,a',b',b)  \Move(22,0) \MarkLoc(b')
    \Move(8,8)  \MarkLoc(a')  \Move(0,10) \MarkLoc(a)
    \Curve(a,a',b',b)  \Move(0,10)  \MarkLoc(a')
    \Move(-8,8) \MarkLoc(b') \Move(-10,0)
    \MarkLoc(b) \Curve(a,a',b',b) \Move(-5,0)
    \MarkLoc(b') \Move(-5,-3) \MarkLoc(a')
    \Move(0,-2)  \MarkLoc(a)  \Curve(a,a',b',b)
    \Line(30,29) \Line(-40,0)   }  \Move(50,0)     }
\DefineSymbol 4{{      \Move(35,0)  \Line(0,60)
     \Line(-35,-35)     \Line(45,0)}    \Move(55,0)  }
 \DefineSymbol 5{{ \Move(15,20) \DrawOvalArc(19,20)(-140,140)
    \Move(-15,10) \Line(0,30) \Line(30,0)   }  \Move(44,0)     }
 \DefineSymbol 6{{ \Move(22,30)  \DrawOvalArc(22,30)(70,270)
    \Move(0,-10) \DrawOvalArc(22,15)(0,174)
    \DrawOvalArc(22,20)(270,360)  }  \Move(54,0)     }
 \DefineSymbol 7{{ \Move(0,60) \Line(40,0)
    \MarkLoc(a) \Move(-20,-60) \MarkLoc(b)
    \DSeg\RotateTo(b,a) \Rotate(20) \MoveF(10) \MarkLoc(b')
    \MoveToLoc(a)
    \DSeg\RotateTo(a,b) \Rotate(-20) \MoveF(10) \MarkLoc(a')
    \Curve(a,a',b',b)  }  \Move(50,0)     }
 \DefineSymbol 8{{  \Move(20,17) \DrawOval(20,17)
    \Move(0,30)  \DrawOval(20,13)  }  \Move(50,0)     }
 \DefineSymbol 9{{\Move(50,60) \Scale(-1,-1) \DrawText(--6--)   }  \Move(54,0)
}

\Scale(0.1,0.1) \Ragged(1) 
\DrawText(--BOLD--)
\PenSize(0.2pt) \MoveTo(0,-100)
{ \Scale(-1,1)
  \DrawText(--BACKWARD--) }
\MoveTo(0,-200) \RotatedAxes(0,75)  \DrawText(--SLANTED--)
\EndRotatedAxes \MoveTo(0,-300) \RotatedAxes(-45,45)
\DrawText(--ROTATED--)          \EndRotatedAxes
|Close>>>

\Ex{\tex}{Last example in section 11.2}{boxes}

\<<<
|Open
\Object\ch(1){\Text(--#1--)
  \MoveToExit(-1,-1)
  \FigSize\Q\R{\Text(--#1--)}
  \DrawRect(\Val\Q,\Val\R) }
\Define\chrs(1){\font\f=#1\space scaled\magstep4 \f
  \Table\chrs{A & l & l & ~ & i & n & ~ &
      b & o & x & e & s & .}   \chrs(0,99){\ch} }
\PenSize(0.2pt) \EntryExit(-1,-1,1,-1)
{\chrs(cmtt10)} \Move(0,-20) \chrs(cmsl10) 
|Close>>>

\Exr{11}21
\<<<
|Open
\Define\side(3){ 
  \ProjectedAxes(#1,#2)(#1,#3) 
    \DrawRect(1,1)  \Move(0.5,0.5) 
    \DrawCircle(0.5)  
  \EndProjectedAxes }
\ThreeDim(80,70,-40)    \MarkPLoc(a)
  \Move(0,-50,0)   \MarkPLoc(b) 
  \Move(0,50,25)   \MarkPLoc(c) 
  \Move(-25,0,-25) \MarkPLoc(d) 
  \side(a,b,d) \side(a,b,c) \side(a,c,d) 
\EndThreeDim
|Close >>>


\Exr{11}24

\<<<
|Open
\Define\Spline(1){
  \MarkLoc(0) \MoveTo(0,0) \MarkLoc(00)
  \Table\P{#1} \Define\Count(1){\K+1;} \K=-4;
  \P(0,999){\Count}
  \Do(0,\Val\K){ 
    \GetCoefficients
    \MoveTo(\Val\Ao,\Val\Bo)  \CSeg\Move(00,0)
    \MarkLoc(o)   \f   \MarkLoc(x)
    \Do(1,30){  
       \T=\DoReg;  \T/30;
       \X=\Aiii; \X*\T; \X+\Aii; \X*\T; \X+\Ai; \X*\T;
       \Y=\Biii; \Y*\T; \Y+\Bii; \Y*\T; \Y+\Bi; \Y*\T;
       \MoveToLoc(o)    \Move(\Val\X,\Val\Y)      \f
       {\LineToLoc(x)}  \MarkLoc(x)    }}
  \MoveToLoc(0)}

\Define\f{}
\DecVar\Ao \DecVar\Ai \DecVar\Aii \DecVar\Aiii \DecVar\X
\DecVar\Bo \DecVar\Bi \DecVar\Bii \DecVar\Biii \DecVar\Y 

\Define\GetCoefficients{
   \I=\DoReg;  \P(\Val\I,\Val\I){\First}
   \I+1;       \P(\Val\I,\Val\I){\Second}
   \I+1;       \P(\Val\I,\Val\I){\Third}
   \I+1;       \P(\Val\I,\Val\I){\Fourth}  }
\Define\First(2){\Ao=#1; \Ai=-#1; \Aii=#1; \Aiii=-#1; 
                 \Bo=#2; \Bi=-#2; \Bii=#2; \Biii=-#2;}
\Define\Second(2){
   \T=#1; \T* 4; \Ao +\T;   \T=#2; \T* 4; \Bo +\T;
   \T=#1; \T*-2; \Aii+\T;   \T=#2; \T*-2; \Bii+\T;
   \T=#1; \T* 3; \Aiii +\T; \T=#2; \T* 3; \Biii +\T;}
\Define\Third(2){ \Ao +#1; \Ao /6;   \Bo +#2; \Bo /6;
                  \Ai +#1; \Ai /2;   \Bi +#2; \Bi /2;
                  \Aii+#1; \Aii/2;   \Bii+#2; \Bii/2;
   \T=#1; \T*-3; \Aiii+\T;  \T=#2; \T*-3; \Biii+\T;}
\Define\Fourth(2){
   \Aiii+#1;  \Aiii/6;  \Biii+#2; \Biii/6;}

\Spline(0,15 & 30,-70 
  & 40,-50 & 10,0 &  15,30 
  & 50,5 &60,10 & 8,45 & 
  8,55 & 30,70 &  0,80 &
 -30,70 &-8,55 & -8,45 &
 -60,10 &-50,5 & -15,30 &
 -10,0 &-40,-50 &-30,-70 & 
  0,15 & 30,-70 & 40,-50 )
\Define\ShowPoint(2){
  \MoveToLoc(0) \Move(#1,#2)
  \Text(--$\circ$--)}
\P(0,99){\ShowPoint}

\Define\TEX{
  \Spline(0,-15 & 0,-15 & 
          0,-15 & 0, 15 &
          0, 15 & 0, 15 )
  \Spline(-10,15 & 
     -10,15 & -10,15 & 10,15 &
      10,15 &  10,15)
  \Move(12,0)
  \Spline(0,0  &  0,0 &  0,0 & 14,0 & 14,0 & 14,0)
   \Spline(  20,15  &20,15  &20,15  & 0,15 & 0,15 
   &   0,-15 & 0,-15 & 20,-15 &20,-15&20,-15)
   \Move(32,0) \Spline(  -10,-15  &  -10,-15  &
   -10,-15 & 10,15 & 10,15 & 10,15)
   \Spline(  -10,15  &
   -10,15 &    -10,15 & 10,-15 & 10,-15 & 10,-15) } 
\TEX \MoveTo(0,0)   \F  
\TEX \MoveTo(0,-35) \G  
\TEX                 
|Close >>>


\Exr{11}31
\<<<
|Open
\Define\put(2){
   \IF \EqText(,#1) \THEN
      \top  \Define\put(1){} 
   \ELSE \push(#1) \FI  \put(#2)}
\Define\stack(1){ 
   {\put(#1,,)} \Move(0,-13)}  
\Table\x{ &  1&  1, 2&
1, 2, 3&        1, 2, 3, 4&
1, 2, 3, 4, *&  1, 2, 12&
1, 2, 12,+&  1, 14&  1, 14,+& 15} 
\x(0,100){\stack} 
|Close >>>


\Exr{11}32
\<<<
|Open
\Table\g{
  16 & 8 & 4 & 2 & 1 & 
  20 & 16 & 8 & 4 & 2 & 
  17 & 12 & 16 & 8 & 4 & 
  23 & 20 & 12 & 13 & 17 }  
\ThreeDim(160,75,-70)
  \Scale(20,5,20) 
  \g(0,140){\surface}
\EndThreeDim     
|Close >>>






\Ex{\tex}{NEW OPTION FOR {\tt\char92}ThreeDim}{NewThreeDim}



{\tt\string\ThreeDim($x_e$,$y_e$,$z_e$)}   perspective projections (old option)

{\tt\string\ThreeDim($\alpha_{xy}$,$\alpha_z$)}  parallel projections (new additional option): 
$\alpha_{xy}$ --- direction within xy plane, 
$\alpha_z$  --- direction with respect to xy plane.

          e.g.,   {\tt\string\ThreeDim(30,60)}   or  
{\tt\string  \ThreeDim(45,60)}


\<<<
|Open
\Define\cube{
   \Line(50,0,0){\Line(0,0,50)}
   \Line(0,50,0){\Line(0,0,50)}
   \Line(-50,0,0){\Line(0,0,50)}
   \Line(0,-50,0)  \Move(0,0,50)
   \Move(50,0,0)   \Line(0,50,0)
   \Line(-50,0,0)  }
\ThreeDim(80,80,-100)  \cube  \EndThreeDim
\MoveTo(0,-130)
\ThreeDim(45,60)         \cube  \EndThreeDim
\MoveTo(0,-260)
\ThreeDim(30,60)         \cube  \EndThreeDim
|Close>>>

\Lib{AlDraTeX} \def\files{\fileAD}


\Ex{tex}{Example in section 13.2}{sec132}

\<<<
\input DraTex.sty
\input AlDraTex.sty
\Draw
   \Scale(1,0.5)
   \PieChartSpec(1,50,20)()
   \PieChart(15 & 10 & 30)
   \Move(0,-6)
   \DrawOvalArc(50,50)(180,360)
\EndDraw
\bye>>>

\Ex{tex}{Example in section 13.2---second version}{sec132a}

\<<<
\input DraTex.sty
   \def\AlDraTex{pie}
\input AlDraTex.sty
\Draw
   \Scale(1,0.5)
   \PieChartSpec(1,50,20)()
   \PieChart(15 & 10 & 30)
   \Move(0,-6)
   \DrawOvalArc(50,50)(180,360)
\EndDraw
\bye>>>


\Ex{latex}{Example in section 13.2}{sec132b}

\<<<
\documentstyle{report}
   \input DraTex.sty
   \input AlDraTex.sty
\begin{document}
\Draw
   \Scale(1,0.5)
   \PieChartSpec(1,50,20)()
   \PieChart(15 & 10 & 30)
   \Move(0,-6)
   \DrawOvalArc(50,50)(180,360)
\EndDraw
\end{document}>>>

\Ex{latex}{Example in section 13.2---second version}{sec132c}

\<<<
\documentstyle[DraTex,AlDraTex]{report}
\begin{document}
\Draw
   \Scale(1,0.5)
   \PieChartSpec(1,50,20)()
   \PieChart(15 & 10 & 30)
   \Move(0,-6)
   \DrawOvalArc(50,50)(180,360)
\EndDraw
\end{document}>>>

\Ex{latex}{Example in section 13.2---third version}{sec132d}

\<<<
\documentstyle{report}
   \input DraTex.sty
      \def\AlDraTex{pie}
   \input AlDraTex.sty
\begin{document}
\Draw
   \Scale(1,0.5)
   \PieChartSpec(1,50,20)()
   \PieChart(15 & 10 & 30)
   \Move(0,-6)
   \DrawOvalArc(50,50)(180,360)
\EndDraw
\end{document}>>>

\Ex{latex}{Example in section 13.2---forth version}{sec132e}

\<<<
\def\AlDraTex{pie}
\documentstyle[DraTex,AlDraTex]{report}
\begin{document}
\Draw
   \Scale(1,0.5)
   \PieChartSpec(1,50,20)()
   \PieChart(15 & 10 & 30)
   \Move(0,-6)
   \DrawOvalArc(50,50)(180,360)
\EndDraw
\end{document}>>>

\Ex{\tex}{Chemical diagram in section 16.1}{sec161}

\<<<
|Open
\Define\ChemEdge(3){{   
  \MoveToNodeDir(#2,#1)  
  \MarkLoc(b) \MoveToNodeDir(#1,#2)
  \MarkLoc(a) \DSeg\RotateTo(a,b)  
  \Rotate(-90)\Q=#3; \Q/2; \Q-0.5; 
  \Q*2.2;  \MoveF(\Val\Q)
  \Do(1,#3){ {\CSeg\Line(a,b)} 
                 \MoveF(-2.2) } }} 
\Do(1,6){ \MoveF(30) 
  \Node(\DoReg)(--C--) \MoveF(20) \Node(x)(--H--) 
  \ChemEdge(\DoReg,x,1) \MoveTo(0,0) \Rotate(60) }
\ChemEdge(1,2,2) \ChemEdge(2,3,1) \ChemEdge(3,4,2)
\ChemEdge(4,5,1) \ChemEdge(5,6,2) \ChemEdge(6,1,1)
|Close >>>


\Ex{\tex}{Finite automaton in last example of chapter 17}{FA}

\<<<
|Open
\NewCIRCNode(\StateNode,106,)
\NewCIRCNode(\AStateNode,106,103)
\Define\StateAt(3){ \MoveTo(#2,#3)
   \StateNode(#1)(--$q_{#1}$--)}
\Define\AStateAt(3){
   \MoveTo(#2,#3)
   \AStateNode(#1)(--$q_{#1}$--)}
\DiagramSpec(\StateAt&
       \AStateAt&\TransEdge)
\ArrowHeads(1)     \Diagram
   ( 0,0,0    & 1,50,50  &
     3,90,-50 & 4,20,-50 )(2,75,0)               
   (0,1,a,b & 1,2,a, & 0,2, ,b & 2,2,0,b & 0,4,a,  & 4,3,a,b )  
\CurvedEdgeAt(3,1,0,1,1,0)(20,0.3,0,0.5) \EdgeLabel[+](--a--)
|Close>>>


\noindent\dotfill\ 

New commands in AlDraTeX for setting spread diagrams (add to end of ch
17)

\noindent\dotfill\ 

\begingroup 
\leftskip= 1.5em
\parindent = -\leftskip

\def\item{\medskip\leavevmode\hbox to \leftskip{$\circ$\hss}}

\item
 `{\tt\string\DefNode}'.  A prefix to a node-generating command. The
prefix asks that the command will produce an invisble node. The
invisible node is assigned addresses but  is not drawn into the
figure.


\item
 `{\tt\string\PutNode(N)}'. This command realizes, according to the current
conditions, a specified invisible node that has been defined earlier
by `{\tt\string\DefNode}'.

\item
 `{\tt\string\ZeroNodesDim}'. Sets the pseudovariables `{\tt\string\WidthX}',
`{\tt\string\WidthY}', `{\tt\string\MaxX}', and `{\tt\string\MaxY}' to 0.

\item
 `{\tt\string\AddNodeDim(N)}'. Inserts the horizontal and vertical
dimensions of node N to the pseudovariables `{\tt\string\Widthx}' and
`{\tt\string\Widthy}', respectively.  Adds these values to the
pseudovariables `{\tt\string\WidthX}' and `{\tt\string\WidthY}',
respectively.  In addition, half the horizontal dimension of node N is
stored in `{\tt\string\MaxX}' if the pseudovariable contains a smaller
value, and a similar outcome holds for the vertical dimension with
respect to the pseudovariable `{\tt\string\MaxY}'.
\par\endgroup

\Ex{\tex}{}{newA}

\<<<
|Open
\DefNode\CircleNode(a)(--Two--)
\MoveToNode(a,0,0) \MarkLoc(A)
\MoveToNode(a,1,0) \MarkLoc(B)
\LSeg\R(A,B)  \MoveTo(0,0)
\OvalNode(b)(--Touching Nodes--)
\RotateTo(19.5) \MoveF(5)  \MarkLoc(A)
\MoveToNodeDir(b,A)        \MarkLoc(A)
\MoveToNode(b,0,0)
\RotateTo(20.5) \MoveF(5)  \MarkLoc(B)
\MoveToNodeDir(b,B)        \MarkLoc(B)
\RotateTo(20)   \MoveF(5)  \MarkLoc(C)
\MoveToNode(b,0,0) \MoveToNodeDir(b,C)
\DSeg\RotateTo(A,B)  \Rotate(-90)
\MoveF(\Val\R)  \PutNode(a)
|Close>>>


\Ex{\tex}{}{newB}

\<<<
|Open

\def\Dist#1(#2,#3,#4){\MarkLoc(a*)%
   \MoveToNode(#2,0,0)\MarkLoc(b*)%
   \MoveToNode(#2,#3,#4)\MarkLoc(c*)%
   \LSeg#1(b*,c*)\MoveToLoc(a*)}

\EntryExit(1,1,1,-1.5)  
\Object\G(3){
           \RectNode(a)(--#1--)
   \DefNode\RectNode(b)(--#2--)
   \DefNode\RectNode(c)(--#3--)
   \Dist\T(a,1,0)  \Dist\R(b,1,0)  \Dist\Q(c,1,0)
   \R+\Q;  \T-\R;  \T*2;
   \ZeroNodesDim \AddNodeDim(b)
   \AddNodeDim(c)  \Q=\MaxY;
   \Dist\R(a,0,1)   \Q+\R;
   \Q+20;  \EntryExit(-1,0,1,0)
   \IF \GtDec(\T,40) \THEN
      \T+40;   \T/3;  
      \SetNodes(20,\Val\T)
   \ELSE \T=-\T; \T+60; \T/2;
      \SetNodes(\Val\T,20)  \FI  
   \Edge(b,c)  \ArrowHeads(1)
   \VHEdge(A,c)  \VHEdge(B,b) }
\Define\SetNodes(2){
   \MoveToNode(a, 1,0)  \Line( #1,0)  \FcNode(A)
   \MoveToNode(a,-1,0)  \Line(-#1,0)  \FcNode(B)
   \Move(#2,-\Val\Q)     \PutNode(b)
   \Move(#2,  0)         \PutNode(c)     }
\G(short~~and~~deep,d~~e~~e~~p,shallow)
\G(very~very~long~node,shallow,d~~e~~e~~p)
|Close>>>


\Ex{\tex}{}{newC}




\<<<
|Open
\Define\Vertex(2){
   \IF       \EqText(r,#1)  \THEN  \Define\NodeType{\RectNode}
   \ELSE \IF \EqText(d,#1)  \THEN  \Define\NodeType{\DiamondNode}
   \ELSE \IF \EqText(o,#1)  \THEN  \Define\NodeType{\OvalNode}
   \ELSE                           \Define\NodeType{\Node}
   \FI\FI\FI
   \DefNode\NodeType(\Val\I..\Val\J)(--#2--)
   \AddNodeDim(\Val\I..\Val\J)  }
\Define\DefRow(1){
   \IF \EqText({},{#1}) \THEN \Define\g{\MoveToLoc(start)} 
   \ELSE      \ZeroNodesDim  \J=-1;
      \Table\x{#1}  \x(0,99){\J+1; \Vertex}
      \Move( 0,-\MaxY)   \MarkLoc(\Val\I)  \Move(5,0) \MarkLoc(\Val\I')
      \Move(-5,-\MaxY)   \Move(0,-\Sy)  \I+1;
   \FI  \g  }

\Define\ProjectToRow(1){
   \MarkLoc(x) \Move(0,5) \MarkLoc(x')
   \MoveToLL(#1,#1')(x,x')  }

\Define\VSpace(1){ \Define\Sy{#1}   }
\VSpace(15)

\Define\DefRowDiagram{
   \MarkLoc(start)  \I=0;  \Define\g{\DefRow} \g}

\DefRowDiagram
   (  o, An~ approach~~ for~ setting~~ flow~ diagrams
   &  r, Use~~ {\tt\char92DefineRowDiagram}~~ 
         to~ define~~ the~ rows~~ of~ nodes
   )( r, Derive~~ x~ coordinate~~ for~ N~ then~ 
         call~~ {\tt\char92ProjectToRow}
   &  r, Choose~~ nonrealized~~ node~ N
   &  d, More~ nodes~~ to~ realize?
   )( r, Realize~ N~~ with~ {\tt\char92PutNode}
   &  o, Done
   )()
\ProjectToRow(0) \EntryExit(0,0,-1,0) \PutNode(0..0)
\ProjectToRow(2) \MarkLoc(A)
\ProjectToRow(1) \EntryExit(-1,0,1,0) \PutNode(1..0)
\Move(20,0)  \PutNode(1..1)  \Move(20,0)
\EntryExit(-1,0,0,0)   \PutNode(1..2)  
\ProjectToRow(0) \EntryExit(0,0, 0,0) \PutNode(0..1)
\ProjectToRow(2) \EntryExit(0,0,-1,0) \PutNode(2..1)
\MarkLoc(B)  \CSeg[0.5]\Move(B,A)     \PutNode(2..0)
\ArrowHeads(1) \Edge(0..0,0..1)  \Edge(0..1,1..2)
  \Edge(1..2,1..1)  \EdgeLabel(--Yes--)
  \Edge(1..2,2..1)  \EdgeLabel(--No--)
\Edge(1..1,1..0)  \VHEdge(1..0,2..0)
\EdgeFrom(2..0,1,0,1..2)
|Close>>>

\begingroup
   \def\startInput{}
   \def\endInput{}

\Ex{\tex}{}{newD}

\<<<
|Open
\Define\DefNd(1){
   \DefNode\RectNode(\Val\I)(--#1--)
   \AddNodeDim(\Val\I)   \I+1; }
\Define\D(1){
   \IF \EqText({},{#1}) \THEN \Define\g{} 
   \ELSE      \ZeroNodesDim  \J=-1;
      \Table\x{#1}  \x(0,99){\J+1; \DefNd}
      \T=\J; \T*15;  \T+\WidthX; \T/\F;
      \Move(0,-\MaxY)  \MarkLoc(a)  \Move(\Val\T,0)
      \K=\I;
      \Do(0,\Val\J){ \K-1; \PutNode(\Val\K)  \Move(-15,0) }
      \MoveToLoc(a)  \Move(0,-\MaxY)   \Move(0,-15)
   \FI  \g  }
\Define\G(1){\I=0;    \EntryExit(1,0,-1,0)
   \Define\g{\D} \Define\F{#1} \g}

\Draw
\G(2)(first & diagram)
     (centers & of~~rows~~on & vertical~~line )
     (distance~=~15 & between~~rows)
     ()
\Table\x{0,2 & 0,3 & 1,3 & 1,4 & 2,5 & 3,5 & 3,6 & 4,6}
\x(0,99){\Edge}
\EndDraw

\Draw\Move(0,-15)  
\G(1)(new~diagram)
     (left~~margins & for~rows) ()
\Edge(0,1) \Edge(1,2)  \Edge(2,0)
\EndDraw

\Draw
\Move(0,-15)  
\G(10000)(new~diagram)
     (right~margins & for~~rows) ()
\Edge(0,1) \Edge(1,2)  \Edge(2,0)
\EndDraw
|Close>>>


\Ex{\tex}{}{newE}

\<<<
|Open
\Define\DefNd(1){
   \DefNode\RectNode(\Val\I..\Val\J)(--#1--)
   \AddNodeDim(\Val\I..\Val\J) }
\Define\DefG(1){
   \IF \EqText({},{#1}) \THEN \Define\g{\PutG} 
   \ELSE      \ZeroNodesDim  \J=-1;
      \Table\x{#1}  \x(0,99){\J+1; \DefNd}
      \Indirect\let<\Val\I.width>=\WidthX
      \Indirect\edef<\Val\I.size>{\Val\J}
      \T=\J; \T*\Sx;  \T+\WidthX;
      \IF \GtDec(\T,\Q) \THEN  \Q=\T; \FI
      \Move(0,-\MaxY)   \MarkLoc(\Val\I)
      \Move(0,-\MaxY)  \Move(0,-\Sy)  \I+1;
   \FI  \g  }
\Define\PutG(1){ \I-1;  \EntryExit(-1,0,1,0)
   \Do(0,\Val\I){      \MoveToLoc(\DoReg)
      \R=\Q;  \Indirect{\R-}<\DoReg.width>;
      \Indirect{\J=}<\DoReg.size>;   \K=\J; 
      \DiagType
      \IF  \GtDec(\Q,\T)  \THEN
         \K+2;  \R/\K;  \Move(\Val\R,0)
      \ELSE
         \IF  \GtInt(\J,0)  \THEN   \R/\K;    \FI
      \FI
      \I=\DoReg;
      \Do(0,\Val\J){ \J=\DoReg;
         \PutNode(\Val\I..\Val\J)  \Move(\Val\R,0) }
    }
    \Table\x{#1}  \x(0,99){\Edge}   }
\Define\G{   \I=0;  \Q=0;
   \Define\g{\DefG} \g}

\Define\FillDiagram{
   \Define\DiagType{\T=\Q;}
   \G}
\Define\MarginsDiagram{
   \Define\DiagType{\T=\J;  \T*\Sx;  \Indirect{\T+}<\DoReg.width>;}
   \G}
\Define\HVSpaces(2){ \Define\Sx{#1}    \Define\Sy{#2}   }
\HVSpaces(15,15)

\Draw
\FillDiagram(Fill & Diagram)
    (fixed & distances & between~~rows)
    (uniform & spaces &within~~each &row)
    ()
    (  0..0,1..0 & 0..0,1..1 & 0..1,1..1 & 0..1,1..2
     & 1..0,2..0 & 1..0,2..1 & 1..1,2..1 & 1..1,2..2
     & 1..2,2..2 & 1..2,2..3)  
\EndDraw

\Draw   \HVSpaces(25,15)
\MarginsDiagram(Margins & Diagram)
    (fixed & distances &between~~rows)
    (uniform~~spaces&between~nodes&within~~each~row)
    ()
    (  0..0,1..0 & 0..0,1..1 & 0..1,1..1 & 0..1,1..2
     & 1..0,2..0 & 1..0,2..1 & 1..1,2..1 & 1..1,2..2
     & 1..2,2..2 )  

\EndDraw
|Close>>>

\endgroup
\noindent\dotfill\ 

End new commands for setting spread diagrams (end of ch 17)

\noindent\dotfill\ 



\Ex{\tex}{Commutative diagram in last example of section  18.3}{CM}

\<<<
|Open
\GridDiagramSpec()(\MyEdge)
\Define\L(4){,+#1..+#2\,L\,#3\,#4}
\Define\D(4){,+#1..+#2\,D\,#3\,#4}
\Define\MyEdge(5){
   \IF \EqText(#3,D) \THEN\EdgeSpec(D)
   \ELSE  \EdgeSpec(L)  \FI
   \IF  \EqText(#1,#2)  \THEN
      \RotateTo(#4) \CycleEdge(#1) 
      \EdgeLabel(--$#5$--)
   \ELSE\Edge(#1,#2)
      \IF \EqText(,#4) \THEN \EdgeLabel(--$#5$--)
      \ELSE \EdgeLabel[#4](--$#5$--) \FI
   \FI}      
\ArrowHeads(1)     
\GridDiagram(3,3)()()({
& T \D(0,1,,f) \D(2,0,,h) & N \L(2,0,,\sigma)//
S \L(0,0,180,t) \L(-1,1,,f) \L(1,1,+,g\circ f)//
& W \L(0,1,,f) & X \D(0,0,-45,r)//}) 
|Close >>>


\Ex{\tex}{Second example in section 20.2}{sec202}

\<<<
|Open
\NewNode(\MyNode,\MoveToRect){
   \Move(-24,-8) \DrawRect(48,16)
   \Move(16,0) {\Line(0,16)}
   \Move(16,0) \Line(0,16)  }
\Define\MyEdge(2){
   \CSeg\FindSign(#1,#2)
   \EdgeAt(#1,\sign 0.66,0,#2,0,1)}
\Define\FindSign(2){
   \IF  \GtDec(#1,0)  \THEN
        \Define\sign{}
   \ELSE \Define\sign{-} \FI}
\TextNode(2){ \Text(--$#2$--)
   \IF \EqInt(#1,0) \THEN {
     \Move(-16,0) \Text(--$\Lambda$--)
     \Move(32,0) \Text(--$\Lambda$--)
   }\FI }  
\ArrowHeads(1)
\TreeSpace(D,10,20) 
\TreeSpec(\MyNode)()(\MyEdge)
\Tree()(2,2,A// 0,0,B&2,2,C// 2,2,D&0,0,E// 0,0,F&0,0,G//)  
|Close >>>


\Ex{\tex}{Last example in section 20.2}{LR}

\<<<
|Open
\GridDiagramSpec(\RNode)(\MyEdge) 
\GridSpace(10,10) \ArrowSpec(F,5,3,3) 
\ArrowHeads(1) \CycleEdgeSpec(-30,20)
\NewNode(\RNode,\MoveToOval){ 
  \GetNodeSize   \Va+4;  \Vb+4;
  \SetMinNodeSize   \Move(0,3)
  \DrawOval(\Val\Va,\Val\Vb) }
\Define\MyEdge(3){ 
  \IF \EqText(#1,#2) \THEN 
    \RotateTo(45) \LabelPos(+0.5;,3)
    \CycleEdge(#1)
  \ELSE  \DSeg\Q(#1,#2)  
    \IF \GtDec(\Q,180) \THEN 
      \LabelPos(+0.4;,3) \ELSE \LabelPos(0.5;,3)
    \FI \Edge(#1,#2) \FI \EdgeLabel(--$#3$--) }
\baselineskip=9pt       \Define\NEXT(3){,#1..#2\,#3}
\def\/#1/#2.#3;{\hbox{$\scriptstyle#1\rightarrow #2\cdotp#3$}~~}
\GridDiagram(3,3)()()({
&  \/S'/ S. ; \/A / S.a; $I_1$ \NEXT(+0,+1,a)
&  \/A / Sa.;            $I_2$
// \/S'/ .S ; \/S / .AS; \/  / .b  ;
   \/A / .Sa; \/  / .a ; $I_0$ \NEXT(-1,+1,S) \NEXT(+0,+1,A)
                               \NEXT(+1,+1,b) \NEXT(+1,+0,a)  
&  \/S /A.S ; \/S /.AS  ; \/  /.b   ;
   \/A /.Sa ; \/  /.a   ; $I_3$ \NEXT(+0,+1,S) \NEXT(+0,+0,A)
&   \/A/ S.a ;         $I_4$  \NEXT(+1,+0,a)
//
   \/A/a.;    $I_5$
&  \/S/ b. ;   $I_6$
&  \/A/ Sa. ;         $I_7$
//
}) 
|Close >>>



\Ex{\tex}{Last example in chapter 20}{TM}


\<<<
|Open
\NewCIRCNode(\StateNode,104,)
\NewCIRCNode(\AStateNode,104,102)
\Define\StateAt(3){ \MoveTo(#2,#3)
   \StateNode(#1)(--$q_{#1}$--)}
\Define\AStateAt(3){\MoveTo(#2,#3)
   \AStateNode(#1)(--$q_{#1}$--)}
\LabelSpec(4){\PictLabel{
   { \Move(1,-5) \Line(8,20) }
   { \Move(4,10) { \EntryExit(1,0,0,0) 
     \Text(--\strut$#1$--) }  \Move(6,0)   
     \EntryExit(-1,0,0,0) \Text(--\strut$#3$--) }
   { \EntryExit( 1,0,0,0) \Text(--\strut$#2$--) }
   \Move(6,0)  \EntryExit(-1,0,0,0) \Text(--\strut$#4$--) }}
\DiagramSpec(\StateAt&\AStateAt&\TransEdge)  \ArrowHeads(1) 
\Diagram( 0,0,0 & 1,80,0 )(2,80,-60)(
   0,0,90,{a,B,+1,a{,+}1}                 &
   0,1,   {a,B,+1,a{,+}1}, {b,B,0,B{,-}1} &
   1,2,   {|DEFEND\$,B,0,B{, }0}, ) 
|Close >>>





\Lib{ProTeX and AlProTex}  \def\files{\fileP}  \def\LLL{>>>}

\let\startInput=\empty

\let\endInput=\empty

NOTE.  The La\TeX{} files of this part put the
{\tt\string\AlProTex....} command after the
{\tt\string\begin\string{document\string}} command. This is not a nice
style for files.

\Exr{22}2{2a}
\<<<
|Open
\AlProTex{awk,<<<|LLL,@,%
  list,title,[]}
\catcode`\@=0

An Awk program for deriving 
the distribution of words.

@<dist@><<<
BEGIN {print"words\t lines"}
@<count the words@>
END { i=0 
      while (i<=m)
      {if (c[i]>0)
       {print i "\t " c[i]}
       i=i+1 }}
|LLL 

NF is a built-in variable 
that holds the number of 
words in the current input
line.

@<count the words@><<<
{ c[NF]=c[NF]+1
  {if (NF>m) m=NF} }
|LLL \OutputCode@<dist@> 
|Close >>>


\Exr{22}2{2b}
\<<<
|Open
\AlProTex{awk,<<<|LLL,@,%
  list,title,[]}

An Awk program for deriving 
the distribution of words.

\<dist\><<<
BEGIN {print"words\t lines"}
@<count the words@>
END { i=0 
      while (i<=m)
      {if (c[i]>0)
       {print i "\t " c[i]}
       i=i+1 }}
|LLL 

NF is a built-in variable 
that holds the number of 
words in the current input
line.

\<count the words\><<<
{ c[NF]=c[NF]+1
  {if (NF>m) m=NF} }
|LLL \OutputCode\<dist\> 
|Close >>>


\Exr{22}2{3}

\<<<
|Open
\AlProTex{p,<<<|LLL,%
           title,list,[]}

\<prog\><<<
PROGRAM prog;|LLL

\<body\><<<
{ comment } |LLL

\<prog\><<<
BEGIN
  \<body\>
END.|LLL

\OutputCode\<prog\>  
|Close >>>

\Exr{22}2{4a}

\<<<
|Open
\AlProTex{p,list,%
   <<<|LLL,title,[]}

\<\><<<
PROGRAM prog;|LLL

\<body\><<<
{ comment } |LLL

\<\><<<
BEGIN
  \<body\>
END.|LLL

\OutputCode\<\> 
|Close >>>

\Exr{22}2{4b}

\<<<
|Open
\AlProTex{p,%
    <<<|LLL,title,[]}

\<\><<<
PROGRAM prog;|LLL 
\ShowCode-\<\>

\<body\><<<
{ comment } |LLL 
\ShowCode\<body\>

\<\><<<
BEGIN
  \<body\>
END.|LLL          
\ShowCode\<\>
\OutputCode\<\> 
|Close >>>

\Exr{22}2{4c}

\<<<
|Open
\AlProTex{p,%
   <<<|LLL,title,[]}

\<\><<<
PROGRAM prog;|LLL

\<body\><<<
{ comment } |LLL

\<\><<<
BEGIN
  \<body\>
END.|LLL

\OutputCode\<\> 
|Close >>>  



\Exr{22}2{5a}

\<<<
|Open
\AlProTex{p,<<<|LLL,%
          title,list,[]}

\<myprog\><<<
PROGRAM prog;|LLL

\<body\><<<
{ comment } |LLL

\<myprog\><<<
BEGIN
  \<body\>
END.|LLL
\OutputCode\<myprog\> 

|Close >>>

\Exr{22}2{5b}

\<<<
|Open
\AlProTex{p,title,list,[]}

\<myprog\>{PROGRAM prog;}

\<body\>{ \{ comment \} }

\<myprog\>{BEGIN
  \<body\>
END.}
\OutputCode\<myprog\>  

|Close >>>




\Exr{22}2{6a}

\<<<
|Open
\AlProTex{p,<<<|LLL,[],%
             title,list}
\<myprog\><<<
PROGRAM prog;
BEGIN
  \<body\>
END.|LLL  

\<body\><<<
{ comment: \\@||` } |LLL 
|Close >>> 

\Exr{22}2{6b}

\<<<
|Open
\AlProTex{p,<<<|LLL,[],%
             title,list,@}
\<myprog\><<<
PROGRAM prog;
BEGIN
  @<body@>
END.|LLL  

\<body\><<<
{ comment: \@@||` } |LLL 
|Close >>> 

\Exr{22}2{6c}


\<<<
|Open
\AlProTex{p,<<<|LLL,[],%
             title,list,||}
\<myprog\><<<
PROGRAM prog;
BEGIN
  ||<body||>
END.|LLL  

\<body\><<<
{ comment: \@||||` } |LLL 
|Close >>> 


\Exr{22}2{6d}

\<<<
|Open
\AlProTex{p,<<<|LLL,[],%
             title,list,`}
\<myprog\><<<
PROGRAM prog;
BEGIN
  `<body`>
END.|LLL  

\<body\><<<
{ comment: \@||`` } |LLL 
|Close >>> 

\Exr{22}2{7}

\<<<
|Open
\AlProTex{p,<<<|LLL,[],%
               title,list,||}

\<temp\><<<
\<prog\><<<
PROGRAM prog;
BEGIN
  ||||<body||||>
END.>||empty>>  

\<body\><<<
{comment: \@||||||||} >||empty>>

\OutputCode\<prog\>  |LLL  

\OutputCode[prg]\<temp\>     
\input temp.prg  
|Close >>> 


\Exr{22}2{8a}

\<<<
|Open
\Code\myprog{my 
   program}{PROGRAM prog;}
\ShowCode-\myprog

\AppendCode\myprog{BEGIN         
  \body 
END.}
\Code\body{body}{}  
\ShowCode-\myprog

\AppendCode\body{\{comment\}}  
\ShowCode\body

Code of title \myprog{} 
linearized within
the paragraph: 
`\ShowCode-\myprog'.

\OutputCode\myprog 
|Close >>>

\Exr{22}2{8b}


\<<<
|Open
\AlProTex{p,<<<|LLL,list,@}

\Code\myprog{my program}<<<
PROGRAM prog;|LLL

\Code\body{body}<<<
|LLL
\AppendCode\myprog<<<
BEGIN         
  @body 
END.|LLL

\AppendCode\body<<<
 {comment} |LLL

Code of title \myprog{} 
linearized within the 
paragraph: 
`\ShowCode-\myprog'.

\OutputCode\myprog
|Close >>>


\Exr{22}2{9}

\<<<
|Open
\AlProTex{p,<<<|LLL,%
          title,list,[]}

\<myprog\><<<
PROGRAM prog;|LLL

\<body\><<<
{ comment } |LLL

\<myprog\><<<
BEGIN
  \<body\>
END.|LLL

\OutputCode\<myprog\>
|Close >>>

\Exr{22}2{10a}

\<<<
|Open
\AlProTex{p,<<<|LLL,title,%
         list,[],enumerate}

See lines \RefLine[*].

\<myprog\><<<
PROGRAM prog;\TagLine[*] |LLL

\<body\><<<
{comment: see \RefLine[*]}|LLL

\<myprog\><<<
BEGIN         
  \<body\>   \TagLine[*] |LLL

\ResetLineCount 
\<myprog\><<<
END.|LLL \OutputCode\<myprog\> 
|Close >>> 

\Exr{22}2{10b}


\<<<
|Open
\AlProTex{p,<<<|LLL,title,%
                 list,[]}
\def\CodeRef[#1]{\Ref{#1}}
\def\CodeTag[#1][#2]{%
              \Tag{#1}{#2}}

See lines \Ref{*}.

\<myprog\><<<
PROGRAM prog;\CodeTag[*][1]|LLL

\<body\><<<
{comment: see \CodeRef[*]}|LLL

\<myprog\><<<
BEGIN         
  \<body\>   \CodeTag[*][2]|LLL

\ResetLineCount \Tag{*}{3} 
\<myprog\><<<
END.|LLL \OutputCode\<myprog\> 
|Close >>>




\Exr{22}2{11}

\<<<
|Open   
\AlProTex{p,<<<|LLL,title,%
         list,[],ShowIndex}

\<myprog\><<<
PROGRAM prog;|LLL

\<body\><<<
{ comment } |LLL 
\TextIndex{Tracing}
\SecIndex{***} 

\<myprog\><<<
BEGIN 
  \<body\>
END.|LLL      

\def\BeforeIndex{Index} 
\ShowIndex   
|Close >>>


 \Exr{22}2{12}

\<<<
|Open   
\AlProTex{p,<<<|LLL,%
     title,[],ShowTop}

\<my prog\><<<
PROGRAM prog;
BEGIN  \<body\>
END.|LLL
\<body\><<<
{ comment 1} 
|LLL
\<body\><<<
\<subbody\> 
|LLL        
\<subbody\><<<
{ comment 2 } |LLL
\ShowTop\<body\> 

\def\ShowSep{(* ***** *)\par} 
\ShowTop\<body\>    
|Close >>> 

 \Exr{22}2{13}


\<<<
|Open
\AlProTex{p,<<<|LLL,title,%
            list,[],NoShow}

First piece of text.

\<myprog\><<<
PROGRAM prog; |LLL

\ShowOff Second piece of text.

\<body\><<<
{ comment } |LLL

\Note  Third piece of 
text. \EndNote\ShowOn

\<myprog\><<<
BEGIN
  \<body\>
END.|LLL

Last piece of text.  
|Close >>> 

 \Exr{22}2{14}

\<<<
|Open
\AlProTex{p,<<<|LLL,title,%
   list,ShowIndex,ClearCode}

Chapter 1

\<progA\><<<
PROGRAM prog;
|LLL
\<progA\><<<
BEGIN
  { comment 1 }
END.|LLL    \ShowIndex 
            \ClearCode
\vfil\break Chapter 2

\<progB\><<<
PROGRAM prog;
|LLL
\<progB\><<<
BEGIN
  { comment 2 }
END.|LLL  \ShowIndex  
|Close >>>     

\begingroup
\def\tex{tex}\let\op=\ForTex \Exr{22}2{15}\par\nobreak

\<<<
\hsize=2.5in \noindent{\bf
LITERATE PROGRAM IN  WEB}
\medskip  We compute a 
two-dimensional view of a
three-dimensional point.

@* The mapping.  The view
   {\tt (x,y)} is  on the
   {\tt Z=0} plane.
@<map(x,y) := mapping of
   (X,Y,Z)@>=
   x := X * D DIV (D + Z);

@  The viewer is located
   at {\tt (0,0,-D)}.
@<CONST + VAR @>=
   CONST D=100;
   VAR  X {x}, Z: INTEGER; 

@
@<map...@>=
   y := Y * D DIV (D + Z);

@
@<CON...@>=Y {y}: INTEGER;

@* Main program.
@p PROGRAM D2view; 
     @<CON...@>
   BEGIN  read(X,Y,Z);
     @<map...@>
     write(x,y)
   END.
\bye>>>
\endgroup


\Ex{\tex}{NEW OPTION `[[]]' FOR {\tt\char92}AlProTex}{NewAlPrOptionA}

An extension of `[]' which frame also the code fragments.

\<<<
|Open
\AlProTex{p,<<<|LLL,%
          title,list,[[]]}

Foooo...

\<myprog\><<<
PROGRAM prog;|LLL

Foooo...

\<body\><<<
{ comment } |LLL

Foooo...

\<myprog\><<<
BEGIN
  \<body\>
END.|LLL

Foooo...

\OutputCode\<myprog\>
|Close >>>

\begingroup
\def\tex{latex}\let\op=\ForTex 


\Ex{\tex}{NEW OPTION `basic' FOR {\tt\char92}AlProTex}{NewAlPrOptionB}


An option that requires compilation by latex. The following
are the only available commands.


A. References to code segments: \hfill {\tt\string\<code title\string\>}

B. Definitions of code fragments: \hfill  {\tt\string\<code title\string\><<<

\hfill                                           code fragment>>>}

B. Output file of code (`[{\it extension}]' is optional):
            \hfill{\tt\string\o[{\it extention}]\string\<code title\string\>}


C. The character `{\tt\char92}'         \hfill{\tt\string\\}

D. End of source program            \hfill{\tt\string\e}

E. Logical partitioning of prose (chapters, sections, subsections, and verbatim):
\hfill\hbox{\tt\string\c, \string\s, \string\u, \string\v{$\cdots$}{\char92}}

\noindent\phantom{E.} A title 
must be delimited by an empty line.

F. Reference to {\tt\string\ClearCode}  \hfill {\tt\string\c}




\<<<
\input ProTex.sty
\AlProTex{foo,basic}

\cFirst Chapter

Foooo...

\sSsssss...

Foooo.

\uUuuuuuu.....

\vVerbatim 
verbatim\
\<myprog\><<<
PROGRAM prog;|LLL
\cCccc...

Foooo...

\<body\><<<
{ comment } |LLL

Foooo...

\<myprog\><<<
BEGIN
  \<body\>
END.|LLL

Foooo...

\o\<myprog\>

\e
 >>>

\Ex{\tex}{variant of `basic'}{NewAlPrOptionC}

The options `{\tt @}', `{\tt|}', and `{\tt`}' ask that the listed
characters will be used instead of `{\tt\char92}', respectively,
within the commands of option `{\tt basic}'.

\<<<
\input ProTex.sty
\AlProTex{foo,@,basic}

@cFirst Chapter

Foooo...

@sSsssss...

Foooo.

@uUuuuuuu.....

@vVerbatim 
verbatim@

@<myprog@><<<
PROGRAM prog;|LLL
@cCccc...

Foooo...

@<body@><<<
{ comment } |LLL

Foooo...

@<myprog@><<<
BEGIN
  @<body@>
END.|LLL

Foooo...

@o@<myprog@>

@e
>>>

\endgroup

\newpage    \OutputCode[me]\execute
 
 
 On a Unix system containing the xdvi application, the instructions of
 the following file can be executed with the compound command 
 `chmod 777 execute.me ; execute.me'.
 
 \bigskip
 \ShowFile{execute.me}

\write16{<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<}
\write16{<< Please review the document <<}
\write16{<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<}

\bye
