Листинг 3 |
Предыдущая Содержание Следующая |
Расширенная версия mdi().
void mdi() /* интерфейс управления меню */ { char c; MENU *curr_menu = find_menu(MAIN_MENU); int curr_selection = 0; int status; draw_menu(curr_menu, curr_selection); while(TRUE) { c = readch(); // возвращает специальные коды, установленные нами для кнопок со стрелками, перехода по страницам и т.д. switch(c) { case UP_ARROW: if(curr_selection !=0) hilite(FORWARD); break;
case DOWN_ARROW: if(curr_selection < (curr_menu->num_selections-1)) hilite(REVERSE); break;
case ENTER: (*curr_menu->selection[curr_selection].function) (curr_menu->selection[curr_selection].fn_arg); break;
default: if(curr_menu->selection[curr_selection].key_handler != NULL) { if(get_input()) /* 'ложь', если вышли по ESC или CTRL-C, иначе 'истина' */ { status = (*curr_menu->selection[curr_selection].key_handler) (curr_menu->selection[curr_selection].pro_key_fn_arg); } else { redraw_prompt(); } } /* Иначе игнорировать ввод полностью или обратная связь с указанием ошибки для пользователя */ }
int keyedit(int state) { int okay = TRUE; switch(state) { case NAME: if(validate_name(workbuf)) strcpy(global_curr_name,workbuf); else okay = FALSE; break; case LNUM: if(validate_lnum(workbuf)) global_curr_lnum = atoi(workbuf); else okay = FALSE; break; case ADDRESS: if(validate_address(workbuf)) strcpy(global_curr_address,workbuf); else okay = FALSE; break; } return(okay); }
|
Предыдущая Содержание Следующая |