pull-prototypes-to-head-20020821
[openafs.git] / src / rxgen / rpc_util.h
1 /* @(#)rpc_util.h       1.2 87/11/24 3.9 RPCSRC */
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.
9  * 
10  * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
11  * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
12  * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
13  * 
14  * Sun RPC is provided with no support and without any obligation on the
15  * part of Sun Microsystems, Inc. to assist in its use, correction,
16  * modification or enhancement.
17  * 
18  * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
19  * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
20  * OR ANY PART THEREOF.
21  * 
22  * In no event will Sun Microsystems, Inc. be liable for any lost revenue
23  * or profits or other special, indirect and consequential damages, even if
24  * Sun has been advised of the possibility of such damages.
25  * 
26  * Sun Microsystems, Inc.
27  * 2550 Garcia Avenue
28  * Mountain View, California  94043
29  */
30
31 /*
32  * rpc_util.h, Useful definitions for the RPC protocol compiler 
33  * Copyright (C) 1987, Sun Microsystems, Inc. 
34  */
35
36 #include "rxgen_consts.h"
37 #define alloc(size)             malloc((unsigned)(size))
38 #define ALLOC(object)   (object *) malloc(sizeof(object))
39
40 #define s_print (void) sprintf
41 #define f_print if (scan_print) (void) fprintf
42
43 struct list {
44         char *val;
45         struct list *next;
46 };
47 typedef struct list list;
48
49 #define MAXLINESIZE 1024
50
51
52 /* PROTOTYPES */
53
54 /* rpc_main.c */
55 extern char *prefix;
56 extern int nincludes;
57 extern char *OutFileFlag;
58 extern char OutFile[];
59 extern char Sflag, Cflag, hflag, cflag, kflag;
60 extern char zflag;
61 extern char xflag;
62 extern char yflag;
63 extern int debug;
64
65
66 /* rpc_util.c */
67 extern char curline[];
68 extern char *where;
69 extern int linenum;
70 extern char *infilename;
71 extern char *outfiles[];
72 extern int nfiles;
73 extern FILE *fout;
74 extern FILE *fin;
75 extern list *defined;
76
77 extern void reinitialize(void);
78 extern int streq(char *a, char *b);
79 extern char *findval(list *lst, char *val, int (*cmp)(definition *def, char *type));
80 extern void storeval(list **lstp, char *val);
81 extern char *fixtype(char *type);
82 extern char *stringfix(char *type);
83 extern void ptype(char *prefix, char *type, int follow);
84 extern int isvectordef(char *type, relation rel);
85 extern void pvname(char *pname, char *vnum);
86 extern void error(char *msg);
87 extern void crash(void);
88 extern void record_open(char *file);
89 extern void expected1(tok_kind exp1);
90 extern void expected2(tok_kind exp1, tok_kind exp2);
91 extern void expected3(tok_kind exp1, tok_kind exp2, tok_kind exp3);
92 extern void expected4(tok_kind exp1, tok_kind exp2, tok_kind exp3, tok_kind exp4);
93 extern void tabify(FILE *f, int tab);
94
95 #define STOREVAL(list,item)     \
96         storeval(list,(char *)item)
97
98 #define FINDVAL(list,item,finder) \
99         findval(list, (char *) item, finder)
100
101 /* rpc_clntout.c */
102 extern void write_stubs(void);
103
104 /* rpc_cout.c */
105 extern void emit(definition *def);
106 extern void print_param(declaration *dec);
107
108 /* rpc_hout.c */
109 extern void print_datadef(definition *def);
110 extern void pdefine(char *name, char *num);
111 extern void pprocdef(proc_list *proc, version_list *vp);
112
113 /* rpc_parse.c */
114 extern list *proc_defined[MAX_PACKAGES], *special_defined, *typedef_defined, *uniondef_defined;
115 extern char *SplitStart;
116 extern char *SplitEnd;
117 extern char *MasterPrefix;
118 extern char *ServerPrefix;
119 extern char *PackagePrefix[];
120 extern char *PackageStatIndex[];
121 extern int no_of_stat_funcs;
122 extern int no_of_stat_funcs_header[];
123 extern int no_of_opcodes[], master_no_of_opcodes;
124 extern int lowest_opcode[], master_lowest_opcode;
125 extern int highest_opcode[], master_highest_opcode;
126 extern int master_opcodenumber;
127 extern int opcodesnotallowed[];
128 extern int combinepackages;
129 extern int PackageIndex;
130 extern int PerProcCounter;
131 extern int Multi_Init;
132 extern char function_list[MAX_PACKAGES]
133                   [MAX_FUNCTIONS_PER_PACKAGE]
134                   [MAX_FUNCTION_NAME_LEN];
135 extern int function_list_index;
136
137 extern definition *get_definition(void);
138
139 extern void er_Proc_CodeGeneration(void);
140 extern void h_opcode_stats(void);
141 extern void generate_multi_macros(definition *defp);
142 extern int IsRxgenToken(token *tokp);
143 extern int IsRxgenDefinition(definition *def);
144
145
146
147
148 extern proc1_list *Proc_list, **Proc_listp;
149
150
151 /* rpc_svcout.c */
152 extern int nullproc(proc_list *proc);
153 extern void write_programs(char *storage);
154 extern void write_rest(void);
155 extern void write_most(void);
156 extern void write_register(char *transp);
157
158 /* rpc_scan.c */
159 extern int pushed;
160 extern token lasttok;
161 extern int scan_print;
162
163 extern void scan(tok_kind expect, token *tokp);
164 extern void scan2(tok_kind expect1, tok_kind expect2,
165         token *tokp);
166 extern void scan3(tok_kind expect1, tok_kind expect2,
167         tok_kind expect3, token *tokp);
168 extern void scan4(tok_kind expect1, tok_kind expect2,
169         tok_kind expect3, tok_kind expect4, token *tokp);
170 extern void scan_num(token *tokp);
171 extern void peek(token *tokp);
172 extern int peekscan(tok_kind expect, token *tokp);
173 extern void get_token(token *tokp);
174 extern void unget_token(token *tokp);
175 extern void findkind(char **mark, token *tokp);
176 extern void printdirective(char *line);
177