/* * History: * pjt 31oct89 _trace_ added as defined() option, BUFALIGN 8. * rjs 21feb90 Added alternate way of defining FORT_TRUE and FALSE * to improve XMP and Cray-2 compatibility. This change * care of Brian Glendenning. * mjs ?? Increased BUFSIZE to avoid apparent OS problem on "ral". * rjs 8feb91 Convex definitions. * mjs 18mar91 More Convex definitions. * rjs 16apr91 Removed macros redefining memcpy as bcopy -- no longer * needed, and bcopy is slower on the Suns anyway. * rjs 24jun91 Added memcmp define for the convex. * rjs 18dec92 Added hpux. Various tidying. * mjs 19feb93 Added mips. * jm 07nov94 Added definition of Null and typedef of Void. The * Void typedef permits proper casting in both ANSI * and non-ANSI archs. Also added definition to permit * the use of const in non-ANSI declarations. * jm 17nov94 Changed the conditional definition around the typedef * of Void because Sun defines __STDC__ even when it is * zero! Defined PROTOTYPE as 1 if __STDC__ is set to 1; * otherwise it is undefined. Also added ARGS definition * to aide forward declartion prototyping. * rjs 20nov94 Added "alpha" ifdef. * rjs 19mar97 Add FORTRAN_LOGICAL define and check that miriad.h declarations * have not been done before doing them again. * pjt 14jun01 use WORDS_BIGENDIAN to figure out the pack routines * removed 'trace' clutter from the old multiflow * pjt 24jun01 PPC/powerpc is a BIGENDIAN (linux) machine * pjt 21jun02 MIR4 * pjt 4jan05 merged in the new ATNF HAS_STRERROR */ #if !defined(MIR_SYSDEP_H) #define MIR_SYSDEP_H #include #include #ifndef Null #define Null '\0' #endif /* * Void is typedef'd to the proper word depending on the level of * ANSI conformance. Also, if ANSI conforming, Const is defined * to const; otherwise, Const is defined as a NULL statement. * * PROTOTYPE is defined only if function prototypes are correctly * understood. * * ARGS defines a macro that aides in presenting prototypes. * Use it as (double parentheses required): * extern void keyput_c ARGS((const char *task, char *arg)); */ #ifndef MIRIAD_TYPES_DEFINED #define MIRIAD_TYPES_DEFINED 1 #ifdef __STDC__ #if (__STDC__ == 1) typedef void Void; #define Const const #define PROTOTYPE 1 #define ARGS(s) s #else typedef char Void; #define Const /* NULL */ #define ARGS(s) () #endif /* (__STDC__ == 1) */ #else typedef char Void; #define Const /* NULL */ #define ARGS(s) () #endif /* __STDC__ */ #endif /* MIRIAD_TYPES_DEFINED */ typedef int int2; typedef long long int int8; /************************************************************************/ /* */ /* UNICOS definitions */ /* */ /************************************************************************/ #ifdef unicos #include #define FORT_TRUE _btol(1) #define FORT_FALSE _btol(0) #define FORT_LOGICAL(a) (_ltob((&(a)))) #define BUFDBUFF 0 #define BUFALIGN 8 #define BUFSIZE 16384 #define defined_params #endif /************************************************************************/ /* */ /* UNIX definitions. */ /* */ /************************************************************************/ #ifndef defined_params #if defined(convex) || defined(alpha) || defined(__alpha) # define FORT_TRUE -1 #else # define FORT_TRUE 1 #endif #define FORT_FALSE 0 #define FORT_LOGICAL(a) ((a) != FORT_FALSE) #define BUFDBUFF 0 #define BUFALIGN 2 #define BUFSIZE 16384 /* Some machines have the "strerror" routine. Linux whinges significantly if you use the "old" way of doing effectively what strerror does. */ #if defined(linux) # define HAS_STRERROR #endif /* Short cut routines when no conversion is necessary. These are used for any IEEE floating point machine with FITS ordered bytes. WORDS_BIGENDIAN is also defined though the 'autoconf' package and should appear in config.h if it's used (sun's, linuxppc, etc.) two routines, pack16_c() and unpack16_c() are actually defined in pack.c */ #ifndef WORDS_BIGENDIAN # if defined (sun) || defined (convex) || defined (mips) || defined(sgi) || defined(hpux) # define WORDS_BIGENDIAN # endif # if defined(PPC) || defined(powerpc) # define WORDS_BIGENDIAN # endif #endif #ifdef WORDS_BIGENDIAN # define packr_c(a,b,c) memcpy((b),(char *)(a),sizeof(float)*(c)) # define unpackr_c(a,b,c) memcpy((char *)(b),(a),sizeof(float)*(c)) # define packd_c(a,b,c) memcpy((b),(char *)(a),sizeof(double)*(c)) # define unpackd_c(a,b,c) memcpy((char *)(b),(a),sizeof(double)*(c)) # define pack32_c(a,b,c) memcpy((b),(char *)(a),sizeof(int)*(c)) # define unpack32_c(a,b,c) memcpy((char *)(b),(a),sizeof(int)*(c)) void pack16_c(int *in, char *out, int n); void unpack16_c(char *in, int *out, int n); #else #if 1 void pack16_c(int *in, char *out, int n); void unpack16_c(char *in, int *out, int n); void pack32_c(int *in, char *out, int n); void unpack32_c(char *in, int *out, int n); void pack64_c(int8 *in, char *out, int n); void unpack64_c(char *in, int8 *out, int n); void packr_c(float *in, char *out, int n); void unpackr_c(char *in, float *out, int n); void packd_c(double *in, char *out, int n); void unpackd_c(char *in, double *out, int n); #endif #endif #endif #endif /* MIR_SYSDEP_H */