#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
