|
@@ -244,39 +244,39 @@ typedef struct _TreeNode
|
|
|
{
|
|
|
unsigned short weight;
|
|
|
unsigned short value;
|
|
|
- struct _TreeNode* parent;
|
|
|
- struct _TreeNode* left;
|
|
|
- struct _TreeNode* right;
|
|
|
+ struct _TreeNode *parent;
|
|
|
+ struct _TreeNode *left;
|
|
|
+ struct _TreeNode *right;
|
|
|
} TreeNode;
|
|
|
|
|
|
typedef struct _Tree
|
|
|
{
|
|
|
- TreeNode* node;
|
|
|
- TreeNode** list;
|
|
|
+ TreeNode *node;
|
|
|
+ TreeNode **list;
|
|
|
} Tree;
|
|
|
|
|
|
static unsigned char data1[0x100] =
|
|
|
{
|
|
|
-0x3f,0x0b,0x17,0x03,0x2f,0x0a,0x16,0x00,0x2e,0x09,0x15,0x02,0x2d,0x01,0x08,0x00,
|
|
|
-0x3e,0x07,0x14,0x03,0x2c,0x06,0x13,0x00,0x2b,0x05,0x12,0x02,0x2a,0x01,0x04,0x00,
|
|
|
-0x3d,0x0b,0x11,0x03,0x29,0x0a,0x10,0x00,0x28,0x09,0x0f,0x02,0x27,0x01,0x08,0x00,
|
|
|
-0x3c,0x07,0x0e,0x03,0x26,0x06,0x0d,0x00,0x25,0x05,0x0c,0x02,0x24,0x01,0x04,0x00,
|
|
|
-0x3b,0x0b,0x17,0x03,0x23,0x0a,0x16,0x00,0x22,0x09,0x15,0x02,0x21,0x01,0x08,0x00,
|
|
|
-0x3a,0x07,0x14,0x03,0x20,0x06,0x13,0x00,0x1f,0x05,0x12,0x02,0x1e,0x01,0x04,0x00,
|
|
|
-0x39,0x0b,0x11,0x03,0x1d,0x0a,0x10,0x00,0x1c,0x09,0x0f,0x02,0x1b,0x01,0x08,0x00,
|
|
|
-0x38,0x07,0x0e,0x03,0x1a,0x06,0x0d,0x00,0x19,0x05,0x0c,0x02,0x18,0x01,0x04,0x00,
|
|
|
-0x37,0x0b,0x17,0x03,0x2f,0x0a,0x16,0x00,0x2e,0x09,0x15,0x02,0x2d,0x01,0x08,0x00,
|
|
|
-0x36,0x07,0x14,0x03,0x2c,0x06,0x13,0x00,0x2b,0x05,0x12,0x02,0x2a,0x01,0x04,0x00,
|
|
|
-0x35,0x0b,0x11,0x03,0x29,0x0a,0x10,0x00,0x28,0x09,0x0f,0x02,0x27,0x01,0x08,0x00,
|
|
|
-0x34,0x07,0x0e,0x03,0x26,0x06,0x0d,0x00,0x25,0x05,0x0c,0x02,0x24,0x01,0x04,0x00,
|
|
|
-0x33,0x0b,0x17,0x03,0x23,0x0a,0x16,0x00,0x22,0x09,0x15,0x02,0x21,0x01,0x08,0x00,
|
|
|
-0x32,0x07,0x14,0x03,0x20,0x06,0x13,0x00,0x1f,0x05,0x12,0x02,0x1e,0x01,0x04,0x00,
|
|
|
-0x31,0x0b,0x11,0x03,0x1d,0x0a,0x10,0x00,0x1c,0x09,0x0f,0x02,0x1b,0x01,0x08,0x00,
|
|
|
-0x30,0x07,0x0e,0x03,0x1a,0x06,0x0d,0x00,0x19,0x05,0x0c,0x02,0x18,0x01,0x04,0x00
|
|
|
+ 0x3f, 0x0b, 0x17, 0x03, 0x2f, 0x0a, 0x16, 0x00, 0x2e, 0x09, 0x15, 0x02, 0x2d, 0x01, 0x08, 0x00,
|
|
|
+ 0x3e, 0x07, 0x14, 0x03, 0x2c, 0x06, 0x13, 0x00, 0x2b, 0x05, 0x12, 0x02, 0x2a, 0x01, 0x04, 0x00,
|
|
|
+ 0x3d, 0x0b, 0x11, 0x03, 0x29, 0x0a, 0x10, 0x00, 0x28, 0x09, 0x0f, 0x02, 0x27, 0x01, 0x08, 0x00,
|
|
|
+ 0x3c, 0x07, 0x0e, 0x03, 0x26, 0x06, 0x0d, 0x00, 0x25, 0x05, 0x0c, 0x02, 0x24, 0x01, 0x04, 0x00,
|
|
|
+ 0x3b, 0x0b, 0x17, 0x03, 0x23, 0x0a, 0x16, 0x00, 0x22, 0x09, 0x15, 0x02, 0x21, 0x01, 0x08, 0x00,
|
|
|
+ 0x3a, 0x07, 0x14, 0x03, 0x20, 0x06, 0x13, 0x00, 0x1f, 0x05, 0x12, 0x02, 0x1e, 0x01, 0x04, 0x00,
|
|
|
+ 0x39, 0x0b, 0x11, 0x03, 0x1d, 0x0a, 0x10, 0x00, 0x1c, 0x09, 0x0f, 0x02, 0x1b, 0x01, 0x08, 0x00,
|
|
|
+ 0x38, 0x07, 0x0e, 0x03, 0x1a, 0x06, 0x0d, 0x00, 0x19, 0x05, 0x0c, 0x02, 0x18, 0x01, 0x04, 0x00,
|
|
|
+ 0x37, 0x0b, 0x17, 0x03, 0x2f, 0x0a, 0x16, 0x00, 0x2e, 0x09, 0x15, 0x02, 0x2d, 0x01, 0x08, 0x00,
|
|
|
+ 0x36, 0x07, 0x14, 0x03, 0x2c, 0x06, 0x13, 0x00, 0x2b, 0x05, 0x12, 0x02, 0x2a, 0x01, 0x04, 0x00,
|
|
|
+ 0x35, 0x0b, 0x11, 0x03, 0x29, 0x0a, 0x10, 0x00, 0x28, 0x09, 0x0f, 0x02, 0x27, 0x01, 0x08, 0x00,
|
|
|
+ 0x34, 0x07, 0x0e, 0x03, 0x26, 0x06, 0x0d, 0x00, 0x25, 0x05, 0x0c, 0x02, 0x24, 0x01, 0x04, 0x00,
|
|
|
+ 0x33, 0x0b, 0x17, 0x03, 0x23, 0x0a, 0x16, 0x00, 0x22, 0x09, 0x15, 0x02, 0x21, 0x01, 0x08, 0x00,
|
|
|
+ 0x32, 0x07, 0x14, 0x03, 0x20, 0x06, 0x13, 0x00, 0x1f, 0x05, 0x12, 0x02, 0x1e, 0x01, 0x04, 0x00,
|
|
|
+ 0x31, 0x0b, 0x11, 0x03, 0x1d, 0x0a, 0x10, 0x00, 0x1c, 0x09, 0x0f, 0x02, 0x1b, 0x01, 0x08, 0x00,
|
|
|
+ 0x30, 0x07, 0x0e, 0x03, 0x1a, 0x06, 0x0d, 0x00, 0x19, 0x05, 0x0c, 0x02, 0x18, 0x01, 0x04, 0x00
|
|
|
};
|
|
|
static unsigned char data2[0x10] =
|
|
|
{
|
|
|
-0x08,0x05,0x06,0x04,0x07,0x05,0x06,0x03,0x07,0x05,0x06,0x04,0x07,0x04,0x05,0x03
|
|
|
+ 0x08, 0x05, 0x06, 0x04, 0x07, 0x05, 0x06, 0x03, 0x07, 0x05, 0x06, 0x04, 0x07, 0x04, 0x05, 0x03
|
|
|
};
|
|
|
|
|
|
static void adjust_tree(Tree tree, unsigned short value)
|
|
@@ -351,68 +351,11 @@ static int build_tree(Tree *tree)
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
-#pragma pack(1)
|
|
|
-typedef struct _BitField
|
|
|
+static int bt(const char* data, unsigned int pos)
|
|
|
{
|
|
|
- unsigned char b0: 1;
|
|
|
- unsigned char b1: 1;
|
|
|
- unsigned char b2: 1;
|
|
|
- unsigned char b3: 1;
|
|
|
- unsigned char b4: 1;
|
|
|
- unsigned char b5: 1;
|
|
|
- unsigned char b6: 1;
|
|
|
- unsigned char b7: 1;
|
|
|
-} BitField;
|
|
|
-#pragma pack()
|
|
|
-
|
|
|
-static int bt(const void* data, unsigned int pos)
|
|
|
-{
|
|
|
- BitField* bit = (BitField*)((unsigned char*)data + (pos >> 3));
|
|
|
- switch(pos & 0x7)
|
|
|
- {
|
|
|
- case 0: return bit->b0;
|
|
|
- case 1: return bit->b1;
|
|
|
- case 2: return bit->b2;
|
|
|
- case 3: return bit->b3;
|
|
|
- case 4: return bit->b4;
|
|
|
- case 5: return bit->b5;
|
|
|
- case 6: return bit->b6;
|
|
|
- case 7: return bit->b7;
|
|
|
- }
|
|
|
- return 0;
|
|
|
+ return (data[pos >> 3] & (unsigned char)(1 << (pos & 0x7))) >> (pos & 0x7);
|
|
|
}
|
|
|
|
|
|
-static void bit(void* data, unsigned int pos, int set)
|
|
|
-{
|
|
|
- BitField* bit = (BitField*)((unsigned char*)data + (pos >> 3));
|
|
|
- switch(pos & 0x7)
|
|
|
- {
|
|
|
- case 0:
|
|
|
- bit->b0 = set;
|
|
|
- break;
|
|
|
- case 1:
|
|
|
- bit->b1 = set;
|
|
|
- break;
|
|
|
- case 2:
|
|
|
- bit->b2 = set;
|
|
|
- break;
|
|
|
- case 3:
|
|
|
- bit->b3 = set;
|
|
|
- break;
|
|
|
- case 4:
|
|
|
- bit->b4 = set;
|
|
|
- break;
|
|
|
- case 5:
|
|
|
- bit->b5 = set;
|
|
|
- break;
|
|
|
- case 6:
|
|
|
- bit->b6 = set;
|
|
|
- break;
|
|
|
- case 7:
|
|
|
- bit->b7 = set;
|
|
|
- break;
|
|
|
- }
|
|
|
-}
|
|
|
|
|
|
INT
|
|
|
Decompress(
|