added rgb printout in backgroundcolor tag.
[swftools.git] / src / swfdump.c
index 4902873..e776403 100644 (file)
@@ -250,6 +250,29 @@ void handleText(TAG*tag)
   swf_FontExtract_DefineTextCallback(-1,0,tag,4, textcallback);
 }
            
+void handleDefineSound(TAG*tag)
+{
+    U16 id = swf_GetU16(tag);
+    U8 flags = swf_GetU8(tag);
+    int compression = (flags>>4)&3;
+    int rate = (flags>>2)&3;
+    int bits = flags&2?16:8;
+    int stereo = flags&1;
+    printf(" (");
+    if(compression == 0) printf("Raw ");
+    else if(compression == 1) printf("ADPCM ");
+    else if(compression == 2) printf("MP3 ");
+    else printf("? ");
+    if(rate == 0) printf("5.5Khz ");
+    if(rate == 1) printf("11Khz ");
+    if(rate == 2) printf("22Khz ");
+    if(rate == 3) printf("44Khz ");
+    printf("%dBit ", bits);
+    if(stereo) printf("stereo");
+    else printf("mono");
+    printf(")");
+}
+
 void handleDefineBits(TAG*tag)
 {
     U16 id;
@@ -393,6 +416,22 @@ void fontcallback2(U16 id,U8 * name)
   fontnum++;
 }
 
+void hexdumpTag(TAG*tag, char* prefix)
+{
+    int t;
+    printf("                %s-=> ",prefix);
+    for(t=0;t<tag->len;t++) {
+       printf("%02x ", tag->data[t]);
+       if((t && ((t&15)==15)) || (t==tag->len-1))
+       {
+           if(t==tag->len-1)
+               printf("\n");
+           else
+               printf("\n                %s-=> ",prefix);
+       }
+    }
+}
+
 void dumperror(const char* format, ...)
 {
     char buf[1024];
@@ -583,6 +622,9 @@ int main (int argc,char ** argv)
         else if(tag->id == ST_REMOVEOBJECT2) {
             printf(" removes object from depth %04d", swf_GetDepth(tag));
         }
+        else if(tag->id == ST_FREECHARACTER) {
+            printf(" frees object %04d", swf_GetPlaceID(tag));
+        }
        else if(tag->id == ST_STARTSOUND) {
            printf(" starts id %04d", swf_GetPlaceID(tag));
        }
@@ -624,11 +666,22 @@ int main (int argc,char ** argv)
            if(!issprite) {mainframe++; framelabel = 0;}
        }
 
+       if(tag->id == ST_SETBACKGROUNDCOLOR) {
+           U8 r = swf_GetU8(tag);
+           U8 g = swf_GetU8(tag);
+           U8 b = swf_GetU8(tag);
+           printf(" (%02x/%02x/%02x)",r,g,b);
+       }
+
        if(tag->id == ST_DEFINEBITSLOSSLESS ||
           tag->id == ST_DEFINEBITSLOSSLESS2) {
            handleDefineBits(tag);
            printf("\n");
        }
+       else if(tag->id == ST_DEFINESOUND) {
+           handleDefineSound(tag);
+           printf("\n");
+       }
        else if(tag->id == ST_DEFINEEDITTEXT) {
            handleEditText(tag);
            printf("\n");
@@ -690,7 +743,7 @@ int main (int argc,char ** argv)
                swf_GetUsedIDs(tag, used);
                printf("%s%suses IDs: ", indent, prefix);
                for(t=0;t<num;t++) {
-                   tag->pos = used[t];
+                   swf_SetTagPos(tag, used[t]);
                    printf("%d%s", swf_GetU16(tag), t<num-1?", ":"");
                }
                printf("\n");
@@ -698,18 +751,7 @@ int main (int argc,char ** argv)
        }
 
        if(tag->len && hex) {
-           int t;
-           printf("                %s-=> ",prefix);
-           for(t=0;t<tag->len;t++) {
-               printf("%02x ", tag->data[t]);
-               if((t && ((t&15)==15)) || (t==tag->len-1))
-               {
-                   if(t==tag->len-1)
-                       printf("\n");
-                   else
-                       printf("\n                %s-=> ",prefix);
-               }
-           }
+           hexdumpTag(tag, prefix);
        }
         tag = tag->next;
        fflush(stdout);