Source:NetHack 3.1.0/tradstdc.h

From NetHackWiki
Revision as of 07:40, 4 March 2008 by Kernigh bot (talk | contribs) (NetHack 3.1.0/tradstdc.h moved to Source:NetHack 3.1.0/tradstdc.h: Robot: moved page)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Below is the full text to tradstdc.h from the source code of NetHack 3.1.0. To link to a particular line, write [[NetHack 3.1.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.1	92/04/01	*/
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.   #if defined(__STDC__) && !defined(NOTSTDC)
17.   #define NHSTDC
18.   #endif
19.   
20.   #if defined(ultrix) && defined(__STDC__) && !defined(__LANGUAGE_C)
21.   /* Ultrix seems to be in a constant state of flux.  This check attempts to
22.    * set up ansi compatibility if it wasn't set up correctly by the compiler.
23.    */
24.   #ifdef mips
25.   #define __mips mips
26.   #endif
27.   
28.   #ifdef LANGUAGE_C
29.   #define __LANGUAGE_C LANGUAGE_C
30.   #endif
31.   
32.   #endif
33.   
34.   /*
35.    * ANSI X3J11 detection.
36.    * Makes substitutes for compatibility with the old C standard.
37.    */
38.   
39.   /* Decide how to handle variable parameter lists:
40.    * USE_STDARG means use the ANSI <stdarg.h> facilities (only ANSI compilers
41.    * should do this, and only if the library supports it).
42.    * USE_VARARGS means use the <varargs.h> facilities.  Again, this should only
43.    * be done if the library supports it.  ANSI is *not* required for this.
44.    * Otherwise, the kludgy old methods are used.
45.    * The defaults are USE_STDARG for ANSI compilers, and USE_OLDARGS for
46.    * others.
47.    */
48.   
49.   /* #define USE_VARARGS		/* use <varargs.h> instead of <stdarg.h> */
50.   /* #define USE_OLDARGS		/* don't use any variable argument facilites */
51.   
52.   #if defined(apollo)             /* Apollos have stdarg(3) but not stdarg.h */
53.   # define USE_VARARGS
54.   #endif
55.   
56.   #if defined(NHSTDC) || defined(ULTRIX_PROTO) || defined(MAC)
57.   # if !defined(USE_VARARGS) && !defined(USE_OLDARGS) && !defined(USE_STDARG)
58.   #   define USE_STDARG
59.   # endif
60.   #endif
61.   
62.   #ifdef NEED_VARARGS		/* only define these if necessary */
63.   #ifdef USE_STDARG
64.   # include <stdarg.h>
65.   # define VA_DECL(typ1,var1)	(typ1 var1, ...) { va_list the_args;
66.   # define VA_DECL2(typ1,var1,typ2,var2)	\
67.   	(typ1 var1, typ2 var2, ...) { va_list the_args;
68.   # define VA_INIT(var1,typ1)
69.   # define VA_NEXT(var1,typ1)	var1 = va_arg(the_args, typ1)
70.   # define VA_ARGS		the_args
71.   # define VA_START(x)		va_start(the_args, x)
72.   # define VA_END()		va_end(the_args)
73.   # if defined(ULTRIX_PROTO) && !defined(_VA_LIST_)
74.   #  define _VA_LIST_	/* prevents multiple def in stdio.h */
75.   # endif
76.   #else
77.   # ifdef USE_VARARGS
78.   #  include <varargs.h>
79.   #  define VA_DECL(typ1,var1)	(va_alist) va_dcl {\
80.   		va_list the_args; typ1 var1;
81.   #  define VA_DECL2(typ1,var1,typ2,var2)	(va_alist) va_dcl {\
82.   		va_list the_args; typ1 var1; typ2 var2;
83.   #  define VA_ARGS		the_args
84.   #  define VA_START(x)		va_start(the_args)
85.   #  define VA_INIT(var1,typ1)	var1 = va_arg(the_args, typ1)
86.   #  define VA_NEXT(var1,typ1)	var1 = va_arg(the_args,typ1)
87.   #  define VA_END()		va_end(the_args)
88.   # else
89.   #   define VA_ARGS	arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9
90.   #   define VA_DECL(typ1,var1)  (var1,VA_ARGS) typ1 var1; \
91.   	char *arg1,*arg2,*arg3,*arg4,*arg5,*arg6,*arg7,*arg8,*arg9; {
92.   #   define VA_DECL2(typ1,var1,typ2,var2)  (var1,var2,VA_ARGS) \
93.   	typ1 var1; typ2 var2;\
94.   	char *arg1,*arg2,*arg3,*arg4,*arg5,*arg6,*arg7,*arg8,*arg9; {
95.   #   define VA_START(x)
96.   #   define VA_INIT(var1,typ1)
97.   #   define VA_END()
98.   # endif
99.   #endif
100.  #endif /* NEED_VARARGS */
101.  
102.  #if defined(NHSTDC) || defined(MSDOS) || defined(MAC) || defined(ULTRIX_PROTO)
103.  
104.  /*
105.   * Used for robust ANSI parameter forward declarations:
106.   * int VDECL(sprintf, (char *, const char *, ...));
107.   *
108.   * NDECL() is used for functions with zero arguments;
109.   * FDECL() is used for functions with a fixed number of arguments;
110.   * VDECL() is used for functions with a variable number of arguments.
111.   * Separate macros are needed because ANSI will mix old-style declarations
112.   * with prototypes, except in the case of varargs, and the OVERLAY-specific
113.   * trampoli.* mechanism conflicts with the ANSI <<f(void)>> syntax.
114.   */
115.  
116.  # define NDECL(f)	f(void)	/* Must be overridden if OVERLAY set later */
117.  
118.  # define FDECL(f,p)	f p
119.  
120.  # if defined(MSDOS) || defined(USE_STDARG)
121.  #  define VDECL(f,p)	f p
122.  # else
123.  #  define VDECL(f,p)	f()
124.  # endif
125.  
126.  /* generic pointer, always a macro; genericptr_t is usually a typedef */
127.  # define genericptr	void *
128.  
129.  # if defined(__TURBOC__) || (defined(ULTRIX_PROTO) && !defined(__GNUC__)) || defined(OS2_CSET2)
130.  /* Cover for stupid Turbo C */
131.  /* And Ultrix on a DECstation with 2.0 compiler, which coredumps on
132.   *   typedef void * genericptr_t;
133.   *   extern void a(void(*)(int, genericptr_t));
134.   * Using the #define is OK for other compiler versions too.
135.   */
136.  /* And IBM CSet/2.  The redeclaration of free hoses the compile. */
137.  #  define genericptr_t	genericptr
138.  # else
139.  #  if !defined(NHSTDC) && !defined(MAC)
140.  #   define const
141.  #   define signed
142.  #   define volatile
143.  #  endif
144.  # endif
145.  
146.  # if !defined(LATTICE) && !defined(MAC)
147.  		/* Lattice can't even PARSE the const below! */
148.  		/* MPW can parse but expects an identifier, not a keyword... */
149.  #  if defined(ULTRIX_PROTO) && !defined(NHSTDC) && !defined(const)
150.  #  define const		/* the system header files are *not* __STDC__ */
151.  #  endif
152.  #  if defined(apollo) && !defined(const)
153.  #  define const         /* too much trouble with printf(char *format, ...) */
154.  #  endif                 /* instead of printf(const char *format, ...) etc. */
155.  # endif
156.  
157.  #else /* NHSTDC */	/* a "traditional" C  compiler */
158.  
159.  # define NDECL(f)	f()
160.  # define FDECL(f,p)	f()
161.  # define VDECL(f,p)	f()
162.  
163.  # if defined(AMIGA) || defined(HPUX) || defined(POSIX_TYPES) || defined(__DECC)
164.  #  define genericptr	void *
165.  # endif
166.  # ifndef genericptr
167.  #  define genericptr	char *
168.  # endif
169.  
170.  /*
171.   * Traditional C compilers don't have "signed", "const", or "volatile".
172.   */
173.  # define signed
174.  # define const
175.  # define volatile
176.  
177.  #endif /* NHSTDC */
178.  
179.  
180.  #ifndef genericptr_t
181.  typedef genericptr genericptr_t;	/* (void *) or (char *) */
182.  #endif
183.  
184.  
185.  /*
186.   * According to ANSI, prototypes for old-style declarations must widen the
187.   * arguments to int.  However, the MSDOS compilers accept shorter arguments
188.   * (char, short, etc.) in prototypes and do typechecking with them.  Therefore
189.   * this mess to allow the better typechecking while also allowing some
190.   * prototypes for the ANSI compilers so people quit trying to fix the
191.   * prototypes to match the standard and thus lose the typechecking.
192.   */
193.  #if defined(MSDOS) && !defined(__TURBOC__) && !defined(__GO32__)
194.  #define UNWIDENED_PROTOTYPES
195.  #endif
196.  #if defined(AMIGA) && !defined(AZTEC_50)
197.  #define UNWIDENED_PROTOTYPES
198.  #endif
199.  #if defined(MAC) && !defined(THINK_C)
200.  #define UNWIDENED_PROTOTYPES
201.  #endif
202.  
203.  #if defined(ULTRIX_PROTO) && defined(ULTRIX_CC20)
204.  #define UNWIDENED_PROTOTYPES
205.  #endif
206.  #if defined(apollo)
207.  #define UNWIDENED_PROTOTYPES
208.  #endif
209.  
210.  #ifndef UNWIDENED_PROTOTYPES
211.  # if defined(NHSTDC) || defined(__TURBOC__) || defined(ULTRIX_PROTO) || defined(THINK_C)
212.  # define WIDENED_PROTOTYPES
213.  # endif
214.  #endif
215.  
216.  #if defined(sgi) && !defined(__GNUC__)
217.  /*
218.   * As of IRIX 4.0.1, /bin/cc claims to be an ANSI compiler, but it thinks
219.   * it's impossible for a prototype to match an old-style definition with
220.   * unwidened argument types.  Thus, we have to turn off all NetHack
221.   * prototypes, and avoid declaring several system functions, since the system
222.   * include files have prototypes and the compiler also complains that
223.   * prototyped and unprototyped declarations don't match.
224.   */
225.  # undef NDECL
226.  # undef FDECL
227.  # undef VDECL
228.  # define NDECL(f)	f()
229.  # define FDECL(f,p)	f()
230.  # define VDECL(f,p)	f()
231.  #endif
232.  
233.  
234.  #ifdef __HC__	/* MetaWare High-C defaults to unsigned chars */
235.  # undef signed
236.  #endif
237.  
238.  
239.  /*
240.   * Allow gcc2 to check parameters of printf-like calls with -Wformat;
241.   * append this to a prototype declaration (see pline() in extern.h).
242.   */
243.  #ifdef __GNUC__
244.  # if __GNUC__ >= 2
245.  #define PRINTF_F(f,v) __attribute__ ((format (printf, f, v)))
246.  # endif
247.  #endif
248.  #ifndef PRINTF_F
249.  #define PRINTF_F(f,v)
250.  #endif
251.  
252.  #endif /* TRADSTDC_H */