⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lk607w32.c

📁 写卡用的软件
💻 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 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;   }
    
  WriteFileEx(hd,str,stl,&osRW,NULL);
  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)
    {
     ReadFileEx(hd,ps,comstat.cbInQue,&osRW,NULL);
     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 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)
    {
     ReadFileEx(hd,ps,comstat.cbInQue,&osRW,NULL);
     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 + -