X-Git-Url: http://git.asbjorn.biz/?p=swftools.git;a=blobdiff_plain;f=lib%2Frfxswf.c;h=05f6ad9e65dcbb605260a18bb48cdae63643ea7c;hp=061010b0d83a0a6dad55d3e8776aef2fea78cbc8;hb=57daf2c90dc409a2aa7030ce6ce996707e99967b;hpb=1f9f467ef90391c81c31da7f6b5ed2131443a1fe diff --git a/lib/rfxswf.c b/lib/rfxswf.c index 061010b..05f6ad9 100644 --- a/lib/rfxswf.c +++ b/lib/rfxswf.c @@ -24,13 +24,8 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#include "mem.h" #include "rfxswf.h" - -#ifdef HAVE_JPEGLIB -#define HAVE_BOOLEAN -#include -#endif // HAVE_JPEGLIB - #ifdef HAVE_ZLIB #include #endif // HAVE_ZLIB @@ -45,6 +40,10 @@ #include #endif +#ifdef HAVE_IO_H +#include +#endif + #include "./bitio.h" #include "./MD5.h" @@ -55,7 +54,6 @@ #define MEMSIZE(l) (((l/MALLOC_SIZE)+1)*MALLOC_SIZE) - // inline wrapper functions TAG * swf_NextTag(TAG * t) { return t->next; } @@ -65,11 +63,6 @@ U32 swf_GetTagLen(TAG * t) { return t->len; } U8* swf_GetTagLenPtr(TAG * t) { return &(t->data[t->len]); } U32 swf_GetTagPos(TAG * t) { return t->pos; } -// for future purpose: avoid high level lib functions to change tagpos/bitpos - -#define swf_SaveTagPos(tag) -#define swf_RestoreTagPos(tag) - void swf_SetTagPos(TAG * t,U32 pos) { swf_ResetReadBits(t); if (pos<=t->len) t->pos = pos; @@ -82,9 +75,18 @@ void swf_SetTagPos(TAG * t,U32 pos) char* swf_GetString(TAG*t) { - char* str = ((char*)(&(t)->data[(t)->pos])); - while(swf_GetU8(t)); - return str; + int pos = t->pos; + while(t->pos < t->len && swf_GetU8(t)); + /* make sure we always have a trailing zero byte */ + if(t->pos == t->len) { + if(t->len == t->memsize) { + swf_ResetWriteBits(t); + swf_SetU8(t, 0); + t->len = t->pos; + } + t->data[t->len] = 0; + } + return (char*)&(t->data[pos]); } U8 swf_GetU8(TAG * t) @@ -143,15 +145,7 @@ int swf_SetBlock(TAG * t,U8 * b,int l) swf_ResetWriteBits(t); if (newlen>t->memsize) { U32 newmem = MEMSIZE(newlen); - U8 * newdata = (U8*)((t->data)?realloc(t->data,newmem):malloc(newmem)); - if (!newdata) - { - #ifdef DEBUG_RFXSWF - fprintf(stderr,"Fatal Error: malloc()/realloc() failed (1). (%d bytes)\n", newmem); - *(int*)0=0; - #endif - return 0; - } + U8 * newdata = (U8*)(rfx_realloc(t->data,newmem)); t->memsize = newmem; t->data = newdata; } @@ -232,10 +226,10 @@ S32 swf_GetSBits(TAG * t,int nbits) return (S32)res; } -U32 reader_GetBits(struct reader_t*reader, int nbits) +U32 reader_GetBits(reader_t*reader, int nbits) { return reader_readbits(reader, nbits); } -S32 reader_GetSBits(struct reader_t*reader, int nbits) +S32 reader_GetSBits(reader_t*reader, int nbits) { U32 res = reader_readbits(reader, nbits); if (res&(1<<(nbits-1))) res|=(0xffffffff<num = swf_GetU8(tag); - for(t=0;tnum;t++) + U8 num = swf_GetU8(tag) & 15; + if(gradient) { + gradient->num = num; + gradient->rgba = (RGBA*)rfx_calloc(sizeof(RGBA)*gradient->num); + gradient->ratios = (U8*)rfx_calloc(sizeof(gradient->ratios[0])*gradient->num); + } + for(t=0;t=8) //FIXME - s=7; - gradient->ratios[t] = swf_GetU8(tag); + U8 ratio = swf_GetU8(tag); + RGBA color; if(!alpha) - swf_GetRGB(tag, &gradient->rgba[t]); + swf_GetRGB(tag, &color); else - swf_GetRGBA(tag, &gradient->rgba[t]); + swf_GetRGBA(tag, &color); + if(gradient) { + gradient->ratios[t] = ratio; + gradient->rgba[t] = color; + } } } @@ -342,6 +365,15 @@ void swf_SetGradient(TAG * tag, GRADIENT * gradient, char alpha) } } +void swf_FreeGradient(GRADIENT* gradient) +{ + if(gradient->ratios) + rfx_free(gradient->ratios); + if(gradient->rgba) + rfx_free(gradient->rgba); + memset(gradient, 0, sizeof(GRADIENT)); +} + int swf_CountUBits(U32 v,int nbits) { int n = 32; U32 m = 0x80000000; @@ -389,7 +421,7 @@ int swf_GetRect(TAG * t,SRECT * r) return 0; } -int reader_GetRect(struct reader_t*reader,SRECT * r) +int reader_GetRect(reader_t*reader,SRECT * r) { int nbits; SRECT dummy; if (!r) r = &dummy; @@ -422,6 +454,20 @@ int swf_SetRect(TAG * t,SRECT * r) return 0; } +SRECT swf_ClipRect(SRECT border, SRECT r) +{ + if(r.xmax > border.xmax) r.xmax = border.xmax; + if(r.ymax > border.ymax) r.ymax = border.ymax; + if(r.xmax < border.xmin) r.xmax = border.xmin; + if(r.ymax < border.ymin) r.ymax = border.ymin; + + if(r.xmin > border.xmax) r.xmin = border.xmax; + if(r.ymin > border.ymax) r.ymin = border.ymax; + if(r.xmin < border.xmin) r.xmin = border.xmin; + if(r.ymin < border.ymin) r.ymin = border.ymin; + return r; +} + void swf_ExpandRect(SRECT*src, SPOINT add) { if((src->xmin | src->ymin | src->xmax | src->ymax)==0) { @@ -469,11 +515,11 @@ void swf_ExpandRect3(SRECT*src, SPOINT center, int radius) if(center.x - radius < src->xmin) src->xmin = center.x - radius; if(center.x + radius > src->xmax) - src->xmax = center.x - radius; + src->xmax = center.x + radius; if(center.y - radius < src->ymin) src->ymin = center.y - radius; if(center.y + radius > src->ymax) - src->ymax = center.y - radius; + src->ymax = center.y + radius; } SPOINT swf_TurnPoint(SPOINT p, MATRIX* m) { @@ -486,6 +532,8 @@ SRECT swf_TurnRect(SRECT r, MATRIX* m) { SRECT g; SPOINT p1,p2,p3,p4,pp1,pp2,pp3,pp4; + if(!m) + return r; p1.x = r.xmin;p1.y = r.ymin; p2.x = r.xmax;p2.y = r.ymin; p3.x = r.xmin;p3.y = r.ymax; @@ -558,6 +606,7 @@ int swf_SetMatrix(TAG * t,MATRIX * m) nbits = swf_CountBits(m->sx,0); nbits = swf_CountBits(m->sy,nbits); if(nbits>=32) { + /* TODO: happens on AMD64 systems for normal values? */ fprintf(stderr,"rfxswf: Error: matrix values too large\n"); nbits = 31; } @@ -593,7 +642,7 @@ int swf_SetMatrix(TAG * t,MATRIX * m) return 0; } -int swf_GetCXForm(TAG * t,CXFORM * cx,U8 alpha) //FIXME: alpha should be type bool +int swf_GetCXForm(TAG * t,CXFORM * cx,U8 alpha) { CXFORM cxf; int hasadd; int hasmul; @@ -707,18 +756,19 @@ void swf_SetPassword(TAG * t, const char * password) fprintf(stderr, "rfxswf: Warning- no usable random generator found\n"); fprintf(stderr, "Your password will be vulnerable to dictionary attacks\n"); #endif + salt[2] = 0; md5string = crypt_md5(password, salt); swf_SetU16(t,0); - swf_SetString(t, md5string); + swf_SetString(t, (U8*)md5string); } int swf_VerifyPassword(TAG * t, const char * password) { char*md5string1, *md5string2; char*x; - char*md5, *salt; + char*salt; int n; if(t->len >= 5 && t->pos==0 && @@ -741,12 +791,12 @@ int swf_VerifyPassword(TAG * t, const char * password) return 0; } n = x-(md5string1+3); - salt = (char*)malloc(n+1); + salt = (char*)rfx_alloc(n+1); memcpy(salt, md5string1+3, n); salt[n] = 0; md5string2 = crypt_md5(password, salt); - free(salt); + rfx_free(salt); if(strcmp(md5string1, md5string2) != 0) return 0; return 1; @@ -757,18 +807,15 @@ int swf_VerifyPassword(TAG * t, const char * password) TAG * swf_InsertTag(TAG * after,U16 id) { TAG * t; - t = (TAG *)malloc(sizeof(TAG)); - if (t) - { memset(t,0x00,sizeof(TAG)); - t->id = id; - - if (after) - { - t->prev = after; - t->next = after->next; - after->next = t; - if (t->next) t->next->prev = t; - } + t = (TAG *)rfx_calloc(sizeof(TAG)); + t->id = id; + + if (after) + { + t->prev = after; + t->next = after->next; + after->next = t; + if (t->next) t->next->prev = t; } return t; } @@ -776,18 +823,15 @@ TAG * swf_InsertTag(TAG * after,U16 id) TAG * swf_InsertTagBefore(SWF* swf, TAG * before,U16 id) { TAG * t; - t = (TAG *)malloc(sizeof(TAG)); - if (t) - { memset(t,0x00,sizeof(TAG)); - t->id = id; - - if (before) - { - t->next = before; - t->prev = before->prev; - before->prev = t; - if (t->prev) t->prev->next = t; - } + t = (TAG *)rfx_calloc(sizeof(TAG)); + t->id = id; + + if (before) + { + t->next = before; + t->prev = before->prev; + before->prev = t; + if (t->prev) t->prev->next = t; } if(swf && swf->firstTag == before) { swf->firstTag = t; @@ -797,7 +841,7 @@ TAG * swf_InsertTagBefore(SWF* swf, TAG * before,U16 id) void swf_ClearTag(TAG * t) { - if (t->data) free(t->data); + if (t->data) rfx_free(t->data); t->data = 0; t->pos = 0; t->len = 0; @@ -812,18 +856,25 @@ void swf_ResetTag(TAG*tag, U16 id) tag->id = id; } +TAG* swf_CopyTag(TAG*tag, TAG*to_copy) +{ + tag = swf_InsertTag(tag, to_copy->id); + swf_SetBlock(tag, to_copy->data, to_copy->len); + return tag; +} + int swf_DeleteTag(TAG * t) { if (!t) return -1; if (t->prev) t->prev->next = t->next; if (t->next) t->next->prev = t->prev; - if (t->data) free(t->data); - free(t); + if (t->data) rfx_free(t->data); + rfx_free(t); return 0; } -TAG * swf_ReadTag(struct reader_t*reader, TAG * prev) +TAG * swf_ReadTag(reader_t*reader, TAG * prev) { TAG * t; U16 raw; U32 len; @@ -844,32 +895,20 @@ TAG * swf_ReadTag(struct reader_t*reader, TAG * prev) if (id==ST_DEFINESPRITE) len = 2*sizeof(U16); // Sprite handling fix: Flatten sprite tree - t = (TAG *)malloc(sizeof(TAG)); - - if (!t) - { - #ifdef DEBUG_RFXSWF - fprintf(stderr,"Fatal Error: malloc()/realloc() failed (2). (%d bytes)\n", sizeof(TAG)); - #endif - return NULL; - } - - memset(t,0x00,sizeof(TAG)); + t = (TAG *)rfx_calloc(sizeof(TAG)); t->len = len; t->id = id; if (t->len) - { t->data = (U8*)malloc(t->len); - if (!t->data) - { - #ifdef DEBUG_RFXSWF - fprintf(stderr,"Fatal Error: malloc()/realloc() failed (3). (%d bytes)\n", t->len); - #endif + { t->data = (U8*)rfx_alloc(t->len); + t->memsize = t->len; + if (reader->read(reader, t->data, t->len) != t->len) { + fprintf(stderr, "rfxswf: Warning: Short read (tagid %d). File truncated?\n", t->id); + free(t->data);t->data=0; + free(t); return NULL; } - t->memsize = t->len; - if (reader->read(reader, t->data, t->len) != t->len) return NULL; } if (prev) @@ -883,7 +922,7 @@ TAG * swf_ReadTag(struct reader_t*reader, TAG * prev) int swf_DefineSprite_GetRealSize(TAG * t); -int swf_WriteTag2(struct writer_t*writer, TAG * t) +int swf_WriteTag2(writer_t*writer, TAG * t) // returns tag length in bytes (incl. Header), -1 = Error // writer = 0 -> no output { U16 raw[3]; @@ -894,7 +933,9 @@ int swf_WriteTag2(struct writer_t*writer, TAG * t) len = (t->id==ST_DEFINESPRITE)?swf_DefineSprite_GetRealSize(t):t->len; - short_tag = len<0x3f&&(t->id!=ST_DEFINEBITSLOSSLESS&&t->id!=ST_DEFINEBITSLOSSLESS2); + short_tag = len<0x3f&& + (t->id!=ST_DEFINEBITSLOSSLESS&&t->id!=ST_DEFINEBITSLOSSLESS2&&t->id!=ST_SOUNDSTREAMBLOCK&& + t->id!=ST_DEFINEBITSJPEG&&t->id!=ST_DEFINEBITSJPEG2&&t->id!=ST_DEFINEBITSJPEG3); if (writer) { if (short_tag) @@ -947,7 +988,7 @@ int swf_WriteTag2(struct writer_t*writer, TAG * t) int swf_WriteTag(int handle, TAG * t) { - struct writer_t writer; + writer_t writer; int len = 0; if(handle<0) return swf_WriteTag2(0, t); @@ -1008,7 +1049,7 @@ void swf_UnFoldSprite(TAG * t) it->len = len; it->id = id; if (it->len) - { it->data = (U8*)malloc(it->len); + { it->data = (U8*)rfx_alloc(it->len); it->memsize = it->len; swf_GetBlock(t, it->data, it->len); } @@ -1017,7 +1058,7 @@ void swf_UnFoldSprite(TAG * t) break; } - free(t->data); t->data = 0; + rfx_free(t->data); t->data = 0; t->memsize = t->len = t->pos = 0; swf_SetU16(t, spriteid); @@ -1027,7 +1068,7 @@ void swf_UnFoldSprite(TAG * t) void swf_FoldSprite(TAG * t) { TAG*sprtag=t,*tmp; - U16 id,frames,tmpid; + U16 id,frames; int level; if(t->id!=ST_DEFINESPRITE) return; @@ -1042,7 +1083,7 @@ void swf_FoldSprite(TAG * t) t->pos = 0; id = swf_GetU16(t); - free(t->data); + rfx_free(t->data); t->len = t->pos = t->memsize = 0; t->data = 0; @@ -1071,7 +1112,10 @@ void swf_FoldSprite(TAG * t) do { - if(t->len<0x3f&&t->id!=ST_DEFINEBITSLOSSLESS&&t->id!=ST_DEFINEBITSLOSSLESS2) { + if(t->len<0x3f&& + (t->id!=ST_DEFINEBITSLOSSLESS&&t->id!=ST_DEFINEBITSLOSSLESS2&&t->id!=ST_SOUNDSTREAMBLOCK&& + t->id!=ST_DEFINEBITSJPEG&&t->id!=ST_DEFINEBITSJPEG2&&t->id!=ST_DEFINEBITSJPEG3) + ) { swf_SetU16(sprtag,t->len|(t->id<<6)); } else { swf_SetU16(sprtag,0x3f|(t->id<<6)); @@ -1165,7 +1209,10 @@ void swf_OptimizeTagOrder(SWF*swf) tag->next = level0; tag->prev = level0->prev; level0->prev = tag; - tag->prev->next = tag; + if(tag->prev) + tag->prev->next = tag; + else + swf->firstTag = tag; changes = 1; } } @@ -1180,7 +1227,7 @@ void swf_OptimizeTagOrder(SWF*swf) // Movie Functions -int swf_ReadSWF2(struct reader_t*reader, SWF * swf) // Reads SWF to memory (malloc'ed), returns length or <0 if fails +int swf_ReadSWF2(reader_t*reader, SWF * swf) // Reads SWF to memory (malloc'ed), returns length or <0 if fails { if (!swf) return -1; memset(swf,0x00,sizeof(SWF)); @@ -1189,7 +1236,7 @@ int swf_ReadSWF2(struct reader_t*reader, SWF * swf) // Reads SWF to memory (ma int len; TAG * t; TAG t1; - struct reader_t zreader; + reader_t zreader; if ((len = reader->read(reader ,b,8))<8) return -1; @@ -1204,6 +1251,7 @@ int swf_ReadSWF2(struct reader_t*reader, SWF * swf) // Reads SWF to memory (ma reader_init_zlibinflate(&zreader, reader); reader = &zreader; } + swf->compressed = 0; // derive from version number from now on reader_GetRect(reader, &swf->movieSize); reader->read(reader, &swf->frameRate, 2); @@ -1223,16 +1271,16 @@ int swf_ReadSWF2(struct reader_t*reader, SWF * swf) // Reads SWF to memory (ma int swf_ReadSWF(int handle, SWF * swf) { - struct reader_t reader; + reader_t reader; reader_init_filereader(&reader, handle); return swf_ReadSWF2(&reader, swf); } -int swf_WriteSWF2(struct writer_t*writer, SWF * swf) // Writes SWF to file, returns length or <0 if fails +int swf_WriteSWF2(writer_t*writer, SWF * swf) // Writes SWF to file, returns length or <0 if fails { U32 len; TAG * t; int frameCount=0; - struct writer_t zwriter; + writer_t zwriter; int fileSize = 0; int inSprite = 0; int writer_lastpos = 0; @@ -1247,12 +1295,38 @@ int swf_WriteSWF2(struct writer_t*writer, SWF * swf) // Writes SWF to file, #ifdef INSERT_RFX_TAG - if (swf->firstTag && swf_NextTag(swf->firstTag)) - if (swf_GetTagID(swf_NextTag(swf->firstTag))!=ST_REFLEX) - swf_SetBlock(swf_InsertTagBefore(swf, swf->firstTag,ST_REFLEX),"rfx",3); + if ((swf->firstTag && swf->firstTag->id != ST_REFLEX) && + (!swf->firstTag->next || (swf->firstTag->next->id != ST_REFLEX && + (!swf->firstTag->next->next || (swf->firstTag->next->next->id!=ST_REFLEX))))) + { + swf_SetBlock(swf_InsertTagBefore(swf, swf->firstTag,ST_REFLEX),(U8*)"rfx",3); + } #endif // INSERT_RFX_TAG + if(swf->fileVersion >= 9) { + if ((!swf->firstTag || swf->firstTag->id != ST_SCENEDESCRIPTION) && + (!swf->firstTag || + !swf->firstTag->next || swf->firstTag->next->id != ST_SCENEDESCRIPTION) && + (!swf->firstTag || + !swf->firstTag->next || + !swf->firstTag->next->next || swf->firstTag->next->next->id != ST_SCENEDESCRIPTION)) + { + TAG*scene = swf_InsertTagBefore(swf, swf->firstTag,ST_SCENEDESCRIPTION); + swf_SetU16(scene, 1); + swf_SetString(scene, (U8*)"Scene 1"); + swf_SetU8(scene, 0); + } + } + + if(swf->fileVersion >= 9) { + if (swf->firstTag && swf->firstTag->id != ST_FILEATTRIBUTES) + { + U32 flags = 0x8; // | 128 = usenetwork, | 16 = Actionscript3 | 8 = hasmetadata + swf_SetU32(swf_InsertTagBefore(swf, swf->firstTag,ST_FILEATTRIBUTES),flags); + } + } + // Count Frames + File Size len = 0; @@ -1263,6 +1337,10 @@ int swf_WriteSWF2(struct writer_t*writer, SWF * swf) // Writes SWF to file, len += swf_WriteTag(-1,t); if(t->id == ST_DEFINESPRITE && !swf_IsFolded(t)) inSprite++; else if(t->id == ST_END && inSprite) inSprite--; + else if(t->id == ST_END && !inSprite) { + if(t->prev && t->prev->id!=ST_SHOWFRAME) + frameCount++; + } else if(t->id == ST_SHOWFRAME && !inSprite) frameCount++; t = swf_NextTag(t); } @@ -1303,11 +1381,10 @@ int swf_WriteSWF2(struct writer_t*writer, SWF * swf) // Writes SWF to file, It also means that we don't initialize our own zlib writer, but assume the caller provided one. */ - if(swf->compressed) { + if(swf->compressed==1 || (swf->compressed==0 && swf->fileVersion>=6)) { char*id = "CWS"; writer->write(writer, id, 3); - } - else { + } else { char*id = "FWS"; writer->write(writer, id, 3); } @@ -1316,7 +1393,7 @@ int swf_WriteSWF2(struct writer_t*writer, SWF * swf) // Writes SWF to file, PUT32(b4, swf->fileSize); writer->write(writer, b4, 4); - if(swf->compressed) { + if(swf->compressed==1 || (swf->compressed==0 && swf->fileVersion>=6)) { writer_init_zlibdeflate(&zwriter, writer); writer = &zwriter; } @@ -1342,7 +1419,7 @@ int swf_WriteSWF2(struct writer_t*writer, SWF * swf) // Writes SWF to file, { if (swf_WriteTag2(writer, t)<0) return -1; t = swf_NextTag(t); } - if(swf->compressed) { + if(swf->compressed==1 || (swf->compressed==0 && swf->fileVersion>=6) || swf->compressed==8) { if(swf->compressed != 8) { zwriter.finish(&zwriter); return writer->pos - writer_lastpos; @@ -1356,13 +1433,13 @@ int swf_WriteSWF2(struct writer_t*writer, SWF * swf) // Writes SWF to file, int swf_WriteSWF(int handle, SWF * swf) // Writes SWF to file, returns length or <0 if fails { - struct writer_t writer; + writer_t writer; int len = 0; - swf->compressed = 0; if(handle<0) { writer_init_nullwriter(&writer); len = swf_WriteSWF2(&writer, swf); + return len; } writer_init_filewriter(&writer, handle); len = swf_WriteSWF2(&writer, swf); @@ -1370,23 +1447,7 @@ int swf_WriteSWF(int handle, SWF * swf) // Writes SWF to file, returns leng return len; } -int swf_WriteSWC(int handle, SWF * swf) // Writes SWF to file, returns length or <0 if fails -{ - struct writer_t writer; - int len = 0; - swf->compressed = 1; - - if(handle<0) { - writer_init_nullwriter(&writer); - len = swf_WriteSWF2(&writer, swf); - } - writer_init_filewriter(&writer, handle); - len = swf_WriteSWF2(&writer, swf); - writer.finish(&writer); - return len; -} - -int swf_WriteHeader2(struct writer_t*writer,SWF * swf) +int swf_WriteHeader2(writer_t*writer,SWF * swf) { SWF myswf; memcpy(&myswf,swf,sizeof(SWF)); @@ -1420,13 +1481,30 @@ int swf_WriteCGI(SWF * swf) return swf_WriteSWF(fileno(stdout),swf); } +SWF* swf_CopySWF(SWF*swf) +{ + SWF*nswf = (SWF*)rfx_alloc(sizeof(SWF)); + TAG*tag, *ntag; + memcpy(nswf, swf, sizeof(SWF)); + nswf->firstTag = 0; + tag = swf->firstTag; + ntag = 0; + while(tag) { + ntag = swf_CopyTag(ntag, tag); + if(!nswf->firstTag) + nswf->firstTag = ntag; + tag = tag->next; + } + return nswf; +} + void swf_FreeTags(SWF * swf) // Frees all malloc'ed memory for tags { TAG * t = swf->firstTag; while (t) { TAG * tnew = t->next; - if (t->data) free(t->data); - free(t); + if (t->data) rfx_free(t->data); + rfx_free(t); t = tnew; } swf->firstTag = 0; @@ -1434,15 +1512,18 @@ void swf_FreeTags(SWF * swf) // Frees all malloc'ed memory for t // include advanced functions -#include "modules/swfdump.c" -#include "modules/swfshape.c" -#include "modules/swftext.c" -#include "modules/swffont.c" -#include "modules/swfobject.c" -#include "modules/swfbutton.c" -#include "modules/swftools.c" -#include "modules/swfcgi.c" -#include "modules/swfbits.c" -#include "modules/swfaction.c" -#include "modules/swfsound.c" -#include "modules/swfdraw.c" +//#include "modules/swfdump.c" +//#include "modules/swfshape.c" +//#include "modules/swftext.c" +//#include "modules/swffont.c" +//#include "modules/swfobject.c" +//#include "modules/swfbutton.c" +//#include "modules/swftools.c" +//#include "modules/swfcgi.c" +//#include "modules/swfbits.c" +//#include "modules/swfaction.c" +//#include "modules/swfabc.c" +//#include "modules/swfsound.c" +//#include "modules/swfdraw.c" +//#include "modules/swfrender.c" +//#include "modules/swffilter.c"