BBS: Inland Empire Archive Date: 01-03-93 (01:25) Number: 210 From: ERIC B. FORD Refer#: NONE To: VICTOR YIU Recvd: NO Subj: CRC-32 2/2 Conf: (2) Quik_Bas
'Adjust length- divide it by 4 using unsigned division Length = ((Length AND &HFFFC) \ 4) AND &H3FFF 'Drop into loop GOTO b 'Updates the CRC on the next 4 bytes, doing this 4 bytes at a time 'results in a small improvement in speed, since the compiled code 'will jump less often... A: CRC& = CRCTable&((CINT(CRC&) AND 255) XOR PEEK(Offset)) XOR (((CRC& AND &HFFFFFF00) \ 256) AND &HFFFFFF) CRC& = CRCTable&((CINT(CRC&) AND 255) XOR PEEK(Offset + 1)) XOR (((CRC& AND &HFFFFFF00) \ 256) AND &HFFFFFF) CRC& = CRCTable&((CINT(CRC&) AND 255) XOR PEEK(Offset + 2)) XOR (((CRC& AND &HFFFFFF00) \ 256) AND &HFFFFFF) CRC& = CRCTable&((CINT(CRC&) AND 255) XOR PEEK(Offset + 3)) XOR (((CRC& AND &HFFFFFF00) \ 256) AND &HFFFFFF) Offset = Offset + 4 '4 bytes over now Length = Length - 1 '1 less byte b: IF Length <> 0 THEN GOTO A 'if more bytes then go 'All done QBCRC& = CRC& END FUNCTION 'Reads in the CRC table SUB CRC32Init FOR A = 0 TO 255 READ CRCTable&(A) NEXT END SUB 'Finds a PKZIP compatible CRC of any size file. 'There isn't any error checking in this example program- that's up to you. '(QuickBASIC 4.5 users must change the "SSEG" functions to "VARSEG" 'functions for this procedure to work properly.) FUNCTION FileCRC& (FileName$) handle = FREEFILE 'get free file handle OPEN FileName$ FOR INPUT AS handle: CLOSE 'check to see if it's there OPEN FileName$ FOR BINARY AS handle 'open file in binary mode b$ = SPACE$(LoadBuffer) 'allocate space for buffer CRC& = &HFFFFFFFF 'init CRC FOR A = 1 TO LOF(handle) \ LoadBuffer 'do the blocks GET handle, , b$ 'get block CRC& = QBCRC(SSEG(b$), SADD(b$), LoadBuffer, CRC&) NEXT whatsleft = LOF(handle) MOD LoadBuffer 'do the oddballs now b$ = SPACE$(whatsleft) 'whatever's left over GET handle, , b$ 'get it CRC& = QBCRC(SSEG(b$), SADD(b$), whatsleft, CRC&) CLOSE handle 'close file FileCRC& = NOT CRC& 'return CRC to caller END FUNCTION --- * Origin: Eric Ford (1:3632/1.6)
Books at Amazon:
Back to BASIC: The History, Corruption, and Future of the Language
Hackers: Heroes of the Computer Revolution (including Tiny BASIC)
Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution
The Advent of the Algorithm: The Idea that Rules the World
Moths in the Machine: The Power and Perils of Programming
Mastering Visual Basic .NET