home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_disks / 200-299 / ff294.lzh / DNet / amiga / dnet / dataconv.c < prev    next >
Text File  |  1989-12-11  |  2KB  |  150 lines

  1.  
  2. /*
  3.  *  DATACONV.C
  4.  *
  5.  *  Data Conversion.
  6.  */
  7.  
  8. typedef unsigned char ubyte;
  9. typedef unsigned short uword;
  10. typedef unsigned long ulong;
  11.  
  12.  
  13. int
  14. Compress7(s, db, n)
  15. ubyte *s;
  16. ubyte *db;
  17. uword n;    /*    actual source bytes */
  18. {
  19.     ubyte *d = db;
  20.  
  21.     while (n) {
  22.     *d++ = *s++ << 1;
  23.  
  24.     if (--n == 0)
  25.         break;
  26.     d[-1] |= *s >> 6;
  27.     *d++ = *s++ << 2;
  28.  
  29.     if (--n == 0)
  30.         break;
  31.     d[-1] |= *s >> 5;
  32.     *d++ = *s++ << 3;
  33.  
  34.     if (--n == 0)
  35.         break;
  36.     d[-1] |= *s >> 4;
  37.     *d++ = *s++ << 4;
  38.  
  39.     if (--n == 0)
  40.         break;
  41.     d[-1] |= *s >> 3;
  42.     *d++ = *s++ << 5;
  43.  
  44.     if (--n == 0)
  45.         break;
  46.     d[-1] |= *s >> 2;
  47.     *d++ = *s++ << 6;
  48.  
  49.     if (--n == 0)
  50.         break;
  51.     d[-1] |= *s >> 1;
  52.     *d++ = *s++ << 7;
  53.  
  54.     if (--n == 0)
  55.         break;
  56.     d[-1] |= *s++;
  57.     --n;
  58.     }
  59.     return(d - db);
  60. }
  61.  
  62. void
  63. UnCompress7(s, d, n)
  64. ubyte *s;
  65. ubyte *d;
  66. uword n;    /*    actual destination bytes */
  67. {
  68.     while (n) {
  69.     *d++ = s[0] >> 1;
  70.  
  71.     if (--n == 0)
  72.         break;
  73.     *d++ = ((s[0] << 6) | (s[1] >> 2)) & 0x7F;
  74.  
  75.     if (--n == 0)
  76.         break;
  77.     *d++ = ((s[1] << 5) | (s[2] >> 3)) & 0x7F;
  78.  
  79.     if (--n == 0)
  80.         break;
  81.     *d++ = ((s[2] << 4) | (s[3] >> 4)) & 0x7F;
  82.  
  83.     if (--n == 0)
  84.         break;
  85.     *d++ = ((s[3] << 3) | (s[4] >> 5)) & 0x7F;
  86.  
  87.     if (--n == 0)
  88.         break;
  89.     *d++ = ((s[4] << 2) | (s[5] >> 6)) & 0x7F;
  90.  
  91.     if (--n == 0)
  92.         break;
  93.     *d++ = ((s[5] << 1) | (s[6] >> 7)) & 0x7F;
  94.  
  95.     if (--n == 0)
  96.         break;
  97.     *d++ = s[6] & 0x7F;
  98.  
  99.     --n;
  100.     s += 7;
  101.     }
  102. }
  103.  
  104.  
  105. int
  106. Expand6(s, db, n)
  107. ubyte *s;
  108. ubyte *db;
  109. uword n;    /*    actual source bytes */
  110. {
  111.     ubyte *d = db;
  112.  
  113.     while (n) {
  114.     *d++ = 0x40 | (*s >> 2);
  115.     *d++ = 0x40 | ((*s++ & 3) << 4);
  116.     if (--n) {
  117.         d[-1] |= *s >> 4;
  118.         *d++ = 0x40 | ((*s++ & 0x0F) << 2);
  119.         if (--n) {
  120.         d[-1] |= *s >> 6;
  121.         *d++ = 0x40 | (*s++ & 0x3F);
  122.         --n;
  123.         }
  124.     }
  125.     }
  126.     return(d - db);
  127. }
  128.  
  129. void
  130. UnExpand6(s, d, n)
  131. ubyte *s;
  132. ubyte *d;
  133. uword n;    /*    actual destination bytes */
  134. {
  135.     while (n) {
  136.     *d++ = (s[0] << 2) | ((s[1] & 0x30) >> 4);
  137.     if (--n == 0)
  138.         break;
  139.     *d++ = (s[1] << 4) | ((s[2] & 0x3C) >> 2);
  140.     if (--n == 0)
  141.         break;
  142.     *d++ = (s[2] << 6) | (s[3] & 0x3F);
  143.     --n;
  144.     s += 4;
  145.     }
  146. }
  147.  
  148.  
  149.  
  150.