void DllLibCurlGlobal::Unload() { CSingleLock lock(m_critSection); if (--g_curlReferences == 0) { if (!IsLoaded()) return; // close libcurl global_cleanup(); CURL_LIB_BASE_CLASS::Unload(); #ifdef _WIN32 WSACleanup(); #endif } /* CheckIdle will clear this one up */ if(g_curlReferences == 1) g_curlTimeout = CTimeUtils::GetTimeMS(); }
enum plugin_status plugin_start (const void *parameter) { int btn; rb->mkdir (DEFAULT_SAVE_DIR); global_setup (); #ifdef GBN_TEST run_tests (); return PLUGIN_OK; #endif if (!(parameter && load_game (parameter))) { if (parameter) { rb->splashf (2 * HZ, "Loading %s failed.", (char *) parameter); } if (!load_game (DEFAULT_SAVE)) { rb->strcpy (save_file, DEFAULT_SAVE); if (!setup_game (MAX_BOARD_SIZE, MAX_BOARD_SIZE, 0, 0)) { return PLUGIN_ERROR; } } } else { /* game loaded */ if (rb->strcmp (save_file, DEFAULT_SAVE)) { /* delete the scratch file if we loaded a game and it wasn't * from the scratch file */ rb->remove (DEFAULT_SAVE); } } draw_screen_display (); autosave_counter = 0; for (;;) { btn = rb->button_get_w_tmo (HZ * 30); if (disable_shutdown) { /* tell rockbox we're not idle */ rb->reset_poweroff_timer (); } bool is_idle = false; switch (btn) { #if defined(GBN_BUTTON_NAV_MODE) case GBN_BUTTON_NAV_MODE: case GBN_BUTTON_NAV_MODE | BUTTON_REPEAT: if (nav_mode == NAV_MODE_TREE) { nav_mode = NAV_MODE_BOARD; rb->splash (2 * HZ / 3, "board navigation mode"); draw_screen_display (); } else { nav_mode = NAV_MODE_TREE; rb->splash (2 * HZ / 3, "tree navigation mode"); draw_screen_display (); } break; #endif #if defined(GBN_BUTTON_ADVANCE) case GBN_BUTTON_ADVANCE: case GBN_BUTTON_ADVANCE | BUTTON_REPEAT: if (has_more_nodes_sgf ()) { if (!redo_node_sgf ()) { rb->splash (2 * HZ, "redo failed"); } draw_screen_display (); } break; #endif #if defined(GBN_BUTTON_RETREAT) case GBN_BUTTON_RETREAT: case GBN_BUTTON_RETREAT | BUTTON_REPEAT: if (has_prev_nodes_sgf ()) { if (!undo_node_sgf ()) { rb->splash (3 * HZ / 2, "Undo Failed"); } draw_screen_display (); } break; #endif case GBN_BUTTON_PLAY: if (play_mode == MODE_PLAY || play_mode == MODE_FORCE_PLAY) { if (!play_move_sgf (cursor_pos, current_player)) { rb->splash (HZ / 3, "Illegal Move"); } } else if (play_mode == MODE_ADD_BLACK) { if (!add_stone_sgf (cursor_pos, BLACK)) { rb->splash (HZ / 3, "Illegal"); } } else if (play_mode == MODE_ADD_WHITE) { if (!add_stone_sgf (cursor_pos, WHITE)) { rb->splash (HZ / 3, "Illegal"); } } else if (play_mode == MODE_REMOVE) { if (!add_stone_sgf (cursor_pos, EMPTY)) { rb->splash (HZ / 3, "Illegal"); } } else if (play_mode == MODE_MARK) { if (!add_mark_sgf (cursor_pos, PROP_MARK)) { rb->splash (HZ / 3, "Couldn't Mark"); } } else if (play_mode == MODE_CIRCLE) { if (!add_mark_sgf (cursor_pos, PROP_CIRCLE)) { rb->splash (HZ / 3, "Couldn't Mark"); } } else if (play_mode == MODE_SQUARE) { if (!add_mark_sgf (cursor_pos, PROP_SQUARE)) { rb->splash (HZ / 3, "Couldn't Mark"); } } else if (play_mode == MODE_TRIANGLE) { if (!add_mark_sgf (cursor_pos, PROP_TRIANGLE)) { rb->splash (HZ / 3, "Couldn't Mark"); } } else if (play_mode == MODE_LABEL) { if (!add_mark_sgf (cursor_pos, PROP_LABEL)) { rb->splash (HZ / 3, "Couldn't Label"); } } else { rb->splash (HZ, "mode not implemented"); } draw_screen_display (); break; case GBN_BUTTON_RIGHT: case GBN_BUTTON_RIGHT | BUTTON_REPEAT: #if defined(GBN_BUTTON_NAV_MODE) if (nav_mode == NAV_MODE_TREE) { if (has_more_nodes_sgf ()) { if (!redo_node_sgf ()) { rb->splash (2 * HZ, "Redo Failed"); } draw_screen_display (); } } else { #endif cursor_pos = WRAP (EAST (cursor_pos)); draw_screen_display (); #if defined(GBN_BUTTON_NAV_MODE) } #endif break; case GBN_BUTTON_LEFT: case GBN_BUTTON_LEFT | BUTTON_REPEAT: #if defined(GBN_BUTTON_NAV_MODE) if (nav_mode == NAV_MODE_TREE) { if (has_prev_nodes_sgf ()) { if (!undo_node_sgf ()) { rb->splash (2 * HZ, "Undo Failed"); } draw_screen_display (); } } else { #endif cursor_pos = WRAP (WEST (cursor_pos)); draw_screen_display (); #if defined(GBN_BUTTON_NAV_MODE) } #endif break; case GBN_BUTTON_DOWN: case GBN_BUTTON_DOWN | BUTTON_REPEAT: cursor_pos = WRAP (SOUTH (cursor_pos)); draw_screen_display (); break; case GBN_BUTTON_UP: case GBN_BUTTON_UP | BUTTON_REPEAT: cursor_pos = WRAP (NORTH (cursor_pos)); draw_screen_display (); break; case GBN_BUTTON_MENU: if (do_main_menu ()) { save_game (DEFAULT_SAVE); global_cleanup (); return PLUGIN_OK; } draw_screen_display (); break; #if defined(GBN_BUTTON_CONTEXT) case GBN_BUTTON_CONTEXT: do_context_menu (); draw_screen_display (); break; #endif #if defined(GBN_BUTTON_NEXT_VAR) case GBN_BUTTON_NEXT_VAR: case GBN_BUTTON_NEXT_VAR | BUTTON_REPEAT: { int temp; if ((temp = next_variation_sgf ()) >= 0) { draw_screen_display (); rb->splashf (2 * HZ / 3, "%d of %d", temp, num_variations_sgf ()); draw_screen_display (); } else { if (num_variations_sgf () > 1) { rb->splashf (HZ, "Error %d in next_variation_sgf", temp); } draw_screen_display (); } break; } #endif case BUTTON_NONE: is_idle = true; default: if (rb->default_event_handler (btn) == SYS_USB_CONNECTED) { return PLUGIN_USB_CONNECTED; } break; }; if (is_idle && autosave_dirty) { ++autosave_counter; if (autosave_time != 0 && autosave_counter / 2 >= autosave_time) /* counter is in 30 second increments, autosave_time is in * minutes */ { DEBUGF("autosaving\n"); rb->splash(HZ / 4, "Autosaving..."); save_game(DEFAULT_SAVE); draw_screen_display(); autosave_counter = 0; } } else { autosave_counter = 0; } } return PLUGIN_OK; }