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

       

Отображение диаграмм на экране дисплея.


Если вы сохранили построенную диаграмму в файле, то всегда можете повторно получить изображение данной диаграммы. Для этой цели служит программа SHOW, описанная в данном разделе. Программа выводит диаграмму, находящуюся в файле, имя файла задается в виде аргумента команды. Например, чтобы вывести диаграмму, находящуюся в файле backlog, необходимо ввести команду

show backlog

Программа show                     использует                      функцию                 load_pic(),

предназначенную  для  изображения  диаграмм на экране.  (Вы также

можете использовать  эту  программу  для  отображения  на  экране

дисплея  других  графических образов,  предварительно созданных и

записанных в файл.)

/* Простейшая программа восстановления графических образов */

#include "stdio.h"

#include "dos.h"

void load_pic(),mode(),palette(),goto_xy();

main(argc,argv)

int argc;

char *argv[];

if (argc != 2)

printf(" Обращение: показать <имя файла>");



exit(1);

mode(4);

palette(0);

load_pic(argv[1]);

getch();

mode(3);

/* загрузка графического изображения */

void load_pic(fname)

char *fname;

FILE *fp; register int i,j;

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

char far *temp;

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

экрана */

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

goto_xy(0,0);

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

return;

/* загрузка изображения из файла */

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

*ptr = getc(fp); /* четный байт */

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

ptr++;

fclose(fp);

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

void mode(mode_code)

int mode_code;

union REGS r;

r.h.al = mode_code;

r.h.ah = 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);

/* установка курсора в координаты 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);



Содержание раздела