----------------------- AmigaOS 3.2 project -------------------------- MD5Sum 47.1 (10.4.2020) - Backport of MD5Sum 52.2. MD5Sum 47.2 (24.12.2020) - The CHECK option did not compare the checksums correctly, invariably reporting all the files as not matching the recorded checksums. Fixed. Thanks go to Ignacio Gully for reporting the problem! - Just to be on the safe side, now clears the allocated AnchorPath buffer after each MatchEnd() call so that a subsequent MatchFirst() call will no longer easily trigger a Kickstart 2.x/3.0 dos.library bug. MD5Sum 47.3 (26.12.2020) - Clearing the AnchorPath buffer was unnecessary. Hash collision with my memory of how ReadArgs() has to have its RDArg parameter reset before calling ReadArgs() again for Kickstart 2.x/3.0 :-/ - Now handles files with wildcard pattern characters in their names like the "Type" command does. First we try to get a lock on what could be a directory entry, and then we proceed to check if it its indeed a file. If any of that should fail, MatchFirst() will be called instead. MD5Sum 47.4 (6.1.2021) - Files with wildcard characters in their names are really hard to support if you try to stick with the MatchFirst/MatchNext API. You can clear the AnchorPath->ap_Flags APF_ITSWILD flag if you want to, but in practice the MatchFirst() call will first try to match the pattern and end up scanning the entire given directory before giving up. So that's not a viable option here. So, back to square one: don't try to support path or file names with wildcard characters :-( - Reworked how the AnchorPath passed to MatchFirst() is initialized. It must be cleared before MatchFirst() is used, and all the options need to be set again to be on the safe side. MatchFirst() is not safe to be used after MatchEnd() has been called since the flags and reserved fields will remain unchanged. MD5Sum 47.5 (21.2.2021) - When using the sort option, all the entries stored in the tree list would be allocated from memory pools if running under Kickstart 3.0 or higher. But if only Kickstart 2.04 was available, that memory was never even freed. Fixed. - Found another issue with the memory allocated for the sorted output: memory could be left unfreed if an error occured between allocating the memory and storing data in it. Fixed. - When reading the raw disk data from a partition or drive, the read buffer size now defaults to the double the size of a complete track, memory permitting. No more than 65536 bytes will be used for the read buffer in total, and any such size is limited by the MaxTransfer value of the partition. Previously, the default buffer size was limited to 4096 bytes. Note that the BUFFERSIZE command line parameter will always override the default read buffer size. What's the point of dynamically adjusting the read buffer size? Raw disk read performance can improve tenfold because of it. That can make the difference between waiting 30 minutes for it to finish or three minutes... - Added the DISKREADCOMMAND option (not yet documented) which allows you to override the device command which is used when reading data from a partition/disk larger than 4 GiBytes. Options are AUTO (the default), NSD64 and TD64. AUTO will figure out if the driver prefers NSD64 over TD64, unless it crashes... In that case, you might want to use the DISKREADCOMMAND option and pick the command variant which works for you. - Specific testing for the reported crashes on 68000 system still needs to be done, e.g. testing which different stack sizes, replacing the MD5, SHA1 or SHA256 algorithms, etc. MD5Sum 47.6 (22.2.2021) - Changed the option DISKREADCOMMAND option to DISKACCESS and documented it. It now matches what Disk Doctor uses, both in name and semantics. - The CHECK option failed to treat missing devices consistently. These should have been ignored with an optional warning, but this feature only worked for missing files. Fixed. - The read_line() function no longer makes an attempt to reallocate the read buffer. This is only necessary when the buffer has not been allocated yet. - If there's a device node corresponding to the async file's underlying file handle, we now read the sector size from its DOS environment vector, too, for good measure. Just in case the previous ExamineFH() may have failed (such as for CDFileSystem). - General cleanup of function, variable and parameter names to better reflect their respective purposes. MD5Sum 47.7 (3.3.2021) - Let's make this program less complex for Kickstart 2.04 by linking against amiga.lib/pools.lib, which allows us to do away with all the separate memory cleanup operations and stick with pools. The drawback here is, however, that the program will become larger by about 500 bytes... MD5Sum 47.8 (5.3.2021) - Now uses SysBase for making exec.library function calls instead of refetching the address of the exec.library base from chip memory. - Switched over to use memory pools for all memory allocations which have no peculiar other requirements. This simplifies memory allocation cleanup and saves a bit of space.