xref: /openbsd-src/usr.bin/rpcgen/rpc_parse.h (revision cb7760d181b85988239aa31e102cfd38c6ab30ad)
1*cb7760d1Smillert /*	$OpenBSD: rpc_parse.h,v 1.9 2010/09/01 14:43:34 millert Exp $	*/
2df930be7Sderaadt /*	$NetBSD: rpc_parse.h,v 1.3 1995/06/11 21:50:00 pk Exp $	*/
3*cb7760d1Smillert 
4df930be7Sderaadt /*
5*cb7760d1Smillert  * Copyright (c) 2010, Oracle America, Inc.
6df930be7Sderaadt  *
7*cb7760d1Smillert  * Redistribution and use in source and binary forms, with or without
8*cb7760d1Smillert  * modification, are permitted provided that the following conditions are
9*cb7760d1Smillert  * met:
10df930be7Sderaadt  *
11*cb7760d1Smillert  *     * Redistributions of source code must retain the above copyright
12*cb7760d1Smillert  *       notice, this list of conditions and the following disclaimer.
13*cb7760d1Smillert  *     * Redistributions in binary form must reproduce the above
14*cb7760d1Smillert  *       copyright notice, this list of conditions and the following
15*cb7760d1Smillert  *       disclaimer in the documentation and/or other materials
16*cb7760d1Smillert  *       provided with the distribution.
17*cb7760d1Smillert  *     * Neither the name of the "Oracle America, Inc." nor the names of its
18*cb7760d1Smillert  *       contributors may be used to endorse or promote products derived
19*cb7760d1Smillert  *       from this software without specific prior written permission.
20df930be7Sderaadt  *
21*cb7760d1Smillert  *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22*cb7760d1Smillert  *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23*cb7760d1Smillert  *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24*cb7760d1Smillert  *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25*cb7760d1Smillert  *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
26*cb7760d1Smillert  *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27*cb7760d1Smillert  *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
28*cb7760d1Smillert  *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
29*cb7760d1Smillert  *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
30*cb7760d1Smillert  *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
31*cb7760d1Smillert  *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32*cb7760d1Smillert  *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33df930be7Sderaadt  */
34df930be7Sderaadt 
35df930be7Sderaadt /*      @(#)rpc_parse.h  1.3  90/08/29  (C) 1987 SMI   */
36df930be7Sderaadt 
37df930be7Sderaadt /*
38df930be7Sderaadt  * rpc_parse.h, Definitions for the RPCL parser
39df930be7Sderaadt  */
40df930be7Sderaadt 
41df930be7Sderaadt enum defkind {
42df930be7Sderaadt 	DEF_CONST,
43df930be7Sderaadt 	DEF_STRUCT,
44df930be7Sderaadt 	DEF_UNION,
45df930be7Sderaadt 	DEF_ENUM,
46df930be7Sderaadt 	DEF_TYPEDEF,
47df930be7Sderaadt 	DEF_PROGRAM
48df930be7Sderaadt };
49df930be7Sderaadt typedef enum defkind defkind;
50df930be7Sderaadt 
51df930be7Sderaadt typedef char *const_def;
52df930be7Sderaadt 
53df930be7Sderaadt enum relation {
54df930be7Sderaadt 	REL_VECTOR,	/* fixed length array */
55df930be7Sderaadt 	REL_ARRAY,	/* variable length array */
56df930be7Sderaadt 	REL_POINTER,	/* pointer */
574c277196Sderaadt 	REL_ALIAS	/* simple */
58df930be7Sderaadt };
59df930be7Sderaadt typedef enum relation relation;
60df930be7Sderaadt 
61df930be7Sderaadt struct typedef_def {
62df930be7Sderaadt 	char *old_prefix;
63df930be7Sderaadt 	char *old_type;
64df930be7Sderaadt 	relation rel;
65df930be7Sderaadt 	char *array_max;
66df930be7Sderaadt };
67df930be7Sderaadt typedef struct typedef_def typedef_def;
68df930be7Sderaadt 
69df930be7Sderaadt struct enumval_list {
70df930be7Sderaadt 	char *name;
71df930be7Sderaadt 	char *assignment;
72df930be7Sderaadt 	struct enumval_list *next;
73df930be7Sderaadt };
74df930be7Sderaadt typedef struct enumval_list enumval_list;
75df930be7Sderaadt 
76df930be7Sderaadt struct enum_def {
77df930be7Sderaadt 	enumval_list *vals;
78df930be7Sderaadt };
79df930be7Sderaadt typedef struct enum_def enum_def;
80df930be7Sderaadt 
81df930be7Sderaadt struct declaration {
82df930be7Sderaadt 	char *prefix;
83df930be7Sderaadt 	char *type;
84df930be7Sderaadt 	char *name;
85df930be7Sderaadt 	relation rel;
86df930be7Sderaadt 	char *array_max;
87df930be7Sderaadt };
88df930be7Sderaadt typedef struct declaration declaration;
89df930be7Sderaadt 
90df930be7Sderaadt struct decl_list {
91df930be7Sderaadt 	declaration decl;
92df930be7Sderaadt 	struct decl_list *next;
93df930be7Sderaadt };
94df930be7Sderaadt typedef struct decl_list decl_list;
95df930be7Sderaadt 
96df930be7Sderaadt struct struct_def {
97df930be7Sderaadt 	decl_list *decls;
98df930be7Sderaadt };
99df930be7Sderaadt typedef struct struct_def struct_def;
100df930be7Sderaadt 
101df930be7Sderaadt struct case_list {
102df930be7Sderaadt 	char *case_name;
103df930be7Sderaadt 	int contflag;
104df930be7Sderaadt 	declaration case_decl;
105df930be7Sderaadt 	struct case_list *next;
106df930be7Sderaadt };
107df930be7Sderaadt typedef struct case_list case_list;
108df930be7Sderaadt 
109df930be7Sderaadt struct union_def {
110df930be7Sderaadt 	declaration enum_decl;
111df930be7Sderaadt 	case_list *cases;
112df930be7Sderaadt 	declaration *default_decl;
113df930be7Sderaadt };
114df930be7Sderaadt typedef struct union_def union_def;
115df930be7Sderaadt 
116df930be7Sderaadt struct arg_list {
117df930be7Sderaadt 	char *argname; /* name of struct for arg*/
118df930be7Sderaadt 	decl_list *decls;
119df930be7Sderaadt };
120df930be7Sderaadt 
121df930be7Sderaadt typedef struct arg_list arg_list;
122df930be7Sderaadt 
123df930be7Sderaadt struct proc_list {
124df930be7Sderaadt 	char *proc_name;
125df930be7Sderaadt 	char *proc_num;
126df930be7Sderaadt 	arg_list args;
127df930be7Sderaadt 	int arg_num;
128df930be7Sderaadt 	char *res_type;
129df930be7Sderaadt 	char *res_prefix;
130df930be7Sderaadt 	struct proc_list *next;
131df930be7Sderaadt };
132df930be7Sderaadt typedef struct proc_list proc_list;
133df930be7Sderaadt 
134df930be7Sderaadt struct version_list {
135df930be7Sderaadt 	char *vers_name;
136df930be7Sderaadt 	char *vers_num;
137df930be7Sderaadt 	proc_list *procs;
138df930be7Sderaadt 	struct version_list *next;
139df930be7Sderaadt };
140df930be7Sderaadt typedef struct version_list version_list;
141df930be7Sderaadt 
142df930be7Sderaadt struct program_def {
143df930be7Sderaadt 	char *prog_num;
144df930be7Sderaadt 	version_list *versions;
145df930be7Sderaadt };
146df930be7Sderaadt typedef struct program_def program_def;
147df930be7Sderaadt 
148df930be7Sderaadt struct definition {
149df930be7Sderaadt 	char *def_name;
150df930be7Sderaadt 	defkind def_kind;
151df930be7Sderaadt 	union {
152df930be7Sderaadt 		const_def co;
153df930be7Sderaadt 		struct_def st;
154df930be7Sderaadt 		union_def un;
155df930be7Sderaadt 		enum_def en;
156df930be7Sderaadt 		typedef_def ty;
157df930be7Sderaadt 		program_def pr;
158df930be7Sderaadt 	} def;
159df930be7Sderaadt };
160df930be7Sderaadt typedef struct definition definition;
161df930be7Sderaadt 
16274637cb2Sderaadt definition *get_definition(void);
163df930be7Sderaadt 
164d0159584Sderaadt struct bas_type {
165df930be7Sderaadt 	char *name;
166df930be7Sderaadt 	int length;
167df930be7Sderaadt 	struct bas_type *next;
168df930be7Sderaadt };
169df930be7Sderaadt 
170df930be7Sderaadt typedef struct bas_type bas_type;
171