added new devices
[swftools.git] / src / swfdump.c
index a74c453..4bb5284 100644 (file)
@@ -167,6 +167,7 @@ void args_callback_usage(char *name)
     printf("-D , --full                    Show everything. Same as -atp\n");
     printf("-V , --version                 Print version info and exit\n");
     printf("-e , --html                    Print out html code for embedding the file\n");
+    printf("-E , --xhtml                   Print out xhtml code for embedding the file\n");
     printf("-a , --action                  Disassemble action tags\n");
     printf("-t , --text                    Show text fields (like swfstrings).\n");
     printf("-s , --shapes                  Show shape coordinates/styles\n");
@@ -275,8 +276,12 @@ void textcallback(void*self, int*glyphs, int*ypos, int nr, int fontid, int fonts
            if(glyphs[t] >= fonts[font]->numchars  /*glyph is in range*/
                    || !fonts[font]->glyph2ascii /* font has ascii<->glyph mapping */
              ) a = glyphs[t];
-           else
-               a = fonts[font]->glyph2ascii[glyphs[t]];
+           else {
+               if(fonts[font]->glyph2ascii[glyphs[t]])
+                   a = fonts[font]->glyph2ascii[glyphs[t]];
+               else
+                   a = glyphs[t];
+           }
        } else {
            a = glyphs[t];
        }
@@ -298,7 +303,7 @@ void handleDefineSound(TAG*tag)
 {
     U16 id = swf_GetU16(tag);
     U8 flags = swf_GetU8(tag);
-    int compression = (flags>>4)&3;
+    int compression = (flags>>4)&7;
     int rate = (flags>>2)&3;
     int bits = flags&2?16:8;
     int stereo = flags&1;
@@ -306,6 +311,8 @@ void handleDefineSound(TAG*tag)
     if(compression == 0) printf("Raw ");
     else if(compression == 1) printf("ADPCM ");
     else if(compression == 2) printf("MP3 ");
+    else if(compression == 3) printf("Raw little-endian ");
+    else if(compression == 6) printf("ASAO ");
     else printf("? ");
     if(rate == 0) printf("5.5Khz ");
     if(rate == 1) printf("11Khz ");
@@ -593,14 +600,14 @@ char* fillstyle2str(FILLSTYLE*style)
        case 0x10: case 0x12:
            sprintf(stylebuf, "GRADIENT (%d steps)", style->gradient.num);
            break;
-       case 0x40: 
+       case 0x40: case 0x42:
            /* TODO: display information about that bitmap */
-           sprintf(stylebuf, "BITMAPt %d", style->id_bitmap);
+           sprintf(stylebuf, "BITMAPt%s %d", (style->type&2)?"n":"", style->id_bitmap);
            /* TODO: show matrix */
            break;
-       case 0x41:
+       case 0x41: case 0x43:
            /* TODO: display information about that bitmap */
-           sprintf(stylebuf, "BITMAPc %d", style->id_bitmap);
+           sprintf(stylebuf, "BITMAPc%s %d", (style->type&2)?"n":"", style->id_bitmap);
            /* TODO: show matrix */
            break;
        default:
@@ -920,11 +927,6 @@ int main (int argc,char ** argv)
            printf("[%03x] %9ld %s%s", tag->id, tag->len, prefix, swf_TagGetName(tag));
        }
        
-       if(tag->id == ST_FREECHARACTER) {
-           U16 id = swf_GetU16(tag);
-           idtab[id] = 0;
-       }
-
         if(swf_isDefiningTag(tag)) {
             U16 id = swf_GetDefineID(tag);
             printf(" defines id %04d", id);
@@ -1171,6 +1173,13 @@ int main (int argc,char ** argv)
                printf("\n");
            }
        }
+       
+       if(tag->id == ST_FREECHARACTER) {
+           U16 id;
+           swf_SetTagPos(tag, 0);
+           id = swf_GetU16(tag);
+           idtab[id] = 0;
+       }
 
        if(tag->len && hex) {
            hexdumpTag(tag, prefix);