BBS: Inland Empire Archive Date: 09-14-92 (18:46) Number: 315 From: DICK DENNISON Refer#: NONE To: BOB EDWARDS Recvd: NO Subj: Re: How to do CRC's in QB Conf: (2) Quik_Bas
->How does the CRC alagorithm go, and how do I adapt this to QB to make ->CRC's there? BE> I'll second that request. This sound like a good topic to cover BE> along with (1) compression, (2) file transfer protocols Ok, you asked for it. This is a routine I use to make the new CRC16 (CCIT spec) for our local network. The crc16 routine is copyright Donn Bly, so be advised to read the fine print enclosed, although the algorhythm is PD. This routine has not been optimized, so I don't want to hear complaints. 'DIX CRC computes CCIT CRC for small nodelists for pdq 'Dick Dennison 1:272/34 74270,3636@compuserve.com '12/15/91 stuffs crc into nodelist '1/7/92 allow for leading zeros DECLARE FUNCTION PDQTimer& DECLARE FUNCTION Computecrc& (x$) 'from Donn Bly DIM a AS STRING * 1 IF COMMAND$ = "" THEN PRINT "Enter nodelist number : "; LINE INPUT ab$ ELSE ab$ = COMMAND$ END IF spec$ = "nodelist." + ab$ OPEN spec$ FOR INPUT AS 1 'throw away first line LINE INPUT #1, oneline$ begin% = SEEK(1) replace% = begin% - 7 'where the CRC number is to go later CLOSE 1 OPEN spec$ FOR BINARY AS 1 'nodelist name with first line SEEK 1, begin% Lenfile& = LOF(1) - begin% FOR n& = 1 TO Lenfile& 'this could easily be optimized GET 1, , a$ 'with B$GETx crc& = Computecrc&(a$) NEXT n& CLOSE 1 PRINT "Decimal CRC : "; crc& textcrc$ = LTRIM$(STR$(crc&)) IF LEN(textcrc$) < 5 THEN textcrc$ = STRING$(5 - LEN(textcrc$), "0") + tex tcrc$ OPEN spec$ FOR BINARY AS 1 SEEK 1, replace% PUT 1, , textcrc$ CLOSE 1 FUNCTION Computecrc& (x$) ' ComputeCRC - Copyright (C) 1989, Donn Bly, 1:236/7.0 ' ' Standard Donn Bly Licencing Agreement: ' This code may be used for anything that you want, except for profit. I f ' you want to profit from my work you had better talk to me first. ' NOTE: The CRC Polynomial was redone by Dick Dennison for CCIT16 STATIC InputByte AS INTEGER, CRCword AS LONG, c%, FeedBackBit AS INTEGER ' ' CRC Calculation Polynomial = X^16+X^12+X^5+X^0 (CCIT 16) ' ' X$ is the block on which to compute the CRC ' 'CRCword = 0 'this line is Dick's FOR c% = 1 TO LEN(x$) InputByte = ASC(MID$(x$, c%, 1)) FeedBackBit = ((CRCword AND 32768) = 32768) XOR ((InputByte AND 128) = 128) CRCword = ((CRCword AND 32767&) * 2&) IF FeedBackBit THEN CRCword = CRCword XOR &H1021& FeedBackBit = ((CRCword AND 32768) = 32768) XOR ((InputByte AND 64) = 6 4) CRCword = ((CRCword AND 32767&) * 2&) IF FeedBackBit THEN CRCword = CRCword XOR &H1021& FeedBackBit = ((CRCword AND 32768) = 32768) XOR ((InputByte AND 32) = 3 2) CRCword = ((CRCword AND 32767&) * 2&) IF FeedBackBit THEN CRCword = CRCword XOR &H1021& FeedBackBit = ((CRCword AND 32768) = 32768) XOR ((InputByte AND 16) = 1 6) CRCword = ((CRCword AND 32767&) * 2&) IF FeedBackBit THEN CRCword = CRCword XOR &H1021& FeedBackBit = ((CRCword AND 32768) = 32768) XOR ((InputByte AND 8) = 8) CRCword = ((CRCword AND 32767&) * 2&) IF FeedBackBit THEN CRCword = CRCword XOR &H1021& FeedBackBit = ((CRCword AND 32768) = 32768) XOR ((InputByte AND 4) = 4) CRCword = ((CRCword AND 32767&) * 2&) IF FeedBackBit THEN CRCword = CRCword XOR &H1021& FeedBackBit = ((CRCword AND 32768) = 32768) XOR ((InputByte AND 2) = 2) CRCword = ((CRCword AND 32767&) * 2&) IF FeedBackBit THEN CRCword = CRCword XOR &H1021& FeedBackBit = ((CRCword AND 32768) = 32768) XOR ((InputByte AND 1) = 1) CRCword = ((CRCword AND 32767&) * 2&) IF FeedBackBit THEN CRCword = CRCword XOR &H1021& NEXT c% Computecrc& = CRCword& END FUNCTION 'Sorry for the line wrap. Also be advised that there are at least two common CRC16 polynomials and either will yeild a different CRC. For more info on CRC's, look up 'C Programmer's Guide to serial Comm.' by Joe Campbell, Sams & Co., ISBN 0-672-22584-0. Feel free to abuse/use. --- VP [DOS] V4.09e * Origin: The MailMan (914)374-3903 NY Quick Share Pt #7 *HST (1:272/34)
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