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

       

Сохранение копии экрана в дисковом файле.


Ни в DOS, ни в OS/2 нет утилит, сходных с утилитой печати копии экрана, позволяющей сохранять текущее содержимое экрана дисплея в дисковом файле. В этом разделе вы найдете пояснение, как можно создать программу, которая выполняла бы именно эту функцию.

Эта программа использует ROM-BIOS-прерывание 10Н, функцию 8 для чтения символа из текущей позиции курсора, после чего этот символ записывается в файл на диске. Как и в предыдущем разделе, вы опять встретитесь с функцией goto_xy(), которая в этом случае используется для перемещения курсора последовательно по всем строкам экрана, начиная с левого верхнего угла экрана до правого нижнего угла.

Имя файла, в котором будет храниться копия экрана, указываетя в качестве аргумента программы. Если, к примеру, вы назовете свою программу, копирующую экран на диск, screen, то представленная ниже командная строка приведет к созданию копии экрана в файле с именем scr.sav:

C> screen scr.sav

А вот исходный текст самой программы копирования:

/* Эта программа копирует содержимое экрана вашего

дисплея в файл, имя которого указано в командной

строке

*/

#include "dos.h"

#include "stdio.h"

void save_screen(),goto_xy();

main(argc,argv)

int argc;

char *argv[];

if ( argc != 2 )



printf(" используйте формат : screen <имя файла>");

exit(1);

save_screen(argv[1]);

/* сохранение содержимого экрана в дисковом файле */

void save_screen(fname)

char *fname;

FILE *fp; union REGS r;

register char x,y;

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

printf(" Файл не может быть открыт ");

exit(1);

for (y=0;y<25;y++)

for (x=0;x<80;x++)

goto_xy(x,y);

r.h.ah = 8; /* чтение символа */

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

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

putc(r.h.al,fp); /* выдача (печать) символа */

fclose(fp);

/* Перемещение курсора в позицию (x,y) */

void goto_xy(x,y)

int x,y;

union REGS r;

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

r.h.dl = x; /* координата столбца */

r.h.dh = y; /* координата строки */

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

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

Создаваемый файл представляет собой стандартный ASCII файл, который может быть отредактирован и распечатан как обычный текстовый файл. Программа позволяет записывать лишь символы, отображенные на экране, но не позволяет сохранить соответствующие атрибуты отображения символов. Однако дополнить программу для того, чтобы она записывала и атрибуты символов несложно, и вы при желании можете это сделать самостоятельно.



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