+
+ free(t->data); t->data = 0;
+ t->memsize = t->len = t->pos = 0;
+
+ swf_SetU16(t, spriteid);
+ swf_SetU16(t, spriteframes);
+}
+
+void swf_FoldSprite(TAG * t)
+{
+ TAG*sprtag=t,*tmp;
+ U16 id,frames,tmpid;
+ int level;
+ if(t->id!=ST_DEFINESPRITE)
+ return;
+ if(!t->len) {
+ fprintf(stderr, "Error: Sprite has no ID!");
+ return;
+ }
+ if(t->len>4) {
+ /* sprite is already folded */
+ return;
+ }
+
+ t->pos = 0;
+ id = swf_GetU16(t);
+ free(t->data);
+ t->len = t->pos = t->memsize = 0;
+ t->data = 0;
+
+ frames = 0;
+
+ t = swf_NextTag(sprtag);
+ level = 1;
+
+ do
+ {
+ if(t->id==ST_SHOWFRAME) frames++;
+ if(t->id == ST_DEFINESPRITE && t->len<=4)
+ level++;
+ if(t->id == ST_END)
+ level--;
+ t = swf_NextTag(t);
+ } while(t && level);
+ if(level)
+ fprintf(stderr, "rfxswf error: sprite doesn't end(1)\n");
+
+ swf_SetU16(sprtag, id);
+ swf_SetU16(sprtag, frames);
+
+ t = swf_NextTag(sprtag);
+ level = 1;
+
+ do
+ {
+ if(t->len<0x3f) {
+ swf_SetU16(sprtag,t->len|(t->id<<6));
+ } else {
+ swf_SetU16(sprtag,0x3f|(t->id<<6));
+ swf_SetU32(sprtag,t->len);
+ }
+ if(t->len)
+ swf_SetBlock(sprtag,t->data, t->len);
+ tmp = t;
+ if(t->id == ST_DEFINESPRITE && t->len<=4)
+ level++;
+ if(t->id == ST_END)
+ level--;
+ t = swf_NextTag(t);
+ swf_DeleteTag(tmp);
+ }
+ while (t && level);
+ if(level)
+ fprintf(stderr, "rfxswf error: sprite doesn't end(2)\n");
+
+// sprtag->next = t;
+// t->prev = sprtag;
+}
+
+int swf_IsFolded(TAG * t)
+{
+ return (t->id == ST_DEFINESPRITE && t->len>4);
+}
+
+void swf_FoldAll(SWF*swf)
+{
+ TAG*tag = swf->firstTag;
+ while(tag) {
+ if(tag->id == ST_DEFINESPRITE)
+ swf_FoldSprite(tag);
+ tag = swf_NextTag(tag);
+ }