From boyer@jumpjibe.stanford.edu Fri Jun 9 03:51:40 1995 Received: from jumpjibe.stanford.edu (jumpjibe.Stanford.EDU [36.4.0.23]) by gluttony.isc.tamu.edu (8.6.11/8.6.11) with ESMTP id DAA18674 for ; Fri, 9 Jun 1995 03:51:38 -0500 Received: (from boyer@localhost) by jumpjibe.stanford.edu (8.6.10/8.6.10) id BAA13657; Fri, 9 Jun 1995 01:51:54 -0700 Message-Id: <199506090851.BAA13657@jumpjibe.stanford.edu> From: boyer@jumpjibe.stanford.edu (Brent Boyer) Date: Fri, 9 Jun 1995 01:51:54 PDT In-Reply-To: David Stewart "Re: Meschach setup question" (Jun 8, 19:07) X-Mailer: Mail User's Shell (7.2.0 10/31/90) To: David Stewart Subject: Re: Meschach setup question Cc: new@jumpjibe.stanford.edu, machine.h@jumpjibe.stanford.edu, file@jumpjibe.stanford.edu Content-Length: 9353 X-Lines: 364 Status: RO Dave, below is the new machine.h file. -brent /* ================================================================================ */ /* machine.h. Generated automatically by configure. */ /* Any machine specific stuff goes here */ /* Add details necessary for your own installation here! */ /* RCS id: $Id: machine.h.in,v 1.2 1994/03/13 23:07:30 des Exp $ */ /* This is for use with "configure" -- if you are not using configure then use machine.van for the "vanilla" version of machine.h */ /* Note special macros: ANSI_C (ANSI C syntax) SEGMENTED (segmented memory machine e.g. MS-DOS) MALLOCDECL (declared if malloc() etc have been declared) */ /* ================================================================================ */ /* #undef const */ /* leave this commented out -- THINK C has no keyword named "const" */ /* #undef MALLOCDECL */ /* leave this commented out -- THINK C doesn't supply */ #define NOT_SEGMENTED 1 /* this must #defined -- Mac's don't have segmented memory */ #undef HAVE_MEMORY_H /* make sure this is #undefined -- THINK C doesn't supply */ #undef HAVE_COMPLEX_H /* make sure this is #undefined -- THINK C doesn't supply */ #undef HAVE_MALLOC_H /* make sure this is #undefined -- THINK C doesn't supply */ #define STDC_HEADERS 1 /* this must be #defined -- it will cause precisely two effects below: 1) the macros MEM_COPY(...) & MEM_ZERO(...) will be correctly defined using memmove(...) & memset(...) 2) the macro ANSI_C will be #defined */ #undef HAVE_BCOPY /* make sure this is #undefined -- bcopy is for a BSD system? */ #undef HAVE_BZERO /* make sure this is #undefined -- bzero is for a BSD system? */ /* #undef CHAR0ISDBL0 1 */ /* for safety, this should be commented out (Dave Stewart's advice) */ #define WORDS_BIGENDIAN 1 /* 68K Macs use big endian microprocessors */ #undef U_INT_DEF /* make sure this is #undefined (Dave Stewart's advice) */ #define VARARGS 1 /* this must be #defined (Dave Stewart's advice) */ /* ================================================================================ */ /* for prototypes */ #define HAVE_PROTOTYPES 1 /* this must be #defined (Dave Stewart's advice) */ #define HAVE_PROTOTYPES_IN_STRUCT 1 /* this must be #defined (Dave Stewart's advice) */ /* for inclusion into C++ files */ #ifdef __cplusplus /* (Note: THINK C must #define this somewhere, since it is used in "ctype.h") */ #define ANSI_C 1 #ifndef HAVE_PROTOTYPES #define HAVE_PROTOTYPES 1 #endif #ifndef HAVE_PROTOTYPES_IN_STRUCT #define HAVE_PROTOTYPES_IN_STRUCT 1 #endif #endif /* __cplusplus */ /* example usage: VEC *PROTO(v_get,(int dim)); */ #ifdef HAVE_PROTOTYPES #define PROTO(name,args) name args #else #define PROTO(name,args) name() #endif /* HAVE_PROTOTYPES */ #ifdef HAVE_PROTOTYPES_IN_STRUCT /* PROTO_() is to be used instead of PROTO() in struct's and typedef's */ #define PROTO_(name,args) name args #else #define PROTO_(name,args) name() #endif /* HAVE_PROTOTYPES_IN_STRUCT */ /* ================================================================================ */ /* for basic or larger versions */ #define COMPLEX 1 /* this must be #defined (I want all the complex routines) */ #define SPARSE 1 /* this must be #defined (I want all the sparse routines) */ /* ================================================================================ */ /* for loop unrolling */ /* #undef VUNROLL */ /* #undef MUNROLL */ /* ================================================================================ */ /* for segmented memory */ #ifndef NOT_SEGMENTED #define SEGMENTED #endif /* ================================================================================ */ /* if the system has malloc.h */ #ifdef HAVE_MALLOC_H #define MALLOCDECL 1 #include #endif /* ================================================================================ */ /* any compiler should have this header */ /* if not, change it */ #include /* ================================================================================ */ /* Check for ANSI C memmove and memset */ #ifdef STDC_HEADERS /* standard copy & zero functions */ #define MEM_COPY(from,to,size) memmove((to),(from),(size)) #define MEM_ZERO(where,size) memset((where),'\0',(size)) #ifndef ANSI_C #define ANSI_C 1 #endif #endif /* ================================================================================ */ /* standard headers */ #ifdef ANSI_C #include #include #include #include #include /* #include so that the macro HUGE_VAL will be available to us */ #endif /* ================================================================================ */ /* if have bcopy & bzero and no alternatives yet known, use them */ #ifdef HAVE_BCOPY #ifndef MEM_COPY /* nonstandard copy function */ #define MEM_COPY(from,to,size) bcopy((char *)(from),(char *)(to),(int)(size)) #endif #endif #ifdef HAVE_BZERO #ifndef MEM_ZERO /* nonstandard zero function */ #define MEM_ZERO(where,size) bzero((char *)(where),(int)(size)) #endif #endif /* ================================================================================ */ /* if the system has complex.h */ #ifdef HAVE_COMPLEX_H #include #endif /* ================================================================================ */ /* If prototypes are available & ANSI_C not yet defined, then define it, but don't include any header files as the proper ANSI C headers aren't here */ #ifdef HAVE_PROTOTYPES #ifndef ANSI_C #define ANSI_C 1 #endif #endif /* ================================================================================ */ /* floating point precision */ /* you can choose single, double or long double (if available) precision */ #define FLOAT 1 #define DOUBLE 2 #define LONG_DOUBLE 3 /* #undef REAL_FLT */ /* #undef REAL_DBL */ /* leave these both commented out, so that the dafault of double is used */ /* choose double precision by default */ #ifndef REAL_DBL #ifndef REAL_FLT #define REAL_DBL 1 /* this is what we want: all reals to be of type double */ #endif #endif /* single precision */ #ifdef REAL_FLT #define Real float #define LongReal float #define REAL FLOAT #define LONGREAL FLOAT #endif /* double precision */ #ifdef REAL_DBL #define Real double #define LongReal double #define REAL DOUBLE #define LONGREAL DOUBLE #endif /* Note: under THINK C, the type "double" gets mapped to the type "long double" as long as you DO NOT turn on the "8-byte doubles" option. Recall: this project was compiled with the "8-byte doubles" option turned OFF (so double == long double) Also Recall: this project was compiled with the "Generate 68881 instructions" and "Native floating-point format" options turned ON; this means that double will be a 96 bit MC68881 floating point extended precision type; these options give the best speed. (See the THINK C 6.0 User's Guide, pp. 313-317) --Brent Boyer 6/7/95 */ /* ================================================================================ */ /* machine epsilon or unit roundoff error */ /* This is correct on most IEEE Real precision systems */ #ifdef DBL_EPSILON #if REAL == DOUBLE #define MACHEPS DBL_EPSILON #elif REAL == FLOAT #define MACHEPS FLT_EPSILON #elif REAL == LONGDOUBLE #define MACHEPS LDBL_EPSILON #endif #endif #define F_MACHEPS 1.19209e-07 #define D_MACHEPS 2.22045e-16 /* Note: the extended precision floating point type we are using actually has DBL_EPSILON = 1.08420E-19 (THINK C 6.0 User's Guide, p. 317); out of caution, I will let the above value for D_MACHEPS stay the same. --Brent Boyer 6/7/95 */ #ifndef MACHEPS #if REAL == DOUBLE #define MACHEPS D_MACHEPS #elif REAL == FLOAT #define MACHEPS F_MACHEPS #elif REAL == LONGDOUBLE #define MACHEPS D_MACHEPS #endif #endif /* #undef M_MACHEPS */ /******************** #ifdef DBL_EPSILON #define MACHEPS DBL_EPSILON #endif #ifdef M_MACHEPS #ifndef MACHEPS #define MACHEPS M_MACHEPS #endif #endif ********************/ /* ================================================================================ */ #define M_MAX_INT 2147483647 /* this value only works if ints are 32 bits */ /* Recall: this project was compiled with the "4-byte ints" option turned ON (so int == long int <==> 32 bits); if you do not turn this option on, then ints will be 16 bits so that you will need to do #define M_MAX_INT 32767 instead --Brent Boyer 6/7/95 */ #ifdef M_MAX_INT #ifndef MAX_RAND #define MAX_RAND ((double)(M_MAX_INT)) #endif #endif /* ================================================================================ */ /* for non-ANSI systems */ /* we #included above precisely so that HUGE_VAL will be #defined here */ #ifndef HUGE_VAL #define HUGE_VAL HUGE #else #ifndef HUGE #define HUGE HUGE_VAL /* actually, since HUGE is used in several Meschach routines, you need this line to be executed even on ANSI systems */ #endif #endif /* ================================================================================ */ #ifdef ANSI_C extern int isatty(int); #endif