mirror of
https://github.com/xiaoyifang/goldendict-ng.git
synced 2024-11-24 12:44:07 +00:00
42 lines
1 KiB
C++
42 lines
1 KiB
C++
|
/* hunzip: file decompression for sorted dictionaries with optional encryption,
|
||
|
* algorithm: prefix-suffix encoding and 16-bit Huffman encoding */
|
||
|
|
||
|
#ifndef _HUNZIP_HXX_
|
||
|
#define _HUNZIP_HXX_
|
||
|
|
||
|
#define BUFSIZE 65536
|
||
|
#define HZIP_EXTENSION ".hz"
|
||
|
|
||
|
#define MSG_OPEN "error: %s: cannot open\n"
|
||
|
#define MSG_FORMAT "error: %s: not in hzip format\n"
|
||
|
#define MSG_MEMORY "error: %s: missing memory\n"
|
||
|
#define MSG_KEY "error: %s: missing or bad password\n"
|
||
|
|
||
|
struct bit {
|
||
|
unsigned char c[2];
|
||
|
int v[2];
|
||
|
};
|
||
|
|
||
|
class Hunzip
|
||
|
{
|
||
|
|
||
|
protected:
|
||
|
char * filename;
|
||
|
FILE * fin;
|
||
|
int bufsiz, lastbit, inc, inbits, outc;
|
||
|
struct bit * dec; // code table
|
||
|
char in[BUFSIZE]; // input buffer
|
||
|
char out[BUFSIZE + 1]; // Huffman-decoded buffer
|
||
|
char line[BUFSIZE + 50]; // decoded line
|
||
|
int getcode(const char * key);
|
||
|
int getbuf();
|
||
|
int fail(const char * err, const char * par);
|
||
|
|
||
|
public:
|
||
|
Hunzip(const char * filename, const char * key = NULL);
|
||
|
~Hunzip();
|
||
|
const char * getline();
|
||
|
};
|
||
|
|
||
|
#endif
|