This readme.txt file contains the list of all bug fixes and additions made to versions 3.02, 3.03, 3.04, 3.06 resulting in version 3.07. 1.0 The following commands have had bugs fixes made at 3.02: SETMOUSE Bug with visible mouse fixed, now coordinates are checked DRAW x,y Buserror is fixed Comparing strings: The bug occuring if the two strings are equal up to the length of the shorter string, is fixed Comparing negative figures does always give the right result PRINT B!(i) now gives 0 or -1 as result; in earlier versions +1 DUMP directly after DIM ... DUMP doesn't show garbage anymore TRIM$ had difficulties with strings containing nothing but spaces STR$(x,i,0) sometimes ROUNDED wrong (USING) OPENW 1-4,x,y is ok. again EXIT x|: No EXIT was possible in a FOR x|... NEXT loop Overwr After RUN the OVERWR did not change to INSERT, but the editor was really in INSERT- mode PUT x,y,"" result: the ST hung up CLEARW n Did not switch off the mouse, and one row and column was not deleted CLEARW #n Result: the ST hung up again - CLEARW #x - clears every visible part of the window, - without activating it. WIND_UPDATE - and WIND_GET are used internally. b|=b|(x) Operating on integers did not work on byte-fieldvariables SSORT crashed often SSORT, QSORT the same problems as with the string-comparison INSERT, DELETE made mistakes when opreated with byte- fieldvariables. running INSERT x$() deleted the last fieldelement INLINE was treated wrong with MERGE, pressing cursor- and functionkeys after HELP led to crash. DUMP: the contents of INLINE occured in hexcode on the printer FOR x| STEP counted only up to 127 C:a%() did not work without parameters. The last L:-Parameter is SWAPPed in D0, although not documented - and not intended - this was changed in version 3.01. The last parameter is in the right order, as it was in v. 2.0. CLIP OFF made mistakes WAVE gave the wrong noises Option NEW NAMES Merging did not switch off the approval and sometimes caused problems BIT (|)- Variable The postfix was missing, because of the alertbox it was changed to backslash more than 256 procedures, INC or DEC led to strange listings: AND, OR etc. were added. SPRITE showing and deleting worked exactly 1000 times. ARRAYFILL accidently caused errors in procedures and For-Next-loops ERASE did not work in SWAPPed arrays. VAR- arrays caused troubles DIM/ERASE did not work properly, if used in procedures that used VAR- parameter as local variable and within FOR- NEXT- loops. TRACE proc sometimes only worked app.4000 times. Block-Llist QUIT was inverted instead of Llist TEXT x,y,FN x$ commands working on string expressions and numbers sometimes did not recognize the FN (instead of @). GRAF_RUBBERBOX, GRAF_DRAGBOX in the manual the two variables for the results are described as optional. FORM_CENTER, FORM_KEYBD, GRAF_HANDLE Starting with version 3.01 the variables for the results of form- center etc. are optional. SHEL_WRITE did not work on empty command- strings MENU_TEXT caused errors Find did not FIND in closed procedures LSET/RSET did not work correctly when you tried to assign a longer string to a string with EVEN length. PRINT USING the comma caused problems DEFLINE ,,,x the Interpreter ignored the last parameter Block-Move Moving a block with the cursor being at the beginning of that block erased the whole block. The cause of this was the growing block, what is suppressed now when trying BLOCK- COPY. VARPTR(b|(i)) i is not doubled anymore HEX$(x), BIN$(x), OCT$(x) x=0 gives zero instead of an empty string PRINT USING numbers smaller than 0.01 are ok ACOS results are positive only in the range of 0..PI SIN/COS/TAN with parameters >1E14 the results are -1 or 1, respectively. POLYLINE, POLYFILL, POLYMARK Number of Points = 0 is ignored ARRAYFILL fills even the last element of the field LSET, RSET und MID$= bug fixed with fieldvariables WIND_CALC is ok. now MENU OFF, MENU x,y is ok. with FORM_DO and OBJC_DELETE INC float,NEXT float mistake in the range of -2 to -1 is fixed DEC float mistake in the range of 2 to 1 is fixed DIM/ERASE caused errors, when used in procedures that used a variable as local that was used as a local variable in the calling procedure. PRINT AT(x,y) LOCATE x,y mouse does not blink anymore. The coordinates are in both cases x,y. Also A mistake, that led to mysterious crashes, is fixed !!! Fixes to the Editor : Choosing F8 with the mouse the cursor is not doubled. The headline is built up again after INLINE-HELP. If the mouse is at the top of the screen, it is not always moved down. The Fileselector keeps only the filename, not the extension. 2.0 The following commands have had bugs fixes made at 3.03: RINSTR did not take the first character. The add- on-byte behind the string was taken into account. OPEN "R" GET and PUT needed a recordnumber, otherwise caused an error. SEEK without referring to an already opened file you caused a bus- or address- error -x^y didn't work EXP() The test for overflow didn't work for sure KEYDEF having the functionkeys defined ESC und RETURN simulate the scan- code as well, so under GEM ESC and RETURN show the usual reaction. DUMP/DIR/FILES the appearance on screen of DUMP/DIR/FILES can be altered in the same way as done with TRON,#. CAPS-LOCK slows down, with RIGHT SHIFT you can interrupt the output on screen. ON BREAK GOSUB x If you press the Control/SHIFT/ALTERNATE too long the procedure will run several times. There are two possibilities to change that: 1) ON BREAK GOSUB x REPEAT UNTIL MOUSEK PROCEDURE x ~BIOS(11,BIOS(11,-1) AND &F1) ' **** as usual RETURN By this means you alter directly the status of the keys 2) ON BREAK GOSUB x REPEAT UNTIL MOUSEK PROCEDURE x ON BREAK CONT ' ****** as usual ON BREAK GOSUB x RETURN In that way you 'switch off' the BREAKroutine using only commands not specific for the computer, just while you are working on that routine. It would be possible to control this in the interpreter. This would have negative consequences on the speed of every call of a Procedure, however. nE+1000 a=1E+100 FOR i=1 to 100 PRINT a^i,LOG(a^i)/LOG(10) NEXT i This example shows you that numbers bigger than 1E+308 are managed correctly, but intentionally the output of numbers > 1E+1000 is incorrect. 3.0 The following commands have had bugs fixes made at 3.04: The "This is not a GFA File" Message The most important difference to earlier versions is the fact, that the programms saved in tokenised *.GFA are shorter. Under versions up to 3.03 saved *.GFA files will be rejected with " This is not a GFA file" If for some reason it is necessary to work on a listing made in 3.04 with an earlier version of the interpreter you have to add some bytes: OPEN "A",#1,dataname$ PRINT #1,STRING$(1000,0) If needed you have to repeat this several times. ERASE now erases local variables, if their names were used in different procedures. Editor : "New Names": The ALERT box will not show up; but the menu will show the SELECTED sign if the option new names is active. Patching headline,footline, initstring and formfieldstring is not possible anymore. the reason is ,it takes 128 bytes of memory. This option is rarely used and would not justify the waste. 4.0 The number version 3.05 was skipped. 5.0 The following ammendments/additions have had been made at 3.06: 5.1 Patchable areas in GFA-BASIC Version 3.06 : Within GFABASIC.PRG and GFABASRO.PRG there is a small area where you can predetermine the appeareance of the programme. Always ensure that you have taken a backup of your master disc before attempting such patches. 5.2 Auto Clear Screen OPEN "U",#1,"GFABASIC.PRG" ! or "GFABASRO.PRG" ' SEEK #1,31 PRINT #1,"E"; ! or "H"; CLOSE #1 with E the monitor screen will be erased before the programme starts with H the monitor is left as it is 5.3 Autorun Patch OPEN "U",#1,"GFABASRO.PRG" ' SEEK #1,32 PRINT #1,"TESTPROG.GFA";CHR$(0); CLOSE #1 When starting the GFABASRO the default TESTPROG.GFA will start if you do not alter this by INSTALL APPLICATION The programme's name and path may not exceed 63 bytes. The Zero byte at the end of the string is very important. If you only give the zero byte, the original status will be reimplemented. 5.4 Variable Default Type OPEN "U",#1,"GFABASIC.PRG" ' SEEK #1,32 FOR i%=0 to 24 READ a% OUT #1,a% NEXT i% CLOSE #1 ' ' A B C D E F G H I J K L M N O P Q R S T U V X Y Z DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 It is possible to change the DATA row. Doing this will alter the preset default-type for the variable, the name of which starts with the above letter. ONLY the following items are allowed.: 0=DEFFLT 1=DEFSTR 2=DEFINT 3=DEFBIT 8=DEFWRD 9=DEFBYT 5.5 Editor colour change OPEN "U",#1,"GFABASIC.PRG" SEEK #1,58 FOR i%=0 to 3 READ a% PRINT #1,MKI$(a%); NEXT i% CLOSE #1 ' ' Normal colours for the Editor DATA &0777,&0700,&0070,&0000 ' ' colours inverted for the Editor ' DATA &0000,&0700,&0070,&0777 Other changes: 5.6 Every open file now takes a 1038 Byte buffer. The GFA BASIC internally now buffers every read/write event to/from diskette. In this way reading/writing is speeded up, especially for LINE INPUT, INPUT when reading line by line. 5.7 There is a new name for files 'STD:'. (This is the same as 'Stdin' 'Stdout' resp. in C-programms.) So you can use a shell to redirect the output of a GFA-BASIC program. GFABASIC TEST >DUMMY This line starts the GFA-BASIC and the programm TEST.PRG Any output via 'STD:' are redirected to the file DUMMY. IMPORTANT: CONTROL-C will cause a hang- up when given while reading/writing DUMMY. the default for input/output is the keyboard/console. 6.0 The following changes were made to 3.06 resulting in a release of 3.07. on 30.6.89 6.1 The buffer-area for open files is enlarged to 4 KByte instead of 1 KByte for version 3.06 and nothing for older versions. 6.2 The ON ERROR handling did in 3.06 free the buffer for open files so that various errors like "Illegal Handle" or "Seek Error" occured. This bug is fixed. 6.3 In the editor the blank after the $-Command (compiler option) has been removed. 6.4 When using INPUT with files the quotation marks and commas are now (again) handled correctly. 6.5 Mixing reading and writing with files without a SEEK in between is now handled correctly. 6.6 In the editor left shift + tab now inserts spaces to the tab position. Right shift + tab now deletes blanks left to the cursor position and when the cursor is positioned on a blank is also deletes this and the following blanks. 6.7 A new command CURVE is now inplemented in 3.07, based upon the BEZIER CURVE function. CURVE x0,y0,x1,y1,x2,y2,x3,y3 The BEZIER-Curve starts at x0,y0, and ends at x3,y3. The curve at x0,y0 is at a tangent with a line from x0,y0 to x1,y1; and at x3,y3 is at a tangent with a line between x3,y3 and x2,y2. eg. x0=10 y0=10 x1=50 y1=110 x2=150 y2=200 x3=350 y3=300 LINE x0,y0,x1,y1 LINE x2,y2,x3,y3 CURVE x0,y0,x1,y1,x2,y2,x3,y3