static void dumpprog (const rpc_program *rs) { // aout << "\nenum { " << rs->id << " = " << rs->val << " };\n"; aout << "#ifndef " << rs->id << "\n" << "#define " << rs->id << " " << rs->val << "\n" << "#endif /* !" << rs->id << " */\n"; for (const rpc_vers *rv = rs->vers.base (); rv < rs->vers.lim (); rv++) { aout << "extern const rpc_program " << rpcprog (rs, rv) << ";\n"; aout << "enum { " << rv->id << " = " << rv->val << " };\n"; aout << "enum {\n"; for (const rpc_proc *rp = rv->procs.base (); rp < rv->procs.lim (); rp++) aout << " " << rp->id << " = " << rp->val << ",\n"; aout << "};\n"; aout << "#define " << rs->id << "_" << rv->val << "_APPLY_NOVOID(macro, void)"; u_int n = 0; for (const rpc_proc *rp = rv->procs.base (); rp < rv->procs.lim (); rp++) { while (n++ < rp->val) aout << " \\\n macro (" << n-1 << ", false, false)"; aout << " \\\n macro (" << rp->id << ", " << rp->arg << ", " << rp->res << ")"; } aout << "\n"; aout << "#define " << rs->id << "_" << rv->val << "_APPLY(macro) \\\n " << rs->id << "_" << rv->val << "_APPLY_NOVOID(macro, void)\n"; } aout << "\n"; }
static void dumpprog_xml (const rpc_program *rs) { start_xml_guard (); for (const rpc_vers *rv = rs->vers.base (); rv < rs->vers.lim (); rv++) { aout << "extern const xml_rpc_program xml_" << rpcprog (rs, rv) << ";\n"; } end_xml_guard (); aout << "\n"; }
static void mktbl (const rpc_program *rs) { for (const rpc_vers *rv = rs->vers.base (); rv < rs->vers.lim (); rv++) { str name = rpcprog (rs, rv); aout << "static const rpcgen_table " << name << "_tbl[] = {\n" << " " << rs->id << "_" << rv->val << "_APPLY (XDRTBL_DECL)\n" << "};\n" << "const rpc_program " << name << " = {\n" << " " << rs->id << ", " << rv->id << ", " << name << "_tbl,\n" << " sizeof (" << name << "_tbl" << ") / sizeof (" << name << "_tbl[0]),\n" << " \"" << name << "\"\n" << "};\n"; } aout << "\n"; }
static void dumpnamespace (const rpc_sym *s) { const rpc_namespace *ns = s->snamespace.addr (); for (size_t i = 0; i < ns->progs.size (); i++) { dumpprog (&ns->progs[i]); } aout << "namespace " << ns->id << " {\n"; for (const rpc_program *rp = ns->progs.base (); rp < ns->progs.lim (); rp++) { for (const rpc_vers *rv = rp->vers.base (); rv < rp->vers.lim (); rv++ ) { str n = rpcprog (rp, rv); aout << " namespace " << n << " {\n"; for (const rpc_proc *rc = rv->procs.base (); rc < rv->procs.lim (); rc++) { dump_tmpl_proc (rc); } aout << " };\n"; // rpcprog (p, v); } } aout << "};\n"; // ns->id }