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

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

?? infback.c

?? 這是一個三層的進銷存系統
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* infback.c -- inflate using a call-back interface
 * Copyright (C) 1995-2003 Mark Adler
 * For conditions of distribution and use, see copyright notice in zlib.h
 */

/*
   This code is largely copied from inflate.c.  Normally either infback.o or
   inflate.o would be linked into an application--not both.  The interface
   with inffast.c is retained so that optimized assembler-coded versions of
   inflate_fast() can be used with either inflate.c or infback.c.
 */

#include "zutil.h"
#include "inftrees.h"
#include "inflate.h"
#include "inffast.h"

/* function prototypes */
local void fixedtables OF((struct inflate_state FAR *state));

/*
   strm provides memory allocation functions in zalloc and zfree, or
   Z_NULL to use the library memory allocation functions.

   windowBits is in the range 8..15, and window is a user-supplied
   window and output buffer that is 2**windowBits bytes.
 */
int ZEXPORT inflateBackInit_(strm, windowBits, window, version, stream_size)
z_stream FAR *strm;
int windowBits;
unsigned char FAR *window;
const char *version;
int stream_size;
{
    struct inflate_state FAR *state;

    if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
        stream_size != (int)(sizeof(z_stream)))
        return Z_VERSION_ERROR;
    if (strm == Z_NULL || window == Z_NULL ||
        windowBits < 8 || windowBits > 15)
        return Z_STREAM_ERROR;
    strm->msg = Z_NULL;                 /* in case we return an error */
    if (strm->zalloc == (alloc_func)0) {
        strm->zalloc = zcalloc;
        strm->opaque = (voidpf)0;
    }
    if (strm->zfree == (free_func)0) strm->zfree = zcfree;
    state = (struct inflate_state FAR *)ZALLOC(strm, 1,
                                               sizeof(struct inflate_state));
    if (state == Z_NULL) return Z_MEM_ERROR;
    Tracev((stderr, "inflate: allocated\n"));
    strm->state = (voidpf)state;
    state->wbits = windowBits;
    state->wsize = 1U << windowBits;
    state->window = window;
    state->write = 0;
    state->whave = 0;
    return Z_OK;
}

/*
   Return state with length and distance decoding tables and index sizes set to
   fixed code decoding.  Normally this returns fixed tables from inffixed.h.
   If BUILDFIXED is defined, then instead this routine builds the tables the
   first time it's called, and returns those tables the first time and
   thereafter.  This reduces the size of the code by about 2K bytes, in
   exchange for a little execution time.  However, BUILDFIXED should not be
   used for threaded applications, since the rewriting of the tables and virgin
   may not be thread-safe.
 */
local void fixedtables(state)
struct inflate_state FAR *state;
{
#ifdef BUILDFIXED
    static int virgin = 1;
    static code *lenfix, *distfix;
    static code fixed[544];

    /* build fixed huffman tables if first call (may not be thread safe) */
    if (virgin) {
        unsigned sym, bits;
        static code *next;

        /* literal/length table */
        sym = 0;
        while (sym < 144) state->lens[sym++] = 8;
        while (sym < 256) state->lens[sym++] = 9;
        while (sym < 280) state->lens[sym++] = 7;
        while (sym < 288) state->lens[sym++] = 8;
        next = fixed;
        lenfix = next;
        bits = 9;
        inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work);

        /* distance table */
        sym = 0;
        while (sym < 32) state->lens[sym++] = 5;
        distfix = next;
        bits = 5;
        inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work);

        /* do this just once */
        virgin = 0;
    }
#else /* !BUILDFIXED */
#   include "inffixed.h"
#endif /* BUILDFIXED */
    state->lencode = lenfix;
    state->lenbits = 9;
    state->distcode = distfix;
    state->distbits = 5;
}

/* Macros for inflateBack(): */

/* Load returned state from inflate_fast() */
#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)

/* Set state from registers for inflate_fast() */
#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)

/* Assure that some input is available.  If input is requested, but denied,
   then return a Z_BUF_ERROR from inflateBack(). */
#define PULL() \
    do { \
        if (have == 0) { \
            have = in(in_desc, &next); \
            if (have == 0) { \
                next = Z_NULL; \
                ret = Z_BUF_ERROR; \
                goto inf_leave; \
            } \
        } \
    } while (0)

/* Get a byte of input into the bit accumulator, or return from inflateBack()
   with an error if there is no input available. */
#define PULLBYTE() \
    do { \
        PULL(); \
        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 inflateBack() with
   an error. */
#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)

/* Assure that some output space is available, by writing out the window
   if it's full.  If the write fails, return from inflateBack() with a
   Z_BUF_ERROR. */
#define ROOM() \
    do { \
        if (left == 0) { \
            put = state->window; \
            left = state->wsize; \
            state->whave = left; \
            if (out(out_desc, put, left)) { \
                ret = Z_BUF_ERROR; \
                goto inf_leave; \
            } \
        } \
    } while (0)

/*
   strm provides the memory allocation functions and window buffer on input,
   and provides information on the unused input on return.  For Z_DATA_ERROR
   returns, strm will also provide an error message.

   in() and out() are the call-back input and output functions.  When
   inflateBack() needs more input, it calls in().  When inflateBack() has
   filled the window with output, or when it completes with data in the
   window, it calls out() to write out the data.  The application must not
   change the provided input until in() is called again or inflateBack()
   returns.  The application must not change the window/output buffer until
   inflateBack() returns.

   in() and out() are called with a descriptor parameter provided in the
   inflateBack() call.  This parameter can be a structure that provides the
   information required to do the read or write, as well as accumulated
   information on the input and output such as totals and check values.

   in() should return zero on failure.  out() should return non-zero on
   failure.  If either in() or out() fails, than inflateBack() returns a
   Z_BUF_ERROR.  strm->next_in can be checked for Z_NULL to see whether it
   was in() or out() that caused in the error.  Otherwise,  inflateBack()
   returns Z_STREAM_END on success, Z_DATA_ERROR for an deflate format
   error, or Z_MEM_ERROR if it could not allocate memory for the state.
   inflateBack() can also return Z_STREAM_ERROR if the input parameters
   are not correct, i.e. strm is Z_NULL or the state was not initialized.
 */
int ZEXPORT inflateBack(strm, in, in_desc, out, out_desc)
z_stream FAR *strm;
in_func in;
void FAR *in_desc;
out_func out;
void FAR *out_desc;
{
    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 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 */
    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};

    /* Check that the strm exists and that the state was initialized */
    if (strm == Z_NULL || strm->state == Z_NULL)
        return Z_STREAM_ERROR;
    state = (struct inflate_state FAR *)strm->state;

    /* Reset the state */
    strm->msg = Z_NULL;
    state->mode = TYPE;
    state->last = 0;
    state->whave = 0;
    next = strm->next_in;
    have = next != Z_NULL ? strm->avail_in : 0;
    hold = 0;
    bits = 0;
    put = state->window;
    left = state->wsize;

    /* Inflate until end of block marked as last */
    for (;;)
        switch (state->mode) {
        case TYPE:
            /* determine and dispatch block type */
            if (state->last) {
                BYTEBITS();
                state->mode = DONE;
                break;
            }
            NEEDBITS(3);
            state->last = BITS(1);
            DROPBITS(1);
            switch (BITS(2)) {
            case 0:                             /* stored block */
                Tracev((stderr, "inflate:     stored block%s\n",
                        state->last ? " (last)" : ""));
                state->mode = STORED;
                break;
            case 1:                             /* fixed block */
                fixedtables(state);
                Tracev((stderr, "inflate:     fixed codes block%s\n",
                        state->last ? " (last)" : ""));
                state->mode = LEN;              /* decode codes */
                break;
            case 2:                             /* dynamic block */
                Tracev((stderr, "inflate:     dynamic codes block%s\n",
                        state->last ? " (last)" : ""));
                state->mode = TABLE;
                break;
            case 3:
                strm->msg = (char *)"invalid block type";

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久国产精品不卡| 欧美日本高清视频在线观看| 久久久美女艺术照精彩视频福利播放| 日韩电影在线免费观看| 一本大道久久a久久综合婷婷| 亚洲美女一区二区三区| 欧美在线观看视频一区二区三区| 亚洲成在人线在线播放| 欧美久久免费观看| 狠狠色伊人亚洲综合成人| 国产亚洲一区字幕| 97se亚洲国产综合自在线不卡| 亚洲一区在线看| 精品sm在线观看| 成人妖精视频yjsp地址| 一级做a爱片久久| 日韩视频免费直播| 成人黄色av电影| 午夜国产精品一区| 久久综合色婷婷| 色先锋aa成人| 久久精品99久久久| 国产精品国产三级国产aⅴ原创| 欧洲精品中文字幕| 久久99精品国产.久久久久久| 中文字幕一区二区三区四区不卡| 欧美日韩在线播放一区| 又紧又大又爽精品一区二区| 91精品国产欧美日韩| 成人手机电影网| 天天亚洲美女在线视频| 国产精品情趣视频| 欧美一区二区三区视频在线观看| 成人免费不卡视频| 免费视频一区二区| 亚洲精品成人天堂一二三| 日韩视频免费观看高清在线视频| 91视频观看视频| 国产在线一区二区综合免费视频| 一区二区三区中文字幕精品精品| 亚洲精品一区二区精华| 欧美在线观看18| 成人一区二区视频| 精品在线播放免费| 亚洲成人7777| 亚洲色图20p| 欧美经典一区二区| 91精品欧美久久久久久动漫| 色综合天天综合网国产成人综合天| 国产又黄又大久久| 男女激情视频一区| 亚洲va欧美va国产va天堂影院| 中文字幕在线不卡视频| 久久久久久夜精品精品免费| 这里只有精品视频在线观看| 色视频成人在线观看免| 成人av一区二区三区| 国内精品自线一区二区三区视频| 亚洲h在线观看| 一区二区在线观看免费 | 成人一级片网址| 精品亚洲porn| 久久精品国产免费看久久精品| 亚洲国产日韩一级| 一区二区高清在线| 亚洲综合久久久久| 一区二区在线观看视频 | 51午夜精品国产| 欧美亚洲禁片免费| 欧美色精品天天在线观看视频| 色欧美片视频在线观看 | thepron国产精品| 国产成人一区在线| 国产高清精品网站| 国产成人av在线影院| 丁香激情综合国产| 不卡视频在线观看| 99久久99久久精品国产片果冻| thepron国产精品| 91在线免费视频观看| 91免费看`日韩一区二区| 91香蕉视频污在线| 欧美视频完全免费看| 欧美美女黄视频| 欧美一区二区三区小说| 精品日韩一区二区三区| 久久蜜桃一区二区| 亚洲国产精品二十页| 日本一区二区不卡视频| 亚洲精品高清在线观看| 天堂成人免费av电影一区| 免费视频最近日韩| 国产成人在线视频网站| 91天堂素人约啪| 欧美体内she精高潮| 欧美一级二级三级蜜桃| 精品国产不卡一区二区三区| 欧美国产精品v| 亚洲欧美日韩久久精品| 五月综合激情婷婷六月色窝| 精品中文字幕一区二区小辣椒| 国产a视频精品免费观看| 一本色道亚洲精品aⅴ| 在线不卡的av| 日本一区二区三区四区| 一个色综合av| 国产精品99久久不卡二区| 91日韩在线专区| 日韩欧美一区中文| 国产精品第13页| 日韩主播视频在线| 国内一区二区在线| 在线观看欧美黄色| 26uuu国产一区二区三区| 日韩伦理免费电影| 青青草原综合久久大伊人精品优势| 国产成人精品www牛牛影视| 欧美视频一区在线观看| 国产亚洲欧美日韩俺去了| 亚洲欧美aⅴ...| 久久爱www久久做| 色哦色哦哦色天天综合| 精品处破学生在线二十三| 一区二区三区在线视频免费 | 欧美国产国产综合| 天天色天天操综合| bt欧美亚洲午夜电影天堂| 91精品国产综合久久久久| 中文字幕一区二区三中文字幕| 蜜桃视频一区二区| 色天使色偷偷av一区二区| 久久久www成人免费无遮挡大片| 亚洲综合一区在线| 成人性色生活片| 欧美成人三级在线| 亚洲成人av一区二区| 99久久婷婷国产综合精品| 久久精品视频一区二区三区| 日韩国产欧美在线视频| 在线一区二区观看| 国产精品二三区| 成人一道本在线| 久久九九久久九九| 久久99深爱久久99精品| 欧美日韩大陆在线| 亚洲精品国产高清久久伦理二区| 成人免费的视频| 国产女同性恋一区二区| 狠狠色丁香婷婷综合| 正在播放亚洲一区| 日韩av网站在线观看| 欧美视频在线观看一区| 亚洲综合一区在线| 色综合色综合色综合| 亚洲欧洲精品成人久久奇米网| 国产精品91xxx| 日本一区二区综合亚洲| 丰满岳乱妇一区二区三区| 精品国产人成亚洲区| 久久精品国产免费看久久精品| 日韩一区二区三区电影在线观看| 石原莉奈在线亚洲三区| 欧美日韩久久一区二区| 亚洲国产另类av| 欧美三级资源在线| 亚洲国产精品一区二区www在线 | 麻豆成人av在线| 欧美一区欧美二区| 日本不卡在线视频| 欧美一级片在线看| 青青草国产成人av片免费| 欧美一区二区网站| 蜜臀av在线播放一区二区三区| 欧美一级久久久| 国产一区二区女| 中文av一区二区| 97久久精品人人澡人人爽| 亚洲免费av在线| 欧美在线视频你懂得| 五月天亚洲婷婷| 欧美一区二区三区视频| 国产精品自拍在线| 亚洲欧美一区二区三区国产精品| 欧美性大战久久久久久久蜜臀| 婷婷亚洲久悠悠色悠在线播放 | 日韩三级在线观看| 国内精品视频一区二区三区八戒| 国产日韩精品一区二区三区| 成人sese在线| 日韩精品一卡二卡三卡四卡无卡| 日韩精品午夜视频| 六月丁香综合在线视频| 爽爽淫人综合网网站| 色999日韩国产欧美一区二区| 国产精品乱码久久久久久| 91福利在线播放| 男女性色大片免费观看一区二区 | 欧美剧情电影在线观看完整版免费励志电影 | 日韩高清一区在线| 国产偷国产偷亚洲高清人白洁 |