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

📄 gen-print.c

📁 asn.1 compiler
💻 C
📖 第 1 页 / 共 2 页
字号:
    TypeDef *td _AND_    Type *parent _AND_    NamedTypeList *elmts _AND_    NamedType *e _AND_    char *varName _AND_    int allOpt){    CTRI *ctri;    char elmtVarRef[MAX_VAR_REF];    Type *tmpType;    int inTailOpts;    ctri =  e->type->cTypeRefInfo;    /* this assumes the elmts->curr == e */    inTailOpts = IsTailOptional (elmts);    /* build ref to the elmt */    MakeVarPtrRef (genPrintCRulesG, td, parent, e->type, varName, elmtVarRef);    /* if optional then put in NULL check */    if (e->type->optional || (e->type->defaultVal != NULL))        fprintf (src, "    if (%s (%s))\n    {\n", ctri->optTestRoutineName, elmtVarRef);    if (allOpt)    {        if (e != FIRST_LIST_ELMT (elmts))        {            fprintf (src, "    if (!nonePrinted)\n");            fprintf (src, "        fprintf (f,\",\\n\");\n");        }        fprintf (src, "    nonePrinted = FALSE;\n");    }    else if ((inTailOpts) && (e != FIRST_LIST_ELMT (elmts)))        fprintf (src, "    fprintf (f,\",\\n\");\n");    fprintf (src,"    Indent (f, indent + stdIndentG);\n");    if (e->fieldName != NULL)        fprintf (src,"    fprintf (f,\"%s \");\n", e->fieldName);    fprintf (src,"    %s (f, %s, indent + stdIndentG);\n", e->type->cTypeRefInfo->printRoutineName, elmtVarRef);    if ((e != LAST_LIST_ELMT (elmts)) &&         (!inTailOpts) &&         (!NextIsTailOptional (elmts)))        fprintf (src,"    fprintf (f, \",\\n\");\n");    /* write closing brkt for NULL check for optional elmts */    if (e->type->optional || (e->type->defaultVal != NULL))        fprintf (src, "    }\n");    if (e == LAST_LIST_ELMT (elmts))        fprintf (src,"    fprintf (f,\"\\n\");\n");}  /*  PrintCElmtPrintWithIndent */static voidPrintCChoicePrintRoutine PARAMS ((src, hdr, r, mods, m, td),    FILE *src _AND_    FILE *hdr _AND_    CRules *r _AND_    ModuleList *mods _AND_    Module *m _AND_    TypeDef *td){    NamedType *e;    PrintCPrintPrototype (hdr,td);    PrintCPrintDeclaration (src, td);    fprintf (src,"{\n");    PrintCPrintLocals (src,td);    fprintf (src,"    switch (%s->%s)\n", valueArgNameG, td->type->cTypeRefInfo->choiceIdEnumFieldName);    fprintf (src,"    {\n");    FOR_EACH_LIST_ELMT (e, td->type->basicType->a.choice)    {        fprintf (src,"      case %s:\n",e->type->cTypeRefInfo->choiceIdSymbol);        fprintf (src,"      ");        PrintCChoiceElmtPrint (src, td, td->type, td->type->basicType->a.choice, e, valueArgNameG);        fprintf (src,"          break;\n\n");    }    fprintf (src,"    }\n");/*    fprintf (src,"    fprintf (f,\"\\n\");\n"); */    fprintf (src,"}  /* %s */\n\n", td->cTypeDefInfo->printRoutineName);} /* PrintCChoicePrintRoutine */static voidPrintCSetPrintRoutine PARAMS ((src, hdr, r, mods, m, td),    FILE *src _AND_    FILE *hdr _AND_    CRules *r _AND_    ModuleList *mods _AND_    Module *m _AND_    TypeDef *td){    NamedType *e;    int allOpt;    PrintCPrintPrototype (hdr,td);    PrintCPrintDeclaration (src, td);    fprintf (src,"{\n");    PrintCPrintLocals (src,td);    allOpt = AllElmtsOptional (td->type->basicType->a.set);    /*     * print extra local variable so commas are handled correctly     * when all elements are optional     */    if (allOpt)        fprintf (src,"    int nonePrinted = TRUE;\n\n");    fprintf (src,"    if (%s == NULL)\n", valueArgNameG);    fprintf (src,"        return;\n\n");    fprintf (src,"    fprintf (f,\"{ -- SET --\\n\");\n\n");    FOR_EACH_LIST_ELMT (e, td->type->basicType->a.set)    {        PrintCElmtPrintWithIndent (src, td, td->type, td->type->basicType->a.set, e, valueArgNameG, allOpt);    }    fprintf (src,"    Indent (f, indent);\n");    fprintf (src,"    fprintf (f,\"}\");\n");    fprintf (src,"}  /* %s */\n\n", td->cTypeDefInfo->printRoutineName);} /* PrintCSetPrintRoutine */static voidPrintCSeqPrintRoutine PARAMS ((src, hdr, r, mods, m, td),    FILE *src _AND_    FILE *hdr _AND_    CRules *r _AND_    ModuleList *mods _AND_    Module *m _AND_    TypeDef *td){    NamedType *e;    int allOpt;    PrintCPrintPrototype (hdr,td);    PrintCPrintDeclaration (src, td);    fprintf (src,"{\n");    PrintCPrintLocals (src,td);    allOpt = AllElmtsOptional (td->type->basicType->a.set);    /*     * print extra local variable so commas are handled correctly     * when all elements are optional     */    if (allOpt)        fprintf (src,"    int nonePrinted = TRUE;\n\n");    fprintf (src,"    if (%s == NULL)\n", valueArgNameG);    fprintf (src,"        return;\n\n");    fprintf (src,"    fprintf (f,\"{ -- SEQUENCE --\\n\");\n\n");    FOR_EACH_LIST_ELMT (e, td->type->basicType->a.sequence)    {        PrintCElmtPrintWithIndent (src, td, td->type, td->type->basicType->a.sequence, e, valueArgNameG, allOpt);    }    fprintf (src,"    Indent (f, indent);\n");    fprintf (src,"    fprintf (f,\"}\");\n");    fprintf (src,"}  /* %s */\n\n", td->cTypeDefInfo->printRoutineName);} /* PrintCSeqPrintRoutine */static voidPrintCSetOfPrintRoutine PARAMS ((src, hdr, r, mods, m, td),    FILE *src _AND_    FILE *hdr _AND_    CRules *r _AND_    ModuleList *mods _AND_    Module *m _AND_    TypeDef *td){    NamedType *e;    PrintCPrintPrototype (hdr,td);    PrintCPrintDeclaration (src, td);    fprintf (src,"{\n");    PrintCPrintLocals (src,td);    fprintf (src,"    %s *tmp;\n", td->type->basicType->a.setOf->cTypeRefInfo->cTypeName);    fprintf (src,"    if (%s == NULL)\n", valueArgNameG);    fprintf (src,"        return;\n");    fprintf (src,"    fprintf (f,\"{ -- SET OF -- \\n\");\n");    fprintf (src,"    FOR_EACH_LIST_ELMT (tmp, %s)\n", valueArgNameG);    fprintf (src,"    {\n");    fprintf (src,"        Indent (f, indent+ stdIndentG);\n");    fprintf (src,"        %s (f, tmp, indent + stdIndentG);\n", td->type->basicType->a.setOf->cTypeRefInfo->printRoutineName);    fprintf (src,"        if (tmp != (%s*)LAST_LIST_ELMT (%s))\n", td->type->basicType->a.setOf->cTypeRefInfo->cTypeName, valueArgNameG);    fprintf (src,"            fprintf (f,\",\\n\");\n");    fprintf (src,"    }\n");    fprintf (src,"    fprintf (f,\"\\n\");\n");    fprintf (src,"    Indent (f, indent);\n");    fprintf (src,"    fprintf (f,\"}\");\n");    fprintf (src,"}  /* %s */\n\n", td->cTypeDefInfo->printRoutineName);} /* PrintCSetOfPrintRoutine */static voidPrintCSeqOfPrintRoutine PARAMS ((src, hdr, r, mods, m, td),    FILE *src _AND_    FILE *hdr _AND_    CRules *r _AND_    ModuleList *mods _AND_    Module *m _AND_    TypeDef *td){    NamedType *e;    PrintCPrintPrototype (hdr,td);    PrintCPrintDeclaration (src, td);    fprintf (src,"{\n");    PrintCPrintLocals (src,td);    fprintf (src,"    %s *tmp;\n", td->type->basicType->a.setOf->cTypeRefInfo->cTypeName);    fprintf (src,"    if (%s == NULL)\n", valueArgNameG);    fprintf (src,"        return;\n");    fprintf (src,"    fprintf (f,\"{ -- SEQUENCE OF -- \\n\");\n");    fprintf (src,"    FOR_EACH_LIST_ELMT (tmp, %s)\n", valueArgNameG);    fprintf (src,"    {\n");    fprintf (src,"        Indent (f, indent+ stdIndentG);\n");    fprintf (src,"        %s (f, tmp, indent + stdIndentG);\n", td->type->basicType->a.setOf->cTypeRefInfo->printRoutineName);    fprintf (src,"        if (tmp != (%s*)LAST_LIST_ELMT (%s))\n", td->type->basicType->a.setOf->cTypeRefInfo->cTypeName, valueArgNameG);    fprintf (src,"            fprintf (f,\",\\n\");\n");    fprintf (src,"    }\n");    fprintf (src,"    fprintf (f,\"\\n\");\n");    fprintf (src,"    Indent (f, indent);\n");    fprintf (src,"    fprintf (f,\"}\");\n");    fprintf (src,"}  /* %s */\n\n", td->cTypeDefInfo->printRoutineName);} /* PrintCSeqOfPrintRoutine */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -