X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fswfc.c;h=db5ae8b762666b7be7efcf8ea90b77f484ffda0f;hb=8aa70763b70b1eaacd67aa08df5b4c1774e43ec8;hp=bc6d711f2e42ded1d29f6ebe4a07dd6d8c6b5f03;hpb=5aef26eca4bd74018284f97e5f9212dea1cf3e5d;p=swftools.git diff --git a/src/swfc.c b/src/swfc.c index bc6d711..db5ae8b 100644 --- a/src/swfc.c +++ b/src/swfc.c @@ -715,7 +715,7 @@ int s_getframe() return currentframe+1; } -void s_frame(int nr, int cut, char*name) +void s_frame(int nr, int cut, char*name, char anchor) { int t; TAG*now = tag; @@ -729,13 +729,15 @@ void s_frame(int nr, int cut, char*name) if(t==nr-1 && name && *name) { tag = swf_InsertTag(tag, ST_FRAMELABEL); swf_SetString(tag, name); - swf_SetU8(tag, 1); //make this an anchor + if(anchor) + swf_SetU8(tag, 1); //make this an anchor } } - if(nr == 0 && currentframe == 0 && name) { + if(nr == 0 && currentframe == 0 && name && *name) { tag = swf_InsertTag(tag, ST_FRAMELABEL); swf_SetString(tag, name); - swf_SetU8(tag, 1); //make this an anchor + if(anchor) + swf_SetU8(tag, 1); //make this an anchor } if(cut) { @@ -1264,7 +1266,15 @@ void s_sound(char*name, char*filename) { swf_SetSoundDefine(tag, samples, numsamples); } - + + tag = swf_InsertTag(tag, ST_NAMECHARACTER); + swf_SetU16(tag, id); + swf_SetString(tag, name); + tag = swf_InsertTag(tag, ST_EXPORTASSETS); + swf_SetU16(tag, 1); + swf_SetU16(tag, id); + swf_SetString(tag, name); + sound = (sound_t*)malloc(sizeof(sound_t)); /* mem leak */ sound->tag = tag; sound->id = id; @@ -1801,8 +1811,10 @@ int parseTwip(char*str) int t; return sign*parseInt(str)*20; } else { - int l=strlen(++dot); + char* old = strdup(str); + int l=strlen(dot+1); char*s; + *dot++ = 0; for(s=str;s'9') syntaxerror("Not a coordinate: \"%s\"", str); @@ -1811,10 +1823,12 @@ int parseTwip(char*str) syntaxerror("Not a coordinate: \"%s\"", str); } if(l>2 || (l==2 && (dot[1]!='0' && dot[1]!='5'))) { - warning("precision loss: %s converted to twip: %s", str, dot); + dot[1] = ((dot[1]-0x30)/5)*5 + 0x30; dot[2] = 0; l=2; + warning("precision loss: %s converted to twip: %s.%s", old, str, dot); } + free(old); if(l==0) return sign*atoi(str)*20; if(l==1) @@ -2490,7 +2504,14 @@ static int c_frame(map_t*args) { char*framestr = lu(args, "n"); char*cutstr = lu(args, "cut"); + char*name = lu(args, "name"); + char*anchor = lu(args, "anchor"); + char buf[40]; + + if(!strcmp(anchor, "anchor") && !*name) + name = framestr; + int frame; int cut = 0; if(strcmp(cutstr, "no")) @@ -2507,7 +2528,7 @@ static int c_frame(map_t*args) && !(frame==1 && s_getframe()==frame)) // equality is o.k. for frame 0 syntaxerror("frame expression must be >%d (is:%s)", s_getframe(), framestr); } - s_frame(frame, cut, name); + s_frame(frame, cut, name, !strcmp(anchor, "anchor")); return 0; } static int c_primitive(map_t*args) @@ -2872,7 +2893,7 @@ static struct { char*arguments; } arguments[] = {{"flash", c_flash, "bbox=autocrop background=black version=6 fps=50 name= filename= @compress=default"}, - {"frame", c_frame, "n=1 name= @cut=no"}, + {"frame", c_frame, "n=1 name= @cut=no @anchor=no"}, // "import" type stuff {"swf", c_swf, "name filename"}, {"shape", c_swf, "name filename"},