home *** CD-ROM | disk | FTP | other *** search
- #ifndef LINT
- static char sccsid[]="$Source: /usr/home/dhesi/zoo/RCS/addbfmsc.c,v $\n\
- $Id: addbfmsc.c,v 1.1 91/07/07 18:40:11 dhesi Exp $";
- #endif /* LINT */
-
- extern unsigned int crccode;
- extern unsigned crctab[];
-
- void addbfcrc(buffer,count)
- char *buffer;
- int count;
- {
- kbhit(); /* allow keyboard interrupt to occur */
-
- _asm
- {
- mov ax,crccode; /* ax holds crccode value */
- mov cx,count; /* cx holds byte count */
- les di,buffer /* es:di holds buffer address */
-
- jcxz done /* if zero bytes, just skip */
-
- /* loop begins here */
- xloop:
- sub bh,bh
- mov bl,al
- xor bl,es:[di] /* now bx = (crccode xor c) & 0x00ff */
- shl bx,1 /* shifts _BX left (2-byte items) */
- mov dx,crctab[bx]; /* dx <= *buffer == exp2 */
- sub bh,bh /* bh = 0 */
- mov bl,ah /* bx <- exp1 */
- xor bx,dx /* bx <- exp1 xor exp2 */
- mov ax,bx /* crccode <- exp1 xor exp2 */
- inc di /* inc buffer pointer */
- loop xloop /* dec CX, jump if not zero */
- /* loop ends here */
-
- mov crccode,ax; /* put back calculated CRC value */
- done:
- }
- }
-