X-Git-Url: http://git.asbjorn.biz/?p=swftools.git;a=blobdiff_plain;f=src%2Fbitio.c;h=8a494b26b6a9ee9e41bfec4d863b0ce808564090;hp=417e7b55ee11c7b0b202109e0235359b99580d8f;hb=7ddcc6604ef3a6004c8fefb59d2ecdedc440b2bc;hpb=47df0688e74d14cb1aaff3fca3ac51356d632dd2 diff --git a/src/bitio.c b/src/bitio.c index 417e7b5..8a494b2 100644 --- a/src/bitio.c +++ b/src/bitio.c @@ -9,82 +9,74 @@ #include "bitio.h" -static uchar*data; -static int datalength; -static int datapos; -void resetbits(); - -void reader_init(uchar*newdata, int newlength) +void reader_init(struct reader_t*r, uchar*newdata, int newlength) { - data = newdata; - datalength = newlength; - datapos = 0; - resetbits(); + r->data = newdata; + r->datalength = newlength; + r->datapos = 0; + reader_resetbits(r); } -void skip(int length) +void reader_skip(struct reader_t*r, int length) { - datapos += length; + r->datapos += length; } -static u8 bitpos=8,mybyte; -static u8 bitmem=0; -void resetbits() +void reader_resetbits(struct reader_t*r) { - bitpos=8; + r->bitpos = 8; } -void input1(void*target) +void reader_input1(struct reader_t*r, void*target) { - *(uchar*)target = *(uchar*)&data[datapos]; - datapos ++; + *(uchar*)target = *(uchar*)&r->data[r->datapos]; + r->datapos ++; } -void input2(void*target) +void reader_input2(struct reader_t*r, void*target) { - *(unsigned short int*)target = *(unsigned short int*)&data[datapos]; - datapos += 2; + *(unsigned short int*)target = *(unsigned short int*)&r->data[r->datapos]; + r->datapos += 2; } -void input4(void*target) +void reader_input4(struct reader_t*r, void*target) { - *(unsigned int*)target = *(unsigned int*)&data[datapos]; - datapos += 4; + *(unsigned int*)target = *(unsigned int*)&r->data[r->datapos]; + r->datapos += 4; } -uchar*getinputpos() +uchar*reader_getinputpos(struct reader_t*r) { - return &data[datapos]; + return &r->data[r->datapos]; } -int getinputlength() +int reader_getinputlength(struct reader_t*r) { - return datalength; + return r->datalength; } -void setinputpos(uchar*pos) +void reader_setinputpos(struct reader_t*r, uchar*pos) { - datapos = pos-data; + r->datapos = pos-r->data; } - -u32 readbit() +u32 reader_readbit(struct reader_t*r) { - if(bitpos==8) + if(r->bitpos==8) { - bitpos=0; - input1(&mybyte); + r->bitpos=0; + reader_input1(r, &r->mybyte); } - return (mybyte>>(7-bitpos++))&1; + return (r->mybyte>>(7-r->bitpos++))&1; } -void readbits(u32*val,int num) +void reader_readbits(struct reader_t*r, u32*val,int num) { int t; *val=0; for(t=0;t>(num-1))&1) { x|=(0xffffffff<