home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 9 Archive / 09-Archive.zip / zoo21-2.zip / source / addbfmsc.c < prev    next >
C/C++ Source or Header  |  1991-07-14  |  1KB  |  42 lines

  1. #ifndef LINT
  2. static char sccsid[]="$Source: /usr/home/dhesi/zoo/RCS/addbfmsc.c,v $\n\
  3. $Id: addbfmsc.c,v 1.1 91/07/07 18:40:11 dhesi Exp $";
  4. #endif /* LINT */
  5.  
  6. extern unsigned int crccode;
  7. extern unsigned crctab[];
  8.  
  9. void addbfcrc(buffer,count)
  10. char *buffer;
  11. int count;
  12. {
  13.     kbhit();        /* allow keyboard interrupt to occur */
  14.  
  15.         _asm
  16.         {
  17.         mov ax,crccode;    /* ax holds crccode value */
  18.         mov cx,count;    /* cx holds byte count */
  19.         les di,buffer    /* es:di holds buffer address */
  20.  
  21.         jcxz done        /* if zero bytes, just skip */
  22.  
  23. /* loop begins here */
  24. xloop:
  25.         sub bh,bh
  26.         mov bl,al
  27.         xor bl,es:[di]    /* now bx = (crccode xor c) & 0x00ff */
  28.             shl bx,1            /* shifts _BX left (2-byte items) */
  29.             mov dx,crctab[bx];    /* dx <= *buffer == exp2 */
  30.         sub bh,bh        /* bh = 0 */
  31.         mov bl,ah        /* bx <- exp1 */
  32.         xor bx,dx        /* bx <- exp1 xor exp2 */
  33.         mov ax,bx        /* crccode <- exp1 xor exp2 */
  34.         inc di        /* inc buffer pointer */
  35.         loop xloop        /* dec CX, jump if not zero */
  36. /* loop ends here */
  37.  
  38.         mov crccode,ax;    /* put back calculated CRC value */
  39. done:
  40.     }
  41. }
  42.