removed gcc warning
[swftools.git] / src / swfc.c
index db29f85..e46efa5 100644 (file)
@@ -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;