This is tradstdc.h in view mode; [Download] [Up]
/* SCCS Id: @(#)tradstdc.h 3.0 89/07/12
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
#ifndef TRADSTDC_H
#define TRADSTDC_H
#ifdef DUMB
#undef void
#define void int
#endif
#ifdef APOLLO /* the Apollo C compiler claims to be __STDC__, but isn't */
#undef __STDC__
#endif
/*
* ANSI X3J11 detection.
* Makes substitutes for compatibility with the old C standard.
*/
/* Decide how to handle variable parameter lists:
* USE_STDARG means use the ANSI <stdarg.h> facilities (only ANSI compilers
* should do this, and only if the library supports it).
* USE_VARARGS means use the <varargs.h> facilities. Again, this should only
* be done if the library supports it. ANSI is *not* required for this.
* Otherwise, the kludgy old methods are used.
* The defaults are USE_STDARG for ANSI compilers, and USE_OLDARGS for
* others.
*/
/* #define USE_VARARGS /* use <varargs.h> instead of <stdarg.h> */
/* #define USE_OLDARGS /* don't use any variable argument facilites */
#if defined(__STDC__) || defined(VMS)
# if !(defined(AMIGA) && defined(AZTEC_C) || defined(USE_VARARGS) || defined(USE_OLDARGS))
# define USE_STDARG
# endif
#endif
#ifdef NEED_VARARGS /* only define these if necessary */
#ifdef USE_STDARG
# include <stdarg.h>
# define VA_DECL(typ1,var1) (typ1 var1, ...) { va_list the_args;
# define VA_DECL2(typ1,var1,typ2,var2) \
(typ1 var1, typ2 var2, ...) { va_list the_args;
# define VA_INIT(var1,typ1)
# define VA_NEXT(var1,typ1) var1 = va_arg(the_args, typ1)
# define VA_ARGS the_args
# define VA_START(x) va_start(the_args, x)
# define VA_END() va_end(the_args)
#else
# ifdef USE_VARARGS
# include <varargs.h>
# define VA_DECL(typ1,var1) (va_alist) va_dcl {\
va_list the_args; typ1 var1;
# define VA_DECL2(typ1,var1,typ2,var2) (va_alist) va_dcl {\
va_list the_args; typ1 var1; typ2 var2;
# define VA_ARGS the_args
# define VA_START(x) va_start(the_args)
# define VA_INIT(var1,typ1) var1 = va_arg(the_args, typ1)
# define VA_NEXT(var1,typ1) var1 = va_arg(the_args,typ1)
# define VA_END() va_end(the_args)
# else
# define VA_ARGS arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9
# define VA_DECL(typ1,var1) (var1,VA_ARGS) typ1 var1; \
char *arg1,*arg2,*arg3,*arg4,*arg5,*arg6,*arg7,*arg8,*arg9; {
# define VA_DECL2(typ1,var1,typ2,var2) (var1,var2,VA_ARGS) \
typ1 var1; typ2 var2;\
char *arg1,*arg2,*arg3,*arg4,*arg5,*arg6,*arg7,*arg8,*arg9; {
# define VA_START(x)
# define VA_INIT(var1,typ1)
# define VA_END()
# endif
#endif
#endif /* NEED_VARARGS */
#if defined(__STDC__) || defined(MSDOS) || defined(THINKC4)
/* Used for robust ANSI parameter forward declarations:
* int VDECL(sprintf, (char *, const char *, ...));
*
* NDECL() is used for functions with zero arguments;
* FDECL() is used for functions with a fixed number of arguments;
* VDECL() is used for functions with a variable number of arguments.
* Separate macros are needed because ANSI will mix old-style declarations
* with prototypes, except in the case of varargs, and the OVERLAY-specific
* trampoli.* mechanism conflicts with the ANSI <<f(void)>> syntax.
*/
# define NDECL(f) f(void) /* Must be overridden if OVERLAY set later */
# define FDECL(f,p) f p
# if defined(MSDOS) || defined(USE_STDARG)
# define VDECL(f,p) f p
# else
# define VDECL(f,p) f()
# endif
# ifdef __TURBOC__ /* Cover for stupid Turbo C */
# define genericptr_t void *
# else
typedef void * genericptr_t;
# ifndef __STDC__
# define const
# define signed
# define volatile
# endif
# endif
#else /* __STDC__ */ /* a "traditional" C compiler */
# define NDECL(f) f()
# define FDECL(f,p) f()
# define VDECL(f,p) f()
# ifndef genericptr_t
# if defined(AMIGA) || defined(HPUX)
typedef void * genericptr_t;
# else
typedef char * genericptr_t;
# endif
# endif
# define const
# define signed
# define volatile
#endif /* __STDC__ */
#ifdef __HC__ /* MetaWare High-C defaults to unsigned chars */
# undef signed
#endif
#endif /* TRADSTDC_H /**/
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.