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



         

Простая программа, использующая процедуру pulldown - часть 2


/* вычисление размеров */

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

if(strlen(menu[i]) > len) len=strlen(menu[i]);

endx=count+1+x;

p=(unsigned int *)malloc((endx-x+1)*(endy-y+1));

if(!p) exit(1); /* Вы можете здесь сами обработать ошибку */

frame[num].startx=x;

frame[num].starty=y;

frame[num].p = p;

frame[num].border = border;

frame[num].count = count;

return 1;

void display_menu(num)

int num;

for(i=0;i<frame[num].count;i++,x++)

write_string(x,frame[num].starty+1,m[i],NORM_VID);

int  num ;

write_char(frame[num].endx  ,frame[num].endy  ,217,NORM_VID);

goto_xy(frame[num].endx  ,frame[num].starty); putchar(192);

get_resp(num)

union inkey

char ch[2];

int i;

 c;

x=frame[num].startx+1;

y=frame[num].starty+1;

goto_xy(x,y);

write_string(x,y,frame[num].menu[0],REV_VID);

/* вернуть выбор в номальный режим */

write_string(x+arrow_choice,y,

frame[num].menu[arrow_choice],norm_vid);

else  /* специальная клавиша */

switch(c.ch[1])

case 72 : arrow_choice--; /* стрелка вниз */

break;

case 80 : arrow_choice++; /* стрелка вверх */

break;

if(arrow_choice==frame[num].count) arrow_choice=0;

if(arrow_choice<0) arrow_choice=frame[num].count-1;

/* подсветить выбранную опцию */ goto_xy(x+arrow_choice,y); write_string(x+arrow_choice,y,

/* вывод строки с определенным атрибутом */

void write_string(x,y,p,attrib)

int x,y;

char *p;

int attrib;

register int i,j;

char far *v;

v=vid_mem;

v += (x*160) + y*2;

for(i=y; *p; i++)

*v++ =*p++; /* запись символа */

*v++ =attrib; /* запись атрибута */

/* запись символа с определенным аттрибутом */

void write_char(x,y,ch,attrib)

int x,y;

char ch;

int attrib;

void save_video(num)

int num;

void restore_video(num)

register int i,j;

char far *v, far *t;

char *buf_ptr;

buf_ptr=frame[num].p;

v=vid_mem;

t=v;

for(i=frame[num].starty;i<frame[num].endy;i++)

for(j=frame[num].startx;j<frame[num].endx;j++)




Содержание  Назад  Вперед