----------------------- 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.
