С для профессиональных программистов

       

Функция popup()


А теперь, когда все части созданы, функция popup может быть записана, как это показано здесь.

/* вывести исчезающее меню и вернуть выбор

возвращает -2, если меню не может быть создано

возвращает -1, если пользователь нажал клавишу ESC

в остальных случаях она возвращает номер выбранной

альтернативы, начиная с 0 */

register int i,len;

int endx endy choice;

unsigned int *p;

if((x>24)||(x<0)||(y>79)||(y<0))

printf(" выход за пределы экрана");

return -2;

len=0;

endy=len+2+y;

if((endx+1>24) || (endy+1>79))

printf(" выход за пределы экрана");

return -2;

/* размещение памяти для видео буфера */

/* сохранение части экрана */

void save_video(startx,endx,starty,endy,p);

if(border) draw_border(x,y,endx,endy);

/* ввести выбор пользователя */

choice=get_resp(x,y,count,menu,keys)

void restore_video(startx,endx,starty,endy,p);

free(p);

Как вы можете видеть, popup() проверяет выход за пределы экрана и слишком большой размер меню. Она возвращает -2, если возникла одна из этих ситуаций. Из-за того, что get_resp() возвращает -1, при нажатии клавиши ESC, возвращение этого значения функцией popup следует рассматривать как "уничтожение" меню. Если пользователь сделал выбор, то возвращаемое значение будет в пределах от 0 до count-1 с соответствием первому значению меню 0. Как уже указывалось, popup() использует динамическое размещение памяти для обеспечения временной памяти для информации об экране. Обычно это лучший подход, но вы можете свободно изменить его, если это важно для вашего приложения.



Содержание раздела