📄 comm.cpp
字号:
for(ci=0;ci<MAXBLOCK;ci++)
check+=bufp[ci]+(bufp[ci]&0x80?0xff00:0);
templen-=MAXBLOCK;bufp+=MAXBLOCK;
};
if((templen-2)>0)
{
WriteCommBlock((LPSTR)bufp,templen-2);
for(ci=0;ci<templen-2;ci++)
check+=bufp[ci]+(bufp[ci]&0x80?0xff00:0);
}
bufp+=templen-2;
abIn[0]=check>>8;
abIn[1]=check&0xff;
WriteCommBlock((LPSTR)abIn,2);
if(packf==0)
bufp+=2;
step=2;
break;
case 2:
old_step=step;
old_bufp=bufp;
if(packf==0)
{
RecordNum++;
SendCommMsg(CSM_RUNNING,RecordNum);
}
if(SendSYN(100))
step=0;
break;
case 4:
old_step=step;
old_bufp=bufp;
WriteCommBlock((LPSTR)BYE,3);
step=5;
break;
case 5:
break;
default:break;
};
}
if((GetTickCount()-start)>MAXTIME)
{
SendCommMsg(CSM_TIMEOUT,0);
bRet=FALSE;
goto finish;
}
}while((step<5)&&(bRet));
finish:
free(buf);
if(step==5)
{
bRet=TRUE;
}
else
bRet=FALSE;
return bRet;
}
BOOL CComm::Xml2Bin()
{
FILE *PdaFile;
BOOL bRet,bOpened;
PdaFile=fopen(m_PdaFileName,"wb");
if(PdaFile==NULL)
{
bRet=FALSE;
goto finish;
}
m_pInXML=new CIn_XML;
m_pInXML->Open(m_XmlFileName, bOpened);
if (!bOpened)
{
fclose(PdaFile);
delete m_pInXML;
SendCommMsg(CSM_INITFAILED,0);
return FALSE;
}
XmlPhone2Bin(PdaFile);
XmlMemo2Bin(PdaFile);
XmlNote2Bin(PdaFile);
XmlSche2Bin(PdaFile);
fwrite("\0\0\0\x1\0\x1",1,6,PdaFile);
fclose(PdaFile);
finish:
m_pInXML->Close();
delete m_pInXML;
m_pInXML = NULL;
return TRUE;
}
BOOL CComm::XmlPhone2Bin(FILE* PdaFile)
{
return TRUE;
}
BOOL CComm::XmlSche2Bin(FILE* PdaFile)
{
return TRUE;
}
BOOL CComm::XmlNote2Bin(FILE* PdaFile)
{
return TRUE;
}
BOOL CComm::XmlMemo2Bin(FILE* PdaFile)
{
return TRUE;
}
BOOL CComm::Bin2Xml()
{
FILE *PdaFile;
RECHEAD1 Rechead1;
RECHEAD2 Rechead2;
unsigned short nRecLen;
bool bRet=TRUE;
m_pOutXML=new COut_XML;
int nStatus;
m_pOutXML->Open(m_XmlFileName, nStatus);
if (!nStatus)
{
SendCommMsg(CSM_INITFAILED,0);
delete m_pOutXML;
return FALSE;
}
PdaFile=fopen(m_PdaFileName,"rb");
if(PdaFile==NULL)
{
SendCommMsg(CSM_INITFAILED,0);
delete m_pOutXML;
return FALSE;
}
PhoneCataFlag=0;
MemoCataFlag=0;
ScheCataFlag=0;
NoteCataFlag=0;
do
{
fread(&Rechead1,sizeof(RECHEAD1),1,PdaFile);
if(memcmp(Rechead1.NoUse1,"\0\0\0\01\0\01",6)==0)
{
break;
}
ExchangeHILO(*(unsigned short*)(Rechead1.RecLen),
(unsigned short*)(Rechead1.RecLen));
*(unsigned short*)(Rechead1.RecLen)+=2;
BYTE * const pPdaRec=new BYTE[*(WORD*)(Rechead1.RecLen)];
nRecLen=fread(pPdaRec,1,*(WORD*)(Rechead1.RecLen),PdaFile);
if(*(WORD*)(Rechead1.RecLen)!=nRecLen)
{
bRet=FALSE;
break;
}
Rechead2=*(RECHEAD2 *)pPdaRec;
BYTE* pTemp=pPdaRec+sizeof(RECHEAD2);
ExchangeHILO(*(unsigned short*)(Rechead2.TypeInfo),
(unsigned short*)(Rechead2.TypeInfo));
switch(*(unsigned short*)(Rechead2.TypeInfo))
{
//电话
case PHONE_TYPE:
BinPhone2Xml(pTemp);
break;
//记事
case MEMO_TYPE:
BinMemo2Xml(pTemp);
break;
//便笺
case NOTE_TYPE:
BinNote2Xml(pTemp);
break;
//日程
case SCHEDULE_TYPE:
BinSche2Xml(pTemp);
break;
//该款Pda不支持其他格式
default:
bRet=FALSE;
break;
}
delete []pPdaRec;
}while(bRet);
fclose(PdaFile);
m_pOutXML->Close();
delete m_pOutXML;
m_pOutXML = NULL;
return bRet;
}
BOOL CComm::BinMemo2Xml(BYTE *pPdaRec)
{
return TRUE;
}
BOOL CComm::BinPhone2Xml(BYTE* pPdaRec)
{
return TRUE;
}
BOOL CComm::BinSche2Xml(BYTE *pPdaRec)
{
return TRUE;
}
BOOL CComm::BinNote2Xml(BYTE *pPdaRec)
{
return TRUE;
}
BYTE CComm::PcSymbolToPda(BYTE pcSym[2])
{
unsigned char *changeSet;
short i;
changeSet=PdaSym;
if(pcSym[0]==0xa1)
{
for(i=0;i<SYMNUMBER;i++)
if(*((unsigned short *)pcSym)==pcChar[i])
return changeSet[i];
if((pcSym[1]==0xa1)||(pcSym[1]==0xab))
return 0x20;
return 0xff;
}
if(pcSym[0]==0xa3)
{
if(pcSym[1]==0xa4)
return 0xa5;
else if((pcSym[1]>=0xb0)&&(pcSym[1]<=0xb9))
return pcSym[1]-0xb0+0x30;
else if((pcSym[1]>=0xe1)&&(pcSym[1]<=0xfa))
return pcSym[1]-0xe1+0x61;
else if(pcSym[1]==0xa8)
return 0x28;
else if(pcSym[1]==0xa9)
return 0x29;
else if(pcSym[1]==0xba)
return 0x3a;
else if(pcSym[1]==0xbf)
return 0x3f;
else if(pcSym[1]==0xac)
return 0x2c;
else if(pcSym[1]==0xa1)
return 0x21;
else if((pcSym[1]==0xfb)||(pcSym[1]==0xfd)||(pcSym[1]==0xbb)||
(pcSym[1]==0xfc)||(pcSym[1]==0xe0))
return 0x20;
else
return pcSym[1]-161+'!';
}
if((pcSym[0]==0xa6)&&(pcSym[1]==0xe4))
return 0x20;
return 0xff;
}
unsigned short CComm::PdaSymbolToPc(BYTE PdaSymbol)
{
BYTE *changeSet;
short i;
changeSet=PdaSym;
for(i=0;i<SYMNUMBER;i++)
if(changeSet[i]==PdaSymbol)
return pcChar[i];
return 0xffff;
}
WORD CComm::PdaToPC( BYTE *target, BYTE *source,WORD RecLen)
{
WORD cLen,k,tmp;
cLen=0;
for(k=0;k<RecLen;k+=2)
{
if(source[k]==0)
{
if(source[k+1]==0x0a)
{
target[cLen]='\x0d';
target[cLen+1]='\x0a';
cLen+=2;
}
else if((tmp=PdaSymbolToPc(source[k+1]))!=0xffff)
{
*((unsigned short *)(target+cLen))=tmp;
cLen+=2;
}
else
{
target[cLen]=source[k+1];
cLen++;
}
}
else
{
target[cLen]=source[k];
target[cLen+1]=source[k+1];
cLen+=2;
}
}
return cLen;
}
WORD CComm::PCToPda( BYTE *target, BYTE *source,WORD RecLen)
{
WORD cLen,k;
BYTE c;
cLen=0;
for(k=0;k<RecLen;)
{
if(source[k]&0x80)
{//汉字
c=PcSymbolToPda(source+k);
if(c!=0xff)
{
target[cLen]=0;
target[cLen+1]=c;
}
else
{
target[cLen]=source[k];
target[cLen+1]=source[k+1];
}
k+=2;
}
else if((source[k]==0x0d) && (source[k+1]==0x0a))
{
target[cLen]=0;
target[cLen+1]=0x0a;
k=k+2;
}
else
{
target[cLen]=0;
target[cLen+1]=source[k];
k++;
}
cLen+=2;
}
return cLen;
}
BOOL CComm::WaitSYN(DWORD dwSleep)
{
DWORD nLength;
DWORD start;
DWORD dwErrorFlags;
COMSTAT ComStat;
BOOL bTimeout;
nLength=0;
start=GetTickCount();
bTimeout=FALSE;
while((nLength==0)&&(!bTimeout)&&(m_bConnected))
{
if(dwSleep) Sleep(dwSleep);
ClearCommError(m_idComDev, &dwErrorFlags, &ComStat);
nLength=ComStat.cbInQue;
bTimeout = (GetTickCount()-start>=SYNTIME);
}
if (bTimeout) {
SendCommMsg(CSM_TIMEOUT,0);
return FALSE;
}
if (!m_bConnected) {
return FALSE;
}
return TRUE;
}
BOOL CComm::SendSYN(DWORD dwSleep)
{
BYTE SYN[1]={0x1};
DWORD nLength;
DWORD start;
DWORD dwErrorFlags;
COMSTAT ComStat;
BOOL bTimeout;
nLength=0;
start=GetTickCount();
bTimeout=FALSE;
while((nLength==0) && (!bTimeout)&&(m_bConnected))
{
WriteCommBlock((LPSTR)SYN,1);
ClearCommError( m_idComDev, &dwErrorFlags, &ComStat ) ;
nLength=ComStat.cbInQue;
bTimeout = (GetTickCount()-start>=SYNTIME);
if((dwSleep)&&(!nLength))
Sleep(dwSleep);
}
if (bTimeout) {
SendCommMsg(CSM_TIMEOUT,0);
return FALSE;
}
if (!m_bConnected)
{
return FALSE;
}
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -