Дублирование части экрана
Иногда бывает полезным скопировать часть экрана в другую область. Это легко выполнить используя функцию copy(), текст которой приводится ниже.
/* копирование части экрана в другую область */
void copy(startx,starty,endx,endy,x,y)
int startx,starty; /* верхняя левая координата */
int endx,endy; /* нижняя правая координата области
копирования */
int x,y; /* верхняя левая координата области,
куда будет проводится копирование */
int i,j;
unsigned char c;
for (;startx<endx;startx++,x++)
for (i=starty,j=y;i<endy;i++,j++)
c=read_point(startx,i); /* чтение точки */
mempoint(x,j,c); /* запись ее в новую область */
Как вы могли убедиться, при обращении к функциим в качестве ее аргументов указываются верхняя левая и нижняя правая координаты углов области, которая будет копироваться, и верхняя левая координаты, куда делается копия.
Вы также можете убедится, что с небольшими изменениями функцию copy() можно преобразовать в функцию move(). Функция move() пересылает указанную область в другую и чистит исходное место. Текст функции приводится ниже.
/* Пересылка части экрана в другую область */
void move(startx,starty,endx,endy,x,y)
int startx,starty; /* верхняя левая координата */
int endx,endy; /* нижняя правая координата области
пересылки */
int x,y; /* верхняя левая координата области,
куда будет проводится пересылка */
int i,j;
unsigned char c;
for (;startx<endx;startx++,x++)
for (i=starty;j=y;i<endy;i++,j++)
c=read_point(startx,i); /* чтение точки */
mempoint(startx,i,0); /* стирание старого
изображения */
mempoint(x,j,c); /* запись точки в новую область */