home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / misc / volume17 / freeze / part02 / decode.c < prev    next >
C/C++ Source or Header  |  1991-03-25  |  1KB  |  62 lines

  1. #include "freeze.h"
  2.  
  3. /*
  4.  * Melt stdin to stdout.
  5.  */
  6.  
  7. melt ()
  8. {
  9.     register short    i, j, k, n, r, c;
  10. #ifdef COMPAT
  11.     if(new_flg)
  12. #endif
  13.     if(read_header() == EOF)
  14.         return;
  15.  
  16.     StartHuff();
  17.     n = N;
  18.     for (i = 0; i < n - F; i++)
  19.         text_buf[i] = ' ';
  20.     r = n - F;
  21.     n --;   /* array size --> mask */
  22.     for (in_count = 0;; ) {
  23.         c =
  24. #ifdef COMPAT
  25.         new_flg ? DecodeChar() : DecodeCOld();
  26. #else
  27.         DecodeChar();
  28. #endif
  29.         if (c == ENDOF)
  30.             break;
  31.         if (c < 256) {
  32.             putchar (c);
  33.             text_buf[r++] = c;
  34.             r &= n;
  35.             in_count++;
  36.         } else {
  37.             i = (r -
  38. #ifdef COMPAT
  39.                 (new_flg ? DecodePosition() : DecodePOld())
  40. #else
  41.                 DecodePosition()
  42. #endif
  43.                 - 1) & n;
  44.             j = c - 256 + THRESHOLD;
  45.             for (k = 0; k < j; k++) {
  46.                 c = text_buf[(i + k) & n];
  47.                 putchar (c);
  48.                 text_buf[r++] = c;
  49.                 r &= n;
  50.                 in_count++;
  51.             }
  52.         }
  53.  
  54.         if (!quiet && (in_count > indicator_count)) {
  55.             fprintf(stderr, "%5dK\b\b\b\b\b\b", in_count / 1024);
  56.             fflush (stderr);
  57.             indicator_count += indicator_threshold;
  58.             indicator_threshold += 1024;
  59.         }
  60.     }
  61. }
  62.