-------------------- AmigaOS 3.5/3.9 project ------------------------- workbench.library 44.99 (18.3.1999) - Now written entirely in `C'. - Removed all dead and unused code. - Now requires Kickstart 3.1. - Now specially adapted for the disk-loaded environment. - Now uses proper function prototypes throughout the entire module. - Parameter passing switched to registers. - Removed all stub code. - RemoveAppWindow/RemoveAppIcon/RemoveAppMenuItem now return a boolean value rather than the parameter passed in; we really have had enough trouble with routines that would return pointers in place of flags. - About 2400 bytes larger than the ROM resident version in V40. - Removed the hidden about message. We'll eventually have to put something in its place, though. workbench.library 44.101 (18.3.1999) - No longer uses GetIcon() to retrieve icon files. The whole code now uses GetDiskObject() throughout. As soon as the new icon.library LVOs are in place, this will have to change again, though. - Now requires and supports icon.library V44. workbench.library 44.111 (19.3.1999) - All icon rendering operations now go through icon.library. - Now prefers icon image masks generated by icon.library rather than its own. - Now notifies icon.library when the Workbench is to be closed or reopened. workbench.library 44.118 (20.3.1999) - When reopening the display, Workbench no longer uses the old image data for icon dragging. - The window and background pattern fill routine now obtains its locking semaphore (protects against pattern changes while rendering is being done) in shared mode. - Changed over all icon reading and drawing routines to use the new icon.library code. workbench.library 44.143 (20.3.1999) - In the "Execute..." requester, Workbench now puts the cursor on the first parameter following the command name. Likewise, for CLI icons with a tool type set, Workbench will put both the default tool name and the name of the project file on the same command line, placing the cursor right behind the default tool's name. - Fixed an Enforcer hit in the "Information..." window which could be triggered by one single memory allocation failure. - Introduced limit checking for all strcpy() and strcat() operations. The new code will make sure not to overrun the string to copy to. This should make tool type editing *much* safer. Workbench is still chock full of fixed length name strings and certain assumptions about the maximum length of a file/drawer name. Can we fix that? Given enough time, probably. - Now also does limit checking for sprintf() and vsprintf(). - Now does a WaitBlit() before starting to use the CPU with the icon mask contents that were just cleared using BltClear(). - The volume fill gauge display returns after ten years of absence. The gauge display follows the design of Jean-Michel Forgeas' "WBGauge" program. workbench.library 44.165 (22.3.1999) - AppIcons are now remapped during Workbench screen open/reopen transitions like any other regular palette mapped icons. - Workbench now calls icon.library to find out how large the icon is the user may have clicked on. - For all other operations that need to know how large an icon is, Workbench now talks to icon.library, too. workbench.library 44.196 (24.3.1999) - AppAppIconA() takes a parameter in A4, which is not such a good idea with the current SAS/C code generator. What exactly goes wrong is hard to tell, the result, however, is that register A6 gets cleared on the way, which has disastrous results. So for now we use the old stack based parameter passing for this routine and a small assembly language stub to pass the parameters around. - The gauge display now resorts to showing a disk as completely full if the number of blocks that define the size of that disk is smaller than one. - The "view by name/date/size" mode now prints file names using graphics.library/Text rather than the usual bunch of wacko Blt operations. - For "view by name/date/size" mode, the icon image that gets created is now set up in such a way as to allow for fonts with negative kerning to be used without overwriting innocent memory. - When finding the widest column in "view by name/date/size" mode, fonts with negative kerning are now taken into account. - The marquee no longer leaves pixel droppings behind. - In "view by name/date/size" mode, directory entries no longer change size, colour or shape when dragging them around. - Workbench no longer creates or maintains its own icon image masks. - The fill gauge now looks a bit better in 2 colour mode. - The marquee no longer draws its complement pattern into all screen bitplanes. Drawing is now limited to the first two planes only. workbench.library 44.208 (24.3.1999) - Implemented notification for open drawers. It works like this: only drawers in "show all files" mode are monitored and drawer updates are done only if the last update was at least four seconds ago. orkbench.library 44.216 (25.3.1999) - Now uses IsFileSystem() to identify filing system devices as such. - Retired the use of PutIcon(); PutIconTagList() is now used in its place. - No longer sets up the DiskObject data structure header, version and identification data. This job is left to icon.library. - Now does a LockDosList(LDF_DEVICES|LDF_VOLUMES|LDF_READ) instead of LockDosList(LDF_ALL|LDF_READ). The code never bothered with assignments anyway. workbench.library 44.222 (27.3.1999) - Now uses the proper way to obtain icons for drawer and files that don't have any. This finally makes the file identification hook in icon.library work. - Previously, the "Execute Command" requester would open for all "fake" icons displayed in "Show All Files" mode. Now we do that only if the fake icon is a tool icon (can't be too careful) or a project icon without a default tool. In all other cases the fake icon goes straight into the regular Workbench launch procedure. workbench.library 44.242 (27.3.1999) - All windows now support live scrolling. workbench.library 44.256 (28.3.1999) - Moving and removing icons now doesn't visually refresh everything everywhere any more. The refresh still takes place, but is limited to the bits that need updating. This is most apparent when moving icons: they get updated one by one. This is because the overall refresh algorithm is still of the brute force type. Lots of room for improvement here. workbench.library 44.279 (28.3.1999) - Redid the menu localization, layout and setup code. This will make it much easier for us to make changes to the menus. - AppMenuItems with a label text consisting entirely of the '-', '~' or '_' characters are now translated into proper menu bar labels. workbench.library 44.299 (30.3.1999) - "Execute command" now has the currently active drawer window as its current directory. If the active drawer window is the root window (also known as "backdrop" or "disk" window), then the current directory defaults to "RAM:". - When creating a new drawer, the Workbench now names it according to the current locale settings rather than using the default built-in "Unnamed" string. Trouble is, this string is in the Workbench catalog database, but none of the existing catalog translations contains a localized version of it. Drawer names no longer start with "Unnamed1", but with "Unnamed". If that one exists, the next name will be "Unnamed1", etc. - The logic that determines what actions are available for an icon no longer just keys off the fact that there is an icon selected but also takes the icon type and state into account. - AppIcons can now respond to all actions defined in the "Icons" menu. You just have to tell AddAppIconA() which ones you support and you'll receive an AppMessage with the am_Class type set to the type of menu action invoked. - Multiple "Information" windows now get tiled instead of opening all in the same spot. - To keep SYS:WBStartup from getting scanned and processed, hold down any [Shift] key when LoadWB is invoked. LoadWB now also supports a switch to this effect ("loadwb skip"). - Snapshotting a fake icon now turns it into a real icon. - Updating a drawer no longer resets the drawer origin position. workbench.library 44.325 (31.3.1999) - Added three new API functions OpenWorkbenchObjectA(), CloseWorkbenchObjectA() and WorkbenchControlA(). - Added a new tag to AddAppIconA() to allow the icon position to be backpropagated to the icon originally associated with the AppIcon. - Added a hook to allow the creator of an AppIcon to render the icon under program control. This works together with a tag in WorkbenchControlA() that triggers an AppIcon refresh. - Adding AppMenus now takes the maximum number of items in a menu into account and does not allow more than 62 items to be added. workbench.library 44.332 (31.3.1999) - Removed some further unused variables in WBObjects. workbench.library 44.388 (2.4.1999) - The volume size calculation code now handles volume sizes larger than 4 GBytes properly. The calculation should be accurate for up to 2 PBytes (which is -- hopefully -- sufficient for the next ten years). Note: must put the same code into asl.library. - All Workbench windows now close under keyboard control if ^\ is hit (which also closes Shell windows). - New "Information..." code up and running. - Added the new progress gauge code. workbench.library 44.428 (3.4.1999) - Rewrote the code for "Delete..." and "Empty Trash". Both now sport progress requesters. - "Delete..." now uses a more refined confirmation requester. - Redid the "New Drawer" requester; instead of creating a drawer and then prompting you to rename it, it now prompts you to enter the name of the drawer to create. - Redid the "Execute Command" requester and all the code that depends upon it. The "Ok" button now reflects the action to perform and no longer just reads "Ok". - The default name for an unnamed drawer is now "Rename_Me". workbench.library 44.507 (4.4.1999) - Fixed the usual bunch of bugs in the "Delete..." and "Empty Trash" code. - Fixed a numeric conversion bug in the code that rounds media storage sizes. - Retired Mike Sinz' asynchronous file copy code. While it was faster and probably more elegant than the code I have replaced it with, making it work with the process gauge would have been too difficult. - AppIcon owners can now receive notification messages every time the icon select state changes. - Fixed a real nasty lockup bug introduced when I added the ^\ window close code in the wrong place in incoming.c. - In "view by text/size/date" mode, the file size is now printed using the default locale number formatting code %lD. The file name information string setup is also a bit more refined now. - Now uses the locale default date format to present time and date stamps. - Switched over the "view by text/size/date" sort code to use TreeLists, like in the updated asl.library. This yields a major speed increase, but due to how "Show All Files" mode works, it may not be obvious. In any case, the list update speed will increase logarithmically with size rather than exponentially. workbench.library 44.512 (4.4.1999) - ^\ didn't work that well in the root window. Fixed. - The date conversion now substitutes dates by week days, if possible. - The file copy code now uses asynchronous packet I/O. - Stopping a copy process now keeps whatever was copied. This is probably a controversial item; on one hand, the "Stop" command implies an immediate action: once the brakes are pulled, you want the process to be stopped and no further actions to be taken, such as any incomplete files getting cleaned up. On the other hand, you probably don't want corrupt, incomplete data to be kept. This issue should be resolved predictably, i.e. it should not be made into a configurable option. workbench.library 44.577 (5.4.1999) - The "Wait until finished" switch was wired the wrong way round in the "Information..." requester. Fixed. - In the "Information..." requester the protection bits now sit in a group labeled "Attributes:". - The "Information..." window for volumes now sports two action buttons like the regular Save/Cancel pair, but in this pair the "Save" button label reads "Ok" and does the same as the "Cancel" button (because the information displayed is read-only). While this doesn't make great sense in terms of usefulness, it provides for visual consistency. - The progress gauge now has a trigger action delay of one second; if the process the gauge monitors takes less than a second to complete, you won't see the gauge appear. - Added keyboard control to all requesters (both info and execute/rename/etc.). - The file copy code now dynamically adjusts the size of the buffer used for moving data around to the actual speed of the copying process. Thus, for faster devices larger writes will be done, for slower devices smaller writes will be used. This adjustment is done both to increase performance and to improve responsiveness: since the progress gauge is polled we don't want to check it in intervals much larger than one second. - Hold down the [Ctrl] key and click on a drawer window close gadget to close all drawer windows. - Hold down the [Ctrl] key and double-click on an icon to open that icon and close the drawer window it is in; note that if the icon won't open, the drawer window will still close! - Hold down the [Ctrl] key and drag an icon into a drawer on the same volume to have it copied instead of moved. - Hold down the [Ctrl] key and click on an info window close gadget to close all info windows. - Workbench now no longer allows more than one info window per object. - Press [Tab] to cycle through all currently open info windows. - Press [Tab] to cycle through all currently open drawer windows. - Workbench now requires that for a double-click on an icon to be accepted, the second click has to be on the same icon as the first click. - Changed the way extended selection works: * To select an icon, click on it. * To select another icon, hold down any [Shift] key and click on it. * To unselect an icon, hold down any [Shift] key and click on it. * To unselect all icons, DON'T hold down a [Shift], [Alt] or [Ctrl] key and then click outside an icon. * To drag icons around, click on them and move the mouse. You don't need to hold down any [Shift] key. - Changed the way drag selection works: * To unselect all icons inside the rectangle, hold down the [Ctrl] key when you let go of the mouse button. * To toggle the selection of all icons inside the rectangle, hold down any [Alt] key when you let go of the mouse button. - AppMenus can now have keyboard shortcuts, provided the respective shortcut is not already in use by a different menu item/subitem. - Disk types are now localized and (hopefully!) less cryptic than they used to be. The mapping goes like this: BUSY -> Busy NDOS -> Uninitialized BAD -> Unreadable KICK -> Kickstart Other IDs are translated into a human-readable string, converting unprintable characters into octal numbers if necessary (well, maybe that's not really human-readable after all). - Disabled the file notification code. - Workbench now makes a difference between Kickstart disks and unreadable disks. Kickstart disks can be copied and formatted, unreadable disks can only be formatted. The default for a non-AmigaDOS, non-Kickstart icon is now a WBDEVICE icon. - If Workbench fails to find the default tool of a project, it now prompts you to select a different one. - The output and execute windows are now opened in such a way as to avoid overlapping the Workbench root window drag bar. - The default Workbench output window size and position now takes the console font size into account. workbench.library 44.586 (5.4.1999) - The info window now is an AppWindow; the only purpose this has is to allow you to easily change the default tool of a project by dropping a program icon into the default tool string gadget. - Added an API option to query the list of currently running Workbench programs. workbench.library 44.629 (6.4.1999) - Default WAIT time for icons in the WBStartup drawer is five seconds; the info window didn't handle this correctly. Fixed. - Dropping a disk icon into a drawer now copies the contents of that disk into a newly created drawer of the same name. - Doubled the info process stack size. - The progress gauge now accurately reflects the progress of the copy/delete action currently in, well, progress. In some cases this involves scanning the contents of directories before any further action takes place, wasting some time. This is most apparent when operations are taking place on a slow filing system device, like a floppy disk drive. In other cases, the effect hardly has any impact. - The task creation code used for the gauge would assign data structures to unaligned addresses. Fixed. workbench.library 44.642 (7.4.1999) - In an attempt to improve tolerance for soft links, I switched over all FileInfoBlock->fib_DirEntryType comparisons to use Ralph Babel's recommended macros. - Revived the textedit clipboard support code I had commented out. This means, Amiga+C/Amiga+V now works again in the tool type editing field. - Just like icon.library, the info window now tolerates tool type strings with blank spaces surrounding the "=" character. - All icon height calculations now go through icon.library, I removed the last few references that would work by adding the font height manually. - You could edit the default tool of a project file without an icon. Fixed. - You couldn't edit the default tool of a project icon without a file. Fixed. workbench.library 44.649 (8.4.1999) - Changed the qualifiers for the drag select operation. Now [Shift] will toggle selection and [Alt] will remove. This comes close to how qualifiers affect clicks on icons. - Workbench now copies icons without corresponding files/drawers again. - Dropping a disk icon on a drawer now copies the contents of the disk into a newly created drawer inside the drawer dropped on, rather than creating a new drawer on the same level. workbench.library 44.672 (11.4.1999) - Window pattern rendering now takes the window border sizes into account. - Hold down any [Alt] key and click on an icon to unselect it. This complements the drag select functionality. - Now uses GetBitMapAttr() to query the screen depth and no longer uses more than 8 bit planes, whatever there may come. - When over a window it can be dropped on, the icon being dragged now turns transparent. - The "Empty Trash" and "Delete" functions now sport a new requester for those rare cases in which deletion goes wrong. That requester allows you to delete delete-protected files or to ignore delete errors altogether. - The info window now updates volume information in regular intervals. - The "Rename" code now sends an ACTION_RENAME_OBJECT packet rather than fiddling with temporary assignments. - Renamed the "ROMWack" menu item; it now reads "SAD". - Added a missing SetSignal() to the WBConfig LVO code. workbench.library 44.686 (12.4.1999) - The WBConfig code now waits for Workbench to accept the new configuration data instead of jamming it into place and then notifying Workbench that something has changed. This avoids uncoupled window pattern refresh problems. - Added AmigaGuide support; hit the [Help] key and get the help text displayed. The current code does not yet provide a key as to what item the user needs help on. This should follow soon, though. - Added new AddAppWindowDropZoneA() and RemoveAppWindowDropZone() API functions. workbench.library 44.709 (13.4.1999) - The code that checks whether an icon to be rendered will be visible is now quite a bit smarter and takes the label width into account. - Fake icons always got turned into real icons, even while moving and copying. Fixed. - The AmigaGuide help code now assigns a unique ID to every location a help text should be available for. A sample workbench.guide file is provided. workbench.library 44.732 (14.4.1999) - The window backfill pattern origin is no longer a function of the window position. - [Alt] and [Shift] qualifiers work again in the text edit gadget used by the info window. - The [Help] key now also works in requesters. - When copying drawer A into drawer B that already has a drawer in it by the name of A, the contents are now stored in drawer B/A rather than in drawer B. - During deletion, while a requester is up, the progress gauge is kept from making is appearance until after the requester has been answered. - When filtering tool types, the info window code now calls icon.library/FindToolType rather than parsing the tool type list all on its own. - Workbench now queries icon.library for the longest file name permitted. This removes a number of hard coded limits in the original code. - The delete requester now sports a Retry button and only brings up the "Force Delete" option if the reason for the deletion failure was a delete protected file. - Added keyboard shortcuts to "Show All Files/Only Icons" and "View by Icon/Name/Date/Size". workbench.library 44.741 (15.4.1999) - The "Replace All" and "Skip All" options now really affect all files involved and not just the drawer contents. - During copying, while a requester is up, the progress gauge is kept from making is appearance until after the requester has been answered. - The "Open Parent" menu item now also responds to the [Ctrl] key qualifier in that it closes the current drawer window after opening the parent drawer. Note that if the parent drawer does not open, the current drawer will still close! - Redefined the use of the qualifier keys: * [Shift] will add icons to the selected list; this works both by clicking on icons and by using the marquee. It also works with the "Select Contents" menu item. * [Alt] will remove icons from the selected list; this works both by clicking on icons and by using the marquee. * [Ctrl] will toggle selection of icons; this works both by clicking on icons and by using the marquee. * [Right Amiga] will perform special functions, such as closing all windows when clicking on a window close gadget, copying files when held down while dropping icons, closing the parent drawer window of an icon double-clicked on and closing a drawer whose parent was just opened. Other purposes: * [Shift] will cause the WBStartup drawer not to be scanned when Workbench is launched. * [Shift]+[Tab] will cycle backwards through a list of windows/gadgets ([Tab] will cycle forwards). * Either [Shift] or [Tab] will exit from a string gadget without terminating input (such as in the Execute/Rename/New Drawer requester). workbench.library 44.788 (18.4.1999) - The [Right Amiga] qualifier now a has purpose while dragging icons. If held down, icon movement will be limited to the axis corresponding to the direction the mouse was moved. This is similar to how brush dragging works in Deluxe Paint (and Personal Paint, which uses the same model). - "Put Away" now also "UnSnapshots" the icon in question. - Changing the Workbench font no longer shuffles the contents of all drawers. I believe that this decision should be left to the user. - Added new "Clean Up" options; you can now clean up the contents of your window by column (the old default), by name, by date, by size and by type. The latter four arrange the icons in rows instead of in columns. workbench.library 44.797 (18.4.1999) - "Clean Up By ..." did not work that well with drawers that only had a single row of icons in them. Fixed. - Added new "Resize To Fit" menu item. workbench.library 44.814 (19.4.1999) - The fill gauge now refreshes completely, not just the currently active segment. - Switched over to 68k code with utility.library math routines. Note that due to how the utility math code works, workbench.library is no longer romable. - When stopping a copy process, the last incomplete file being copied now gets removed. workbench.library 44.817 (20.4.1999) - In the code that cleans up after icons have been dragged across the screen, replaced the RemIBob() call with a RemBob() macro invocation. This should be functionally identical (after all, all bobs are removed, not just a single one), but should involve less overhead and be actually The Right Thing (tm) to do. - When dragging an icon into the backdrop window, Workbench now tries to put it where the user dropped it. It may still be repositioned if in danger of running off the end of the screen, but otherwise the code will try to use the position the user had in mind. workbench.library 44.819 (21.4.1999) - Doing a "Snapshot" or an "UnSnapshot" on an icon now only updates the icon position and nothing else. If the icon in question has a drawer window attached, it will still be stored completely. workbench.library 44.837 (24.4.1999) - Text insertion in the info window's tool type text entry field now properly updates the display even if new lines are added to the list. - Snapshotting a fake icon is no longer permitted. - Added a new tag to allow an icon drop zone to be highlighted when an icon is to be dropped on it. workbench.library 44.846 (27.4.1999) - Icons no longer overlap in the root window. This was changed and then changed back to allow the user to put icons into the root window without having their positions automatically readjusted. - Clean up by name/date/size/type now also moves the icons a bit away from the window borders, just like the clean up by columns operation does. - When switching between transparent/opaque mode for the active icon, the code now calls RemIBob(), changes the mask, then calls AddBob() again. - Clean up by date/size/type now has a fall-back for objects that share the same date/size/type: they will get sorted by name. workbench.library 44.856 (29.4.1999) - Found the cause of the erratic system crashes that could occur after starting a program. One newly added node was getting added to the same list twice, wrecking both the list it was added to and causing even more trouble later on, when the node was to be removed again. workbench.library 44.865 (1.5.1999) - Copying a drawer which doesn't have an icon into a different drawer in "Show All Files" mode now also makes the copied drawer visible. - Implemented support for a new option intended to keep old RTG systems from crashing. Since this option will disable new functionality (namely the AppWindow drop zones), it should be used only when necessary. Specifically, the "simple gels" mode makes Workbench do exactly one initial AddBob() call for all icons and exactly one RemIBob() call for each icon. This does not work perfectly, though. But it allows the user to double-click on an icon without bringing the system down. Consequence: update that old RTG system! - Added a new API function to get a list of all currently selected icons. workbench.library 44.875 (3.5.1999) - I believe I've found a way to allow OpenWorkbenchObject() to open only the drawer specified and none of its parents. The approach is rather strange and hackish, but it might just work. workbench.library 44.882 (4.5.1999) - Fixed a memory alignment error in the copy code. - The copy code would use far too much memory. Fixed. - The progress gauge now refreshes properly. - Added a new API function to get a list of all currently open drawers. workbench.library 44.893 (6.5.1999) - Changing the font preferences now also updates all icon labels (they get reprinted). - Duplicating a file/drawer via the "Copy" menu item now works again. This also fixes a bug in the code that sets the drawer attributes after a successful copy. - Copying and moving files and drawers can no longer leave icon duplicates in drawer windows. workbench.library 44.899 (15.5.1999) - In the info window, keyboard activation for checkboxes did not update the internal data structures properly. Fixed. - The "Delete", "Empty Trash" and copying code now uses the gauge title bar to display which drawer/file they are currently working on. - Limited the maximum amount of memory allocated for copying files to 32K. This should help certain "unreliable" SCSI hosts. The amount of memory to be used is configurable through WorkbenchControl() with private, undocumented tags. workbench.library 44.901 (30.5.1999) - Certain combinations of keyboard qualifiers no longer trigger special functionality. For example, an [Alt] key is registered only if none of the [Amiga] keys is currently being held down. This avoids clashes with operating system key combinations. - Rewrote the code that rounds volume sizes. workbench.library 44.909 (8.6.1999) - Changed over all temporary memory allocations of FileInfoBlock data structures to allocate them from the stack. - Added new control tags to define which devices Workbench should never show an icon for. This allows you to hide things like A-Max partitions or partitions you never ever access from Workbench. - Verified that the few variables in WorkbenchBase that need to be aligned to a long word address are in fact properly aligned. workbench.library 44.913 (12.6.1999) - Added another WorkbenchControl() option to tell Workbench to tell icon.library to let go of its icon colours. This is used by IPrefs right before the screen palette is changed (after the palette.prefs file was modified). workbench.library 44.932 (19.6.1999) - The progress gauge display now sticks to the position the user dragged it to. - The cursor keys can now be used to move around in a window. Hold down the [Ctrl] key to move in steps of one pixel. I also changed the behaviour of the [Shift] keys with the window scroller arrows: [Shift] now does nothing. To get the desired effect, hold down the [Ctrl] key. This was changed to be consistent with the cursor scrolling mode. - Hold down any [Alt] key and select the "Select All" menu to unselect all icons. - Regular keyboard input now selects icons and makes them visible. The first few characters will be sufficient to identify a file or drawer. To start over with a new file name, wait three seconds. workbench.library 44.941 (20.6.1999) - When selecting icons by keyboard, the menu would not get updated correctly (some items would stay ghosted). Fixed. - The code that makes a selected icon visible is a tad smarter now. It no longer scrolls farther than it really needs to. - The info window had a problem due to a missing "break;" line in the control centre. The "Wait" string gadget would cause the "Save" button to be triggered. Fixed. workbench.library 44.942 (20.6.1999) - The typing restart delay (formerly three seconds) is now a configurable option. workbench.library 44.947 (21.6.1999) - Selected AppIcons no longer show up in Workbench startup messages or AppMessages sent to AppWindows. Workbench originally put them into the same list as regular selected icons, but only included the AppIcon label and a NULL home directory pointer. Together, neither was particularly useful. The new code specifically avoids putting such useless drivel into the WBArg lists. - Added new API functions to change the icon selection state and to make icons visible. workbench.library 44.951 (22.6.1999) - Updated and revised the autodocs. workbench.library 44.952 (23.6.1999) - The ChangeWorkbenchSelectionA() callback hook message now provides a little more information on the icon to be examined. workbench.library 44.954 (23.6.1999) - The ChangeWorkbenchSelectionA() code now sports an option to abort scanning altogether. workbench.library 44.964 (15.7.1999) - Holding down [Ctrl] or [Alt] when clicking on a selected icon no longer starts icon dragging. This could throw Enforcer hits if there was no icon left to be dragged. - Duplicating drawers and files now shows a proper progress requester. - In "Show all files" mode, memory allocation failures are now properly registered. - In "Show all files" mode, Workbench no longer tries to keep the bookkeeping lists for files with and without icons sorted in alphabetical order. Apparently, nothing relied upon the files to be kept in this order. - When finding new positions for yet unplaced icons, Workbench no longer attempts to keep the list of unplaced icons in alphabetical order. Apparently, nothing relied upon the icons to be kept in this order. - Added another few private tags to control the type of memory image data is allocated from. - All requesters now have keyboard shortcuts for all gadgets. - Scrolling the tool types list no longer "blanks" the cursor if the cursor isn't currently visible. workbench.library 44.966 (20.7.1999) - To skip the WBStartup drawer being scanned at system startup time, hold down any [Alt] key. - The [Help] key now triggers the online help only and only if none of the [Shift], [Alt], [Amiga] or [Ctrl] keys are being held. - The Information window no longer has problems refreshing after the volume data has been updated once. workbench.library 44.970 - No longer calls OpenDevice() with numeric name parameters. - The information requester no longer filters special tool types that only make sense if the icon in question is located in the SYS:WBStartup drawer. Thus, you'll see tool types like DONOTWAIT appear in the list if an icon is found in a different drawer. - When running the Workbench root window in backdrop mode, dragging icons off-screen no longer redraws them in the wrong location before pushing them back into the visible window area. workbench.library 44.974 (27.7.1999) - The "Snapshot icon" menu item now also "works" if there are fake icons selected. - To leave the multi-line text input gadget used by the information window, hit [Shift]+[Return]; [Alt]+[Return] and [Ctrl]+[Return] will do the same. - The information window no longer strips all tool types it handles internally. This allows for more than one special tool type to show up in the list (e.g. more than one "DONOTWAIT" tool type). When presenting the tool types list, only the first of each special type will be evaluated and hidden. The rest will remain untouched. workbench.library 44.975 (31.7.1999) - Keyboard scrolling no longer works in borderless windows. workbench.library 44.976 (4.8.1999) - Following a failed attempt to invoke a menu item by keyboard for which there isn't a keyboard shortcut, the resulting input event will no longer trigger icon selection. workbench.library 44.1006 (7.8.1999) - The drop zone management code now verifies that the AppWindow data structures passed to it were really allocated by workbench.library and not by replacement code, such as DirOpus. - Redrawing an AppIcon now also requires its data structures to be created and maintained by workbench.library (and not by a patch like DirOpus). - WorkbenchControl() now works (with a limited subset of control tags) even if the Workbench hasn't been opened yet. - To change an icon's image, open the information requester on that icon and drop the new icon on the old icon's image, then save the old icon back to disk [Deryk Robosson]. - Added options to reenable the drawer notification code. - Selecting an item from the "Icons" menu on an AppIcon now properly sets up the am_Class member of the AppMessage sent to its owner. - The "Information..." window button "Ok", as displayed for a volume icon, now changes to "Save" once an icon has been dropped on the icon image. - In the "Information..." window, the wait time gadget gets disabled if the "wait until finished" option is currently disabled. - The hidden device list is now controlled both with internal and public tags. This helps IPrefs to tell those entries apart which it should and which it should not replace. The internal tags also have the effect of delaying a complete refresh of the root window until the list has been updated completely. - icon.library now notifies workbench.library if the size of the icon embossing rectangle changes. - Added another private tag to trigger a complete display update. workbench.library 44.1007 (8.8.1999) - The icon border sizes are now set up in the library init code rather than much later during library open. This solves a problem with the new code in icon.library that deals with the icon border sizes and which otherwise could have thrown the sizes out of sync. workbench.library 44.1023 (8.8.1999) - After inserting a disk and after Workbench has failed to find a valid "Disk.info" file in its root directory, Workbench now makes an attempt to find the "default icon" for the drive the disk was inserted into. This means for example, that if there is no file "CD0:Disk.info", Workbench will attempt to read a default "def_CD0.info" from ENV:sys. The same holds true for devices from which Workbench cannot read an icon file since they are not ready for reading, such as a drive DF0: that is currently in the process of formatting a disk. NOTE: the default icons must be of type WBDISK or they will not load! - Changed the way disk icons are drawn which Workbench cannot open, such as Kickstart disks. Workbench now draws them as "disabled" by means of the icon.library code responsible for drawing the icons. workbench.library 44.1033 (9.8.1999) - A Workbench reset could cause the workbench.library and icon.library to end in a deadly embrace. Fixed. - Cleaned up WorkbenchBase and removed a few more unused variables. workbench.library 44.1044 (11.8.1999) - The volume fill gauge now features tick marks, dividing the gauge into ten segments. workbench.library 44.1051 (14.8.1999) - When writing back an icon, the Information... requester code no longer adds the DONOTWAIT/STARTPRI/WAIT tool types unless it removed them in the first place. - Dumped all the CurrentDir(currentDir = CurrentDir(ZERO)) tricks and switched them over to plain Lock("",SHARED_LOCK) calls. - Error message display code no longer attempts to display a message for error code #0 (= no error). - Fixed an Enforcer hit in the Information... window code. - The Information... window is no longer opened quite that wide any more. Adjustments are still made if necessary, though. - No longer displays the "Do not wait", etc. gadgets for drawers residing in the SYS:WBStartup drawer. - Made the disk fill gauge tick marks quite a bit smaller. workbench.library 44.1053 (15.8.1999) - Changed the look of the disk fill gauge tick marks again. workbench.library 44.1054 (17.8.1999) - Cleaning up the window contents by name/size/date no longer mucks with the window origin. workbench.library 44.1066 (17.8.1999) - Removed an unnecessary window refresh right after a drawer is opened. - Layer offset adjustments in window backfill hook code were unnecessary and could introduce errors with off-screen clipping rectangles. Fixed. - No longer sends MTYPE_APPWINDOW type messages if an icon is dropped on an AppWindow that has drop zones attached and the icon was dropped on none of the zones. workbench.library 44.1068 (22.8.1999) - The "Can't open your tool ..." requester now has a window title (never had one to start with). - In the Information... window disabled gadgets can no longer be activated by keyboard. - Now also checks for project icons (without associated files) whether they reside in the SYS:WBStartup drawer and acts accordingly. workbench.library 44.1106 (24.8.1999) - The AddAppIcon() call now uses the new ICONDUPA_ActivateImageData tag to activate the palette mapped icon image data in the icon image that finally hits the screen as the AppIcon. This will magically work around the problem caused by older applications which use GetDiskObject() to retrieve icons and use them as AppIcons. In older workbench.library revisions those icons wouldn't appear as palette mapped icons at all. - Added another gimmick to the Information... window. For drawer or volume, click the size display to start collecting information on drawer's contents. The scanning process will recursively search through the directory contents tree, collecting the number of drawers, files, bytes and blocks allocated for it. - Added the ARexx interface. workbench.library 44.1123 (25.8.1999) - Trashcan icons can no longer be duplicated (since they can't be deleted either...). - Copying files without icons can no longer end in a file system crash. The old Workbench code was trashing the Workbench Process current directory pointer without restoring it. I found the one that caused the crash, but there may be others :( - No longer allows data to be copied to the trashcan. It doesn't complain if the attempt is made but it won't create the files in it. The only action supported now is to move data into the trashcan. - Now updates the contents of the trashcan window after the trashcan has been emptied. - Replacing a file that has an icon attached with a file which has no icon attached now preserves the original icon's file instead of deleting it, too. workbench.library 44.1145 (30.8.1999) - ARexx didn't clean up after the dos.library/ReadArgs parser. Fixed. - The ARexx "WINDOW" command couldn't resize the window to the maximum position (due to negative integers in the relevant window data structures). Fixed. - Added new ARexx command "INFO". - Changed the way the GETATTR command puts its query strings and results together. While this allows for more flexibility it also means that some of the existing ARexx scripts will need to be rewritten since the names of the stem variables filled in have changed. - Enhanced the GETATTR and ICON commands. - Added new ARexx commands "UNZOOMWINDOW" and "ZOOMWINDOW". workbench.library 44.1147 (31.8.1999) - The info window now only is an AppWindow or will get all the drop zones added if the functionality behind it makes sense. For example, some of the options won't be enabled if the icon in question is a "fake" icon. workbench.library 44.1167 (2.9.1999) - Changed the way drawer windows are "locked", i.e. how the menu strip and the mouse pointer are changed when one of these windows is made "busy". This also affects input event processing. - Added new ARexx commands "LOCKGUI" and "UNLOCKGUI". - The ARexx command parser didn't handle commands properly which were given without arguments. - Window maximum width and height as returned by the ARexx interface are now clipped to the size of the parent screen. - When duplicating a file which has a fake icon attached, the duplicate's attributes will now get set prior to its fake icon getting reread. That way duplicates of project icons will come out properly. - Added new ARexx commands "DELETE", "FAULT", "NEWDRAWER" and "RENAME". - Found another case of stale locks left behind by an errant CurrentDir() call... - After loading a Disk.info file which turned out to be not the type of icon expected, Workbench will no longer attempt to free memory twice. workbench.library 44.1179 (4.9.1999) - The disk fill gauge should be more robust now and less sensitive to numerical overflow. - The progress gauge wouldn't handle keyboard input properly. Fixed. - The info window no longer saves one extra blank line along with the tool types list. - The "Unsnapshot" menu item is now enabled even for fake icons. - The info window now allows a "real" icon to replace a "fake" icon. - Added new GETATTR attributes (icon border sizes and fonts). workbench.library 44.1199 (5.9.1999) - Changed the way the [Tab] and cursor keys can be used to move around the icons and windows: [Tab] Move to the next icon, with the next icon being the one that would follow the currently selected icon in a list sorted by name. If the currently selected icon is the last in the list, restart at the top of the list. If no icon is currently selected, select the first visible icon closest to the top left corner of the window. [Shift]+[Tab] Works just like [Tab], but will select the previous icon. [Cursor up], [Cursor down], [Cursor left], [Cursor right] If no icon is currently selected, moves the window view in the direction indicated by the cursor key. If an icon is selected, will select the icon closest to it in the direction indicated by the cursor key. [Alt]+[Cursor up] Opens and/or activates the window associated with the current directory's parent directory. [Alt]+[Cursor down] If a drawer-like icon is currently selected (drawer, disk, trashcan), will open the drawer and/or make its window the active one. [Alt]+[Cursor left] and [Alt]+[Cursor right] Cycle through all currently open drawer windows. NOTE: The [Tab] key functionality will, due to how Workbench maintains its icon list, need to resort the icon list. This may take a while to complete, so please don't expect near-real-time performance. - The ChangeWorkbenchSelectionA() routine can now be used to manipulate the positions of the icons it handles. workbench.library 44.1226 (7.9.1999) - Added new attributes for the GETATTR command (icon status). - Workbench now attempts to resolve soft linked objects, querying the linked object's type, protection bits and size. While this does not really yield full soft link support, it's better than nothing at all. - The copy process no longer attempts to copy soft links. - Deleting the contents of a drawer will no longer descend into hard linked directories. The links are deleted instead. - In the ARexx interface, renamed the "MENU" parameter of the "MENU" command to "INVOKE". - AddAppMenuItem() didn't return NULL if there were already 63 entries in the tools menu. Now it does. - Added new ARexx command "KEYBOARD". - Enhanced the ARexx "MENU" command. - ARexx command "VIEW RIGHT" now scrolls right instead of down. - Checked and fixed up all CurrentDir() calls. The new code should restore the Workbench process' current directory whenever necessary instead of changing it and rendering it invalid at times. I hope to have finally caught all these problems. workbench.library 44.1248 (9.9.1999) - The Workbench root window now allows icons to be selected by cursor keys even if it's in backdrop mode. - When selecting icons with the [Tab] key or the cursor keys, Workbench will now make sure that only one single icon stays selected. - When moving through a directory hierarchy with the [Alt]+Cursor key combinations, Workbench now makes sure that when the new drawer has been opened, at least one of the icons inside will be selected. - Workbench is now a little smarter when selecting icons with the cursor keys. If Workbench cannot find an icon immediately next to the currently active one, as indicated by the cursor key pressed, it will start a second search attempt, looking for the icon closest to the one currently selected in the direction indicated by the cursor key. - Added a new menu item to unselect all currently selected icons in a window. - The info window now sports a new switch I had forgotten to add in the previous versions. That switch allows you to specify how a program/project is to be executed: it can be started from Workbench (the default), from Shell or from ARexx. This feature is really a wrapper for the "CLI" keyword Workbench 2.x has always supported. To support ARexx execution, too, I have added another one of these special tool types called "REXX". The "CLI" and "REXX" tool types are mutually exclusive. When a "REXX" type tool or project icon is double-clicked, it will bring up the familiar "Execute command" requester, placing the name of the file in the command line string gadget. Note: the CLI type projects are handled differently; their default tool is placed on the command line first. With the REXX type projects the default tool is ignored, since ARexx is more or less their "default" default tool. - Added new ARexx command "RX", which completes the set. This means that the ARexx interface is finally finished, feature-wise. workbench.library 44.1303 (12.9.1999) - To cycle through all info windows, hit [Alt]+[Cursor left] or [Alt]+[Cursor right]. - [Alt]+[Cursor down] now opens the first selected drawer and not the first drawer around. - The "Put away" menu item now also works on fake icons. - In the ARexx interface, the GETATTR command will no longer throw Enforcer hits when checking the 0th element of an empty list. - The ARexx "RENAME" command no longer insists that it also must be able to rename a file's icon. - "Copy" now duplicates all selected files/drawers. - "Unsnapshot" no longer stops as soon as it hits a fake icon; it now continues without trying to do anything to the fake icon. - Closing a drawer window now has the effect of activating its parent drawer window, if that window is currently open. - ARexx window resizing and depth arrangement commands no longer operate on backdrop windows. - The [Alt]+cursor key events no longer cause backdrop windows to be depth arranged. - In "View by text" mode, a trashcan is now reported as such. - When browsing through the icon list displayed in the root window with the keyboard, the view no longer scrolls. - When moving through a "View by text" mode drawer by keyboard, the view doesn't jump around horizontally any more. - Cleaned up and simplified the code that displays the Workbench backdrop patterns. - One easy way to crash Workbench was to change a file in a "View by text" mode drawer. Fixed [Frank Mariak]. workbench.library 44.1311 (13.9.1999) - Updating a file's icon no longer causes its size to be reset to 0 in the "View by text" mode display. workbench.library 44.1334 (17.9.1999) - Icon drop zones in AppWindows were registered as being one pixel too narrow/small. Fixed. - The ARexx commands WINDOW and ICON sport new parameters. - The info window now sports a new switch "Prompt for input:", to be used for Shell programs and ARexx scripts. This switch corresponds to the new "DONOTPROMPT" tool type which will keep Workbench from showing the "Enter command and arguments" requester when a Shell program or ARexx script is to be executed. If the switch is in effect, Workbench will execute the command just as if the user had simply hit "Ok" in the requester. This new switch has several benefits. For example, you can now write an ARexx script to rebind the keyboard shortcuts and menus and drop it into the WBStartup drawer. Workbench will quietly execute it (provided, of course, that the RexxMast program was started first) instead of prompting for additional command arguments which may not be needed in the first place. - The ARexx interface didn't pass all 16 possible command line parameters to its commands (the last one was passed twice). Fixed. - Cleaned up the code that handles keyboard driven icon selection and window view movement. - Fixed an Enforcer hit in the info window keystroke activation code. - Finally took out the workaround that made the cycle gadget keystroke activation code in the info window work, thereby removing the bug which it masked. - Fixed a layout bug in the info window, which would cause the layout fallback code to fail for taking the sizes of gadgets into account that wouldn't go into the window. - The code to invoke ARexx programs didn't properly clean up after itself when running a program without providing for an output console. workbench.library 44.1336 (18.9.1999) - The window backfill code used when the windows are opened now really does "nothing" at all. workbench.library 44.1338 (20.9.1999) - When rebuilding the library without internal header files, the linker pulled in stub code from amiga.lib, which caused Workbench to crash during startup. Ouch. workbench.library 44.1345 (20.9.1999) - More fixes for FastIPrefs compatibility in IPrefs V44. workbench.library 44.1347 (21.9.1999) - The "Start from:" option as used by the info requester didn't get set up properly. Fixed. workbench.library 44.1349 (23.9.1999) - Added six more previously unlocalized strings to the catalog descriptor. workbench.library 44.1372 (25.9.1999) - Workbench trashed one of its two temporary string buffers when rereading an icon that had just been written to disk. This was most visible with the "Copy" menu command. Fixed. - The ARexx "RENAME" command could lose memory. Fixed. - Workbench never acknowledged memory allocation failures when renaming a disk or when a new disk was inserted. Fixed. - The GELs cleanup code left stale pointers in the Workbench icon object data structures, leading to illegal memory references lateron. Fixed. workbench.library 44.1377 (26.9.1999) - The file/drawer copy code lost a FileLock when copying data into a drawer that existed both in the source and the destination. - When replacing a file or drawer, the copy code now restores the progress gauge title after deleting the object to be replaced. - Updated the built-in catalog strings again, "normalized" the capitalization of certain words and removed one or another anthropomorphism. workbench.library 44.1396 (26.9.1999) - Fixed a very, very obscure memory leak in the info requester code. That was one of the most cleverly hidden bugs I ever had the "pleasure" to find and remove. workbench.library 44.1401 (27.9.1999) - The ARexx GETATTR command didn't complain if stem data was requested but no stem variable was provided. It should have done this, but a typo prevented it. It threw Enforcer hits instead... - [Cursor down] when hit in a drawer window always moved the window view by a single pixel. It shouldn't have done that. Fixed. - "Icon" size calculation was wrong in "view by text" mode. Fixed. This also solves the problem with the left/right cursor keys selecting unexpected icons. workbench.library 44.1404 (29.9.1999) - Added more sanity checks to test the active icon being dragged in the GELs code. workbench.library 44.1406 (30.9.1999) - Workbench crashed when trying to read the default icon for a volume which didn't have a device attached, such as is the case with NFS volumes mounted through Carsten Heyl's client software as shipped with AmiTCP. I changed the strategy for finding a corresponding icon for these kinds of volumes. Instead of looking for a "sys/def_.info" icon file, Workbench now looks for a "sys/def_.info" icon file. Similarly, for devices to be hidden, the test now keys off the volume name if no matching device can be found. workbench.library 44.1413 (30.9.1999) - When dragging an icon through a drop zone, opaque/transparent icon image transitions could fail. Fixed. workbench.library 44.1414 (4.10.1999) - Miscellaneous changes. workbench.library 44.1427 (7.11.1999) - Holding down the right [Amiga] key whilst dragging an icon only limited the direction of movement to a specific axis if the mouse was moved downwards or to the right. Fixed. [19991106:1] - When Workbench fails to load a program to be launched from the "SYS:WBStartup" drawer, it no longer attempts to start it either. [19991106:2] - Using [Del] and [Backspace] in the tool types editor no longer leaves junk at the end of the list. [19991106:3] - In "view by text" mode, when sorting by date, drawer contents are now sorted newest entries first. [19991106:4] - The AddApp..() routines now verify that the Workbench is in fact open before they proceed to do something about windows, icons and menu items. [19991106:5] workbench.library 44.1452 (13.11.1999) - Closing a drawer could reference the drawer's parent, even if that drawer had been closed before. [19991110:1] - Dragging an AppIcon which knows how to render itself would place the drag handle incorrectly. Fixed. [19991110:2] - The chunk of memory allocated for copying file data can no longer end up allocating the largest available block of memory. [19991113:1] - Simplified the handling of the progress gauge. [19991113:2] - The file/drawer duplication code triggered by the Workbench "Copy" menu failed to update the progress gauge properly. [19991113:3] - Simplified and clarified the code that used the gauge to track its progress, such as the code that deletes data or the copying code. [19991113:4] workbench.library 44.1455 (20.11.1999) - In the info window, icons with empty tool type lists did not get handled properly. [19991114:1] - Rewrote the volume size calculation code to use 1024 as the base. workbench.library 44.1479 (30.11.1999) - Scanning and processing of "SYS:WBStartup" contents no longer clashes with OpenWorkbenchObject() start and cleanup operations. [19991128:1]/[19991129:1] - The code didn't properly cache SysBase, leading to a slowdown. Fixed. - Now allows the icons of volumes to be snapshot which don't have any disk icon to start with. [19991129:3] - When dropping icons on an AppIcon, failing to build the entire list of parameters will cause the drop action to be stopped rather than executed. [19991129:4] - The delete/copy/move/etc. progress gauge now finally fills properly. An optimization I had put in for the benefit of the file copy code caused drawers to be registered twice, which had the effect of making the gauge fill up much faster than expected. - Instead of reallocating memory for every file and drawer to be copied Workbench now allocates the memory once when it begins copying, keeps using it for every file to be copied and eventually releases it when the process has completed. This has a drawback in that the memory alignment may not be optimal for every device involved, but then it wasn't optimal in the original design either: source and destination device may not share the same block size. - When copying drawers, their icons will no longer change positions when the copying process has finished. A typo prevented the correct icon position from getting propagated. [19991130:1] - Except for the few special cases that don't allow for any other options (e.g. creating Tasks and Processes) Workbench will no longer reference AbsExecBase. - Workbench didn't properly remove its ARexx port. Fixed. [19991130:2] workbench.library 44.1499 (24.12.1999) - "Snapshot All" no longer triggers AppIcons. [19991205:1] - Adding a nameless AppIcon, i.e. with a NULL name pointer, no longer throws Enforcer hits. Workbench will quietly convert the NULL pointer into a pointer to an empty string. [19991224:1] - Workbench no longer caches DosList entries that may or may not still be attached to disk icons. In place of the DosList pointers we now use the VolumeNode associated with the lock on the disk's root directory. That should work around the mysterious tricks CrossDOS uses to update its volume data. [19991224:2] - Fixed the "Workbench freeze" bug which would occur, for example, if the menus were displayed and an application was trying to remove an AppIcon: Workbench would freeze up as soon as the menus would be removed. The reason for the freeze was pretty embarrassing: elementary computer science! Never obtain locks in the wrong order... - Calling "Update" on a "View by text" mode drawer no longer shoots the sorting order to hell. [19991224:3] - When changing the protection flags of a file or drawer whose parent directory is currently being displays in "View by text" mode, Workbench will attempt to update the file information as soon as you hit the "Save" button of the information requester. Unfortunately, due to how Workbench works, this update won't take place unless the file/drawer whose protection bits you changed really has an icon attached. If there's no icon associated with the file, Workbench won't bother and update the display. [19991224:4] - The ARexx "MENU .. INVOKE .." command now properly pays attention to whether the respective menu item is currently available or not. [19991224:5] - Trying to drag a file or drawer into a trashcan on a different volume now produces an error. [19991224:6] - Workbench no longer allows you to copy a drawer into itself or into one of its subdirectories. [19991224:7] workbench.library 44.1501 (4.1.2000) - Updated the german catalog file: the same keyboard shortcut was used twice in the "Information" requester. - The "Rename" and "New Drawer" commands now make sure that the name entered is not longer than the filing system allows. That check used to be done right after the name was entered. I also added some new code that checks if the name entered contains directory control characters, in case somebody has forced them into the buffer [Thomas Richter]. workbench.library 44.1511 (11.1.2000) - The AddAppMenuItem() function is now completely synchronous, i.e. it will return when the menu has been rebuilt or when the new menu item could not be added. - The AddAppMenuItem() function now allows you to create sub menus and add sub items. The ARexx interface also supports this functionality. workbench.library 44.1514 (14.4.2000) - By public request, there is now a Workbench option which causes the Workbench title bar to be hidden. If the current day is a Tuesday, the mouse pointer will be hidden instead. - The ARexx SIZEWINDOW command now properly changes the window size to the given dimensions. - The ARexx MOVEWINDOW command now properly changes the window position to the given coordinates. - The Scale() routine now tries to detect numeric overflows in a different fashion. [20000320:1] - Put in another test to check for NIL: file handles in the copying code. Copying will be skipped. [20000403:1] workbench.library 44.1527 (27.5.2000) - Replace all the checks for multiplication overflow with a routine that really safely detects overflows. That was a tricky one... [20000515:1] - Wrote my own special directory scanning code, intended to replace the use of MatchFirst() and friends. [20000516:1] - Worked around a deadlock situation that could be triggered by AddAppMenuItem(). [20000516:2] - Fixed a bug in the ARexx "INFO" command, which previously failed to display the icons of volumes. [20000527:1] workbench.library 44.1540 (11.6.2000) - Fixed a number of novel and interesting bugs in the directory scanning code I'd written. The credit for finding them goes, as so often, to Thomas Richter. - The ARexx "MENU" command could end up freeing menu entries it should never have even modified, due to a loop counter being mistaken to point to a data structure in need of deallocation. Ouch. What a stupid mistake. On top of that, the code that should have cleaned up after a failed attempt to add a new menu didn't even check whether the temporarily allocated menu item was even initialized, and thus could cause Enforcer hits to be thrown. My, I must have been in some shape when I wrote that code! Fixed. [Nils Goers] workbench.library 44.1547 (15.6.2000) - The "Information..." window code that counts the number of files, drawers, blocks, bytes, etc. in a drawer or volume now knows how to deal with byte counts beyond 2^32-1. As usual, this "little" trick was more difficult to pull off than it originally appeared to be. Note that you need a new catalog to use this feature. workbench.library 44.1551 (19.6.2000) - No longer allows file, drawers or volumes to be named "*". - Copying now skips files named "*". - Now copies drawer icons again. - Scrolling in "View by text" mode drawer windows no longer ends up omitting directory entries. workbench.library 44.1552 (16.8.2000) - You can now use multiple and drag selection to trigger 'Tools' menu items. I really wonder why that feature was always turned off in the code [2000-08-16:1]. workbench.library 44.1553 (6.9.2000) - Copying code used to look for the largest fast memory block available. It shouldn't have done that. The code now looks for the largest memory block of any type available. workbench.library 44.1558 (8.9.2000) - Rescanning a directory that is in 'view by text' mode no longer crashes if that directory has any open children. workbench.library 44.1559 (8.9.2000) - Left out icons can be deleted again. workbench.library 45.2 (5.10.2000) - The menu event handling code now gracefully recovers should ItemAddress() return NULL [2000-10-05:1]. - Trying to close a drawer window via ARexx will no longer leave locks around that will go away only when the respective volume's top drawer is closed [2000-10-05:2]. - Duplicating drawers didn't work as it should, the drawer icons getting omitted on the way. The reason was that the copying code stumbled over the directory scanner's strange behaviour. Fixed [2000-10-05:3]. - Added the new hooks that allow you to replace the copying and deletion code and all other operations that make Workbench request input from the user. workbench.library 45.38 (2.11.2000) - Added new tags to OpenWorkbenchObjectA() to control the show/view mode of the drawer being opened. - Added new menu item "Find" to 'Window' menu (*don't* ask why it ended up in that particular menu). This item is always available, and when selected will launch the program "SYS:System/Find" as a shell program (doing it any other way would have been too complicated). When launched, the Find program's current directory will correspond to the drawer associated with the then currently active window. This allows you to restrict find operations to the drawer they were invoked from. - OpenWorkbenchObjectA() now supports file-less project icons. - Added an evil mega monster kluge to work around OpenWorkbenchObjectA() crashing when freeing a WBStartup message. I hate this. But I hate it even more if after ten hours of searching there still doesn't seem to be anything wrong with the code! workbench.library 45.49 (5.11.2000) - When opening a tool with several other icons selected, including an AppIcon, the argument list to be prepared for the tool would overflow, resulting in memory getting trashed. Fixed [2000-11-5:1]. - I forgot to remove the debugging code I added to the OpenWorkbenchObjectA() launching routines, rendering this function essentially useless. Fixed. - Another one bites the dust. Finally found the reason why it was almost guaranteed that a crash would follow a program getting launched by OpenWorkbenchObjectA(). Turned out that the bookkeeping information Workbench maintains for each running program was added *twice* for programs launched by OpenWorkbenchObjectA(), messing up the list in which it was stored. This led to no end of trouble lateron and was insanely difficult to track down. Nevertheless, found & fixed. workbench.library 45.77 (8.11.2000) - Found a couple of interesting and novel bugs in the AppMenu creation code. Items with submenus attached that had all their submenu items removed did not get deallocated. Fixed. - Spent altogether far too much time trying to rewrite the remaining menu handling code to allow evil hacks such as ToolsDaemon to survive. Drew a complete blank. Found a possible way to add new menu titles to the strip, though, which is what you'll finally get with this version. And please, don't ask! - "SYS:System/Find" is now launched as a Workbench process. - Modified the delete and text input hook code to allow the respective actions to be skipped and the original Workbench code to be used in their places. Please consult the new autodocs as the hook function descriptions have changed significantly! workbench.library 45.85 (14.11.2000) - Workbench now maintains some sort of 'partial history' of which window used to be the last active one. This can be queried through the ARexx interface only, though. - Discovered that the APPLICATION.LASTERROR ARexx attribute was never filled in. Fixed. - In the Info requester, the 'readable' checkbox is no longer permanently enabled. - The Info requester no longer retries saving an icon if the first attempt to make it writable failed. - The copy code no longer allows you to replace and thereby delete left out icons. Problem is that the code responsible for cleaning up after left out icons to be deleted is so convoluted that I don't have the courage to venture into it any deeper. Maybe next time... - Added hooks that allow code to be run just before Workbench shuts down and after it has initialized itself. This is, however, not what you may have expected. IPrefs has its own say in whether it allows the Workbench screen to be closed or not. So whatever windows your code may open on the Workbench screen will be included in IPrefs' tally, preventing IPrefs from allowing the screen to close unless you take special measures. - Updated the assembly language header files. workbench.library 45.96 (16.11.2000) - The ARexx interface now allows you to add new menu titles beyond the "Tools" menu. workbench.library 45.97 (18.11.2000) - Text input hook invocation did not properly test the result code. Fixed. - The 'Find' program was almost always launched with the wrong number of parameters. Fixed. workbench.library 45.99 (23.11.2000) - The "Execute..." requester no longer remains empty for the text input hook code. - Made the UpdateWorkbench() function public. workbench.library 45.101 (23.11.2000) - The 'empty trash' hook code would release a drawer lock which subsequent calls would rely upon to stay intact. Result? Crash. Fixed. - Similar problems in other sections involving callback hooks. Fixed. - Fixed a nasty bug in ChangeWorkbenchSelectionA() and dumped some of the most obscure Workbench code that dealt with the list of selected icons in strange, mysterious and apparently utterly useless ways. Curse you, Neil! workbench.library 45.102 (24.11.2000) - More corrections in the hook invocation code, especially the one that takes care of emptying the trash can. workbench.library 45.121 (8.2.2001) - In 'WorkbenchControlA()' the 'WBCTRLA_IsOpen' tag no longer returns TRUE for volume icons unless the corresponding volume's drawer window is currently open. - The built-in file/drawer copy code now skips hard linked directories altogether and avoids soft links, too. - Trying to delete a hard or soft link to a directory no longer cleans out the contents of the directory linked to but rather removes the link itself. - Workbench now indicates that a drawer or file is in fact a linked object by underlining the object's label text. - In 'view by text' mode, drawers and file names are now printed in different colours. - In 'view by text' mode the length of the size/type field is no longer hard coded but adjusted according to the strings being used. - In 'view by text' mode the snapshot/unsnapshot menu items are now disabled. It was never really possible to snapshot/unsnapshot files and drawer icons in this mode anyway. - Made the 'snapshot window' and 'snapshot all' menu items work even if the parent directory is not in 'view by icon' mode, provided that the icons to be snapshot have 'real' icons attached. - The ARexx 'INFO' command no longer causes the main Workbench process to block. - Project/tool icons without associated files no longer show up in 'view by text' mode as files with the size of the icon file. Instead, a file size of zero is displayed. This was actually a fix for a kludge in the original Workbench code. - If necessary, 'UpdateWorkbench()' now makes up an icon to show up in a drawer which is in 'show all files' mode [Stephan Rupprecht]. workbench.library 45.125 (15.2.2001) - The copy code also counted linked directories and files, which the actual copying process skipped. - A running ARexx process no longer delays Workbench prefs changes. - Soft linked objects which do not allow themselves to be examined will no longer show up in the directory lists. Same thing for the initial scan of the WBStartup drawer. - In the information window, the code that counts the number of directories now ignores linked directories. workbench.library 45.127 (21.2.2001) - Adding characters to the tool types text could cause the final NUL terminator to be lost, resulting in the displayed information to be trashed. Similarly, deleting from the end of the text could also cause the terminator to be removed. Both cases are fixed now. The code also plants a new NUL terminator at the end of the text every time a change is made. ------------------------- AmigaOS 4 project -------------------------- workbench.library 45.128 (28.2.2002) - A maximum of 31 sub items can be added to a Workbench menu item, not 15 (as the autodocs say). Fixed. workbench.library 45.134 (14.3.2002) - Dropped some more unused code that nobody would want to use [20020314:1]. - Memory management for free lists now calls into icon.library rather than using the Workbench-private equivalent routines [20020314:2]. - The 'view by text' display now tries to waste less memory, if that's possible [20020314:3]. - If an AppMessage cannot be sent to an AppIcon or AppWindow, then the message itself will finally be deallocated rather than end up hanging around till the next reboot [20020314:4]. - Before a Workbench tool is launched from a project icon, the launcher now attempts to read the tool's icon (if there is one) and updates the amount of stack space the tool is to be started with. The old code fell back onto a default value if there was no proper stack size registered in the project icon. Still, that value may not have been enough, and the proper value would be stored with the tool's icon. The new code now increases the stack size, if that's what the tool icon suggests [20020314:5]. - When changing the icon selection list using [Ctrl]+Mouse click the menu strip contents were not updated in time, which led to all kinds of trouble, such as the "Delete..." menu item staying enabled even if there was no icon selected any more [20020314:6]. - The key conversion code that would allow you to select icons by entering the first few letters of their names could get letters wrong which required you to hold down any [Shift] key. This could cause some names to be unselectable or select icons with the wrong names [20020314:7]. - Even broken soft links now show up in the directory lists. They can be identified only in 'view by text' mode. For the icon view they will show up as links, but you won't be able to do anything with them other than deleting them [20020314:8]. - If the Workbench debug option is in effect, one less menu will fit into the Workbench main menu strip. This is finally taken into account for AddAppMenuItem() [20020314:9]. - Renaming an object now tries to get away with redrawing just the object that changed rather than having to redraw all the icons in the same drawer [20020314:10]. - The copying/moving code now checks specifically if the user is trying to put a directory into one of its subdirectory [20020314:11]. - Creating a new drawer in a view-by-text mode drawer no longer destroys the sort order. However, the newly created drawer may not be visible after creating it, on account of having been 'hidden' due to resorting the list [20020314:12]. - Changed the order in the steps are taken when a directory is to be created. Previously, the data structures required to display the directory were created before the directory itself was created [20020314:13]. - If a copy hook is installed, copying finally works for more than a single object. A weird function return code caused the entire operation to be aborted after the first object was processed. Fixed [20020314:14]. - The 'view by type' drawer display mode can now be snapshot and will not be reset to 'view by icon' [20020314:15]. workbench.library 45.142 (15.3.2002) - Cleaned up the source code line indentation in the "app.c", "menus.c" and "incoming.c" files. - Creating user menus through AddAppMenuItemA() would forget to store a pointer to the data structure that contained the menu and the administrative information. Thus, removing the menu through RemoveAppMenuItem() would fail to release all the memory allocated for it [20020315:1]. - Clicking on a drawer window scroller without moving it no longer has the effect of decrementing the scroller position. This was a side-effect of the new scroller position getting recalculated again, which was subject to roundoff errors [20020315:2]. - Looks like the asynchronous copying code is better off without the complex throughput/time scaling code I put into it. Let's wait and see how it works after the lobotomy... [20020315:3]. workbench.library 45.151 (15.3.2002) - Found another cleverly-hidden bug in OpenWorkbenchObjectA(). Finally, it should be possible to launch programs without having to specify a complete path name as long as the program is found somewhere on the shell search path. This should also work for relative path names, which didn't work so well before [20020315:4]. workbench.library 45.161 (15.3.2002) - Broken soft links are now displayed like files rather than directories to match how asl.library treats them [20020315:5]. - Soft links to volumes could be displayed as disks, even inside drawer windows. That led to all kinds of trouble. The new code now checks the type of icon returned by icon.library, rejects disk icons for files/drawers and tries to find a better match for the type of object referred to [20020315:6]. workbench.library 45.165 (16.3.2002) - Cleaned up the "runtool.c" source code. - Implemented support for the $STACK: keyword embedded in program hunks [20020316:1]. workbench.library 45.166 (19.3.2002) - Fixed a potential buffer overflow problem in the nstrcat() routine [20020319:1]. -------------------- AmigaOS 3.1.4.(1) project ----------------------- workbench.library 45.168 (10.6.2017) - Moving a disk object into a subdirectory did not work because the check whether a directory is copied into itself was broken. Moving softlinks into directories is also always valid. workbench.library 45.169 (24.7.2017) - Copying soft- and hardlinks is now supported. - In case the workbench can predict that the icon name or text is not readable due to the lack of screen pens, default pens are now used instead. workbench.library 45.170 (24.9.2017) - The workbench detects now itself whether it can put gels into fast or chip memory, the API call to set the memory type is obsolete. workbench.library 45.171 (25.9.2017) - The computation of the capacity of a device was needlessly clumsy, fixed. - The computation of the filled percentage could overflow, then creating nonsense results. - The computation and display of the full drawer size was needless cludgy, fixed. workbench.library 45.172 (27.9.2017) - Computation of the fill percentage was still wrong in another place, namely the window title. The formula is used three times, and three times wrong... - Computation of the fill gauge level could overflow, and the overflow prevention mechanism was wrong, too. - Setting the gauge level had a race condition in the sense that the gauge was potentially not correctly updated. workbench.library 45.173 (28.9.2017) - There was still a max() operation in the window title percentage fill level. Unfortunately, the block count is indicated as signed quantity (due to the BCPL legacy) and hence cannot cope with very large devices. - The locales still use signed output for the block count, though the block count should be unsigned. This was fixed for the default locale. workbench.library 45.174 (7.10.2017) - Fixed a crash if the volume gauges were disabled, though the linkage of the disk object was not updated accordingly to reflect the change. workbench.library 45.175 (12.10.2017) - The workbench placed a couple of patterns for the shaded cursor, the background of the copy gauge and the shaded icons not in chip mem, hence causing graphical glitches if the system operated on the native graphics. Fixed. workbench.library 45.176 (12.10.2017) - This is an experimental release that was compiled in a different way to avoid reloading the library base every other instruction, hence giving more efficient and shorter code. Still requires careful testing. workbench.library 45.177 (18.12.2017) - Fixed an off-by-one error when copying file names from the file name input requester. - Window tags for the execute/rename input window where initialized incorrectly, giving rise to a misplaced text that appeared incorrectly in the middle of the window title. workbench.library 45.178 (6.1.2018) - Added a workaround for file system that do not communicate the file system state correctly and instead report the partition type in the InfoData structure. - Simplified the algorithm a bit that determines the memory type for the icon storage. workbench.library 45.179 (6.1.2018) - Reduced the stack usage of WBInfo() dramatically. Still, stack usage is still too high, but at least in reasonable dimensions. workbench.library 45.181 (21.1.2018) - A little bit of code cleanup and removal of legacy pre-ANSI C function definitions. workbench.library 45.182 (25.1.2018) - If the screen estate is too small to render the info window, the icon drop zone and icon image is now removed from the window, and rendering is attempted again, with the standard topaz.8 font and a bare-bone layout. This seems to work even on NTSC. workbench.library 45.183 (4.2.2018) - The workbench uses now BumpRevisionLength() if it is available, allowing icon names longer than 30 characters if the file system supports it. workbench.library 45.184 (17.2.2018) - The copy gauge did not centre very well on autoscroll screens; this has been fixed. Centering execute/rename windows has currently been disabled. The mouse has to travel too far from the menu to the buttons, which makes this inconvenient. Instead, the window opens now top-left relative to the current position of the autoscroll screen. workbench.library 45.185 (23.2.2018) - Rebuild with the new locale build mechanism. As a result, wb became again shorter, and got a new locale, as well. workbench.library 45.186 (5.4.2018) - The workbench makes now several attempts to shorten the file names for making duplications of files. This is better than receiving a failure from the icon.library later. workbench.library 45.187 (20.4.2018) - Performed a bit of compiler cleanup and also renamed the "SAD" menu entry to "Debugger" which is more appropriate. workbench.library 45.188 (4.5.2018) - The workbench is a bit more careful now when selecting the pens for the icons and tries to work around faulty return codes when testing the bitplane depth of RTG screens. - When moving objects, and moving the icon failed, the workbench now moves the object back to its original place. Previous versions could have created inconsistent states where the object was moved away, but the icon was not. workbench.library 45.189 (6.5.2018) - When allocating pens through the workbench Control function, the workbench was unaware that intuition already reserved pens at the upper end of the palette for our use, hence ObtainPen() failed, and hence the API call left the colors untouched. Workbench pokes now the colors using SetRGB32() since these pens are set aside for us anyhow. - The workbench control function could have also set sprite colors. This is, however, undesired as they are not part of the GUI but controlled through the pointer preferences. workbench.library 45.190 (20.5.2018) - The Find menu item is now ghosted if SYS:System/Find does not exist. - The Delete progress gauge was driven incorrectly top-level and hence caused situation where the gauge could run backwards. workbench.library 45.191 (27.5.2018) - Apparently, accepting arbitrary disk types as valid had side effects of unformatted partitions disappearing. This is just a bad idea. Instead, I now only accept DOS\x as valid file partitions and leave it to file system authors to fix up their mess. - The workbench now accepts non-DOS\x types only if there is a non-zero volume node attached to the InfoData structure. Maybe this helps better. workbench.library 45.192 (20.7.2018) - Putting a device name on the hidden device list had the unforeseen side effect of mounting the hidden device, which was probably not intended. workbench.library 45.193 (1.9.2018) - Workbench uses now the V45 RVI interface in the rexxsyslib.library and no longer the statically linked version from amiga.lib. workbench.library 45.194 (23.9.2018) - There was still a potential race condition in LibOpen() that might have caused inconsistencies if two tasks opened the workbench right at the same time. This is because the intuition class creation code may break a Forbid(), and hence may allow another task to run into LibOpen(). Highly unlikely, but let's make things right. - Workbench no longer provides coordinates for the execute and rename window as intuition will provide them anyhow, and in case of v45, will even nicely move the window to the mouse pointer. ------------------------------ AmigaOS 3.2 project ------------------- workbench.library 45.197 (1.12.2018) - In case an assign was listed (probably by pure chance) on the list of hidden devices, the corresponding device was hidden from the workbench, which was probably not intended as the assign was not shown in first place on this list. workbench.library 46.1 (3.8.2019) - Workbench now supports a configurable Screen Title Bar text. The title can be defined via Workbench Preferences Editor. It may contain numbers, text and Title Format Items. The following Title Format Items are currently being supported: - %e : an environment variable - %m: memory, can be further specified by up to three additional chars. The next char defines the type of memory. Memory type: c : Chip Memory f : Fast Memory Memory block: e : free memory u : used memory t : total memory l : largest block available Memory unit: b : bytes k : kbytes m : mbytes q : percent of total Example: "%mcuq" would display the amount of ChipMemory in use as percentage of total. workbench.library 46.2 (8.8.2019) - The %vk token would take the kickstart revision from the wrong source, which is now fixed. %vw did not work, but uses now the version library for this job. By compile time decision, this is always identical to the workbench library version. The following tokens were not documented before: %c is the CPU version, and %f the FPU version. workbench.library 46.3 (21.8.2019) - Added a configurable time to support the preferences setting for the Screen Title Update Delay. workbench.library 46.4 (24.8.2019) - Replaced the Boyer-Moore search algorithm by a considerably faster implementation. workbench.library 46.5 (24.8.2019) - Added support for the following new Title Format Items: - %r : Release Version Information - %i: : System Information, can be further specified by an additional chars, which specifies the information item. p : default Public Screen's name s : number of open Screens d : name of the active drawer i : number of currently selected icons r : number of running programs a : number of active disks Example: "%ir" would display the number of running programs - The machine's CPU name is now being stored in WorkbenchBase workbench.library 46.6 (24.8.2019) - Fixed a bug in CPU Title Format Item generation workbench.library 46.7 (7.10.2019) - While the workbench did update volumes of the doslist, it did not refresh devices. In case a device went away or changed its port, workbench did not update the entry in its ActiveDevice list to reflect such a change. workbench.library 47.1 (13.10.2019) - Bumped to 47.1 to avoid problems with FixRomLibs which would otherwise remove the library from the resident list. workbench.library 47.2 (1.11.2019) - The %r format specifier would insert random characters in the screen title bar text if the "Versions/Release" environment variable wasn't defined, due to an uninitialized buffer (dos.library/GetVar() leaves the buffer unmodified in case of failure). Now fixed. workbench.library 47.3 (17.11.2019) - Sorting by size was using 32 bit signed difference, generating wrong results for files > 2GB. - Printing the size of the a file in the "view by text" mode used %lD as qualifier rather than %lU, generating negative numbers for files larger than 2GB. workbench.library 47.4 (23.11.2019) - The information window now also appears under the mouse cursor, unless another information window is already open, in which case the new window is staggered under the already present window. workbench.library 47.5 (28.11.2019) - In case the workbench screen was reopened with a smaller screen mode, the text of backdrop icons could have been positioned outside of the visible screen. workbench.library 47.6 (20.12.2019) - The execute window of the workbench falls now back to topaz.8 in case the window does not fit on the screen. workbench.library 47.7 (30.12.2019) - The information window edit class did not set the GMORE_SCROLLRASTER property and hence failed to refresh the gadget contents properly when parts of the gadget were occluded. - The version information of a file can now be retrieved from the information window of the workbench by clicking on the file name. workbench.library 47.8 (1.1.2020) - Closing a drawer via menu could cause an illegal memory access since Workbench was referencing the drawer's parent after the operation, even if it had been closed and deallocated itself before. Now fixed. - Activating the Information requester's tool type editing gadget via its label shortcut does no longer cause a byte read from address 4. - Over the past 30 years, Workbench has been allocating eight times as much memory as actually needed for the file name icons displayed in view by text drawers. On a non-RTG machine, this could quickly drain CHIP memory when opening highly populated drawers. Now fixed. - After a screen close/reopen transition, Workbench would (for a short time) reuse the menus that were built with a VisualInfo derived from the former screen; this might have ended up in referencing no longer valid memory (not possible with the current gadtools.library, but a potential issue with future versions). The reopened windows will now only get their menu strip once it's been rebuilt for the new screen. - Added a protection against drawer icons reporting huge view origin coordinates, which could make the Workbench lock up or crash. - Fixed a bug which would cause illegal memory accesses if a program tried to add an AppIcon while the Workbench screen was closed. - When closing and reopening the screen, Workbench will not "forget" anymore to reopen some of the drawer windows that were closed during the transition (item B18455 in the old C= Amiga bug database). - No longer brings up a confirmation requester when the user invokes the "Delete..." menu item on one or more AppIcons, unless some file or drawer icons are selected as well. In the latter case, the file count shown in the requester won't include the AppIcons (bug #579). - A new "Open volume" submenu is now available in the "Workbench" menu, providing an alternative way to quickly access mounted volumes whose icons in the root (backdrop) window are covered by other windows. - Optimized window scrolling a little, by not attempting to render any icons lying entirely within obscured cliprects. - Slightly optimized window refresh, again by skipping any rendering of icons outside visible cliprects. - Attempting to rename "foo" to "foo.info" with the built-in "Rename" requester does now work as expected, regardless of "foo" having an icon or not. It used to fail if the icon existed, and to change the file's name to "foo.info.info" if it didn't. - Icons dropped over a drawer or disk icon ended up being snapshotted at position (0,0) if the target didn't have an open window, but any of its sub-drawers did. Now fixed. - When dragging icons, the right [Amiga] key would always restrict the direction of movement to the same axis as the last time it was used, regardless of which way the mouse was moved, unless some free (i.e. non-restricted) dragging was made since then. Now fixed. - The "Update" menu item can now be used also with the root window; in that case it will simply move any properly snapshotted icons back to their original position. - If selected while keeping a [Shift] key pressed, the "Update" menu item will now once again reset the active drawer's origin position. - The internal references to the last and current active drawer window weren't being updated when opening a new window. Now fixed. - Calling UpdateWorkbench() to remove an icon from a text mode drawer was unnecessarily refreshing the drawer's contents three times after the operation. Now it only refreshes the contents once. - The tags for the experimental disk info hook have been renumbered to avoid a conflict with the OS 4.x workbench.library API. However, for the time being the previous tag numbers are still supported in order to ease the transition. (This support will be removed very soon, so make sure to update your include files!) - Moving the horizontal scrollbar of text mode windows all the way to the right does now reveal even the last bits of the text; previously a few pixels could be left out due to a row width miscalculation. - An icon selected by typing the first letters of its name will now blink for a brief time, in order to make it easier for the eye to spot it in a window full of icons. - Arrow buttons of drawer border scrollers, if kept pressed, no longer start repeating their action immediately, but rather only after a short delay just like the buttons of GadTools/ReAction scrollers. The previous behavior would often require a few attempts before the user could manage to scroll the window to the desired position. - Icons without an associated file no longer pretend to be a file of zero bytes when appearing in text mode drawers; a dash ("-") is now displayed in the type/size field instead. - When reopening an open drawer's parent window, if it belongs to a volume, its disk fill gauge is now updated immediately, rather than only after a few seconds. - Happy New Year :-) workbench.library 47.9 (2.1.2020) - In case a file is renamed, but the target name is too long such that the icon name can no longer be represented faithfully, the rename operation now fails. workbench.library 47.10 (3.1.2020) - Due to the presence of the version tag in the version scanning method, version could no longer find the version of the workbench. Bummer! workbench.library 47.11 (2.2.2020) - Repositioning the cursor in the Information window's editing area always had the effect of redrawing the entire display, even when this was not really necessary. Fixed [fix by Olaf from V50.1]. - The maximum size of a window, as computed by the ARexx interface, is now bounded by the size of the screen. Previously, it could end up being much larger than the screen [fix by Olaf from V50.1]. - Replaced the WBStartup handling routines with Olaf's fixed version from workbench.library 50.48. The previous code would busy wait on PAL machines and could fail to correctly associate return messages to the corresponding launched tools, so that "wait until finished" behaved randomly when more than one tool was present in WBStartup, and at least one of them actually asked to wait. - Replaced all instances in which WaitTOF() was used to produce a short delay with calls to Delay() [fix by Olaf from V50.48]. - Replaced direct modifications of RastPort write masks with calls to SetWriteMask() [fix by Olaf from V50.61]. - Broken links finally show up in the "view by text" listing [fix by Olaf from V50.78]. - Double-clicking on a broken link is now ignored [fix by Olaf from V50.78]. - When calculating the maximum 'view by text' size column length, the "Link" label is now taken into account [fix by Olaf from V50.92]. - Closing a drawer in the process of being rescanned (as a result of selecting the "Update" menu item) would cause a write operation to already freed memory if the drawer hadn't any open sub-drawers and its parent drawer was closed and hadn't any other open sub-drawers either. Now fixed. - The RastPorts used internally by Workbench for measuring icon text size in "view by icon" and "view by text" mode were never properly set up via InitRastPort() before being used. They are now. - An icon moved or copied by dropping it over a drawer or disk icon is now always unsnapshotted, regardless of whether the target has an open window or not. Previously it would get snapshotted at an unpredictable position if the target's window was open (bug #126). - Dragging icons from a drawer in "view by text" mode to a drawer in "view by icon" mode no longer puts them in a vertical row with the same positions as their text representation in the source drawer; the icons are now unsnapshotted and repositioned automatically. - Once again, snapshotting a fake icon now turns it into a real icon. To prevent undesired side effects, this only happens for explicit targets, i.e. "Snapshot All" will generate an .info file for the active drawer, but not for any fake icons inside it (bug #702). - The "Unsnapshot" menu item, when applied to a drawer icon with an open window, had the side effect of snapshotting the position and size of the window; now that information is left unchanged. - The "Snapshot Window" and "Snapshot All" items of the "Window" menu no longer snapshot also the position of the icon the active drawer belongs to, since that is not their intended purpose (bug #126). - Snapshotting an icon living in the root window does now also make it automatically "left out", as the user will probably expect to find it still there after a reboot (why snapshot it otherwise?). - The "UnSnapshot" menu item is now disabled when no icon among the selected ones is actually snapshotted. - Icon dragging does now only start as soon as the mouse is actually moved; just clicking on an icon does no longer immediately display a bob on the screen. - Drag selecting is now also deferred until the first mouse movement after clicking inside a drawer window, in order to avoid locking the layers unless it's really necessary. - Icons which are just links and lack an associated file/drawer are now displayed with an underlined label [fix by Detlef from V51.25]. - Links appearing in a drawer window would get a label drawn without underlining if their associated (snapshotted) icon was found first during the drawer's scan. Now fixed [fix by Detlef from V51.25]. - UpdateWorkbench() does now check whether an added object is a link (rather than a file or drawer), and displays it with an underlined label if that's the case. Previously the added object didn't look like a link until a manual drawer update was performed. - Link objects added via UpdateWorkbench() used to be displayed with the name of the object they pointed to, rather than their own name. Now fixed. - Selecting "Leave out" for an icon living in the root window (but not already left out) would end up leaving a hanging lock on the icon's home directory, never to be released again. Now fixed. - Selecting "Put away" for a left out icon would cause a byte read from unallocated memory in case that icon was the first entry in the ".backdrop" file. Now fixed [fix by Detlef from V51.39]. - "Leave out" now also works for fake icons. - No longer performs a needless extra refresh after selecting "Show all files" for a drawer in "view by icon" mode. - Dropping a fake icon over a drawer where a real icon with the same name exists no longer changes the real icon's position. - Wherever it is relevant for display purposes, Workbench now tries to compensate for object coordinates being internally represented as 16-bit values; this could result in an integer overflow error, due to which icons that should have been very far out of view were instead appearing at random positions (second part of bug #1185). - When switching to "view by icon" mode for a "view by text" drawer which had never been in "view by icon" mode before, the automatic placing algorithm for unsnapshotted icons (whether real or fake) would be run without an adequate setup. This caused its execution time to increase quadratically with the number of (unsnapshotted) icons involved. Now fixed (third part of bug #1185). - The positions of any snapshotted icons living in Workbench's root window are now automatically updated after a screen mode change. Previously, if the screen was made smaller and then larger again, some icons could unnecessarily remain where they were moved to in order to fit in the smaller screen. - It is now possible to scroll the contents of drawer windows using the mouse wheel. Note: this currently requires a mouse driver that issues "NewMouse"-style wheel events. - Workbench's MOVEWINDOW and SIZEWINDOW ARexx commands will now try to compensate (to a reasonable extent) for the asynchronous nature of Intuition's window moving and sizing operations. - Workbench's ARexx query "GETATTR WINDOW.ICONS...WIDTH" and the matching "GETATTR WINDOW.ICONS...HEIGHT" would return the wrong values for the icon size, as they weren't taking the size of the icon borders into consideration. Now fixed. - ChangeWorkbenchSelectionA(), too, was passing wrong values for the icon size to its client's hook, as it wasn't taking the size of the icon borders into consideration. Now fixed. workbench.library 47.12 (6.2.2020) - Release version information is now being pulled only once when opening workbench.library. - Release version information is now displayed on the "About" requester. workbench.library 47.13 (16.02.2020) - Added support for outlined and shadowed icon text, see icon.lib workbench.library 47.15 (25.4.2020) - Placing automatically the same icon two times in a row will now make it end up both times at the same position, provided that nothing else has changed in its window between one placement and the next. This fixes an old problem where the AppIcon of an iconified program would not return to the place it previously occupied, if the program was deiconified and then iconified again. A side effect of this change is that the vertical spacing between automatically placed icons will now be greater by three pixels (i.e. will be equal to the spacing used for "cleaned up" icons). workbench.library 47.16 (24.5.2020) - Replaced the locale string lookup code with a safer version which does not go off the rails if asked to look up a string ID value which is not stored in the local CatCompBlock data lump. workbench.library 47.17 (03.jun.2020) - Fixed the scrollwheel handling in the icon information window. workbench.library 47.18 (9.7.2020) - Added a small workaround to the icon dragging routines to avoid crashes with CyberGraphX. Its SUPERGELS patch makes a few too many assumptions about the way Workbench handles its GELs internally, and a recent minor change in that area caused it to misbehave severely as a result. workbench.library 47.19 (10.7.2020) - Fixed the API functions OpenWorkbenchObjectA(), CloseWorkbenchObjectA() and ChangeWorkbenchSelectionA() so that they no longer leave unreleased locks on several directories after finishing their job. - Calling OpenWorkbenchObjectA() on a file with either "Start from Shell" or "Start from ARexx" set in its icon would leave a hanging lock on the opened object's parent directory; now fixed. - OpenWorkbenchObjectA() now checks that an icon's default tool string is actually non-NULL before reading from it. - OpenWorkbenchObjectA() now uses GetDiskObjectNew() instead of the plain GetDiskObject(). This allows the function to retrieve the default icon, and thus find out the appropriate default tool to use, when it's called to open a project file lacking a real icon. - When attempting to get the icon of an object found in the system search path list, OpenWorkbenchObjectA() would temporarily change the current directory and then forget to restore the previous one. Now fixed. - When calling OpenWorkbenchObjectA() to start a tool not residing in the current directory, a wrong lock would be left in the first entry of the Workbench argument array passed to the tool itself, therefore providing it misleading information about its own location. Now fixed. - When calling OpenWorkbenchObjectA() to open a project file found in the system search path list (i.e. one without an absolute path and also not residing in the current directory), a wrong lock would be left in the first Workbench argument passed to the project's default tool, which in turn resulted in the tool being unable to find the project after it was launched. Now fixed. - Opening a project file via OpenWorkbenchObjectA() would fail with error "file is not executable" in case the file's executable flag was not set and the file's icon asked for it to be started from Shell or ARexx. Now the executable flag for this kind of project file is ignored, just like it would happen if it were actually started from Shell or ARexx. - OpenWorkbenchObjectA() can now run an object having spaces in its name, even when its icon specifies it should be started in Shell mode. - When browsing the system search path list to locate a project or a tool not having an absolute path and not residing in the current directory, OpenWorkbenchObjectA() will now reject directories in case any is found having the same name as the object being sought. Previously this filter was missing, e.g. looking for "MultiView" could result in a "REXX:MultiView" directory being considered a valid match. - The various issues with opening the parent drawer of objects opened via OpenWorkbenchObjectA(), such as missing entries or lockups, should now be fixed (please report). - Hopefully fixed all known remaining OpenWorkbenchObjectA() issues which were related to opening drawers. The function will now try hard to take care of all that's needed to correctly set up Workbench's internal data structures in order to emulate a "real" drawer opening operation. - Corrected one last inaccuracy in the computation of the minimum/maximum horizontal coordinates for entries of text mode drawers. - Added a new API function, WhichWorkbenchObjectA(), that allows programs (e.g. commodities) to check if a mouse click at given coordinates would end up hitting a Workbench icon or window. - It is now possible to select the sort order (forward/reverse) for items in text mode drawers, with a new "Sort order" item in the "Window" menu. The sort order is saved in the drawer's icon at snapshot time. - You can now tell Workbench whether text mode drawers should show drawer names mixed with file names, all grouped together before file names, or all grouped together after file names. This requires at least Workbench (editor) 47.21 and IPrefs 47.15. - The "Resize to fit" menu item is now enabled also for text mode drawers, albeit only affecting the window's width. It will make the window just wide enough to display a whole row of text. - It is now possible to limit the scrolling in "view by text" drawers (by arrow buttons/keys or mouse wheel) so that their contents cannot scroll out of view when doing so would only bring empty space into view. This matches the behavior of regular GadTools/ReAction listviews. (Note: a control for this isn't present in the Workbench editor yet; it can only be changed programmatically via WorkbenchControlA() for now.) - You can now choose the default ordering of dates for all drawer windows ("newest entries first" vs "oldest entries first"). This global setting affects both "Clean up by date" and "View by date"; in the latter case, it determines what you get when "Forward" is selected as the sort order for a "view by date" drawer. (Note: a control for this isn't present in the Workbench editor yet; it can only be changed programmatically via WorkbenchControlA() for now.) workbench.library 47.20 (6.8.2020) - Non-disk icons living in Workbench's root window are no longer moved to their snapshotted position after a screen mode change, which was rather undesirable for left out icons. The "Update" menu item will still reset the position of snapshotted left out icons, though (bug #1603). - When launching a Workbench tool from a project icon, the launcher would fail to load the actual tool's icon (in order to read its stack size as well) in case the project's default tool had a relative path. Now fixed (bug #1712). - Scrollers of Workbench drawers once again adjust themselves immediately to reflect the new extent of their window's contents when they are used to scroll empty space out of view (bug #638). - Renaming an object would not update its drawer's horizontal scroller to reflect the new extent of the window contents. An icon label can become so long it no longer fits entirely in the visible window area, or short enough to fit again where it previously did not; whenever such a change occurs, the scroller is now adjusted accordingly. - When (re)computing the extent of a drawer window's contents, a padding of two pixels around icons is now added to the calculation, for a more pleasing overall appearance. This prevents icons from ending up placed directly against window borders after moving a scroller all the way to one of its ends. - The "Rename..." requester now places and sizes its gadgets correctly in the available space, even in case the window is too narrow for the name string to be displayed entirely (bug #1395). - When launching a project having a default tool without an absolute path, the tool would receive a WBStartup message whose first WBArg's wa_Lock pointed to the home directory of the project, instead of the one of the tool itself. Now fixed, except when the default tool is AmigaBASIC, for compatibility reasons (bug B18354, first reported in 1992). - If selected whilst holding a [Ctrl] key pressed, the "Update" menu item will now change the active drawer's origin position to the one saved in its icon (i.e. the one that drawer initially opened with). - OpenWorkbenchObjectA() would still pass a tool an incorrect name in the first WBArg when used to open a project file having a default tool with a relative path. Now fixed. - Doing an "Open parent" on the window of a left out drawer will now open the drawer's actual parent drawer, rather than activate the root window. workbench.library 47.21 (27.8.2020) - Dragging icons living in a "view by icon" drawer would redraw all other icons in the same window after each of the moved icons was erased from its previous location. This was done to restore the other icons in case they had been partly erased as well due to possible overlapping, and it usually didn't cause actual rendering to take place thanks to clipping; still, in most situations much unneeded work was being carried out. For instance, moving a group of 4 icons in a window with 10 icons would result in 36 superfluous DrawIconStateA() calls. Now Workbench won't even try to redraw any of the other icons unless it was actually damaged when erasing one of the moved ones. - Now caches the results of GetIconRectangleA() for each icon, instead of recalculating them over and over every time that information is needed. The cached rectangles are first computed when icons are read from disk, and then only updated when required, e.g. when a file is renamed or the user changes the icon font or border size. This optimization may speed up icon layout a bit on slower machines, in particular when performing a "Clean up", or switching from text view to icon view, on drawers containing a large number of icons (please report if you notice any difference). - The internal routine to render an icon was calling IconControl() before doing the drawing, to gather information which would then be completely ignored by the code. That redundant call has now been removed. - The net result of all the above: moving an icon with the mouse, even by just a few pixels, could lead to several unnecessary icon.library calls (GetIconRectangleA(), IconControl(), DrawIconStateA()) being made after releasing the mouse button. In place of that, now only one icon.library call is performed, to render the moved icon in its new location. - Moving or copying a file by dragging and dropping its icon would cause its source drawer to be refreshed twice if in "view by text" mode. Now it is refreshed only once. - Copying a file by dragging and dropping its icon would cause the target drawer to be refreshed twice, too, if in "view by text" mode. Now it is refreshed only once. - "Resize to fit" for drawers in "view by text" mode was doing nothing if the drawer's window was already wider than needed to display a full row of text; i.e. it could only enlarge but not shrink the width. Now fixed. - Now preserves all known DrawerData flags as defined by OS 4.x, even the ones that are currently ignored by the OS 3.x Workbench. They would get lost when writing a disk or drawer icon back to disk, which is not very nice from an interoperability standpoint. workbench.library 47.22 (29.8.2020) - The cached icon rectangles for newly inserted volumes were being set up too early, before the actual icon label had been established; now fixed. workbench.library 47.23 (3.9.2020) - Upon receiving the initial preferences settings from IPrefs, all cached icon rectangles would be recalculated even if the Workbench process had not started yet, which caused a hit due to trying to access a list that was still uninitialized. Now fixed (bugs #1767, #1778). workbench.library 47.24 (13.9.2020) - Now the screen title defaults string is formatted like all the formatted screen titles (as from the workbench prefs) workbench.library 47.25 (15.9.2020) - If a copy hook is installed, copying via "Icons / Copy" menu finally works for more than a single object. A weird function return code caused the entire operation to be aborted after the first object was processed. workbench.library 47.26 (11.10.2020) - Extra disk gronk was happening when a disk had been removed but the root drawer window was showing due to an attempt to updated the title bar text periodically. An extra test was added to see if the disk was already inserted first in that situation only which removed the unnecessary call to Info() causing the disk drive gronking. workbench.library 47.27 (13.10.2020) - Fixed a bug introduced in version 47.11 due to which the WBStartup code failed to notice a launched tool's termination and kept waiting for its startup message to be returned (bug #1387). - The WBStartup code would read from already freed memory when processing a tool termination message; now fixed. - Fixed NULL pointer access that was introduced in 47.26 (bug #1870). workbench.library 47.28 (13.1.2021) - Window refresh or resize events would cause an attempt to render icons in a "view by text" drawer even while it was still being scanned after having been opened. However, not enough information has been gathered yet at that stage to determine the correct width of the text icons, so Workbench could end up allocating too little memory for their image's data and then overrun its boundaries when writing the icon name to it, trashing other memory in the process. Now fixed by deferring any icon rendering in a text mode drawer until Workbench is done scanning its contents, which always was the intended behavior in the first place (bug #1933). workbench.library 47.29 (18.1.2021) - Now supports IDCMP_EXTENDEDMOUSE events for wheel scrolling. The same qualifiers available for cursor keys apply to these events as well. Legacy NewMouse IDCMP_RAWKEY events are still handled, in case an old (< V47) intuition.library is in use. workbench.library 47.30 (7.3.2021) - Changed the working of "Window/Update" when applied to the root window so that it tries to find a reasonable placement for all icons, instead of only resetting the position of snapshotted icons. - "Window/Update" is now performed on the root window at startup time to prevent properly snapshotted disk icons from appearing out of place if some non-snapshotted icons (e.g. a CD) were added first while scanning the mounted volumes. - Commented out some unused code. - Desktop icons repositioned to stay within display bounds after closing the screen and reopening it at a smaller size would end up all grouped together (and overlapping each other) in the lower right screen corner, due to a bug introduced in version 47.8. Now fixed. workbench.library 47.31 (08.03.2021) - Localized KB, MB, GB... and added missing B in some places workbench.library 47.32 (26.3.2021) - When starting up, icons living in the root window will now only appear after their initial rearrangement (as introduced in version 47.30) has taken place. - Performing "Window/Update" on the root window was needlessly redrawing all of its icons twice; now fixed. workbench.library 47.33 (31.3.2021) - The new rearranging code for desktop icons would misbehave and lock up the system when processing disk icons associated with invalid volumes. Now fixed (bug #2081).