diff options
Diffstat (limited to 'lib/librpc/rpcgen/rpc_cout.c')
-rw-r--r-- | lib/librpc/rpcgen/rpc_cout.c | 350 |
1 files changed, 0 insertions, 350 deletions
diff --git a/lib/librpc/rpcgen/rpc_cout.c b/lib/librpc/rpcgen/rpc_cout.c deleted file mode 100644 index 86d3865..0000000 --- a/lib/librpc/rpcgen/rpc_cout.c +++ /dev/null @@ -1,350 +0,0 @@ -/* @(#)rpc_cout.c 2.1 88/08/01 4.0 RPCSRC */ -/* - * Sun RPC is a product of Sun Microsystems, Inc. and is provided for - * unrestricted use provided that this legend is included on all tape - * media and as a part of the software program in whole or part. Users - * may copy or modify Sun RPC without charge, but are not authorized - * to license or distribute it to anyone else except as part of a product or - * program developed by the user. - * - * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE - * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR - * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. - * - * Sun RPC is provided with no support and without any obligation on the - * part of Sun Microsystems, Inc. to assist in its use, correction, - * modification or enhancement. - * - * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE - * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC - * OR ANY PART THEREOF. - * - * In no event will Sun Microsystems, Inc. be liable for any lost revenue - * or profits or other special, indirect and consequential damages, even if - * Sun has been advised of the possibility of such damages. - * - * Sun Microsystems, Inc. - * 2550 Garcia Avenue - * Mountain View, California 94043 - */ -#ifndef lint -static char sccsid[] = "@(#)rpc_cout.c 1.8 87/06/24 (C) 1987 SMI"; -#endif - -/* - * rpc_cout.c, XDR routine outputter for the RPC protocol compiler - * Copyright (C) 1987, Sun Microsystems, Inc. - */ -#include <stdio.h> -#include <strings.h> -#include "rpc_util.h" -#include "rpc_parse.h" - -/* - * Emit the C-routine for the given definition - */ -void -emit(def) - definition *def; -{ - if (def->def_kind == DEF_PROGRAM || def->def_kind == DEF_CONST) { - return; - } - print_header(def); - switch (def->def_kind) { - case DEF_UNION: - emit_union(def); - break; - case DEF_ENUM: - emit_enum(def); - break; - case DEF_STRUCT: - emit_struct(def); - break; - case DEF_TYPEDEF: - emit_typedef(def); - break; - } - print_trailer(); -} - -static -findtype(def, type) - definition *def; - char *type; -{ - if (def->def_kind == DEF_PROGRAM || def->def_kind == DEF_CONST) { - return (0); - } else { - return (streq(def->def_name, type)); - } -} - -static -undefined(type) - char *type; -{ - definition *def; - - def = (definition *) FINDVAL(defined, type, findtype); - return (def == NULL); -} - - -static -print_header(def) - definition *def; -{ - space(); - f_print(fout, "bool_t\n"); - f_print(fout, "xdr_%s(xdrs, objp)\n", def->def_name); - f_print(fout, "\tXDR *xdrs;\n"); - f_print(fout, "\t%s ", def->def_name); - if (def->def_kind != DEF_TYPEDEF || - !isvectordef(def->def.ty.old_type, def->def.ty.rel)) { - f_print(fout, "*"); - } - f_print(fout, "objp;\n"); - f_print(fout, "{\n"); -} - -static -print_trailer() -{ - f_print(fout, "\treturn (TRUE);\n"); - f_print(fout, "}\n"); - space(); -} - - -static -print_ifopen(indent, name) - int indent; - char *name; -{ - tabify(fout, indent); - f_print(fout, "if (!xdr_%s(xdrs", name); -} - - -static -print_ifarg(arg) - char *arg; -{ - f_print(fout, ", %s", arg); -} - - -static -print_ifsizeof(prefix, type) - char *prefix; - char *type; -{ - if (streq(type, "bool")) { - f_print(fout, ", sizeof(bool_t), xdr_bool"); - } else { - f_print(fout, ", sizeof("); - if (undefined(type) && prefix) { - f_print(fout, "%s ", prefix); - } - f_print(fout, "%s), xdr_%s", type, type); - } -} - -static -print_ifclose(indent) - int indent; -{ - f_print(fout, ")) {\n"); - tabify(fout, indent); - f_print(fout, "\treturn (FALSE);\n"); - tabify(fout, indent); - f_print(fout, "}\n"); -} - -static -space() -{ - f_print(fout, "\n\n"); -} - -static -print_ifstat(indent, prefix, type, rel, amax, objname, name) - int indent; - char *prefix; - char *type; - relation rel; - char *amax; - char *objname; - char *name; -{ - char *alt = NULL; - - switch (rel) { - case REL_POINTER: - print_ifopen(indent, "pointer"); - print_ifarg("(char **)"); - f_print(fout, "%s", objname); - print_ifsizeof(prefix, type); - break; - case REL_VECTOR: - if (streq(type, "string")) { - alt = "string"; - } else if (streq(type, "opaque")) { - alt = "opaque"; - } - if (alt) { - print_ifopen(indent, alt); - print_ifarg(objname); - } else { - print_ifopen(indent, "vector"); - print_ifarg("(char *)"); - f_print(fout, "%s", objname); - } - print_ifarg(amax); - if (!alt) { - print_ifsizeof(prefix, type); - } - break; - case REL_ARRAY: - if (streq(type, "string")) { - alt = "string"; - } else if (streq(type, "opaque")) { - alt = "bytes"; - } - if (streq(type, "string")) { - print_ifopen(indent, alt); - print_ifarg(objname); - } else { - if (alt) { - print_ifopen(indent, alt); - } else { - print_ifopen(indent, "array"); - } - print_ifarg("(char **)"); - if (*objname == '&') { - f_print(fout, "%s.%s_val, (u_int *)%s.%s_len", - objname, name, objname, name); - } else { - f_print(fout, "&%s->%s_val, (u_int *)&%s->%s_len", - objname, name, objname, name); - } - } - print_ifarg(amax); - if (!alt) { - print_ifsizeof(prefix, type); - } - break; - case REL_ALIAS: - print_ifopen(indent, type); - print_ifarg(objname); - break; - } - print_ifclose(indent); -} - - -/* ARGSUSED */ -static -emit_enum(def) - definition *def; -{ - print_ifopen(1, "enum"); - print_ifarg("(enum_t *)objp"); - print_ifclose(1); -} - - -static -emit_union(def) - definition *def; -{ - declaration *dflt; - case_list *cl; - declaration *cs; - char *object; - char *format = "&objp->%s_u.%s"; - - print_stat(&def->def.un.enum_decl); - f_print(fout, "\tswitch (objp->%s) {\n", def->def.un.enum_decl.name); - for (cl = def->def.un.cases; cl != NULL; cl = cl->next) { - cs = &cl->case_decl; - f_print(fout, "\tcase %s:\n", cl->case_name); - if (!streq(cs->type, "void")) { - object = alloc(strlen(def->def_name) + strlen(format) + - strlen(cs->name) + 1); - s_print(object, format, def->def_name, cs->name); - print_ifstat(2, cs->prefix, cs->type, cs->rel, cs->array_max, - object, cs->name); - free(object); - } - f_print(fout, "\t\tbreak;\n"); - } - dflt = def->def.un.default_decl; - if (dflt != NULL) { - if (!streq(dflt->type, "void")) { - f_print(fout, "\tdefault:\n"); - object = alloc(strlen(def->def_name) + strlen(format) + - strlen(dflt->name) + 1); - s_print(object, format, def->def_name, dflt->name); - print_ifstat(2, dflt->prefix, dflt->type, dflt->rel, - dflt->array_max, object, dflt->name); - free(object); - f_print(fout, "\t\tbreak;\n"); - } - } else { - f_print(fout, "\tdefault:\n"); - f_print(fout, "\t\treturn (FALSE);\n"); - } - f_print(fout, "\t}\n"); -} - - - -static -emit_struct(def) - definition *def; -{ - decl_list *dl; - - for (dl = def->def.st.decls; dl != NULL; dl = dl->next) { - print_stat(&dl->decl); - } -} - - - - -static -emit_typedef(def) - definition *def; -{ - char *prefix = def->def.ty.old_prefix; - char *type = def->def.ty.old_type; - char *amax = def->def.ty.array_max; - relation rel = def->def.ty.rel; - - print_ifstat(1, prefix, type, rel, amax, "objp", def->def_name); -} - - - - - -static -print_stat(dec) - declaration *dec; -{ - char *prefix = dec->prefix; - char *type = dec->type; - char *amax = dec->array_max; - relation rel = dec->rel; - char name[256]; - - if (isvectordef(type, rel)) { - s_print(name, "objp->%s", dec->name); - } else { - s_print(name, "&objp->%s", dec->name); - } - print_ifstat(1, prefix, type, rel, amax, name, dec->name); -} |