------------------------- 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/DVD±R[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 Jörg 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 /#include with the more convenient #include . - 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 '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.