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

📄 gen-print.c

📁 asn to c编译器 源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
	const char* tabStr = "\t";    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, "\tif (%s (%s))\n    {\n", ctri->optTestRoutineName,			elmtVarRef);		tabStr = "\t\t";	}    if (allOpt)    {        if (e != FIRST_LIST_ELMT (elmts))        {            fprintf (src, "%sif (!nonePrinted)\n", tabStr);            fprintf (src, "%s\tfprintf (f, \",\\n\");\n", tabStr);        }        fprintf (src, "%snonePrinted = FALSE;\n", tabStr);    }    else if ((inTailOpts) && (e != FIRST_LIST_ELMT (elmts)))        fprintf (src, "%sfprintf (f, \",\\n\");\n", tabStr);    fprintf (src, "%sIndent (f, indent + 1);\n", tabStr);    if (e->fieldName != NULL)        fprintf (src, "%sfprintf (f, \"%s \");\n", tabStr, e->fieldName);    fprintf (src, "%s%s (f, %s, indent + 1);\n", tabStr,		e->type->cTypeRefInfo->printRoutineName, elmtVarRef);    if ((e != LAST_LIST_ELMT (elmts)) &&         (!inTailOpts) &&         (!NextIsTailOptional (elmts)))        fprintf (src, "%sfprintf (f, \",\\n\");\n", tabStr);    /* write closing brkt for NULL check for optional elmts */    if (e->type->optional || (e->type->defaultVal != NULL))        fprintf (src, "\t}\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, "\tswitch (%s->%s)\n", valueArgNameG,		td->type->cTypeRefInfo->choiceIdEnumFieldName);    fprintf (src, "\t{\n");    FOR_EACH_LIST_ELMT (e, td->type->basicType->a.choice)    {        fprintf (src, "\tcase %s:\n",e->type->cTypeRefInfo->choiceIdSymbol);        PrintCChoiceElmtPrint (src, td, td->type, td->type->basicType->a.choice, e, valueArgNameG);        fprintf (src, "\t\tbreak;\n\n");    }    fprintf (src, "\t}\n");    fprintf (src,"}  /* %s */\n\n", td->cTypeDefInfo->printRoutineName);    m = m;    mods = mods;    r = r;    /*AVOIDS warning.*/} /* 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, "\tint nonePrinted = TRUE;\n\n");    fprintf (src, "\tif (%s == NULL)\n", valueArgNameG);    fprintf (src, "\t\treturn;\n\n");    fprintf (src, "\tfprintf (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, "\tfprintf (f, \"\\n\");\n");    fprintf (src, "\tIndent (f, indent);\n");    fprintf (src, "\tfprintf (f, \"}\");\n");    fprintf (src, "}  /* %s */\n\n", td->cTypeDefInfo->printRoutineName);    m = m;    mods = mods;r = r;   /*AVOIDS warning.*/} /* 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, "\tint nonePrinted = TRUE;\n\n");    fprintf (src, "\tif (%s == NULL)\n", valueArgNameG);    fprintf (src, "\t\treturn;\n\n");    fprintf (src, "\tfprintf (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, "\tfprintf (f, \"\\n\");\n");    fprintf (src, "\tIndent (f, indent);\n");    fprintf (src, "\tfprintf (f, \"}\");\n");    fprintf (src, "}  /* %s */\n\n", td->cTypeDefInfo->printRoutineName);    m = m;mods = mods;r = r;    /*AVOIDS warning.*/} /* 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){    PrintCPrintPrototype (hdr, td);    PrintCPrintDeclaration (src, td);    fprintf (src, "{\n");    PrintCPrintLocals (src, td);    fprintf (src, "\t%s *tmp;\n",		td->type->basicType->a.setOf->cTypeRefInfo->cTypeName);    fprintf (src, "\tif (%s == NULL)\n", valueArgNameG);    fprintf (src, "\t\treturn;\n");    fprintf (src, "\tfprintf (f, \"{ -- SET OF -- \\n\");\n");    fprintf (src, "\tFOR_EACH_LIST_ELMT (tmp, %s)\n", valueArgNameG);    fprintf (src, "\t{\n");    fprintf (src, "\t\tIndent (f, indent + 1);\n");    fprintf (src, "\t\t%s (f, tmp, indent + 1);\n",		td->type->basicType->a.setOf->cTypeRefInfo->printRoutineName);    fprintf (src, "\t\tif (tmp != (%s*)LAST_LIST_ELMT (%s))\n",		td->type->basicType->a.setOf->cTypeRefInfo->cTypeName, valueArgNameG);    fprintf (src, "\t\t\tfprintf (f, \",\\n\");\n");    fprintf (src, "\t}\n");    fprintf (src, "\tfprintf (f, \"\\n\");\n");    fprintf (src, "\tIndent (f, indent);\n");    fprintf (src, "\tfprintf (f, \"}\");\n");    fprintf (src, "}  /* %s */\n\n", td->cTypeDefInfo->printRoutineName);    m = m;mods = mods;r = r;    /*AVOIDS warning.*/} /* 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){    PrintCPrintPrototype (hdr, td);    PrintCPrintDeclaration (src, td);    fprintf (src, "{\n");    PrintCPrintLocals (src, td);    fprintf (src, "\t%s *tmp;\n",		td->type->basicType->a.setOf->cTypeRefInfo->cTypeName);    fprintf (src, "\tif (%s == NULL)\n", valueArgNameG);    fprintf (src, "\t\treturn;\n");    fprintf (src, "\tfprintf (f, \"{ -- SEQUENCE OF -- \\n\");\n");    fprintf (src, "\tFOR_EACH_LIST_ELMT (tmp, %s)\n", valueArgNameG);    fprintf (src, "\t{\n");    fprintf (src, "\t\tIndent (f, indent+ 1);\n");    fprintf (src, "\t\t%s (f, tmp, indent + 1);\n",		td->type->basicType->a.setOf->cTypeRefInfo->printRoutineName);    fprintf (src, "\t\tif (tmp != (%s*)LAST_LIST_ELMT (%s))\n",		td->type->basicType->a.setOf->cTypeRefInfo->cTypeName, valueArgNameG);    fprintf (src, "\t\t\tfprintf (f, \",\\n\");\n");    fprintf (src, "\t}\n");    fprintf (src, "\tfprintf (f, \"\\n\");\n");    fprintf (src, "\tIndent (f, indent);\n");    fprintf (src, "\tfprintf (f, \"}\");\n");    fprintf (src, "}  /* %s */\n\n", td->cTypeDefInfo->printRoutineName);    m=m;mods=mods;r=r;    /*AVOIDS warning.*/} /* PrintCSeqOfPrintRoutine */

⌨️ 快捷键说明

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