home *** CD-ROM | disk | FTP | other *** search
/ Fish 'n' More 2 / fishmore-publicdomainlibraryvol.ii1991xetec.iso / fish / programming / mkid / src / bitsvec.c < prev    next >
C/C++ Source or Header  |  1991-02-01  |  2KB  |  97 lines

  1. /* Copyright (c) 1986, Greg McGary */
  2. static char sccsid[] = "@(#)bitsvec.c    1.1 86/10/09";
  3.  
  4. #include    <stdio.h>
  5. #include    "bitops.h"
  6. #include    "string.h"
  7. #include    "extern.h"
  8. #include    "id.h"
  9.  
  10. int vecToBits();
  11. int bitsToVec();
  12. char *intToStr();
  13. int getsFF();
  14. int strToInt();
  15. void skipFF();
  16.  
  17. int
  18. vecToBits(bitArray, vec, size)
  19.     register char    *bitArray;
  20.     register char    *vec;
  21.     int        size;
  22. {
  23.     register int    i;
  24.     int        count;
  25.  
  26.     for (count = 0; (*vec & 0xff) != 0xff; count++) {
  27.         i = strToInt(vec, size);
  28.         BITSET(bitArray, i);
  29.         vec += size;
  30.     }
  31.     return count;
  32. }
  33.  
  34. int
  35. bitsToVec(vec, bitArray, bitCount, size)
  36.     register char    *vec;
  37.     char        *bitArray;
  38.     int        bitCount;
  39.     int        size;
  40. {
  41.     register char    *element;
  42.     register int    i;
  43.     int        count;
  44.  
  45.     for (count = i = 0; i < bitCount; i++) {
  46.         if (!BITTST(bitArray, i))
  47.             continue;
  48.         element = intToStr(i, size);
  49.         switch (size) {
  50.         case 4: *vec++ = *element++;
  51.         case 3: *vec++ = *element++;
  52.         case 2: *vec++ = *element++;
  53.         case 1: *vec++ = *element++;
  54.         }
  55.         count++;
  56.     }
  57.     *vec++ = 0xff;
  58.  
  59.     return count;
  60. }
  61.  
  62. char *
  63. intToStr(i, size)
  64.     register int    i;
  65.     int        size;
  66. {
  67.     static char    buf0[4];
  68.     register char    *bufp = &buf0[size];
  69.  
  70.     switch (size)
  71.     {
  72.     case 4:    *--bufp = (i & 0xff); i >>= 8;
  73.     case 3: *--bufp = (i & 0xff); i >>= 8;
  74.     case 2: *--bufp = (i & 0xff); i >>= 8;
  75.     case 1: *--bufp = (i & 0xff);
  76.     }
  77.     return buf0;
  78. }
  79.  
  80. int
  81. strToInt(bufp, size)
  82.     register char    *bufp;
  83.     int        size;
  84. {
  85.     register int    i = 0;
  86.  
  87.     bufp--;
  88.     switch (size)
  89.     {
  90.     case 4: i |= (*++bufp & 0xff); i <<= 8;
  91.     case 3: i |= (*++bufp & 0xff); i <<= 8;
  92.     case 2: i |= (*++bufp & 0xff); i <<= 8;
  93.     case 1: i |= (*++bufp & 0xff);
  94.     }
  95.     return i;
  96. }
  97.