PROGRAM WINX 2.1 [9/9/1993] DESCPRITION WINX expands GEM of TOS version up to version 4.04 to some of the features which also are usable in MultiTOS. From users point of view this is (among other stuff) for example more windows, control elements for background windows and an expanded user interface (this relates to the usage of control elements). Additionally some bugs and deficiencies of the different GEM versions have been removed or repaired and expansions have been built in. A very developer friendly function is a mode to let WINX check for improper calls of the AES window library. Theoretically, ALL 'clean written' 'well-behaved' GEM programs should get along with these changes easily, but the practical side is slightly :-) different. Even TOS internal GEM Desktop had to be changed for some reasons. Please be sure, that if one of your programs will have several problems with WINX, it also has very good chances to have problems with MultiTOS, too. It would be a good idea to give a hint to the authors to test the program with WINX and to let them get into contact with ATARI to let them be informed how to legally get MultiTOS for testing purposes. WINX will integrate an expanded user interface into GEM if the TOS version is greater than 2.xx. This changes the way of mouse usage: Starting with this version of WINX, both mouse buttons can be used to select the window control elements. The right button will induce action, that is started after release of the button. If the left mouse botton is used, action is performed immediately and as long as the mouse button is not released again. You can recognize this state by a change of the mouse form: The arrow looses its shaft. A good example for this is the moving of a window. If you select the move bar of the window with the right mouse botton, then a frame is drawn which can be moved to a different position. Only after releasing the mouse button the window is redrawn at the new position. If you use the left mouse button to select the move bar, the window is redrawn constantly just where the mouse moves. The same behavoiur holds for the usage of the sizer, closer, full-size box and scroll bars. Action started by klicking the scroller arrows of into the scrollbar did not change. They already and always leaded to direct response of the program. Aditionally, a clicking on the scroller arrows with the right mouse key sets the scrollbar to the start (or end) of the scrollable area. If you click into the scrollarea, the scrollbar is directly put to this position. Another new feature is an addition for handling a click on the title bar of the window. Up to now, this could only top a back- ground window. Now it also is possible to backdrop windows, if a program can already handle the newly defined message. The CONTROL key is a modifier for actions which are performed by clicking window control elements. If CONTROL is pressed while the mouse click is performed, the normal meaning of the control elements is lifted away. Instead of this, the window is put into front or background. This is very useful if a window is only partly visible. If CONTROL is pressed while the right mouse button is released, the action that SHOULD be performed is ignored. For example if you started to move a window, but then again prefer to leave it at the previous place. Here is a list of the changes/expansions WINX does install into GEM. In detail '*' stands for new stuff in this version '[G..]' or '[L..] stands for a flag which indicates, that this feature can be activated or switched off (see part CONFIGURATION in this text) Unfortunately this part of manual might be very technical - it is despite of that a good idea to read it at least once, because you otherwise will miss some features of WINX. GEM-SCRENMGR: (the part of GEM, which besides other things deals with clicks on window elements) - [L1] use control elements for background windows * [G10] BackDrop function: By clicking on the title bar of the top window it is put to the backgorund (disabled), if the application supports the backdrop message or only one window is open. * [G9] if you hold the CONTROL key while performing a click on a window control element, the meaning of the control element is disabled. Instead of the normal state, a background window gets topped or a topped window is set into background (if BackDrop is turned ON) * Repeat for scroll arrows for TOS 1.00 * Fixed AES problems with WM_ARROWED messages (ARROWFIX patches) These are: TOS >= 1.04: Doubly sent message TOS 2.06/3.06: Doubly sent message, delayed message, wrong overlength TOS 4.01-4.04: Doubly sent message, delayed message ARROWFIX.ENG (part of ARROWFIX) tells you details. - optical response for usage of control elements [G4] Selection of scroll arrows [G5] Selection of scroll bars [G6] Selection of mover element [G7] Selection of sizer element * [G2] Send right mouse button clicks on window frames to the SCRENMGR (otherwise to the application) * [G3] Left mouse button click activates realtime functions (otherwise: G2=ON: right mouse button click, G2=OFF: double click with left mouse button) * [G11] It's now possible to move windows beyond the left border of the screen GEM-DESKTOP: - handling of events for background windows * Integration of backdrop * topping and untopping of windows does no loger change the selected files in directory windows of NEWDESK from TOS 2.x/3.x - TOS 2.x/3.x Desktop handles 8 instead of 7 windows, TOS 1.x only 4, as always. - If scrolling is performed in background windows, the desktop tries only to newly display as little as possible and copy as much as possible. Window management: - [G1] Increase number of available windows to 40 (instead of 8) - [L1] use control elements for backed windows - [L2] minimise number of window frame elements (up to now, a window with a sizer always had a horizontal and a vertical bar, which does not neccessarily makes sense) - [G8] wider frame for slider elements on the window frame (very much discussed option :-) similar to old MultiTOS versions) * Window Colors for TOS 1.xx can be set with WINCOLOR.CPX. This CPX is in the humble opinion of the author, anyway preferably to be used instead of the original WCOLOS.CPX, even for TOS 2.xx/3.xx. * Improved redraw for windows (new display of frame and contents) * Activating (and deactivating) does not change the WF_PREVXYWH- rectangle of the window any more. In this rectangle, the most recent change of position and size of the window is placed. * [L3] Opening and topping a window send WM_ONTOP, backdrop and closing WM_UNTOPPED * only one object tree is used to display the background * wind_set has been modified (optimized WF_SLIDE routine; WF_BOTTOM; WF_BEVENT) * wind_get has been modified (WF_NEWDESK; WF_BEVENT; WF_BOTTOM; WF_OWNER; WF_TOP; WF_COLOR; WF_DCOLOR) - modification of wind_calc for the changed way window frames are built * completyly new module for the calculation of rectangle lists, which can optimize calculation time and number of rectangles * [L4] Optimized redraw for topping windows: For topping and closig of a window, if possible only the parts of the newly topped window are newly displayed. Unfortunately this leads to incomplete redraws for some applications. * [L5] Optimized redraw for moving windows: If this switch is set, all visible parts of the window are copied, and redraw messages are only sent for the rest of the rectangles. Eventually redraw messages have to be merged, this can force redraw for copied areas. * [L6] Optimized redraw for sizing windows: If this switch is set, applications get only redraw messages for the newly visible parts of the window. * [L7] Optimized merging of redraw messages: With all curent TOS Versions, the number of redraw messages per window that was stored in the message buffer of the application was limited to one. If a second message had to be stored, the redraw rectangle of the first message was replaced with a rectangle, that contained a rectangle which held the retangles of the old and the new message. MultiTOS does NOT merge these messages any more. Both solutions have limitations. WINX implements the usage of a compromise. WINX only merges two redraw messages if the resulting rectangle is not bigger than 25% of the sum of both single rectangles. Furthermore the applications can store two redraw messages per window now. * [L9] There are two ways, how the scroll arrows can be displayed in the frame of a window now: At top/bottom leftmost/rightmost position of the scrollbar or all just besides the other in the rightmost downmost edge of the window frame. * It now is possible to only use wind_update if no other program already owns control. Additionally wind_update is checked for underflow. - all other routines have been modified to be able to handle the increased number of windows * [G11] 3D window frame (starting with GEM 3.31) Various: - enlargement of the message buffer of an application from 8 to 40 standard messages (this can highly help avoiding deadlocks of AES) - The wait time for a mouse click has been set to exactly be the same as the setting of the doubleclick time. In all current versions of GEM, there is no consistant handling of the duration beetween a mouseclick of the user and the procession of it by the SCRENMGR. Up to now, the duration is dependant from the question, if minimum one application or accessory waits for a doubleclick event or not. The usage of the doubleclick as a timebase is necessary, because otherwise, in case of a click on a title element of a backed window, moving and topping could not always be distinguished * TIMER/BUTTON problem for evnt_multi() has been fixed, this means you only get the button event, if the application owns the mouse * support for WF_BEVENT flags during the mapping of button events to applications * TOS 1.xx: Now the dynamically requested structures for administration of accesories are explicitly cleared (as in newer TOS versions). This avoids problems with AUTO folder programs, which might have used these parts of memory already in the boot phase (leaving garbage there). * [G12] Fill patterns for GEM objects now always will be drawn relative to the left topmost edge of the object (instead of being relative to 0/0 of the current screen). * Now also for TOS 1.00 and 1.02, the name of the active application is reset every time the internal Desktop is started. * [L8] If this switch is switched ON, WINX displays an Alert every time where an application tries to call OS window functions with wrong parameters. * [G13] If a program B is started from the currently running program A, now the name, GEM recognizes as the currently running appliction, is set to be B. At the point of termination of B, the name is reset to A. This makes appl_find() work correctly also in the above case. (Up to now, A has been found instead of B). * wind_new() now sets the ownership of mouseclicks to the main application (instead of setting it to the SCRENMGR). This avoids the loss of the first mouse click on a desktop object after an application has been terminated. * A call of wind_unpdate( BEG_UPDATE) has been inserted into the wind_new() call. wind_new() is used by the desktop to clear up the screen after termination of applications. The insertion of wind_update() helps to avoid, that accesories are affected by this at an unfavorable time. * A bug in the mechanism of the task dispatch in GEM 3.xx has been fixed. This should suppress (possible harmful) task switching during the display of alerts generated from the critical error handler. INSTALLATION To do all these changes, WINX must deeply take control of the working of AES and GEM. The necessary changes can be achived with three methods: a) Patching a copy of GEM in RAM You install a copy of GEM in the machines RAM at BOOT time which is modified by WINX before GEM is started. This can be achieved with one of the following programs. Name; Description; where to get; author; RAM used; uses cookie ROMRAM TOS speeder for TT030; Mailbox Maus HH2 (Freeware); Alexander Herzlinger; >256 KB; PTOS VRAM030 Virtual memory management for TT030 and FALCON030; OverScan, D-12277 Berlin; Alexander Herzlinger; >256 KB; VRAM ROMSPEED TOS speeder for TT030 (Part of OUTSIDE virtual memory mangement for TT030); MAXON Verlag; D-65734 Eschborn; Uwe Seimet; >256 KB; USRS GEMRAM Install GEM in RAM (ST,TT,FALCON); Mailbox Maus MTK (Freeware); Martin Osieka; 80-200 KB; MOGR b) Patching a TOS file You can use WINX to modify your ROM contents to be feasible to be burned into EPROMs and reinstall a changed TOS version including the WINX patches in your machine. This only works with ORIGINAL unmodified (c) ATARI ROMs and is only allowed for your personal use - you may not distribute ROM Image files nowhere, neither modified nor unmodified. To get ready to burn files, just start WINX in the desktop or load in an original TOS Image file. After WINX changed the contents, you can save it again for burning it. c) Patching single GEM routines If you have a machine with Original TOS 1.00, 1.02 or 1.04, you can use WINX without copying GEM to RAM with GEMRAM. Even here WINX.PRG must be in the AUTO folder. At the time GEM is started, WINX intercepts the GEM startup and only installs some (ok, these are some more) routines in RAM. This is not possible with later TOS releases due to a change (a very positive change) in AES and Desktops subroutine calling mechanism. The modified GEM-routines use only about 16 kByte of RAM. In addition to the amount of memory for the RAM copy of GEM or the RAM copy of GEM routines, WINX needs about 20 kByte for the additional GEM-window structures. WINX has been modified to work with the following official GEM versions: GEM(AES) TOS 1.20 GER 1.00/1.02 1.40 GER 1.04/1.06/1.62 3.00 GER 3.01 3.10 GER 2.05/3.05 3.20 GER/UK 2.06/3.06 3.31 4.01 3.40 4.02-4.04 WINX identifies GEM by the length of the GEM-TEXT-Segment. GEM Versions of foreign/unknown countries are accepted if the length is identical. CONFIGURATION Most of the changes WINX can do with GEM, can be turned on and off with 'switches'. The setting of those switches can be changed by changing the configuration file WINX.INF, which HAS to be in the AUTO folder also. This is an ASCII file which can be easily changed using a text editor. Beginning with WINX version 2.1 global and local switches can be distinguished. Global switches have effect for all applications, whereas local switches can be set individually for each applications. All further description can be seen from WINX.INF. For the near future, all these settings should be able to be performed with a CPX-module, but the enlightenig spark how this can be done in a really user-friedly way did still not come across my mind. The repeat times of closer, full-size box and scroll arrows can be set via WINX.CPX, too. TERMINATE AND KEEP RESIDENT WINX is a TKR-program and made of a TKR-loader, in which the TKR-module 'WINX.TKR' has been inserted. The concept of TKR is that programs, which need resident memory (TKR-modules), get this amount of memory given from another program (the TKR-loader). Following this concept, the TKR-module can be concentrated to its real work and only uses a minimum of memory. The used TKR-Loader can contain an unlimited amount of TKR-modules and other programs. If you press the SHIFT-key while the TKR-Laoder is started, the loader asks for each TKR module if it should be started. The TKR- loader displays the amount of memory that will be kept resident after end of installation. KNOWN PROBLEMS - some older pprograms use the window handle as an index for own internal tables; this of course is really bad programming style and can cause those programs to crash while using many open windows. - Some programs limit their own acess to windows by a fixed number without having a good reason (for example the original desktop). - WINX Versions before 2.0 crashed, if a programme die used the window handle -1 (NOWINDOW). This is fixed now. - TOS14FIX only can be installed after WINX. - TEMPLMON Versions < 2.0 must been started before WINX. - Many programs cannot cope with the correct redraw of background windows, mostly the scrolling in partly overlaped windows quite often makes problems. - MultiGEM will only allow 10 windows per application. - WINX 2.1 will only be be supported by MultiGEM 2.00 (year of copyright 1993!) (also see Update hints in MultiGEM Manual) - since MultiGEM uses its own mapping of window handles, some new wind_get() modes return wrong values: WF_OWNER, WF_BOTTOM, WF_TOP (for owner and belowwin) - BackDrop only works completely, if it is supported by the used programs. - Some graphic cards (i.e. their VDI-Driver) obviously have problems with userdefined patterns. In this case, the switch for defining relatively to which point a fill patterns should be displayed, should be set to 0/0 and the maker of the card and driver should be asked to change his software. - If the switch for setting the fill pattern drawing to be relative to the object is turned off, objects of windows are always displayed completely. In addition to this, it might be neccasary to switch off the redraw optimisation (for example for XCONTROL) - If a program opened very many windows (>20) there might be a problem if the optimized merging of redraw messages is active [L7] and the screen has to be displayed completely new. - At the time exiting an application, GEM closes the windows of accesories automatically. In some (seldom) cases, accessories are not getting the information about the termination in time, so they try to access windows, that already do not exist any more. If WINX is set to report wrong window library calls, an error message is displayed. The problem behind this is conceptual in GEM. To avoid the display of those error messages switch of the error report feature of WINX. IMPORTANT NOTES FOR PROGRAMMERS (see file WINXPROG.ENG) VEKTORS, COOKIES, ETC. In case c) under installation the LineF-Vektor is changed (XBRA-ID is AESF). WINX (and WINXCOOK, the support program for a WINX modified ROM) generates the cookie WINX starting with version 2.1 of WINX. The cookie holds a pointer to a function that can return version specific information about WINX. If the WINX cookie is installed, the GEMDOS trap is intercepted on start of GEM (XBRA ID is WINX) GEMRAM tries to find out the language for its messages looking at the OSHEADER, after this, the _AKP cookie is checked (if existing). On start from Desktop, the environment variable AE_LANG is additionally checked. If the returned language is different from german, english messages are used. The display format for the date is derived from the _IDT cookie and if this cookie does not exist, from the language setting. COPYRIGHT Author: (\/) Martin Osieka Adress: Martin Osieka, Erbacherstr. 2, D-64283 Darmstadt, Bundesrepublik Deutschland Internet: Martin_Osieka@mtk.maus.de If you write letters and would like to get an answer, please do not forget to submit a self-adressed envelope with enough international answer coupons or german stamps. WINX is freeware and may be distributed in ANY form as long as program and all texts are distributed in a complete, unmodified form. The files are: WINX.PRG, WINX.CPX patch program und configuration CPX module WINXCOOK.PRG help program for WINX modified ROM WINX.GER, WINXPROG.GER documentation (german) WINX.ENG, WINXPROG.ENG documentation (english) WINX.UPL upload-description (german) WARNING This program worked stable and normal behaved for some time in my own programming environment. Besides all tries to avoid bugs in development and testing you have to be aware, that this is based on the analysis of internal GEM Code. GEM has parts, but I wouldn't claim that, what I saw 'structured'. For this reason it easily may happen, that someone misses a point somewhere. And this is in fact VERY easy. For this reason, I include the following message: ********************************************************************* * THIS PROGRAM COMES WITH ABSOLUTELY NO WARRANTY AGAINST MISUSE, * * DATA LOSS, BRAIN DAMAGE, EARTHQUAKE AND WHATEVER MAY HAPPEN * * BEFORE/AFTER OR WHILE USING IT. IT IS ABSOLUTELY *YOUR OWN* RISK. * ********************************************************************* This cannot be emphazised enough, if you indeed use this program together with dirty programming trick software. MANY THANKS TO Normen B. Kowalewski for translation of main parts of this document SEE ALSO Documentation of GEMRAM, ARROWFIX and WINCOLOR