int main(int argc, char *argv[]) { return (output_main(argc, argv)); }
/* ** Output the initialisation program for a Mercury executable, the *_init.c ** file. */ static int output_init_program(void) { int filenum; int num_bunches; int i; do_path_search(files, num_files); output_headers(); for (filenum = 0; filenum < num_files; filenum++) { process_file(files[filenum]); } printf("\n"); for (i = 0; i < mercury_env_var_next; i++) { printf("MR_Word %s%s = 0;\n", envvar_prefix, mercury_env_vars[i]); } if (need_initialization_code) { printf("#define MR_MAY_NEED_INITIALIZATION\n\n"); } std_and_special_modules = MR_NEW_ARRAY(const char *, std_module_next + special_module_next); for (i = 0; i < std_module_next; i++) { std_and_special_modules[i] = std_modules[i]; } for (i = 0; i < special_module_next; i++) { std_and_special_modules[std_module_next + i] = special_modules[i]; } num_bunches = output_sub_init_functions(PURPOSE_INIT, std_and_special_modules, std_module_next + special_module_next); output_main_init_function(PURPOSE_INIT, num_bunches); num_bunches = output_sub_init_functions(PURPOSE_TYPE_TABLE, std_and_special_modules, std_module_next + special_module_next); output_main_init_function(PURPOSE_TYPE_TABLE, num_bunches); num_bunches = output_sub_init_functions(PURPOSE_DEBUGGER, std_modules, std_module_next); output_main_init_function(PURPOSE_DEBUGGER, num_bunches); num_bunches = output_sub_init_functions(PURPOSE_COMPLEXITY, std_modules, std_module_next); output_main_init_function(PURPOSE_COMPLEXITY, num_bunches); num_bunches = output_sub_init_functions(PURPOSE_PROC_STATIC, std_and_special_modules, std_module_next + special_module_next); output_main_init_function(PURPOSE_PROC_STATIC, num_bunches); num_bunches = output_sub_init_functions(PURPOSE_THREADSCOPE_STRING_TABLE, std_modules, std_module_next); output_main_init_function(PURPOSE_THREADSCOPE_STRING_TABLE, num_bunches); num_bunches = output_sub_init_functions(PURPOSE_REQ_INIT, req_init_modules, req_init_module_next); output_main_init_function(PURPOSE_REQ_INIT, num_bunches); num_bunches = output_sub_init_functions(PURPOSE_REQ_FINAL, req_final_modules, req_final_module_next); output_main_init_function(PURPOSE_REQ_FINAL, num_bunches); output_main(); if (num_errors > 0) { fputs("/* Force syntax error, since there were */\n", stdout); fputs("/* errors in the generation of this file */\n", stdout); fputs("#error \"You need to remake this file\"\n", stdout); if (output_file_name != NULL) { (void) fclose(stdout); (void) remove(output_file_name); } return EXIT_FAILURE; } return EXIT_SUCCESS; }