version 1.12, 2002/06/01 01:40:38 |
version 1.13, 2002/07/05 05:39:42 |
|
|
|
|
void |
void |
write_sample_svc(def) |
write_sample_svc(def) |
definition *def; |
definition *def; |
{ |
{ |
|
|
if (def->def_kind != DEF_PROGRAM) |
if (def->def_kind != DEF_PROGRAM) |
|
|
|
|
int |
int |
write_sample_clnt(def) |
write_sample_clnt(def) |
definition *def; |
definition *def; |
{ |
{ |
version_list *vp; |
version_list *vp; |
int count = 0; |
int count = 0; |
|
|
if (def->def_kind != DEF_PROGRAM) |
if (def->def_kind != DEF_PROGRAM) |
|
|
|
|
static void |
static void |
write_sample_client(program_name, vp) |
write_sample_client(program_name, vp) |
char *program_name; |
char *program_name; |
version_list *vp; |
version_list *vp; |
{ |
{ |
proc_list *proc; |
proc_list *proc; |
int i; |
int i; |
decl_list *l; |
decl_list *l; |
|
|
fprintf(fout, "\n\nvoid\n"); |
fprintf(fout, "\n\nvoid\n"); |
pvname(program_name, vp->vers_num); |
pvname(program_name, vp->vers_num); |
if (Cflag) |
if (Cflag) |
fprintf(fout,"(char *host)\n{\n"); |
fprintf(fout,"(char *host)\n{\n"); |
else |
|
fprintf(fout, "(host)\nchar *host;\n{\n"); |
|
fprintf(fout, "\tCLIENT *clnt;\n"); |
|
|
|
i = 0; |
|
for (proc = vp->procs; proc != NULL; proc = proc->next) { |
|
fprintf(fout, "\t"); |
|
ptype(proc->res_prefix, proc->res_type, 1); |
|
fprintf(fout, " *result_%d;\n",++i); |
|
/* print out declarations for arguments */ |
|
if (proc->arg_num < 2 && !newstyle) { |
|
fprintf(fout, "\t"); |
|
if (!streq(proc->args.decls->decl.type, "void")) |
|
ptype(proc->args.decls->decl.prefix, proc->args.decls->decl.type, 1); |
|
else |
else |
fprintf(fout, "char *"); /* cannot have "void" type */ |
fprintf(fout, "(host)\nchar *host;\n{\n"); |
fprintf(fout, " "); |
fprintf(fout, "\tCLIENT *clnt;\n"); |
pvname(proc->proc_name, vp->vers_num); |
|
fprintf(fout, "_arg;\n"); |
i = 0; |
} else if (!streq(proc->args.decls->decl.type, "void")) { |
for (proc = vp->procs; proc != NULL; proc = proc->next) { |
for (l = proc->args.decls; l != NULL; l = l->next) { |
fprintf(fout, "\t"); |
fprintf(fout, "\t"); |
ptype(proc->res_prefix, proc->res_type, 1); |
ptype(l->decl.prefix, l->decl.type, 1); |
fprintf(fout, " *result_%d;\n",++i); |
fprintf(fout, " "); |
/* print out declarations for arguments */ |
pvname(proc->proc_name, vp->vers_num); |
if (proc->arg_num < 2 && !newstyle) { |
fprintf(fout, "_%s;\n", l->decl.name); |
fprintf(fout, "\t"); |
/* pdeclaration(proc->args.argname, &l->decl, 1, ";\n");*/ |
if (!streq(proc->args.decls->decl.type, "void")) |
|
ptype(proc->args.decls->decl.prefix, |
|
proc->args.decls->decl.type, 1); |
|
else |
|
fprintf(fout, "char *"); /* cannot have "void" type */ |
|
fprintf(fout, " "); |
|
pvname(proc->proc_name, vp->vers_num); |
|
fprintf(fout, "_arg;\n"); |
|
} else if (!streq(proc->args.decls->decl.type, "void")) { |
|
for (l = proc->args.decls; l != NULL; l = l->next) { |
|
fprintf(fout, "\t"); |
|
ptype(l->decl.prefix, l->decl.type, 1); |
|
fprintf(fout, " "); |
|
pvname(proc->proc_name, vp->vers_num); |
|
fprintf(fout, "_%s;\n", l->decl.name); |
|
/* pdeclaration(proc->args.argname, &l->decl, 1, ";\n");*/ |
|
} |
|
} |
} |
} |
} |
|
} |
|
|
|
/* generate creation of client handle */ |
/* generate creation of client handle */ |
fprintf(fout, "\tclnt = clnt_create(host, %s, %s, \"%s\");\n", |
fprintf(fout, "\tclnt = clnt_create(host, %s, %s, \"%s\");\n", |
program_name, vp->vers_name, tirpcflag? "netpath" : "udp"); |
program_name, vp->vers_name, tirpcflag? "netpath" : "udp"); |
fprintf(fout, "\tif (clnt == NULL) {\n"); |
fprintf(fout, "\tif (clnt == NULL) {\n"); |
fprintf(fout, "\t\tclnt_pcreateerror(host);\n"); |
fprintf(fout, "\t\tclnt_pcreateerror(host);\n"); |
fprintf(fout, "\t\texit(1);\n\t}\n"); |
fprintf(fout, "\t\texit(1);\n\t}\n"); |
|
|
/* generate calls to procedures */ |
/* generate calls to procedures */ |
i = 0; |
i = 0; |
for (proc = vp->procs; proc != NULL; proc = proc->next) { |
for (proc = vp->procs; proc != NULL; proc = proc->next) { |
fprintf(fout, "\tresult_%d = ",++i); |
fprintf(fout, "\tresult_%d = ",++i); |
pvname(proc->proc_name, vp->vers_num); |
pvname(proc->proc_name, vp->vers_num); |
if (proc->arg_num < 2 && !newstyle) { |
if (proc->arg_num < 2 && !newstyle) { |
fprintf(fout, "("); |
fprintf(fout, "("); |
if (streq(proc->args.decls->decl.type, "void")) /* cast to void* */ |
if (streq(proc->args.decls->decl.type, "void")) |
fprintf(fout, "(void*)"); |
fprintf(fout, "(void*)"); |
fprintf(fout, "&"); |
fprintf(fout, "&"); |
pvname(proc->proc_name, vp->vers_num); |
pvname(proc->proc_name, vp->vers_num); |
fprintf(fout, "_arg, clnt);\n"); |
fprintf(fout, "_arg, clnt);\n"); |
} else if (streq(proc->args.decls->decl.type, "void")) { |
} else if (streq(proc->args.decls->decl.type, "void")) { |
fprintf(fout, "(clnt);\n"); |
fprintf(fout, "(clnt);\n"); |
} |
} else { |
else { |
fprintf(fout, "("); |
fprintf(fout, "("); |
for (l = proc->args.decls; l != NULL; l = l->next) { |
for (l = proc->args.decls; l != NULL; l = l->next) { |
pvname(proc->proc_name, vp->vers_num); |
pvname(proc->proc_name, vp->vers_num); |
fprintf(fout, "_%s, ", l->decl.name); |
fprintf(fout, "_%s, ", l->decl.name); |
} |
|
fprintf(fout, "clnt);\n"); |
|
} |
|
fprintf(fout, "\tif (result_%d == NULL) {\n", i); |
|
fprintf(fout, "\t\tclnt_perror(clnt, \"call failed:\");\n"); |
|
fprintf(fout, "\t}\n"); |
} |
} |
fprintf(fout, "clnt);\n"); |
|
} |
|
fprintf(fout, "\tif (result_%d == NULL) {\n", i); |
|
fprintf(fout, "\t\tclnt_perror(clnt, \"call failed:\");\n"); |
|
fprintf(fout, "\t}\n"); |
|
} |
|
|
|
fprintf(fout, "\tclnt_destroy(clnt);\n"); |
fprintf(fout, "\tclnt_destroy(clnt);\n"); |
fprintf(fout, "}\n"); |
fprintf(fout, "}\n"); |
} |
} |
|
|
static void |
static void |