---------------------- AmigaOS 3.5/3.9 project -----------------------

AsyncWB 45.0 (27.11.2000)

- First beta release.

AsyncWB 45.1 (28.11.2000)

- (hopefully) Fixed some enforcer hits that were reported by Mario.
  I couldn't reproduce it here but I found the place where the program
  could have thrown them.

AsyncWB 45.2 (1.12.2000)

- Starting the program a 2nd time terminates it.

- Can be started from wb, now.

AsyncWB 45.3 (7.12.2000)

- All texts except "Create Icon?" (New Drawer function) are localized 
  now. The workbench.catalog is used for that.

- The makedir function can create several drawers at once, now. For 
  example: 1/2/3 creates drawer 1 and 2 in 1 and 3 in 2 in 1 :).

- A few internal changes.

AsyncWB 45.4 (15.12.2000)

- Pressing tab doesn't terminate the textinput requester any longer.

- The "Create Icon?" text is now localized (the Q_ICON_MENU label is 
  used).

- Displays the greeting text (the text above the string.gadget of a 
  textinput request), now.

- For rename and new drawer the contents of the string.gadget will be 
  marked.

- When renaming/creating an iconless file/drawer, the contents of the 
  parent drawer will be updated via "wbarexx/MENU WINDOW.UPDATE".

AsyncWB 45.5 (16.12.2000)

- When renaming an object *with* an icon, the icon was removed from 
  the display without adding it to the display again. Bug was 
  introduced in 45.4.

- Replacing a drawer failed when the window of the drawer to replace 
  was open.

- When replacing an object its icon won't be overwritten anymore.

AsyncWB 45.6 (27.12.2000)

- Even for large drawers, the copy/delete progress window should 
  appear after 2-3 secs.

- Copying a disk should (correctly) duplicate its icon, now. when the 
  disk to be copied doesn't have an icon the default drawer icon will 
  be used (before def_disk was used).

- Fixed byte-write to #0 enforcer hit when sending arexx commands to 
  wb.

- AllegroCDFS returns ERROR_OBJECT_NOT_FOUND when trying to read 
  beyond the end of a file, the filesystem should simply return zero 
  for this case. AsyncWB takes care of this problem, now.

- The prompt of a textinput requester is now always marked.

- When a textinput requester went inactive, its string.gadget will be 
  activated again when the window becomes the active one, again. Don't 
  know whether the text should be marked again in this case.

- Rename doesn't put up an error requester any longer when the icon to 
  rename doesn't have a corresponding file or drawer.

- The button of the greeting message (the text above the 
  string.gadget) didn't have underscoring disabled.

AsyncWB 45.7 (31.12.2000)

- When copying an iconless file or drawer, the destination drawer will 
  be rescanned to update the display. That's not a perfect solution 
  but the best I can do for now (before an icon was created to update 
  the display). Don't like to create an icon and deleting it 
  immediately ...

- Deleting only icons (icons without a corresponding file or drawer) 
  didn't work because I forgot to set a variable back to NULL.

AsyncWB 45.8 (12.1.2001)

- When updating a drawer (after copying something) the program 
  (actually wb) could throw some enforcer hits because of a flag that 
  wasn't cleared. Thanks to David Rey and Mario Cattaneo for 
  reproducing the bug.

AsyncWB 45.9 (17.1.2001)

- Improved (soft)link support, possibly not perfect but the best I 
  could do.

AsyncWB 45.10 (24.1.2001)

- This version should really fix what 45.8 should have fixed ;)

AsyncWB 45.11 (13.2.2001)

- No longer rescans the drawer when changing/copying an iconless file
  in a "show all files" drawer, UpdateWorkbench() will be used to
  update the display, now. Requires at least workbench.library 45.121!

- No longer leaves filehandles open when skipping files that already
  exist on the destination.

- Misc changes and fixes not really worth to mention :)

AsyncWB 45.12 (19.2.2001)

- Deleting a drawerless drawer icon didn't work.

- Makedirs also works when the mother drawer is in use.

AsyncWB 45.13 (13.3.2001)

- Integrated Joanne Dow's makedir magic.

- Too sad it's not Friday ;)

AsyncWB 45.14 (17.3.2001)

- When the source does not have an icon but the destination, the 
  program no longer puts up the "Replace/Skip/Abort" requester.

AsyncWB 45.15 (6.4.2001)

- Now really handles "Skip All/Replace All" of .info files correctly.

- AsyncWB no longer spawns new processes for the rename/relabel 
  operation, this way there will be only one rename window at a time.

- Rename reselects the icon after renaming it, this is what wb does.

AsyncWB 45.16 (18.4.2001)

- Rename or new drawer no longer overwrite the command cache of the 
  execute command function.

- Holding down RAMIGA when clicking on the "Cancel" button (or 
  closegadget) of a rename window, will also cancel all queued rename 
  requests.

- Selecting a button of an inactive window won't be aborted any 
  longer.

- The delete progress window shouldn't come up too early, now.

AsyncWB 45.17 (10.6.2001)

- Now clones the filedate

- Makedir complains about already existing dirs, now.

- Some new code in 45.16 caused the delete/copy to abort when
  the user clicked on the progress window.

AsyncWB 45.18 (18.6.2001)

- Forgot to remove some debugging output

- The rename and newdrawer function allows to enter all wildcards.

AsyncWB 45.19 (15.8.2001)

- Now keeps the filename uptodate (lower-/uppercase) when replacing 
  files.

AsyncWB 45.20 (19.9.2001)

- Pressing Esc in a string.gadget cancels the requester, now.

AsyncWB 45.21 (25.10.2001)

- Added NOASYNC as an attempt to reduce CPU usage a bit on IDE
  based systems.

- You can drop icons on the "Execute Command" window, now.

- Also added a simple history function (use cursor up/dn keys) to the
  window.

- When entering an URL the program will attempt to open it in a
  browser (requires openurl package from the Aminet).

- Entering a path to a drawer opens the window of the drawer.

AsyncWB 45.22 (16.12.2001)

- Makedir accepts '/', again.

------------------------ AmigaOS 4 project --------------------------- 

AsyncWB 45.23 (28.5.2002)

- The code that ensures that you can't delete an object that
  is being copied is much smarter, now. It takes into account
  that one object could the parent of the other and also
  detects when the copy command fails. In this case the
  delete command will be aborted.

AsyncWB 45.24 (9.10.2002)

- The "Execute command" window remembers the command history
  even after a reset, now.

AsyncWB 45.25 (21.10.2002)

- Fixed LF bug introduced with 45.24.

AsyncWB 45.26

- Undid 45.24 feature.

AsyncWB 45.27 (22.3.2004)

- Ported to ppc.

AsyncWB 45.28 (7.4.2004)

- No longer relabels the wrong volume, if you happen
  to have two or more volumes with the same name. Please
  note that you also need the latest workbench.library
  to make this work.

AsyncWB 45.29 (1.5.2004)

- The "Execute command" window now remembers the command
  history, again. A fixed-size file is used to avoid
  invalidating the disk as Jrg suggested.

AsyncWB 45.30 (9.9.2004)

- Pressing tab doesn't terminate the textinput requester any longer 
  (again).

- Write protected icons should be deleted, now.

AsyncWB 51.1 (30.4.2005) 

- Bumped version.

- changed priority of commands (programs without icon) started through
  "Execute Command" to 0.

- Aligned copy buffer for faster DMA transfers.

- Added NOHISTORY tooltype to keep the history from getting written to 
  disk.

- No longer deletes icons of skipped files.

AsyncWB 51.2 (7.7.2005) 

- Fixed newly introduced bug (BUFFERSIZE tooltype and some others 
  crashed).

AsyncWB 51.3 (10.11.2005) 

- Now builds with gcc 4.0.0 with -Wall -Werror.

- No longer allocates MEMF_PUBLIC memory.

- Now uses TimedDosRequesters instead of EasyRequesters.

- Added the tags OC_BuiltInLanguage, OC_BuiltInCodeSet, TDR_CharSet,
  LAYOUT_CharSet to display the requesters and GUI in catalog charset.

- Removed empty sections.

AsyncWB 51.4 (13.11.2005) 

- All processes are created with "NP_WindowPtr, NULL" now to ensure 
  that TimedDosRequester() calls of them do actually display the 
  requester. This fixes the missing requesters when using Workbench 
  ARexx scripts. Thanks to Mario Cattaneo for the report.

AsyncWB 51.5 (19.11.2005) 

- The requester that asks for confirmation to delete something is no
  longer opened inactive. Thanks to Mario Cattaneo for the report.

- The following requesters are no longer opened inactive:
  relabel volume error, rename error, new drawer error, execute error,
  copy hook error, text input hook error, delete hook error.

AsyncWB 51.6 (17.3.2006) 

- No longer tries to create hardlinks (always softlinks).

- The path to a linked object is no longer converted to an absolute 
  path, now.

AsyncWB 51.7 (21.3.2006)

- Data vu: the vague feeling of having fixed a particular bug before. 
  Or in other words, copying softlinks should really work, now.

- The progress requester uses a separate process, now.

AsyncWB 52.1 (10.12.2006)

- Bumped to V52; no functional changes.

AsyncWB 52.2 (20.9.2007) 

- Now builds with -Wwrite-strings.

- Fixed a "read after the end of an array" bug which by luck did 
  always read NULL which was passed to Stricmp(). This caused a crash 
  when using "Execute Command..." before locale.library patched 
  Stricmp(). Thanks to Carl Moppett for the report.

AsyncWB 52.3 (17.11.2007) 

- When deleting the contents of a directory failed and the user 
  selected "Skip" or "Skip All" in the requester, an error requester 
  was displayed which reported an error code of -2147483647, fixed. 
  Thanks to David Rey for the report.

AsyncWB 52.4 (21.12.2007) 

- Labels in text input requesters are now using the label font 
  selected by the user in the GUI preferences.

- When copying a file which has an associated icon, UpdateWorkbench() 
  is now called after both the icon and the file have been copied. It 
  used to be called after copying the icon but before copying the 
  file, which in text mode drawers prevented the Workbench from 
  showing the correct attributes beside the file name.

- Slightly changed the order of the operations during a rename action 
  to allow Workbench (52.9+) to always correctly update the displayed 
  icons when in "show .info files" mode.

- Disk icons no longer get converted to drawer icons when copied.

AsyncWB 52.5 (16.9.2008) 

- Now uses the 'global' copy buffer specified in prefs/Workbench as
  default rather than the hardcoded 32kb.

AsyncWB 53.1 (26.11.2008) 

- Bumped to 53.

- Changed to newlib from clib2. 

- Fixed up makefile.os4.

- Added mkrelease script.

- Increased copy, delete and text input process stacks from
  8192 to 40k and added NP_Child tag.

- Increased default execute stack from 4096 to 16k.
  This stack is overridden by WBCTRLA_GetDefaultStackSize.

- Replaced memory pool handling with ASOT_MEMPOOL.

- Removed some dead code.

AsyncWB 53.2 (2.4.2010) 

- Added the URL feature which allows you to enter a URL in the command
  string and it launches your browser. The previous implementation was
  using the obsolete openurl.library and was disabled. The new
  implementation uses launch-handler.

  Currently supported prefixes include: "http:", "https:", "ftp:", 
  "file:" and "mailto:". Everything else will be assumed to be a 
  command.

- Increased stack of all child processes from 40k to 80k to avoid
  intuition.library stack swapping.

- Updated mkrelease and AutoInstall scripts to use the new path
  SYS:Utilities/Commodities used by AmigaOS 4.1 Update 1.

AsyncWB 53.3 (27.6.2010) 

- Replaced DOS packets with standard DOS function calls.

- Replaced custom StrnCpy() with Strlcpy().

- Replaced custom sprintf() with safer SNPrintf().

- Replaced custom StrLen() with strlen().

- Standardized the version string.

- Fixed up makefile.os4.

- Fixed mkrelease script.

- Some code cleanup to remove macros.

AsyncWB 53.4 (1.11.2010)

- Ported buffer allocation from C:Copy. This causes ASyncWB to no 
  longer free and reallocate the copy buffer for each file, but 
  allocate it only once and reuse it. Also the allocation now takes 
  cacheline and block sizes into account. If the buffersize is set to 
  0 (i.e. same as the size of the file to be copied), the buffer is of 
  course freed/reallocated for each file. This change can increase 
  copy speed quite a bit depending on the number of files to be 
  copied. Thanks to Jrg Strohmayer for the heads up!

- To avoid fragmentation as much as possible, the size of the target
  file is now set immediately after opening it and before the first
  data is written to it. Errors from this operation are threated as
  fatal errors and cause a program abort. This is *not* done if the
  target is RAM: as there fragmentation doesn't matter and would just
  cause the process to be delayed because the pager may kick in before
  it is actually needed. Thanks to Jrg Strohmayer for the suggestion!

- Removed ExAll() options and support. This should have been done long
  ago already.

AsyncWB 53.5 (6.2.2011)

- Fixed cloning directory comments, dates and protection bits.

AsyncWB 53.6 (28.5.2011) 

- Added HISTORY option to CON: output window specification.
  (bug #6999)

- Added workbench.cd to upload archive.

- Renamed makefile.os4 to makefile.

AsyncWB 53.7 (9.8.2011) 

- Disabled optimization added in 53.4 due to bug 6932 in JXF.

AsyncWB 53.8 (19.12.2011) 

- Added feedback mechanism for copy/delete operations. This is done by
  an augmented Copy/Delete-DataMsg. It tells, if the operation was
  successfull.
  It is also used, to suppress requesters. These features are needed
  for the cut-n-paste operation of the contextmenus commodity.

- Removed use of semaphore in copyProc() and deleteProc(). Allowing
  multiple copy/delete processes simultanously.

AsyncWB 53.9 (8.6.2012) 
 
- Replaced strcpy() with safer Strlcopy().

- Replaced custom clrmem() with ClearMem().

- When storing command history to a file, the file size is no longer 
  set. Instead, the file is just appended to.

- Fixed two bugs in the stringfilter() hook. First, the BufferPos was 
  not checked for a zero value during EO_REPLACECHAR or EO_INSERTCHAR.
  Second, the WorkBuffer size was not respected. The limit is
  SG_DEFAULTMAXCHARS which is 128 characters.

- Fixed to initialize the input string to zero before querying it from
  the string.gadget.

AsyncWB 53.10 (9.6.2012) 

- Version bump only.

AsyncWB 53.11 (17.6.2012)

- Fixed a text corruption bug which could occur due to a race 
  condition between input.device and AsyncWB (bug #6064).

- Replaced custom peekQualifier() routine with WINDOW_Qualifier query.

- Replaced some deprecated function calls.

- Added tab cycling to all gadgets so the requesters can be totally
  controlled using the keyboard now.

AsyncWB 53.12 (30.1.2013)

- Some code cleanup.

AsyncWB 53.13 (31.1.2013)

- Added check for illegal infinite copy, when an ancestor is copied 
  into a drawer. This would lead to a crash. 

AsyncWB 53.14 (2.3.2013)

- Fixed problem with the copy loop checking when copying files from
  one volume to another.
  (bug #8268)

- Fixed handling of copy loop error messages which would crash when
  the copy operation was aborted by the user.
  (bug #8267)

AsyncWB 53.15 (19.2.2014)

- Fixed crash when using "Force Delete" option.
  (bug #8620)

AsyncWB 53.16 (9.11.2014) 

- Now allows again copying of icons without a corresponding file 
  (bug #8002).

- Added some more error handling code in Copy() function.

AsyncWB 53.17 (28.11.2015) 

- Replaced almost all usage of obsolete FileInfoBlock structures (only
  lockSame() still remains to be dealt with).

AsyncWB 53.18 (29.11.2015)

- Fixed ReleaseDirContext() potentially being called twice on the same 
  context if an error occurred in the ScanDir() function.

- Simplified handling of soft links which was overly complex and got 
  rid of the isDir() and CheckIfLink() functions.

- Now requires dos.library 53.56 or newer.

AsyncWB 53.19 (29.11.2015) 

- Now compiles completely without -Wno-deprecated-declarations and
  <dos/obsolete.h>.

- Rewrote the IsParentOf() function (formerly CheckLoop()) so that it 
  now only continues checking if SameLock() returned LOCK_SAME_VOLUME. 
  Also made the return value more sensible.

AsyncWB 53.20 (2.12.2015) 

- Fixed checking of SameLock() return value in IsParentOf() 
  (bug #9402).

AsyncWB 53.21 (8.12.2015) 

- Now uses OpenClass()/CloseClass() for opening and closing BOOPSI 
  classes.

AsyncWB 53.22 (9.12.2015) 

- Now registers as a commodity and can be controlled through Exchange 
  (can be turned active/inactive and removed).

- Removed FindTask("ASYNCWB") and task->tc_Node.ln_Name modifying as 
  it's now up to commodities to ensure that there is never more than 
  one version of AsyncWB running at one time.

AsyncWB 53.23 (14.12.2015) 

- No longer posts an ERROR_OBJECT_EXISTS error requester when 
  overwriting is canceled (bug #8487).

- The broker title and description are now localised (bug #9416).

AsyncWB 53.24 (20.3.2016) 

- Removed NP_Child from CreateNewProc() calls for copy, delete and 
  textinput processes (bug #9107).

- Replaced newlib calls with equivalent utility.library calls.

AsyncWB 53.25 (18.5.2016) 

- Copy progress now with big file support

AsyncWB 53.26 (18.5.2016) 

- Fixed some type casts

AsyncWB 53.27 (7.12.2016) 

- Increased buffer sizes to allow input of file names of up to 255 
  characters.

AsyncWB 53.28 (23.06.2017) 

- Fix up an old safety check in allocate_copy_buffer() that used 
  TypeOfMem() to now use IMMU->GetMemoryAttrs() hilighted by bug #9576

AsyncWB 53.29 (11.7.2017) 

- Now coppes the file before the icon, and sets an additional flag to 
  ensure the icon is also skipped if copy the file fails or the user 
  chooses to skip the file. Fixes bug #9578 

AsyncWB 53.30 (27.8.2017) 

- Added validity checks for BPTR pointers in allocate_copy_buffer().

AsyncWB 53.31 (14.02.2019) 

- Allocate_copy_buffer() now also checks that fssm_Device is a valid 
  BPTR.

- Division by zero safety check 

------------------------ AmigaOS 3.2 project ------------------------- 

AsyncWB 47.1 (8.7.2020) 

- Ported to OS3.2.

- Now uses requester.class V47 if it is available.

- Now locks the window height.

AsyncWB 47.2 (18.7.2020) 

- Fixed some further bugs introduced during porting.

AsyncWB 47.3 (23.8.2020) 

- Fixed NULL pointer dereference when updating selection.

AsyncWB 47.4 (6.9.2020) 

- Fixed: relabelling always relabelled SYS: instead of the intended 
  volume.

- Fixed: copying sub-sub-directories was failing in some situations.

- Replaced problematic strlcpy() implementation with a better one.

AsyncWB 47.5 (6.9.2020) 

- Replaced strlcpy() with V47 Strncpy() to save a few bytes.

- Reworked button spacing. Requires layout.gadget V47.25.

AsyncWB 47.6 (7.9.2020) 

- Now uses localized "Delete" instead of "AsyncWB" for the titles of 
  delete confirmation requesters.

AsyncWB 47.7 (15.9.2020) 

- Fixed: an Enforcer hit was possible after some operations, and the 
  objects were not being reselected.

AsyncWB 47.8 (16.10.2020) 

- Added $STACK cookie to ensure stack is at least 5K.

AsyncWB 47.9 (30.01.2021) 

- Added new tag BUTTON_TextPadding to Ok/Cancel buttons.

AsyncWB 47.10 (11.3.2021) 

- When copying disks, now changes the destination icon type to
  WBDRAWER.
