X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fswfdump.c;h=4bb5284927907704fc37913c4eca04e2c0084041;hb=65e37b404a867c25df5424f0ebed93515c991761;hp=a74c453f08760a5f5fdb271b90b92f815c3416cf;hpb=c9ac94e8c4e886e7cbed92905a1d4584b417ad8e;p=swftools.git diff --git a/src/swfdump.c b/src/swfdump.c index a74c453..4bb5284 100644 --- a/src/swfdump.c +++ b/src/swfdump.c @@ -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);