ALGOL REV. 02.10 -- PAGE 1 10/19/77 085-000021-01 -------------------------------------------------------------------------------- 1. SUMMARY -- ------- THE PURPOSE OF THIS PRODUCT RELEASE NOTICE IS TO PROVIDE THE USER WITH SPECIFIC INFORMATION ABOUT THE PRODUCT WHICH IS NOT AVAILABLE IN THE MANUALS. INFORMATION MAY BE REPEATED IN SUBSEQUENT RELEASE NOTICES IF THE APPROPRIATE MANUAL IS NOT YET AVAILABLE. THIS RELEASE FIXES ALL KNOWN PROBLEMS OF REVISION 2.03. THIS RELEASE INCLUDES MAJOR ENHANCEMENTS: YOU CAN REFERENCE A GLOBAL VARIABLE FROM INSIDE A PROCEDURE THAT WAS CALLED FROM A PROCEDURE THAT IS AT A HIGHER PROCEDURE LEVEL (IN OTHER WORDS, THAT IS MORE INDENTED THAN THE CALLED PROCEDURE); YOU CAN GO TO A GLOBAL LABEL, OR PASS A GLOBAL LABEL TO A PROCEDURE; THERE ARE ROUTINES TO DO BUFFERED AND BLOCK INPUT AND OUTPUT; NO LIBRARY ROUTINES NEED TO BE DECLARED EXTERNAL; INPUT/OUTPUT CHANNEL NUMBERS 0 TO 63 MAY BE USED. BETWEEN REVISIONS, PERIODIC UPDATES MAY BE ISSUED. THE PURPOSE OF AN UPDATE IS TO REDUCE THE TIME REQUIRED TO RESPOND TO PROBLEMS, BY PROVIDING A LEVEL OF CORRECTIONS WHICH DOES NOT REQUIRE A RELEASE OF THE COMPLETE PRODUCT. EACH UPDATE SUPERCEDES THE PREVIOUS UPDATE. THIS RELEASE CONSISTS OF FIVE MAJOR PARTS, AS DEFINED BELOW: PART DESCRIPTION PART NUMBER ------------------ --------------- 1. ALGOL REV 2.10 RELEASE NOTICE 085-000021-01 2. ALGOL REV 2.10 RELEASE MEDIA DEFINED BY THIS RELEASE NOTICE IN SECTION 2A - PRODUCT ORGANIZATION. 3. ALGOL REV 2.10 DOCUMENTATION DEFINED BY THIS RELEASE NOTICE IN SECTION 2B. 4. ALGOL REV 2.10 UPDATE 0 NOTICE 078-000013-00 5. ALGOL REV 2.10 UPDATE 0 MEDIA A. MAG. TAPE 071-000251-00 B. CASSETTE TAPE 070-000189-00 C. DISKETTE 072-000288-00 D. PAPER TAPE 088-000349-00 THE CONTENTS OF THIS RELEASE NOTICE ARE: 1. THIS SUMMARY PAGE 2. PRODUCT ORGANIZATION A. SOFTWARE B. DOCUMENTATION 3. ENVIRONMENT 4. ENHANCEMENTS 5. NOTES/WARNINGS 6. FIXES 7. DOCUMENTATION CHANGES ALGOL REV. 02.10 -- PAGE 2 10/19/77 085-000021-01 -------------------------------------------------------------------------------- 2. PRODUCT ORGANIZATION -- -------------------- A. SOFTWARE -- -------- S PART-NUMBERS FILE FMT NAMES T NOVA ECLIPSE NO - ------------- ------------- ---- --- ------------------------ RDOS ALGOL COMPILER SCHEDULES 521 621 ------------- ------------- PAPER TAPE MODELS 3218 3375 R 088-000034-06 088-000034-06 N/A DUMP ALGOL.SV,AL1.SV, LIBRARY.CM R 088-000035-06 088-000035-06 N/A DUMP AL2.SV R 088-000036-06 088-000036-06 N/A DUMP TRACE.SV MAGTAPE MODELS 3218M 3375M R 071-000010-04 071-000010-04 0 DUMP ALGOL.SV,AL1.SV,AL2.SV, LIBRARY.CM,TRACE.SV CASSETTE MODELS 3218C 3375C R 070-000027-04 070-000027-04 0 DUMP ALGOL.SV,AL1.SV,AL2.SV, LIBRARY.CM,TRACE.SV DISKETTE MODELS 3218F 3375F R 072-000046-01 072-000046-01 1 DUMP ALGOL.SV,AL1.SV,AL2.SV, LIBRARY.CM,TRACE.SV ALGOL RUNTIME SCHEDULES 547 647 ------------- ------------- PAPER TAPE MODELS 3222 3388 R 099-000084-04 099-000084-04 N/A XFER ALGOL0.LB R 099-000028-05 099-000028-05 N/A XFER ALGOL1.LB R 099-000029-05 099-000029-05 N/A XFER ALGOL2.LB R 099-000030-06 099-000030-06 N/A XFER ALGOL3.LB - 099-000055-04 099-000099-02 N/A XFER SMPYD.LB - 099-000057-04 N/A N/A XFER NMPYD.LB - 099-000056-04 N/A N/A XFER HMPYD.LB ALGOL REV. 02.10 -- PAGE 3 10/19/77 085-000021-01 -------------------------------------------------------------------------------- PRODUCT ORGANIZATION (CONT.) -------------------- - N/A 099-000142-02 N/A XFER EMPYD.LB MAGTAPE MODELS 3222M 3388M R 071-000011-05 071-000045-05 0 DUMP ALGOL0.LB,ALGOL1.LB, ALGOL2.LB,ALGOL3.LB, SMPYD.LB, MPYD.LB EMPYD.LB *MPYD.LB CASSETTE MODELS 3222C 3388C R 070-000028-05 070-000073-05 0 DUMP ALGOL0.LB,ALGOL1.LB ALGOL2.LB,ALGOL3.LB, SMPYD.LB, MPYD.LB EMPYD.LB *MPYD.LB DISKETTE MODELS 3222F 3388F R 072-000047-02 072-000049-03 1 DUMP ALGOL0.LB,ALGOL1.LB, ALGOL2.LB,ALGOL3.LB, SMPYD.LB, MPYD.LB EMPYD.LB *MPYD.LB B. DOCUMENTATION -- ------------- S PART-NUMBERS TITLE T NOVA ECLIPSE - ------------- ------------- ----- - 093-000052-05 093-000153-00 EXTENDED ALGOL USER'S MANUAL - 086-000017-00 086-000029-00 ADDENDUM TO USER'S MANUAL R 085-000021-01 085-000021-01 ALGOL REV. 2.10 RELEASE NOTICE A 078-000013-00 078-000013-00 ALGOL REV. 2.10 UPDATE 0 NOTICE -------------------------------------------------------------------------------- ALGOL REV. 02.10 -- PAGE 4 10/19/77 085-000021-01 -------------------------------------------------------------------------------- 3. ENVIRONMENT -- ----------- A. PREREQUISITES -- ------------- RDOS REV 06.00 B. SUPPORTED PRODUCTS -- ------------------ SOS REV 09.01 (RUNTIME ONLY) RTOS REV 05.00 (RUNTIME ONLY) -------------------------------------------------------------------------------- ALGOL REV. 02.10 -- PAGE 5 10/19/77 085-000021-01 -------------------------------------------------------------------------------- 4. ENHANCEMENTS -- ------------ A. YOU CAN NOW REFERENCE A GLOBAL VARIABLE FROM INSIDE A PROCEDURE THAT WAS CALLED FROM A PROCEDURE THAT IS AT A HIGHER PROCEDURE LEVEL. B. YOU CAN GO TO A GLOBAL LABEL, OR PASS A GLOBAL LABEL TO A PROCEDURE. YOU CANNOT SPECIFY A SUBSCRIPTED LABEL NOR A SWITCH DESIGNATOR. YOU MUST DECLARE THE LABEL WITH A LABEL DECLARATOR IF IT IS DEFINED IN THE PROGRAM AFTER ITS USE IN THE INNER PROCEDURE. C. NEW ROUTINES TO DO BUFFERED INPUT/OUTPUT ARE DATAOPEN, DATACLOSE, DATAREAD & DATAWRITE. BUFFERED I/O IS USED FOR GREATER EFFICIENCY. D. NEW ROUTINES TO DO BLOCK INPUT/OUTPUT ARE BLKREAD & BLKWRITE. E. NO LIBRARY ROUTINES NEED TO BE DECLARED EXTERNAL. THIS INCLUDES THE ABOVE NEW I/O ROUTINES, AND GTIME, STIME, TRACE, ONTRACE, OFFTRACE, RANDOM, SEED & MOD. F. MORE THAN 8 OPEN CHANNELS NOW ALLOWED; NUMBERS 0 THRU 63 MAY BE USED. -------------------------------------------------------------------------------- ALGOL REV. 02.10 -- PAGE 6 10/19/77 085-000021-01 -------------------------------------------------------------------------------- 5. NOTES / WARNINGS -- ---------------- A. YOU CANNOT USE THE ROUTINES WRITE, LINEWRITE, OR OUTPUT IN ORDER TO OUTPUT A STRING LONGER THAN 132 CHARACTERS. THIS IS AN RDOS RESTRICTION. B. WITH INTEGER EXPONENTIATION, THE RESULT IS IMPLICITLY FIXED AND NO ROUNDING IS DONE. YOU MAY WRITE AND USE YOUR OWN FUNCTION TO DO A FIX WITH ROUND. C. IN A SWITCH DECLARATION, AN UNDEFINED SWITCH DESIGNATOR IS NOT DETECTED AND THEREFORE NOT IGNORED, BUT INSTEAD THE PROGRAM EXECUTION CONTINUES AT THE NEXT DECLARED SWITCH ELEMENT. D. WITH AN ABNORMAL RETURN TO THE CURRENT BLOCK FROM A STRING FUNCTION, OR AN ABNORMAL RETURN TO THE CURRENT BLOCK FROM A ROUTINE WHICH IS PASSED A STRING EXPRESSION, THE STRING TEMPORARY LOCATIONS ARE NOT FREED. THEREFORE, UNUSED SPACE WILL ACCUMULATE UNTIL THE BLOCK IS EXITED. E. IN THE ASSEMBLY OF AN ALGOL PROGRAM, AN FSUB# OR FCEQ INSTRUCTION CAUSES A "Q" ERROR. THIS SHOULD BE IGNORED. THIS IS BECAUSE: THE ALGOL-INTERPRETED FLOATING-POINT INSTRUCTIONS ARE DEFINED IN THE PARAMETER AND OTHER SOURCE FILES OF THE RUNTIME. THE INSTRUCTIONS ARE DEFINED USING THE .DALC PSUEDO-OP WHICH TELLS THE ASSEMBLER PROGRAM THAT THE REGISTER FORMAT OF THE OBJECT CODE LOOKS LIKE THE BASIC (NOVA) ARITHMETIC/LOGIC INSTRUCTIONS. BUT THE OBJECT CODE LOOKS LIKE AN ECLIPSE INSTRUCTION IN THE CASE OF AN FSUB# OR FCEQ INSTRUCTION BECAUSE IN EACH OF THESE THE NO-LOAD BIT IS 1 AND THE SKIP FIELD IS 0 (NO SKIP). THE ASSEMBLER FLAGS THESE TWO INSTRUCTIONS AS QUESTIONABLE (Q) BECAUSE EACH IS DEFINED AS NOVA-FORMAT BUT THE OBJECT WORD LOOKS LIKE AN ECLIPSE INSTRUCTION. (NO-LOAD + NO-SKIP IS THE CODE FOR THE ECLIPSE INSTRUCTION SET.) F. IF A PROGRAM STARTS WITH A LABEL, THE LABEL MUST NOT BE THE NAME OF A FUNCTION WHICH IS KNOWN TO THE COMPILER. G. FOR AN ARRAY ARGUMENT THAT IS SPECIFIED AS RECEIVED BY VALUE, THE BOUNDS OF THE ARRAY MUST BE SPECIFIED. IF THE BOUNDS ARE NOT SPECI- FIED, FOR EXAMPLE: PROCEDURE X(A); VALUE A; REAL ARRAY A; THEN THE ARRAY IS NOT PASSED BY VALUE. YOU CAN WORK AROUND THIS BY SPECIFYING THE CURRENT BOUNDS; FOR EXAMPLE: PROCEDURE X(A); VALUE A; REAL ARRAY A[LBOUND(A,1): HBOUND(A,1)]; H. FOR A STRING ARGUMENT THAT IS SPECIFIED AS RECEIVED BY VALUE, THE MAXIMUM SIZE MUST BE SPECIFIED OR IT IS DEFAULTED TO 32 CHARACTERS. THE BOUNDS OF STRING ARRAYS RECEIVED BY VALUE MUST BE SPECIFIED AS NOTED ABOVE. I. KEYWORDS MUST BE CAPITAL LETTERS. ALGOL REV. 02.10 -- PAGE 7 10/19/77 085-000021-01 -------------------------------------------------------------------------------- NOTES / WARNINGS (CONT.) ---------------- J. DGC EXTENDED ALGOL DOES NOT USE OR SUPPORT CALL BY NAME. --- ALL REFERENCES TO PROCEDURE PARAMETERS ARE CALL BY REFERENCE UNLESS DECLARED AS CALL BY VALUE OR PASSED BY THE CALLER AS A VALUE (I.E. PASSING AN EXPRESSION). K. "IF" IMMEDIATELY FOLLOWING "THEN" IS NOW ILLEGAL. YOU SHOULD WRITE "THEN BEGIN IF". -------------------------------------------------------------------------------- ALGOL REV. 02.10 -- PAGE 8 10/19/77 085-000021-01 -------------------------------------------------------------------------------- 6. FIXES -- ----- A. "COMARG" RETURNED THE INCORRECT TRUE BOOLEAN VALUE FOR SWITCHES /Q THRU /Z. B. "FORMAT" LOOPED IF GIVEN VALUE 100000R8P1. C. STRING TO NUMBER CONVERSION FAILED TO GIVE ERROR IF A NUMERIC CHARACTER IS EQUAL TO THE RADIX. D. MULTIPLE LEVELS OF ACCESS OF BASED VARIABLES GENERATED BAD CODE. PROBLEM WAS WITH REGISTER ASSIGNMENT. E. PASSING A GLOBAL LABEL AS A PARAMETER TO A PROCEDURE CAUSED COMPILER TO LOOP. F. WHEN PASSING AN INTEGER OR REAL IF THE CALLED ROUTINE SPECIFIED A DIFFERENT PRECISION, THIS DIDN'T WORK EXCEPT WHEN PASSING A REAL CONSTANT, EXPRESSION, OR WHEN PASSING A REAL VARIABLE BY VALUE. G. AN ERROR RETURN FROM A CM ROUTINE PRINTED A BAD RETURN ADDRESS. H. STORING A 15-WORD INTEGER THAT HAS 15 WORD SIGNIFICANCE CAUSED EXPONENT TO DECREASE BY 4. UN-NORMALIZATION WAS WRONG. I. BYTEREAD & BYTEWRITE & LINEREAD & LINEWRITE NOW ALL RETURN THE PARTIAL COUNT. A VARIABLE MUST BE PASSED AS THE COUNT PARAMETER. J. ENTIER DIDN'T WORK IN STANDARD FASHION. IT NOW RETURNS THE LARGEST INTEGER VALUE NOT GREATER THAN THE REAL ARGUMENT. ENTIER(-3.3) RETURNS -4. K. A LOCAL LABEL THE SAME AS A DECLARED GLOBAL CAUSED THE COMPILER TO GENERATE A SPURIOUS BLOCK-END. L. IF A "FOR" INDEX EXPRESSION USED A STRING TEMPORARY, THE COMPILER WASN'T GENERATING A STRING-FREE. THEREFORE, UNUSED SPACE WOULD ACCUMULATE UNTIL THE PROCEDURE EXITED. M. TOO MANY LITERALS CAUSED THE COMPILER TO GENERATE "ER29" AND FAIL. N. "ACCESS" ROUTINE FAILED GIVEN A NON-LITERAL FILENAME. O. IF A "FOR" PHRASE WAS JUST AN ASSIGNMENT THEN THE COMPILER WASN'T RESETTING THE STACK POINTER BEFORE EXECUTING THE "DO" PHRASE. P. SIGNED INTEGER COMPARES DIDN'T WORK WHEN THE DIFFERENCE WAS GREATER THAN 32768. Q. STRING COMPARE GAVE INCORRECT RESULTS IF THE STRINGS HAD UNEQUAL LENGTHS. R. USING A FUNCTION WITH STRING ARGUMENTS IN THE "WHILE" CLAUSE GENERATED AN EXTRANEOUS CALL TO "GETADR" AND CAUSED THE COMPILER TO LOSE TRACK OF ITS TEMPORARY STACK ASSIGNMENTS. ALGOL REV. 02.10 -- PAGE 9 10/19/77 085-000021-01 -------------------------------------------------------------------------------- FIXES (CONT.) ----- S. IF MORE THAN 256 STACK WORDS USED FOR A PROCEDURE THEN COMPILER DID NOT PROPERLY USE THE RETURN ADDRESS OF THE "DO" CLAUSE OF A "FOR" STATEMENT. T. WHEN MOVING CHARACTERS INTO AN OWN STRING AT THE VERY END OF MEMORY (IN THE PERMANENT ALLOCATION AREA, SEE APPENDIX B), THE BYTE ADDRESS WAS WRAPPING AROUND TO LOCATION ZERO, CAUSING MEMORY TO BE BLANKED. U. USING A SCALAR AS AN ARRAY DID NOT CAUSE AN ERROR MESSAGE. V. DECLARATION OF AN OPERATOR WITHOUT SUPPLYING A PRECEDENCE ENCLOSED IN PARENTHESES CAUSED THE COMPILER TO TRAP IN A MAPPED SYSTEM AND TO CRASH THE SYSTEM IF UNMAPPED. W. A DECLARATION AFTER A PROCEDURE STATEMENT BUT BEFORE A BEGIN, WHICH DECLARES A VARIABLE THAT IS NOT AN ARGUMENT, NOW CAUSES A WARNING MESSAGE. X. A SUBSCRIPTED LABEL PARAMETER WAS NOT HANDLED CORRECTLY BY "SAVE" ROUTINE. Y. ROUTINES "HBOUND", "LBOUND" AND "SIZE" DIDN'T CHECK FOR A SUBSCRIPTED ARGUMENT. Z. THE COMPILER GAVE NO INDICATION IF THERE WERE MISSING "END" STATEMENTS AT THE END OF THE PROGRAM NOR DID THE COMPILER GIVE AN INDICATION IF STATEMENTS APPEARED AFTER THE LAST "END". AA. COMPILER NOW IGNORES PARENTHESES AFTER AN "END" BUT BEFORE THE FOLLOWING SEMICOLON OR KEYWORD. BB. A "NOT" FOLLOWING A PLUS OR MINUS BUT WITH NO INTERVENING NON- ALPHANUMERIC CHARACTER CAUSED THE COMPILER TO SUBSTITUTE THE PLUS OR MINUS FOR THE "NOT". THEREFORE THE STATEMENT "FOR EXPR+SCALAR WHILE NOT BOOLEAN ..." CAUSED AN ARITHMETIC OPERATOR TO BE APPLIED TO A NON-ARITHMETIC OPERAND. CC. IF A SUBSCRIPTED OR POINTER EXPRESSION IS ENCOUNTERED IN A FLOATING- POINT OR MULTI-PRECISON-INTEGER EXPRESSION, AND AC2 HAS AN INTEGER OR POINTER EXPRESSION IN IT FROM A PREVIOUS EXPRESSION, THEN THE GENERATED CODE FAILED TO SAVE AC2 BEFORE RE-USING AC2 FOR THE SUBSCRIPT OR POINTER EXPRESSION. DD. ARRAY DECLARATIONS COULD NOT HANDLE GLOBAL VARIABLES AS BOUNDS SPECIFIERS. EE. EXPONENTIATION USING MULTI-PRECISION INTEGER POWER, DID AN INTEGER MULTIPLY OF THE LOG AND POWER. CORRECT RESULTS ARE OBTAINED NOW THAT A REAL MULTIPLY OF THE LOG AND POWER IS DONE INSTEAD. THE RESULT IS STILL AN INTEGER. NOTE THAT THE RESULT IS IMPLICITLY FIXED AND NO ROUNDING IS DONE. FF. YOU CAN NOW CALL A PARAMETRIC PROCEDURE THAT IS GLOBAL TO THE ALGOL REV. 02.10 -- PAGE 10 10/19/77 085-000021-01 -------------------------------------------------------------------------------- FIXES (CONT.) ----- CURRENT PROCEDURE. (A PARAMETRIC PROCEDURE IS ONE THAT IS AN ARGUMENT IN A PROCEDURE STATEMENT.) GG. IF THE FIRST STATEMENT IN A BLOCK (WHICH STATEMENT WAS NOT PRECEDED BY A LABEL) LOADED A BASED VARIABLE WHICH WAS POINTED TO BY A LITERAL, THEN THE WRONG LITERAL REFERENCE WAS GENERATED. HH. STRING TO INTEGER CONVERSION PRODUCED INCORRECT RESULTS IN MOST CASES IF GIVEN A REAL NUMBER. STRING TO INTEGER OR STRING TO REAL CONVERSION PRODUCED INCORRECT RESULTS (OR CAUSED A RUN-TIME ERROR MESSAGE), IF THE STRING HAD REPEATED PLUS, MINUS, PERIOD, OR E CHARACTERS. ALSO, A LOWER-CASE E CAUSED A RUN-TIME ERROR MESSAGE. -------------------------------------------------------------------------------- ALGOL REV. 02.10 -- PAGE 11 10/19/77 085-000021-01 -------------------------------------------------------------------------------- 7. DOCUMENTATION -- ------------- EXTENDED ALGOL USER'S MANUAL ---------------------------- PART 1, 6 ELEMENTS OF PIPE[5,5] GO THRU [5,0] TO [5,5], NOT [6,6]. PART 2, 5-4, PARAGRAPH 3 CHANGE "KEYBOARDS" TO "KEYWORDS". PART 2, 6-4, INTEGER V:= REAL E; REPLACE PARAGRAPH WITH, THE REAL EXPRESSION IS EVALUATED AND TRUNCATED TO AN INTEGER USING THE BUILT-IN FUNCTION "FIX". PART 2, 6-5, REAL V:= STRING E; REPLACE LAST SENTENCE OF PARAGRAPH, THE STRING OF CHARACTERS HAS THE FORM: [-] NN...N [.NN...N] [[E][-] NN] [RNN] WHERE EACH N IS A DIGIT, BRACKETED PORTIONS OF THE FORM ARE OPTIONAL, AND + MAY BE SUBSTITUTED FOR -. RNN IS AN OPTIONAL RADIX SPECIFICATION. PART 2, 6-6, STRING V:= POINTER E; ADD A SENTENCE, EACH N IS AN OCTAL DIGIT. PART 2, 6-6, ADD TO PARAGRAPH ABOUT POINTER:=STRING, OCTAL RADIX IS ASSUMED. PART 2, 6-6, THE FIRST EXAMPLE SHOULD READ: S[A,K+2] := 3-ARCTAN(ZETA) PART 2, 6-10, UNDER IF STATEMENT, UC IS AN UNCONDITIONAL CLAUSE, WHICH MAY BE A STATEMENT, COMPOUND STATEMENT, OR BLOCK, BUT CANNOT BE ANOTHER IF CLAUSE. PART 2, 7-19, "BASED ARRAY X[-1:5]" SHOULD BE "BASED ARRAY I[-1:5]" PART 2, 7-20, THE EXAMPLE SHOULD READ: FOR P := P>I WHILE P <> 0 DO IF (P+1) > I = KEY THEN GO TO MATCH; NOMATCH: -----; MATCH: -----; PART 2, 7-22, IN THE EXAMPLE OF OPERATOR CAT REPLACE ...+LENGTH(B)):=C WITH ...+LENGTH(C)):=C PART 2, 7-22 DELETE THE WORD "EXTERNAL" FROM THE FIRST AND THIRD PARAGRAPHS. ALGOL REV. 02.10 -- PAGE 12 10/19/77 085-000021-01 -------------------------------------------------------------------------------- DOCUMENTATION (CONT.) ------------- PART 2, 8-7, PARAGRAPH 2, THE NUMBER OF ACTUAL PARAMETERS IN A PARAMETER LIST SHOULD MATCH THE NUMBER OF FORMAL PARAMETERS. IF ACTUAL NUMBER OF ARGUMENTS IS GREATER THAN THE NUMBER OF FORMAL PARAMETERS, THE SUPERFLUOUS ARGUMENTS ARE IGNORED. IF THE FORMAL NUMBER OF ARGUMENTS IS GREATER THAN THE NUMBER OF ACTUAL NUMBER OF PARAMETERS, THE SUPERFLUOUS PARAMETERS ARE SET TO NULL IF THEY ARE SCALARS. PART 2, 8-9 ADD THE FOLLOWING: THE ALGOL COMPILER ALLOWS A TYPE'D PROCEDURE TO BE EXECUTED BY A AS AN EXTENSION TO THE ALGOL 60 REVISED REPORT, BY PASSING, AS THE FIRST ARGUMENT IN THE CALL, AN ARGUMENT TO RECEIVE THE RESULT OF THE PROCEDURE, FOLLOWED BY THE REMAINING ARGUMENTS THAT CORRESPOND TO THE OF THE PROCEDURE. THE COMPILER DOES NOT ALLOW THE USE OF AN UNTYPE'D PROCEDURE AS A . PART 2, 9-2, NEW DESCRIPTION OF ENTIER, THE ENTIER FUNTION RETURNS AN INTEGER GIVEN A REAL EXPRESSION. IT GIVES THE LARGEST INTEGER VALUE NOT GREATER THAN THE REAL ARGUMENT. ENTIER(-3.3) <-- RETURNS -4 PART 2, 9-8 THE FIRST SENTENCE SHOULD READ: "BYTES OF AN INTEGER OR BASED INTEGER ARE TREATED AS STRING CHARACTERS." THE FIRST EXAMPLE SHOULD READ: INTEGER I; STRING S; I := 101R8; /* ASCII A */ S := SUBSTR(I,2); /* S = "A" AFTER THIS */ STRIKE THE SENTENCE "THE POINTED TO BASED INTEGER IS NOT TREATED AS AN INTEGER VALUE AS IN THE EXAMPLE ABOVE, BUT IS TREATED AS A STRING." THE SECOND EXAMPLE SHOULD READ: BASED INTEGER BI; BASED STRING BS; POINTER P; STRING S; P := ADDRESS(S); S := SUBSTR (P>BI, 1, 5); S := SUBSTR (P>BS, 1, 5); THE ASSIGNMENT STATEMENTS ARE THE SAME EXCEPT THAT THE BASED INTEGER IS FASTER. ALGOL REV. 02.10 -- PAGE 13 10/19/77 085-000021-01 -------------------------------------------------------------------------------- DOCUMENTATION (CONT.) ------------- PART 2, 9-9 UNDER ASCII (BYTE) FUNCTION, THE PROTOTYPE STATEMENT SHOULD READ: ASCII ( V, [N] ) OR BYTE (V, [,N]) UNDER MEMORY FUNCTION, ADD THE FOLLOWING NOTE: IF PASSING VALUE AS A PARAMETER OF A PROCEDURE, YOU MUST USE "(MEMORY)" SINCE "MEMORY" WILL BE INTERPRETED AS PASSING A PROCEDURE NAME. PART 2, 9-10, PUT THE FOLLOWING PARAGRAPH BEFORE EXAMPLE: CLASSIFY TERMINATES WHEN IT FINDS A MATCH SO TO CATCH NO MATCH USE 0,377R8 AS THE LAST RANGE. PART 2, 9-14, IN THE 2ND PARAGRAPH UNDER "OUTPUT DATA", DELETE THE SENTENCE, "THE READ PROCEDURE IGNORES NULLS FOLLOWING LIST." PART 2, 9-20, SECOND PARAGRAPH OF PURPOSE, ADD, "NOT MORE THAN 132 CHARACTERS CAN BE TRANSFERRED." PART 2, 9-20,21, COUNT SHOULD BE A VARIABLE OR EXPRESSION, BUT NEVER A LITERAL. LINEWRITE PURPOSE: IF AN ERROR OCCURS ON A LINEWRITE, COUNT WILL CONTAIN THE NUMBER OF BYTES WRITTEN UP TO THE ERROR. BYTEREAD PURPOSE: IF AN EOF OCCURS ON A BYTEREAD, COUNT WILL CONTAIN THE NUMBER OF BYTES READ UP TO THE EOF. BYTEWRITE PURPOSE: IF AN ERROR OCCURS ON A BYTEWRITE, COUNT WILL CONTAIN THE NUMBER OF BYTES WRITTEN UP TO THE ERROR. PART 2, 9-21, COMMENT FOR EXAMPLE SHOULD READ: THE ALLOCATE ROUTINE MAKES THE POINTER CALLED BUFFER, POINT TO AN AREA OF 100 WORDS. BYTEREAD READS 200 BYTES INTO THE AREA. PART 2, 9-30 YEAR IS AN INTEGER CONSTANT OR VARIABLE REPRESENTING THE CURRENT YEAR LESS 1900; E.G., 1974 IS REPRESENTED AS 74. PART 2, 9-36, THE ORDER OF LAST TIME REFERENCED AND BLOCK CORE ADDRESS SHOULD BE REVERSED. PART 2, 9-45 THE FIRST TWO LINES OF THE EXAMPLE AT THE TOP OF THE PAGE SHOULD READ: LITERAL MINRES (-3); INTEGER ARRAY A [MINRES:6], B [MINRES:10]; ALGOL REV. 02.10 -- PAGE 14 10/19/77 085-000021-01 -------------------------------------------------------------------------------- DOCUMENTATION (CONT.) ------------- PART 2, 9-51, NEW PAGES, BUFFERED AND BLOCKED INPUT/OUTPUT --------------------------------- READ OR WRITE ANY BLOCK ----------------------- CALL FORMATS: BLKREAD (CHANNEL, BLOCK, POINTER, COUNT, [,ERROR-LABEL]); BLKWRITE(CHANNEL, BLOCK, POINTER, COUNT, [,ERROR-LABEL]); WHERE: CHANNEL IS THE CHANNEL NUMBER ASSOCIATED WITH THE FILE TO BE READ OR WRITTEN. BLOCK IS THE NUMBER OF THE FIRST BLOCK TO BE READ OR WRITTEN. POINTER IS A POINTER TO THE WORD IN CORE AT WHICH READING OR WRITING BEGINS. COUNT IS AN IDENTIFIER GIVING THE NUMBER OF BLOCKS TO READ OR WRITE. COUNT RETURNS THE NUMBER ACTUALLY READ OR WRITTEN. ERROR-LABEL IS AN OPTIONAL LABEL OF A STATEMENT TO WHICH RETURN IS MADE IF ANY ERROR, INCLUDING AN END-OF-FILE, OCCURS. PURPOSE: THE PROCEDURES PROVIDE FOR TRANSFERRING ANY ONE OR MORE 256-WORD BLOCKS FROM OR TO A FILE. OPEN FILE FOR BUFFERED I/O -------------------------- CALL FORMAT: DATAOPEN (CHANNEL, FILENAME [,ERROR-LABEL]); WHERE: CHANNEL IS THE CHANNEL NUMBER TO BE ASSOCIATED WITH THE FILE. FILENAME IS A STRING CONTAINING THE NAME OF THE FILE TO BE OPENED. ERROR-LABEL IS AN OPTIONAL LABEL OF A STATEMENT TO WHICH RETURN IS MADE IF THE FILE CANNOT BE OPENED FOR SOME REASON, OR IF THE FILE IS OPEN ALREADY BECAUSE OF AN OPEN, APPEND, OR ACCESS STATEMENT. IF THE FILE DOES NOT EXIST, AND NO ERROR-LABEL IS SUPPLIED, THE FILE IS CREATED. PURPOSE: THIS PROCEDURE OPENS A FILE FOR BUFFERED READING OR WRITING AND ASSOCIATES A CHANNEL WITH THE FILE. ALGOL REV. 02.10 -- PAGE 15 10/19/77 085-000021-01 -------------------------------------------------------------------------------- DOCUMENTATION (CONT.) ------------- A BUFFER OF 256 WORDS IS ALLOCATED FOR THE FILE IN THE PERMANENT ALLOCATION AREA FOUND AT THE END OF OF MEMORY (SEE APPENDIX B, THE RUN-TIME STACK). DATA IS COLLECTED IN THIS BUFFER, BYPASSING THE BUFFERING DONE BY THE MONITOR FOR GREATER EFFICIENCY. IF YOU WRITE TO THE FILE, THEN YOU SHOULD CALL DATACLOSE BEFORE EXITING YOUR PROGRAM SO THAT THE DATA IN THE BUFFER WILL BE WRITTEN TO THE FILE. CLOSE FILE OF BUFFERED I/O -------------------------- CALL FORMAT: DATACLOSE (CHANNEL [,ERROR-LABEL]); WHERE: CHANNEL IS THE CHANNEL NUMBER ASSOCIATED WITH THE FILE BY A DATAOPEN. ERROR-LABEL IS AN OPTIONAL LABEL OF A STATEMENT TO WHICH RETURN IS MADE IF ANY ERROR, INCLUDING A PROBLEM WITH WRITING THE LAST BUFFER, OCCURS. PURPOSE: THIS PROCEDURE CLOSES A FILE FOR BUFFERED I/O. IF YOU WRITE TO THE FILE, THEN YOU SHOULD CALL THIS PROCEDURE BEFORE EXITING YOUR PROGRAM SO THAT THE DATA IN THE BUFFER WILL BE WRITTEN TO THE FILE. YOU MUST CALL DATACLOSE AND DATAOPEN IN ORDER TO CHANGE BETWEEN READING AND WRITING A FILE. YOU MUST CALL DATACLOSE BEFORE YOU CAN DO OTHER (UN-BUFFERED) TYPES OF I/O WITH THIS FILE. READ OR WRITE BUFFERED DATA WORDS --------------------------------- CALL FORMATS: DATAREAD (CHANNEL, POINTER [,WORDCOUNT [,EOF-LABEL] ]); DATAWRITE(CHANNEL, POINTER [,WORDCOUNT]); WHERE: CHANNEL IS THE CHANNEL NUMBER ASSOCIATED BY A CALL TO DATAOPEN WITH THE FILE TO BE READ OR WRITTEN. POINTER IS A POINTER TO THE WORD IN CORE WHERE READ- ING OR WRITING BEGINS. POINTER CAN BE AN ADDRESS EXPRESSION. WORDCOUNT IS AN OPTIONAL NUMBER OF WORDS TO BE READ OR WRITTEN. IF COUNT IS NOT GIVEN OR IS ZERO THEN ONE WORD IS ASSUMED. IF READING, COUNT MUST BE A VARIABLE IN WHICH THE NUMBER OF WORDS ACTUALLY READ IS RETURNED. ALGOL REV. 02.10 -- PAGE 16 10/19/77 085-000021-01 -------------------------------------------------------------------------------- DOCUMENTATION (CONT.) ------------- EOF-LABEL IS AN OPTIONAL LABEL OF A STATEMENT TO WHICH RETURN IS MADE IF AN END-OF-FILE OCCURS. IF THE LABEL IS OMITTED THEN AN EOF WILL CAUSE A FATAL I/O ERROR. PURPOSE: THE PROCEDURES PROVIDE FOR READING OR WRITING USING AN ALLOCATED BUFFER FOR GREATER EFFICIENCY. YOU MUST CALL DATACLOSE AND DATAOPEN IN ORDER TO CHANGE BETWEEN READING AND WRITING A FILE. IF YOU WRITE TO THE FILE, THEN YOU SHOULD CALL DATACLOSE BEFORE EXITING YOUR PROGRAM SO THAT THE DATA IN THE BUFFER WILL BE WRITTEN TO THE FILE. ANY ERROR DURING READING OR WRITING WILL CAUSE A FATAL I/O ERROR. PART 2, 11-1, THE SECOND SENTENCE, SECOND PARAGRAPH SHOULD READ: AFTER THE FILE HAS BEEN INCLUDED, COMPILATION OF THE PROGRAM RESUMES ON THE INPUT LINE FOLLOWING THE LINE CONTAINING THE INCLUDE STATEMENT. PART 2, 12-2 (86-17-0) ADD THE FOLLOWING AT THE END OF THE CHAPTER: "ALGOL DOES NOT IMPLEMENT CALL BY NAME. PARAMETERS OF A PROCE- DURE ARE PASSED AS CALL BY REFERENCE OR CALL BY VALUE. THIS MEANS THAT NON-SCALARS AND EXPRESSIONS ARE EVALUATED ONLY ONCE, BEFORE THE CALL IS MADE." PART 2, B-6 THE DIAGRAM SHOULD READ: PAGE 0 OF STACK FRAME .SP = .FP PAGE 1 OF STACK FRAME .SP = .FP+1*400(8) PAGE 2 OF STACK FRAME .SP = .FP+2*400(8) ... PAGE N OF STACK FRAME .SP = .FP+N*400(8) PART 2, B-10 SECOND PARAGRAPH ON ARRAY INFORMATION, THE FIRST WORD CONTAINS THE NUMBER OF WORDS IN THE DOPE MINUS ONE. THE SECOND ... PART 2, B-11, FIX ARRAY PICTURE PER ABOVE. PART 2, C-3, REPLACE MEANING OF GETSP, GETSP SETS .SP BY SEARCH FOR A PROCEDURE AT THE GIVEN LEVEL WHOSE ENTRY ADDRESS IS CLOSEST TO AND LESS THAN (OR EQUAL TO) THE ENTRY ADDRESS OF THE CURRENT PROCEDURE. THE OFFSET FROM THE STACK FRAME THAT IS SPECIFIED BY THE SUBLEVEL IS COMPUTED AS DEFINED IN APPENDIX B. ALGOL REV. 02.10 -- PAGE 17 10/19/77 085-000021-01 -------------------------------------------------------------------------------- DOCUMENTATION (CONT.) ------------- PART 2, C-3 THE MEANING OF SPINIT SHOULD READ: "SPINIT INITIALIZES THE RUN-TIME ENVIRONMENT. IT RECEIVES CONTROL FROM THE OPERATING SYSTEM." PART 2, C-4 INSERT THE FOLLOWING AFTER THE FIRST SENTENCE IN THE PARAGRAPH IF N>M THE LAST N-M PARAMETERS WILL BE PASSED WITH A NULL VALUE. THIS WILL WORK FOR SCALARS BUT NOT ARRAYS. PART 2, C-9, DELETE THE SENTENCE THAT STARTS "NOTE THAT THE DIMENSIONS ..." PART 2, C-10, DELETE SENTENCE STARTING, "HOWEVER, THEY" AND ENDING, "HIS PROGRAM." PART 2, C-15 DESC1 AND DESC2 FOLLOW THE JSR @CVST. PART 2, C-16 ADD TO MEANING OF RANDOM, IN THE SERIES IT GENERATES THE CONSTANTS ARE A=8197= 2000R8 AND C=13849=33031R8. PART 2, C-16 REPLACE IN ALL EXPRESSIONS "**" WITH "^". PART 2, C-17 THE CODING AND MEANING OF BYTE IS THE SAME AS ASCII PART 2, C-17 IN DESCRIPTION OF ROUTINE CLASSIFY, REPLACE ALL "DESC" WITH "LOC". PART 2, C-18 ADD THE FOLLOWING RUNTIME ERROR: 524 "UNKNOWN ERROR CODE" ANOP IS AND ARITHMETIC NO-OP ON NOVA'S. PART 2, C-27 THE CODING FOR MPY IS: MPY THE CODING FOR DVD IS: DVD PART 2, C-31, C-32, C-33, REPLACE IN ALL EXPRESSIONS "**" WITH "^". PART 2, C-41, CODING OF ACCESS SHOULD HAVE BRACKETS AROUND "DESC4". PART 2, C-41, <.EXTN NAME> OR <.EXTN NAME> SHOULD READ: <.EXTN NAME> OR <.EXTD NAME> ALGOL REV. 02.10 -- PAGE 18 10/19/77 085-000021-01 -------------------------------------------------------------------------------- DOCUMENTATION (CONT.) ------------- PART 2, D-9 THE REFERENCE TO "DUMMY SOS.LB" SHOULD BE DELETED. THE REFERENCE TO SOFTMPYD.LB ON THE LAST LINE SHOULD BE SMPYD.LB. PART 2, D-11, THE INSTRUCTIONS FOR PRODUCING A STAND-ALONE ALGOL PROGRAM SHOULD READ: 1. COMPILE THE PROGRAM AS USUAL UNDER RDOS. 2. PRODUCE AN APPROPRIATE TRIGGER USING SOS SYSGEN OR THE ASSEMBLER UNDER RDOS. 3. MAKE SURE THAT SOS.LB IS ON THE SYSTEM AND SOSCT.LB OR SOSMT.LB IF CASSETTE OR MAGTAPE ARE INCLUDED. 4. LOAD THE ASSEMBLED PROGRAM, THE TRIGGER AND LIBRARY, USING THE GLOBAL /C SWITCH WHICH CAUSES THE SAVE FILE TO START AT LOCATION ZERO. 5. MAKE AN ABSOLUTE BINARY FILE, USING THE MKABS COMMAND WITH A /Z SWITCH AND 377/S TO GIV THE STARTING ADDRESS. THE RLDR COMMAND LINE SHOULD READ: RLDR/C OCTACL TRIG SOS.LB @LIBRARY.CM@ THE MKABS COMMAND LINE SHOULD READ: MKABS/Z OCTAL $PTP 377/S THE LAST PARAGRAPH SHOULD READ: TO RESTART THE LOADED PROGRAM, START AT 377(8). PART2, E-1 THE LAST LINE OF THE LAST EXAMPLE SHOULD READ: J := I+2; <-- NOT J := I+2.0; PART 2, G-6 ADD THE FOLLOWING TO THE NEXT TO LAST PARAGRAPH: "BREAKPOINTS MAY NOT BE LEFT ON ANY JSR @XXXXX, WHEN PROCEEDING FROM THAT POINT, BECAUSE THE RUNTIME SAVE ROUTINES LOOK AT THE CALLING INSTRUCTION FOR LINKAGE." PART 2, INDEX, ADD THE FOLLOWING TO THE INDEX, RANDOM, DATAOPEN, DATACLOSE, DATAREAD, DATAWRITE, BLKREAD, BLKWRITE