From 965fb2d8ab551a8544f85bf1ab7441bcd0c7c2c5 Mon Sep 17 00:00:00 2001 From: kramm Date: Sat, 13 Jan 2007 17:23:47 +0000 Subject: [PATCH] added flash 8 tags --- lib/modules/swfdump.c | 14 +++++++++++ lib/modules/swftools.c | 61 +++++++++++++++++++++++++++++++++++++++++++----- lib/rfxswf.h | 9 +++++++ 3 files changed, 78 insertions(+), 6 deletions(-) diff --git a/lib/modules/swfdump.c b/lib/modules/swfdump.c index 64441bb..c7bfcea 100644 --- a/lib/modules/swfdump.c +++ b/lib/modules/swfdump.c @@ -209,6 +209,20 @@ char* swf_TagGetName(TAG*tag) return "VIDEOFRAME"; case ST_DEFINEFONTINFO2: return "DEFINEFONTINFO2"; + case ST_FILEATTRIBUTES: + return "FILEATTRIBUTES"; + case ST_IMPORTASSETS2: + return "IMPORTASSETS2"; + case ST_DEFINESCALINGGRID: + return "DEFINESCALINGGRID"; + case ST_DEFINESHAPE4: + return "DEFINESHAPE4"; + case ST_DEFINEFONT3: + return "DEFINEFONT3"; + case ST_DEFINEFONTALIGNZONES: + return "DEFINEFONTALIGNZONES"; + case ST_CSMTEXTSETTINGS: + return "CSMTEXTSETTINGS"; case ST_FREEALL: return "FREEALL"; case ST_MX4: diff --git a/lib/modules/swftools.c b/lib/modules/swftools.c index 72d5607..63943c7 100644 --- a/lib/modules/swftools.c +++ b/lib/modules/swftools.c @@ -98,6 +98,7 @@ U16 swf_GetDefineID(TAG * t) { case ST_DEFINESHAPE: case ST_DEFINESHAPE2: case ST_DEFINESHAPE3: + case ST_DEFINESHAPE4: case ST_DEFINEMORPHSHAPE: case ST_DEFINEEDITTEXT: case ST_DEFINEBITS: @@ -105,14 +106,18 @@ U16 swf_GetDefineID(TAG * t) case ST_DEFINEBITSJPEG3: case ST_DEFINEBITSLOSSLESS: case ST_DEFINEBITSLOSSLESS2: + case ST_DEFINESCALINGGRID: //pseudodefine case ST_DEFINEBUTTON: case ST_DEFINEBUTTON2: case ST_DEFINEBUTTONCXFORM: //pseudodefine case ST_DEFINEBUTTONSOUND: //pseudodefine + case ST_CSMTEXTSETTINGS: //pseudodefine case ST_DEFINEFONT: case ST_DEFINEFONT2: + case ST_DEFINEFONT3: case ST_DEFINEFONTINFO: //pseudodefine case ST_DEFINEFONTINFO2: //pseudodefine + case ST_DEFINEFONTALIGNZONES: //pseudodefine case ST_DEFINETEXT: case ST_DEFINETEXT2: case ST_DEFINESOUND: @@ -210,9 +215,11 @@ static int swf_definingtagids[] = {ST_DEFINESHAPE, ST_DEFINESHAPE2, ST_DEFINESHAPE3, + ST_DEFINESHAPE4, ST_DEFINEMORPHSHAPE, ST_DEFINEFONT, ST_DEFINEFONT2, + ST_DEFINEFONT3, ST_DEFINETEXT, ST_DEFINETEXT2, ST_DEFINEEDITTEXT, @@ -247,12 +254,16 @@ static int swf_spritetagids[] = -1 }; +/* tags which add content or information to a character with a given ID */ static int swf_pseudodefiningtagids[] = { ST_DEFINEFONTINFO, ST_DEFINEFONTINFO2, + ST_DEFINEFONTALIGNZONES, ST_DEFINEBUTTONCXFORM, ST_DEFINEBUTTONSOUND, + ST_DEFINESCALINGGRID, + ST_CSMTEXTSETTINGS, ST_NAMECHARACTER, ST_DOINITACTION, ST_VIDEOFRAME, @@ -362,8 +373,11 @@ char* swf_GetName(TAG * t) case ST_FRAMELABEL: name = &t->data[swf_GetTagPos(t)]; break; + case ST_PLACEOBJECT3: case ST_PLACEOBJECT2: { U8 flags = swf_GetU8(t); + if(t->id == ST_PLACEOBJECT3) + swf_GetU8(t); swf_GetU16(t); //depth; if(flags&PF_CHAR) swf_GetU16(t); //id @@ -432,7 +446,7 @@ void enumerateUsedIDs_styles(TAG * tag, void (*callback)(TAG*, int, void*), void else {swf_GetRGB(tag, NULL);if(morph) swf_GetRGB(tag, NULL);} } - else if(type == 0x10 || type == 0x12) + else if(type == 0x10 || type == 0x12 || type == 0x13) { swf_ResetReadBits(tag); swf_GetMatrix(tag, NULL); @@ -444,7 +458,7 @@ void enumerateUsedIDs_styles(TAG * tag, void (*callback)(TAG*, int, void*), void else swf_GetGradient(tag, NULL, /*alpha*/ num>=3?1:0); } - else if(type == 0x40 || type == 0x41) + else if(type == 0x40 || type == 0x41 || type == 0x42 || type == 0x43) { swf_ResetReadBits(tag); // we made it. @@ -526,6 +540,20 @@ void enumerateUsedIDs(TAG * tag, int base, void (*callback)(TAG*, int, void*), v } } break; + case ST_IMPORTASSETS: + case ST_IMPORTASSETS2: { + swf_GetString(tag); //count + swf_GetU8(tag); //reserved + swf_GetU8(tag); //reserved + int num = swf_GetU16(tag); //url + int t; + for(t=0;tpos + base, callback_data); //button id + swf_GetU16(tag); //id + while(swf_GetU8(tag)); //name + } + } break; + case ST_FREECHARACTER: /* unusual tags, which all start with an ID */ case ST_NAMECHARACTER: case ST_GENERATORTEXT: @@ -540,6 +568,12 @@ void enumerateUsedIDs(TAG * tag, int base, void (*callback)(TAG*, int, void*), v break; callback(tag, 3 + base, callback_data); break; + case ST_PLACEOBJECT3: + // only if placeflaghascharacter + if(!(tag->data[0]&2)) + break; + callback(tag, 4 + base, callback_data); + break; case ST_REMOVEOBJECT: callback(tag, tag->pos + base, callback_data); break; @@ -665,7 +699,10 @@ void enumerateUsedIDs(TAG * tag, int base, void (*callback)(TAG*, int, void*), v } break; } + case ST_DEFINEFONTALIGNZONES: + case ST_DEFINESCALINGGRID: case ST_GLYPHNAMES: + case ST_CSMTEXTSETTINGS: case ST_DEFINEFONTINFO: case ST_DEFINEFONTINFO2: case ST_VIDEOFRAME: @@ -679,6 +716,8 @@ void enumerateUsedIDs(TAG * tag, int base, void (*callback)(TAG*, int, void*), v break; case ST_DEFINEMORPHSHAPE: + case ST_DEFINESHAPE4: + num++; case ST_DEFINESHAPE3: num++; //fallthrough case ST_DEFINESHAPE2: @@ -695,10 +734,18 @@ void enumerateUsedIDs(TAG * tag, int base, void (*callback)(TAG*, int, void*), v } id = swf_GetU16(tag); // id; - swf_GetRect(tag, NULL); // bounds + swf_GetRect(tag, NULL); // shape bounds if(morph) { swf_ResetReadBits(tag); - swf_GetRect(tag, NULL); // bounds2 + swf_GetRect(tag, NULL); // shape bounds2 + if(num==4) + swf_GetRect(tag, NULL); // edge bounds1 + } + if(num>=4) { + swf_GetRect(tag, NULL); // edge bounds + swf_GetU8(tag); // flags, &1: contains scaling stroke, &2: contains non-scaling stroke + } + if(morph) { swf_GetU32(tag); //offset to endedges } @@ -949,7 +996,8 @@ U8 swf_isShapeTag(TAG*tag) { if(tag->id == ST_DEFINESHAPE || tag->id == ST_DEFINESHAPE2 || - tag->id == ST_DEFINESHAPE3) + tag->id == ST_DEFINESHAPE3 || + tag->id == ST_DEFINESHAPE4) return 1; return 0; } @@ -957,7 +1005,8 @@ U8 swf_isShapeTag(TAG*tag) U8 swf_isPlaceTag(TAG*tag) { if(tag->id == ST_PLACEOBJECT || - tag->id == ST_PLACEOBJECT2) + tag->id == ST_PLACEOBJECT2 || + tag->id == ST_PLACEOBJECT3) return 1; return 0; } diff --git a/lib/rfxswf.h b/lib/rfxswf.h index 743aaae..da06490 100644 --- a/lib/rfxswf.h +++ b/lib/rfxswf.h @@ -300,8 +300,17 @@ SRECT swf_TurnRect(SRECT r, MATRIX* m); #define ST_VIDEOFRAME 61 #define ST_DEFINEFONTINFO2 62 #define ST_MX4 63 /*(?) */ +#define ST_ENABLEDEBUGGER2 64 /* version 8 */ #define ST_SCRIPTLIMITS 65 /* version 7- u16 maxrecursedepth, u16 scripttimeoutseconds */ #define ST_SETTABINDEX 66 /* version 7- u16 depth(!), u16 tab order value */ +#define ST_FILEATTRIBUTES 69 /* version 8 (required)- */ +#define ST_PLACEOBJECT3 70 /* version 8 */ +#define ST_IMPORTASSETS2 71 /* version 8 */ +#define ST_DEFINEFONTALIGNZONES 73 /* version 8 */ +#define ST_CSMTEXTSETTINGS 74 /* version 8 */ +#define ST_DEFINEFONT3 75 /* version 8 */ +#define ST_DEFINESCALINGGRID 78 /* version 8 */ +#define ST_DEFINESHAPE4 83 /* version 8 */ /* custom tags- only valid for swftools */ #define ST_REFLEX 777 /* to identify generator software */ -- 1.7.10.4