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

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

?? inflate.c

?? 這是一個三層的進銷存系統(tǒng)
?? C
?? 第 1 頁 / 共 4 頁
字號:

    /* if window not in use yet, initialize */
    if (state->wsize == 0) {
        state->wsize = 1U << state->wbits;
        state->write = 0;
        state->whave = 0;
    }

    /* copy state->wsize or less output bytes into the circular window */
    copy = out - strm->avail_out;
    if (copy >= state->wsize) {
        zmemcpy(state->window, strm->next_out - state->wsize, state->wsize);
        state->write = 0;
        state->whave = state->wsize;
    }
    else {
        dist = state->wsize - state->write;
        if (dist > copy) dist = copy;
        zmemcpy(state->window + state->write, strm->next_out - copy, dist);
        copy -= dist;
        if (copy) {
            zmemcpy(state->window, strm->next_out - copy, copy);
            state->write = copy;
            state->whave = state->wsize;
        }
        else {
            state->write += dist;
            if (state->write == state->wsize) state->write = 0;
            if (state->whave < state->wsize) state->whave += dist;
        }
    }
    return 0;
}

/* Macros for inflate(): */

/* check function to use adler32() for zlib or crc32() for gzip */
#ifdef GUNZIP
#  define UPDATE(check, buf, len) \
    (state->flags ? crc32(check, buf, len) : adler32(check, buf, len))
#else
#  define UPDATE(check, buf, len) adler32(check, buf, len)
#endif

/* check macros for header crc */
#ifdef GUNZIP
#  define CRC2(check, word) \
    do { \
        hbuf[0] = (unsigned char)(word); \
        hbuf[1] = (unsigned char)((word) >> 8); \
        check = crc32(check, hbuf, 2); \
    } while (0)

#  define CRC4(check, word) \
    do { \
        hbuf[0] = (unsigned char)(word); \
        hbuf[1] = (unsigned char)((word) >> 8); \
        hbuf[2] = (unsigned char)((word) >> 16); \
        hbuf[3] = (unsigned char)((word) >> 24); \
        check = crc32(check, hbuf, 4); \
    } while (0)
#endif

/* Load registers with state in inflate() for speed */
#define LOAD() \
    do { \
        put = strm->next_out; \
        left = strm->avail_out; \
        next = strm->next_in; \
        have = strm->avail_in; \
        hold = state->hold; \
        bits = state->bits; \
    } while (0)

/* Restore state from registers in inflate() */
#define RESTORE() \
    do { \
        strm->next_out = put; \
        strm->avail_out = left; \
        strm->next_in = next; \
        strm->avail_in = have; \
        state->hold = hold; \
        state->bits = bits; \
    } while (0)

/* Clear the input bit accumulator */
#define INITBITS() \
    do { \
        hold = 0; \
        bits = 0; \
    } while (0)

/* Get a byte of input into the bit accumulator, or return from inflate()
   if there is no input available. */
#define PULLBYTE() \
    do { \
        if (have == 0) goto inf_leave; \
        have--; \
        hold += (unsigned long)(*next++) << bits; \
        bits += 8; \
    } while (0)

/* Assure that there are at least n bits in the bit accumulator.  If there is
   not enough available input to do that, then return from inflate(). */
#define NEEDBITS(n) \
    do { \
        while (bits < (unsigned)(n)) \
            PULLBYTE(); \
    } while (0)

/* Return the low n bits of the bit accumulator (n < 16) */
#define BITS(n) \
    ((unsigned)hold & ((1U << (n)) - 1))

/* Remove n bits from the bit accumulator */
#define DROPBITS(n) \
    do { \
        hold >>= (n); \
        bits -= (unsigned)(n); \
    } while (0)

/* Remove zero to seven bits as needed to go to a byte boundary */
#define BYTEBITS() \
    do { \
        hold >>= bits & 7; \
        bits -= bits & 7; \
    } while (0)

/* Reverse the bytes in a 32-bit value */
#define REVERSE(q) \
    ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \
     (((q) & 0xff00) << 8) + (((q) & 0xff) << 24))

/*
   inflate() uses a state machine to process as much input data and generate as
   much output data as possible before returning.  The state machine is
   structured roughly as follows:

    for (;;) switch (state) {
    ...
    case STATEn:
        if (not enough input data or output space to make progress)
            return;
        ... make progress ...
        state = STATEm;
        break;
    ...
    }

   so when inflate() is called again, the same case is attempted again, and
   if the appropriate resources are provided, the machine proceeds to the
   next state.  The NEEDBITS() macro is usually the way the state evaluates
   whether it can proceed or should return.  NEEDBITS() does the return if
   the requested bits are not available.  The typical use of the BITS macros
   is:

        NEEDBITS(n);
        ... do something with BITS(n) ...
        DROPBITS(n);

   where NEEDBITS(n) either returns from inflate() if there isn't enough
   input left to load n bits into the accumulator, or it continues.  BITS(n)
   gives the low n bits in the accumulator.  When done, DROPBITS(n) drops
   the low n bits off the accumulator.  INITBITS() clears the accumulator
   and sets the number of available bits to zero.  BYTEBITS() discards just
   enough bits to put the accumulator on a byte boundary.  After BYTEBITS()
   and a NEEDBITS(8), then BITS(8) would return the next byte in the stream.

   NEEDBITS(n) uses PULLBYTE() to get an available byte of input, or to return
   if there is no input available.  The decoding of variable length codes uses
   PULLBYTE() directly in order to pull just enough bytes to decode the next
   code, and no more.

   Some states loop until they get enough input, making sure that enough
   state information is maintained to continue the loop where it left off
   if NEEDBITS() returns in the loop.  For example, want, need, and keep
   would all have to actually be part of the saved state in case NEEDBITS()
   returns:

    case STATEw:
        while (want < need) {
            NEEDBITS(n);
            keep[want++] = BITS(n);
            DROPBITS(n);
        }
        state = STATEx;
    case STATEx:

   As shown above, if the next state is also the next case, then the break
   is omitted.

   A state may also return if there is not enough output space available to
   complete that state.  Those states are copying stored data, writing a
   literal byte, and copying a matching string.

   When returning, a "goto inf_leave" is used to update the total counters,
   update the check value, and determine whether any progress has been made
   during that inflate() call in order to return the proper return code.
   Progress is defined as a change in either strm->avail_in or strm->avail_out.
   When there is a window, goto inf_leave will update the window with the last
   output written.  If a goto inf_leave occurs in the middle of decompression
   and there is no window currently, goto inf_leave will create one and copy
   output to the window for the next call of inflate().

   In this implementation, the flush parameter of inflate() only affects the
   return code (per zlib.h).  inflate() always writes as much as possible to
   strm->next_out, given the space available and the provided input--the effect
   documented in zlib.h of Z_SYNC_FLUSH.  Furthermore, inflate() always defers
   the allocation of and copying into a sliding window until necessary, which
   provides the effect documented in zlib.h for Z_FINISH when the entire input
   stream available.  So the only thing the flush parameter actually does is:
   when flush is set to Z_FINISH, inflate() cannot return Z_OK.  Instead it
   will return Z_BUF_ERROR if it has not reached the end of the stream.
 */

int ZEXPORT inflate(strm, flush)
z_streamp strm;
int flush;
{
    struct inflate_state FAR *state;
    unsigned char FAR *next;    /* next input */
    unsigned char FAR *put;     /* next output */
    unsigned have, left;        /* available input and output */
    unsigned long hold;         /* bit buffer */
    unsigned bits;              /* bits in bit buffer */
    unsigned in, out;           /* save starting available input and output */
    unsigned copy;              /* number of stored or match bytes to copy */
    unsigned char FAR *from;    /* where to copy match bytes from */
    code this;                  /* current decoding table entry */
    code last;                  /* parent table entry */
    unsigned len;               /* length to copy for repeats, bits to drop */
    int ret;                    /* return code */
#ifdef GUNZIP
    unsigned char hbuf[4];      /* buffer for gzip header crc calculation */
#endif
    static const unsigned short order[19] = /* permutation of code lengths */
        {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};

    if (strm == Z_NULL || strm->state == Z_NULL || strm->next_out == Z_NULL ||
        (strm->next_in == Z_NULL && strm->avail_in != 0))
        return Z_STREAM_ERROR;

    state = (struct inflate_state FAR *)strm->state;
    if (state->mode == TYPE) state->mode = TYPEDO;      /* skip check */
    LOAD();
    in = have;
    out = left;
    ret = Z_OK;
    for (;;)
        switch (state->mode) {
        case HEAD:
            if (state->wrap == 0) {
                state->mode = TYPEDO;
                break;
            }
            NEEDBITS(16);
#ifdef GUNZIP
            if ((state->wrap & 2) && hold == 0x8b1f) {  /* gzip header */
                state->check = crc32(0L, Z_NULL, 0);
                CRC2(state->check, hold);
                INITBITS();
                state->mode = FLAGS;
                break;
            }
            state->flags = 0;           /* expect zlib header */
            if (!(state->wrap & 1) ||   /* check if zlib header allowed */
#else
            if (
#endif
                ((BITS(8) << 8) + (hold >> 8)) % 31) {
                strm->msg = (char *)"incorrect header check";
                state->mode = BAD;
                break;
            }
            if (BITS(4) != Z_DEFLATED) {
                strm->msg = (char *)"unknown compression method";
                state->mode = BAD;
                break;
            }
            DROPBITS(4);
            if (BITS(4) + 8 > state->wbits) {
                strm->msg = (char *)"invalid window size";
                state->mode = BAD;
                break;
            }
            Tracev((stderr, "inflate:   zlib header ok\n"));
            strm->adler = state->check = adler32(0L, Z_NULL, 0);
            state->mode = hold & 0x200 ? DICTID : TYPE;
            INITBITS();
            break;
#ifdef GUNZIP
        case FLAGS:
            NEEDBITS(16);
            state->flags = (int)(hold);
            if ((state->flags & 0xff) != Z_DEFLATED) {
                strm->msg = (char *)"unknown compression method";
                state->mode = BAD;
                break;
            }
            if (state->flags & 0xe000) {
                strm->msg = (char *)"unknown header flags set";
                state->mode = BAD;
                break;
            }
            if (state->flags & 0x0200) CRC2(state->check, hold);
            INITBITS();
            state->mode = TIME;
        case TIME:
            NEEDBITS(32);
            if (state->flags & 0x0200) CRC4(state->check, hold);
            INITBITS();
            state->mode = OS;
        case OS:
            NEEDBITS(16);
            if (state->flags & 0x0200) CRC2(state->check, hold);
            INITBITS();
            state->mode = EXLEN;
        case EXLEN:

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区日韩精品| 日韩三级高清在线| 不卡在线视频中文字幕| 国产酒店精品激情| 国产精品自在在线| 国产精品一区二区果冻传媒| 国产福利一区二区三区| 国产精品99久久久| 懂色av一区二区在线播放| 国产91色综合久久免费分享| 国产精品1024久久| 成人综合婷婷国产精品久久蜜臀| 精品无码三级在线观看视频| 国内成人自拍视频| 国产精品一级片| 99在线精品一区二区三区| 91免费在线视频观看| 91美女片黄在线观看91美女| 91成人国产精品| 欧美日韩午夜影院| 日韩视频在线一区二区| 26uuu精品一区二区三区四区在线| 久久久精品天堂| 综合网在线视频| 亚洲成人激情综合网| 麻豆国产精品777777在线| 精品午夜久久福利影院| 不卡免费追剧大全电视剧网站| 色综合久久综合| 91精品国产麻豆| 国产欧美一区二区精品忘忧草| 国产精品传媒入口麻豆| 亚洲成人av免费| 国产精品1区二区.| 日本精品视频一区二区三区| 欧美久久免费观看| 国产欧美精品一区aⅴ影院| 亚洲色图欧美偷拍| 久久国产婷婷国产香蕉| 风间由美性色一区二区三区| 在线亚洲欧美专区二区| 日韩欧美亚洲一区二区| 中文字幕一区二区在线播放| 午夜国产不卡在线观看视频| 国产成人免费9x9x人网站视频| 91成人国产精品| 国产日韩一级二级三级| 亚洲综合精品自拍| 国产成人午夜精品影院观看视频 | 亚洲男人都懂的| 日韩高清一区在线| 成人动漫一区二区| 3d动漫精品啪啪一区二区竹菊| 久久久国产精华| 午夜精品久久久| 成av人片一区二区| 欧美不卡123| 亚洲美女淫视频| 国产精一区二区三区| 欧美喷潮久久久xxxxx| 国产欧美一区二区三区鸳鸯浴 | 日本不卡一区二区三区| 成人av在线网站| 日韩精品自拍偷拍| 亚洲自拍偷拍综合| 国产成人午夜片在线观看高清观看| 欧美午夜精品久久久久久超碰| 国产日产欧美一区二区视频| 日本少妇一区二区| 日本丶国产丶欧美色综合| 久久久久88色偷偷免费| 日本最新不卡在线| 91福利社在线观看| 中文一区二区完整视频在线观看| 另类欧美日韩国产在线| 欧美精品在欧美一区二区少妇| 亚洲视频在线一区二区| 国产一区二区视频在线播放| 欧美精品 国产精品| 亚洲视频你懂的| 成人动漫一区二区在线| 久久精品亚洲精品国产欧美| 日韩av在线播放中文字幕| 欧美羞羞免费网站| 亚洲猫色日本管| av不卡在线播放| 国产日韩精品久久久| 国产在线视视频有精品| 欧美福利一区二区| 香蕉久久夜色精品国产使用方法 | 美女看a上一区| 欧美日韩一区二区在线观看| 亚洲视频免费看| 91一区二区三区在线播放| 欧美国产日本视频| 国产成人免费在线视频| 欧美精品一区二区三区四区 | 国产精品三级电影| 风间由美中文字幕在线看视频国产欧美| 精品国产凹凸成av人网站| 日本不卡不码高清免费观看| 制服丝袜av成人在线看| 婷婷开心激情综合| 欧美一级理论片| 久久99久久99| 久久女同精品一区二区| 国产麻豆精品视频| 精品国产成人在线影院| 国产丶欧美丶日本不卡视频| 久久久久久亚洲综合影院红桃 | 福利91精品一区二区三区| www国产成人| 国产传媒日韩欧美成人| 久久九九久精品国产免费直播| 国产精品一二三四区| 欧美激情艳妇裸体舞| 成人中文字幕在线| 成人免费小视频| 欧美午夜影院一区| 亚洲国产视频一区二区| 欧美一区二区三区男人的天堂| 麻豆精品国产91久久久久久| 国产亚洲欧美在线| av一区二区三区| 亚洲综合色婷婷| 欧美一级一级性生活免费录像| 麻豆成人91精品二区三区| 久久久精品国产免大香伊| 国产高清不卡一区二区| 综合久久一区二区三区| 欧美日韩的一区二区| 国产在线不卡一卡二卡三卡四卡| 国产欧美精品一区二区三区四区| 91亚洲男人天堂| 天堂av在线一区| 2021久久国产精品不只是精品| 成人国产一区二区三区精品| 亚洲精品欧美综合四区| 日韩欧美激情四射| 成人高清在线视频| 水蜜桃久久夜色精品一区的特点| 日韩一级完整毛片| 风间由美一区二区三区在线观看| 怡红院av一区二区三区| 欧美肥妇bbw| 国产成人精品免费看| 亚洲三级小视频| 欧美成人国产一区二区| 成人av资源在线| 奇米888四色在线精品| 中文字幕第一页久久| 欧美色男人天堂| 国产成人免费在线| 日本欧美一区二区三区乱码| 国产精品欧美经典| 欧美一区二区视频观看视频| av在线一区二区| 久久99久久99精品免视看婷婷| 亚洲摸摸操操av| 久久久久久久一区| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 国产在线精品一区二区夜色| 伊人夜夜躁av伊人久久| 久久亚洲综合色| 欧美日本一区二区| 成人免费观看视频| 免费成人在线影院| 亚洲免费观看高清完整| 久久婷婷色综合| 欧美日韩精品一区二区三区| 国产91丝袜在线播放0| 青青草国产精品亚洲专区无| 亚洲图片你懂的| 国产欧美一区二区精品性色超碰| 91精品国产综合久久精品性色| 91丨九色丨黑人外教| 国产老女人精品毛片久久| 青青草伊人久久| 亚洲第一搞黄网站| 亚洲色大成网站www久久九九| 国产欧美久久久精品影院| 精品美女被调教视频大全网站| 欧美伊人精品成人久久综合97| 成人激情免费视频| 国产成人自拍高清视频在线免费播放| 天堂成人免费av电影一区| 玉足女爽爽91| 亚洲女人的天堂| 日韩码欧中文字| 国产精品萝li| 久久久高清一区二区三区| 欧美一级日韩免费不卡| 欧美三级资源在线| 欧美性受xxxx黑人xyx| 91蜜桃婷婷狠狠久久综合9色| 国产不卡视频一区| 国产成人精品免费在线| 国产精品中文字幕日韩精品| 久久精品国产亚洲高清剧情介绍| 日韩精品国产欧美|