X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fswfdump.c;h=6c944b6a5dcb814e69f0f8ff8b5843c514dff9e6;hb=918a290574399a88456bbc70d7064c04ab8f6819;hp=94bc2d14345f6a85c149d26c3cf3ea71e1efa90d;hpb=5ed16e8e59191e1626e2394532d492d0a55ff4bb;p=swftools.git diff --git a/src/swfdump.c b/src/swfdump.c index 94bc2d1..6c944b6 100644 --- a/src/swfdump.c +++ b/src/swfdump.c @@ -265,6 +265,7 @@ void dumpButtonActions(TAG*tag, char*prefix) } actions = swf_ActionGet(tag); swf_DumpActions(actions, prefix); + swf_ActionFree(actions); } void dumpButton(TAG*tag, char*prefix) @@ -785,11 +786,13 @@ char* fillstyle2str(FILLSTYLE*style) /* TODO: display information about that bitmap */ sprintf(stylebuf, "BITMAPt%s %d", (style->type&2)?"n":"", style->id_bitmap); /* TODO: show matrix */ + //swf_DumpMatrix(stdout, &style->m); break; case 0x41: case 0x43: /* TODO: display information about that bitmap */ sprintf(stylebuf, "BITMAPc%s %d", (style->type&2)?"n":"", style->id_bitmap); /* TODO: show matrix */ + //swf_DumpMatrix(stdout, &style->m); break; default: sprintf(stylebuf, "UNKNOWN[%02x]",style->type); @@ -974,32 +977,38 @@ int main (int argc,char ** argv) if (f<0) { char buffer[256]; - sprintf(buffer, "Couldn't open %s", filename); + sprintf(buffer, "Couldn't open %.200s", filename); perror(buffer); exit(1); } char header[3]; read(f, header, 3); - int compressed = (header[0]=='C'); + char compressed = (header[0]=='C'); + char isflash = header[0]=='F' && header[1] == 'W' && header[2] == 'S' || + header[0]=='C' && header[1] == 'W' && header[2] == 'S'; close(f); - f = open(filename,O_RDONLY|O_BINARY); - if FAILED(swf_ReadSWF(f,&swf)) - { - fprintf(stderr, "%s is not a valid SWF file or contains errors.\n",filename); - close(f); - exit(1); - } + int fl=strlen(filename); + if(!isflash && fl>3 && !strcmp(&filename[fl-4], ".abc")) { + swf_ReadABCfile(filename, &swf); + } else { + f = open(filename,O_RDONLY|O_BINARY); + if FAILED(swf_ReadSWF(f,&swf)) + { + fprintf(stderr, "%s is not a valid SWF file or contains errors.\n",filename); + close(f); + exit(1); + } #ifdef HAVE_STAT - fstat(f, &statbuf); - if(statbuf.st_size != swf.fileSize && !compressed) - dumperror("Real Filesize (%d) doesn't match header Filesize (%d)", - statbuf.st_size, swf.fileSize); - filesize = statbuf.st_size; + fstat(f, &statbuf); + if(statbuf.st_size != swf.fileSize && !compressed) + dumperror("Real Filesize (%d) doesn't match header Filesize (%d)", + statbuf.st_size, swf.fileSize); + filesize = statbuf.st_size; #endif - - close(f); + close(f); + } //if(action && swf.fileVersion>=9) { // fprintf(stderr, "Actionscript parsing (-a) not yet supported for SWF versions>=9\n"); @@ -1037,9 +1046,9 @@ int main (int argc,char ** argv) if(html) { char*fileversions[] = {"","1,0,0,0", "2,0,0,0","3,0,0,0","4,0,0,0", - "5,0,0,0","6,0,23,0","7,0,0,0","8,0,0,0","9,0,0,0"}; - if(swf.fileVersion>9) { - fprintf(stderr, "Fileversion>9\n"); + "5,0,0,0","6,0,23,0","7,0,0,0","8,0,0,0","9,0,0,0","10,0,0,0"}; + if(swf.fileVersion>10) { + fprintf(stderr, "Fileversion>10\n"); exit(1); } @@ -1176,10 +1185,22 @@ int main (int argc,char ** argv) else if(tag->id == ST_FREECHARACTER) { printf(" frees object %04d", swf_GetPlaceID(tag)); } + else if(tag->id == ST_FILEATTRIBUTES) { + swf_SetTagPos(tag, 0); + U32 flags = swf_GetU32(tag); + if(flags&1) printf(" usenetwork"); + if(flags&8) printf(" as3"); + if(flags&16) printf(" symbolclass"); + if(flags&~(1|8|16)) + printf(" flags=%02x", flags); + } else if(tag->id == ST_DOABC) { swf_SetTagPos(tag, 0); U32 flags = swf_GetU32(tag); char*s = swf_GetString(tag); + if(flags) { + printf(" flags=%08x", flags); + } if(*s) { printf(" \"%s\"", s); } @@ -1365,7 +1386,9 @@ int main (int argc,char ** argv) swf_DumpActions(actions, myprefix); } else if((tag->id == ST_DOABC || tag->id == ST_RAWABC) && action) { - swf_ReadABC(tag); + void*abccode = swf_ReadABC(tag); + swf_DumpABC(stdout, abccode, ""); + swf_FreeABC(abccode); } else if(tag->id == ST_DOINITACTION && action) { ActionTAG*actions;