X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fbitio.c;h=029c4b9f9e20ace283883a021519e6ef1b7a91dc;hb=4bf1addc537d33b0b4f22c3e5546634b5adee4e3;hp=871fb804db86bdef8c21db1453e6e0bc25ebbf1b;hpb=fc554a43712b76d16b41ec77dd311b4a78b1ef6b;p=swftools.git diff --git a/src/bitio.c b/src/bitio.c index 871fb80..029c4b9 100644 --- a/src/bitio.c +++ b/src/bitio.c @@ -9,120 +9,120 @@ #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<data = data; @@ -146,8 +146,16 @@ void writer_writeu8(struct writer_t*w, u8 value) void writer_writeu16(struct writer_t*w, u16 value) { + u16 value2 = SWAP16(value); + writer_resetbits(w); + writer_write(w, &value2, 2); +} + +void writer_writeu32(struct writer_t*w, u32 value) +{ + u16 value2 = SWAP32(value); writer_resetbits(w); - writer_write(w, &value, 2); + writer_write(w, &value2, 4); } void* writer_getpos(struct writer_t*w)