?? lk607w32.c
字號:
#include<windows.h>
#include<string.h>
int PASCAL Wcard(LPSTR inb,LPSTR istr);
int PASCAL Rcard(LPSTR inb,LPSTR instr);
int PASCAL Wcard(LPSTR inb,LPSTR istr)
{
DCB dcb;
COMSTAT comstat;
HANDLE hd;
OVERLAPPED osRW;
DWORD dwBytes,dwError;
int retv=0;
int i=0,stl=0;
long t1,t2;
unsigned char bcc=0,instr[300],nb[]="COM2: baud=9600 ",str[300];
char setting[]="COM2: baud=9600 parity=O data=7 stop=1",comn[]="COM2";
char *ps;
lstrcpy(nb,inb);
AnsiUpper(istr);
lstrcpy(str+1,istr);
comn[3]=nb[3];
lstrcpy(setting,nb);
lstrcat(setting," parity=O data=7 stop=1");
str[0]=2;
while(1)
{
i++;
bcc=str[i]^bcc;
if(str[i]==0)
{
str[i]=3;
bcc=3^bcc ;
str[i+1]=bcc ;
str[i+2]=0 ;
stl=i+2 ;
break ;
}
}
hd=CreateFile( comn, GENERIC_READ | GENERIC_WRITE,
0, // exclusive access
NULL, // no security attrs
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL |
FILE_FLAG_OVERLAPPED, // overlapped I/O
NULL );
if(hd!=INVALID_HANDLE_VALUE)
retv=1;
else
{ retv=-1; goto end; }
if(GetCommState(hd,&dcb)==TRUE)
retv=1;
else
{ retv=-3; goto end; }
if(BuildCommDCB(setting,&dcb)==TRUE)
retv=1;
else
{ retv=-2; goto end; }
if(SetCommState(hd,&dcb)==TRUE)
retv=1;
else
{ retv=-3; goto end; }
WriteFile(hd,str,stl,&dwBytes,&osRW);
ps=instr;
t1=GetTickCount();
t2=0;
GetAsyncKeyState(VK_ESCAPE); //clear the ESC pressed events
while(t2<=100)
{
if(GetAsyncKeyState(VK_ESCAPE)!=0)
{
retv=-5;
goto end;
}
ClearCommError(hd,&dwError,&comstat);
if(comstat.cbInQue!=0)
{
ReadFile(hd,ps,comstat.cbInQue,&dwBytes,&osRW);
ps=ps+comstat.cbInQue;
t1=GetTickCount();
}
if(ps!=instr) t2=GetTickCount()-t1;
}
*ps=0;
if(lstrcmp(str,instr)==0) retv=1;
else retv=-4;
end:
FlushFileBuffers(hd);
EscapeCommFunction(hd,CLRRTS);
CloseHandle(hd);
return retv;
}
int PASCAL Rcard(LPSTR inb,LPSTR instr)
{
DCB dcb;
COMSTAT comstat;
HANDLE hd;
OVERLAPPED osRW;
DWORD dwBytes,dwError;
int i=0,retv=0;
long t1,t2;
unsigned char nb[]="COM2: baud=9600";
char setting[]="COM2: baud=9600 parity=O data=7 stop=1",comn[]="COM2";
unsigned char *ps;
lstrcpy(nb,inb);
comn[3]=nb[3];
lstrcpy(setting,nb);
lstrcat(setting," parity=O data=7 stop=1");
hd=CreateFile( comn, GENERIC_READ | GENERIC_WRITE,
0, // exclusive access
NULL, // no security attrs
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL |
FILE_FLAG_OVERLAPPED, // overlapped I/O
NULL );
if(hd==INVALID_HANDLE_VALUE)
{ retv=-1; goto end; }
if(GetCommState(hd,&dcb)!=TRUE)
{ retv=-3; goto end; }
if(BuildCommDCB(setting,&dcb)!=TRUE)
{ retv=-2; goto end; }
if(SetCommState(hd,&dcb)!=TRUE)
{ retv=-3; goto end; }
ps=instr;
t1=GetTickCount();
t2=0;
GetAsyncKeyState(VK_ESCAPE); //clear the ESC pressed events
while(t2<=100)
{
if(GetAsyncKeyState(VK_ESCAPE)!=0)
{
retv=-5;
goto end;
}
ClearCommError(hd,&dwError,&comstat);
if(comstat.cbInQue!=0)
{
ReadFile(hd,ps,comstat.cbInQue,&dwBytes,&osRW);
ps=ps+comstat.cbInQue;
t1=GetTickCount();
}
if(ps!=instr) t2=GetTickCount()-t1;
}
*ps=0;
if(lstrlen(instr)<=4) retv=-4;
else if(*instr==2)
{
lstrcpy(instr,instr+1);
if(*(instr+lstrlen(instr)-2)==3)
{
*(instr+lstrlen(instr)-2)=0;
retv=lstrlen(instr);
}
else if(*(instr+lstrlen(instr)-1)==3)
{
*(instr+lstrlen(instr)-1)=0;
retv=lstrlen(instr);
}
else retv=-4;
}
else retv=-4;
end:
FlushFileBuffers(hd);
EscapeCommFunction(hd,CLRRTS);
CloseHandle(hd);
return retv;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -