/* 
This include file contains definitions used throughout TES software.
*/

#ifndef STDINC_H
#define STDINC_H
static char sccsid_stdinc_h[] = "@(#)stdinc.h 1.21  10/4/94";

#ifdef vax
# include <descrip.h>
# include <iodef.h>
# include <ssdef.h>
# include <psldef.h>

#else
# include <values.h>
#endif

#include <math.h>

typedef char BOOLEAN;

#define FALSE 0
#define TRUE ~(FALSE)


#define OPTIONAL 0
#define MANDATORY 1

#define SECS_PER_ICK 2
#define RADS_PER_DEG (M_PI / 180.)


/* **********
#ifdef sun
#  define MAXDOUBLE	1.79769313486231470e+308
#  define MINDOUBLE	4.94065645841246544e-324
*********** */

#ifdef vax
#  define MAXDOUBLE	1.701411834604692293e+38
#  define MINDOUBLE	(0.01 * 2.938735877055718770e-37)
#  define MAXLONG 2147483646
#  define MAXSHORT 65535
#  define BITSPERBYTE 8
#endif

#define MAXBYTE ((2 << (BITSPERBYTE - 1)) - 1) 
#define MINBYTE (0)


#define BITS_PER_INT (8 * sizeof(int))
/* Maximum length of file path name */
#ifndef MAXNAMELEN
#define MAXNAMELEN 255
#endif

#define CLEAR_BIT 0
#define SET_BIT 1
#define CHECK_BIT 2

/* This file specification structure includes a version number */
struct FileSpec
{
  char directory[MAXNAMELEN];
  char basename[MAXNAMELEN];
  char extens[MAXNAMELEN];
  int version;
  int explicit_vers;        /* version explicitly specified */
};
#ifdef vax
# define NORM_EXIT 1
# define ERROR_EXIT SS$_ABORT
# define DIR_DELIM ']' /* Directory delimiters (terminator, actually) */
# define STDIN_FILENAME "SYS$INPUT"
# define OK_STATUS SS$_NORMAL
# define EOF_STATUS SS$_ENDOFFILE
#else
# define NORM_EXIT 0
# define ERROR_EXIT 1
# define DIR_DELIM '/' /* Directory delimiters (terminator, actually) */
# define STDIN_FILENAME "/dev/tty"
# define OK_STATUS 0
# define EOF_STATUS -1
#endif

/* File version number delimiter, size, sprintf format */
#define VERS_DELIM '_'
#define N_VERS_DIGITS 5
#define DIGIT_STRING "_%05d"

#define BELL '\007'

#define UPLINK_EXT ".upl"       /* extension for uplink command file */
#define DELTA_EXT ".delta"      /* extension for delta file */
#define CMD_EXT ".cmd"          /* extension for cmd file */
#define ABS_EXT ".abs"       /* extension for Intel absolute object file */
#define TASK_EXT ".tsk"      /* extension for mem upload "task file" */
#define IMG_EXTENS "img"        /* extension for image file (not incl. ".") */
#define PLAN_EXTENS "mpl"


#define LOWBYTE(short_int)   (short_int & 0x00FF)
#define HIGHBYTE(short_int)   (short_int >> 8)

# define LSW(long_int) (long_int & 0x0000FFFF)
# define MSW(long_int) (long_int >> 16) & 0x0000FFFF

/* The following provides symbolic names for STORAGE_FORMAT values as defined
in sbrc's gendef.h */
#define LOBYTE_HIBYTE 1
#define HIBYTE_LOBYTE 2

#ifdef vax
# define STDIN "SYS$INPUT"
#else
# define STDIN "/dev/tty"
#endif

#ifndef MIN
#define MIN(A,B) ((A) < (B) ? (A) : (B))
#endif

#ifndef MAX
#define MAX(A,B) ( ((A) > (B)) ? (A) : (B))
#endif

/* Boolean flags for execprog() function */
#define NO_WAIT 0
#define WAIT 1

/* Environment variable names */
#define CNTRL_TBLS_PATH "CNTRL_TBLS"

#define LOCKNAME_PREFIX "l."

/*
In the following enum, we make sure that DECIMAL has value "TRUE", so that
is_integer() function is backwards compatible when checking for DECIMAL
numbers.
*/
enum
{
  DECIMAL=TRUE, OCTAL, HEXADECIMAL
};


#define DECIMAL 10
#define OCTAL 8
#define HEXADECIMAL 16

/* Define type for internal keys in MOS database */
typedef long INT_KEY;

#endif
