+ mapstyles(&reader, num, callback);
+ fillbits = reader_getbits(&reader, 4);
+ linebits = reader_getbits(&reader, 4);
+ reader_resetbits(&reader);
+ //printf("%d %d\n", fillbits, linebits);
+ while(1) {
+ int flags;
+ /*printf("data: %02x %02x >%02x< %02x %02x\n",
+ ((u8*)getinputpos())[-2],
+ ((u8*)getinputpos())[-1],
+ ((u8*)getinputpos())[0],
+ ((u8*)getinputpos())[1],
+ ((u8*)getinputpos())[2]);*/
+ flags = reader_getbits(&reader, 1);
+ if(!flags) { //style change
+ flags = reader_getbits(&reader, 5);
+ //printf("style flags:%02x\n",flags);
+ if(!flags)
+ break;
+ if(flags&1) { //move
+ int n = reader_getbits(&reader, 5);
+ //printf("n:%d\n",n);
+ reader_getbits(&reader, n); //x
+ reader_getbits(&reader, n); //y
+ }
+ if(flags&2) { //fill0
+ reader_getbits(&reader, fillbits);
+ }
+ if(flags&4) { //fill1
+ reader_getbits(&reader, fillbits);
+ }
+ if(flags&8) { //linestyle
+ reader_getbits(&reader, linebits);
+ }
+ if(flags&16) {
+ mapstyles(&reader, num, callback);
+ fillbits = reader_getbits(&reader, 4);
+ linebits = reader_getbits(&reader, 4);
+ }
+ } else {
+ flags = reader_getbits(&reader, 1);
+ //printf("edge:%d\n", flags);
+ if(flags) { //straight edge
+ int n = reader_getbits(&reader, 4) + 2;
+ if(reader_getbits(&reader, 1)) { //line flag
+ reader_getbits(&reader, n); //delta x
+ reader_getbits(&reader, n); //delta y
+ } else {
+ int v=reader_getbits(&reader, 1);
+ reader_getbits(&reader, n); //vert/horz
+ }
+ } else { //curved edge
+ int n = reader_getbits(&reader, 4) + 2;
+ reader_getbits(&reader, n);
+ reader_getbits(&reader, n);
+ reader_getbits(&reader, n);
+ reader_getbits(&reader, n);
+ }