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

cdfs 51.1 (commit log unavailable)

- Now checks if there are 2+ identical CDs in 2+ different drives and
  doesn't mount duplicates.

cdfs 51.2 (commit log unavailable)

- No longer uses a single port for all cache IORequests.

- Workaround for broken "DeepBurner" Joliet CDs added.

cdfs 51.3 (commit log unavailable)

- No longer uses memory pools for locks.

cdfs 51.4 (26.12.2004)

- Support for multi-session audio CDs added.

cdfs 51.5 (28.12.2004)

- Fixed a bug in the multi-session audio CD support.

cdfs 51.6 (31.12.2004)

- Fixed another bug in the multi-session audio CD support.

cdfs 51.7 (3.1.2005)

- Fixed yet another bug in the multi-session audio CD support.

cdfs 51.8 (11.1.2005)

- Added a workaround for CDs/DVDs where the FullTOC can't be read.

cdfs 51.9 (18.4.2005)

- Fixed a bug in the HFS and HFS+ ReadFile functions, should fix
  bug #1775.

cdfs 51.10 (19.4.2005)

- Fixed the 51.9 bugfix.

cdfs 51.11 (5.5.2005)

- HFS: Fixed a bug in ACTION_PARENT(_FH) for file-/dirnames with
  converted chars.

- HFS(+): Fixed a bug in the filename compare functions.

- ACTION_FILESYSTEM_ATTR added.

cdfs 51.12 (7.5.2005)

- Fixed ACTION_FILESYSTEM_ATTR.

- ACTION_FILESYSTEM_ATTR integer read tags changed to use pointers to
  integers.

cdfs 51.13 (13.5.2005)

- Rebuilt 51.12 sources unchanged, AudioCDs work again. Huh!?

cdfs 51.14 (19.5.2005)

- Now ignores Joliet on VideoCDs.

- Build with GCC 4.0.0.

cdfs 51.15 (3.6.2005)

- No longer tries to access TrackZero data tracks if there is less
  than 1 MB possible data.

cdfs 51.16 (8.6.2005)

- No longer uses HD_SCSICMD transfers > 64 KB.

cdfs 51.17 (17.6.2005)

- Workaround for the GoldED Studio CD added.

- Doesn't ignore Joliet on CDXA (VideoCDs) anymore, currently Joliet
  VideoCDs are broken again.

cdfs 51.18 (19.6.2005)

- Now returns the correct DOSType instead of pretending to be FFS.
  thor note: This actually broke it. Thank you...

cdfs 51.19 (29.6.2005)

- Now changes it's process name to make broken programms using the
  task name instead of the DOS device name fail.

cdfs 51.20 (25.7.2005)

- Fixed a bug in the UDF detection code, now works with
  FSD.ExtentLocation.lbn = 0 DVDs (for example "DEATHBED_VIGIL_NTSC",
  reported by Almos Rajnai).

cdfs 51.21 (27.8.2005)

- Changed protection bits of the root dir to "rwed rwed ---- rwed",
  copying a complete CD to a FFS2 partition should work now.

cdfs 51.22 (1.9.2005)

- Fixed a DSI in ACTION_READ if there is no disk in the drive.

cdfs 51.23 (5.9.2005)

- Fixed a bug in the CDXA video track detection, now Joliet Video-CDs
  should work as well.

cdfs 51.24 (16.9.2005)

- Disabled a workaround for cdrom.device and some other broken
  devices, now inserting an empty CD/DVDR[W] shouldn't cause very
  long delays, and therefore a blocked workbench, any longer.

cdfs 51.25 (8.10.2005)

- Fixed a bug in the TOC parser, the last audio track should have the
  correct size now.

cdfs 51.26 (9.10.2005)

- Changed default protection bits (used if there are no RockRidge
  ones) to "r-ed r-ed ---a r-ed".

cdfs 51.27 (25.11.2005)

- Compatibility release for broken software (task name is the name of
  the message port again (especially some broken games), default
  protection bits are "rwed rwed ---a rwed" now (ram-handler and FFS2
  "feature" workaround), workaround for more broken CDs from Ditmar
  Eilert added).

cdfs 51.28 (25.11.2005)

- Fixed a bug in the 51.27 changes (Bug #2398).

cdfs 51.29 (7.12.2005)

- CD-Text support added.

cdfs 51.30 (30.12.2005)

- HFS+ code didn't work for CDs with a nodeSize > blockSize, fixed.

- No longer tries to find HFS(+) and ISO9660 on a SFS CDs/DVDs.

- Added a workaround for broken "DiscRecording 2.1.12f2" RockRidge
  entries.

cdfs 51.31 (31.12.2005)

- Finally ported to the OS4 interface calls.

- Fixed some warnings.

- Improved the workaround for the broken "DiskRecoding" CDs.

cdfs 51.32 (26.3.2006)

- Changed to use newlib.library, removed local copies of memcpy(),
  memset(), strncmp(), strncpy() and strlen().

- Now uses IDOS->Alloc/FreeDosObject() for the locks.

cdfs 51.33 (4.4.2006)

- Fixed size of CDXA video tracks in the directory entries.

cdfs 51.34 (11.6.2006)

- Changed the data structures to make sure the buffers are page
  aligned and DMA can be used.

cdfs 52.1 (4.12.2006)

- Updated the sources to build with the current includes.

cdfs 52.2 (9.1.2007)

- Changed the pseudo seglist to use the new ps_Jump type, and because
  of that get SysBase from the exception handler if the file system
  was loaded as executable instead of kickstart module since
  dos.library can't guarantee SysBase is provided in r5.

cdfs 52.3 (20.2.2007)

- Fixed buffer overruns with bad data.

- Decreased the number of device error retries from 5 to 2.

cdfs 52.4 (26.2.2007)

- Added a workaround for Mario's broken burner (Bug #3833).

cdfs 52.5 (27.2.2007)

- Fixed a typo in the 52.4 workaround.

cdfs 52.6 (30.4.2007)

- ACTION_EXAMINE_OBJECT could return wrong fib_DirEntryType for empty
  files, fixed.

cdfs 52.7 (6.6.2007)

- Fixed broken OFFSET_END mode of ACTION_SEEK (bug #3929).

cdfs 52.8 (7.6.2007)

- Changes for compatibility to DVDFileSystem.

cdfs 52.9 (29.8.2007)

- Fixed bug #4076.

cdfs 52.10 (30.8.2007)

- cdfs_52.9.lha included an old binary.

cdfs 52.11 (31.8.2007)

- Rebuild with fixed dos includes.

cdfs 53.1 (21.6.2008)

- Bumped version to 53.

cdfs 53.2 (19.5.2009)

- Rebuild with fixed splay tree code.

cdfs 53.3 (13.9.2012)

- If no TOC can be found, now tries to determine if the underlying
  device is a CD ROM device. If this is not the case, we assume that
  the media provides data. The should allow to boot from iso file
  systems on more USB sticks than before.
- When parsing the simple TOC, don't check for lead out tracks beyond
  for what the device provides data.

cdfs 53.4 (20.9.2012)

- The distribution archive of 53.3 was slightly messed up. Hopefully
  fixed.

- No functional changes in the binary.

-------------------- AmigaOS 3.1.4.(1) project -----------------------

In case you wonder, the release notes start now from 45.0 again
in accordance to the version numbering of the rest of 3.1.4.
This does not mean that this CDFS is older than the 4.0 version.
Actually, it is newer.

cdfs 45.1 (21.3.2018)

- The UDF support (mostly used on DVD-ROMs) of the OS 4 release is
  missing due to lack of time to review its implementation.

- Neither included is support for HFS and HFS+, Apple variants of
  CD file systems. The code uses some GNUisms and requires somewhat
  more careful review to be usable again.

- Neither included is support for mixed-mode CDs. At least my
  CD-RW in the laptop does not return proper TOC information, the
  code gets completely confused from what the reader returns, so we
  should better check for another strategy here.

- CDDA support is included, though at least my reader does not return
  any data, even though it claims that it supports the command.
  This requires a closer inspection of what exactly goes wrong.

- Unfortunately, ISO level 3 seems to be unsupported. This may require
  a fix somewhat later.

- Cleaned up the (active) part of the code a lot. I mean, really.
  The number of "global variables" (ehem) shrunk a lot, and there is
  no longer copying between packet args in an out of a packet, to
  name just two improvements.

- As a result, the stack size required shrunk a lot. 2K is enough.

- The "detection whether a device is really a CD-ROM" was broken as
  it checked a bit-mask which was actually an enumerated value.
  Tsk,tsk...

- Seeking for files >2GB should now work OK.

- Error reporting is much better. Errors of earlier instances are
  not simply lost somewhere in the jungle of global variable
  assignments.

- There is no longer a fake seglist, only a real one. Due to the
  way how the code is compiled, it even accepts GlobVec=0 if you
  forget to set this right.

- The handler supports now ACTION_DIE, hence can be told to shutdown.

- Unlike what Jrg claims, DOS\0 *is* the proper disk type for all
  regular disk-based handlers. Hence, no ghost icons anywhere.

- The caching strategy got changed completely. Every file gets now
  two blocks of data cache, in addition to the directory cache that
  has always been there.

- Rock ridge and Amiga CD extensions are again read through the
  directory cache. To avoid race conditions, we have now cache locks.

- Reads are now multi-threaded. That is, the workbench is no
  longer slowed down by some program reading from CD.

- The handler speaks now NSD, TD64 and DirectSCSI. In fact, it follows
  the Os 3.1.4 guidelines and accepts the mount list entries that
  switch between the various modes.

- The code now honours MaxTransfer, Mask and BufMemType. The previous
  versions all seem to have ignored the peculiarities of the Amiga
  DMA system. Internal buffers are aligned to 16-byte boundaries
  which should avoid trouble with people that like to patch up their
  system by dubious binaries...

- The handler now supports exclusive locks correctly. In 10 years
  of development, nobody seem to have noted that this was broken...

cdfs 45.2 (22.3.2018)

- This fixes a memory leak in the directory cache handling.
  Unfortunately, the cache was not released upon exit, or when its
  size changed.

cdfs 45.3 (24.3.2018)

- The code now includes many more options to read CDDA tracks from
  CDs, and includes a test whether the read was bogus or a real read.

- The code includes now a test whether the TOC has the right format
  and aborts parsing it if it does not.

cdfs 45.4 (25.3.2018)

- This release fixes a missing Permit() after a Forbid() that could
  have crashed the system. It also places the canary to detect
  non-read CDDA data at the end of the buffer to check whether
  sufficient data was read.

- Renamed the tracks to Track%ld.aiff.

- Cleaned up the read mode selection logic.

- Moved the read canary to the end of the buffer, testing now also for
  I/O actual for the correctness of the transmitted data length.

cdfs 45.5 (26.3.2018)

- Fixed the wrong frequency information in the AIFF header.

- Added a timed MOTOR OFF after 3 seconds, allowing drives
  to unlock their drive door.

cdfs 45.6 (1.4.20118)

- Re-included some of the assembler stubs present in the v40 version
  but including the bug-fixes from the C variant.

- Fixed initialization of the FileSystem.resource. Now only updates
  the resource if an older version of a CD file system is found.

- Made a more careful check before grabbing the volume node of another
  volume; in particular, it attempts now to grab only those volumes
  that belong to this particular file system.

- Disabled CDXA support due to insufficient test data.

- When reading CDDA tracks, at most 255 blocks are read at once to
  avoid problems with some custom commands that may not support larger
  block counts.

cdfs 45.7 (2.4.2018)

- Re-enabled CDXA support (probably temporarily)

- Adjusted CDXA commands to follow the options provided in the Yellow
  Book.

- Fixed sector to MSF computation, forgot to clear the remainder on
  further processing.

- Fixed initialization of READ CD command if the MSF bit is set. In
  such a case, sector addresses are given in MSF, not in block count.

- Removed duplicate code in CDXA initialization.

- The DirectSCSI flag now also sends a prevent/allow medium removal
  command on a motor-off.

- Default protection bits for non-rockridge and non-amiga disks are
  now "ar-ed".

cdfs 45.8 (3.4.2018)

- Reworked the UDF support, which is now enabled again. UDF now
  also includes asynchronous I/O and the pre-fetch logic common
  to the standard ISO mode.

- A couple of low-level functions such as endian-swap and CRC
  computation have been off-loaded to assembly.

cdfs 45.9 (4.4.2018)

- A couple of optimizations in the file reader, the
  checksum computation and the extent parser.

- Revisited the command trial functions again, which now
  reset the error code on each new attempt.

- Even though some of the MMC READ_CD commands set now
  the MSF bit, the data is still addressed by logical
  sector number. Let's see how this goes...

cdfs 45.10 (5.4.2018)

- The code is now more careful when acknowledging
  ACTION_INHIBIT. If any co-routine is currently active, the
  command will fail.

- Apparently, too many standards are active in this area.
  Whereas some players may require 2324 bytes/block, others
  assume the full data with subchannel information and
  probably filter this information out themselves. Or maybe not.
  One way or another, CDXA support is too fragile to include
  it in the file system, so it is gone by now.

cdfs 45.11 (6.4.2018)

- Disabling CDXA was a bit too drastic. The CDFS now accesses
  at least all regular files on a CDXA volume, but it cannot
  provide access to CDXA files itself.

cdfs 45.12 (10.5.2018)

- Due to an oversight, the synchronous I/O functions did not
  read all the sectors it was supposed to read, and broke as
  a consequence the Joliet support.

cdfs 45.13 (29.6.2018)

- The PVD locator function read one block too much beyond
  the end of the allocated I/O buffer and hence trashed
  memory.

cdfs 45.14 (29.7.2018)

- The switch to 64-bit style commands happened a bit too late,
  in particular the switch did not take place if the first sector
  was within, but the last sector outside the 4GB area. To be
  on the safe side, the last sector instead of the first sector
  is now checked.

cdfs 45.15 (31.12.2018)

- Apparently, some devices do not report proper results on
  TD_CHANGESTATE. In an attempt to wake up the device, a
  TEST_UNIT_READY is now send to the device first, hoping that
  this will wake it up.

cdfs 45.16 (6.8.2018)

- Changed the dos type to CD0\1 in an attempt to avoid conflicts
  with other implementations of this file system that are
  probably not quite compatible.

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

cdfs 47.1 (19.11.2019):

- Reenabled and reworked HFS support. Also somewhat optimized the
  HFS read function. HFS+ support is still lacking due to the
  non-availability of test data.

cdfs 47.2 (2.1.2020):

- In case the 0 lock was used for ExNext(), the CDFS would have
  created MuForce hits. Fixed!

cdfs 47.3 (7.1.2020):

- Minor optimization in the Mac to Latin conversion functions.


CDFileSystem 47.4 (20.10.2020)

- Minor cleanup work in preparation for code review shenanigans ;-)
  No functional changes...


CDFileSystem 47.5 (20.10.2020)

- Feeble attempts at repairing the broken indentation, etc. using
  tab sizes of 8, 2, converting them to spaces, then adding tabs
  again, etc. For now most of the code has the tabs (at 8 spaces per
  tab) converted to blank spaces. That makes it editable and
  readable to some degree.

- "cd.h" is another unused file.

- All the .c files now include their corresponding .h interface
  declaration files, e.g. "start.c" now uses "start.h".


CDFileSystem 47.6 (21.10.2020)

- Pushed all the code through GNU indent, using the
  "-bbb -bap -sc -ncdb -nfc1 -d0 -bli0 -nbc -l80 -ts2" formatting rules.
  Followed by manual cleanup work to restore readability and fix
  artefacts introduced by GNU indent processing.

- No functional changes, just this version bump.


CDFileSystem 47.7 (21.10.2020)

- Replaced the Delay(15) call with direct timer.device I/O because
  the Delay() call would have interfered with the asynchronous
  packet I/O, and then some... The new code now performs a delay only
  if there is going to be another try to check if the unit is ready.

- Fixed the cases in which the CDDA file system could fail to
  handle the use of a ZERO lock well.

- Verified that the use of TD_ADDCHANGEINT and TD_REMCHANGEINT is
  handled correctly.

- Asking for a lock which isn't of type SHARED_LOCK and EXCLUSIVE_LOCK
  now produces a SHARED_LOCK. You'd be surprised how many file systems
  get this totally wrong :-(

- At long last, added support for the ACTION_SAMELOCK packet.

- ACTION_INFO with a zero lock still requires that the medium
  be present. It's not identical in operation to ACTION_DISK_INFO
  which doesn't care if a medium is present to begin with.


CDFileSystem 47.8 (23.10.2020)

- I broke the handling of the Zero lock for ACTION_PARENT_FH and ACTION_PARENT
  by accident for CDDA access. Fixed.

- ACTION_EXAMINE now consistently zeroes the FileInfoBlock provided. This
  avoids returning random data in reserved fields.

- Shutting down the file system now also zeroes the pointers of all the
  memory allocations that have been made, just to be sure that no memory
  might get released twice. Also, the TD_REMCHANGEINT command performed
  at shutdown is no longer likely to be performed twice.

- Both NSCMD_DEVICEQUERY and TD_GETGEOMETRY now start with a zeroed
  query buffer instead of containing random data.

- The timer.device delay code in TestUnitReady() now works better with
  the SetSignal() parameters being finally in the proper order. Oops :-(

- HFSExamineNext() now stops with error ERROR_NO_MORE_ENTRIES when using
  a Zero lock.

- HFSParent() now returns a Zero lock if called with a Zero lock.

- HFSPlusLockFile() will replace unknown lock types with SHARED_LOCK.

- HFSPlusLockFile() seems to be missing a "break" in the switch statement
  which handles folders and files. With the "break" missing, it would
  treat folders like files and also leak memory. This may be one reason why
  HFS+ support was disabled for CDFileSystem V46.

- HFSPlusExamineNext() now stops with error ERROR_NO_MORE_ENTRIES when using
  a Zero lock.

- HFSPlusParent() now stops with error ERROR_NO_MORE_ENTRIES when using
  a Zero lock.

- UDFExamineNext() now stops with error ERROR_NO_MORE_ENTRIES when using
  a Zero lock.

- Reworked the still somewhat excessive reformatting changes performed
  by GNU indent.


CDFileSystem 47.9 (28.10.2020)

- Added a different character mapping scheme to the HFS code which is
  based upon the Mac Roman 8 -> Unicode mapping. We retain only those
  characters which can be represented in ISO 8859-1, with the
  remainder getting mapped to '_' as before.

- The HFS volume, folder and file date and time returned and used
  by the respective AmigaDOS data structures now comes from the
  "last date/time modified" records instead of the "creation date/time"
  records. Funny enough, the HFS+ times always came fro the
  "creation date/time" records.

- Both the HFS and HFS+ code now check if a non-NULL FileInfoBlock
  pointer is supplied for ACTION_EXAMINE and ACTION_EXAMINE_NEXT,
  and this happens at the earliest possible time.


CDFileSystem 47.10 (3.11.2020)

- Added scaffolding for stack usage monitoring. This is disabled by
  default, requiring the while file system to be rebuilt.


CDFileSystem 47.11 (5.11.2020)

- Stack size usage measurements now actually work as intended. This version
  of CDFileSystem seems to use no more than 700 bytes of stack during its
  operations.

- The FileSystem.resource entry which the file system creates now
  reuses the data already present in the device node which it
  receives as part of the startup packet: segment list, stack size and
  priority.

- Removed the BCPL-compatibility code and the resident tag which
  were not necessary for the file system to work.


CDFileSystem 47.12 (6.11.2020)

- The global variable "devList" was the wrong type (struct DeviceList).
  A "device list" defines how a volume looks like. The correct type is
  the "device node" (struct DeviceNode). The variable has been both
  replaced and renamed.

- Added comments to make a little more sense of conditional compilation
  for HFS/HFS+/UFS code.

- Removed the last of the D() and DD() macros, and their use (all six of them).

- Replaced #include <clib/..>/#include <pragmas/..> with the more convenient
  #include <proto/..>.

- Moved the coroutine stack size checking/monitoring code to where it
  actually matters.


CDFileSystem 47.13 (7.11.2020)

- More small cleanup work to code indentation and artefacts introduced
  by the use of GNU indent.

- Macros replace magic numbers, such as the maximum length of a volume
  name (30 characters) and of a file comment (79 characters). Note that
  Amiga volume names are not limited to 30 characters at all, it's just
  that the Amiga default file system and FFS could not store more than
  30 characters.

- Added more coroutine stack size monitoring code.

- HFS file/folder name mapping now preserves the non-breaking space
  character instead of converting it into a blank space (ASCII 32).

- Found a problem with the HFS+/UDF code which needs reviewing: file and
  folder names longer than 107 characters are truncated on ExNext(),
  which means that you may see them in their truncated form but you
  will never ever be able to access them. Better to skip them altogether.
  The same problem seems to exist for Joliet file and folder names.

- The UDFLockFile() function will replace unknown lock types with
  SHARED_LOCK. I had missed this one...

- Enabled HFS+ support for the very first time, after having made
  the small bug fix in CDFileSystem 47.8.


CDFileSystem 47.14 (8.11.2020)

- Replaced macros MatchStr() and MatchBStr() by what these macros
  would have inserted. Not quite so elegant as having distinct functions
  for the job, but then each of these macros was used exactly one
  single time in the entire codebase.

- Added modest 'C' implementations to the lib.asm code which describe
  how ToMinutesSecondsFrame(), le2long() and le2short() work. Save for
  the CRC16 calculation (used by udf.c) all of this code is easily
  replaceable, including MakeDate() (there's utility.library/Date2Amiga).


CDFileSystem 47.15 (10.11.2020)

- More modest cleanup work. Macros replaces "magic numbers", e.g. the
  size of a CD sector, the size of an HFS block, etc. Whether "&" is boolean
  logic operation or produces the address of the variable/constant on the
  right should be clearer now. Shifting variable right by 9 bits with
  the effect being a division by 512 now uses a macro indicating the
  purpose of the operation. Clearing the least significant 4 bits of
  an address with (X & ~15) or (X & -16) has the same effect, but it's
  more consistent to use (X & ~15).


CDFileSystem 47.16 (11.11.2020)

- Now has a proper version string again. Thanks go to Mikhail Malyshev
  for spotting the problem, now that bcpl.asm with its otherwise
  unhelpful Resident tag is no longer being used.

- The FileSystem.resource entry which CDFileSystem adds/updates
  is now called just "CDFileSystem" and bears no additional version
  and date information. The version information is available in
  the fse_Version member of the FileSysEntry structure anyway.


CDFileSystem 47.17 (12.11.2020)

- Added const qualifiers to local variables and function parameters
  as needed and useful.

- Where possible, replaced shift operations with division and
  multiplication operations. There is still more to be done here
  since the AmigaOS4 version of CDFileSystem shows that such
  integer arithmetic operations had been deliberately replaced by
  shift operations, introducing bugs along the way. The bugs are
  caused the unexpected and always baffling fact that shift operations
  are not alway equivalent to multiplication/division operations due
  to the fact that in 'C' operations such as addition or multiplication
  have higher priority.

- When used for masking out bits in an integer value, "-16" has been
  replaced by "~15" for consistency.

- Should a read operation fail in GetDirBlock(), the cache node obtained
  for storing the result of that operation is now always reset and marked
  as unused. Previously, any changes made to the cache block during the
  failed read attempt would persist.

- Changed function parameter types for (hopefully) better semantics: if
  its purpose is to be a boolean value (either equal to 0 or not equal
  to 0, then it ought to be a BOOL type not an ULONG).

- MAX_BSTR_LEN now equals 108 instead of 111 (= MAX_NAME_LEN + 4), which
  somehow makes better sense (see <dos/dos.h> 'struct FileInfoBlock'
  member fib_Name).

- Integers used as function parameters or local variables are, if possible,
  no longer unsigned and no longer 16 or 8 bit integers. The reason being
  that you get yourself into trouble all too easily if such integers are
  used in loops which count backwards and that you spend extra code on
  the typically inevitable 'C' integer type promotion anyway. So why not
  use the type best suited for counters in the first place, this being the
  "int".

- File lock access modes as used in function parameters are now passed
  as signed integers on account of EXCLUSIVE_LOCK being a negative number.
  This can make the difference between a safeguard working or not, e.g.
  when checking if a lock is neither equal to EXCLUSIVE_LOCK or
  SHARED_LOCK.


CDFileSystem 47.18 (13.11.2020)

- Where it made sense and clarified the purpose of the respective
  operations integer division/multiplication has replaced bit shift
  operations.


CDFileSystem 47.19 (14.11.2020)

- More small-potato cleanup work, tagging local functions and data
  as static, removing warnings caused by unused local variables.


CDFileSystem 47.20 (14.11.2020)

- Finally found two different HFS+ discs which are smaller than 4 GBytes
  which are suitable for testing the HFS+ support in CDFileSystem. Turns
  out that it crashes violently. For now HFS+ support is disabled again.
  Since the HFS+ code is not well-documented, adding debug code
  will involve having to rewrite it to be debug-friendly. This will
  have to wait. Or maybe we don't actually need HFS+ support in the
  CDFileSystem that badly...


CDFileSystem 47.21 (19.11.2020)

- When checking the FileSystem.resource list for an entry that
  matches the CDFileSystem the code now examines the node again
  (which I broke by mistake). Thanks to go Thomas Klein who
  found the problem!

- For good measure the FileSystem.resource entry for the CDFileSystem
  now also includes the required stack size among the records which
  need to be updated when reusing the mount information.

- In cdio.c MotorOff() did not stop the "turn off the motor after
  three seconds" timer, it just marked it as stopped. It now
  really stops it.

- Shook some extra whitespace out of cdio.c, replaced duplicate code
  with a single common function.

- RockRidge Amiga comment text can no longer overflow the buffer
  reserved for it. Previously, the tests were inconsistent with
  regard to whether 79 or 80 was the maximum comment length.


CDFileSystem 47.22 (21.11.2020)

- Added documentation to the start.c code, explaining why the SAS/C-
  specific acrobatics are needed.

- If the file system initialization fails or the file system shuts
  down for real, it will no longer try to return the file system
  startup message twice.

- Documented the file system initialization in init.c.

- The file system initialization now allocates the cache immediately
  rather than delaying this until a medium has been inserted. This
  simplified the cache management which previously had need of
  two different but virtually identically named variables which tracked
  how large the cache should be, and how large it actually was.
  Also, all responsibility for handling cache size limits and
  initialization of the cache now rests in one single function.

- The ACTION_MORE_CACHE packet handling can now signal failure to
  allocate the required cache and it properly returns the current
  size of the cache.

- Simplified the setup and cleanup procedure in cdio.c/InitCDIO()
  and also fixed a bug introduced by renaming local variables.
  Ouch :-(

- Following the example of the default AmigaDOS file system, the
  FileSystem.resource entry for the CDFileSystem now reuses the
  standard version string.


CDFileSystem 47.23 (22.11.2020)

- Fixed a couple of compiler warnings, such as caused by using the
  wrong pointer type when calling DoIO().

- Replaced the magic numbers 2352, 2336 and 2324 with macros
  (CDDA_SECTOR_SIZE, CDXA_MODE2_SECTOR_SIZE and CDXA_MODE4_SECTOR_SIZE).

- Moved the version string from "init.c" into "start.c" since "init.c"
  makes no use of it.

- No functional changes.


CDFileSystem 47.24 (22.11.2020)

- Declaring the version string as static has the bizarre side-effect
  of making the string the first bit of executable code in the
  "start.o" file, crashing it instantly. So we need a different
  approach (and there goes another afternoon).

- Why does the FileSystem.resource entry for CDFileSystem have an
  empty name? Because the Process' local data segment is allocated
  but it contents are not copied. Hence we need to declare that
  version string as __FAR__ so that it does not get lumped into the
  small memory model data segment.

- Replaced more magic numbers and implicit "0 is FALSE" / "!= 0 is TRUE"
  with macros and explicit tests.

- I had broken the "medium removal" Intuition event by mistake. Fixed.

- Switched optimization back to optimize for speed, using inlining
  if possible. Then had to check if the stack size usage had changed
  significantly (no, it's still well below 1000 bytes).

- The size of the co-routine stack was set to 2000 bytes, which may not
  be a good idea since it removes it from user control. Now the co-routine
  stack size is inherited from the mount file settings.


CDFileSystem 47.25 (24.11.2020)

- Changed the file system signature consistently back to "CD01". In some
  places it was "CD01", in others it was "CD0\1". This was done so that
  other file systems using the same signature could not clash with this
  one. For now we just accept this as a risk and avoid reusing file locks
  in volume nodes which are clearly not created by this CDFileSystem
  implementation. This is done by adding another field to the internal
  FileLock data structure which must be set to a magic number.

- Squeezed some more whitespace out of the formatted code.

- Replaced magic numbers (e.g. NULL, 0, 32, 108 and -1) macros which indicate
  their specific purpose and context.

- Replaced tests against/with untyped 0 with tests against the right type.

- Plain "if (! value)" and "if (value)" tests now specifically test against
  0, NULL, etc. The ! has been replaced by NOT or CANNOT to indicate
  context and purpose. In context, 0 or NULL has been replaced by
  ZERO, which stands for a BPTR which is NULL.

- The function parameters and local variables named "err" have been
  either scalar types or pointers to a scalar type. Where these were
  pointers, the variable names have been changed to "err_ptr", just to
  make things a little bit less likely to lead to confusion.

- Removed the use of the DeviceList->dl_unused member as the means to
  identify a volume node as having been created by CDFileSystem. Because
  its value was initialized with the A4 register value of a particular
  file system Process, this meant that only this file system Process could
  ever use this volume node. Since it's possible to shut down that file
  system Process it could ultimatively result in memory leakage.

- As a precaution, accessing and changing the linkage between file locks
  (as found in the public volume node for the file system) is now always
  protected by Forbid() .. Permit().

- Preparations for making the cloning of the SAS/C near data segment
  easier to handle, including its side-effects.


CDFileSystem 47.26 (24.11.2020)

- Fixed the SAS/C-specific Process-local data cloning to be more in
  line with how this is supposed to work.
