git.asbjorn.biz
/
swftools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix the "cloud" bug
[swftools.git]
/
src
/
flash.c
diff --git
a/src/flash.c
b/src/flash.c
index
2607f21
..
7c73397
100644
(file)
--- a/
src/flash.c
+++ b/
src/flash.c
@@
-89,6
+89,7
@@
struct GRADIENT readGRADIENT(struct reader_t*r, int shape)
else
gradient.rgba[t] = readRGBA(r);
}
else
gradient.rgba[t] = readRGBA(r);
}
+ return gradient;
}
struct RECT readRECT(struct reader_t*reader)
}
struct RECT readRECT(struct reader_t*reader)
@@
-325,6
+326,7
@@
void placeobject_write (struct PlaceObject*obj, struct writer_t*w)
u16 taghead = 0x3f | TAGID_PLACEOBJECT<<6;
u8*pos;
u8*lenpos;
u16 taghead = 0x3f | TAGID_PLACEOBJECT<<6;
u8*pos;
u8*lenpos;
+ U32 len;
writer_resetbits(w);
writer_write(w, &taghead, 2);
lenpos = writer_getpos(w);
writer_resetbits(w);
writer_write(w, &taghead, 2);
lenpos = writer_getpos(w);
@@
-343,8
+345,12
@@
void placeobject_write (struct PlaceObject*obj, struct writer_t*w)
CXFORM_write(&obj->cxform, w);
}
writer_resetbits(w);
CXFORM_write(&obj->cxform, w);
}
writer_resetbits(w);
-
- *(u32*)lenpos = (u8*)writer_getpos(w) - pos;
+
+ len = (u8*)writer_getpos(w) - pos;
+ lenpos[0] = len;
+ lenpos[1] = len>>8;
+ lenpos[2] = len>>16;
+ lenpos[3] = len>>24;
}
void placeobject2_init (struct PlaceObject2*obj,struct swf_tag*tag)
}
void placeobject2_init (struct PlaceObject2*obj,struct swf_tag*tag)
@@
-389,9
+395,10
@@
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;
{
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;
u8*pos;
u8*lenpos;
+ U32 len;
writer_resetbits(w);
writer_write(w, &taghead, 2);
lenpos = writer_getpos(w);
writer_resetbits(w);
writer_write(w, &taghead, 2);
lenpos = writer_getpos(w);
@@
-416,7
+423,12
@@
void placeobject2_write (struct PlaceObject2*obj, struct writer_t*w)
if(obj->hasclipactions)
writer_writeu16(w, obj->clipactions);
writer_resetbits(w);
if(obj->hasclipactions)
writer_writeu16(w, obj->clipactions);
writer_resetbits(w);
- *(u32*)lenpos = (u8*)writer_getpos(w) - pos;
+
+ len = (u8*)writer_getpos(w) - pos;
+ lenpos[0] = len;
+ lenpos[1] = len>>8;
+ lenpos[2] = len>>16;
+ lenpos[3] = len>>24;
}
void read_swf(struct swffile*swf, uchar*data, int length)
}
void read_swf(struct swffile*swf, uchar*data, int length)
@@
-514,24
+526,24
@@
int getidfromtag(struct swf_tag* tag)
}
break;
case TAGID_REMOVEOBJECT:
}
break;
case TAGID_REMOVEOBJECT:
- return *(u16*)tag->data;
+ return tag->data[0]+tag->data[1]*256;
break;
case TAGID_REMOVEOBJECT2:
return -1;
break;
}
break;
case TAGID_REMOVEOBJECT2:
return -1;
break;
}
- return *(u16*)tag->data;
+ return tag->data[0]+tag->data[1]*256;
}
void setidintag(struct swf_tag* tag, int id)
{
}
void setidintag(struct swf_tag* tag, int id)
{
- *(u16*)tag->data = id;
+ tag->data[0] = id;
+ tag->data[1] = id>>8;
}
char is_sprite_tag (int id)
{
}
char is_sprite_tag (int id)
{
-
int t=0;
while(spritetagids[t]>=0)
{
int t=0;
while(spritetagids[t]>=0)
{
@@
-544,7
+556,6
@@
char is_sprite_tag (int id)
char is_defining_tag (int id)
{
char is_defining_tag (int id)
{
-
int t=0;
while(definingtagids[t]>=0)
{
int t=0;
while(definingtagids[t]>=0)
{