Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практика звіт.doc
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
840 Кб
Скачать
☆

Лабораторна робота №4

Тема: Засоби редагування.

Розвиваюча мета заняття: Розвивати творчість та культуру написання програм. Розвивати логічне мислення, увагу, уяву, кмітливість.

Виховна мета заняття: Виховувати охайність, культуру спілкування, ввічливість, дисциплінованість, наполегливість у навчанні, дбайливе ставлення до програмного забезпечення та ПК.

Хід виконання роботи

  1. Написав функції для копіювання, стирання, і переміщення примітивів.

Висновок: навчився створювати функції для керування малюнком(копіювання, переміщення, стирання.)

Лабораторна робота №5

Тема: Збереження і читання зображень.

Розвиваюча мета заняття: Розвивати творчість та культуру написання програм. Розвивати логічне мислення, увагу, уяву, кмітливість.

Виховна мета заняття: Виховувати охайність, культуру спілкування, ввічливість, дисциплінованість, наполегливість у навчанні, дбайливе ставлення до програмного забезпечення та ПК.

Хід виконання роботи

  1. Написав функції для збереження і завантаження зображень.

  1. Додав у програму гарячі клавіші ф3 і ф2.

Висновок: Навчився писати функції для збереження і завантаження зображень в середовищі Turbo C.

Лістинг програми

#include <graphics.h>

#include <conio.h>

#include <bios.h>

#include <stdlib.h>

#include <string.h>

#include <math.h>

#include <dos.h>

#include <stdio.h>

int key, x, y, but, nb, nbut=0, col, xm, ym, scr, pmen, x1, y1, x2, y2;

char txh[80];

long int xn, yn, xk, yk, buf, xp, yp;

void *p;

char fname[12];

FILE *F;

void button(int x1, int y1, int x2, int y2){

setcolor(15);//zadanie cveta

line(x1,y2,x1,y1);//vertykalna liniya sleva

line(x1,y1,x2,y1);//goryzontalna liniya sverhu

setcolor(0);//zadanie cveta

line(x2,y1,x2,y2);//vertykalna linia sprava

line(x2,y2,x1,y2);//goryzontalna linia cnuzy

}

void menu(){

char *txmenu[]={"Point","Line","Rect","Circle","Text","Erase","Copy","Move"};//text nadpisej razmeschen v masive txmenu

setcolor(1);//color

for(int i=0; i<8; i++){

button(550,40+30*i,630,60+30*i);

outtextxy(560,45+30*i,txmenu[i]);

}

}

void mouse(int m){

int mode;

if (m==0) mode=2; else mode=m;

asm{

mov ax,mode

int 33h}

}

void fillbar(int x1, int y1, int x2, int y2, int col)

{

setfillstyle(1,col);//style & color

bar(x1,y1,x2,y2);//zakrashenyi prymougolnykc

}

void palette(int xp, int yp){

int i,j,cp=0;//cp color=black;

for(i=0;i<4;i++)//cykl po strokam

for(j=0;j<4;j++)//cykl po stolbikam

{fillbar(xp+2+20*j,yp+1+15*i,xp+2+20*(j+1),yp+1+15*(i+1),cp);cp++;}

setcolor(15);

outtextxy(xp+5,yp+70,"COLOR->");//vyvid napysu

fillbar(xp+67,yp+67,xp+83,yp+81,cp);

}

void initgr(){

int gd=DETECT,gm;

initgraph(&gd,&gm,"");

}

void screen(){

fillbar(0,0,640,20,7);//verhnya panel

fillbar(0,22,538,458,7);//osnovnyi ekran

fillbar(540,22,640,458,7);//panel menu

fillbar(0,460,640,480,7);//nyzhnya panel

setcolor(4);//cvet nadpisei

outtextxy(10,5,"F2 - Save F3 - Load Esc - Exit");//vyvid napysu na ekran

}

void mStatus(){

int mbut, mx, my;

asm{

mov ax, 3h

int 33h

mov mx,cx

mov my,dx

mov mbut,bx

}

x=mx;

y=my;

but=mbut;

}

void mousemove(int xm, int ym)

{

asm{

mov ax,4

mov cx,xm

mov dx,ym

int 33h}}

void indmouse(int xind, int yind){

char str[3];

if (x!=xm||y!=ym)

{

xm=x;ym=y;

fillbar(xind, yind, xind+65, yind+15,7);

setcolor(4);

itoa(x,str,10);outtextxy(xind+5,yind+5,str);

itoa(y,str,10);outtextxy(xind+40,yind+5,str);

} }

void count(){

if (but==0) nb=0;

if ((but==1)&&(nb==0)) {nbut++;nb=1;}

}

int mousecoord(int x1, int y1, int x2, int y2){

mStatus();

if(x>=x1&&x<=x2&&y>y1&&y<=y2) return 1;

else return 0;}

void selcol(int xpal, int ypal){

if (mousecoord(xpal,ypal,xpal+85,ypal+62)&&but==1)

{mouse(0);

col=getpixel(x,y);

fillbar(xpal+68,ypal+68,xpal+82,ypal+80,col);

mouse(1);}}

void kursmenu(int pmen, int ykn){

int ykm;

if (pmen>0)

{ykm=ykn+30*(pmen-1);

setwritemode(1);

setcolor(15);

line(550,ykm,630,ykm); line(630,ykm+1,630,ykm+19);

line(550,ykm+1,550,ykm+19);line(550,ykm+20,630,ykm+20);

setwritemode(0);

}}

void help(char tx[80]){

int i;

if (strcmp(txh,tx)!=0){for (i=0;i<80;i++) txh[i]=tx[i];

fillbar(5,460,638,475,1);

setcolor(15);

outtextxy(10,463,tx);}

}

void point(){

if (nbut==0) help("Enter X,Y");//if left button never use, then show help

if (nbut==1) {mouse(0); setcolor(col); putpixel(x,y,col); mouse(1); nbut=0;}

}

void selmenu(int ymen, int np){

int i;

if(mousecoord(3,26,535,432)) scr=1; else scr=0;

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

if(mousecoord(550,ymen+30*i,630,ymen+20+30*i) &&but==1)

{pmen=i+1; mouse(0); menu(); kursmenu(pmen,ymen); mouse(1); nbut=0;break;}

}

void mark(int xm,int ym){

mouse (0);

setcolor(15);setwritemode(1);

line(xm-2,ym,xm+2,ym);

line(xm,ym-2,xm,ym+2);

setwritemode(0);

mouse(1);

}

void line_(){

if (nbut==0) help("Enter first position of line x1, y1");

if (nbut==1) {x1=x;y1=y;mark(x1,y1); nbut=2;}

if (nbut==2) help("Enter the end of line x2, y2");

if (nbut==3) {mouse(0);mark(x1,y1),setcolor(col);line(x1,y1,x,y);mouse(1);nbut=0;}

}

void rect(int xn, int yn, int xk, int yk){

mouse(0);

setcolor(12);setwritemode(1);

setlinestyle(0,0,0);

rectangle(xn,yn,xk,yk);

setwritemode(0);

mouse(1);}

void rect_(){

if (nbut==0) {mouse(1); help("Enter first position of rectangle");}

if (nbut==1) {x1=x;y1=y;x2=x;y2=y; help("Finish it!");nbut++;}

if (nbut==2) {mouse(0);rect(x1,y1,x2,y2);x2=x;y2=y;rect(x1,y1,x2,y2);}

if (nbut==3) {mouse(0);setcolor(col);rectangle(x1,y1,x2,y2);nbut++;mouse(1);}

if (nbut==4) {mouse(1);graphdefaults();nbut=0;}

}

void ramkolo(float r1,int kol){

setwritemode(1);

setcolor(kol);

setviewport(0,22,538,458,1);

circle(x1,y1-22,r1);

setwritemode(0);

graphdefaults();

}

void kolo(){

float r;

if(nbut==0) help("Vvedit zentr kola x,y");

if(nbut==1) {x1=x;y1=y;mark(x1,y1);nbut=2;}

if(nbut==2) {help("Vvedit radius kola xr,yr");

mouse(0);

r=sqrt((x1-x)*(x1-x)+(y1-y)*(y1-y));

ramkolo(r,0);

r=sqrt((x1-x)*(x1-x)+(y1-y)*(y1-y));

ramkolo(r,15);

mouse(1);}

if(nbut==3){

mouse(0);

setcolor(col);

r=sqrt((x1-x)*(x1-x)+(y1-y)*(y1-y));

setviewport(0,22,538,458,1);

circle(x1,y1-22,r);

mouse(1);

nbut=0;}

}

void kurs(int x,int y){

setcolor(0);

line(x,y,x+8,y);

delay(50);

setcolor(15);

line(x,y,x+8,y);

delay(50);

}

void tekst(){

char tx[2],ch;

int xs,ys,i=0;

if(nbut==0) help("Vvedit pochatok tekstu x,y");

if(nbut==1) {help("Pry zakinchenni nazmit knopku Tab");

xs=x,ys=y;

mouse(0);

while(ch!=9){

if(kbhit()) ch=getch();

else ch=0;

tx[0]=ch;

tx[1]=0;

if(ch>31 && xs+8*i<525 && ys<460){

setcolor(col);

outtextxy(xs+8*i,ys-8,tx);i++;}

if(ch==13){i=0;xs=x;ys+=10;}

if(xs+8*i>524) {i=0;xs=x;ys+=10;}

if(ch==8) {i--;fillbar(xs+8*i,ys-8,xs+8*(i+1),ys,15);}

kurs(xs+8*i,ys+1);

}

}

nbut=0;

mouse(1);

}

void sterty(){

if(nbut==0) {mouse(1); help("Vvedit zvidky udalyaty");}

if(nbut==1) {x1=x;y1=y;x2=x;y2=y; help("Vvedit po sho udalyaty");nbut=2;}

if(nbut==2) {mouse(0);rect(x1,y1,x2,y2);x2=x;y2=y;rect(x1,y1,x2,y2);}

if(nbut==3) {mouse(1);fillbar(x1,y1,x2,y2,7);}

if(nbut==0) {mouse(1);graphdefaults();nbut=0;}

}

void savebar (int xn,int yn, int xk,int yk){

int size;

if(buf==0){

size=imagesize(xn,yn,xk,yk);

p=malloc(size);

mouse(0);

getimage(xn,yn,xk,yk,p);

buf=1;

mouse(1);

}}

void move(){

if(nbut==0) {mouse(1); help ("First position");}

if(nbut==1) {xp=x;yp=y;x2=x;y2=y;help("Finish it");nbut++;}

if(nbut==2) {mouse(0);rect(xp,yp,x2,y2);x2=x;y2=y;rect(xp,yp,x2,y2);}

if(nbut==3) {mouse(0);rect(xp,yp,x2,y2);savebar(xp+1,yp+1,x-1,y-1);fillbar(xp,yp,x2,y2,15);nbut++;mouse(1);x1=x-xp;y1=y-yp;}

if(nbut==4) {help("Put the image");mouse(1);}

if(nbut==5) {mouse(0);if(x+x1<538 && y+y1<458){

fillbar(xp,yp,xp+x1,yp+y1,7);

xp=x;yp=y;putimage(x,y,p,0);}

mouse(1);graphdefaults();nbut=4;}

}

void copy(){

if(nbut==0) {mouse(1);help("Vvedit zvidky kopiyuvaty");}

if(nbut==1) {xp=x;yp=y;x2=x;y2=y;help("Vvedit po sho copiyuvaty");nbut++;}

if(nbut==2) {mouse(0);rect(xp,yp,x2,y2);x2=x;y2=y;rect(xp,yp,x2,y2);}

if(nbut==3) {mouse(0);rect(xp,yp,x2,y2);savebar(xp+1,yp+1,x-1,y-1);nbut++;mouse(1);}

if(nbut==4) {help("Vvedit kuda kopiyuvaty");mouse(1);}

if(nbut==5) {mouse(0);x1=xp-x2;y1=yp-x2;

if(x-x1<538 && y-y1<458)

putimage(x,y,p,0);mouse(1);graphdefaults();nbut=4;

}

}

//----------------------------------save&load------------------------

void obem(int X1,int Y1,int X2,int Y2){

setcolor(7);

line(X1,Y2,X1,Y1);

line(X1,Y1,X2,Y1);

setcolor(0);

line(X2,Y1,X2,Y2);

line(X2,Y2,X1,Y2);

}

void inputfname(int fl){

char num;

char str[]={46,117,115,116,0};

int i;

for(i=0;i!=12;i++) fname[i]=0;

if (fl) help("Enter name of img");

else help("Load img, enter name");

i=0;

setcolor(15);

outtextxy(500,465,"file:");

while (num!=13){

if(kbhit()) num=getch();

else num=0;

setcolor(15);

line(540+8*i,474,548+8*i,474); delay(100);

setcolor(1);

line(540+8*i,474,548+8*i,474); delay(100);

setcolor(15);

if (num>32)

{fname[i]=num;outtextxy(540,465,fname);i++;}

if (num==8)

{fname[i]=0;i--;if(i<0)i=0;fillbar(540+8*i,465,548+8*i,473,1);}

}

strcat(fname,str);

outtextxy(608,465,str);

}

void save(){

char pro[4];

int xf,yf,cf,zap=273,i=0;

double q=0;

fillbar(500,460,640,475,1);

inputfname(1);

mouse(0);

F=fopen(fname,"wb");

if (F==NULL){

help("Cant save");

fillbar(zap-2,1,540,19,1);

nbut=0;pmen=0;mouse(1);

fillbar(450,460,640,475,1);

return ;

}

fillbar(zap-2,3,538,18,9);

button(zap-2,2,540,19);

help("In process..");

for(yf=23;yf<458;yf++){

for(xf=0;xf<538;xf++){

cf=getpixel(xf,yf);

if(cf!=15) fprintf(F,"%3d %3d %2d |",xf,yf,cf);

}

if(yf%10==0){

fillbar(zap+i,5,zap+i+3,16,12);

obem(zap+i,5,zap+i+3,16);

i+=5;

gcvt(q,3,pro);

fillbar(490,4,538,17,9);

setcolor(15);

outtextxy(496,7,pro);

outtextxy(530,7,"%");

q+=2.38;

}

}

fclose(F);

nbut=0;pmen=0;mouse(1);

fillbar(zap-2,1,540,19,1);

fillbar(5,460,500,475,1);

}

void load(){

int xf,yf,cf,zap=273,i=0,toch=0;

double q=0;

char pro[4];

fillbar(500,460,640,475,1);

inputfname(0);

mouse(0);

fillbar (0,22,538,458,15);

F=fopen(fname, "rb");

if (F==NULL){

help("Sorry, cant find it");

fillbar(zap-2,1,540,19,1);

nbut=0;pmen=0;mouse(1);

fillbar(450,460,640,475,1);

return;

}

help("Please, wait");

while (!feof(F)){

fscanf(F, " %3d %3d %2d |",&xf,&yf,&cf);

putpixel(xf,yf,cf);

if (toch%6000==0) {

fillbar(zap+i,5,zap+i+3,16,12);

obem(zap+i,5,zap+i+3,16);

i+=5;

gcvt(q,3,pro);

fillbar(490,4,538,17,9);

setcolor(15);

outtextxy(496,7,pro);

outtextxy(530,7,"%");

q+=2.563;}

toch+=1;

}

fillbar(zap-2,1,540,19,1);

fclose(F);

nbut=0;pmen=0;mouse(1);

}

//----------------------------------save&load------------------------

void disp(){

switch (pmen){

case 1: point(); break;

case 2: line_(); break;

case 3: rect_(); break;

case 4: kolo(); break;

case 5: tekst(); break;

case 6: sterty(); break;

case 7: copy(); break;

case 8: move(); break;

} }

//-----------------------------VOID MAIN(){}---------------------------

void main (){

initgr();

screen();

menu();

palette(545,375);

mouse(1);//show mouse

while (key!=27)

{

if(kbhit())key=getch();

else key=0;

mStatus();

if(key==60) save();

if(key==61) load();

indmouse(545,5);

selcol(545,375);

selmenu(40,10);

if (mousecoord(0,22,538,458)) count();

disp();

delay(1);

}

closegraph();

}

//---------------------------------------------------------------------#include <graphics.h>

#include <conio.h>

#include <bios.h>

#include <stdlib.h>

#include <string.h>

#include <math.h>

#include <dos.h>

#include <stdio.h>

int key, x, y, but, nb, nbut=0, col, xm, ym, scr, pmen, x1, y1, x2, y2, ch;

char txh[80];

long int xn, yn, xk, yk, buf, xp, yp;

void *p;

char fname[12];

FILE *F;

void button(int x1, int y1, int x2, int y2){

setcolor(15);//zadanie cveta

line(x1,y2,x1,y1);//vertykalna liniya sleva

line(x1,y1,x2,y1);//goryzontalna liniya sverhu

setcolor(0);//zadanie cveta

line(x2,y1,x2,y2);//vertykalna linia sprava

line(x2,y2,x1,y2);//goryzontalna linia cnuzy

}

void menu(){

char *txmenu[]={"Point","Line","Rect","Circle","Text","Erase","Copy","Move"};//text nadpisej razmeschen v masive txmenu

setcolor(1);//color

for(int i=0; i<8; i++){

button(550,40+30*i,630,60+30*i);

outtextxy(560,45+30*i,txmenu[i]);

}

}

void mouse(int m){

int mode;

if (m==0) mode=2; else mode=m;

asm{

mov ax,mode

int 33h}

}

void fillbar(int x1, int y1, int x2, int y2, int col)

{

setfillstyle(1,col);//style & color

bar(x1,y1,x2,y2);//zakrashenyi prymougolnykc

}

void palette(int xp, int yp){

int i,j,cp=0;//cp color=black;

for(i=0;i<4;i++)//cykl po strokam

for(j=0;j<4;j++)//cykl po stolbikam

{fillbar(xp+2+20*j,yp+1+15*i,xp+2+20*(j+1),yp+1+15*(i+1),cp);cp++;}

setcolor(15);

outtextxy(xp+5,yp+70,"COLOR->");//vyvid napysu

fillbar(xp+67,yp+67,xp+83,yp+81,cp);

}

void initgr(){

int gd=DETECT,gm;

initgraph(&gd,&gm,"");

}

void screen(){

fillbar(0,0,640,20,7);//verhnya panel

fillbar(0,22,538,458,7);//osnovnyi ekran

fillbar(540,22,640,458,7);//panel menu

fillbar(0,460,640,480,7);//nyzhnya panel

setcolor(4);//cvet nadpisei

outtextxy(10,5,"F2 - Save F3 - Load Esc - Exit");//vyvid napysu na ekran

}

void mStatus(){

int mbut, mx, my;

asm{

mov ax, 3h

int 33h

mov mx,cx

mov my,dx

mov mbut,bx

}

x=mx;

y=my;

but=mbut;

}

void mousemove(int xm, int ym)

{

asm{

mov ax,4

mov cx,xm

mov dx,ym

int 33h}}

void indmouse(int xind, int yind){

char str[3];

if (x!=xm||y!=ym)

{

xm=x;ym=y;

fillbar(xind, yind, xind+65, yind+15,7);

setcolor(15);

itoa(x,str,10);outtextxy(xind+5,yind+5,str);

itoa(y,str,10);outtextxy(xind+40,yind+5,str);

} }

void count(){

if (but==0) nb=0;

if ((but==1)&&(nb==0)) {nbut++;nb=1;}

}

int mousecoord(int x1, int y1, int x2, int y2){

mStatus();

if(x>=x1&&x<=x2&&y>y1&&y<=y2) return 1;

else return 0;}

void selcol(int xpal, int ypal){

if (mousecoord(xpal,ypal,xpal+85,ypal+62)&&but==1)

{mouse(0);

col=getpixel(x,y);

fillbar(xpal+68,ypal+68,xpal+82,ypal+80,col);

mouse(1);}}

void kursmenu(int pmen, int ykn){

int ykm;

if (pmen>0)

{ykm=ykn+30*(pmen-1);

setwritemode(1);

setcolor(15);

line(550,ykm,630,ykm); line(630,ykm+1,630,ykm+19);

line(550,ykm+1,550,ykm+19);line(550,ykm+20,630,ykm+20);

setwritemode(0);

}}

void help(char tx[80]){

int i;

if (strcmp(txh,tx)!=0){for (i=0;i<80;i++) txh[i]=tx[i];

fillbar(5,460,638,475,7);

setcolor(15);

outtextxy(10,463,tx);}

}

void point(){

if (nbut==0) help("Enter X,Y");//if left button never use, then show help

if (nbut==1) {mouse(0); setcolor(col); putpixel(x,y,col); mouse(1); nbut=0;}

}

void selmenu(int ymen, int np){

int i;

if(mousecoord(3,26,535,432)) scr=1; else scr=0;

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

if(mousecoord(550,ymen+30*i,630,ymen+20+30*i) &&but==1)

{pmen=i+1; mouse(0); menu(); kursmenu(pmen,ymen); mouse(1); nbut=0;break;}

}

void mark(int xm,int ym){

mouse (0);

setcolor(15);setwritemode(1);

line(xm-2,ym,xm+2,ym);

line(xm,ym-2,xm,ym+2);

setwritemode(0);

mouse(1);

}

void line_(){

if (nbut==0) help("Enter first position of line x1, y1");

if (nbut==1) {x1=x;y1=y;mark(x1,y1); nbut=2;}

if (nbut==2) help("Enter the end of line x2, y2");

if (nbut==3) {mouse(0);mark(x1,y1),setcolor(col);line(x1,y1,x,y);mouse(1);nbut=0;}

}

void rect(int xn, int yn, int xk, int yk){

mouse(0);

setcolor(1);setwritemode(1);

setlinestyle(0,0,0);

rectangle(xn,yn,xk,yk);

setwritemode(0);

mouse(1);}

void rect_(){

if (nbut==0) {mouse(1); help("Enter first position of rectangle");}

if (nbut==1) {x1=x;y1=y;x2=x;y2=y; help("Finish it!");nbut++;}

if (nbut==2) {mouse(0);rect(x1,y1,x2,y2);x2=x;y2=y;rect(x1,y1,x2,y2);}

if (nbut==3) {mouse(0);setcolor(col);rectangle(x1,y1,x2,y2);nbut++;mouse(1);}

if (nbut==4) {mouse(1);graphdefaults();nbut=0;}

}

void ramkolo(float r1,int kol){

setwritemode(1);

setcolor(kol);

setviewport(0,22,538,458,1);

circle(x1,y1-22,r1);

setwritemode(0);

graphdefaults();

}

void kolo(){

float r;

if(nbut==0) help("Vvedit zentr kola x,y");

if(nbut==1) {x1=x;y1=y;mark(x1,y1);nbut=2;}

if(nbut==2) {help("Vvedit radius kola xr,yr");

mouse(0);

// r=sqrt((x1-x)*(x1-x)+(y1-y)*(y1-y));

ramkolo(r,15);

mouse(1);}

if(nbut==3){

mouse(0);

setcolor(col);

r=sqrt((x1-x)*(x1-x)+(y1-y)*(y1-y));

setviewport(0,22,538,458,1);

circle(x1,y1-22,r);

mouse(1);

nbut=0;}

}

void kurs(int x,int y){

setcolor(0);

line(x,y,x+8,y);

delay(50);

setcolor(15);

line(x,y,x+8,y);

delay(50);

}

void tekst(){

char tx[2],ch;

int xs,ys,i=0;

if(nbut==0) help("Vvedit pochatok tekstu x,y");

if(nbut==1) {help("Pry zakinchenni nazmit knopku Tab");

xs=x,ys=y;

mouse(0);

while(ch!=9){

if(kbhit()) ch=getch();

else ch=0;

tx[0]=ch;

tx[1]=0;

if(ch>31 && xs+8*i<525 && ys<460){

setcolor(col);

outtextxy(xs+8*i,ys-8,tx);i++;}

if(ch==13){i=0;xs=x;ys+=10;}

if(xs+8*i>524) {i=0;xs=x;ys+=10;}

if(ch==8) {i--;fillbar(xs+8*i,ys-8,xs+8*(i+1),ys,15);}

kurs(xs+8*i,ys+1);

}

}

nbut=0;

mouse(1);

}

void sterty(){

if(nbut==0) {mouse(1); help("Vvedit zvidky udalyaty");}

if(nbut==1) {x1=x;y1=y;x2=x;y2=y; help("Vvedit po sho udalyaty");nbut=2;}

if(nbut==2) {mouse(0);rect(x1,y1,x2,y2);x2=x;y2=y;rect(x1,y1,x2,y2);}

if(nbut==3) {mouse(1);fillbar(x1,y1,x2,y2,7);}

if(nbut==0) {mouse(1);graphdefaults();nbut=0;}

}

void savebar (int xn,int yn, int xk,int yk){

int size;

if(buf==0){

size=imagesize(xn,yn,xk,yk);

p=malloc(size);

mouse(0);

getimage(xn,yn,xk,yk,p);

buf=1;

mouse(1);

}}

void move(){

if(nbut==0) {mouse(1); help ("First position");}

if(nbut==1) {xp=x;yp=y;x2=x;y2=y;help("Finish it");nbut++;}

if(nbut==2) {mouse(0);rect(xp,yp,x2,y2);x2=x;y2=y;rect(xp,yp,x2,y2);}

if(nbut==3) {mouse(0);rect(xp,yp,x2,y2);savebar(xp+1,yp+1,x-1,y-1);fillbar(xp,yp,x2,y2,15);nbut++;mouse(1);x1=x-xp;y1=y-yp;}

if(nbut==4) {help("Put the image");mouse(1);}

if(nbut==5) {mouse(0);if(x+x1<538 && y+y1<458){

fillbar(xp,yp,xp+x1,yp+y1,7);

xp=x;yp=y;putimage(x,y,p,0);}

mouse(1);graphdefaults();nbut=4;}

}

void copy(){

if(nbut==0) {mouse(1);help("Vvedit zvidky kopiyuvaty");}

if(nbut==1) {xp=x;yp=y;x2=x;y2=y;help("Vvedit po sho copiyuvaty");nbut++;}

if(nbut==2) {mouse(0);rect(xp,yp,x2,y2);x2=x;y2=y;rect(xp,yp,x2,y2);}

if(nbut==3) {mouse(0);rect(xp,yp,x2,y2);savebar(xp+1,yp+1,x-1,y-1);nbut++;mouse(1);}

if(nbut==4) {help("Vvedit kuda kopiyuvaty");mouse(1);}

if(nbut==5) {mouse(0);x1=xp-x2;y1=yp-x2;

if(x-x1<538 && y-y1<458)

putimage(x,y,p,0);mouse(1);graphdefaults();nbut=4;

}

}

//----------------------------------save&load------------------------

void inputfname(){

char num;

int i;

for (i=0;i!=12;i++) fname[i]=0;

help("Input File Name");

i=0;

while (num!=13)

{num=getch();

if (num>32) {fname[i]=num;outtextxy(320,462,fname);i++;}

if(ch==8){i--;fillbar(320+8*i,462,328+8*i,470,15);}

}

}

void save(){

int xp, yp, cp;

inputfname();

mouse(0);

F=fopen(fname,"wb");

for (yp=25;yp<450;yp++)

{

for (xp=6;xp<534;xp++)

{

cp=getpixel(xp,yp);

if(cp!=7) fprintf(F,"%d %d %d ",xp,yp,cp);

}

fillbar(3,yp,5,yp+2,50);

}

fclose(F);

nbut=0;pmen=0;mouse(1);

fillbar(3,25,7,453,7);

}

void load()

{

int xp,yp,cp;

inputfname();

mouse(0);

if((F=fopen(fname,"rb"))==NULL) help("Cant open File");

else {

F=fopen(fname,"rb");

while (!feof(F))

{

fscanf(F,"%d %d %d ",&xp,&yp,&cp);

putpixel(xp,yp,cp);

}}

fclose(F);

nbut=0;pmen=0;mouse(1);

}

//----------------------------------save&load------------------------

void disp(){

switch (pmen){

case 1: point(); break;

case 2: line_(); break;

case 3: rect_(); break;

case 4: kolo(); break;

case 5: tekst(); break;

case 6: sterty(); break;

case 7: copy(); break;

case 8: move(); break;

} }

//-----------------------------VOID MAIN(){}---------------------------

void main (){

initgr();

screen();

menu();

palette(545,375);

mouse(1);//show mouse

while (key!=27)

{

if(kbhit())key=getch();

else key=0;

mStatus();

if(key==60) save();

if(key==61) load();

indmouse(545,5);

selcol(545,375);

selmenu(40,10);

if (mousecoord(0,22,538,458)) count();

disp();

delay(1);

}

closegraph();

}

//---------------------------------------------------------------------