[comp.binaries.ibm.pc] v01i144: chksum, 32-bit file checksumming program

naz@mcvax.cwi.nl (Norman H. Azadian) (02/17/89)

Posting-number: Volume 01 Issue 144
Originally-from: Norman H. Azadian <hslrswi!naz@mcvax.cwi.nl>
Submitted-by: Norman H. Azadian <hslrswi!naz@mcvax.cwi.nl>
Archive-name: chksum/chksum.uue

[ Source is in comp.sources.misc.  -- R.D. ]

Chksum is a little program that I've developed and used a lot over the
years. The prime difference between it and the ones that it copies, is
that it can read a list of pathnames from stdin.  This turns out to be
very handy indeed. Also, it uses a 32-bit CRC, which means that a false
match is 2**16 times less likely than with the 16-bit brands.  It
produces identical results on both PCs and VAXen.

Performance on an AT-03 with disk caching is just over 1 MByte/minute.
The maximum rate at which I can read the disk, with DOS calls, is about
1.5 MByte/minute.

The 32-bit CRC routine was donated by kind souls on the net.  I have
tweaked it for my use, principally by adding inline optimized assembly
code for my PC. I don't pretend to know what is going on inside, and I
regard it as a minor miracle that it actually produces the same numbers
on PCs as on VAXen.  Perhaps somebody will tell me if it produces the
"right" numbers.

I hereby donate this program to the Public Domain for any and all
purposes. Enjoy.

PAPER:  Norman Azadian; Hasler AG; Belpstrasse 23; 3000 Berne 14; Switzerland
X.400:  naz@hslrswi.hasler
UUCP:   ...{uunet,ukc,mcvax,...}!cernvax!hslrswi!azadian
VOICE:  +41 31 63 2178            BITNET: naz%hslrswi.UUCP@cernvax.BITNET

[
Will also give byte counts, and total checksum for all files.  Doesn't
take wildcards on command line, but "stuff . | chksum -v --" worked
well for me.

Checksums obtained with the 4.3BSD "sum" or System V "sum -r" command.

checksum     size (bytes)  file (between BEGIN--cut and END--cut lines)
   15050        11895      this uuencoded posting

checksum     size (bytes)  file
    9977         8611      chksum.arc

-- R.D.
]

BEGIN--cut here--cut here
begin 644 chksum.arc
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
0B04)`.!)`(#X'8`"#0`:`!1&
`
end
END--cut here--cut here