cfitsio (4.3.1)

(root)/
include/
fitsio2.h
       1  #ifndef _FITSIO2_H
       2  #define _FITSIO2_H
       3   
       4  #include "fitsio.h"
       5  
       6  /* 
       7      Threading support using POSIX threads programming interface
       8      (supplied by Bruce O'Neel) 
       9  
      10      All threaded programs MUST have the 
      11  
      12      -D_REENTRANT
      13  
      14      on the compile line and must link with -lpthread.  This means that
      15      when one builds cfitsio for threads you must have -D_REENTRANT on the
      16      gcc or cc command line.
      17  */
      18  
      19  #ifdef _REENTRANT
      20  #include <pthread.h>
      21  /*  #include <assert.h>  not needed any more */
      22  extern pthread_mutex_t Fitsio_Lock;
      23  extern int Fitsio_Pthread_Status;
      24  
      25  #define FFLOCK1(lockname)   (Fitsio_Pthread_Status = pthread_mutex_lock(&lockname))
      26  #define FFUNLOCK1(lockname) (Fitsio_Pthread_Status = pthread_mutex_unlock(&lockname))
      27  #define FFLOCK   FFLOCK1(Fitsio_Lock)
      28  #define FFUNLOCK FFUNLOCK1(Fitsio_Lock)
      29  #define ffstrtok(str, tok, save) strtok_r(str, tok, save)
      30  
      31  #else
      32  #define FFLOCK
      33  #define FFUNLOCK
      34  #define ffstrtok(str, tok, save) strtok(str, tok)
      35  #endif
      36  
      37  /*
      38    If REPLACE_LINKS is defined, then whenever CFITSIO fails to open
      39    a file with write access because it is a soft link to a file that
      40    only has read access, then CFITSIO will attempt to replace
      41    the link with a local copy of the file, with write access.  This
      42    feature was originally added to support the ftools in the Hera
      43    environment, where many of the user's data file are soft links.
      44  */
      45  #if defined(BUILD_HERA)
      46  #define REPLACE_LINKS 1
      47  #endif
      48  
      49  #define USE_LARGE_VALUE -99  /* flag used when writing images */
      50  
      51  #define DBUFFSIZE 28800 /* size of data buffer in bytes */
      52  
      53  #define NMAXFILES  10000   /* maximum number of FITS files that can be opened */
      54          /* CFITSIO will allocate (NMAXFILES * 80) bytes of memory */
      55  	/* plus each file that is opened will use NIOBUF * 2880 bytes of memeory */
      56  	/* where NIOBUF is defined in fitio.h and has a default value of 40 */
      57  
      58  #define MINDIRECT 8640   /* minimum size for direct reads and writes */
      59                           /* MINDIRECT must have a value >= 8640 */
      60  
      61  /*   it is useful to identify certain specific types of machines   */
      62  #define NATIVE             0 /* machine that uses non-byteswapped IEEE formats */
      63  #define OTHERTYPE          1  /* any other type of machine */
      64  #define VAXVMS             3  /* uses an odd floating point format */
      65  #define ALPHAVMS           4  /* uses an odd floating point format */
      66  #define IBMPC              5  /* used in drvrfile.c to work around a bug on PCs */
      67  #define CRAY               6  /* requires a special NaN test algorithm */
      68  
      69  #define GFLOAT             1  /* used for VMS */
      70  #define IEEEFLOAT          2  /* used for VMS */
      71  
      72  /* ======================================================================= */
      73  /* The following logic is used to determine the type machine,              */
      74  /*  whether the bytes are swapped, and the number of bits in a long value  */
      75  /* ======================================================================= */
      76  
      77  /*   The following platforms have sizeof(long) == 8               */
      78  /*   This block of code should match a similar block in fitsio.h  */
      79  /*   and the block of code at the beginning of f77_wrap.h         */
      80  
      81  #if defined(__alpha) && ( defined(__unix__) || defined(__NetBSD__) )
      82                                    /* old Dec Alpha platforms running OSF */
      83  #define BYTESWAPPED TRUE
      84  #define LONGSIZE 64
      85  
      86  #elif defined(__sparcv9) || (defined(__sparc__) && defined(__arch64__))
      87                                 /*  SUN Solaris7 in 64-bit mode */
      88  #define BYTESWAPPED FALSE
      89  #define MACHINE NATIVE
      90  #define LONGSIZE 64   
      91  
      92                              /* IBM System z mainframe support */ 
      93  #elif defined(__s390x__)
      94  #define BYTESWAPPED FALSE
      95  #define LONGSIZE 64
      96  
      97  #elif defined(__s390__)
      98  #define BYTESWAPPED FALSE
      99  #define LONGSIZE 32
     100  
     101  #elif defined(__ia64__)  || defined(__x86_64__) || defined(__AARCH64EL__)
     102                    /*  Intel itanium 64-bit PC, or AMD opteron 64-bit PC */
     103  #define BYTESWAPPED TRUE
     104  #define LONGSIZE 64   
     105  
     106  #elif defined(_SX)             /* Nec SuperUx */
     107  
     108  #define BYTESWAPPED FALSE
     109  #define MACHINE NATIVE
     110  #define LONGSIZE 64
     111  
     112  #elif defined(__powerpc64__) || defined(__64BIT__) || defined(__AARCH64EB__)  /* IBM 64-bit AIX powerpc*/
     113                                /* could also test for __ppc64__ or __PPC64 */
     114  
     115  #  if defined(__LITTLE_ENDIAN__)
     116  #   define BYTESWAPPED TRUE
     117  #  else
     118  #   define BYTESWAPPED FALSE
     119  #   define MACHINE NATIVE
     120  #  endif
     121  #  define LONGSIZE 64
     122  
     123  #elif defined(_MIPS_SZLONG)
     124  
     125  #  if defined(MIPSEL)
     126  #    define BYTESWAPPED TRUE
     127  #  else
     128  #    define BYTESWAPPED FALSE
     129  #    define MACHINE NATIVE
     130  #  endif
     131  
     132  #  if _MIPS_SZLONG == 32
     133  #    define LONGSIZE 32
     134  #  elif _MIPS_SZLONG == 64
     135  #    define LONGSIZE 64
     136  #  else
     137  #    error "can't handle long size given by _MIPS_SZLONG"
     138  #  endif
     139  
     140  #elif defined(__riscv)
     141  
     142  /* RISC-V is always little endian */
     143  
     144  #define BYTESWAPPED TRUE
     145  
     146  #  if __riscv_xlen == 32
     147  #    define LONGSIZE 32
     148  #  elif __riscv_xlen == 64
     149  #    define LONGSIZE 64
     150  #  else
     151  #    error "can't handle long size given by __riscv_xlen"
     152  #  endif
     153  
     154  /* ============================================================== */
     155  /*  the following are all 32-bit byteswapped platforms            */
     156  
     157  #elif defined(vax) && defined(VMS)
     158   
     159  #define MACHINE VAXVMS
     160  #define BYTESWAPPED TRUE
     161   
     162  #elif defined(__alpha) && defined(__VMS)
     163  
     164  #if (__D_FLOAT == TRUE)
     165  
     166  /* this float option is the same as for VAX/VMS machines. */
     167  #define MACHINE VAXVMS
     168  #define BYTESWAPPED TRUE
     169   
     170  #elif  (__G_FLOAT == TRUE)
     171   
     172  /*  G_FLOAT is the default for ALPHA VMS systems */
     173  #define MACHINE ALPHAVMS
     174  #define BYTESWAPPED TRUE
     175  #define FLOATTYPE GFLOAT
     176   
     177  #elif  (__IEEE_FLOAT == TRUE)
     178   
     179  #define MACHINE ALPHAVMS
     180  #define BYTESWAPPED TRUE
     181  #define FLOATTYPE IEEEFLOAT
     182  
     183  #endif  /* end of alpha VMS case */
     184  
     185  #elif defined(ultrix) && defined(unix)
     186   /* old Dec ultrix machines */
     187  #define BYTESWAPPED TRUE
     188   
     189  #elif defined(__i386) || defined(__i386__) || defined(__i486__) || defined(__i586__) \
     190    || defined(_MSC_VER) || defined(__BORLANDC__) || defined(__TURBOC__) \
     191    || defined(_NI_mswin_) || defined(__EMX__)
     192  
     193  /*  generic 32-bit IBM PC */
     194  #define MACHINE IBMPC
     195  #define BYTESWAPPED TRUE
     196  
     197  #elif defined(__arm__)
     198  
     199  /* This assumes all ARM are little endian.  In the future, it might be  */
     200  /* necessary to use  "if defined(__ARMEL__)"  to distinguish little from big. */
     201  /* (__ARMEL__ would be defined on little-endian, but not on big-endian). */
     202  
     203  #define BYTESWAPPED TRUE
     204   
     205  #elif defined(__tile__)
     206  
     207  /*  64-core 8x8-architecture Tile64 platform */
     208  
     209  #define BYTESWAPPED TRUE
     210  
     211  #elif defined(__sh__)
     212  
     213  /* SuperH CPU can be used in both little and big endian modes */
     214  
     215  #if defined(__LITTLE_ENDIAN__)
     216  #define BYTESWAPPED TRUE
     217  #else
     218  #define BYTESWAPPED FALSE
     219  #endif
     220  
     221  #else
     222  
     223  /*  assume all other machine uses the same IEEE formats as used in FITS files */
     224  /*  e.g., Macs fall into this category  */
     225  
     226  #define MACHINE NATIVE
     227  #define BYTESWAPPED FALSE
     228   
     229  #endif
     230  
     231  #ifndef MACHINE
     232  #define MACHINE  OTHERTYPE
     233  #endif
     234  
     235  /*  assume longs are 4 bytes long, unless previously set otherwise */
     236  #ifndef LONGSIZE
     237  #define LONGSIZE 32
     238  #endif
     239  
     240  /*       end of block that determine long size and byte swapping        */ 
     241  /* ==================================================================== */
     242   
     243  #define IGNORE_EOF 1
     244  #define REPORT_EOF 0
     245  #define DATA_UNDEFINED -1
     246  #define NULL_UNDEFINED 1234554321
     247  #define ASCII_NULL_UNDEFINED 1   /* indicate no defined null value */
     248   
     249  #define maxvalue(A,B) ((A) > (B) ? (A) : (B))
     250  #define minvalue(A,B) ((A) < (B) ? (A) : (B))
     251  
     252  /* faster string comparison macros */
     253  #define FSTRCMP(a,b)     ((a)[0]<(b)[0]? -1:(a)[0]>(b)[0]?1:strcmp((a),(b)))
     254  #define FSTRNCMP(a,b,n)  ((a)[0]<(b)[0]?-1:(a)[0]>(b)[0]?1:strncmp((a),(b),(n)))
     255  
     256  #if defined(__VMS) || defined(VMS)
     257   
     258  #define FNANMASK   0xFFFF /* mask all bits  */
     259  #define DNANMASK   0xFFFF /* mask all bits  */
     260   
     261  #else
     262   
     263  #define FNANMASK   0x7F80 /* mask bits 1 - 8; all set on NaNs */
     264                                       /* all 0 on underflow  or 0. */
     265   
     266  #define DNANMASK   0x7FF0 /* mask bits 1 - 11; all set on NaNs */
     267                                       /* all 0 on underflow  or 0. */
     268   
     269  #endif
     270   
     271  #if MACHINE == CRAY
     272      /*
     273        Cray machines:   the large negative integer corresponds
     274        to the 3 most sig digits set to 1.   If these
     275        3 bits are set in a floating point number (64 bits), then it represents
     276        a reserved value (i.e., a NaN)
     277      */
     278  #define fnan(L) ( (L) >= 0xE000000000000000 ? 1 : 0) )
     279   
     280  #else
     281      /* these functions work for both big and little endian machines */
     282      /* that use the IEEE floating point format for internal numbers */
     283   
     284     /* These functions tests whether the float value is a reserved IEEE     */
     285     /* value such as a Not-a-Number (NaN), or underflow, overflow, or       */
     286     /* infinity.   The functions returns 1 if the value is a NaN, overflow  */
     287     /* or infinity; it returns 2 if the value is an denormalized underflow  */
     288     /* value; otherwise it returns 0. fnan tests floats, dnan tests doubles */
     289   
     290  #define fnan(L) \
     291        ( (L & FNANMASK) == FNANMASK ?  1 : (L & FNANMASK) == 0 ? 2 : 0)
     292   
     293  #define dnan(L) \
     294        ( (L & DNANMASK) == DNANMASK ?  1 : (L & DNANMASK) == 0 ? 2 : 0)
     295   
     296  #endif
     297  
     298  #define DSCHAR_MAX  127.49 /* max double value that fits in an signed char */
     299  #define DSCHAR_MIN -128.49 /* min double value that fits in an signed char */
     300  #define DUCHAR_MAX  255.49 /* max double value that fits in an unsigned char */
     301  #define DUCHAR_MIN -0.49   /* min double value that fits in an unsigned char */
     302  #define DUSHRT_MAX  65535.49 /* max double value that fits in a unsigned short*/
     303  #define DUSHRT_MIN -0.49   /* min double value that fits in an unsigned short */
     304  #define DSHRT_MAX  32767.49 /* max double value that fits in a short */
     305  #define DSHRT_MIN -32768.49 /* min double value that fits in a short */
     306  
     307  #if LONGSIZE == 32
     308  #  define DLONG_MAX  2147483647.49 /* max double value that fits in a long */
     309  #  define DLONG_MIN -2147483648.49 /* min double value that fits in a long */
     310  #  define DULONG_MAX 4294967295.49 /* max double that fits in a unsigned long */
     311  #else
     312  #  define DLONG_MAX   9.2233720368547752E18 /* max double value  long */
     313  #  define DLONG_MIN  -9.2233720368547752E18 /* min double value  long */
     314  #  define DULONG_MAX 1.84467440737095504E19 /* max double value  ulong */
     315  #endif
     316  
     317  #define DULONG_MIN -0.49   /* min double value that fits in an unsigned long */
     318  #define DULONGLONG_MAX 18446744073709551615. /* max unsigned  longlong */
     319  #define DULONGLONG_MIN -0.49
     320  #define DLONGLONG_MAX  9.2233720368547755807E18 /* max double value  longlong */
     321  #define DLONGLONG_MIN -9.2233720368547755808E18 /* min double value  longlong */
     322  #define DUINT_MAX 4294967295.49 /* max dbl that fits in a unsigned 4-byte int */
     323  #define DUINT_MIN -0.49   /* min dbl that fits in an unsigned 4-byte int */
     324  #define DINT_MAX  2147483647.49 /* max double value that fits in a 4-byte int */
     325  #define DINT_MIN -2147483648.49 /* min double value that fits in a 4-byte int */
     326  
     327  #ifndef UINT64_MAX
     328  #define UINT64_MAX 18446744073709551615U /* max unsigned 64-bit integer */
     329  #endif
     330  #ifndef UINT32_MAX
     331  #define UINT32_MAX 4294967295U /* max unsigned 32-bit integer */
     332  #endif
     333  #ifndef INT32_MAX
     334  #define INT32_MAX  2147483647 /* max 32-bit integer */
     335  #endif
     336  #ifndef INT32_MIN
     337  #define INT32_MIN (-INT32_MAX -1) /* min 32-bit integer */
     338  #endif
     339  
     340  
     341  #define COMPRESS_NULL_VALUE -2147483647
     342  #define N_RANDOM 10000  /* DO NOT CHANGE THIS;  used when quantizing real numbers */
     343  
     344  int ffgnky(fitsfile *fptr, char *card, int *status);
     345  void ffcfmt(char *tform, char *cform);
     346  void ffcdsp(char *tform, char *cform);
     347  void ffswap2(short *values, long nvalues);
     348  void ffswap4(INT32BIT *values, long nvalues);
     349  void ffswap8(double *values, long nvalues);
     350  int ffi2c(LONGLONG ival, char *cval, int *status);
     351  int ffu2c(ULONGLONG ival, char *cval, int *status);
     352  int ffl2c(int lval, char *cval, int *status);
     353  int ffs2c(const char *instr, char *outstr, int *status);
     354  int ffs2c_nopad(const char *instr, char *outstr, int *status);
     355  int ffr2f(float fval, int decim, char *cval, int *status);
     356  int ffr2e(float fval, int decim, char *cval, int *status);
     357  int ffd2f(double dval, int decim, char *cval, int *status);
     358  int ffd2e(double dval, int decim, char *cval, int *status);
     359  int ffc2ii(const char *cval, long *ival, int *status);
     360  int ffc2jj(const char *cval, LONGLONG *ival, int *status);
     361  int ffc2ujj(const char *cval, ULONGLONG *ival, int *status);
     362  int ffc2ll(const char *cval, int *lval, int *status);
     363  int ffc2rr(const char *cval, float *fval, int *status);
     364  int ffc2dd(const char *cval, double *dval, int *status);
     365  int ffc2x(const char *cval, char *dtype, long *ival, int *lval, char *sval,
     366            double *dval, int *status);
     367  int ffc2xx(const char *cval, char *dtype, LONGLONG *ival, int *lval, char *sval,
     368            double *dval, int *status);
     369  int ffc2uxx(const char *cval, char *dtype, ULONGLONG *ival, int *lval, char *sval,
     370            double *dval, int *status);
     371  int ffc2s(const char *instr, char *outstr, int *status);
     372  int ffc2i(const char *cval, long *ival, int *status);
     373  int ffc2j(const char *cval, LONGLONG *ival, int *status);
     374  int ffc2uj(const char *cval, ULONGLONG *ival, int *status);
     375  int ffc2r(const char *cval, float *fval, int *status);
     376  int ffc2d(const char *cval, double *dval, int *status);
     377  int ffc2l(const char *cval, int *lval, int *status);
     378  void ffxmsg(int action, char *err_message);
     379  int ffgcnt(fitsfile *fptr, char *value, char *comm, int *status);
     380  int ffgtkn(fitsfile *fptr, int numkey, char *keyname, long *value, int *status);
     381  int ffgtknjj(fitsfile *fptr, int numkey, char *keyname, LONGLONG *value, int *status);
     382  int fftkyn(fitsfile *fptr, int numkey, char *keyname, char *value, int *status);
     383  int ffgphd(fitsfile *fptr, int maxdim, int *simple, int *bitpix, int *naxis,
     384          LONGLONG naxes[], long *pcount, long *gcount, int *extend, double *bscale,
     385            double *bzero, LONGLONG *blank, int *nspace, int *status);
     386  int ffgttb(fitsfile *fptr, LONGLONG *rowlen, LONGLONG *nrows, LONGLONG *pcount,
     387            long *tfield, int *status);
     388  int ffglkut(fitsfile *fptr,const char *keyname,int firstchar,int maxchar,int maxcomchar,
     389             char *value,int *valuelen,char *comm,int *comlen,int  *status);
     390   
     391  int ffmkey(fitsfile *fptr, const char *card, int *status);
     392  int fits_make_longstr_key_util(fitsfile *fptr, const char *keyname, const char *value,
     393             const char *comm, int position, int *status);
     394   
     395  /*  ffmbyt has been moved to fitsio.h */
     396  int ffgbyt(fitsfile *fptr, LONGLONG nbytes, void *buffer, int *status);
     397  int ffpbyt(fitsfile *fptr, LONGLONG nbytes, void *buffer, int *status);
     398  int ffgbytoff(fitsfile *fptr, long gsize, long ngroups, long offset, 
     399             void *buffer, int *status);
     400  int ffpbytoff(fitsfile *fptr, long gsize, long ngroups, long offset,
     401             void *buffer, int *status);
     402  int ffldrc(fitsfile *fptr, long record, int err_mode, int *status);
     403  int ffwhbf(fitsfile *fptr, int *nbuff);
     404  int ffbfeof(fitsfile *fptr, int *status);
     405  int ffbfwt(FITSfile *Fptr, int nbuff, int *status);
     406  int ffpxsz(int datatype);
     407  
     408  int ffourl(char *url, char *urltype, char *outfile, char *tmplfile,
     409              char *compspec, int *status);
     410  int ffparsecompspec(fitsfile *fptr, char *compspec, int *status);
     411  int ffoptplt(fitsfile *fptr, const char *tempname, int *status);
     412  int fits_is_this_a_copy(char *urltype);
     413  char *fits_find_match_delim(char *, char);
     414  int fits_store_Fptr(FITSfile *Fptr, int *status);
     415  int fits_clear_Fptr(FITSfile *Fptr, int *status);
     416  int fits_already_open(fitsfile **fptr, char *url, 
     417      char *urltype, char *infile, char *extspec, char *rowfilter,
     418      char *binspec, char *colspec, int  mode, int noextsyn,
     419      int  *isopen, int  *status);
     420  int ffedit_columns(fitsfile **fptr, char *outfile, char *expr, int *status);
     421  int fits_get_col_minmax(fitsfile *fptr, int colnum, double *datamin, 
     422                       double *datamax, int *status);
     423  /* "Extended syntax" versions of histogram binning which permit
     424     expressions instead of just columns.  The existing interfaces
     425     still work */
     426  int fits_get_expr_minmax(fitsfile *fptr, char *expr, double *datamin, 
     427  			 double *datamax, int *datatype, int *status);
     428  int ffbinse(char *binspec, int *imagetype, int *haxis, 
     429  	    char colname[4][FLEN_VALUE], double *minin,
     430  	    double *maxin, double *binsizein,
     431  	    char minname[4][FLEN_VALUE], char maxname[4][FLEN_VALUE],
     432  	    char binname[4][FLEN_VALUE], double *weight, char *wtname,
     433  	    int *recip, char ***exprs, int *status);
     434  int ffbinre(char **binspec, char *colname, char **exprbeg, char **exprend,
     435  	    double *minin, double *maxin, double *binsizein, char *minname,
     436  	    char *maxname, char *binname, int *status);
     437  int ffhist2e(fitsfile **fptr, char *outfile, int imagetype, int naxis,
     438  	     char colname[4][FLEN_VALUE], char *colexpr[4], 
     439  	     double *minin, double *maxin, double *binsizein, 
     440  	     char minname[4][FLEN_VALUE], char maxname[4][FLEN_VALUE], 
     441  	     char binname[4][FLEN_VALUE], 
     442  	     double weightin, char wtcol[FLEN_VALUE], char *wtexpr,           
     443  	     int recip, char *selectrow, int *status);
     444  int fits_calc_binningde(fitsfile *, int, char colname[4][FLEN_VALUE],
     445  	  char *colexpr[4], double *minin, double *maxin, double *binsizein,
     446            char minname[4][FLEN_VALUE], char maxname[4][FLEN_VALUE], char binname[4][FLEN_VALUE],			       
     447            int *, int *, long *, double *, double *, double *, long *, int *);
     448  int fits_write_keys_histoe(fitsfile *fptr,  fitsfile *histptr, 
     449            int naxis, int *colnum, char colname[4][FLEN_VALUE], char *colexpr[4], int *status);  
     450  int fits_make_histde(fitsfile *fptr, fitsfile *histptr, int *datatypes, int bitpix,int naxis,
     451       long *naxes,  int *colnum,  char *colexpr[4], double *amin,  double *amax, double *binsize,
     452       double weight, int wtcolnum, char *wtexpr, int recip, char *selectrow, int *status);
     453  int ffwritehisto(long totaln, long offset, long firstn, long nvalues,
     454               int narrays, iteratorCol *imagepars, void *userPointer);
     455  int ffcalchist(long totalrows, long offset, long firstrow, long nrows,
     456               int ncols, iteratorCol *colpars, void *userPointer);
     457  int ffpinit(fitsfile *fptr, int *status);
     458  int ffainit(fitsfile *fptr, int *status);
     459  int ffbinit(fitsfile *fptr, int *status);
     460  int ffchdu(fitsfile *fptr, int *status);
     461  int ffwend(fitsfile *fptr, int *status);
     462  int ffpdfl(fitsfile *fptr, int *status);
     463  int ffuptf(fitsfile *fptr, int *status);
     464  
     465  int ffdblk(fitsfile *fptr, long nblocks, int *status);
     466  int ffgext(fitsfile *fptr, int moveto, int *exttype, int *status);
     467  int ffgtbc(fitsfile *fptr, LONGLONG *totalwidth, int *status);
     468  int ffgtbp(fitsfile *fptr, char *name, char *value, int *status);
     469  int ffiblk(fitsfile *fptr, long nblock, int headdata, int *status);
     470  int ffshft(fitsfile *fptr, LONGLONG firstbyte, LONGLONG nbytes, LONGLONG nshift,
     471      int *status);
     472   
     473   int ffgcprll(fitsfile *fptr, int colnum, LONGLONG firstrow, LONGLONG firstelem,
     474             LONGLONG nelem, int writemode, double *scale, double *zero, char *tform,
     475             long *twidth, int *tcode, int *maxelem, LONGLONG *startpos,
     476             LONGLONG *elemnum, long *incre, LONGLONG *repeat, LONGLONG *rowlen,
     477             int *hdutype, LONGLONG *tnull, char *snull, int *status);
     478  	   
     479  int ffflushx(FITSfile *fptr);
     480  int ffseek(FITSfile *fptr, LONGLONG position);
     481  int ffread(FITSfile *fptr, long nbytes, void *buffer,
     482              int *status);
     483  int ffwrite(FITSfile *fptr, long nbytes, void *buffer,
     484              int *status);
     485  int fftrun(fitsfile *fptr, LONGLONG filesize, int *status);
     486  
     487  int ffpcluc(fitsfile *fptr, int colnum, LONGLONG firstrow, LONGLONG firstelem,
     488             LONGLONG nelem, int *status);
     489  	   
     490  int ffgcll(fitsfile *fptr, int colnum, LONGLONG firstrow, LONGLONG firstelem,
     491             LONGLONG nelem, int nultyp, char nulval, char *array, char *nularray,
     492             int *anynul, int *status);
     493  int ffgcls(fitsfile *fptr, int colnum, LONGLONG firstrow, LONGLONG firstelem,
     494             LONGLONG nelem, int nultyp, char *nulval,
     495             char **array, char *nularray, int *anynul, int  *status);
     496  int ffgcls2(fitsfile *fptr, int colnum, LONGLONG firstrow, LONGLONG firstelem,
     497             LONGLONG nelem, int nultyp, char *nulval,
     498             char **array, char *nularray, int *anynul, int  *status);
     499  int ffgclb(fitsfile *fptr, int colnum, LONGLONG firstrow, LONGLONG firstelem,
     500             LONGLONG nelem, long  elemincre, int nultyp, unsigned char nulval,
     501             unsigned char *array, char *nularray, int *anynul, int  *status);
     502  int ffgclsb(fitsfile *fptr, int colnum, LONGLONG firstrow, LONGLONG firstelem,
     503             LONGLONG nelem, long  elemincre, int nultyp, signed char nulval,
     504             signed char *array, char *nularray, int *anynul, int  *status);
     505  int ffgclui(fitsfile *fptr, int colnum, LONGLONG firstrow, LONGLONG firstelem,
     506             LONGLONG nelem, long  elemincre, int nultyp, unsigned short nulval,
     507             unsigned short *array, char *nularray, int *anynul, int  *status);
     508  int ffgcli(fitsfile *fptr, int colnum, LONGLONG firstrow, LONGLONG firstelem,
     509             LONGLONG nelem, long  elemincre, int nultyp, short nulval,
     510             short *array, char *nularray, int *anynul, int  *status);
     511  int ffgcluj(fitsfile *fptr, int colnum, LONGLONG firstrow, LONGLONG firstelem,
     512             LONGLONG nelem, long elemincre, int nultyp, unsigned long nulval,
     513             unsigned long *array, char *nularray, int *anynul, int  *status);
     514  int ffgclujj(fitsfile *fptr, int colnum, LONGLONG firstrow, LONGLONG firstelem,
     515             LONGLONG nelem, long elemincre, int nultyp, ULONGLONG nulval, 
     516             ULONGLONG *array, char *nularray, int *anynul, int  *status);
     517  int ffgcljj(fitsfile *fptr, int colnum, LONGLONG firstrow, LONGLONG firstelem,
     518             LONGLONG nelem, long elemincre, int nultyp, LONGLONG nulval, 
     519             LONGLONG *array, char *nularray, int *anynul, int  *status);
     520  int ffgclj(fitsfile *fptr, int colnum, LONGLONG firstrow, LONGLONG firstelem,
     521             LONGLONG nelem, long elemincre, int nultyp, long nulval, long *array,
     522             char *nularray, int *anynul, int  *status);
     523  int ffgcluk(fitsfile *fptr, int colnum, LONGLONG firstrow, LONGLONG firstelem,
     524             LONGLONG nelem, long elemincre, int nultyp, unsigned int nulval,
     525             unsigned int *array, char *nularray, int *anynul, int  *status);
     526  int ffgclk(fitsfile *fptr, int colnum, LONGLONG firstrow, LONGLONG firstelem,
     527             LONGLONG nelem, long elemincre, int nultyp, int nulval, int *array,
     528             char *nularray, int *anynul, int  *status);
     529  int ffgcle(fitsfile *fptr, int colnum, LONGLONG firstrow, LONGLONG firstelem,
     530             LONGLONG nelem, long elemincre, int nultyp,  float nulval, float *array,
     531             char *nularray, int *anynul, int  *status);
     532  int ffgcld(fitsfile *fptr, int colnum, LONGLONG firstrow, LONGLONG firstelem,
     533             LONGLONG nelem, long elemincre, int nultyp, double nulval,
     534             double *array, char *nularray, int *anynul, int  *status);
     535   
     536  int ffpi1b(fitsfile *fptr, long nelem, long incre, unsigned char *buffer,
     537             int *status);
     538  int ffpi2b(fitsfile *fptr, long nelem, long incre, short *buffer, int *status);
     539  int ffpi4b(fitsfile *fptr, long nelem, long incre, INT32BIT *buffer,
     540             int *status);
     541  int ffpi8b(fitsfile *fptr, long nelem, long incre, long *buffer, int *status);
     542  int ffpr4b(fitsfile *fptr, long nelem, long incre, float *buffer, int *status);
     543  int ffpr8b(fitsfile *fptr, long nelem, long incre, double *buffer, int *status);
     544   
     545  int ffgi1b(fitsfile *fptr, LONGLONG pos, long nelem, long incre,
     546            unsigned char *buffer, int *status);
     547  int ffgi2b(fitsfile *fptr, LONGLONG pos, long nelem, long incre, short *buffer,
     548            int *status);
     549  int ffgi4b(fitsfile *fptr, LONGLONG pos, long nelem, long incre, INT32BIT *buffer,
     550            int *status);
     551  int ffgi8b(fitsfile *fptr, LONGLONG pos, long nelem, long incre, long *buffer,
     552            int *status);
     553  int ffgr4b(fitsfile *fptr, LONGLONG pos, long nelem, long incre, float *buffer,
     554            int *status);
     555  int ffgr8b(fitsfile *fptr, LONGLONG pos, long nelem, long incre, double *buffer,
     556            int *status);
     557   
     558  int ffcins(fitsfile *fptr, LONGLONG naxis1, LONGLONG naxis2, LONGLONG nbytes,
     559             LONGLONG bytepos, int *status);
     560  int ffcdel(fitsfile *fptr, LONGLONG naxis1, LONGLONG naxis2, LONGLONG nbytes,
     561             LONGLONG bytepos, int *status);
     562  int ffkshf(fitsfile *fptr, int firstcol, int tfields, int nshift, int *status);
     563  int fffvcl(fitsfile *fptr, int *nvarcols, int *colnums, int *status);
     564   
     565  int fffi1i1(unsigned char *input, long ntodo, double scale, double zero,
     566              int nullcheck, unsigned char tnull, unsigned char nullval, char
     567               *nullarray, int *anynull, unsigned char *output, int *status);
     568  int fffi2i1(short *input, long ntodo, double scale, double zero,
     569              int nullcheck, short tnull, unsigned char nullval, char *nullarray,
     570              int *anynull, unsigned char *output, int *status);
     571  int fffi4i1(INT32BIT *input, long ntodo, double scale, double zero,
     572              int nullcheck, INT32BIT tnull, unsigned char nullval, char *nullarray,
     573              int *anynull, unsigned char *output, int *status);
     574  int fffi8i1(LONGLONG *input, long ntodo, double scale, double zero,
     575              int nullcheck, LONGLONG tnull, unsigned char nullval, char *nullarray,
     576              int *anynull, unsigned char *output, int *status);
     577  int fffr4i1(float *input, long ntodo, double scale, double zero,
     578              int nullcheck, unsigned char nullval, char *nullarray,
     579              int *anynull, unsigned char *output, int *status);
     580  int fffr8i1(double *input, long ntodo, double scale, double zero,
     581              int nullcheck, unsigned char nullval, char *nullarray,
     582              int *anynull, unsigned char *output, int *status);
     583  int fffstri1(char *input, long ntodo, double scale, double zero,
     584              long twidth, double power, int nullcheck, char *snull,
     585              unsigned char nullval, char *nullarray, int *anynull,
     586              unsigned char *output, int *status);
     587   
     588  int fffi1s1(unsigned char *input, long ntodo, double scale, double zero,
     589              int nullcheck, unsigned char tnull, signed char nullval, char
     590               *nullarray, int *anynull, signed char *output, int *status);
     591  int fffi2s1(short *input, long ntodo, double scale, double zero,
     592              int nullcheck, short tnull, signed char nullval, char *nullarray,
     593              int *anynull, signed char *output, int *status);
     594  int fffi4s1(INT32BIT *input, long ntodo, double scale, double zero,
     595              int nullcheck, INT32BIT tnull, signed char nullval, char *nullarray,
     596              int *anynull, signed char *output, int *status);
     597  int fffi8s1(LONGLONG *input, long ntodo, double scale, double zero,
     598              int nullcheck, LONGLONG tnull, signed char nullval, char *nullarray,
     599              int *anynull, signed char *output, int *status);
     600  int fffr4s1(float *input, long ntodo, double scale, double zero,
     601              int nullcheck, signed char nullval, char *nullarray,
     602              int *anynull, signed char *output, int *status);
     603  int fffr8s1(double *input, long ntodo, double scale, double zero,
     604              int nullcheck, signed char nullval, char *nullarray,
     605              int *anynull, signed char *output, int *status);
     606  int fffstrs1(char *input, long ntodo, double scale, double zero,
     607              long twidth, double power, int nullcheck, char *snull,
     608              signed char nullval, char *nullarray, int *anynull,
     609              signed char *output, int *status);
     610  
     611  int fffi1u2(unsigned char *input, long ntodo, double scale, double zero,
     612              int nullcheck, unsigned char tnull, unsigned short nullval, 
     613              char *nullarray,
     614              int *anynull, unsigned short *output, int *status);
     615  int fffi2u2(short *input, long ntodo, double scale, double zero,
     616              int nullcheck, short tnull, unsigned short nullval, char *nullarray,
     617              int *anynull, unsigned short *output, int *status);
     618  int fffi4u2(INT32BIT *input, long ntodo, double scale, double zero,
     619              int nullcheck, INT32BIT tnull, unsigned short nullval, char *nullarray,
     620              int *anynull, unsigned short *output, int *status);
     621  int fffi8u2(LONGLONG *input, long ntodo, double scale, double zero,
     622              int nullcheck, LONGLONG tnull, unsigned short nullval, char *nullarray,
     623              int *anynull, unsigned short *output, int *status);
     624  int fffr4u2(float *input, long ntodo, double scale, double zero,
     625              int nullcheck, unsigned short nullval, char *nullarray,
     626              int *anynull, unsigned short *output, int *status);
     627  int fffr8u2(double *input, long ntodo, double scale, double zero,
     628              int nullcheck, unsigned short nullval, char *nullarray,
     629              int *anynull, unsigned short *output, int *status);
     630  int fffstru2(char *input, long ntodo, double scale, double zero,
     631              long twidth, double power, int nullcheck, char *snull,
     632              unsigned short nullval, char *nullarray, int  *anynull, 
     633              unsigned short *output, int *status);
     634  
     635  int fffi1i2(unsigned char *input, long ntodo, double scale, double zero,
     636              int nullcheck, unsigned char tnull, short nullval, char *nullarray,
     637              int *anynull, short *output, int *status);
     638  int fffi2i2(short *input, long ntodo, double scale, double zero,
     639              int nullcheck, short tnull, short nullval, char *nullarray,
     640              int *anynull, short *output, int *status);
     641  int fffi4i2(INT32BIT *input, long ntodo, double scale, double zero,
     642              int nullcheck, INT32BIT tnull, short nullval, char *nullarray,
     643              int *anynull, short *output, int *status);
     644  int fffi8i2(LONGLONG *input, long ntodo, double scale, double zero,
     645              int nullcheck, LONGLONG tnull, short nullval, char *nullarray,
     646              int *anynull, short *output, int *status);
     647  int fffr4i2(float *input, long ntodo, double scale, double zero,
     648              int nullcheck, short nullval, char *nullarray,
     649              int *anynull, short *output, int *status);
     650  int fffr8i2(double *input, long ntodo, double scale, double zero,
     651              int nullcheck, short nullval, char *nullarray,
     652              int *anynull, short *output, int *status);
     653  int fffstri2(char *input, long ntodo, double scale, double zero,
     654              long twidth, double power, int nullcheck, char *snull,
     655              short nullval, char *nullarray, int  *anynull, short *output,
     656              int *status);
     657  
     658  int fffi1u4(unsigned char *input, long ntodo, double scale, double zero,
     659              int nullcheck, unsigned char tnull, unsigned long nullval,
     660              char *nullarray,
     661              int *anynull, unsigned long *output, int *status);
     662  int fffi2u4(short *input, long ntodo, double scale, double zero,
     663              int nullcheck, short tnull, unsigned long nullval, char *nullarray,
     664              int *anynull, unsigned long *output, int *status);
     665  int fffi4u4(INT32BIT *input, long ntodo, double scale, double zero,
     666              int nullcheck, INT32BIT tnull, unsigned long nullval, char *nullarray,
     667              int *anynull, unsigned long *output, int *status);
     668  int fffi8u4(LONGLONG *input, long ntodo, double scale, double zero,
     669              int nullcheck, LONGLONG tnull, unsigned long nullval, char *nullarray,
     670              int *anynull, unsigned long *output, int *status);
     671  int fffr4u4(float *input, long ntodo, double scale, double zero,
     672              int nullcheck, unsigned long nullval, char *nullarray,
     673              int *anynull, unsigned long *output, int *status);
     674  int fffr8u4(double *input, long ntodo, double scale, double zero,
     675              int nullcheck, unsigned long nullval, char *nullarray,
     676              int *anynull, unsigned long *output, int *status);
     677  int fffstru4(char *input, long ntodo, double scale, double zero,
     678              long twidth, double power, int nullcheck, char *snull,
     679              unsigned long nullval, char *nullarray, int *anynull,
     680              unsigned long *output, int *status);
     681   
     682  int fffi1i4(unsigned char *input, long ntodo, double scale, double zero,
     683              int nullcheck, unsigned char tnull, long nullval, char *nullarray,
     684              int *anynull, long *output, int *status);
     685  int fffi2i4(short *input, long ntodo, double scale, double zero,
     686              int nullcheck, short tnull, long nullval, char *nullarray,
     687              int *anynull, long *output, int *status);
     688  int fffi4i4(INT32BIT *input, long ntodo, double scale, double zero,
     689              int nullcheck, INT32BIT tnull, long nullval, char *nullarray,
     690              int *anynull, long *output, int *status);
     691  int fffi8i4(LONGLONG *input, long ntodo, double scale, double zero,
     692              int nullcheck, LONGLONG tnull, long nullval, char *nullarray,
     693              int *anynull, long *output, int *status);
     694  int fffr4i4(float *input, long ntodo, double scale, double zero,
     695              int nullcheck, long nullval, char *nullarray,
     696              int *anynull, long *output, int *status);
     697  int fffr8i4(double *input, long ntodo, double scale, double zero,
     698              int nullcheck, long nullval, char *nullarray,
     699              int *anynull, long *output, int *status);
     700  int fffstri4(char *input, long ntodo, double scale, double zero,
     701              long twidth, double power, int nullcheck, char *snull,
     702              long nullval, char *nullarray, int *anynull, long *output,
     703              int *status);
     704   
     705  int fffi1int(unsigned char *input, long ntodo, double scale, double zero,
     706              int nullcheck, unsigned char tnull, int nullval, char *nullarray,
     707              int *anynull, int *output, int *status);
     708  int fffi2int(short *input, long ntodo, double scale, double zero,
     709              int nullcheck, short tnull, int nullval, char *nullarray,
     710              int *anynull, int *output, int *status);
     711  int fffi4int(INT32BIT *input, long ntodo, double scale, double zero,
     712              int nullcheck, INT32BIT tnull, int nullval, char *nullarray,
     713              int *anynull, int *output, int *status);
     714  int fffi8int(LONGLONG *input, long ntodo, double scale, double zero,
     715              int nullcheck, LONGLONG tnull, int nullval, char *nullarray,
     716              int *anynull, int *output, int *status);
     717  int fffr4int(float *input, long ntodo, double scale, double zero,
     718              int nullcheck, int nullval, char *nullarray,
     719              int *anynull, int *output, int *status);
     720  int fffr8int(double *input, long ntodo, double scale, double zero,
     721              int nullcheck, int nullval, char *nullarray,
     722              int *anynull, int *output, int *status);
     723  int fffstrint(char *input, long ntodo, double scale, double zero,
     724              long twidth, double power, int nullcheck, char *snull,
     725              int nullval, char *nullarray, int *anynull, int *output,
     726              int *status);
     727   
     728  int fffi1uint(unsigned char *input, long ntodo, double scale, double zero,
     729              int nullcheck, unsigned char tnull, unsigned int nullval,
     730              char *nullarray, int *anynull, unsigned int *output, int *status);
     731  int fffi2uint(short *input, long ntodo, double scale, double zero,
     732              int nullcheck, short tnull, unsigned int nullval, char *nullarray,
     733              int *anynull, unsigned int *output, int *status);
     734  int fffi4uint(INT32BIT *input, long ntodo, double scale, double zero,
     735              int nullcheck, INT32BIT tnull, unsigned int nullval, char *nullarray,
     736              int *anynull, unsigned int *output, int *status);
     737  int fffi8uint(LONGLONG *input, long ntodo, double scale, double zero,
     738              int nullcheck, LONGLONG tnull, unsigned int nullval, char *nullarray,
     739              int *anynull, unsigned int *output, int *status);
     740  int fffr4uint(float *input, long ntodo, double scale, double zero,
     741              int nullcheck, unsigned int nullval, char *nullarray,
     742              int *anynull, unsigned int *output, int *status);
     743  int fffr8uint(double *input, long ntodo, double scale, double zero,
     744              int nullcheck, unsigned int nullval, char *nullarray,
     745              int *anynull, unsigned int *output, int *status);
     746  int fffstruint(char *input, long ntodo, double scale, double zero,
     747              long twidth, double power, int nullcheck, char *snull,
     748              unsigned int nullval, char *nullarray, int *anynull,
     749              unsigned int *output, int *status);
     750   
     751  int fffi1i8(unsigned char *input, long ntodo, double scale, double zero,
     752              int nullcheck, unsigned char tnull, LONGLONG nullval, 
     753              char *nullarray, int *anynull, LONGLONG *output, int *status);
     754  int fffi2i8(short *input, long ntodo, double scale, double zero,
     755              int nullcheck, short tnull, LONGLONG nullval, char *nullarray,
     756              int *anynull, LONGLONG *output, int *status);
     757  int fffi4i8(INT32BIT *input, long ntodo, double scale, double zero,
     758              int nullcheck, INT32BIT tnull, LONGLONG nullval, char *nullarray,
     759              int *anynull, LONGLONG *output, int *status);
     760  int fffi8i8(LONGLONG *input, long ntodo, double scale, double zero,
     761              int nullcheck, LONGLONG tnull, LONGLONG nullval, char *nullarray,
     762              int *anynull, LONGLONG *output, int *status);
     763  int fffr4i8(float *input, long ntodo, double scale, double zero,
     764              int nullcheck, LONGLONG nullval, char *nullarray,
     765              int *anynull, LONGLONG *output, int *status);
     766  int fffr8i8(double *input, long ntodo, double scale, double zero,
     767              int nullcheck, LONGLONG nullval, char *nullarray,
     768              int *anynull, LONGLONG *output, int *status);
     769  int fffstri8(char *input, long ntodo, double scale, double zero,
     770              long twidth, double power, int nullcheck, char *snull,
     771              LONGLONG nullval, char *nullarray, int *anynull, LONGLONG *output,
     772              int *status);
     773  
     774  int fffi1u8(unsigned char *input, long ntodo, double scale, double zero,
     775              int nullcheck, unsigned char tnull, ULONGLONG nullval, 
     776              char *nullarray, int *anynull, ULONGLONG *output, int *status);
     777  int fffi2u8(short *input, long ntodo, double scale, double zero,
     778              int nullcheck, short tnull, ULONGLONG nullval, char *nullarray,
     779              int *anynull, ULONGLONG *output, int *status);
     780  int fffi4u8(INT32BIT *input, long ntodo, double scale, double zero,
     781              int nullcheck, INT32BIT tnull, ULONGLONG nullval, char *nullarray,
     782              int *anynull, ULONGLONG *output, int *status);
     783  int fffi8u8(LONGLONG *input, long ntodo, double scale, double zero,
     784              int nullcheck, LONGLONG tnull, ULONGLONG nullval, char *nullarray,
     785              int *anynull, ULONGLONG *output, int *status);
     786  int fffr4u8(float *input, long ntodo, double scale, double zero,
     787              int nullcheck, ULONGLONG nullval, char *nullarray,
     788              int *anynull, ULONGLONG *output, int *status);
     789  int fffr8u8(double *input, long ntodo, double scale, double zero,
     790              int nullcheck, ULONGLONG nullval, char *nullarray,
     791              int *anynull, ULONGLONG *output, int *status);
     792  int fffstru8(char *input, long ntodo, double scale, double zero,
     793              long twidth, double power, int nullcheck, char *snull,
     794              ULONGLONG nullval, char *nullarray, int *anynull, ULONGLONG *output,
     795              int *status);
     796  
     797  
     798  int fffi1r4(unsigned char *input, long ntodo, double scale, double zero,
     799              int nullcheck, unsigned char tnull, float nullval, char *nullarray,
     800              int *anynull, float *output, int *status);
     801  int fffi2r4(short *input, long ntodo, double scale, double zero,
     802              int nullcheck, short tnull, float nullval, char *nullarray,
     803              int *anynull, float *output, int *status);
     804  int fffi4r4(INT32BIT *input, long ntodo, double scale, double zero,
     805              int nullcheck, INT32BIT tnull, float nullval, char *nullarray,
     806              int *anynull, float *output, int *status);
     807  int fffi8r4(LONGLONG *input, long ntodo, double scale, double zero,
     808              int nullcheck, LONGLONG tnull, float nullval, char *nullarray,
     809              int *anynull, float *output, int *status);
     810  int fffr4r4(float *input, long ntodo, double scale, double zero,
     811              int nullcheck, float nullval, char *nullarray,
     812              int *anynull, float *output, int *status);
     813  int fffr8r4(double *input, long ntodo, double scale, double zero,
     814              int nullcheck, float nullval, char *nullarray,
     815              int *anynull, float *output, int *status);
     816  int fffstrr4(char *input, long ntodo, double scale, double zero,
     817              long twidth, double power, int nullcheck, char *snull,
     818              float nullval, char *nullarray, int *anynull, float *output,
     819              int *status);
     820   
     821  int fffi1r8(unsigned char *input, long ntodo, double scale, double zero,
     822              int nullcheck, unsigned char tnull, double nullval, char *nullarray,
     823              int *anynull, double *output, int *status);
     824  int fffi2r8(short *input, long ntodo, double scale, double zero,
     825              int nullcheck, short tnull, double nullval, char *nullarray,
     826              int *anynull, double *output, int *status);
     827  int fffi4r8(INT32BIT *input, long ntodo, double scale, double zero,
     828              int nullcheck, INT32BIT tnull, double nullval, char *nullarray,
     829              int *anynull, double *output, int *status);
     830  int fffi8r8(LONGLONG *input, long ntodo, double scale, double zero,
     831              int nullcheck, LONGLONG tnull, double nullval, char *nullarray,
     832              int *anynull, double *output, int *status);
     833  int fffr4r8(float *input, long ntodo, double scale, double zero,
     834              int nullcheck, double nullval, char *nullarray,
     835              int *anynull, double *output, int *status);
     836  int fffr8r8(double *input, long ntodo, double scale, double zero,
     837              int nullcheck, double nullval, char *nullarray,
     838              int *anynull, double *output, int *status);
     839  int fffstrr8(char *input, long ntodo, double scale, double zero,
     840              long twidth, double power, int nullcheck, char *snull,
     841              double nullval, char *nullarray, int *anynull, double *output,
     842              int *status);
     843   
     844  int ffi1fi1(unsigned char *array, long ntodo, double scale, double zero,
     845              unsigned char *buffer, int *status);
     846  int ffs1fi1(signed char *array, long ntodo, double scale, double zero,
     847              unsigned char *buffer, int *status);
     848  int ffu2fi1(unsigned short *array, long ntodo, double scale, double zero,
     849              unsigned char *buffer, int *status);
     850  int ffi2fi1(short *array, long ntodo, double scale, double zero,
     851              unsigned char *buffer, int *status);
     852  int ffu4fi1(unsigned long *array, long ntodo, double scale, double zero,
     853              unsigned char *buffer, int *status);
     854  int ffi4fi1(long *array, long ntodo, double scale, double zero,
     855              unsigned char *buffer, int *status);
     856  int ffu8fi1(ULONGLONG *array, long ntodo, double scale, double zero,
     857              unsigned char *buffer, int *status);
     858  int ffi8fi1(LONGLONG *array, long ntodo, double scale, double zero,
     859              unsigned char *buffer, int *status);
     860  int ffuintfi1(unsigned int *array, long ntodo, double scale, double zero,
     861              unsigned char *buffer, int *status);
     862  int ffintfi1(int *array, long ntodo, double scale, double zero,
     863              unsigned char *buffer, int *status);
     864  int ffr4fi1(float *array, long ntodo, double scale, double zero,
     865              unsigned char *buffer, int *status);
     866  int ffr8fi1(double *array, long ntodo, double scale, double zero,
     867              unsigned char *buffer, int *status);
     868   
     869  int ffi1fi2(unsigned char *array, long ntodo, double scale, double zero,
     870              short *buffer, int *status);
     871  int ffs1fi2(signed char *array, long ntodo, double scale, double zero,
     872              short *buffer, int *status);
     873  int ffu2fi2(unsigned short *array, long ntodo, double scale, double zero,
     874              short *buffer, int *status);
     875  int ffi2fi2(short *array, long ntodo, double scale, double zero,
     876              short *buffer, int *status);
     877  int ffu4fi2(unsigned long *array, long ntodo, double scale, double zero,
     878              short *buffer, int *status);
     879  int ffi4fi2(long *array, long ntodo, double scale, double zero,
     880              short *buffer, int *status);
     881  int ffu8fi2(ULONGLONG *array, long ntodo, double scale, double zero,
     882              short *buffer, int *status);
     883  int ffi8fi2(LONGLONG *array, long ntodo, double scale, double zero,
     884              short *buffer, int *status);
     885  int ffuintfi2(unsigned int *array, long ntodo, double scale, double zero,
     886              short *buffer, int *status);
     887  int ffintfi2(int *array, long ntodo, double scale, double zero,
     888              short *buffer, int *status);
     889  int ffr4fi2(float *array, long ntodo, double scale, double zero,
     890              short *buffer, int *status);
     891  int ffr8fi2(double *array, long ntodo, double scale, double zero,
     892              short *buffer, int *status);
     893   
     894  int ffi1fi4(unsigned char *array, long ntodo, double scale, double zero,
     895              INT32BIT *buffer, int *status);
     896  int ffs1fi4(signed char *array, long ntodo, double scale, double zero,
     897              INT32BIT *buffer, int *status);
     898  int ffu2fi4(unsigned short *array, long ntodo, double scale, double zero,
     899              INT32BIT *buffer, int *status);
     900  int ffi2fi4(short *array, long ntodo, double scale, double zero,
     901              INT32BIT *buffer, int *status);
     902  int ffu4fi4(unsigned long *array, long ntodo, double scale, double zero,
     903              INT32BIT *buffer, int *status);
     904  int ffu8fi4(ULONGLONG *array, long ntodo, double scale, double zero,
     905              INT32BIT *buffer, int *status);
     906  int ffi4fi4(long *array, long ntodo, double scale, double zero,
     907              INT32BIT *buffer, int *status);
     908  int ffi8fi4(LONGLONG *array, long ntodo, double scale, double zero,
     909              INT32BIT *buffer, int *status);
     910  int ffuintfi4(unsigned int *array, long ntodo, double scale, double zero,
     911              INT32BIT *buffer, int *status);
     912  int ffintfi4(int *array, long ntodo, double scale, double zero,
     913              INT32BIT *buffer, int *status);
     914  int ffr4fi4(float *array, long ntodo, double scale, double zero,
     915              INT32BIT *buffer, int *status);
     916  int ffr8fi4(double *array, long ntodo, double scale, double zero,
     917              INT32BIT *buffer, int *status);
     918  
     919  int ffi4fi8(long *array, long ntodo, double scale, double zero,
     920              LONGLONG *buffer, int *status);
     921  int ffi8fi8(LONGLONG *array, long ntodo, double scale, double zero,
     922              LONGLONG *buffer, int *status);
     923  int ffi2fi8(short *array, long ntodo, double scale, double zero,
     924              LONGLONG *buffer, int *status);
     925  int ffi1fi8(unsigned char *array, long ntodo, double scale, double zero,
     926              LONGLONG *buffer, int *status);
     927  int ffs1fi8(signed char *array, long ntodo, double scale, double zero,
     928              LONGLONG *buffer, int *status);
     929  int ffr4fi8(float *array, long ntodo, double scale, double zero,
     930              LONGLONG *buffer, int *status);
     931  int ffr8fi8(double *array, long ntodo, double scale, double zero,
     932              LONGLONG *buffer, int *status);
     933  int ffintfi8(int *array, long ntodo, double scale, double zero,
     934              LONGLONG *buffer, int *status);
     935  int ffu2fi8(unsigned short *array, long ntodo, double scale, double zero,
     936              LONGLONG *buffer, int *status);
     937  int ffu4fi8(unsigned long *array, long ntodo, double scale, double zero,
     938              LONGLONG *buffer, int *status);
     939  int ffu8fi8(ULONGLONG *array, long ntodo, double scale, double zero,
     940              LONGLONG *buffer, int *status);
     941  int ffuintfi8(unsigned int *array, long ntodo, double scale, double zero,
     942              LONGLONG *buffer, int *status);
     943  
     944  int ffi1fr4(unsigned char *array, long ntodo, double scale, double zero,
     945              float *buffer, int *status);
     946  int ffs1fr4(signed char *array, long ntodo, double scale, double zero,
     947              float *buffer, int *status);
     948  int ffu2fr4(unsigned short *array, long ntodo, double scale, double zero,
     949              float *buffer, int *status);
     950  int ffi2fr4(short *array, long ntodo, double scale, double zero,
     951              float *buffer, int *status);
     952  int ffu4fr4(unsigned long *array, long ntodo, double scale, double zero,
     953              float *buffer, int *status);
     954  int ffi4fr4(long *array, long ntodo, double scale, double zero,
     955              float *buffer, int *status);
     956  int ffu8fr4(ULONGLONG *array, long ntodo, double scale, double zero,
     957              float *buffer, int *status);
     958  int ffi8fr4(LONGLONG *array, long ntodo, double scale, double zero,
     959              float *buffer, int *status);
     960  int ffuintfr4(unsigned int *array, long ntodo, double scale, double zero,
     961              float *buffer, int *status);
     962  int ffintfr4(int *array, long ntodo, double scale, double zero,
     963              float *buffer, int *status);
     964  int ffr4fr4(float *array, long ntodo, double scale, double zero,
     965              float *buffer, int *status);
     966  int ffr8fr4(double *array, long ntodo, double scale, double zero,
     967              float *buffer, int *status);
     968   
     969  int ffi1fr8(unsigned char *array, long ntodo, double scale, double zero,
     970              double *buffer, int *status);
     971  int ffs1fr8(signed char *array, long ntodo, double scale, double zero,
     972              double *buffer, int *status);
     973  int ffu2fr8(unsigned short *array, long ntodo, double scale, double zero,
     974              double *buffer, int *status);
     975  int ffi2fr8(short *array, long ntodo, double scale, double zero,
     976              double *buffer, int *status);
     977  int ffu4fr8(unsigned long *array, long ntodo, double scale, double zero,
     978              double *buffer, int *status);
     979  int ffi4fr8(long *array, long ntodo, double scale, double zero,
     980              double *buffer, int *status);
     981  int ffu8fr8(ULONGLONG *array, long ntodo, double scale, double zero,
     982              double *buffer, int *status);
     983  int ffi8fr8(LONGLONG *array, long ntodo, double scale, double zero,
     984              double *buffer, int *status);
     985  int ffuintfr8(unsigned int *array, long ntodo, double scale, double zero,
     986              double *buffer, int *status);
     987  int ffintfr8(int *array, long ntodo, double scale, double zero,
     988              double *buffer, int *status);
     989  int ffr4fr8(float *array, long ntodo, double scale, double zero,
     990              double *buffer, int *status);
     991  int ffr8fr8(double *array, long ntodo, double scale, double zero,
     992              double *buffer, int *status);
     993  
     994  int ffi1fstr(unsigned char *input, long ntodo, double scale, double zero,
     995              char *cform, long twidth, char *output, int *status);
     996  int ffs1fstr(signed char *input, long ntodo, double scale, double zero,
     997              char *cform, long twidth, char *output, int *status);
     998  int ffu2fstr(unsigned short *input, long ntodo, double scale, double zero,
     999              char *cform, long twidth, char *output, int *status);
    1000  int ffi2fstr(short *input, long ntodo, double scale, double zero,
    1001              char *cform, long twidth, char *output, int *status);
    1002  int ffu4fstr(unsigned long *input, long ntodo, double scale, double zero,
    1003              char *cform, long twidth, char *output, int *status);
    1004  int ffi4fstr(long *input, long ntodo, double scale, double zero,
    1005              char *cform, long twidth, char *output, int *status);
    1006  int ffu8fstr(ULONGLONG *input, long ntodo, double scale, double zero,
    1007              char *cform, long twidth, char *output, int *status);
    1008  int ffi8fstr(LONGLONG *input, long ntodo, double scale, double zero,
    1009              char *cform, long twidth, char *output, int *status);
    1010  int ffintfstr(int *input, long ntodo, double scale, double zero,
    1011              char *cform, long twidth, char *output, int *status);
    1012  int ffuintfstr(unsigned int *input, long ntodo, double scale, double zero,
    1013              char *cform, long twidth, char *output, int *status);
    1014  int ffr4fstr(float *input, long ntodo, double scale, double zero,
    1015              char *cform, long twidth, char *output, int *status);
    1016  int ffr8fstr(double *input, long ntodo, double scale, double zero,
    1017              char *cform, long twidth, char *output, int *status);
    1018  
    1019  /*  the following 4 routines are VMS macros used on VAX or Alpha VMS */
    1020  void ieevpd(double *inarray, double *outarray, long *nvals);
    1021  void ieevud(double *inarray, double *outarray, long *nvals);
    1022  void ieevpr(float *inarray, float *outarray, long *nvals);
    1023  void ieevur(float *inarray, float *outarray, long *nvals);
    1024  
    1025  /*  routines related to the lexical parser  */
    1026  typedef struct ParseData_struct ParseData;
    1027  int  ffselect_table(fitsfile **fptr, char *outfile, char *expr,  int *status);
    1028  int  ffiprs( fitsfile *fptr, int compressed, char *expr, int maxdim,
    1029  	     int *datatype, long *nelem, int *naxis, long *naxes,
    1030  	     ParseData *, int *status );
    1031  void ffcprs( ParseData * );
    1032  int  ffcvtn( int inputType, void *input, char *undef, long ntodo,
    1033  	     int outputType, void *nulval, void *output,
    1034  	     int *anynull, int *status );
    1035  int  fits_parser_workfn( long totalrows, long offset, long firstrow,
    1036                   long nrows, int nCols, iteratorCol *colData,
    1037                   void *userPtr );
    1038  int  fits_uncompress_hkdata( ParseData *, 
    1039  			fitsfile *fptr, long ntimes, 
    1040                          double *times, int *status );
    1041  int  ffffrw_work( long totalrows, long offset, long firstrow,
    1042                    long nrows, int nCols, iteratorCol *colData,
    1043                    void *userPtr );
    1044  
    1045  int fits_translate_pixkeyword(char *inrec, char *outrec,char *patterns[][2],
    1046      int npat, int naxis, int *colnum, int *pat_num, int *i,
    1047        int *j, int *n, int *m, int *l, int *status);
    1048  
    1049  /*  image compression routines */
    1050  int fits_write_compressed_img(fitsfile *fptr, 
    1051              int  datatype, long  *fpixel, long *lpixel,   
    1052              int nullcheck, void *array,  void *nulval,
    1053              int  *status);
    1054  int fits_write_compressed_pixels(fitsfile *fptr, 
    1055              int  datatype, LONGLONG  fpixel, LONGLONG npixels,   
    1056              int nullcheck,  void *array, void *nulval,
    1057              int  *status);
    1058  int fits_write_compressed_img_plane(fitsfile *fptr, int  datatype, 
    1059        int  bytesperpixel,  long   nplane, long *firstcoord, long *lastcoord, 
    1060        long *naxes,  int  nullcheck, 
    1061        void *array,  void *nullval, long *nread, int  *status);
    1062  
    1063  int imcomp_init_table(fitsfile *outfptr,
    1064          int bitpix, int naxis,long *naxes, int writebitpix, int *status);
    1065  int imcomp_calc_max_elem (int comptype, int nx, int zbitpix, int blocksize);
    1066  int imcomp_copy_imheader(fitsfile *infptr, fitsfile *outfptr,
    1067                  int *status);
    1068  int imcomp_copy_img2comp(fitsfile *infptr, fitsfile *outfptr, int *status);
    1069  int imcomp_copy_comp2img(fitsfile *infptr, fitsfile *outfptr, 
    1070                            int norec, int *status);
    1071  int imcomp_copy_prime2img(fitsfile *infptr, fitsfile *outfptr, int *status);
    1072  int imcomp_compress_image (fitsfile *infptr, fitsfile *outfptr,
    1073                   int *status);
    1074  int imcomp_compress_tile (fitsfile *outfptr, long row, 
    1075      int datatype,  void *tiledata, long tilelen, long nx, long ny,
    1076      int nullcheck, void *nullval, int *status);
    1077  int imcomp_nullscale(int *idata, long tilelen, int nullflagval, int nullval,
    1078       double scale, double zero, int * status);
    1079  int imcomp_nullvalues(int *idata, long tilelen, int nullflagval, int nullval,
    1080       int * status);
    1081  int imcomp_scalevalues(int *idata, long tilelen, double scale, double zero,
    1082       int * status);
    1083  int imcomp_nullscalefloats(float *fdata, long tilelen, int *idata, 
    1084      double scale, double zero, int nullcheck, float nullflagval, int nullval,
    1085      int *status);
    1086  int imcomp_nullfloats(float *fdata, long tilelen, int *idata, int nullcheck,
    1087      float nullflagval, int nullval, int *status);
    1088  int imcomp_nullscaledoubles(double *fdata, long tilelen, int *idata, 
    1089      double scale, double zero, int nullcheck, double nullflagval, int nullval,
    1090      int *status);
    1091  int imcomp_nulldoubles(double *fdata, long tilelen, int *idata, int nullcheck,
    1092      double nullflagval, int nullval, int *status);
    1093      
    1094   
    1095  /*  image decompression routines */
    1096  int fits_read_compressed_img(fitsfile *fptr, 
    1097              int  datatype, LONGLONG  *fpixel,LONGLONG  *lpixel,long *inc,   
    1098              int nullcheck, void *nulval,  void *array, char *nullarray,
    1099              int  *anynul, int  *status);
    1100  int fits_read_compressed_pixels(fitsfile *fptr, 
    1101              int  datatype, LONGLONG  fpixel, LONGLONG npixels,   
    1102              int nullcheck, void *nulval,  void *array, char *nullarray,
    1103              int  *anynul, int  *status);
    1104  int fits_read_compressed_img_plane(fitsfile *fptr, int  datatype, 
    1105        int  bytesperpixel,  long   nplane, LONGLONG *firstcoord, LONGLONG *lastcoord, 
    1106        long *inc,  long *naxes,  int  nullcheck,  void *nullval, 
    1107        void *array, char *nullarray, int  *anynul, long *nread, int  *status);
    1108  
    1109  int imcomp_get_compressed_image_par(fitsfile *infptr, int *status);
    1110  int imcomp_decompress_tile (fitsfile *infptr,
    1111            int nrow, int tilesize, int datatype, int nullcheck,
    1112            void *nulval, void *buffer, char *bnullarray, int *anynul,
    1113            int *status);
    1114  int imcomp_copy_overlap (char *tile, int pixlen, int ndim,
    1115           long *tfpixel, long *tlpixel, char *bnullarray, char *image,
    1116           long *fpixel, long *lpixel, long *inc, int nullcheck, char *nullarray,
    1117           int *status);
    1118  int imcomp_test_overlap (int ndim, long *tfpixel, long *tlpixel, 
    1119           long *fpixel, long *lpixel, long *inc, int *status);
    1120  int imcomp_merge_overlap (char *tile, int pixlen, int ndim,
    1121           long *tfpixel, long *tlpixel, char *bnullarray, char *image,
    1122           long *fpixel, long *lpixel, int nullcheck, int *status);
    1123  int imcomp_decompress_img(fitsfile *infptr, fitsfile *outfptr, int datatype,
    1124           int  *status);
    1125  int fits_quantize_float (long row, float fdata[], long nx, long ny, int nullcheck,
    1126           float in_null_value, float quantize_level, 
    1127             int dither_method, int idata[], double *bscale, double *bzero,
    1128             int *iminval, int *imaxval);
    1129  int fits_quantize_double (long row, double fdata[], long nx, long ny, int nullcheck,
    1130           double in_null_value, float quantize_level,
    1131             int dither_method, int idata[], double *bscale, double *bzero,
    1132             int *iminval, int *imaxval);
    1133  int fits_rcomp(int a[], int nx, unsigned char *c, int clen,int nblock);
    1134  int fits_rcomp_short(short a[], int nx, unsigned char *c, int clen,int nblock);
    1135  int fits_rcomp_byte(signed char a[], int nx, unsigned char *c, int clen,int nblock);
    1136  int fits_rdecomp (unsigned char *c, int clen, unsigned int array[], int nx,
    1137               int nblock);
    1138  int fits_rdecomp_short (unsigned char *c, int clen, unsigned short array[], int nx,
    1139               int nblock);
    1140  int fits_rdecomp_byte (unsigned char *c, int clen, unsigned char array[], int nx,
    1141               int nblock);
    1142  int pl_p2li (int *pxsrc, int xs, short *lldst, int npix);
    1143  int pl_l2pi (short *ll_src, int xs, int *px_dst, int npix);
    1144  int fits_init_randoms(void);
    1145  int fits_unset_compression_param( fitsfile *fptr, int *status);
    1146  int fits_unset_compression_request( fitsfile *fptr, int *status);
    1147  int fitsio_init_lock(void);
    1148  
    1149  /* general driver routines */
    1150  
    1151  int urltype2driver(char *urltype, int *driver);
    1152  
    1153  void fits_dwnld_prog_bar(int flag);
    1154  int fits_net_timeout(int sec);
    1155  
    1156  int fits_register_driver( char *prefix,
    1157  	int (*init)(void),
    1158  	int (*fitsshutdown)(void),
    1159  	int (*setoptions)(int option),
    1160  	int (*getoptions)(int *options),
    1161  	int (*getversion)(int *version),
    1162  	int (*checkfile) (char *urltype, char *infile, char *outfile),
    1163  	int (*fitsopen)(char *filename, int rwmode, int *driverhandle),
    1164  	int (*fitscreate)(char *filename, int *driverhandle),
    1165  	int (*fitstruncate)(int driverhandle, LONGLONG filesize),
    1166  	int (*fitsclose)(int driverhandle),
    1167  	int (*fremove)(char *filename),
    1168          int (*size)(int driverhandle, LONGLONG *sizex),
    1169  	int (*flush)(int driverhandle),
    1170  	int (*seek)(int driverhandle, LONGLONG offset),
    1171  	int (*fitsread) (int driverhandle, void *buffer, long nbytes),
    1172  	int (*fitswrite)(int driverhandle, void *buffer, long nbytes));
    1173  
    1174  /* file driver I/O routines */
    1175  
    1176  int file_init(void);
    1177  int file_setoptions(int options);
    1178  int file_getoptions(int *options);
    1179  int file_getversion(int *version);
    1180  int file_shutdown(void);
    1181  int file_checkfile(char *urltype, char *infile, char *outfile);
    1182  int file_open(char *filename, int rwmode, int *driverhandle);
    1183  int file_compress_open(char *filename, int rwmode, int *hdl);
    1184  int file_openfile(char *filename, int rwmode, FILE **diskfile);
    1185  int file_create(char *filename, int *driverhandle);
    1186  int file_truncate(int driverhandle, LONGLONG filesize);
    1187  int file_size(int driverhandle, LONGLONG *filesize);
    1188  int file_close(int driverhandle);
    1189  int file_remove(char *filename);
    1190  int file_flush(int driverhandle);
    1191  int file_seek(int driverhandle, LONGLONG offset);
    1192  int file_read (int driverhandle, void *buffer, long nbytes);
    1193  int file_write(int driverhandle, void *buffer, long nbytes);
    1194  int file_is_compressed(char *filename);
    1195  
    1196  /* stream driver I/O routines */
    1197  
    1198  int stream_open(char *filename, int rwmode, int *driverhandle);
    1199  int stream_create(char *filename, int *driverhandle);
    1200  int stream_size(int driverhandle, LONGLONG *filesize);
    1201  int stream_close(int driverhandle);
    1202  int stream_flush(int driverhandle);
    1203  int stream_seek(int driverhandle, LONGLONG offset);
    1204  int stream_read (int driverhandle, void *buffer, long nbytes);
    1205  int stream_write(int driverhandle, void *buffer, long nbytes);
    1206  
    1207  /* memory driver I/O routines */
    1208  
    1209  int mem_init(void);
    1210  int mem_setoptions(int options);
    1211  int mem_getoptions(int *options);
    1212  int mem_getversion(int *version);
    1213  int mem_shutdown(void);
    1214  int mem_create(char *filename, int *handle);
    1215  int mem_create_comp(char *filename, int *handle);
    1216  int mem_openmem(void **buffptr, size_t *buffsize, size_t deltasize,
    1217                  void *(*memrealloc)(void *p, size_t newsize), int *handle);
    1218  int mem_createmem(size_t memsize, int *handle);
    1219  int stdin_checkfile(char *urltype, char *infile, char *outfile);
    1220  int stdin_open(char *filename, int rwmode, int *handle);
    1221  int stdin2mem(int hd);
    1222  int stdin2file(int hd);
    1223  int stdout_close(int handle);
    1224  int mem_compress_openrw(char *filename, int rwmode, int *hdl);
    1225  int mem_compress_open(char *filename, int rwmode, int *hdl);
    1226  int mem_compress_stdin_open(char *filename, int rwmode, int *hdl);
    1227  int mem_zuncompress_and_write(int hdl, void *buffer, long nbytes);
    1228  int mem_iraf_open(char *filename, int rwmode, int *hdl);
    1229  int mem_rawfile_open(char *filename, int rwmode, int *hdl);
    1230  int mem_size(int handle, LONGLONG *filesize);
    1231  int mem_truncate(int handle, LONGLONG filesize);
    1232  int mem_close_free(int handle);
    1233  int mem_close_keep(int handle);
    1234  int mem_close_comp(int handle);
    1235  int mem_seek(int handle, LONGLONG offset);
    1236  int mem_read(int hdl, void *buffer, long nbytes);
    1237  int mem_write(int hdl, void *buffer, long nbytes);
    1238  int mem_uncompress2mem(char *filename, FILE *diskfile, int hdl);
    1239  
    1240  int iraf2mem(char *filename, char **buffptr, size_t *buffsize, 
    1241        size_t *filesize, int *status);
    1242  
    1243  /* root driver I/O routines */
    1244  
    1245  int root_init(void);
    1246  int root_setoptions(int options);
    1247  int root_getoptions(int *options);
    1248  int root_getversion(int *version);
    1249  int root_shutdown(void);
    1250  int root_open(char *filename, int rwmode, int *driverhandle);
    1251  int root_create(char *filename, int *driverhandle);
    1252  int root_close(int driverhandle);
    1253  int root_flush(int driverhandle);
    1254  int root_seek(int driverhandle, LONGLONG offset);
    1255  int root_read (int driverhandle, void *buffer, long nbytes);
    1256  int root_write(int driverhandle, void *buffer, long nbytes);
    1257  int root_size(int handle, LONGLONG *filesize);
    1258  
    1259  /* http driver I/O routines */
    1260  
    1261  int http_checkfile(char *urltype, char *infile, char *outfile);
    1262  int http_open(char *filename, int rwmode, int *driverhandle);
    1263  int http_file_open(char *filename, int rwmode, int *driverhandle);
    1264  int http_compress_open(char *filename, int rwmode, int *driverhandle);
    1265  
    1266  /* https driver I/O routines */
    1267  int https_checkfile(char* urltype, char *infile, char *outfile);
    1268  int https_open(char *filename, int rwmode, int *driverhandle);
    1269  int https_file_open(char *filename, int rwmode, int *driverhandle);
    1270  void https_set_verbose(int flag);
    1271  
    1272  /* ftps driver I/O routines */
    1273  int ftps_checkfile(char* urltype, char *infile, char *outfile);
    1274  int ftps_open(char *filename, int rwmode, int *handle);
    1275  int ftps_file_open(char *filename, int rwmode, int *handle);
    1276  int ftps_compress_open(char *filename, int rwmode, int *driverhandle);
    1277  
    1278  /* ftp driver I/O routines */
    1279  
    1280  int ftp_checkfile(char *urltype, char *infile, char *outfile);
    1281  int ftp_open(char *filename, int rwmode, int *driverhandle);
    1282  int ftp_file_open(char *filename, int rwmode, int *driverhandle);
    1283  int ftp_compress_open(char *filename, int rwmode, int *driverhandle);
    1284  
    1285  int uncompress2mem(char *filename, FILE *diskfile,
    1286               char **buffptr, size_t *buffsize,
    1287               void *(*mem_realloc)(void *p, size_t newsize),
    1288               size_t *filesize, int *status);
    1289  
    1290  int uncompress2mem_from_mem(                                                
    1291               char *inmemptr,     
    1292               size_t inmemsize, 
    1293               char **buffptr,  
    1294               size_t *buffsize,  
    1295               void *(*mem_realloc)(void *p, size_t newsize), 
    1296               size_t *filesize,  
    1297               int *status);
    1298  
    1299  int uncompress2file(char *filename, 
    1300               FILE *indiskfile, 
    1301               FILE *outdiskfile, 
    1302               int *status);
    1303  
    1304  int compress2mem_from_mem(                                                
    1305               char *inmemptr,     
    1306               size_t inmemsize, 
    1307               char **buffptr,  
    1308               size_t *buffsize,  
    1309               void *(*mem_realloc)(void *p, size_t newsize), 
    1310               size_t *filesize,  
    1311               int *status);
    1312  
    1313  int compress2file_from_mem(                                                
    1314               char *inmemptr,     
    1315               size_t inmemsize, 
    1316               FILE *outdiskfile, 
    1317               size_t *filesize,   /* O - size of file, in bytes              */
    1318               int *status);
    1319  
    1320  
    1321  #ifdef HAVE_GSIFTP
    1322  /* prototypes for gsiftp driver I/O routines */
    1323  #include "drvrgsiftp.h"
    1324  #endif
    1325  
    1326  #ifdef HAVE_SHMEM_SERVICES
    1327  /* prototypes for shared memory driver I/O routines  */
    1328  #include "drvrsmem.h"
    1329  #endif
    1330  
    1331  /* A hack for nonunix machines, which lack strcasecmp and strncasecmp */
    1332  /* these functions are in fitscore.c */
    1333  int fits_strcasecmp (const char *s1, const char *s2       );
    1334  int fits_strncasecmp(const char *s1, const char *s2, size_t n);
    1335  /* "recalloc" which is a reallocator in the style of calloc */
    1336  void *fits_recalloc(void *ptr, size_t old_num, size_t new_num, size_t size);
    1337  
    1338  /* end of the entire "ifndef _FITSIO2_H" block */
    1339  #endif