------------------------------------------------ Angie 1.4a (29.10.93) © Franz Schwarz - Giftware ------------------------------------------------ ANother Great Intuition Enhancer - Commodity Written & © 1993 by Franz Schwarz Mühlenstraße 2 D-78591 Durchhausen, Germany Uucp: Franz_Schwarz@mil.ka.sub.org Fido: 2:2476/506.18 GUI created with assistance of GadToolsBox 37.300 Since Angie is Giftware you are encouraged to send the author a present, money, a postcard, etc. if you use it. table of contents ----------------- preface ATTN: lazy boys and girls - WHAT EVERYONE SHOULD KNOW concepts, program design the installation procedure the interacive user interface & the arguments passed on startup how to define a hotkey The various hotkey actions programming info, implementation details program history final notes contacting the author credits ** Angie may not be used by persons who support or approve violence ** ** against other people due to their race, descent, sex or religion ** preface ------- Angie is a nice name as well as a terrific song by the Rolling Stones. From now on, this name is to be remembered in the Amiga community as well: Angie, i.e. this software's name is an acronym for ANother Great Intuition Enhancer ATTN: lazy boys and girls - WHAT EVERYONE SHOULD KNOW ----------------------------------------------------- Note for users uprading from versions older than 1.4: There exists A NEW 'Custom' BASE ACTION that can be used to EXECUTE DOS COMMANDS and to INSERT INPUT EVENTS into the input stream. The STRING GADGETS of Angie have SPECIAL EDITING FEATURES: 'ESC' cancels the editing operation, and for the 'Edit Hotkeys' & 'Action' gadgets, the CURSOR UP/DOWN KEYS have a special functionality. If you start Angie from shell, all arguments that have values assigned need to be surrounded by quotes, e.g. "CX_PRIORITY=127" instead of just CX_PRIORITY=127 concepts, program design ------------------------ In fact, the Angie commodity enhances Amiga's unique Intuition graphical user interface in many ways. But what is even better: It is thoroughly costumizable by the user - i.e. YOU, thus you have the ability to adapt it to your personal taste and likes in almost any way whatsoever. This is accomplished by providing you with complete user control of almost all of AngieGUI's significant characteristics from within a nitfy graphical user interface (and save them for later retrieval from there, by the way) Amongst Angie's capabilities there are automatic window hunting (i.e. active screen and active window to front, adjusting the display of over-sized autoscroll screens) as provided by Jörg Bublath's HuntWindow, automatic raising of the active window's task, retrieval of the last active window & the last active screen on hotkey, remembering & retrieval the last active window of all screens (similar to Tron's TWA), and a hitherto unique 'Key screen activation' feature that activates the last window remembered (or the window under the mouse, or the screen's frontmost window if none is remembered) *if, and only if* the active window is not placed in one of the at least partially visible screens and a key downstroke event is rushing in from the input device. This feature has prooved *very, very* ergonomic and nifty (in deed, it was actually the motivation for me to embark on this project;-)) Moreover, Angie can automatically raise the priority of the task that owns the currently active window (and restore it when the window becomes inactive, of course) However, the best is that Angie (don't you forget the triad: the nice name, the terrific Rolling Stones song and the neat commodity we are talking about...) offers you about sixty actions that may be triggered by any number of arbitrary commodites input descriptions! In conjunction with the possible 'Window To Front' attribute that may be bound to any hotkey and that affects all hotkey operations with windows involved (except 'Hunt', 'ToFront' & 'ToBack') of course) and in combination with the 'Hunt on wintofront hotkeys' you get roughly one hundred and thirty different actions you may map to any input event processable by the version of commodities.library you have installed in your system. These actions include execution of arbitrary dos command lines and insertion of arbitrary input events with arbitrary delay times between inserting two events. Angie can take advantage of several V39 Intuition / GadTools and V38 Commodities features but operates well with V37 Intuition/ GadTools/ Commodities, too. the installation procedure -------------------------- What installation procedure? - Just copy Angie and its icon to your SYS:WBStartup directory. the interacive user interface & the arguments passed on startup --------------------------------------------------------------- The GUI conforms to Commodore's User Interface Style Guide, thus it should be mostly intuitive and self-explanatory to the User who is familar with Commodore's commodites and preferences editors supplied with the operating system. The usual commodities arguments 'CX_PRIORITY, CX_POPUP & CX_POPKEY are supported. Notez-bien: If you start Angie from shell, all arguments that have values assigned need to be surrounded by quotes, e.g. "CX_PRIORITY=127" instead of just CX_PRIORITY=127 Following now is a brief description of the GUI elements and Angie's arguments: The checkbox toggle gadgets: 'Hunt always' - decides on whether or not Angie shall automatically hunt (i.e. bring the active window & the active screen to front & adapt the active screen's position so that as much of the active window as possible is visible. This screen position adapting is performed in a way that minimum screen move takes plaxe. In case the window is too large to fit in the actual display, the screen is moved so that the left/top edge of the window is displayed in the left/top edge of the visible portion of the screen - except for backdrop windows, where it is only ensured that the screen's displayed portion is completely filled with the screen's data (i.e. if the screen is dragged down, it will reposition, otherwise not) whenever the active window changes or it is repositioned or redimensioned. This action is deferred until the left mouse button and its keyboard equivalent (lalt amiga) are released. The argument for this toggle is 'HUNTMODEALWAYS', it defaults to 'YES' 'Hunt on wintofront hotkeys' - if enabled, Angie performs an automatic hunt (see above) operation whenever it issues a hotkey-bound Window_To_Front. The corresponding argument is 'HUNTMODEWFRONT' and defaults to 'YES' 'Hunt: set default public screen' - toggles the automatic declaration of the active window's screen as the system's default public screen whenever a hunt (see above) operation is done. If the active screen is no public screen, the Workbench screen is set as default public screen. The argument for this toggle is 'HUNTMODESETDEFPUBSCR' and defaults to 'NO' 'Key screen activation' - (de)activates a nifty, hitherto unique feature that activates the last active window of the screen under the mouse remembered (or the window under the mouse, or the screen's frontmost window if none is remembered) *if, and only if* the active window is not placed in one of the at least partially visible screens and a key downstroke event rushes in from the input.device. This feature has prooved *very, very* ergonomic and nifty, especially if immediate activation after screen shuffling is not appropriate (indeed, this feature was actually the motivation for me to embark on this project;-)) 'KEYACTIVATE' is the argument for this, and defaults to 'YES' 'Raise Active WinTask's Pri' - determines whether Angie should always raise the priority of the task, the active window is associated with, by one, and restore the old priority on deactivation if the priority hasn't been changed by someone else in the meantime. The correct argument is 'RAISEWINTASKPRI', default is 'YES' 'Shuffle backdrop windows' - decides whether backdrop windows should be considered when performing hotkey-bound window-shuffling or not. The default is 'NO', the argument is named 'SHUFFLEBACKDROP'. 'Pop GUI on startup' - if you want Angie's GUI window to pop open when Angie is launched, set this toggle, otherwise unset it. The appertaining argument is 'CX_POPUP' and defaults to 'YES'. The sliders have the following significance: 'Stable time' - this one is used to adjust the time in milliseconds, the snoop task expects the active window, the active screen, the active window's size and its dimensions to remain unchanged until it signals a 'change' operation to the main task. The valid range is -1 upto 1000, where -1 is a magic value that signifies that whenever the snoop task detects a change, it immediately signals the main task. All positive values including 0 require the snapshot data to remain unchanged for at least two snoops and a minimum of 'Stable time' milliseconds. The argument for this characteristic is called 'STABLETIME' and defaults to 20. 'Snoop delay' - this is the delay time in milliseconds, the SnoopTask should wait before two snoops. The valid range is 10..1000. Note that the accuracy of this delay is bound to the frequency of the vertical blanking interrupt, which is usually 50Hz PAL, 60Hz NTSC, 70Hz EURO36/EURO72/SUPER72, that means, you'll never get more than 50 snoops per second for PAL, never more than 60 snoops per second for NTSC and never more thant 70 snoops per second for EURO36/EURO72/SUPER72. Note that allocating a CIA timer for this job to gain accuracy would be IMHO a waste of system resources. Huge values for this characteristic yearn for a '-1' 'Stable time' setting. The argument name for this value is 'SNOOPDELAY' and defaults to 30. 'Screen steps' - use this slider to set the quantity a screen should be moved with the 'MoveScrXXX' hotkey actions. The quantity is provided as the 'Screen steps'-th part of the display clip of the active screen. The range for this quantity is 1..50 This argument defaults to '5', its name is 'SCRMOVESTEPS' 'Window steps' - this is the same as above except that this value is applied for window moving and dimensioning via the 'MoveXXX', 'ExpandXXX' and 'ShrinkXXX' hotkey actions. The range is 1..50, too. The corresponding argument is named 'WINMOVESTEPS' and defaults to 5 'CX priority' - use this to set Angie's commodity broker's priority. Note well that this action takes effect immediately - the effort to achieve this in a documented way was quite high, by the way. The argument for this is called 'CX_PRIORITY' and defaults to 0 There's one separate text entry gadget, named 'Window shuffle pattern' where you can enter the pattern to be applied to windows' names when doing a window shuffle ('ActivateNext' / 'ActivatePrev') hotkey action. Windows whose titles don't match to the pattern are skipped. The argument name for this setting is 'SHUFFLEPAT' and defaults to '#?' (which matches all names, incl. an empty name) The other gadgets form a system to maintain the action hotkey list of Angie: Use the 'ADD' gadget to add new hotkeys to the list, the 'DEL' gadget to delete hotkeys from the list, the 'UP' gadget to move an entry up in the list, the 'DONW' gadget to move an entry down in the list, use the listview to browse through the hotkey list and to select the active hotkey, the change operations will affect. The change operations consist of selecting the 'Action' gadget, where you can select the desired base action for the hotkey. This text entry gadget has some special editing functions: You can use the cursor up/down keys to browse through the different base actions. If the contents of the gadget do not reflect an exact, case-insensitive match with a valid base action type, the 'Custom' type is considered to be active. If not preceeded by a '#' or '~' character, the contents of the gadget signify a dos command line that shall be executed when the hotkey is triggered. If the text's first character consists either of '#' or '~', the following text is considered as an input events description sequence that shall be inserted into the system's input strem when the hotkey is triggered. You can select the desired base action by selecting the respective entry in the 'Edit·Hotkey·Type', too, because shuffling through approx. sixty entries might be irksome, IMHO. Another change operation is the selection of the 'Attrs' gadget. You can assign several attributes to the hotkey entry with this gadget: If the 'WinFront' attribute is enabled, the hotkey action will cause an automatic WindowToFront() of the processed window, if a window is affected by the hotkey action, and the base action is not 'ToBack'. This attribute is always considered to be on for the 'Hunt', 'ToFront' and 'CX_POPKEY' base actions. The second attribute is 'Repeatbl' and means that matching rawkey events with the 'repeat' qualifier set shall be normally processed rather than just beeing filtered, which is the default. This attribute is always considered to be on for the 'Filter' and 'NoKeyActivate' base actions. The last attribute is the 'NoScrAct' attribute and inhibits the hotkey from triggering an automatic 'Key screen activation' action (see above). This attribute is enforced for the 'NoKeyActivate' base action. It is extremely useful for simple screen shuffling action hotkeys where otherwise the next shuffle event would cause Angie's Hunt (see above) driver to mix up screens. For the 'HuntWindow' base action it is recommended to set this flag in all predictable cases, too. Apart from that, it may be useful to set this flag e.g. for the 'LastActive' and 'LastActiveScr' base actions. Note that the 'Attrs' gadget. does not always reflect the actual attributes, since Angie's enforced settings (see above) are not taken into account after cycling the Attrs gadget. However, they are always correctly displayed in the 'Edit·Hotkey·Type->Attributes' submenu, which can be used to set the attributes, too. The most important change operation however is the listview's string gadget where you can modify the commodities input description for the hotkey. If you enter an invalid input description, the former description is reused instead of the one you entered. Note that you can leave the string gadget by pressing cursor up/down, too: The cursor up/down keys are equivalent to pressing return within the string gadget and right afterwards pressing cursor up/down. The Project menu is intuitive: -Save·Settings saves the current settings into the PROGDIR:Angie icon -About brings up a requester with information about Angie. Note that while the About requester is displayed, Angie is in inactive state. -Hide closes the GUI window -Quit causes Angie to shut completely down The underscored charcter of the gadget text signifies the key shortcut for selecting the respective gadget, additionally the cursor up / down keys are used to scroll through the hotkeys in the listview, the DEL key is used to delete the current entry in the listview, the ESCape key or the close gadget is used to close Angie's GUI window, and the 'Z' key or the Zoom gadget is used to (un-)iconify the GUI window. There exists one common non-standard editing feature of all of Angie's text entry gadgets: Pressing 'ESC' leaves the gadget by discarding all changes made to it, i.e. a sort of 'CANCEL' operation. how to define a hotkey ---------------------- The following text is courtesy Stefan Becker and describes the structure of the currently defined commodities input descriptions: How to define a Hot Key ************************ This chapter describes how to define a Hot Key as an Input Description String, which is then parsed by Commodities. Each time a Hot Key is activated Commodities generates an event which is used by ToolManager to activate Exec objects or to toggle Dock objects. A description string has the following syntax: [] {[-][]} [-][upstroke] [] All keywords are case insensitive. `class' describes the InputEvent class. This parameter is optional and if it is missing the default `rawkey' is used. See InputEvent classes. Qualifiers are "signals" that must be set or cleared by the time the Hot Key is activated; otherwise no event will be generated. For each qualifier that must be set you supply its keyword. All other qualifiers are expected to be cleared by default. If you want to ignore a qualifier, just set a `-' before its keyword. See Qualifiers. Normally a Hot Key event is generated when a key is pressed. If the event should be generated when the key is released, supply the keyword `upstroke'. When both press and release of the key should generate an event, use `-upstroke'. The key code is depending on the InputEvent class. See Key codes. Note: Choose your hot keys *carefully*, because Commodities has a high priority in the InputEvent handler chain (i.e. will override existing definitions). InputEvent classes =================== Commodities supports most of the InputEvent classes that are generated by the input.device. This section describes those classes that are most useful for ToolManager Hot Keys. `rawkey' This is the default class and covers all keyboard events. For example `rawkey a' or `a' creates an event every time when the key "a" is pressed. You must specify a key code for this class. See rawkey key codes. `rawmouse' This class describes all mouse button events. You must specify a key code for this class. See rawmouse key codes. `diskinserted' Events of this class are generated when a disk is inserted in a drive. This class has no key codes. `diskremoved' Events of this class are generated when a disk is removed from a drive. This class has no key codes. Qualifiers =========== Some keyword synonyms were added to Commodities V38. These are marked with an `*'. `lshift', `left_shift' * Left shift key. `rshift', `right_shift' * Right shift key. `shift' Either shift key. `capslock', `caps_lock' * Caps lock key. `caps' Either shift key or caps lock key. `control', `ctrl' * Control key. `lalt', `left_alt' * Left alt key. `ralt', `right_alt' * Right alt key. `alt' Either alt key. `lcommand', `lamiga' *, `left_amiga' *, `left_command' * Left Amiga/Command key. `rcommand', `ramiga' *, `right_amiga' *, `right_command' * Right Amiga/Command key. `numericpad', `numpad' *, `num_pad' *, `numeric_pad' * This keyword *must* be used for any key on the numeric pad. `leftbutton', `lbutton' *, `left_button' * Left mouse button. See note below. `midbutton', `mbutton' *, `middlebutton' *, `middle_button' * Middle mouse button. See note below. `rbutton', `rightbutton' *, `right_button' * Right mouse button. See note below. `repeat' This qualifier is set when the keyboard repeat is active. Only useful for InputEvent class `rawkey'. Note: Commodities V37 has a bug which prevents the use of `leftbutton', `midbutton' and `rbutton' as qualifiers. This bug is fixed in V38. Key codes ========== Each InputEvent class has its own key codes: Key codes for InputEvent class `rawkey' ---------------------------------------- Some keywords and synonyms were added to Commodities V38. These are marked with an `*'. `a'-`z', `0'-`9', ... ASCII characters. `f1', `f2', ..., `f10', `f11' *, `f12' * Function keys. `up', `cursor_up' *, `down', `cursor_down' * `left', `cursor_left' *, `right', `cursor_right' * Cursor keys. `esc', `escape' *, `backspace', `del', `help' `tab', `comma', `return', `space', `spacebar' * Special keys. `enter', `insert' *, `delete' * `page_up' *, `page_down' *, `home' *, `end' * Numeric Pad keys. Each of these key codes *must* be used with the `numericpad' qualifier keyword! Key codes for InputEvent class `rawmouse' ------------------------------------------ These keywords were added to Commodities V38. They are not available in V37. `mouse_leftpress' Press left mouse button. `mouse_middlepress' Press middle mouse button. `mouse_rightpress' Press right mouse button. Note: To use one of these key codes, you must also set the corresponding qualifier keyword, e.g. rawmouse leftbutton mouse_leftpress Examples for Hot Keys ====================== `ralt t' Hold right Alt key and press "t" `ralt lalt t' Hold left *and* right Alt key and press "t" `alt t' Hold either Alt key and press "t" `rcommand f2' Hold right Amiga key and press the second function key `numericpad enter' Press the Enter key on the numeric pad `rawmouse midbutton leftbutton mouse_leftpress' Hold middle mouse button and press the the left mouse button `diskinserted' Insert a disk in any drive. ************ end of Stefan Becker's text ***************************** The various hotkey actions -------------------------- Now, let's discuss the various hotkey actions: CX_POPKEY: Pop Angie's GUI window open, activate and hunt it if it is already open. HuntWindow: Perform a hunt action (see above) right now. Activate: Activate the window under the mouse ActivateNext: Shuffle forward through the current active screen's window list ActivatePrev: Shuffle backward through the current active screen's window list ActivateBackdrop: Activate the active screen's first backdrop window ActivateFrontScr: Activate the first window on the frontmost screen. LastActive: Activate the window that was active right before the current active window if it still exists. LastActiveScreen: Activate the last active window of the last active screen, it it still exists. If it doesn't exist anymore, but the screen on which it was open still exists, then activate the first (frontmost) window on that screen. ToFront: Pops the currently active window to front ToBack: Moves the currently active window to the back AdaptWindow: This is something like an 'inverted hunt' action: the active window is (if necessary) moved and shrunk in a way that it fits into the currently displayed portion of its screen. CenterWindow: The active window is centered within the currently displayed portion of its screen. Zip: The active window is zipped (equivalent to selecting the Zoom gadget) Close: A selection of the active window's close gadget is emulated Max: The active window is moved and redimensioned to exactly fill the screen's visible portion. MaxWidth: The same as for above, but only horizontally, and if at least a part of the window would be visible in the screens display portion with consideration to the vertical window position & dimension. MaxHeight: Like MaxWidth, but now vertically. MinWin: The active window is shrunk to its minimum dimensions and moved into the lower right edge of the screen's visible portion MoveLeft / MoveRight / MoveUp / MoveDown: Move the active window in the respective direction, the move quantity is derived from the 'Window steps' setting. UpperLeft / LowerLeft / UpperRight / LowerRight: Place the active window in the respective edge of the screen's visible portion ExpandWidth / ExpandHeight / ShrinkWidth / ShrinkHeight: Expand / shrink the active window's width / height. The quantity to expand /shrink is derived from the 'Window steps' setting. DoubleWidth / DoubleHeight / HalveWidth / HalveHeight: Double / halve the active window's width / height ActivateNextScreen / ActivatePrevScreen / ActivateWBenchScreen / ActivateDefPubScreen: Shuffles the screen list forward / backward, resp. pops the Workbench screen / default public screen to the front and activates the last active window of the new front screen or the frontmost window of the screen instead. If the 'Hunt: set default public screen' toggle is set and either the 'Hunt always' toggle is set, or both, the 'Hunt on wintofront hotkeys' toggle is set and the 'window to front' attribute is set for the hotkey, it will also make the new front screen the default public screen even if no windows are open on it. NextScreen / PrevScreen / WBenchScreen / DefPubScreen: the same as for the corresponding ActivateXXXXScreen entries except that no window activation and no default public screen definition magic takes place. ScrollScrLeft / ScrollScrRight / ScrollScrUp / ScrollScrDown: scrolls the active screen in the respective direction. the scroll quantity is derived from the 'Screen steps' setting. UpperLeftScr / LowerLeftScr / UpperRightScr / LowerRightScr / ShowScrCenter: makes the respective portion of the active screen visible in its display clip. ScreenTop: aligns the top edge of the active screen with the top edge of its display clip SetDefPubScreen: makes the active screen the default public screen. If the frontmost screen is a screen with no windows open, and the active screen is completely invisible, the frontmost screen is used instead for this operation. If the screen is not a public screen, the Workbench screen is set as the new default public screen. Filter: This is a real nop operation: It does nothing at all. Thus, the only job of this action is to filter the respecitve input sequences out of the input stream. NoKeyActivate: This action only works if your system runs commodities.library V38 or better - for V37 commodities.library it does nothing at all. All input events matching this action's input description are excluded from triggering 'Key screen activation' (see above). This is useful to keep other commodities / input handlers that shuffle screens (e.g. KCommodity 'lcommand -shift -control -alt -repeat [m|n]') to fool Angie's snoop code in some cases when screens are consecutively shuffled. ** Starting from Angie 1.4 (28.10.93), Angie has another mighty base ** ** action for executing Dos commands and inserting input events: ** Custom: This action is very versatile: If the first character is either '#' or '~', the following contents of the 'Action' gadget are considered to be INPUT DESCRIPTION DATA. In case of the '#' introducer, a positive (incl. 0) number may be provided right after the '#' introducer. This number ends either with the last digit or with one of the ' ' / '~' delimitters. It is normalized into the range 0..999 and signifies the time in milliseconds to delay after inserting each of the generated input events. In case of the '#' introducer, this delay defaults to 50 milliseconds. For the '~' introducer, this delay is always considered 0. The input description data consist of ordinary plain ASCII text that may furthermore contain the following ESCape codes: \n - linefeed (inserted as carriage return) \r - carriage return \0 - nul \t - horizontal tab \f - formfeed \xff - ASCII code 0xff (f represents an arbitrary hex nibble) \' - apostroph \" - quotation mark \< - left angled bracket '<' \\ - backslash '\' Moreover, separate input events may be specified according to Commodities' ParseIX() syntax within angled brackets. The line 'Hello!\x06\t\5*x\<12\n'', for example, represents valid input description data. Plain Linefeeds (0x0a) are automatically converted into carriage returns. In addition to this, carriage returns are inserted as key presses of the plain, simple carriage return rawkey unless the system default keymap doesn't map that rawkey to carriage return. In case the first character of the 'Action' data contents is none of the input description sequence introducers ('~', '#'), the whole text represents a DOS COMMAND LINE that is executed asynchroneously whenever this custom hotkey is triggered. The priority of the launched task will be the same as the priority, Angie was started with - the same goes for the stack size, current directory and the dos command search path. Input and Output are set to an interactive console window with the WAIT/AUTO/CLOSE attributes, its position and alternative ('zoom') position are optimized for the currently displayed portion of the default public screen. The console will open on the default public screen at the very moment when the first input/output operation takes place. If you set the 'WinFront' attribute for the hotkey, the default public screen pops to front immediately when triggering the hotkey. Well, that's it - all the actions are described now;-) programming info, implementation details ---------------------------------------- Angie is completely written in Amiga-Oberon, a superset of a powerfull object-oriented language by Nicolaus Wirth, that offeres all the flexibilty and excellent code generation that is needed for Amiga system and application programming. I tried hard to make Angie conforming with the User Interface Style Guide, and to make it really free of bugs. I can tell you that despite having used Oberon runtime checking code (which is disabled in this official release), Enforcer and Mungwall, this release has been prooved free of any bugs (however, don't blame me if you find one though: you know Murphy rules...;-^) Especially, I always tried to ensure that all accesses to system data are protected by the respecitve official CBM protocols. Since within interrupts there is no such protocol for Intuition data structures available, I placed the snooping code for window hunting, raising of the active window task's priority, remembering of the last window and all the last windows of a screen, in a child task rather than within interrupt code. If you find any bugs or you have any suggestions for improving Angie or extending its functionality, or if you just want its source code, you are encouraged to contact the author via electronic mail (preferred) or snail mail. If you own a 68000 you may wonder why Angie's snoop task uses quite more CPU time than you thought it uses (Note however that only Xoper2.4 gives you reliable information. Former versions of Xoper display much too much CPU time usage of tasks that are both, frequently switched and don't hold the CPU for a long time). Well, the solution is as follows: I decided to make Angie as system-friendly as possible. Angie has to snoop not only the IntuitionBase->ActiveWindow, but also elements like TopEdge/LeftEdge/Width/Height/WScreen of the ActiveWindow itself. In a consistent way, this is only possible within tasks, not interrupts, in conjunction with the (Un)LockIBase() protocol. However, task switching, the timer request for delaying, and especially the (Un)LockIBase() protocol produce an enormous overhead of CPU usage: I measured (on a 68030, OS3.0) that the snoop code itself only consumes 15% (fifteen) percent of the snoop task's total CPU usage (total CPU usage is less than 1% @ 30 ms snoopdelay on 68030, 25Mhz, OS3.0). With the snoop code removed, only the timer IO and (Un)LockIBase() stub left, the CPU usage of the snoop task was still at 85% of the original CPU usage. With (Un)LockIBase() removed, the snoop task's CPU usage was at about 45% of the original CPU usage. program history --------------- v1.0 20.10.93 [fSchwarz] v1.1 22.10.93 [fSchwarz] improved setDefPubScreen action fixed ActivateXXXXScreen, fixed Menu Attrs selection v1.2 23.10.93 [fSchwarz] doesn't send any closeWindow event on Close action when window is blocked by requesters. v1.3 24.10.93 [fSchwarz] added Edithook for hotkey definition gadget v1.4a 29.10.93 [fSchwarz] major code cleanup, now supports dos command and inputevent insertion type final notes ----------- Known Bugs: Currently, no known bugs exist. However, due to the extent of this project, it is possible that a few bugs are in the code that haven't turned out yet. Angie is Giftware. In other words, I strongly encourage you to send me a small present, a donation, a nice posccard, and so on, if you appreciate this program and you use it. Suggestions, comments, bug reports, criticism, praise, etc. are welcomed, too! If you want to translate this documentation into other languages, feel free to do so, add the translation to this archive, and send it to the author (that is me;-)) Angie is copyrighted and protected by copyright laws all over the world. Copyright © 1993 Franz Schwarz. The author can't be hold liable for any harm that stems from the usage of this program, no matter whether direct harm or indirect harm. Angie is freely distributable; it may be published in the Fred Fish & Amok software collections and in other non-commercial software collections, including CD-ROM versions of them. Moreover, it may be spread via electronic data transfer. If you redistribute Angie, you must at least distribute this documentation along with the executable. Distributing the executable without this complete, unmodified documentation is illegal and will be prosecuted. Angie may be only distributed if the distributor does not claim any copyright on the Angie archive nor on any files that are compulsorily distributed with it (i.e. the distributor claims that the Angie archive may not be distributed separately without those files). Inquiries on exceptions from these limitations may be submitted to the author. contacting the author --------------------- Franz Schwarz Mühlenstraße 2 D-78591 Durchhausen, Germany Uucp: Franz_Schwarz@mil.ka.sub.org Fido: 2:2476/506.18 Bank account 951.207 at KSK Trossingen, Germany, bank ZIP code 643 500 70 Credits ------- The interactive graphical user interface was created with assistance of GadToolsBox 37.300 by Jan van der Baard and its Oberon source generator OG 38.02 by Stefan Kurtz, Thomas Igracki & Kai Bolay. Have fun, and don't you forget: Angie is a nice name as well as a terrific song by the Rolling Stones. From now on, this name is to be remembered in the Amiga community as well: Angie, i.e. this software's name is an acronym for ANother Great Intuition Enhancer Franz 'Blacky' Schwarz - Girlfriend Is Better - Talking Heads - PS: This documentation was written in one go in a few hours and has not been completely checked for mistakes yet- so don't blame me if you find many mistakes...