|  | /*      @(#)rpc_parse.h  1.3  90/08/29 | 
|  | * | 
|  | * Copyright (c) 2010, Oracle America, Inc. | 
|  | * Redistribution and use in source and binary forms, with or without | 
|  | * modification, are permitted provided that the following conditions are | 
|  | * met: | 
|  | * | 
|  | *     * Redistributions of source code must retain the above copyright | 
|  | *       notice, this list of conditions and the following disclaimer. | 
|  | *     * Redistributions in binary form must reproduce the above | 
|  | *       copyright notice, this list of conditions and the following | 
|  | *       disclaimer in the documentation and/or other materials | 
|  | *       provided with the distribution. | 
|  | *     * Neither the name of the "Oracle America, Inc." nor the names of its | 
|  | *       contributors may be used to endorse or promote products derived | 
|  | *       from this software without specific prior written permission. | 
|  | * | 
|  | *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | 
|  | *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | 
|  | *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS | 
|  | *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE | 
|  | *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, | 
|  | *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | 
|  | *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE | 
|  | *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | 
|  | *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, | 
|  | *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | 
|  | *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 
|  | *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 
|  | * | 
|  | * rpc_parse.h, Definitions for the RPCL parser | 
|  | */ | 
|  |  | 
|  | enum defkind { | 
|  | DEF_CONST, | 
|  | DEF_STRUCT, | 
|  | DEF_UNION, | 
|  | DEF_ENUM, | 
|  | DEF_TYPEDEF, | 
|  | DEF_PROGRAM | 
|  | }; | 
|  | typedef enum defkind defkind; | 
|  |  | 
|  | typedef const char *const_def; | 
|  |  | 
|  | enum relation { | 
|  | REL_VECTOR,	/* fixed length array */ | 
|  | REL_ARRAY,	/* variable length array */ | 
|  | REL_POINTER,	/* pointer */ | 
|  | REL_ALIAS	/* simple */ | 
|  | }; | 
|  | typedef enum relation relation; | 
|  |  | 
|  | struct typedef_def { | 
|  | const char *old_prefix; | 
|  | const char *old_type; | 
|  | relation rel; | 
|  | const char *array_max; | 
|  | }; | 
|  | typedef struct typedef_def typedef_def; | 
|  |  | 
|  | struct enumval_list { | 
|  | const char *name; | 
|  | const char *assignment; | 
|  | struct enumval_list *next; | 
|  | }; | 
|  | typedef struct enumval_list enumval_list; | 
|  |  | 
|  | struct enum_def { | 
|  | enumval_list *vals; | 
|  | }; | 
|  | typedef struct enum_def enum_def; | 
|  |  | 
|  | struct declaration { | 
|  | const char *prefix; | 
|  | const char *type; | 
|  | const char *name; | 
|  | relation rel; | 
|  | const char *array_max; | 
|  | }; | 
|  | typedef struct declaration declaration; | 
|  |  | 
|  | struct decl_list { | 
|  | declaration decl; | 
|  | struct decl_list *next; | 
|  | }; | 
|  | typedef struct decl_list decl_list; | 
|  |  | 
|  | struct struct_def { | 
|  | decl_list *decls; | 
|  | }; | 
|  | typedef struct struct_def struct_def; | 
|  |  | 
|  | struct case_list { | 
|  | const char *case_name; | 
|  | int contflag; | 
|  | declaration case_decl; | 
|  | struct case_list *next; | 
|  | }; | 
|  | typedef struct case_list case_list; | 
|  |  | 
|  | struct union_def { | 
|  | declaration enum_decl; | 
|  | case_list *cases; | 
|  | declaration *default_decl; | 
|  | }; | 
|  | typedef struct union_def union_def; | 
|  |  | 
|  | struct arg_list { | 
|  | const char *argname; /* name of struct for arg*/ | 
|  | decl_list *decls; | 
|  | }; | 
|  |  | 
|  | typedef struct arg_list arg_list; | 
|  |  | 
|  | struct proc_list { | 
|  | const char *proc_name; | 
|  | const char *proc_num; | 
|  | arg_list args; | 
|  | int arg_num; | 
|  | const char *res_type; | 
|  | const char *res_prefix; | 
|  | struct proc_list *next; | 
|  | }; | 
|  | typedef struct proc_list proc_list; | 
|  |  | 
|  | struct version_list { | 
|  | const char *vers_name; | 
|  | const char *vers_num; | 
|  | proc_list *procs; | 
|  | struct version_list *next; | 
|  | }; | 
|  | typedef struct version_list version_list; | 
|  |  | 
|  | struct program_def { | 
|  | const char *prog_num; | 
|  | version_list *versions; | 
|  | }; | 
|  | typedef struct program_def program_def; | 
|  |  | 
|  | struct definition { | 
|  | const char *def_name; | 
|  | defkind def_kind; | 
|  | union { | 
|  | const_def co; | 
|  | struct_def st; | 
|  | union_def un; | 
|  | enum_def en; | 
|  | typedef_def ty; | 
|  | program_def pr; | 
|  | } def; | 
|  | }; | 
|  | typedef struct definition definition; | 
|  |  | 
|  | definition *get_definition(void); | 
|  |  | 
|  |  | 
|  | struct bas_type | 
|  | { | 
|  | const char *name; | 
|  | int length; | 
|  | struct bas_type *next; | 
|  | }; | 
|  |  | 
|  | typedef struct bas_type bas_type; |