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



         

Отображение строки в определенном цвете.


Отображение строки в определенном цвете не является столь трудной задачей, как вам может казаться на первый взгляд, если вы используете функции записи символа, которые используют, в свою очередь, возможности BIOS и видеопамяти (ROM-BIOS). ROM-BIOS прерывание 10Н, функция 9 позволяет отобразить текущий символ (один!) в позиции курсора и его атрибуты. Проблема состоит лишь в перемещении курсора по записываемой вами строке, но это должна осуществлять непосредственно ваша подпрограмма.

В соответствии с этим возникает, во-первых, необходимость определения текущей позиции курсора. Для этого используется функция read_cursor_xy(), представленная ниже. Эта функция использует ROM-BIOS-прерывание 10Н, функцию 3, для чтения текущих координат позиции курсора X и Y. Координаты позиции курсора возвращаются в качестве значений аргументов функции.

/* Чтение текущих координат позиции курсора */

void read_cursor_xy(x,y)

char *x,*y;

union REGS r;

r.h.ah = 3;  /* чтение текущей позиции курсора */

r.h.bh = 0;  /* видеостраница */

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

*y = r.h.dl;

*x = r.h.dh;

После определения координат текущей позиции курсора, функция, которая выполняет печать строки, должна осуществить перемещение курсора к следующему символу, с тем, чтобы используя ROM-BIOS-прерывание напечатать его. Для перемещения курсора целесообразно использовать функцию goto_xy(), которая была уже рассмотрена ранее и приводится в этой главе для полноты изложения материала.

/* Перемещение курсора в позицию, специфицированную

координатами X и Y

*/

void goto_xy (x,y)

int x,y;

union REGS r;

r.h.ah = 2; /* функция адресации курсора */

r.h.dl = x; /* координата столбца */

r.h.dh = y; /* координата строки */

r.h.bh = 0; /* видеостраница */

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

 

Функция color_puts(), представленная ниже, отображает специфицированную пользователем строку в указанном цвете.

/* Печать строки в цвете   */

void color_puts(s,color)

char *s;  /* строка */

char color; /* цвет строки */




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