Восстановление экрана
Восстановление экрана после сделанного выбора из меню, заключается просто в записи предварительно запомненной информации назад в видео память. Для того, чтобы сделать это, используйте прерывание 16, функцию 9, которая требует, чтобы символ был в AL, аттрибут в BL, видео страница в ВН, а количество записываемых символов в CX (в нашем случае 1). Функция restore_video(), описанная здесь, помещает информацию из буфера, на который указывает buf_ptr, на экран, заданный начальными и конечными координатами X и Y.
/* восстановление части экрана */
int startx,endx,starty,endy;
union REGS r;
register int i,j;
for(i=starty;i<endy;i++)
for(j=startx;j<endx;j++)
goto_xy(j,i);
r.h.ah=9; /* функция записи символа */
r.h.bh=0; /* видео страница */
r.x.cx=1; /* число повторений символа */
r.h.al=*buf_ptr++; /* символ */
r.h.bl=*buf_ptr++; /* атрибут */
*buf_ptr++ = int86(0x10,&r,&r);
Как и другие функции поддержки меню, измененная restore_video показанная здесь, преобразована для работы с фреймами. Поэтому функции restore_video() теперь передается только номер меню, что делает интерфейс более очевидным.
/* восстановление части экрана */
int num;