int main(int argc, char *argv[]) { int exit_status = 0; gs_main_instance *minst = gs_main_alloc_instance(gs_malloc_init(NULL)); int code = gs_main_init_with_args(minst, argc, argv); #ifdef RUN_STRINGS { /* Run a list of strings (for testing). */ const char **pstr = run_strings; for (; *pstr; ++pstr) { int exit_code; ref error_object; int code; fprintf(stdout, "{%s} =>\n", *pstr); fflush(stdout); code = gs_main_run_string(minst, *pstr, 0, &exit_code, &error_object); zflush(osp); fprintf(stdout, " => code = %d\n", code); fflush(stdout); if (code < 0) { gs_to_exit(1); return 1; } } } #endif if (code >= 0) code = gs_main_run_start(minst); exit_status = 0; switch (code) { case 0: case e_Info: case e_Quit: break; case e_Fatal: exit_status = 1; break; default: exit_status = 255; } gs_to_exit_with_code(minst->heap, exit_status, code); switch (exit_status) { case 0: exit_status = exit_OK; break; case 1: exit_status = exit_FAILED; break; } return exit_status; }
/* Exit the interpreter */ GSDLLEXPORT int GSDLLAPI gsapi_exit(void *lib) { gs_lib_ctx_t *ctx = (gs_lib_ctx_t *)lib; if (lib == NULL) return gs_error_Fatal; gs_to_exit(ctx->memory, 0); return 0; }