示例#1
0
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";
}
示例#2
0
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";
}
示例#3
0
文件: gencfile.C 项目: bougyman/sfs
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";
}
示例#4
0
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
}