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

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

?? fitblk.c

?? StormLib是對MPQ文件進行處理的庫 MPQ是暴雪公司的私有的一種壓縮格式
?? C
字號:
/* fitblk.c: example of fitting compressed output to a specified size   Not copyrighted -- provided to the public domain   Version 1.1  25 November 2004  Mark Adler *//* Version history:   1.0  24 Nov 2004  First version   1.1  25 Nov 2004  Change deflateInit2() to deflateInit()                     Use fixed-size, stack-allocated raw buffers                     Simplify code moving compression to subroutines                     Use assert() for internal errors                     Add detailed description of approach *//* Approach to just fitting a requested compressed size:   fitblk performs three compression passes on a portion of the input   data in order to determine how much of that input will compress to   nearly the requested output block size.  The first pass generates   enough deflate blocks to produce output to fill the requested   output size plus a specfied excess amount (see the EXCESS define   below).  The last deflate block may go quite a bit past that, but   is discarded.  The second pass decompresses and recompresses just   the compressed data that fit in the requested plus excess sized   buffer.  The deflate process is terminated after that amount of   input, which is less than the amount consumed on the first pass.   The last deflate block of the result will be of a comparable size   to the final product, so that the header for that deflate block and   the compression ratio for that block will be about the same as in   the final product.  The third compression pass decompresses the   result of the second step, but only the compressed data up to the   requested size minus an amount to allow the compressed stream to   complete (see the MARGIN define below).  That will result in a   final compressed stream whose length is less than or equal to the   requested size.  Assuming sufficient input and a requested size   greater than a few hundred bytes, the shortfall will typically be   less than ten bytes.   If the input is short enough that the first compression completes   before filling the requested output size, then that compressed   stream is return with no recompression.   EXCESS is chosen to be just greater than the shortfall seen in a   two pass approach similar to the above.  That shortfall is due to   the last deflate block compressing more efficiently with a smaller   header on the second pass.  EXCESS is set to be large enough so   that there is enough uncompressed data for the second pass to fill   out the requested size, and small enough so that the final deflate   block of the second pass will be close in size to the final deflate   block of the third and final pass.  MARGIN is chosen to be just   large enough to assure that the final compression has enough room   to complete in all cases. */#include <stdio.h>#include <stdlib.h>#include <assert.h>#include "zlib.h"#define local static/* print nastygram and leave */local void quit(char *why){    fprintf(stderr, "fitblk abort: %s\n", why);    exit(1);}#define RAWLEN 4096    /* intermediate uncompressed buffer size *//* compress from file to def until provided buffer is full or end of   input reached; return last deflate() return value, or Z_ERRNO if   there was read error on the file */local int partcompress(FILE *in, z_streamp def){    int ret, flush;    unsigned char raw[RAWLEN];    flush = Z_NO_FLUSH;    do {        def->avail_in = fread(raw, 1, RAWLEN, in);        if (ferror(in))            return Z_ERRNO;        def->next_in = raw;        if (feof(in))            flush = Z_FINISH;        ret = deflate(def, flush);        assert(ret != Z_STREAM_ERROR);    } while (def->avail_out != 0 && flush == Z_NO_FLUSH);    return ret;}/* recompress from inf's input to def's output; the input for inf and   the output for def are set in those structures before calling;   return last deflate() return value, or Z_MEM_ERROR if inflate()   was not able to allocate enough memory when it needed to */local int recompress(z_streamp inf, z_streamp def){    int ret, flush;    unsigned char raw[RAWLEN];    flush = Z_NO_FLUSH;    do {        /* decompress */        inf->avail_out = RAWLEN;        inf->next_out = raw;        ret = inflate(inf, Z_NO_FLUSH);        assert(ret != Z_STREAM_ERROR && ret != Z_DATA_ERROR &&               ret != Z_NEED_DICT);        if (ret == Z_MEM_ERROR)            return ret;        /* compress what was decompresed until done or no room */        def->avail_in = RAWLEN - inf->avail_out;        def->next_in = raw;        if (inf->avail_out != 0)            flush = Z_FINISH;        ret = deflate(def, flush);        assert(ret != Z_STREAM_ERROR);    } while (ret != Z_STREAM_END && def->avail_out != 0);    return ret;}#define EXCESS 256      /* empirically determined stream overage */#define MARGIN 8        /* amount to back off for completion *//* compress from stdin to fixed-size block on stdout */int main(int argc, char **argv){    int ret;                /* return code */    unsigned size;          /* requested fixed output block size */    unsigned have;          /* bytes written by deflate() call */    unsigned char *blk;     /* intermediate and final stream */    unsigned char *tmp;     /* close to desired size stream */    z_stream def, inf;      /* zlib deflate and inflate states */    /* get requested output size */    if (argc != 2)        quit("need one argument: size of output block");    ret = strtol(argv[1], argv + 1, 10);    if (argv[1][0] != 0)        quit("argument must be a number");    if (ret < 8)            /* 8 is minimum zlib stream size */        quit("need positive size of 8 or greater");    size = (unsigned)ret;    /* allocate memory for buffers and compression engine */    blk = malloc(size + EXCESS);    def.zalloc = Z_NULL;    def.zfree = Z_NULL;    def.opaque = Z_NULL;    ret = deflateInit(&def, Z_DEFAULT_COMPRESSION);    if (ret != Z_OK || blk == NULL)        quit("out of memory");    /* compress from stdin until output full, or no more input */    def.avail_out = size + EXCESS;    def.next_out = blk;    ret = partcompress(stdin, &def);    if (ret == Z_ERRNO)        quit("error reading input");    /* if it all fit, then size was undersubscribed -- done! */    if (ret == Z_STREAM_END && def.avail_out >= EXCESS) {        /* write block to stdout */        have = size + EXCESS - def.avail_out;        if (fwrite(blk, 1, have, stdout) != have || ferror(stdout))            quit("error writing output");        /* clean up and print results to stderr */        ret = deflateEnd(&def);        assert(ret != Z_STREAM_ERROR);        free(blk);        fprintf(stderr,                "%u bytes unused out of %u requested (all input)\n",                size - have, size);        return 0;    }    /* it didn't all fit -- set up for recompression */    inf.zalloc = Z_NULL;    inf.zfree = Z_NULL;    inf.opaque = Z_NULL;    inf.avail_in = 0;    inf.next_in = Z_NULL;    ret = inflateInit(&inf);    tmp = malloc(size + EXCESS);    if (ret != Z_OK || tmp == NULL)        quit("out of memory");    ret = deflateReset(&def);    assert(ret != Z_STREAM_ERROR);    /* do first recompression close to the right amount */    inf.avail_in = size + EXCESS;    inf.next_in = blk;    def.avail_out = size + EXCESS;    def.next_out = tmp;    ret = recompress(&inf, &def);    if (ret == Z_MEM_ERROR)        quit("out of memory");    /* set up for next reocmpression */    ret = inflateReset(&inf);    assert(ret != Z_STREAM_ERROR);    ret = deflateReset(&def);    assert(ret != Z_STREAM_ERROR);    /* do second and final recompression (third compression) */    inf.avail_in = size - MARGIN;   /* assure stream will complete */    inf.next_in = tmp;    def.avail_out = size;    def.next_out = blk;    ret = recompress(&inf, &def);    if (ret == Z_MEM_ERROR)        quit("out of memory");    assert(ret == Z_STREAM_END);    /* otherwise MARGIN too small */    /* done -- write block to stdout */    have = size - def.avail_out;    if (fwrite(blk, 1, have, stdout) != have || ferror(stdout))        quit("error writing output");    /* clean up and print results to stderr */    free(tmp);    ret = inflateEnd(&inf);    assert(ret != Z_STREAM_ERROR);    ret = deflateEnd(&def);    assert(ret != Z_STREAM_ERROR);    free(blk);    fprintf(stderr,            "%u bytes unused out of %u requested (%lu input)\n",            size - have, size, def.total_in);    return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩免费不卡视频一区二区三区| 国产精品国产三级国产专播品爱网 | 国产精品久久久爽爽爽麻豆色哟哟 | 欧亚洲嫩模精品一区三区| 国产精品毛片无遮挡高清| 国产成人精品一区二区三区网站观看| 日韩欧美第一区| 国产精品中文欧美| 综合中文字幕亚洲| 色哟哟在线观看一区二区三区| 亚洲欧美日韩一区| 欧美高清www午色夜在线视频| 五月综合激情日本mⅴ| 日韩亚洲欧美在线| 国产精品一品二品| 亚洲综合免费观看高清完整版 | 一区二区三区在线视频观看| 欧美午夜片在线看| 久久狠狠亚洲综合| 日韩理论在线观看| 欧美一级欧美三级| 成人在线一区二区三区| 一区二区免费在线| 精品国产伦一区二区三区观看体验| 国产99精品国产| 亚洲午夜久久久久久久久电影网| 精品国产91久久久久久久妲己| www.99精品| 另类人妖一区二区av| 亚洲特黄一级片| 精品国产一区a| 色婷婷综合久久久中文一区二区| 麻豆91在线观看| 一区二区三国产精华液| 欧美国产乱子伦| 日韩一级片网址| 欧美亚洲一区二区在线观看| 国产福利精品一区二区| 日韩在线一二三区| 亚洲欧洲日产国码二区| 日韩一级二级三级精品视频| 91成人免费在线视频| 国产+成+人+亚洲欧洲自线| 日韩精品一二区| 亚洲视频一区二区在线| 国产亚洲一区二区三区四区| 在线播放国产精品二区一二区四区| 成人午夜免费av| 极品少妇xxxx精品少妇| 五月激情综合婷婷| 亚洲猫色日本管| 国产精品欧美一区喷水| 久久综合久久综合九色| 欧美一区二区私人影院日本| 在线精品视频一区二区| 成人短视频下载| 国产成人在线色| 国产中文字幕一区| 毛片基地黄久久久久久天堂| 亚洲一区二区三区四区在线免费观看| 欧美国产在线观看| 国产欧美日韩久久| 久久综合av免费| 精品少妇一区二区三区| 欧美成人aa大片| 日韩美女视频在线| 日韩三级电影网址| 91精品国产高清一区二区三区| 欧美性xxxxxxxx| 欧美视频在线观看一区| 色综合久久99| 欧洲一区在线电影| 欧亚一区二区三区| 欧美日韩黄视频| 欧美区在线观看| 制服丝袜在线91| 日韩欧美在线网站| 欧美电视剧在线观看完整版| 日韩欧美国产成人一区二区| 91精品国产综合久久蜜臀| 欧美一区二区三区视频在线观看 | 久久精品日韩一区二区三区| 欧美成人精品二区三区99精品| 日韩欧美视频在线| 久久综合色之久久综合| 国产精品三级视频| 亚洲激情自拍视频| 午夜激情一区二区| 蜜臂av日日欢夜夜爽一区| 精品一区二区三区不卡 | 94-欧美-setu| 欧美在线视频日韩| 日韩一区二区免费高清| 久久久精品国产免大香伊| 国产精品丝袜久久久久久app| 国产精品免费久久| 夜夜操天天操亚洲| 美女视频一区在线观看| 国产一区二区久久| 成人aa视频在线观看| 成人免费视频一区二区| 91麻豆蜜桃一区二区三区| 欧美日韩亚洲综合在线 | 国产91精品一区二区麻豆亚洲| 成人午夜激情影院| 欧美色综合久久| 久久综合九色综合欧美亚洲| 国产精品乱码妇女bbbb| 亚洲一区二区三区四区在线 | 亚洲综合无码一区二区| 久久精品国产精品亚洲红杏| 成人一级视频在线观看| 欧美在线免费视屏| 精品99999| 亚洲精品乱码久久久久久久久 | 国产精品一区二区免费不卡| 99re在线精品| 精品日韩在线一区| 亚洲精品第1页| 看电视剧不卡顿的网站| 99精品国产91久久久久久| 日韩精品一区国产麻豆| 亚洲精品视频在线| 国内成人精品2018免费看| 94-欧美-setu| wwwwxxxxx欧美| 亚洲电影你懂得| 91在线云播放| 久久精品亚洲乱码伦伦中文| 亚洲成人在线观看视频| aaa亚洲精品一二三区| 日韩精品一区二区三区四区| 亚洲在线免费播放| 99精品黄色片免费大全| 久久久精品国产免费观看同学| 午夜精品久久久久久不卡8050| 成人福利在线看| 久久伊人中文字幕| 日韩精品福利网| 欧美午夜精品一区二区三区| 亚洲国产岛国毛片在线| 韩国理伦片一区二区三区在线播放| 欧美亚洲免费在线一区| 中文字幕一区二区三区在线播放 | 日韩激情中文字幕| 色综合久久综合| 中文字幕成人在线观看| 国产专区综合网| 精品日韩欧美在线| 奇米精品一区二区三区在线观看一 | 国产精品丝袜91| 国产精品中文有码| 国产亚洲欧洲997久久综合 | 日韩欧美中文字幕一区| 亚洲一二三四在线观看| 色欧美乱欧美15图片| 亚洲精品视频一区二区| 91网站在线观看视频| 日本一区二区三级电影在线观看| 国精产品一区一区三区mba视频| 正在播放一区二区| 五月天网站亚洲| 91精品国产一区二区人妖| 午夜成人在线视频| 91精品婷婷国产综合久久性色 | 激情六月婷婷综合| 精品国产乱码久久久久久蜜臀| 老司机免费视频一区二区三区| 日韩午夜电影av| 精品一区二区国语对白| 欧美草草影院在线视频| 九九久久精品视频| 国产丝袜欧美中文另类| 国产69精品一区二区亚洲孕妇| 国产精品毛片无遮挡高清| 91免费版在线| 性做久久久久久久免费看| 91精品欧美久久久久久动漫| 日韩av一级电影| 久久伊人中文字幕| 不卡一二三区首页| 亚洲高清视频中文字幕| 欧美一区二区高清| 国产精品亚洲一区二区三区在线| 国产欧美1区2区3区| 91蜜桃视频在线| 亚州成人在线电影| 久久久.com| 一本色道**综合亚洲精品蜜桃冫| 亚洲一区在线电影| 日韩精品中文字幕在线不卡尤物| 国产精品一区二区在线观看不卡 | 亚洲视频在线观看一区| 欧美日韩一区二区三区不卡| 日韩电影一区二区三区四区| 久久天天做天天爱综合色| 99国产精品久久久久久久久久久| 亚洲高清在线视频| 国产午夜精品一区二区三区嫩草| 色香色香欲天天天影视综合网|