X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fmodules%2Fswftools.c;h=a1befc2d9ff4d22267fe5806e7eef55ccb8b119f;hb=dae2250691184ef6d638fc9d3c45b3c24299148b;hp=bbbfee3dcc451d76180108664ff1f58bf4f3e9f8;hpb=e448c7a56df8e289c9dbd5b8d87753addd541091;p=swftools.git diff --git a/lib/modules/swftools.c b/lib/modules/swftools.c index bbbfee3..a1befc2 100644 --- a/lib/modules/swftools.c +++ b/lib/modules/swftools.c @@ -78,6 +78,7 @@ U16 swf_GetDefineID(TAG * t) case ST_DEFINESHAPE2: case ST_DEFINESHAPE3: case ST_DEFINEMORPHSHAPE: + case ST_DEFINEEDITTEXT: case ST_DEFINEBITS: case ST_DEFINEBITSJPEG2: case ST_DEFINEBITSJPEG3: @@ -85,15 +86,16 @@ U16 swf_GetDefineID(TAG * t) case ST_DEFINEBITSLOSSLESS2: case ST_DEFINEBUTTON: case ST_DEFINEBUTTON2: - case ST_DEFINEBUTTONCXFORM: - case ST_DEFINEBUTTONSOUND: + case ST_DEFINEBUTTONCXFORM: //pseudodefine + case ST_DEFINEBUTTONSOUND: //pseudodefine case ST_DEFINEFONT: case ST_DEFINEFONT2: - case ST_DEFINEFONTINFO: + case ST_DEFINEFONTINFO: //pseudodefine case ST_DEFINETEXT: case ST_DEFINETEXT2: case ST_DEFINESOUND: case ST_DEFINESPRITE: + case ST_NAMECHARACTER: //pseudodefine id = swf_GetU16(t); break; } @@ -131,7 +133,7 @@ U16 swf_GetPlaceID(TAG * t) return id; } -int definingtagids[] = +static int swf_definingtagids[] = {ST_DEFINESHAPE, ST_DEFINESHAPE2, ST_DEFINESHAPE3, @@ -155,7 +157,7 @@ int definingtagids[] = }; // tags which may be used inside a sprite definition -int spritetagids[] = +static int swf_spritetagids[] = {ST_SHOWFRAME, ST_PLACEOBJECT, ST_PLACEOBJECT2, @@ -171,13 +173,22 @@ int spritetagids[] = -1 }; +static int swf_pseudodefiningtagids[] = +{ + ST_DEFINEFONTINFO, + ST_DEFINEBUTTONCXFORM, + ST_DEFINEBUTTONSOUND, + ST_NAMECHARACTER, + -1 +}; + U8 swf_isAllowedSpriteTag(TAG * tag) { int id = tag->id; int t=0; - while(spritetagids[t]>=0) + while(swf_spritetagids[t]>=0) { - if(spritetagids[t] == id) + if(swf_spritetagids[t] == id) return 1; t++; } @@ -188,9 +199,22 @@ U8 swf_isDefiningTag(TAG * tag) { int id = tag->id; int t=0; - while(definingtagids[t]>=0) + while(swf_definingtagids[t]>=0) + { + if(swf_definingtagids[t] == id) + return 1; + t++; + } + return 0; +} + +U8 swf_isPseudoDefiningTag(TAG * tag) +{ + int id = tag->id; + int t=0; + while(swf_pseudodefiningtagids[t]>=0) { - if(definingtagids[t] == id) + if(swf_pseudodefiningtagids[t] == id) return 1; t++; } @@ -223,7 +247,7 @@ U16 swf_GetDepth(TAG * t) return depth; } -char* swf_GetTagName(TAG * t) +char* swf_GetName(TAG * t) { char* name = 0; U32 oldTagPos; @@ -248,7 +272,7 @@ char* swf_GetTagName(TAG * t) if(flags&PF_RATIO) swf_GetU16(t); if(flags&PF_NAME) { - swf_ResetBitmask(t); + swf_ResetReadBits(t); name = &t->data[swf_GetTagPos(t)]; } }