Все функции для иерархических меню показаны здесь вместе с простой программой-образцом и их можно прямо вводить в ваш компьютер.
/* процедура иерархического меню для текстового режима
и простая программа-пример */
#include "dos.h"
#include "stdlib.h"
#define ESC 27
void save_video(),restore_video();
void display_menu(),draw_border();
char far *vid_mem;
struct menu_frame
int startx,endx,starty,endy;
unsigned char *p; /* указатель на информацию экрана */
char **menu; /* указатель на строки меню */
int border; /* рамка включено/выключено */
int count; /* число альтернатив */
int astive; /* активно ли меню сейчас */
frame[MAX_FRAME];
;
;
char *grape_type[]=
"Конкорд",
"кАнадский",
"Томпсон",
"кРасное пламя"
main()
/* во-первых создадим фреймы меню */
make_menu(1,color,"кжоз",4,9,28,BORDER);
int choice1,choice2,selection;
/* активизация окон по мере надобности */ while((choice1=pulldown(0)) != -1)
switch ( choice1 )
case 0 : /* яблоко */
while((choice2=pulldown(1)) != -1)
if(choice2 ==0) selection=pulldown(2);/*красное яблоко */
restore_video(2);
restore_video(1);
break;
case 1 :
case 2 : goto_xy(1,0);
printf("неправильный выбор");
break;
case 3 : /* грейпфрут */
selection=pulldown(3);
restore_video(3);
break;
case 4 :
case 5 : goto_xy(1,0);
printf("неправильный выбор");
break;
restore_video(0);
int pulldown(num)
int vmode,choice;
vmode=video_mode();
if((vmode!=2) && (vmode!=3) && (vmode!=7))
printf(" должен быть 80 символьный текстовый режим");
exit(1);
/* присвоить соответствующий адрес видео памяти */
/* узнать активнсть окна */
if( frame[num].border) draw_worder(num);
return get_resp(num); /* возвратить выбор */