1 /* Copyright (C) 1993 Nathan Sidwell */
2 /* RCS $Id: ansiknr.h,v 4.6 1995/12/14 13:53:27 nathan Exp $ */
3 /* macros to make both ANSI & K&R compilers happy */
4 /* uses FUNCPROTO like Xfuncproto.h does, so you can tailor things */
5 /*{{{  prototypes*/
6 #if __STDC__ || FUNCPROTO & 1
7 # define PROTOARG(list) list
8 # define VOIDFUNC void
9 # define VOID void
10 # define FUNCARG(list, defs) (defs)
11 # define FUNCARGVOID ()
12 # define ARGSEP ,
13 # define VOIDARG void
14 # define FLOATARG float
15 # define FLOATFUNC float
16 #else
17 # define PROTOARG(list) ()
18 # if STRICTKNR /* most knr compilers now understand void */
19 #  define VOIDFUNC int
20 #  define VOID char
21 # else
22 #  define VOIDFUNC void
23 #  define VOID void
24 # endif /* NOVOID */
25 # define FUNCARG(list, defs) list defs;
26 # define FUNCARGVOID ()
27 # define ARGSEP  ;
28 # define VOIDARG
29 # define FLOATARG double
30 # define FLOATFUNC double
31 #endif
32 /*}}}*/
33 /*{{{  varargs prototypes*/
34 #if __STDC__ || FUNCPROTO & 2
35 # define VARARG ...
36 # define VARARGDEF ...
37 # define FUNCVARARG(list, defs) (defs, ...)
38 # define VARARGSET(args, last) va_start(args, last)
39 # define PROTOVARARG(list) PROTOARG(list)
40 #else
41 # define VARARG int
42 # define VARARGDEF va_alist
43 # define FUNCVARARG(list, defs) list defs; va_dcl
44 # define VARARGSET(args, last) va_start(args)
45 # define PROTOVARARG(list) ()
46 #endif
47 /*}}}*/
48 /*{{{  nested prototypes*/
49 #if __STDC__ || FUNCPROTO & 8
50 # define NESTEDPROTOARG(list) list
51 #else
52 # define NESTEDPROTOARG(list) ()
53 #endif
54 /*}}}*/
55 /*{{{  const, volatile*/
56 #undef CONST
57 #undef VOLATILE
58 #if __STDC__ || FUNCPROTO & 4
59 # define CONST const
60 # define VOLATILE volatile
61 #else
62 # define CONST /* blank */
63 # define VOLATILE /* blank */
64 #endif
65 /*}}}*/
66 #if __STDC__ || FUNCPROTO & 2
67 # include <stdarg.h>
68 #else /* !__STDC__ */
69 # include <varargs.h>
70 #endif /* __STDC__ */
71