#define Nullfp Null(FILE*)
#define Nullsv Null(SV*)
-/* bool is built-in for g++-2.6.3, which might be used for an extension. */
-#if !defined(HAS_BOOL) && !defined(_G_HAVE_BOOL)
-#ifdef UTS
-#define bool int
-#else
-#define bool char
-#endif
-#endif /* !defined(HAS_BOOL) && !defined(_G_HAVE_BOOL) */
-
#ifdef TRUE
#undef TRUE
#endif
#define TRUE (1)
#define FALSE (0)
+/* bool is built-in for g++-2.6.3, which might be used for an extension.
+ If the extension includes <_G_config.h> before this file then
+ _G_HAVE_BOOL will be properly set. If, however, the extension includes
+ this file first, then you will have to manually set -DHAS_BOOL in
+ your command line to avoid a conflict.
+*/
+#ifdef _G_HAVE_BOOL
+# if _G_HAVE_BOOL
+# ifndef HAS_BOOL
+# define HAS_BOOL 1
+# endif
+# endif
+#endif
+
+/* The NeXT dynamic loader headers will not build with the bool macro
+ So declare them now to clear confusion.
+*/
+#ifdef NeXT
+# undef FALSE
+# undef TRUE
+ typedef enum bool { FALSE = 0, TRUE = 1 } bool;
+# define ENUM_BOOL 1
+# ifndef HAS_BOOL
+# define HAS_BOOL 1
+# endif /* !HAS_BOOL */
+#endif /* NeXT */
+
+#ifndef HAS_BOOL
+# ifdef UTS
+# define bool int
+# else
+# define bool char
+# endif
+#endif
+
typedef char I8;
typedef unsigned char U8;
char *safemalloc _((MEM_SIZE));
char *saferealloc _((char *, MEM_SIZE));
void safefree _((char *));
+char *safecalloc _((MEM_SIZE, MEM_SIZE));
#endif
#ifndef MSDOS
#define New(x,v,n,t) (v = (t*)safemalloc((MEM_SIZE)((n) * sizeof(t))))
char *safexmalloc();
char *safexrealloc();
void safexfree();
+char *safexcalloc();
#define New(x,v,n,t) (v = (t*)safexmalloc(x,(MEM_SIZE)((n) * sizeof(t))))
#define Newc(x,v,n,t,c) (v = (c*)safexmalloc(x,(MEM_SIZE)((n) * sizeof(t))))
#define Newz(x,v,n,t) (v = (t*)safexmalloc(x,(MEM_SIZE)((n) * sizeof(t)))), \