more big endian fixes
authorkramm <kramm>
Mon, 7 Jan 2002 15:04:36 +0000 (15:04 +0000)
committerkramm <kramm>
Mon, 7 Jan 2002 15:04:36 +0000 (15:04 +0000)
src/combine.c
src/flash.c
src/reloc.c

index 4908912..a6a695a 100644 (file)
@@ -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("<debug> %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("<verbose> sprite length is %d",*tagidpos);
+    *tagidpos = SWAP32((u8*)writer_getpos(w) - startpos); // set length of sprite (in header)
+    logf("<verbose> 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("<fatal> 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
 }
index 2607f21..627b101 100644 (file)
@@ -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)
     {
index 6217d34..c716b90 100644 (file)
@@ -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("<error> Trying to map id never encountered before: id=%d", *idptr);
        return ;
     }
-    logf("<debug> mapping %d to %d", *idptr, slaveids[*idptr]);
-    *idptr =  slaveids[*idptr];
+    logf("<debug> mapping %d to %d", SWAP16(*idptr), slaveids[*idptr]);
+    *idptr =  SWAP16(slaveids[*idptr]);
 }