<!ENTITY scriptM "<emphasis>M</emphasis>">
<!ENTITY scriptN "<emphasis>N</emphasis>">
<!ENTITY scriptS "<emphasis>S</emphasis>">
+<!ENTITY scriptV "<emphasis>V</emphasis>">
]>
<book>
<preface><title>Notes from the 21st century</title>
<entry>statement metavariables</entry>
<entry align='center'>&scriptS;</entry>
</row>
+<row>
+<entry align='center'>script-V</entry>
+<entry>vector metavariables</entry>
+<entry align='center'>&scriptV;</entry>
+</row>
</tbody>
</tgroup>
</informaltable>
declaration the array need not appear in a dimension statement unless
the maximum linear subscript implied by the initial values is not
sufficiently high.</para>
+
+</sect2>
+<sect2><title>Equivalence Declaration</title>
+
+<para>This declaration has the form</para>
+
+<para role='centered'>
+EQUIVALENCE (A,B), (MATRIX, XARRAY), (C, D(3))
+</para>
+
+<para>and implies that the variables A and B are to represent the same
+storage location throughout the program, that MATRIX and XARRAY are to
+represent the same storage location through the program, etc. (Two
+variables which represent the same location always have the same value
+at any given time.) Thus, any number of equivalences may be
+established by one EQUIVALENCE declaration, and any number of such
+declarations may occur (at any place) in a program. They will be
+treated as one combined declaration, however.</para>
+
+<para>Variables whose names appear within the same set of parentheses need
+not have the same mode. The mode must be established by the
+appropriate MODE declaration for each of the variables. Occurrences
+within an EQUIVALENCE declaration do not establish mode.</para>
+
+<para>A nonsubscripted array variable name in an EQUIVALENCE statement
+represents that element of the array (considered as a one-dimensional
+vector) whose subscript is zero. Reference in an EQUIVALENCE
+statement to an array element of any number of dimensions may be made
+by linear-subscript only (i.e., as an element of a vector). Note that
+occurrence of any elements from any two arrays in the same perentheses
+implies equating the entire arrays accordingly.</para>
+
+</sect2>
+<sect2><title>ERASABLE Declaration</title>
+
+<para>This declaration has the form</para>
+
+<para role='centered'>
+ERASABLE MATRIX, XARRAY, YARRAY
+</para>
+
+<para>and implies that the arrays and individual variables listed after the
+word ERASABLE (which need not have the same number of dimensions) are
+disjoint (i.e., non-overlapping in storage), but are assigned to a
+special section of storage which is separate from the usual storage of
+variables and arrays. Each ERASABLE declaration eliminates the effect
+of previous assignments to this special section of storage, thus
+allowing several arrays to occupy the same storage at different times.
+It should be understood that this storage is accessible to, andmay be
+used by, subroutines.</para>
+
+</sect2>
+<sect2><title>3.6 PROGRAM COMMON Declaration</title>
+
+<para>This declaration has the form</para>
+
+<para role='centered'>
+PROGRAM COMMON MATRIX, X, Y1, BC
+</para>
+
+<para>and implies that the arrays and individual variables listed after the
+words PROGRAM COMMON (which ned not have the same number of
+dimensions) are disjoint (i.e., non-overlapping in storage), but are
+assigned to a special section of storage which is separate from the
+usual storage of variables and arrays, and separate from ERASABLE
+storage (see section 3.5).</para>
+
+<para>One use of this statement provides for several sections or a program
+to refer to variables and arrays by the same names, while being
+translated and checked out separately. A program divided up this way
+would have the form of a main program and several external function
+programs, with the main program being used primarily to call on each
+of the external functions in turn. Although variables and arrays to
+be used jointly by several external functions can be communicated as
+arguments to the functions, assigning them to PROGRAM COMMON makes
+them available to all sections.</para>
+
+<para>Note that storage is actually <emphasis> reserved </emphasis> for
+PROGRAM COMMON only in the main program (not in external functions,
+although the proper address assignment occurs there, also). Any such
+declarations occurring in external function definitions must therefore
+occur also in the main program.</para>
+
+<para>Another use for the PROGRAM COMMON assignment is in the case of a
+segmented program, i.e., a program so large that it is written in
+blocks which will occupy the same section of storage and be brought in
+one at a time. If one block of a program is to use the results of the
+previous block's computation, the variables involved should be
+specified as being in the PROGRAM COMMON region. Then they will not
+be destroyed in the process of bringing in the new block of program.
+The PROGRAM COMMON and DIMENSION declarations which set up this
+storage allocation must be identical in all blocks in which these
+arrays and variables are to be used, except that later segments may
+add additional names <emphasis> at the end of the list </emphasis>.</para>
+
+<para>PROGRAM COMMON declarations do not affect variables and arrays which
+have already been assigned to this common section of storage. If
+another such statement occurs in a program, the arrays and variables
+listed therein are considered appended to the previous list of PROGRAM
+COMMON arrays and variables. If a program is broken up into a main
+program and several external functions, the <emphasis> main program
+must be loaded into the computer first </emphasis> if PROGRAM COMMON
+is used at all.</para>
+
+</sect2>
+<sect2><title>Presetting Vectors</title>
+
+<!-- The script L in this section is lowercase -->
+<para>Any vector or portion of a vector (or array when considered as a
+vector, i.e., using linear subscripts) may be preset by a declaration
+of the following form:</para>
+
+<para>(a) VECTOR VALUES &scriptV; = c<subscript>0</subscript>,
+c<subscript>1</subscript>, ... c<subscript>&scriptL;</subscript></para>
+
+<para>Here &scriptV; is of the form N(n) or simply N, if n = 0. The
+elements N(n), ... N(n + &scriptL;) are preset to the values
+c<subscript>0</subscript>, c<subscript>1</subscript> ...,
+c<subscript>&scriptL;</subscript>, where the c<subscript>i</subscript>
+may be any constants. N is automatically set to have the same mode as
+c<subscript>0</subscript> and given a storage reservation of n +
+&scriptL; + 1 locations, i.e., this is equivalent to writing DIMENSION
+N(N + &scriptL;). N may appear in a mode declaration provided it is
+consistent with the mode of c<subscript>0</subscript>.</para>
+
+<!-- MORE GOES HERE -->
+
</sect2>
</sect1>
</chapter>
<para><emphasis>Flow diagram:</emphasis></para>
-<note><para>There are two minor errors in this flow diagram,
-reproduced faithfully from the original. Can you spot them?</para></note>
-
<mediaobject>
<imageobject>
<imagedata fileref='fig11.png'/>