/*
* fitscat_defs.h
*
* Internal definitions for the LDACTools FITS library.
*
*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
*
* This file part of: AstrOmatic FITS/LDAC library
*
* Copyright: (C) 1995-2010 Emmanuel Bertin -- IAP/CNRS/UPMC
*
* License: GNU General Public License
*
* AstrOmatic software is free software: you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
* AstrOmatic software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with AstrOmatic software.
* If not, see .
*
* Last modified: 09/10/2010
*
*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
/* Check if we are using a configure script here */
#ifndef HAVE_CONFIG_H
#define VERSION "2.0"
#define DATE "2003-x-x"
#define HAVE_SYS_MMAN_H 1
#endif
/*------------------------ what, who, when and where ------------------------*/
#define BANNER "LDACTools"
#define COPYRIGHT "Emmanuel BERTIN (bertin@iap.fr)"
#define INSTITUTE "IAP/Leiden"
/*----------------------------- External constants --------------------------*/
extern int bswapflag; /* != 0 if bytes are swapped/IEEE */
/*----------------------------- Internal constants --------------------------*/
#define OUTPUT stdout /* where all msgs are sent */
#define KBYTE 1024 /* 1 kbyte! */
#define MBYTE (1024*KBYTE) /* 1 Mbyte! */
#define GBYTE (1024*MBYTE) /* 1 Gbyte! */
#define DATA_BUFSIZE (4*MBYTE) /* data buffer size for I/O's */
#define BODY_DEFRAM (256*MBYTE) /* a fair number by 1999 standards */
#define BODY_DEFVRAM (1.9*GBYTE) /* a fair number by 1999 standards */
#define BODY_DEFSWAPDIR "/tmp" /* OK at least for Unix systems */
#define BIG 1e+30 /* a huge number */
#define TINY (1.0/BIG) /* a tiny number */
#ifndef PI
#define PI 3.14159265359 /* never met before? */
#endif
/* NOTES:
We must have: MAXCHARS >= 16
DATA_BUFSIZE >= 2 although DATA_BUFSIZE >= 100000
is better!!
*/
/*--------------------- in case of missing constants ------------------------*/
#ifndef SEEK_SET
#define SEEK_SET 0
#endif
#ifndef SEEK_CUR
#define SEEK_CUR 1
#endif
#ifndef EXIT_SUCCESS
#define EXIT_SUCCESS 0
#endif
#ifndef EXIT_FAILURE
#define EXIT_FAILURE -1
#endif
/*--------------------------------- typedefs --------------------------------*/
typedef unsigned char BYTE; /* a byte */
typedef int LONG; /* for DEC-Alpha... */
/*------------------------------- Other Macros -----------------------------*/
#if _LARGEFILE_SOURCE
#define FSEEKO fseeko
#define FTELLO ftello
#else
#define FSEEKO fseek
#define FTELLO ftell
#endif
#define QFREAD(ptr, size, file, fname) \
{if (fread(ptr, (size_t)(size), (size_t)1, file)!=1) \
error(EXIT_FAILURE, "*Error* while reading ", fname);;}
#define QFWRITE(ptr, size, file, fname) \
{if (fwrite(ptr, (size_t)(size), (size_t)1, file)!=1) \
error(EXIT_FAILURE, "*Error* while writing ", fname);;}
#define QFSEEK(file, offset, pos, fname) \
{if (FSEEKO(file, offset, pos)) \
error(EXIT_FAILURE,"*Error*: File positioning failed in ", \
fname);;}
#define QFTELL(file, pos, fname) \
{if ((pos=FTELLO(file))==-1) \
error(EXIT_FAILURE,"*Error*: File position unknown in ", \
fname);;}
#define QFREE(x) {free(x); x = NULL;}
#define QCALLOC(ptr, typ, nel) \
{if (!(ptr = (typ *)calloc((size_t)(nel),sizeof(typ)))) \
error(EXIT_FAILURE, "Not enough memory for ", \
#ptr " (" #nel " elements) !");;}
#define QMALLOC(ptr, typ, nel) \
{if (!(ptr = (typ *)malloc((size_t)(nel)*sizeof(typ)))) \
error(EXIT_FAILURE, "Not enough memory for ", \
#ptr " (" #nel " elements) !");;}
#define QMEMCPY(ptrin, ptrout, typ, nel) \
{if (!(ptrout = (typ *)malloc((size_t)(nel)*sizeof(typ)))) \
error(EXIT_FAILURE, "Not enough memory for ", \
#ptrout " (" #nel " elements) !"); \
memcpy(ptrout, ptrin, (size_t)(nel)*sizeof(typ));}
#define QREALLOC(ptr, typ, nel) \
{if (!(ptr = (typ *)realloc(ptr, (size_t)(nel)*sizeof(typ)))) \
error(EXIT_FAILURE, "Not enough memory for ", \
#ptr " (" #nel " elements) !");;}
#define RINT(x) (int)(floor(x+0.5))
#define QPRINTF if (qflag) fprintf
#define QFPRINTF(w,x) {if (qflag) \
fprintf(w, "\33[1M> %s\n\33[1A",x);;}
#define QGETKEY(tab, key, keyname, dest) \
{if (!(key = name_to_key(tab, keyname))) \
error(EXIT_FAILURE, "*Error*: No such parameter in catalog: ", \
keyname); \
dest = key->ptr;}
#define MIN(a,b) (a