1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Giáo trình hướng dẫn tìm hiểu cách tạo các cổng giao tiếp trong các thiết bị ngoại vi phần 4 docx

10 441 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 183,56 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

B.Module Demo.cpp #include #include #include #include #include #include #include #include #include #include #include #include "screen.h" #include "mouse.h" #include "button.hp

Trang 1

B.Module Demo.cpp

#include <conio.h>

#include <stdio.h>

#include <stdlib.h>

#include <graphics.h>

#include <string.h>

#include <dos.h>

#include <math.h>

#include <complex.h>

#include <time.h>

#include <dir.h>

#include <ctype.h>

#include "screen.h"

#include "mouse.h"

#include "button.hpp"

#include "textbox.hpp"

#include "list.hpp"

#include "disklist.hpp"

#include "send.hpp"

#define NumBox 2

#define NumBut 2

LPEVENT lpEvent; //bien chua cac bien co chuot

char szMessage[128];

BUTTON But[NumBut],NutKiem;

TEXTBOX Box[NumBox],Port;

char DiskName[27],DName;

char ftype[15]="*.prn";

char inter_Path[100]="";

char RequF[100];

unsigned int St_address,End_address=0;

char Sta_hex[5],End_hex[5];

// -

int TestPressedButton(int x,LPEVENT lpEvent);

int TestPressTexbox(int x,LPEVENT lpEvent,char layra[],unsigned

*attribp);

void MainProgram();

int TestPressList(LIST L,LPEVENT lpEvent,char s[],unsigned

*attrib,char *typ);//nhap bang liet ke

int SendFile();

// -

void main(void)

{

InitGraphics();

InitValues("Download Program.");

InitScreen();

if (!InitMouse(&MainWindow.rViewPort))

{

OutMessage("Mouse driver not found Init mouse and return"); getch();

closegraph();

exit(1);

}

ShowMouse();

MainProgram();

closegraph();

}

Trang 2

// -

void MainProgram()

{

char Name[20],buffer[MAXPATH];

unsigned attrib,Attribp;

SEND Send;

LIST L;

But[0].InitButton(200,380,250,400,LIGHTGRAY,"Send");

But[1].InitButton(400,380,450,400,LIGHTGRAY,"Exit");

Box[0].InitTextBox(50,70,477,90,GREEN,LIGHTGREEN,"Open File"); Port.InitTextBox(50,270,250,290,GREEN,LIGHTGREEN,"Out port");

Port.GetS_in("LPT1");

L.InitList(480,70,500,90,LIGHTGRAY);

But[0].OutButton();//xuat nut lenh

But[1].OutButton();//xuat nut lenh

Box[0].OutTextBox();//xuat hop nhap text

Port.OutTextBox();

L.Show();

setcolor(BLACK);

line(50,150,250,150);

line(50,150,50,215);

setcolor(WHITE);

line(50,215,250,215);

line(250,150,250,215);

outtextxy(50,130,"Free memory request");

outtextxy(55,158,"Start ad :");

outtextxy(55,178,"End ad :");

outtextxy(55,198,"Total :");

OutMessage("Click mouse to chose action");

int kkkk;

char RequestFile[15]="";

do//kiem tra nhap chuot chon cong viec

{

ShowMouse();

lpEvent = GetEvent();//lay bien co chuot

if(TestPressedButton(2,lpEvent)==0)//kiem tra xem da click vao nut nao

//0:nhan OK

{

char InName[100],OutName[100];

Box[0].GetS(InName);

if(InName[strlen(InName)-1]=='\\')

InName[strlen(InName)-1]='\0';

_dos_getfileattr(InName,&attrib);

if(attrib==16)

{

OutMessage("");

OutError("Please enter a file name");

OutMessage("Click mouse to chose action");

}

else//la file

{

if(End_address!=0)

{

if(OutError("Are you sure ?"))

{

OutMessage("Sending Press Esc to stop if time is over.");

Send.CatFile(Sta_hex,End_hex,inter_Path);

Trang 3

Send.Out();

if(Send.Out()!=-1) {

HideMouse();

OutMessage("");

OutError("Task is complete.");

OutMessage("Click mouse to choose action");

} else { HideMouse();

OutMessage("Click mouse to choose action");

} }

}

}

}//if(TestPressedButton

if(TestPressList(L,lpEvent,Name,&attrib,ftype)==1)

//chon OK

{

switch (attrib)

{

case 16:chdir(Name);

getcwd(buffer, MAXPATH);//lay duong dan hien thoi vao buffer

strcpy(inter_Path,buffer);

Box[0].GetS_in(inter_Path);

Box[0].OutTextBox();

break;

default:

getcwd(buffer, MAXPATH);//lay duong dan hien thoi vao buffer

strcpy(inter_Path,buffer);

if(inter_Path[strlen(inter_Path)-1]!='\\') strcat(inter_Path,"\\");

strcat(inter_Path,Name);

Box[0].GetS_in(inter_Path);

Box[0].DuongDan(inter_Path);

Box[0].OutTextBox();

break;

}//end switch

}//if(TestPressList(

//chon Cancel

TestPressTexbox(NumBox,lpEvent,inter_Path,&Attribp);//Path lay

ra duong dan cho file nhap vao

//ShowMouse();

if(kbhit())

{

kkkk=getch();

if(kkkk==0)kkkk=getch();

}

Box[0].GetS(RequF);

{

int n=strlen(RequF);

if(n>5)//?.???

if(RequF[n-1]!='\\')

{

while(n>0&&RequF[n-1]!='\\')

{

n ;

}

char *strtemp=RequF;

Trang 4

for(int m=0;m<n;m++)

strtemp++;

if(strcmp(RequestFile,strtemp))//neu file chon co thay doi {

setfillstyle(SOLID_FILL,CYAN);

bar(155,155,245,210);

strcpy(RequestFile,strtemp);

strtemp+=strlen(strtemp)-4;

if(!strcmp(strtemp,".prn"))//neu dung file prn

{

FILE *f;

if ((f = fopen(RequF,"rb")) == NULL) {

fprintf(stderr, "Cannot open input file.\n");

return ; }

else//neu mo duoc file {

clock_t start, end;

int period=0;

char c,address[7],buf[8];

int thoat;

int dem;

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};

double Value1=0,Value2=0;

char Total[10];

int FindPos,FindValue;

start = clock();

do {

fread(&c,1,1,f);

end = clock();

}while(c!='\''&&(period=(end - start) / CLK_TCK)<10); if(period>=2) goto Error;

fseek(f,-5,SEEK_CUR);

fread(address,10,1,f);

address[4]='\0';

strcpy(Sta_hex,address);

HideMouse();

strcat(address," Hex");

outtextxy(170,158,address);

for (FindPos=3;FindPos>=0;FindPos )

for(FindValue=0;FindValue<22;FindValue++) if(address[FindPos]==KyTu_Hex[FindValue])

Value1+=pow(16,(3-FindPos))*Gtri_Dec[FindValue];

St_address=(unsigned int)Value1;

ShowMouse();

thoat=1;

start = clock();

do {

Trang 5

do { fread(&c,1,1,f);

end = clock();

}while(c!='m'&&c!='M'&&(period=(end - start) / CLK_TCK)<10);

if(period>=10) goto Error;

fseek(f,-1,SEEK_CUR);

fread(buf,7,1,f);

buf[7]='\0';

end = clock();

if(!strcmp(buf,"Macros:")||!strcmp(buf,"MACROS:")||!strcmp(buf," macros:"))

thoat=0;

}while(thoat&&(period=(end - start) / CLK_TCK)<15); if(period>=15) goto Error;

fseek(f,-1,SEEK_CUR);

start = clock();

do {

dem=0;

do { fread(&c,1,1,f);

if(c=='\n') fseek(f,-3,SEEK_CUR);

else fseek(f,-2,SEEK_CUR);

end = clock();

}while(c!='\''&&(period=(end - start) / CLK_TCK)<10);

if(period>=10) goto Error;

do { dem++;

fread(&c,1,1,f);

if(c=='\n') dem=20;

fseek(f,-2,SEEK_CUR);

end = clock();

}while(dem<10&&(period=(end - start) / CLK_TCK)<15); if(period>=15) goto Error;

end = clock();

}while(dem!=20&&(period=(end - start) / CLK_TCK)<15); if(period>=15) goto Error;

fseek(f,2,SEEK_CUR);

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 )

Trang 6

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()<=

lpEvent->Posx&&But[i].Top()<=lpEvent->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();

Trang 7

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()<=

lpEvent->Posx&&Box[i].Top()<=lpEvent->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]);

Trang 8

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()<=

lpEvent->Posx&&L.Top()<=lpEvent->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

Trang 9

III.MODULE BUTTON.CPP

#include <graphics.h>

#include <string.h>

#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 <dir.h>

#include <alloc.h>

#include <stdio.h>

#include <conio.h>

#include <string.h>

#include <graphics.h>

Trang 10

#include <bios.h>

#include <PROCESS.H>

// <PROCESS.H, STDLIB.H>

#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);

Ngày đăng: 10/08/2014, 01:22

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm