in>=0 && in<2 && bl>=0 && bl<2) {
_COLOR__S=cs ;
_COLOR_F=cf;
_INTENS=in;
_BLINK=bl; //объединение атрибутов цвета в одном байте
_ATTR=_BLINK << 7 | _COLOR_F << 4 | _INTENS << 3 | _COLOR__S;
}
else err_out("Ошибка при вызове set_attr"); }
Программа move_cur — перемещение курсора на п позиций вправо
Используя текущие координаты курсора (_ROW_CUR, _COL_CUR), функция вычисляет строку и столбец новой позиции и с помощью функции set_cur перемещает туда курсор. Если курсор выходит за пределы экрана, то его принудительно устанавливают в верхний левый угол.
void move_cur(int n)
{
int pos;
pos=_ROW_CUR* 80+_COL_CUR+n;
_ROW_CUR=pos/80;
_COL_CUR=pos-_ROW_CUR*8 0;
if(_ROW_CUR > 24)
{
_ROW_CUR=0; _COL_CUR=0;
}
set_cur(_ROW_CUR+1,_COL_CUR+1) ;
}
Программа box_abs — построение прямоугольника с рамкой и тенью
Контуры рамки образуются пробелами, одинарными и/или двойными "линиями" с помощью символов псевдографики. Массивы lu, id, ru и rd заполнены, кодами символов, используемыми для отображения левого верхнего (lu), левого нижнего (id), правого верхнего (ru) и правого нижнего (rd) углов рамки. В массивах horiz и vert находятся коды символов, формирующие горизонтальные и вертикальные линии рамки. По индексу bord из них извлекаются знаки соответствующей окантовки и некоторые из них повторяются rpth раз по горизонтали и rptv раз по вертикали.
Тень создается с помощью строки и столбца пробелов, окрашенных в серый цвет и расположенных со сдвигом на одну позицию относительно нижней и левой (shade=-1) или нижней и правой (shade=1) границ рамки. Внутренность окна заполняется пробелами цветом фона, ранее установленного с помощью функции set_attr.
void box_abs(int row1,int coll,int row2,int col2, int bord,int shade)
// rowl,coll - левый верхний угол,
// row2,co12 - правый нижний угол
// bord - номер типа рамки, от 0 до 4
// shade = -1(тень слева), 0(без), 1(тень справа)