The website "dmilvdv.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

Листинг 4

Листинг 4

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

Расширенное меню управления.

 

typedef struct _medium_menu

{

    int id;

    int num_selections;

    SELECTION selection[12];

}MEDIUM_MENU;

 

typedef struct _small_menu

{

    int id;

    int num_selections;

    SELECTION selection[6];

}SMALL_MENU;

 

typedef struct _tiny_menu

{

    int id;

    int num_selections;

    SELECTION selection[3];

}TINY_MENU;

 

/* Это несколько усложняет функцию goto_menu, но не намного */

void goto_menu /* Установить и отобразить активное меню */

(

    int new_menu_id /* идентификатор нового меню */

)

 

{

    MENU * menu;

    int i,j;

    extern MENU * curr_menu;

    menu = findmenu(new_menu_id);

    if(menu == NULL)

    {

        /* ошибка системы */

    }

    else

        curr_menu = menu; /* здесь curr_menu является глобальной или внешней переменной */

    draw_menu();

    return;

}

////////////////////////////////////////

MENU * findmenu

(

    int new_menu_id /* идентификатор нового меню */

)

{

    MENU * ptr;

    int i,j;

 

    /** сначала попытаться найти меню в списке больших меню **/

    for(i = 0; i < MENU_END; i++)

    {

        if(new_menu_id == menu[i].menu_id)

        {

            ptr = (MENU *)&menu[i];

            break;

        }

    }

 

    /** если не нашли, пробуем найти меню в списке коротких меню **/

    if(new_menu_id >= MENU_END)

    {

        for(i=MENU_END+1,j=0; i<MEDIUM_MENU_END; i++, j++)

        {

            if(new_menu_id == medium_menu[j].menu_id)

            {

                ptr = (MENU *)&medium_menu[j];

                break;

            }

        }

        if(new_menu_id >= MEDIUM_MENU_END)

        {

            for(i = MEDIUM_MENU_END+1, j = 0; i < SHORT_MENU_END; i++, j++)

            {

                if(new_menu_id == short_menu[j].menu_id)

                {

                    ptr = (MENU *)&short_menu[j];

                    break;

                }

            }

            if(new_menu_id >= SHORT_MENU_END)

            {

                for(i=SHORT_MENU_END+1,j=0;i < TINY_MENU_END; i++, j++)

                {

                    if(new_menu_id == tiny_menu[j].menu_id)

                    {

                        ptr = (MENU *)&tiny_menu[j];

                        break;

                    }

                }

 

                /** ошибка, если в двух списках соответствия не найдено **/

                if(new_menu_id >= TINY_MENU_END)

                {

                    return(NULL);

                }

            }

        }

    }

    return(ptr);

}

 

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