]> thyrsus.com Git - mad.git/commitdiff
Index up to Error Detection.
authorEric S. Raymond <esr@thyrsus,com>
Thu, 24 Jun 2004 18:52:55 +0000 (18:52 +0000)
committerEric S. Raymond <esr@thyrsus,com>
Thu, 24 Jun 2004 18:52:55 +0000 (18:52 +0000)
doc/mad-manual.xml

index f3c675b64cfde67a35e9bdd0c0091cf45533017b..c4eee654a5a9b32374e3ed1f9baacd1b741d921c 100644 (file)
@@ -444,9 +444,12 @@ the original.  Notably, "section 1.1" becomes "Section 1.1"
 "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
+&lt;indexterm&gt; 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
@@ -752,7 +755,8 @@ BACK        WHENEVER Z .L. A(J), Z = A(J)
        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
@@ -762,10 +766,9 @@ modification and counting.  The reason for this is that integer
 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 &times; 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 &times; 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
@@ -845,7 +848,7 @@ needed for A is the EXTERNAL FUNCTION definition program above, since
 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) -
@@ -885,7 +888,7 @@ x is replaced by x - f(x)/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
@@ -1279,11 +1282,11 @@ both the minus sign and the dash are accepted.)</para></listitem>
 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
@@ -1384,12 +1387,13 @@ M.THEN.P, and M.EQV.P.</para></listitem>
 
 <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>
@@ -1501,7 +1505,9 @@ to the integer 3. But for one precaution the user need not be
 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>
 
@@ -1601,15 +1607,21 @@ MP(A, B + 6 * J, I * 6/TDX), MA(K(Z + 5) + T(1) + 6).</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
@@ -1716,7 +1728,9 @@ WHENEVER I.GE.N.AND.J.NE.I-1, I=0
                 ...        &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 -->
@@ -2018,12 +2032,13 @@ iteration <emphasis>b</emphasis> is completed before iteration
 
 &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;
 
@@ -2117,6 +2132,8 @@ that prints ERROR RETURN and terminates the program.</para></note>
 </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 -->
@@ -2151,7 +2168,9 @@ ENTRY TO &scriptN;
 </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
@@ -2316,7 +2335,9 @@ address &scriptA; (where &scriptA; is an integer expression).</para>
 </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>
@@ -2351,6 +2372,8 @@ made even if at load point.</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.
@@ -2378,10 +2401,12 @@ information is lost and the new tape is a continuation of the old one.
 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
@@ -2523,13 +2548,20 @@ linkend='ERROR_RETURN'/>) will result.</para>
 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
@@ -2552,12 +2584,13 @@ andf S31 indicates a blank field of 31 columns.</para>
 
 <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
@@ -2929,6 +2962,8 @@ read and stored until needed.</para>
 
 <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
@@ -2994,12 +3029,15 @@ linkend='dimension_declaration'/>).</para></listitem>
 
 <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>
 
@@ -3122,6 +3160,8 @@ sufficiently high.</para>
 </sect2>
 <sect2><title>Equivalence Declaration</title>
 
+<indexterm><primary>EQUIVALENCE Declaration</primary></indexterm>
+
 <para>This declaration has the form</para>
 
 <para role='centered'>
@@ -3159,6 +3199,8 @@ implement EQUIVALENCE.</para></note>
 </sect2>
 <sect2 id='ERASABLE'><title>ERASABLE Declaration</title>
 
+<indexterm><primary>ERASABLE</primary></indexterm>
+
 <para>This declaration has the form</para>
 
 <para role='centered'>
@@ -3190,12 +3232,13 @@ it.</para></note>
 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
@@ -3280,15 +3323,16 @@ produces no computation at execution time.  However, the values of
 &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>
@@ -3322,46 +3366,50 @@ III.</para>
 
 <!-- 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
@@ -3373,10 +3421,12 @@ INTERNAL FUNCTION SUMSQ.(X,Y,Z) = X * X + Y + Z * Z - T * T
 
 <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
@@ -3436,7 +3486,8 @@ separate declarations.</para>
 <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
@@ -3464,6 +3515,10 @@ FUNCTION RETURN BETA/K5 - 4 * D
 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
@@ -3531,7 +3586,8 @@ error return (see <xref linkend='ERROR_RETURN'/>).</para>
 <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
@@ -3581,18 +3637,22 @@ statement is executed control transfers to statement ER (then goes on
 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
@@ -4775,6 +4835,8 @@ contain some sequence code.</para>
 </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
@@ -4921,9 +4983,10 @@ here.</para>
 <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>
@@ -5975,7 +6038,8 @@ example, if A is a 4 x 3 matrix (m = 4, n = 3) and b = 1, then V(1) =
 <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>