init
[qstardict] / plugins / stardict / dictziplib.hpp
diff --git a/plugins/stardict/dictziplib.hpp b/plugins/stardict/dictziplib.hpp
new file mode 100644 (file)
index 0000000..78c0866
--- /dev/null
@@ -0,0 +1,63 @@
+#ifndef __DICT_ZIP_LIB_H__
+#define __DICT_ZIP_LIB_H__
+
+#include <ctime>
+#include <string>
+#include <zlib.h>
+
+#include "mapfile.hpp"
+
+
+#define DICT_CACHE_SIZE 5
+
+struct dictCache
+{
+    int chunk;
+    char *inBuffer;
+    int stamp;
+    int count;
+};
+
+struct dictData
+{
+    dictData()
+    {}
+    bool open(const std::string& filename, int computeCRC);
+    void close();
+    void read(char *buffer, unsigned long start, unsigned long size);
+    ~dictData()
+    {
+        close();
+    }
+private:
+    const char *start; /* start of mmap'd area */
+    const char *end;           /* end of mmap'd area */
+    unsigned long size;                /* size of mmap */
+
+    int type;
+    z_stream zStream;
+    int initialized;
+
+    int headerLength;
+    int method;
+    int flags;
+    time_t mtime;
+    int extraFlags;
+    int os;
+    int version;
+    int chunkLength;
+    int chunkCount;
+    int *chunks;
+    unsigned long *offsets;    /* Sum-scan of chunks. */
+    std::string origFilename;
+    std::string comment;
+    unsigned long crc;
+    unsigned long length;
+    unsigned long compressedLength;
+    dictCache cache[DICT_CACHE_SIZE];
+    MapFile mapfile;
+
+    int read_header(const std::string &filename, int computeCRC);
+};
+
+#endif//!__DICT_ZIP_LIB_H__