/* @(#)Copyright (c), 1987, 1995 StatSci, Inc.  All rights reserved. */

#ifndef _S_CDEFS_H_ /*(*/
#define _S_CDEFS_H_

#ifndef NOT_C_SOURCE
#include <sccs.h>
SCCS_ID_C(0011,@(#)cdefs.h 3.72 last edit 9/21/95 StatSci)
#endif

/* !!! If you add a new platform here, do it in $SHOME/bin/OPSYS.cpp too. */

/* This file defines only the most general Machine information */

/* ...and it should NOT include ANY system include files. */

/* $INC/local_os.h is created by $A/LOCALOS during $A/INITIALIZE run. */
/* If missing, do this
 *    % cd $A
 *    % Splus MAKE LOCALOS
 *    % chmod 755 LOCALOS
 *    % ./LOCALOS
 */
#include <local_os.h>

/* USE_BIG_FILE was previously defined only for SUN4, SUN5 and MSDOS, since */
/* bigfiles is the way we do it now, it is defined for all platforms. 12/20/93 */

#define USE_BIG_FILE

#if defined(sun) && defined(mc68020) /*(*/
#define SUN3
#define SUNOS
#define Berkeley
#define C_LEADING_UNDERSCORE
#define F77_LEADING_UNDERSCORE
#define F77_TRAILING_UNDERSCORE
#define USE_AOUT
#define IEEE 
#define DYN_LOAD
#define DYN_LOAD2
#define HAS_CLED
#define NEED_CLED_JCTL
#endif /*)*/

#if defined(SUNOS4) && defined(SPARC) /*(*/
#define SUNOS
#define OPENWIN
#define Berkeley
#define C_LEADING_UNDERSCORE
#define F77_LEADING_UNDERSCORE
#define F77_TRAILING_UNDERSCORE
#define USE_AOUT
#define DYN_LOAD
#define DYN_LOAD2
#define IEEE
#define HAS_CLED
#define NEED_CLED_JCTL
#endif /*)*/

#if defined(SUNOS5) && defined(SPARC) /*(*/
#define SUNOS
#define OPENWIN
#define ATT_UNIX
#define POSIX_AVAILABLE
/*
#define C_LEADING_UNDERSCORE
#define F77_LEADING_UNDERSCORE
*/
#define F77_TRAILING_UNDERSCORE

#ifdef ALTERNATE_COMPILERS
/* For the time being, "alternate" means use gcc/f2c.
 * This is mainly to get around having to worry about the single user
 * licenses we have on Sun compilers...so use F2C in this case. See Scott if
 * you want an explanation of this hack...
 */
#define USE_F2C
#define USE_GCC
#endif

#define DYN_LOAD
#define DYN_LOAD_SHARED
#define IEEE
#define HAS_CLED
#define NEED_CLED_JCTL
#endif /*)*/

#if defined(sun) && defined(i386) /*(*/
#define SUN386I
#define SUNOS
#define Berkeley
#define F77_TRAILING_UNDERSCORE
#define IEEE
#define DYN_LOAD
#endif /*)*/

#if defined(SUNOS) && !defined(SUNOS3)
/* SAB 10/08/91 This should be defined, but we released 3.0 on SUNOS4_SPARC 
 *              before code using this was created. 
 *              Don't screw up existing released code by using this.  
 */
/* #define POSIX_AVAILABLE */
#endif

#if defined(vax) /*(*/
#define VAX
#define ULTRIX
#define Berkeley
#define DYN_LOAD
#define USE_AOUT
#define C_LEADING_UNDERSCORE
#define F77_LEADING_UNDERSCORE
#define F77_TRAILING_UNDERSCORE
#endif /*)*/

#if defined(mips) && defined(ultrix) /*(*/
#define DECSTATION
#define ULTRIX
#define Berkeley
#define F77_TRAILING_UNDERSCORE
#define COFF
#define DYN_LOAD
#define DYN_LOAD2
#define IEEE 
#define HAS_CLED
#endif /*)*/

#if defined(__alpha) && defined(__osf__) /*(*/
#define OSF1_DECALPHA
#define OSF1
#define Berkeley
#define F77_TRAILING_UNDERSCORE
#define POSIX_AVAILABLE
#define HAS_64BIT_LONG 
#define COFF
#define DYN_LOAD_SHARED
#define IEEE 
#define HAS_CLED
#define NEED_CLED_JCTL
#define DO_NOT_INLINE_IS_NA
#endif /*)*/

#if defined(mips) && defined(sgi) /*(*/
#define IRIS4D
#define ATT_UNIX
#define F77_TRAILING_UNDERSCORE
#define IEEE
#define POSIX_AVAILABLE
#define HAS_CLED
/* This is needed for IRIX 4.0.1 and greater, so go ahead and build it. */
#define NEED_CLED_JCTL
/* dyn.load[2] was in Splus 3.1 for Irix 4.x, but not in Splus 3.3 for 5.x */
/* dyn.load.shared introduced in 3.3 for 5.x */
#define DYN_LOAD_SHARED
#endif /*)*/

#if defined(hp9000s300) /*(*/
#define HP300
#define HPUX
#define ATT_UNIX
#define C_LEADING_UNDERSCORE
#define F77_LEADING_UNDERSCORE
#define IEEE 
#define POSIX_AVAILABLE
#define DYN_LOAD
#define HAS_CLED
#define NEED_CLED_JCTL
#endif /*)*/

#if defined(hp9000s700) /*(*/
/* Currently, hp9000s700 is defined in $INC/local_os.h because HP's cpp
 * doesn't define it. HP's cpp defines hp9000s800 for both s700 and s800 (the
 * s700 uses the newer version(1.1) of the HP-PA RISC chip.
 */
#define HP700
#define HPPA
#else  /*)(*/
#if defined(hp9000s800) /*(*/
#define HP800
#define HPPA
#endif /*)*/
#endif /*)*/

#if defined(HPPA) /*(*/
#define HPUX
#define ATT_UNIX
#define IEEE 
#define POSIX_AVAILABLE
#ifndef HP700
#define NOEXTRAS
#endif
#define HAS_CLED
#define NEED_CLED_JCTL
#define DYN_LOAD2
#endif /*)*/

#if defined(u3b2) /*(*/
#define U3B2
#define ATT_UNIX
#define F77_TRAILING_UNDERSCORE
#define IEEE
#define DYN_LOAD
#endif /*)*/

#if defined(apollo)  /*(*/
#define APOLLO
#define Berkeley
#define F77_TRAILING_UNDERSCORE
#define DYN_LOAD
#define IEEE
#define HAS_CLED
#define COFF
#endif /*)*/

#if defined(convex) /*(*/
#define CONVEX
#define Berkeley
#define C_LEADING_UNDERSCORE
#define F77_LEADING_UNDERSCORE
#define F77_TRAILING_UNDERSCORE
#define USE_AOUT
#define DYN_LOAD
#define COFF
#endif /*)*/

#if !defined(sun) && defined(unix) && defined(i386) /*(*/
#define UNIX386
#define ATT_UNIX
#define F77_TRAILING_UNDERSCORE
#define USE_F2C
#define IEEE
#define DYN_LOAD
#define COFF
#define USE_AOUT
#endif /*)*/

#if (defined(M_I86) || defined(M_I386) || defined(i386)) && !defined(unix) /*(*/
#ifndef DOS386
/* This is used in lines like "#if DOS386" in some places (help files at
   least), so define it as '1' instead of just defining it. */
#define DOS386 1
#endif
#if defined(__WINDOWS_386__) || defined(__NT__) /*(*/
#define WIN386 1
#endif /*)*/
#if defined(__NT__) /*(*/
#define WIN32 1
#endif /*)*/
#if !defined(MSDOS) /*(*/
#define MSDOS
#endif /*)*/
#if defined(WIN386) /*(*/
#define MSWIN
#endif /*)*/
#if defined(winnt) /*(*/
#define MSWINNT
#endif /*)*/
#if defined(__WATCOMC__) /*(*/
#define i386
#else /*)(*/
#if !(defined(msdos) || defined(winnt)) /*( ndpc386 || qcl*/
#define C_LEADING_UNDERSCORE
#define F77_LEADING_UNDERSCORE
#define F77_TRAILING_UNDERSCORE
#endif /*)*/
#endif /*)*/
#define IEEE
#define NO_ELAN_LICENSE
#define DYN_LOAD
#define DYN_LOAD_DLL
#endif /*)*/

#if defined(DOS386) /*(*/
#define FunctionsDir   "_Functio"
#define DatasetsDir    "_Dataset"
#define HelpDir        "_Help"
#define DataDir        "_Data"
#define AuditFile      "_Audit"
#else /*)(*/
#define FunctionsDir   ".Functions"
#define DatasetsDir    ".Datasets"
#define HelpDir        ".Help"
#define DataDir        ".Data"
#define AuditFile      ".Audit"
#endif /*)*/

#if defined(_IBMR2) && defined(_AIX) /*(*/
#define IBMRS6000
#define ATT_UNIX
#define USE_AOUT
#define IEEE
#define POSIX_AVAILABLE
#define HAS_CLED
#define DYN_LOAD
#define COFF
#define NEED_CLED_JCTL
#endif /*)*/

#if defined(NEXTM) /*(*/
#define Berkeley
#define C_LEADING_UNDERSCORE
#define F77_LEADING_UNDERSCORE
#define F77_TRAILING_UNDERSCORE
#define IEEE
#define HAS_CLED
#define DYN_LOAD
#define USE_F2C
#endif /*)*/

/* miscellaneous: */

#if defined(TRY_POSIX) && defined(POSIX_AVAILABLE)
/* This needs to get set before the system's #includes are done. So, a source
 * that claims to be POSIX conforming does this:
 *   #define TRY_POSIX
 *   #include <cdefs.h> (or <S.h> or whatever ends up including cdefs.h)
 * to get the _POSIX_SOURCE macro set before the system inc's.
 */
#define _POSIX_SOURCE
#endif

#if defined(NOT_C_SOURCE) /*(*/
#if defined(NEXTM) && !defined(NEXTM_CPP_FILE)
#define POUND \#
#else
#define POUND #
#endif
#if defined(NEXTM) && !defined(NEXTM_CPP_FILE)
#define DOLLAR_POUND $\#
#else
#define DOLLAR_POUND $#
#endif
#endif /*)*/

#if defined(DECSTATION) || defined(IRIS4D)
#define PCT_PCT(x)%x%
#else
#define PCT_PCT(x) %x%
#endif
/* use PCT_PCT in helpfiles for things like @(#) cdefs.h 3.72@(#), which SCCS would
   expand. */

#if defined(QPE) || defined(HELP_FILE) /*(*/
/* undef 'unix' and 'sun' so we can use these words in helpfiles and S language
   files. See $C/makehead for QPE and HELP_FILE. This stuff must come after 
   use is made of 'unix' and 'sun' above. */
#ifdef unix
#undef unix
#endif

#ifdef sun
#undef sun
#endif
#endif /*)*/

#endif /* !_S_CDEFS_H_ )*/
