From caacc3b7bc77a04e35891f73908f9c0a7c8c64fa Mon Sep 17 00:00:00 2001 From: kramm Date: Mon, 7 Jan 2002 15:04:36 +0000 Subject: [PATCH] more big endian fixes --- src/combine.c | 59 +++++++++++++++++++++++++++++---------------------------- src/flash.c | 10 ++++------ src/reloc.c | 6 +++--- 3 files changed, 37 insertions(+), 38 deletions(-) diff --git a/src/combine.c b/src/combine.c index 4908912..a6a695a 100644 --- a/src/combine.c +++ b/src/combine.c @@ -16,9 +16,6 @@ #include "./reloc.h" #include "./settings.h" -// TODO: -// * readers should be object-oriented - static char* slavename = 0; static int slaveid = -1; static int slaveframe = -1; @@ -58,14 +55,19 @@ static int get_free_id() void changedepth(struct swf_tag*tag, int add) { + /* fucking big endian byte order */ if(tag->id == TAGID_PLACEOBJECT) - (*(u16*)&tag->data[2]) += add; + (*(u16*)&tag->data[2]) = + SWAP16(SWAP16(*(u16*)&tag->data[2]) + add); if(tag->id == TAGID_PLACEOBJECT2) - (*(u16*)&tag->data[1]) += add; + (*(u16*)&tag->data[1]) = + SWAP16(SWAP16(*(u16*)&tag->data[1]) + add); if(tag->id == TAGID_REMOVEOBJECT) - (*(u16*)&tag->data[2]) += add; + (*(u16*)&tag->data[2]) = + SWAP16(SWAP16(*(u16*)&tag->data[2]) + add); if(tag->id == TAGID_REMOVEOBJECT2) - (*(u16*)&tag->data[0]) += add; + (*(u16*)&tag->data[0]) = + SWAP16(SWAP16(*(u16*)&tag->data[0]) + add); } /* applies the config move and scale parameters to @@ -191,7 +193,6 @@ void write_sprite_defines(struct writer_t*w) } } - void write_sprite(struct writer_t*w, int spriteid, int replaceddefine) { u16 tmp; @@ -200,7 +201,7 @@ void write_sprite(struct writer_t*w, int spriteid, int replaceddefine) u8*startpos; int pos = 0; // write slave(2) (header) - tmp = 0x3f + (TAGID_DEFINESPRITE << 6); + tmp = SWAP16(0x3f + (TAGID_DEFINESPRITE << 6)); writer_write(w, &tmp, 2); tagidpos = (u32*)writer_getpos(w); writer_write(w, &tmp32, 4); @@ -219,26 +220,26 @@ void write_sprite(struct writer_t*w, int spriteid, int replaceddefine) logf(" %d frames to go",tmp); if(config.clip) { - tmp = 7 + (TAGID_PLACEOBJECT2 << 6); + tmp = SWAP16(7 + (TAGID_PLACEOBJECT2 << 6)); writer_write(w, &tmp, 2); - tmp = 2+64; //flags: character + clipaction + tmp = SWAP16(2+64); //flags: character + clipaction writer_write(w, &tmp, 1); - tmp = 0; //depth + tmp = SWAP16(0); //depth writer_write(w, &tmp,2); - tmp = replaceddefine; //id + tmp = SWAP16(replaceddefine); //id writer_write(w, &tmp,2); - tmp = 65535; //clipdepth + tmp = SWAP16(65535); //clipdepth writer_write(w, &tmp,2); } if(config.overlay && !config.isframe) { - tmp = 5 + (TAGID_PLACEOBJECT2 << 6); + tmp = SWAP16(5 + (TAGID_PLACEOBJECT2 << 6)); writer_write(w, &tmp, 2); - tmp = 2; //flags: character + tmp = SWAP16(2); //flags: character writer_write(w, &tmp, 1); - tmp = 0; //depth + tmp = SWAP16(0); //depth writer_write(w, &tmp,2); - tmp = replaceddefine; //id + tmp = SWAP16(replaceddefine); //id writer_write(w, &tmp,2); } @@ -260,8 +261,8 @@ void write_sprite(struct writer_t*w, int spriteid, int replaceddefine) } while(slave.tags[pos++].id != TAGID_END); - *tagidpos = (u8*)writer_getpos(w) - startpos; // set length of sprite (in header) - logf(" sprite length is %d",*tagidpos); + *tagidpos = SWAP32((u8*)writer_getpos(w) - startpos); // set length of sprite (in header) + logf(" sprite length is %d",SWAP32(*tagidpos)); } static char tag_ok_for_slave(int id) @@ -308,7 +309,7 @@ void write_master(struct writer_t*w, int spriteid, int replaceddefine, int flags { if(config.overlay) { - *(u16*)master.tags[pos].data = replaceddefine; + *(u16*)master.tags[pos].data = SWAP16(replaceddefine); writer_write(w, master.tags[pos].fulldata, master.tags[pos].fulllength); } else { /* don't write this tag */ @@ -343,10 +344,10 @@ void write_master(struct writer_t*w, int spriteid, int replaceddefine, int flags if(config.clip) { logf(" Can't combine --clip and --frame"); } - *(u16*)&data[0] = (u16)(TAGID_PLACEOBJECT2<<6) + 5 ; - *(u8*)&data[2]= 2; //flags: id - *(u16*)&data[3]= depth; // depth - *(u16*)&data[5]= id; + *(u16*)&data[0] = SWAP16((u16)(TAGID_PLACEOBJECT2<<6) + 5); + *(u8*)&data[2]= SWAP16(2); //flags: id + *(u16*)&data[3]= SWAP16(depth); // depth + *(u16*)&data[5]= SWAP16(id); write_sprite_defines(w); write_sprite(w, id, -1); writer_write(w,data,7); @@ -508,8 +509,8 @@ uchar * catcombine(uchar*masterdata, int masterlength, char*_slavename, uchar*sl { char data[16]; int len; - *(u16*)(&data[0]) = (TAGID_REMOVEOBJECT2<<6) + 2; - *(u16*)(&data[2]) = t; + *(u16*)(&data[0]) = SWAP16((TAGID_REMOVEOBJECT2<<6) + 2); + *(u16*)(&data[2]) = SWAP16(t); writer_write(&w, data, 4); } free(depths); @@ -524,7 +525,7 @@ uchar * catcombine(uchar*masterdata, int masterlength, char*_slavename, uchar*sl tmp32 = (u8*)writer_getpos(&w) - (u8*)newdata; //length *newlength = tmp32; - *headlength = tmp32; // set the header to the correct length + *headlength = SWAP32(tmp32); // set the header to the correct length return newdata; //length } @@ -632,7 +633,7 @@ uchar * normalcombine(uchar*masterdata, int masterlength, char*_slavename, uchar tmp32 = (u8*)writer_getpos(&w) - (u8*)newdata; //length *newlength = tmp32; - *headlength = tmp32; // set the header to the correct length + *headlength = SWAP32(tmp32); // set the header to the correct length return newdata; //length } diff --git a/src/flash.c b/src/flash.c index 2607f21..627b101 100644 --- a/src/flash.c +++ b/src/flash.c @@ -344,7 +344,7 @@ void placeobject_write (struct PlaceObject*obj, struct writer_t*w) } writer_resetbits(w); - *(u32*)lenpos = (u8*)writer_getpos(w) - pos; + *(u32*)lenpos = SWAP32((u8*)writer_getpos(w) - pos); } void placeobject2_init (struct PlaceObject2*obj,struct swf_tag*tag) @@ -389,7 +389,7 @@ void placeobject2_write (struct PlaceObject2*obj, struct writer_t*w) { u8 flags = obj->reserved<<7 | obj->hasclipactions<<6 | obj->hasname<<5 | obj->hasratio<<4 | obj->hascolortransform<<3 | obj->hasmatrix<<2 | obj->hascharacter<<1 | obj->hasmove; - u16 taghead = 0x3f | TAGID_PLACEOBJECT2<<6; + u16 taghead = SWAP16(0x3f | TAGID_PLACEOBJECT2<<6); u8*pos; u8*lenpos; writer_resetbits(w); @@ -416,7 +416,7 @@ void placeobject2_write (struct PlaceObject2*obj, struct writer_t*w) if(obj->hasclipactions) writer_writeu16(w, obj->clipactions); writer_resetbits(w); - *(u32*)lenpos = (u8*)writer_getpos(w) - pos; + *(u32*)lenpos = SWAP32((u8*)writer_getpos(w) - pos); } void read_swf(struct swffile*swf, uchar*data, int length) @@ -526,12 +526,11 @@ int getidfromtag(struct swf_tag* tag) void setidintag(struct swf_tag* tag, int id) { - *(u16*)tag->data = id; + *(u16*)tag->data = SWAP16(id); } char is_sprite_tag (int id) { - int t=0; while(spritetagids[t]>=0) { @@ -544,7 +543,6 @@ char is_sprite_tag (int id) char is_defining_tag (int id) { - int t=0; while(definingtagids[t]>=0) { diff --git a/src/reloc.c b/src/reloc.c index 6217d34..c716b90 100644 --- a/src/reloc.c +++ b/src/reloc.c @@ -17,12 +17,12 @@ int slaveids[65536]; void maponeid(void*idpos) { u16*idptr = (u16*)idpos; - if(slaveids[*idptr]<0) { + if(slaveids[SWAP16(*idptr)]<0) { logf(" Trying to map id never encountered before: id=%d", *idptr); return ; } - logf(" mapping %d to %d", *idptr, slaveids[*idptr]); - *idptr = slaveids[*idptr]; + logf(" mapping %d to %d", SWAP16(*idptr), slaveids[*idptr]); + *idptr = SWAP16(slaveids[*idptr]); } -- 1.7.10.4