📄 cpack.c
字号:
#include <stdio.h>
#include <memory.h>
#include "mytypes.h"
#include "cpack.h"
static unsigned char _bits[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
void Reverse(unsigned char *buf,int len);
void Reserve(unsigned char *buf,int len)
{
Reverse(buf,len);
}
void Reverse(unsigned char *buf,int len)
{
/*
功能:RS6000上转换字节序
*/
int i;
unsigned char buf1[100];
#ifdef WIN32
return;
#endif
#ifdef NO_REVERSE
return;
#endif
for(i=0;i<len;i++)
{
buf1[i] = buf[len-i-1];
}
memcpy(buf,buf1,len);
}
void _DecodeSingleItem(int idx,ST_PACK *pPack,char **pSrc)
{
/*
*/
unsigned char *p;
short vsl;
p = (unsigned char *)*pSrc;
#define CP(a) memcpy(pPack->a,p,sizeof(pPack->a)); \
p+=sizeof(pPack->a);
#define DP(a) memcpy(&pPack->a,p,sizeof(pPack->a));\
Reverse((unsigned char *)&pPack->a,sizeof(pPack->a));\
p+=sizeof(pPack->a);
#define VP(a) memcpy(&vsl,p,2);\
Reverse((unsigned char *)&vsl,sizeof(short));\
memcpy(pPack->a,p+2,vsl);\
p+=2+vsl;
switch(idx)
{
case F_SCUST_NO:
CP(scust_no);
break;
case F_SCUST_NO2:
CP(scust_no2);
break;
case F_SHOLDER_AC_NO:
CP(sholder_ac_no);
break;
case F_SHOLDER_AC_NO2:
CP(sholder_ac_no2);
break;
case F_SHOLDER_TYPE:
CP(sholder_type);
break;
case F_SHOLDER_TYPE2:
CP(sholder_type2);
break;
case F_SNAME:
CP(sname);
break;
case F_SNAME2:
CP(sname2);
break;
case F_SALL_NAME:
CP(sall_name);
break;
case F_SMARKET_CODE:
CP(smarket_code);
break;
case F_SMARKET_CODE2:
CP(smarket_code2);
break;
case F_SDATE0:
CP(sdate0);
break;
case F_SDATE1:
CP(sdate1);
break;
case F_SDATE2:
CP(sdate2);
break;
case F_SDATE3:
CP(sdate3);
break;
case F_STIME0:
CP(stime0);
break;
case F_STIME1:
CP(stime1);
break;
case F_STIME2:
CP(stime2);
break;
case F_STIME3:
CP(stime3);
break;
case F_LVOL0:
DP(lvol0);
break;
case F_LVOL1:
DP(lvol1);
break;
case F_LVOL2:
DP(lvol2);
break;
case F_LVOL3:
DP(lvol3);
break;
case F_LVOL4:
DP(lvol4);
break;
case F_LVOL5:
DP(lvol5);
break;
case F_LVOL6:
DP(lvol6);
break;
case F_LVOL7:
DP(lvol7);
break;
case F_LVOL8:
DP(lvol8);
break;
case F_LVOL9:
DP(lvol9);
break;
case F_LVOL10:
DP(lvol10);
break;
case F_LVOL11:
DP(lvol11);
break;
case F_LVOL12:
DP(lvol12);
break;
case F_DAMT0:
DP(damt0);
break;
case F_DAMT1:
DP(damt1);
break;
case F_DAMT2:
DP(damt2);
break;
case F_DAMT3:
DP(damt3);
break;
case F_DAMT4:
DP(damt4);
break;
case F_DAMT5:
DP(damt5);
break;
case F_DAMT6:
DP(damt6);
break;
case F_DAMT7:
DP(damt7);
break;
case F_DAMT8:
DP(damt8);
break;
case F_DAMT9:
DP(damt9);
break;
case F_DAMT10:
DP(damt10);
break;
case F_DAMT11:
DP(damt11);
break;
case F_DAMT12:
DP(damt12);
break;
case F_DAMT13:
DP(damt13);
break;
case F_DAMT14:
DP(damt14);
break;
case F_DAMT15:
DP(damt15);
break;
case F_DAMT16:
DP(damt16);
break;
case F_DAMT17:
DP(damt17);
break;
case F_DAMT18:
DP(damt18);
break;
case F_DAMT19:
DP(damt19);
break;
case F_DAMT20:
DP(damt20);
break;
case F_DAMT21:
DP(damt21);
break;
case F_DAMT22:
DP(damt22);
break;
case F_DAMT23:
DP(damt23);
break;
case F_DAMT24:
DP(damt24);
break;
case F_DAMT25:
DP(damt25);
break;
case F_DAMT26:
DP(damt26);
break;
case F_DAMT27:
DP(damt27);
break;
case F_DAMT28:
DP(damt28);
break;
case F_DAMT29:
DP(damt29);
break;
case F_DAMT30:
DP(damt30);
break;
case F_DAMT31:
DP(damt31);
break;
case F_DAMT32:
DP(damt32);
break;
case F_DAMT33:
DP(damt33);
break;
case F_SSTOCK_CODE:
CP(sstock_code);
break;
case F_SSTOCK_CODE2:
CP(sstock_code2);
break;
case F_SCUST_TYPE:
CP(scust_type);
break;
case F_SCUST_TYPE2:
CP(scust_type2);
break;
case F_SSTAT_TYPE:
CP(sstat_type);
break;
case F_SSTAT_TYPE2:
CP(sstat_type2);
break;
case F_SROOM_NO:
CP(sroom_no);
break;
case F_SROOM_NO2:
CP(sroom_no2);
break;
case F_SOPEN_EMP:
CP(sopen_emp);
break;
case F_SCLOSE_EMP:
CP(sclose_emp);
break;
case F_SCHANGE_EMP:
CP(schange_emp);
break;
case F_SCHECK_EMP:
CP(scheck_emp);
break;
case F_SEMP:
CP(semp);
break;
case F_SNATION_CODE:
CP(snation_code);
break;
case F_LCERT_CODE:
DP(lcert_code);
break;
case F_STX_PWD:
CP(stx_pwd);
break;
case F_STX_PWD2:
CP(stx_pwd2);
break;
case F_SWITHDRAW_PWD:
CP(swithdraw_pwd);
break;
case F_SWITHDRAW_PWD2:
CP(swithdraw_pwd2);
break;
case F_SEMP_PWD:
CP(semp_pwd);
break;
case F_SEMP_PWD2:
CP(semp_pwd2);
break;
case F_SBANK_PWD:
CP(sbank_pwd);
break;
case F_SBANK_PWD2:
CP(sbank_pwd2);
break;
case F_SCUST_AUTH:
CP(scust_auth);
break;
case F_SCUST_AUTH2:
CP(scust_auth2);
break;
case F_SCUST_LIMIT:
CP(scust_limit);
break;
case F_SCUST_LIMIT2:
CP(scust_limit2);
break;
case F_LSAFE_LEVEL:
DP(lsafe_level);
break;
case F_LSAFE_LEVEL2:
DP(lsafe_level2);
break;
case F_SPOST_CODE:
CP(spost_code);
break;
case F_SPOST_CODE2:
CP(spost_code2);
break;
case F_SPHONE:
CP(sphone);
break;
case F_SPHONE2:
CP(sphone2);
break;
case F_SPHONE3:
CP(sphone3);
break;
case F_SPAGER:
CP(spager);
break;
case F_SEMAIL:
CP(semail);
break;
case F_SEMAIL2:
CP(semail2);
break;
case F_SNOTE:
CP(snote);
break;
case F_SNOTE2:
CP(snote2);
break;
case F_SCERT_NO:
CP(scert_no);
break;
case F_SCERT_NO2:
CP(scert_no2);
break;
case F_SCERT_ADDR:
CP(scert_addr);
break;
case F_SSTATUS0:
CP(sstatus0);
break;
case F_SSTATUS1:
CP(sstatus1);
break;
case F_SSTATUS2:
CP(sstatus2);
break;
case F_SSTATUS3:
CP(sstatus3);
break;
case F_SSTATUS4:
CP(sstatus4);
break;
case F_LWITHDRAW_FLAG:
DP(lwithdraw_flag);
break;
case F_SADDR:
CP(saddr);
break;
case F_SADDR2:
CP(saddr2);
break;
case F_SSERIAL0:
CP(sserial0);
break;
case F_SSERIAL1:
CP(sserial1);
break;
case F_SSERIAL2:
CP(sserial2);
break;
case F_SSERIAL3:
CP(sserial3);
break;
case F_SSERIAL4:
CP(sserial4);
break;
case F_SCURRENCY_TYPE:
CP(scurrency_type);
break;
case F_SCURRENCY_TYPE2:
CP(scurrency_type2);
break;
case F_SBRANCH_CODE0:
CP(sbranch_code0);
break;
case F_SBRANCH_CODE1:
CP(sbranch_code1);
break;
case F_SBRANCH_CODE2:
CP(sbranch_code2);
break;
case F_USSET0:
CP(usset0);
break;
case F_USSET1:
CP(usset1);
break;
case F_USSET2:
CP(usset2);
break;
case F_USSET3:
CP(usset3);
break;
case F_USSET4:
CP(usset4);
break;
case F_USSET5:
CP(usset5);
break;
case F_USSET6:
CP(usset6);
break;
case F_SSTATION0:
CP(sstation0);
break;
case F_SSTATION1:
CP(sstation1);
break;
case F_SBANK_ACC:
CP(sbank_acc);
break;
case F_SBANK_ACC2:
CP(sbank_acc2);
break;
case F_LBANK_ACC_TYPE:
DP(lbank_acc_type);
break;
case F_LBANK_ACC_TYPE2:
DP(lbank_acc_type2);
break;
case F_SMAIN_FLAG:
CP(smain_flag);
break;
case F_SMAIN_FLAG2:
CP(smain_flag2);
break;
case F_SBANK_CODE:
CP(sbank_code);
break;
case F_SBANK_CODE2:
CP(sbank_code2);
break;
case F_SEMP_NO:
CP(semp_no);
break;
case F_SEMP_NO2:
CP(semp_no2);
break;
case F_DRATE0:
DP(drate0);
break;
case F_DRATE1:
DP(drate1);
break;
case F_LSERIAL0:
DP(lserial0);
break;
case F_LSERIAL1:
DP(lserial1);
break;
case F_SBANKNAME:
CP(sbankname);
break;
case F_SBANKNAME2:
CP(sbankname2);
break;
case F_SCARD0:
CP(scard0);
break;
case F_SCARD1:
CP(scard1);
break;
case F_SORDER0:
CP(sorder0);
break;
case F_SORDER1:
CP(sorder1);
break;
case F_SORDER2:
CP(sorder2);
break;
case F_SCUSTTYPES:
CP(scusttypes);
break;
case F_SSECTYPES:
CP(ssectypes);
break;
case F_VSMESS:
VP(vsmess);
break;
case F_VSVARSTR0:
VP(vsvarstr0);
break;
case F_VSVARSTR1:
VP(vsvarstr1);
break;
case F_VSVARSTR2:
VP(vsvarstr2);
break;
case F_VSVARSTR3:
VP(vsvarstr3);
break;
default:
printf("decodesingleitem no this param =%d ......\n",idx);
}
*pSrc = (char *)p;
#undef CP
#undef DP
#undef VP
}
BOOL DecodeBufHead(unsigned char *buf,int len,ST_CPACK *pPack,char *eMsg)
{
unsigned char *p;
if (len< sizeof(ST_PACKHEAD))
{
sprintf(eMsg,"包大小小于包头的大小。[%d][%d]\n",len,sizeof(ST_PACKHEAD));
return FALSE;
}
p = buf;
memcpy(&pPack->head,p,sizeof(ST_PACKHEAD));
Reverse((unsigned char *)&pPack->head.RequestType,sizeof(pPack->head.RequestType));
Reverse((unsigned char *)&pPack->head.firstflag,sizeof(pPack->head.firstflag));
Reverse((unsigned char *)&pPack->head.nextflag,sizeof(pPack->head.nextflag));
Reverse((unsigned char *)&pPack->head.recCount,sizeof(pPack->head.recCount));
Reverse((unsigned char *)&pPack->head.retCode,sizeof(pPack->head.retCode));
Reverse((unsigned char *)&pPack->head.hook.UserID,sizeof(pPack->head.hook.UserID));
Reverse((unsigned char *)&pPack->head.hook.queuetype,sizeof(pPack->head.hook.queuetype));
return TRUE;
}
BOOL DecodeBuf(unsigned char *buf,int len,ST_CPACK *pPack,char *eMsg)
{
unsigned char *p;
int i;
ST_PACKHEAD *ph;
unsigned char b0;
int j;
int result;
if (len< sizeof(ST_PACKHEAD))
{
sprintf(eMsg,"包大小小于包头的大小。[%d][%d]\n",len,sizeof(ST_PACKHEAD));
return FALSE;
}
p = buf;
memcpy(&pPack->head,p,sizeof(ST_PACKHEAD));
Reverse((unsigned char *)&pPack->head.RequestType,sizeof(pPack->head.RequestType));
Reverse((unsigned char *)&pPack->head.firstflag,sizeof(pPack->head.firstflag));
Reverse((unsigned char *)&pPack->head.nextflag,sizeof(pPack->head.nextflag));
Reverse((unsigned char *)&pPack->head.recCount,sizeof(pPack->head.recCount));
Reverse((unsigned char *)&pPack->head.retCode,sizeof(pPack->head.retCode));
Reverse((unsigned char *)&pPack->head.hook.UserID,sizeof(pPack->head.hook.UserID));
Reverse((unsigned char *)&pPack->head.hook.queuetype,sizeof(pPack->head.hook.queuetype));
p+=sizeof(ST_PACKHEAD);
ph = &pPack->head;
memset(&pPack->pack,0,sizeof(pPack->pack));
for(i=0;i<PARMBITS/BITSPERBYTE;i++)
{
b0 = ph->ParmBits[i];
for(j=0;j<8;j++)
{
if (b0 & _bits[j])
result = (i<<8)+_bits[j];
else
continue;
_DecodeSingleItem(result,&pPack->pack,(char **)&p);
}
}
return TRUE;
}
BOOL DecodeBufWithArray(unsigned char *buf,int len,ST_CPACK *pPack,ST_PACK *packArray,
int *recCount,char *eMsg)
{
unsigned char *p;
int i;
int cnt;
ST_PACKHEAD *ph;
unsigned char b0;
int j;
int result;
ST_PACK *pp;
if (len< sizeof(ST_PACKHEAD))
{
sprintf(eMsg,"包大小小于包头的大小。[%d][%d]\n",len,sizeof(ST_PACKHEAD));
return FALSE;
}
p = buf;
memcpy(&pPack->head,p,sizeof(ST_PACKHEAD));
Reverse((unsigned char *)&pPack->head.RequestType,sizeof(pPack->head.RequestType));
Reverse((unsigned char *)&pPack->head.firstflag,sizeof(pPack->head.firstflag));
Reverse((unsigned char *)&pPack->head.nextflag,sizeof(pPack->head.nextflag));
Reverse((unsigned char *)&pPack->head.recCount,sizeof(pPack->head.recCount));
Reverse((unsigned char *)&pPack->head.retCode,sizeof(pPack->head.retCode));
Reverse((unsigned char *)&pPack->head.hook.UserID,sizeof(pPack->head.hook.UserID));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -