static void category_destroy(struct category *cat) { variables_destroy(cat->first); FREE(cat->file); FREE(cat); }
int main(int argc, char **argv) { int c; const char *output_name = DEFAULT_OUTPUT_NAME; const char *game_name = DEFAULT_GAME_NAME; int automatic_metadata = 1; char *srcbase; gbasm_filename = argv[0]; while((c = getopt(argc, argv, "ho:n:m")) != -1) { switch(c) { case 'h': help(); return 1; case 'o': output_name = optarg; break; case 'n': game_name = optarg; break; case 'm': automatic_metadata = 0; break; } } if(optind >= argc) { gbasm_error("no input files"); return 1; } input_filename = argv[optind]; src = read_file(input_filename); srcbase = src; buffer_init(&binary); /* make pass 1 */ pass = 1; yyparse(); /* reset everything and make pass 2 */ src = srcbase; yylloc.first_column = 1; yylloc.last_column = 1; yylloc.first_line = 1; yylloc.last_line = 1; binary.write_pos = 0; pass = 2; yyparse(); if(automatic_metadata) write_metadata(game_name); write_binary_to_file(output_name); /* clean up a bit */ free(srcbase); variables_destroy(); free(binary.data); return 0; }