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




Простейшая тестовая программа - часть 3


int x,y,r,c;

while (r)

circle(x,y,r,c);

r--;

/* Запись точки в CGA/EGA */

void mempoint(x,y,color_code)

int x,y,color_code;

union mask

char c[2];

int i;

 bit_mask;

int i,index,bit_position;

unsigned char t;

char xor; /* "исключающее ИЛИ" цвета в случае его

изменения */

char far *ptr=(char far *) 0xB8000000; /* точка в памяти

CGA */ bit_mask.i=0xFF3F;                 /* 11111111 00111111 в

двоичном виде */

if (x<0 || x>199 || y<0 || y>319) return;

xor=color_code & 128;                                /* проверка, устанавливался ли

режим "исключающего ИЛИ" */ color_code=color_code & 127;     /* маска старших битов */

/*  Установка маски битов и битов режима цвета

в правую позицию */

bit_position=y%4; /* вычисление нужной позиции в байте */

color_code<<=2*(3-bit_position); /* сдвиг кода цвета

в нужную позицию */ bit_mask.i>>=2*bit_position; /* сдвиг битовой маски в

нужную позицию */

/* определение требуемого байта в памяти терминала */

index=x*40+(y%4);

if (x%2) index+=8152; /* если нечетный, используется

второй блок */

/* Запись цвета */

if (!xor)   /* режим изменения цвета */

t=*(ptr+index) & bit_mask.c[0];

*(ptr+index)=t|color_code;

else

t=*(ptr+index) | (char)0;

*(ptr+index)=t & color_code;




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