X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fswfc.c;h=75a12ae7be211d992540e5a3adb145d5785db720;hb=8825d41ef224eafc985545b620046e2a27ef46b9;hp=f6157c55544a754c8eca73eacd4849c65e5353ee;hpb=8f042972344a525621a13c9c5b6285cc4a8181ec;p=swftools.git diff --git a/src/swfc.c b/src/swfc.c index f6157c5..75a12ae 100644 --- a/src/swfc.c +++ b/src/swfc.c @@ -40,6 +40,7 @@ static char * filename = 0; static char * outputname = "output.swf"; static int verbose = 2; +static int optimize = 0; static int override_outputname = 0; static struct options_t options[] = { @@ -47,6 +48,7 @@ static struct options_t options[] = { {"V", "version"}, {"v", "verbose"}, {"o", "output"}, +{"O", "optimize"}, {0,0} }; @@ -61,6 +63,10 @@ int args_callback_option(char*name,char*val) override_outputname = 1; return 1; } + else if(!strcmp(name, "O")) { + optimize = 1; + return 0; + } else if(!strcmp(name, "v")) { verbose ++; return 0; @@ -636,12 +642,18 @@ static void s_endSWF() swf = stack[stackpos].swf; filename = stack[stackpos].filename; - - //tag = swf_InsertTag(tag, ST_SHOWFRAME); //? + + //if(tag->prev && tag->prev->id != ST_SHOWFRAME) + // tag = swf_InsertTag(tag, ST_SHOWFRAME); + tag = swf_InsertTag(tag, ST_SHOWFRAME); tag = swf_InsertTag(tag, ST_END); swf_OptimizeTagOrder(swf); + + if(optimize) { + swf_Optimize(swf); + } if(!(swf->movieSize.xmax-swf->movieSize.xmin) || !(swf->movieSize.ymax-swf->movieSize.ymin)) { swf->movieSize = currentrect; /* "autocrop" */ @@ -690,7 +702,7 @@ void s_close() int s_getframe() { - return currentframe; + return currentframe+1; } void s_frame(int nr, int cut, char*name) @@ -698,6 +710,10 @@ void s_frame(int nr, int cut, char*name) int t; TAG*now = tag; + if(nr<1) + syntaxerror("Illegal frame number"); + nr--; // internally, frame 1 is frame 0 + for(t=currentframe;t= frame - && !(frame==0 && s_getframe()==frame)) // equality is o.k. for frame 0 + && !(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); @@ -2568,7 +2590,7 @@ static struct { // control tags {"play", c_play, "name loop=0 @nomultiple=0"}, - {"stop", c_stop, "name"}, + {"stop", c_stop, "name= "}, {"nextframe", c_nextframe, "name"}, {"previousframe", c_previousframe, "name"},