Source:NetHack 3.3.0/tradstdc.h

From NetHackWiki
Jump to navigation Jump to search

Below is the full text to tradstdc.h from the source code of NetHack 3.3.0. To link to a particular line, write [[NetHack 3.3.0/tradstdc.h#line123]], for example.

Warning! This is the source code from an old release. For the latest release, see Source code

The NetHack General Public License applies to screenshots, source code and other content from NetHack.

This content was modified from the original NetHack source code distribution (by splitting up NetHack content between wiki pages, and possibly further editing). See the page history for a list of who changed it, and on what dates.

1.    /*	SCCS Id: @(#)tradstdc.h 3.3	93/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)
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(applec)
207.  #define UNWIDENED_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 */