added compilation of SecurityHandler.cc
[swftools.git] / src / swfdump.c
index 294a3f2..a74c453 100644 (file)
@@ -58,6 +58,7 @@ static int showshapes = 0;
 static int hex = 0;
 static int used = 0;
 static int bbox = 0;
+static int cumulative = 0;
 
 static struct options_t options[] = {
 {"h", "help"},
@@ -105,6 +106,10 @@ int args_callback_option(char*name,char*val)
         html = 1;
         return 0;
     }
+    else if(name[0]=='c') {
+        cumulative = 1;
+        return 0;
+    }
     else if(name[0]=='E') {
         html = 1;
         xhtml = 1;
@@ -463,11 +468,13 @@ void handleVideoFrame(TAG*tag, char*prefix)
 
 void handlePlaceObject2(TAG*tag, char*prefix)
 {
-    U8 flags = swf_GetU8(tag);
+    U8 flags;
     MATRIX m;
     CXFORM cx;
     char pstr[3][160];
     int ppos[3] = {0,0,0};
+    swf_SetTagPos(tag, 0);
+    flags = swf_GetU8(tag);
     swf_GetU16(tag); //depth
 
     //flags&1: move
@@ -558,16 +565,19 @@ void handlePlaceObject2(TAG*tag, char*prefix)
 void handlePlaceObject(TAG*tag, char*prefix)
 {
     TAG*tag2 = swf_InsertTag(0, ST_PLACEOBJECT2);
-
-    U16 id = swf_GetU16(tag);
-    U16 depth = swf_GetU16(tag);
+    U16 id, depth;
     MATRIX matrix; 
     CXFORM cxform;
+
+    swf_SetTagPos(tag, 0);
+    id = swf_GetU16(tag);
+    depth = swf_GetU16(tag);
     swf_GetMatrix(tag, &matrix);
     swf_GetCXForm(tag, &cxform, 0);
 
-    swf_SetU8(tag2, 14);
+    swf_SetU8(tag2, 14 /* char, matrix, cxform */);
     swf_SetU16(tag2, depth);
+    swf_SetU16(tag2, id);
     swf_SetMatrix(tag2, &matrix);
     swf_SetCXForm(tag2, &cxform, 1);
 
@@ -583,9 +593,15 @@ char* fillstyle2str(FILLSTYLE*style)
        case 0x10: case 0x12:
            sprintf(stylebuf, "GRADIENT (%d steps)", style->gradient.num);
            break;
-       case 0x40: case 0x41:
+       case 0x40: 
            /* TODO: display information about that bitmap */
-           sprintf(stylebuf, "BITMAP %d", style->id_bitmap);
+           sprintf(stylebuf, "BITMAPt %d", style->id_bitmap);
+           /* TODO: show matrix */
+           break;
+       case 0x41:
+           /* TODO: display information about that bitmap */
+           sprintf(stylebuf, "BITMAPc %d", style->id_bitmap);
+           /* TODO: show matrix */
            break;
        default:
            sprintf(stylebuf, "UNKNOWN[%02x]",style->type);
@@ -750,6 +766,7 @@ int main (int argc,char ** argv)
     char* framelabel = 0;
     char prefix[128];
     int filesize = 0;
+    int filepos = 0;
     prefix[0] = 0;
     memset(idtab,0,65536);
 
@@ -893,10 +910,14 @@ int main (int argc,char ** argv)
             //tag = tag->next;
             //continue;
         }
-       if(swf_TagGetName(tag)) {
-           printf("[%03x] %9ld %s%s", tag->id, tag->len, prefix, swf_TagGetName(tag));
+       if(!name) {
+           name = "UNKNOWN TAG";
+       }
+       if(cumulative) {
+           filepos += tag->len;
+           printf("[%03x] %9ld %9ld %s%s", tag->id, tag->len, filepos, prefix, swf_TagGetName(tag));
        } else {
-           printf("[%03x] %9ld %sUNKNOWN TAG %03x", tag->id, tag->len, prefix, tag->id);
+           printf("[%03x] %9ld %s%s", tag->id, tag->len, prefix, swf_TagGetName(tag));
        }
        
        if(tag->id == ST_FREECHARACTER) {
@@ -934,7 +955,8 @@ int main (int argc,char ** argv)
                printf(" object");
 
             printf(" at depth %04d", swf_GetDepth(tag));
-           
+          
+           swf_SetTagPos(tag, 0);
            if(tag->data[0]&64) {
                SWFPLACEOBJECT po;
                swf_GetPlaceObject(tag, &po);
@@ -976,9 +998,9 @@ int main (int argc,char ** argv)
        else if(tag->id == ST_FRAMELABEL) {
            int l = strlen(tag->data);
            printf(" \"%s\"", tag->data);
-           if(l < tag->len-1) {
+           if((l+1) < tag->len) {
                printf(" has %d extra bytes", tag->len-1-l);
-               if(tag ->len-1-l == 1 && tag->data[tag->len-1] == 1)
+               if(tag ->len - (l+1) == 1 && tag->data[tag->len-1] == 1)
                    printf(" (ANCHOR)");
            }
            if((framelabel && !issprite) ||