ACTION! BUG SHEET #3 - part 5 ------------------------------------- ACTION MANUAL ERRATA First of all, you need to know which version of the manual you have. If Part III is the Language, then you have the first version of the manual. Otherwise, you have the second (newest) version. Unfortunately, both manuals contain content as well as typographical errors. We'll skip the typos and concentrate on the content errors, since typos don't impair your understanding of the language (although you may wonder where we learned to spell). VERSION 1 ERRATA: PAGE ERROR 2 In the last paragraph, it says that the library is on the disk. This is not true. It's in your cartridge. 23 Under the description of , the comparison with the Atari screen editor is exactly reversed. If you are in REPLACE mode, this key works as in the Atari editor. 26 Under T, it says you may not use lower-case characters as tags. This is untrue. 48 In the NOTE preceeding 4.3, you should add "The *, /, and MOD operators result in an implied INT type. For this reason, multiplication, division, and modulus of large CARD numbers does not always work properly." 49 Section 4.4 says that you may only have one special operator in a complex relational expression. This is untrue. For example, the following is perfectly legal: (x=7 AND y#10) OR z<100 82 Section 6.2.3 implies that you may not use a function as a procedure. This is not true. You may call a function as though it were a procedure, but the value returned from the function is ignored. 97 Section 8.1.1 states that you may either initialize a POINTER to an address or give it a value. Only the second is possible, and you should use this form: BYTE POINTER x= Not this: BYTE POINTER x=[] 99 In example #1 there are two PrintF statements which have "ptr" as one parameter. These should be "bptr", not "ptr". 101 In the last example of ARRAY declaration (BYTE ARRAY tests(5)...), the dimension is overruled by the initialization options, and so its dimension is only three. To fill only the first 3 of 5 elements, do the following: BYTE ARRAY tests(5)= [4 7 18 0 0] 104 In example #3 you see the program line "PrintE(b)". This should read "PrintE(barray)". 108 Section 8.3.1.2 states that you can initialize the fields of a record when you declare it. This is untrue; you may only initialize its address. 110 The program line "rec.level = InputB()" should read "rec.level = GetD(7)". 112 Same as previous error. 115 Same as previous error. 112 The program line "continue=InputB()" should read "continue=GetD(7)" 120 The program line "mode=InputB()" should read "mode=GetD(7)", and the program line "PrintE(name)" should read "PrintE(nameptr)". 115 Same as previous error. 122 The program line "incctr=chgclr" should read "incclr=chgclr". 142 Section 5.3 states that you should not use channel 7. ACTION! uses this channel to get characters from the keyboard, and you may use it to do this also. However, don't close this channel or alter its configuration in any way. 153 The example of declaring an ACTION! procedure at an address is wrong! If you do this, the internal pointer to the procedure will point to the specified address, but the code generated by the procedure will not be there. Instead, it will be in with your main code. Use procedure and function addressing ONLY to call machine language routines. 161 Where the table of contents lists the routines in section 2.3, it should read: PrintBD NOT PrintDB PrintCD NOT PrintDC PrintID NOT PrintDI 162 Where the table of contents lists the routines in sections 6.7 and 6.8, it should read: PeekC NOT CPeek PokeC NOT CPoke 165 Error in section 2.3. See changes for pg. 161 and make similar corrections. 179 Section 6.4 states some information concerning the results of misusing the SCopy routine, detailing that the routine does string trucation, etc., to make the procedure work. This is not true. You must make sure that the strings are compatible in size. 181 Section 6.8 states that the parameters to Poke and PokeC consist only of an address. Instead, they consist of an address and a value, as follows: Poke(
,) PokeC(
,) 182 Section 6.11. MoveBlock will move a maximum block of 256 bytes in versions 3.0 to 3.4 of ACTION! Versions 3.5 and up will move any number of bytes. 191 Some error numbers are wrong. The corrections are: 14 Out of Space 15 Missing DO 19 Missing OD 24 Illegal FOR statement 26 Nesting Too Deep 27 Illegal TYPE reference 28 Illegal RETURN 128 BREAK key abort Also, error 62 is error 61, and 54 & 56 do not exist. 197 In the PrintF statement, %D should be changed to %U. VERSION 2 ERRATA: PAGE ERROR 38 Section 2.7, paragraph 3. The last sentence states that you can RUN compiled ACTION! programs from disk. This is untrue. The RUN command will only compile and run ACTION! source files. Use DOS to run compiled object files. 39 The last RUN example (RUN PrintE()) will not work, since RUN expects a file name. Use the "Xecute" command instead. 63 In the TECHNICAL NOTE preceeding section 4.3, "*" should be changed to "*, /, or MOD". 126 The last assignment on the page makes newrecord point to the current record in the array, not the end of the array. 132 The program line "mode=InputB()" should be changed to "mode=GetD(7)". 138 The program line "IF sub(1)=str(ctr)" should read "IF sub(1)=str(ctrl)". 163 The PutDE procedure requires only a channel as a parameter, and does not put out both a character and a . Rather, it puts out a only. 172 In graphics mode 0 and all text windows, color 1 is the character luminance, color 2 is the background color, and color 3 is unused. 174 In section 5.6, references to the "lower right corner" should instead be "lower left corner". 180 Section 6.1.2 states some information concerning the results of misusing the SCopy routine, detailing that the routine does string truncating, etc. This is not true. You must make sure that the strings are compatible in size. 182 Section 6.11. MoveBlock will move a maximum block of 256 bytes in versions 3.0 to 3.4 of ACTION! Versions 3.5 and up will move any number of bytes.