int wikilib_run(void) { int sleep; long time_now; struct wl_input_event ev; int more_events = 0; unsigned long last_event_time = 0; int rc; /* * test searching code... */ article_buf_pointer = NULL; search_init(); history_list_init(); malloc_status_simple(); print_intro(); #ifndef INCLUDED_FROM_KERNEL if (!load_init_article(idx_init_article)) { display_mode = DISPLAY_MODE_ARTICLE; last_display_mode = DISPLAY_MODE_INDEX; } #endif render_string(SUBTITLE_FONT_IDX, -1, 55, MESSAGE_TYPE_A_WORD, strlen(MESSAGE_TYPE_A_WORD), 0); for (;;) { if (more_events) sleep = 0; else sleep = 1; if (!more_events && display_mode == DISPLAY_MODE_ARTICLE && render_article_with_pcf()) sleep = 0; else if (!more_events && display_mode == DISPLAY_MODE_INDEX && render_search_result_with_pcf()) sleep = 0; else if (!more_events && display_mode == DISPLAY_MODE_HISTORY && render_history_with_pcf()) sleep = 0; if (finger_move_speed != 0) { scroll_article(); sleep = 0; } #ifdef INCLUDED_FROM_KERNEL time_now = get_time_ticks(); if(display_mode == DISPLAY_MODE_INDEX) { if (press_delete_button && get_search_string_len()>0) { sleep = 0; if(time_diff(time_now, start_search_time) > seconds_to_ticks(3.5)) { if (!clear_search_string()) { search_string_changed_remove = true; search_reload_ex(SEARCH_RELOAD_NORMAL); } press_delete_button = false; } else if (time_diff(time_now, start_search_time) > seconds_to_ticks(0.5) && time_diff(time_now, last_delete_time) > seconds_to_ticks(0.25)) { if (!search_remove_char(0)) { search_string_changed_remove = true; search_reload_ex(SEARCH_RELOAD_NO_POPULATE); } last_delete_time = time_now; } } } else if (display_mode == DISPLAY_MODE_RESTRICTED) { if (press_delete_button && get_password_string_len()>0) { sleep = 0; time_now = get_time_ticks(); if(time_diff(time_now, start_search_time) > seconds_to_ticks(3.5)) { clear_password_string(); press_delete_button = false; } else if (time_diff(time_now, start_search_time) > seconds_to_ticks(0.5) && time_diff(time_now, last_delete_time) > seconds_to_ticks(0.25)) { password_remove_char(); last_delete_time = time_now; } } } #endif if (!more_events && display_mode == DISPLAY_MODE_INDEX && fetch_search_result(0, 0, 0)) { sleep = 0; } if (keyboard_key_reset_invert(KEYBOARD_RESET_INVERT_CHECK)) // check if need to reset invert sleep = 0; if (check_invert_link()) // check if need to invert link sleep = 0; if (sleep) { if (time_diff(get_time_ticks(), last_event_time) > seconds_to_ticks(15)) rc = history_list_save(HISTORY_SAVE_POWER_OFF); else rc = history_list_save(HISTORY_SAVE_NORMAL); if (rc > 0) { #ifdef INCLUDED_FROM_KERNEL delay_us(200000); // for some reason, save may not work if no delay #endif } else if (rc < 0) sleep = 0; // waiting for last_event_time timeout to save the history } wl_input_wait(&ev, sleep); more_events = 1; switch (ev.type) { case WL_INPUT_EV_TYPE_CURSOR: handle_cursor(&ev); last_event_time = get_time_ticks(); break; case WL_INPUT_EV_TYPE_KEYBOARD: if (ev.key_event.value != 0) { b_show_scroll_bar = 0; handle_key_release(ev.key_event.keycode); } last_event_time = get_time_ticks(); break; case WL_INPUT_EV_TYPE_TOUCH: handle_touch(&ev); last_event_time = ev.touch_event.ticks; break; default: more_events = 0; break; } } /* never reached */ return 0; }
void handle_password_key(char keycode) { switch (restricted_screen_mode) { case RESTRICTED_SCREEN_FIRST_TIME_PASSWORD: case RESTRICTED_SCREEN_SET_PASSWORD: case RESTRICTED_SCREEN_CONFIRM_PASSWORD: case RESTRICTED_SCREEN_CHECK_PASSWORD: case RESTRICTED_SCREEN_CHANGE_PASSWORD: if (keycode == 'Y') { if (restricted_screen_mode == RESTRICTED_SCREEN_FIRST_TIME_PASSWORD) { password_str_len = 0; keyboard_set_mode(KEYBOARD_PASSWORD_CHAR); enter_password_screen(get_nls_text("set_password")); restricted_screen_mode = RESTRICTED_SCREEN_SET_PASSWORD; } else if (restricted_screen_mode == RESTRICTED_SCREEN_SET_PASSWORD && password_str_len > 0) { restricted_screen_mode = RESTRICTED_SCREEN_CONFIRM_PASSWORD; strcpy(password1, password_string); password_str_len = 0; if (restriction_filter_off == -1) enter_password_screen(get_nls_text("re_enter_password")); else enter_password_screen(get_nls_text("re_enter_new_password")); } else if (restricted_screen_mode == RESTRICTED_SCREEN_CONFIRM_PASSWORD && password_str_len > 0) { if (strcmp(password1, password_string)) { password_str_len = 0; restricted_screen_mode = RESTRICTED_SCREEN_SET_PASSWORD; enter_password_screen(get_nls_text("passwords_not_match")); } else { restriction_filter_off = 0; save_password(1); restricted_screen_mode = RESTRICTED_SCREEN_FILTER_ON_OFF; filter_on_off(); } } else if (password_str_len > 0) { check_password(); } } else if (keycode == WL_KEY_BACKSPACE) { password_remove_char(); } else if (is_supported_search_char(keycode)) { password_add_char(tolower(keycode)); } break; case RESTRICTED_SCREEN_FILTER_ON_OFF: if (keycode == 'Y') { restriction_filter_off = 0; if (init_filtering) { init_filtering = 0; search_set_selection(-1); display_mode = DISPLAY_MODE_INDEX; keyboard_set_mode(wiki_default_keyboard()); repaint_search(); } else { display_mode = DISPLAY_MODE_ARTICLE; display_retrieved_article(saved_idx_article); } } else if (keycode == 'N') { restriction_filter_off = 1; save_password(2); if (init_filtering) { init_filtering = 0; search_set_selection(-1); display_mode = DISPLAY_MODE_INDEX; keyboard_set_mode(wiki_default_keyboard()); repaint_search(); } else { display_mode = DISPLAY_MODE_ARTICLE; display_retrieved_article(saved_idx_article); } } break; case RESTRICTED_SCREEN_FILTER_OPTION: if (keycode == 'Y') { filter_option_to_set = FILTER_OPTION_TO_SET_ON; password_str_len = 0; check_password(); } else if (keycode == 'N') { filter_option_to_set = FILTER_OPTION_TO_SET_OFF; password_str_len = 0; check_password(); } if (keycode == 'P') { password_str_len = 0; keyboard_set_mode(KEYBOARD_PASSWORD_CHAR); enter_password_screen(get_nls_text("enter_old_password")); restricted_screen_mode = RESTRICTED_SCREEN_CHANGE_PASSWORD; } break; default: break; } }