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

       

Скроллинг части экрана


Две совместно используемые функции ROM-BIOS-прерывания позволяют осуществлять скроллинг вперед и назад части экрана. Эти функции были включены в ROM-BIOS для поддержки многооконных интерфейсов. Как вы знаете, когда курсор расположен в двадцать пятой строке и вы нажали клавишу <ВВОД>, то автоматически осуществляется перемещение текста на одну строку вверх с целью отображения новой строки в нижней части экрана. Точно так же, с помощью функций 6 и 7 прерывания ROM-BIOS 10Н, можно осуществить скроллинг лишь части экрана. Функция 6 позволяет выполнить скроллинг в окне вниз (вперед), а функция 7 - вверх (назад).

Обе функции при вызове используют информацию, хранимую в определенных регистрах. Занесите количество строк, на которые будет "прокручиваться" текст (мощность скроллинга) в регистр AL. Номер верхней левой строки, ограничивающей ваше "окно", занесите в регистр CH, а номер верхнего левого столбца - в регистр CL. Номер нижней левой строки занесите в регистр DH, а номер нижнего правого столбца - в регистр DL. В конце запомните в регистре BH атрибуты режима отображения, которые будут определять, как именно будут отображаться в процессе скроллинга новые строки. Функция scroll_window() представлена ниже.

/* Скроллинг в окне вперед и назад */

void     scroll_window(startx,starty,endx,endy,lines,direct)

char      startx,starty;/* верхний левый угол */

char      endx,endy;    /* нижний правый угол */

char      lines;        /* число строк прокрутки */

char      direct;       /* вперед или назад */

union REGS r;

if ( direct == UP ) r.h.ah = 6; /* скроллинг вперед */

else r.h.ah = 7; /* скроллинг вниз (назад) */

r.h.al          =   lines;

r.h.ch         =   starty;

r.h.cl          =   startx;

r.h.dh        =   endy;

r.h.dl          =   endx;

r.h.bh        =   0;     /* режим отображения */

int86(0x10,&r,&r);

Вы можете определить макрос UP как имеющий некоторое значение. Вы также можете определить макрос DOWN, значение которого будет отлично от UP, а затем использовать при необходимости осуществления скроллинга в окне эти макроопределения. Такой прием значительно упростит вашу программу. Функция scroll_window() присваивает регистру ВН значение 0 для сохранения пустых строк, однако вы можете изменить это значение по своему усмотрению.



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