
				-----------
				ACE history		
				-----------		

2/3/92			- Version 1.0 released to testers.

13/3/92 		- Numerous bug fixes:
				- parameters were being corrupted in some
				  complex recursive calls (see ackermann.b).
				- array referencing with float index in INPUT
				  was corrupting the input value.
				- narrator library was being expunged after
				  every SAY command -- now only expunged
				  once at the end of the program.

14/3/92			- Above fixes released to testers.

22/3/92 - 27/3/92	- Added block comments {...}.
			- Added forward SUB declarations.
			- Made ALL shared variables call-by-reference.
			- Local SUB string duplication bug fixed (same
			  BSS object name being given to numerous
			  strings in different subprograms). 
			- Re-released to testers.

4/4/92			- Fixed relational string operators >,<,>=,<=
			  so that proper lexicographical comparisons are
			  made. Even though = and <> worked fine before,
			  these have also been modified. All now use a
			  more efficient C-style _strcmp function. 

5/4/92			- Update sent to testers.

7/4/92			- Maximum duration for SOUND (in db.lib) changed
			  to 999 from 77 to accomodate large sound samples
			  (see play.b for an example).

21/4/92			- Sequential files simplified: EOF no longer looks
			  for EOF character (ASCII 28), it just tries to
			  seek past the current position returning a seek
			  error if it can't (ie: EOF reached).
			
22/4/92			- Made CLS 1.3 and 2.04 compatible (in db.lib).
			- Added logical shift functions [SHL(n,m),SHR(n,m)].
			- Added turtle graphics XCOR and YCOR functions.
			- Fixed long integer SUB bug: when calling a long
			  SUB with bsr, A68K spat the dummy when it saw
			  a '&' (eg: bsr TEST&). All '&'s replaced by '@'s.
			- Added Ctrl-C trapping to compiler. Partly works.
			- Fixed HEADING so it's always non-negative.

2/5/92 - 8/5/92		- Added screens, PALETTE, PAINT, SYSTEM, DATE$.
			- Made CIRCLE rendering faster by using DrawEllipse()
			  if full 360 degree ellipse is requested.
			- Updated ace.doc and noted that SADD is not required
			  for string constants (ie: it's optional).  

12/5/92			- Incorporated command line arguments [argcount,arg$].

16/5/92			- Added single precision MOD.
			- Fixed OCT$ which was giving incorrect results
			  for high values. Now only handles positive LONGs.
			- Added BIN$. Like OCT$, n=abs(n) [n is LONG].
			- Added FRE(n), with extras (see ace.doc).
			- Added POTX(n) and POTY(n), where n=0 or 1.

17/5/92			- Fixed bug in _deletewindow (db.s): Contents of
			  location zero was being moved into window lists
			  instead of #0 (!).

6/6/92			- Fixed RIGHT$ bug: was returning the NULL string
			  when requested sub-string length equalled string 
			  length.
			- Modified MOUSE(1) and MOUSE(2) code to work when
			  an ACE screen is active.

8/6/92			- Added WorkBench startup capability.
			- Added REPEAT...UNTIL loop construct ala Pascal
			- Added CASE...END CASE construct.
			- Added DAY function.

9/6/92			- Added two compiler options:
			
				(i) Ctrl-C break trapping.
			       (ii) Optimisation (peephole).

11/6/92			- Added definable numeric constants.
			- Incorporated a BORDERLESS window for each
			  user-defined screen to facilitate IDCMP
			  events. 
			- INKEY$ can now be used to read keystrokes
			  from a user-defined screen's window.
			- Fixed RAW: window routine bug. The same
			  Wdw-id was unwittingly being allowed to be 
			  used for more than one window creation.
			
12/6/92			- Modified CLS to work with user-defined screens.

13/6/92 - 14/6/92	- Incorporated external variables
			  and functions (C, assembler...).

28/6/92			- Modified LOCATE to work with user-defined screens.
			- Fixed exponentiation so that it always returns
			  a float, in case of a negative exponent.
			
29/6/92			- Incorporated full 32-bit math. ACE is now Wb 2.0
			  *reliant* (due to use of utility.library):

				(i) 32-bit division replaced 32-bit \ 16-bit.
			       (ii) 32-bit MOD replaced 32-bit MOD 16-bit.
			      (iii) Multiplication:
					
						- 16 x 16 bit integer (new).
						- 32 x 32 bit integer (new).
						- float x float.

			       (iv) Array index calculations now use 32-bit
				    unsigned multiplication. This fixes the
				    bug that disallowed absolute indexes of
				    greater than 65535.

			- Fixed yet another bug in INPUT: string array input
			  was producing pointers which all lead to one string.
			- Defined numeric constants can now be signed.

30/6/92			- Added LOF(n) function.
			- Modified WAVE statement so that size of waveform
			  table can be up to 131070 bytes (hardware limitation).
			- Fixed CHR$ bug: LONG parameters weren't being 
			  coerced to SHORT.

2/7/92			- Added the CSTR function.

3/7/92			- Added the HANDLE(n) function.
			- split db.s into db.s and turtle.s due to
			  link problems: Blink or ACE programs GURU when 
			  db.lib too big. 

4/7/92			- Added optional variable declarations.
			- Wrote a simple pre-processor for ACE: app,
			  to allow include files.

7/7/92			- Added event trapping: BREAK,MOUSE,TIMER(n).
			- MENU event trapping not yet complete since
			  menus themselves have to be implemented.
			- Added CSRLIN and POS for screens only so far.
			- Changed over from SetSignal() to CheckSignal()
			  for ctrl-c -b compiler option and BREAK event
			  trapping.

16/7/92			- Added: 
				 (i) ADDRESS option for DIM.
				(ii) SIZE option for STRING.
			       (iii) increment and decrement operators.
				(iv) indirection operators: @,*%,*&,*!.

17/7/92	- 19/7/92	- Improved efficiency of strings and string arrays. 
			  The modifications also allow strings and string 
			  arrays to be passed by reference. 
			  
20/7/92			- Modified LOCATE, POS and CSRLIN so they take 
			  account of the current font (in ScreenMode).
			- Improved PRINTS so that it behaves in almost the 
			  same way as PRINT.
	
28/7/92			- Added SIZEOF function.
			- Fixed a long-standing bug that caused GURUs
			  during parameter passing when a context-switch
			  occurred, corrupting the stack. This is a short-term
			  fix only, and will be replaced by use of C-style
			  parameter passing.

8/8/92 - 9/8/92 	- Added structures.
			- Modified VARPTR to handle structures.
			
6/12/92			- Divided main linked library into functional modules
			  which are joined to produce db.lib. The code from
			  db2.lib and turtle.lib has been incorporated into
			  db.lib.

6/12/92 - 7/12/92	- Further modularised compiler source files. I could
			  *really* use a make utility now!

8/12/92			- Changed SHR and SHL code generation from lsr.l and
			  lsl.l to asr.l and asl.l respectively, in order to
			  handle shifts of negative numbers correctly! (oops)

12/12/92 - 13/12/92	- Improved PAINT. Too much RAM was being reserved.

12/12/92 - 13/12/92	- Added AREA, AREAFILL, PATTERN.

13/12/92		- Added SCROLL, SPACE$.
			- Fixed bug in PAINT: border color not being reset.
 
21/12/92		- Improved LOF by using Seek() rather than
			  Examine() to find file length. This removed
			  the need to use the 2.04 function DupLockFromFH()
			  making LOF 1.3 compatible.
			- Reverted to SetSignal() from CheckSignal() to
			  preserve 1.3 compatibility.

22/12/92		- Replaced 32-bit integer math routines in  
			  utility.library with lmath.a routines from 
			  Sozobon's ZC.lib. This obviates the need for the 
			  2.04 utility.library making all ACE integer math 
			  1.3 compatible. The lmath.a module has been
			  incorporated into db.lib, with slight modifications
			  (source is called lmath.s).
			- Brought DIM in line with AmigaBASIC. If a dimension
			  is specified as N, the resulting subscript range
			  is 0..N, rather than 0..N-1 (as it is in C and was
			  in ACE up until now).
			- Removed reference to ACElibs: from libfunc.c, so 
			  this no longer has to be ASSIGNed in the user-startup
			  or startup-sequence script.
			  
26/12/92		- Added support for Workbench arguments in the form of
			  an include file (WBarg.h).

27/12/92		- Modified APP so that an include file is only ever
			  included once per program. APP now also handles
			  single and multi-line comments ("'" and {..}).

28/12/92 - 29/12/92	- Fixed some long-standing little bugs in the lexical
			  analyser.
			- Moved the code for comments from the parser to the 
			  lexical analyser.
			- Added the rest of AmigaBASIC's reserved words for 
			  completeness and because I may get around to
			  implementing some things that I didn't originally
			  think I would.
			- Changed the lexical analyser's reserved word search
			  method from sequential to binary. This has resulted 
			  in a dramatic improvement in compilation speed 
			  (around twice as fast as before). I should have done
			  this a long time ago.
			- Added code to prevent APP from looking for comments
			  inside string literals!
			- Removed ++ and -- operators from factor() because
			  they are confusing (IMHO). Pre-increment (++) and
			  pre-decrement (--) can now only be applied to 
			  variables, not as part of an expression.
 
30/12/92		- Added STRING$ and INSTR.

1/1/93			- Added descriptions for ALL functions and commands
			  in ref.doc since some people using ACE won't have
			  the AmigaBASIC manual.

5/1/93 - 6/1/93		- Work on sequential files:
	
				- CLOSE can be used to close more than
				  one file now, but at least one filenumber
				  still has to be specified.

				- Added LINE INPUT #filenumber,string-variable.

				- Added INPUT$(X,[#]filenumber) and ditched
				  INP$.

				- Improved performance of all sequential file 
				  functions in db.lib.
	
				- Made file format produced by WRITE identical
				  to AmigaBASIC.
 
				- Added PRINT #filenumber,expression-list.
	
				- Added INPUT#filenumber,variable-list.

			- ACE files are now very nearly identical to AmigaBASIC.

12/1/93			- Fixed a bug in VAL that was causing numbers with
			  more than 8 decimal places to give weird results.
			- In considering the use of double-precision math
			  in ACE, I have realised that Motorola FFP values
			  can handle up to 8 decimal places of accuracy,
			  whereas in AmigaBASIC, a number with >= 7 decimal
			  places is classed as a double-precision value. 
			  Given the degradation in accuracy which occurs
			  when more than 8 digits (counting both sides of 
			  the decimal point) are specified in an ACE FFP 
			  value, AmigaBASIC's double-precision convention
			  will probably be followed in ACE.
			- Increased the size of the buffer for INPUT$ from
			  MAXSTRINGSIZE to MAXSTRINGSIZE*32 (32K currently)
			  to facilitate the reading of longer files.
			- Made all library functions which impose a limit
			  upon the number of characters in a string or buffer
			  use MAXSTRINGSIZE-1 (changed string.s and file.s).

13/1/93			- Stopped a large memory leak when ACE quits due to
			  an internal list memory allocation error. There
			  still seems to be a small leak however.
			- Modified the bas script so that intermediate 
			  files are deleted after each stage of the compile-
			  assemble-link process. This frees up more RAM. 
			  
19/1/93			- Fixed a bug in the lexical analyser which was
			  returning a value of 1 for ANY number of the
			  form nnE[+|-]mm when mm was 0.

20/1/93			- AREA was only allowing 19 points, not 20. Fixed this.

21/1/93			- Fixed a weird AREAFILL and PAINT bug. Both of 
			  these routines allocate and initialise a temporary
			  rastport for area/flood filling. Although the
			  memory was being freed, the TmpRas pointer was
			  not zero'd. On the next call to PRINTS or Text()
			  a GURU 8100 000C resulted (recoverable alert under
			  2.04). It appears that Text() or some lower-level
			  graphics primitive tries to use an existing TmpRas
			  if one seems to exist. After making Rp->TmpRas=NULL
			  the bug disappeared.

26/1/93			- Modified APP so that lines taken up by block
			  comments are represented by line-feeds in the
			  destination file so as to prevent line mismatches
			  between the latter and the source file. This still
			  doesn't get around the problem of line mismatches
			  caused by #include directives though. 

31/1/93			- Changed effect of DEFDBL and <ident># so that 
			  they yield single-precision data types rather
			  than double-precision. This avoids any problems
			  further down the line (because double-precision
			  is not yet supported).

2/2/93			- Added ctrl-c user break trapping to APP and 
			  improved the reliability of ACE's ctrl-c trapping.

4/2/93			- ACE v1.0 released to the public! First started
			  work on ACE in October 1991.

*******************************************************************************

6/2/93			- Work on ACE v1.01 commenced.

			- Improved compile-time error handling. Now, the
			  whole offending line is displayed and a carat
			  marks the place in the line where the error was
			  identified. The rest of that line is then ignored
			  so as to prevent further spurious errors. More 
			  work remains to be done for this revision on this.
			- The observation was made that AmigaBASIC does NOT
			  evaluate exponentiation operations from right to
			  left as previously thought, but from left to right
			  as with all other operations. This obviates the
			  need to change ACE's exponentiation evaluation 
			  method. 
			- AmigaBASIC does not allow a term of the form:
			  n^-m or n^(-m). ACE allows the latter but not
			  the former.
			 
7/2/93			- Fixed INPUT from RAW: windows so that the 
			  destructive backspace key actually erases text
			  as it does in a CON: window. The routine was 
			  also cleaned up in general and made more
			  efficient.
			- Sequential file OPEN modes can now be upper
			  or lower case (ie: "I" or "i" etc).
		
11/2/93			- Fixed the FOR loop index bug by not allowing
			  a shared variable to be used as the index.
			- Trailing characters (other than '&') can now 
		 	  be used to coerce one numeric literal to 
			  another. Note that & and % have the same
			  effect as CLNG and CINT in ACE (ie: they
			  _always_ round up). 

12/2/93			- String literals now need not have an end quote.
			  Such a string will be truncated at the end of 
			  the line.
			- Fixed bug in LINE INPUT# whereby the variable's
			  data type was not correctly established if the
			  variable was declared with STRING.
			- LINE INPUT# was also modified to accept a string
			  array as well as a simple string variable.

13/2/93			- BASIC line numbers have been implemented for 
			  backward compatibility with old BASIC programs 
			  and for consistency with AmigaBASIC.

14/2/93			- Fixed a bug in STRUCT..END STRUCT & CASE..END STRUCT
			  where blank lines caused spurious compilation errors.
			- Changed a hard-coded X:Y screen ratio constant in the
			  turtle graphics section of db.lib to a data item 
			  which can be accessed/modified with ACE's EXTERNAL
			  directive (EXTERNAL _tg_xy_ratio).
			- Made several compile-time errors "cleaner".

15/2/93			- Improved error handling for undeclared arrays.
			- Fixed a bug in INPUT#. It was crashing when the
			  file wasn't open or the file number was invalid.
			- Rewrote VAL code in C. It now handles fixed-point
			  and exponential format single-precision values
		  	  as well as decimal, octal and hexadecimal integers.
			  
16/2/93			- Rewrote _short_from_string and _long_from_string
			  in C. These routines are used by INPUT and INPUT#
			  to extract integer values from strings. Decimal,
			  octal and hexadecimal values may now be handled 
			  via INPUT and INPUT#.

18/2/93			- Rewrote _strsingle which is used by PRINT#, WRITE#,
			  PRINTS and STR$ so that it produces fixed-point 
			  and exponential format single-precision output.
			  PRINT also uses this routine now. The new version
			  of _strsingle (written in C) is somewhat faster than 
			  the original which was badly coded in assembler.
			  A single-precision number is converted to the form:
			  -|+.mmmmmmmmE-|+nn by fpa(). If 7 <= nn < -6 the
			  number is displayed in exponential format.	  
			  than the mantissa can hold.
			- Added a FIX command (see ref.doc for details) which
			  alters the number of decimal places a FFP value is
			  rounded to.

19/2/93			- Replaced _round routine in db.lib. This is used by	
			  by CINT and CLNG and wherever a float needs to be
			  rounded to an integer. The new version seems to be
			  faster than the old one which used fpa() and arnd().
			  The former only uses mathffp.library functions.

20/2/93			- ACE v1.01 released.

*******************************************************************************

28/2/93			- Work on ACE v1.02 commenced.

			- Added a compiler switch (-i) which makes an icon 
			  for the executable just created by ACE.
			- Added ON <event-specifier> GOTO. This is in addition
			  to ON <event-specifier> GOSUB which was already
			  implemented.
			- Changed all bsr and bra 68000 instructions to jsr
			  and jmp respectively in order to avoid the 32K
			  displacement limit. Moreover, some beq instructions 
			  have been replaced by a combination of bne and jmp 
			  to avoid this limit. This included changes to the
			  code for: IF, CASE, REPEAT..UNTIL, WHILE..WEND.  
			- Fixed a bug whereby return code in d0 was being 
			  overwritten before the program ended, due to calls
			  to cleanup routines.	 

1/3/93			- Changed all occurrences of bsr in db.lib and 
			  startup.lib sources to jsr so as to avoid the 
			  32K limit mentioned above (28/2/93).
			- Implemented KILL and NAME.
			- ON..GOTO and ON..GOSUB implemented.

6/3/93 - 10/3/93	- Rewrote SAY command in C and added support
			  for mode-array(7) and mode-array(8) such that
			  ACE SAY now allows for asynchronous speech.
			- Moreover, a SAY(n) function has been added,
			  where SAY(0) returns -1 or 0 to indicate whether
			  there is active asynchronous speech, SAY(1) returns 
			  the mouth width and SAY(2) returns the mouth height 
			  corresponding to the phoneme being spoken. 

14/3/93			- Added support for SAY mode-array element #6. This
			  allows for 12 different audio channel allocation
			  combinations as per AmigaBASIC. See ref.doc for more.
			- Improved performance of INSTR function by only 
			  checking first character of target string against
			  each character in the source string until they
			  match. At this point a full sub-string comparison
			  is carried out.

12/4/93			- Fixed a bug in shared library function declaration
			  code in which a search for a non-existent function
			  sometimes caused the compiler to hang. The routine
			  responsible was rewritten with a resultant speedup.

13/4/93			- Fixed a bug which had been lurking for some time,
			  related to string variable assignments. A string
			  variable not declared with the STRING command was
			  not always being associated with a storage area.
			  In fact, only the first occurrence of the string
			  was being so associated. If this first occurrence
			  was in a CASE or IF statement, it might never be
			  reached with the consequence that the string
			  in question was associated with a random address
			  in memory! This is now fixed, so that each time
			  the string is assigned a value, it is bound to
			  its correct address. Obvious in hindsight.

15/4/93			- Commodore Australia have given me permission to 
			  include the .bmap files in the ACE archive. I 
			  don't have this in writing yet though. ConvertFD 
			  can not be distributed however, so a completely
			  new (functionally equivalent) program will have
			  to be written. 

16/4/93	- 17/4/93	- A couple of bugs which were related to the above
			  string bug (13/4/93) were fixed because they
			  were missed at the time and resulted in complaints
			  from A68K (legitimate ones) about unknown symbols.
			- Testing has shown that a plethora of problems
			  of previously unknown origin were related to the
			  string bugs described above. Also, Michael 
			  Zielinski has reported that there are no longer 
			  any Enforcer hits from ACE now after the fixes
			  from 13/4/93.
