Sơ đồ khối trên hình 5. trình bày hai cổng 8 bit (A và B) và hai cổng 4 bit (CU và CL) bộ điện tuyến dữ liệu, và logic điều khiển. Hình 5.9 (b) trình bày một sơ đồ đơn giản hóa nhưng mở rộng của cấu trúc bên trong, chứa một thanh ghi điểu khiển. Sơ đồ khối này chứa tất cả các phần tử của một thiết bị lập trình; cổng C thực hiện chức năng tương tự chức năng của thanh ghi trạng
96 trang |
Chia sẻ: Dung Lona | Lượt xem: 1488 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Giao tiếp máy tính với vi xử lý 8085, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
start = clock();
do
{
fread(&c,1,1,f);
end = clock();
}while(c!='\''&&(period=(end - start) / CLK_TCK)<10);
if(period>=10) goto Error;
fseek(f,-5,SEEK_CUR);
fread(buf,4,1,f);
buf[4]='\0';
HideMouse();
strcpy(End_hex,buf);
strcat(buf," Hex");
outtextxy(170,178,buf);
for (FindPos=3;FindPos>=0;FindPos--)
for(FindValue=0;FindValue<22;FindValue++)
if(buf[FindPos]==KyTu_Hex[FindValue])
Value2+=pow(16,(3-FindPos))*Gtri_Dec[FindValue];
End_address=(unsigned int)Value2;
Value1=Value2-Value1+1;
sprintf(Total,"%0.0f bytes",Value1);
outtextxy(160,198,Total);
outtextxy(260,250,buf);
ShowMouse();
while(0)
{
Error:
strcpy(buf,"error");
setfillstyle(SOLID_FILL,CYAN);
HideMouse();
bar(155,155,245,210);
outtextxy(200,158,buf);
outtextxy(200,178,buf);
outtextxy(200,198,buf);
ShowMouse();
}
fcloseall();
}
}
else
{
OutMessage("");
}
}
}
}
if(kkkk==27)
{
HideMouse();
if(!OutError("Do you want to quit ?"))
kkkk=0;
ShowMouse();
}
}while(kkkk!=27);
}
//---------------------------------------------------------
int TestPressedButton(int x,LPEVENT lpEvent)//kiem tra cac nut
{
if(lpEvent->Msg==1)
{
for(int i=0;i<x;i++)
if(But[i].Left()Posx&&But[i].Top()Posy&&But[i].Right()>=lpEvent->Posx&&But[i].Bottom()>=lpEvent->Posy)
{
HideMouse();
But[i].PressButton();
delay(100);
But[i].OutButton();
if(i==1)
{
if(OutError("Do you want to quit ?")==0)
return -1;
closegraph();
exit(1);
}
ShowMouse();
return i;
}
}
return -1;
}
//---------------------------------------------------------
int TestPressTexbox(int x,LPEVENT lpEvent,char layra[],unsigned *attribp)
{
*attribp=0;
if(lpEvent->Msg==1)
{
for(int i=0;i<x;i++)
if(Box[i].Left()Posx&&Box[i].Top()Posy&&Box[i].Right()>=lpEvent->Posx&&Box[i].Bottom()>=lpEvent->Posy)
{
HideMouse();//giau chuot de khong bi vet lem mau o vi tri chuot
char LastName[100];
Box[i].GetS(LastName);
OutMessage("Enter a file name. Press Enter to finish, Esc to ignore.");
Box[i].Path();//lay Path vao bien S cua TEXTBOX
Box[i].OutTextBox();
Box[i].GetS(layra);//lay ra text da nhap vao
//tao chuan cho chuoi Path
if(layra[strlen(layra)-1]=='>')//gat bo dau \> sau thu muc nhung van giu lai doi voi o dia
if(layra[strlen(layra)-2]=='\\')
if(layra[strlen(layra)-3]==':')//dang a:\>
layra[strlen(layra)-1]='\0';//ra a:\
else //dang a:\fname\>
layra[strlen(layra)-2]='\0';//ra dang a:\fname
else
layra[strlen(layra)-1]='\0';//bo dau >
if(layra[strlen(layra)-1]=='\\')//gat bo dau \ sau thu muc nhung van giu lai doi voi o dia
if(layra[strlen(layra)-2]!=':')//dang a:\fname\
layra[strlen(layra)-1]='\0';
if(layra[strlen(layra)-1]==':')
if(strlen(layra)==2)//dang a:
strcat(layra,"\\");//ra a:\
int NotExist=_dos_getfileattr(layra, attribp);
int m=strlen(layra)-1;
while(layra[m]!='\\')//dem so ky tu thuoc ve phan Path
m--;
for(int n=0;n<m;n++)//doi thanh chu hoa duong dan
if(layra[n]>='a'&&layra[n]<='z')
layra[n]=toupper(layra[n]);
Box[i].GetS_in(layra);
if(i==0)//chon Open file
{
if(*attribp==16)
{
m=strlen(layra);
while(layra[--m]!='\\')//doi sang chu hoa ten cua thu muc
layra[m]=toupper(layra[m]);
if(layra[1]==':'&&layra[0]!=LastName[0])
setdisk(toupper(layra[0])-'A');
chdir(layra);//vao them mot cap thu muc
if(layra[strlen(layra)-1]!='\\')
strcat(layra,"\\");
Box[0].GetS_in(layra);
Box[0].OutTextBox();
OutMessage("Click mouse to chose action");
return 0;
}
if (NotExist == 0)
{
return 0;
}
else
{
OutMessage("File does not exist.");
Box[0].GetS_in(LastName);
Box[0].OutTextBox();
return 1;
}
}//end if Open
}
}
return -1;
}
//---------------------------------------------------------
int TestPressList(LIST L,LPEVENT lpEvent,char s[],unsigned *attrib,char *typ)
{
int k=0;
if(lpEvent->Msg==1)
if(L.Left()Posx&&L.Top()Posy&&L.Right()>=lpEvent->Posx&&L.Bottom()>=lpEvent->Posy)
{
OutMessage("Open File Name");
delay(100);//neu khong thi khong the putimage, khong thoat khoi bang list duoc
k=L.Press(s,&Box[0],attrib,DiskName,&DName,typ);
}
return k;
}
//---------------------------------------------------------
II.CLASS BUTTON.HPP
#if !defined __BUTTON__
#define __BUTTON__
class BUTTON
{
private:
int l,t,r,b;//toa do box
int Color;
char S[100];
public:
void InitButton(int x1,int y1,int x2,int y2,int color,char s[]);
void OutButton();
void PressButton();
int Left() {return l;}
int Right() {return r;}
int Top() {return t;}
int Bottom() {return b;}
};
#endif
III.MODULE BUTTON.CPP
#include
#include
#include "button.hpp"
//---------------------------------------------------------
void BUTTON::InitButton(int x1,int y1,int x2,int y2,int color,char s[])
{
l=x1;
t=y1;
r=x2;
b=y2;
Color=color;
strcpy(S,s);
}
//---------------------------------------------------------
void BUTTON::OutButton()
{
setfillstyle(SOLID_FILL,Color);
bar(l,t,r,b);
setcolor(WHITE);
line(l,t,r,t);
line(l,t,l,b);
setcolor(BLACK);
line(r,t,r,b);
line(l,b,r,b);
setcolor(BLUE);
int x=l+(r-l-textwidth(S))/2,y=t+(b-t-textheight(S))/2;
outtextxy(x,y,S);
}
//---------------------------------------------------------
void BUTTON::PressButton()
{
setcolor(BLACK);
line(l,t,r,t);
line(l,t,l,b);
setcolor(WHITE);
line(r,t,r,b);
line(l,b,r,b);
}
//---------------------------------------------------------
IV. CLASS DISKLIST.HPP
#include "textbox.hpp"
#include "mouse.h"
#if !defined __DISKLIST__
#define __DISLIST__
extern char Disk(char *s);
extern int ChosenDisk(char *s,/*TEXTBOX *Box,*/char PreDisk,char CurDisk);
extern LPEVENT CheckChooseDisk(char *DiskName,char *DName,LPEVENT lpEvent,int x,int y);
extern char *FileType(TEXTBOX *b);
#endif
V.MODULE DISKLIST.CPP
#include
#include
#include
#include
#include
#include
#include
#include
//
#include "disklist.hpp"
char Disk(char *s)//kiem tra co bao nhieu o dia trong may, luu ten cac o dia vao chuoi s, tra ve ten o dia hien hanh
{
int save,disk, disks;
int equip_check;
char c[4];
s[0]='\0';
save = getdisk();
equip_check = biosequip();
equip_check >>= 6;
equip_check = (equip_check & 3) + 1;//dem so o dia mem
for (disk = 0;disk < 26;++disk)
{
setdisk(disk);
if (disk == getdisk())
{
sprintf(c,"%c",disk +'A');
strcat(s,c);
}
}
setdisk(save);
if(equip_check==1&&s[1]=='B')//neu chi co ot o dia mem
for(int i=1;i<strlen(s);i++)//thi khong co ten o dia B
s[i]=s[i+1];//loai ky tu B ra khoi chuoi luu ten o dia
}
//---------------------------------------------------------
int ChosenDisk(char *s,/*TEXTBOX *Box,*/char PreDisk,char CurDisk)
//tra ve ten o dia
{
int i;
if(PreDisk!=CurDisk)
{
for(i=0;i<strlen(s);i++)
if((CurDisk)==s[i])//hien thi cho dia moi
{
setdisk(s[i]-'A');
char buffer[MAXPATH],*iem;
if((iem=getcwd(buffer, MAXPATH))==NULL)
{
OutMessage("Driver is not ready.");
i=0;
ShowMouse();
return s[i];
}
}
return s[i];
}
//---------------------------------------------------------
LPEVENT CheckChooseDisk(char *DiskName,char *DName,LPEVENT lpEvent,int x,int y)
{
int NumDisk=strlen(DiskName);
int x1=x-30,y1=y+NumDisk*14+12;
void far *buf;//con tro chi vung luu tru man hinh
unsigned int size = imagesize(x1,y,x,y1);
if ((buf = farmalloc(size)) == NULL)
{
OutMessage("Error: not enough heap space in save_screen().");
getch();
closegraph();
exit(1);
}
else
{
getimage(x1,y,x,y1,buf);
OutMessage("Click a drive name in the list");
}
setfillstyle(SOLID_FILL,WHITE);
bar(x1,y,x,y1);
setcolor(BLACK);
rectangle(x,y,x1,y1);
setcolor(LIGHTGRAY);
line(x-1,y+1,x-1,y1-1);
line(x1+1,y1-1,x-1,y1-1);
setcolor(BLACK);
char Temp[3];
for(int i=0;i<NumDisk;i++)
{
sprintf(Temp,"%c:",DiskName[i]);
outtextxy(x1+10,y+10+i*14,Temp);
}
for(i=0;i<NumDisk;i++)
if(*DName==DiskName[i])
break;
setfillstyle(SOLID_FILL,BLUE);
bar(x1+1,y+7+14*i,x-1,y+7+14+14*i);
setcolor(YELLOW);
sprintf(Temp,"%c:",DiskName[i]);
outtextxy(x1+10,y+10+i*14,Temp);
LPEVENT LpEvent;
do
{
ShowMouse();
delay(50);
LpEvent=GetEvent();
HideMouse();
if(LpEvent->Msg==1)
for(i=0;i<NumDisk;i++)
if(LpEvent->Posx>=x1+1&&LpEvent->PosxPosy>=y+7+i*14&&LpEvent->Posy<=y+7+14+i*14)
{
bar(x1+1,y+7+14*i,x-1,y+7+14+14*i);
*DName=DiskName[i];
setdisk((int)*DName-65);
}
}while(LpEvent->Msg!=1);
putimage(x1,y,buf,COPY_PUT);
farfree(buf);
return LpEvent;
}
//---------------------------------------------------------
char *FileType(TEXTBOX *b)
{
char s[15];
b->Path();
b->OutTextBox();
b->GetS(s);
return s;
}
VI.CLASS LIST.HPP
#include "textbox.hpp"
#include "disklist.hpp"
#if !defined __LIST__
#define __LIST__
class LIST
{
private:
int l,t,r,b;
int Color;
public:
void InitList(int x1,int y1,int x2,int y2,int Color);
void Show();
int Press(char s[],TEXTBOX *Box,unsigned *attrib,char *DiskName,char *DName,char *ftype);
int GetList(char s[],TEXTBOX *Box,unsigned *attrib,char *DiskName,char *DName,TEXTBOX *Box2,char *ftype);
int Left(){return l;};
int Right(){return r;};
int Top(){return t;};
int Bottom(){return b;};
};
#endif
VII.MODULE LIST.CPP
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "mouse.h"
#include "list.hpp"
//---------------------------------------------------------
void LIST::InitList(int x1,int y1,int x2,int y2,int col)
{
Color=col;
l=x1;t=y1;r=x2;b=y2;
}
//---------------------------------------------------------
void LIST::Show()
{
setfillstyle(SOLID_FILL,Color);
bar(l,t,r,b);
int hor=(r-l)/3,ver=(b-t)/3;
int x1=l+hor,x2=r-hor,x3=l+(r-l)/2,y1=t+ver,y2=t+ver,y3=b-ver;
setcolor(WHITE);
line(x1,y1,x2,y2);
line(x2,y2,x3,y3);
line(x1,y1,x3,y3);
setfillstyle(SOLID_FILL,WHITE);
floodfill(x1+(x2-x1)/2,y1+(y3-y2)/2,WHITE);
setfillstyle(SOLID_FILL,Color);
setcolor(BLACK);
line(l,b,r,b);
line(r,t,r,b);
setcolor(WHITE);
line(l,t,r,t);
line(l,t,l,b);
}
//---------------------------------------------------------
int LIST::Press(char s[],TEXTBOX *Box,unsigned *attrib,char *DiskName,char *DName,char *ftype)
//tra ve 0:nhan Cancel
//tra ve 1:nhan OK
{
TEXTBOX Box2;
HideMouse();
int hor=(r-l)/3,ver=(b-t)/3;
int x1=l+hor,x2=r-hor,x3=l+(r-l)/2,y1=t+ver,y2=t+ver,y3=b-ver;
setcolor(BLACK);
line(x1,y1,x2,y2);
line(x2,y2,x3,y3);
line(x1,y1,x3,y3);
setfillstyle(SOLID_FILL,BLACK);
floodfill(x1+(x2-x1)/2,y1+(y3-y2)/2,BLACK);
setfillstyle(SOLID_FILL,Color);
setcolor(WHITE);//vien cho nut bi nhan
line(l,b,r,b);
line(r,t,r,b);
setcolor(BLACK);//vien cho nut bi nhan
line(l,t,r,t);
line(l,t,l,b);
int k=0;
*DName=Disk(DiskName);
do
{
char buffer[MAXPATH];
k=GetList(s,Box,attrib,DiskName,DName,&Box2,ftype);
getcwd(buffer, MAXPATH);
Box->GetS_in(buffer);
Box->OutTextBox();
}while(k==2);
ShowMouse();
return k;//k=0: nhan Cancel, k=1:nhan OK
}
//---------------------------------------------------------
int LIST::GetList(char s[],TEXTBOX *Box,unsigned *attrib,char *DiskName,char *DName,TEXTBOX *Box2,char *ftype)
{
int x11=l-300,y11=b,x12=r+100,y12=b+300;//toa do bang ngoai
//600 x 300 la kich thuoc bang ngoai
int Kiemtra=0;//bien de kiem tra truong hop chon OK truoc khi chon file
LPEVENT lpEvent;//kiem tra bang thu muc
void far *buf;//con tro chi vung luu tru man hinh
unsigned int size = imagesize(x11,y11,x12,y12);
if ((buf = farmalloc(size)) == NULL)
{
OutMessage("Error: not enough heap space in save_screen().");
getch();
closegraph();
exit(1);
}
else
{
getimage(x11,y11,x12,y12, buf);
OutMessage("Choose a file name then click OK to accept or click Cancel to ignore");
}
setfillstyle(SOLID_FILL,LIGHTGRAY);//GREEN);
bar(x11,y11,x12,y12);//ve bang ngoai
int x21=x11+5,y21=y11+5,x22=x12-120,y22=y12-77;//75;//toa do bang liet ke
setfillstyle(SOLID_FILL,WHITE);//MAGENTA);
bar(x21,y21,x22,y22);//ve bang liet ke
int x31=x22+30,y31=y21+50,x32=x31+60,y32=y31+20;//toa do nut OK
int x41=x31,y41=y31+100,x42=x32,y42=y32+100;
setcolor(WHITE);
line(x11,y11,x12,y11);
line(x11,y11,x11,y12);
line(x22+2,y21-2,x22+2,y22+2);//vien cho bang liet ke
line(x21-1,y22+2,x22+2,y22+2);//vien cho bang liet ke
line(x31,y31,x32,y31);//vien cho nut OK
line(x31,y31,x31,y32);//vien cho nut OK
line(x41,y41,x42,y41);//vien nut Cancel
line(x41,y41,x41,y42);//vien nut Cancel
setcolor(BLACK);
line(x12,y11,x12,y12);
line(x11,y12,x12,y12);
line(x21,y21,x22,y21);//vien cho bang liet ke
line(x21,y21,x21,y22);//vien cho bang liet ke
line(x32,y31,x32,y32);//vien cho nut OK
line(x31,y32,x32,y32);//vien cho nut OK
line(x42,y41,x42,y42);//vien nut Cancel
line(x41,y42,x42,y42);//vien nut Cancel
setcolor(DARKGRAY);
line(x21-1,y21-1,x22+1,y21-1);//vien cho bang liet ke
line(x21-1,y21-1,x21-1,y22+1);//vien cho bang liet ke
setcolor(BLUE);
char S3[]="OK",S4[]="Cancel";
int x33=x31+(x32-x31-textwidth(S3))/2;
int y33=y31+(y32-y31-textheight(S3))/2;
outtextxy(x33,y33,S3);
int x44=x41+(x42-x41-textwidth(S4))/2;
int y44=y41+(y42-y41-textheight(S4))/2;
outtextxy(x44,y44,S4);
struct ffblk FF;
struct ffblk Lis[200];
char path[100];
getcurdir(0, path);
int done;
int x51=x21,x52=x51+130,y51=y22+28,y52=y51+20;
int x61=x21,x62=x12-5,y61=y12-25,y62=y12-5;
Box2->InitTextBox(x51,y51,x52,y52,WHITE,LIGHTBLUE,"Type of file");
Box2->GetS_in(ftype);
Box2->OutTextBox();
setcolor(BLACK);
line(x51+1,y51+1,x52-1,y51+1);
line(x51+1,y51+1,x51+1,y52-1);
setcolor(LIGHTGRAY);
line(x51+1,y52-1,x52-1,y52-1);
line(x52-1,y51+1,x52-1,y52-1);
setfillstyle(SOLID_FILL,WHITE);
bar(x61,y61,x62,y62);
setcolor(BLACK);
line(x61,y61,x62,y61);
line(x61,y61,x61,y62);
line(x61+1,y61+1,x62-1,y61+1);
line(x61+1,y61+1,x61+1,y62-1);
setcolor(LIGHTGRAY);
line(x62-1,y61+1,x62-1,y62-1);
line(x61+1,y62-1,x62-1,y62-1);
//DiskBox
int x71=x52+30,x72=x22,y71=y51,y72=y52;//toa do DiskBox
char DNameTemp[4];
sprintf(DNameTemp,"%c:",*DName);
TEXTBOX DiskBox;
DiskBox.InitTextBox(x71,y71,x72,y72,WHITE,LIGHTBLUE,"Driver name");
DiskBox.GetS_in(DNameTemp);
DiskBox.OutTextBox();
setcolor(BLACK);
line(x71+1,y71+1,x72-1,y71+1);
line(x71+1,y71+1,x71+1,y72-1);
setcolor(LIGHTGRAY);
line(x71+1,y72-1,x72-1,y72-1);
line(x72-1,y71+1,x72-1,y72-1);
LIST DriList;//nut nhan chon o dia
int x81=x72-19,y81=y71+2,x82=x72-2,y82=y72-2;
DriList.InitList(x81,y81,x82,y82,LIGHTGRAY);
DriList.Show();
done=findfirst("*",&FF,FA_DIREC);
Lis[0]=FF;
int dem=0;//cho vong while tim file, la so files + thu muc tim duoc
if((int)Lis[0].ff_attrib!=16) dem-=1;
while (!done)//nhap ten file vao mang cau truc FF
{
dem++;
done = findnext(&FF);
if(!done)
Lis[dem]=FF;
if((int)Lis[dem].ff_attrib!=16) dem-=1;
}
dem+=1;
int NumDir=dem;
done=findfirst(ftype,&FF,FA_RDONLY|FA_HIDDEN|FA_SYSTEM|FA_ARCH);
for(int j=0;j<strlen(FF.ff_name)+1;j++)
Lis[dem].ff_name[j]=tolower(FF.ff_name[j]);
while (!done)//nhap ten file vao mang cau truc FF
{
dem++;
done = findnext(&FF);
for(int j=0;j<strlen(FF.ff_name)+1;j++)
Lis[dem].ff_name[j]=tolower(FF.ff_name[j]);
}
int NumFile=dem-NumDir;
char Note[50];//[30];
setcolor(BLACK);
sprintf(Note,"%d files and %d directories found",NumFile,NumDir);
outtextxy(x61+5,y61+(y62-y61-textheight(Note))/2,Note);
int temp=y11,Dem=0,i;
if(dem==0)//truong hop dia hoan toan trong, neu la mot thu muc rong thi khong thuoc truong hop nay
strcpy(Lis[0].ff_name,"");
int tempx1=x21+1,tempx2=x22,tempy1=y11+14-3,tempy2=y11+14+8+3;
setcolor(BLACK);//LIGHTGREEN);
for(i=0;i<15&&i<dem;i++)//hien thi ten file
outtextxy(x21+8,temp+=14,Lis[i].ff_name);
setfillstyle(SOLID_FILL,BLUE);
bar(tempx1,tempy1,tempx2,tempy2);
setcolor(YELLOW);
outtextxy(x21+8,y11+14,Lis[0].ff_name);//vach sang tai vi tri dau tien
int oldx1=tempx1,oldy1=tempy1,oldx2=tempx2,oldy2=tempy2;
int over=0;
int ppp=0;
do//while(1);
{
ShowMouse();
lpEvent = GetEvent();//lay bien co chuot
int j,nhanphim;
if(kbhit())//kiem tra co nhan phim
{ nhanphim=getch();
if(nhanphim==0)
nhanphim=getch();
}
{
switch(nhanphim)
{
case 81://page down
if(ppp++ >12)//17)
ppp=0;
else goto MouseDown;
case 80: // mui ten xuong
nhanphim=1;
MouseDown:
HideMouse();
if(Dem<14/*9*/&&Dem<dem-1)j=Dem+1;//&&Dem<dem-1
else
{
over++;
if((over)>=(dem-14))//9))
{
over--;
goto End;
}
j=Dem;
setcolor(WHITE);//MAGENTA);
temp=y11;
for(i=over-1;(i<15+over-1)&&i<dem;i++)//xoa ten file
outtextxy(x21+8,temp+=14,Lis[i].ff_name);
setcolor(BLACK);//LIGHTGREEN);
temp=y11;
for(i=over;(i<14+over)&&i<dem;i++)
outtextxy(x21+8,temp+=14,Lis[i].ff_name);
}
goto Arrowkey;//break;
case 73://page up
if(ppp++ >12)
ppp=0;
else goto MouseUp;
case 72: // len
nhanphim=1;
MouseUp:
HideMouse();
if(Dem>0)
j=Dem-1;
else
{
over--;
if((over)<=-1)
{
over++;
goto End;
}
j=Dem;
setcolor(WHITE);//MAGENTA);
temp=y11;
for(i=over+1;i<15+over+1;i++)//xoa ten file
outtextxy(x21+8,temp+=14,Lis[i].ff_name);
setcolor(BLACK);//LIGHTGREEN);
temp=y11;
for(i=over;i<15+over;i++)
outtextxy(x21+8,temp+=14,Lis[i].ff_name);
}
goto Arrowkey;//break;
case 13://Enter
nhanphim=1;
goto nutOK;
case 27://Esc
nhanphim=1;
goto nutCancel;
}
}//if(kbhit())
/////////////////////////////////// xet mouse
if(lpEvent->Msg==1)//neu nhan phim trai chuot
{
if(lpEvent->Posx>=x51&&lpEvent->PosxPosy>=y51&&lpEvent->Posy<=y52)
{//get type of file
HideMouse();
OutMessage("Enter type of file then press Enter to accept or Esc to ignore.");
Box2->Path();//lay Path vao bien S cua TEXTBOX
Box2->GetS(ftype);
putimage(x11,y11,buf,COPY_PUT);
farfree(buf);
ShowMouse();
return 2;
}
if(lpEvent->Posx>=x71&&lpEvent->PosxPosy>=y71&&lpEvent->Posy<=y72)
{//change disk trong diskbox
int ExistDisk;
char OldDisk=toupper(*DName);
OutMessage("Enter name of drive");
do
{
HideMouse();
DiskBox.Path();//lay Path vao bien S cua TEXTBOX
DiskBox.GetS(DNameTemp);
DNameTemp[0]=toupper(DNameTemp[0]);
*DName=DNameTemp[0];
ExistDisk=0;
for(int k=0;k<strlen(DiskName);k++)
if(*DName==DiskName[k])
ExistDisk=1;
if(ExistDisk!=1)
{
OutMessage("Press Enter to do the action again or Esc to ignore");
if(OutError("Disk not exist")==0)
{
*DName=OldDisk;
break;
}
}
ShowMouse();
}while(!ExistDisk);
if(OldDisk!=*DName) //truong hop chon dia bang nut pulldown nhung lai chon kieu go ky tu vao textbox
setdisk(*DName-'A');
HideMouse();
putimage(x11,y11,buf,COPY_PUT);
farfree(buf);
ShowMouse();
return 2;
}
if(lpEvent->Posx>=x81&&lpEvent->PosxPosy>=y81&&lpEvent->Posy<=y82)
{//choose disk
HideMouse();
setcolor(BLACK);
line(x81,y81,x82,y81);
line(x81,y81,x81,y82);
line(x81+1,y81-1,x81+1,y82-1);
char OldDName=*DName;
CheckChooseDisk(DiskName,DName,lpEvent,x82,y82);
if(OldDName!=*DName)
{
putimage(x11,y11,buf,COPY_PUT);
farfree(buf);
return 2;
}
setcolor(WHITE);
line(x81,y81,x82,y81);
line(x81,y81,x81,y82);
line(x81+1,y81-1,x81+1,y82-1);
ShowMouse();
}
for(j=0;jMsg==1;j++)//kiem tra file chon neu co chon
if(tempx1Posx&&tempx2>=lpEvent->Posx)
if((tempy1+j*14)Posy&&(tempy2+j*14)>=lpEvent->Posy)
{
Arrowkey:
HideMouse();
setfillstyle(SOLID_FILL,WHITE);//MAGENTA);
bar(oldx1,oldy1,oldx2,oldy2);
setcolor(BLACK);//LIGHTGREEN);
outtextxy(x21+8,oldy1+3,Lis[Dem+over].ff_name);
setfillstyle(SOLID_FILL,BLUE);
oldx1=tempx1, oldy1=tempy1+j*14,oldx2=tempx2,oldy2=tempy2+j*14;
bar(oldx1,oldy1,oldx2,oldy2);
setcolor(YELLOW);
outtextxy(x21+8,oldy1+3,Lis[j+over].ff_name);
_dos_getfileattr(Lis[j+over].ff_name,attrib);
strcpy(s,Lis[j+over].ff_name);
if(strcmp(s,".")==0) strcpy(s,"\\");
Dem=j;
End:
Kiemtra=1;//bao hieu co nhan vao list
}
if(lpEvent->Msg==1&&(j==15)&&tempx1Posx&&tempx2>=lpEvent->Posx&&(tempy1+j*14)Posy&&(tempy2+j*14)>=lpEvent->Posy)
//truong hop vet tro file o cuoi bang list va nhap chuot ngay ben duoi vet tro
{
lpEvent->Posx=x11;
lpEvent->Posy=y11;
delay(50);
goto MouseDown;
}
if(lpEvent->Msg==1&&(j==15)&&tempx1Posx&&tempx2>=lpEvent->Posx&&(tempy1-14)Posy&&(tempy2-14)>=lpEvent->Posy)
//truong hop vet tro file o dau bang list va nhap chuot ngay ben tren vet tro
{
lpEvent->Posx=x11;
lpEvent->Posy=y11;
delay(50);
goto MouseUp;
}
if(lpEvent->Msg==1&&x31Posx&&y31Posy&&x32>=lpEvent->Posx&&y32>=lpEvent->Posy)
nutOK:
{
HideMouse();
putimage(x11,y11,buf,COPY_PUT);
farfree(buf);
if(Kiemtra!=1)
strcpy(s,Lis[0].ff_name);
if(strcmp(s,".")==0)
{
strcpy(s,"\\");
*attrib=16;
}
if(*attrib==16)
{
chdir(s);
return 2;
}
Show();
ShowMouse();
OutMessage("Click OK to send file.");
return 1 ;//bao da co chon file
}
if(lpEvent->Msg==1&&x41Posx&&y41Posy&&x42>=lpEvent->Posx&&y42>=lpEvent->Posy)
nutCancel:
{
HideMouse();
putimage(x11,y11,buf,COPY_PUT);
farfree(buf);
Cancel:
Show();
ShowMouse();
OutMessage("Click mouse to chose action");
return 0;
}
}
if(lpEvent->Msg==2)
{
delay(100);
goto nutOK;
}
}while(1);
}
//---------------------------------------------------------
VIII. CLASS MOUSE.H
#if !defined(__MOUSE_H__)
#define __MOUSE_H__
#include
#include "screen.h"
#define INT_MOUSE 0x33
#define M_LEFT 0x01 /* set if LEFT press */
#define M_RIGHT 0x02 /* set if RIGHT press */
#define M_CENTER 0x04 /* set if CENTER press */
#define M_CHANGE 0x08 /* set if mouse status is changed */
/* -- Keyboard coding bits -- */
#define KEY_NULL 0x0
#define ESC 0x1B
#define ENTER 0x0D
#define TAB '\t'
#define INS 0xD2
#define DEL 0xD3
#define BACKSPACE 0x8
#define HOME 0xC7
#define END 0xCF
#define PAGE_UP 0xC9
#define PAGE_DOWN 0xD1
/* -- Function's keys -- */
#define F1 0xBB
#define F2 0xBC
#define F3 0xBD
#define F4 0xBE
#define F5 0xBF
#define F6 0xC0
#define F7 0xC1
#define F8 0xC2
#define F9 0xC3
#define F10 0xC4
#define PLUS 0x2B
#define MINUS 0x2D
#define SPACEBAR 0x20
#define SHIFT_TAB 0x8F
#define CTRL_C 0x3
//struct time;
typedef struct tagEVENT{
int Msg;
int Posx, Posy; // toa do xay ra bien co chuot
struct time *t;
} EVENT;
typedef EVENT far *LPEVENT;
// Khai bao cac ham toan cuc
extern void SetMouseRange(LPRECT);//LPRECT: xem SCREEN.H
extern int InitMouse(LPRECT);
extern void ShowMouse(void);
extern void HideMouse(void);
extern void MouseRead(LPEVENT);
extern LPEVENT GetEvent(void);
extern void DeviceRelease(int);
//extern void ButtonPressed(int, LPEVENT);
extern void ResetEvent(LPEVENT);
//extern void MoveMouse(int x,int y);//tri
extern void MouseText(int x,int y,int color1, int color2);//,char s[]);
//extern int GetKey(void);
extern int GetMtx();
extern int GetMty();
//extern EVENT OldEvent();
extern int Double(LPEVENT);
#endif
// End of MOUSE.H
IX.MODULE MOUSE.CPP
#include
#include
//#include
#include
#include "mouse.h"
void SetMouseRange(LPRECT lpRect)
// Dat vung di chuyen cho chuot
{
_AX = 0x07;//ham 07 cua ngat 33 de dinh gioi han di chuyen ngang
_CX = lpRect->left;
_DX = lpRect->right;
geninterrupt(INT_MOUSE);//INT_MOUSE=0x33:ngat 33
_AX = 0x08;//ham 08 cua ngat 33 dinh gioi han di chuyen doc cho con tro
_CX = lpRect->top;
_DX = lpRect->bottom;
geninterrupt(INT_MOUSE);
}
//---------------------------------------------------------
int InitMouse(LPRECT lpRect)
// Khoi dong chuot
{
int ax;
_AX = 0;
geninterrupt(INT_MOUSE);
ax = _AX;
if (ax == 0)
return FALSE;
SetMouseRange(lpRect);
return TRUE;
}
//---------------------------------------------------------
void ShowMouse(void)
// Hien thi chuot
{
_AX = 1;
geninterrupt(INT_MOUSE);
}
//---------------------------------------------------------
void HideMouse(void)
// Dau chuot
{
_AX = 2;
geninterrupt(INT_MOUSE);
}
//---------------------------------------------------------
#include
#include
void MouseRead(LPEVENT lpEvent)
// Tra ve bien co nhan duoc tu chuot : Nut trai hay phai duoc an
{
int bx;
_AX = 3;
geninterrupt(INT_MOUSE);
bx = _BX;
//cx = _CX;
//dx = _DX;
lpEvent->Msg = bx;
lpEvent->Posx = _CX;
lpEvent->Posy = _DX;
gettime(lpEvent->t);
}
//---------------------------------------------------------
void ResetEvent(LPEVENT lpEvent)
{
lpEvent->Msg = 0;
lpEvent->Posx = lpEvent->Posy = 0;
}
//---------------------------------------------------------
EVENT PrevEvent, CurEvent;
//---------------------------------------------------------
LPEVENT GetEvent(void)
{
ResetEvent(&CurEvent);
MouseRead(&CurEvent);
// chuyen sang toa do ViewPort
CurEvent.Posx = CurEvent.Posx-MainWindow.rViewPort.left;
CurEvent.Posy = CurEvent.Posy-MainWindow.rViewPort.top;
// xet trang thai chuot co thay doi hay khong
if((CurEvent.Posx!=PrevEvent.Posx)&&(CurEvent.Posy!=PrevEvent.Posy))
CurEvent.Msg |= M_CHANGE;
PrevEvent = CurEvent;
// delay(50);
return (&CurEvent);
}
//---------------------------------------------------------
void DeviceRelease(int Msg)
{
while(GetEvent()->Msg&Msg);
}
//---------------------------------------------------------
int Double(LPEVENT lpEvent)
{
if(lpEvent->Msg==1)
{
delay(100);
ResetEvent(lpEvent);
lpEvent=GetEvent();
if(lpEvent->Msg==1)
//if((abs(CurEvent.Posx-oldEvent.Posx))<=10&&abs(CurEvent.Posy-oldEvent.Posy)<=10)
{
{
return 1;
}
}
else
return 0;
}
else return 0;
}
//---------------------------------------------------------
void MouseText(int x,int y,int color1,int color2)//,char s[])//gia dau nhay con tro
{
HideMouse();
// int h=textheight(s);
int w=5;
int color=getcolor();
do
{
for(int i=0;i<10&&(!kbhit());i++)
{
setcolor(color2);//WHITE);
line(x,y,x+w,y);
line(x,y+1,x+w,y+1);
delay(10);
setcolor(color);
}
setcolor(color1);//GREEN);
line(x,y,x+w,y);
line(x,y+1,x+w,y+1);
setcolor(color);
for(i=0;i<10&&(!kbhit());i++)
{
setcolor(color1);//GREEN);
line(x,y,x+w,y);
line(x,y+1,x+w,y+1);
delay(10);
setcolor(color);
}
}while(!kbhit());
}
//---------------------------------------------------------
int GetMtx()
{
return getx();
}
//---------------------------------------------------------
int GetMty()
{
return gety();
}
//---------------------------------------------------------
// End of MOUSE.CPP
X.CLASS SCREEN.H
#if !defined(__SCREEN_H__)
#define __SCREEN_H__
#define BORDERSIZE 3
#define TRUE 1
#define FALSE 0
#define DEMODELAY 0
// Dinh nghia cac kieu du lieu
typedef struct tagRECT{
int left, top, right, bottom ;
}RECT;
typedef RECT far *LPRECT;
typedef struct tagWINDOW {
char sCaption[80]; /*Window's caption*/
RECT rWinRect; /*Rectangle in which window is located*/
RECT rSys; /*System area of window*/
RECT rTitleBar; /*Caption area of window*/
RECT rMenuBar; /*Rectangle in which window's menu is located*/
RECT rMessage; /* Rectangle in which messages is display
}WINDOWS;
// Dinh nghia cac ham va bien dung toan cuc
extern int Xc, Yc; // Goc toa do
extern int LineColor;
extern int VP_WIDTH;
extern int VP_HEIGHT;
extern WINDOWS MainWindow;
extern void InitGraphics(void);
extern void OutMessage(char *Msg);
extern void InitScreen(void);
extern void InitValues(char *lpCaption);
extern int OutError(char *s);
#endif
// End of SCREEN.H
XI.MODULE SCREEN.CPP
#include
#include
#include
#include
#include
#include "screen.h"
#include "mouse.h"
int T_SIZE, W_SIZE, H_SIZE, W_CHAR, H_CHAR, MSG_SIZE;
int COLOR_WINDOW;
int COLOR_BUTTON;
int COLOR_BORDER;
int COLOR_CAPTION;
int COLOR_TEXT;
int VP_WIDTH;
int VP_HEIGHT;
int Maxx, Maxy; // Maxx - Maxy of screen
WINDOWS MainWindow;
//int Xc, Yc; // Goc toa do
//int LineColor = MAGENTA; // Mau cua duong thang can ve - Dung trong thu tuc SetPixel
//---------------------------------------------------------
void InitGraphics(void)
// Khoi tao che do do hoa
{
int grDrv=DETECT, grMode;
int ErrCode;
initgraph(&grDrv, &grMode, "");
ErrCode = graphresult();
if(ErrCode!= grOk)
{
printf("Graphics error: %s\n", grapherrormsg(ErrCode));
printf("Press any key to halt...");
getch();
exit(1); /* return with error code */
}
Maxx = getmaxx();
Maxy = getmaxy();
}
//---------------------------------------------------------
void InitValues(char *lpCaption)
// Khoi tao cac gia tri cho bien Windows de ve cua so man hinh
{
int WinWidth, WinHeight;
W_CHAR = 8; H_CHAR = 8; // Chieu rong va chieu cao cua mot ki tu
W_SIZE = 8; H_SIZE = 20; T_SIZE = 18; MSG_SIZE = 20;
COLOR_WINDOW = CYAN;
COLOR_BUTTON = LIGHTGRAY;
COLOR_BORDER = LIGHTGRAY;
COLOR_CAPTION = BLUE;
COLOR_TEXT = BLUE;
strcpy(MainWindow.sCaption, lpCaption);
// Gan gia tri cho WinRect - H.C.nhat chua cua so
MainWindow.rWinRect.left = 0;
MainWindow.rWinRect.top = 0;
MainWindow.rWinRect.right = Maxx;
MainWindow.rWinRect.bottom= Maxy;
WinWidth = MainWindow.rWinRect.right-MainWindow.rWinRect.left+1;
WinHeight= MainWindow.rWinRect.bottom-MainWindow.rWinRect.top+1;
// Gan gia tri cho rSys - H.C.nhat chua SystemMenu
MainWindow.rSys.left = BORDERSIZE;
MainWindow.rSys.top = BORDERSIZE;
MainWindow.rSys.right = MainWindow.rSys.left+T_SIZE;
MainWindow.rSys.bottom= MainWindow.rSys.top+T_SIZE;
// Gan gia tri cho rTitleBar - H.C.nhat chua thong tin thanh tieu de
MainWindow.rTitleBar.left = BORDERSIZE+1;//MainWindow.rSys.right+1;
MainWindow.rTitleBar.top = BORDERSIZE+1;
MainWindow.rTitleBar.right = WinWidth-BORDERSIZE-1;
MainWindow.rTitleBar.bottom= MainWindow.rSys.top+T_SIZE;
// Gan gia tri cho rMenuBar - H.C.nhat chua thong tin menu
// Gan gia tri cho rMessage - H.C.nhat chua thong tin cua cac //thong bao
MainWindow.rMessage.left = BORDERSIZE+1;
MainWindow.rMessage.right = WinWidth-BORDERSIZE-2;
MainWindow.rMessage.top = WinHeight-(BORDERSIZE+2)-MSG_SIZE;
MainWindow.rMessage.bottom= MainWindow.rMessage.top+MSG_SIZE;
// Gan gia tri cho rViewPort - H.C.nhat chua thong tin ve vung lam viec
// thuc su cua cua so
MainWindow.rViewPort.left = BORDERSIZE+1;
MainWindow.rViewPort.top = MainWindow.rTitleBar.bottom+2;//MainWindow.rMenuBar.bottom+2;
MainWindow.rViewPort.right = WinWidth-BORDERSIZE-2;
MainWindow.rViewPort.bottom= MainWindow.rMessage.top-2;
VP_WIDTH = MainWindow.rViewPort.right-MainWindow.rViewPort.left;
VP_HEIGHT = MainWindow.rViewPort.bottom-MainWindow.rViewPort.top;
}
//---------------------------------------------------------
void OutMessage(char *Msg)
// Ghi thong bao Msg ra cua so rMessage
{
struct fillsettingstype FillInfo;
int OldColor;
struct viewporttype vp;
// luu thong tin cu
getfillsettings(&FillInfo);
OldColor = getcolor();
getviewsettings(&vp);
// xoa thong bao cu
setviewport(MainWindow.rWinRect.left, MainWindow.rWinRect.top,
MainWindow.rWinRect.right, MainWindow.rWinRect.bottom, 1);
setfillstyle(SOLID_FILL, COLOR_BUTTON);
setcolor(COLOR_TEXT);
bar(MainWindow.rMessage.left, MainWindow.rMessage.top,
MainWindow.rMessage.right, MainWindow.rMessage.bottom);
// in thong bao moi ra
outtextxy(MainWindow.rMessage.left+W_CHAR,
MainWindow.rMessage.bottom-H_CHAR-5, Msg);
// tra ve trang thai cu
setfillstyle(FillInfo.pattern, FillInfo.color);
setcolor(OldColor);
setviewport(vp.left,vp.top, vp.right, vp.bottom, 1);
}
//---------------------------------------------------------
void DrawScreenBorder(int left, int top, int right, int bottom)
// Ve duong vien cho mot hinh chu nhat co toa do (left, top), (right, bottom)
{
setfillstyle(SOLID_FILL, COLOR_BORDER);
bar(left, top, right, top+BORDERSIZE);
bar(left, bottom, right, bottom-BORDERSIZE);
bar(left, top, left+BORDERSIZE, bottom);
bar(right-BORDERSIZE, top, right, bottom);
setcolor(BLACK);
rectangle(left, top, right, bottom);
rectangle(left+BORDERSIZE, top+BORDERSIZE,
right-BORDERSIZE, bottom-BORDERSIZE);
}
//---------------------------------------------------------
#include
void InitScreen(void)
// Ve cac thanh phan cua cua so
{
int x, y;
int WinWidth, WinHeight;
struct viewporttype vp;
getviewsettings(&vp);
setviewport(MainWindow.rWinRect.left, MainWindow.rWinRect.top,
MainWindow.rWinRect.right, MainWindow.rWinRect.bottom, 1);
WinWidth = MainWindow.rWinRect.right-MainWindow.rWinRect.left+1;
WinHeight= MainWindow.rWinRect.bottom-MainWindow.rWinRect.top+1;
x = (WinWidth-W_CHAR*strlen(MainWindow.sCaption))/2+1;
y = BORDERSIZE+(T_SIZE-H_CHAR)/2+1;
// Ve duong vien cua hinh chu nhat
DrawScreenBorder(0, 0, WinWidth-1, WinHeight-1);
delay(DEMODELAY);
// Ve thanh tieu de
setfillstyle(SOLID_FILL, COLOR_CAPTION);
bar(MainWindow.rTitleBar.left, MainWindow.rTitleBar.top,
MainWindow.rTitleBar.right, MainWindow.rTitleBar.bottom);
setcolor(WHITE);
outtextxy(x, y, MainWindow.sCaption);
delay(DEMODELAY);
// Ve SystemMenu
setfillstyle(SOLID_FILL, COLOR_BUTTON);
/* bar(MainWindow.rSys.left+1, MainWindow.rSys.top+1,
MainWindow.rSys.right-1, MainWindow.rSys.bottom-1);
setcolor(BLACK);
rectangle((MainWindow.rSys.left+MainWindow.rSys.right)/2-5,
(MainWindow.rSys.top+MainWindow.rSys.bottom)/2-1,
(MainWindow.rSys.left+MainWindow.rSys.right)/2+5,
(MainWindow.rSys.top+MainWindow.rSys.bottom)/2+1);
delay(DEMODELAY);
*/ // Ve Menu
// bar(MainWindow.rMenuBar.left, MainWindow.rMenuBar.top,
// MainWindow.rMenuBar.right, MainWindow.rMenuBar.bottom);
// outtextxy(MainWindow.rMenuBar.left+8, MainWindow.rMenuBar.bottom-13,
// "Menu of Program is here");
// delay(DEMODELAY);
// Ve thanh chua thong bao
bar(MainWindow.rMessage.left, MainWindow.rMessage.top,
MainWindow.rMessage.right, MainWindow.rMessage.bottom);
OutMessage("Welcome to Demo Window Program");
delay(DEMODELAY);
// Ve vung lam viec
setfillstyle(SOLID_FILL, COLOR_WINDOW);
bar(MainWindow.rViewPort.left, MainWindow.rViewPort.top,
MainWindow.rViewPort.right, MainWindow.rViewPort.bottom);
setcolor(BLACK);
rectangle(MainWindow.rViewPort.left-1, MainWindow.rViewPort.top,
MainWindow.rViewPort.right+1, MainWindow.rViewPort.bottom);
delay(DEMODELAY);
// Dat lai viewport la rViewPort
setviewport(MainWindow.rViewPort.left, MainWindow.rViewPort.top,
MainWindow.rViewPort.right, MainWindow.rViewPort.bottom, 1);
}
//---------------------------------------------------------
/*void DrawSysCoordinates(void)
// Ve he truc toa do
{
Xc = VP_WIDTH/2;
Yc = VP_HEIGHT/2;
setcolor(COLOR_TEXT);
// ve hai truc toa do
line(0, Yc, VP_WIDTH, Yc);
line(Xc, 0, Xc, VP_HEIGHT);
// ve hai mui ten
line(Xc, 0, Xc-5, 5);
line(Xc, 0, Xc+5, 5);
line(VP_WIDTH, Yc, VP_WIDTH-5, Yc-5);
line(VP_WIDTH, Yc, VP_WIDTH-5, Yc+5);
// Ve goc toa do
outtextxy(Xc-8, Yc+8, "O");
}
//---------------------------------------------------------
void SetLineColor(int C)
{
LineColor = C;
}
//---------------------------------------------------------
void SetPixel(int x, int y)
{
putpixel(Xc+x, Yc-y, LineColor);
}
//---------------------------------------------------------
void Set2Pixel(int Ox, int Oy, int x, int y)
{
putpixel(Ox+x, Oy-y, LineColor);
putpixel(Ox-x, Oy-y, LineColor);
}
//---------------------------------------------------------
void Set2PixelHor(int Ox, int Oy, int x, int y)
{
putpixel(Ox+x, Oy-y, LineColor);
putpixel(Ox+x, Oy+y, LineColor);
}
//---------------------------------------------------------
void ClearViewPort(void)
{
struct fillsettingstype FillInfo;
// luu thong tin cu
getfillsettings(&FillInfo);
setfillstyle(SOLID_FILL, COLOR_WINDOW);
bar(0, 0, VP_WIDTH, VP_HEIGHT);
setfillstyle(FillInfo.pattern, FillInfo.color);
DrawSysCoordinates();
} */
// End of SCREEN.C
//---------------------------------------------------------
#include
int OutError(char *s)
{
void far *buf;//con tro chi vung luu tru man hinh
unsigned int size = imagesize(200,150,470,240);
LPEVENT lpEvent;
int Cx1=280,Cy1=203,Cx2=337,Cy2=223;
int Ox1=350,Oy1=203,Ox2=405,Oy2=223;
if ((buf = farmalloc(size)) == NULL)
{
return -1;
}
else
{
getimage(200,150,470,240,buf);
}
setfillstyle(SOLID_FILL,BLUE);
HideMouse();
bar(200,150,470,240);
setcolor(WHITE);
rectangle(200,150,470,240);
outtextxy(200+(270-8*strlen(s))/2,170,s);
setfillstyle(SOLID_FILL,LIGHTBLUE);
bar(Cx1,Cy1,Cx2,Cy2);//280,203,337,223);
int OK=0;
outtextxy(285,210,"Cancel");
outtextxy(365,210,"OK");
int event;
do
{
lpEvent=GetEvent();
if(kbhit())
{
if((event=getch())==13)
{
CompleteOk:
HideMouse();
putimage(200,150,buf,COPY_PUT);
ShowMouse();
farfree(buf);
return OK;
}
if(event==27)
{
CompleteCancel:
HideMouse();
putimage(200,150,buf,COPY_PUT);
ShowMouse();
farfree(buf);
return 0;
}
if(event==9)
{
OK=!OK;
Cancel:
if(OK==0)
{
HideMouse();
setfillstyle(SOLID_FILL,BLUE);
bar(Ox1,Oy1,Ox2,Oy2);//350,203,405,223);
outtextxy(365,210,"OK");
setfillstyle(SOLID_FILL,LIGHTBLUE);
bar(Cx1,Cy1,Cx2,Cy2);//280,203,337,223);
outtextxy(285,210,"Cancel");
ShowMouse();
}
Ok:
if(OK==1)
{
HideMouse();
setfillstyle(SOLID_FILL,BLUE);
bar(Cx1,Cy1,Cx2,Cy2);//280,203,337,223);
outtextxy(285,210,"Cancel");
setfillstyle(SOLID_FILL,LIGHTBLUE);
bar(Ox1,Oy1,Ox2,Oy2);//350,203,405,223);
outtextxy(365,210,"OK");
ShowMouse();
}
}
if(event==0)
{
event=getch();
if(event==75)
{
OK=0;
goto Cancel;
}
if(event==77)
{
OK=1;
goto Ok;
}
}
else
flushall();
}
if(lpEvent->Msg==1)
{
if(lpEvent->Posx>=Cx1&&lpEvent->PosxPosy>=Cy1&&lpEvent->Posy<=Cy2)
{
OK=0;
goto CompleteCancel;
}
if(lpEvent->Posx>=Ox1&&lpEvent->PosxPosy>=Oy1&&lpEvent->Posy<=Oy2)
{
OK=1;
goto CompleteOk;
}
}
ShowMouse();
}while(1);
}
XII. CLASS SEND.HPP
#include
#include
#include
#include
#include
#include
#include
#if !defined __SEND__
#define __SEND__
class SEND
{
private:
char OutFile[100];
public:
char *CatFile(char St_add[],char End_add[],char InFile[]);
int Out();
int DeleteFile();//se del OutFile
};
#endif
extern int Esc();
XIII. MODULE SEND.CPP
#include "screen.h"
#include "send.hpp"
#define data 0x378
#define sta 0x379
#define ctr 0x37a
char *SEND::CatFile(char St_add[],char End_add[],char InFile[])
{
char KyTu_Hex[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','a','b','c','d','e','f'};
int Gtri_Dec[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,10,11,12,13,14,15};
unsigned int i,DemSpace;
unsigned int Value1=0,Value2=0;
char FindPos,FindValue;
int Thoigian=0;
FILE *f,*f1;
char t,t1,t2,t3,t4;
// char St_add[]="0000 Hex",End_add[]="000F Hex";
int end_line;
strcpy(OutFile,InFile);
i=strlen(OutFile);
do
{
OutFile[i]='\0';
}while(OutFile[--i]!='.');
strcat(OutFile,"tmp");//dat ten cho file se tao ra
for (FindPos=3;FindPos>=0;FindPos--)
for(FindValue=0;FindValue<22;FindValue++)
if(St_add[FindPos]==KyTu_Hex[FindValue])
Value1+=pow(16,(3-FindPos))*Gtri_Dec[FindValue];
for (FindPos=3;FindPos>=0;FindPos--)
for(FindValue=0;FindValue<22;FindValue++)
if(End_add[FindPos]==KyTu_Hex[FindValue])
Value2+=pow(16,(3-FindPos))*Gtri_Dec[FindValue];
f=fopen(InFile,"rt");
f1=fopen(OutFile,"w+t");
fwrite(St_add,4,1,f1);
fwrite(End_add,4,1,f1);
do
{
do
{
fread(&t1,1,1,f);
}while(t1!='\'');//ngay sau dia chi cua lenh
do
{
fread(&t1,1,1,f);
}while(t1==' ');//den lenh
end_line=0;
do
{
fread(&t2,1,1,f);
Value1++;
DemSpace=0;
do
{
fread(&t,1,1,f);
DemSpace++;
}while(t==' '&&DemSpace<3);//con la lenh hoac dia chi hay da cham dut mot lenh
if(DemSpace>=2)//la ma lenh hoac da ket thuc mot dong lenh
{
fwrite(&t1,1,1,f1);
fwrite(&t2,1,1,f1);
t1=t;
}
if(DemSpace==1)
{
t3=t;
fread(&t4,1,1,f);
Value1++;
fwrite(&t3,1,1,f1);
fwrite(&t4,1,1,f1);
fwrite(&t1,1,1,f1);
fwrite(&t2,1,1,f1);
DemSpace=0;
do
{
fread(&t,1,1,f);
if(t==' ')
DemSpace++;
}while((t=='\''||t==' ')&&DemSpace<3);//con la lenh hoac dia chi hay da cham dut mot lenh
if(DemSpace==2)
t1=t;
}
if(DemSpace>2)
{
end_line=1;
}
}while(end_line==0);
}while(Value1<=Value2);
fcloseall();
return OutFile;
}
//---------------------------------------------------------
int SEND::Out()
{
int result,Temp;
FILE *f;
char value;
int n,dem=0;
int Stop=0;
char KyTu_Hex[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','a','b','c','d','e','f'};
int Gtri_Dec[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,10,11,12,13,14,15};
if ( (f = fopen(OutFile,"rt")) == NULL)
{
OutError("Cannot open input file.");
return dem;
}
while(!feof(f))
{
do
{
result=inportb(sta);
result=result & 0x80;
Stop=Esc();
}while(result !=0x80&&Stop!=1);//doc busy cho toi khi !busy = 1
if(Stop==1)
return -1;
n=fread(&value,1,1,f);
if(n==0)
return dem;
for(int z=0;z<22;z++)//doi ky tu ra gia tri Dec de goi di
if(value==KyTu_Hex[z])//nible cao
{
Temp=Gtri_Dec[z]*16;
z=22;
}
fread(&value,1,1,f);
for(z=0;z<22;z++)//nible thap
if(value==KyTu_Hex[z])
{
Temp=Gtri_Dec[z]+Temp;
z=22;
}
outportb(data,Temp);//pow(2,i));//xuat du lieu ra thanh ghi du lieu
outportb(ctr,0x00);// cho strobe = 1 de bao cho phan thu biet da goi du lieu ra thanh ghi du lieu
dem++;
do
{
result=inportb(sta);
result=result & 0xC0;
Stop=Esc();
}while(result!=0x40&&Stop!=1);//doc ack cho den khi ack = 1
if(Stop==1)
return -1;
outportb(ctr,0x01);// cho strobe = 0 de bao cho phan thu biet da goi xong mot byte du lieu ra thanh ghi du lieu
}
return 0;
}
//---------------------------------------------------------
int SEND::DeleteFile()
{
return remove(OutFile);
}
//---------------------------------------------------------
int Esc()
{
if(kbhit())//nhan Esc de thoat
{
if(getch()==27)
{
OutError("Task is not complete !!!");
}
else
flushall();
return 1;
}
return 0;
}
XIV.CLASS TEXTBOX.HPP
#include
#if !defined __TEXTBOX__
#define __TEXTBOX__
class TEXTBOX
{
private:
int l,t,r,b;
int Color,Color1;
char S[100],S1[100];
char Dri[100],Path_var[100],Name[100],TenFile[100],SubFile[100];
int chiso;
public:
TEXTBOX() {S[0]='\0';}//S1="Duong dan";}
void InitTextBox(int x1,int y1,int x2,int y2,int color,int color1,char s[]);
void Path();
void PressTextBox();
void OutTextBox();
int Left(){return l;}
int Top(){return t;}
int Right(){return r;}
int Bottom(){return b;}
void DelChar(int length);//,int xoa);//de xoa ky tu khi gap phim del tai texbox
void InsertChar(char c);
void GetS(char s[]){strcpy(s,S);};
void GetS_in(char s[]){strcpy(S,s);}
int DuongDan(char s[]);
void Get_path(char s[]){strcpy(s,Path_var);};
void Get_name();
};
#endif
XV.MODULE TEXTBOX.CPP
#include
#include
#include
#include
#include
#include
#include
#include "textbox.hpp"
#include "mouse.h"
//---------------------------------------------------------
void TEXTBOX::InitTextBox(int x1,int y1,int x2,int y2,int color,int color1,char s[])
{
char buffer[MAXPATH];
l=x1;t=y1;r=x2;b=y2;
Color=color;
Color1=color1;
strcpy(S1,s);
getcwd(buffer, MAXPATH);
strcpy(S,buffer);
strcat(S,"\\");
}
//---------------------------------------------------------
void TEXTBOX::OutTextBox()
{
setfillstyle(SOLID_FILL,Color);
bar(l,t,r,b);
setcolor(WHITE);
line(l,b,r,b);
line(r,t,r,b);
setcolor(BLACK);
line(l,t,r,t);
line(l,t,l,b);
setcolor(WHITE);
if(Color==WHITE)
setcolor(BLACK);
outtextxy(l,t+(b-t-textheight(S))/2-b+t-3,S1);
outtextxy(l+5,t+(b-t-textheight(S))/2,S);
}
//---------------------------------------------------------
/*
void TEXTBOX::PressTextBox()
{
setcolor(BLACK);
line(l,t,r,t);
line(l,t,l,b);
setcolor(WHITE);
line(l,b,r,b);
line(r,t,r,b);
}
*/
//---------------------------------------------------------
void TEXTBOX::Path()//lay duong dan nhap vao vao bien S cua TEXTBOX
{
char a;
int C1=Color1;//C1 la mau cua text trong textbox o che do nhap ten file
setcolor(C1);
outtextxy(l+5,t+(b-t-textheight(S))/2,S);
chiso=0;
MouseText(l+textwidth(S)+4,t+(b-t+textheight(S))/2,Color,C1);//,S);//gia dau nhac chuot
char stemp[128];
strcpy(stemp,S);
while((a=getch())!=13)//&&a!=27)//kiem tra phim Enter
{
switch(a)//kiem tra ky tu nhap vao
{
case 0:switch(a=getch())
{
case 71://home
MouseText(l+6,t+(b-t+textheight(S))/2,Color,C1);//,S);
chiso=-strlen(S);
break;
case 72:break;
case 73:break;
case 75://left arrow
int f=textwidth(S);
int xt=l+6+f+(--chiso)*8;
int yt=t+(b-t+textheight(S))/2;
if(xt<l+6)
xt=l+6+f+((++chiso))*8;
MouseText(xt,yt,Color,C1);//,S);//so 8 la be ngang 1 ky tu
break;
case 77://right arrow
if(chiso==0)break;
f=textwidth(S);
MouseText(l+f+6+((++chiso))*8,t+(b-t+textheight(S))/2,Color,C1);//,S);//so 8 la be ngang 1 ky tu
break;
case 79://end
f=textwidth(S);
MouseText(l+f+6,t+(b-t+textheight(S))/2,Color,C1);//,S);
chiso=0;
break;
case 80:
case 81:
case 82:break;
case 83://del
setcolor(GREEN);
outtextxy(l+5,t+(b-t-textheight(S))/2,S);
DelChar(strlen(S));//,chiso);
f=textwidth(S);
setcolor(YELLOW);
outtextxy(l+5,t+(b-t-textheight(S))/2,S);
MouseText(l+f+6+chiso*8,t+(b-t+textheight(S))/2,Color,C1);//,S);//so 8 la be ngang 1 ky tu
break;
}break;
case 8://backspace
setcolor(Color);
outtextxy(l+5,t+(b-t-textheight(S))/2,S);
chiso--;
DelChar(strlen(S));
setcolor(C1);
outtextxy(l+5,t+(b-t-textheight(S))/2,S);
MouseText(l+textwidth(S)+6+chiso*8,t+(b-t+textheight(S))/2,Color,C1);//,S);
break;
case 27://Esc
strcpy(S,stemp);return;
default:
if(a>=32&&a<=126)
{
if((strlen(S)+2)*8>(r-l))break;
setcolor(GREEN);
outtextxy(l+5,t+(b-t-textheight(S))/2,S);
InsertChar(a);
setcolor(C1);
outtextxy(l+5,t+(b-t-textheight(S))/2,S);
MouseText(l+textwidth(S)+6+chiso*8,t+(b-t+textheight(S))/2,Color,C1);//,S);//so 8 la be ngang 1 ky tu
}
}
MouseText(l+textwidth(S)+6,t+(b-t+textheight(S))/2,Color,C1);//,S);//truong hop phim khong co nhiem vu nao dac biet
};
if (S[0]=='\0')
strcpy(S,stemp);
}
//---------------------------------------------------------
void TEXTBOX::DelChar(int length)//xoa ky tu tai vi tri con tro
{
int vitri=length+chiso;
for(int i=vitri;i<length-1;i++)
S[i]=S[i+1];
if(chiso<0)
{
S[length-1]='\0';
chiso++;
}
}
//---------------------------------------------------------
void TEXTBOX::InsertChar(char c)
{
int length=strlen(S);
for(int i=length;i>length+chiso;i--)
S[i]=S[i-1];
S[length+1]='\0';
S[i]=c;
}
//---------------------------------------------------------
int TEXTBOX::DuongDan(char s[])
{
int l=strlen(s),dem,dr;
char s1[200]="",s2[200]="";
dem=l-1;
if(s[1]==':')
switch(toupper(s[0]))
{
case 'A':dr=1;break;
case 'B':dr=2;break;
case 'C':dr=3;break;
case 'D':dr=4;break;
case 'E':dr=5;break;
}
else dr=_getdrive();
for(int i=l-1;i>0;i--)
{
if(s[i]=='\\')
{
dem=i+1;
i=0;
}
else
dem=0;
}
strcat(s2,&s[dem]);
if(dem!=0) dem-=1;
strncpy(s1,s,dem);
strcpy(Path_var,s1);
strcpy(Name,s2);
return dr;
}
//---------------------------------------------------------
void TEXTBOX::Get_name()
{
int n=strlen(Name);
int phan_ten=1;
for(int i=0;i<=n&&phan_ten;i++)
{
if(Name[i]=='.'&&i<n)
{
for(int j=n;j>i;j--)
Name[j]=Name[j-1];
Name[j]='1';
Name[n+1]='\0';
phan_ten=0;
}
if(i==n)
{
Name[i]='1';
Name[i+1]='\0';
}
}
S[0]='\0';
strcat(S,Path_var);
strcat(S,"\\");
strcat(S,Name);
}
C. SỬ DỤNG CHƯƠNG TRÌNH DOWNLOAD.
Để sử dụng chương trình DowLoad, trước tiên phải về màn hình Dos (vì chương trình được viết trong môi trương Dos, không quản lý được các chương trình điều khiển thiết bị sẳn có trong máy, thoát về Dos để tránh những xung đột chương trình).
Gọi tên Demo.exe, lúc đó màn hình sẽ hiện lên như sau:
Để chọn file bằng cách gõ phím, click chuột vào ô Open File.
Ô nhập text
Nút pulldown
Nếu nhắp nút pulldown thì sẽ chọn file theo kiểu click chuột. (hình sau). Chọn ổ đĩa, chọn loại file, chọn tên file và click OK để chọn file.
Sau khi chọn xong file thì trong bảng “Free memory request” xuất hiện các địa chỉ đầu cuối, và dung lượng bộ nhớ sẽ sử dụng.
Sau đó click Send để gởi dữ liệu đi.
Khi quá trình truyền file kết thúc thì xuất hiện thông báo “Task is complete.”
Các file đính kèm theo tài liệu này:
- DO57.DOC