00001 00008 #ifndef dkutil_c_LZSS__h 00009 #define dkutil_c_LZSS__h 00010 00011 00012 #include "dkcOSIndependent.h" 00013 00015 #define LZSS_RING_LENGTH 4096 00016 00017 #define LZSS_RING_MASK (LZSS_RING_LENGTH-1) 00018 00019 #define LZSS_LONGEST_MATCH 16 00020 00021 typedef struct dkc_LZSS 00022 { 00024 long Dad[LZSS_RING_LENGTH+1]; 00026 long LSon[LZSS_RING_LENGTH+1]; 00028 long RSon[LZSS_RING_LENGTH+257]; 00029 00031 long MatchPos; 00033 long MatchLen; 00035 unsigned char Text[LZSS_RING_LENGTH + LZSS_LONGEST_MATCH - 1]; 00036 }DKC_LZSS; 00037 00038 typedef struct dkc_LZSS_Header{ 00039 unsigned long mSignature; 00041 size_t mOriginSize; 00043 size_t mCompressedSize; 00044 00045 }DKC_LZSS_HEADER; 00046 00047 00048 DKC_EXTERN DKC_LZSS *WINAPI dkcAllocLZSS(); 00049 00050 DKC_EXTERN int WINAPI dkcFreeLZSS(DKC_LZSS **); 00062 DKC_EXTERN int WINAPI dkcLZSSDecode(DKC_LZSS *ptr,DKC_LZSS_HEADER *ph, 00063 BYTE *dest,size_t dsize,const BYTE *src,size_t ssize); 00073 DKC_EXTERN int WINAPI dkcLZSSEncode(DKC_LZSS *ptr,DKC_LZSS_HEADER *ph, 00074 BYTE *dest,size_t dsize,const BYTE *src,size_t ssize); 00075 00076 00077 DKC_EXTERN BOOL WINAPI dkcLZSSIsLZSS(DKC_LZSS_HEADER *p); 00078 00079 00080 00081 00082 #endif