X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fbitio.c;h=029c4b9f9e20ace283883a021519e6ef1b7a91dc;hb=4bf1addc537d33b0b4f22c3e5546634b5adee4e3;hp=417e7b55ee11c7b0b202109e0235359b99580d8f;hpb=7cecd180801fb48c42540fcdd77c3e75b528552c;p=swftools.git diff --git a/src/bitio.c b/src/bitio.c index 417e7b5..029c4b9 100644 --- a/src/bitio.c +++ b/src/bitio.c @@ -9,125 +9,117 @@ #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; + *(u16*)target = GET16(&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; + *(u32*)target = GET32(&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<