void writefile (int max, options *opt) { FILE *S = fopen("sol.b","r"); FILE *K = fopen("iters.b","r"); FILE *f = fopen("fractal.ppm","w"); int i, j, s, k; fprintf(f, "P3\n%d %d\n%d\n", opt->width, opt->height, max); for (j = 0; j < opt->height; j++) { for (i = 0; i < opt->width; i++) { fscanf(S, "%d", &s); fscanf(K, "%d", &k); method_print(f, s, k, max, opt); } } fclose(f); fclose(S); fclose(K); }
bool patcher_handler(u1 *pc) { codeinfo *code; patchref_t *pr; bool result; #if !defined(NDEBUG) patcher_function_list_t *l; int i; #endif /* define the patcher function */ bool (*patcher_function)(patchref_t *); /* search the codeinfo for the given PC */ code = code_find_codeinfo_for_pc(pc); assert(code); // Enter a mutex on the patcher list. code->patchers->lock(); /* search the patcher information for the given PC */ pr = patcher_list_find(code, pc); if (pr == NULL) os::abort("patcher_handler: Unable to find patcher reference."); if (pr->done) { #if !defined(NDEBUG) if (opt_DebugPatcher) { log_println("patcher_handler: double-patching detected!"); } #endif code->patchers->unlock(); return true; } #if !defined(NDEBUG) if (opt_DebugPatcher) { for (l = patcher_function_list; l->patcher != NULL; l++) if (l->patcher == pr->patcher) break; TRACE_PATCHER_INDENT; printf("patching in "); method_print(code->m); printf(" at %p\n", (void *) pr->mpc); TRACE_PATCHER_INDENT; printf("\tpatcher function = %s <%p>\n", l->name, (void *) (intptr_t) pr->patcher); TRACE_PATCHER_INDENT; printf("\tmachine code before = "); # if defined(ENABLE_DISASSEMBLER) disassinstr((u1*) (void*) pr->mpc); # else printf("%x at %p (disassembler disabled)\n", *((uint32_t*) pr->mpc), (void*) pr->mpc); # endif patcher_depth++; assert(patcher_depth > 0); } #endif /* cast the passed function to a patcher function */ patcher_function = (bool (*)(patchref_t *)) (ptrint) pr->patcher; /* call the proper patcher function */ result = (patcher_function)(pr); #if !defined(NDEBUG) if (opt_DebugPatcher) { assert(patcher_depth > 0); patcher_depth--; TRACE_PATCHER_INDENT; printf("\tmachine code after = "); # if defined(ENABLE_DISASSEMBLER) disassinstr((u1*) (void*) pr->mpc); # else printf("%x at %p (disassembler disabled)\n", *((uint32_t*) pr->mpc), (void*) pr->mpc); # endif if (result == false) { TRACE_PATCHER_INDENT; printf("\tPATCHER EXCEPTION!\n"); } } #endif // Check return value and mangle the pending exception. if (result == false) resolve_handle_pending_exception(true); // XXX This is only preliminary to prevent double-patching. else pr->done = true; code->patchers->unlock(); return result; }