⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 93to87.c

📁 API
💻 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 + -