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

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

?? infblock.c

?? VC++視頻開發實例集錦(包括“遠程視頻監控”"語音識別系統"等13個經典例子)
?? C
字號:
/* infblock.c -- interpret and process block types to last block
 * Copyright (C) 1995-2002 Mark Adler
 * For conditions of distribution and use, see copyright notice in zlib.h 
 */

#include "zutil.h"
#include "infblock.h"
#include "inftrees.h"
#include "infcodes.h"
#include "infutil.h"

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

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

/* Table for deflate from PKZIP's appnote.txt. */
local 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(s, z, c)
inflate_blocks_statef *s;
z_streamp z;
uLongf *c;
{
  if (c != Z_NULL)
    *c = s->check;
  if (s->mode == BTREE || s->mode == DTREE)
    ZFREE(z, s->sub.trees.blens);
  if (s->mode == CODES)
    inflate_codes_free(s->sub.decode.codes, z);
  s->mode = 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 Bytef *)Z_NULL, 0);
  Tracev((stderr, "inflate:   blocks reset\n"));
}


inflate_blocks_statef *inflate_blocks_new(z, c, w)
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 = (Bytef *)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 = TYPE;
  Tracev((stderr, "inflate:   blocks allocated\n"));
  inflate_blocks_reset(s, z, Z_NULL);
  return s;
}


int inflate_blocks(s, z, r)
inflate_blocks_statef *s;
z_streamp z;
int r;
{
  uInt t;               /* temporary storage */
  uLong b;              /* bit buffer */
  uInt k;               /* bits in bit buffer */
  Bytef *p;             /* input data pointer */
  uInt n;               /* bytes available there */
  Bytef *q;             /* output window write pointer */
  uInt m;               /* bytes to end of window or read pointer */

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

  /* process input based on current state */
  while (1) switch (s->mode)
  {
    case TYPE:
      NEEDBITS(3)
      t = (uInt)b & 7;
      s->last = t & 1;
      switch (t >> 1)
      {
        case 0:                         /* stored */
          Tracev((stderr, "inflate:     stored block%s\n",
                 s->last ? " (last)" : ""));
          DUMPBITS(3)
          t = k & 7;                    /* go to byte boundary */
          DUMPBITS(t)
          s->mode = LENS;               /* get length of stored block */
          break;
        case 1:                         /* fixed */
          Tracev((stderr, "inflate:     fixed codes block%s\n",
                 s->last ? " (last)" : ""));
          {
            uInt bl, bd;
            inflate_huft *tl, *td;

            inflate_trees_fixed(&bl, &bd, &tl, &td, z);
            s->sub.decode.codes = inflate_codes_new(bl, bd, tl, td, z);
            if (s->sub.decode.codes == Z_NULL)
            {
              r = Z_MEM_ERROR;
              LEAVE
            }
          }
          DUMPBITS(3)
          s->mode = CODES;
          break;
        case 2:                         /* dynamic */
          Tracev((stderr, "inflate:     dynamic codes block%s\n",
                 s->last ? " (last)" : ""));
          DUMPBITS(3)
          s->mode = TABLE;
          break;
        case 3:                         /* illegal */
          DUMPBITS(3)
          s->mode = BAD;
          z->msg = (char*)"invalid block type";
          r = Z_DATA_ERROR;
          LEAVE
      }
      break;
    case LENS:
      NEEDBITS(32)
      if ((((~b) >> 16) & 0xffff) != (b & 0xffff))
      {
        s->mode = BAD;
        z->msg = (char*)"invalid stored block lengths";
        r = Z_DATA_ERROR;
        LEAVE
      }
      s->sub.left = (uInt)b & 0xffff;
      b = k = 0;                      /* dump bits */
      Tracev((stderr, "inflate:       stored length %u\n", s->sub.left));
      s->mode = s->sub.left ? STORED : (s->last ? DRY : TYPE);
      break;
    case STORED:
      if (n == 0)
        LEAVE
      NEEDOUT
      t = s->sub.left;
      if (t > n) t = n;
      if (t > m) t = m;
      zmemcpy(q, p, t);
      p += t;  n -= t;
      q += t;  m -= t;
      if ((s->sub.left -= t) != 0)
        break;
      Tracev((stderr, "inflate:       stored end, %lu total out\n",
              z->total_out + (q >= s->read ? q - s->read :
              (s->end - s->read) + (q - s->window))));
      s->mode = s->last ? DRY : TYPE;
      break;
    case TABLE:
      NEEDBITS(14)
      s->sub.trees.table = t = (uInt)b & 0x3fff;
#ifndef PKZIP_BUG_WORKAROUND
      if ((t & 0x1f) > 29 || ((t >> 5) & 0x1f) > 29)
      {
        s->mode = BAD;
        z->msg = (char*)"too many length or distance symbols";
        r = Z_DATA_ERROR;
        LEAVE
      }
#endif
      t = 258 + (t & 0x1f) + ((t >> 5) & 0x1f);
      if ((s->sub.trees.blens = (uIntf*)ZALLOC(z, t, sizeof(uInt))) == Z_NULL)
      {
        r = Z_MEM_ERROR;
        LEAVE
      }
      DUMPBITS(14)
      s->sub.trees.index = 0;
      Tracev((stderr, "inflate:       table sizes ok\n"));
      s->mode = BTREE;
    case BTREE:
      while (s->sub.trees.index < 4 + (s->sub.trees.table >> 10))
      {
        NEEDBITS(3)
        s->sub.trees.blens[border[s->sub.trees.index++]] = (uInt)b & 7;
        DUMPBITS(3)
      }
      while (s->sub.trees.index < 19)
        s->sub.trees.blens[border[s->sub.trees.index++]] = 0;
      s->sub.trees.bb = 7;
      t = inflate_trees_bits(s->sub.trees.blens, &s->sub.trees.bb,
                             &s->sub.trees.tb, s->hufts, z);
      if (t != Z_OK)
      {
        r = t;
        if (r == Z_DATA_ERROR)
        {
          ZFREE(z, s->sub.trees.blens);
          s->mode = BAD;
        }
        LEAVE
      }
      s->sub.trees.index = 0;
      Tracev((stderr, "inflate:       bits tree ok\n"));
      s->mode = DTREE;
    case DTREE:
      while (t = s->sub.trees.table,
             s->sub.trees.index < 258 + (t & 0x1f) + ((t >> 5) & 0x1f))
      {
        inflate_huft *h;
        uInt i, j, c;

        t = s->sub.trees.bb;
        NEEDBITS(t)
        h = s->sub.trees.tb + ((uInt)b & inflate_mask[t]);
        t = h->bits;
        c = h->base;
        if (c < 16)
        {
          DUMPBITS(t)
          s->sub.trees.blens[s->sub.trees.index++] = c;
        }
        else /* c == 16..18 */
        {
          i = c == 18 ? 7 : c - 14;
          j = c == 18 ? 11 : 3;
          NEEDBITS(t + i)
          DUMPBITS(t)
          j += (uInt)b & inflate_mask[i];
          DUMPBITS(i)
          i = s->sub.trees.index;
          t = s->sub.trees.table;
          if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) ||
              (c == 16 && i < 1))
          {
            ZFREE(z, s->sub.trees.blens);
            s->mode = BAD;
            z->msg = (char*)"invalid bit length repeat";
            r = Z_DATA_ERROR;
            LEAVE
          }
          c = c == 16 ? s->sub.trees.blens[i - 1] : 0;
          do {
            s->sub.trees.blens[i++] = c;
          } while (--j);
          s->sub.trees.index = i;
        }
      }
      s->sub.trees.tb = Z_NULL;
      {
        uInt bl, bd;
        inflate_huft *tl, *td;
        inflate_codes_statef *c;

        bl = 9;         /* must be <= 9 for lookahead assumptions */
        bd = 6;         /* must be <= 9 for lookahead assumptions */
        t = s->sub.trees.table;
        t = inflate_trees_dynamic(257 + (t & 0x1f), 1 + ((t >> 5) & 0x1f),
                                  s->sub.trees.blens, &bl, &bd, &tl, &td,
                                  s->hufts, z);
        if (t != Z_OK)
        {
          if (t == (uInt)Z_DATA_ERROR)
          {
            ZFREE(z, s->sub.trees.blens);
            s->mode = BAD;
          }
          r = t;
          LEAVE
        }
        Tracev((stderr, "inflate:       trees ok\n"));
        if ((c = inflate_codes_new(bl, bd, tl, td, z)) == Z_NULL)
        {
          r = Z_MEM_ERROR;
          LEAVE
        }
        s->sub.decode.codes = c;
      }
      ZFREE(z, s->sub.trees.blens);
      s->mode = CODES;
    case CODES:
      UPDATE
      if ((r = inflate_codes(s, z, r)) != Z_STREAM_END)
        return inflate_flush(s, z, r);
      r = Z_OK;
      inflate_codes_free(s->sub.decode.codes, z);
      LOAD
      Tracev((stderr, "inflate:       codes end, %lu total out\n",
              z->total_out + (q >= s->read ? q - s->read :
              (s->end - s->read) + (q - s->window))));
      if (!s->last)
      {
        s->mode = TYPE;
        break;
      }
      s->mode = DRY;
    case DRY:
      FLUSH
      if (s->read != s->write)
        LEAVE
      s->mode = DONE;
    case DONE:
      r = Z_STREAM_END;
      LEAVE
    case BAD:
      r = Z_DATA_ERROR;
      LEAVE
    default:
      r = Z_STREAM_ERROR;
      LEAVE
  }
}


int inflate_blocks_free(s, z)
inflate_blocks_statef *s;
z_streamp z;
{
  inflate_blocks_reset(s, z, Z_NULL);
  ZFREE(z, s->window);
  ZFREE(z, s->hufts);
  ZFREE(z, s);
  Tracev((stderr, "inflate:   blocks freed\n"));
  return Z_OK;
}


void inflate_set_dictionary(s, d, n)
inflate_blocks_statef *s;
const Bytef *d;
uInt  n;
{
  zmemcpy(s->window, d, n);
  s->read = s->write = s->window + n;
}


/* Returns true if inflate is currently at the end of a block generated
 * by Z_SYNC_FLUSH or Z_FULL_FLUSH. 
 * IN assertion: s != Z_NULL
 */
int inflate_blocks_sync_point(s)
inflate_blocks_statef *s;
{
  return s->mode == LENS;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线影视一区二区三区| 精品久久久久久久人人人人传媒| 色综合久久综合网欧美综合网| 91免费精品国自产拍在线不卡| 波多野结衣中文字幕一区| 91国内精品野花午夜精品| 欧美一个色资源| 欧美精品一区二区三区高清aⅴ| 最新日韩在线视频| 美女网站色91| 丁香桃色午夜亚洲一区二区三区| 91片在线免费观看| 久久影院视频免费| 亚洲国产aⅴ天堂久久| 国产 欧美在线| 日韩视频免费观看高清在线视频| 亚洲天堂网中文字| 成人黄色a**站在线观看| 日韩欧美在线综合网| 亚洲一区二区在线观看视频| 成人午夜av在线| 韩国av一区二区三区在线观看| 欧美日韩一区二区在线观看| 中文字幕在线观看一区| 国产精品一区二区在线看| 777欧美精品| 天天操天天综合网| 色先锋资源久久综合| 国产亚洲一区二区在线观看| 日本美女一区二区三区视频| 成人97人人超碰人人99| 精品国产一区二区在线观看| 久久超碰97中文字幕| 欧美日韩国产高清一区二区三区 | 久久国产三级精品| 色婷婷av一区二区三区大白胸| 精品国偷自产国产一区| 日本亚洲一区二区| 7777精品伊人久久久大香线蕉超级流畅| 成人欧美一区二区三区白人| 风间由美一区二区三区在线观看 | 中文字幕综合网| 国产原创一区二区| 精品美女在线播放| 久久成人麻豆午夜电影| 日韩欧美精品在线| 美女高潮久久久| 精品欧美黑人一区二区三区| 麻豆精品在线观看| 精品少妇一区二区| 国产伦精品一区二区三区视频青涩 | 99re这里只有精品首页| 国产精品网曝门| 福利一区福利二区| 欧美国产一区二区在线观看| 成人免费毛片app| 亚洲在线成人精品| 欧美刺激脚交jootjob| 国产a精品视频| 亚洲国产精品影院| 久久久久久久久一| 在线观看免费成人| 久久99国产乱子伦精品免费| 国产精品污www在线观看| 欧美少妇xxx| 国产一区二区视频在线播放| 亚洲日本一区二区三区| 欧美一区二区三区四区久久| 成人精品小蝌蚪| 日本欧美加勒比视频| 亚洲天堂2014| 精品国产123| 欧美日韩一区在线观看| 成人小视频免费在线观看| 午夜视频久久久久久| 国产亚洲制服色| 91麻豆精品国产91久久久久久久久| 国产伦精一区二区三区| 三级成人在线视频| 亚洲欧美偷拍卡通变态| 久久天天做天天爱综合色| 欧美日韩国产一级| 91丝袜呻吟高潮美腿白嫩在线观看| 乱中年女人伦av一区二区| 亚洲综合视频网| 日韩美女久久久| 国产亚洲欧美日韩在线一区| 日韩视频免费观看高清完整版在线观看| 成人va在线观看| 国产福利一区二区三区视频在线| 首页国产欧美久久| 午夜久久久久久久久| 亚洲日本欧美天堂| 国产精品每日更新在线播放网址| 久久综合国产精品| 日韩写真欧美这视频| 欧美二区三区的天堂| 在线免费观看日本欧美| 91亚洲男人天堂| 成人avav影音| 不卡电影一区二区三区| 岛国一区二区三区| 风间由美一区二区三区在线观看 | 亚洲国产视频一区| 尤物在线观看一区| 亚洲六月丁香色婷婷综合久久 | 久久久亚洲精品一区二区三区| 欧美一区二区在线视频| 欧美二区乱c少妇| 911精品产国品一二三产区| 欧美性受xxxx黑人xyx性爽| 一本大道久久a久久综合婷婷| 不卡视频免费播放| 99在线精品观看| 99久久精品国产导航| 波多野结衣的一区二区三区| caoporen国产精品视频| 99久久久免费精品国产一区二区| 成人av网址在线| 99国产精品国产精品毛片| 91在线播放网址| 欧美在线视频日韩| 欧美日本国产视频| 日韩精品一区国产麻豆| 久久久久久久电影| 久久精品亚洲乱码伦伦中文| 国产欧美一区二区在线观看| 国产精品久久久久一区二区三区| ...xxx性欧美| 五月天激情综合网| 久久国产精品色婷婷| 精品一区二区三区免费播放| 国产一区二区三区高清播放| 不卡的电影网站| 在线视频国产一区| 日韩一区二区三区四区五区六区| 日韩精品一区二区三区视频播放| 久久精品亚洲精品国产欧美kt∨| 中文字幕不卡一区| 一区二区三区 在线观看视频| 午夜久久久久久| 国产乱淫av一区二区三区| 99re热这里只有精品视频| 制服丝袜中文字幕一区| 国产精品天干天干在线综合| 亚洲一本大道在线| 国产一区二区精品久久91| 91国偷自产一区二区使用方法| 欧美一级久久久久久久大片| 国产精品黄色在线观看| 偷拍亚洲欧洲综合| 国产精品乡下勾搭老头1| 日本精品免费观看高清观看| 欧美成人精品1314www| 一区二区三区在线观看网站| 另类小说一区二区三区| 91久久精品网| 久久青草国产手机看片福利盒子 | 国产精品少妇自拍| 午夜精品久久一牛影视| 成人黄色av电影| 91精品国产一区二区三区香蕉| 国产精品福利影院| 狠狠久久亚洲欧美| 337p亚洲精品色噜噜狠狠| 中文字幕一区二区三区四区不卡 | 视频一区二区不卡| 大胆欧美人体老妇| 欧美mv日韩mv国产网站| 一区二区久久久| av在线播放不卡| www国产精品av| 丝袜美腿高跟呻吟高潮一区| 99久久久国产精品免费蜜臀| 精品国产污污免费网站入口| 亚洲高清免费视频| 99精品视频在线观看| 国产亚洲午夜高清国产拍精品| 亚洲成人资源网| 一本大道久久a久久精品综合| 国产偷国产偷精品高清尤物| 日韩av午夜在线观看| 精品视频资源站| 一区二区三区不卡在线观看| av男人天堂一区| 国产精品天美传媒| 成人教育av在线| 中文乱码免费一区二区| 国产精品99久久不卡二区| 久久综合九色综合欧美98| 国产中文字幕一区| 欧美成人vr18sexvr| 精品一区二区三区免费观看| 欧美videofree性高清杂交| 日本网站在线观看一区二区三区| 欧美女孩性生活视频| 日韩专区欧美专区| 欧美一区二区黄色| 精品一区二区三区影院在线午夜| 日韩欧美色综合|