"Section 1.1.4 and Section 3.2".</para>
<para>The reference structure of the index has been faithfully
-reproduced, but DocBook renders it differently. The original lacked
-the canned section headings, and references were by page number
-rather than section name.</para>
+reproduced; that is, for each index reference a DocBook
+<indexterm> tag was placed within the span of text defined by
+the original page numbering. However, DocBook renders the index
+differently from the original. The original lacked the canned section
+headings, and references were by page number rather than section
+name.</para>
<para>EPSLON and COMPLX and the like are not typos. As pointed out
earlier, MAD variable names are limited to the 6 characters in a
END OF PROGRAM
</programlisting>
-<para>The DIMENSION statement assigns a block of storage in the
+<para>The DIMENSION statement <indexterm><primary>DIMENSION
+Statement</primary></indexterm> assigns a block of storage in the
computer large enough to handle a<subscript>0</subscript>,
a<subscript>1</subscript>, a<subscript>2</subscript>,
... a<subscript>100</subscript>, if necessary. The INTEGER statement
arithmetic can be done more simply and efficiently, usually with less
round-off error, than arithmetic on non-integers. [Numbers which may
have fractional parts are usually written in the so-called "scientific
-notation", such as 3.1 × 10<superscript>-6</superscript> are called
-floating point numbers.]
-<indexterm><primary>Constants, Floating Point</primary></indexterm>
-Numbers are assumed to be in the
+notation", such as 3.1 × 10<superscript>-6</superscript> are
+called floating point numbers.] <indexterm><primary>Constants,
+Floating Point</primary></indexterm> Numbers are assumed to be in the
floating-point mode unless otherwise declared, as in the INTEGER
statement in the example. The WHENEVER statement above is to be
interpreted in the sense: Whenever the following condition (in this
A is there only as a "dummy variable", anyway. When
<emphasis>used</emphasis>, with a concrete set Q, we would expect a
DIMENSION statement for Q in the program that calls on MAX. for a
-value.</para>
+value.<indexterm><primary>DIMENSION Statement</primary></indexterm></para>
<para>For a second example consider the problem of repeatedly solving,
by Newton's method, of the equation f(x) -
in the actual
<!-- beginpage I.8 -->
statements produced for the computer the "=" symbol conventionally has
-this meaning.</para>
+this meaning.<indexterm><primary>Equals Sign</primary></indexterm></para>
<para>It is important to realize what the "=" means in this context; it is
different from the usual use of the symbol where it indicated a
would be impossible to distinguish such a product from the
variable Z5D.)</para></listitem>
-<listitem><para>Division, written as "/"; e.g., Z5/D. If both Z5 and D
-are integers, the result is again an integer; e.g., the
-"fractional part" of the true quotient is truncated (not
-rounded). For example, if Z5 = 7, and D = 3, the Z5 = D will
-have the value 2.</para></listitem>
+<listitem><para>Division, written as "/"; e.g., Z5/D. If both Z5 and
+D are integers, the result is again an integer; e.g., the "fractional
+part" of the true quotient is truncated (not rounded). For example,
+if Z5 = 7, and D = 3, the Z5 = D will have the value 2.
+<indexterm><primary>Division</primary></indexterm> </para></listitem>
<!-- beginpage II.4 -->
<listitem><para>Exponentiation, written as ".P.", e.g., Z5.P.D, and
<sect2><title>Parentheses Conventions</title>
-<para>Parentheses are used in the same way as in ordinary algebra and logic
-to specify the order of the computation. Also, certain conventions
-are used to allow deletion of parentheses. The conventions used here
-are the same as in ordinary algebra and logic, namely: Parentheses may
-be omitted, subject to the rules (A) and (B) below, but redundant
-parentheses are allowed.</para>
+<para>Parentheses are used in the same way as in ordinary algebra and
+logic to specify the order of the computation. Also, certain
+conventions are used to allow deletion of parentheses.
+<indexterm><primary>Deletion of Parentheses</primary></indexterm> The
+conventions used here are the same as in ordinary algebra and logic,
+namely: Parentheses may be omitted, subject to the rules (A) and (B)
+below, but redundant parentheses are allowed.</para>
<para>(A) Within any expression the sequence of computation, unless
otherwise indicated by parentheses, is:</para>
concerned with this since the instructions necessary for the
conversion of the integer to floating point form before adding are
automatically inserted by the translator during the translation
-process. The precaution is that if the integer being converted is
+process.
+<indexterm><primary>Conversion, Integer to Floating Point</primary></indexterm>
+The precaution is that if the integer being converted is
greater than 134,217,728 (i.e. 2<superscript>27</superscript>) then an
improper conversion will take place.</para>
ALPHA = Y + Z + F.(X, Y, Z)
</para>
-<para>That is, the left side of the "=" sign consists of the name of a
-variable (either an individual variable or a subscripted array
-variable), and the right side consists of any expression of the same
-mode. The only exceptions to this mode requirement are the cases: (1)
-If the variable on the left is of integer mode then the value of a
-floating point expression of the right will be converted to integer
-mode. (2) if the variable on the left is of floating point mode then
-the value of an integer expression on the right will be converted to
-floating point mode.</para>
+<para>That is, the left side of the "=" sign
+<indexterm><primary>Equals Sign</primary></indexterm> consists
+of the name of a variable (either an individual variable or a
+subscripted array variable), and the right side consists of any
+expression of the same mode. The only exceptions to this mode
+requirement are the cases: (1) If the variable on the left is of
+integer mode then the value of a floating point expression of the
+right will be converted to integer mode.
+<indexterm><primary>Conversion, Floating Point to
+Integer</primary></indexterm> (2) if the variable on the left is of
+floating point mode then the value of an integer expression on the
+right will be converted to floating point mode.
+<indexterm><primary>Conversion, Integer to Floating
+Point</primary></indexterm>
+</para>
<para>The substitution statement is to be interpreted as "(1) Compute the
value of the expression on the right, (2) convert it, if necessary, to
... &THgr;<subscript>k</subscript>
&scriptS;<subscript>k</subscript>+1 END OF CONDITIONAL
</programlisting>
-
+
+<indexterm><primary>END OF CONDITIONAL Statement</primary></indexterm>
+
<para>Often the last condition B<subscript>k</subscript> is always
true. This may be expressed by the statement</para>
<!-- beginpage II.12 -->
&scope3;
-<!-- beginpage II.19 -->
+<!-- beginpage II.19 -->
<para>When iteration statements occur in the scope of other iteration
statements, they are said to be "nested". The "nesting depth" of an
iteration statement is the number of iteration statements in whose
scope it appears. The nesting depth of an iteration may not exceed
-50. For example:</para>
+50. <indexterm><primary>Depth, Nesting, of
+Iteration</primary></indexterm> For example:</para>
&scope4;
</sect2>
<sect2><title>End of program Statement</title>
+<indexterm><primary>END OF PROGRAM Statement</primary></indexterm>
+
<para>This statement has the form: END OF PROGRAM.</para>
<!-- "in which" below is just "which" in the original -->
</programlisting>
<para>where &scriptN; is the name of this entry (see <xref
-linkend='funcdefs'/>).</para>
+linkend='funcdefs'/>).<indexterm><primary>RNTRY TO
+Statement</primary></indexterm>
+</para>
<note><para>The Retrocomputing Museum implementation supports only
one entry point per function. Attempting to specify more than one
</listitem>
</varlistentry>
<varlistentry>
-<term>(i) END OF FILE TAPE &scriptN;</term>
+<term>(i) END OF FILE TAPE &scriptN;
+<indexterm><primary>END OF FILE TAPE Statement</primary></indexterm>
+</term>
<listitem>
<para>Writes an end of file mark on tape &scriptN;.
</para>
<sect3><title>End of File and End of Tape</title>
+<indexterm><primary>End of File Condition</primary></indexterm>
+
<para>If an error (improperly formed format specifications, invalid data, a
tape check, etc.) occurs during any input-output statement except READ
DRUM or WRITE DRUM, the subroutine ERROR. is automatically entered.
This action can be changed by executing the statement EXECUTE
SETETT. (&scriptS;). The subroutine SETETT. sets the write tape
routines to transfer to the executable statement labelled &scriptS;
-when an end-of-tape is encountered. The tape is not rewound nor is
-any comment printed for the operator and the computer does not stop
-before this transfer occurs. Executing EXECUTE SETETT.(0) will reset
-the write tape routines to the normal action.</para>
+when an end-of-tape <indexterm><primary>End Of Tape
+Condition</primary></indexterm> is encountered. The tape is not
+rewound nor is any comment printed for the operator and the computer
+does not stop before this transfer occurs. Executing EXECUTE
+SETETT.(0) will reset the write tape routines to the normal
+action.</para>
<para>The subroutines SETEOF. and SETETT. may be executed as many
times as desired. Only one setting is in effect for end-of-file (that
integer. The letter indicates the form of the information in the
external medium as follows:</para>
+<indexterm><primary>Field Description (Format)</primary></indexterm>
+
<informaltable frame='none' colsep='0' rowsep='0'>
<tgroup cols='2'>
<tbody>
<row><entry>S</entry> <entry>Skip (or blank information)</entry></row>
<row><entry>I</entry> <entry>Integer</entry></row>
<row><entry>F</entry> <entry>Fixed point number (Internally floating point)</entry></row>
-<row><entry>E</entry> <entry>Floating point number</entry></row>
+<row>
+ <entry>E
+ <indexterm><primary>E Field (Format)</primary></indexterm>
+ </entry>
+ <entry>Floating point number</entry>
+</row>
<row><entry>K</entry> <entry>Octal number</entry></row>
<row>
<entry>C
<para>For F and E fields, i.e., fixed and floating point numbers, there is
always the question of the placement of the decimal point, the form of
-the numbers, etc. in addition to the field size.</para>
+the numbers, etc. in addition to the field size.
+<indexterm><primary>Decimal Point in Format</primary></indexterm></para>
<para>For this reason, the basic field description for E and F fields
requires an additional integer giving the number of places after the
decimal point that are to be rounded and printed (or read, or
-punched). This integer is always taken <emphasis> mod 10 </emphasis>.
+punched). This integer is always taken <emphasis>mod 10</emphasis>.
For example, the specificaiton (F20.3) and the specification (F20.13)
both describe a twenty column fixed point field in which a number will
occur with three digits to the right of the decimal point. The
<sect1><title>Declarations (Non-executable statements)</title>
+<indexterm><primary>Declarations</primary></indexterm>
+
<para>Declarations are non-executable statements, and, except for function
declarations, they may occur anywhere in the program. Their purpose
is to furnish information to the translator program or to the reader
<listitem><para>A vector which is preset by a vector values
declaration is assigned a mode consistent with the assigned values
-(see <xref linkend='VECTOR_VALUES'/>). </para></listitem>
+(see <xref linkend='VECTOR_VALUES'/>).<indexterm><primary>Dimension
+Vector</primary></indexterm> </para></listitem>
</orderedlist>
</sect2>
<sect2 id='dimension_declaration'><title>Dimension Declaration</title>
+<indexterm><primary>DIMENSION Statement</primary></indexterm>
+
<para>Variables may be declared to be array variables, such as vectors or
matrices of various dimensions, rather than individual variables.</para>
</sect2>
<sect2><title>Equivalence Declaration</title>
+<indexterm><primary>EQUIVALENCE Declaration</primary></indexterm>
+
<para>This declaration has the form</para>
<para role='centered'>
</sect2>
<sect2 id='ERASABLE'><title>ERASABLE Declaration</title>
+<indexterm><primary>ERASABLE</primary></indexterm>
+
<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 <xref linkend='ERASABLE'/>).</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)<indexterm><primary>DIMENSION
+Statement</primary></indexterm> 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 <xref linkend='ERASABLE'/>).</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
&scriptV; may be modified by other statements in the program during
execution.</para>
-<para>Vectors which have been assigned to ERASABLE storage (see seciton 3.5)
-may not be preset by a VECTOR VALUES statement. Vectors which have
-been assigned to the PROGRAM COMMON section of storage (see section
-3.6) can be preset with <emphasis>numerical or alphabetical
-</emphasis> information only (not statement labels or function names)
-and then only if it is a single section program (i.e., storage is
-loaded with instructions only once) or, if it is a multiple section
-program, the PROGRAM COMMON region is identical in all sections of the
-program.</para>
+<para>Vectors which have been assigned to ERASABLE storage (see
+section <xref linkend='ERASABLE'/>)
+<indexterm><primary>ERASABLE</primary></indexterm> may not be preset
+by a VECTOR VALUES statement. Vectors which have been assigned to the
+PROGRAM COMMON section of storage (see section 3.6) can be preset with
+<emphasis>numerical or alphabetical </emphasis> information only (not
+statement labels or function names) and then only if it is a single
+section program (i.e., storage is loaded with instructions only once)
+or, if it is a multiple section program, the PROGRAM COMMON region is
+identical in all sections of the program.</para>
</sect2>
<sect2 id='funcdefs'><title>Function Definitions</title>
<!-- In the original, "variables and functions in the main program"
was typoed as "variables and function in the main program" (incorrect
-singular). --> <para>These statements define functions not yet
-available in the language or as standard package programs
-("subroutines"). The designation "EXTERNAL" implies that the
-statements which follow are to be translated indpendently of the main
-program in which they are to be used. (Because of this independence
-this block of statements is to be considered an entirely separate
-program, and must have its own DIMENSION and MODE declaration, etc.)
-The word "EXTERNAL" also implies that occurrences of variables and
-functions in the current function definition program have no relation
-whatever with occurrences of similarly named variables and functions
-in the main program (or other definition programs), and no
-difficulties will be encountered because of the use of similar names.
-The modes of the arguments (if other than the normal mode), must be
-declared in the usual way (see <xref linkend='mode_declaration'/>),
-but arrays<indexterm><primary>Array Variables</primary></indexterm>
-which are arguments need not be
+singular). -->
+<para>These statements define functions not yet available in the
+language or as standard package programs ("subroutines"). The
+designation "EXTERNAL" implies that the statements which follow are to
+be translated indpendently of the main program in which they are to be
+used. (Because of this independence this block of statements is to be
+considered an entirely separate program, and must have its own
+DIMENSION<indexterm><primary>DIMENSION Statement</primary></indexterm>
+and MODE declaration, etc.) The word "EXTERNAL" also implies that
+occurrences of variables and functions in the current function
+definition program have no relation whatever with occurrences of
+similarly named variables and functions in the main program (or other
+definition programs), and no difficulties will be encountered because
+of the use of similar names. The modes of the arguments (if other
+than the normal mode), must be declared in the usual way (see <xref
+linkend='mode_declaration'/>), but arrays<indexterm><primary>Array
+Variables</primary></indexterm> which are arguments need not be
dimensioned.<indexterm><primary>Arguments of
Functions</primary></indexterm></para>
</sect3>
<sect3 id='internal_functions'><title>Internal Function Definitions</title>
-<para>These statements define functions not yet available in the language or
-as standard package programs ("subroutines"). The designation
-"INTERNAL" implies that the definition program which follows is to be
-translated as part of the main program. The word "INTERNAL" also
-implies that any variables or functions not listed as arguments in the
-definition of the
-<!-- beginpage II.43 -->
+<para>These statements define functions not yet available in the
+language or as standard package programs ("subroutines"). The
+designation "INTERNAL" implies that the definition program which
+follows is to be translated as part of the main program. The word
+"INTERNAL" also implies that any variables or functions not listed as
+arguments in the definition of the
+<!-- beginpage II.43 -->
+
function (but used in its evaluation), are understood to be the same
as elsewhere in the main program, and the current values of these
variables and functions will be used. Names of variables and
functions which occur as arguments of the function being defined are
designated "dummy arguments" (or "bound
-variables")<indexterm><primary>Bound Variables</primary></indexterm>.
+variables")<indexterm><primary>Bound Variables</primary></indexterm>
+<indexterm><primary>Dummy Arguments</primary></indexterm>.
They must be distinct from those appearing elsewhere in the program.
The modes of dummy arguments (if other than normal mode) must be
declared in the usual way, but arrays<indexterm><primary>Array
Variables</primary></indexterm> which are arguments need not be
-dimensioned.</para>
+dimensioned.<indexterm><primary>DIMENSION
+Statement</primary></indexterm></para>
<para>One form of internal function definition (not available as an external
function definition because the latter must be a complete, independent
<para>As indicated above, X, Y, and Z, as they occur here, are dummy
<!-- beginpage II.44 -->
-variables, and (X, Y, Z) is the dummy variable list. The current value
-of T, however, will be obtained and used each time the value of the
-function is needed. An example of theuse of the function so defined
-would be:</para>
+
+variables, and (X, Y, Z) is the dummy
+ variable<indexterm><primary>Dummy Arguments</primary></indexterm>
+ list. The current value of T, however, will be obtained and used each
+ time the value of the function is needed. An example of theuse of
+ the function so defined would be:</para>
<para role='centered'>
A = 1.-SUMSQ. (U, V + 3, W) .P..5
<para>In the <emphasis>use</emphasis> of a function (i.e., the
<emphasis> call </emphasis> for it) the arguments may be constants,
variables, or expressions. However, if one of the arguments appears
-to the left of an "=" sign in a substitution statement in the defining
+to the left of an "=" sign <indexterm><primary>Equals
+Sign</primary></indexterm> in a substitution statement in the defining
program it is not meaningful to use a constant or an expression for
that argument in the call. As mentioned earlier, the arguments in the
call for a function cannot be checked for correspondence in mode and
END OF FUNCTION
</programlisting>
+<indexterm><primary>ENTRY TO Statement</primary></indexterm>
+
+<indexterm><primary>END OF FUNCTION Statement</primary></indexterm>
+
<para>The first statement (INTERNAL FUNCTION (X)) is a function
declaration (i.e., <emphasis>declares</emphasis> that the following
statements define a function). If this is defining an external
<para>(Here the statments are all labelled only for reference in what
follows.)</para>
-<para>The list of dummy variables in the declaration statement itself
+<para>The list of dummy variables<indexterm><primary>Dummy
+Arguments</primary></indexterm> in the declaration statement itself
(statement A in the preceding paragraph) may contain only
nonsubscripted variable names (either individual or
array)<indexterm><primary>Array Variables</primary></indexterm> or
to L), instead of finishing the execution of statement F (and then
going on to S). Note that the END OF FUNCTION statement will never be
executed, but must be present in the definition.</para>
+<indexterm><primary>END OF FUNCTION Statement</primary></indexterm>
</sect3>
</sect2>
</sect1>
<sect1><title>Restrictions</title>
-<para>Variable names appearing as <emphasis>dummy</emphasis> arguments in
-any function declaration may not appear in a PROGRAM COMMON, ERASABLE,
-or EQUIVALENCE declaration.</para>
+<para>Variable names appearing as <emphasis>dummy</emphasis> arguments
+in any function declaration may not appear in a PROGRAM COMMON,
+ERASABLE<indexterm><primary>ERASABLE</primary></indexterm>, or
+EQUIVALENCE declaration.<indexterm><primary>Dummy
+Arguments</primary></indexterm><indexterm><primary>EQUIVALENCE
+Declaration</primary></indexterm></para>
-<para>The name of a function with the period deleted must not be used as the
-name of a variable or as a statement label. A statement label must
-not be identical with any variable name.</para>
+<para>The name of a function with the period deleted must not be used
+as the name of a variable or as a statement label. A statement label
+must not be identical with any variable name.</para>
<para>The translator automatically calls on some subroutines, hence the
following names may not be used as variable names or statement labels
</sect1>
<sect1><title>Diagnostics</title>
+<indexterm><primary>Diagnostics</primary></indexterm>
+
<para>During the process of translation many kinds of errors in the
formation of statements and the allocation of storage can be
detected. To understand this error detection and the subsequent
<variablelist>
<varlistentry>
<term>SYSTEM</term>
-<listitem><para>Entry to this routine causes a
-return to the operating system. The END OF PROGRAM statement produces
-a call for this routine.</para></listitem>
+<listitem><para>Entry to this routine causes a return to the operating
+system. The END OF PROGRAM statement produces a call for this
+routine. <indexterm><primary>END OF PROGRAM Statement</primary></indexterm>
+</para></listitem>
</varlistentry>
<varlistentry>
<indexterm><primary>Characters, Admissible</primary><see>Admissible Characters</see></indexterm>
<indexterm><primary>Conditional, Compound</primary><see>Compoound Conditional</see></indexterm>
<indexterm><primary>Conditional, Simple</primary><see>Simple Conditional</see></indexterm>
-
+<indexterm><primary>Dummy Variables</primary><see>Dummy Arguments</see></indexterm>
+<indexterm><primary>Error Detection</primary><see>Diagnostics</see></indexterm>
<index/>
</appendix>