void GameManager::init() { #ifdef CHOWDREN_USER_PROFILER user_log.open("log.txt", "w"); #endif #ifdef CHOWDREN_USE_PROFILER PROFILE_SET_DAMPING(0.0); #endif frame = &static_frames; #ifdef CHOWDREN_IS_DEMO idle_timer_started = false; global_time = show_build_timer = reset_timer = manual_reset_timer = 0.0; #endif #ifdef CHOWDREN_USE_JOYTOKEY simulate_count = 0; axis_moved = false; last_axis = -1; deadzone = 0.4f; pad_selected = false; pad_disconnected = false; for (int i = 0; i < CHOWDREN_BUTTON_MAX-1; i++) key_mappings[i] = -1; for (int i = 0; i < CHOWDREN_AXIS_MAX-1; i++) { axis_pos_mappings[i] = -1; axis_neg_mappings[i] = -1; axis_values[i] = 0; } #endif platform_init(); media.init(); set_window(false); // application setup preload_images(); reset_globals(); setup_keys(this); // setup random generator from start cross_srand((unsigned int)platform_get_global_time()); fps_limit.start(); set_framerate(FRAMERATE); int start_frame = 0; #if defined(CHOWDREN_IS_AVGN) start_frame = 0; #elif defined(CHOWDREN_IS_HFA) start_frame = 0; #elif defined(CHOWDREN_IS_FP) player_died = false; lives = 3; start_frame = 0; // values->set(1, 2); // values->set(12, 2); #elif defined(CHOWDREN_IS_NAH) platform_set_scale_type(2); // start_frame = 3; // set_local("fre"); // values->set(13, 25); // strings->set(23, "OBJETS"); // strings->set(9, "-fre"); #else start_frame = 0; #endif #ifdef NDEBUG set_frame(0); #else set_frame(start_frame); #endif }
image_id load_program(char const *path, void **_entry) { status_t status; image_t *image; KTRACE("rld: load_program(\"%s\")", path); rld_lock(); // for now, just do stupid simple global locking preload_images(); TRACE(("rld: load %s\n", path)); status = load_image(path, B_APP_IMAGE, NULL, NULL, &gProgramImage); if (status < B_OK) goto err; if (gProgramImage->find_undefined_symbol == NULL) gProgramImage->find_undefined_symbol = find_undefined_symbol_global; status = load_dependencies(gProgramImage); if (status < B_OK) goto err; // Set RTLD_GLOBAL on all libraries including the program. // This results in the desired symbol resolution for dlopen()ed libraries. set_image_flags_recursively(gProgramImage, RTLD_GLOBAL); status = relocate_dependencies(gProgramImage); if (status < B_OK) goto err; inject_runtime_loader_api(gProgramImage); remap_images(); init_dependencies(gProgramImage, true); // Since the images are initialized now, we no longer should use our // getenv(), but use the one from libroot.so find_symbol_breadth_first(gProgramImage, SymbolLookupInfo("getenv", B_SYMBOL_TYPE_TEXT), &image, (void**)&gGetEnv); if (gProgramImage->entry_point == 0) { status = B_NOT_AN_EXECUTABLE; goto err; } *_entry = (void *)(gProgramImage->entry_point); rld_unlock(); gProgramLoaded = true; KTRACE("rld: load_program(\"%s\") done: entry: %p, id: %" B_PRId32 , path, *_entry, gProgramImage->id); return gProgramImage->id; err: KTRACE("rld: load_program(\"%s\") failed: %s", path, strerror(status)); delete_image(gProgramImage); if (report_errors()) { // send error message gErrorMessage.AddInt32("error", status); gErrorMessage.SetDeliveryInfo(gProgramArgs->error_token, -1, 0, find_thread(NULL)); _kern_write_port_etc(gProgramArgs->error_port, 'KMSG', gErrorMessage.Buffer(), gErrorMessage.ContentSize(), 0, 0); } _kern_loading_app_failed(status); rld_unlock(); return status; }