📄 lz.c
字号:
int size,char *buf,int bufLen,int *bufUse)
{
double*v;
chars[64];
intlen;
charformat[16];
v=(double *)value;
switch(chg)
{
case CHG_HTON:
if (*bufUse+size>;bufLen)
return(-1);
if (*v<0)
return(-1);
sprintf(format,"%%0%d.2lf",size+1);
sprintf(s,format,*v);
del_dot(s);
len=strlen(s);
if (len!=size)
return(-1);
memcpy(buf+*bufUse,s,len);
*bufUse=*bufUse+size;
break;
case CHG_NTOH:
if (*bufUse+size>;bufLen)
return(-1);
if (size>;60)
return(-1);
memcpy(s,buf+*bufUse,size);
s[size]='\0';
if (add_dot(s)!=0)
return(-1);
if (sscanf(s,"%lf",v)!=1)
return(-1);
*bufUse=*bufUse+size;
break;
case CHG_HTOS:
case CHG_STOH:
return(chg_move(chg,value,sizeof(double),buf,bufLen,bufUse));
default:
return(-1);
};
return(0);
}
static int chg_double_xn(int chg,void *value,
int size,char *buf,int bufLen,int *bufUse)
{
doublev;
intr;
charx;
switch(chg)
{
case CHG_HTON:
if (*bufUse+size+1>;bufLen)
return(-1);
v=*(double *)value;
if (v==0)
*(buf+*bufUse)='0';
else if (v>;0)
*(buf+*bufUse)=CHAR_CREDIT;
else
{
*(buf+*bufUse)=CHAR_DEBIT;
v=-v;
};
*bufUse=*bufUse+1;
r=chg_double_n(chg,(void *)&v,
size,buf,bufLen,bufUse);
break;
case CHG_NTOH:
if (*bufUse+size+1>;bufLen)
return(-1);
x=*(buf+*bufUse);
if (x!='0'&&x!=CHAR_CREDIT&&x!=CHAR_DEBIT)
return(-1);
*bufUse=*bufUse+1;
r=chg_double_n(chg,(void *)&v,
size,buf,bufLen,bufUse);
if (r!=0)
return(r);
if (x=='0')
{
if (v!=0)
return(-1);
*(double *)value=0;
}
else if (x==CHAR_CREDIT)
*(double *)value=v;
else *(double *)value=-v;
r=0;
break;
case CHG_HTOS:
case CHG_STOH:
return(chg_move(chg,value,sizeof(double),buf,bufLen,bufUse));
default:
r=-1;
};
return(r);
}
static int chg_SecurityCtrlInfo_n(int chg,void *value,
int size,char *buf,int bufLen,int *bufUse)
{
intr;
AB8583_Security_Ctrl_Info *p;
if (chg==CHG_HTOS||chg==CHG_STOH)
return(chg_move(chg,value,sizeof(AB8583_Security_Ctrl_Info),
buf,bufLen,bufUse));
if ((size!=16)
||(*bufUse+size>;bufLen))
return(-1);
p=(AB8583_Security_Ctrl_Info *)value;
r=chg_long_n(chg,(void *)&p->;sync_counter,
8,buf,bufLen,bufUse);
if (r!=0)
goto E;
r=chg_str_n(chg,(void *)&p->;reserved,
7,buf,bufLen,bufUse);
if (r!=0)
goto E;
r=chg_char_n(chg,(void *)&p->;key_type,
1,buf,bufLen,bufUse);
E:
return(r);
}
static int chg_BalanceAmountItem_n(int chg,
AB8583_Balance_Amount_Item *p,
int size,char *buf,int bufLen,int *bufUse)
{
intr;
if ((size!=20)
||(*bufUse+size>;bufLen))
return(-1);
r=chg_str_n(chg,(void *)&p->;account_type,
2,buf,bufLen,bufUse);
if (r!=0)
goto E;
r=chg_str_n(chg,(void *)&p->;amount_type,
2,buf,bufLen,bufUse);
if (r!=0)
goto E;
r=chg_str_n(chg,(void *)&p->;currency_code,
3,buf,bufLen,bufUse);
if (r!=0)
goto E;
r=chg_double_xn(chg,(void *)&p->;amount,
12,buf,bufLen,bufUse);
if (r!=0)
goto E;
E:
return(r);
}
static int chg_BalanceAmount_n(int chg,void *value,
int size,char *buf,int bufLen,int *bufUse)
{
intr;
AB8583_Balance_Amount*p;
charlength[4];
if (chg==CHG_HTOS||chg==CHG_STOH)
return(chg_move(chg,value,sizeof(AB8583_Balance_Amount),
buf,bufLen,bufUse));
if ((size!=43)
||(*bufUse+size>;bufLen))
return(-1);
p=(AB8583_Balance_Amount *)value;
switch(chg)
{
case CHG_HTON:
strcpy(length,"040");
r=chg_str_n(chg,length,
3,buf,bufLen,bufUse);
if (r!=0)
goto E;
break;
case CHG_NTOH:
r=chg_str_n(chg,p->;length,
3,buf,bufLen,bufUse);
if (r!=0)
goto E;
if (strcmp(p->;length,"040")!=0)
{r=-1;
goto E;
};
break;
default:
r=-1;
goto E;
};
r=chg_BalanceAmountItem_n(chg,&p->;ledger_balance,
20,buf,bufLen,bufUse);
if (r!=0)
goto E;
r=chg_BalanceAmountItem_n(chg,&p->;available_balance,
20,buf,bufLen,bufUse);
E:
return(r);
}
static int chg_MessageIndicator_lllvar(int chg,void *value,
int size,char *buf,int bufLen,int *bufUse)
{
intr;
AB8583_Message_Indicator*p;
charlength[4];
if (chg==CHG_HTOS||chg==CHG_STOH)
return(chg_move(chg,value,sizeof(AB8583_Message_Indicator),
buf,bufLen,bufUse));
if ((size!=5)
||(*bufUse+size>;bufLen))
return(-1);
p=(AB8583_Message_Indicator *)value;
switch(chg)
{
case CHG_HTON:
strcpy(length,"005");
r=chg_str_n(chg,length,
3,buf,bufLen,bufUse);
if (r!=0)
goto E;
break;
case CHG_NTOH:
r=chg_str_n(chg,length,
3,buf,bufLen,bufUse);
if (r!=0)
goto E;
if (strcmp(length,"005")!=0)
{r=-1;
goto E;
};
break;
default:
r=-1;
goto E;
};
r=chg_char_n(chg,(void *)&p->;encryption_key_used,
1,buf,bufLen,bufUse);
if (r!=0)
goto E;
r=chg_char_n(chg,(void *)&p->;mac_key_used,
1,buf,bufLen,bufUse);
if (r!=0)
goto E;
r=chg_char_n(chg,(void *)&p->;message_effect,
1,buf,bufLen,bufUse);
if (r!=0)
goto E;
r=chg_str_n(chg,(void *)&p->;no_of_unlogged_txns,
2,buf,bufLen,bufUse);
E:
return(r);
}
static int chg_AuthOperationCode_lllvar(int chg,void *value,
int size,char *buf,int bufLen,int *bufUse)
{
intr;
AB8583_Auth_Operation_Code*p;
charlength[4];
if (chg==CHG_HTOS||chg==CHG_STOH)
return(chg_move(chg,value,sizeof(AB8583_Auth_Operation_Code),
buf,bufLen,bufUse));
if ((size!=22)
||(*bufUse+size+3>;bufLen))
return(-1);
p=(AB8583_Auth_Operation_Code *)value;
switch(chg)
{
case CHG_HTON:
strcpy(length,"022");
r=chg_str_n(chg,length,
3,buf,bufLen,bufUse);
if (r!=0)
goto E;
break;
case CHG_NTOH:
r=chg_str_n(chg,length,
3,buf,bufLen,bufUse);
if (r!=0)
goto E;
if (strcmp(length,"022")!=0)
{r=-1;
goto E;
};
break;
default:
r=-1;
goto E;
};
r=chg_char_n(chg,(void *)&p->;auth_function_code,
1,buf,bufLen,bufUse);
if (r!=0)
goto E;
r=chg_char_n(chg,(void *)&p->;auth_mode,
1,buf,bufLen,bufUse);
if (r!=0)
goto E;
r=chg_str_n(chg,(void *)&p->;auth_id_response_code,
6,buf,bufLen,bufUse);
if (r!=0)
goto E;
r=chg_str_n(chg,(void *)&p->;service_business_code,
4,buf,bufLen,bufUse);
if (r!=0)
goto E;
r=chg_str_n(chg,(void *)&p->;invoice_number,
10,buf,bufLen,bufUse);
E:
return(r);
}
static int chg_OriginalDataElements_n(int chg,void *value,
int size,char *buf,int bufLen,int *bufUse)
{
intr;
AB8583_Original_Data_Elements*p;
if (chg==CHG_HTOS||chg==CHG_STOH)
return(chg_move(chg,value,sizeof(AB8583_Original_Data_Elements),
buf,bufLen,bufUse));
if ((size!=42)
||(*bufUse+size>;bufLen))
return(-1);
p=(AB8583_Original_Data_Elements *)value;
r=chg_str_n(chg,(void *)&p->;org_message_type,
4,buf,bufLen,bufUse);
if (r!=0)
goto E;
r=chg_str_n(chg,(void *)&p->;org_system_trace_number,
6,buf,bufLen,bufUse);
if (r!=0)
goto E;
r=chg_str_n(chg,(void *)&p->;org_transaction_date_time,
10,buf,bufLen,bufUse);
if (r!=0)
goto E;
r=chg_str_n(chg,(void *)&p->;org_acqr_inst_id_code,
11,buf,bufLen,bufUse);
if (r!=0)
goto E;
r=chg_str_n(chg,(void *)&p->;org_forw_inst_id_code,
11,buf,bufLen,bufUse);
E:
return(r);
}
static int chg_ReplacementAmounts_n(int chg,void *value,
int size,char *buf,int bufLen,int *bufUse)
{
intr;
AB8583_Replacement_Amounts*p;
if (chg==CHG_HTOS||chg==CHG_STOH)
return(chg_move(chg,value,sizeof(AB8583_Replacement_Amounts),
buf,bufLen,bufUse));
if ((size!=42)
||(*bufUse+size>;bufLen))
return(-1);
p=(AB8583_Replacement_Amounts *)value;
r=chg_double_n(chg,&p->;actual_amount_of_transaction,
12,buf,bufLen,bufUse);
if (r!=0)
goto E;
r=chg_double_n(chg,&p->;actual_amount_of_settlement,
12,buf,bufLen,bufUse);
if (r!=0)
goto E;
r=chg_double_xn(chg,&p->;actual_amount_of_transaction_fee,
8,buf,bufLen,bufUse);
if (r!=0)
goto E;
r=chg_double_xn(chg,&p->;actual_amount_of_settlement_fee,
8,buf,bufLen,bufUse);
E:
return(r);
}
/************************ HTON or NTOH *********************/
static int chg_AB8583_n(int chg,AB8583 *data,
char *buf,int bufLen,int *bufUse,int *lastField)
{
intr,i;
r=chg_str_n(chg,&data->;message_type,
4,buf,bufLen,bufUse);
if (r!=0)
goto E;
r=chg_bit_bit(chg,&data->;primary_bitmap,
64,buf,bufLen,bufUse);
if (r!=0)
goto E;
for(i=0, r=0; (r==0)&&(chgList.bitName!=0); ++i)
if (AB8583_bitIsSet(data,chgList.bitName))
{
*lastField=chgList.bitName;
r=(*chgList.chgF)(chg,
((char *)data)+chgList.offset,
chgList.size,
buf,bufLen,bufUse);
};
E:
return(r);
}
int AB8583_hton(AB8583 *data,char *buf,int bufLen,int *bufUse,int *lastField)
{
intr;
*bufUse=0;
*lastField=0;
r=chg_AB8583_n(CHG_HTON,data,buf,bufLen,bufUse,lastField);
return(r);
}
int AB8583_ntoh(AB8583 *data,char *buf,int bufLen,int *bufUse,int *lastField)
{
intr;
AB8583_clear(data);
*bufUse=0;
*lastField=0;
r=chg_AB8583_n(CHG_NTOH,data,buf,bufLen,bufUse,lastField);
return(r);
}
int AB8583_htos(AB8583 *data,char *buf,int bufLen,int *bufUse,int *lastField)
{
intr;
*bufUse=0;
*lastField=0;
r=chg_AB8583_n(CHG_HTOS,data,buf,bufLen,bufUse,lastField);
return(r);
}
int AB8583_stoh(AB8583 *data,char *buf,int bufLen,int *bufUse,int *lastField)
{
intr;
AB8583_clear(data);
*bufUse=0;
*lastField=0;
r=chg_AB8583_n(CHG_STOH,data,buf,bufLen,bufUse,lastField);
return(r);
}
int AB8583_Val_to_Val(int BitNum,AB8583 *indata,AB8583 *outdata)
{
int i;
for(i=0;(chgList.bitName!=BitNum)&&(chgList.bitName!=0);i++);
if(chgList.bitName==0) return(-1);
memcpy((char *)outdata+chgList.offset,
(char *)indata+chgList.offset,chgList.valsize);
if(AB8583_setBit(outdata,BitNum)!=0) return(-1);
return(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -