git.asbjorn.biz
/
swftools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
changed addfont/drawchar prototype
[swftools.git]
/
src
/
swfc.c
diff --git
a/src/swfc.c
b/src/swfc.c
index
301f542
..
8e7977b
100644
(file)
--- 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 verbose = 2;
static int optimize = 0;
static int override_outputname = 0;
+static int do_cgi = 0;
static struct options_t options[] = {
{"h", "help"},
static struct options_t options[] = {
{"h", "help"},
@@
-68,6
+69,10
@@
int args_callback_option(char*name,char*val)
optimize = 1;
return 0;
}
optimize = 1;
return 0;
}
+ else if(!strcmp(name, "C")) {
+ do_cgi = 1;
+ return 0;
+ }
else if(!strcmp(name, "v")) {
verbose ++;
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);
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);
}
exit(1);
}
@@
-130,7
+135,7
@@
static void warning(char*format, ...)
va_start(arglist, format);
vsprintf(buf, format, arglist);
va_end(arglist);
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()
}
static void readToken()
@@
-673,11
+678,16
@@
static void s_endSWF()
warning("Empty bounding box for movie");
}
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(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");}
{if(swf_WriteSWC(fi, swf)<0) syntaxerror("WriteSWC() failed.\n");}
else
{if(swf_WriteSWF(fi, swf)<0) syntaxerror("WriteSWF() failed.\n");}
@@
-715,7
+725,7
@@
int s_getframe()
return currentframe+1;
}
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;
{
int t;
TAG*now = tag;
@@
-729,13
+739,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);
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);
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) {
}
if(cut) {
@@
-1114,6
+1126,8
@@
void s_texture(char*name, char*object, int x, int y, float scalex, float scaley,
parameters_t p;
FILLSTYLE*fs = &texture->fs;
parameters_t p;
FILLSTYLE*fs = &texture->fs;
+ memset(&p, 0, sizeof(parameters_t));
+
if(bitmap) {
fs->type = FILL_TILED;
fs->id_bitmap = bitmap->id;
if(bitmap) {
fs->type = FILL_TILED;
fs->id_bitmap = bitmap->id;
@@
-1209,9
+1223,9
@@
void s_sound(char*name, char*filename)
unsigned blocksize = 1152;
int is_mp3 = 0;
unsigned blocksize = 1152;
int is_mp3 = 0;
- if(readWAV(filename, &wav)) {
+ if(wav_read(&wav, filename)) {
int t;
int t;
- convertWAV2mono(&wav, &wav2, 44100);
+ wav_convert2mono(&wav, &wav2, 44100);
samples = (U16*)wav2.data;
numsamples = wav2.size/2;
free(wav.data);
samples = (U16*)wav2.data;
numsamples = wav2.size/2;
free(wav.data);
@@
-1262,7
+1276,15
@@
void s_sound(char*name, char*filename)
{
swf_SetSoundDefine(tag, samples, numsamples);
}
{
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;
sound = (sound_t*)malloc(sizeof(sound_t)); /* mem leak */
sound->tag = tag;
sound->id = id;
@@
-1382,7
+1404,7
@@
int s_swf3action(char*name, char*action)
ActionTAG* a = 0;
instance_t* object = 0;
if(name)
ActionTAG* a = 0;
instance_t* object = 0;
if(name)
- dictionary_lookup(&instances, name);
+ object = (instance_t*)dictionary_lookup(&instances, name);
if(!object && name && *name) {
/* we have a name, but couldn't find it. Abort. */
return 0;
if(!object && name && *name) {
/* we have a name, but couldn't find it. Abort. */
return 0;
@@
-1799,8
+1821,10
@@
int parseTwip(char*str)
int t;
return sign*parseInt(str)*20;
} else {
int t;
return sign*parseInt(str)*20;
} else {
- int l=strlen(++dot);
+ char* old = strdup(str);
+ int l=strlen(dot+1);
char*s;
char*s;
+ *dot++ = 0;
for(s=str;s<dot-1;s++)
if(*s<'0' || *s>'9')
syntaxerror("Not a coordinate: \"%s\"", str);
for(s=str;s<dot-1;s++)
if(*s<'0' || *s>'9')
syntaxerror("Not a coordinate: \"%s\"", str);
@@
-1809,10
+1833,12
@@
int parseTwip(char*str)
syntaxerror("Not a coordinate: \"%s\"", str);
}
if(l>2 || (l==2 && (dot[1]!='0' && dot[1]!='5'))) {
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;
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)
if(l==0)
return sign*atoi(str)*20;
if(l==1)
@@
-2488,7
+2514,14
@@
static int c_frame(map_t*args)
{
char*framestr = lu(args, "n");
char*cutstr = lu(args, "cut");
{
char*framestr = lu(args, "n");
char*cutstr = lu(args, "cut");
+
char*name = lu(args, "name");
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"))
int frame;
int cut = 0;
if(strcmp(cutstr, "no"))
@@
-2505,7
+2538,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);
}
&& !(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)
return 0;
}
static int c_primitive(map_t*args)
@@
-2870,7
+2903,7
@@
static struct {
char*arguments;
} arguments[] =
{{"flash", c_flash, "bbox=autocrop background=black version=6 fps=50 name= filename= @compress=default"},
char*arguments;
} arguments[] =
{{"flash", c_flash, "bbox=autocrop background=black version=6 fps=50 name= filename= @compress=default"},
- {"frame", c_frame, "n=<plus>1 name= @cut=no"},
+ {"frame", c_frame, "n=<plus>1 name= @cut=no @anchor=no"},
// "import" type stuff
{"swf", c_swf, "name filename"},
{"shape", c_swf, "name filename"},
// "import" type stuff
{"swf", c_swf, "name filename"},
{"shape", c_swf, "name filename"},
@@
-3169,7
+3202,7
@@
int main (int argc,char ** argv)
file = generateTokens(filename);
if(!file) {
file = generateTokens(filename);
if(!file) {
- printf("parser returned error.\n");
+ fprintf(stderr, "parser returned error.\n");
return 1;
}
pos=0;
return 1;
}
pos=0;