📄 lk607w32.c1
字号:
#include<windows.h>
#include<winbase.h>
#include<string.h>
int PASCAL Wcard(LPSTR inb,LPSTR istr);
int PASCAL Rcard(LPSTR inb,LPSTR instr);
int FAR PASCAL DllMain(HINSTANCE hInstance,WORD wDataSeg,WORD wHeapSize,LPSTR lpszCmdLine)
{
return(1);
}
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<0))
{
retv=1;
}
else
{
retv=-1;
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=GetCurrentTime();
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=GetCurrentTime();
}
if(ps!=instr) t2=GetCurrentTime()-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:96";
char setting[]="COM2:96,o,7,1",comn[]="COM2";
unsigned char *ps;
lstrcpy(nb,inb);
comn[3]=nb[3];
lstrcpy(setting,nb);
lstrcat(setting,",o,7,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<0)
{
retv=-1;
goto end;
}
if(BuildCommDCB(setting,&dcb)!=0)
{
retv=-2;
goto end;
}
if(SetCommState(hd,&dcb)!=0)
{
retv=-3;
goto end;
}
ps=instr;
t1=GetCurrentTime();
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=GetCurrentTime();
}
if(ps!=instr) t2=GetCurrentTime()-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 + -