int search_menu_list(const char *pattern, menu_info *m) { int save = 0; int i; if(pattern != NULL) { m->regexp = strdup(pattern); if(search_menu(m, m->pos) != 0) { draw_menu(m); move_to_menu_pos(m->pos, m); return 1; } draw_menu(m); } for(i = 0; i < search_repeat; i++) switch(m->match_dir) { case NONE: save = search_menu_forwards(m, m->pos + 1); break; case UP: save = search_menu_backwards(m, m->pos - 1); break; case DOWN: save = search_menu_forwards(m, m->pos + 1); break; default: break; } return save; }
ITEM * search_menu (MENU * menu, int initial_direction) { ITEM *result_item = NULL; switch (initial_direction) { case REQ_SCR_DPAGE: result_item = search_menu_forwards (menu); break; case REQ_SCR_UPAGE: result_item = search_menu_backwards (menu); break; default: break; } return result_item; }
int search_menu_list(const char pattern[], menu_data_t *m, int print_errors) { menu_state_t *const ms = m->state; const int do_search = (pattern != NULL || ms->matches == NULL); int save = 0; int i; if(pattern != NULL) { replace_string(&ms->regexp, pattern); } if(do_search) { /* Reactivate match highlighting on search. */ ms->search_highlight = 1; if(search_menu(ms, m->pos, print_errors) != 0) { draw_menu(ms); move_to_menu_pos(m->pos, ms); return -1; } draw_menu(ms); } for(i = 0; i < ms->search_repeat; ++i) { if(ms->backward_search) { save = search_menu_backwards(ms, m->pos - 1); } else { save = search_menu_forwards(ms, m->pos + 1); } } return save; }