1 /*
   2  * CDDL HEADER START
   3  *
   4  * The contents of this file are subject to the terms of the
   5  * Common Development and Distribution License (the "License").
   6  * You may not use this file except in compliance with the License.
   7  *
   8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9  * or http://www.opensolaris.org/os/licensing.
  10  * See the License for the specific language governing permissions
  11  * and limitations under the License.
  12  *
  13  * When distributing Covered Code, include this CDDL HEADER in each
  14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15  * If applicable, add the following below this CDDL HEADER, with the
  16  * fields enclosed by brackets "[]" replaced with your own identifying
  17  * information: Portions Copyright [yyyy] [name of copyright owner]
  18  *
  19  * CDDL HEADER END
  20  */
  21 
  22 /*
  23  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  24  * Use is subject to license terms.
  25  */
  26 /* Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T */
  27 /* All Rights Reserved */
  28 /*
  29  * University Copyright- Copyright (c) 1982, 1986, 1988
  30  * The Regents of the University of California
  31  * All Rights Reserved
  32  *
  33  * University Acknowledgment- Portions of this document are derived from
  34  * software developed by the University of California, Berkeley, and its
  35  * contributors.
  36  */
  37 
  38 #ifndef _RPC_UTIL_H
  39 #define _RPC_UTIL_H
  40 
  41 #include <sys/types.h>
  42 #include <stdlib.h>
  43 #include "rpc_scan.h"
  44 
  45 #ifdef __cplusplus
  46 extern "C" {
  47 #endif
  48 
  49 /*
  50  * rpc_util.h, Useful definitions for the RPC protocol compiler
  51  */
  52 
  53 
  54 /* Current version number of rpcgen. */
  55 #define RPCGEN_MAJOR 1
  56 #define RPCGEN_MINOR 1
  57 
  58 #define f_print (void) fprintf
  59 
  60 struct list {
  61         definition *val;
  62         struct list *next;
  63 };
  64 typedef struct list list;
  65 
  66 struct xdrfunc {
  67         char *name;
  68         int pointerp;
  69         struct xdrfunc *next;
  70 };
  71 typedef struct xdrfunc xdrfunc;
  72 
  73 struct commandline {
  74         int cflag;              /* xdr C routines */
  75         int hflag;              /* header file */
  76         int lflag;              /* client side stubs */
  77         int mflag;              /* server side stubs */
  78         int nflag;              /* netid flag */
  79         int sflag;              /* server stubs for the given transport */
  80         int tflag;              /* dispatch Table file */
  81         int Ssflag;             /* produce server sample code */
  82         int Scflag;             /* produce client sample code */
  83         int makefileflag;       /* Generate a template Makefile */
  84         char *infile;           /* input module name */
  85         char *outfile;          /* output module name */
  86 };
  87 
  88 #define PUT 1
  89 #define GET 2
  90 
  91 /*
  92  * Global variables
  93  */
  94 #define MAXLINESIZE 1024
  95 extern char curline[MAXLINESIZE];
  96 extern char *where;
  97 extern int linenum;
  98 
  99 extern char *infilename;
 100 extern FILE *fout;
 101 extern FILE *fin;
 102 
 103 extern list *defined;
 104 
 105 extern bas_type *typ_list_h;
 106 extern bas_type *typ_list_t;
 107 extern xdrfunc *xdrfunc_head, *xdrfunc_tail;
 108 
 109 /*
 110  * All the option flags
 111  */
 112 extern int inetdflag;
 113 extern int pmflag;
 114 extern int tblflag;
 115 extern int logflag;
 116 extern int newstyle;
 117 extern int Cflag;       /* ANSI-C/C++ flag */
 118 extern int CCflag;      /* C++ flag */
 119 extern int tirpcflag;   /* flag for generating tirpc code */
 120 extern int inlinelen;   /* if this is 0, then do not generate inline code */
 121 extern int mtflag;
 122 extern int mtauto;
 123 extern int rflag;
 124 
 125 /*
 126  * Other flags related with inetd jumpstart.
 127  */
 128 extern int indefinitewait;
 129 extern int exitnow;
 130 extern int timerflag;
 131 
 132 extern int nonfatalerrors;
 133 
 134 extern pid_t childpid;
 135 
 136 /*
 137  * rpc_util routines
 138  */
 139 extern void storeval(list **, definition *);
 140 
 141 #define STOREVAL(list, item)    \
 142         storeval(list, item)
 143 
 144 extern definition *findval(list *, char *, int (*)());
 145 
 146 #define FINDVAL(list, item, finder) \
 147         findval(list, item, finder)
 148 
 149 extern char *fixtype(char *);
 150 extern char *stringfix(char *);
 151 extern char *locase(char *);
 152 extern void pvname_svc(char *, char *);
 153 extern void pvname(char *, char *);
 154 extern void ptype(char *, char *, int);
 155 extern int isvectordef(char *, relation);
 156 extern int streq(char *, char *);
 157 extern void error(char *);
 158 extern void expected1(tok_kind);
 159 extern void expected2(tok_kind, tok_kind);
 160 extern void expected3(tok_kind, tok_kind, tok_kind);
 161 extern void tabify(FILE *, int);
 162 extern void record_open(char *);
 163 extern bas_type *find_type(char *);
 164 
 165 /*
 166  * rpc_cout routines
 167  */
 168 extern void emit(definition *);
 169 
 170 /*
 171  * rpc_hout routines
 172  */
 173 extern void print_datadef(definition *);
 174 extern void print_funcdef(definition *);
 175 extern void print_xdr_func_def(char *, int, int);
 176 
 177 /*
 178  * rpc_svcout routines
 179  */
 180 extern void write_most(char *, int, int);
 181 extern void write_rest(void);
 182 extern void write_inetd_register(char *);
 183 extern void write_netid_register(char *);
 184 extern void write_nettype_register(char *);
 185 
 186 /*
 187  * rpc_clntout routines
 188  */
 189 extern void write_stubs(void);
 190 
 191 /*
 192  * rpc_tblout routines
 193  */
 194 extern void write_tables(void);
 195 
 196 #ifdef __cplusplus
 197 }
 198 #endif
 199 
 200 #endif  /* !_RPC_UTIL_H */