📄 lz.c
字号:
#include <stdio.h>;
#include <string.h>;
#include <stddef.h>;
#include "AB8583.h"
#define SIZEOF(type,value)((int)(sizeof(((type *)0)->;value)))
#define CHG(value)AB_BIT_##value,offsetof(AB8583,value),SIZEOF(AB8583,value)
#define CHG_HTON1
#define CHG_NTOH2
#define CHG_HTOS3
#define CHG_STOH4
#defineCHAR_CREDIT'C'
#defineCHAR_DEBIT'D'
typedef struct
{
intbitName;
intoffset;
intvalsize;
intsize;
int(*chgF)(int chg,void *value,int size,
char *buf,int bufLen,int *bufUse);
} AB8583Chg;
static int chg_char_n(int chg,void *value,
int size,char *buf,int bufLen,int *bufUse);
static int chg_str_n(int chg,void *value,
int size,char *buf,int bufLen,int *bufUse);
static int chg_str_llvar(int chg,void *value,
int size,char *buf,int bufLen,int *bufUse);
static int chg_str_lllvar(int chg,void *value,
int size,char *buf,int bufLen,int *bufUse);
static int chg_bit_bit(int chg,void *value,
int size,char *buf,int bufLen,int *bufUse);
static int chg_long_n(int chg,void *value,
int size,char *buf,int bufLen,int *bufUse);
static int chg_long_lllvar(int chg,void *value,
int size,char *buf,int bufLen,int *bufUse);
static int chg_double_n(int chg,void *value,
int size,char *buf,int bufLen,int *bufUse);
static int chg_double_xn(int chg,void *value,
int size,char *buf,int bufLen,int *bufUse);
static int chg_SecurityCtrlInfo_n(int chg,void *value,
int size,char *buf,int bufLen,int *bufUse);
static int chg_BalanceAmount_n(int chg,void *value,
int size,char *buf,int bufLen,int *bufUse);
static int chg_MessageIndicator_lllvar(int chg,void *value,
int size,char *buf,int bufLen,int *bufUse);
static int chg_AuthOperationCode_lllvar(int chg,void *value,
int size,char *buf,int bufLen,int *bufUse);
static int chg_OriginalDataElements_n(int chg,void *value,
int size,char *buf,int bufLen,int *bufUse);
static int chg_ReplacementAmounts_n(int chg,void *value,
int size,char *buf,int bufLen,int *bufUse);
static AB8583ChgchgList[]
={
{ CHG(extend_bitmap),64, chg_bit_bit },
{ CHG(primary_account_number),19, chg_str_llvar },
{ CHG(processing_code),6, chg_str_n },
{ CHG(amount_of_transactions),12, chg_double_n },
{ CHG(amount_of_settlement),10, chg_double_n },
{ CHG(transmission_date_and_time),10, chg_long_n },
{ CHG(system_trace_audit_number),6, chg_long_n },
{ CHG(time_of_local_transaction),6, chg_str_n },
{ CHG(date_of_local_transaction),4, chg_str_n },
{ CHG(date_of_settlement),4, chg_str_n },
{ CHG(date_of_capture),4, chg_str_n },
{ CHG(business_type),3, chg_str_n },
{ CHG(point_of_service_entry_mode),3, chg_str_n },
{ CHG(point_of_service_PIN_capture_code),2, chg_str_n },
{ CHG(fee_of_transaction),8, chg_double_n },
{ CHG(fee_of_kick_back),8, chg_double_xn },
{ CHG(acquiring_institution_id_code),11, chg_str_llvar },
{ CHG(forwarding_institution_id_code),11, chg_str_llvar },
{ CHG(track_2_data),37, chg_str_llvar },
{ CHG(track_3_data),104,chg_str_lllvar },
{ CHG(retrieval_reference_number),12, chg_str_n },
{ CHG(auth_id_response),6, chg_str_n },
{ CHG(response_code),2, chg_str_n },
{ CHG(card_acceptor_terminal_id),8, chg_str_n },
{ CHG(card_acceptor_id_code),15, chg_str_n },
{ CHG(card_acceptor_name_location),40, chg_str_n },
{ CHG(additional_response_data),25, chg_str_llvar },
{ CHG(broadcast_message),999,chg_str_lllvar },
{ CHG(currency_code_of_transaction),3, chg_str_n },
{ CHG(currency_code_of_settlement),3, chg_str_n },
{ CHG(PIN),64, chg_bit_bit },
{ CHG(security_ctrl_info),16, chg_SecurityCtrlInfo_n },
{ CHG(balance_amount),43, chg_BalanceAmount_n },
{ CHG(second_account_number),19, chg_str_n },
{ CHG(message_indicator),5, chg_MessageIndicator_lllvar},
{ CHG(auth_operation_code), 22,chg_AuthOperationCode_lllvar},
{ CHG(auth_agent_institution_id_code),11, chg_str_lllvar },
{ CHG(destination_institution_id_code),11, chg_str_lllvar },
{ CHG(MAC64),64, chg_bit_bit},
{ CHG(settlement_code),1, chg_char_n },
{ CHG(network_management_information_code),3, chg_str_n },
{ CHG(date_of_action),6, chg_str_n },
{ CHG(number_of_credits),10, chg_long_n },
{ CHG(reversal_number_of_credits),10, chg_long_n },
{ CHG(number_of_debits),10, chg_long_n },
{ CHG(reversal_number_of_debits),10, chg_long_n },
{ CHG(number_of_transfer),10, chg_long_n },
{ CHG(reversal_number_of_transfer),10, chg_long_n },
{ CHG(number_of_inquiries),10, chg_long_n },
{ CHG(number_of_authorizations),10, chg_long_n },
{ CHG(processing_fee_amount_of_credits),12, chg_double_n },
{ CHG(processing_fee_amount_of_debits),12, chg_double_n },
{ CHG(amount_of_credits),16, chg_double_n },
{ CHG(reversal_amount_of_credits),16, chg_double_n },
{ CHG(amount_of_debits),16, chg_double_n },
{ CHG(reversal_amount_of_debits),16, chg_double_n },
{ CHG(original_data_elements),42, chg_OriginalDataElements_n},
{ CHG(replacement_amounts),42, chg_ReplacementAmounts_n },
{ CHG(message_security_code),64, chg_bit_bit },
{ CHG(amount_of_net_settlement),16, chg_double_xn },
{ CHG(settlement_institution_id_code),11, chg_str_llvar },
{ CHG(receiveing_institution_id_code),11, chg_str_llvar },
{ CHG(trans_rem),100,chg_str_lllvar },
{ CHG(sender_institution_id_code),11, chg_str_lllvar },
{ CHG(sender_reference_number),12, chg_long_lllvar },
{ CHG(pid_no),15, chg_str_lllvar },
{ CHG(operator),16, chg_str_lllvar },
{ CHG(checker),16, chg_str_lllvar },
{ CHG(add_auth_id_response),13, chg_str_lllvar },
{ CHG(MAC),64, chg_bit_bit},
{ 0,0,0,0,NULL}
};
static int chg_move(int chg,void *value,
int size,char *buf,int bufLen,int *bufUse)
{
if (*bufUse+size>;bufLen)
return(-1);
switch(chg)
{
case CHG_HTOS:
memcpy(buf+*bufUse,value,size);break;
case CHG_STOH:
memcpy(value,buf+*bufUse,size);break;
default:
return(-1);
};
*bufUse=*bufUse+size;
return(0);
}
static int chg_str_move(int chg,void *value,
int size,char *buf,int bufLen,int *bufUse)
{
intlen;
switch(chg)
{
case CHG_HTOS:
len=strlen((char *)value);
if ((len>;size)||(*bufUse+len>;bufLen))
return(-1);
strcpy(buf+*bufUse,(char *)value);
*bufUse=*bufUse+len+1;
break;
case CHG_STOH:
len=strlen(buf+*bufUse);
if ((len>;size)||(*bufUse+len>;bufLen))
return(-1);
strcpy((char *)value,buf+*bufUse);
*bufUse=*bufUse+len+1;
break;
default:
return(-1);
};
return(0);
}
static int chg_char_n(int chg,void *value,
int size,char *buf,int bufLen,int *bufUse)
{
switch(chg)
{
case CHG_HTON:
if (*bufUse+size>;bufLen)
return(-1);
memcpy(buf+*bufUse,value,size);
*bufUse=*bufUse+size;
break;
case CHG_NTOH:
if (*bufUse+size>;bufLen)
return(-1);
memcpy(value,buf+*bufUse,size);
*bufUse=*bufUse+size;
break;
case CHG_HTOS:
case CHG_STOH:
return(chg_move(chg,value,size,buf,bufLen,bufUse));
default:
return(-1);
};
return(0);
}
static int chg_str_n(int chg,void *value,
int size,char *buf,int bufLen,int *bufUse)
{
intlen,i;
switch(chg)
{
case CHG_HTON:
if (*bufUse+size>;bufLen)
return(-1);
len=strlen((char *)value);
strncpy(buf+*bufUse,(char *)value,size);
if (len<size)
memset(buf+*bufUse+len,' ',size-len);
*bufUse=*bufUse+size;
break;
case CHG_NTOH:
if (*bufUse+size>;bufLen)
return(-1);
strncpy((char *)value,buf+*bufUse,size);
((char *)value)[size]='\0';
for(i=size-1; i>;0&&(((char *)value)==' '); --i)
((char *)value)='\0';
*bufUse=*bufUse+size;
break;
case CHG_HTOS:
case CHG_STOH:
return(chg_str_move(chg,value,size,buf,bufLen,bufUse));
default:
return(-1);
};
return(0);
}
static int chg_str_llvar(int chg,void *value,
int size,char *buf,int bufLen,int *bufUse)
{
inti,len;
char*s;
charc1,c2;
s=(char *)value;
switch(chg)
{
case CHG_HTON:
len=strlen(s);
if ((len>;99)||(len>;size)||(*bufUse+len+2>;bufLen))
return(-1);
buf[*bufUse]=(char)('0'+len/10);
buf[*bufUse+1]=(char)('0'+len%10);
if (len>;0)
strncpy(buf+*bufUse+2,s,len);
*bufUse=*bufUse+2+len;
break;
case CHG_NTOH:
if (*bufUse+2>;bufLen)
return(-1);
c1=buf[*bufUse];
c2=buf[*bufUse+1];
if ((c1<'0')||(c1>;'9')||(c2<'0')||(c2>;'9'))
return(-1);
len=(c1-'0')*10+(c2-'0');
if (*bufUse+2+len>;bufLen)
return(-1);
if (len>;0)
memcpy(s,buf+*bufUse+2,len);
s[len]='\0';
*bufUse=*bufUse+2+len;
break;
case CHG_HTOS:
case CHG_STOH:
return(chg_str_move(chg,value,size,buf,bufLen,bufUse));
default:
return(-1);
};
return(0);
}
static int chg_str_lllvar(int chg,void *value,
int size,char *buf,int bufLen,int *bufUse)
{
inti,len;
char*s;
charc1,c2,c3;
s=(char *)value;
switch(chg)
{
case CHG_HTON:
len=strlen(s);
if ((len>;999)||(len>;size)||(*bufUse+len+3>;bufLen))
return(-1);
buf[*bufUse]=(char)('0'+len/100);
buf[*bufUse+1]=(char)('0'+(len%100)/10);
buf[*bufUse+2]=(char)('0'+len%10);
if (len>;0)
strncpy(buf+*bufUse+3,s,len);
*bufUse=*bufUse+3+len;
break;
case CHG_NTOH:
if (*bufUse+2>;bufLen)
return(-1);
c1=buf[*bufUse];
c2=buf[*bufUse+1];
c3=buf[*bufUse+2];
if ((c1<'0')||(c1>;'9')
||(c2<'0')||(c2>;'9')
||(c3<'0')||(c3>;'9'))
return(-1);
len=(c1-'0')*100+(c2-'0')*10+(c3-'0');
if (*bufUse+3+len>;bufLen)
return(-1);
if (len>;0)
memcpy(s,buf+*bufUse+3,len);
s[len]='\0';
*bufUse=*bufUse+3+len;
break;
case CHG_HTOS:
case CHG_STOH:
return(chg_str_move(chg,value,size,buf,bufLen,bufUse));
default:
return(-1);
};
return(0);
}
static int chg_bit_bit(int chg,void *value,
int size,char *buf,int bufLen,int *bufUse)
{
switch(chg)
{
case CHG_HTON:
if (*bufUse+size/8>;bufLen)
return(-1);
memcpy(buf+*bufUse,value,size/8);
*bufUse=*bufUse+size/8;
break;
case CHG_NTOH:
if (*bufUse+size/8>;bufLen)
return(-1);
memcpy(value,buf+*bufUse,size/8);
*bufUse=*bufUse+size/8;
break;
case CHG_HTOS:
case CHG_STOH:
return(chg_move(chg,value,size/8,buf,bufLen,bufUse));
default:
return(-1);
};
return(0);
}
static int chg_long_n(int chg,void *value,
int size,char *buf,int bufLen,int *bufUse)
{
unsigned long*v;
chars[32];
intlen;
charformat[16];
v=(unsigned long *)value;
switch(chg)
{
case CHG_HTON:
if (*bufUse+size>;bufLen)
return(-1);
sprintf(format,"%%0%du",size);
sprintf(s,format,*v);
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>;30)
return(-1);
memcpy(s,buf+*bufUse,size);
s[size]='\0';
if (sscanf(s,"%u",v)!=1)
return(-1);
*bufUse=*bufUse+size;
break;
case CHG_HTOS:
case CHG_STOH:
return(chg_move(chg,value,sizeof(long),buf,bufLen,bufUse));
default:
return(-1);
};
return(0);
}
static int chg_long_lllvar(int chg,void *value,
int size,char *buf,int bufLen,int *bufUse)
{
unsigned long*v;
chars[32];
intlen;
charformat[16];
v=(unsigned long *)value;
switch(chg)
{
case CHG_HTON:
if (*bufUse+size+3>;bufLen)
return(-1);
sprintf(s,"%u",*v);
len=strlen(s);
if (len>;size)
return(-1);
buf[*bufUse]='0'+(char)(len/100);
buf[*bufUse+1]='0'+(char)((len%100)/10);
buf[*bufUse+2]='0'+(char)(len%10);
memcpy(buf+(*bufUse)+3,s,len);
*bufUse=*bufUse+len+3;
break;
case CHG_NTOH:
if (*bufUse+3>;bufLen)
return(-1);
if (buf[*bufUse]<'0'||buf[*bufUse]>;'9'
||buf[*bufUse+1]<'0'||buf[*bufUse+1]>;'9'
||buf[*bufUse+2]<'0'||buf[*bufUse+2]>;'9')
return(-1);
len=(buf[*bufUse]-'0')*100+(buf[*bufUse+1]-'0')
+(buf[*bufUse+2]-'0');
if (len>;size)
return(-1);
if (*bufUse+len+3>;bufLen)
return(-1);
if (len>;30)
return(-1);
memcpy(s,buf+*bufUse+3,len);
s[len]='\0';
if (sscanf(s,"%u",v)!=1)
return(-1);
*bufUse=*bufUse+3+len;
break;
case CHG_HTOS:
case CHG_STOH:
return(chg_move(chg,value,sizeof(long),buf,bufLen,bufUse));
default:
return(-1);
};
return(0);
}
static void del_dot(char *s)
{
inti=0;
intd=0;
while(s!='\0')
{
if (s=='.')
d=1;
if (d)
s=s[i+1];
++i;
};
}
static int add_dot(char *s)
{
intlen;
inti;
i=0;
while(s==' ')
++i;
if (i!=0)
strcpy(s,s+i);
len=strlen(s);
if (len<2)
return(-1);
for(i=0; i<len; ++i)
if (s<'0'||s>;'9')
return(-1);
s[len+1]='\0';
s[len] =s[len-1];
s[len-1]=s[len-2];
s[len-2]='.';
return(0);
}
static int chg_double_n(int chg,void *value,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -