% flowdoc.tex - a fairly plain LaTeX file, documentation for 'flow'
% created 15 Nov 1992, by Terry Brown
% last revised 12/1/94

\documentstyle{article}

\setlength{\unitlength}{2em} % for the picture environment

\setlength{\parindent}{0pt}
\setlength{\parskip}{2ex}
\addtolength{\topmargin}{-1cm}
\addtolength{\textheight}{2cm}
\addtolength{\evensidemargin}{-1cm}
\addtolength{\oddsidemargin}{-1cm}
\addtolength{\textwidth}{2cm}
% 4 levels of headings
\newcommand{\headA}[1]{{\huge \vspace{1ex} \bf \hfill #1 \vspace{1ex}\hfill}}
\newcommand{\headB}[1]{{\Large \vspace{1ex} \bf #1 \vspace{1ex} }}
\newcommand{\headC}[1]{{\large \vspace{1ex} \bf #1 \vspace{1ex} }}
\newcommand{\headD}[1]{{\bf \vspace{1ex} #1 \vspace{1ex} }}

\newcommand{\pushin}{\hspace*{1em}}

\begin{document}

\title{Flow -- a program to generate flowcharts in the \LaTeX\
       picture environment}
\author{Terry Brown}
\date{November 25, 1992 --- January 12, 1993}
\maketitle

\headB{Summary}

{\em Flow\/} is a small program which parses the flowchart description
explained in this document and translates it to the \LaTeX\ picture
environment.

Flow acts as a filter, so a typical execution would be...

\verb+flow +$<$\verb+myprog.flo +$>$\verb+myprog.pic+

...where \verb+myprog.flo+ is a plain text file containing a description of a
flowchart, and \verb+myprog.pic+ will be a plain text file containing the
body of a \LaTeX\ picture environment to draw the flowchart.  Alternatively

\verb+flow inputFile   + or \verb+   flow inputFile outputFile+

may be used.  VMS users see notes at end.

\verb+myprog.pic+ could either be inserted into a picture environment in a
\LaTeX\ file with a text editor, or pulled in by the \verb+\input+ command as
\LaTeX\ is run.

\headB{System requirements}

Nothing in particular.  Flow is in very plain C and should be portable to
pretty much anything without alteration.  Check beginning of file for defines
if it gives trouble.

\headB{Distribution and Bug Reports}

Flow is public domain, and cannot be used for commercial purposes without
consent.  Email to \verb+brownt1@lincoln.ac.nz+ about how useful flow is
would be appreciated.  Bug reports could also be sent there.  Pointers to
other programs that do the same thing would also be interesting, particularly
if they're portable between MSDOS$^{TM}$ and AmigaDOS$^{TM}$.

\newpage
\headB{Flowchart description syntax}

\verb+[indented text]+ indicates the command accepts zero or more line of
text, these lines are identified by indentation.  All lines after the command
starting with either a space or a tab are assumed to be text for that
command.  The first line not starting with one of these characters is assumed
to be the next command.  Distributed code / executeables are case
insensitive, but local compilations may vary.

The flowchart is always ``going'' either up, down, left or right.  The
initial direction is down.

The flowchart description file is terminated either by an invalid command,
a blank line, or the end of the file.  Keywords are case sensitive.

% This bit became redundant with v 0.99
%
%% The output from flow should appear inside a \LaTeX\ picture environment.
%% Use
%% 
%% \pushin\verb+\begin{picture}(x,y)(0,-y)+
%% 
%% to start the environment (as the flow
%% chart starts at 0,0 and normally goes down, this put the pictures origin at
%% the top left corner).  10 and 10 are ok as initial values for x and y.  The
%% positioning of the picture can be adjusted with the second pair as usual for
%% the picture environment.

The output from flow will appear inside a \LaTeX\ picture environment.
The positioning of the picture can be adjusted with the second pair as usual
for the picture environment.

\verb+\unitlength+ should be set for use with the picture environment, all
the examples in this document use \verb+2em+ (ie. put
\verb+\setlength{\unitlength}{2em}+ at the top of the \LaTeX\ file).
Smaller values make the boxes tighter around the text, larger values make
them more open.

\headC{The commands}

\begin{verbatim}
Box [x y]
  [indented text]
\end{verbatim}

Draws a text at the current position, including a line or arrow leading to it
if appropriate.  If x and y are specified, the size of the box (in
\verb+\unitlength+s), and all subsequent boxes, is set to these.  The
default size of a box is 4 by 2 \verb+\unitlength+s.

{\small
\begin{verbatim}
Right
Box
  This is
  the first
  box.
Box 8 1
  And this is the second
\end{verbatim}
}

\begin{picture}(10,2)(0,-2)
% picture environment flowchart generated by flow 0.95
\put(0.0000,-2.0000){\framebox(4.0000,2.0000)[c]{\shortstack[c]{
This is   \\
the first \\
box.
}}}
\put(4.0000,-1.0000){\vector(1,0){1.0000}}
\put(5.0000,-1.5000){\framebox(8.0000,1.0000)[c]{\shortstack[c]{
And this is the second
}}}
\end{picture}

\newpage
\begin{verbatim}
Oval [x y]
  [indented text]

Tilt [x y]
  [indented text]

Text [x y]
  [indented text]
\end{verbatim}

\verb+Oval+, \verb+Tilt+ and \verb+Text+ are identical to \verb+Box+, except
for the shape of the frame.  (\verb+Text+ is an invisible frame.)

{\small
\begin{verbatim}
Right
Oval
  This is
  an Oval
Tilt
  And this
  is a
  Tilt
Text
  And this
  is a
  Text
\end{verbatim}
}

\begin{picture}(10,3)(0,-3)
% picture environment flowchart generated by flow 0.95
\put(2.0000,-1.0000){\oval(4.0000,2.0000)}
\put(0.0000,-2.0000){\makebox(4.0000,2.0000)[c]{\shortstack[c]{
This is   \\
an Oval
}}}
\put(4.0000,-1.0000){\vector(1,0){1.0000}}
\put(5.0000,-2.0000){\makebox(4.0000,2.0000)[c]{\shortstack[c]{
And this \\
is a     \\
Tilt
}}}
\put(5.3333,0.0000){\line(1,0){4.0000}}
\put(4.6667,-2.0000){\line(1,0){4.0000}}
\put(4.6667,-2.0000){\line(1,3){0.6667}}
\put(8.6667,-2.0000){\line(1,3){0.6667}}
\put(9.0000,-1.0000){\vector(1,0){1.0000}}
\put(10.0000,-2.0000){\makebox(4.0000,2.0000)[c]{\shortstack[c]{
And this \\
is a     \\
Text
}}}
\end{picture}

\begin{verbatim}
Choice A B C D [x y]
  [indented text]
\end{verbatim}

Draws a choice diamond, with the corners labeled as illustrated by the left
diamond in the example.  Periods (.) are not printed.  The optional x an y
parameters alter the size of the choice.  The default size is 4 by 4
\verb+\unitlengh+s.  Flow will report an error for non-square choice boxes
whose aspect ratio doesn't match one of the line slopes supported by \LaTeX\
(-6 -- 6 : -6 -- 6, integers only).

{\small
\begin{verbatim}
Right
Choice A B C D
  Label
  any
  corner
Choice Yes . No .
  Normally
  only two.
\end{verbatim}
}

\begin{picture}(10,5)(0,-5)
% picture environment flowchart generated by flow 0.95
\put(0.0000,-2.0000){\line(1,1){2.0000}}
\put(0.0000,-2.0000){\line(1,-1){2.0000}}
\put(4.0000,-2.0000){\line(-1,-1){2.0000}}
\put(4.0000,-2.0000){\line(-1,1){2.0000}}
\put(0.0000,-4.0000){\makebox(4.0000,4.0000)[c]{\shortstack[c]{
Label\\
any\\
corner
}}}
\put(2.6000,0.0000){\makebox(0,0)[lt]{A}}
\put(0.0000,-1.4000){\makebox(0,0)[rt]{B}}
\put(4.0000,-1.4000){\makebox(0,0)[lt]{C}}
\put(2.6000,-4.0000){\makebox(0,0)[lb]{D}}
\put(4.0000,-2.0000){\vector(1,0){1.0000}}
\put(5.0000,-2.0000){\line(1,1){2.0000}}
\put(5.0000,-2.0000){\line(1,-1){2.0000}}
\put(9.0000,-2.0000){\line(-1,-1){2.0000}}
\put(9.0000,-2.0000){\line(-1,1){2.0000}}
\put(5.0000,-4.0000){\makebox(4.0000,4.0000)[c]{\shortstack[c]{
Normally\\
only two.
}}}
\put(7.6000,0.0000){\makebox(0,0)[lt]{Yes}}
\put(9.0000,-1.4000){\makebox(0,0)[lt]{No}}
\end{picture}

\verb+SetTrack none | arrow | line+

Use arrows, lines, or nothing for drawing connections between boxes.

\verb+TxtPos P1 P2 [B [A]]+

\verb+P1+ is the \LaTeX\ position specification (eg. [c] or [l]) for the
lines of text that makes up the blocks of text in the boxes, \verb+P2+ is
the \LaTeX\ position specification for the whole block of text within the
box.  \verb+B+ is the string (no white space) to be placed before each line
of text, \verb+A+ is the string to be placed after each line of text.  The
example shows the use of \verb+B+ to keep text off the edge of the box.

{\small
\begin{verbatim}
Right
SetTrack arrow
TxtPos [l] [l]
Box 3.5 2
  Needs some
  space on the
  left
TxtPos [l] [l] ~
Box
  Left justified
  text with
  space
SetTrack line
TxtPos [c] [c]
Box
  Centred
  Text
SetTrack none
TxtPos [r] [r] ~ \hspace*{1ex}
Box
  Right justified
  Text
\end{verbatim}
}

\begin{picture}(10,3)(0,-2.5)
% picture environment flowchart generated by flow 0.95
\put(0.0000,-2.0000){\framebox(3.5000,2.0000)[l]{\shortstack[l]{
Needs some\\
space on the\\
left
}}}
\put(3.5000,-1.0000){\vector(1,0){1.0000}}
\put(4.5000,-2.0000){\framebox(3.5000,2.0000)[l]{\shortstack[l]{
~Left justified\\
~text with\\
~space
}}}
\put(8.0000,-1.0000){\line(1,0){1.0000}}
\put(9.0000,-2.0000){\framebox(3.5000,2.0000)[c]{\shortstack[c]{
Centred\\
Text
}}}
\put(13.5000,-2.0000){\framebox(3.5000,2.0000)[r]{\shortstack[r]{
~Right justified\hspace*{1ex}\\
~Text\hspace*{1ex}
}}}
\end{picture}

\newpage
\verb+Tag+

\verb+ToTag+

\verb+Tag+ stores the location and size of the last object drawn on a stack,
\verb+ToTag+ returns to that position (removing the item from the stack).  This is
particularly useful with \verb+Choice+s, allowing a second chain to be built
from the diamond, but it can be used with any other item.  Flow will complain
if it encounters more \verb+ToTag+s the \verb+Tag+s, but won't mention
\verb+Tag+s left on the stack when it finishes.

{\small
\begin{verbatim}
Right 0
Choice . . N Y
  Ready to
  stop?
Tag
Choice . . Right Down
  Go right
  or Down?
Tag
Right 1
Box
  To the
  right
ToTag
Down
Box
  Down here
ToTag
Down
Oval
  STOP
\end{verbatim}
}

\begin{picture}(10,7)(0,-5)
% picture environment flowchart generated by flow 0.95
\put(0.0000,0.0000){\line(1,0){0.0000}}
\put(0.0000,0.0000){\vector(1,0){1.0000}}
\put(1.0000,0.0000){\line(1,1){2.0000}}
\put(1.0000,0.0000){\line(1,-1){2.0000}}
\put(5.0000,0.0000){\line(-1,-1){2.0000}}
\put(5.0000,0.0000){\line(-1,1){2.0000}}
\put(1.0000,-2.0000){\makebox(4.0000,4.0000)[c]{\shortstack[c]{
Ready to\\
stop?
}}}
\put(5.0000,0.6000){\makebox(0,0)[lt]{N}}
\put(3.6000,-2.0000){\makebox(0,0)[lb]{Y}}
\put(5.0000,0.0000){\vector(1,0){1.0000}}
\put(6.0000,0.0000){\line(1,1){2.0000}}
\put(6.0000,0.0000){\line(1,-1){2.0000}}
\put(10.0000,0.0000){\line(-1,-1){2.0000}}
\put(10.0000,0.0000){\line(-1,1){2.0000}}
\put(6.0000,-2.0000){\makebox(4.0000,4.0000)[c]{\shortstack[c]{
Go right\\
or Down?
}}}
\put(10.0000,0.6000){\makebox(0,0)[lt]{Right}}
\put(8.6000,-2.0000){\makebox(0,0)[lb]{Down}}
\put(10.0000,0.0000){\line(1,0){1.0000}}
\put(11.0000,0.0000){\vector(1,0){1.0000}}
\put(12.0000,-1.0000){\framebox(4.0000,2.0000)[c]{\shortstack[c]{
To the\\
right
}}}
\put(8.0000,-2.0000){\vector(0,-1){1.0000}}
\put(6.0000,-5.0000){\framebox(4.0000,2.0000)[c]{\shortstack[c]{
Down here
}}}
\put(3.0000,-2.0000){\vector(0,-1){1.0000}}
\put(3.0000,-4.0000){\oval(4.0000,2.0000)}
\put(1.0000,-5.0000){\makebox(4.0000,2.0000)[c]{\shortstack[c]{
STOP
}}}
\end{picture}

\newpage
\begin{verbatim}
Up    [d [*]]
Down  [d [*]]
Left  [d [*]]
Right [d [*]]
\end{verbatim}

With or without the optional parameter, these command change the current
direction of the flowchart.  With the optional parameter, they draw a line,
if \verb+SetTrack+ is \verb+line+ {\em or\/} \verb+arrow+, or leave a gap, if
\verb+SetTrack+ in \verb+none+.  The length of the line (or gap) is $d$.  By
default \verb+Box+es, \verb+Oval+s, \verb+Tilt+s and \verb+Text+s are 4 units
wide and 2 units high.  A \verb+Choice+ is 4 by 4 units.  The arrows that
connect things together are 1 unit.  So a box drawn while the current
direction is down would occupy 2 + 1 = 3 vertical units.

To force the line to end in a arrow head, use the ``*'', which must be
separated from the ``d'' by a space.

{\small
\begin{verbatim}
Right 1
Box
  Flowing
  along.
Right 1
Tag
Down 2
Left 6
Up 2 *
ToTag
Right 3
Down
Oval
  STOP
\end{verbatim}
}

\begin{picture}(10,4)(0,-3)
% picture environment flowchart generated by flow 0.95
\put(0.0000,0.0000){\line(1,0){1.0000}}
\put(1.0000,0.0000){\vector(1,0){1.0000}}
\put(2.0000,-1.0000){\framebox(4.0000,2.0000)[c]{\shortstack[c]{
Flowing \\
along.
}}}
\put(6.0000,0.0000){\line(1,0){1.0000}}
\put(7.0000,0.0000){\line(0,-1){2.0000}}
\put(7.0000,-2.0000){\line(-1,0){6.0000}}
\put(1.0000,-2.0000){\vector(0,1){2.0000}}
\put(7.0000,0.0000){\line(1,0){3.0000}}
\put(10.0000,0.0000){\vector(0,-1){1.0000}}
\put(10.0000,-2.0000){\oval(4.0000,2.0000)}
\put(8.0000,-3.0000){\makebox(4.0000,2.0000)[c]{\shortstack[c]{
STOP
}}}
\end{picture}

\verb+Scale x y+

Scale the {\em next\/} item by the specified values

{\small
\begin{verbatim}
Right
Oval
  Normal
  Oval
Scale 2 1
Box
  A smaller oval is a better stop
Scale 0.5 0.5
Oval
  STOP
\end{verbatim}
}

\begin{picture}(10,3)(0,-3)
% picture environment flowchart generated by flow 0.95
\put(2.0000,-1.0000){\oval(4.0000,2.0000)}
\put(0.0000,-2.0000){\makebox(4.0000,2.0000)[c]{\shortstack[c]{
Normal\\
Oval
}}}
\put(4.0000,-1.0000){\vector(1,0){1.0000}}
\put(5.0000,-2.0000){\framebox(8.0000,2.0000)[c]{\shortstack[c]{
A smaller oval is a better stop
}}}
\put(13.0000,-1.0000){\vector(1,0){1.0000}}
\put(15.0000,-1.0000){\oval(2.0000,1.0000)}
\put(14.0000,-1.5000){\makebox(2.0000,1.0000)[c]{\shortstack[c]{
STOP
}}}
\end{picture}

\begin{verbatim}
Skip x0 y0 x1 x1
\end{verbatim}

\begin{tabular}{r@{~~}p{4in}}
\tt x0 & Horizontal separation between boxes, default 1 \verb+\unitlength+ \\
\tt y0 & Vertical separation between boxes, default 1 \verb+\unitlength+ \\
\tt x1 & Multiplier for \verb+Left+ and \verb+Right+ commands, default 1 \\
\tt y1 & Multiplier for \verb+Up+ and \verb+Down+ commands, default 1 \\
\end{tabular}

{\small
\begin{verbatim}
Skip 0 0 1 1
SetTrack none
Box
  After this
  Box
Box
  Is another
  with no
  gap
SetTrack arrow
Right 5
Up 1 *
Left 1 *
Down 1 *
Right 1 *
Skip 0 0 3 3
Up 1 *
Left 1 *
Down 1 *
Right 1 *
\end{verbatim}
}

\begin{picture}(10,5)(0,-5)
% picture environment flowchart generated by flow 0.95
\put(0.0000,-2.0000){\framebox(4.0000,2.0000)[c]{\shortstack[c]{
After this\\
Box
}}}
\put(0.0000,-4.0000){\framebox(4.0000,2.0000)[c]{\shortstack[c]{
Is another\\
with no\\
gap
}}}
\put(4.0000,-3.0000){\line(1,0){5.0000}}
\put(9.0000,-3.0000){\vector(0,1){1.0000}}
\put(9.0000,-2.0000){\vector(-1,0){1.0000}}
\put(8.0000,-2.0000){\vector(0,-1){1.0000}}
\put(8.0000,-3.0000){\vector(1,0){1.0000}}
\put(9.0000,-3.0000){\vector(0,1){3.0000}}
\put(9.0000,0.0000){\vector(-1,0){3.0000}}
\put(6.0000,0.0000){\vector(0,-1){3.0000}}
\put(6.0000,-3.0000){\vector(1,0){3.0000}}
\end{picture}

\newpage
\headB{VMS notes}

I don't know much VMS, but this is one way of getting it to work.  Compile
and link as normal, then

{\tt flow :== \$\fbox{\$1\$DIA3:}[brownt1.usr.flow]flow.exe}

where the bit in the box is the name of the drive you're working on, and
\verb+[brownt1.usr.flow]+ is the appropriate path.  Then use the 

\verb+flow infile outfile+

form, as the redirection form doesn't seem to work.

\newpage
\headB{An example}

The instructions that generated this flow chart are included in
a commented section in \verb+flowdoc.tex+.  Note the block of text is part of
the picture environment (a \verb+Text+).

% THIS IS THE FLOW DATA FOR THE EXAMPLE AT THE END
% Box
%   Initialise
%   st
% Oval
%   Begin
%   RootParse
% Tag
% Box
%   Initialise
%   A \& B
% Down 1
% Box
%   Call client
%   with A, B \& st
% Choice . . Y N
%   Is B a
%   New-Root
%   Node?
% Tag
% Down 1
% Choice . . Y N
%   Is B a
%   Fungi
%   Node?
% Tag
% Down 1
% Choice . N . Y
%   Is B the
%   Current-End
%   Node?
% Tag
% Oval
%   Return
% ToTag
% Left 3
% Up 2
% Box
%   Update
%   direction
%   data in st
% Box
%   A = B
%   B = B.next
% Up 10
% Right 5 *
% ToTag
% Right 1
% Box
%   Adjust fungi
%   values in st
% Down 2
% Left 6 *
% ToTag
% Right
% Box
%   Increment
%   st order
% Tilt
%   Recursively
%   call RootParse
% Box
%   Decrement
%   st order
% Down 2
% Left 15 *
% ToTag
% SetTrack none
% Down 2
% Right 8
% TxtPos [l] [c]
% Text
%   A and B are the node records at the
%   start and end of the internode being
%   processed.  `st' is a record containing
%   information about the current fungal
%   population, position in 3-space, root 
%   order etc.  It is cloned during the 
%   recursive descent.

\scriptsize
\setlength{\unitlength}{1.8em}
\begin{picture}(10,10)(-3,-10)
% picture environment flowchart generated by flow 0.96
\put(0.0000,-2.0000){\framebox(4.0000,2.0000)[c]{\shortstack[c]{
Initialise\\
st
}}}
\put(2.0000,-2.0000){\vector(0,-1){1.0000}}
\put(2.0000,-4.0000){\oval(4.0000,2.0000)}
\put(0.0000,-5.0000){\makebox(4.0000,2.0000)[c]{\shortstack[c]{
Begin\\
RootParse
}}}
\put(2.0000,-5.0000){\vector(0,-1){1.0000}}
\put(0.0000,-8.0000){\framebox(4.0000,2.0000)[c]{\shortstack[c]{
Initialise\\
A \& B
}}}
\put(2.0000,-8.0000){\line(0,-1){1.0000}}
\put(2.0000,-9.0000){\vector(0,-1){1.0000}}
\put(0.0000,-12.0000){\framebox(4.0000,2.0000)[c]{\shortstack[c]{
Call client\\
with A, B \& st
}}}
\put(2.0000,-12.0000){\vector(0,-1){1.0000}}
\put(0.0000,-15.0000){\line(1,1){2.0000}}
\put(0.0000,-15.0000){\line(1,-1){2.0000}}
\put(4.0000,-15.0000){\line(-1,-1){2.0000}}
\put(4.0000,-15.0000){\line(-1,1){2.0000}}
\put(0.0000,-17.0000){\makebox(4.0000,4.0000)[c]{\shortstack[c]{
Is B a\\
New-Root\\
Node?
}}}
\put(4.0000,-14.4000){\makebox(0,0)[lt]{Y}}
\put(2.6000,-17.0000){\makebox(0,0)[lb]{N}}
\put(2.0000,-17.0000){\line(0,-1){1.0000}}
\put(2.0000,-18.0000){\vector(0,-1){1.0000}}
\put(0.0000,-21.0000){\line(1,1){2.0000}}
\put(0.0000,-21.0000){\line(1,-1){2.0000}}
\put(4.0000,-21.0000){\line(-1,-1){2.0000}}
\put(4.0000,-21.0000){\line(-1,1){2.0000}}
\put(0.0000,-23.0000){\makebox(4.0000,4.0000)[c]{\shortstack[c]{
Is B a\\
Fungi\\
Node?
}}}
\put(4.0000,-20.4000){\makebox(0,0)[lt]{Y}}
\put(2.6000,-23.0000){\makebox(0,0)[lb]{N}}
\put(2.0000,-23.0000){\line(0,-1){1.0000}}
\put(2.0000,-24.0000){\vector(0,-1){1.0000}}
\put(0.0000,-27.0000){\line(1,1){2.0000}}
\put(0.0000,-27.0000){\line(1,-1){2.0000}}
\put(4.0000,-27.0000){\line(-1,-1){2.0000}}
\put(4.0000,-27.0000){\line(-1,1){2.0000}}
\put(0.0000,-29.0000){\makebox(4.0000,4.0000)[c]{\shortstack[c]{
Is B the\\
Current-End\\
Node?
}}}
\put(0.0000,-26.4000){\makebox(0,0)[rt]{N}}
\put(2.6000,-29.0000){\makebox(0,0)[lb]{Y}}
\put(2.0000,-29.0000){\vector(0,-1){1.0000}}
\put(2.0000,-31.0000){\oval(4.0000,2.0000)}
\put(0.0000,-32.0000){\makebox(4.0000,2.0000)[c]{\shortstack[c]{
Return
}}}
\put(0.0000,-27.0000){\line(-1,0){3.0000}}
\put(-3.0000,-27.0000){\line(0,1){2.0000}}
\put(-3.0000,-25.0000){\vector(0,1){1.0000}}
\put(-5.0000,-24.0000){\framebox(4.0000,2.0000)[c]{\shortstack[c]{
Update \\
direction\\
data in st
}}}
\put(-3.0000,-22.0000){\vector(0,1){1.0000}}
\put(-5.0000,-21.0000){\framebox(4.0000,2.0000)[c]{\shortstack[c]{
A = B\\
B = B.next
}}}
\put(-3.0000,-19.0000){\line(0,1){10.0000}}
\put(-3.0000,-9.0000){\vector(1,0){5.0000}}
\put(4.0000,-21.0000){\line(1,0){1.0000}}
\put(5.0000,-21.0000){\vector(1,0){1.0000}}
\put(6.0000,-22.0000){\framebox(4.0000,2.0000)[c]{\shortstack[c]{
Adjust fungi\\
values in st
}}}
\put(8.0000,-22.0000){\line(0,-1){2.0000}}
\put(8.0000,-24.0000){\vector(-1,0){6.0000}}
\put(4.0000,-15.0000){\vector(1,0){1.0000}}
\put(5.0000,-16.0000){\framebox(4.0000,2.0000)[c]{\shortstack[c]{
Increment\\
st order
}}}
\put(9.0000,-15.0000){\vector(1,0){1.0000}}
\put(10.0000,-16.0000){\makebox(4.0000,2.0000)[c]{\shortstack[c]{
Recursively\\
call RootParse
}}}
\put(10.3333,-14.0000){\line(1,0){4.0000}}
\put(9.6667,-16.0000){\line(1,0){4.0000}}
\put(9.6667,-16.0000){\line(1,3){0.6667}}
\put(13.6667,-16.0000){\line(1,3){0.6667}}
\put(14.0000,-15.0000){\vector(1,0){1.0000}}
\put(15.0000,-16.0000){\framebox(4.0000,2.0000)[c]{\shortstack[c]{
Decrement\\
st order
}}}
\put(17.0000,-16.0000){\line(0,-1){2.0000}}
\put(17.0000,-18.0000){\vector(-1,0){15.0000}}
\put(11.0000,-8.0000){\makebox(4.0000,2.0000)[c]{\shortstack[l]{
A and B are the node records at the\\
start and end of the internode being\\
processed.  `st' is a record containing\\
information about the current fungal\\
population, position in 3-space, root \\
order etc.  It is cloned during the \\
recursive descent.
}}}
\end{picture}

\end{document}
