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


