infutil.h
上传用户:tuheem
上传日期:2007-05-01
资源大小:21889k
文件大小:2k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. #ifndef _INFUTIL_H
  2. #define _INFUTIL_H
  3. typedef enum {
  4.       TYPE,     
  5.       LENS,     
  6.       STORED,   
  7.       TABLE,    
  8.       BTREE,    
  9.       DTREE,   
  10.       CODES,   
  11.       DRY,      
  12.       DONE,     
  13.       BAD}     
  14. inflate_block_mode;
  15. struct inflate_blocks_state {
  16.   inflate_block_mode  mode;     
  17.   union {
  18.     uInt left;          
  19.     struct {
  20.       uInt table;               
  21.       uInt index;               
  22.       uIntf *blens;           
  23.       uInt bb;                 
  24.       inflate_huft *tb;         
  25.     } trees;           
  26.     struct {
  27.       inflate_codes_statef 
  28.          *codes;
  29.     } decode;           
  30.   } sub;              
  31.   uInt last;            
  32.   uInt bitk;           
  33.   uLong bitb;           
  34.   inflate_huft *hufts; 
  35.   Bytef *window;       
  36.   Bytef *end;           
  37.   Bytef *read;         
  38.   Bytef *write;         
  39.   check_func checkfn;   
  40.   uLong check;          
  41. };
  42. #define UPDBITS {s->bitb=b;s->bitk=k;}
  43. #define UPDIN {z->avail_in=n;z->total_in+=p-z->next_in;z->next_in=p;}
  44. #define UPDOUT {s->write=q;}
  45. #define UPDATE {UPDBITS UPDIN UPDOUT}
  46. #define LEAVE {UPDATE return inflate_flush(s,z,r);}
  47. #define LOADIN {p=z->next_in;n=z->avail_in;b=s->bitb;k=s->bitk;}
  48. #define NEEDBYTE {if(n)r=Z_OK;else LEAVE}
  49. #define NEXTBYTE (n--,*p++)
  50. #define NEEDBITS(j) {while(k<(j)){NEEDBYTE;b|=((uLong)NEXTBYTE)<<k;k+=8;}}
  51. #define DUMPBITS(j) {b>>=(j);k-=(j);}
  52. #define WAVAIL (uInt)(q<s->read?s->read-q-1:s->end-q)
  53. #define LOADOUT {q=s->write;m=(uInt)WAVAIL;}
  54. #define WRAP {if(q==s->end&&s->read!=s->window){q=s->window;m=(uInt)WAVAIL;}}
  55. #define FLUSH {UPDOUT r=inflate_flush(s,z,r); LOADOUT}
  56. #define NEEDOUT {if(m==0){WRAP if(m==0){FLUSH WRAP if(m==0) LEAVE}}r=Z_OK;}
  57. #define OUTBYTE(a) {*q++=(Byte)(a);m--;}
  58. #define LOAD {LOADIN LOADOUT}
  59. extern uInt inflate_mask[17];
  60. extern int inflate_flush OF((
  61.     inflate_blocks_statef *,
  62.     z_streamp ,
  63.     int));
  64. struct internal_state      {int dummy;}; 
  65. #endif