static int placements = 0;
static int action = 0;
static int html = 0;
+static int xhtml = 0;
static int xy = 0;
static int showtext = 0;
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"},
{"D", "full"},
{"V", "version"},
{"e", "html"},
+{"E", "xhtml"},
{"a", "action"},
{"t", "text"},
{"s", "shapes"},
html = 1;
return 0;
}
+ else if(name[0]=='c') {
+ cumulative = 1;
+ return 0;
+ }
+ else if(name[0]=='E') {
+ html = 1;
+ xhtml = 1;
+ return 0;
+ }
else if(name[0]=='X') {
xy |= 1;
return 0;
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
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);
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);
char* framelabel = 0;
char prefix[128];
int filesize = 0;
+ int filepos = 0;
prefix[0] = 0;
memset(idtab,0,65536);
fprintf(stderr, "Fileversion>9\n");
exit(1);
}
- printf("<OBJECT CLASSID=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"\n"
- " WIDTH=\"%d\"\n"
- //" BGCOLOR=#ffffffff\n"?
- " HEIGHT=\"%d\"\n"
- //http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,23,0?
- " CODEBASE=\"http://active.macromedia.com/flash5/cabs/swflash.cab#version=%s\">\n"
- " <PARAM NAME=\"MOVIE\" VALUE=\"%s\">\n"
- " <PARAM NAME=\"PLAY\" VALUE=\"true\">\n"
- " <PARAM NAME=\"LOOP\" VALUE=\"true\">\n"
- " <PARAM NAME=\"QUALITY\" VALUE=\"high\">\n"
- " <EMBED SRC=\"%s\" WIDTH=\"%d\" HEIGHT=\"%d\"\n" //bgcolor=#ffffff?
- " PLAY=\"true\" ALIGN=\"\" LOOP=\"true\" QUALITY=\"high\"\n"
- " TYPE=\"application/x-shockwave-flash\"\n"
- " PLUGINSPAGE=\"http://www.macromedia.com/go/getflashplayer\">\n"
- " </EMBED>\n"
- "</OBJECT>\n", xsize, ysize, fileversions[swf.fileVersion],
- filename, filename, xsize, ysize);
+
+ if(xhtml) {
+ printf("<object type=\"application/x-shockwave-flash\" data=\"%s\" width=\"%d\" height=\"%d\">\n"
+ "<param name=\"movie\" value=\"%s\"/>\n"
+ "<param name=\"play\" value=\"true\"/>\n"
+ "<param name=\"loop\" value=\"false\"/>\n"
+ "<param name=\"quality\" value=\"high\"/>\n"
+ "<param name=\"loop\" value=\"false\"/>\n"
+ "</object>\n\n", filename, xsize, ysize, filename);
+ } else {
+ printf("<OBJECT CLASSID=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"\n"
+ " WIDTH=\"%d\"\n"
+ //" BGCOLOR=#ffffffff\n"?
+ " HEIGHT=\"%d\"\n"
+ //http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,23,0?
+ " CODEBASE=\"http://active.macromedia.com/flash5/cabs/swflash.cab#version=%s\">\n"
+ " <PARAM NAME=\"MOVIE\" VALUE=\"%s\">\n"
+ " <PARAM NAME=\"PLAY\" VALUE=\"true\">\n"
+ " <PARAM NAME=\"LOOP\" VALUE=\"true\">\n"
+ " <PARAM NAME=\"QUALITY\" VALUE=\"high\">\n"
+ " <EMBED SRC=\"%s\" WIDTH=\"%d\" HEIGHT=\"%d\"\n" //bgcolor=#ffffff?
+ " PLAY=\"true\" ALIGN=\"\" LOOP=\"true\" QUALITY=\"high\"\n"
+ " TYPE=\"application/x-shockwave-flash\"\n"
+ " PLUGINSPAGE=\"http://www.macromedia.com/go/getflashplayer\">\n"
+ " </EMBED>\n"
+ "</OBJECT>\n", xsize, ysize, fileversions[swf.fileVersion],
+ filename, filename, xsize, ysize);
+ }
return 0;
}
printf("[HEADER] File version: %d\n", swf.fileVersion);
//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) {
printf(" object");
printf(" at depth %04d", swf_GetDepth(tag));
-
+
+ swf_SetTagPos(tag, 0);
if(tag->data[0]&64) {
SWFPLACEOBJECT po;
swf_GetPlaceObject(tag, &po);
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) ||