home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / msdos / opus / fvsrc620.arc / UNLZH.H < prev    next >
C/C++ Source or Header  |  1989-05-26  |  6KB  |  140 lines

  1. /*--------------------------------------------------------------------------*/
  2. /*                                                                          */
  3. /* Copyright 1989, Doug Boone.  FidoNet 119/5                               */
  4. /*                              (916) 893-9019 Data                         */
  5. /*                              (916) 891-0748 voice                        */
  6. /*                              P.O. Box 5108, Chico, CA. 95928             */
  7. /*                                                                          */
  8. /* This program is not for sale. It is for the free use with Opus systems.  */
  9. /* You may not sell it in ANY way. If you have an access charge to your     */
  10. /* Bulletin Board, consider this to be like Opus, you can ONLY make it      */
  11. /* available for download in an open area, where non-members can get access */
  12. /*                                                                          */
  13. /* If you need to modify this source code, please send me a copy of the     */
  14. /* changes you've made so that everyone can share in the updates.           */
  15. /*                                                                          */
  16. /* "Don't rip me off!" -- Tom Jennings, FidoNet's founder                   */
  17. /*                                                                          */
  18. /*--------------------------------------------------------------------------*/
  19.  
  20.  
  21. /* LZSS Parameters */
  22.  
  23. #define     N            4096    /* Size of string buffer */
  24. #define     F            60    /* Size of look-ahead buffer */
  25. #define     THRESHOLD    2
  26. #define     NIL            N    /* End of tree's node  */
  27. #define     N_CHAR      (256 - THRESHOLD + F)
  28.                 /* character code (= 0..N_CHAR-1) */
  29. #define     T             (N_CHAR * 2 - 1)    /* Size of table */
  30. #define     R             (T - 1)            /* root position */
  31. #define     MAX_FREQ    0x8000
  32.                     /* update when cumulative frequency */
  33.                     /* reaches to this value */
  34.  
  35.  
  36.  
  37. extern  FILE    *Log_fp;
  38.  
  39. extern  int     infile;
  40. extern  int     outfile;
  41. extern  byte    *inbuf;
  42. extern  byte    *inptr;
  43. extern  byte    *outbuf;
  44. extern  byte    *outptr;
  45. extern  unsigned    inpos;
  46. extern  unsigned    outpos;
  47. extern  long        packed;
  48. extern  long        unpacked;
  49. extern  unsigned    insize;
  50. extern  unsigned    outsize;
  51.  
  52. unsigned    getbuf = 0;
  53. byte        getlen = 0;
  54.  
  55. byte        text_buf[N + F - 1];
  56. unsigned    freq[T + 1];    /* cumulative freq table */
  57. int         prnt[T + N_CHAR];
  58. int         son[T];
  59.  
  60.  
  61. /* Huffman coding parameters */
  62.  
  63. /*
  64.  * Tables for encoding/decoding upper 6 bits of
  65.  * sliding dictionary pointer
  66.  */
  67.  
  68. /* decoder table */
  69. byte        d_code[256] = {
  70.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  71.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  72.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  73.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  74.     0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
  75.     0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
  76.     0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
  77.     0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
  78.     0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
  79.     0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
  80.     0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
  81.     0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
  82.     0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
  83.     0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
  84.     0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
  85.     0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
  86.     0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
  87.     0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B,
  88.     0x0C, 0x0C, 0x0C, 0x0C, 0x0D, 0x0D, 0x0D, 0x0D,
  89.     0x0E, 0x0E, 0x0E, 0x0E, 0x0F, 0x0F, 0x0F, 0x0F,
  90.     0x10, 0x10, 0x10, 0x10, 0x11, 0x11, 0x11, 0x11,
  91.     0x12, 0x12, 0x12, 0x12, 0x13, 0x13, 0x13, 0x13,
  92.     0x14, 0x14, 0x14, 0x14, 0x15, 0x15, 0x15, 0x15,
  93.     0x16, 0x16, 0x16, 0x16, 0x17, 0x17, 0x17, 0x17,
  94.     0x18, 0x18, 0x19, 0x19, 0x1A, 0x1A, 0x1B, 0x1B,
  95.     0x1C, 0x1C, 0x1D, 0x1D, 0x1E, 0x1E, 0x1F, 0x1F,
  96.     0x20, 0x20, 0x21, 0x21, 0x22, 0x22, 0x23, 0x23,
  97.     0x24, 0x24, 0x25, 0x25, 0x26, 0x26, 0x27, 0x27,
  98.     0x28, 0x28, 0x29, 0x29, 0x2A, 0x2A, 0x2B, 0x2B,
  99.     0x2C, 0x2C, 0x2D, 0x2D, 0x2E, 0x2E, 0x2F, 0x2F,
  100.     0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
  101.     0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
  102. };
  103.  
  104. byte        d_len[256] = {
  105.     0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
  106.     0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
  107.     0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
  108.     0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
  109.     0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
  110.     0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
  111.     0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
  112.     0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
  113.     0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
  114.     0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
  115.     0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
  116.     0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
  117.     0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
  118.     0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
  119.     0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
  120.     0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
  121.     0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
  122.     0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
  123.     0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
  124.     0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
  125.     0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
  126.     0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
  127.     0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
  128.     0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
  129.     0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
  130.     0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
  131.     0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
  132.     0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
  133.     0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
  134.     0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
  135.     0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
  136.     0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
  137. };
  138.  
  139.  
  140.