亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? lzx.cpp

?? Pocket PC CHM 文件閱讀器 (源代碼)
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
    bitsleft += 16; inpos+=2;						\
  }

#define PEEK_BITS(n)   (bitbuf >> (ULONG_BITS - (n)))
#define REMOVE_BITS(n) ((bitbuf <<= (n)), (bitsleft -= (n)))

#define READ_BITS(v,n) do {						\
  ENSURE_BITS(n);							\
  (v) = PEEK_BITS(n);							\
  REMOVE_BITS(n);							\
} while (0)


/* Huffman macros */

#define TABLEBITS(tbl)   (LZX_##tbl##_TABLEBITS)
#define MAXSYMBOLS(tbl)  (LZX_##tbl##_MAXSYMBOLS)
#define SYMTABLE(tbl)    (pState->tbl##_table)
#define LENTABLE(tbl)    (pState->tbl##_len)

/* BUILD_TABLE(tablename) builds a huffman lookup table from code lengths.
 * In reality, it just calls make_decode_table() with the appropriate
 * values - they're all fixed by some #defines anyway, so there's no point
 * writing each call out in full by hand.
 */
#define BUILD_TABLE(tbl)						\
  if (make_decode_table(						\
    MAXSYMBOLS(tbl), TABLEBITS(tbl), LENTABLE(tbl), SYMTABLE(tbl)	\
  )) { return DECR_ILLEGALDATA; }


/* READ_HUFFSYM(tablename, var) decodes one huffman symbol from the
 * bitstream using the stated table and puts it in var.
 */
#define READ_HUFFSYM(tbl,var) do {					\
  ENSURE_BITS(16);							\
  hufftbl = SYMTABLE(tbl);						\
  if ((i = hufftbl[PEEK_BITS(TABLEBITS(tbl))]) >= MAXSYMBOLS(tbl)) {	\
    j = 1 << (ULONG_BITS - TABLEBITS(tbl));				\
    do {								\
      j >>= 1; i <<= 1; i |= (bitbuf & j) ? 1 : 0;			\
      if (!j) { return DECR_ILLEGALDATA; }	                        \
    } while ((i = hufftbl[i]) >= MAXSYMBOLS(tbl));			\
  }									\
  j = LENTABLE(tbl)[(var) = i];						\
  REMOVE_BITS(j);							\
} while (0)


/* READ_LENGTHS(tablename, first, last) reads in code lengths for symbols
 * first to last in the given table. The code lengths are stored in their
 * own special LZX way.
 */
#define READ_LENGTHS(tbl,first,last) do { \
  lb.bb = bitbuf; lb.bl = bitsleft; lb.ip = inpos; \
  if (lzx_read_lens(pState, LENTABLE(tbl),(first),(last),&lb)) { \
    return DECR_ILLEGALDATA; \
  } \
  bitbuf = lb.bb; bitsleft = lb.bl; inpos = lb.ip; \
} while (0)


/* make_decode_table(nsyms, nbits, length[], table[])
 *
 * This function was coded by David Tritscher. It builds a fast huffman
 * decoding table out of just a canonical huffman code lengths table.
 *
 * nsyms  = total number of symbols in this huffman tree.
 * nbits  = any symbols with a code length of nbits or less can be decoded
 *          in one lookup of the table.
 * length = A table to get code lengths from [0 to syms-1]
 * table  = The table to fill up with decoded symbols and pointers.
 *
 * Returns 0 for OK or 1 for error
 */

static int make_decode_table(ULONG nsyms, ULONG nbits, UBYTE *length, UWORD *table) {
    register UWORD sym;
    register ULONG leaf;
    register UBYTE bit_num = 1;
    ULONG fill;
    ULONG pos         = 0; /* the current position in the decode table */
    ULONG table_mask  = 1 << nbits;
    ULONG bit_mask    = table_mask >> 1; /* don't do 0 length codes */
    ULONG next_symbol = bit_mask; /* base of allocation for long codes */

    /* fill entries for codes short enough for a direct mapping */
    while (bit_num <= nbits) {
        for (sym = 0; sym < nsyms; sym++) {
            if (length[sym] == bit_num) {
                leaf = pos;

                if((pos += bit_mask) > table_mask) return 1; /* table overrun */

                /* fill all possible lookups of this symbol with the symbol itself */
                fill = bit_mask;
                while (fill-- > 0) table[leaf++] = sym;
            }
        }
        bit_mask >>= 1;
        bit_num++;
    }

    /* if there are any codes longer than nbits */
    if (pos != table_mask) {
        /* clear the remainder of the table */
        for (sym = pos; sym < table_mask; sym++) table[sym] = 0;

        /* give ourselves room for codes to grow by up to 16 more bits */
        pos <<= 16;
        table_mask <<= 16;
        bit_mask = 1 << 15;

        while (bit_num <= 16) {
            for (sym = 0; sym < nsyms; sym++) {
                if (length[sym] == bit_num) {
                    leaf = pos >> 16;
                    for (fill = 0; fill < bit_num - nbits; fill++) {
                        /* if this path hasn't been taken yet, 'allocate' two entries */
                        if (table[leaf] == 0) {
                            table[(next_symbol << 1)] = 0;
                            table[(next_symbol << 1) + 1] = 0;
                            table[leaf] = next_symbol++;
                        }
                        /* follow the path and select either left or right for next bit */
                        leaf = table[leaf] << 1;
                        if ((pos >> (15-fill)) & 1) leaf++;
                    }
                    table[leaf] = sym;

                    if ((pos += bit_mask) > table_mask) return 1; /* table overflow */
                }
            }
            bit_mask >>= 1;
            bit_num++;
        }
    }

    /* full table? */
    if (pos == table_mask) return 0;

    /* either erroneous table, or all elements are 0 - let's find out. */
    for (sym = 0; sym < nsyms; sym++) if (length[sym]) return 1;
    return 0;
}

struct lzx_bits {
  ULONG bb;
  int bl;
  UBYTE *ip;
};

static int lzx_read_lens(struct LZXstate *pState, UBYTE *lens, ULONG first, ULONG last, struct lzx_bits *lb) {
    ULONG i,j, x,y;
    int z;

    register ULONG bitbuf = lb->bb;
    register int bitsleft = lb->bl;
    UBYTE *inpos = lb->ip;
    UWORD *hufftbl;

    for (x = 0; x < 20; x++) {
        READ_BITS(y, 4);
        LENTABLE(PRETREE)[x] = y;
    }
    BUILD_TABLE(PRETREE);

    for (x = first; x < last; ) {
        READ_HUFFSYM(PRETREE, z);
        if (z == 17) {
            READ_BITS(y, 4); y += 4;
            while (y--) lens[x++] = 0;
        }
        else if (z == 18) {
            READ_BITS(y, 5); y += 20;
            while (y--) lens[x++] = 0;
        }
        else if (z == 19) {
            READ_BITS(y, 1); y += 4;
            READ_HUFFSYM(PRETREE, z);
            z = lens[x] - z; if (z < 0) z += 17;
            while (y--) lens[x++] = z;
        }
        else {
            z = lens[x] - z; if (z < 0) z += 17;
            lens[x++] = z;
        }
    }

    lb->bb = bitbuf;
    lb->bl = bitsleft;
    lb->ip = inpos;
    return 0;
}

int LZXdecompress(struct LZXstate *pState, unsigned char *inpos, unsigned char *outpos, int inlen, int outlen) {
    UBYTE *endinp = inpos + inlen;
    UBYTE *window = pState->window;
    UBYTE *runsrc, *rundest;
    UWORD *hufftbl; /* used in READ_HUFFSYM macro as chosen decoding table */

    ULONG window_posn = pState->window_posn;
    ULONG window_size = pState->window_size;
    ULONG R0 = pState->R0;
    ULONG R1 = pState->R1;
    ULONG R2 = pState->R2;

    register ULONG bitbuf;
    register int bitsleft;
    ULONG match_offset, i,j,k; /* ijk used in READ_HUFFSYM macro */
    struct lzx_bits lb; /* used in READ_LENGTHS macro */

    int togo = outlen, this_run, main_element, aligned_bits;
    int match_length, length_footer, extra, verbatim_bits;

    INIT_BITSTREAM;

    /* read header if necessary */
    if (!pState->header_read) {
        i = j = 0;
        READ_BITS(k, 1); if (k) { READ_BITS(i,16); READ_BITS(j,16); }
        pState->intel_filesize = (i << 16) | j; /* or 0 if not encoded */
        pState->header_read = 1;
    }

    /* main decoding loop */
    while (togo > 0) {
        /* last block finished, new block expected */
        if (pState->block_remaining == 0) {
            if (pState->block_type == LZX_BLOCKTYPE_UNCOMPRESSED) {
                if (pState->block_length & 1) inpos++; /* realign bitstream to word */
                INIT_BITSTREAM;
            }

            READ_BITS(pState->block_type, 3);
            READ_BITS(i, 16);
            READ_BITS(j, 8);
            pState->block_remaining = pState->block_length = (i << 8) | j;

            switch (pState->block_type) {
                case LZX_BLOCKTYPE_ALIGNED:
                    for (i = 0; i < 8; i++) { READ_BITS(j, 3); LENTABLE(ALIGNED)[i] = j; }
                    BUILD_TABLE(ALIGNED);
                    /* rest of aligned header is same as verbatim */

                case LZX_BLOCKTYPE_VERBATIM:
                    READ_LENGTHS(MAINTREE, 0, 256);
                    READ_LENGTHS(MAINTREE, 256, pState->main_elements);
                    BUILD_TABLE(MAINTREE);
                    if (LENTABLE(MAINTREE)[0xE8] != 0) pState->intel_started = 1;

                    READ_LENGTHS(LENGTH, 0, LZX_NUM_SECONDARY_LENGTHS);
                    BUILD_TABLE(LENGTH);
                    break;

                case LZX_BLOCKTYPE_UNCOMPRESSED:
                    pState->intel_started = 1; /* because we can't assume otherwise */
                    ENSURE_BITS(16); /* get up to 16 pad bits into the buffer */
                    if (bitsleft > 16) inpos -= 2; /* and align the bitstream! */
                    R0 = inpos[0]|(inpos[1]<<8)|(inpos[2]<<16)|(inpos[3]<<24);inpos+=4;
                    R1 = inpos[0]|(inpos[1]<<8)|(inpos[2]<<16)|(inpos[3]<<24);inpos+=4;
                    R2 = inpos[0]|(inpos[1]<<8)|(inpos[2]<<16)|(inpos[3]<<24);inpos+=4;
                    break;

                default:
                    return DECR_ILLEGALDATA;
            }
        }

        /* buffer exhaustion check */
        if (inpos > endinp) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩丝袜情趣美女图片| 91精品国产色综合久久不卡电影| 日韩极品在线观看| 亚洲精品五月天| 伊人开心综合网| 亚洲高清免费在线| 日韩一区精品视频| 久久精品国产一区二区三| 人人爽香蕉精品| 精品一区中文字幕| 国产一区二区三区免费播放| 福利一区福利二区| 91啪亚洲精品| 日韩一区二区三区电影| 精品国产91乱码一区二区三区 | 中文字幕一区二区在线观看| 中日韩av电影| 亚洲一区二区综合| 久久国产精品99精品国产 | 亚洲国产成人91porn| 日韩精品久久久久久| 国产在线视频一区二区| 国产99一区视频免费| 色婷婷国产精品久久包臀| 在线电影欧美成精品| 久久久99久久| 亚洲综合区在线| 蜜桃一区二区三区在线| 成人黄色电影在线| 欧美精品一级二级| 国产亚洲欧美一区在线观看| 一区二区三区在线不卡| 久久国产精品72免费观看| av一本久道久久综合久久鬼色| 在线观看亚洲精品视频| 久久综合九色综合97婷婷女人 | 国产suv精品一区二区6| 欧美亚男人的天堂| 久久久久高清精品| 日本不卡不码高清免费观看| 99re这里只有精品首页| 亚洲精品一区在线观看| 亚洲一二三区不卡| 成人激情开心网| 精品欧美久久久| 亚洲18女电影在线观看| 97精品超碰一区二区三区| 日韩精品一区国产麻豆| 亚洲二区在线观看| 色欲综合视频天天天| 欧美国产日韩亚洲一区| 奇米精品一区二区三区在线观看一 | 国产综合色精品一区二区三区| 欧美性xxxxx极品少妇| 欧美国产精品久久| 久久99国产精品免费网站| 欧美三级在线视频| 亚洲精品国产一区二区精华液| 成人禁用看黄a在线| www国产成人免费观看视频 深夜成人网| 亚洲最色的网站| 一本到不卡精品视频在线观看| 久久久久国产精品免费免费搜索| 裸体歌舞表演一区二区| 欧美美女网站色| 亚洲图片自拍偷拍| 欧美性做爰猛烈叫床潮| 一级日本不卡的影视| 色偷偷成人一区二区三区91| 17c精品麻豆一区二区免费| 风间由美中文字幕在线看视频国产欧美| 欧美成人r级一区二区三区| 香蕉久久一区二区不卡无毒影院 | 日韩一区二区电影在线| 亚洲中国最大av网站| 色八戒一区二区三区| 亚洲欧美日韩一区| 欧洲国内综合视频| 亚洲国产人成综合网站| 欧美疯狂做受xxxx富婆| 日韩精品国产精品| www久久精品| 成人国产视频在线观看| 亚洲欧美日韩综合aⅴ视频| 色香色香欲天天天影视综合网 | 制服丝袜亚洲色图| 另类的小说在线视频另类成人小视频在线| 91精品国产高清一区二区三区 | 国产综合色在线视频区| 国产精品全国免费观看高清| 97精品国产露脸对白| 亚洲电影第三页| 精品久久国产97色综合| 成人精品在线视频观看| 亚洲综合色视频| 日韩欧美www| 99精品久久免费看蜜臀剧情介绍| 国产精品传媒入口麻豆| 欧美亚洲国产怡红院影院| 美腿丝袜亚洲色图| 中文字幕中文乱码欧美一区二区| 色综合 综合色| 久久国产精品99精品国产 | 91精品福利在线一区二区三区| 久久国产三级精品| 亚洲免费伊人电影| 日韩欧美在线观看一区二区三区| 成人妖精视频yjsp地址| 亚洲主播在线观看| 国产欧美精品一区aⅴ影院 | 久久婷婷色综合| 91国偷自产一区二区三区成为亚洲经典 | 99久久综合99久久综合网站| 亚洲成人激情av| 国产精品美女一区二区在线观看| 精品视频免费在线| 成人一区二区三区在线观看| 亚洲成人av电影在线| 国产日本欧美一区二区| 欧美猛男男办公室激情| 成人免费视频播放| 热久久一区二区| 夜夜精品浪潮av一区二区三区| 精品成人一区二区| 欧美日韩国产成人在线91| a级高清视频欧美日韩| 久久国产精品区| 天天综合日日夜夜精品| 中文字幕视频一区二区三区久| 日韩欧美国产三级电影视频| 色激情天天射综合网| 国产精品白丝av| 久久精品理论片| 日韩中文字幕亚洲一区二区va在线| 国产精品女主播av| 久久久久久久综合狠狠综合| 日韩欧美你懂的| 91精品国产色综合久久不卡电影| 欧洲av一区二区嗯嗯嗯啊| 色婷婷久久99综合精品jk白丝| 国产成人精品免费在线| 精品一区二区在线视频| 麻豆国产一区二区| 日韩成人午夜精品| 肉肉av福利一精品导航| 亚洲综合色自拍一区| 亚洲一区二区三区小说| 亚洲欧美韩国综合色| 亚洲男人的天堂一区二区| 中文字幕在线视频一区| 成人免费在线视频观看| 亚洲蜜桃精久久久久久久| 玉足女爽爽91| 亚洲电影你懂得| 免费久久99精品国产| 久久91精品国产91久久小草 | 成人性生交大片免费看中文| 国产成人免费xxxxxxxx| 床上的激情91.| 91网上在线视频| 日本精品视频一区二区| 欧美色图天堂网| 欧美一区二区三区四区久久| 日韩精品一区二区三区四区| 久久九九全国免费| 亚洲欧洲三级电影| 亚洲chinese男男1069| 蜜桃一区二区三区在线| 国产精品88av| 色欧美日韩亚洲| 欧美老肥妇做.爰bbww视频| 日韩一区二区在线看| 久久久噜噜噜久久人人看| 亚洲天堂免费在线观看视频| 亚洲国产视频网站| 久久国产精品露脸对白| 不卡电影一区二区三区| 欧美吞精做爰啪啪高潮| 欧美岛国在线观看| 国产精品美女久久久久av爽李琼 | 91片在线免费观看| 91精品国产高清一区二区三区蜜臀 | 91精品一区二区三区久久久久久| 精品国产欧美一区二区| 国产精品婷婷午夜在线观看| 亚洲小说欧美激情另类| 国内国产精品久久| 欧美制服丝袜第一页| 久久日韩粉嫩一区二区三区| 亚洲乱码国产乱码精品精的特点| 日韩av网站免费在线| 99国产精品国产精品久久| 91精品国产入口在线| 国产精品国产成人国产三级| 秋霞午夜av一区二区三区| 99精品欧美一区| 久久老女人爱爱| 免费人成在线不卡| 在线观看成人小视频| 国产香蕉久久精品综合网|