home *** CD-ROM | disk | FTP | other *** search
- #pragma inline /* tell turbo assemble to use inline assembly */
- #ifndef LINT
- static char sccsid[]="$Source: /usr/home/dhesi/zoo/RCS/addbftcc.c,v $\n\
- $Id: addbftcc.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;
- {
- (void) kbhit(); /* allow keyboard interrupt to occur */
- _AX = crccode; /* ax holds crccode value */
- _CX = count; /* cx holds byte count */
- asm les di,buffer /* es:di holds buffer address */
-
- asm jcxz done /* if zero bytes, just skip */
-
- /* loop begins here */
- xloop:
- asm sub bh,bh
- asm mov bl,al
- asm xor bl,es:[di] /* now bx = (crccode xor c) & 0x00ff */
- /* next statement shifts _BX left (2-byte items) */
- _DX = crctab[_BX]; /* dx <= *buffer == exp2 */
- asm sub bh,bh /* bh = 0 */
- asm mov bl,ah /* bx <- exp1 */
- asm xor bx,dx /* bx <- exp1 xor exp2 */
- asm mov ax,bx /* crccode <- exp1 xor exp2 */
- asm inc di /* inc buffer pointer */
- asm loop xloop /* dec CX, jump if not zero */
- /* loop ends here */
-
- crccode = _AX; /* put back calculated CRC value */
-
- done:
- ;
-
- }
-
-
- #if 0
- ; The following (edited) code was generated by Turbo C from the
- ; preceding code. It is supplied here for porting to other systems
- ; and for user education.
-
- _TEXT segment byte public 'CODE'
- _TEXT ends
-
- DGROUP group _DATA,_BSS
- assume cs:_TEXT,ds:DGROUP
-
- _DATA segment word public 'DATA'
- _DATA ends
-
- _BSS segment word public 'BSS'
- _BSS ends
-
- _TEXT segment byte public 'CODE'
-
- assume cs:_TEXT
- _addbfcrc proc near
- push bp
- mov bp,sp
- push di
-
- call near ptr _kbhit
- mov ax,word ptr DGROUP:_crccode
- mov cx,word ptr [bp+8]
- les di,[bp+4]
- jcxz short @1@362
- @1@98:
- sub bh,bh
- mov bl,al
- xor bl,es:[di]
- shl bx,1
- mov dx,word ptr DGROUP:_crctab[bx]
- sub bh,bh
- mov bl,ah
- xor bx,dx
- mov ax,bx
- inc di
- loop short @1@98
- mov word ptr DGROUP:_crccode,ax
- @1@362:
- pop di
- pop bp
- ret
- _addbfcrc endp
- _TEXT ends
-
- extrn _crccode:word
- extrn _kbhit:near
- extrn _crctab:word
- public _addbfcrc
- end
- #endif
-