Практика программирования (Бейсик, Си, Паскаль)
Для удобства общения между функциями
Для удобства общения между функциями пакета определены следующие глобальные переменные:
PAGE — байт с номером активной страницы (начальное значение — 0);
1 _ATTR — байт текущих цветовых атрибутов выводимого текста;
_COLR__S — байт с номером цвета выводимых символов;
_COLOR_F — байт с номером цвета фона;
__INTENS — байт с признаком обычной (0) или повышенной (1) яркости;
_BLINK — байт с признаком мерцания (0 — мерцания нет);
_ROW_CUR — байт с номером текущей строки;
_COL_CUR — байт с номером текущего столбца.
С целью сокращения обозначений и приближения их к идентификаторам регистров на Ассемблере введены следующие подстановки:
union REGS reg;
#define АН reg.h.ah
#define AL reg.h.al
#define BH reg.h.bh
#define BL reg.h.bl
#define CH reg.h.ch
#define CL reg.h.cl
#define CX reg.x.ex
#define DL reg.h.dl
#define DH reg.h.dl
#define INT10h int86 ( 0x10 , ®, ®)
Программа ask_attr — опрос цветовых атрибутов
Если вы забыли, как выглядит байт цветовых атрибутов, то загляните в раздел 3.5.5.
int ask_attrtint *cs,int *cf,int *in,int *bl)
// cs - цвет символов, от 0 до 7
// cf - цвет фона, от 0 до 7
//in - яркость, 0 или 1
// b1 - признак мерцания, 0 или 1
{
АН=8;
//Подфункция опроса цветовых атрибутов
BH=_PAGE;
//Номер текущей страницы
INT10h ;
//Чтение текущего символа и атрибутов
_ATTR=AH;
//Байт цветовых атрибутов
__COLOR__S=_ATTR & 0x07;
//Цвет символа
_COLOR_F=(_ATTR & 0x70) >> 4;
//Цвет фона
_INTENS=(_ATTR & 0x08) >> 3;
//Бит интенсивности
_BLINK=(_ATTR & 0x80) >> 7;
//Бит мерцания
*cs=_COLOR__S;
//возврат цвета символов
*cf=_COLOR_F;
//возврат цвета фона
*in= INTENS;
//возврат признака яркости
*b1=_BLINK;
//возврат признака мерцания
return ( ATTR);
//возврат всех атрибутов цвета
}
Программа set_attr — установка цветовых атрибутов
void set_attr(int cs,int cf,int in,int b1) {
//анализ атрибутов цвета на допустимость
if(cs>=0 && cs<8 && cf>=0 && cf<8 &&
Содержание
Назад
Вперед