~ubuntu-branches/ubuntu/dapper/nethack/dapper

« back to all changes in this revision

Viewing changes to include/tradstdc.h

  • Committer: Bazaar Package Importer
  • Author(s): Joshua Kwan
  • Date: 2004-04-28 22:20:28 UTC
  • Revision ID: james.westby@ubuntu.com-20040428222028-xxg55fuf5dxiaogu
Tags: upstream-3.4.3
ImportĀ upstreamĀ versionĀ 3.4.3

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*      SCCS Id: @(#)tradstdc.h 3.4     1993/05/30      */
 
2
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 
3
/* NetHack may be freely redistributed.  See license for details. */
 
4
 
 
5
#ifndef TRADSTDC_H
 
6
#define TRADSTDC_H
 
7
 
 
8
#if defined(DUMB) && !defined(NOVOID)
 
9
#define NOVOID
 
10
#endif
 
11
 
 
12
#ifdef NOVOID
 
13
#define void int
 
14
#endif
 
15
 
 
16
/*
 
17
 * Borland C provides enough ANSI C compatibility in its Borland C++
 
18
 * mode to warrant this.  But it does not set __STDC__ unless it compiles
 
19
 * in its ANSI keywords only mode, which prevents use of <dos.h> and
 
20
 * far pointer use.
 
21
 */
 
22
#if (defined(__STDC__) || defined(__TURBOC__)) && !defined(NOTSTDC)
 
23
#define NHSTDC
 
24
#endif
 
25
 
 
26
#if defined(ultrix) && defined(__STDC__) && !defined(__LANGUAGE_C)
 
27
/* Ultrix seems to be in a constant state of flux.  This check attempts to
 
28
 * set up ansi compatibility if it wasn't set up correctly by the compiler.
 
29
 */
 
30
#ifdef mips
 
31
#define __mips mips
 
32
#endif
 
33
 
 
34
#ifdef LANGUAGE_C
 
35
#define __LANGUAGE_C LANGUAGE_C
 
36
#endif
 
37
 
 
38
#endif
 
39
 
 
40
/*
 
41
 * ANSI X3J11 detection.
 
42
 * Makes substitutes for compatibility with the old C standard.
 
43
 */
 
44
 
 
45
/* Decide how to handle variable parameter lists:
 
46
 * USE_STDARG means use the ANSI <stdarg.h> facilities (only ANSI compilers
 
47
 * should do this, and only if the library supports it).
 
48
 * USE_VARARGS means use the <varargs.h> facilities.  Again, this should only
 
49
 * be done if the library supports it.  ANSI is *not* required for this.
 
50
 * Otherwise, the kludgy old methods are used.
 
51
 * The defaults are USE_STDARG for ANSI compilers, and USE_OLDARGS for
 
52
 * others.
 
53
 */
 
54
 
 
55
/* #define USE_VARARGS */       /* use <varargs.h> instead of <stdarg.h> */
 
56
/* #define USE_OLDARGS */       /* don't use any variable argument facilites */
 
57
 
 
58
#if defined(apollo)             /* Apollos have stdarg(3) but not stdarg.h */
 
59
# define USE_VARARGS
 
60
#endif
 
61
 
 
62
#if defined(NHSTDC) || defined(ULTRIX_PROTO) || defined(MAC)
 
63
# if !defined(USE_VARARGS) && !defined(USE_OLDARGS) && !defined(USE_STDARG)
 
64
#   define USE_STDARG
 
65
# endif
 
66
#endif
 
67
 
 
68
#ifdef NEED_VARARGS             /* only define these if necessary */
 
69
#ifdef USE_STDARG
 
70
#include <stdarg.h>
 
71
# define VA_DECL(typ1,var1)     (typ1 var1, ...) { va_list the_args;
 
72
# define VA_DECL2(typ1,var1,typ2,var2)  \
 
73
        (typ1 var1, typ2 var2, ...) { va_list the_args;
 
74
# define VA_INIT(var1,typ1)
 
75
# define VA_NEXT(var1,typ1)     var1 = va_arg(the_args, typ1)
 
76
# define VA_ARGS                the_args
 
77
# define VA_START(x)            va_start(the_args, x)
 
78
# define VA_END()               va_end(the_args)
 
79
# if defined(ULTRIX_PROTO) && !defined(_VA_LIST_)
 
80
#  define _VA_LIST_     /* prevents multiple def in stdio.h */
 
81
# endif
 
82
#else
 
83
# ifdef USE_VARARGS
 
84
#include <varargs.h>
 
85
#  define VA_DECL(typ1,var1)    (va_alist) va_dcl {\
 
86
                va_list the_args; typ1 var1;
 
87
#  define VA_DECL2(typ1,var1,typ2,var2) (va_alist) va_dcl {\
 
88
                va_list the_args; typ1 var1; typ2 var2;
 
89
#  define VA_ARGS               the_args
 
90
#  define VA_START(x)           va_start(the_args)
 
91
#  define VA_INIT(var1,typ1)    var1 = va_arg(the_args, typ1)
 
92
#  define VA_NEXT(var1,typ1)    var1 = va_arg(the_args,typ1)
 
93
#  define VA_END()              va_end(the_args)
 
94
# else
 
95
#   define VA_ARGS      arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9
 
96
#   define VA_DECL(typ1,var1)  (var1,VA_ARGS) typ1 var1; \
 
97
        char *arg1,*arg2,*arg3,*arg4,*arg5,*arg6,*arg7,*arg8,*arg9; {
 
98
#   define VA_DECL2(typ1,var1,typ2,var2)  (var1,var2,VA_ARGS) \
 
99
        typ1 var1; typ2 var2;\
 
100
        char *arg1,*arg2,*arg3,*arg4,*arg5,*arg6,*arg7,*arg8,*arg9; {
 
101
#   define VA_START(x)
 
102
#   define VA_INIT(var1,typ1)
 
103
#   define VA_END()
 
104
# endif
 
105
#endif
 
106
#endif /* NEED_VARARGS */
 
107
 
 
108
#if defined(NHSTDC) || defined(MSDOS) || defined(MAC) || defined(ULTRIX_PROTO) || defined(__BEOS__)
 
109
 
 
110
/*
 
111
 * Used for robust ANSI parameter forward declarations:
 
112
 * int VDECL(sprintf, (char *, const char *, ...));
 
113
 *
 
114
 * NDECL() is used for functions with zero arguments;
 
115
 * FDECL() is used for functions with a fixed number of arguments;
 
116
 * VDECL() is used for functions with a variable number of arguments.
 
117
 * Separate macros are needed because ANSI will mix old-style declarations
 
118
 * with prototypes, except in the case of varargs, and the OVERLAY-specific
 
119
 * trampoli.* mechanism conflicts with the ANSI <<f(void)>> syntax.
 
120
 */
 
121
 
 
122
# define NDECL(f)       f(void) /* overridden later if USE_TRAMPOLI set */
 
123
 
 
124
# define FDECL(f,p)     f p
 
125
 
 
126
# if defined(MSDOS) || defined(USE_STDARG)
 
127
#  define VDECL(f,p)    f p
 
128
# else
 
129
#  define VDECL(f,p)    f()
 
130
# endif
 
131
 
 
132
/* generic pointer, always a macro; genericptr_t is usually a typedef */
 
133
# define genericptr     void *
 
134
 
 
135
# if (defined(ULTRIX_PROTO) && !defined(__GNUC__)) || defined(OS2_CSET2)
 
136
/* Cover for Ultrix on a DECstation with 2.0 compiler, which coredumps on
 
137
 *   typedef void * genericptr_t;
 
138
 *   extern void a(void(*)(int, genericptr_t));
 
139
 * Using the #define is OK for other compiler versions too.
 
140
 */
 
141
/* And IBM CSet/2.  The redeclaration of free hoses the compile. */
 
142
#  define genericptr_t  genericptr
 
143
# else
 
144
#  if !defined(NHSTDC) && !defined(MAC)
 
145
#   define const
 
146
#   define signed
 
147
#   define volatile
 
148
#  endif
 
149
# endif
 
150
 
 
151
/*
 
152
 * Suppress `const' if necessary and not handled elsewhere.
 
153
 * Don't use `#if defined(xxx) && !defined(const)'
 
154
 * because some compilers choke on `defined(const)'.
 
155
 * This has been observed with Lattice, MPW, and High C.
 
156
 */
 
157
# if (defined(ULTRIX_PROTO) && !defined(NHSTDC)) || defined(apollo)
 
158
        /* the system header files don't use `const' properly */
 
159
#  ifndef const
 
160
#   define const
 
161
#  endif
 
162
# endif
 
163
 
 
164
#else /* NHSTDC */      /* a "traditional" C  compiler */
 
165
 
 
166
# define NDECL(f)       f()
 
167
# define FDECL(f,p)     f()
 
168
# define VDECL(f,p)     f()
 
169
 
 
170
# if defined(AMIGA) || defined(HPUX) || defined(POSIX_TYPES) || defined(__DECC) || defined(__BORLANDC__)
 
171
#  define genericptr    void *
 
172
# endif
 
173
# ifndef genericptr
 
174
#  define genericptr    char *
 
175
# endif
 
176
 
 
177
/*
 
178
 * Traditional C compilers don't have "signed", "const", or "volatile".
 
179
 */
 
180
# define signed
 
181
# define const
 
182
# define volatile
 
183
 
 
184
#endif /* NHSTDC */
 
185
 
 
186
 
 
187
#ifndef genericptr_t
 
188
typedef genericptr genericptr_t;        /* (void *) or (char *) */
 
189
#endif
 
190
 
 
191
 
 
192
/*
 
193
 * According to ANSI, prototypes for old-style declarations must widen the
 
194
 * arguments to int.  However, the MSDOS compilers accept shorter arguments
 
195
 * (char, short, etc.) in prototypes and do typechecking with them.  Therefore
 
196
 * this mess to allow the better typechecking while also allowing some
 
197
 * prototypes for the ANSI compilers so people quit trying to fix the
 
198
 * prototypes to match the standard and thus lose the typechecking.
 
199
 */
 
200
#if defined(MSDOS) && !defined(__GO32__)
 
201
#define UNWIDENED_PROTOTYPES
 
202
#endif
 
203
#if defined(AMIGA) && !defined(AZTEC_50)
 
204
#define UNWIDENED_PROTOTYPES
 
205
#endif
 
206
#if defined(macintosh) && (defined(__SC__) || defined(__MRC__))
 
207
#define WIDENED_PROTOTYPES
 
208
#endif
 
209
#if defined(__MWERKS__) && defined(__BEOS__)
 
210
#define UNWIDENED_PROTOTYPES
 
211
#endif
 
212
#if defined(WIN32)
 
213
#define UNWIDENED_PROTOTYPES
 
214
#endif
 
215
 
 
216
#if defined(ULTRIX_PROTO) && defined(ULTRIX_CC20)
 
217
#define UNWIDENED_PROTOTYPES
 
218
#endif
 
219
#if defined(apollo)
 
220
#define UNWIDENED_PROTOTYPES
 
221
#endif
 
222
 
 
223
#ifndef UNWIDENED_PROTOTYPES
 
224
# if defined(NHSTDC) || defined(ULTRIX_PROTO) || defined(THINK_C)
 
225
# define WIDENED_PROTOTYPES
 
226
# endif
 
227
#endif
 
228
 
 
229
#if 0
 
230
/* The problem below is still the case through 4.0.5F, but the suggested
 
231
 * compiler flags in the Makefiles suppress the nasty messages, so we don't
 
232
 * need to be quite so drastic.
 
233
 */
 
234
#if defined(__sgi) && !defined(__GNUC__)
 
235
/*
 
236
 * As of IRIX 4.0.1, /bin/cc claims to be an ANSI compiler, but it thinks
 
237
 * it's impossible for a prototype to match an old-style definition with
 
238
 * unwidened argument types.  Thus, we have to turn off all NetHack
 
239
 * prototypes, and avoid declaring several system functions, since the system
 
240
 * include files have prototypes and the compiler also complains that
 
241
 * prototyped and unprototyped declarations don't match.
 
242
 */
 
243
# undef NDECL
 
244
# undef FDECL
 
245
# undef VDECL
 
246
# define NDECL(f)       f()
 
247
# define FDECL(f,p)     f()
 
248
# define VDECL(f,p)     f()
 
249
#endif
 
250
#endif
 
251
 
 
252
 
 
253
        /* MetaWare High-C defaults to unsigned chars */
 
254
        /* AIX 3.2 needs this also */
 
255
#if defined(__HC__) || defined(_AIX32)
 
256
# undef signed
 
257
#endif
 
258
 
 
259
 
 
260
/*
 
261
 * Allow gcc2 to check parameters of printf-like calls with -Wformat;
 
262
 * append this to a prototype declaration (see pline() in extern.h).
 
263
 */
 
264
#ifdef __GNUC__
 
265
# if __GNUC__ >= 2
 
266
#define PRINTF_F(f,v) __attribute__ ((format (printf, f, v)))
 
267
# endif
 
268
#endif
 
269
#ifndef PRINTF_F
 
270
#define PRINTF_F(f,v)
 
271
#endif
 
272
 
 
273
#endif /* TRADSTDC_H */