1/*	$NetBSD: rpc_util.h,v 1.4 1997/10/11 21:01:58 christos Exp $	*/
2/*
3 * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
4 * unrestricted use provided that this legend is included on all tape
5 * media and as a part of the software program in whole or part.  Users
6 * may copy or modify Sun RPC without charge, but are not authorized
7 * to license or distribute it to anyone else except as part of a product or
8 * program developed by the user or with the express written consent of
9 * Sun Microsystems, Inc.
10 *
11 * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
12 * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
13 * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
14 *
15 * Sun RPC is provided with no support and without any obligation on the
16 * part of Sun Microsystems, Inc. to assist in its use, correction,
17 * modification or enhancement.
18 *
19 * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
20 * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
21 * OR ANY PART THEREOF.
22 *
23 * In no event will Sun Microsystems, Inc. be liable for any lost revenue
24 * or profits or other special, indirect and consequential damages, even if
25 * Sun has been advised of the possibility of such damages.
26 *
27 * Sun Microsystems, Inc.
28 * 2550 Garcia Avenue
29 * Mountain View, California  94043
30 */
31
32/*      @(#)rpc_util.h  1.5  90/08/29  (C) 1987 SMI   */
33
34/*
35 * rpc_util.h, Useful definitions for the RPC protocol compiler
36 */
37
38#define alloc(size)		(void *)malloc((unsigned)(size))
39#define ALLOC(object)   (object *) malloc(sizeof(object))
40
41#define s_print	(void) sprintf
42#define f_print (void) fprintf
43
44struct list {
45	definition *val;
46	struct list *next;
47};
48typedef struct list list;
49
50#define PUT 1
51#define GET 2
52
53/*
54 * Global variables
55 */
56#define MAXLINESIZE 1024
57extern char curline[MAXLINESIZE];
58extern char *where;
59extern int linenum;
60
61extern char *infilename;
62extern FILE *fout;
63extern FILE *fin;
64
65extern list *defined;
66
67
68extern bas_type *typ_list_h;
69extern bas_type *typ_list_t;
70
71/*
72 * All the option flags
73 */
74extern int inetdflag;
75extern int pmflag;
76extern int tblflag;
77extern int logflag;
78extern int newstyle;
79extern int Cflag;     /* C++ flag */
80extern int Mflag;     /* multithread flag */
81extern int tirpcflag; /* flag for generating tirpc code */
82extern int doinline; /* if this is 0, then do not generate inline code */
83extern int callerflag;
84
85/*
86 * Other flags related with inetd jumpstart.
87 */
88extern int indefinitewait;
89extern int exitnow;
90extern int timerflag;
91
92extern int nonfatalerrors;
93
94/*
95 * rpc_util routines
96 */
97
98#define STOREVAL(list,item)	\
99	storeval(list,item)
100
101#define FINDVAL(list,item,finder) \
102	findval(list, item, finder)
103
104void reinitialize __P((void));
105int streq __P((char *, char *));
106definition *findval __P((list *, char *, int (*)(definition *, char *)));
107void storeval __P((list **, definition *));
108char *fixtype __P((char *));
109char *stringfix __P((char *));
110void ptype __P((char *, char *, int));
111int isvectordef __P((char *, relation));
112char *locase __P((char *));
113void pvname_svc __P((char *, char *));
114void pvname __P((char *, char *));
115void error __P((char *));
116void crash __P((void));
117void record_open __P((char *));
118void expected1 __P((tok_kind));
119void expected2 __P((tok_kind, tok_kind ));
120void expected3 __P((tok_kind, tok_kind, tok_kind));
121void tabify __P((FILE *, int));
122void record_open __P((char *));
123char *make_argname __P((char *, char *));
124void add_type __P((int, char *));
125bas_type *find_type __P((char *));
126/*
127 * rpc_cout routines
128 */
129void emit __P((definition *));
130void emit_inline __P((declaration *, int));
131void emit_single_in_line __P((declaration *, int, relation));
132char *upcase __P((char *));
133
134/*
135 * rpc_hout routines
136 */
137
138void print_datadef __P((definition *));
139void print_funcdef __P((definition *));
140void pxdrfuncdecl __P((char *, int));
141void pprocdef __P((proc_list *, version_list *, char *, int, int));
142void pdeclaration __P((char *, declaration *, int, char *));
143
144/*
145 * rpc_svcout routines
146 */
147void write_most __P((char *, int, int));
148void write_netid_register __P((char *));
149void write_nettype_register __P((char *));
150void write_rest __P((void));
151void write_programs __P((char *));
152int nullproc __P((proc_list *));
153void write_svc_aux __P((int));
154void write_msg_out __P((void));
155void write_inetd_register __P((char *));
156
157/*
158 * rpc_clntout routines
159 */
160void write_stubs __P((void));
161void printarglist __P((proc_list *, char *, char *, char *));
162
163
164/*
165 * rpc_tblout routines
166 */
167void write_tables __P((void));
168
169/*
170 * rpc_sample routines
171 */
172void write_sample_svc __P((definition *));
173int write_sample_clnt __P((definition *));
174void add_sample_msg __P((void));
175void write_sample_clnt_main __P((void));
176