(ファイル名:sample2.c)
/*****************************************************************************
** **
** HiRDB sample Data input User Own Coding (for Binary file 1/2) **
** ~ ~ ~ **
** name : table_load_func **
** **
** func : Character code convert **
** **
** i/o : none **
** **
** return : none **
** **
*****************************************************************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include <pdutluoc.h>
#define F_START 'S' /* convert start */
#define F_CONV 'C' /* convert execute */
#define F_END 'E' /* convert end */
extern long data_convert_func(long,long,char*,char*);
void table_load_func(
UTL_UOC_INF *uocinf /* A(UOC interface area) */
){
long rc; /* return code */
long redsiz; /* input data length */
char *ebc_adr; /* A(EBCDIK) */
char *asc_adr; /* A(ASCII) */
char buff[20]; /* input buffer */
static int inflp = EOF; /* file ID */
switch(uocinf->req_cd){
case UTL_UOC_START:
/*--------------------------------------------------------------------------*/
/* START */
/*--------------------------------------------------------------------------*/
uocinf->e_data_len = sizeof(buff);
uocinf->edit_adr = malloc(sizeof(buff));
if (uocinf->edit_adr == NULL){
strcpy(uocinf->err_msg,strerror(errno));
goto OWARI;
}
if (uocinf->user_param == NULL){
strcpy(uocinf->err_msg,"File name not specified");
goto OWARI;
}
strcpy(uocinf->err_msg,"FILE NAME:");
strcat(uocinf->err_msg,uocinf->user_param); 1
inflp = EOF;
inflp = open(uocinf->user_param,O_RDONLY | O_NONBLOCK);
if (inflp == EOF){
strcpy(uocinf->err_msg,strerror(errno));
goto OWARI;
}
rc = data_convert_func(F_START,0,0,0);
if (rc != 0){
strcpy(uocinf->err_msg,strerror(rc));
goto OWARI;
}
uocinf->rtn_code = UTL_UOC_DBG; 2
break;
case UTL_UOC_EDIT:
/*--------------------------------------------------------------------------*/
/* EDIT */
/*--------------------------------------------------------------------------*/
redsiz = read(inflp,buff,sizeof(buff));
switch(redsiz){
case 0:
uocinf->rtn_code = UTL_UOC_EOF;
break;
case -1:
strcpy(uocinf->err_msg,strerror(errno));
goto OWARI;
default:
if (redsiz == sizeof(buff)){
memcpy(uocinf->edit_adr,buff,sizeof(long));
ebc_adr = (char *)((long)buff + sizeof(long));
asc_adr = (char *)((long)uocinf->edit_adr + sizeof(long));
rc = data_convert_func(F_CONV,sizeof(buff) - sizeof(long),
ebc_adr,asc_adr);
if (rc != 0){
strcpy(uocinf->err_msg,strerror(rc));
goto OWARI;
}
uocinf->rtn_code = UTL_UOC_NML;
}else{
strcpy(uocinf->err_msg,"Invalid data");
goto OWARI;
}
}
break;
case UTL_UOC_END:
case UTL_UOC_TERM:
/*--------------------------------------------------------------------------*/
/* END */
/*--------------------------------------------------------------------------*/
rc = data_convert_func(F_END,0,0,0);
if (rc != 0){
strcpy(uocinf->err_msg,strerror(rc));
goto OWARI;
}
if (inflp != EOF){
rc = close(inflp);
inflp = EOF;
if (rc == EOF){
strcpy(uocinf->err_msg,strerror(errno));
goto OWARI;
}
}
if (uocinf->edit_adr != NULL){
free(uocinf->edit_adr);
uocinf->edit_adr = NULL;
}
uocinf->rtn_code = UTL_UOC_NML;
break;
default:
strcpy(uocinf->err_msg,"Invalid request code");
goto OWARI;
}
return;
OWARI:
uocinf->rtn_code = UTL_UOC_ERR;
return;
} |