X-Git-Url: http://git.asbjorn.biz/?p=swftools.git;a=blobdiff_plain;f=lib%2Fas3%2Fmain.c;h=a4d0e4885551cf50d685faf62690a1b06ab9c5bc;hp=7e318b4cfaf66f059e98d4f23ddb565391dcfe0f;hb=8bef54dce0a8a53a9b4b42e2491f7f14bfb58575;hpb=14a64135ac5da8e5a4dd0a33635df11e9125bf82 diff --git a/lib/as3/main.c b/lib/as3/main.c index 7e318b4..a4d0e48 100644 --- a/lib/as3/main.c +++ b/lib/as3/main.c @@ -27,57 +27,97 @@ #include "../rfxswf.h" #include "../os.h" #include "files.h" +#include "common.h" #include "tokenizer.h" #include "parser.tab.h" #include "parser.h" +#include "compiler.h" +#include "import.h" -void test_lexer() +void test_lexer(char*filename) { + char*fullfilename = find_file(filename, 1); + enter_file(filename, fullfilename, 0); + FILE*fi = fopen(fullfilename, "rb"); + as3_file_input(fi); while(1) { - int token = avm2_lex(); + int token = as3_lex(); if(token==T_EOF) break; if(token>=32 && token<256) { printf("'%c'\n", token); } else { - printf("%s\n", token2string(token, avm2_lval)); + printf("%s\n", token2string(token, a3_lval)); } } } +extern int a3_debug; int main(int argn, char*argv[]) { char*filename = 0; char buf[512]; - void*code=0; if(argn<=1) { fprintf(stderr, "please supply a filename\n"); exit(1); } - filename=argv[1]; - - add_include_dir(getcwd(buf, 512)); - - char*fullfilename = enter_file(filename, 0); - FILE*fi = fopen(fullfilename, "rb"); - if(!fi) { - perror(fullfilename); - return 1; - } - avm2_set_in(fi); + filename=argv[argn-1]; + +#ifdef BISONDEBUG + a3_debug = 1; //if bison was called with -t +#endif + + as3_add_include_dir(getcwd(buf, 512)); registry_init(); - initialize_state(); - if(argn>2 && !strcmp(argv[2], "-lex")) { - test_lexer(); - return 0; + int t=0; + char*mainclass = 0; + for(t=1;tdata, m->len); + //memfile_close(m); + if(!strcmp(filename, ".")) { + as3_parse_directory("."); + } else { + as3_parse_file(filename); } - avm2_parse(); - code = finalize_state(); - avm2_lex_destroy(); - fclose(fi); + + void*code = as3_getcode(); SWF swf; memset(&swf, 0, sizeof(swf)); @@ -86,15 +126,27 @@ int main(int argn, char*argv[]) swf.movieSize.xmin = swf.movieSize.ymin = 0; swf.movieSize.xmax = 20*20; swf.movieSize.ymax = 10*20; - TAG*tag = swf.firstTag = swf_InsertTag(0, ST_DOABC); + + + TAG*tag = swf.firstTag = swf_InsertTag(0, ST_SETBACKGROUNDCOLOR); + swf_SetU8(tag, 0xff); + swf_SetU8(tag, 0xff); + swf_SetU8(tag, 0xff); + + tag = as3_getassets(tag); + + tag = swf_InsertTag(tag, ST_DOABC); + if(!swf.firstTag && tag) swf.firstTag = tag; swf_WriteABC(tag, code); - if(globalclass) { + if(!mainclass) + mainclass = as3_getglobalclass(); + + if(mainclass) { tag = swf_InsertTag(tag, ST_SYMBOLCLASS); swf_SetU16(tag, 1); swf_SetU16(tag, 0); - swf_SetString(tag, globalclass); - free(globalclass);globalclass=0; + swf_SetString(tag, mainclass); } else { printf("Warning: no global public MovieClip subclass\n"); }