]> granicus.if.org Git - nethack/commitdiff
header reorg (trunk only)
authornethack.rankin <nethack.rankin>
Thu, 29 Jun 2006 05:03:15 +0000 (05:03 +0000)
committernethack.rankin <nethack.rankin>
Thu, 29 Jun 2006 05:03:15 +0000 (05:03 +0000)
     Move the new VOID_ARGS and some other argument manipulation stuff
from global.h to tradstdc.h where it feels like a better fit.  Make the
definition of VOID_ARGS more general; it should work nearly everwhere
these days even if it is only needed for one configuration.  XXXconf.h
can redefine it as empty if necessary.

     For MONST_P and OBJ_P, I left "void*" as is but I'm pretty sure that
the lack of space in between the two components was never part of the
issue there.  (The Ultrix system I used to have access to is long gone.
It was chugging along on autopilot, effectively defenseless, at the time
a linux box on the same subnet got hacked.  It probably would have been
shut down for Y2K anyway if it had lasted til then.)

include/global.h
include/tradstdc.h

index f7a686d49ab4b06ee1033379ae295dd06043abf3..5a0d755a52c10977fdb29e960339b07b3c993c74 100644 (file)
@@ -1,4 +1,4 @@
-/*     SCCS Id: @(#)global.h   3.5     2003/12/13      */
+/*     SCCS Id: @(#)global.h   3.5     2006/06/28      */
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
@@ -84,60 +84,6 @@ typedef xchar        boolean;                /* 0 or 1 */
 #define Bitfield(x,n)  uchar x
 #endif
 
-#ifdef UNWIDENED_PROTOTYPES
-# define CHAR_P char
-# define SCHAR_P schar
-# define UCHAR_P uchar
-# define XCHAR_P xchar
-# define SHORT_P short
-#ifndef SKIP_BOOLEAN
-# define BOOLEAN_P boolean
-#endif
-# define ALIGNTYP_P aligntyp
-#else
-# ifdef WIDENED_PROTOTYPES
-#  define CHAR_P int
-#  define SCHAR_P int
-#  define UCHAR_P int
-#  define XCHAR_P int
-#  define SHORT_P int
-#  define BOOLEAN_P int
-#  define ALIGNTYP_P int
-# endif
-#endif
-#if defined(ULTRIX_PROTO) && !defined(__STDC__)
-/* The ultrix 2.0 and 2.1 compilers (on Ultrix 4.0 and 4.2 respectively) can't
- * handle "struct obj *" constructs in prototypes.  Their bugs are different,
- * but both seem to work if we put "void*" in the prototype instead.  This
- * gives us minimal prototype checking but avoids the compiler bugs.
- *
- * OBJ_P and MONST_P should _only_ be used for declaring function pointers.
- */
-#define OBJ_P void*
-#define MONST_P void*
-#else
-#define OBJ_P struct obj*
-#define MONST_P struct monst*
-#endif
-
-#if defined(WIN32) && defined(_MSC_VER)
-/* Microsoft Visual C 2005 (_MSC_VER > 1000) complains if a
- * function pointer prototype is
- *     int x(void);
- * via the NDECL macro, but the actual function assigned has a definition
- *     int x()
- *     {
- *     }
- * We can quiet this by changing the function definition like so
- *     int x(VOID_ARGS)
- *     {
- *     }
- */
-#define VOID_ARGS void
-#else
-#define VOID_ARGS
-#endif
-
 #define SIZE(x) (int)(sizeof(x) / sizeof(x[0]))
 
 
index 66d377d8c053a7203389cca4524c8a3d1c83b4dc..90decdb0da564c84e3bcd254307cbdf6ad168bb8 100644 (file)
@@ -1,4 +1,4 @@
-/*     SCCS Id: @(#)tradstdc.h 3.5     1993/05/30      */
+/*     SCCS Id: @(#)tradstdc.h 3.5     2006/06/28      */
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
 /* Ultrix seems to be in a constant state of flux.  This check attempts to
  * set up ansi compatibility if it wasn't set up correctly by the compiler.
  */
-#ifdef mips
-#define __mips mips
-#endif
-
-#ifdef LANGUAGE_C
-#define __LANGUAGE_C LANGUAGE_C
-#endif
-
+# ifdef mips
+#  define __mips mips
+# endif
+# ifdef LANGUAGE_C
+#  define __LANGUAGE_C LANGUAGE_C
+# endif
 #endif
 
 /*
 #  define VDECL(f,p)   f()
 # endif
 
+/*
+ * Used for definitions of functions which take no arguments to force
+ * an explicit match with the NDECL prototype.  Needed in some cases
+ * (MS Visual C 2005) for functions called through pointers.
+ */
+#define VOID_ARGS void
+
 /* generic pointer, always a macro; genericptr_t is usually a typedef */
 # define genericptr    void *
 
 # define FDECL(f,p)    f()
 # define VDECL(f,p)    f()
 
+#define VOID_ARGS /*empty*/
+
 # if defined(AMIGA) || defined(HPUX) || defined(POSIX_TYPES) || defined(__DECC) || defined(__BORLANDC__)
 #  define genericptr   void *
 # endif
@@ -226,6 +233,48 @@ typedef genericptr genericptr_t;   /* (void *) or (char *) */
 # endif
 #endif
 
+/* These are used for arguments within FDECL/VDECL prototype declarations.
+ */
+#ifdef UNWIDENED_PROTOTYPES
+# define CHAR_P char
+# define SCHAR_P schar
+# define UCHAR_P uchar
+# define XCHAR_P xchar
+# define SHORT_P short
+# ifndef SKIP_BOOLEAN
+#  define BOOLEAN_P boolean
+# endif
+# define ALIGNTYP_P aligntyp
+#else
+# ifdef WIDENED_PROTOTYPES
+#  define CHAR_P int
+#  define SCHAR_P int
+#  define UCHAR_P int
+#  define XCHAR_P int
+#  define SHORT_P int
+#  define BOOLEAN_P int
+#  define ALIGNTYP_P int
+# else
+   /* Neither widened nor unwidened prototypes.  Argument list expansion
+    * by FDECL/VDECL always empty; all xxx_P vanish so defs aren't needed. */
+# endif
+#endif
+
+/* OBJ_P and MONST_P should _only_ be used for declaring function pointers.
+ */
+#if defined(ULTRIX_PROTO) && !defined(__STDC__)
+/* The ultrix 2.0 and 2.1 compilers (on Ultrix 4.0 and 4.2 respectively) can't
+ * handle "struct obj *" constructs in prototypes.  Their bugs are different,
+ * but both seem to work if we put "void*" in the prototype instead.  This
+ * gives us minimal prototype checking but avoids the compiler bugs.
+ */
+# define OBJ_P void*
+# define MONST_P void*
+#else
+# define OBJ_P struct obj *
+# define MONST_P struct monst *
+#endif
+
 #if 0
 /* The problem below is still the case through 4.0.5F, but the suggested
  * compiler flags in the Makefiles suppress the nasty messages, so we don't
@@ -246,6 +295,8 @@ typedef genericptr genericptr_t;    /* (void *) or (char *) */
 # define NDECL(f)      f()
 # define FDECL(f,p)    f()
 # define VDECL(f,p)    f()
+# undef VOID_ARGS
+# define VOID_ARGS /*empty*/
 #endif
 #endif