enum
{
RCOK_DATA_COM = 1, // Data are compressed
RCOK_DATA_UNC = 2,
/*
Data are not compressed,
just copied directly from source buffer to destination buffer.
*/
RCFAILED = - 1, // Data compression fails due to some reasons.
};
// Data area
static union
{
st_entry_t lzw_string_table_entries[MAX_ST_ENTRIES];
tt_entry_t lzw_translation_table_entries[MAX_ST_ENTRIES];
};
static union
{
st_entry_t *lzw_string_table[MAX_STR_NUM];
tt_entry_t *lzw_translation_table[MAX_STR_NUM];
};
void set_bit(unsigned char *bit_stream, const unsigned long offset_in_bits)
{
unsigned long offset_in_bytes, offset_within_byte;
#define CODE_LENGTH (11)
#define MAX_CB_ONECE (1<<CODE_LENGTH) /* The maxinum bytes to compress at one time */
#define MAX_ST_ENTRIES MAX_CB_ONECE
#define MAXIMUM_CODE (MAX_CB_ONECE-1)
#define MAX_STR_NUM (0x10000)
#pragma pack(1)
typedef struct
{
unsigned short str_len;
unsigned short start_pos;
} string_t;