Part of the swftools package.
Copyright (c) 2001 Matthias Kramm <kramm@quiss.org>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
- This file is distributed under the GPL, see file COPYING for details */
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <memory.h>
#include <errno.h>
-#define logf logarithmf // logf is also used by ../lib/log.h
#include <math.h>
-#undef logf
#include "../config.h"
#include "../lib/rfxswf.h"
#include "../lib/log.h"
#include "../lib/args.h"
-#include "q.h"
+#include "../lib/q.h"
#include "parser.h"
#include "wav.h"
return m;
}
-void s_swf(char*name, SRECT r, int version, int fps, int compress)
+void s_swf(char*name, SRECT r, int version, int fps, int compress, RGBA background)
{
SWF*swf = (SWF*)malloc(sizeof(SWF));
- RGBA rgb;
if(stackpos)
syntaxerror(".swf blocks can't be nested");
swf->frameRate = fps;
swf->firstTag = tag = swf_InsertTag(0, ST_SETBACKGROUNDCOLOR);
swf->compressed = compress;
- rgb.r = 0x00;rgb.g = 0x00;rgb.b = 0x00;
- swf_SetRGB(tag,&rgb);
+ swf_SetRGB(tag,&background);
if(stackpos==sizeof(stack)/sizeof(stack[0]))
syntaxerror("too many levels of recursion");
int version = parseInt(lu(args, "version"));
int fps = (int)(parseFloat(lu(args, "fps"))*256);
int compress = 0;
+ RGBA color = parseColor(lu(args, "background"));
if(!strcmp(name, "!default!") || override_outputname)
name = outputname;
compress = 0;
else syntaxerror("value \"%s\" not supported for the compress argument", compressstr);
- s_swf(name, bbox, version, fps, compress);
+ s_swf(name, bbox, version, fps, compress, color);
return 0;
}
int isRelative(char*str)
l--;
return *(SPOINT*)&mpoints.buffer[l];
}
+static int c_gradient(map_t*args)
+{
+ return 0;
+}
static int c_point(map_t*args)
{
char*name = lu(args, "name");
command_func_t* func;
char*arguments;
} arguments[] =
-{{"swf", c_swf, "bbox=autocrop version=5 fps=50 name=!default! @compress=default"},
+{{"swf", c_swf, "bbox=autocrop background=black version=5 fps=50 name=!default! @compress=default"},
{"frame", c_frame, "n=<plus>1"},
// "import" type stuff
{"font", c_font, "name filename"},
{"soundtrack", c_soundtrack, "filename"},
+ // generators of primitives
+
+ {"point", c_point, "name x=0 y=0"},
+ {"gradient", c_gradient, "name"},
+
// character generators
{"box", c_primitive, "name width height color=white line=1 @fill=none"},
{"circle", c_primitive, "name r color=white line=1 @fill=none"},
// virtual object placement
{"buttonput", c_buttonput, "<i> x=0 y=0 red=+0 green=+0 blue=+0 alpha=+0 luminance= scale= scalex=100% scaley=100% shear=0 rotate=0 above= below="},
{"texture", c_texture, "<i> x=0 y=0 scale= scalex=100% scaley=100% shear=0 rotate=0"},
- {"point", c_point, "name x=0 y=0"},
// commands which start a block
//startclip (see above)
len = pos;
/* for(t=0;t<len;t++) {
- printf("(%d) %s=%s %s\n", t, strndup(name[t], namelen[t]), strndup(value[t], valuelen[t]),
+ printf("(%d) %s=%s %s\n", t, strdup_n(name[t], namelen[t]), strdup_n(value[t], valuelen[t]),
isboolean[t]?"(boolean)":"");
}*/
value[pos].str = text;
value[pos].len = strlen(text);
/*printf("setting boolean parameter %s (to %s)\n",
- strndup(name[pos], namelen[pos]),
- strndup(value[pos], valuelen[pos]));*/
+ strdup_n(name[pos], namelen[pos]),
+ strdup_n(value[pos], valuelen[pos]));*/
break;
}
}
if((type == ASSIGNMENT && !strncmp(name[pos].str, text, name[pos].len>textlen?name[pos].len:textlen)) ||
(type != ASSIGNMENT && !set[pos])) {
if(set[pos]) {
- syntaxerror("value %s set twice (old value:%s)", text, strndup(value[pos].str, value[pos].len));
+ syntaxerror("value %s set twice (old value:%s)", text, strdup_n(value[pos].str, value[pos].len));
}
if(type == ASSIGNMENT)
readToken();
value[pos].len = strlen(text);
#if 0//def DEBUG
printf("setting parameter %s (to %s)\n",
- strndup(name[pos].str, name[pos].len),
- strndup(value[pos].str, value[pos].len));
+ strdup_n(name[pos].str, name[pos].len),
+ strdup_n(value[pos].str, value[pos].len));
#endif
break;
}
}
#if 0//def DEBUG
for(t=0;t<len;t++) {
- printf("%s=%s\n", strndup(name[t].str, name[t].len), strndup(value[t].str, value[t].len));
+ printf("%s=%s\n", strdup_n(name[t].str, name[t].len), strdup_n(value[t].str, value[t].len));
}
#endif
for(t=0;t<len;t++) {
}
if(value[t].str == 0) {
pushBack();
- syntaxerror("value for parameter %s missing (no default)", strndup(name[t].str, name[t].len));
+ syntaxerror("value for parameter %s missing (no default)", strdup_n(name[t].str, name[t].len));
}
}