📄 93to87.c
字号:
/*=============================================================
功能: 根据msgid, 自动识别ISO8583的87/93年版
并置于不同的返回代码.
在使用 code87() code93() 前, 要用get_init_code8793()
把信息读到内存中.
作者:
最后修改人: 林晋发
最后修改日期: 1996/10/30
===============================================================*/
#include <stdio.h>
#include "mytools.h"
#define SUCC 0
#define FAIL -1
struct code8793 {
char code93[4];
char code87[3];
struct code8793 *next;
};
struct code8793 *cod12, *cod_, *cod3, *cod4, *cod5, *cod6, *cod7, *cod8;
/*------------------------------------------------
把信息读到内存中.
--------------------------------------------------*/
get_init_code8793()
{
struct code8793 *head, *p, *p1;
char code93[10], code87[10], msg[40], *file;
FILE *fp;
int flag = 0;
file = (char *)getfname( "WORKDIR", "/etc/ISO93TO87" );
if( (fp=fopen( file, "r" )) == NULL ) {
errcall( DEBUG, "open /etc/ISO93TO87 err" );
return( -1 );
}
do {
fscanf( fp, "%s %s %s", code93, code87, msg );
if( !memcmp( code87, "BEGIN", 5 ) ) {
p = (struct code8793 *)malloc(sizeof(struct code8793));
head = p;
p1 = head;
flag = 0;
continue;
}
if( !memcmp( code87, "END", 3 ) ) {
if( !memcmp( code93, "cod12", 5 ) ) cod12 = head;
if( !memcmp( code93, "cod_", 5 ) ) cod_ = head;
if( !memcmp( code93, "cod3", 5 ) ) cod3 = head;
if( !memcmp( code93, "cod4", 5 ) ) cod4 = head;
if( !memcmp( code93, "cod5", 5 ) ) cod5 = head;
if( !memcmp( code93, "cod6", 5 ) ) cod6 = head;
if( !memcmp( code93, "cod7", 5 ) ) cod7 = head;
if( !memcmp( code93, "cod8", 5 ) ) {
cod8 = head;
break;
}
head = NULL;
continue;
}
if( flag )
p = (struct code8793 *)malloc(sizeof(struct code8793));
/* 必须先经过BEGIN, 否则 p==NULL */
if( p == NULL ) continue;
memcpy( p->code93, code93, 3 );
p->code93[3] = 0;
memcpy( p->code87, code87, 2 );
p->code87[2] = 0;
p->next = NULL;
if( flag ) {
p1->next = p;
p1 = p1->next;
}
flag = 1;
} while( !feof(fp) );
fclose( fp );
return( 0 );
}
/*---------------------------------------------
entry:
code --- 返回代码
return: codeout --- 87年版的返回代码
函数返回: 0 -- 成功
-1 -- 失败, NOT FOUND
-----------------------------------------------*/
code87(msgid, code, codeout)
char *msgid;
char *code;
char *codeout;
{
struct code8793 *cod;
strcpy( codeout, "82" ); /* 返回码未定义 */
errcall(WARN, "msgid=[%s], code=[%s]", msgid, code );
if( strlen(code) < 2 || strlen(code) > 3 ) return( -1 );
if( msgid[0]=='0' || strlen(code)==2 ) { /* ISO8583 -- 87版 */
strcpy(codeout, code);
return(0);
}
/* ISO8583 -- 93版 */
switch( msgid[1] ) {
case '1':
case '2':
cod = cod12;
break;
case '3':
cod = cod3;
break;
case '4':
cod = cod4;
break;
case '5':
cod = cod5;
break;
case '6':
cod = cod6;
break;
case '7':
cod = cod7;
break;
case '8':
cod = cod8;
break;
default:
return( -1 );
}
if( cod == NULL ) get_init_code8793();
while(1) {
if( cod == NULL ) break; /* NOT FOUND */
if(memcmp(code, cod->code93, 3)) cod = cod->next;
else {
strcpy(codeout, cod->code87);
return(0);
}
}
cod = cod_ ;
while(1) {
if( cod == NULL ) return( -1 ); /* NOT FOUND */
if(memcmp(code, cod->code93, 3)) cod = cod->next;
else {
strcpy(codeout, cod->code87);
return(0);
}
}
}
/*---------------------------------------------
entry: msgid ---
code --- 返回代码
return: codeout --- 93年版的返回代码
函数返回: 0 -- 成功
-1 -- 失败, NOT FOUND
-----------------------------------------------*/
code93(msgid, code, codeout)
char *msgid;
char *code;
char *codeout;
{
struct code8793 *cod;
strcpy( codeout, "944" ); /* 返回码未定义 */
if( strlen(code) < 2 || strlen(code) > 3) return(-1);
if( msgid[0]=='1' ) { /* ISO8583 -- 93版 */
strcpy(codeout, code);
return(0);
}
/* ISO8583 -- 87版 */
switch( msgid[1] ) {
case '1':
case '2':
cod = cod12;
break;
case '3':
cod = cod3;
break;
case '4':
cod = cod4;
break;
case '5':
cod = cod5;
break;
case '6':
cod = cod6;
break;
case '7':
cod = cod7;
break;
case '8':
cod = cod8;
break;
default:
return( -1 );
}
if( cod == NULL ) get_init_code8793();
while(1) {
if(cod == NULL) break; /* NOT FOUND */
if(memcmp(code, cod->code87, 2)) cod = cod->next;
else {
strcpy(codeout, cod->code93);
return(0);
}
}
cod = cod_ ;
while(1) {
if(cod == NULL) return( -1 ); /* NOT FOUND */
if(memcmp(code, cod->code87, 2)) cod = cod->next;
else {
strcpy(codeout, cod->code93);
return(0);
}
}
}
/*
main()
{
char msgid[10], code[10], codeout[10];
if( get_init_code8793() < 0 ) {
printf(" get_init_code err \n" );
return( -1 );
}
while(1) {
printf("input msgid code: ");
scanf( "%s %s", msgid, code );
code87(msgid, code, codeout);
printf("code87=[%s]\n",codeout);
code93(msgid, code, codeout);
printf("code93=[%s]\n",codeout);
}
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -