X-Git-Url: http://git.asbjorn.biz/?p=swftools.git;a=blobdiff_plain;f=src%2Fas3compile.c;h=9ee4569edc28092ba7498a6114d64a15f0260089;hp=d62d4476accfef0c80c3cc115a3dff2bd3553ff4;hb=c63b2bf21dc1df9a736f0b4c08f6cba828cdab92;hpb=833472ed51c5e622420293e9d42a69e993f9a62f diff --git a/src/as3compile.c b/src/as3compile.c index d62d447..9ee4569 100644 --- a/src/as3compile.c +++ b/src/as3compile.c @@ -38,14 +38,26 @@ static double width = 400; static double height = 300; static int flashversion = 9; static int verbose = 1; +static char local_with_networking = 0; +static char local_with_filesystem = 0; +static char*mainclass = 0; static struct options_t options[] = { {"h", "help"}, {"V", "version"}, +{"v", "verbose"}, +{"q", "quiet"}, {"C", "cgi"}, +{"R", "resolve"}, +{"D", "define"}, {"X", "width"}, {"Y", "height"}, {"r", "rate"}, +{"M", "mainclass"}, +{"l", "library"}, +{"I", "include"}, +{"N", "local-with-network"}, +{"L", "local-with-filesystem"}, {"T", "flashversion"}, {"o", "output"}, {0,0} @@ -66,6 +78,10 @@ int args_callback_option(char*name,char*val) framerate = atof(val); return 1; } + else if(!strcmp(name, "M")) { + mainclass = val; + return 1; + } else if(!strcmp(name, "v")) { verbose++; return 0; @@ -90,6 +106,36 @@ int args_callback_option(char*name,char*val) do_cgi = 1; return 0; } + else if(!strcmp(name, "l")) { + as3_import_file(val); + return 1; + } + else if(!strcmp(name, "I")) { + as3_add_include_dir(val); + return 1; + } + else if(!strcmp(name, "R")) { + as3_set_option("recurse","1"); + return 0; + } + else if(!strcmp(name, "D")) { + if(!strstr(val, "::")) { + fprintf(stderr, "Error: compile definition must contain \"::\"\n"); + exit(1); + } + as3_set_define(val); + return 1; + } + else if (!strcmp(name, "N")) + { + local_with_networking = 1; + return 0; + } + else if (!strcmp(name, "L")) + { + local_with_filesystem = 1; + return 0; + } else { printf("Unknown option: -%s\n", name); exit(1); @@ -107,10 +153,19 @@ void args_callback_usage(char *name) printf("\n"); printf("-h , --help Print short help message and exit\n"); printf("-V , --version Print version info and exit\n"); + printf("-v , --verbose Increase verbosity\n"); + printf("-q , --quiet Decrease verbosity\n"); printf("-C , --cgi Output to stdout (for use in CGI environments)\n"); + printf("-R , --resolve Try to resolve undefined classes automatically.\n"); + printf("-D , --define Set a compile time variable (for doing conditional compilation)\n"); printf("-X , --width Set target SWF width\n"); printf("-Y , --height Set target SWF width\n"); printf("-r , --rate Set target SWF framerate\n"); + printf("-M , --mainclass Set the name of the main class (extending flash.display.MovieClip or .Sprite)\n"); + printf("-l , --library Include library file . can be an .abc or .swf file.\n"); + printf("-I , --include Add additional include dir .\n"); + printf("-N , --local-with-network Make output file \"local with networking\"\n"); + printf("-L , --local-with-filesystem Make output file \"local with filesystem\"\n"); printf("-T , --flashversion Set target SWF flash version to .\n"); printf("-o , --output Set output file to .\n"); printf("\n"); @@ -151,8 +206,17 @@ void writeSWF(SWF*swf) int main (int argc,char ** argv) { + char buf[512]; + char*currentdir = getcwd(buf, 512); + if(!currentdir) { + as3_warning("Could not determine the current directory"); + } else { + as3_add_include_dir(currentdir); + } + int t; processargs(argc, argv); + as3_setverbosity(verbose); if(!filename) { args_callback_usage(argv[0]); @@ -163,17 +227,12 @@ int main (int argc,char ** argv) //as3_warning("output name not given, writing to %s", outputname); } - as3_setverbosity(verbose); - - char buf[512]; - char*currentdir = getcwd(buf, 512); - if(!currentdir) { - as3_warning("Could not determine the current directory"); + if(!strcmp(filename, ".")) { + as3_parse_directory("."); } else { - as3_add_include_dir(currentdir); + as3_parse_file(filename); } - as3_parse_file(filename); void*code = as3_getcode(); SWF swf; @@ -187,15 +246,16 @@ int main (int argc,char ** argv) TAG*tag = swf.firstTag = swf_InsertTag(0, ST_DOABC); swf_WriteABC(tag, code); - if(as3_getglobalclass()) { + if(!mainclass) + mainclass = as3_getglobalclass(); + if(mainclass) { tag = swf_InsertTag(tag, ST_SYMBOLCLASS); swf_SetU16(tag, 1); swf_SetU16(tag, 0); - swf_SetString(tag, as3_getglobalclass()); + swf_SetString(tag, mainclass); } else { as3_warning("no global public MovieClip subclass"); } - as3_destroy(); @@ -203,6 +263,11 @@ int main (int argc,char ** argv) tag = swf_InsertTag(tag, ST_END); swf_FreeABC(code); + + if(local_with_filesystem) + swf.fileAttributes &= ~FILEATTRIBUTE_USENETWORK; + if(local_with_networking) + swf.fileAttributes |= FILEATTRIBUTE_USENETWORK; writeSWF(&swf); swf_FreeTags(&swf);