Листинг 3

Предыдущая  Содержание  Следующая V*D*V

Расширенная версия 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);

}

 

 

Предыдущая  Содержание  Следующая