📄 gen-print.c
字号:
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 + -