X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fswfdump.c;h=051b8a20a12ff8c866b38e8a598f1ea0fa4a89b9;hb=458c53f3b2fe6e6ae3f106084f536701a94dccbf;hp=3940141a799c7a3ff150eefbda8e901798760bd7;hpb=ce3c08fef5972b6e05b7b1bb6fb65ff249c33505;p=swftools.git diff --git a/src/swfdump.c b/src/swfdump.c index 3940141..051b8a2 100644 --- a/src/swfdump.c +++ b/src/swfdump.c @@ -56,6 +56,7 @@ static int showtext = 0; static int showshapes = 0; static int hex = 0; static int used = 0; +static int bbox = 0; static struct options_t options[] = { {"h", "help"}, @@ -66,6 +67,7 @@ static struct options_t options[] = { {"t", "text"}, {"s", "shapes"}, {"p", "placements"}, +{"b", "bbox"}, {"X", "width"}, {"Y", "height"}, {"r", "rate"}, @@ -125,6 +127,10 @@ int args_callback_option(char*name,char*val) used = 1; return 0; } + else if(name[0]=='b') { + bbox = 1; + return 0; + } else if(name[0]=='D') { action = placements = showtext = showshapes = 1; return 0; @@ -153,6 +159,7 @@ void args_callback_usage(char *name) printf("-t , --text Show text fields (like swfstrings).\n"); printf("-s , --shapes Show shape coordinates/styles\n"); printf("-p , --placements Show placement information\n"); + printf("-b , --bbox Print tag's bounding boxes\n"); printf("-X , --width Prints out a string of the form \"-X width\".\n"); printf("-Y , --height Prints out a string of the form \"-Y height\".\n"); printf("-r , --rate Prints out a string of the form \"-r rate\".\n"); @@ -233,23 +240,6 @@ void dumpButtonActions(TAG*tag, char*prefix) swf_DumpActions(actions, prefix); } -#define ET_HASTEXT 32768 -#define ET_WORDWRAP 16384 -#define ET_MULTILINE 8192 -#define ET_PASSWORD 4096 -#define ET_READONLY 2048 -#define ET_HASTEXTCOLOR 1024 -#define ET_HASMAXLENGTH 512 -#define ET_HASFONT 256 -#define ET_X3 128 -#define ET_X2 64 -#define ET_HASLAYOUT 32 -#define ET_NOSELECT 16 -#define ET_BORDER 8 -#define ET_X1 4 -#define ET_X0 2 -#define ET_USEOUTLINES 1 - SWF swf; int fontnum = 0; SWFFONT**fonts; @@ -339,7 +329,9 @@ void handleEditText(TAG*tag) int t; id = swf_GetU16(tag); swf_GetRect(tag,0); + //swf_ResetReadBits(tag); + if (tag->readBit) { tag->pos++; tag->readBit = 0; @@ -365,15 +357,15 @@ void handleEditText(TAG*tag) swf_GetU16(tag); //indent swf_GetU16(tag); //leading } - printf(" variable \"%s\"", &tag->data[tag->pos]); + printf(" variable \"%s\" ", &tag->data[tag->pos]); + if(flags & ET_HTML) printf("(html)"); + if(flags & ET_NOSELECT) printf("(noselect)"); + if(flags & ET_PASSWORD) printf("(password)"); + if(flags & ET_READONLY) printf("(readonly)"); - if(flags & (ET_X1 | ET_X2 | ET_X3 | ET_X0)) + if(flags & (ET_X1 | ET_X3 )) { - printf(" undefined flags: %d%d%d%d", - (flags&ET_X0?1:0), - (flags&ET_X1?1:0), - (flags&ET_X2?1:0), - (flags&ET_X3?1:0)); + printf(" undefined flags: %08x (%08x)", (flags&(ET_X1|ET_X3)), flags); } while(tag->data[tag->pos++]); @@ -924,8 +916,16 @@ int main (int argc,char ** argv) printf(" object"); printf(" at depth %04d", swf_GetDepth(tag)); + + if(tag->data[0]&64) { + SWFPLACEOBJECT po; + swf_GetPlaceObject(tag, &po); + printf(" (clip to %04d)", po.clipdepth); + swf_PlaceObjectFree(&po); + } if(swf_GetName(tag)) printf(" name \"%s\"",swf_GetName(tag)); + } else if(tag->id == ST_REMOVEOBJECT) { printf(" removes id %04d from depth %04d", swf_GetPlaceID(tag), swf_GetDepth(tag)); @@ -1050,6 +1050,15 @@ int main (int argc,char ** argv) else { printf("\n"); } + + if(bbox && swf_isDefiningTag(tag) && tag->id != ST_DEFINESPRITE) { + SRECT r = swf_GetDefineBBox(tag); + printf(" %s bbox [%.2f, %.2f, %.2f, %.2f]\n", prefix, + r.xmin/20.0, + r.ymin/20.0, + r.xmax/20.0, + r.ymax/20.0); + } sprintf(myprefix, " %s", prefix);