Exemplo n.º 1
0
/*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;
}
Exemplo n.º 2
0
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;
}