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



         

Программа вычерчивания диаграмм. - часть 8


bit_mask.i >>= 2*bit_position;

/* поиск соответствующего байта в памяти экрана */

index = x*40 + (y>>2);

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

банк */

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

if (!xor)  /* режим наложения */

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

*(ptr + index) = t | color_code;

else  /* режим xor */

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

*(ptr + index) = t ^ color_code;

/* установка видеорежима */

void mode(mode_code)

int mode_code;

union REGS r;

r.h.al = mode_code;

r.h.ah = 0;

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

/* установка курсора в координаты x,y */

void goto_xy(x,y)

int x,y;

union REGS r;

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

r.h.dl = y; /* горизонтальная координата */

r.h.dh = x; /* вертикальная координата */

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

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

/* установка цветов диаграмм */

void palette(pnum)

int pnum;

union REGS r;

r.h.bh = 1; /* код 4 режима */

r.h.bl = pnum;

r.h.ah = 11; /* установка функции цвета */

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

/* сохранение выведенного видеографика */

void save_pic()

char fname[80];

FILE *fp; register int i,j;

char far *ptr = (char far *) 0xB8000000; /* указатель на CGA память */

char far *temp;

unsigned char buf[14][80]; /* для размещения содержимого

экрана */

temp = ptr;

/* сохранение верхней части текущего экрана */

for (i=0;i<14;i++)

for (j=0;j<80;j+=2)

buf[i][j] = *temp; /* четный байт */

buf[i][j+1] = *(temp+8152); /* нечетный байт*/

*temp = 0;

*(temp+8152) = 0; /* чистка верхней части

экрана */

temp++;

goto_xy(0,0);

printf(" Имя файла : ");

gets(fname);

if (!(fp=fopen(fname,"wb")))

printf(" Невозможно открыть файл \n");

return;

temp = ptr;

/* восстановление верхней части экрана */

for (i=0;i<14;i++)

for (j=0;j<80;j+=2)

*temp = buf[i][j];

*(temp+8152) = buf[i][j+1];

temp++;

/* сохранение рисунка в файле */

for (i=0;i<8152;i++)

putc(*ptr,fp); /* четный байт */

putc(*(ptr+8152),fp); /* нечетный байт */

ptr++;

fclose(fp);

 




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