home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 9 Archive / 09-Archive.zip / FREEZE-2.ZIP / decode.c < prev    next >
C/C++ Source or Header  |  1992-07-18  |  2KB  |  122 lines

  1. #include "freeze.h"
  2. #include "huf.h"
  3. #include "bitio.h"
  4.  
  5. /*
  6.  * Melt stdin to stdout.
  7.  */
  8.  
  9. void melt2 ()
  10. {
  11.     register short    i, j, k, r, c;
  12.  
  13. /* Huffman-dependent part */
  14.     if(read_header() == EOF)
  15.         return;
  16.     StartHuff(N_CHAR2);
  17.     init(Table2);
  18. /* end of Huffman-dependent part */
  19.  
  20.     InitIO();
  21.     for (i = 0; i < N2 - F2; i++)
  22.         text_buf[i] = ' ';
  23.     r = N2 - F2;
  24.     for (in_count = 0;; ) {
  25.         c = DecodeChar();
  26.  
  27.         if (c == ENDOF)
  28.             break;
  29.         if (c < 256) {
  30. #ifdef DEBUG
  31.             if (debug)
  32.                 fprintf(stderr, "'%s'\n", pr_char((uc_t)c));
  33.             else
  34. #endif /* DEBUG */
  35.                 putchar (c);
  36.             text_buf[r++] = c;
  37.             r &= N2 - 1;
  38.             in_count++;
  39.         } else {
  40.             i = (r - DecodePosition() - 1) & (N2 - 1);
  41.             j = c - 256 + THRESHOLD;
  42. #ifdef DEBUG
  43.             if (debug)
  44.                 fputc('"', stderr);
  45. #endif
  46.             for (k = 0; k < j; k++) {
  47.                 c = text_buf[(i + k) & (N2 - 1)];
  48. #ifdef DEBUG
  49.                 if (debug)
  50.                     fprintf(stderr, "%s", pr_char((uc_t)c));
  51.                 else
  52. #endif
  53.                     putchar (c);
  54.                 text_buf[r++] = c;
  55.                 r &= (N2 - 1);
  56.                 in_count++;
  57.             }
  58. #ifdef DEBUG
  59.             if (debug)
  60.                 fprintf(stderr, "\"\n");
  61. #endif
  62.         }
  63.         INDICATOR
  64.     }
  65. }
  66.  
  67. #ifdef COMPAT
  68. void melt1 ()
  69. {
  70.     register short    i, j, k, r, c;
  71.  
  72.     StartHuff(N_CHAR1);
  73.     init(Table1);
  74.     InitIO();
  75.     for (i = 0; i < N1 - F1; i++)
  76.         text_buf[i] = ' ';
  77.     r = N1 - F1;
  78.     for (in_count = 0;; ) {
  79.         c =  DecodeChar();
  80.  
  81.         if (c == ENDOF)
  82.             break;
  83.  
  84.         if (c < 256) {
  85. #ifdef DEBUG
  86.             if (debug)
  87.                 fprintf(stderr, "'%s'\n", pr_char((uc_t)c));
  88.             else
  89. #endif /* DEBUG */
  90.                 putchar (c);
  91.             text_buf[r++] = c;
  92.             r &= (N1 - 1);
  93.             in_count++;
  94.         } else {
  95.             i = (r - DecodePOld() - 1) & (N1 - 1);
  96.             j = c - 256 + THRESHOLD;
  97. #ifdef DEBUG
  98.             if (debug)
  99.                 fputc('"', stderr);
  100. #endif
  101.             for (k = 0; k < j; k++) {
  102.                 c = text_buf[(i + k) & (N1 - 1)];
  103. #ifdef DEBUG
  104.                 if (debug)
  105.                     fprintf(stderr, "%s", pr_char((uc_t)c));
  106.                 else
  107. #endif
  108.                     putchar (c);
  109.                 text_buf[r++] = c;
  110.                 r &= (N1 - 1);
  111.                 in_count++;
  112.             }
  113. #ifdef DEBUG
  114.             if (debug)
  115.                 fprintf(stderr, "\"\n");
  116. #endif
  117.         }
  118.         INDICATOR
  119.     }
  120. }
  121. #endif
  122.