home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ST-Computer Leser 2002 January
/
STC_CD_01_2002.iso
/
SYSTEM
/
XAAES936
/
DOCS
/
HISTORY7.TXT
< prev
next >
Wrap
Text File
|
2000-08-25
|
70KB
|
1,584 lines
Development Log for XaAES
All of this file now respects 80 character line limits.
All entries except those at the very bottom are Craig's.
It's a big job...but someone had to do it :)
[27/9/95]
o Began coding XaAES kernal. Where to begin?
[28/9/95]
o Coded alert parser (seemed an easy place to start)
o 3d sculpted dialogs.
o VDI calls from the auto folder/MiNT.CNF now work.
o Auto-folder detection.
OK, perhaps I should get the kernal stuff working before messing about in
the actual GUI bits...
[2/10/95]
o TRAP intercept now works and gets correct parameters from standard AES
calls.
[3/10/95]
o TRAP intercept now returns values correctly.
o Can now do form_alert calls to XaAES in place of GEM.
o For testing, XaAES currently uses trap 3 instead of trap 2 to allow it to
be debugged under MultiTOS (until I've got it working far enough to replace
MultiTOS as my default enviroment).
[5/10/95]
o AES kernal now creates the XaAES.cmd command pipe & blocks waiting for
instructions to arrive.
[7/10/95]
o appl_init() call now works from other process' and correctly creates
a reply pipe for that application, then returns the application's AES id
(which is (under XaAES) the same as the MiNT process id).
[8/10/95]
o Coded the kernal's opcode->function jump table structure.
o Client's now block waiting for reply from the AES server, and actually
get the right replies. As soon as client blocks on the reply pipe,
MiNT task switches, allowing the AES server to get in - and other
process' as well :) .
o appl_exit() stub added.
o form_alert() now works via the XaAES pipes interface.
o Tested with XaAES as sole GUI server without MultiTOS - seems to work ok
with two client applications at the same time.
[11/10/95]
o Mouse Server coded to handle mouse button clicks without busy waiting
in the AES kernal - this also prevents clicks being missed (they may
get delayed slightly, but never lost).
XaAES spawns MOUSESRV at boot time, and MOUSESRV communicates with XaAES
kernal via the standard XaAES.cmd pipe using a special op-code and
AESCMD_NOREPLY mode (direct pipe access, not going via the trap interface).
Now that the bare-bones kernal is up & running and the trap-to-pipe interface
is working, I can get on and do the interesting bits :)
[12/10/95]
o Added evnt_button() code (allows multiple apps to wait on mouse events).
[13/10/95]
o Began coding windowing system. Not sure how to approach the look & feel
here. I've got some funky sculpted 3D routines, so I'll use them until they
get slammed for being to slow.
[18/10/95]
o Internal wind_find() now works
o Moved over to a special mouse packet format for communication between
MOUSESRV & XaAES.
o MOUSESRV now reports coords, an double click timing is much better.
o evnt_button() now correctly returns mouse coords to client app.
o wind_create() and window_open() op-codes now supported.
[20/10/95]
o evnt_button() now only returns events for clicks on the client applications
windows
[23/10/95]
o wind_close() now supported.
o graf_mouse() now fully supported.
o Mouse cursor enabled when XaAES run from the console without a standard
Atari AES loaded.
o Client reply pipe is now opened as a local file handle for the client and
the server (via a new XA_NEW_CLIENT op-code), instead of as a pair of
global file handles. This allows loads more clients to run at once, as
the limited number of global file handles isn't used up. I've managed
30 concurrent applications with no slow-down at all!!!! This is looking
faster than Geneva, and almost quick enough to catch MagiC (and pisses on
AES4.1).
o Added an new op-code XA_CLIENT_EXIT to tell the server to close its end
of a client reply pipe (allows re-use of the file handle for a new process).
[24/10/95]
o Click on widgets no longer generates a button event to the application, it
now calls the appropriate callback to handle the widget.
[25/10/95]
o graf_handle() now supported
o graf_mkstate() now supported
o Window dragging is now supported (with a nice custom mover mouse shape).
[30/10/95]
o wind_set() now supported
[1/11/95]
o Moved over to a faster (and simpler) system for handling clients waiting for
different types of event. I used to use a queue system, now I just set a
flag in the client descriptor.
o Coded AES messaging system.
o evnt_mesag() now supported
[3/11/95]
o Close widget now sends WM_CLOSED message to the client, and changes state
when clicked on.
o Mover now sends WM_MOVED message to the client.
o wind_set(..,WF_CURRXYWH,...) in response to a WM_MOVED message now works.
[4/11/95]
o Rectangle list generation implemented.
o Background window moves work correctly.
o Click on title bar now tops a window correctly.
[5/11/95]
o Fixed most of the redraw bugs with windows.
o The client closedown routine now delete's all an apps open windows, and
deletes pending AES messages.
o Multiple application tests work fine - got 10 programs with two windows
each running - no slowdown at all, and all seems to work fine.
[6/11/95]
o Finally tried running on trap 2 instead of trap 3, and found I'd forgotten
that the VDI and the AES share a trap - oops. Added code in the low-level
handler to field VDI requests to the old trap2 vector. It's a little (well
a lot) of a kludge
- there's even a spot of self modifying code in there...but it does work.
o Linked the test app with ordinary GEM libraries and test ran. The same
executable definitely runs under AES4.1, TOS4.02 and XaAES without any
problems - so it's looking good :).
o Stopped using trap 3 for testing now that enough of the system is working
to interact with.
o wind_get() now supported.
o wind_set(..,WF_BOTTOM,...) added.
o wind_find() now supported.
o Windows can now only be moved if their MOVER attribute is set (even if
they have a title bar).
o Coded screen and mouse locking.
o wind_update() now supported.
o Using wind_get(...,WF_FIRSTXYWH,...) to walk the rectangle list now works.
o Added compile time switch FORCE_WINDOWS. If set to 1 then user operations on
windows are done immediately, and the client program is sent a message just
to say that it has happened (allows windows from apps that are deep in
thought to be shifted around while we wait for the app to get back to us).
o Added the resizer widget.
[7/11/95]
o Each client app can now have its own totally seperate mouse cursor shape.
The one that is actually used is determined by the owner of the top window
- or if there are no windows open, then by the usual GEM free-for-all
method. As soon as a window is opened, the owner's cursor takes over.
o wind_set(..,WF_NAME,...) now works (ish).
[8/11/95]
o WM_REDRAW messages are now sent to clients when a redraw is needed.
=================================================================
** MINIX PARTITION CRASHED **
** Gotta redo the AES messaging - I should backup more often. **
=================================================================
[12/11/95]
o Got rid of the busy wait loop in the mouse server by using /dev/mouse to
wait for the initial mouse click, then using VDI vectors to do the double
click timing.
[13/11/95]
o Moved over to using /dev/mouse fully for the mouse handling.
o Added a bit of a hack (using a stable, compatible method so don't worry) to
insert coordinates and button states from /dev/mouse into the VDI's internal
mouse handling routines.
[14/11/95]
o Ditched /dev/mouse again 'coz it's to much hassle to use at the moment.
o graf_dragbox() now supported.
o graf_rubberbox() now supported.
[16/11/95]
o Sizer widget now sends a WM_SIZED message to the client.
o Fixed evnt_button() click to return correct keyboard shift status.
o Click on top window's title bar sends window to the back using a WM_BOTTOMED
message.
[17/11/95]
o Now using animated colour bitmaps for the standard GEM window widgets.
Very nice looking :) It's also a fair bit faster than drawing them by hand
like I was before, but is a great deal nicer than just having a single
character like in other AES's.
o User work area support added.
o wind_get(.., WF_WORKXYWH, ...) now works.
o Title bar highlighting for top window.
o XaAES logo added to title bar, selected when moving windows.
o Added FULLER widget.
[18/11/95]
o wind_get(.., WF_PREVXYWH, ...) now works
o wind_get(.., WF_FULLXYWH, ...) now works
o Click on FULLER widget now sends WF_FULLED message to client.
[22/11/95]
o Added horizontal and vertical scroll arrow widgets.
[23/11/95]
o Scroll widgets now send WM_ARROWED messages.
o Added an active/pending widget attribute to the client descriptor to help
support repeated sends from a widget that is held down (ie. the scroll
arrows).
o Fixed widget redraws when selecting in the background.
[26/11/95]
o Added slider bars to windows.
o Much to my suprise, I found that to a great extent XaAES works in all
screen modes - I've tested these modes:
ST-Low
ST-high
832*620 mono
800*600 4 colour
800*600 16 colour
They all run, ST-Low is unusable - widgets are too big.
The mono & 4 colour modes will need a little work, as all the 3D sculpting
just comes out as black, but the widget bitmaps display OK (but in black
& white) - a special mono version may be in order to make things more
presentable...
[27/11/95]
o Slider bars now actually slide :) - and they send the appropriate
WM_HSLID/WM_VSLID messages to the client.
==============================================================================
I've now missed the first release date I promised - this is a definitely a
REAL atari program now ;)
(I could even go on to found Microsod Mk2 at this rate)
==============================================================================
[7/12/95]
o Added a XaAES logo displayed at startup (actually it's a seperate program
spawned during the boot sequence). Not very constructive I know, but it
does look quite pretty
[8/12/95]
o Ditched the slider bar handling as I wasn't happy with it, and coded a
replacement.
[9/12/95]
o XaAES changes its process priority to -20 on startup (ie. highest priority).
This improves performance loads, and doesn't slow down other programs, as
XaAES spends most of its time blocked anyway...but when you need it, it
responds faster now.
[10/12/95]
o Got the Atari Compendium...
o Fixed appl_init() to fill in the globl array correctly.
o Added wind_delete() call.
o Added wind_new() call.
o wind_get/set(.., WF_HSLIDE, ...) now works
o wind_get/set(.., WF_VSLIDE, ...) now works
o wind_get/set(.., WF_HSLSIZE, ...) now works
o wind_get/set(.., WF_VSLSIZE, ...) now works
==============================================================================
Definitely suffering from binary bloat - the Kernal is now a 51K binary...
==============================================================================
[13/12/95]
o Added info bar widget.
o wind_set(.., WF_INFO, ...) now works
[20/12/95]
o Added evnt_timer() handling via the MiNT SIGALRM signal.
At the moment this only gives a resolution of one second, as I used the
Talarm() function to implement it - I'll replace this with a custom
vex_timv() routine that gives a better resolution at a later date as this
makes things like LINES seem dead slow 'coz the shortest timeout from an
evnt_multi() is 1 second.
[28/12/95]
o Added evnt_keybd() using the /dev/console device.
o Added use of Fselect() to block on the console device & the AES message pipe
at the same time.
o Added evnt_multi().
o Added a 'xaaes.cnf' file parser (compatible with GEM.CNF) that allows
programs to be auto-run by XaAES when it starts up.
[29/12/95]
o Added rsrc_load() based on the resource handler from Steve Sowerby's AGiLE
library.
o Added rsrc_gaddr()
o Added rsrc_free()
o Debugged the keyboard handling & added a kludge to cope with the MiNT
Fselect bug.
====================
New Year's......2 weeks drunk!!!
====================
[12/1/96]
o Bit of a gap there... ;)
o Fixed the resource loader
o Added the basic objc_draw() tree handler routine.
o Added rsrc_obfix()
o Added some extra debugging facilities - a DEBUG command in the xaaes.cnf
file allows xaaes' console output to be re-directed to any file or device
(I use it to dump debug to my Wyse terminal via the serial port).
[16/1/96]
o Added objc_offset()
o Added wind_find()
o Finally got a 'real' GEM program to run on XaAES - Calapt by Atari...
o Changed widget sizing & placement to tidy things up a bit.
[17/1/96]
o Added objc_find()
[18/1/96]
o Added small font size support to object handler.
o Added support for AES4.1 style GDOS font's in object tree's.
o Made the default AES fonts & sizes a compile time option.
o Fixed objc_find
o Actually got some GEM programs to respond to their windowed dialogs!!!!
[19/1/96]
o Programs run from xaaes.cnf are now launched in their home directories.
o Added G_ICON support to the object handler.
o Fixed the fill styles to be correct for object tree display.
[21/1/96]
o Added G_CICON colour icon support to the object handler.
o Added G_IMAGE support to the object handler.
[23/1/96]
o Included a new root_window into the code - this is to provide support for
a desktop via the existing window system.
o Added a new widget 'XAW_MENU' that any window can have - initially, only
the root window has it & that behaves like the GEM menu (taking over the
menu of the topped process).
o Lattice C almost runs under XaAES now (thank god).
[26/1/96]
o Coded the menu tree handler to go with the XAW_MENU widget.
o Moved the mouse data stream into its own pipe, seperate from the AES
command stream. This has improved mouse response a bit, as mouse
packets now don't get bogged down in amongst the client data (if mouse
& client packets arrive at the same time, they both get processed
but the mouse gets done first).
o Modified the mouse server to use the new data pipe, and improved single
click response.
o Added a check for mouse movement in the mouse server double click wait
loop. Big improvement, click and drag now registers with no delay at all...
o Added menu_bar() function
o Added menu_tnormal()
o Added menu_icheck()
o Added menu_ienable()
o Added menu_text()
o Extened the XA_CLIENT structure to include a pointer to each client's
standard GEM menu bar.
o Added appl_getinfo()
==============================================================================
Big landmark here. I finally got Lattice C to load & run correctly under XaAES
- it's not a lot of use yet as I've not done a file selector or a lot of the
forms code...but the bloody thing at least gives me the menu's and an edit
window.
Also, as I've managed to get to the bottom of the click-drag bug, the response
time is way up - faster than AES4.1 at any rate!!!!
==============================================================================
[28/1/96]
o Added G_STRING,G_FTEXT & G_FBOXTEXT support to the object handler.
o Added form_dial() call.
o CTRL+ALT+TAB now swaps menu-bars between active clients.
o Improved menu handling a bit.
o Added menu_register().
o Added graf_growbox()/shrinkbox()
o Added graf_movebox()
o Added appl_find()
o My life is complete - Yukon (the solitaire game) runs under XaAES almost
perfectly...
[29/1/96]
o Thanks to the MiNT mailling list for pointing out that there is a Tmalarm()
call for millisecond resolution alarm signals...evnt_timer() is now much
closer to the 'real thing'.
[30/1/96]
o Improved wind_calc() to actually get borders right without messing about
examining each individual widget.
o Small optimisation of the client redraw list handling to clip just to the
work area instead of the window.
o Added support for selected objects in the object tree hander.
o Added support for 3D object flags in the object tree hander.
o Added SHADOW flag support in the object tree handler.
o Added G_BUTTON objects.
[31/1/96]
o Added graf_watchbox() function
o Added form_button() function (no text field support at the moment)
o appl_init() now supports the AES4.0 extended information about system font
sizes.
o Added a kludge for the strange illegal / undocumented call that TOSWIN
makes on startup (you can find it in HANDLER.C).
[1/2/96]
o Fixed the keyboard & mouse response problem when using evnt_multi() with a
timer - the un-used timers were staying in the delta queue if they hadn't
gone off when the first alternative event occurred, and then interfering
with subsequent key/mouse events.
[5/2/96]
o Added a simple console window (to be honest it's a bit crap...)
o Added a new call 'short appl_pipe(void);' - this returns the file handle of
the clients reply pipe so they can use non-blocking calls & handle piped
replies themselves.
o Re-worked the keyboard handling (again) to try and fix the lost characters
problem.
o The client reply pipe handle can now be found in the AES global array at
global[12].
==============================================================================
Well, no way to delay it any further...techie beta 1 went out today.
==============================================================================
[6/2/96]
o Fixed a bug in drawing shadowed objects.
o (ref:31/1/96) Thanks to Eric Smith for pointing out that the funny call that
TOSWIN was making is in fact vq_gdos(), though why Atari had to add a special
case call is beyond me...what was wrong with the ordinary VDI magic number?
o Added support in the low-level trap handler for the '$c9' method of testing
for an installed AES.
[7/2/96]
o Object-Tree widgets now work for types other than menus.
o Added HIDETREE support to the tree display routines.
o Now got a nice set of pretty icons for alert boxes...
These are currently loaded from an external resource file - I'll embedd them
when things are a bit more settled.
o Re-worked the alert box handler (the other was just a debugging aid).
Now supports all AES4.1 icons, and a couple more, returns the correct
button, and uses proper 3D push buttons.
o Alerts now displayed in windows, and don't block other processes.
o AES owned windows now don't recieve topped/bottomed messages - they are done
automatically. (eg. the AES owns alert windows, but doesn't need the
messages, so we can just top & bottom the alert windows immediately)
o Extended window attribute NO_REDRAWS stops windows from generating
WM_REDRAW messages.
o Added semaphore locking to the sensitive areas of the Trap handler (just
in case).
o Another extended window attribute, STORE_BACK. If this is set, a window
will preserve its own background (like alerts do under normal GEM). Useful
for alert windows, where the client is asleep & can't respond to redraw
messages, and also to provide
o Alerts use STORE_BACK window attribute.
[8/2/96]
o New search order for xaaes.cnf:
.\xaaes.cnf
u:\c\mint\xaaes.cnf
u:\c\multitos\xaaes.cnf
u:\c\xaaes.cnf
o New keyboard combo's
ALT+CTRL+TAB - swap app menus (not top app) (ok, that's an old one, but
it's documented now)
ALT+CTRL+L - list current clients to DIAGS/'debug device'
ALT+CTRL+K - tidy up: cleans up after any apps that died without
calling appl_exit()
[9/2/96]
o Added form_do() call (only creates & displays non-modal dialog window at
the moment)
[10/2/96]
o Implemented the form_do() click handler. Doesn't know about editable text
fields yet, but does do radio buttons, hidden, disabled, exit & touchexit.
o Added scrap_read() & scrap_write()
o New command CLIPBOARD in the xaaes.cnf file allows the default clipboard
path to be set on startup.
o Modified the initialisation code so that apps that weren't launched with
shell_write() don't crash xaaes when they call shell_read().
o Added a fix-up for menu trees, as some resource files don't have the right
spacing & stuff (and my resource loader doesn't do them).
o Added objc_change() call.
o Form_dial(FMD_START) now creates the window to put a dialog in...this helps
with programs that call FMD_START, then handle their own dialog interaction.
o Argggghhhhh. Where was all my memory going? Found (and fixed) a massive
memory leak in the menu handler. Every time a menu was dropped down, a new
buffer was allocated - but I never got round to freeing them...sorted it
out now though.
o Fixed the transparent G_BOX problem in the object tree routines.
o Fixed vertical positioning problem with small texts in dialogs.
o The inherited default dialog background colour mode is now supported by the
object tree routines.
==============================================================================
Hmmm. Beta 1 was a bit of a disaster, very few people could make it work, and
there were a lot of real problems with it. Things are much better now though,
with several programs running perfectly (Z'Org for instance).
==============================================================================
[11/2/96]
o Extended the applications list to include what apps are waiting for.
o Included a new ALT+CTRL+D key combo to dump system info.
o Re-coded the mouse clicks handler, so the app that owns the mouse lock
gets all clicks, even those outside of its own windows.
o Finished form_button()
==============================================================================
The XaAES mailling list starts today.
Had a play with the competition (oAESis), and found it doesn't run as many programs
as XaAES does - but it does run some XaAES doesn't (like Lines for instance).
Got XaAES to run Pagestream today, which cheered me up.
Checked out the performance of XaAES compared to oAESis - oops...oAESis piss's
all over XaAES in terms of speed....
==============================================================================
[12/2/96]
o Added a call_direct interface in the trap handler for functions that don't
impact on main memory to any great extent...this by passes the pipe's queue
to call routines direct. I know, it's gonna be a pig to debug...but the
performance gain you get from doing it is amazing - TOSWIN runs so fast I
didn't believe it at first... It doesn't have to be used for everything,
just for common 'quickie' calls. NOTE: I've not used this generally at the
moment to avoid memory ownership problems - and it makes things very
unstable...
o Re-coded wind_update to use semaphores & call_direct...first big improvement
from the new system.
[13/2/96]
o Nicked the rc_intersect code from oAESis - it was better than mine.
o Re-worked the rectangle list generation to use the above poached code.
o Added loads more semaphore locking on various ops (mostly in c_window.c).
o More work on the trap handler.
o Appl_init() now allocates a private stack for use during AES calls.
==============================================================================
Got Johan's GCC diffs - gotta find time to include them (probably over the
weekend).
Got Martin's Lattice diffs.
==============================================================================
[14/2/96]
o Applied Martin Koehling's diffs - here's his summary of what got fixed...
----Quote----
This is my first take on hacking XaAES; a context diff (relative to
the beta1 release) is appended to this message. [CRAIG NOTE: I've applied
the diffs already...]
Summary of changes (I hope I didn't forget anything):
a_handler.s:
Modified the TRAP2 handler to use the XBRA protocol (no
more self modifying code, too).
a_handler.s:
BUGFIX: TRAP2 handler now saves *all* modified registers (AFAIK,
GEM AES does the same, and some APPs/TSRs rely on this [undocumented]
behaviour)
handler.c:
Modified hook_into_vector to use Setexc() instead of directly
hacking the exception vector table; patch_handler() is no longer
needed. New function unhook_from_vector().
handler.c:
Added __saveds keyword to XA_handler(), thus eliminating the need
for `far' data.
appl_init.c:
Removed a few `far' keywords.
resource.c:
BUGFIX: improved obfix() to be more GEM AES compatible (fractional
offsets, ob_width==80 special case).
std_widg.c:
BUGFIX: wind->widgets[XAW_MENU].w wasn't initialized at all.
NOTE: there seems to be still another missing-initialization bug
lurking somewhere - when the FASTLOAD bit is *set*, xaaes.tos
sometimes simply hangs when I start it from the desktop; this
does *not* happen when xaaes.tos was started from mint.cnf
(->clean memory) or when the FASTLOAD bit is *cleared*...
bootup.c:
If there are less than 16 colors (or was that `colours'? ;-))
available (like on my monochrome monitor), initialize
display.dial_colours differently; the display is still terribly ugly,
but at least now I can *see* something besides black text on black
ground... :-)
bootup.c:
BUGFIX: use vqt_attributes() (instead of vqt_extend()) to initialize
display.c_max_w/display.c_max_h - this yields the correct values
8 and 16 for the `monochrome' system font.
bootup.c:
BUGFIX: use obfix() in SYSTEM_MENU initialization; don't forget
SYSTEM_MENU[16] :-).
bootup.c:
Use a different method for AUTO folder detection: after an
appl_init() call, check if global[0] (AES version) is still
zero - this indicates that no AES is present...
(This method has been documented and successfully used for
years, and it's inituitively "cleaner" than the original one; in
addition, it obviates the need for the isauto.s module.)
(appl_init() should have been called anyway since graf_handle()
is called later...)
bootup.c:
New function `Cleanup()' that closes workstations, restores
the TRAP vector, calls appl_exit()...
Still quite incomplete (and currently unused anyway).
Others:
Some changes to header files to reflect the above modifications.
Added `#include <memory.h>' to a few modules to get rid of `No
prototype declared for function' warning (some are still missing).
----Un-Quote----
All of the above went in apart from the obfix() stuff and register save
mod, which I'd already done.
Seem's to have improved stability a lot, especially for call-direct ops,
and there's a lot of other good stuff like the XBRA support in there as
well.
[15/2/96]
o Fixed a bug in the draw_object_tree() routine (HIDETREE wasn't handled
properly).
o Enabled direct call for more op-codes to improve performance.
[16/2/96]
o Included Mario Becroft's monochrome widget set as a compile time option.
o Tested XaAES in mono for the first time in ages...hmmm. Certainly works,
but you can't see windows except for the widgets. Needs some work I feel...
[17/2/96]
o Added shel_find() (uses the standard MiNT enviroment)
o Added shel_envrn()
o New keyboard combo ALT+CTRL+R - attempts to recover control of a hung
system.
o Added mode 1 (SWM_LAUNCHNOW) support to shell_write().
o Added a SIGCHLD handler to spot exitting children.
o appl_exit now calls Pwait() to get the app exit status
[18/2/96]
o Removed all the delta-queue stuff, and replaced the timer events with a more
advanced and versatile method based on Evan's idea of using Fselect
time-outs instead of SIGALRM signals. This does away with having to
maintain the delta queue & simplifies cancelling evnt_multi. It does mean
that the trap handler is a bit more complex now...
==============================================================================
Beta 2 released via Johan's ftp site today
==============================================================================
[19/2/96]
o Added a check for missing system resource file (exit gracefully instead of
bus error).
o Fixed a bug in the SIGCHLD handler (wasn't extracting the child pid
correctly)
- dieing children are now caught correctly and clean-up happens
automatically.
o Added new 'About XaAES...' dialog.
o Added handler for clicks on the system default menubar - only 'About' is
actually used at the moment, but at least the code is there now.
o Fixed the CTRL+ALT+TAB app switch so that you can always get to the system
menu if you need to.
[20/2/96]
o Integrated Martin Koehling's 2nd set of diffs - here's Martin's list of
changes:
----Quote----
bootup.c:
Remove Semaphores in Cleanup().
Print an error message and call Cleanup() & exit when opening of
KBD_device failed.
Ditto when LoadResources("system.rsc") failed.
(The latter would have saved me two to three hours of bug-hunting
yesterday...)
resource.c:
Removed auto-freeing of existing resource in rsrc_load handler;
under GEM AES, programs *can* have multiple resources.
(This function still needs some more work - in particular,
resource memory should *always* be owned by the APP!)
xa_aes.prj (separate file):
Removed all local compiler options - apparently they had just
accumulated over time and served no practical purpose...
(problem of of the Lattice IDE)
[CRAIGS NOTE: They are a side effect of how I locally turn on diagnostics
output when I'm debugging: I only define GENERATE_DIAGS for the modules
I'm working on...]
Others:
Lots and lots of added #includes; XaAES should now compile without
any warnings even with `Enforce function prototypes' enabled - this
should make porting XaAES to other compilers (or changing the `int'
size, or changing the parameter passing conventions) somewhat
easier...
----Unquote----
...And yes, it does compile with no warnings even with Enforced prototypes.
o Added a new auto-redraw callback function to windows, to allow the work area
to be redraw automatically without sending redraw messages or walking the
rectangle list. This is mainly aimed at displaying the root window...but it
could be useful for other things?
o Added the desktop/root window object tree.
o Made the root window a NO_MESSAGES type window - we had a memory leak there,
as the AES never checks for messages to itself, redraws were just building
up...and it can redraw itself using auto-redraw, so there is no to send
messages.
o Removed the erase_nontopped_window() function as the desktop support
made it redundant.
o Changed the way window redraws are calculated in display_windows_below()
to prevent all windows below being drawn even when they are obscured by
other windows.
[21/2/96]
o Added wind_get(...,WF_NEWDESK,...)
o Added wind_set(...,WF_NEWDESK,...)
o Integrated Martin's bugfix for the semaphores version of wind_update()
function (with a small fix to a bug in Martin's version).
o Added a new wind_set() mode WF_AUTOREDRAW. This allows a windows
auto-redraw function to be set. Takes a pointer to a WindowCallback type
function, passed in parm1 (hi word) & parm2 (low word):
short my_redraw_function(XA_WINDOW *window)
{
/* Do the redraw, using the coords from the XA_WINDOW structure */
}
void set_a_redraw(void)
{
WindowCallback rd=&my_redraw_function;
wind_set(my_window_handle, WF_AUTOREDRAW,
(unsigned short)((rd&0xffff0000L)>>16),
(unsigned short)(rd&0xffffL), 0,0);
}
o Added PROGDEF support to the object tree handler.
o Went over most of the source replacing vs_clip() with set_clip() 'coz the
PROGDEF's needed to know the current AES clipping rectangle :(
(I'm dead pissed off about that, but can't see a way round it).
o Added appl_write() function - direct result is that AV-PROTOCOL applications
(GEMVIEW for example) now work under XaAES when run with Thing.
==============================================================================
Hey!!! 'Thing' now displays its desktop & directory windows properly, with
colour icons, backdrops, drag & drop onto the desktop...the works!!!
The redraw algorithm is still very iffy - the whole desktop gets redrawn far
to often.
==============================================================================
[22/2/96]
o Improved the menu_xxx functions to prevent the redrawing of the whole
desktop each time.
o Added wind_set(.., WF_STOREBACK, ...) to allow user programs to set their
own store background property.
[24/2/96]
o Hacked around with the window redraws to get rid of some more root redraws.
o Fixed graf_handle() to give correct character cell sizes.
o Root window clicks now go to the current owner of the desktop (so clicking
on Thing's desktop icons works).
o Fixed form_button() - Thing's dialogs work now.
[25/2/96]
o Ran Johan's xlcc2gcc program over the source tree to remove all C++ style
comments.
o Applied about 2 thirds of Thomas' diffs.
- most notable fix is that shel_wrt() works properly now (mode 0 at least).
[2/3/96]
o Sorted out some problems with window list locking, so that wind_get()
could move over to direct call. This fixes the major speed problem
XaAES had, and also seems to have made things a lot more stable (but I
always say that don't I ?).
o Removed the funny sliders that everyone was complaining about.
[3/3/96]
o Added appl_search()
o Fixed problem with window slider paging (added a click behaviour to the
widgets).
o Added drop shadows to windows.
o Reduced size of object shadows to 2 pixels to match GEM (some apps make
assumptions about this when storing backgrounds).
o Object tree handler: CICON's will use nest best colour depth if an exact
match cannot be found (eg. if there is a 16 colour icon, it will be used in
256 mode if there is no 256 icons).
[4/3/96]
o Menu's only redraw sections that are changing rather than the whole menu.
o Changed to a more 'GEM' method of highlighting menu options.
o Fixed CICON's (again). Resource loader now uprates all CICON's to the
current screen colour depth on loading (eg. 4 bit plane will convert to 8
bit plane when run in 256 colour mode). There's still some nasty bugs in
this code...
[5/3/96]
o Applied Martin Koehling's appl_getinfo() patch.
This fixed a couple of problems with one or two apps - notably, 7UP &
Kandinsky work now because of this...
===============================================
HARDDRIVE CRASH
- Luck recovery...
===============================================
==============================================================================
Beta 3 released.
==============================================================================
[8/3/96]
o Fixed form_button() so that objects without their selectable attribute set
still return if they are EXIT or TOUCHEXIT. This means that Thing's
scrolling lists in dialogs now work correctly.
[9/3/96]
o Started adding underlying support for keyboard entry into forms.
o Added a new callback attribute for windows to handle keyboard entry. If an
edit field is specified in form_do() then this attribute is set for the
window containing the form.
o New ob_flag bit IS_EDIT tags the current edit field so that the object
drawing routines know to show the cursor.
[10/3/96]
o Added support to the form click handler to change the current edit field if
an EDITABLE object is clicked on.
o Fixed non-3D button drawing.
o Fixed radio button redraw.
o Fixed the CTRL+ALT+R 'recover control' combo so that XaAES doesn't crash
when its used.
o Fixed appl_search() to not return illegal values for AES id's.
o SIGCHLD handler doesn't try to do any clean-up now, it just sends the
XA_CLIENT_EXIT message to the kernal, and the standard cleanup handles it.
[11/3/96]
o Fixed shel_write() TOS program launch to drop the correct info into the
TOSRUN pipe for TOSWIN to run the TOS program for you.
[20/3/96]
o Applied 2 sets of diffs from Martin (see 5diff & 6diff).
[21/3/96]
o Coded the keyboard handler for form_do(). The following are supported:
Field selection:
TAB or DOWN-ARROW - next field
UP-ARROW - previous field
SHIFT+DOWN-ARROW - last field
SHIFT+UP-ARROW - first field
Cursor movement:
RIGHT-ARROW - cursor right
LEFT-ARROW - cursor left
SHIFT+RIGHT-ARROW - cursor to end of field
SHIFT+LEFT-ARROR or
CLR/HOME - cursor to start of field
Editting:
ESCAPE - clear field
DEL - delete character under cursor
BACKSPACE - delete character behind cursor
other keys go straight into the text field.
[22/3/96]
o Added the display function for the iconify widget.
o Appl_getinfo(11) modified to indicate presence of iconifier widget.
o Added wind_set(.., WF_ICONIFY, ...) support.
o Added wind_get(.., WF_ICONIFY, ...) support.
o Click on iconify widget now sends WM_ICONIFY message to client.
[23/3/96]
o Added wind_set(.., WF_UNICONIFY, ...) support.
o Added wind_get(.., WF_UNICONIFY, ...) support.
o Click on iconify widget of an iconified window now sends WM_UNICONIFY
message to client.
o Double-click on title widget of an iconified window now also sends
WM_UNICONIFY message to client.
==============================================================================
After discussing it with Martin, we've decided to ditch the big clients[]
array in the near future. The use of the Martin's Pid2Client() macro is an
interim thing. Once all direct access to the clients[] array has been replaced
with Pid2Client() we can replace the array with a dynamic structure that
doesn't swallow 120K of RAM to no good reason.
==============================================================================
[24/3/96]
o Another big diff from Martin Koehling:
----Quote----
objects.c, objects.h, many *.c:
BUGFIX:
Changed parameter list for set_clip() from `x1,y1,x2,y2' to `x,y,w,h'.
Changing all set_clip() calls accordingly removed many of the `+1'
errors, and saved a few bytes, too.
objects.c:
clear_clip() now doesn't really turn clipping off but only sets the
clipping rectangle to the entire screen - this is safer since
otherwise memory areas outside the screen might be overwritten by
buggy code! (Probably depending on function called and VDI version...)
rectlist.c:
BUGFIX:
Since the redraw problems had actually gotten *worse* after the
set_clip() changes (some bugs had apparently cancelled each other),
I first replaced rc_intersect() with a time-proven version; but this
wasn't the problem...
(I kept the new version because its more readable and actually
about 50 bytes shorter than the original. :-))
The *real* bugs were in generate_rect_list(): after removing
several instances of `-1'/`+1', redraws work *much* better now...
(There are still a few problems - I suspect bugs in the calculation
of window work/border areas...)
shellwrt.c, new_clnt.c, bootup.c:
BUGFIX:
shel_write() used to free the command line and the command
tail - much too early!
Moved this to XA_client_exit().
wind_fns.c:
Added test-and-set-mode to wind_update() (BEG_UPDATE|0x100,
BEG_MCTRL|0x100); would somebody please try this out? ;-)
appl_ini.c:
EXPERIMENTAL:
Put AES version number 1.4 (instead of 4.1) into global[] array;
possibly some programs are crashing because they expect MTOS (AES 4.x)
features to be present that are not yet implemented???
<CRAIG'S NOTE: This isn't such a good idea so I've #if'd it out of the
binary>
getinfo.c:
Some changes to info_tab[]:
- mode 4: indicate that appl_search() is implemented
- mode 10: indicate shel_write() modes supported
- mode 11: indicate `wind_update() check and set present'
getinfo.c:
BUGFIX:
appl_find(NULL) should returns the AES process id of current
process, *not* the menu bar owner - at least according to all
documentation I have access to.
getinfo.c:
appl_find("?AGI") now returns 0, indicating that appl_getinfo()
is understood by the current AES - normally this function is
only present in AES versions >= 4.0 (i.e. MTOS; old AES versions
display an "Illegal Function" alert instead).
The "?AGI" feature was invented by Martin Osieka for his
AES extension WINX, which adds appl_getinfo() (and other
things) to "old" AES versions; MagiC 4.0 (AES 3.99!) supports
"?AGI", too.
The proper way of checking for the presence of appl_getinfo()
is:
`has_appl_getinfo = (global[0]>=0x400) || (appl_find("?AGI")==0) ;'
appl_ini.c, c_window.c, new_clnt.c:
Replaced direct accesses to clients[] array by Pid2Client() calls.
----UnQuote----
o There was one thing in that diff that Martin seems to have forgotten he did
- if you hold down either shift key during startup, XaAES will swap to
medium res if it was being started in Low Res. It's not quite the all
singing all dancing res change we talked about on the mailling list yet,
but it's sort of a start isn't it?
o Fixed window drop-shadow bug.
[27/3/96]
o Added objc_edit()
o Added form_keybd()
[28/3/96]
o Added Martin's appl_ini() patch to get round an apparent MiNT pipe deletion
bug. (this is what was stopping lines.prg from working, see 8diff for
details)
o Debugged objc_edit()
o Mono icons now display their text field correctly.
o BOXTEXT's now get border properly.
[29/3/96]
o Added falcon video mode switches to the command line:
-video 0->3
where:
0 = 80 column, non-interlace, mono
1 = 80 column, non-interlace, 4 colour
2 = 80 column, non-interlace, 16 colour
3 = 80 column, non-interlace, 256 colour
These don't work very well at the moment, but do get round the NVDI2.5
problem.
o Added Shutdown option to the XaAES system menu. This isn't 100% yet, but
it's a start... Shutdown will kill all clients, and exit XaAES - but you
can't get back into XaAES again at the moment, so I've obviously missed
something...
[31/3/96]
o Added new functions (OBJECT*)CloneForm(OBJECT*) and
(void)DeleteClone(OBJECT*) to create copies of the resource templates in
SYSTEM.RSC (this stops multiple clients using alerts from interfering with
one another).
o Alert box handler now uses the CloneForm/DeleteClone routines.
o Added proper XBRA unhook to restore the correst AES trap vector.
o Major change to the architecture of XaAES:
The XaAES.cmd pipe is no longer a global file handle. The reason for this
is to ensure that all XaAES's pipes get deleted when the system is
shutdown - otherwise if you restarted XaAES without re-booting, the new
server couldn't open the command pipe.
The new approach is to have XaAES.cmd as opened by one process at a time,
and then only during appl_init(). The process uses XaAES.cmd as an
'introduction pipe' to send an XA_NEW_CLIENT message, then closes it again.
The main body of commands comes from what used to be the clients reply pipe
(this is now a bi-directional pipe), and the kernal selects on all the
client pipes at the same time.
This is a pretty major change, and I've only done it because several people
asked for a clean shutdown/restart procedure without having to reboot the
machine. Ok, you've got it.
o 'Shutdown' works correctly, and XaAES can be re-started as many times as
you like (only one server at a time though) without rebooting the machine
(from a command line).
o MOUSESRV opens its comms pipe as O_RDWR to allow it to be deleted again.
o SIGINT and SIGQUIT are now caught and cause a graceful shutdown (exactly
like selecting the 'Shutdown' menu option).
=====================================================================================
Beta 4 released.
=====================================================================================
[2/4/96]
o Johan mailled me James Cox's MooseServ replacement for the MOUS_SRV mouse
program (I missed it when he first posted it). It's a great improvement
over the original that I wrote, a proper MiNT device, all coded in
assembler - the full works. It's gotta become the standard XaAES mouse
handler starting from now - mainly because it does away with the busy wait
loop in the mouse handler, but also because double click response is
much better than it was in my version.
[9/4/96]
o Fixed graf_watchbox() - sorry, that was an error in Atari Compendium
as regards where parameters were passed (that was why Everest didn't work
up to now).
o Added some code to not select objects that aren't selectable in
form_butn().
o Added CH_EXIT message to the SIGCHLD handler. This is now sent to the
'AES parent' of an app. This is different to the MiNT parent - all client
apps should be children of the XaAES server, bgut their 'AES parent' is
the app that launched them with shel_write().
o Shel_write() mode 1 now blocks the client (as it should), and the SIGCHLD
handler wakes it up again when the child exits.
[12/4/96]
o Johan found the problem with running MGIF, so I've fixed it - menu_text()
was just changing the pointer to the menu text, instead of copying the text
over the existing data (as it should have done).
[16/4/96]
o Fixed a bug in shel_write() - XaAES was corrupting the clients copy of the
command when it launched the new program, so if the client attempted to
re-use the command string it was invalid (this showed up when running
AntMail 0.7.5).
[17/4/96]
o Added CHECKED & CROSSED support to the object display routines.
o Added the new XaAES/oAESis extended shel_write() stuff to allow explicit
setting of user/group id's when a child is launched. Haven't done the
UID/GID inheritance stuff yet (that will need a little more work).
[18/4/96]
o Added tear away menu bar's (CTRL+click on a menu to tear away). This isn't
a final thing, it's just really to show how easy it is to add this sort of
thing to XaAES.
o Added support for NO_WORK window attribute, so a window can have no work
area at all.
o Alert box's & form_do() now use NO_WORK windows.
o Alert box default button set correctly (although the keypress is ignored
at the moment).
o Disabled the OS_SPECIAL memory patch (new switch in XA_DEFS.H
'DODGY_MEMORY_PROTECTION') as I think it causes a massive memory leak in
the MiNT kernal.
[19/4/96]
o Various fixes to the object tree drawing routines.
- Finally sorted out the black bars problem.
- Selected text is now highlighted.
[25/4/96]
o The owner of the screen update flag now recieves all mouse input even
if it hasn't grabbed the mouse flag.
o The owner of the screen update flag now recieves all keyboard input
as well. These two patches help several programs to work better
with the Selectric fileselector (notabley, Egale works now).
o Replaced form_do.c, forms.c & objcedit.c with Johan's patched
versions - the form handling should work a little better now.
o Added hide/show cursor to the objc_draw & objc_change functions
- this gets rid of almost all the 'mouse droppings' that we were
suffering.
[26/4/96]
o Got a new version of the Moose (mouse) server from James Cox. The actual
device driver is now a MiNT loadable device (XDD) and remains loaded all
the time. Eventually we'll scrap the mousesrv program and use the device
directly :)
[27/4/96]
o All OS functions now return unsigned long instead of short.
o Removed the 16 tick minimum on event timeouts - you can now do a timeout
with 1.
o appl_init() & appl_exit() now block the client until the server process
recieves the (de)registration message.
o appl_init() & appl_exit() no longer special cased (that was leftover from
before I added the call direct interface).
[30/4/96]
o Applied Martin's object display diffs:
---Quote---
xa_globl.h:
- Added macros FirstClient() and NextClient() - useful for all
functions traversing the entire client table (used in bootup.c
only at the moment).
objects.c, draw_2d_box(): *****Martin's version of this is a bit duff [Craig]
- Rewritten completely (outside/inside borders were reversed [IIRC],
outside borders looked rather strange).
objects.c, display_object():
- Lots and lots of changes - object appearance should match
GEM AES much better now!
- Rewrote SELECTED handling in mono (<16 colors) mode - this
fixed the "object text in SELECTED objects vanishes in mono
mode" problem.
- Shadowing and outlining objects now works correctly.
- Fixed colorword->opaque handling (which does only apply to
text within an object, not to object body).
- Slightly changed USERDEF handling: the user function is
supposed to return the ob_state bits that still need to
be handled by the AES; since all documentation on this
topic is *very* vague (and earlier experiments weren't
conclusive either), I'm not *quite* sure if my change
is correct - but it doesn't appear to break anything!
- Added support for object states CHECKED, CROSSED, DISABLED.
********* NOTE: *********
I did *NOT* test all of this in ">=16 color" modes yet - but
I hope my changes didn't break anything; 3D objects should be
unchanged, too...
COLOR USERS: PLEASE TEST THIS!
objects.c, draw_object_tree():
- Added v_hide_c() and v_show_c() - the caller doesn't need to
call this anymore.
form_do.c, click_object_widget():
- It wasn't possible to de-select a SELECTED object by clicking
on it - on the screen it was de-selected, but internally the
SELECTED bit got set again!
forms.c, XA_form_button():
- Fixed width/height parameters of a set_clip() call (overlooked
last time).
- Don't SELECT a TOUCHEXIT object if it isn't SELECTABLE, too.
(Actually, there are still several other special cases not
handled quite correctly - but I think this can wait...)
frm_alrt.c, do_form_alert():
- Set interior color of alert box to "system background color"
in "monochrome" (<16 colors) mode.
- Make alert buttons 2D in monochrome mode (color buttons are
still "black text on black background")
mousesrv.c:
- Added a SIGTERM handler, allowing to restore interrupt vectors
before termination.
(I'm not quite sure why nobody reported any problems with the
SHUTDOWN handling - I regularly had crashes after terminating
XaAES if it was started from the DESKTOP; possibly some AES
versions are more forgiving in this area than my AES 3.2
(TOS 2.06)??) (I'm still having trouble if I restart XaAES
after a SHUTDOWN - but at least it works most of the time...)
BTW: James Cox' moose server probably presents a *major*
problem in this regard - it installs a device driver, and
MiNT has *no* way to cleanly de-install one of those... :-(
(*PLEASE*: correct me if I'm worng!!:-))
This means basically that the server must *never* be killed;
in addition, there needs to be a way (Fcntl?) to disable
the server when XaAES exits, and to re-enable it when XaAES
is started again...
bootup.c:
- Send SIGTERM instead of SIGKILL to the mouse server - SIGKILL
can't be caught!
- Wait for the mouse server's termination before proceeding
(important!!!).
- Send SIGTERM instead of SIGKILL to apps, too; probably XaAES
*should* wait for the applications' termination, too - but I'll
leave this alone for the moment...
- Pass *physical* (not: virtual) workstation handle to mouse server;
the docs are not very clear on this point - but this *seems* to
be cleaner, since the VDI interrupt vectors are not a "per-
vworkstation" resource...
- Simplfied F_OS_SPECIAL setting: "u:\proc\.-1" refers to the
current process (as documented in Appendix B of the MiNT 1.12
docs).
********* BTW: re: "Why does XaAES still crash with memory
protection on?"
Craig: did you try setting the protection bits of MOUSESRV.TOS
to SUPER? This is necessary since it contains interrupt handler
code...
logo.c:
- Added WM_BOTTOMED/WF_BOTTOM defs (not defined in my aes.h).
---UnQuote---
[3/5/96]
o Finally got things working properly again after putting in Martin & Johan's
form & object patches.
[4/5/96]
o Added loads of memory allocation error checking to try and cut down on
crashes - seems to have improved things a bit.
o Fixed Johan's objc_edit() and forms keyboard handling code to correctly
interpret valid characters (was locking out some perfectly admissible
characters).
o Another small change to the client startup/shutdown stuff - CH_EXIT is now
sent again (parent field was being invalidated to soon). Multiple
shutdown/restart sequences seem to work pretty well now.
o Extended client list reporting (when debug enabled) to show more info on
each client.
[5/5/96]
o Added support for Braodcast (mode 9) shel_write()
o Added support for Shutdown (mode4) shel_write()
o Added support for Desk Accessory loading in shel_write() (mode 3).
- actually, I blagged a couple of lines of assembler from oAESis 0.70
to trick accs into loading correctly. Accs load & seem to behave correctly,
but you can't open them yet (they aren't in the menu anywhere yet).
o House keeping now gets done after a 2 second inactivity OR 5000 OS request.
This helps find dead clients more reliably...
[6/5/96]
o Loaded applications & ACCs are displayed in the desk menu, with a tick next
to the one that owns the current root window menubar.
o ACC's are autoloaded on bootup. New xaaes.cnf directive ACCPATH allows you
to set the path that ACC's will be loaded from. (default is c:\)
o ACC's are tagged in the desk menu so you can see which they are.
o Clicking on an ACC's menu entry sends AC_OPEN to the it.
o Clicking on an APP's menu entry gives it the root window menu & desktop.
[7/5/96]
o Put in Johan's new rectangle list handling code.
Here's Johan's comments on what he's done:
---Quote---
In 'rectlist.c' the old rc_intersect has been optimized a bit and there
are two other new static functions with almost the same function.
For external use there are two new functions:
create_work_list - Creates a second rectangle list, covering only the
parts that are within the window's work area.
invalidate_rect_list - Marks all rectangle lists below a specified window
(including that one) as invalid. The rectangle
objects are deallocated, naturally.
Two other static functions take care of rectangle object allocation and
deallocation.
The diff files mostly remove unnecessary calls to generate_rect_list() and
add invalidate_rect_list() calls where needed.
---Unquote---
o Added the check for out of clip objects that Johan suggested in
draw_object().
==============================================================================
Beta 5 released.
This is an obscenely fast release. It's now officially a shit load
faster than AES4.1 (my original aim). This is all thanks to Johan's
work on the rectangle lists and the object clip fix (in the case of
Thing's directory window scrolling), as well as my re-vamped
evnt_multi().
==============================================================================
[8/5/96]
o Stopped root window redrawing when first real window is opened.
o Fixed display bug when topping windows.
o Stopped whole root window redrawing when last window is closed.
o Added undocumented entry in applications global[] array that the EGEM
library relies on (naughty of them), so ESSDecode, LHAshell, et al should
all work now.
(thank you to the oAESis guys (namely Christer G) for sorting that out).
[9/5/96]
o Fixed mouse click drop through when clicking on menus.
o Menu titles are un-highlighted after selection.
o STORE_BACK windows (ie. dialogs) now stay on top, and you can't
move windows that are behind them.
o Fixed NO_MESSAGES type windows (dialogs again) when used with
Johan's rectangle list code.
o NO_WORK windows don't have the window borders drawn, they just get a
plain filled rectangle instead.
[10/5/96]
o Small patch to shel_write() to make detecting type of program to launch in
mode 0 work a little better.
o Can now move windows off screen.
[11/5/96]
o Applied Martin Koehling's latest diffs:
resource.c:
FixColourIconData() had a serious bug: if
c->num_planes > display.planes, the end of an Mxalloc'ed
memory block was overwritten; this was probably responsible
for spurious crashes in `lowcolor' resolutions - for example,
on my Mega ST XaAES Beta 0.5 *always* crashed during initialization
if it was run from MINT.CNF!
resource.c:
FixColourIconData() had another bug: the destination MFDB
wasn't properly initialized (fd_stand in one case, fd_addr
in another one) before vr_trnfrm(); I can't explain how
this code could work at all...
xa_defs.h:
During bug hunting, I added:
#define malloc(m) calloc(m,1)
I think it's a good idea to have allocated memory blocks
initialized to zero - at least during debugging!
xa_globl.h:
Added a typecast to get rid of a syntax error (Pid2Client(pid)->...
didn't work).
objects.c:
draw_2d_box() still has problems with *outside* borders; I've
added my version (which is modeled closely after Atari's own
algorithm) for easier comparison - if any shift key is pressed,
the old version is used, otherwise my version...
(No, I don't propose to leave this in XaAES 1.0!;-))
NOTE: Martin's version of draw_2d_box() doesn't work, so I've not put it in.
o Widget bitmaps are now stored as icons in the system.rsc file.
This means that one version of XaAES runs in all colour modes, and that
widgets now appear correctly in 256 colour modes :)
o Fixed converting selected images of colour icons from one colour depth
to a higher one.
[9/6/96]
o After a month of fiddling, finally got XaAES to talk to /dev/moose directly,
so the seperate mouse server program is no longer required. This speeds
things up a little as well because the extra overhead for the mouse pipe
is removed.
o Sorted out some (if not all) of the problems with Johan's rectangle list
code.
[14/6/96]
o When you click to drop down a menu, you can point at others to pull them
down as well.
o "Click...hold...select-on-release" type selections added to the menubar
handler.
o More fixes to rectangle list & window redraws.
==============================================================================
Memory protection almost works now. Something in shel_write() breaks
it if you issue shel_write() from any program apart from XaAES. It's
strange, because the initial shel_write() calls when parsing xaaes.cnf
don't break memory protection, but if you try to run something from
Thing, XaAES will violate memory protection?
==============================================================================
[16/6/96]
o Re-worked the object display code to use a jump table to seperate
routines for each object type instead of the massive switch()
statements that were used before. This makes it easier to add new
object types and makes things a great easier to maintain (the old
version of display_object() was a real mess).
o Started adding new object type G_SLIST (scrolling list). ob_spec
should point to a SCROLL_INFO structure, which describes the actual
list. New functions in scrlobjc.c provide creation/addition/deletion
support for scrolling list entries (as there will never be a
resource editor that supports them). I'll add an AES call interface
to these routines later.
[9/7/96]
o Added 'real-time' scrolling when dragging window sliders. This is a fairly
minor mod in SCRLWIDG.C that uses the same set_widget_active() method as
the arrow widgets. This option can be disabled in XA_DEFS.H using the
REALTIME_SCROLL switch.
[10/7/96]
o Left hand button is now 'real-time' scroll, right is standard GEM scroll.
[24/7/96]
o Finished debugging realtime scrolling.
o G_SLIST objects now display pretty much correctly (in colour).
o Added "Task Manager" window, partly as I think it'll be useful
and partly to test the G_SLIST object type (list of current
AES clients).
o ALT+CTRL+L now opens the Task Manager.
========================================================================
[2/8/96]
Got NVDI4 - argggh, now I know why people complain that XaAES
doesn't work very well with NVDI...stuff that worked with NVDI2.5
doesn't work at all with NVDI4.
========================================================================
[6/8/96]
o Fixed NVDI4 compatibility.
o Reworked video mode select switches. -video now does ST/TT modes,
new switch -fvideo does falcon special modes (via VsetScreen).
Falcon owners can now access a decent selection of modes (like,
2/4/16/256 color & loads of res's).
========================================================================
[8/8/96]
Finally finished reboxing my falcon into an old Mac II box. They're a
perfect size to fit a falcon into...now I can get back to doing some
serious work :)
========================================================================
[19/9/96]
o Bit of a boob here - I managed to delete the latest history file,
so I've reverted to a backup (oops). So, a summary of what got done
before now:
- File selector (uses Tamminen Eero's directory code with my own
wildcards + scroller)
- Scroll list objects with icons
- Task manager kill function
- Launch app
- lots of minor bugfixes (but I can't remember what they were).
[23/9/96]
o Finally fixed the bug in shell_write() that was breaking the
memory protection...you can now run XaAES with MiNT memory
protection active!!!
========================================================================
[16/10/96]
Deleted the history file by accident (again). Bugger. Here is a
backup, with several of my most recent mods deleted.
========================================================================
[16/10/96]
o Finished a (very) wide ranging overhall of the rectangle list
handling. Reasons being:
1) My original scheme did naughty things like calling malloc() as a
result of wind_get() when generating WF_FIRSTXYWH. Ok when the
command pipe was used for everything, a real no-no when wind_get()
is called via the CALL_DIRECT method to improve performance. And
worse, my original code was dog slow as it re-generated the lists
every time they were used, and called malloc() for every entry
in every list individually.
2) Johan's rect handling scheme also suffered from dodgy malloc's
in wind_get(), but not to the same extent as my original code. It
was quicker as it re-used lists instead of regenerating every time,
and used a block allocation scheme for list storage. Much faster,
but the display bugs from it were pretty bad (I never managed to
chase them all).
The new rectangle list handler takes the best ideas from Johan's
code and incorporates them into a new scheme. Features of
the new scheme are:
- Memory is block allocated for each list via a single malloc().
- Lists are re-used.
- Lists are only re-generated when they have to be. The regeneration
is more intelligent than the old verion in Johan's code as it
uses a changed rectangle test as well as the original lower
window test to check which windows have invalid lists.
- The display glitches that dogged the last release are (I hope)
all gone now.
- No lists are generated (hence no memory is allocated) from within
wind_get() so there is no danger of wind_get() breaking memory
protection.
This has taken bloody ages to do...the rect list stuff is integral
to almost every aspect of the system!!!
[16/10/96]
o MiNT memory protection compatibility. Hurray for our side. The
wind_get() generate_rectlist() calls were what was killing XaAES
with memory protection turned on (it resulted in clients mallocing
memory that would be tied into OS level structures but owned by
client processes). Ta Da :) it works...now, gotta do some thinking
about intercepting VA_PROTOCOL messages and copying them into
global tagged memory buffers to stop VA_PROTOCOL from breaking
mem protection...
[17/10/96]
o Added new functions to c_window.c for move and close windows. Should
have done it ages ago really... XAwind_set(WF_CURRXYWH) now
just calls move_window() and XAwind_close() calls close_window().
[19/10/96]
o Added blit support to the move_window() function - top window only,
as handling the rect lists for non-top windows will need some
thought. It still makes things 'feel' much faster though as the
most common window move is the top one...
========================================================================
[20/10/96]
Beta 6 Released
========================================================================
[6/11/96]
o Fixed the 'no parameters' bug. A physical workstation is now correctly
opened to the current res if no -fvideo or -video switch is given.
[16/12/96]
o Menu's are now drawn as proper object trees - not quite debugged properly
yet - Lattice C's IDE still crashes rather big time, but Thing works
ok (you get the lines as seperators).
o Narrowed the window borders down 'coz everyone hated the old ones.
[25/2/97]
o Finally got my re-work of the menu's to work. Full object tree's
are now used correctly (including progdefs in menu's as used in
Lattice C's IDE).
o Added extra code check for already being in Supervisor mode in
objects.src/progdef.c - this allowed me to turn CALL_DIRECT on again
without Thing crashing.
========================================================================
Oops. Not been writing these down lately. Can't rightly remember what
I've done to the code...luckily (if you can call it that) no-one else
has sent me any mods in ages so I've not got to describe anyone elses
work.
========================================================================
[16/5/97]
o Anyway, added new functionality in kernal to call 'active_function'
with a given frequency if required (gonna use it for menus).
o Added extra debug op-code to the API, for use with DU Debug
(when I get round to adding the other end support).
[17/5/97]
o Menus using the new non-blocking scheme work now.
o Fix to make menu bar width match screen width.
o Speeded up menu tracking response.
[19/5/97]
o Added a kludge version of mouse rectangle tracking, not at all
good and I'll replace it ASAP.
o Fixed a memory leak in the AES messaging system.
[20/5/97]
o New version of moose.xdd that supports button release
events as well as clicks.
o Added support to evnt_button & evnt_multi() for button
release events.
o Tidied up the window work area calculation and display
(removes display glitches in most window apps).
o Info widget now matches rest of the look & feel of the windows.
o Desktop size now returns correctly, so Lattice C
will now work in 640*XXX modes (it always worked in higher
res modes).
o Tagged backgrounds of system dialogs & alert boxes as colour 0,
fill transparent + 3D attributes, making them system-dialog-background
coloured. Now you can actually see them on a mono system.
[21/5/97]
o New Salert() (/pipe/ALERT) handling code, prevents screen corruption
when a program exits and also lets you review error messages.
What you get now when a program crashes is a nice alert box (like
using the old MiNT ALERT.ACC program), and also a log window which
keeps a list of Salert() messages that you can scroll through. This
window is accessed via a new option on the XaAES system menu.
[22/5/97]
o It's now only possible to open one copy of the system alerts dialog
and the task manager (it wasn't sensible to allow more).
[12/6/97]
o Replaced the polled from the main kernal mouse rectangle check with a
multi-threaded checker instead.
================= beta 7+ on the way (Johan) =====================
[980714] (Well, that's how we write dates in Sweden ;-)
o I guess I should update this file once in a while, but the work
on this release has been very diverse.
Suffice it to say that lots of bugs have been fixed.
Since I was going through all the sources anyway to get a good
grip on things, I took the opportunity to clean them up.
The style is now mostly identical to what K&R used in their book.
===================== beta 7+ released ===========================