X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fswfc.c;h=e46efa545bd4ebbfc50bcb11c07061703f293289;hb=9a8ddef2f3d19eaebdc8f3f7e9fb7116f1604b15;hp=db29f85aec0801076ef65389c85356c2aab669f4;hpb=f158f8bb006d524459a840b8b536b4efa9ef54f1;p=swftools.git diff --git a/src/swfc.c b/src/swfc.c index db29f85..e46efa5 100644 --- a/src/swfc.c +++ b/src/swfc.c @@ -44,6 +44,7 @@ static char * outputname = "output.swf"; static int verbose = 2; static int optimize = 0; static int override_outputname = 0; +static int do_cgi = 0; static struct options_t options[] = { {"h", "help"}, @@ -68,6 +69,10 @@ int args_callback_option(char*name,char*val) optimize = 1; return 0; } + else if(!strcmp(name, "C")) { + do_cgi = 1; + return 0; + } else if(!strcmp(name, "v")) { verbose ++; return 0; @@ -119,7 +124,7 @@ static void syntaxerror(char*format, ...) va_start(arglist, format); vsprintf(buf, format, arglist); va_end(arglist); - printf("\"%s\", line %d column %d: error- %s\n", filename, line, column, buf); + fprintf(stderr, "\"%s\", line %d column %d: error- %s\n", filename, line, column, buf); exit(1); } @@ -130,7 +135,7 @@ static void warning(char*format, ...) va_start(arglist, format); vsprintf(buf, format, arglist); va_end(arglist); - printf("\"%s\", line %d column %d: warning- %s\n", filename, line, column, buf); + fprintf(stderr, "\"%s\", line %d column %d: warning- %s\n", filename, line, column, buf); } static void readToken() @@ -673,11 +678,16 @@ static void s_endSWF() warning("Empty bounding box for movie"); } - fi = open(filename, O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0644); + if(do_cgi) + fi = fileno(stdout); + else + fi = open(filename, O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0644); if(fi<0) { syntaxerror("couldn't create output file %s", filename); } - if(swf->compressed) + if(do_cgi) + {if(swf_WriteCGI(swf)<0) syntaxerror("WriteCGI() failed.\n");} + else if(swf->compressed) {if(swf_WriteSWC(fi, swf)<0) syntaxerror("WriteSWC() failed.\n");} else {if(swf_WriteSWF(fi, swf)<0) syntaxerror("WriteSWF() failed.\n");} @@ -1027,7 +1037,7 @@ void s_image(char*name, char*type, char*filename, int quality) int imageID = id; int width, height; if(!strcmp(type,"jpeg")) { -#ifndef HAVE_LIBJPEG +#ifndef HAVE_JPEGLIB warning("no jpeg support compiled in"); s_box(name, 0, 0, black, 20, 0); return; @@ -1266,7 +1276,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; @@ -1502,13 +1520,17 @@ void s_includeswf(char*name, char*filename) level--; if(!level) break; - /* We simply dump all tags right after the sprite - header, relying on the fact that swf_OptimizeTagOrder() will - sort things out for us later. - We also rely on the fact that the imported SWF is well-formed. - */ - tag = swf_InsertTag(tag, ftag->id); - swf_SetBlock(tag, ftag->data, ftag->len); + + if(ftag->id != ST_SETBACKGROUNDCOLOR) { + /* We simply dump all tags right after the sprite + header, relying on the fact that swf_OptimizeTagOrder() will + sort things out for us later. + We also rely on the fact that the imported SWF is well-formed. + */ + tag = swf_InsertTag(tag, ftag->id); + swf_SetBlock(tag, ftag->data, ftag->len); + } + ftag = ftag->next; } if(!ftag) @@ -1733,7 +1755,7 @@ typedef int command_func_t(map_t*args); SRECT parseBox(char*str) { - SRECT r; + SRECT r = {0,0,0,0}; float xmin, xmax, ymin, ymax; char*x = strchr(str, 'x'); char*d1=0,*d2=0; @@ -3184,7 +3206,7 @@ int main (int argc,char ** argv) file = generateTokens(filename); if(!file) { - printf("parser returned error.\n"); + fprintf(stderr, "parser returned error.\n"); return 1; } pos=0;