/*fixed format source*/ void *fixed_source_pre_func(T_KRParamInput *ptParamInput) { fixed_data = kr_calloc(sizeof(*fixed_data)); /* Open Source File */ fixed_data->datasrc_id = ptParamInput->lInputId; strcpy(fixed_data->datasrc_name, ptParamInput->caInputName); snprintf(fixed_data->filename, sizeof(fixed_data->filename), \ "%s_fixed.c", ptParamInput->caInputName); fixed_data->fp = fopen(fixed_data->filename, "w"); if (fixed_data->fp == NULL) { fprintf(stdout, "open output file: %s failed\n", fixed_data->filename); kr_free(fixed_data); return NULL; } /*generate pre&post function*/ FILE *fp = fixed_data->fp; fprintf(fp, "#include <stdio.h> \n"); fprintf(fp, "#include <stdlib.h> \n"); fprintf(fp, "#include <stdint.h> \n"); fprintf(fp, "#include <string.h> \n"); fprintf(fp, "#include <time.h> \n"); fprintf(fp, "\n"); /*generate fixed struct definition */ kr_traversal_fields(ptParamInput, pre_func, fixed_define_func, post_func); /* map_pre_func */ fprintf(fp, "void *fixed_map_pre_func_%d(void *msg)\n", fixed_data->datasrc_id); fprintf(fp, "{ \n"); fprintf(fp, " return msg;\n"); fprintf(fp, "} \n"); fprintf(fp, "\n\n"); /* map_func_post */ fprintf(fp, "void fixed_map_post_func_%d(void *data)\n", fixed_data->datasrc_id); fprintf(fp, "{ \n"); fprintf(fp, " return;\n"); fprintf(fp, "} \n"); fprintf(fp, "\n\n"); /* map_func */ fprintf(fp, "void fixed_map_func_%d(void *fldval, int fldno, int fldlen, void *data)\n", fixed_data->datasrc_id); fprintf(fp, "{ \n"); fprintf(fp, " T_KRInterface%d *root = (T_KRInterface%d *)data; \n", \ fixed_data->datasrc_id, fixed_data->datasrc_id); fprintf(fp, " memset(fldval, 0x00, fldlen); \n"); fprintf(fp, " switch(fldno) {\n"); return fixed_data; }
static int kr_traversal_datasrc(char *file_code) { int iResult = 0, iFlag = 0, iCnt = 0; T_DatasrcCur stDatasrcCur = {0}; iResult = dbsDatasrcCur(dbsenv, KR_DBCUROPEN, &stDatasrcCur); if (iResult != KR_DBOK) { fprintf(stderr, "dbsDatasrcCur Open Error[%d]!", iResult); return -1; } while(1) { iResult=dbsDatasrcCur(dbsenv, KR_DBCURFETCH, &stDatasrcCur); if (iResult != KR_DBNOTFOUND && iResult != KR_DBOK) { fprintf(stderr, "dbsDatasrcCur Fetch Error[%d]![%s]:[%s]", iResult, dbsenv->sqlstate, dbsenv->sqlerrmsg); iFlag = -1; break; } else if (iResult == KR_DBNOTFOUND) { fprintf(stdout, "Generated [%d] Tables Totally!\n", iCnt); break; } kr_string_rtrim(stDatasrcCur.caOutDatasrcName); kr_string_rtrim(stDatasrcCur.caOutDatasrcDesc); kr_string_rtrim(stDatasrcCur.caOutDatasrcFormat); /* Judge If datasrc matched */ if (gstArgs.datasrc_id != 0 && gstArgs.datasrc_id != stDatasrcCur.lOutDatasrcId) { continue; } for (int i=0; i<sizeof(gptIfaceFormat)/sizeof(T_KRIfaceFormat); ++i) { T_KRIfaceFormat *iface_format = &gptIfaceFormat[i]; /* Judge If file code matched */ if (strcasecmp(file_code, iface_format->file_code) != 0) { continue; } /* Judge If format name matched */ if (gstArgs.format_name[0] != '\0' && strcasecmp(gstArgs.format_name, iface_format->format_name)) { continue; } /* Traversal Fields */ iFlag = kr_traversal_fields(&stDatasrcCur, iface_format->datasrc_field_pre_func, iface_format->datasrc_field_func, iface_format->datasrc_field_post_func); if (iFlag != 0) { fprintf(stderr, "kr_traversal_fields [%ld] failed!\n", \ stDatasrcCur.lOutDatasrcId); break; } } iCnt++; } iResult = dbsDatasrcCur(dbsenv, KR_DBCURCLOSE, &stDatasrcCur); if (iResult != KR_DBOK) { fprintf(stderr, "dbsDatasrcCur Close Error!"); return -1; } return iFlag; }