X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fbitio.c;h=eb7958c7f04829f07d8e0757c95433d595fe66da;hb=9306fefe043d1517b6a38c6b0d6d08b045a1440e;hp=871fb804db86bdef8c21db1453e6e0bc25ebbf1b;hpb=fc554a43712b76d16b41ec77dd311b4a78b1ef6b;p=swftools.git diff --git a/src/bitio.c b/src/bitio.c index 871fb80..eb7958c 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; + memcpy(target,&r->data[r->datapos],2); + 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; + memcpy(target,&r->data[r->datapos],4); + 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<data = data; @@ -150,6 +150,12 @@ void writer_writeu16(struct writer_t*w, u16 value) writer_write(w, &value, 2); } +void writer_writeu32(struct writer_t*w, u32 value) +{ + writer_resetbits(w); + writer_write(w, &value, 4); +} + void* writer_getpos(struct writer_t*w) { return &w->data[w->pos];