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

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

?? unzip.cpp

?? 泡泡堂單機版(含ASL游戲引擎源碼 泡泡堂單機版(含ASL游戲引擎源碼
?? CPP
?? 第 1 頁 / 共 5 頁
字號:

    // copy
    if (n!=0) {memcpy(p,q,n); p+=n; q+=n;}
  }

  // update pointers
  z->next_out = p;
  s->read = q;

  // done
  return r;
}






// simplify the use of the inflate_huft type with some defines
#define exop word.what.Exop
#define bits word.what.Bits

typedef enum {        // waiting for "i:"=input, "o:"=output, "x:"=nothing 
      START,    // x: set up for LEN 
      LEN,      // i: get length/literal/eob next 
      LENEXT,   // i: getting length extra (have base) 
      DIST,     // i: get distance next 
      DISTEXT,  // i: getting distance extra 
      COPY,     // o: copying bytes in window, waiting for space
      LIT,      // o: got literal, waiting for output space 
      WASH,     // o: got eob, possibly still output waiting 
      END,      // x: got eob and all data flushed 
      BADCODE}  // x: got error 
inflate_codes_mode;

// inflate codes private state
struct inflate_codes_state {

  // mode 
  inflate_codes_mode mode;      // current inflate_codes mode 

  // mode dependent information 
  uInt len;
  union {
    struct {
      const inflate_huft *tree;       // pointer into tree 
      uInt need;                // bits needed 
    } code;             // if LEN or DIST, where in tree 
    uInt lit;           // if LIT, literal 
    struct {
      uInt get;                 // bits to get for extra 
      uInt dist;                // distance back to copy from 
    } copy;             // if EXT or COPY, where and how much 
  } sub;                // submode

  // mode independent information 
  Byte lbits;           // ltree bits decoded per branch 
  Byte dbits;           // dtree bits decoder per branch 
  const inflate_huft *ltree;          // literal/length/eob tree
  const inflate_huft *dtree;          // distance tree

};


inflate_codes_statef *inflate_codes_new(
uInt bl, uInt bd,
const inflate_huft *tl,
const inflate_huft *td, // need separate declaration for Borland C++
z_streamp z)
{
  inflate_codes_statef *c;

  if ((c = (inflate_codes_statef *)
       ZALLOC(z,1,sizeof(struct inflate_codes_state))) != Z_NULL)
  {
    c->mode = START;
    c->lbits = (Byte)bl;
    c->dbits = (Byte)bd;
    c->ltree = tl;
    c->dtree = td;
    LuTracev((stderr, "inflate:       codes new\n"));
  }
  return c;
}


int inflate_codes(inflate_blocks_statef *s, z_streamp z, int r)
{
  uInt j;               // temporary storage
  const inflate_huft *t;      // temporary pointer
  uInt e;               // extra bits or operation
  uLong b;              // bit buffer
  uInt k;               // bits in bit buffer
  Byte *p;             // input data pointer
  uInt n;               // bytes available there
  Byte *q;             // output window write pointer
  uInt m;               // bytes to end of window or read pointer
  Byte *f;             // pointer to copy strings from
  inflate_codes_statef *c = s->sub.decode.codes;  // codes state

  // copy input/output information to locals (UPDATE macro restores)
  LOAD

  // process input and output based on current state
  for(;;) switch (c->mode)
  {             // waiting for "i:"=input, "o:"=output, "x:"=nothing
    case START:         // x: set up for LEN
#ifndef SLOW
      if (m >= 258 && n >= 10)
      {
        UPDATE
        r = inflate_fast(c->lbits, c->dbits, c->ltree, c->dtree, s, z);
        LOAD
        if (r != Z_OK)
        {
          c->mode = r == Z_STREAM_END ? WASH : BADCODE;
          break;
        }
      }
#endif // !SLOW
      c->sub.code.need = c->lbits;
      c->sub.code.tree = c->ltree;
      c->mode = LEN;
    case LEN:           // i: get length/literal/eob next
      j = c->sub.code.need;
      NEEDBITS(j)
      t = c->sub.code.tree + ((uInt)b & inflate_mask[j]);
      DUMPBITS(t->bits)
      e = (uInt)(t->exop);
      if (e == 0)               // literal 
      {
        c->sub.lit = t->base;
        LuTracevv((stderr, t->base >= 0x20 && t->base < 0x7f ?
                 "inflate:         literal '%c'\n" :
                 "inflate:         literal 0x%02x\n", t->base));
        c->mode = LIT;
        break;
      }
      if (e & 16)               // length 
      {
        c->sub.copy.get = e & 15;
        c->len = t->base;
        c->mode = LENEXT;
        break;
      }
      if ((e & 64) == 0)        // next table 
      {
        c->sub.code.need = e;
        c->sub.code.tree = t + t->base;
        break;
      }
      if (e & 32)               // end of block 
      {
        LuTracevv((stderr, "inflate:         end of block\n"));
        c->mode = WASH;
        break;
      }
      c->mode = BADCODE;        // invalid code 
      z->msg = (char*)"invalid literal/length code";
      r = Z_DATA_ERROR;
      LEAVE
    case LENEXT:        // i: getting length extra (have base) 
      j = c->sub.copy.get;
      NEEDBITS(j)
      c->len += (uInt)b & inflate_mask[j];
      DUMPBITS(j)
      c->sub.code.need = c->dbits;
      c->sub.code.tree = c->dtree;
      LuTracevv((stderr, "inflate:         length %u\n", c->len));
      c->mode = DIST;
    case DIST:          // i: get distance next 
      j = c->sub.code.need;
      NEEDBITS(j)
      t = c->sub.code.tree + ((uInt)b & inflate_mask[j]);
      DUMPBITS(t->bits)
      e = (uInt)(t->exop);
      if (e & 16)               // distance 
      {
        c->sub.copy.get = e & 15;
        c->sub.copy.dist = t->base;
        c->mode = DISTEXT;
        break;
      }
      if ((e & 64) == 0)        // next table 
      {
        c->sub.code.need = e;
        c->sub.code.tree = t + t->base;
        break;
      }
      c->mode = BADCODE;        // invalid code 
      z->msg = (char*)"invalid distance code";
      r = Z_DATA_ERROR;
      LEAVE
    case DISTEXT:       // i: getting distance extra 
      j = c->sub.copy.get;
      NEEDBITS(j)
      c->sub.copy.dist += (uInt)b & inflate_mask[j];
      DUMPBITS(j)
      LuTracevv((stderr, "inflate:         distance %u\n", c->sub.copy.dist));
      c->mode = COPY;
    case COPY:          // o: copying bytes in window, waiting for space 
      f = q - c->sub.copy.dist;      while (f < s->window)             // modulo window size-"while" instead        f += s->end - s->window;        // of "if" handles invalid distances       while (c->len)      {
        NEEDOUT
        OUTBYTE(*f++)
        if (f == s->end)
          f = s->window;
        c->len--;
      }
      c->mode = START;
      break;
    case LIT:           // o: got literal, waiting for output space 
      NEEDOUT
      OUTBYTE(c->sub.lit)
      c->mode = START;
      break;
    case WASH:          // o: got eob, possibly more output 
      if (k > 7)        // return unused byte, if any 
      {
        //Assert(k < 16, "inflate_codes grabbed too many bytes")
        k -= 8;
        n++;
        p--;            // can always return one 
      }
      FLUSH
      if (s->read != s->write)
        LEAVE
      c->mode = END;
    case END:
      r = Z_STREAM_END;
      LEAVE
    case BADCODE:       // x: got error
      r = Z_DATA_ERROR;
      LEAVE
    default:
      r = Z_STREAM_ERROR;
      LEAVE
  }
}


void inflate_codes_free(inflate_codes_statef *c,z_streamp z)
{ ZFREE(z, c);
  LuTracev((stderr, "inflate:       codes free\n"));
}



// infblock.c -- interpret and process block types to last block
// Copyright (C) 1995-1998 Mark Adler
// For conditions of distribution and use, see copyright notice in zlib.h

//struct inflate_codes_state {int dummy;}; // for buggy compilers 



// Table for deflate from PKZIP's appnote.txt.
const uInt border[] = { // Order of the bit length code lengths
        16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};

//
// Notes beyond the 1.93a appnote.txt:
//
// 1. Distance pointers never point before the beginning of the output stream.
// 2. Distance pointers can point back across blocks, up to 32k away.
// 3. There is an implied maximum of 7 bits for the bit length table and
//    15 bits for the actual data.
// 4. If only one code exists, then it is encoded using one bit.  (Zero
//    would be more efficient, but perhaps a little confusing.)  If two
//    codes exist, they are coded using one bit each (0 and 1).
// 5. There is no way of sending zero distance codes--a dummy must be
//    sent if there are none.  (History: a pre 2.0 version of PKZIP would
//    store blocks with no distance codes, but this was discovered to be
//    too harsh a criterion.)  Valid only for 1.93a.  2.04c does allow
//    zero distance codes, which is sent as one code of zero bits in
//    length.
// 6. There are up to 286 literal/length codes.  Code 256 represents the
//    end-of-block.  Note however that the static length tree defines
//    288 codes just to fill out the Huffman codes.  Codes 286 and 287
//    cannot be used though, since there is no length base or extra bits
//    defined for them.  Similarily, there are up to 30 distance codes.
//    However, static trees define 32 codes (all 5 bits) to fill out the
//    Huffman codes, but the last two had better not show up in the data.
// 7. Unzip can check dynamic Huffman blocks for complete code sets.
//    The exception is that a single code would not be complete (see #4).
// 8. The five bits following the block type is really the number of
//    literal codes sent minus 257.
// 9. Length codes 8,16,16 are interpreted as 13 length codes of 8 bits
//    (1+6+6).  Therefore, to output three times the length, you output
//    three codes (1+1+1), whereas to output four times the same length,
//    you only need two codes (1+3).  Hmm.
//10. In the tree reconstruction algorithm, Code = Code + Increment
//    only if BitLength(i) is not zero.  (Pretty obvious.)
//11. Correction: 4 Bits: # of Bit Length codes - 4     (4 - 19)
//12. Note: length code 284 can represent 227-258, but length code 285
//    really is 258.  The last length deserves its own, short code
//    since it gets used a lot in very redundant files.  The length
//    258 is special since 258 - 3 (the min match length) is 255.
//13. The literal/length and distance code bit lengths are read as a
//    single stream of lengths.  It is possible (and advantageous) for
//    a repeat code (16, 17, or 18) to go across the boundary between
//    the two sets of lengths.


void inflate_blocks_reset(inflate_blocks_statef *s, z_streamp z, uLong *c)
{
  if (c != Z_NULL)
    *c = s->check;
  if (s->mode == IBM_BTREE || s->mode == IBM_DTREE)
    ZFREE(z, s->sub.trees.blens);
  if (s->mode == IBM_CODES)
    inflate_codes_free(s->sub.decode.codes, z);
  s->mode = IBM_TYPE;
  s->bitk = 0;
  s->bitb = 0;
  s->read = s->write = s->window;
  if (s->checkfn != Z_NULL)
    z->adler = s->check = (*s->checkfn)(0L, (const Byte *)Z_NULL, 0);
  LuTracev((stderr, "inflate:   blocks reset\n"));
}


inflate_blocks_statef *inflate_blocks_new(z_streamp z, check_func c, uInt w)
{
  inflate_blocks_statef *s;

  if ((s = (inflate_blocks_statef *)ZALLOC
       (z,1,sizeof(struct inflate_blocks_state))) == Z_NULL)
    return s;
  if ((s->hufts =
       (inflate_huft *)ZALLOC(z, sizeof(inflate_huft), MANY)) == Z_NULL)
  {
    ZFREE(z, s);
    return Z_NULL;
  }
  if ((s->window = (Byte *)ZALLOC(z, 1, w)) == Z_NULL)
  {
    ZFREE(z, s->hufts);
    ZFREE(z, s);
    return Z_NULL;
  }
  s->end = s->window + w;
  s->checkfn = c;
  s->mode = IBM_TYPE;
  LuTracev((stderr, "inflate:   blocks allocated\n"));
  inflate_blocks_reset(s, z, Z_NULL);
  return s;
}


int inflate_blocks(inflate_blocks_statef *s, z_streamp z, int r)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲高清一区二区三区| 99久久99久久久精品齐齐 | 精品久久人人做人人爱| 中文一区在线播放| 蜜桃久久精品一区二区| 色综合天天做天天爱| 精品国产91九色蝌蚪| 亚洲国产一区在线观看| 成人小视频免费观看| 日韩欧美国产不卡| 亚洲成国产人片在线观看| 丁香婷婷综合激情五月色| 欧美一卡二卡在线| 亚洲成人激情综合网| 色8久久精品久久久久久蜜| 久久精品人人爽人人爽| 久久9热精品视频| 欧美日韩国产小视频在线观看| 国产精品美日韩| 国产经典欧美精品| 久久综合久久综合亚洲| 日韩高清不卡一区二区三区| 欧美综合久久久| 一区二区视频在线看| 99国内精品久久| 中文字幕字幕中文在线中不卡视频| 国产精品主播直播| 久久久久9999亚洲精品| 国产精品资源站在线| 久久午夜羞羞影院免费观看| 国产一区二区免费视频| 久久综合精品国产一区二区三区| 麻豆国产精品777777在线| 91精品国产色综合久久| 日韩成人精品视频| 欧美www视频| 国产激情一区二区三区桃花岛亚洲| 日韩欧美高清在线| 国产精品18久久久久久久久| 国产视频亚洲色图| 成人午夜av电影| 亚洲老司机在线| 欧美日韩一卡二卡三卡| 免费日本视频一区| 2022国产精品视频| 成人福利视频网站| 亚洲免费av网站| 欧美精品一卡两卡| 老司机午夜精品99久久| 久久久综合九色合综国产精品| 国产69精品久久99不卡| 亚洲女女做受ⅹxx高潮| 欧美日韩亚洲综合一区| 麻豆91在线看| 国产精品你懂的在线欣赏| 91亚洲精华国产精华精华液| 亚洲第一二三四区| 欧美xxxxx牲另类人与| 成人av在线播放网址| 夜夜精品视频一区二区| 欧美大片在线观看| av成人动漫在线观看| 性久久久久久久久久久久| 精品成人一区二区三区四区| 9i在线看片成人免费| 午夜免费久久看| 国产嫩草影院久久久久| 欧美无砖专区一中文字| 精品一区二区三区在线观看国产 | 亚洲国产精品t66y| 色呦呦国产精品| 激情图片小说一区| 一区二区三区美女| 久久久久久黄色| 在线电影一区二区三区| 99精品久久免费看蜜臀剧情介绍| 日本欧美韩国一区三区| 国产精品久久久久久久久久久免费看| 欧美午夜电影网| 成人v精品蜜桃久久一区| 日韩国产欧美在线播放| 中文字幕欧美三区| 在线不卡免费欧美| aaa国产一区| 久久国内精品自在自线400部| 国产精品久久久久久久久免费相片| 欧美日韩国产乱码电影| 成人高清免费观看| 国产在线精品一区二区夜色| 亚洲成人一二三| 亚洲另类色综合网站| 亚洲国产精品精华液2区45| 精品三级av在线| 欧美日韩精品电影| 91视频在线观看| 岛国一区二区三区| 国产精品99精品久久免费| 丝袜亚洲另类欧美综合| 亚洲一区二区免费视频| 亚洲欧美经典视频| 中文字幕一区二区三区四区 | 国产成都精品91一区二区三| 日本视频一区二区| 亚洲精品久久7777| 亚洲精品视频一区二区| 1024成人网| 中文字幕一区二区三区视频| 国产精品免费丝袜| 中文字幕va一区二区三区| 久久蜜桃一区二区| 国产日韩欧美精品综合| 久久一夜天堂av一区二区三区 | 精彩视频一区二区三区| 蜜臀av国产精品久久久久 | 日韩精品专区在线影院重磅| 欧美精品 日韩| 欧美一三区三区四区免费在线看| 欧美日韩亚洲丝袜制服| 欧美疯狂做受xxxx富婆| 欧美一级片免费看| 欧美videos大乳护士334| 欧美成人一区二区三区片免费| 在线播放视频一区| 日韩精品一区二区三区在线播放 | 国产亚洲欧美色| 久久久久久久久久久黄色| 日本一区二区三区在线不卡| 中日韩av电影| 亚洲视频在线一区| 亚洲一区二区三区小说| 日本成人在线网站| 国产曰批免费观看久久久| 国产揄拍国内精品对白| av电影天堂一区二区在线| 欧美亚洲动漫制服丝袜| 91精品国产色综合久久不卡电影 | eeuss鲁片一区二区三区 | 欧美一区二区精品在线| 日韩亚洲欧美成人一区| 国产日产欧美一区| 亚洲精品成人在线| 老司机午夜精品99久久| 波多野结衣中文一区| 欧美日韩激情一区| 亚洲精品一区二区三区蜜桃下载| 国产农村妇女精品| 婷婷一区二区三区| 国产乱码精品一区二区三区忘忧草| 不卡的电视剧免费网站有什么| 在线视频你懂得一区| 久久尤物电影视频在线观看| 亚洲免费资源在线播放| 精久久久久久久久久久| 色综合色综合色综合色综合色综合 | 精品国产免费一区二区三区四区 | 91免费精品国自产拍在线不卡| 欧美午夜不卡视频| 久久免费的精品国产v∧| 一区二区三区美女视频| 韩国成人在线视频| 欧美视频在线播放| 国产日韩视频一区二区三区| 亚洲高清免费在线| 波多野结衣在线一区| 日韩一级欧美一级| 亚洲美女少妇撒尿| 国产成人鲁色资源国产91色综 | 免费三级欧美电影| 色综合天天综合网国产成人综合天| 6080日韩午夜伦伦午夜伦| 国产精品成人一区二区艾草| 美腿丝袜亚洲色图| 在线国产亚洲欧美| 久久老女人爱爱| 免费的国产精品| 欧美日产在线观看| 亚洲色图一区二区三区| 国产电影一区在线| 日韩免费视频一区二区| 亚洲综合色噜噜狠狠| 成人污污视频在线观看| 久久久久国产精品厨房| 青娱乐精品视频在线| 欧洲精品一区二区三区在线观看| 国产欧美日韩在线| 国产一区视频网站| 日韩午夜精品电影| 青娱乐精品视频| 91精品在线免费| 亚洲制服丝袜av| 色菇凉天天综合网| 亚洲视频网在线直播| 成人ar影院免费观看视频| 久久久久久亚洲综合影院红桃 | 天天操天天色综合| 欧美亚洲动漫精品| 香蕉av福利精品导航| 欧美年轻男男videosbes| 亚洲一区二区三区四区五区黄| 在线日韩av片|