home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AMIGA PD 1
/
AMIGA-PD-1.iso
/
Programme_zum_Heft
/
Programmieren
/
Kurztests
/
ACE
/
archive
/
ACE23.LHA
/
DOCS.lha
/
history
< prev
next >
Wrap
Text File
|
1994-10-22
|
60KB
|
1,443 lines
-----------
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 CASE
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.
- 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.
18/4/93 - ACE v1.02 released.
*******************************************************************************
9/5/93 - Work on ACE recommenced.
- ARG$(0) added for access to a CLI command's name.
11/5/93 - CHDIR command implemented.
18/5/93 - 21/5/93 - Enhanced FILES command implemented.
30/5/93 - A few string functions (ARG$,SPACE$,STRING$,UCASE$)
were using a single buffer for each result
which was being overwritten during evaluation
of an expression such as: UCASE$(..) = UCASE$(..)
This was fixed by creating a temporary string
for each function call as with other string
functions.
- * INPUT$ still uses a single 32K buffer however! *
6/6/93 - Command line argument handling routines completely
rewritten in C. This fixed an infrequent bug in
which the last argument wasn't always being parsed
and enabled the correct parsing of quoted arguments.
- Added two new compiler switches: -E and -c. The
first creates a file called ace.err which contains
all the compile-time errors at the end of an ACE run.
The second includes each ACE source code line as a
comment in the assembly source code.
7/6/93 - A bug in exec.library version checking was
preventing CLS from correctly changing the
background colour after a COLOR command on
machines higher than V37 (ie: Wb 3.0 machines
like the A1200). This is now fixed.
10/6/93 - Fixed a bug in which CLOSE was sometimes causing a
privilege violation processor trap. DOSBase wasn't
always being moved to a6 prior to calling the
dos.library Close function (!).
12/6/93 - Added ptr_term() function between expterm() and
factor() in expression parser to correct the
precedence of !%, !& and !* operators.
- I have decided to leave SUB parameters as they
are for now. See ace.doc Subprograms section
for latest details.
- Added SLEEP command. So far only works when in
screen mode.
13/6/93 - Fixed a bug in which insymbol() was being called
one too many times by the "@" code when the address
of a structure member was being found.
- Added code to address_of_object() (used by @ and
VARPTR) to find the address of an array element.
This code - and therefore @ and VARPTR - can now
find the address of:
- simple variables
- external variables
- arrays
- array elements
- structures
- structure members
- Added a -l compiler switch which displays each
ACE program source line before it is compiled.
- Implemented SWAP command ala AmigaBASIC. It swaps
simple and external variables, array elements,
structures or structure members.
14/6/93 - Modified the handling of string value parameters
so that association with BSS storage occurs at the
start of subprogram execution rather than waiting
for an assignment. This fixes the address for the
life of the parameter. One consequence of this is
that VARPTR and @ correctly access the address
of the formal parameter, not the actual parameter.
This also ensures the correct handling of such
parameters by the SWAP command.
19/6/93 - Modified address_of_object() so that when the
address of a structure variable is requested
with @ or VARPTR, the address of the variable
in the stack frame is returned, rather than the
start address of the structure. The latter can
still be obtained by simply referencing the
variable (eg: x = mystructvar). The modification
makes variable structure parameters possible
(see ace.doc "Structures" for an example).
20/6/93 - Made structures sharable with the SHARED statement.
- SUB parameters may now be preceded by SHORTINT,
LONGINT,SINGLE or STRING to indicate data type
rather than always having to use %,&,! or $.
- String array elements can now have a specifiable
size via a new SIZE option in DIM.
- String variable declarations with STRING command
will now accept defined constants for the SIZE
option.
29/6/93 - A bug in both BIN$ and OCT$ (such that negative
values were being negated) was fixed.
30/6/93 - ADDRESS data type added. This is really just an
alias for LONGINT but it makes a lot more sense
when viewed in the context of a variable, parameter
or structure member which holds an address.
- It is now possible to declare a SUB to be of a
certain data type by using: LONGINT,SHORTINT etc.
- Shared structures worked fine when modifying/using
structure members, but not when modifying the
address held by the structure variable itself.
This has been fixed.
1/7/93 - ALLOC function implemented. This is a hassle-free
Unix-style memory allocator which makes use of
the Alloc/FreeRemember functions of Intuition.
2/7/93 - Added ASSEM..END ASSEM for inline assembly code
inclusion.
- OPTION <switch>+|-[,<switch>+|-..] can now be
used to set compiler directives as well as being
able to do so from the command line.
3/7/93 - Fixed a bug in which the type of structure
members was not being correctly determined by
the SWAP command such that short integer and
string structure members were not being handled
properly.
4/7/93 - SIZEOF now correctly returns the size of a
structure variable. Prior to today, only
the size of a structure definition was
correctly returned. This was an oversight.
10/7/93 - ACE version 1.1a released.
*******************************************************************************
4/9/93 - Work on ACE v2.0 commenced.
4/9/93 - 12/9/93 - Flexible serial I/O support added to ACE. Up to
255 channels are supported.
- ERR function added (serial errors only so far).
25/9/93 - Serial I/O routines tidied up.
- ERROR trapping implemented (serial errors only
so far).
26/9/93 - Buffered file I/O error codes added. These are
returned by ERR and recognised by ON ERROR.
10/10/93 - TAB function now works for screens.
- Implemented PTAB function.
- Made PRINT command screen/window mode transparent.
- This is all part of a conspiracy to make ACE able
to handle Intuition and DOS windows completely
transparently. Next comes INPUT transparency.
11/10/93 - Made INPUT command screen/window mode transparent!
- Implemented SPC function.
24/10/93 - Extended ctrl-c break trapping to screen mode.
24/10/93 - 25/10/93 - Intuition windows implemented! ACE now allows
for windows on screens! In fact, all windows
except the shell/CLI are now Intuition windows
in ACE. Next comes menus and gadgets...
- Added WINDOW(12) and WINDOW(13) which return
font width and height (respectively) for the
current output window.
- Screen colours are now adopted from Workbench
as per AmigaBASIC.
26/10/93 - Window close event trapping implemented. Since
ACE doesn't automatically handle the closing of
windows when the close gadget has been clicked,
a compiler switch (-w) and user-defined event
trapping was deemed to be the best way to handle
this.
- Fixed yet another bug in CLS which was causing
the print position to be incorrectly aligned in
Intuition windows.
1/11/93 - ACE windows now handle certain control characters
(ASCII: 7,8,9,10,12,13) in exactly the same way as
AmigaBASIC, eg: CHR$(7) rings the BELL!
- Implemented boolean gadgets and gadget WAITing.
Next comes gadget event trapping, a gadget function,
string and proportional gadgets, as well as some
tidying up.
2/11/93 - Implemented GADGET(n) function and ON GADGET event
trapping.
6/11/93 - Implemented String and LongInt gadgets.
7/11/93 - 8/11/93 - Implemented proportional gadgets (horizontal and
vertical sliders).
- Window close gadget events are now passed on for
ON WINDOW or -w compiler switch trap handling.
9/11/93 - 10/11/93 - Menus have finally been implemented in ACE!! This
includes menu command keys (keyboard shortcuts),
MENU WAIT command, MENU event trapping and MENU(n)
function.
5/12/93 - MENU and GADGET trapping/WAITing now fully
supports WINDOW close-gadget handling.
- WAIT GADGET 0 implemented: waits for ANY gadget.
This is in my opinion, the best method of dealing
with gadgets in ACE since it is very flexible and
CPU-nice. It is however modal.
- Fixed two bugs in the completely rewritten INPUT
code: no space after "?" and no scrolling after
INPUT at bottom of window.
15/12/93 - Fixed PRINT/PRINTS/PRINT# inability to accept
some parameters delimited only by spaces. ACE
seems to accept just about anything delimited
by spaces now (or of course by commas/semicolons).
- Fixed a long-standing bug in which the compiler
would incorrectly parse IF .. THEN PRINT ELSE ..
such that ELSE was ignored. This works fine now.
16/12/93 - 17/12/93 - Fixed BSS structure object alignment so that
all such structures will be long-word aligned.
- Reduced the amount of code written to the target
file when internal compiler errors occur to a
short skeleton program. This may yet be further
minimised.
- I have started the process of improving the
efficiency of the compiler's memory management
routines by using code similar to the ALLOC
function in ACE as well as trying to reduce
the size of each node in the symbol table.
- The arbitrary DIM limit of 10 dimensions has
been removed; 255 are now allowed as per
AmigaBASIC.
17/12/93 - 18/12/93 - Memory management and efficiency improvement
continues.
- The compilation line number indicator has been
streamlined to cut down on I/O and improve its
appearance.
- Memory leaks now seem to be "capped".
- The arbitrary SHARED limit of 40 has been lifted.
- Fixed a problem caused by editors which don't
automatically append a line-feed (ASCII 10)
to the end of a file, such that the last line
of a program wasn't being parsed.
- SERIAL OPEN randomly generating ERR=300 (OPEN_ERR).
Probably caused by OpenDevice() result not being
coerced from BYTE to ULONG (??). Fixed this.
- Fixed a bug in which insufficient memory was
being allocated to hold DIM index information.
24/12/93 - CHR$(13) now only performs a CR (in user-defined
windows) as per the CON: and RAW: windows.
In AmigaBASIC, CHR$(13) does the same as CHR$(10),
ie: LF.
- Appended ASL library stub (generated by genstubs)
to ACE's ami.lib so that ASL file requesters can
be used by FILEBOX$ function (see below).
- Implemented MSGBOX and FILEBOX$ functions which
easily allow the ACE programmer to invoke system
and file requesters respectively. Thus far only
the ASL file requester has been implemented. The
next step is to test for the operating system
version at run-time and call different file
requester code for Amigas running anything less
than 2.04.
- Started writing the code for an IDE so that ACE
can be run from the Workbench. This will be
developed over the coming months, but a simple
version should be working within days.
25/12/93 - Yes I know it's Xmas. It's also 1 am.
So I'm a fanatic! :-).
- I have *finally* found the ZC code which causes
the conflict with ACE's ctrl-c trapping mechanism.
Upon examination of the ZC source code, I found
the culprit to be a function called Chk_Abort().
This I redefined (in misc.c of ACE's source code)
to do nothing except return 0. This redefinition
has also been made in app.c.
- APP now uses the alloc()/free_alloc() functions
for handling memory allocations.
26/12/93 - Modified ACE so that the ".b" extension can be
used. This is still optional though. The main
reason for doing this was to accomodate TDS's
(Twilight Development System, an excellent
shareware IDE) apparent need to have the
extension of source files made explicit.
- Fixed MsgBox so that it works correctly under
Wb 1.3. The requester wasn't taking on the
correct proportions.
- Added support for a Wb 1.3 FILEBOX$. It requires
the arp.library. I may eventually replace this
with standalone code (when I get time to write
a nice, simple file requester or some kind soul
gives me the source for one).
27/12/93 - Implemented "SYSTEM command-string" which has the
same effect as Execute(command-string,0L,stdout).
- Finally got around to implementing DEF FN, as a
simple variation on SUB.
28/12/93 - Optional parameter is now legal in ACE's RND
function. It is currently only a dummy.
- FileBox$ modified so that a single string
parameter is required. This allows a title
for the requester to be supplied (eg: "Open").
2/1/94 - As promised above (see 24/12/93) I've written
a simple IDE for ACE called AIDE. This is 1000
lines of ACE code and the results are fairly
pleasing. The source code for this program
will be included in the archive as an example
of what can be done with some of ACE's more
recent features. AIDE currently only runs
properly under Wb 2.04 (and up).
- Fixed a bug in which IF..THEN struct->member...
was causing an Undeclared label error!
- Changed the return values of MsgBox to -1 and 0
instead of 1 and 0 so that "OK" (or whatever the
first gadget is) can be seen as a boolean TRUE.
- String structure members didn't allow a named
numeric constant to be given for the optional
SIZE parameter, but they do now.
- String array, structure member and variable
declarations allowed a string of non-positive
size. This has been fixed.
3/1/94 - I started out with the simple intention of
adding a bit more compatibility to ACE's
shared library function handling and ended
up with almost total compatibility with
AmigaBASIC. Only "almost" because shared
library function declarations are still
mandatory in ACE. That's now the only
difference. The previous ACE syntax is
still supported though.
4/1/94 - I have written an ACE program (autonum.b)
which takes the drudgery out of maintaining
the line number references to the sections
in ace.doc and also adds page numbers.
5/1/94 - Implemented a SYSTEM function which returns
ExecBase->libNode.lib_Version (eg: 34 = Wb 1.3).
6/1/94 - After some false starts, I've added "EXIT FOR"
which provides a (read: THE) clean way of exiting
from a FOR..NEXT loop in ACE.
- Implemented INPUTBOX and INPUTBOX$! I took the
syntax from Visual Basic's functions of the same
names. ACE now has 3 standard requester types.
7/1/94 - Completed the last bits of improving the
efficiency of ACE's memory allocation routines.
I couldn't get it to produce any memory leaks.
8/1/94 - Well, I thought I was finished with the memory
allocation stuff from yesterday, but I decided
to try speeding things up some more. This I have
done by decreasing the number of allocation
function calls by half for the code list. I've
also switched to ZC.lib's malloc() & free() which
seem to be solid.
- Tested ACE on an A1200 this morning. It seems fine
although a "Magic Menus" commodity didn't get along
too well with ACE's menus.
- Just finished my standard pre-release testing run
of ACE which involves compiling and running over
50 programs under Wb 2.04. A number of programs
were also tested under Wb 1.3 with and without
fast RAM switched on.
9/1/94 - Fixed a bug which made A68K generate syntax errors
because some label names conflicted with assembly
keywords (CPU register names to be specific).
- In the process I found a couple more bugs:
variables starting with an underscore but with
no trailing type character were not being assigned
a data type; DEF FN return values were not always
being coerced correctly.
- Everything from yesterday is now being re-tested.
10/1/94 - Fixed a bug in which ACE tried to clean up
asynchronous speech when the narrator.device
was not present and SAY had aborted. Sigh.
Another testing run me-thinks.
12/1/94 - 13/1/94 - Peter Zielinski (Sydney) has been testing ACE the
last couple of days and found a problem in which
menus looked weird with some fonts. This has been
fixed.
- I realised that there would be a similar problem
with InputBox$ and fonts other than Topaz 8. This
function has been modified to handle non-topaz-8
requester title fonts, but Topaz 8 is used for
the requester prompt and boolean gadget text.
- Fixed a bug in which LIBRARY CLOSE (used without
a specific library name) was producing incorrect
library base names for libraries not on ACE's
standard libraries list (ie: those opened at
the start of a program run and closed at the end)
resulting in an undefined label error from A68K.
- Also, a library base (again, for non-ACE-listed
libraries) now gets zeroed after a call to ACE's
_close_library routine in case it's closed again
(_close_library check for NULL).
14/1/94 - Improved menu text rendering by using the graphics
library TextLength() function to get more precise
widths for menu titles and items.
15/1/94 - Fixed a bug in which INPBOX[$] was growing in
size (from the bottom) when called multiple times
with a non-topaz font as the screen font.
- Tried many things to fix a bug in which INPUTBOX[$]
gadgetry display gets corrupted by _some_ fonts.
- Improved INPUTBOX[$] by making the string gadget
active when the requester is rendered. This means
that the user doesn't have to select the string
gadget before entering text into it.
- Tweaked the width of menu item text highlighting.
- AIDE has been steadily improved over the last week.
16/1/94 - Tested all example programs under 2.04 and 1.3
(and also with NoFastMem under 1.3).
19/1/94 - ACE version 2.0 released.
*******************************************************************************
23/1/94 - Work on ACE recommenced.
- Fixed a bug in val.c: val() and long_from_string()
were not skipping leading whitespace (<= ASCII 32).
VAL and INPUT use these functions. So does INPUT#
but it does its own whitespace skipping.
I am stunned that this bug has been around since
February 1993! That's when I rewrote the code from
assembler (the latter DID skip leading whitespace).
This is a good example of how it is still possible
to overlook simple bugs no matter how much testing
you do. I'm just amazed I never caught this one!!
I found this bug two days after the release of
version 2.0 :(. Sigh.
- Added a "Run in Shell..." option to AIDE's
Program menu (see AIDE.doc). This also handles
command-line arguments. The "Execute..." I/O window
now has a close gadget rather than prompting for
the 'C' key to be pressed since the latter may fail
if the command being executed fails.
24/1/94 - AIDE: Added code to properly handle
multiple "Execute..." and "Run in Shell..."
selections by using unique shell-startup script
names.
6/2/94 - More modifications to AIDE (now v1.02). See
"Changes" file in AIDE directory from now on.
- Added FONT and STYLE commands to ACE.
7/2/94 - Implemented LONGINT(n) function.
8/2/94 - ACE now accepts ".bas" extensions for the sake
of compatibility with GW-BASIC, HiSoft BASIC etc.
AIDE and bas have been modified to handle ".bas"
extensions also.
15/2/94 - Implemented MESSAGE feature which provides a
simple interprocess communication facility.
16/2/94 - SCREEN FORWARD and SCREEN BACK added to ACE.
26/2/94 - Structures may now have other structures as
members. To use them it is necessary to take
their address (with "@" or VARPTR) and assign
this address to a structure pointer of the
member's type.
- FILEBOX$ now has an optional second parameter:
default-directory. A couple of people requested
this and I agree with its utility.
27/2/94 - Added support for IFF graphic files. You can
open, view and get information about picture
files in ACE via three commands and a function.
See ref.doc under "IFF".
28/2/94 - Weird bugs appeared in file I/O after adding
the IFF module to db.lib. Excluding iff.o
got rid of the problem. It remains out while
I figure out the problem. I believe it to be
a module/library size problem. This sort of
thing has cropped up before.
6/3/94 - It was pointed out to me by Chuck Kenny that
user-defined windows could be "lost" behind a
screen's default window when the former are
equipped with depth gadgets. Jeff Harris
made me aware that this would occur if the
borderless default window was not also a
backdrop window. It wasn't, but now it is. :)
7/3/94 - The GADGET statement now allocates memory
for each boolean gadget's text and takes
a copy of it. This avoids the problem of
having the text in two or more buttons
changing when a single variable is used
for all the buttons. I had known about
this problem for some time, but recent
discussions with Chuck Kenny and Kendall
Sears made me take definitive action.
20/3/94 - Today I began the process of trying to
reduce db.lib module sizes so as to link
less non-essential code to ACE executables.
An average improvement of 10K has been made
thus far, per executable (eg: from 45 to 35K).
- Work has been too busy of late to do any other
serious work on ACE. Sigh.
3/4/94 - More work on decreasing the size of library
modules and limiting dependencies between them.
4/4/94 - CLEAR ALLOC statement implemented. This command
frees memory allocated by ALLOC at any time,
allowing more intelligent use of ALLOC when
memory is tight.
- ALLOC's second parameter (mem-type) is now
optional. When not specified, or when outside
the range 0..5 CLEARED+PUBLIC memory is allocated.
- After the modifications to db.lib and a small bug
fix in the IFF library module (a file wasn't being
closed), the IFF commands and function seem to be
coexisting peacefully with the rest of db.lib.
5/4/94 - Fixed a bug in which calls to INPUTBOX were
interfering with the correct functioning of
INPUTBOX$ by keeping longint string gadget
mode and buffer length in force. Peter Zielinski
found this problem and reported it to me.
10/4/94 - OPEN's "A" (append) mode wasn't creating a new
file if the specified file didn't exist! It only
worked with files that existed. This was an
incorrect interpretation on my part of what
"append" mode meant in AmigaBASIC. Thanks to
Peter (strikes again) Zielinski for pointing
this out to me.
- Added (over the last few days) some more
peephole optimisation code to ACE: integer sign
extension, constant negation. The former speeds
up IFS significantly (went from 372 to 507 peephole
removals as the result of the new optimisations).
11/4/94 - Bogus peephole removals were causing the failure
of some programs. This has been fixed.
23/4/94 - Window flags were being accumulated so that the
type specification of a call to the WINDOW
command was affecting subsequent calls (to WINDOW).
This meant that if a window was specified as
having a close gadget, _all_ later windows were
"inheriting" a close gadget. :(
Thanks to Kenneth Brill and Sean Miller for picking
this one up and reporting it. This and the 5/4/94
INPUTBOX[$] bug have taught me to be more careful
with static structures and their contents.
30/4/94 - WINDOW OUTPUT was causing windows to be activated
contrary to AmigaBASIC. This has been fixed.
- I just realised that when no window type is
specified in AmigaBASIC, the default is a type
value of 31 (ie: the works). ACE has been changed
to fall in line with this policy. You can still
specify zero for a window to have no gadgets etc.
- I just found an undocumented feature in the
window module of ACE's run-time library. If a
type of 32 is specified for a window, the window
will be borderless!
- GADGET(1) now returns 256 if the window's close
gadget was clicked after doing a GADGET WAIT 0.
- It was also discovered that GADGET(1) was only
returning valid values for gadget-ids from 1 to 9.
Sigh. This has been fixed (allows 1 to 255 now).
5/4/94 - Found and fixed two bugs related to MENU. Dan
Oberlin reported that using LEFT$ in conjunction
with MENU caused problems. Specifically I found
that menu item strings weren't being copied
(same problem as with GADGET command on 7/3/94)
so that the LEFT$ buffer (one static buffer per
call to LEFT$) was being used as a source for
all menu items (eg. in a single menu). I also
discovered much to my dismay that allocation
for menu title strings (and now item strings)
was not allocating memory for the end-of-string
marker! Double sigh. This is probably the cause
of the occasional mergings of characters in the
menu bar I've observed. I'm also aware that an
extra rightmost menu title appears when the
Magic Menu commodity is used. Thus far I've seen
nothing in the MENU code to account for this.
6/5/94 - Fixed a bug which has reared its head a number
of times before but didn't seem to be repeatable
or consistent. In the last week I have had 3 bug
reports consistent with this kind of thing. A GURU
(80000003) shows up either when the RMB is clicked
numerous times in succession or when a window is
closed. The first of these has been fixed by
utilising info' posted to the ACE list by Kendall
Sears. This was a bug fix posted to BIX by Peter
Cherna some time ago concerning the fact that
if the IntuiMessage's IAddress field was being
dereferenced before the Class of the message was
ascertained. If the class wasn't GADGETUP, the
IAddress field contained garbage. If this value
was a non-longword aligned address, a 68000 CPU
trap was invoked. I have yet to determine whether
or not the window-close type bug is also related
to this kind of dereferencing.
- I also took this opportunity to add a call to
sleep() before the gadget waiting code. This
has been in use in the menu run-time code for
some time.
13/5/94 - Opening a file in RAM: for "append" was not
working under Wb 1.3. I modified the code to
make this work for 1.3 and above, by not using
MODE_READWRITE which seems to behave differently
under 1.3 and 2.04.
14/5/94-15/5/94 - Added SLEEP FOR <seconds> command. Someone asked
for this recently (Tim Lewis as I recall) and I've
thought about doing it for some time anyway. Why
the "noise word" 'FOR'? It's easier to parse it
this way (ie. disambiguation from SLEEP).
5/6/94 - Fixed a bug in which VAL was returning garbage
from whitespace strings.
12/6/94 - Implemented a mechanism to allow for multi-module
ACE projects and/or the creation of ACE subprogram
libraries. See ace.doc for more about this feature.
- Added a push/pop pair for d1-d7 and a0-a6 around
external function calls so as to prevent register
corruption.
- Added to the syntax of DECLARE FUNCTION so that
external functions can now be declared via a
similar syntax to SUBs and library functions.
The new syntax also allows for an external
function's parameter-list to be documented.
20/6/94 - 23/6/94 - Completed work on external SUB definition and
declarations. Subprograms in modules retain
full functionality albeit with some specific
requirements as laid out in ace.doc.
24/6/94 - 25/6/94 - Implemented a bevel-box function to give gadgets
the look-and-feel of Wb 2.x/3.0. This same
function will also be used to implement a
command which allows ACE programmers to easily
create bevel boxes. Thus far boolean & proportional
gadgets have been converted. Note that GadTools
library is NOT used to achieve the 3D beveled
look in ACE.
25/6/94 - GADGET MOD command added which allows proportional
gadgets to be modified after creation. The knob
position and maximum number of positions can be
changed via this command. The latter is optional.
- The keywords ON and OFF may now be used instead
of 1 and 0 for the "status" parameter of the GADGET
command. STRING, LONGINT, POTX and POTY can be
used in place of the "type" parameter in the
GADGET command. In both cases, readability is
improved dramatically for what is admittedly
a somewhat overloaded command. A BUTTON keyword
is also planned for the "type" parameter.
30/6/94 - Added string-gadget bevel-box code to bevel.c
which all string gadgets now call to get the
GadTools 3D look.
6/7/94 - 7/7/94 - Finished tweaking 3D look of gadgets.
- Gave InputBox[$] the new 3D look.
10/7/94 - Now, if the first argument to the ACE command
is "words" (must be lower-case), all reserved
words for the current version of the compiler
will be dumped to standard output.
- BEVELBOX command implemented.
- BUTTON keyword added for use in GADGET command.
See entry for 25/6/94.
- BUTTON gadget text now uses color-id 1 in
accordance with Workbench (requester) gadgets.
12/7/94 - Event trapping is now considerably more
harmonious after centralising all Intuition
message handling for event trapping (eg. for
menus, gadgets, keypresses). The upshot is
that event trapping can be mixed in any way
the programmer wishes. This is of course, as
it should be.
14/7/94 - Longstanding PSET bug fixed. PSET didn't
modify current output window pen position
ready for next graphics operation. This is
because WritePixel() alone was being used.
Move() is also used now with a tiny penalty
in time (~.2 seconds difference over a 10,000
pixel plot).
24/7/94 - Fixed a bug in the peephole optimiser which
tried to negate things other than immediate
mode numeric literals.
- Fixed a bug in INPUTBOX[$] code in which
an IntuiMessage field was being dereferenced
in a situation in which it should not have
been. This had the potential to cause a
GURU, although it never did for me.
- Increased buffer for string/longint gadgets
to 1024 characters (including NULL).
- Also fixed a bug in which the right side of
string/longint gadgets had a bite taken out
when selected sometimes.
24/7/94 - 26/7/94 - After finding that my last approach to improving
event trapping was flawed, I had a rethink. The
result was a that a lot of code was rewritten. The
whole thing is now far simpler and more efficient.
28/7/94 - Fixed a bug which was introduced in version 2.0
of ACE in which CLS called ClearRaster() (instead
of a console control string being executed as it
is normally) for a shell window after the final
user-defined screen (when no windows were opened
by the program) had been closed. This resulted in
the shell's borders being erased.
29/7/94 - Long-integer math routines modified to be
compatible with C code which is linked to ACE
programs as EXTERNAL FUNCTIONs. Some operands
were previously passed in opposite order to
that expected by C code (eg. n / m would have
had to be coded as m / n).
3/8/94 - ASSEM..END ASSEM was behaving oddly when blank
lines were present. This has been fixed. However
if anything appears on the same line as "ASSEM"
that whole line is included. Also, if anything
appears on the same line as "END ASSEM", that
whole line is omitted.
7/8/94 - Switched over to ILBM.library to get IFF commands
and functions working in ACE. Need yet to allow
HAM screen mode though via SCREEN command.
- Fixed a (dumb) bug in which floating-point "--"
function (SPSub) was not being externally
referenced correctly.
10/8/94 - 11/8/94 - Added HAM and EXTRA_HALFBRITE screen modes (5,6)
to ACE's SCREEN command! (Yippee! About time right?).
- IFF commands/functions refined further. ACE now
handles HAM pictures. If a picture doesn't display
correctly when opened onto an ACE screen, simply
allow ILBM.library to open its own screen & window.
13/8/94 - Fixed a bug in WINDOW OUTPUT command: if the shell
was made active via this command it was still being
seen as being an Intuition window. :(
- Re-implemented WINDOW(0) correctly after a recent
conversation with Peter Zielinski and a question
from Kimmo on the ACE list. It now returns the
window-id of the selected output window.
14/8/94 - Modified MsgBox so that it zero is returned if
button-text1 is NULL.
- Added ctrl-c break trapping to "ACE words"
command.
- WINDOW code was modified so that a copy of the
window title text is made, for the same reason
that menu and button text is copied (so it is
static).
20/8/94 - Whenever a program uses IFF commands, ACE now
looks in LIBS: to see whether the ILBM.library
exists. If it doesn't, ACE _creates_ it, deleting
it at the end of the program run. If the library
already exists before the ACE program begins, it
is simply used.
- STYLE command extended to work in shells (console
windows) as well as windows created with WINDOW.
- Fixed a bug which caused some nested CASE statements
to fail at assembly time.
- ACE was looking at one byte too many when looking
for a function name in .bmap files. Fixed this.
- A WINDOW bug that gave _all_ windows a title bar
was fixed. This bug was introduced unintentionally
via work done on 14/8/94.
22/8/94 - Fixed a known bug in which an identifier which
started with an underscore _always_ got a type
of single-precision. Now an underscore can be
DEFxxx'd in the same way that A..Z can.
- Added MESSAGE CLEAR command: removes all messages
currently queued at a message port.
24/8/94 - In recent times I had a number of reports of
certain programs not working correctly on A1200s,
involving the use of command line arguments. In
fact, these programs (eg. FD2BMAP.b) were causing
GURUs. I tracked this down to a call to AllocMem()
which specified FAST RAM instead of PUBLIC RAM!!!!
I have no idea why I would have done this!! The bug
manifested itself when I ran NoFastMem on my A500,
simulating the situation found on stock 2 Meg CHIP
RAM A1200s. This has been fixed of course!
26/8/94 - 27/8/94 - GADGET command now correctly handles Screen TextFont
as set in Prefs (affects BUTTON and STRING/LONGINT
gadgets).
28/8/94 - Added SCREEN(4),SCREEN(5) and SCREEN(6) to return
a screen's bitmap and x,y font sizes. The SCREEN
function was also rewritten in C.
- Changed temporary directory used by IFF READ to
ram:ILBMtmp to avoid any complaints about making
the assumption that T: = ram:t.
- SHORTINT parameters to shared library functions
are now always sign-extended to avoid the need
for explicit coercion to LONGINT.
- MESSAGE WAIT no longer clears a message port of
all "old" messages before waiting for a new one.
MESSAGE CLEAR is now the only means by which this
can be done.
1/9/94 - MESSAGE READ now allocates memory for a simple
buffer if necessary.
- DIM and DECLARE FUNCTION may now optionally be
followed by one of: SHORTINT, LONGINT, SINGLE,
ADDRESS or STRING.
- The formal parameter list identifiers for DECLARE
FUNCTION may now optionally be preceded by one of
the above type identifiers.
2/9/94 - The ALLOC function now also handles requests for
MEMF_ANY. MEMF_ANY | MEMF_CLEAR has become the new
default. I was prompted to do this after a recent
discussion on the ACE mailing list in which it was
pointed out that the use of MEMF_PUBLIC memory as
the default/norm is not really correct. See RKM
and Exec autodocs for more.
- ACE wasn't complaining when too few array indices
were given. It does now.
3/9/94 - MSGBOX is now also usable as a statement for those
occasions when the return value from sysrequest()
is of no interest. The statement only takes two
parameters, not three. See ref.doc for more.
- Removed some redundant IDCMP handling code. This
resulted in an increase in run-time efficiency. I
also suspect that this redundant code caused the
loss of a (small but annoying) number of intuition
messages.
3/9/94 - 4/9/94 - The address of external functions and subprograms
can now be determined with VARPTR or the @ operator
(see prgs/misc/Task for an example).
9/9/94 - ++ and -- were not always correctly handling
*external* variables. They do now.
- External variable/function declarations can now
use type keywords: SHORTINT,LONGINT,ADDRESS,
SINGLE,STRING (functions only).
- Explicitly disallowed external string variables
because of the danger of trying to assign a value
to an external character buffer of unknown size.
It is still possible to treat such a buffer as
an address which can be used when declaring a
string variable or with CSTR. Functions can also
return pointers to strings. They also didn't work
properly before. :(
10/9/94 - Occurrences of MEMF_PUBLIC changed to MEMF_ANY
in all cases in compiler and library code except
aceports.c (message ports).
- Line continuation character ('~') implemented
allowing calculations, parameter-lists etc to
be spread over multiple lines.
11/9/94 - Added SERIAL(n,12) which returns the status of the
port lines and registers associated with a serial
channel.
- ACE's "WORDS" parameter made case insensitive.
- Added ERR values for opening windows and screens.
- Improved peephole optimisation further. Certain
redundant register moves were not being removed.
In the process of doing this, the optimiser had
to be tightened up in places to prevent valid
code from being removed.
- Fixed Turtle Graphics aspect ratio so as to
correctly reflect screen mode.
17/9/94 - ON ERROR trapping works for windows and screens
now.
- Fixed a bug in which spaces always printed in
"legal" print rows. This conflicts with SETXY'd
(or PRINTs following gfx commands) print positions.
18/9/94 - Version 2.29 released to several beta testers.
1/10/94 - Fixed a bug which was introduced on the 1/9/94 such
that a declaration like: DIM a(10),b(10),c$(10)
caused c$() to become a single-precision array!
- Fixed a bug in EXTERNAL FUNCTION which was also
introduced recently (through accidental code
deletion), in which the absence of a type-word
(eg. SHORTINT) caused the command to be incorrectly
parsed.
- External string variables correctly re-implemented.
This assumes that the external string has been
declared as an array of characters ala C (tested with
ZC and SAS/C), _not_ as a pointer to char! See entry
for 9/9/94.
22/10/94 - ACE version 2.3 prepared for release (finally!).