summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornfenwick <nfenwick@pglaf.org>2025-02-05 02:13:48 -0800
committernfenwick <nfenwick@pglaf.org>2025-02-05 02:13:48 -0800
commitbb823a64bc5aac8011cea1174f3061090ed31ba0 (patch)
tree3d52ed6d93bbd2ce3d84a56574c73f8bf67094f4
parentd0d138b330b969f03bfd62c8d29354043b776f13 (diff)
NormalizeHEADmain
-rw-r--r--.gitattributes4
-rw-r--r--LICENSE.txt11
-rw-r--r--README.md2
-rw-r--r--old/50468-0.txt2203
-rw-r--r--old/50468-0.zipbin24983 -> 0 bytes
-rw-r--r--old/50468-h.zipbin78712 -> 0 bytes
-rw-r--r--old/50468-h/50468-h.htm2138
-rw-r--r--old/50468-h/images/cover.jpgbin42794 -> 0 bytes
-rw-r--r--old/50468-h/images/p01.pngbin8006 -> 0 bytes
9 files changed, 17 insertions, 4341 deletions
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..d7b82bc
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,4 @@
+*.txt text eol=lf
+*.htm text eol=lf
+*.html text eol=lf
+*.md text eol=lf
diff --git a/LICENSE.txt b/LICENSE.txt
new file mode 100644
index 0000000..6312041
--- /dev/null
+++ b/LICENSE.txt
@@ -0,0 +1,11 @@
+This eBook, including all associated images, markup, improvements,
+metadata, and any other content or labor, has been confirmed to be
+in the PUBLIC DOMAIN IN THE UNITED STATES.
+
+Procedures for determining public domain status are described in
+the "Copyright How-To" at https://www.gutenberg.org.
+
+No investigation has been made concerning possible copyrights in
+jurisdictions other than the United States. Anyone seeking to utilize
+this eBook outside of the United States should confirm copyright
+status under the laws that apply to them.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..52e656e
--- /dev/null
+++ b/README.md
@@ -0,0 +1,2 @@
+Project Gutenberg (https://www.gutenberg.org) public repository for
+eBook #50468 (https://www.gutenberg.org/ebooks/50468)
diff --git a/old/50468-0.txt b/old/50468-0.txt
deleted file mode 100644
index 4b62e0d..0000000
--- a/old/50468-0.txt
+++ /dev/null
@@ -1,2203 +0,0 @@
-The Project Gutenberg EBook of The Oak Ridge ALGOL Compiler for the
-Control Data Corporation 1604, by L. L. Bumgarner
-
-This eBook is for the use of anyone anywhere in the United States and most
-other parts of the world at no cost and with almost no restrictions
-whatsoever. You may copy it, give it away or re-use it under the terms of
-the Project Gutenberg License included with this eBook or online at
-www.gutenberg.org. If you are not located in the United States, you'll have
-to check the laws of the country where you are located before using this ebook.
-
-Title: The Oak Ridge ALGOL Compiler for the Control Data Corporation 1604
- Preliminary Programmer's Manual
-
-Author: L. L. Bumgarner
-
-Release Date: November 17, 2015 [EBook #50468]
-
-Language: English
-
-Character set encoding: UTF-8
-
-*** START OF THIS PROJECT GUTENBERG EBOOK THE OAK RIDGE ALGOL COMPILER ***
-
-
-
-
-Produced by David Starner, Stephen Hutcheson, and the
-Online Distributed Proofreading Team at http://www.pgdp.net
-(This book was produced from images made available by the
-HathiTrust Digital Library.)
-
-
-
-
-
-
- ORNL-3460
- UC-32—Mathematics and Computers
- TID-4500 (23rd ed.)
-
-
-
-
- THE OAK RIDGE ALGOL COMPILER FOR THE CONTROL DATA CORPORATION 1604
- PRELIMINARY PROGRAMMER'S MANUAL
-
-
- L. L. Bumgarner
-
- OAK RIDGE NATIONAL LABORATORY
- operated by
- UNION CARBIDE CORPORATION
- for the
- U.S. ATOMIC ENERGY COMMISSION
-
- Printed in USA. Price: $1.25 Available from the
- Office of Technical Services
- U. S. Department of Commerce
- Washington 25, D. C.
-
- LEGAL NOTICE
-
-This report was prepared as an account of Government sponsored work.
-Neither the United States, nor the Commission, nor any person acting on
-behalf of the Commission:
-
- A. Makes any warranty or representation, expressed or implied, with
- respect to the accuracy, completeness, or usefulness of the
- information contained in this report, or that the use of any
- information, apparatus, method, or process disclosed in this report
- may not infringe privately owned rights; or
-
- B. Assumes any liabilities with respect to the use of, or for damages
- resulting from the use of any information, apparatus, method, or
- process disclosed in this report.
-
-As used in the above, “person acting on behalf of the Commission”
-includes any employee or contractor of the Commission, or employee of
-such contractor, to the extent that such employee or contractor of the
-Commission, or employee of such contractor prepares, disseminates, or
-provides access to, any information pursuant to his employment or
-contract with the Commission, or his employment with such contractor.
-
- ORNL-3460
-
-
- Contract No. W-7405-eng-26
-
-
- Mathematics Division
-
- THE OAK RIDGE ALGOL COMPILER FOR THE CONTROL DATA CORPORATION
- 1604—PRELIMINARY PROGRAMMER’S MANUAL
-
- L. L. Bumgarner
-
-
- DATE ISSUED
- JAN 30 1964
-
-
- OAK RIDGE NATIONAL LABORATORY
- Oak Ridge, Tennessee
- operated by
- UNION CARBIDE CORPORATION
- for the
- U.S. ATOMIC ENERGY COMMISSION
-
-
-
-
- CONTENTS
-
-
- I. Introduction 1
- II. Language Restrictions 2
- III. Modes of Operation of the Compiler 4
- IV. Input-Output and Intermediate Tape 5
- Input-Output 5
- READ 5
- PAGE 7
- Lists and the List Declaration 7
- PRINT 9
- WRITE 9
- PUNCH 10
- Formats and the Format Declaration 10
- INPUT 11
- OUTPUT 12
- Intermediate Tape Procedures 13
- BINREAD 13
- BINWRITE 14
- ENDFILE 14
- REWIND 14
- BACKUP 14
- Tape-Checking Procedures 14
- EOF 15
- READERR 15
- WRITERR 15
- V. The External Declaration 16
- VI. Standard Procedures 16
- VII. Error Checking and Diagnostics 17
- VIII. Running Programs 19
- ALGOL Control System 20
- EOP Card 20
- Compile and Execute: ALGO 21
- PROGRAM Card 22
- Compile/Execute: ALDAP 22
- ALDAP Control Statement 22
- Job Deck: ALDAP Compilation/Execution 23
- Examples 25
-
-
- APPENDICES
- A. Adjuncts to Algol 60 30
- B. Hardware Representation 32
- C. Structure of Procedure Calling Sequence 35
- D. Internal Representation of Strings 37
- E. Program Efficiency 38
- F. Controversial Features of Algol 60 40
- G. Fortran Subprograms in an Algol Program 41
-
-
-
-
- THE OAK RIDGE ALGOL COMPILER FOR THE CONTROL DATA CORPORATION
- 1604—PRELIMINARY PROGRAMMER’S MANUAL
-
-
- L. L. Bumgarner
-
-
- ABSTRACT
-
- This document is a preliminary programmer’s manual for use of the
- Control Data 1604 Algol Compiler. The compiler was constructed by the
- Programming Research Group of the Mathematics Division in cooperation
- with Control Data Corporation. A knowledge of Algol 60 is assumed.
- Included are descriptions of input-output facilities and details for
- operation under the monitor system.
-
-
-
-
- I. Introduction
-
-
-This document is to serve as a programmer’s manual for the Algol
-compiler constructed as a cooperative project by Control Data
-Corporation and the Mathematics Division of Oak Ridge National
-Laboratory. The compiler is designed for the Control Data 1604 and
-1604-A computers. The document is preliminary in that the compiler is
-not thoroughly tested and may undergo further development.
-
-The reader is assumed to be familiar with Algol 60. The defining
-descriptions are the two reports on Algol 60 available in the following
-references:
-
- 1. P. Naur et al, “Report on the Algorithmic Language Algol 60,” Comm.
- Assoc. Comp. Mach., 3 (1960), No. 5, 299-314.
-
- 2. P. Naur et al, “Revised Report on the Algorithmic Language Algol
- 60,” Comm. Assoc. Comp. Mach., 6 (1963), No. 1, 1-17.
-
-The second report clears up certain ambiguities that appeared in the
-first report. The reports are not easy reading for the novice. The
-following expositions are more readable:
-
- 1. Baumann, Bauer, Feliciano and Samelson, Introduction to Algol,
- Prentice-Hall, Inc. (to be published in late 1963).
-
- 2. Bottenbruch, H., “Structure and Use of Algol 60,” Jour. Assoc.
- Comp. Mach., 9 (1962), No. 2, 161-221, and ORNL-3148.
-
-The Baumann publication also contains the revised Algol 60 report.
-
-Throughout this document various examples of statements and declarations
-appear without the semicolon which is always required for separating
-them. This is to avoid the implication that the semicolon is part of the
-statement or the declaration. In sentences, a comma or period may appear
-where a semicolon or other delimiter would be indicated in the context
-of a program.
-
-Word delimiters rendered in bold-face type in the Algol report are
-herein indicated by underlining.
-
-
-
-
- II. Language Restrictions
-
-
-The compiler correctly handles programs written in Algol 60 subject to
-the following restrictions.
-
-1. The use of an integer label as an actual parameter will cause an
-incorrect program to be compiled.
-
-2. A GO TO statement with an undefined switch designator as the
-designational expression will cause incorrect operation of the final
-program.
-
-3. Type restrictions:
-
- (a) The exponentiation expression x ↑ y will have type real unless x
- is of type integer and y is a non-negative integer constant. This
- differs slightly from the definition in the Algol report but will
- generally cause no difficulty.
-
- (b) In the construction
-
- <if clause> <simple arithmetic expression>
- else <arithmetic expression>
-
-the arithmetic expressions must have the same type, or else an incorrect
-program will be compiled. For example, in the statement
-
- x := if a < b then z else w
-
-z and w should both be declared real or both integer.
-
-(c) In a procedure call (procedure statement or function call) each
-actual parameter having an arithmetic value must have the same type as
-the corresponding formal parameter in the procedure declaration. The
-type of the formal parameter is that designated in the specification
-part if it appears there. If a formal parameter representing an
-arithmetic quantity does not appear in the specification part, it is
-assumed to be specified real. Full use of specifications is desirable
-for descriptive purposes and for optimization.
-
-Caution. Restriction (c) is more likely to cause errors than the other
-restrictions. It is very easy to write P(1,2) when the parameters of P
-are specified real, but incorrect coding will result. The call
-P(1.0,2.0) works correctly.
-
-4. Standard procedure names (see section VI) used as parameters in
-procedure calls will cause an incorrect program to be compiled. A call,
-therefore, such as
-
- P(sin)
-
-is incorrect. Note, however, that a call of the type
-
- Q(sin(x))
-
-causes no trouble. The case P(sin) can be programmed in another way.
-Make the declaration
-
- real procedure sin 1 (t); real t;
- sin 1 := sin(t).
-
-The call
-
- P(sin 1)
-
-is then correct.
-
-5. Arrays called by value are not handled. If an array identifier
-appears in the value part, an incorrect program will be compiled.
-
-6. “Dynamic” own arrays are not handled. This means that all own arrays
-are treated as having constant subscript bounds; this constitutes one
-possible interpretation of the Algol 60 report. An own array may be
-declared with variable subscript bounds, but only one allocation of
-storage will be made, and if the bounds change, this will be ignored.
-
-7. Recursive procedures are not handled. This restriction encompasses
-all cases of a function designator appearing in the actual parameter
-part of a call of the same function, unless that function is a standard
-function. Thus f(f(x)) is not permitted in general, but sin(sin(x)) is
-allowed.
-
-
-
-
- III. Modes of Operation of the Compiler
-
-
-There are two distinct modes of operation: ALGO and ALDAP.
-
-ALGO is a compile-and-execute mode in which the two phases cannot be
-separated. The Algol program is translated into a machine language
-program in core memory, and execution of the program immediately and
-automatically follows. There is no assembly program phase.
-
-ALDAP makes use of the CODAP assembly program facilities. It is possible
-to compile procedures separately and reference them from an Algol
-program. The procedures may be written in Algol, CODAP or Fortran. This
-provision is made possible with the aid of the external declaration
-discussed in section V.
-
-The ALGO mode provides significantly faster compilation than the ALDAP
-mode for most programs. The target programs produced in the two modes
-are essentially the same. In the ALGO mode, program checkout may be done
-at the Algol language level. In the ALDAP mode, checkout may also be
-done at the machine and assembly language levels, and modifications may
-be made at these levels.
-
-
-
-
- IV. Input-Output and Intermediate Tape
-
-
-There are seven standard procedures for input-output, five for
-intermediate tape, and three for checking tape conditions. Two
-declarations, format and list, are additions to the language.
-
-
- Input-Output
-
-The input-output procedures are: READ, PAGE, PRINT, WRITE, PUNCH, INPUT,
-and OUTPUT.
-
-
- READ
-
-The READ procedure is used to input numbers and Boolean values. A READ
-statement has the form
-
- READ (V1, V2, ..., Vn)
-
-where n is any positive integer and each Vk is a variable. For example,
-the statement
-
- READ (X, Y, A[1], B[1])
-
-will input values into the four variables listed. For inputing values
-into an array, a statement such as the following might be used:
-
- for I := 1 step 1 until 100 do READ (A[I]) .
-
-The READ procedure inputs numbers and truth values. A number must be a
-legal Algol number (although an E may be substituted for the symbol ₁₀).
-For input into a Boolean variable, the truth values true and false are
-accepted; also, a non-negative number or a plus sign is interpreted as
-false and a negative number or a minus sign is interpreted as true. A
-blank is read as zero.
-
-With the READ procedure, the type of a number on a data card does not
-have to be the same as the type of the variable to which it is assigned.
-Any necessary type conversions are done automatically. If N is the next
-number in the data, the statement
-
- READ (V)
-
-is equivalent to the statement
-
- V := N .
-
-The data cards are free field. The number of values per card, the length
-of numbers, and the number of spaces are arbitrary. A comma, however,
-must follow each number, including the last one on the last data card.
-
-In reading a value into a subscripted variable, the current value of the
-subscript expression is not affected by that READ statement. For
-example, in the statement
-
- READ (I, A[I])
-
-the old value of I is used in A[I].
-
-The READ procedure will input data from the standard input medium only.
-
-
- PAGE
-
-The PAGE procedure is used to cause a page ejection on the standard
-output medium. PAGE has no parameters. It is called by simply writing
-
- PAGE .
-
-
- Lists and the List Declaration
-
-The input and output procedures described in the rest of this section,
-as well as the binary read and write procedures, make use of the concept
-of a list. A list[1] is a sequence of expressions. An example is
-
- U + V, C[0], if B then X else Y .
-
-It may be inconvenient in some cases to write down all of the
-expressions explicitly. The loop expression[1] may be used as a
-shorthand device in a list. It is an Algol-like construction of which
-the following is an example:
-
- for I := 1 step 1 until 1000 do A[I] .
-
-This is equivalent to the list
-
- A[1], A[2], ..., A[1000] .
-
-The entity following do in a loop expression may itself be a list, but
-this list must be enclosed in parentheses if it contains more than one
-member.
-
-The loop expression
-
- for I := 1 step 1 until 1000 do (A[I], B[I])
-
-is equivalent to the list
-
- A[1], B[1], A[2], B[2], ..., A[1000], B[1000] .
-
-The loop expression
-
- for I := 1 step 1 until 10 do (A[I], for J := 1
- step 1 until 20 do B[I,J])
-
-is equivalent to the list
-
- A[1], B[1,1], B[1,2], ..., B[1,20],
- A[2], B[2,1], B[2,2], ..., B[2,20],
- ....................................
- A[10], B[10,1], B[10,2], ..., B[10,20] .
-
-A list may be given a name through a list declaration. A list
-declaration has the form
-
- list identifier := list .
-
-Examples are:
-
- list L := X, A + B
-
- list M := for I := 1 step 1 until N do A[I] .
-
-A list identifier may itself appear in a list. One of the above examples
-might be written with the aid of the following declaration:
-
- list L := for J := 1 step 1 until 20 do B[I,J] .
-
-The loop expression is then
-
- for I:= 1 step 1 until 10 do (A[I], L) .
-
-A list declaration obeys the same rules of syntax and scope as do other
-declarations.
-
-A list identifier may be used as an actual parameter of a procedure
-call, with the requirement that the corresponding formal parameter be
-specified list. However, an actual list may appear as a parameter only
-in calls of the standard procedures, as described.
-
-
- PRINT
-
-The PRINT procedure is used to output numbers in a simple, rigid manner.
-A PRINT statement has the form
-
- PRINT (list),
-
-where list is described above. An example of a PRINT statement is
-
- PRINT (A, if N = 0 then S else T).
-
-A PRINT statement always puts out at least one line printer image. A
-line may contain up to 6 numbers, each of which is in scientific
-notation with 10 decimal places. Each number is right-justified in a
-field of 20 columns. (The format is 6E20.10.) The above PRINT statement
-will output two numbers in the first forty spaces, and the rest of the
-line will be blank. A PRINT statement such as
-
- PRINT (for I := 1 step 1 until 10 do A[I])
-
-will output one line of 6 numbers followed by one line of 4 numbers.
-Single spacing between lines is automatic.
-
-The PRINT procedure always outputs on the standard output medium.
-
-
- WRITE
-
-The WRITE procedure is used to output strings. Examples of WRITE
-statements are:
-
- WRITE ('TABLE')
-
- WRITE (if D < 0 then 'TRUE' else 'FALSE') .
-
-Each parameter must be a string expression (see Appendix A for
-definition of string expression). There may be any number of parameters,
-but each string will appear on a separate line. If a string is too long
-to go on one line, it will be continued on the next line. A string
-should not contain another string. Lines are single spaced. Each WRITE
-statement causes at least one line printer image to be put out.
-
-The WRITE procedure always outputs on the standard output medium.
-
-
- PUNCH
-
-The PUNCH procedure is used to output numbers on punched cards in a form
-which can be input by the READ procedure. Each number punched will be
-followed by a comma. Each card punched may contain up to four numbers.
-Each number will be of type real, but since the READ procedure makes any
-necessary type conversions this is unimportant. A PUNCH statement has
-the same form as a PRINT statement. Each PUNCH statement causes at least
-one card image to be put out.
-
-The PUNCH procedure always outputs on the standard punch medium.
-
-
- Formats and the Format Declaration
-
-The two input and output procedures remaining to be described make use
-of formats. The formats are exactly those used in Fortran, and readers
-unfamiliar with Fortran will find it necessary to refer to the Control
-Data Fortran-62 Reference Manual for details on the use of formats.
-
-A format is treated as a string. Formats will be written, for example,
-as follows:
-
- '(6E20.10)'
-
- '(1H0, 9X, 5HTABLE, I3)' .
-
-Note that the parentheses are part of the format, and both parentheses
-and string quotes are required.
-
-As will be indicated below, a format string may appear explicitly in an
-INPUT or OUTPUT statement. If the same format string is used more than
-once, however, it may be convenient to give it a name through a format
-declaration. A format declaration has the form
-
- format Identifier := '(Fortran format)' .
-
-Examples are:
-
- format F := '(6E20.10)'
-
- format G := '(1H0, 9X, 5HTABLE, I3)' .
-
-A format declaration obeys the same rules of syntax and scope as do
-other declarations.
-
-Format identifiers may be used as parameters, and format is a specifier.
-
-
- INPUT
-
-The INPUT procedure is used to input numbers and Hollerith information
-in accordance with Fortran-type formats. An INPUT statement has one of
-the forms
-
- INPUT (M,F,list)
-
- INPUT (M,F)
-
-where:
-
-(1) M is the logical unit designation. M may be any arithmetic
-expression. If it is not integral-valued, the action
-
- M := entier (M + 0.5)
-
-will take place. The standard input unit is 50.
-
-(2) F is a format expression. It may be an actual format string, a
-format identifier, a conditional format expression, or any variable
-which contains the starting address of a format string. Caution. In the
-case of a conditional format expression, format strings and format
-identifiers should not be mixed. For example, (a) and (b) below are
-permitted, but (c) will cause an incorrect program to be compiled:
-
- (a) if B then '(E20.7)' else '(E20.6)'
- (b) if B then F1 else F2
- (c) if B then F1 else '(E20.6)' .
-
-(3) list is as defined previously. Of course, for INPUT all expressions
-must be variables.
-
-The following are examples of an INPUT statement:
-
- INPUT (50, '(4E20.8)', N, for I := 1 step 1 until N do A[I]).
-
- INPUT (if A < B then M else N, F, X, Y, Z) .
-
-Each INPUT statement causes at least one card image to be read.
-
-Note that the INPUT procedure does not make type checks between the data
-and the program variables. A floating point number, for example, is
-stored as such regardless of the type of the variable to which it is
-assigned.
-
-Caution. It is strongly recommended that not both READ and INPUT be used
-in the same program. Each buffers ahead one card image. Furthermore,
-each INPUT statement causes at least one card image to be read while a
-READ statement may not cause a new card image to be read. Mixing the two
-statements will require quite careful use of blank cards in the data to
-allow for the buffering.
-
-
- OUTPUT
-
-The OUTPUT procedure is used to output numbers and Hollerith information
-in accordance with Fortran-type formats. An OUTPUT statement has one of
-the forms
-
- OUTPUT (M,F)
- OUTPUT (M,F,list)
-
-where M, F, and list are as indicated above. The following are examples
-of OUTPUT statements:
-
- OUTPUT (51, '(5HTABLE)')
-
- OUTPUT (51, '(1H0,9X,10E10.2)', for I := 1 step 1 until 100 do A[I]) .
-
-Each OUTPUT statement causes at least one line printer image to be put
-out. The standard output unit is 51, and the standard punch unit is 52.
-
-
- Intermediate Tape Procedures
-
-There are five standard procedures for making use of magnetic tape for
-auxiliary storage:
-
-BINREAD, BINWRITE, ENDFILE, REWIND and BACKUP.
-
-
- BINREAD
-
-A BINREAD statement has the form
-
- BINREAD (M, list)
-
-where M and list are the same as for INPUT. Each BINREAD statement
-causes the designated unit to move forward one logical record, reading
-in binary format into the variables of the list. If fewer variables
-appear in the list than are on the record, only those values are read
-and the tape moves on to the end of the record. If more variables appear
-in the list than are on the record, this is treated as an error and the
-program is terminated.
-
-The following is an example of a BINREAD statement:
-
- BINREAD (6, for I := 1 step 1 until 1000 do A[I]) .
-
-
- BINWRITE
-
-A BINWRITE statement has the form
-
- BINWRITE (M, list)
-
-where M and list are the same as for OUTPUT. Each BINWRITE statement
-causes the values of the list expressions to be written in one logical
-record in binary format on the designated unit.
-
-
- ENDFILE
-
-An ENDFILE statement has the form
-
- ENDFILE (M)
-
-where M is a unit designation as before. The statement causes an
-end-of-file record to be written on the designated unit.
-
-
- REWIND
-
-A REWIND statement has the form
-
- REWIND (M)
-
-where M is a unit designation as before. The statement causes the
-designated unit to be rewound to the load point.
-
-
- BACKUP
-
-A BACKUP statement has the form
-
- BACKUP (M)
-
-where M is a unit designation as before. The statement causes the
-designated unit to be backspaced one logical record of binary
-information or one physical record of BCD information.
-
-
- Tape-Checking Procedures
-
-The checking procedures are: EOF, READERR, and WRITERR. These are
-Boolean procedures.
-
-
- EOF
-
-An EOF call has the form
-
- EOF (M)
-
-where M is a logical unit designation as before. It yields the value
-true if the previous read operation encountered an end-of-file or the
-previous write operation encountered an end-of-tape; otherwise it yields
-the value false.
-
-An example of the use of an EOF call is:
-
- if EOF(6) then goto ALARM .
-
-
- READERR
-
-A READERR call has the form
-
- READERR (M)
-
-where M is a logical unit designation as before. It yields the value
-true if the previous read operation produced a parity error; otherwise
-it yields the value false.
-
-READERR should not be used for testing the operation of a READ
-statement. The READ procedure has its own facilities for checking,
-making multiple attempts in case of errors, and terminating the program
-if necessary.
-
-
- WRITERR
-
-A WRITERR call has the form
-
- WRITERR (M)
-
-where M is a logical unit designation as before. It yields the value
-true if the previous write operation produced a parity error; otherwise
-it yields the value false.
-
-
-
-
- V. The External Declaration
-
-
-An external declaration is required for each nonstandard library
-procedure or procedure compiled separately from the calling program,
-whether in Algol, Fortran or CODAP. Standard Algol procedures are
-described in Section VI. Note that a CODAP subroutine must take account
-of the special structure of the Algol calling sequence as described in
-Appendix C or be treated as a Fortran subprogram. The use of Fortran
-subprograms is described in Appendix G.
-
-The external declaration has one of the following forms:
-
- external I1, ..., In
- real external I1, ..., In
- integer external I1, ..., In
- Boolean external I1, ..., In
-
-where each Ik is an identifier and n is any positive integer. A type
-declarator preceding the declarator external signifies a function
-procedure having that type. Note that no information about parameters
-appears in an external declaration. See Appendix A for syntactical
-definition.
-
-In the ALGO mode, LIB cards must be included in the job deck for
-nonstandard library routines, in addition to the external declarations.
-Details are found in Section VIII.
-
-
-
-
- VI. Standard Procedures
-
-
-Certain procedures are used without being declared. These include the
-standard functions listed in the Algol 60 report and the input-output
-and intermediate tape procedures. The complete list is as follows:
-
- ABS
- SIGN
- SQRT
- SIN
- COS
- ARCTAN
- LN
- EXP
- ENTIER
- EOF
- READERR
- WRITERR
- FORTRANF
- FTNF
- READ
- PAGE
- PRINT
- WRITE
- PUNCH
- INPUT
- OUTPUT
- BINREAD
- BINWRITE
- ENDFILE
- REWIND
- BACKUP
- FORTRAN
- FTN
-
-These procedures are global to the program. They behave as though
-declared in a fictitious block surrounding the entire program.
-
-
-
-
- VII. Error Checking and Diagnostics
-
-
-In a complete compilation the compiler makes two passes on the Algol
-source program. If errors which the compiler cannot correct are detected
-in the first pass, then the second, or translation, pass will not be
-made. The following types of errors are detected:
-
-
- 1. syntactical error
- 2. undeclared identifier
- 3. identifier declared twice in the same block head
- 4. misspelled delimiter (corrected in many cases)
- 5. missing escape symbol (corrected unless both are missing for the
- same delimiter, in which case the delimiter is treated as an
- identifier).
-
-
-The program listing and any diagnostics always appear on the standard
-output medium. In the case of a syntactical error, a message will appear
-in the program listing one or several lines below the error. The
-location of the error in the program will be further pinpointed in the
-line of symbols immediately below the error message. This line will be a
-short portion of the program with the last symbol in the line being the
-one which indicates the error. For example, a declaration might be out
-of place as follows:
-
- .
- .
- .
- x := a + b; 'INTEGER' K;
-
- **** LAST CHARACTER INDICATES SYNTACTICAL ERROR.
-
- x := a + b; INTEGER
- .
- .
- .
-
-In some cases the line below the message may differ slightly from the
-corresponding string of symbols above; for example, an identifier might
-be rendered by Ident. It is possible for a single syntactical error to
-cause more than one diagnostic.
-
-A few syntactical errors are corrected by the compiler, and a message is
-put out to this effect. An example is a semicolon immediately preceding
-else.
-
-According to the comment conventions of Algol, any string of symbols
-following end and not containing end, else or a semicolon is treated as
-comment. As a result, the omission of one of these symbols following end
-does not always cause an error in compilation but will cause a portion
-of the program to be skipped over by the compiler. Thus for example, in
-
- ... x := a + b end for i := 1 step 1 ...
-
-the FOR statement will be skipped at least in part. The compiler will
-put out a caution message in this and some other cases, but it will not
-change the program.
-
-If an identifier is not declared (or possibly declared in the wrong
-place), a message is put out below the program listing together with the
-undeclared identifier.
-
-The compiler does not check the type of identifiers. Therefore, such
-errors as a Boolean variable in an arithmetic expression, or the
-brackets of a subscripted variable replaced by parentheses, are not
-detected, and an incorrect program may be compiled.
-
-
-
-
- VIII. Running Programs
-
-
-The Algol program is punched on cards in the hardware representation
-described in Appendix B. The format is essentially free field: spaces
-have no significance except within escape symbols and string quotes.
-Only the first 72 columns, however, are interpreted by the compiler. The
-remaining columns may be used for identification purposes. Care must be
-taken when a string is continued onto the next card, as the continuation
-will begin in column 1. The program listing will have the same format as
-the cards.
-
-In the following discussion the symbol Ø signifies the letter O where
-necessary for emphasis, and the symbol Δ signifies a 7-9 punch in card
-column 1.
-
-
- ALGOL Control System
-
-The compiler operates under the ALGOL Control System. This system is a
-subordinate control routine of the Master Control System of the CO-OP
-Monitor Programming System. ALGOL is quite similar to the subordinate
-control routine COOP.
-
-ALGOL is called with an MCS (Master Control System) card having ALGOL
-punched beginning in column 2. Other details of this card are available
-in descriptions of the CO-OP Monitor. It should be noted in selecting a
-standard recovery procedure that the concept of COMMON is not used in
-Algol.
-
-Following the MCS card will be a control card giving instructions to the
-control routine ALGOL. It will name one of the following routines: ALGO,
-ALDAP, EXECUTE, BINARY, FORTRAN, REWIND or DEFINE. These will be
-discussed below.
-
-
- EOP Card
-
-The EOP (end-of-program) card has the characters 'EØP' punched in
-columns 10-14.
-
-In the ALGO mode, one EOP card must be used to terminate the program.
-
-In the ALDAP mode, one EOP card must be used to terminate each Algol
-program or Algol procedure being compiled separately.
-
-
- Compile and Execute: ALGO
-
-The ALGO mode of running an Algol program is the simplest and the
-fastest. It will be the more suitable for a large number of programs.
-Unless the programmer has special reasons for using the ALDAP mode, the
-ALGO mode is recommended.
-
-The Algol program must be self-contained except for standard procedures
-and library procedures on the library-systems tape. The job deck must
-have the following cards in the specified order:
-
-
- 1. MCS control card.
-
- The subordinate control routine name must be ALGØL.
- 2. ALGOL control card.
-
- This will appear as
-
- ΔALGØ. or ΔALGØ,t. where t is an integer specifying a time limit
- in minutes for compilation and execution.
-
- (The period is required on every control card.)
- 3. LIB cards.
-
- If necessary. One LIB card is required for each non-standard
- library procedure called in the program, namely those declared
- external. The format of a LIB card is as follows: the
- characters LIB punched in columns 10-12 and the name of a
- library entry point beginning in column 20. There may be no
- more than 20 LIB cards.
- 4. PROGRAM card.
-
- If desired. This may be used to identify the program. Its format
- is described in the next paragraph.
- 5. Algol program deck.
- 6. EOP card.
- 7. Data.
-
- If required.
-
-
- PROGRAM Card
-
-The PROGRAM card is optional. It is useful for identification purposes,
-and in the ALDAP mode it serves to name the program entry point.
-
-The format of the card is free field. The characters PRØGRAM must appear
-followed by the program name, which must be alphanumeric.
-
-
- Compile/Execute: ALDAP
-
-The ALDAP mode is used to compile an Algol program or procedure to a
-relocatable binary or a CODAP format. Execution is optional. For
-compilation only, the program deck may consist of any mixture of Algol
-programs and procedures, any number of which may be in CODAP. If
-execution is desired, part or all of the program deck may have been
-previously compiled, so that the deck may have Algol, CODAP and
-relocatable binary cards.
-
-
- ALDAP Control Statement
-
-The format of the ALDAP statement is:
-
- ΔALDAP,L,B,n.
-
-where
-
-
- L is a program listing key,
-
- B is a punched card output key,
-
- n is a logical unit number.
-
-
-A period may terminate the statement at any point, with remaining fields
-treated as zero.
-
-If the program listing key (L) is a 1, an assembled listing of the CODAP
-object code will be produced on the standard output medium. If the key
-is zero or blank, no such listing will be produced. A listing of the
-Algol program and any diagnostics will always be produced on the
-standard output medium.
-
-If the punched card output key (B) is a 1, a relocatable binary deck
-will be produced on the standard punch medium. If the key is a 2, a
-CODAP symbolic deck will be produced on the standard punch medium. If
-the key is a 3, both a symbolic deck and a relocatable binary deck will
-be produced on the standard punch medium, with the symbolic deck
-appearing first. If the key is zero or blank, no deck will be produced.
-
-The logical unit number (n) specifies the unit which is to be the
-load-and-go tape if it is one of the integers 1-49 or 56. If n is some
-other integer or blank, no load-and-go tape will be written. The
-load-and-go tape is required when execution of the program is to follow.
-
-Examples:
-
-
- (a) ΔALDAP, 1, 1, 56.
-
-
-This statement will cause the Algol/CODAP deck to be compiled, an
-assembled listing to be produced on the standard output medium, a
-relocatable binary deck to be produced on the standard punch medium, and
-a load-and-go tape written on logical unit 56.
-
-
- (b) ΔALDAP, 1.
-
-
-This statement will cause the Algol/CODAP deck to be compiled, and an
-assembled listing to be produced on the standard output medium.
-
-
- Job Deck: ALDAP Compilation/Execution
-
-For compilation only of an Algol/CODAP program deck, the job deck should
-contain the following cards in the specified order:
-
-
- 1. MCS control card.
-
- With ALGØL as the subordinate control routine name.
- 2. ALGOL control card.
-
- With the appropriate ALDAP control statement.
- 3. PROGRAM card.
-
- If desired.
- 4. Program deck.
-
- Any mixture of Algol and CODAP programs and procedures, with all
- their subroutines except the standard procedures and those on
- the library-systems tape. Each Algol program or procedure must
- be terminated by an EOP card.
- 5. FINIS card.
-
- This card contains the characters FINIS punched in columns 10-14.
- It signals the end of all compilations.
-
-
-For compilation and execution of an Algol/CODAP program deck, a
-load-and-go tape must be requested in the ALDAP control statement. If no
-relocatable binary cards follow the last subprogram to be compiled, then
-the program deck must be terminated by an EOP card which is in addition
-to the EOP card or END card (the latter for a CODAP subprogram) which
-terminates the last program or procedure. The FINIS card then follows
-this additional EOP card. An EOP card always causes a TRA card image to
-be written on the load-and-go tape.
-
-The control statements EXECUTE, BINARY, FORTRAN, REWIND and DEFINE may
-be used as described in the “CO-OP Monitor Programmer’s Guide”. BINARY
-is useful for loading a relocatable binary deck onto the load-and-go
-tape prior to compilation of an Algol calling program, where the
-subprogram in relocatable form might have the same name as a library
-routine. If the Algol program preceded the relocatable deck, the library
-routine would be fetched by the loader and an error indication given.
-
-The CO-OP control statements LOAD and EXECUTER are not used by ALGOL.
-
-
- Examples
-
-Each of the following examples describes a job deck which illustrates a
-different way of compiling and executing the same Algol program. The
-program calls a library procedure with entry point named BESSEL, and the
-program contains at least one other procedure. On the MCS card only the
-first field is indicated, as the others may vary from one installation
-to another.
-
-
-
-
- Example 1
-
-
-This job uses the ALGØ mode.
-
- ΔALGØL, ... .
-
- ΔALGØ.
-
- LIB BESSEL
-
- PRØGRAM SAMPLE
-
- Algol Program (with external declaration of BESSEL)
-
- 'EØP'
-
- Data
-
-
-
-
- Example 2
-
-
-This job uses the ALDAP mode, compiling the entire program at once. The
-ALDAP control statement calls for an assembled listing, a binary deck,
-and a load-and-go tape on logical unit 56. The execute card gives a two
-minute time limit on the execution.
-
- ΔALGØL, ... .
-
- ΔALDAP,1,1,56.
-
- PRØGRAM SAMPLE
-
- Algol Program (with external declaration of BESSEL)
-
- 'EØP'
-
- 'EØP'
-
- FINIS
-
- ΔEXECUTE,2.
-
- Data
-
-
-
-
- Example 3
-
-
-This job consists simply of the execution of the relocatable program
-deck obtained in example 2.
-
- ΔALGØL, ... .
-
- ΔEXECUTE,2.
-
- Relocatable Deck
-
- Data
-
-
-
-
- Example 4
-
-
-This example is similar to example 2. Here the main program and one of
-its procedures are to be compiled separately.
-
- ΔALGØL, ... .
-
- ΔALDAP,1,1,56.
-
- PRØGRAM SAMPLE
-
- Algol Program (with external declaration of both BESSEL and the
- procedure being compiled separately)
-
- 'EØP'
-
- Algol Procedure
-
- 'EØP'
-
- 'EØP'
-
- FINIS
-
- ΔEXECUTE,2.
-
- Data
-
-
-
-
- Example 5
-
-
-In this example the procedure which was compiled separately in example 4
-is being compiled by itself, i.e., the calling program is not in the
-deck at all. Of course there is no execution in this case. Note that no
-load-and-go tape is requested and only one EOP card is used. There
-cannot be a PROGRAM card.
-
- ΔALGØL, ... .
-
- ΔALDAP,1,1.
-
- Algol Procedure
-
- 'EØP'
-
- FINIS
-
-
-
-
- Example 6
-
-
-Here the procedure compiled by itself in example 5 appears in the
-program deck in relocatable binary form, while the calling program is in
-the Algol language.
-
- ΔALGØL, ... .
-
- ΔALDAP,1,1,56.
-
- PRØGRAM SAMPLE
-
- Algol Program (with external declaration of both BESSEL and the
- procedure in relocatable form)
-
- 'EØP'
-
- FINIS
-
- ΔEXECUTE,2.
-
- Relocatable Deck
-
- Data
-
-The relocatable deck here must be terminated by two TRA cards. One of
-these is generated by the compiler when it processes the EOP card which
-must terminate the procedure for compilation, as in example 5. The
-second TRA card can be obtained by using a second EOP card, as in
-example 2. Alternatively, the second TRA card can be added to the
-relocatable deck before execution. Note that this second TRA card must
-not be used when the relocatable deck is loaded by a BINARY control
-statement. This is illustrated in the next example.
-
-
-
-
- Example 7
-
-
-In this case the previously compiled procedure has the same name as a
-routine on the library-systems tape.
-
- ΔALGØL, ... .
-
- ΔBINARY,56.
-
- Relocatable Deck (terminated by one TRA card)
-
- ΔALDAP,1,1,56.
-
- PRØGRAM SAMPLE
-
- Algol Program (with external declaration of both BESSEL and the
- procedure in relocatable form)
-
- 'EØP'
-
- 'EØP'
-
- FINIS
-
- ΔEXECUTE, 2.
-
- Data
-
-The logical unit number on the BINARY control statement must agree with
-that which specifies the load-and-go tape in the ALDAP control
-statement.
-
-
-
-
- APPENDIX A
- Adjuncts to Algol 60
-
-
- List Entities
-
-The delimiter list is a declarator and a specifier.
-
- <list identifier> ::= <identifier>
-
- <loop expression> ::= <for clause> <arithmetic expression>
- | <for clause> <loop expression>
- | <for clause> (<list>)
-
- <list element> ::= <arithmetic expression>
- | <loop expression>
- | <list identifier>
-
- <list> ::= <list element>
- | <list>, <list element>
-
- <list declaration> ::= list <list identifier> := <list>
-
-
- Format Entities
-
-The delimiter format is a declarator and a specifier.
-
- <format identifier> ::= <identifier>
-
- <simple format expression> ::='(<Fortran format>[2])'
- | <format identifier>
-
- <format expression> ::= <simple format expression>
- | <if clause> <simple format expression>
- else <format expression>
-
- <format declaration> ::= format <format identifier> := <format
- expression>
-
-
- String Expression
-
- <string expression> ::= <string>
- | <if clause> <string>
- else <string expression>
-
-
- External Declaration
-
-The delimiter external is a declarator.
-
- <external identifier> ::= <identifier>
-
- <external list> ::= <external identifier>
- | <external identifier>, <external list>
-
- <external declaration> ::= external <external list>
- | <type> external <external list>
-
-
-
-
- APPENDIX B
- Hardware Representation
-
-
-One keypunch character is reserved as an “escape symbol”, which we shall
-here suppose is the apostrophe. This symbol is used to delineate word
-delimiters and truth values, which are written in boldface type in Algol
-reference language and publication language and indicated by underlining
-in this manual. The hardware representation of a word delimiter such as
-begin is therefore 'BEGIN'. No distinction is made between upper and
-lower case letters in the hardware language.
-
-The transliteration rules for the non-word delimiters are comprised in
-the following table. This assumes a 48 character hardware set and is
-consistent with the usage in the ALCOR group. For some basic symbols
-alternatives are tolerated, as indicated.
-
- Reference Hardware Tolerated Hardware
- < 'LS' 'LESS'
- ≤ 'LQ' 'LSEQ', 'NOTGREATER', 'NOT
- GREATER'
- = 'EQ' 'EQUAL'
- ≥ 'GQ' 'GREQ', 'NOTLESS', 'NOT LESS'
- > 'GR' 'GREATER'
- ≠ 'NQ' 'NTEQ', 'NOTEQUAL', 'NOT
- EQUAL'
- ¬ 'NOT'
- ∧ 'AND'
- ∨ 'OR'
- ⊃ 'IMP' 'IMPLIES', 'IMPL'
- ≡ 'EQV' 'EQUIV'
- ₁₀ ' 'E','T'
- × *
- ↑ ** 'POWER'
- ÷ // 'DIV'
- : ..
- ; $ .,
- := = .=, ..=
- [ (/
- ] /)
- ‘ " '('
- ’ " ')'
-
-In the case of the string quotes, the tolerated symbols are required for
-the inner strings of a nest of strings.
-
-Actually, the compiler can tolerate many other spellings of word
-delimiters because of its facility for correcting misspellings.
-
-The delimiter go to is accepted with or without the space between the
-two words, but it is treated as a single delimiter: 'GOTO' or 'GO TO'.
-
-The compiler can also accept a 64 character hardware representation: the
-full set available on the line printer. In preparing programs,
-overpunching is used on the 48 character keypunch in this case. The
-table below indicates the keypunching rules in use at Oak Ridge National
-Laboratory.
-
- Reference Hardware
- < 1-8 punch
- ≤ 1-5 punch
- ≥ 1-9 punch
- > 2-7 punch
- ≠ 2-6 punch
- ∧ 3-7 punch
- ∨ 2-4 punch
- ₁₀ 1-6 punch
- ↑ 2-5 punch
- ÷ 3-5 punch
- : 2-8 punch
- ; 2-9 punch
- [ 3-6 punch
- ] 3-4 punch
-
-The other basic symbols are either in the 48 character set or are
-replaced by word delimiters as above. The symbol := is treated as two
-symbols in the 64 character set, and = is punched as such.
-
-
-
-
- APPENDIX C
- Structure of Procedure Calling Sequence
-
-
-The following information is necessary for the user writing a non-Algol
-procedure to be called from an Algol program. The calling sequence
-differs from that found in many other languages.
-
-The first word of the non-Algol procedure must have a simple jump
-instruction in its upper half, and the exit line is provided by a jump
-to this first word. The entry automatically causes the proper return
-address to be placed in the address portion of the first half-word.
-
-Upon entry to the procedure, index register six contains an address
-which is used to reference each parameter. To establish linkage with the
-first parameter, the instruction
-
- LDA 6 0
-
-is performed. This brings into the accumulator a word of one of the
-following types:
-
- 1. SLJ 0 ENA V
- 2. SLJ 0 RTJ L
-
-In case (1), V is the address of the parameter. In case (2), L is the
-starting address of a piece of coding for computing the address of the
-parameter and leaving it in the accumulator (if the parameter is an
-expression, the address in the accumulator will be that of a temporary
-containing its value). Case (1) always holds if the parameter is a
-simple variable, string, array identifier, switch identifier, or
-procedure identifier. In case (2) the same temporary will be used for
-all the expressions.
-
-Both cases can be provided for by setting aside two locations for each
-parameter in the procedure body and placing the instruction
-
- SLJ *-1
-
-in the upper half of each second location. Then after
-
- LDA 6 0
-
-mentioned above,
-
- STA RES1,
-
-where RES1 is the first reserved location for the first parameter, makes
-the two locations into a closed subroutine. After this, the instruction
-
- RTJ RES1
-
-causes the address of the first parameter to be placed in the
-accumulator anytime it is performed. This accommodates expressions
-called by name.
-
-In general, the K^th parameter is referenced as above, but beginning
-with
-
- LDA 6 (K - 1).
-
-This description does not apply to the standard procedures, each of
-which has its own special calling sequence.
-
-
-
-
- APPENDIX D
- Internal Representation of Strings
-
-
-The address representing a string is that of the first word of string
-characters. Each left string quote is represented internally by the word
-
- 00 ... 03454 ,
-
-and each right string quote by
-
- 00 ... 05474 .
-
-The characters of the string which are not string quotes are packed in
-BCD eight characters per word. These words are in the natural order, the
-first immediately following the left string quote and the last
-immediately followed by the right string quote. If the last word before
-a right quote is not full, the rest of that word is filled out with
-zeros (not BCD blanks).
-
-
-
-
- APPENDIX E
- Program Efficiency
-
-
-The following information may be of interest to programmers desiring an
-efficient program:
-
- 1. The FOR statement is defined with more generality than is useful in
- most programs. In particular, the arithmetic expressions in the FOR
- clause are allowed to change in value during execution of the FOR
- statement. The compiler does not attempt to determine which FOR
- statements make use of this flexibility and treats all of them in the
- most general way. Therefore, in a statement such as
-
- for I := 1 step M + N until abs(A - B) do ... ,
-
- the expression M + N is evaluated twice for each iteration, and the
- expression abs(A - B) is evaluated once for each iteration. If M, N, A
- , and B do not change in the loop, this is unnecessary. Such
- inefficiency can be avoided by programming in a slightly different
- way. The above example can be written as follows:
-
- T1 := M + N; T2 := abs(A - B) ;
- for I := 1 step T1 until T2 do ... .
-
- 2. The concept of call by value is a device applied to procedures to
- eliminate unneeded flexibility in procedure calls. If a parameter
- having a value is referenced more than once in the procedure body and
- the flexibility of call by name is not needed, then the program is
- more efficient if the parameter is included in the value part of the
- procedure heading. If such a parameter is referenced only once, it is
- more efficient if it is not included in the value part.
-
- 3. Array identifiers which are parameters should be specified.
-
-
-
-
- APPENDIX F
- Controversial Features of Algol 60
-
-
-A few features of the language have been subject to more than one
-interpretation. Fortunately, the vast majority of programs will not
-involve these ambiguities, but for the few that do it will be necessary
-to know what decisions the compiler makes. This appendix indicates these
-decisions for the more controversial areas.
-
- 1. Side effects in function designators. The evaluation of primaries
- in expressions is not strictly left to right allowing for precedence
- rules. In particular, the value of a variable in an expression is
- never stored in a temporary simply to preserve its value from change
- by the evaluation of a function designator in the expression.
- Otherwise, the evaluation does proceed from left to right and
- according to precedence rules, including the referencing of formal
- parameters and the calculation of the address of subscripted
- variables. All function designators are evaluated in Boolean
- expressions.
-
- 2. Own variables and arrays in procedures. The own quantities local to
- the body of a procedure which is called from more than one point in a
- program record the history of the procedure as opposed to a history of
- each point of reference. In other words, only one copy of the own
- quantities is preserved.
-
-
-
-
- APPENDIX G
- Fortran Subprograms in an Algol Program
-
-
-The standard procedures FORTRAN, FORTRANF, FTN, and FTNF are used to
-call compiled Fortran subroutines and functions from within an Algol
-program. Each procedure has one parameter which is a call of the desired
-Fortran subprogram. The Fortran subprogram must be declared external as
-described in Section V.
-
-The use of these procedures simply causes a Fortran calling sequence to
-be generated by the compiler. Of course the subprogram could be written
-in CODAP as well as Fortran, provided it is designed to link through a
-Fortran-type calling sequence.
-
-The procedures are used as follows:
-
-
- FORTRAN—generates a Fortran 62 calling sequence for a subroutine
- FORTRANF—generates a Fortran 62 calling sequence for a function
- FTN—generates a Fortran 63 calling sequence for a subroutine
- FTNF—generates a Fortran 63 calling sequence for a function
-
-
-Each of these procedures is standard, i.e., available without
-declaration. FORTRANF and FTNF are used in expressions.
-
-Examples:
-
- x := FTNF (ALPHA(T,A[0,0]))
-
- FORTRAN (SUB(I + J)) .
-
-The following restrictions must be observed: labels, procedures with no
-parameters, standard procedure names, and array names cannot be used as
-arguments of a call of a Fortran subprogram. However, in the case of an
-array, the subscripted variable which is the first element of the array
-will satisfy a Fortran subroutine which has an array name as a formal
-parameter. The name of the Fortran subprogram cannot be a formal
-parameter. Literals must be enclosed in string quotes.
-
-
-
-
- Footnotes
-
-
-[1]See Appendix A for syntactical definition.
-
-[2]For definition of Fortran format, see Control Data Fortran-62
- Reference Manual.
-
-
- Acknowledgment
-
-The author was greatly assisted in the preparation of this document by
-several persons who have contributed labors or advice to the
-construction of the compiler. These include N. B. Alexander and A. A.
-Grau, also K. A. Wolf of Control Data Corporation, and especially R. G.
-Stueland of Control Data Corporation.
-
- ORNL-3460
- UC-32—Mathematics and Computers
- TID-4500 (23rd ed.)
-
-
-
-
- INTERNAL DISTRIBUTION
-
-
- 1. Biology Library
- 2-4. Central Research Library
- 5. Reactor Division Library
- 6-7. ORNL--Y-12 Technical Library Document Reference Section
- 8-27. Laboratory Records Department
- 28. Laboratory Records, ORNL R.C.
- 29. R. K. Adams
- 30. Nancy Alexander
- 31. E. D. Arnold
- 32. Don Arnurius
- 33. George J. Atta
- 34. Susie E. Atta
- 35. S. J. Ball
- 36. J. E. Bigelow
- 37. R. E. Biggers
- 38. Craig Brandon
- 39. J. C. Bresee
- 40-41. L. L. Bumgarner
- 42. W. R. Burrus
- 43. H. P. Carter
- 44. D. K. Cavin
- 45. Arline Culkowski
- 46. W. Davis, Jr.
- 47. H. J. de Bruin
- 48. P. B. DeNee
- 49. A. C. Downing
- 50. L. C. Emerson
- 51. Margaret Emmett
- 52. R. L. Ferguson
- 53. B. R. Fish
- 54. P. A. Haas
- 55. M. Feliciano
- 56. Barbara Ann Flores
- 57. T. B. Fowler
- 58. R. E. Funderlic (K-25)
- 59. D. A. Gardiner
- 60. C. D. Griffies
- 61. D. A. Griffin
- 62. D. G. Gosslee
- 63. M. T. Harkrider
- 64. M. C. Hill
- 65. A. S. Householder
- 66. W. H. Jordan
- 67. H. W. Joy
- 68. F. B. K. Kam
- 69. George Kidd
- 70. L. J. King
- 71. Ann Klein
- 72. K. A. Kraus
- 73. C. E. Larson
- 74. M. E. LaVerne
- 75. Elmon Leach
- 76. R. P. Leinius
- 77-78. M. P. Lietzke
- 79. Erlie McDaniel
- 80. C. D. Martin
- 81. K. O. Martin
- 82. Betty F. Maskewitz
- 83. R. P. Milford
- 84. F. L. Miller, Jr.
- 85. R. V. Miskell
- 86. S. E. Moore
- 87. J. F. Murdock
- 88. C. W. Nestor, Jr.
- 89. V. K. Pare
- 90. Carl E. Parker
- 91. S. K. Penny
- 92. A. M. Perry
- 93. D. C. Ramsey
- 94. M. T. Robinson
- 95. R. M. Rush
- 96. Y. Shima
- 97. J. E. Simpkins
- 98. M. J. Skinner
- 99. C. D. Scott
- 100. C. D. Susano
- 101. J. A. Swartout
- 102. M. E. Tsagaris
- 103. D. K. Trubey
- 104. J. S. Watson
- 105. A. M. Weinberg
- 106. M. E. Whatley
- 107. C. S. Williams
- 108. H. A. Wright
- 109. Y-12 Central Files
- 110. J. H. Zeigler (K-25)
- 111. H. Zeldes
-
-
-
-
- EXTERNAL DISTRIBUTION
-
-
- 112. T. H. Elrod, Control Data Corporation, Computer Division, 3330
- Hillview Avenue, Palo Alto, California
- 113. A. A. Grau, Department of Mathematics, Northwestern University,
- Evanston, Illinois
- 114. R. G. Stueland, Control Data Corporation, Computer Division, 3330
- Hillview Avenue, Palo Alto, California
- 115. K. A. Wolf, Control Data Corporation, Programing Systems, 501
- Park Avenue, Minneapolis 15, Minnesota
- 116. R. A. Zemlin, Control Data Corporation, Computer Division, 3330
- Hillview Avenue, Palo Alto, California
- 117. Research and Development Division, AEC, ORO
- 118-728. Given distribution as shown in TID-4500 (23rd ed.) under
- Mathematics and Computers category (75 copies--OTS)
-
-
-
-
- Transcriber’s Notes
-
-
- In the HTML version, represented code in a monospaced font, with
- keywords in boldface as in the Revised Report.
- Corrected a few palpable typos.
- Created an original cover image, using elements from the printed book,
- for free and unrestricted use with this eBook.
-
-
-
-
-
-
-
-End of the Project Gutenberg EBook of The Oak Ridge ALGOL Compiler for the
-Control Data Corporation 1604, by L. L. Bumgarner
-
-*** END OF THIS PROJECT GUTENBERG EBOOK THE OAK RIDGE ALGOL COMPILER ***
-
-***** This file should be named 50468-0.txt or 50468-0.zip *****
-This and all associated files of various formats will be found in:
- http://www.gutenberg.org/5/0/4/6/50468/
-
-Produced by David Starner, Stephen Hutcheson, and the
-Online Distributed Proofreading Team at http://www.pgdp.net
-(This book was produced from images made available by the
-HathiTrust Digital Library.)
-
-Updated editions will replace the previous one--the old editions will
-be renamed.
-
-Creating the works from print editions not protected by U.S. copyright
-law means that no one owns a United States copyright in these works,
-so the Foundation (and you!) can copy and distribute it in the United
-States without permission and without paying copyright
-royalties. Special rules, set forth in the General Terms of Use part
-of this license, apply to copying and distributing Project
-Gutenberg-tm electronic works to protect the PROJECT GUTENBERG-tm
-concept and trademark. Project Gutenberg is a registered trademark,
-and may not be used if you charge for the eBooks, unless you receive
-specific permission. If you do not charge anything for copies of this
-eBook, complying with the rules is very easy. You may use this eBook
-for nearly any purpose such as creation of derivative works, reports,
-performances and research. They may be modified and printed and given
-away--you may do practically ANYTHING in the United States with eBooks
-not protected by U.S. copyright law. Redistribution is subject to the
-trademark license, especially commercial redistribution.
-
-START: FULL LICENSE
-
-THE FULL PROJECT GUTENBERG LICENSE
-PLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK
-
-To protect the Project Gutenberg-tm mission of promoting the free
-distribution of electronic works, by using or distributing this work
-(or any other work associated in any way with the phrase "Project
-Gutenberg"), you agree to comply with all the terms of the Full
-Project Gutenberg-tm License available with this file or online at
-www.gutenberg.org/license.
-
-Section 1. General Terms of Use and Redistributing Project
-Gutenberg-tm electronic works
-
-1.A. By reading or using any part of this Project Gutenberg-tm
-electronic work, you indicate that you have read, understand, agree to
-and accept all the terms of this license and intellectual property
-(trademark/copyright) agreement. If you do not agree to abide by all
-the terms of this agreement, you must cease using and return or
-destroy all copies of Project Gutenberg-tm electronic works in your
-possession. If you paid a fee for obtaining a copy of or access to a
-Project Gutenberg-tm electronic work and you do not agree to be bound
-by the terms of this agreement, you may obtain a refund from the
-person or entity to whom you paid the fee as set forth in paragraph
-1.E.8.
-
-1.B. "Project Gutenberg" is a registered trademark. It may only be
-used on or associated in any way with an electronic work by people who
-agree to be bound by the terms of this agreement. There are a few
-things that you can do with most Project Gutenberg-tm electronic works
-even without complying with the full terms of this agreement. See
-paragraph 1.C below. There are a lot of things you can do with Project
-Gutenberg-tm electronic works if you follow the terms of this
-agreement and help preserve free future access to Project Gutenberg-tm
-electronic works. See paragraph 1.E below.
-
-1.C. The Project Gutenberg Literary Archive Foundation ("the
-Foundation" or PGLAF), owns a compilation copyright in the collection
-of Project Gutenberg-tm electronic works. Nearly all the individual
-works in the collection are in the public domain in the United
-States. If an individual work is unprotected by copyright law in the
-United States and you are located in the United States, we do not
-claim a right to prevent you from copying, distributing, performing,
-displaying or creating derivative works based on the work as long as
-all references to Project Gutenberg are removed. Of course, we hope
-that you will support the Project Gutenberg-tm mission of promoting
-free access to electronic works by freely sharing Project Gutenberg-tm
-works in compliance with the terms of this agreement for keeping the
-Project Gutenberg-tm name associated with the work. You can easily
-comply with the terms of this agreement by keeping this work in the
-same format with its attached full Project Gutenberg-tm License when
-you share it without charge with others.
-
-1.D. The copyright laws of the place where you are located also govern
-what you can do with this work. Copyright laws in most countries are
-in a constant state of change. If you are outside the United States,
-check the laws of your country in addition to the terms of this
-agreement before downloading, copying, displaying, performing,
-distributing or creating derivative works based on this work or any
-other Project Gutenberg-tm work. The Foundation makes no
-representations concerning the copyright status of any work in any
-country outside the United States.
-
-1.E. Unless you have removed all references to Project Gutenberg:
-
-1.E.1. The following sentence, with active links to, or other
-immediate access to, the full Project Gutenberg-tm License must appear
-prominently whenever any copy of a Project Gutenberg-tm work (any work
-on which the phrase "Project Gutenberg" appears, or with which the
-phrase "Project Gutenberg" is associated) is accessed, displayed,
-performed, viewed, copied or distributed:
-
- This eBook is for the use of anyone anywhere in the United States and
- most other parts of the world at no cost and with almost no
- restrictions whatsoever. You may copy it, give it away or re-use it
- under the terms of the Project Gutenberg License included with this
- eBook or online at www.gutenberg.org. If you are not located in the
- United States, you'll have to check the laws of the country where you
- are located before using this ebook.
-
-1.E.2. If an individual Project Gutenberg-tm electronic work is
-derived from texts not protected by U.S. copyright law (does not
-contain a notice indicating that it is posted with permission of the
-copyright holder), the work can be copied and distributed to anyone in
-the United States without paying any fees or charges. If you are
-redistributing or providing access to a work with the phrase "Project
-Gutenberg" associated with or appearing on the work, you must comply
-either with the requirements of paragraphs 1.E.1 through 1.E.7 or
-obtain permission for the use of the work and the Project Gutenberg-tm
-trademark as set forth in paragraphs 1.E.8 or 1.E.9.
-
-1.E.3. If an individual Project Gutenberg-tm electronic work is posted
-with the permission of the copyright holder, your use and distribution
-must comply with both paragraphs 1.E.1 through 1.E.7 and any
-additional terms imposed by the copyright holder. Additional terms
-will be linked to the Project Gutenberg-tm License for all works
-posted with the permission of the copyright holder found at the
-beginning of this work.
-
-1.E.4. Do not unlink or detach or remove the full Project Gutenberg-tm
-License terms from this work, or any files containing a part of this
-work or any other work associated with Project Gutenberg-tm.
-
-1.E.5. Do not copy, display, perform, distribute or redistribute this
-electronic work, or any part of this electronic work, without
-prominently displaying the sentence set forth in paragraph 1.E.1 with
-active links or immediate access to the full terms of the Project
-Gutenberg-tm License.
-
-1.E.6. You may convert to and distribute this work in any binary,
-compressed, marked up, nonproprietary or proprietary form, including
-any word processing or hypertext form. However, if you provide access
-to or distribute copies of a Project Gutenberg-tm work in a format
-other than "Plain Vanilla ASCII" or other format used in the official
-version posted on the official Project Gutenberg-tm web site
-(www.gutenberg.org), you must, at no additional cost, fee or expense
-to the user, provide a copy, a means of exporting a copy, or a means
-of obtaining a copy upon request, of the work in its original "Plain
-Vanilla ASCII" or other form. Any alternate format must include the
-full Project Gutenberg-tm License as specified in paragraph 1.E.1.
-
-1.E.7. Do not charge a fee for access to, viewing, displaying,
-performing, copying or distributing any Project Gutenberg-tm works
-unless you comply with paragraph 1.E.8 or 1.E.9.
-
-1.E.8. You may charge a reasonable fee for copies of or providing
-access to or distributing Project Gutenberg-tm electronic works
-provided that
-
-* You pay a royalty fee of 20% of the gross profits you derive from
- the use of Project Gutenberg-tm works calculated using the method
- you already use to calculate your applicable taxes. The fee is owed
- to the owner of the Project Gutenberg-tm trademark, but he has
- agreed to donate royalties under this paragraph to the Project
- Gutenberg Literary Archive Foundation. Royalty payments must be paid
- within 60 days following each date on which you prepare (or are
- legally required to prepare) your periodic tax returns. Royalty
- payments should be clearly marked as such and sent to the Project
- Gutenberg Literary Archive Foundation at the address specified in
- Section 4, "Information about donations to the Project Gutenberg
- Literary Archive Foundation."
-
-* You provide a full refund of any money paid by a user who notifies
- you in writing (or by e-mail) within 30 days of receipt that s/he
- does not agree to the terms of the full Project Gutenberg-tm
- License. You must require such a user to return or destroy all
- copies of the works possessed in a physical medium and discontinue
- all use of and all access to other copies of Project Gutenberg-tm
- works.
-
-* You provide, in accordance with paragraph 1.F.3, a full refund of
- any money paid for a work or a replacement copy, if a defect in the
- electronic work is discovered and reported to you within 90 days of
- receipt of the work.
-
-* You comply with all other terms of this agreement for free
- distribution of Project Gutenberg-tm works.
-
-1.E.9. If you wish to charge a fee or distribute a Project
-Gutenberg-tm electronic work or group of works on different terms than
-are set forth in this agreement, you must obtain permission in writing
-from both the Project Gutenberg Literary Archive Foundation and The
-Project Gutenberg Trademark LLC, the owner of the Project Gutenberg-tm
-trademark. Contact the Foundation as set forth in Section 3 below.
-
-1.F.
-
-1.F.1. Project Gutenberg volunteers and employees expend considerable
-effort to identify, do copyright research on, transcribe and proofread
-works not protected by U.S. copyright law in creating the Project
-Gutenberg-tm collection. Despite these efforts, Project Gutenberg-tm
-electronic works, and the medium on which they may be stored, may
-contain "Defects," such as, but not limited to, incomplete, inaccurate
-or corrupt data, transcription errors, a copyright or other
-intellectual property infringement, a defective or damaged disk or
-other medium, a computer virus, or computer codes that damage or
-cannot be read by your equipment.
-
-1.F.2. LIMITED WARRANTY, DISCLAIMER OF DAMAGES - Except for the "Right
-of Replacement or Refund" described in paragraph 1.F.3, the Project
-Gutenberg Literary Archive Foundation, the owner of the Project
-Gutenberg-tm trademark, and any other party distributing a Project
-Gutenberg-tm electronic work under this agreement, disclaim all
-liability to you for damages, costs and expenses, including legal
-fees. YOU AGREE THAT YOU HAVE NO REMEDIES FOR NEGLIGENCE, STRICT
-LIABILITY, BREACH OF WARRANTY OR BREACH OF CONTRACT EXCEPT THOSE
-PROVIDED IN PARAGRAPH 1.F.3. YOU AGREE THAT THE FOUNDATION, THE
-TRADEMARK OWNER, AND ANY DISTRIBUTOR UNDER THIS AGREEMENT WILL NOT BE
-LIABLE TO YOU FOR ACTUAL, DIRECT, INDIRECT, CONSEQUENTIAL, PUNITIVE OR
-INCIDENTAL DAMAGES EVEN IF YOU GIVE NOTICE OF THE POSSIBILITY OF SUCH
-DAMAGE.
-
-1.F.3. LIMITED RIGHT OF REPLACEMENT OR REFUND - If you discover a
-defect in this electronic work within 90 days of receiving it, you can
-receive a refund of the money (if any) you paid for it by sending a
-written explanation to the person you received the work from. If you
-received the work on a physical medium, you must return the medium
-with your written explanation. The person or entity that provided you
-with the defective work may elect to provide a replacement copy in
-lieu of a refund. If you received the work electronically, the person
-or entity providing it to you may choose to give you a second
-opportunity to receive the work electronically in lieu of a refund. If
-the second copy is also defective, you may demand a refund in writing
-without further opportunities to fix the problem.
-
-1.F.4. Except for the limited right of replacement or refund set forth
-in paragraph 1.F.3, this work is provided to you 'AS-IS', WITH NO
-OTHER WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
-LIMITED TO WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PURPOSE.
-
-1.F.5. Some states do not allow disclaimers of certain implied
-warranties or the exclusion or limitation of certain types of
-damages. If any disclaimer or limitation set forth in this agreement
-violates the law of the state applicable to this agreement, the
-agreement shall be interpreted to make the maximum disclaimer or
-limitation permitted by the applicable state law. The invalidity or
-unenforceability of any provision of this agreement shall not void the
-remaining provisions.
-
-1.F.6. INDEMNITY - You agree to indemnify and hold the Foundation, the
-trademark owner, any agent or employee of the Foundation, anyone
-providing copies of Project Gutenberg-tm electronic works in
-accordance with this agreement, and any volunteers associated with the
-production, promotion and distribution of Project Gutenberg-tm
-electronic works, harmless from all liability, costs and expenses,
-including legal fees, that arise directly or indirectly from any of
-the following which you do or cause to occur: (a) distribution of this
-or any Project Gutenberg-tm work, (b) alteration, modification, or
-additions or deletions to any Project Gutenberg-tm work, and (c) any
-Defect you cause.
-
-Section 2. Information about the Mission of Project Gutenberg-tm
-
-Project Gutenberg-tm is synonymous with the free distribution of
-electronic works in formats readable by the widest variety of
-computers including obsolete, old, middle-aged and new computers. It
-exists because of the efforts of hundreds of volunteers and donations
-from people in all walks of life.
-
-Volunteers and financial support to provide volunteers with the
-assistance they need are critical to reaching Project Gutenberg-tm's
-goals and ensuring that the Project Gutenberg-tm collection will
-remain freely available for generations to come. In 2001, the Project
-Gutenberg Literary Archive Foundation was created to provide a secure
-and permanent future for Project Gutenberg-tm and future
-generations. To learn more about the Project Gutenberg Literary
-Archive Foundation and how your efforts and donations can help, see
-Sections 3 and 4 and the Foundation information page at
-www.gutenberg.org
-
-
-
-Section 3. Information about the Project Gutenberg Literary Archive Foundation
-
-The Project Gutenberg Literary Archive Foundation is a non profit
-501(c)(3) educational corporation organized under the laws of the
-state of Mississippi and granted tax exempt status by the Internal
-Revenue Service. The Foundation's EIN or federal tax identification
-number is 64-6221541. Contributions to the Project Gutenberg Literary
-Archive Foundation are tax deductible to the full extent permitted by
-U.S. federal laws and your state's laws.
-
-The Foundation's principal office is in Fairbanks, Alaska, with the
-mailing address: PO Box 750175, Fairbanks, AK 99775, but its
-volunteers and employees are scattered throughout numerous
-locations. Its business office is located at 809 North 1500 West, Salt
-Lake City, UT 84116, (801) 596-1887. Email contact links and up to
-date contact information can be found at the Foundation's web site and
-official page at www.gutenberg.org/contact
-
-For additional contact information:
-
- Dr. Gregory B. Newby
- Chief Executive and Director
- gbnewby@pglaf.org
-
-Section 4. Information about Donations to the Project Gutenberg
-Literary Archive Foundation
-
-Project Gutenberg-tm depends upon and cannot survive without wide
-spread public support and donations to carry out its mission of
-increasing the number of public domain and licensed works that can be
-freely distributed in machine readable form accessible by the widest
-array of equipment including outdated equipment. Many small donations
-($1 to $5,000) are particularly important to maintaining tax exempt
-status with the IRS.
-
-The Foundation is committed to complying with the laws regulating
-charities and charitable donations in all 50 states of the United
-States. Compliance requirements are not uniform and it takes a
-considerable effort, much paperwork and many fees to meet and keep up
-with these requirements. We do not solicit donations in locations
-where we have not received written confirmation of compliance. To SEND
-DONATIONS or determine the status of compliance for any particular
-state visit www.gutenberg.org/donate
-
-While we cannot and do not solicit contributions from states where we
-have not met the solicitation requirements, we know of no prohibition
-against accepting unsolicited donations from donors in such states who
-approach us with offers to donate.
-
-International donations are gratefully accepted, but we cannot make
-any statements concerning tax treatment of donations received from
-outside the United States. U.S. laws alone swamp our small staff.
-
-Please check the Project Gutenberg Web pages for current donation
-methods and addresses. Donations are accepted in a number of other
-ways including checks, online payments and credit card donations. To
-donate, please visit: www.gutenberg.org/donate
-
-Section 5. General Information About Project Gutenberg-tm electronic works.
-
-Professor Michael S. Hart was the originator of the Project
-Gutenberg-tm concept of a library of electronic works that could be
-freely shared with anyone. For forty years, he produced and
-distributed Project Gutenberg-tm eBooks with only a loose network of
-volunteer support.
-
-Project Gutenberg-tm eBooks are often created from several printed
-editions, all of which are confirmed as not protected by copyright in
-the U.S. unless a copyright notice is included. Thus, we do not
-necessarily keep eBooks in compliance with any particular paper
-edition.
-
-Most people start at our Web site which has the main PG search
-facility: www.gutenberg.org
-
-This Web site includes information about Project Gutenberg-tm,
-including how to make donations to the Project Gutenberg Literary
-Archive Foundation, how to help produce our new eBooks, and how to
-subscribe to our email newsletter to hear about new eBooks.
-
diff --git a/old/50468-0.zip b/old/50468-0.zip
deleted file mode 100644
index df2fa54..0000000
--- a/old/50468-0.zip
+++ /dev/null
Binary files differ
diff --git a/old/50468-h.zip b/old/50468-h.zip
deleted file mode 100644
index 5037caf..0000000
--- a/old/50468-h.zip
+++ /dev/null
Binary files differ
diff --git a/old/50468-h/50468-h.htm b/old/50468-h/50468-h.htm
deleted file mode 100644
index d7ba909..0000000
--- a/old/50468-h/50468-h.htm
+++ /dev/null
@@ -1,2138 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
-<title>The Oak Ridge Algol Compiler for the Control Data Corporation 1604 Preliminary Programmer's Manual, by L. L. Bumgarner</title>
-<meta name="author" content="Protestant Episcopal Church" />
-<link rel="schema.DC" href="http://dublincore.org/documents/1998/09/dces/" />
-<link rel="coverpage" href="images/cover.jpg" />
-<meta name="DC.Creator" content="L. L. Bumgarner" />
-<meta name="DC.Title" content="The Oak Ridge Algol Compiler for the Control Data Corporation 1604: Preliminary Programmer&rsquo;s Manual" />
-<meta name="DC.Language" content="en" />
-<meta name="DC.Format" content="text/html" />
-<meta name="pss.pubdate" content="1964" />
-<style type="text/css">
-large { font-size:125%; }
-sc { font-variant:small-caps; font-style: normal; }
-/* == GLOBAL MARKUP == */
-body, table.twocol tr td { margin-left:2em; margin-right:2em; } /* BODY */
-.box { border-style:double; margin-bottom:2em; max-width:25em; margin-right:auto; margin-left:auto; margin-top:2em; }
-.box p { margin-right:.5em; margin-left:.5em; }
-.box blockquote { margin-left:0; }
-.box blockquote p { margin-right:.5em; margin-left:1.5em; text-indent:-1em; }
-
-h1, h5, h6, .titlepg p { text-align:center; clear:both; } /* HEADINGS */
-h2 { margin-top:4em; margin-bottom:1.5em; text-align:left; }
-h1 { margin-top:3em; }
-div.box h1 { margin-top:1em; font-size:150%; }
-div.box h2 { margin-top:.5em; margin-bottom:1em; }
-h3 { margin-top:2.5em; text-align:left; }
-h4 { font-size:100%; text-align:center; clear:right; clear:both; }
-h5 { font-size:100%; text-align:left; clear:right; clear:both; }
-h6 { font-size:100%; }
-h6.var { font-size:80%; font-style:normal; }
-.titlepg { margin-left:auto; margin-right:auto; border-style:double; clear:both; }
-span.chaptertitle { font-style:normal; display:block; text-align:center; font-size:150%; }
-.tblttl { text-align:center; color:red; }
-.tblsttl { text-align:center; font-variant:small-caps; color:red; }
-
-
-pre sub.ms { color:red; width:4em; letter-spacing:1em; }
-
-p, blockquote, div.p, div.bq { text-align:justify; } /* PARAGRAPHS */
-div.p, div.bq { margin-top:1em; margin-bottom:1em; }
-blockquote, .bq { margin-left:1em; margin-right:0em; }
-.verse { font-size:100%; }
-p.indent {text-indent:2em; text-align:left; }
-p.tb, p.tbcenter, verse.tb, blockquote.tb { margin-top:2em; }
-
-span.pb, div.pb, dt.pb, p.pb /* PAGE BREAKS */
-{ text-align:right; float:right; margin-right:0em; clear:right; }
-div.pb { display:inline; }
-.pb, dt.pb, dl.toc dt.pb, dl.tocl dt.pb, .index dt.pb { text-align:right; float:right; margin-left: 1.5em;
- margin-top:.5em; margin-bottom:.5em; display:inline; text-indent:0;
- font-size:80%; font-style:normal; font-weight:bold;
- color:gray; border:1px solid gray;padding:1px 3px; }
-div.index .pb { display:block; }
-.bq div.pb, .bq span.pb { font-size:90%; margin-right:2em; }
-
-div.img, body a img {text-align:center; margin-left:auto; margin-right:auto; margin-top:2em; margin-bottom:2em; }
-
-sup, a.fn { font-size:75%; vertical-align:100%; line-height:50%; font-weight:normal; }
-h3 a.fn { font-size:65%; }
-sub { font-size:75%; }
-.center, .tbcenter { text-align:center; clear:both; } /* TEXTUAL MARKUP */
-table.center { clear:both; margin-right:auto; margin-left:auto; }
-table.center tr td { font-family:monospace; }
-table.inline, table.symbol { display: inline-table; vertical-align: middle; }
-
-p { clear:left; }
-.small, .lsmall { font-size:90%; }
-.smaller { font-size:80%; }
-.smallest { font-size:66%; }
-.larger { font-size:150%; }
-.large { font-size:125%; }
-.xlarge { font-size:200%; line-height:60%; }
-.xxlarge { font-size:200%; line-height:60%; }
-.gs { letter-spacing:1em; }
-.gs3 { letter-spacing:2em; }
-.gslarge { letter-spacing:.3em; font-size:110%; }
-.sc { font-variant:small-caps; font-style: normal; }
-.xo { position:relative; left:-.3em; color:green; }
-.over, over { text-decoration: overline; display:inline; }
-hr { width:20%; }
-.jl { text-align:left; }
-.jr { text-align:right; min-width:2em; clear:right; }
-.jr1 { text-align:right; margin-right:2em; clear:right; }
-.ind1 { text-align:left; margin-left:2em; }
-.u { text-decoration:underline; }
-.hst { margin-left:2em; }
-.incode { font-family:monospace; }
-.incode i { font-weight:bold; font-style:normal; }
-
-dd.t { text-align:left; margin-left: 5.5em; }
-dl.toc { clear:both; margin-top:1em; } /* CONTENTS (.TOC) */
-.toc dt.center { text-align:center; clear:both; }
-.toc dt { text-align:right; clear:left; }
-.toc dd { text-align:right; clear:both; margin-left:4em; }
-.toc dd.ddt { text-align:right; clear:both; margin-left:5em; }
-.toc dd.ddt2 { text-align:right; clear:both; margin-left:6em; }
-.toc dd.ddt3 { text-align:right; clear:both; margin-left:7em; }
-.toc dd.ddt4 { text-align:right; clear:both; margin-left:8em; }
-.toc dd.ddt5 { text-align:right; clear:both; margin-left:9em; }
-.toc dd.note { text-align:justify; clear:both; margin-left:5em; text-indent:-1em; margin-right:4em; }
-.toc dt .xxxtest {color:red; width:17em; display:block; position:relative; left:4em; }
-.toc dt a,
-.toc dd a,
-.toc dt span.left,
-.toc dt span.lsmall,
-.toc dd span.left { text-align:left; clear:right; float:left; }
-.toc dt a span.cn { width:2em; text-align:right; margin-right:.7em; float:left; }
-.toc dt.sc { text-align:right; clear:both; }
-.toc dt.scl { text-align:left; clear:both; font-variant:small-caps; }
-.toc dt.sct { text-align:right; clear:both; font-variant:small-caps; margin-left:1em; }
-.toc dt.jl { text-align:left; clear:both; font-variant:normal; }
-.toc dt.scc { text-align:center; clear:both; font-variant:small-caps; }
-.toc dt span.lj { text-align:left; display:block; float:left; }
-.toc dt a span.cn, .toc dt span.cn, dt span.cn { width:2.3em; text-align:right; margin-right:.7em; float:left; }
-
-/* BOX CELL */
-td.top { border-top:1px solid; width:.5em; height:.8em; }
-td.bot { border-bottom:1px solid; width:.5em; height:.8em; }
-td.rb { border:1px solid; border-left:none; width:.5em; height:.8em; }
-td.lb { border:1px solid; border-right:none; width:.5em; height:.8em; }
-
-/* INDEX (.INDEX) */
-dl.index { clear:both; }
-.index dd { margin-left:4em; text-indent:-2em; text-align:left; }
-.index dt { margin-left:2em; text-indent:-2em; text-align:left; }
- /* FOOTNOTE BLOCKS */
-div.notes p { margin-left:1em; text-indent:-1em; text-align:justify; }
-
- /* LISTS */
-dl.undent dt { margin-left:1em; text-indent:-1em; text-align:justify; }
-dl.undent dd { text-align:justify; }
-dl.undent dd.t { margin-left:2em; text-indent:0; text-align:justify; }
- /* POETRY LINE NUMBER */
-.lnum { text-align:right; float:right; margin-left:.5em; display:inline; }
-
-.hymn { text-align:left; } /* HYMN AND VERSE: HTML */
-.verse { text-align:left; margin-top:1em; margin-bottom:1em; margin-left:0em; font-family:monospace; }
-.verse p i { font-weight:bold; font-style:normal; }
-.versetb { text-align:left; margin-top:2em; margin-bottom:1em; margin-left:0em; }
-.originc { text-align:center; }
-.subttl { text-align:center; font-size:80%; }
-.srcttl { text-align:center; font-size:80%; font-weight:bold; }
-p.t0, p.l { margin-left:4em; text-indent:-3em; margin-top:0; margin-bottom:0; text-align:left; }
-p.lb { margin-left:4em; text-indent:-3em; margin-top:2em; margin-bottom:0; text-align:left; }
-p.tw, div.tw, .tw { margin-left:1em; text-indent:-1em; margin-top:0; margin-bottom:0; text-align:left; }
-p.t, div.t, .t { margin-left:5em; text-indent:-3em; margin-top:0; margin-bottom:0; text-align:left; }
-p.t2, div.t2, .t2 { margin-left:6em; text-indent:-3em; margin-top:0; margin-bottom:0; text-align:left; }
-p.t3, div.t3, .t3 { margin-left:7em; text-indent:-3em; margin-top:0; margin-bottom:0; text-align:left; }
-p.t4, div.t4, .t4 { margin-left:8em; text-indent:-3em; margin-top:0; margin-bottom:0; text-align:left; }
-p.t5, div.t5, .t5 { margin-left:9em; text-indent:-3em; margin-top:0; margin-bottom:0; text-align:left; }
-p.t6, div.t6, .t6 { margin-left:10em; text-indent:-3em; margin-top:0; margin-bottom:0; text-align:left; }
-p.t7, div.t7, .t7 { margin-left:11em; text-indent:-3em; margin-top:0; margin-bottom:0; text-align:left; }
-p.t8, div.t8, .t8 { margin-left:12em; text-indent:-3em; margin-top:0; margin-bottom:0; text-align:left; }
-p.t9, div.t9, .t9 { margin-left:13em; text-indent:-3em; margin-top:0; margin-bottom:0; text-align:left; }
-p.lr, div.lr, .lr { display:block; margin-left:0em; margin-right:1em; margin-top:0; margin-bottom:0; text-align:right; clear:right; }
-
-.fnblock { margin-top:2em; }
-.fndef { text-align:justify; margin-top:1.5em; margin-left:1.5em; text-indent:-1.5em; }
-.fndef p.fncont, .fndef dl { margin-left:0em; text-indent:0em; }
-dl.catalog dd { font-style:italic; }
-dl.catalog dt { margin-top:1em; }
-.author { text-align:right; margin-top:0em; margin-bottom:0em; display:block; }
-
-dl.biblio dt { margin-top:.6em; margin-left:2em; text-indent:-2em; text-align:justify; clear:both; }
-dl.biblio dt div { display:block; float:left; margin-left:-6em; width:6em; clear:both; }
-dl.biblio dt.center { margin-left:0em; text-align:center; }
-dl.biblio dd { margin-top:.3em; margin-left:4em; text-align:justify; font-size:90%; }
-.clear { clear:both; }
-</style>
-</head>
-<body>
-
-
-<pre>
-
-The Project Gutenberg EBook of The Oak Ridge ALGOL Compiler for the
-Control Data Corporation 1604, by L. L. Bumgarner
-
-This eBook is for the use of anyone anywhere in the United States and most
-other parts of the world at no cost and with almost no restrictions
-whatsoever. You may copy it, give it away or re-use it under the terms of
-the Project Gutenberg License included with this eBook or online at
-www.gutenberg.org. If you are not located in the United States, you'll have
-to check the laws of the country where you are located before using this ebook.
-
-Title: The Oak Ridge ALGOL Compiler for the Control Data Corporation 1604
- Preliminary Programmer's Manual
-
-Author: L. L. Bumgarner
-
-Release Date: November 17, 2015 [EBook #50468]
-
-Language: English
-
-Character set encoding: UTF-8
-
-*** START OF THIS PROJECT GUTENBERG EBOOK THE OAK RIDGE ALGOL COMPILER ***
-
-
-
-
-Produced by David Starner, Stephen Hutcheson, and the
-Online Distributed Proofreading Team at http://www.pgdp.net
-(This book was produced from images made available by the
-HathiTrust Digital Library.)
-
-
-
-
-
-
-</pre>
-
-<div class="img"><img id="coverpage" src="images/cover.jpg" alt="The Oak Ridge Algol Compiler for the Control Data Corporation 1604: Preliminary Programmer&rsquo;s Manual" width="*" height="*" /></div>
-<p class="center"><b>ORNL-3460
-<br />UC-32&mdash;Mathematics and Computers
-<br />TID-4500 (23rd ed.)</b></p>
-<div class="img">
-<img src="images/p01.png" width="*" height="*" alt="" />
-<p class="center"><span class="small"></span></p>
-</div>
-<div class="box">
-<h1>THE OAK RIDGE ALGOL COMPILER FOR THE CONTROL DATA CORPORATION 1604
-<br />PRELIMINARY PROGRAMMER'S MANUAL</h1>
-<p class="tbcenter"><b>L. L. Bumgarner</b></p>
-<p class="center"><b>OAK RIDGE NATIONAL LABORATORY</b>
-<br /><span class="smaller">operated by
-<br />UNION CARBIDE CORPORATION
-<br />for the
-<br />U.S. ATOMIC ENERGY COMMISSION</span></p>
-</div>
-<div class="box">
-<p class="center">Printed in USA. Price: $1.25 Available from the
-<br />Office of Technical Services
-<br />U. S. Department of Commerce
-<br />Washington 25, D. C.</p>
-</div>
-<div class="box">
-<p class="center"><b>LEGAL NOTICE</b></p>
-<p>This report was prepared as an account of Government sponsored work. Neither the United States,
-nor the Commission, nor any person acting on behalf of the Commission:</p>
-<blockquote>
-<p>A. Makes any warranty or representation, expressed or implied, with respect to the accuracy,
-completeness, or usefulness of the information contained in this report, or that the use of
-any information, apparatus, method, or process disclosed in this report may not infringe
-privately owned rights; or</p>
-<p>B. Assumes any liabilities with respect to the use of, or for damages resulting from the use of
-any information, apparatus, method, or process disclosed in this report.</p>
-</blockquote>
-<p>As used in the above, &ldquo;person acting on behalf of the Commission&rdquo; includes any employee or
-contractor of the Commission, or employee of such contractor, to the extent that such employee
-or contractor of the Commission, or employee of such contractor prepares, disseminates, or
-provides access to, any information pursuant to his employment or contract with the Commission,
-or his employment with such contractor.</p>
-</div>
-<div class="pb" id="Page_i">i</div>
-<p><span class="lr">ORNL-3460</span></p>
-<p class="tbcenter">Contract No. W-7405-eng-26</p>
-<p class="tbcenter">Mathematics Division</p>
-<p class="center">THE OAK RIDGE ALGOL COMPILER FOR THE CONTROL DATA CORPORATION
-<br />1604&mdash;PRELIMINARY PROGRAMMER&rsquo;S MANUAL</p>
-<p class="center">L. L. Bumgarner</p>
-<p class="tbcenter">DATE ISSUED
-<br /><span class="u"><span class="large">JAN 30 1964</span></span></p>
-<p class="tbcenter">OAK RIDGE NATIONAL LABORATORY
-<br />Oak Ridge, Tennessee
-<br />operated by
-<br />UNION CARBIDE CORPORATION
-<br />for the
-<br />U.S. ATOMIC ENERGY COMMISSION</p>
-<div class="pb" id="Page_iii">iii</div>
-<h2 class="center">CONTENTS</h2>
-<dl class="toc">
-<dt><a href="#c1"><span class="cn">I. </span>Introduction</a> 1</dt>
-<dt><a href="#c2"><span class="cn">II. </span>Language Restrictions</a> 2</dt>
-<dt><a href="#c3"><span class="cn">III. </span>Modes of Operation of the Compiler</a> 4</dt>
-<dt><a href="#c4"><span class="cn">IV. </span>Input-Output and Intermediate Tape</a> 5</dt>
-<dd><a href="#c5">Input-Output</a> 5</dd>
-<dd class="ddt"><a href="#c6">READ</a> 5</dd>
-<dd class="ddt"><a href="#c7">PAGE</a> 7</dd>
-<dd><a href="#c8">Lists and the List Declaration</a> 7</dd>
-<dd class="ddt"><a href="#c9">PRINT</a> 9</dd>
-<dd class="ddt"><a href="#c10">WRITE</a> 9</dd>
-<dd class="ddt"><a href="#c11">PUNCH</a> 10</dd>
-<dd><a href="#c12">Formats and the Format Declaration</a> 10</dd>
-<dd class="ddt"><a href="#c13">INPUT</a> 11</dd>
-<dd class="ddt"><a href="#c14">OUTPUT</a> 12</dd>
-<dd><a href="#c15">Intermediate Tape Procedures</a> 13</dd>
-<dd class="ddt"><a href="#c16">BINREAD</a> 13</dd>
-<dd class="ddt"><a href="#c17">BINWRITE</a> 14</dd>
-<dd class="ddt"><a href="#c18">ENDFILE</a> 14</dd>
-<dd class="ddt"><a href="#c19">REWIND</a> 14</dd>
-<dd class="ddt"><a href="#c20">BACKUP</a> 14</dd>
-<dd><a href="#c21">Tape-Checking Procedures</a> 14</dd>
-<dd class="ddt"><a href="#c22">EOF</a> 15</dd>
-<dd class="ddt"><a href="#c23">READERR</a> 15</dd>
-<dd class="ddt"><a href="#c24">WRITERR</a> 15</dd>
-<dt><a href="#c25"><span class="cn">V. </span>The <i>External</i> Declaration</a> 16</dt>
-<dt><a href="#c26"><span class="cn">VI. </span>Standard Procedures</a> 16</dt>
-<dt><a href="#c27"><span class="cn">VII. </span>Error Checking and Diagnostics</a> 17</dt>
-<dt><a href="#c28"><span class="cn">VIII. </span>Running Programs</a> 19</dt>
-<dd><a href="#c29">ALGOL Control System</a> 20</dd>
-<dd><a href="#c30">EOP Card</a> 20</dd>
-<dd><a href="#c31">Compile and Execute: ALGO</a> 21</dd>
-<dd><a href="#c32">PROGRAM Card</a> 22</dd>
-<dd><a href="#c33">Compile/Execute: ALDAP</a> 22</dd>
-<dd><a href="#c34">ALDAP Control Statement</a> 22</dd>
-<dd><a href="#c35">Job Deck: ALDAP Compilation/Execution</a> 23</dd>
-<dd><a href="#c36">Examples</a> 25</dd>
-<dt class="center">APPENDICES</dt>
-<dt><a href="#c37"><span class="cn">A. </span>Adjuncts to Algol 60</a> 30</dt>
-<dt><a href="#c38"><span class="cn">B. </span>Hardware Representation</a> 32</dt>
-<dt><a href="#c39"><span class="cn">C. </span>Structure of Procedure Calling Sequence</a> 35</dt>
-<dt><a href="#c40"><span class="cn">D. </span>Internal Representation of Strings</a> 37</dt>
-<dt><a href="#c41"><span class="cn">E. </span>Program Efficiency</a> 38</dt>
-<dt><a href="#c42"><span class="cn">F. </span>Controversial Features of Algol 60</a> 40</dt>
-<dt><a href="#c43"><span class="cn">G. </span>Fortran Subprograms in an Algol Program</a> 41</dt>
-</dl>
-<div class="pb" id="Page_1">1</div>
-<h2 class="center">THE OAK RIDGE ALGOL COMPILER FOR THE CONTROL DATA CORPORATION 1604&mdash;PRELIMINARY PROGRAMMER&rsquo;S MANUAL</h2>
-<p class="center">L. L. Bumgarner</p>
-<h3 class="center">ABSTRACT</h3>
-<blockquote>
-<p>This document is a preliminary programmer&rsquo;s manual
-for use of the Control Data 1604 Algol Compiler. The compiler
-was constructed by the Programming Research Group of
-the Mathematics Division in cooperation with Control Data
-Corporation. A knowledge of Algol 60 is assumed. Included
-are descriptions of input-output facilities and details for
-operation under the monitor system.</p>
-</blockquote>
-<h2 id="c1">I. <i>Introduction</i></h2>
-<p>This document is to serve as a programmer&rsquo;s manual for the
-Algol compiler constructed as a cooperative project by Control Data
-Corporation and the Mathematics Division of Oak Ridge National Laboratory.
-The compiler is designed for the Control Data 1604 and 1604-A computers.
-The document is preliminary in that the compiler is not thoroughly tested
-and may undergo further development.</p>
-<p>The reader is assumed to be familiar with Algol 60. The
-defining descriptions are the two reports on Algol 60 available in the
-following references:</p>
-<blockquote>
-<p>1. P. Naur et al, &ldquo;Report on the Algorithmic Language Algol 60,&rdquo;
-<i>Comm. Assoc. Comp. Mach., 3</i> (1960), No. 5, 299-314.</p>
-<p>2. P. Naur et al, &ldquo;Revised Report on the Algorithmic Language
-Algol 60,&rdquo; <i>Comm. Assoc. Comp. Mach., 6</i> (1963), No. 1, 1-17.</p>
-</blockquote>
-<p>The second report clears up certain ambiguities that appeared in the
-first report. The reports are not easy reading for the novice. The
-following expositions are more readable:</p>
-<blockquote>
-<div class="pb" id="Page_2">2</div>
-<p>1. Baumann, Bauer, Feliciano and Samelson, <i>Introduction to
-Algol</i>, Prentice-Hall, Inc. (to be published in late 1963).</p>
-<p>2. Bottenbruch, H., &ldquo;Structure and Use of Algol 60,&rdquo; <i>Jour.
-Assoc. Comp. Mach., 9</i> (1962), No. 2, 161-221, and ORNL-3148.</p>
-</blockquote>
-<p>The Baumann publication also contains the revised Algol 60 report.</p>
-<p>Throughout this document various examples of statements and
-declarations appear without the semicolon which is always required for
-separating them. This is to avoid the implication that the semicolon is
-part of the statement or the declaration. In sentences, a comma or period
-may appear where a semicolon or other delimiter would be indicated in the
-context of a program.</p>
-<p>Word delimiters rendered in bold-face type in the Algol report
-are herein indicated by underlining.</p>
-<h2 id="c2">II. <i>Language Restrictions</i></h2>
-<p>The compiler correctly handles programs written in Algol 60
-subject to the following restrictions.</p>
-<p>1. The use of an <i>integer label as an actual parameter</i> will
-cause an incorrect program to be compiled.</p>
-<p>2. A GO TO statement with an <i>undefined switch designator</i> as
-the designational expression will cause incorrect operation of the final
-program.</p>
-<p>3. <i>Type</i> restrictions:</p>
-<blockquote>
-<p>(a) The exponentiation expression <span class="incode">x &uarr; y</span> will have type
-<span class="incode"><i>real</i></span> unless <span class="incode">x</span> is of type <span class="incode"><i>integer</i></span> and <span class="incode">y</span> is a non-negative integer constant.
-This differs slightly from the definition in the Algol report but will
-generally cause no difficulty.</p>
-<div class="pb" id="Page_3">3</div>
-<p>(b) In the construction</p>
-<div class="verse">
-<p class="t0">&lt;if clause> &lt;simple arithmetic expression></p>
-<p class="t0"><i>else</i> &lt;arithmetic expression></p>
-</div>
-<p>the arithmetic expressions must have the same type, or else an incorrect
-program will be compiled. For example, in the statement</p>
-<div class="verse">
-<p class="t0">x := <i>if</i> a &lt; b <i>then</i> z <i>else</i> w</p>
-</div>
-<p><span class="incode">z</span> and <span class="incode">w</span> should both be declared <span class="incode"><i>real</i></span> or both <span class="incode"><i>integer</i></span>.</p>
-<p>(c) In a procedure call (procedure statement or function
-call) each actual parameter having an arithmetic value must have the same
-type as the corresponding formal parameter in the procedure declaration.
-The type of the formal parameter is that designated in the specification
-part if it appears there. If a formal parameter representing an arithmetic
-quantity does not appear in the specification part, it is assumed to be
-specified <span class="incode"><i>real</i></span>. Full use of specifications is desirable for descriptive
-purposes and for optimization.</p>
-<p><i>Caution.</i> Restriction (c) is more likely to cause errors than
-the other restrictions. It is very easy to write <span class="incode">P(1,2)</span> when the parameters
-of <span class="incode">P</span> are specified <span class="incode"><i>real</i></span>, but incorrect coding will result. The call
-<span class="incode">P(1.0,2.0)</span> works correctly.</p>
-<p>4. <i>Standard procedure names</i> (see <a href="#c27">section VI</a>) <i>used as parameters</i>
-in procedure calls will cause an incorrect program to be compiled. A call,
-therefore, such as</p>
-<div class="verse">
-<p class="t0">P(sin)</p>
-</div>
-<p>is incorrect. Note, however, that a call of the type</p>
-<div class="verse">
-<p class="t0">Q(sin(x))</p>
-</div>
-<p>causes no trouble. The case <span class="incode">P(sin)</span> can be programmed in another way.
-<span class="pb" id="Page_4">4</span>
-Make the declaration</p>
-<div class="verse">
-<p class="t0"><i>real procedure</i> sin 1 (t); <i>real</i> t;</p>
-<p class="t0">sin 1 := sin(t).</p>
-</div>
-<p>The call</p>
-<div class="verse">
-<p class="t0">P(sin 1)</p>
-</div>
-<p>is then correct.</p>
-<p>5. <i>Arrays called by value</i> are not handled. If an array
-identifier appears in the value part, an incorrect program will be
-compiled.</p>
-<p>6. <i>&ldquo;Dynamic&rdquo; own arrays</i> are not handled. This means that all
-<span class="incode"><i>own</i></span> arrays are treated as having constant subscript bounds; this constitutes
-one possible interpretation of the Algol 60 report. An <span class="incode"><i>own</i></span> array may be
-declared with variable subscript bounds, but only one allocation of
-storage will be made, and if the bounds change, this will be ignored.</p>
-<p>7. <i>Recursive procedures</i> are not handled. This restriction
-encompasses all cases of a function designator appearing in the actual
-parameter part of a call of the same function, unless that function is
-a standard function. Thus <span class="incode">f(f(x))</span> is not permitted in general, but
-<span class="incode">sin(sin(x))</span> is allowed.</p>
-</blockquote>
-<h2 id="c3">III. <i>Modes of Operation of the Compiler</i></h2>
-<p>There are two distinct modes of operation: ALGO and ALDAP.</p>
-<p>ALGO is a compile-and-execute mode in which the two phases
-cannot be separated. The Algol program is translated into a machine
-language program in core memory, and execution of the program immediately
-and automatically follows. There is no assembly program phase.</p>
-<div class="pb" id="Page_5">5</div>
-<p>ALDAP makes use of the CODAP assembly program facilities.
-It is possible to compile procedures separately and reference them from
-an Algol program. The procedures may be written in Algol, CODAP or
-Fortran. This provision is made possible with the aid of the <span class="incode"><i>external</i></span>
-declaration discussed in <a href="#c25">section V</a>.</p>
-<p>The ALGO mode provides significantly faster compilation than
-the ALDAP mode for most programs. The target programs produced in the
-two modes are essentially the same. In the ALGO mode, program checkout
-may be done at the Algol language level. In the ALDAP mode, checkout
-may also be done at the machine and assembly language levels, and
-modifications may be made at these levels.</p>
-<h2 id="c4">IV. <i>Input-Output and Intermediate Tape</i></h2>
-<p>There are seven standard procedures for input-output, five
-for intermediate tape, and three for checking tape conditions. Two
-declarations, <span class="incode"><i>format</i></span> and <span class="incode"><i>list</i></span>, are additions to the language.</p>
-<h3 id="c5"><i>Input-Output</i></h3>
-<p>The input-output procedures are: <span class="incode">READ</span>, <span class="incode">PAGE</span>, <span class="incode">PRINT</span>, <span class="incode">WRITE</span>,
-<span class="incode">PUNCH</span>, <span class="incode">INPUT</span>, and <span class="incode">OUTPUT</span>.</p>
-<h3 id="c6"><i>READ</i></h3>
-<p>The <span class="incode">READ</span> procedure is used to input numbers and Boolean values.
-A <span class="incode">READ</span> statement has the form</p>
-<div class="verse">
-<p class="t0">READ (V1, V2, ..., Vn)</p>
-</div>
-<p>where <span class="incode">n</span> is any positive integer and each <span class="incode">Vk</span> is a variable. For example,
-the statement</p>
-<div class="verse">
-<p class="t0">READ (X, Y, A[1], B[1])</p>
-</div>
-<div class="pb" id="Page_6">6</div>
-<p>will input values into the four variables listed. For inputing values
-into an array, a statement such as the following might be used:</p>
-<div class="verse">
-<p class="t0"><i>for</i> I := 1 <i>step</i> 1 <i>until</i> 100 <i>do</i> READ (A[I]) .</p>
-</div>
-<p>The <span class="incode">READ</span> procedure inputs numbers and truth values. A number
-must be a legal Algol number (although an <span class="incode">E</span> may be substituted for the
-symbol <span class="incode">&#8321;&#8320;</span>). For input into a Boolean variable, the truth values <span class="incode"><i>true</i></span> and
-<span class="incode"><i>false</i></span> are accepted; also, a non-negative number or a plus sign is
-interpreted as <span class="incode"><i>false</i></span> and a negative number or a minus sign is interpreted
-as <span class="incode"><i>true</i></span>. A blank is read as zero.</p>
-<p>With the <span class="incode">READ</span> procedure, the type of a number on a data card
-does not have to be the same as the type of the variable to which it is
-assigned. Any necessary type conversions are done automatically. If
-<span class="incode">N</span> is the next number in the data, the statement</p>
-<div class="verse">
-<p class="t0">READ (V)</p>
-</div>
-<p>is equivalent to the statement</p>
-<div class="verse">
-<p class="t0">V := N .</p>
-</div>
-<p>The data cards are free field. The number of values per card,
-the length of numbers, and the number of spaces are arbitrary. A comma,
-however, must follow each number, <i>including the last one on the last
-data card</i>.</p>
-<p>In reading a value into a subscripted variable, the current
-value of the subscript expression is not affected by that <span class="incode">READ</span> statement.
-For example, in the statement</p>
-<div class="verse">
-<p class="t0">READ (I, A[I])</p>
-</div>
-<p>the old value of <span class="incode">I</span> is used in <span class="incode">A[I]</span>.</p>
-<div class="pb" id="Page_7">7</div>
-<p>The <span class="incode">READ</span> procedure will input data from the standard input
-medium only.</p>
-<h3 id="c7"><i>PAGE</i></h3>
-<p>The <span class="incode">PAGE</span> procedure is used to cause a page ejection on the
-standard output medium. <span class="incode">PAGE</span> has no parameters. It is called by simply
-writing</p>
-<div class="verse">
-<p class="t0">PAGE .</p>
-</div>
-<h3 id="c8"><i>Lists and the List Declaration</i></h3>
-<p>The input and output procedures described in the rest of this
-section, as well as the binary read and write procedures, make use of
-the concept of a list. A <span class="incode"><i>list</i></span><a class="fn" href="#fn_1">[1]</a> is a sequence of expressions. An
-example is</p>
-<div class="verse">
-<p class="t0">U + V, C[0], <i>if</i> B <i>then</i> X <i>else</i> Y .</p>
-</div>
-<p>It may be inconvenient in some cases to write down all of the
-expressions explicitly. The
-<i>loop expression</i><a class="fn" id="fr_1" href="#fn_1">[1]</a>
-may be used as a shorthand
-device in a list. It is an Algol-like construction of which the
-following is an example:</p>
-<div class="verse">
-<p class="t0"><i>for</i> I := 1 <i>step</i> 1 <i>until</i> 1000 <i>do</i> A[I] .</p>
-</div>
-<p>This is equivalent to the list</p>
-<div class="verse">
-<p class="t0">A[1], A[2], ..., A[1000] .</p>
-</div>
-<p>The entity following <span class="incode"><i>do</i></span> in a loop expression may itself be a list, but
-this list must be enclosed in parentheses if it contains more than one
-member.</p>
-<p>The loop expression</p>
-<div class="verse">
-<p class="t0"><i>for</i> I := 1 <i>step</i> 1 <i>until</i> 1000 <i>do</i> (A[I], B[I])</p>
-</div>
-<div class="pb" id="Page_8">8</div>
-<p>is equivalent to the list</p>
-<div class="verse">
-<p class="t0">A[1], B[1], A[2], B[2], ..., A[1000], B[1000] .</p>
-</div>
-<p>The loop expression</p>
-<div class="verse">
-<p class="t0"><i>for</i> I := 1 <i>step</i> 1 <i>until</i> 10 <i>do</i> (A[I], for J := 1</p>
-<p class="t0"><i>step</i> 1 <i>until</i> 20 <i>do</i> B[I,J])</p>
-</div>
-<p>is equivalent to the list</p>
-<div class="verse">
-<p class="t0">A[1], B[1,1], B[1,2], ..., B[1,20],</p>
-<p class="t0">A[2], B[2,1], B[2,2], ..., B[2,20],</p>
-<p class="t0">....................................</p>
-<p class="t0">A[10], B[10,1], B[10,2], ..., B[10,20] .</p>
-</div>
-<p>A list may be given a name through a list declaration. A list
-declaration has the form</p>
-<div class="verse">
-<p class="t0"><i>list</i> identifier := list .</p>
-</div>
-<p>Examples are:</p>
-<div class="verse">
-<p class="t0"><i>list</i> L := X, A + B</p>
-</div>
-<div class="verse">
-<p class="t0"><i>list</i> M := <i>for</i> I := 1 <i>step</i> 1 <i>until</i> N <i>do</i> A[I] .</p>
-</div>
-<p>A list identifier may itself appear in a list. One of the above examples
-might be written with the aid of the following declaration:</p>
-<div class="verse">
-<p class="t0"><i>list</i> L := <i>for</i> J := 1 <i>step</i> 1 <i>until</i> 20 <i>do</i> B[I,J] .</p>
-</div>
-<p>The loop expression is then</p>
-<div class="verse">
-<p class="t0"><i>for</i> I:= 1 <i>step</i> 1 <i>until</i> 10 <i>do</i> (A[I], L) .</p>
-</div>
-<p>A list declaration obeys the same rules of syntax and scope as do other
-declarations.</p>
-<p>A list identifier may be used as an actual parameter of a
-procedure call, with the requirement that the corresponding formal
-parameter be specified <span class="incode"><i>list</i></span>. However, an actual list may appear as a
-parameter only in calls of the standard procedures, as described.</p>
-<div class="pb" id="Page_9">9</div>
-<h3 id="c9"><i>PRINT</i></h3>
-<p>The <span class="incode">PRINT</span> procedure is used to output numbers in a simple,
-rigid manner. <span class="incode">A PRINT</span> statement has the form</p>
-<div class="verse">
-<p class="t0">PRINT (list),</p>
-</div>
-<p>where list is described above. An example of a <span class="incode">PRINT</span> statement is</p>
-<div class="verse">
-<p class="t0">PRINT (A, <i>if</i> N = 0 <i>then</i> S <i>else</i> T).</p>
-</div>
-<p>A <span class="incode">PRINT</span> statement always puts out at least one line printer
-image. A line may contain up to 6 numbers, each of which is in scientific
-notation with 10 decimal places. Each number is right-justified in a
-field of 20 columns. (The format is 6E20.10.) The above <span class="incode">PRINT</span> statement
-will output two numbers in the first forty spaces, and the rest
-of the line will be blank. A <span class="incode">PRINT</span> statement such as</p>
-<div class="verse">
-<p class="t0">PRINT (<i>for</i> I := 1 <i>step</i> 1 <i>until</i> 10 <i>do</i> A[I])</p>
-</div>
-<p>will output one line of 6 numbers followed by one line of 4 numbers.
-Single spacing between lines is automatic.</p>
-<p>The <span class="incode">PRINT</span> procedure always outputs on the standard output
-medium.</p>
-<h3 id="c10"><i>WRITE</i></h3>
-<p>The <span class="incode">WRITE</span> procedure is used to output strings. Examples of
-<span class="incode">WRITE</span> statements are:</p>
-<div class="verse">
-<p class="t0">WRITE ('TABLE')</p>
-</div>
-<div class="verse">
-<p class="t0">WRITE (<i>if</i> D &lt; 0 <i>then</i> 'TRUE' <i>else</i> 'FALSE') .</p>
-</div>
-<p>Each parameter must be a string expression (see <a href="#c37">Appendix A</a> for definition
-of string expression). There may be any number of parameters, but each
-string will appear on a separate line. If a string is too long to go
-on one line, it will be continued on the next line. A string should not
-<span class="pb" id="Page_10">10</span>
-contain another string. Lines are single spaced. Each <span class="incode">WRITE</span> statement
-causes at least one line printer image to be put out.</p>
-<p>The <span class="incode">WRITE</span> procedure always outputs on the standard output
-medium.</p>
-<h3 id="c11"><i>PUNCH</i></h3>
-<p>The <span class="incode">PUNCH</span> procedure is used to output numbers on punched cards
-in a form which can be input by the <span class="incode">READ</span> procedure. Each number punched
-will be followed by a comma. Each card punched may contain up to four
-numbers. Each number will be of type <span class="incode"><i>real</i></span>, but since the <span class="incode">READ</span> procedure
-makes any necessary type conversions this is unimportant. A <span class="incode">PUNCH</span> statement
-has the same form as a <span class="incode">PRINT</span> statement. Each <span class="incode">PUNCH</span> statement causes
-at least one card image to be put out.</p>
-<p>The <span class="incode">PUNCH</span> procedure always outputs on the standard punch medium.</p>
-<h3 id="c12"><i>Formats and the Format Declaration</i></h3>
-<p>The two input and output procedures remaining to be described
-make use of formats. The formats are exactly those used in Fortran, and
-readers unfamiliar with Fortran will find it necessary to refer to the
-Control Data Fortran-62 Reference Manual for details on the use of formats.</p>
-<p>A format is treated as a string. Formats will be written, for
-example, as follows:</p>
-<div class="verse">
-<p class="t0">'(6E20.10)'</p>
-</div>
-<div class="verse">
-<p class="t0">'(1H0, 9X, 5HTABLE, I3)' .</p>
-</div>
-<p>Note that the parentheses are part of the format, and <i>both parentheses
-and string quotes are required</i>.</p>
-<p>As will be indicated below, a format string may appear
-explicitly in an <span class="incode">INPUT</span> or <span class="incode">OUTPUT</span> statement. If the same format string
-<span class="pb" id="Page_11">11</span>
-is used more than once, however, it may be convenient to give it a name
-through a format declaration. A format declaration has the form</p>
-<div class="verse">
-<p class="t0"><i>format</i> Identifier := '(Fortran format)' .</p>
-</div>
-<p>Examples are:</p>
-<div class="verse">
-<p class="t0"><i>format</i> F := '(6E20.10)'</p>
-</div>
-<div class="verse">
-<p class="t0"><i>format</i> G := '(1H0, 9X, 5HTABLE, I3)' .</p>
-</div>
-<p>A format declaration obeys the same rules of syntax and scope as do
-other declarations.</p>
-<p>Format identifiers may be used as parameters, and <span class="incode"><i>format</i></span> is a
-specifier.</p>
-<h3 id="c13"><i>INPUT</i></h3>
-<p>The <span class="incode">INPUT</span> procedure is used to input numbers and Hollerith
-information in accordance with Fortran-type formats. An <span class="incode">INPUT</span> statement
-has one of the forms</p>
-<div class="verse">
-<p class="t0">INPUT (M,F,list)</p>
-</div>
-<div class="verse">
-<p class="t0">INPUT (M,F)</p>
-</div>
-<p>where:</p>
-<p>(1) <span class="incode">M</span> is the logical unit designation. <span class="incode">M</span> may be any arithmetic
-expression. If it is not integral-valued, the action</p>
-<div class="verse">
-<p class="t0">M := entier (M + 0.5)</p>
-</div>
-<p>will take place. The standard input unit is 50.</p>
-<p>(2) <span class="incode">F</span> is a format expression. It may be an actual format
-string, a format identifier, a conditional format expression, or any
-variable which contains the starting address of a format string.
-<i>Caution.</i> In the case of a conditional format expression, format strings
-and format identifiers should not be mixed. For example, (a) and (b)
-<span class="pb" id="Page_12">12</span>
-below are permitted, but (c) will cause an incorrect program to be
-compiled:</p>
-<div class="verse">
-<p class="t0">(a) <i>if</i> B <i>then</i> '(E20.7)' <i>else</i> '(E20.6)'</p>
-<p class="t0">(b) <i>if</i> B <i>then</i> F1 <i>else</i> F2</p>
-<p class="t0">(c) <i>if</i> B <i>then</i> F1 <i>else</i> '(E20.6)' .</p>
-</div>
-<p>(3) <span class="incode">list</span> is as defined previously. Of course, for <span class="incode">INPUT</span> all
-expressions must be variables.</p>
-<p>The following are examples of an <span class="incode">INPUT</span> statement:</p>
-<div class="verse">
-<p class="t0">INPUT (50, '(4E20.8)', N, <i>for</i> I := 1 <i>step</i> 1 <i>until</i> N <i>do</i> A[I]).</p>
-</div>
-<div class="verse">
-<p class="t0">INPUT (<i>if</i> A &lt; B <i>then</i> M <i>else</i> N, F, X, Y, Z) .</p>
-</div>
-<p>Each <span class="incode">INPUT</span> statement causes at least one card image to be read.</p>
-<p>Note that the <span class="incode">INPUT</span> procedure does not make type checks
-between the data and the program variables. A floating point number,
-for example, is stored as such regardless of the type of the variable to
-which it is assigned.</p>
-<p><i>Caution.</i> It is strongly recommended that not both <span class="incode">READ</span> and <span class="incode">INPUT</span> be used
-in the same program. Each buffers ahead one card image. Furthermore,
-each <span class="incode">INPUT</span> statement causes at least one card image to be read while a
-<span class="incode">READ</span> statement may not cause a new card image to be read. Mixing the
-two statements will require quite careful use of blank cards in the data
-to allow for the buffering.</p>
-<h3 id="c14"><i>OUTPUT</i></h3>
-<p>The <span class="incode">OUTPUT</span> procedure is used to output numbers and Hollerith
-information in accordance with Fortran-type formats. An <span class="incode">OUTPUT</span> statement
-has one of the forms</p>
-<div class="pb" id="Page_13">13</div>
-<div class="verse">
-<p class="t0">OUTPUT (M,F)</p>
-<p class="t0">OUTPUT (M,F,list)</p>
-</div>
-<p>where <span class="incode">M</span>, <span class="incode">F</span>, and <span class="incode">list</span> are as indicated above. The following are examples
-of <span class="incode">OUTPUT</span> statements:</p>
-<div class="verse">
-<p class="t0">OUTPUT (51, '(5HTABLE)')</p>
-</div>
-<div class="verse">
-<p class="t0">OUTPUT (51, '(1H0,9X,10E10.2)', <i>for</i> I := 1 <i>step</i> 1 <i>until</i> 100 <i>do</i> A[I]) .</p>
-</div>
-<p>Each <span class="incode">OUTPUT</span> statement causes at least one line printer image
-to be put out. The standard output unit is 51, and the standard punch
-unit is 52.</p>
-<h3 id="c15"><i>Intermediate Tape Procedures</i></h3>
-<p>There are five standard procedures for making use of magnetic
-tape for auxiliary storage:</p>
-<p><span class="incode">BINREAD</span>, <span class="incode">BINWRITE</span>, <span class="incode">ENDFILE</span>, <span class="incode">REWIND</span> and <span class="incode">BACKUP</span>.</p>
-<h3 id="c16"><i>BINREAD</i></h3>
-<p>A <span class="incode">BINREAD</span> statement has the form</p>
-<div class="verse">
-<p class="t0">BINREAD (M, list)</p>
-</div>
-<p>where <span class="incode">M</span> and <span class="incode">list</span> are the same as for <span class="incode">INPUT</span>. Each <span class="incode">BINREAD</span> statement
-causes the designated unit to move forward one logical record, reading
-in binary format into the variables of the list. If fewer variables
-appear in the list than are on the record, only those values are read
-and the tape moves on to the end of the record. If more variables
-appear in the list than are on the record, this is treated as an error
-and the program is terminated.</p>
-<p>The following is an example of a <span class="incode">BINREAD</span> statement:</p>
-<div class="verse">
-<p class="t0">BINREAD (6, <i>for</i> I := 1 <i>step</i> 1 <i>until</i> 1000 <i>do</i> A[I]) .</p>
-</div>
-<div class="pb" id="Page_14">14</div>
-<h3 id="c17"><i>BINWRITE</i></h3>
-<p>A BINWRITE statement has the form</p>
-<div class="verse">
-<p class="t0">BINWRITE (M, list)</p>
-</div>
-<p>where <span class="incode">M</span> and <span class="incode">list</span> are the same as for <span class="incode">OUTPUT</span>. Each <span class="incode">BINWRITE</span> statement
-causes the values of the list expressions to be written in one logical
-record in binary format on the designated unit.</p>
-<h3 id="c18"><i>ENDFILE</i></h3>
-<p>An <span class="incode">ENDFILE</span> statement has the form</p>
-<div class="verse">
-<p class="t0">ENDFILE (M)</p>
-</div>
-<p>where <span class="incode">M</span> is a unit designation as before. The statement causes an end-of-file
-record to be written on the designated unit.</p>
-<h3 id="c19"><i>REWIND</i></h3>
-<p>A REWIND statement has the form</p>
-<div class="verse">
-<p class="t0">REWIND (M)</p>
-</div>
-<p>where <span class="incode">M</span> is a unit designation as before. The statement causes the
-designated unit to be rewound to the load point.</p>
-<h3 id="c20"><i>BACKUP</i></h3>
-<p>A <span class="incode">BACKUP</span> statement has the form</p>
-<div class="verse">
-<p class="t0">BACKUP (M)</p>
-</div>
-<p>where <span class="incode">M</span> is a unit designation as before. The statement causes the designated
-unit to be backspaced one logical record of binary information or
-one physical record of BCD information.</p>
-<h3 id="c21"><i>Tape-Checking Procedures</i></h3>
-<p>The checking procedures are: <span class="incode">EOF</span>, <span class="incode">READERR</span>, and <span class="incode">WRITERR</span>. These
-are Boolean procedures.</p>
-<div class="pb" id="Page_15">15</div>
-<h3 id="c22"><i>EOF</i></h3>
-<p>An <span class="incode">EOF</span> call has the form</p>
-<div class="verse">
-<p class="t0">EOF (M)</p>
-</div>
-<p>where <span class="incode">M</span> is a logical unit designation as before. It yields the value
-<span class="incode"><i>true</i></span> if the previous read operation encountered an end-of-file or the
-previous write operation encountered an end-of-tape; otherwise it yields
-the value <span class="incode"><i>false</i></span>.</p>
-<p>An example of the use of an <span class="incode">EOF</span> call is:</p>
-<div class="verse">
-<p class="t0"><i>if</i> EOF(6) <i>then</i> <i>goto</i> ALARM .</p>
-</div>
-<h3 id="c23"><i>READERR</i></h3>
-<p>A <span class="incode">READERR</span> call has the form</p>
-<div class="verse">
-<p class="t0">READERR (M)</p>
-</div>
-<p>where <span class="incode">M</span> is a logical unit designation as before. It yields the value
-<span class="incode"><i>true</i></span> if the previous read operation produced a parity error; otherwise
-it yields the value <span class="incode"><i>false</i></span>.</p>
-<p><span class="incode">READERR</span> should not be used for testing the operation of a <span class="incode">READ</span>
-statement. The <span class="incode">READ</span> procedure has its own facilities for checking,
-making multiple attempts in case of errors, and terminating the program
-if necessary.</p>
-<h3 id="c24"><i>WRITERR</i></h3>
-<p>A <span class="incode">WRITERR</span> call has the form</p>
-<div class="verse">
-<p class="t0">WRITERR (M)</p>
-</div>
-<p>where <span class="incode">M</span> is a logical unit designation as before. It yields the value
-<span class="incode"><i>true</i></span> if the previous write operation produced a parity error; otherwise
-it yields the value <span class="incode"><i>false</i></span>.</p>
-<div class="pb" id="Page_16">16</div>
-<h2 id="c25">V. <i>The External Declaration</i></h2>
-<p>An <span class="incode"><i>external</i></span> declaration is required for each nonstandard
-library procedure or procedure compiled separately from the calling
-program, whether in Algol, Fortran or CODAP. Standard Algol procedures
-are described in <a href="#c26">Section VI</a>. Note that a CODAP subroutine must take
-account of the special structure of the Algol calling sequence as
-described in <a href="#c39">Appendix C</a> or be treated as a Fortran subprogram. The use
-of Fortran subprograms is described in <a href="#c43">Appendix G</a>.</p>
-<p>The <i>external</i> declaration has one of the following forms:</p>
-<div class="verse">
-<p class="t0"><i>external</i> I1, ..., In</p>
-<p class="t0"><i>real</i> <i>external</i> I1, ..., In</p>
-<p class="t0"><i>integer</i> <i>external</i> I1, ..., In</p>
-<p class="t0"><i>Boolean</i> <i>external</i> I1, ..., In</p>
-</div>
-<p>where each <span class="incode">Ik</span> is an identifier and <span class="incode">n</span> is any positive integer. A type
-declarator preceding the declarator <span class="incode"><i>external</i></span> signifies a function procedure
-having that type. Note that no information about parameters
-appears in an <span class="incode"><i>external</i></span> declaration. See <a href="#c37">Appendix A</a> for syntactical
-definition.</p>
-<p>In the ALGO mode, LIB cards must be included in the job deck
-for nonstandard library routines, in addition to the <span class="incode"><i>external</i></span> declarations.
-Details are found in <a href="#c28">Section VIII</a>.</p>
-<h2 id="c26">VI. <i>Standard Procedures</i></h2>
-<p>Certain procedures are used without being declared. These
-include the standard functions listed in the Algol 60 report and the
-input-output and intermediate tape procedures. The complete list is as
-follows:</p>
-<div class="pb" id="Page_17">17</div>
-<div class="verse">
-<p class="t0">ABS</p>
-<p class="t0">SIGN</p>
-<p class="t0">SQRT</p>
-<p class="t0">SIN</p>
-<p class="t0">COS</p>
-<p class="t0">ARCTAN</p>
-<p class="t0">LN</p>
-<p class="t0">EXP</p>
-<p class="t0">ENTIER</p>
-<p class="t0">EOF</p>
-<p class="t0">READERR</p>
-<p class="t0">WRITERR</p>
-<p class="t0">FORTRANF</p>
-<p class="t0">FTNF</p>
-<p class="t0">READ</p>
-<p class="t0">PAGE</p>
-<p class="t0">PRINT</p>
-<p class="t0">WRITE</p>
-<p class="t0">PUNCH</p>
-<p class="t0">INPUT</p>
-<p class="t0">OUTPUT</p>
-<p class="t0">BINREAD</p>
-<p class="t0">BINWRITE</p>
-<p class="t0">ENDFILE</p>
-<p class="t0">REWIND</p>
-<p class="t0">BACKUP</p>
-<p class="t0">FORTRAN</p>
-<p class="t0">FTN</p>
-</div>
-<p>These procedures are global to the program. They behave as
-though declared in a fictitious block surrounding the entire program.</p>
-<h2 id="c27">VII. <i>Error Checking and Diagnostics</i></h2>
-<p>In a complete compilation the compiler makes two passes on the
-Algol source program. If errors which the compiler cannot correct are
-detected in the first pass, then the second, or translation, pass will
-not be made. The following types of errors are detected:</p>
-<dl class="undent"><dt>1. syntactical error</dt>
-<dt>2. undeclared identifier</dt>
-<dt>3. identifier declared twice in the same block head</dt>
-<dt>4. misspelled delimiter (corrected in many cases)</dt>
-<dt>5. missing escape symbol (corrected unless both are missing for the same delimiter, in which case the delimiter is treated as an identifier).</dt></dl>
-<div class="pb" id="Page_18">18</div>
-<p>The program listing and any diagnostics always appear on the
-standard output medium. In the case of a syntactical error, a message
-will appear in the program listing one or several lines below the error.
-The location of the error in the program will be further pinpointed in
-the line of symbols immediately below the error message. This line will
-be a short portion of the program with the last symbol in the line being
-the one which indicates the error. For example, a declaration might be
-out of place as follows:</p>
-<div class="verse">
-<p class="t9">.</p>
-<p class="t9">.</p>
-<p class="t9">.</p>
-<p class="t4">x := a + b; 'INTEGER' K;</p>
-</div>
-<div class="verse">
-<p class="t0">**** LAST CHARACTER INDICATES SYNTACTICAL ERROR.</p>
-</div>
-<div class="verse">
-<p class="t0">x := a + b; INTEGER</p>
-<p class="t8">.</p>
-<p class="t8">.</p>
-<p class="t8">.</p>
-</div>
-<p>In some cases the line below the message may differ slightly from the
-corresponding string of symbols above; for example, an identifier might
-be rendered by Ident. It is possible for a single syntactical error to
-cause more than one diagnostic.</p>
-<p>A few syntactical errors are corrected by the compiler, and
-a message is put out to this effect. An example is a semicolon
-immediately preceding <span class="incode"><i>else</i></span>.</p>
-<p>According to the comment conventions of Algol, any string of
-symbols following <span class="incode"><i>end</i></span> and not containing <span class="incode"><i>end</i></span>, <span class="incode"><i>else</i></span> or a semicolon is
-<span class="pb" id="Page_19">19</span>
-treated as comment. As a result, the omission of one of these symbols
-following <span class="incode"><i>end</i></span> does not always cause an error in compilation but will
-cause a portion of the program to be skipped over by the compiler. Thus
-for example, in</p>
-<div class="verse">
-<p class="t0">... x := a + b <i>end</i> <i>for</i> i := 1 <i>step</i> 1 ...</p>
-</div>
-<p>the FOR statement will be skipped at least in part. The compiler will
-put out a caution message in this and some other cases, but it will not
-change the program.</p>
-<p>If an identifier is not declared (or possibly declared in the
-wrong place), a message is put out below the program listing together
-with the undeclared identifier.</p>
-<p>The compiler does not check the type of identifiers. Therefore,
-such errors as a Boolean variable in an arithmetic expression, or the
-brackets of a subscripted variable replaced by parentheses, are not
-detected, and an incorrect program may be compiled.</p>
-<h2 id="c28">VIII. <i>Running Programs</i></h2>
-<p>The Algol program is punched on cards in the hardware representation
-described in <a href="#c38">Appendix B</a>. The format is essentially free field:
-spaces have no significance except within escape symbols and string
-quotes. <i>Only the first 72 columns, however, are interpreted by the
-compiler.</i> The remaining columns may be used for identification purposes.
-Care must be taken when a string is continued onto the next card, as
-<i>the continuation will begin in column 1</i>. The program listing will have
-the same format as the cards.</p>
-<div class="pb" id="Page_20">20</div>
-<p>In the following discussion the symbol &Oslash; signifies the letter
-O where necessary for emphasis, and the symbol &Delta; signifies a 7-9 punch
-in card column 1.</p>
-<h3 id="c29"><i>ALGOL Control System</i></h3>
-<p>The compiler operates under the ALGOL Control System. This
-system is a subordinate control routine of the Master Control System of
-the CO-OP Monitor Programming System. ALGOL is quite similar to the
-subordinate control routine COOP.</p>
-<p>ALGOL is called with an MCS (Master Control System) card having
-ALGOL punched beginning in column 2. Other details of this card are
-available in descriptions of the CO-OP Monitor. It should be noted in
-selecting a standard recovery procedure that the concept of COMMON is
-not used in Algol.</p>
-<p>Following the MCS card will be a control card giving
-instructions to the control routine ALGOL. It will name one of the
-following routines: ALGO, ALDAP, EXECUTE, BINARY, FORTRAN, REWIND or
-DEFINE. These will be discussed below.</p>
-<h3 id="c30"><i>EOP Card</i></h3>
-<p>The EOP (end-of-program) card has the characters <span class="incode">'E&Oslash;P'</span> punched
-in columns 10-14.</p>
-<p>In the ALGO mode, one EOP card must be used to terminate the
-program.</p>
-<p>In the ALDAP mode, one EOP card must be used to terminate each
-Algol program or Algol procedure being compiled separately.</p>
-<div class="pb" id="Page_21">21</div>
-<h3 id="c31"><i>Compile and Execute: ALGO</i></h3>
-<p>The ALGO mode of running an Algol program is the simplest and
-the fastest. It will be the more suitable for a large number of programs.
-Unless the programmer has special reasons for using the ALDAP mode, the
-ALGO mode is recommended.</p>
-<p>The Algol program must be self-contained except for standard
-procedures and library procedures on the library-systems tape. The job
-deck must have the following cards in the specified order:</p>
-<dl class="undent"><dt>1. MCS control card.</dt>
-<dd class="t">The subordinate control routine name must be ALG&Oslash;L.</dd>
-<dt>2. ALGOL control card.</dt>
-<dd class="t">This will appear as</dd>
-<dd class="t"><span class="incode">&Delta;ALG&Oslash;.</span> or <span class="incode">&Delta;ALG&Oslash;,t.</span> where <span class="incode">t</span> is an integer specifying a time limit in minutes for compilation and execution.</dd>
-<dd class="t">(The period is required on every control card.)</dd>
-<dt>3. LIB cards.</dt>
-<dd class="t">If necessary. One LIB card is required for each non-standard library procedure called in the program, namely those declared <span class="incode"><i>external</i></span>. The format of a LIB card is as follows: the characters LIB punched in columns 10-12 and the name of a library entry point beginning in column 20. There may be no more than 20 LIB cards.</dd>
-<dt>4. PROGRAM card.</dt>
-<dd class="t">If desired. This may be used to identify the program. Its format is described in the next paragraph.</dd>
-<dt>5. Algol program deck.</dt>
-<dt>6. EOP card.</dt>
-<dt>7. Data.</dt>
-<dd class="t">If required.</dd></dl>
-<div class="pb" id="Page_22">22</div>
-<h3 id="c32"><i>PROGRAM Card</i></h3>
-<p>The PROGRAM card is optional. It is useful for identification
-purposes, and in the ALDAP mode it serves to name the program entry
-point.</p>
-<p>The format of the card is free field. The characters <span class="incode">PR&Oslash;GRAM</span>
-must appear followed by the program name, which must be alphanumeric.</p>
-<h3 id="c33"><i>Compile/Execute: ALDAP</i></h3>
-<p>The ALDAP mode is used to compile an Algol program or procedure
-to a relocatable binary or a CODAP format. Execution is
-optional. For compilation only, the program deck may consist of any
-mixture of Algol programs and procedures, any number of which may be
-in CODAP. If execution is desired, part or all of the program deck
-may have been previously compiled, so that the deck may have Algol,
-CODAP and relocatable binary cards.</p>
-<h3 id="c34"><i>ALDAP Control Statement</i></h3>
-<p>The format of the ALDAP statement is:</p>
-<div class="verse">
-<p class="t0">&Delta;ALDAP,L,B,n.</p>
-</div>
-<p>where</p>
-<dl class="undent"><dd><span class="incode">L</span> is a program listing key,</dd>
-<dd><span class="incode">B</span> is a punched card output key,</dd>
-<dd><span class="incode">n</span> is a logical unit number.</dd></dl>
-<p>A period may terminate the statement at any point, with remaining fields
-treated as zero.</p>
-<p>If the program listing key (<span class="incode">L</span>) is a 1, an assembled listing of
-the CODAP object code will be produced on the standard output medium.
-If the key is zero or blank, no such listing will be produced. A listing
-<span class="pb" id="Page_23">23</span>
-of the Algol program and any diagnostics will always be produced on the
-standard output medium.</p>
-<p>If the punched card output key (<span class="incode">B</span>) is a 1, a relocatable binary
-deck will be produced on the standard punch medium. If the key is a 2,
-a CODAP symbolic deck will be produced on the standard punch medium.
-If the key is a 3, both a symbolic deck and a relocatable binary deck
-will be produced on the standard punch medium, with the symbolic deck
-appearing first. If the key is zero or blank, no deck will be produced.</p>
-<p>The logical unit number (<span class="incode">n</span>) specifies the unit which is to be
-the load-and-go tape if it is one of the integers 1-49 or 56. If <span class="incode">n</span> is
-some other integer or blank, no load-and-go tape will be written. The
-load-and-go tape is required when execution of the program is to follow.</p>
-<p>Examples:</p>
-<dl class="undent"><dt>(a) <span class="incode">&Delta;ALDAP, 1, 1, 56.</span></dt></dl>
-<p>This statement will cause the Algol/CODAP deck to be compiled, an
-assembled listing to be produced on the standard output medium, a
-relocatable binary deck to be produced on the standard punch medium,
-and a load-and-go tape written on logical unit 56.</p>
-<dl class="undent"><dt>(b) <span class="incode">&Delta;ALDAP, 1.</span></dt></dl>
-<p>This statement will cause the Algol/CODAP deck to be compiled, and an
-assembled listing to be produced on the standard output medium.</p>
-<h3 id="c35"><i>Job Deck: ALDAP Compilation/Execution</i></h3>
-<p>For <i>compilation only</i> of an Algol/CODAP program deck, the
-job deck should contain the following cards in the specified order:</p>
-<div class="pb" id="Page_24">24</div>
-<dl class="undent"><dt>1. MCS control card.</dt>
-<dd class="t">With ALG&Oslash;L as the subordinate control routine name.</dd>
-<dt>2. ALGOL control card.</dt>
-<dd class="t">With the appropriate ALDAP control statement.</dd>
-<dt>3. PROGRAM card.</dt>
-<dd class="t">If desired.</dd>
-<dt>4. Program deck.</dt>
-<dd class="t">Any mixture of Algol and CODAP programs and procedures, with all their subroutines except the standard procedures and those on the library-systems tape. <i>Each Algol program or procedure must be terminated by an EOP card.</i></dd>
-<dt>5. FINIS card.</dt>
-<dd class="t">This card contains the characters <span class="incode">FINIS</span> punched in columns 10-14. It signals the end of all compilations.</dd></dl>
-<p>For <i>compilation and execution</i> of an Algol/CODAP program deck,
-a load-and-go tape must be requested in the ALDAP control statement. If
-no relocatable binary cards follow the last subprogram to be compiled,
-then the program deck must be terminated by an EOP card which is <i>in
-addition to</i> the EOP card or END card (the latter for a CODAP
-subprogram) which terminates the last program or procedure. The FINIS
-card then follows this additional EOP card. An EOP card always causes
-a TRA card image to be written on the load-and-go tape.</p>
-<p>The control statements EXECUTE, BINARY, FORTRAN, REWIND and
-DEFINE may be used as described in the &ldquo;CO-OP Monitor Programmer&rsquo;s
-Guide&rdquo;. BINARY is useful for loading a relocatable binary deck onto the
-load-and-go tape prior to compilation of an Algol calling program, where
-the subprogram in relocatable form might have the same name as a library
-routine. If the Algol program preceded the relocatable deck, the library
-routine would be fetched by the loader and an error indication given.</p>
-<div class="pb" id="Page_25">25</div>
-<p>The CO-OP control statements LOAD and EXECUTER are not used
-by ALGOL.</p>
-<h3 id="c36"><i>Examples</i></h3>
-<p>Each of the following examples describes a job deck which
-illustrates a different way of compiling and executing the same Algol
-program. The program calls a library procedure with entry point named
-BESSEL, and the program contains at least one other procedure. On the
-MCS card only the first field is indicated, as the others may vary from
-one installation to another.</p>
-<h4 id="cs1"><i>Example 1</i></h4>
-<p>This job uses the ALG&Oslash; mode.</p>
-<div class="verse">
-<p class="t0">&Delta;ALG&Oslash;L, ... .</p>
-</div>
-<div class="verse">
-<p class="t0">&Delta;ALG&Oslash;.</p>
-</div>
-<div class="verse">
-<p class="t4">LIB BESSEL</p>
-</div>
-<div class="verse">
-<p class="t3">PR&Oslash;GRAM SAMPLE</p>
-</div>
-<div class="verse">
-<p class="t3">Algol Program (with <i>external</i> declaration of BESSEL)</p>
-</div>
-<div class="verse">
-<p class="t4">'E&Oslash;P'</p>
-</div>
-<div class="verse">
-<p class="t3">Data</p>
-</div>
-<h4 id="cs2"><i>Example 2</i></h4>
-<p>This job uses the ALDAP mode, compiling the entire program at
-once. The ALDAP control statement calls for an assembled listing, a
-binary deck, and a load-and-go tape on logical unit 56. The execute
-card gives a two minute time limit on the execution.</p>
-<div class="pb" id="Page_26">26</div>
-<div class="verse">
-<p class="t0">&Delta;ALG&Oslash;L, ... .</p>
-</div>
-<div class="verse">
-<p class="t0">&Delta;ALDAP,1,1,56.</p>
-</div>
-<div class="verse">
-<p class="t3">PR&Oslash;GRAM SAMPLE</p>
-</div>
-<div class="verse">
-<p class="t3">Algol Program (with <i>external</i> declaration of BESSEL)</p>
-</div>
-<div class="verse">
-<p class="t4">'E&Oslash;P'</p>
-</div>
-<div class="verse">
-<p class="t4">'E&Oslash;P'</p>
-</div>
-<div class="verse">
-<p class="t4">FINIS</p>
-</div>
-<div class="verse">
-<p class="t0">&Delta;EXECUTE,2.</p>
-</div>
-<div class="verse">
-<p class="t3">Data</p>
-</div>
-<h4 id="cs3"><i>Example 3</i></h4>
-<p>This job consists simply of the execution of the relocatable
-program deck obtained in <a href="#cs2">example 2</a>.</p>
-<div class="verse">
-<p class="t0">&Delta;ALG&Oslash;L, ... .</p>
-</div>
-<div class="verse">
-<p class="t0">&Delta;EXECUTE,2.</p>
-</div>
-<div class="verse">
-<p class="t3">Relocatable Deck</p>
-</div>
-<div class="verse">
-<p class="t3">Data</p>
-</div>
-<h4 id="cs4"><i>Example 4</i></h4>
-<p>This example is similar to <a href="#cs2">example 2</a>. Here the main program
-and one of its procedures are to be compiled separately.</p>
-<div class="pb" id="Page_27">27</div>
-<div class="verse">
-<p class="t0">&Delta;ALG&Oslash;L, ... .</p>
-</div>
-<div class="verse">
-<p class="t0">&Delta;ALDAP,1,1,56.</p>
-</div>
-<div class="verse">
-<p class="t3">PR&Oslash;GRAM SAMPLE</p>
-</div>
-<div class="verse">
-<p class="t3">Algol Program (with <i>external</i> declaration of both BESSEL and the procedure being compiled separately)</p>
-</div>
-<div class="verse">
-<p class="t4">'E&Oslash;P'</p>
-</div>
-<div class="verse">
-<p class="t3">Algol Procedure</p>
-</div>
-<div class="verse">
-<p class="t4">'E&Oslash;P'</p>
-</div>
-<div class="verse">
-<p class="t4">'E&Oslash;P'</p>
-</div>
-<div class="verse">
-<p class="t4">FINIS</p>
-</div>
-<div class="verse">
-<p class="t0">&Delta;EXECUTE,2.</p>
-</div>
-<div class="verse">
-<p class="t3">Data</p>
-</div>
-<h4 id="cs5"><i>Example 5</i></h4>
-<p>In this example the procedure which was compiled separately
-in <a href="#cs4">example 4</a> is being compiled by itself, i.e., the calling program is
-not in the deck at all. Of course there is no execution in this case.
-Note that no load-and-go tape is requested and only one EOP card is
-used. There cannot be a PROGRAM card.</p>
-<div class="verse">
-<p class="t0">&Delta;ALG&Oslash;L, ... .</p>
-</div>
-<div class="verse">
-<p class="t0">&Delta;ALDAP,1,1.</p>
-</div>
-<div class="verse">
-<p class="t3">Algol Procedure</p>
-</div>
-<div class="verse">
-<p class="t4">'E&Oslash;P'</p>
-</div>
-<div class="verse">
-<p class="t4">FINIS</p>
-</div>
-<div class="pb" id="Page_28">28</div>
-<h4 id="cs6"><i>Example 6</i></h4>
-<p>Here the procedure compiled by itself in <a href="#cs5">example 5</a> appears in
-the program deck in relocatable binary form, while the calling program
-is in the Algol language.</p>
-<div class="verse">
-<p class="t0">&Delta;ALG&Oslash;L, ... .</p>
-</div>
-<div class="verse">
-<p class="t0">&Delta;ALDAP,1,1,56.</p>
-</div>
-<div class="verse">
-<p class="t3">PR&Oslash;GRAM SAMPLE</p>
-</div>
-<div class="verse">
-<p class="t3">Algol Program (with <i>external</i> declaration of both BESSEL and the procedure in relocatable form)</p>
-</div>
-<div class="verse">
-<p class="t4">'E&Oslash;P'</p>
-</div>
-<div class="verse">
-<p class="t4">FINIS</p>
-</div>
-<div class="verse">
-<p class="t0">&Delta;EXECUTE,2.</p>
-</div>
-<div class="verse">
-<p class="t3">Relocatable Deck</p>
-</div>
-<div class="verse">
-<p class="t3">Data</p>
-</div>
-<p>The relocatable deck here must be terminated by two TRA cards. One of
-these is generated by the compiler when it processes the EOP card which
-must terminate the procedure for compilation, as in <a href="#cs5">example 5</a>. The
-second TRA card can be obtained by using a second EOP card, as in
-<a href="#cs2">example 2</a>. Alternatively, the second TRA card can be added to the
-relocatable deck before execution. Note that this second TRA card must
-not be used when the relocatable deck is loaded by a BINARY control
-statement. This is illustrated in the next example.</p>
-<h4 id="cs7"><i>Example 7</i></h4>
-<p>In this case the previously compiled procedure has the same
-name as a routine on the library-systems tape.</p>
-<div class="pb" id="Page_29">29</div>
-<div class="verse">
-<p class="t0">&Delta;ALG&Oslash;L, ... .</p>
-</div>
-<div class="verse">
-<p class="t0">&Delta;BINARY,56.</p>
-</div>
-<div class="verse">
-<p class="t3">Relocatable Deck (terminated by one TRA card)</p>
-</div>
-<div class="verse">
-<p class="t0">&Delta;ALDAP,1,1,56.</p>
-</div>
-<div class="verse">
-<p class="t3">PR&Oslash;GRAM SAMPLE</p>
-</div>
-<div class="verse">
-<p class="t3">Algol Program (with <i>external</i> declaration of both BESSEL and the procedure in relocatable form)</p>
-</div>
-<div class="verse">
-<p class="t4">'E&Oslash;P'</p>
-</div>
-<div class="verse">
-<p class="t4">'E&Oslash;P'</p>
-</div>
-<div class="verse">
-<p class="t3">FINIS</p>
-</div>
-<div class="verse">
-<p class="t0">&Delta;EXECUTE, 2.</p>
-</div>
-<div class="verse">
-<p class="t3">Data</p>
-</div>
-<p>The logical unit number on the BINARY control statement must agree with
-that which specifies the load-and-go tape in the ALDAP control statement.</p>
-<div class="pb" id="Page_30">30</div>
-<h2 class="center" id="c37">APPENDIX A
-<br /><span class="small">Adjuncts to Algol 60</span></h2>
-<h3 class="center"><i>List Entities</i></h3>
-<p>The delimiter <i>list</i> is a declarator and a specifier.</p>
-<div class="verse">
-<p class="t0">&lt;list identifier> ::= &lt;identifier></p>
-</div>
-<div class="verse">
-<p class="t0">&lt;loop expression> ::= &lt;for clause> &lt;arithmetic expression></p>
-<p class="t3">| &lt;for clause> &lt;loop expression></p>
-<p class="t3">| &lt;for clause> (&lt;list>)</p>
-</div>
-<div class="verse">
-<p class="t0">&lt;list element> ::= &lt;arithmetic expression></p>
-<p class="t3">| &lt;loop expression></p>
-<p class="t3">| &lt;list identifier></p>
-</div>
-<div class="verse">
-<p class="t0">&lt;list> ::= &lt;list element></p>
-<p class="t3">| &lt;list>, &lt;list element></p>
-</div>
-<div class="verse">
-<p class="t0">&lt;list declaration> ::= <i>list</i> &lt;list identifier> := &lt;list></p>
-</div>
-<h3 class="center"><i>Format Entities</i></h3>
-<p>The delimiter <span class="incode"><i>format</i></span> is a declarator and a specifier.</p>
-<div class="verse">
-<p class="t0">&lt;format identifier> ::= &lt;identifier></p>
-</div>
-<div class="verse">
-<p class="t0">&lt;simple format expression> ::='(&lt;Fortran format><a class="fn" id="fr_2" href="#fn_2">[2]</a>)'</p>
-<p class="t3">| &lt;format identifier></p>
-</div>
-<div class="verse">
-<p class="t0">&lt;format expression> ::= &lt;simple format expression></p>
-<p class="t3">| &lt;if clause> &lt;simple format expression></p>
-<p class="t4"><i>else</i> &lt;format expression></p>
-</div>
-<div class="verse">
-<p class="t0">&lt;format declaration> ::= <i>format</i> &lt;format identifier> := &lt;format expression></p>
-</div>
-<div class="pb" id="Page_31">31</div>
-<h3 class="center"><i>String Expression</i></h3>
-<div class="verse">
-<p class="t0">&lt;string expression> ::= &lt;string></p>
-<p class="t3">| &lt;if clause> &lt;string></p>
-<p class="t4"><i>else</i> &lt;string expression></p>
-</div>
-<h3 class="center"><i>External Declaration</i></h3>
-<p>The delimiter <span class="incode"><i>external</i></span> is a declarator.</p>
-<div class="verse">
-<p class="t0">&lt;external identifier> ::= &lt;identifier></p>
-</div>
-<div class="verse">
-<p class="t0">&lt;external list> ::= &lt;external identifier></p>
-<p class="t3">| &lt;external identifier>, &lt;external list></p>
-</div>
-<div class="verse">
-<p class="t0">&lt;external declaration> ::= <i>external</i> &lt;external list></p>
-<p class="t3">| &lt;type> <i>external</i> &lt;external list></p>
-</div>
-<div class="pb" id="Page_32">32</div>
-<h2 class="center" id="c38">APPENDIX B
-<br /><span class="small">Hardware Representation</span></h2>
-<p>One keypunch character is reserved as an &ldquo;escape symbol&rdquo;,
-which we shall here suppose is the apostrophe. This symbol is used to
-delineate word delimiters and truth values, which are written in boldface
-type in Algol reference language and publication language and
-indicated by underlining in this manual. The hardware representation
-of a word delimiter such as <span class="incode"><i>begin</i></span> is therefore <span class="incode">'BEGIN'</span>.
-No distinction
-is made between upper and lower case letters in the hardware language.</p>
-<p>The transliteration rules for the non-word delimiters are
-comprised in the following table. This assumes a 48 character hardware
-set and is consistent with the usage in the ALCOR group. For some
-basic symbols alternatives are tolerated, as indicated.</p>
-<table class="center">
-<tr><th><i>Reference</i> </th><th class="c"><i>Hardware</i> </th><th class="c"><i>Tolerated Hardware</i></th></tr>
-<tr><td class="c">&lt; </td><td class="c">'LS' </td><td class="c">'LESS'</td></tr>
-<tr><td class="c">&le; </td><td class="c">'LQ' </td><td class="c">'LSEQ', 'NOTGREATER', 'NOT GREATER'</td></tr>
-<tr><td class="c">= </td><td class="c">'EQ' </td><td class="c">'EQUAL'</td></tr>
-<tr><td class="c">&ge; </td><td class="c">'GQ' </td><td class="c">'GREQ', 'NOTLESS', 'NOT LESS'</td></tr>
-<tr><td class="c">> </td><td class="c">'GR' </td><td class="c">'GREATER'</td></tr>
-<tr><td class="c">&ne; </td><td class="c">'NQ' </td><td class="c">'NTEQ', 'NOTEQUAL', 'NOT EQUAL'</td></tr>
-<tr><td class="c">&not; </td><td class="c">'NOT'</td></tr>
-<tr><td class="c">&#8743; </td><td class="c">'AND'</td></tr>
-<tr><td class="c">&#8744; </td><td class="c">'OR'</td></tr>
-<tr><td class="c">&sup; </td><td class="c">'IMP' </td><td class="c">'IMPLIES', 'IMPL'</td></tr>
-<tr><td class="c">&equiv; </td><td class="c">'EQV' </td><td class="c">'EQUIV'</td></tr>
-<tr><td class="c">&#8321;&#8320; </td><td class="c">' </td><td class="c">'E','T'</td></tr>
-<tr><td class="c">&times; </td><td class="c">*</td></tr>
-<tr><td class="c">&uarr; </td><td class="c">** </td><td class="c">'POWER'</td></tr>
-<tr><td class="c">&divide; </td><td class="c">// </td><td class="c">'DIV'</td></tr>
-<tr><td class="c">: </td><td class="c">..</td></tr>
-<tr><td class="c">; </td><td class="c">$ </td><td class="c">.,</td></tr>
-<tr><td class="c">:= </td><td class="c">= </td><td class="c">.=, ..=</td></tr>
-<tr><td class="c">[ </td><td class="c">(/</td></tr>
-<tr><td class="c">] </td><td class="c">/)</td></tr>
-<tr><td class="c">&lsquo; </td><td class="c">" </td><td class="c">'('</td></tr>
-<tr><td class="c">&rsquo; </td><td class="c">" </td><td class="c">')'</td></tr>
-</table>
-<div class="pb" id="Page_33">33</div>
-<p>In the case of the string quotes, the tolerated symbols are required for
-the inner strings of a nest of strings.</p>
-<p>Actually, the compiler can tolerate many other spellings of
-word delimiters because of its facility for correcting misspellings.</p>
-<p>The delimiter <span class="incode"><i>go to</i></span> is accepted with or without the space
-between the two words, but it is treated as a single delimiter: <span class="incode">'GOTO'</span>
-or <span class="incode">'GO TO'</span>.</p>
-<p>The compiler can also accept a 64 character hardware representation:
-the full set available on the line printer. In preparing
-programs, overpunching is used on the 48 character keypunch in this case.
-The table below indicates the keypunching rules in use at Oak Ridge
-National Laboratory.</p>
-<div class="pb" id="Page_34">34</div>
-<table class="center">
-<tr><th><i>Reference</i> </th><th class="c"><i>Hardware</i></th></tr>
-<tr><td class="c">&lt; </td><td class="c">1-8 punch</td></tr>
-<tr><td class="c">&le; </td><td class="c">1-5 punch</td></tr>
-<tr><td class="c">&ge; </td><td class="c">1-9 punch</td></tr>
-<tr><td class="c">> </td><td class="c">2-7 punch</td></tr>
-<tr><td class="c">&ne; </td><td class="c">2-6 punch</td></tr>
-<tr><td class="c">&#8743; </td><td class="c">3-7 punch</td></tr>
-<tr><td class="c">&#8744; </td><td class="c">2-4 punch</td></tr>
-<tr><td class="c">&#8321;&#8320; </td><td class="c">1-6 punch</td></tr>
-<tr><td class="c">&uarr; </td><td class="c">2-5 punch</td></tr>
-<tr><td class="c">&divide; </td><td class="c">3-5 punch</td></tr>
-<tr><td class="c">: </td><td class="c">2-8 punch</td></tr>
-<tr><td class="c">; </td><td class="c">2-9 punch</td></tr>
-<tr><td class="c">[ </td><td class="c">3-6 punch</td></tr>
-<tr><td class="c">] </td><td class="c">3-4 punch</td></tr>
-</table>
-<p>The other basic symbols are either in the 48 character set or are
-replaced by word delimiters as above. The symbol <span class="incode">:=</span> is treated as two
-symbols in the 64 character set, and <span class="incode">=</span> is punched as such.</p>
-<div class="pb" id="Page_35">35</div>
-<h2 class="center" id="c39">APPENDIX C
-<br /><span class="small">Structure of Procedure Calling Sequence</span></h2>
-<p>The following information is necessary for the user writing a
-non-Algol procedure to be called from an Algol program. The calling
-sequence differs from that found in many other languages.</p>
-<p>The first word of the non-Algol procedure must have a simple
-jump instruction in its upper half, and the exit line is provided by a
-jump to this first word. The entry automatically causes the proper
-return address to be placed in the address portion of the first half-word.</p>
-<p>Upon entry to the procedure, index register six contains an
-address which is used to reference each parameter. To establish linkage
-with the first parameter, the instruction</p>
-<div class="verse">
-<p class="t0">LDA 6 0</p>
-</div>
-<p>is performed. This brings into the accumulator a word of one of the
-following types:</p>
-<div class="verse">
-<p class="t0">1. SLJ 0 ENA V</p>
-<p class="t0">2. SLJ 0 RTJ L</p>
-</div>
-<p>In case (1), <span class="incode">V</span> is the address of the parameter. In case (2), <span class="incode">L</span> is the
-starting address of a piece of coding for computing the address of the
-parameter and leaving it in the accumulator (if the parameter is an
-expression, the address in the accumulator will be that of a temporary
-containing its value). Case (1) always holds if the parameter is a
-simple variable, string, array identifier, switch identifier, or
-procedure identifier. In case (2) the same temporary will be used for
-all the expressions.</p>
-<div class="pb" id="Page_36">36</div>
-<p>Both cases can be provided for by setting aside two locations
-for each parameter in the procedure body and placing the instruction</p>
-<div class="verse">
-<p class="t0">SLJ *-1</p>
-</div>
-<p>in the upper half of each second location. Then after</p>
-<div class="verse">
-<p class="t0">LDA 6 0</p>
-</div>
-<p>mentioned above,</p>
-<div class="verse">
-<p class="t0">STA RES1,</p>
-</div>
-<p>where <span class="incode">RES1</span> is the first reserved location for the first parameter, makes
-the two locations into a closed subroutine. After this, the instruction</p>
-<div class="verse">
-<p class="t0">RTJ RES1</p>
-</div>
-<p>causes the address of the first parameter to be placed in the accumulator
-anytime it is performed. This accommodates expressions called by name.</p>
-<p>In general, the K<sup>th</sup> parameter is referenced as above, but
-beginning with</p>
-<div class="verse">
-<p class="t0">LDA 6 (K - 1).</p>
-</div>
-<p>This description does not apply to the standard procedures, each of
-which has its own special calling sequence.</p>
-<div class="pb" id="Page_37">37</div>
-<h2 class="center" id="c40">APPENDIX D
-<br /><span class="small">Internal Representation of Strings</span></h2>
-<p>The address representing a string is that of the first word of
-string characters. Each left string quote is represented internally by
-the word</p>
-<div class="verse">
-<p class="t0">00 ... 03454 ,</p>
-</div>
-<p>and each right string quote by</p>
-<div class="verse">
-<p class="t0">00 ... 05474 .</p>
-</div>
-<p>The characters of the string which are not string quotes are packed in
-BCD eight characters per word. These words are in the natural order,
-the first immediately following the left string quote and the last
-immediately followed by the right string quote. If the last word before
-a right quote is not full, the rest of that word is filled out with
-zeros (not BCD blanks).</p>
-<div class="pb" id="Page_38">38</div>
-<h2 class="center" id="c41">APPENDIX E
-<br /><span class="small">Program Efficiency</span></h2>
-<p>The following information may be of interest to programmers
-desiring an efficient program:</p>
-<blockquote>
-<p>1. The FOR statement is defined with more generality than
-is useful in most programs. In particular, the
-arithmetic expressions in the FOR clause are allowed
-to change in value during execution of the FOR statement.
-The compiler does not attempt to determine which
-FOR statements make use of this flexibility and treats
-all of them in the most general way. Therefore, in a
-statement such as</p>
-</blockquote>
-<div class="verse">
-<p class="t0"><i>for</i> I := 1 <i>step</i> M + N <i>until</i> abs(A - B) <i>do</i> ... ,</p>
-</div>
-<blockquote>
-<p>the expression <span class="incode">M + N</span> is evaluated twice for each iteration,
-and the expression <span class="incode">abs(A - B)</span> is evaluated once for each
-iteration. If <span class="incode">M</span>, <span class="incode">N</span>, <span class="incode">A</span>, and <span class="incode">B</span> do not change in the loop,
-this is unnecessary. Such inefficiency can be avoided
-by programming in a slightly different way. The above
-example can be written as follows:</p>
-</blockquote>
-<div class="verse">
-<p class="t0">T1 := M + N; T2 := abs(A - B) ;</p>
-<p class="t0"><i>for</i> I := 1 <i>step</i> T1 <i>until</i> T2 <i>do</i> ... .</p>
-</div>
-<blockquote>
-<div class="pb" id="Page_39">39</div>
-<p>2. The concept of call by value is a device applied to procedures
-to eliminate unneeded flexibility in procedure
-calls. If a parameter having a value is referenced more
-than once in the procedure body and the flexibility of
-call by name is not needed, then the program is more
-efficient if the parameter is included in the value
-part of the procedure heading. If such a parameter
-is referenced only once, it is more efficient if it
-is not included in the value part.</p>
-<p>3. Array identifiers which are parameters should be specified.</p>
-</blockquote>
-<div class="pb" id="Page_40">40</div>
-<h2 class="center" id="c42">APPENDIX F
-<br /><span class="small">Controversial Features of Algol 60</span></h2>
-<p>A few features of the language have been subject to more than
-one interpretation. Fortunately, the vast majority of programs will not
-involve these ambiguities, but for the few that do it will be necessary
-to know what decisions the compiler makes. This appendix indicates these
-decisions for the more controversial areas.</p>
-<blockquote>
-<p>1. Side effects in function designators. The evaluation
-of primaries in expressions is not strictly left to
-right allowing for precedence rules. In particular,
-the value of a variable in an expression is never
-stored in a temporary simply to preserve its value
-from change by the evaluation of a function designator
-in the expression. Otherwise, the evaluation
-does proceed from left to right and according to
-precedence rules, including the referencing of
-formal parameters and the calculation of the address
-of subscripted variables. All function designators
-are evaluated in Boolean expressions.</p>
-<p>2. <i>Own</i> variables and arrays in procedures. The <span class="incode"><i>own</i></span>
-quantities local to the body of a procedure which is
-called from more than one point in a program record
-the history of the procedure as opposed to a history
-of each point of reference. In other words, only one
-copy of the <span class="incode"><i>own</i></span> quantities is preserved.</p>
-</blockquote>
-<div class="pb" id="Page_41">41</div>
-<h2 class="center" id="c43">APPENDIX G
-<br /><span class="small">Fortran Subprograms in an Algol Program</span></h2>
-<p>The standard procedures FORTRAN, FORTRANF, FTN, and FTNF are
-used to call compiled Fortran subroutines and functions from within an
-Algol program. Each procedure has one parameter which is a call of the
-desired Fortran subprogram. The Fortran subprogram must be declared
-<span class="incode"><i>external</i></span> as described in <a href="#c25">Section V</a>.</p>
-<p>The use of these procedures simply causes a Fortran calling
-sequence to be generated by the compiler. Of course the subprogram
-could be written in CODAP as well as Fortran, provided it is designed
-to link through a Fortran-type calling sequence.</p>
-<p>The procedures are used as follows:</p>
-<dl class="undent"><dt>FORTRAN&mdash;generates a Fortran 62 calling sequence for a subroutine</dt>
-<dt>FORTRANF&mdash;generates a Fortran 62 calling sequence for a function</dt>
-<dt>FTN&mdash;generates a Fortran 63 calling sequence for a subroutine</dt>
-<dt>FTNF&mdash;generates a Fortran 63 calling sequence for a function</dt></dl>
-<p>Each of these procedures is standard, i.e., available without declaration.
-FORTRANF and FTNF are used in expressions.</p>
-<p>Examples:</p>
-<div class="verse">
-<p class="t0">x := FTNF (ALPHA(T,A[0,0]))</p>
-</div>
-<div class="verse">
-<p class="t0">FORTRAN (SUB(I + J)) .</p>
-</div>
-<p>The following restrictions must be observed: labels, procedures
-with no parameters, standard procedure names, and array names cannot be
-used as arguments of a call of a Fortran subprogram. However, in the
-case of an array, the subscripted variable which is the first element of
-<span class="pb" id="Page_42">42</span>
-the array will satisfy a Fortran subroutine which has an array name as
-a formal parameter. The name of the Fortran subprogram cannot be a
-formal parameter. Literals must be enclosed in string quotes.</p>
-<h2>Footnotes</h2>
-<div class="fnblock"><div class="fndef"><a class="fn" id="fn_1" href="#fr_1">[1]</a>See <a href="#c37">Appendix A</a> for syntactical definition.
-</div><div class="fndef"><a class="fn" id="fn_2" href="#fr_2">[2]</a>For definition of Fortran format, see Control Data Fortran-62 Reference Manual.
-</div>
-</div>
-<div class="pb" id="Page_43">43</div>
-<h3 id="c44"><i>Acknowledgment</i></h3>
-<p>The author was greatly assisted in the preparation of this
-document by several persons who have contributed labors or advice to
-the construction of the compiler. These include N. B. Alexander and
-A. A. Grau, also K. A. Wolf of Control Data Corporation, and especially
-R. G. Stueland of Control Data Corporation.</p>
-<div class="pb" id="Page_45">45</div>
-<p class="center">ORNL-3460
-<br />UC-32&mdash;Mathematics and Computers
-<br />TID-4500 (23rd ed.)</p>
-<h4 id="cs8">INTERNAL DISTRIBUTION</h4>
-<dl class="undent"><dt>1. Biology Library</dt>
-<dt>2-4. Central Research Library</dt>
-<dt>5. Reactor Division Library</dt>
-<dt>6-7. ORNL--Y-12 Technical Library Document Reference Section</dt>
-<dt>8-27. Laboratory Records Department</dt>
-<dt>28. Laboratory Records, ORNL R.C.</dt>
-<dt>29. R. K. Adams</dt>
-<dt>30. Nancy Alexander</dt>
-<dt>31. E. D. Arnold</dt>
-<dt>32. Don Arnurius</dt>
-<dt>33. George J. Atta</dt>
-<dt>34. Susie E. Atta</dt>
-<dt>35. S. J. Ball</dt>
-<dt>36. J. E. Bigelow</dt>
-<dt>37. R. E. Biggers</dt>
-<dt>38. Craig Brandon</dt>
-<dt>39. J. C. Bresee</dt>
-<dt>40-41. L. L. Bumgarner</dt>
-<dt>42. W. R. Burrus</dt>
-<dt>43. H. P. Carter</dt>
-<dt>44. D. K. Cavin</dt>
-<dt>45. Arline Culkowski</dt>
-<dt>46. W. Davis, Jr.</dt>
-<dt>47. H. J. de Bruin</dt>
-<dt>48. P. B. DeNee</dt>
-<dt>49. A. C. Downing</dt>
-<dt>50. L. C. Emerson</dt>
-<dt>51. Margaret Emmett</dt>
-<dt>52. R. L. Ferguson</dt>
-<dt>53. B. R. Fish</dt>
-<dt>54. P. A. Haas</dt>
-<dt>55. M. Feliciano</dt>
-<dt>56. Barbara Ann Flores</dt>
-<dt>57. T. B. Fowler</dt>
-<dt>58. R. E. Funderlic (K-25)</dt>
-<dt>59. D. A. Gardiner</dt>
-<dt>60. C. D. Griffies</dt>
-<dt>61. D. A. Griffin</dt>
-<dt>62. D. G. Gosslee</dt>
-<dt>63. M. T. Harkrider</dt>
-<dt>64. M. C. Hill</dt>
-<dt>65. A. S. Householder</dt>
-<dt>66. W. H. Jordan</dt>
-<dt>67. H. W. Joy</dt>
-<dt>68. F. B. K. Kam</dt>
-<dt>69. George Kidd</dt>
-<dt>70. L. J. King</dt>
-<dt>71. Ann Klein</dt>
-<dt>72. K. A. Kraus</dt>
-<dt>73. C. E. Larson</dt>
-<dt>74. M. E. LaVerne</dt>
-<dt>75. Elmon Leach</dt>
-<dt>76. R. P. Leinius</dt>
-<dt>77-78. M. P. Lietzke</dt>
-<dt>79. Erlie McDaniel</dt>
-<dt>80. C. D. Martin</dt>
-<dt>81. K. O. Martin</dt>
-<dt>82. Betty F. Maskewitz</dt>
-<dt>83. R. P. Milford</dt>
-<dt>84. F. L. Miller, Jr.</dt>
-<dt>85. R. V. Miskell</dt>
-<dt>86. S. E. Moore</dt>
-<dt>87. J. F. Murdock</dt>
-<dt>88. C. W. Nestor, Jr.</dt>
-<dt>89. V. K. Pare</dt>
-<dt>90. Carl E. Parker</dt>
-<dt>91. S. K. Penny</dt>
-<dt>92. A. M. Perry</dt>
-<dt>93. D. C. Ramsey</dt>
-<dt>94. M. T. Robinson</dt>
-<dt>95. R. M. Rush</dt>
-<dt>96. Y. Shima</dt>
-<dt>97. J. E. Simpkins</dt>
-<dt>98. M. J. Skinner</dt>
-<dt>99. C. D. Scott</dt>
-<dt>100. C. D. Susano</dt>
-<dt>101. J. A. Swartout</dt>
-<dt>102. M. E. Tsagaris</dt>
-<dt>103. D. K. Trubey</dt>
-<dt>104. J. S. Watson</dt>
-<dt>105. A. M. Weinberg</dt>
-<dt>106. M. E. Whatley</dt>
-<dt>107. C. S. Williams</dt>
-<dt>108. H. A. Wright</dt>
-<dt>109. Y-12 Central Files</dt>
-<dt>110. J. H. Zeigler (K-25)</dt>
-<dt>111. H. Zeldes</dt></dl>
-<div class="pb" id="Page_46">46</div>
-<h4 id="cs9">EXTERNAL DISTRIBUTION</h4>
-<dl class="undent"><dt>112. T. H. Elrod, Control Data Corporation, Computer Division, 3330 Hillview Avenue, Palo Alto, California</dt>
-<dt>113. A. A. Grau, Department of Mathematics, Northwestern University, Evanston, Illinois</dt>
-<dt>114. R. G. Stueland, Control Data Corporation, Computer Division, 3330 Hillview Avenue, Palo Alto, California</dt>
-<dt>115. K. A. Wolf, Control Data Corporation, Programing Systems, 501 Park Avenue, Minneapolis 15, Minnesota</dt>
-<dt>116. R. A. Zemlin, Control Data Corporation, Computer Division, 3330 Hillview Avenue, Palo Alto, California</dt>
-<dt>117. Research and Development Division, AEC, ORO</dt>
-<dt>118-728. Given distribution as shown in TID-4500 (23rd ed.) under Mathematics and Computers category (75 copies--OTS)</dt></dl>
-<h2>Transcriber&rsquo;s Notes</h2>
-<dl class="undent"><dt>In the HTML version, represented code in a <span class="incode">monospaced</span> font, with keywords in <span class="incode"><i>boldface</i></span> as in the <i>Revised Report</i>.</dt>
-<dt>Corrected a few palpable typos.</dt>
-<dt>Created an original cover image, using elements from the printed book, for free and unrestricted use with this eBook.</dt></dl>
-
-
-
-
-
-
-
-<pre>
-
-
-
-
-
-End of the Project Gutenberg EBook of The Oak Ridge ALGOL Compiler for the
-Control Data Corporation 1604, by L. L. Bumgarner
-
-*** END OF THIS PROJECT GUTENBERG EBOOK THE OAK RIDGE ALGOL COMPILER ***
-
-***** This file should be named 50468-h.htm or 50468-h.zip *****
-This and all associated files of various formats will be found in:
- http://www.gutenberg.org/5/0/4/6/50468/
-
-Produced by David Starner, Stephen Hutcheson, and the
-Online Distributed Proofreading Team at http://www.pgdp.net
-(This book was produced from images made available by the
-HathiTrust Digital Library.)
-
-Updated editions will replace the previous one--the old editions will
-be renamed.
-
-Creating the works from print editions not protected by U.S. copyright
-law means that no one owns a United States copyright in these works,
-so the Foundation (and you!) can copy and distribute it in the United
-States without permission and without paying copyright
-royalties. Special rules, set forth in the General Terms of Use part
-of this license, apply to copying and distributing Project
-Gutenberg-tm electronic works to protect the PROJECT GUTENBERG-tm
-concept and trademark. Project Gutenberg is a registered trademark,
-and may not be used if you charge for the eBooks, unless you receive
-specific permission. If you do not charge anything for copies of this
-eBook, complying with the rules is very easy. You may use this eBook
-for nearly any purpose such as creation of derivative works, reports,
-performances and research. They may be modified and printed and given
-away--you may do practically ANYTHING in the United States with eBooks
-not protected by U.S. copyright law. Redistribution is subject to the
-trademark license, especially commercial redistribution.
-
-START: FULL LICENSE
-
-THE FULL PROJECT GUTENBERG LICENSE
-PLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK
-
-To protect the Project Gutenberg-tm mission of promoting the free
-distribution of electronic works, by using or distributing this work
-(or any other work associated in any way with the phrase "Project
-Gutenberg"), you agree to comply with all the terms of the Full
-Project Gutenberg-tm License available with this file or online at
-www.gutenberg.org/license.
-
-Section 1. General Terms of Use and Redistributing Project
-Gutenberg-tm electronic works
-
-1.A. By reading or using any part of this Project Gutenberg-tm
-electronic work, you indicate that you have read, understand, agree to
-and accept all the terms of this license and intellectual property
-(trademark/copyright) agreement. If you do not agree to abide by all
-the terms of this agreement, you must cease using and return or
-destroy all copies of Project Gutenberg-tm electronic works in your
-possession. If you paid a fee for obtaining a copy of or access to a
-Project Gutenberg-tm electronic work and you do not agree to be bound
-by the terms of this agreement, you may obtain a refund from the
-person or entity to whom you paid the fee as set forth in paragraph
-1.E.8.
-
-1.B. "Project Gutenberg" is a registered trademark. It may only be
-used on or associated in any way with an electronic work by people who
-agree to be bound by the terms of this agreement. There are a few
-things that you can do with most Project Gutenberg-tm electronic works
-even without complying with the full terms of this agreement. See
-paragraph 1.C below. There are a lot of things you can do with Project
-Gutenberg-tm electronic works if you follow the terms of this
-agreement and help preserve free future access to Project Gutenberg-tm
-electronic works. See paragraph 1.E below.
-
-1.C. The Project Gutenberg Literary Archive Foundation ("the
-Foundation" or PGLAF), owns a compilation copyright in the collection
-of Project Gutenberg-tm electronic works. Nearly all the individual
-works in the collection are in the public domain in the United
-States. If an individual work is unprotected by copyright law in the
-United States and you are located in the United States, we do not
-claim a right to prevent you from copying, distributing, performing,
-displaying or creating derivative works based on the work as long as
-all references to Project Gutenberg are removed. Of course, we hope
-that you will support the Project Gutenberg-tm mission of promoting
-free access to electronic works by freely sharing Project Gutenberg-tm
-works in compliance with the terms of this agreement for keeping the
-Project Gutenberg-tm name associated with the work. You can easily
-comply with the terms of this agreement by keeping this work in the
-same format with its attached full Project Gutenberg-tm License when
-you share it without charge with others.
-
-1.D. The copyright laws of the place where you are located also govern
-what you can do with this work. Copyright laws in most countries are
-in a constant state of change. If you are outside the United States,
-check the laws of your country in addition to the terms of this
-agreement before downloading, copying, displaying, performing,
-distributing or creating derivative works based on this work or any
-other Project Gutenberg-tm work. The Foundation makes no
-representations concerning the copyright status of any work in any
-country outside the United States.
-
-1.E. Unless you have removed all references to Project Gutenberg:
-
-1.E.1. The following sentence, with active links to, or other
-immediate access to, the full Project Gutenberg-tm License must appear
-prominently whenever any copy of a Project Gutenberg-tm work (any work
-on which the phrase "Project Gutenberg" appears, or with which the
-phrase "Project Gutenberg" is associated) is accessed, displayed,
-performed, viewed, copied or distributed:
-
- This eBook is for the use of anyone anywhere in the United States and
- most other parts of the world at no cost and with almost no
- restrictions whatsoever. You may copy it, give it away or re-use it
- under the terms of the Project Gutenberg License included with this
- eBook or online at www.gutenberg.org. If you are not located in the
- United States, you'll have to check the laws of the country where you
- are located before using this ebook.
-
-1.E.2. If an individual Project Gutenberg-tm electronic work is
-derived from texts not protected by U.S. copyright law (does not
-contain a notice indicating that it is posted with permission of the
-copyright holder), the work can be copied and distributed to anyone in
-the United States without paying any fees or charges. If you are
-redistributing or providing access to a work with the phrase "Project
-Gutenberg" associated with or appearing on the work, you must comply
-either with the requirements of paragraphs 1.E.1 through 1.E.7 or
-obtain permission for the use of the work and the Project Gutenberg-tm
-trademark as set forth in paragraphs 1.E.8 or 1.E.9.
-
-1.E.3. If an individual Project Gutenberg-tm electronic work is posted
-with the permission of the copyright holder, your use and distribution
-must comply with both paragraphs 1.E.1 through 1.E.7 and any
-additional terms imposed by the copyright holder. Additional terms
-will be linked to the Project Gutenberg-tm License for all works
-posted with the permission of the copyright holder found at the
-beginning of this work.
-
-1.E.4. Do not unlink or detach or remove the full Project Gutenberg-tm
-License terms from this work, or any files containing a part of this
-work or any other work associated with Project Gutenberg-tm.
-
-1.E.5. Do not copy, display, perform, distribute or redistribute this
-electronic work, or any part of this electronic work, without
-prominently displaying the sentence set forth in paragraph 1.E.1 with
-active links or immediate access to the full terms of the Project
-Gutenberg-tm License.
-
-1.E.6. You may convert to and distribute this work in any binary,
-compressed, marked up, nonproprietary or proprietary form, including
-any word processing or hypertext form. However, if you provide access
-to or distribute copies of a Project Gutenberg-tm work in a format
-other than "Plain Vanilla ASCII" or other format used in the official
-version posted on the official Project Gutenberg-tm web site
-(www.gutenberg.org), you must, at no additional cost, fee or expense
-to the user, provide a copy, a means of exporting a copy, or a means
-of obtaining a copy upon request, of the work in its original "Plain
-Vanilla ASCII" or other form. Any alternate format must include the
-full Project Gutenberg-tm License as specified in paragraph 1.E.1.
-
-1.E.7. Do not charge a fee for access to, viewing, displaying,
-performing, copying or distributing any Project Gutenberg-tm works
-unless you comply with paragraph 1.E.8 or 1.E.9.
-
-1.E.8. You may charge a reasonable fee for copies of or providing
-access to or distributing Project Gutenberg-tm electronic works
-provided that
-
-* You pay a royalty fee of 20% of the gross profits you derive from
- the use of Project Gutenberg-tm works calculated using the method
- you already use to calculate your applicable taxes. The fee is owed
- to the owner of the Project Gutenberg-tm trademark, but he has
- agreed to donate royalties under this paragraph to the Project
- Gutenberg Literary Archive Foundation. Royalty payments must be paid
- within 60 days following each date on which you prepare (or are
- legally required to prepare) your periodic tax returns. Royalty
- payments should be clearly marked as such and sent to the Project
- Gutenberg Literary Archive Foundation at the address specified in
- Section 4, "Information about donations to the Project Gutenberg
- Literary Archive Foundation."
-
-* You provide a full refund of any money paid by a user who notifies
- you in writing (or by e-mail) within 30 days of receipt that s/he
- does not agree to the terms of the full Project Gutenberg-tm
- License. You must require such a user to return or destroy all
- copies of the works possessed in a physical medium and discontinue
- all use of and all access to other copies of Project Gutenberg-tm
- works.
-
-* You provide, in accordance with paragraph 1.F.3, a full refund of
- any money paid for a work or a replacement copy, if a defect in the
- electronic work is discovered and reported to you within 90 days of
- receipt of the work.
-
-* You comply with all other terms of this agreement for free
- distribution of Project Gutenberg-tm works.
-
-1.E.9. If you wish to charge a fee or distribute a Project
-Gutenberg-tm electronic work or group of works on different terms than
-are set forth in this agreement, you must obtain permission in writing
-from both the Project Gutenberg Literary Archive Foundation and The
-Project Gutenberg Trademark LLC, the owner of the Project Gutenberg-tm
-trademark. Contact the Foundation as set forth in Section 3 below.
-
-1.F.
-
-1.F.1. Project Gutenberg volunteers and employees expend considerable
-effort to identify, do copyright research on, transcribe and proofread
-works not protected by U.S. copyright law in creating the Project
-Gutenberg-tm collection. Despite these efforts, Project Gutenberg-tm
-electronic works, and the medium on which they may be stored, may
-contain "Defects," such as, but not limited to, incomplete, inaccurate
-or corrupt data, transcription errors, a copyright or other
-intellectual property infringement, a defective or damaged disk or
-other medium, a computer virus, or computer codes that damage or
-cannot be read by your equipment.
-
-1.F.2. LIMITED WARRANTY, DISCLAIMER OF DAMAGES - Except for the "Right
-of Replacement or Refund" described in paragraph 1.F.3, the Project
-Gutenberg Literary Archive Foundation, the owner of the Project
-Gutenberg-tm trademark, and any other party distributing a Project
-Gutenberg-tm electronic work under this agreement, disclaim all
-liability to you for damages, costs and expenses, including legal
-fees. YOU AGREE THAT YOU HAVE NO REMEDIES FOR NEGLIGENCE, STRICT
-LIABILITY, BREACH OF WARRANTY OR BREACH OF CONTRACT EXCEPT THOSE
-PROVIDED IN PARAGRAPH 1.F.3. YOU AGREE THAT THE FOUNDATION, THE
-TRADEMARK OWNER, AND ANY DISTRIBUTOR UNDER THIS AGREEMENT WILL NOT BE
-LIABLE TO YOU FOR ACTUAL, DIRECT, INDIRECT, CONSEQUENTIAL, PUNITIVE OR
-INCIDENTAL DAMAGES EVEN IF YOU GIVE NOTICE OF THE POSSIBILITY OF SUCH
-DAMAGE.
-
-1.F.3. LIMITED RIGHT OF REPLACEMENT OR REFUND - If you discover a
-defect in this electronic work within 90 days of receiving it, you can
-receive a refund of the money (if any) you paid for it by sending a
-written explanation to the person you received the work from. If you
-received the work on a physical medium, you must return the medium
-with your written explanation. The person or entity that provided you
-with the defective work may elect to provide a replacement copy in
-lieu of a refund. If you received the work electronically, the person
-or entity providing it to you may choose to give you a second
-opportunity to receive the work electronically in lieu of a refund. If
-the second copy is also defective, you may demand a refund in writing
-without further opportunities to fix the problem.
-
-1.F.4. Except for the limited right of replacement or refund set forth
-in paragraph 1.F.3, this work is provided to you 'AS-IS', WITH NO
-OTHER WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
-LIMITED TO WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PURPOSE.
-
-1.F.5. Some states do not allow disclaimers of certain implied
-warranties or the exclusion or limitation of certain types of
-damages. If any disclaimer or limitation set forth in this agreement
-violates the law of the state applicable to this agreement, the
-agreement shall be interpreted to make the maximum disclaimer or
-limitation permitted by the applicable state law. The invalidity or
-unenforceability of any provision of this agreement shall not void the
-remaining provisions.
-
-1.F.6. INDEMNITY - You agree to indemnify and hold the Foundation, the
-trademark owner, any agent or employee of the Foundation, anyone
-providing copies of Project Gutenberg-tm electronic works in
-accordance with this agreement, and any volunteers associated with the
-production, promotion and distribution of Project Gutenberg-tm
-electronic works, harmless from all liability, costs and expenses,
-including legal fees, that arise directly or indirectly from any of
-the following which you do or cause to occur: (a) distribution of this
-or any Project Gutenberg-tm work, (b) alteration, modification, or
-additions or deletions to any Project Gutenberg-tm work, and (c) any
-Defect you cause.
-
-Section 2. Information about the Mission of Project Gutenberg-tm
-
-Project Gutenberg-tm is synonymous with the free distribution of
-electronic works in formats readable by the widest variety of
-computers including obsolete, old, middle-aged and new computers. It
-exists because of the efforts of hundreds of volunteers and donations
-from people in all walks of life.
-
-Volunteers and financial support to provide volunteers with the
-assistance they need are critical to reaching Project Gutenberg-tm's
-goals and ensuring that the Project Gutenberg-tm collection will
-remain freely available for generations to come. In 2001, the Project
-Gutenberg Literary Archive Foundation was created to provide a secure
-and permanent future for Project Gutenberg-tm and future
-generations. To learn more about the Project Gutenberg Literary
-Archive Foundation and how your efforts and donations can help, see
-Sections 3 and 4 and the Foundation information page at
-www.gutenberg.org
-
-
-
-Section 3. Information about the Project Gutenberg Literary Archive Foundation
-
-The Project Gutenberg Literary Archive Foundation is a non profit
-501(c)(3) educational corporation organized under the laws of the
-state of Mississippi and granted tax exempt status by the Internal
-Revenue Service. The Foundation's EIN or federal tax identification
-number is 64-6221541. Contributions to the Project Gutenberg Literary
-Archive Foundation are tax deductible to the full extent permitted by
-U.S. federal laws and your state's laws.
-
-The Foundation's principal office is in Fairbanks, Alaska, with the
-mailing address: PO Box 750175, Fairbanks, AK 99775, but its
-volunteers and employees are scattered throughout numerous
-locations. Its business office is located at 809 North 1500 West, Salt
-Lake City, UT 84116, (801) 596-1887. Email contact links and up to
-date contact information can be found at the Foundation's web site and
-official page at www.gutenberg.org/contact
-
-For additional contact information:
-
- Dr. Gregory B. Newby
- Chief Executive and Director
- gbnewby@pglaf.org
-
-Section 4. Information about Donations to the Project Gutenberg
-Literary Archive Foundation
-
-Project Gutenberg-tm depends upon and cannot survive without wide
-spread public support and donations to carry out its mission of
-increasing the number of public domain and licensed works that can be
-freely distributed in machine readable form accessible by the widest
-array of equipment including outdated equipment. Many small donations
-($1 to $5,000) are particularly important to maintaining tax exempt
-status with the IRS.
-
-The Foundation is committed to complying with the laws regulating
-charities and charitable donations in all 50 states of the United
-States. Compliance requirements are not uniform and it takes a
-considerable effort, much paperwork and many fees to meet and keep up
-with these requirements. We do not solicit donations in locations
-where we have not received written confirmation of compliance. To SEND
-DONATIONS or determine the status of compliance for any particular
-state visit www.gutenberg.org/donate
-
-While we cannot and do not solicit contributions from states where we
-have not met the solicitation requirements, we know of no prohibition
-against accepting unsolicited donations from donors in such states who
-approach us with offers to donate.
-
-International donations are gratefully accepted, but we cannot make
-any statements concerning tax treatment of donations received from
-outside the United States. U.S. laws alone swamp our small staff.
-
-Please check the Project Gutenberg Web pages for current donation
-methods and addresses. Donations are accepted in a number of other
-ways including checks, online payments and credit card donations. To
-donate, please visit: www.gutenberg.org/donate
-
-Section 5. General Information About Project Gutenberg-tm electronic works.
-
-Professor Michael S. Hart was the originator of the Project
-Gutenberg-tm concept of a library of electronic works that could be
-freely shared with anyone. For forty years, he produced and
-distributed Project Gutenberg-tm eBooks with only a loose network of
-volunteer support.
-
-Project Gutenberg-tm eBooks are often created from several printed
-editions, all of which are confirmed as not protected by copyright in
-the U.S. unless a copyright notice is included. Thus, we do not
-necessarily keep eBooks in compliance with any particular paper
-edition.
-
-Most people start at our Web site which has the main PG search
-facility: www.gutenberg.org
-
-This Web site includes information about Project Gutenberg-tm,
-including how to make donations to the Project Gutenberg Literary
-Archive Foundation, how to help produce our new eBooks, and how to
-subscribe to our email newsletter to hear about new eBooks.
-
-
-
-</pre>
-
-</body>
-</html>
diff --git a/old/50468-h/images/cover.jpg b/old/50468-h/images/cover.jpg
deleted file mode 100644
index 2bb4833..0000000
--- a/old/50468-h/images/cover.jpg
+++ /dev/null
Binary files differ
diff --git a/old/50468-h/images/p01.png b/old/50468-h/images/p01.png
deleted file mode 100644
index 5cd48a0..0000000
--- a/old/50468-h/images/p01.png
+++ /dev/null
Binary files differ