,,ornl-#cdfj ,,uc-#cb--,mathematics and ,computers ,,tid-#dejj 7#bcrd ed47 ,,the ,,oak ,,ridge ,,algol ,,compiler ,,for ,,the ,,control ,,data ,,corporation #afjd ,,preliminary ,,programmer',s ,,manual ,l4 ,l4 ,bumgarner ,,oak ,,ridge ,,national ,,laboratory operated by ,,union ,,carbide ,,corporation for the ,u4,s4 ,,atomic ,,energy ,,commission ,printed in ,,usa4 ,price3 #a4be ,available from the ,office of ,technical ,services ,u4 ,s4 ,department of ,commerce ,washington #be1 ,d4 ,c4 ,,legal ,,notice ,this report was prepared as an account of ,government sponsored work4 ,neither the ,united ,states1 nor the ,commission1 nor any person acting on behalf of the ,commission3 ,a4 ,makes any warranty or representation1 expressed or implied1 with respect to the accuracy1 completeness1 or usefulness of the information contained in this report1 or that the use of any information1 apparatus1 method1 or process disclosed in this report may not infringe privately owned rights2 or ,b4 ,assumes any liabilities with respect to the use of1 or for damages resulting from the use of any information1 apparatus1 method1 or process disclosed in this report4 ,as used in the above1 8person acting on behalf of the ,commission0 includes any employee or contractor of the ,commission1 or employee of such contractor1 to the extent that such employee or contractor of the ,commission1 or employee of such contractor prepares1 disseminates1 or provides access to1 any information pursuant to his employment or contract with the ,commission1 or his employment with such contractor4 ,,ornl-#cdfj ,contract ,no4 ,w-#gdje-;eng-#bf ,mathematics ,division ,,the ,,oak ,,ridge ,,algol ,,compiler ,,for ,,the ,,control ,,data ,,corporation #afjd--,,preliminary ,,programmer',s ,,manual ,l4 ,l4 ,bumgarner ,,date ,,issued ,,jan #cj #aifd ,,oak ,,ridge ,,national ,,laboratory ,oak ,ridge1 ,tennessee operated by ,,union ,,carbide ,,corporation for the ,u4,s4 ,,atomic ,,energy ,,commission ,,contents ,i4 ,introduction #a ,,ii4 ,language ,restrictions #b ,,iii4 ,modes of ,operation of the ,compiler #d ,,iv4 ,input-,output and ,intermediate ,tape #e ,input-,output #e ,,read #e ,,page #g ,lists and the ,list ,declaration #g ,,print #i ,,write #i ,,punch #aj ,formats and the ,format ,declaration #aj ,,input #aa ,,output #ab ,intermediate ,tape ,procedures #ac ,,binread #ac ,,binwrite #ad ,,endfile #ad ,,rewind #ad ,,backup #ad ,tape-,checking ,procedures #ad ,,eof #ae ,,readerr #ae ,,writerr #ae ,v4 ,the ,external ,declaration #af ,,vi4 ,standard ,procedures #af ,,vii4 ,error ,checking and ,diagnostics #ag ,,viii4 ,running ,programs #ai ,,algol ,control ,system #bj ,,eop ,card #bj ,compile and ,execute3 ,,algo #ba ,,program ,card #bb ,compile_/,execute3 ,,aldap #bb ,,aldap ,control ,statement #bb ,job ,deck3 ,,aldap ,compilation_/,execution #bc ,examples #be ,,appendices ,a4 ,adjuncts to ,algol #fj #cj ,b4 ,hardware ,representation #cb ,c4 ,structure of ,procedure ,calling ,sequence #ce ,d4 ,internal ,representation of ,strings #cg ,e4 ,program ,efficiency #ch ,f4 ,controversial ,features of ,algol #fj #dj ,g4 ,fortran ,subprograms in an ,algol ,program #da ,,the ,,oak ,,ridge ,,algol ,,compiler ,,for ,,the ,,control ,,data ,,corporation #afjd--,,preliminary ,,programmer',s ,,manual ,l4 ,l4 ,bumgarner ,,abstract ,this document is a preliminary programmer's manual for use of the ,control ,data #afjd ,algol ,compiler4 ,the compiler was constructed by the ,programming ,research ,group of the ,mathematics ,division in cooperation with ,control ,data ,corporation4 ,a knowledge of ,algol #fj is assumed4 ,included are descriptions of input-output facilities and details for operation under the monitor system4 ,i4 ,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 ,laboratory4 ,the compiler is designed for the ,control ,data #afjd and #afjd-;,a computers4 ,the document is preliminary in that the compiler is not thoroughly tested and may undergo further development4 ,the reader is assumed to be familiar with ,algol #fj4 ,the defining descriptions are the two reports on ,algol #fj available in the following references3 #a4 ,p4 ,naur et al1 8,report on the ,algorithmic ,language ,algol #fj10 ,comm4 ,assoc4 ,comp4 ,mach41 #c 7#aifj71 ,no4 #e1 #bii-cad4 #b4 ,p4 ,naur et al1 8,revised ,report on the ,algorithmic ,language ,algol #fj10 ,comm4 ,assoc4 ,comp4 ,mach41 #f 7#aifc71 ,no4 #a1 #a-ag4 ,the second report clears up certain ambiguities that appeared in the first report4 ,the reports are not easy reading for the novice4 ,the following expositions are more readable3 #a4 ,baumann1 ,bauer1 ,feliciano and ,samelson1 ,introduction to ,algol1 ,prentice-,hall1 ,inc4 7to be published in late #aifc74 #b4 ,bottenbruch1 ,h41 8,structure and ,use of ,algol #fj10 ,jour4 ,assoc4 ,comp4 ,mach41 #i 7#aifb71 ,no4 #b1 #afa-bba1 and ,,ornl-#cadh4 ,the ,baumann publication also contains the revised ,algol #fj report4 ,throughout this document various examples of statements and declarations appear without the semicolon which is always required for separating them4 ,this is to avoid the implication that the semicolon is part of the statement or the declaration4 ,in sentences1 a comma or period may appear where a semicolon or other delimiter would be indicated in the context of a program4 ,word delimiters rendered in bold-face type in the ,algol report are herein indicated by underlining4 ,,ii4 ,language ,restrictions ,the compiler correctly handles programs written in ,algol #fj subject to the following restrictions4 #a4 ,the use of an integer label as an actual parameter will cause an incorrect program to be compiled4 #b4 ,a ,,go ,,to statement with an undefined switch designator as the designational expression will cause incorrect operation of the final program4 #c4 ,type restrictions3 7a7 ,the exponentiation expression x y will have type real unless x is of type integer and y is a non-negative integer constant4 ,this differs slightly from the definition in the ,algol report but will generally cause no difficulty4 7b7 ,in the construction if clause simple arithmetic expression else arithmetic expression the arithmetic expressions must have the same type1 or else an incorrect program will be compiled4 ,for example1 in the statement x 3 if a b then z else w z and w should both be declared real or both integer4 7c7 ,in a procedure call 7procedure statement or function call7 each actual parameter having an arithmetic value must have the same type as the corresponding formal parameter in the procedure declaration4 ,the type of the formal parameter is that designated in the specification part if it appears there4 ,if a formal parameter representing an arithmetic quantity does not appear in the specification part1 it is assumed to be specified real4 ,full use of specifications is desirable for descriptive purposes and for optimization4 ,caution4 ,restriction 7c7 is more likely to cause errors than the other restrictions4 ,it is very easy to write ,p7#a1b7 when the parameters of ,p are specified real1 but incorrect coding will result4 ,the call ,p7#a4j1b4j7 works correctly4 #d4 ,standard procedure names 7see section ,,vi7 used as parameters in procedure calls will cause an incorrect program to be compiled4 ,a call1 therefore1 such as ,p7sin7 is incorrect4 ,note1 however1 that a call of the type ,q7sin7x77 causes no trouble4 ,the case ,p7sin7 can be programmed in another way4 ,make the declaration real procedure sin #a 7t72 real t2 sin #a 3 sin7t74 ,the call ,p7sin #a7 is then correct4 #e4 ,arrays called by value are not handled4 ,if an array identifier appears in the value part1 an incorrect program will be compiled4 #f4 8,dynamic0 own arrays are not handled4 ,this means that all own arrays are treated as having constant subscript bounds2 this constitutes one possible interpretation of the ,algol #fj report4 ,an own array may be declared with variable subscript bounds1 but only one allocation of storage will be made1 and if the bounds change1 this will be ignored4 #g4 ,recursive procedures are not handled4 ,this restriction encompasses all cases of a function designator appearing in the actual parameter part of a call of the same function1 unless that function is a standard function4 ,thus f7f7x77 is not permitted in general1 but sin7sin7x77 is allowed4 ,,iii4 ,modes of ,operation of the ,compiler ,there are two distinct modes of operation3 ,,algo and ,,aldap4 ,,algo is a compile-and-execute mode in which the two phases cannot be separated4 ,the ,algol program is translated into a machine language program in core memory1 and execution of the program immediately and automatically follows4 ,there is no assembly program phase4 ,,aldap makes use of the ,,codap assembly program facilities4 ,it is possible to compile procedures separately and reference them from an ,algol program4 ,the procedures may be written in ,algol1 ,,codap or ,fortran4 ,this provision is made possible with the aid of the external declaration discussed in section ,v4 ,the ,,algo mode provides significantly faster compilation than the ,,aldap mode for most programs4 ,the target programs produced in the two modes are essentially the same4 ,in the ,,algo mode1 program checkout may be done at the ,algol language level4 ,in the ,,aldap mode1 checkout may also be done at the machine and assembly language levels1 and modifications may be made at these levels4 ,,iv4 ,input-,output and ,intermediate ,tape ,there are seven standard procedures for input-output1 five for intermediate tape1 and three for checking tape conditions4 ,two declarations1 format and list1 are additions to the language4 ,input-,output ,the input-output procedures are3 ,,read1 ,,page1 ,,print1 ,,write1 ,,punch1 ,,input1 and ,,output4 ,,read ,the ,,read procedure is used to input numbers and ,boolean values4 ,a ,,read statement has the form ,,read 7,v#a1 ,v#b1 4441 ,vn7 where n is any positive integer and each ,vk is a variable4 ,for example1 the statement ,,read 7,x1 ,y1 ,a#a1 ,b#a7 will input values into the four variables listed4 ,for inputing values into an array1 a statement such as the following might be used3 for ,i 3 #a step #a until #ajj do ,,read 7,a,i7 4 ,the ,,read procedure inputs numbers and truth values4 ,a number must be a legal ,algol number 7although an ,e may be substituted for the symbol 74 ,for input into a ,boolean variable1 the truth values true and false are accepted2 also1 a non-negative number or a plus sign is interpreted as false and a negative number or a minus sign is interpreted as true4 ,a blank is read as zero4 ,with the ,,read procedure1 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 assigned4 ,any necessary type conversions are done automatically4 ,if ,n is the next number in the data1 the statement ,,read 7,v7 is equivalent to the statement ,v 3 ,n 4 ,the data cards are free field4 ,the number of values per card1 the length of numbers1 and the number of spaces are arbitrary4 ,a comma1 however1 must follow each number1 including the last one on the last data card4 ,in reading a value into a subscripted variable1 the current value of the subscript expression is not affected by that ,,read statement4 ,for example1 in the statement ,,read 7,i1 ,a,i7 the old value of ,i is used in ,a,i4 ,the ,,read procedure will input data from the standard input medium only4 ,,page ,the ,,page procedure is used to cause a page ejection on the standard output medium4 ,,page has no parameters4 ,it is called by simply writing ,,page 4 ,lists and the ,list ,declaration ,the input and output procedures described in the rest of this section1 as well as the binary read and write procedures1 make use of the concept of a list4 ,a list#a is a sequence of expressions4 ,an example is ,u ,v1 ,c#j1 if ,b then ,x else ,y 4 ,it may be inconvenient in some cases to write down all of the expressions explicitly4 ,the loop expression#a may be used as a shorthand device in a list4 ,it is an ,algol-like construction of which the following is an example3 for ,i 3 #a step #a until #ajjj do ,a,i 4 ,this is equivalent to the list ,a#a1 ,a#b1 4441 ,a#ajjj 4 ,the entity following do in a loop expression may itself be a list1 but this list must be enclosed in parentheses if it contains more than one member4 ,the loop expression for ,i 3 #a step #a until #ajjj do 7,a,i1 ,b,i7 is equivalent to the list ,a#a1 ,b#a1 ,a#b1 ,b#b1 4441 ,a#ajjj1 ,b#ajjj 4 ,the loop expression for ,i 3 #a step #a until #aj do 7,a,i1 for ,j 3 #a step #a until #bj do ,b,i1,j7 is equivalent to the list ,a#a1 ,b#a1a1 ,b#a1b1 4441 ,b#a1bj1 ,a#b1 ,b#b1a1 ,b#b1b1 4441 ,b#b1bj1 444444444444444444444444444444444444 ,a#aj1 ,b#aj1a1 ,b#aj1b1 4441 ,b#aj1bj 4 ,a list may be given a name through a list declaration4 ,a list declaration has the form list identifier 3 list 4 ,examples are3 list ,l 3 ,x1 ,a ,b list ,m 3 for ,i 3 #a step #a until ,n do ,a,i 4 ,a list identifier may itself appear in a list4 ,one of the above examples might be written with the aid of the following declaration3 list ,l 3 for ,j 3 #a step #a until #bj do ,b,i1,j 4 ,the loop expression is then for ,i3 #a step #a until #aj do 7,a,i1 ,l7 4 ,a list declaration obeys the same rules of syntax and scope as do other declarations4 ,a list identifier may be used as an actual parameter of a procedure call1 with the requirement that the corresponding formal parameter be specified list4 ,however1 an actual list may appear as a parameter only in calls of the standard procedures1 as described4 ,,print ,the ,,print procedure is used to output numbers in a simple1 rigid manner4 ,a ,,print statement has the form ,,print 7list71 where list is described above4 ,an example of a ,,print statement is ,,print 7,a1 if ,n #j then ,s else ,t74 ,a ,,print statement always puts out at least one line printer image4 ,a line may contain up to #f numbers1 each of which is in scientific notation with #aj decimal places4 ,each number is right-justified in a field of #bj columns4 7,the format is #f;,e#bj4aj47 ,the above ,,print statement will output two numbers in the first forty spaces1 and the rest of the line will be blank4 ,a ,,print statement such as ,,print 7for ,i 3 #a step #a until #aj do ,a,i7 will output one line of #f numbers followed by one line of #d numbers4 ,single spacing between lines is automatic4 ,the ,,print procedure always outputs on the standard output medium4 ,,write ,the ,,write procedure is used to output strings4 ,examples of ,,write statements are3 ,,write 7',,table'7 ,,write 7if ,d #j then ',,true' else ',,false'7 4 ,each parameter must be a string expression 7see ,appendix ,a for definition of string expression74 ,there may be any number of parameters1 but each string will appear on a separate line4 ,if a string is too long to go on one line1 it will be continued on the next line4 ,a string should not contain another string4 ,lines are single spaced4 ,each ,,write statement causes at least one line printer image to be put out4 ,the ,,write procedure always outputs on the standard output medium4 ,,punch ,the ,,punch procedure is used to output numbers on punched cards in a form which can be input by the ,,read procedure4 ,each number punched will be followed by a comma4 ,each card punched may contain up to four numbers4 ,each number will be of type real1 but since the ,,read procedure makes any necessary type conversions this is unimportant4 ,a ,,punch statement has the same form as a ,,print statement4 ,each ,,punch statement causes at least one card image to be put out4 ,the ,,punch procedure always outputs on the standard punch medium4 ,formats and the ,format ,declaration ,the two input and output procedures remaining to be described make use of formats4 ,the formats are exactly those used in ,fortran1 and readers unfamiliar with ,fortran will find it necessary to refer to the ,control ,data ,fortran-#fb ,reference ,manual for details on the use of formats4 ,a format is treated as a string4 ,formats will be written1 for example1 as follows3 '7#f;,e#bj4aj7' '7#a;,h#j1 #i,x1 #e;,,htable1 ,i#c7' 4 ,note that the parentheses are part of the format1 and both parentheses and string quotes are required4 ,as will be indicated below1 a format string may appear explicitly in an ,,input or ,,output statement4 ,if the same format string is used more than once1 however1 it may be convenient to give it a name through a format declaration4 ,a format declaration has the form format ,identifier 3 '7,fortran format7' 4 ,examples are3 format ,f 3 '7#f;,e#bj4aj7' format ,g 3 '7#a;,h#j1 #i,x1 #e;,,htable1 ,i#c7' 4 ,a format declaration obeys the same rules of syntax and scope as do other declarations4 ,format identifiers may be used as parameters1 and format is a specifier4 ,,input ,the ,,input procedure is used to input numbers and ,hollerith information in accordance with ,fortran-type formats4 ,an ,,input statement has one of the forms ,,input 7,m1,f1list7 ,,input 7,m1,f7 where3 7#a7 ,m is the logical unit designation4 ,m may be any arithmetic expression4 ,if it is not integral-valued1 the action ,m 3 entier 7,m #j4e7 will take place4 ,the standard input unit is #ej4 7#b7 ,f is a format expression4 ,it may be an actual format string1 a format identifier1 a conditional format expression1 or any variable which contains the starting address of a format string4 ,caution4 ,in the case of a conditional format expression1 format strings and format identifiers should not be mixed4 ,for example1 7a7 and 7b7 below are permitted1 but 7c7 will cause an incorrect program to be compiled3 7a7 if ,b then '7,e#bj4g7' else '7,e#bj4f7' 7b7 if ,b then ,f#a else ,f#b 7c7 if ,b then ,f#a else '7,e#bj4f7' 4 7#c7 list is as defined previously4 ,of course1 for ,,input all expressions must be variables4 ,the following are examples of an ,,input statement3 ,,input 7#ej1 '7#d;,e#bj4h7'1 ,n1 for ,i 3 #a step #a until ,n do ,a,i74 ,,input 7if ,a ,b then ,m else ,n1 ,f1 ,x1 ,y1 ,z7 4 ,each ,,input statement causes at least one card image to be read4 ,note that the ,,input procedure does not make type checks between the data and the program variables4 ,a floating point number1 for example1 is stored as such regardless of the type of the variable to which it is assigned4 ,caution4 ,it is strongly recommended that not both ,,read and ,,input be used in the same program4 ,each buffers ahead one card image4 ,furthermore1 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 read4 ,mixing the two statements will require quite careful use of blank cards in the data to allow for the buffering4 ,,output ,the ,,output procedure is used to output numbers and ,hollerith information in accordance with ,fortran-type formats4 ,an ,,output statement has one of the forms ,,output 7,m1,f7 ,,output 7,m1,f1list7 where ,m1 ,f1 and list are as indicated above4 ,the following are examples of ,,output statements3 ,,output 7#ea1 '7#e;,,htable7'7 ,,output 7#ea1 '7#a;,h#j1i,x1#aj;,e#aj4b7'1 for ,i 3 #a step #a until #ajj do ,a,i7 4 ,each ,,output statement causes at least one line printer image to be put out4 ,the standard output unit is #ea1 and the standard punch unit is #eb4 ,intermediate ,tape ,procedures ,there are five standard procedures for making use of magnetic tape for auxiliary storage3 ,,binread1 ,,binwrite1 ,,endfile1 ,,rewind and ,,backup4 ,,binread ,a ,,binread statement has the form ,,binread 7,m1 list7 where ,m and list are the same as for ,,input4 ,each ,,binread statement causes the designated unit to move forward one logical record1 reading in binary format into the variables of the list4 ,if fewer variables appear in the list than are on the record1 only those values are read and the tape moves on to the end of the record4 ,if more variables appear in the list than are on the record1 this is treated as an error and the program is terminated4 ,the following is an example of a ,,binread statement3 ,,binread 7#f1 for ,i 3 #a step #a until #ajjj do ,a,i7 4 ,,binwrite ,a ,,binwrite statement has the form ,,binwrite 7,m1 list7 where ,m and list are the same as for ,,output4 ,each ,,binwrite statement causes the values of the list expressions to be written in one logical record in binary format on the designated unit4 ,,endfile ,an ,,endfile statement has the form ,,endfile 7,m7 where ,m is a unit designation as before4 ,the statement causes an end-of-file record to be written on the designated unit4 ,,rewind ,a ,,rewind statement has the form ,,rewind 7,m7 where ,m is a unit designation as before4 ,the statement causes the designated unit to be rewound to the load point4 ,,backup ,a ,,backup statement has the form ,,backup 7,m7 where ,m is a unit designation as before4 ,the statement causes the designated unit to be backspaced one logical record of binary information or one physical record of ,,bcd information4 ,tape-,checking ,procedures ,the checking procedures are3 ,,eof1 ,,readerr1 and ,,writerr4 ,these are ,boolean procedures4 ,,eof ,an ,,eof call has the form ,,eof 7,m7 where ,m is a logical unit designation as before4 ,it yields the value true if the previous read operation encountered an end-of-file or the previous write operation encountered an end-of-tape2 otherwise it yields the value false4 ,an example of the use of an ,,eof call is3 if ,,eof7#f7 then goto ,,alarm 4 ,,readerr ,a ,,readerr call has the form ,,readerr 7,m7 where ,m is a logical unit designation as before4 ,it yields the value true if the previous read operation produced a parity error2 otherwise it yields the value false4 ,,readerr should not be used for testing the operation of a ,,read statement4 ,the ,,read procedure has its own facilities for checking1 making multiple attempts in case of errors1 and terminating the program if necessary4 ,,writerr ,a ,,writerr call has the form ,,writerr 7,m7 where ,m is a logical unit designation as before4 ,it yields the value true if the previous write operation produced a parity error2 otherwise it yields the value false4 ,v4 ,the ,external ,declaration ,an external declaration is required for each nonstandard library procedure or procedure compiled separately from the calling program1 whether in ,algol1 ,fortran or ,,codap4 ,standard ,algol procedures are described in ,section ,,vi4 ,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 subprogram4 ,the use of ,fortran subprograms is described in ,appendix ,g4 ,the external declaration has one of the following forms3 external ,i#a1 4441 ,in real external ,i#a1 4441 ,in integer external ,i#a1 4441 ,in ,boolean external ,i#a1 4441 ,in where each ,ik is an identifier and n is any positive integer4 ,a type declarator preceding the declarator external signifies a function procedure having that type4 ,note that no information about parameters appears in an external declaration4 ,see ,appendix ,a for syntactical definition4 ,in the ,,algo mode1 ,,lib cards must be included in the job deck for nonstandard library routines1 in addition to the external declarations4 ,details are found in ,section ,,viii4 ,,vi4 ,standard ,procedures ,certain procedures are used without being declared4 ,these include the standard functions listed in the ,algol #fj report and the input-output and intermediate tape procedures4 ,the complete list is as follows3 ,,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 program4 ,they behave as though declared in a fictitious block surrounding the entire program4 ,,vii4 ,error ,checking and ,diagnostics ,in a complete compilation the compiler makes two passes on the ,algol source program4 ,if errors which the compiler cannot correct are detected in the first pass1 then the second1 or translation1 pass will not be made4 ,the following types of errors are detected3 #a4 syntactical error #b4 undeclared identifier #c4 identifier declared twice in the same block head #d4 misspelled delimiter 7corrected in many cases7 #e4 missing escape symbol 7corrected unless both are missing for the same delimiter1 in which case the delimiter is treated as an identifier74 ,the program listing and any diagnostics always appear on the standard output medium4 ,in the case of a syntactical error1 a message will appear in the program listing one or several lines below the error4 ,the location of the error in the program will be further pinpointed in the line of symbols immediately below the error message4 ,this line will be a short portion of the program with the last symbol in the line being the one which indicates the error4 ,for example1 a declaration might be out of place as follows3 4 4 4 x 3 a b2 ',,integer' ,k2 99999999 ,,last ,,character ,,indicates ,,syntactical ,,error4 x 3 a b2 ,,integer 4 4 4 ,in some cases the line below the message may differ slightly from the corresponding string of symbols above2 for example1 an identifier might be rendered by ,ident4 ,it is possible for a single syntactical error to cause more than one diagnostic4 ,a few syntactical errors are corrected by the compiler1 and a message is put out to this effect4 ,an example is a semicolon immediately preceding else4 ,according to the comment conventions of ,algol1 any string of symbols following end and not containing end1 else or a semicolon is treated as comment4 ,as a result1 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 compiler4 ,thus for example1 in 444 x 3 a b end for i 3 #a step #a 444 the ,,for statement will be skipped at least in part4 ,the compiler will put out a caution message in this and some other cases1 but it will not change the program4 ,if an identifier is not declared 7or possibly declared in the wrong place71 a message is put out below the program listing together with the undeclared identifier4 ,the compiler does not check the type of identifiers4 ,therefore1 such errors as a ,boolean variable in an arithmetic expression1 or the brackets of a subscripted variable replaced by parentheses1 are not detected1 and an incorrect program may be compiled4 ,,viii4 ,running ,programs ,the ,algol program is punched on cards in the hardware representation described in ,appendix ,b4 ,the format is essentially free field3 spaces have no significance except within escape symbols and string quotes4 ,only the first #gb columns1 however1 are interpreted by the compiler4 ,the remaining columns may be used for identification purposes4 ,care must be taken when a string is continued onto the next card1 as the continuation will begin in column #a4 ,the program listing will have the same format as the cards4 ,in the following discussion the symbol signifies the letter ,o where necessary for emphasis1 and the symbol signifies a #g-i punch in card column #a4 ,,algol ,control ,system ,the compiler operates under the ,,algol ,control ,system4 ,this system is a subordinate control routine of the ,master ,control ,system of the ,,co-,,op ,monitor ,programming ,system4 ,,algol is quite similar to the subordinate control routine ,,coop4 ,,algol is called with an ,,mcs 7,master ,control ,system7 card having ,,algol punched beginning in column #b4 ,other details of this card are available in descriptions of the ,,co-,,op ,monitor4 ,it should be noted in selecting a standard recovery procedure that the concept of ,,common is not used in ,algol4 ,following the ,,mcs card will be a control card giving instructions to the control routine ,,algol4 ,it will name one of the following routines3 ,,algo1 ,,aldap1 ,,execute1 ,,binary1 ,,fortran1 ,,rewind or ,,define4 ,these will be discussed below4 ,,eop ,card ,the ,,eop 7end-of-program7 card has the characters ',e,p' punched in columns #aj-ad4 ,in the ,,algo mode1 one ,,eop card must be used to terminate the program4 ,in the ,,aldap mode1 one ,,eop card must be used to terminate each ,algol program or ,algol procedure being compiled separately4 ,compile and ,execute3 ,,algo ,the ,,algo mode of running an ,algol program is the simplest and the fastest4 ,it will be the more suitable for a large number of programs4 ,unless the programmer has special reasons for using the ,,aldap mode1 the ,,algo mode is recommended4 ,the ,algol program must be self-contained except for standard procedures and library procedures on the library-systems tape4 ,the job deck must have the following cards in the specified order3 #a4 ,,mcs control card4 ,the subordinate control routine name must be ,,alg,l4 #b4 ,,algol control card4 ,this will appear as ,,alg4 or ,,alg1t4 where t is an integer specifying a time limit in minutes for compilation and execution4 7,the period is required on every control card47 #c4 ,,lib cards4 ,if necessary4 ,one ,,lib card is required for each non-standard library procedure called in the program1 namely those declared external4 ,the format of a ,,lib card is as follows3 the characters ,,lib punched in columns #aj-ab and the name of a library entry point beginning in column #bj4 ,there may be no more than #bj ,,lib cards4 #d4 ,,program card4 ,if desired4 ,this may be used to identify the program4 ,its format is described in the next paragraph4 #e4 ,algol program deck4 #f4 ,,eop card4 #g4 ,data4 ,if required4 ,,program ,card ,the ,,program card is optional4 ,it is useful for identification purposes1 and in the ,,aldap mode it serves to name the program entry point4 ,the format of the card is free field4 ,the characters ,,pr,,gram must appear followed by the program name1 which must be alphanumeric4 ,compile_/,execute3 ,,aldap ,the ,,aldap mode is used to compile an ,algol program or procedure to a relocatable binary or a ,,codap format4 ,execution is optional4 ,for compilation only1 the program deck may consist of any mixture of ,algol programs and procedures1 any number of which may be in ,,codap4 ,if execution is desired1 part or all of the program deck may have been previously compiled1 so that the deck may have ,algol1 ,,codap and relocatable binary cards4 ,,aldap ,control ,statement ,the format of the ,,aldap statement is3 ,,aldap1,l1,b1n4 where ,l is a program listing key1 ,b is a punched card output key1 n is a logical unit number4 ,a period may terminate the statement at any point1 with remaining fields treated as zero4 ,if the program listing key 7,l7 is a #a1 an assembled listing of the ,,codap object code will be produced on the standard output medium4 ,if the key is zero or blank1 no such listing will be produced4 ,a listing of the ,algol program and any diagnostics will always be produced on the standard output medium4 ,if the punched card output key 7,b7 is a #a1 a relocatable binary deck will be produced on the standard punch medium4 ,if the key is a #b1 a ,,codap symbolic deck will be produced on the standard punch medium4 ,if the key is a #c1 both a symbolic deck and a relocatable binary deck will be produced on the standard punch medium1 with the symbolic deck appearing first4 ,if the key is zero or blank1 no deck will be produced4 ,the logical unit number 7n7 specifies the unit which is to be the load-and-go tape if it is one of the integers #a-di or #ef4 ,if n is some other integer or blank1 no load-and-go tape will be written4 ,the load-and-go tape is required when execution of the program is to follow4 ,examples3 7a7 ,,aldap1 #a1 #a1 #ef4 ,this statement will cause the ,algol_/,,codap deck to be compiled1 an assembled listing to be produced on the standard output medium1 a relocatable binary deck to be produced on the standard punch medium1 and a load-and-go tape written on logical unit #ef4 7b7 ,,aldap1 #a4 ,this statement will cause the ,algol_/,,codap deck to be compiled1 and an assembled listing to be produced on the standard output medium4 ,job ,deck3 ,,aldap ,compilation_/,execution ,for compilation only of an ,algol_/,,codap program deck1 the job deck should contain the following cards in the specified order3 #a4 ,,mcs control card4 ,with ,,alg,l as the subordinate control routine name4 #b4 ,,algol control card4 ,with the appropriate ,,aldap control statement4 #c4 ,,program card4 ,if desired4 #d4 ,program deck4 ,any mixture of ,algol and ,,codap programs and procedures1 with all their subroutines except the standard procedures and those on the library-systems tape4 ,each ,algol program or procedure must be terminated by an ,,eop card4 #e4 ,,finis card4 ,this card contains the characters ,,finis punched in columns #aj-ad4 ,it signals the end of all compilations4 ,for compilation and execution of an ,algol_/,,codap program deck1 a load-and-go tape must be requested in the ,,aldap control statement4 ,if no relocatable binary cards follow the last subprogram to be compiled1 then the program deck must be terminated by an ,,eop card which is in addition to the ,,eop card or ,,end card 7the latter for a ,,codap subprogram7 which terminates the last program or procedure4 ,the ,,finis card then follows this additional ,,eop card4 ,an ,,eop card always causes a ,,tra card image to be written on the load-and-go tape4 ,the control statements ,,execute1 ,,binary1 ,,fortran1 ,,rewind and ,,define may be used as described in the 8,,co-,,op ,monitor ,programmer's ,guide04 ,,binary is useful for loading a relocatable binary deck onto the load-and-go tape prior to compilation of an ,algol calling program1 where the subprogram in relocatable form might have the same name as a library routine4 ,if the ,algol program preceded the relocatable deck1 the library routine would be fetched by the loader and an error indication given4 ,the ,,co-,,op control statements ,,load and ,,executer are not used by ,,algol4 ,examples ,each of the following examples describes a job deck which illustrates a different way of compiling and executing the same ,algol program4 ,the program calls a library procedure with entry point named ,,bessel1 and the program contains at least one other procedure4 ,on the ,,mcs card only the first field is indicated1 as the others may vary from one installation to another4 ,example #a ,this job uses the ,,alg mode4 ,,alg,l1 444 4 ,,alg4 ,,lib ,,bessel ,,pr,,gram ,,sample ,algol ,program 7with external declaration of ,,bessel7 ',e,p' ,data ,example #b ,this job uses the ,,aldap mode1 compiling the entire program at once4 ,the ,,aldap control statement calls for an assembled listing1 a binary deck1 and a load-and-go tape on logical unit #ef4 ,the execute card gives a two minute time limit on the execution4 ,,alg,l1 444 4 ,,aldap1#a1a1ef4 ,,pr,,gram ,,sample ,algol ,program 7with external declaration of ,,bessel7 ',e,p' ',e,p' ,,finis ,,execute1#b4 ,data ,example #c ,this job consists simply of the execution of the relocatable program deck obtained in example #b4 ,,alg,l1 444 4 ,,execute1#b4 ,relocatable ,deck ,data ,example #d ,this example is similar to example #b4 ,here the main program and one of its procedures are to be compiled separately4 ,,alg,l1 444 4 ,,aldap1#a1a1ef4 ,,pr,,gram ,,sample ,algol ,program 7with external declaration of both ,,bessel and the procedure being compiled separately7 ',e,p' ,algol ,procedure ',e,p' ',e,p' ,,finis ,,execute1#b4 ,data ,example #e ,in this example the procedure which was compiled separately in example #d is being compiled by itself1 i4e41 the calling program is not in the deck at all4 ,of course there is no execution in this case4 ,note that no load-and-go tape is requested and only one ,,eop card is used4 ,there cannot be a ,,program card4 ,,alg,l1 444 4 ,,aldap1#a1a4 ,algol ,procedure ',e,p' ,,finis ,example #f ,here the procedure compiled by itself in example #e appears in the program deck in relocatable binary form1 while the calling program is in the ,algol language4 ,,alg,l1 444 4 ,,aldap1#a1a1ef4 ,,pr,,gram ,,sample ,algol ,program 7with external declaration of both ,,bessel and the procedure in relocatable form7 ',e,p' ,,finis ,,execute1#b4 ,relocatable ,deck ,data ,the relocatable deck here must be terminated by two ,,tra cards4 ,one of these is generated by the compiler when it processes the ,,eop card which must terminate the procedure for compilation1 as in example #e4 ,the second ,,tra card can be obtained by using a second ,,eop card1 as in example #b4 ,alternatively1 the second ,,tra card can be added to the relocatable deck before execution4 ,note that this second ,,tra card must not be used when the relocatable deck is loaded by a ,,binary control statement4 ,this is illustrated in the next example4 ,example #g ,in this case the previously compiled procedure has the same name as a routine on the library-systems tape4 ,,alg,l1 444 4 ,,binary1#ef4 ,relocatable ,deck 7terminated by one ,,tra card7 ,,aldap1#a1a1ef4 ,,pr,,gram ,,sample ,algol ,program 7with external declaration of both ,,bessel and the procedure in relocatable form7 ',e,p' ',e,p' ,,finis ,,execute1 #b4 ,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 statement4 ,,appendix ,a ,adjuncts to ,algol #fj ,list ,entities ,the delimiter list is a declarator and a specifier4 list identifier 33 identifier loop expression 33 for clause arithmetic expression for clause loop expression for clause 7list7 list element 33 arithmetic expression loop expression list identifier list 33 list element list1 list element list declaration 33 list list identifier 3 list ,format ,entities ,the delimiter format is a declarator and a specifier4 format identifier 33 identifier simple format expression 33'7,fortran format#b7' format identifier format expression 33 simple format expression if clause simple format expression else format expression format declaration 33 format format identifier 3 format expression ,string ,expression string expression 33 string if clause string else string expression ,external ,declaration ,the delimiter external is a declarator4 external identifier 33 identifier external list 33 external identifier external identifier1 external list external declaration 33 external external list type external external list ,,appendix ,b ,hardware ,representation ,one keypunch character is reserved as an 8escape symbol01 which we shall here suppose is the apostrophe4 ,this symbol is used to delineate word delimiters and truth values1 which are written in boldface type in ,algol reference language and publication language and indicated by underlining in this manual4 ,the hardware representation of a word delimiter such as begin is therefore ',,begin'4 ,no distinction is made between upper and lower case letters in the hardware language4 ,the transliteration rules for the non-word delimiters are comprised in the following table4 ,this assumes a #dh character hardware set and is consistent with the usage in the ,,alcor group4 ,for some basic symbols alternatives are tolerated1 as indicated4 ,reference ,hardware ,tolerated ,hardware ',,ls' ',,less' ',,lq' ',,lseq'1 ',,notgreater'1 ',,not ,,greater' ',,eq' ',,equal' ',,gq' ',,greq'1 ',,notless'1 ',,not ,,less' ',,gr' ',,greater' ',,nq' ',,nteq'1 ',,notequal'1 ',,not ,,equal' ',,not' ',,and' ',,or' ',,imp' ',,implies'1 ',,impl' ',,eqv' ',,equiv' ' ',e'1',t' 99 9999 ',,power' _/_/ ',,div' 3 44 2 41 3 41 44 7_/ _/7 #8 '7' ' '7' ,in the case of the string quotes1 the tolerated symbols are required for the inner strings of a nest of strings4 ,actually1 the compiler can tolerate many other spellings of word delimiters because of its facility for correcting misspellings4 ,the delimiter go to is accepted with or without the space between the two words1 but it is treated as a single delimiter3 ',,goto' or ',,go ,,to'4 ,the compiler can also accept a #fd character hardware representation3 the full set available on the line printer4 ,in preparing programs1 overpunching is used on the #dh character keypunch in this case4 ,the table below indicates the keypunching rules in use at ,oak ,ridge ,national ,laboratory4 ,reference ,hardware #a-h punch #a-e punch #a-i punch #b-g punch #b-f punch #c-g punch #b-d punch #a-f punch #b-e punch #c-e punch 3 #b-h punch 2 #b-i punch #c-f punch #c-d punch ,the other basic symbols are either in the #dh character set or are replaced by word delimiters as above4 ,the symbol 3 is treated as two symbols in the #fd character set1 and is punched as such4 ,,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 program4 ,the calling sequence differs from that found in many other languages4 ,the first word of the non-,algol procedure must have a simple jump instruction in its upper half1 and the exit line is provided by a jump to this first word4 ,the entry automatically causes the proper return address to be placed in the address portion of the first half-word4 ,upon entry to the procedure1 index register six contains an address which is used to reference each parameter4 ,to establish linkage with the first parameter1 the instruction ,,lda #f #j is performed4 ,this brings into the accumulator a word of one of the following types3 #a4 ,,slj #j ,,ena ,v #b4 ,,slj #j ,,rtj ,l ,in case 7#a71 ,v is the address of the parameter4 ,in case 7#b71 ,l is the starting address of a piece of coding for computing the address of the parameter and leaving it in the accumulator 7if the parameter is an expression1 the address in the accumulator will be that of a temporary containing its value74 ,case 7#a7 always holds if the parameter is a simple variable1 string1 array identifier1 switch identifier1 or procedure identifier4 ,in case 7#b7 the same temporary will be used for all the expressions4 ,both cases can be provided for by setting aside two locations for each parameter in the procedure body and placing the instruction ,,slj 99-#a in the upper half of each second location4 ,then after ,,lda #f #j mentioned above1 ,,sta ,,res#a1 where ,,res#a is the first reserved location for the first parameter1 makes the two locations into a closed subroutine4 ,after this1 the instruction ,,rtj ,,res#a causes the address of the first parameter to be placed in the accumulator anytime it is performed4 ,this accommodates expressions called by name4 ,in general1 the ,kth parameter is referenced as above1 but beginning with ,,lda #f 7,k - #a74 ,this description does not apply to the standard procedures1 each of which has its own special calling sequence4 ,,appendix ,d ,internal ,representation of ,strings ,the address representing a string is that of the first word of string characters4 ,each left string quote is represented internally by the word #jj 444 #jcded 1 and each right string quote by #jj 444 #jedgd 4 ,the characters of the string which are not string quotes are packed in ,,bcd eight characters per word4 ,these words are in the natural order1 the first immediately following the left string quote and the last immediately followed by the right string quote4 ,if the last word before a right quote is not full1 the rest of that word is filled out with zeros 7not ,,bcd blanks74 ,,appendix ,e ,program ,efficiency ,the following information may be of interest to programmers desiring an efficient program3 #a4 ,the ,,for statement is defined with more generality than is useful in most programs4 ,in particular1 the arithmetic expressions in the ,,for clause are allowed to change in value during execution of the ,,for statement4 ,the compiler does not attempt to determine which ,,for statements make use of this flexibility and treats all of them in the most general way4 ,therefore1 in a statement such as for ,i 3 #a step ,m ,n until abs7,a - ,b7 do 444 1 the expression ,m ,n is evaluated twice for each iteration1 and the expression abs7,a - ,b7 is evaluated once for each iteration4 ,if ,m1 ,n1 ,a 1 and ,b do not change in the loop1 this is unnecessary4 ,such inefficiency can be avoided by programming in a slightly different way4 ,the above example can be written as follows3 ,t#a 3 ,m ,n2 ,t#b 3 abs7,a - ,b7 2 for ,i 3 #a step ,t#a until ,t#b do 444 4 #b4 ,the concept of call by value is a device applied to procedures to eliminate unneeded flexibility in procedure calls4 ,if a parameter having a value is referenced more than once in the procedure body and the flexibility of call by name is not needed1 then the program is more efficient if the parameter is included in the value part of the procedure heading4 ,if such a parameter is referenced only once1 it is more efficient if it is not included in the value part4 #c4 ,array identifiers which are parameters should be specified4 ,,appendix ,f ,controversial ,features of ,algol #fj ,a few features of the language have been subject to more than one interpretation4 ,fortunately1 the vast majority of programs will not involve these ambiguities1 but for the few that do it will be necessary to know what decisions the compiler makes4 ,this appendix indicates these decisions for the more controversial areas4 #a4 ,side effects in function designators4 ,the evaluation of primaries in expressions is not strictly left to right allowing for precedence rules4 ,in particular1 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 expression4 ,otherwise1 the evaluation does proceed from left to right and according to precedence rules1 including the referencing of formal parameters and the calculation of the address of subscripted variables4 ,all function designators are evaluated in ,boolean expressions4 #b4 ,own variables and arrays in procedures4 ,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 reference4 ,in other words1 only one copy of the own quantities is preserved4 ,,appendix ,g ,fortran ,subprograms in an ,algol ,program ,the standard procedures ,,fortran1 ,,fortranf1 ,,ftn1 and ,,ftnf are used to call compiled ,fortran subroutines and functions from within an ,algol program4 ,each procedure has one parameter which is a call of the desired ,fortran subprogram4 ,the ,fortran subprogram must be declared external as described in ,section ,v4 ,the use of these procedures simply causes a ,fortran calling sequence to be generated by the compiler4 ,of course the subprogram could be written in ,,codap as well as ,fortran1 provided it is designed to link through a ,fortran-type calling sequence4 ,the procedures are used as follows3 ,,fortran--generates a ,fortran #fb calling sequence for a subroutine ,,fortranf--generates a ,fortran #fb calling sequence for a function ,,ftn--generates a ,fortran #fc calling sequence for a subroutine ,,ftnf--generates a ,fortran #fc calling sequence for a function ,each of these procedures is standard1 i4e41 available without declaration4 ,,fortranf and ,,ftnf are used in expressions4 ,examples3 x 3 ,,ftnf 7,,alpha7,t1,a#j1j77 ,,fortran 7,,sub7,i ,j77 4 ,the following restrictions must be observed3 labels1 procedures with no parameters1 standard procedure names1 and array names cannot be used as arguments of a call of a ,fortran subprogram4 ,however1 in the case of an array1 the subscripted variable which is the first element of the array will satisfy a ,fortran subroutine which has an array name as a formal parameter4 ,the name of the ,fortran subprogram cannot be a formal parameter4 ,literals must be enclosed in string quotes4 ,footnotes #a,see ,appendix ,a for syntactical definition4 #b;,for definition of ,fortran format1 see ,control ,data ,fortran-#fb ,reference ,manual4 ,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 compiler4 ,these include ,n4 ,b4 ,alexander and ,a4 ,a4 ,grau1 also ,k4 ,a4 ,wolf of ,control ,data ,corporation1 and especially ,r4 ,g4 ,stueland of ,control ,data ,corporation4 ,,ornl-#cdfj ,,uc-#cb--,mathematics and ,computers ,,tid-#dejj 7#bcrd ed47 ,,internal ,,distribution #a4 ,biology ,library #b-d4 ,central ,research ,library #e4 ,reactor ,division ,library #f-g4 ,,ornl--,y-#ab ,technical ,library ,document ,reference ,section #h-bg4 ,laboratory ,records ,department #bh4 ,laboratory ,records1 ,,ornl ,r4,c4 #bi4 ,r4 ,k4 ,adams #cj4 ,nancy ,alexander #ca4 ,e4 ,d4 ,arnold #cb4 ,don ,arnurius #cc4 ,george ,j4 ,atta #cd4 ,susie ,e4 ,atta #ce4 ,s4 ,j4 ,ball #cf4 ,j4 ,e4 ,bigelow #cg4 ,r4 ,e4 ,biggers #ch4 ,craig ,brandon #ci4 ,j4 ,c4 ,bresee #dj-da4 ,l4 ,l4 ,bumgarner #db4 ,w4 ,r4 ,burrus #dc4 ,h4 ,p4 ,carter #dd4 ,d4 ,k4 ,cavin #de4 ,arline ,culkowski #df4 ,w4 ,davis1 ,jr4 #dg4 ,h4 ,j4 de ,bruin #dh4 ,p4 ,b4 ,de,nee #di4 ,a4 ,c4 ,downing #ej4 ,l4 ,c4 ,emerson #ea4 ,margaret ,emmett #eb4 ,r4 ,l4 ,ferguson #ec4 ,b4 ,r4 ,fish #ed4 ,p4 ,a4 ,haas #ee4 ,m4 ,feliciano #ef4 ,barbara ,ann ,flores #eg4 ,t4 ,b4 ,fowler #eh4 ,r4 ,e4 ,funderlic 7,k-#be7 #ei4 ,d4 ,a4 ,gardiner #fj4 ,c4 ,d4 ,griffies #fa4 ,d4 ,a4 ,griffin #fb4 ,d4 ,g4 ,gosslee #fc4 ,m4 ,t4 ,harkrider #fd4 ,m4 ,c4 ,hill #fe4 ,a4 ,s4 ,householder #ff4 ,w4 ,h4 ,jordan #fg4 ,h4 ,w4 ,joy #fh4 ,f4 ,b4 ,k4 ,kam #fi4 ,george ,kidd #gj4 ,l4 ,j4 ,king #ga4 ,ann ,klein #gb4 ,k4 ,a4 ,kraus #gc4 ,c4 ,e4 ,larson #gd4 ,m4 ,e4 ,la,verne #ge4 ,elmon ,leach #gf4 ,r4 ,p4 ,leinius #gg-gh4 ,m4 ,p4 ,lietzke #gi4 ,erlie ,mc,daniel #hj4 ,c4 ,d4 ,martin #ha4 ,k4 ,o4 ,martin #hb4 ,betty ,f4 ,maskewitz #hc4 ,r4 ,p4 ,milford #hd4 ,f4 ,l4 ,miller1 ,jr4 #he4 ,r4 ,v4 ,miskell #hf4 ,s4 ,e4 ,moore #hg4 ,j4 ,f4 ,murdock #hh4 ,c4 ,w4 ,nestor1 ,jr4 #hi4 ,v4 ,k4 ,pare #ij4 ,carl ,e4 ,parker #ia4 ,s4 ,k4 ,penny #ib4 ,a4 ,m4 ,perry #ic4 ,d4 ,c4 ,ramsey #id4 ,m4 ,t4 ,robinson #ie4 ,r4 ,m4 ,rush #if4 ,y4 ,shima #ig4 ,j4 ,e4 ,simpkins #ih4 ,m4 ,j4 ,skinner #ii4 ,c4 ,d4 ,scott #ajj4 ,c4 ,d4 ,susano #aja4 ,j4 ,a4 ,swartout #ajb4 ,m4 ,e4 ,tsagaris #ajc4 ,d4 ,k4 ,trubey #ajd4 ,j4 ,s4 ,watson #aje4 ,a4 ,m4 ,weinberg #ajf4 ,m4 ,e4 ,whatley #ajg4 ,c4 ,s4 ,williams #ajh4 ,h4 ,a4 ,wright #aji4 ,y-#ab ,central ,files #aaj4 ,j4 ,h4 ,zeigler 7,k-#be7 #aaa4 ,h4 ,zeldes ,,external ,,distribution #aab4 ,t4 ,h4 ,elrod1 ,control ,data ,corporation1 ,computer ,division1 #cccj ,hillview ,avenue1 ,palo ,alto1 ,california #aac4 ,a4 ,a4 ,grau1 ,department of ,mathematics1 ,northwestern ,university1 ,evanston1 ,illinois #aad4 ,r4 ,g4 ,stueland1 ,control ,data ,corporation1 ,computer ,division1 #cccj ,hillview ,avenue1 ,palo ,alto1 ,california #aae4 ,k4 ,a4 ,wolf1 ,control ,data ,corporation1 ,programing ,systems1 #eja ,park ,avenue1 ,minneapolis #ae1 ,minnesota #aaf4 ,r4 ,a4 ,zemlin1 ,control ,data ,corporation1 ,computer ,division1 #cccj ,hillview ,avenue1 ,palo ,alto1 ,california #aag4 ,research and ,development ,division1 ,,aec1 ,,oro #aah-gbh4 ,given distribution as shown in ,,tid-#dejj 7#bcrd ed47 under ,mathematics and ,computers category 7#ge copies--,,ots7 ,transcriber's ,notes ,in the ,,html version1 represented code in a monospaced font1 with keywords in boldface as in the ,revised ,report4 ,corrected a few palpable typos4 ,created an original cover image1 using elements from the printed book1 for free and unrestricted use with this e,book4