diff options
Diffstat (limited to 'wcs/fitshead.h')
-rw-r--r-- | wcs/fitshead.h | 438 |
1 files changed, 438 insertions, 0 deletions
diff --git a/wcs/fitshead.h b/wcs/fitshead.h new file mode 100644 index 0000000..1212709 --- /dev/null +++ b/wcs/fitshead.h @@ -0,0 +1,438 @@ +/*** File fitshead.h FITS header access subroutines + *** January 9, 2007 + *** By Jessica Mink, jmink@cfa.harvard.edu + *** Harvard-Smithsonian Center for Astrophysics + *** Copyright (C) 1996-2007 + *** Smithsonian Astrophysical Observatory, Cambridge, MA, USA + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Correspondence concerning WCSTools should be addressed as follows: + Internet email: jmink@cfa.harvard.edu + Postal address: Jessica Mink + Smithsonian Astrophysical Observatory + 60 Garden St. + Cambridge, MA 02138 USA + */ + +/* Declarations for subroutines in hget.c, hput.c, and iget.c */ + +#ifndef _fitshead_h_ +#define _fitshead_h_ + +#include <sys/types.h> + +#ifdef __cplusplus /* C++ prototypes */ +extern "C" { +#endif + + +#ifdef __STDC__ /* Full ANSI prototypes */ + +/* Subroutines in hget.c */ + int hgeti2( /* Extract short value from FITS header */ + const char* hstring, /* FITS header string */ + const char* keyword, /* FITS keyword */ + short* val); /* short integer value (returned) */ + int hgeti4c( /* Extract int value from FITS header */ + const char* hstring, /* FITS header string */ + const char* keyword, /* FITS keyword */ + const char* wchar, /* WCS to use (A-Z or null) */ + int* val); /* integer value (returned) */ + int hgeti4( /* Extract int value from FITS header */ + const char* hstring, /* FITS header string */ + const char* keyword, /* FITS keyword */ + int* val); /* integer value (returned) */ + int hgetr4( /* Extract float value from FITS header */ + const char* hstring, /* FITS header string */ + const char* keyword, /* FITS keyword */ + float* val); /* float value (returned) */ + int hgetr8c( /* Extract double value from FITS header */ + const char* hstring, /* FITS header string */ + const char* keyword, /* FITS keyword */ + const char* wchar, /* WCS to use (A-Z or null) */ + double* val); /* double value (returned) */ + int hgetr8( /* Extract double value from FITS header */ + const char* hstring, /* FITS header string */ + const char* keyword, /* FITS keyword */ + double* val); /* double value (returned) */ + int hgetra( /* Extract right ascension from FITS header */ + const char* hstring, /* FITS header string */ + const char* keyword, /* FITS keyword */ + double* ra); /* RA in degrees (returned) */ + int hgetdec( /* Extract declination from FITS header */ + const char* hstring, /* FITS header string */ + const char* keyword, /* FITS keyword */ + double* dec); /* Dec in degrees (returned) */ + int hgetdate( /* Extract date from FITS header */ + const char* hstring, /* FITS header string */ + const char* keyword, /* FITS keyword */ + double* date); /* Date in fractional years (returned) */ + int hgetl( /* Extract boolean value from FITS header */ + const char* hstring, /* FITS header string */ + const char* keyword, /* FITS keyword */ + int* lval); /* 1 if T, 0 if F (returned) */ + int hgetsc( /* Extract string value from FITS header */ + const char* hstring, /* FITS header string */ + const char* keyword, /* FITS keyword */ + const char* wchar, /* WCS to use (A-Z or null) */ + const int lstr, /* maximum length of returned string */ + char* string); /* null-terminated string value (returned) */ + int hgets( /* Extract string value from FITS header */ + const char* hstring, /* FITS header string */ + const char* keyword, /* FITS keyword */ + const int lstr, /* maximum length of returned string */ + char* string); /* null-terminated string value (returned) */ + int hgetm ( /* Extract string from multiple keywords */ + const char* hstring, /* FITS header string */ + const char* keyword, /* FITS keyword */ + const int lstr, /* maximum length of returned string */ + char* string); /* null-terminated string value (returned) */ + int hgetndec( /* Find number of decimal places in FITS value*/ + const char* hstring, /* FITS header string */ + const char* keyword, /* FITS keyword */ + int* ndec); /* number of decimal places (returned) */ + + char* hgetc( /* Return pointer to value for FITS keyword */ + const char* hstring, /* FITS header string */ + const char* keyword); /* FITS keyword */ + + char* ksearch( /* Return pointer to keyword in FITS header */ + const char* hstring, /* FITS header string */ + const char* keyword); /* FITS keyword */ + char *blsearch ( + const char* hstring, /* FITS header string */ + const char* keyword); /* FITS keyword */ + + char *strsrch ( /* Find string s2 within string s1 */ + const char* s1, /* String to search */ + const char* s2); /* String to look for */ + char *strnsrch ( /* Find string s2 within string s1 */ + const char* s1, /* String to search */ + const char* s2, /* String to look for */ + const int ls1); /* Length of string being searched */ + + char *strcsrch ( /* Find string s2 within string s1 (no case) */ + const char* s1, /* String to search */ + const char* s2); /* String to look for */ + char *strncsrch ( /* Find string s2 within string s1 (no case) */ + const char* s1, /* String to search */ + const char* s2, /* String to look for */ + const int ls1); /* Length of string being searched */ + + int hlength( /* Set length of unterminated FITS header */ + const char *header, /* FITS header */ + const int lhead); /* Allocated length of FITS header */ + int gethlength( /* Get length of current FITS header */ + char* header); /* FITS header */ + + double str2ra( /* Return RA in degrees from string */ + const char* in); /* Character string (hh:mm:ss.sss or dd.dddd) */ + double str2dec( /* Return Dec in degrees from string */ + const char* in); /* Character string (dd:mm:ss.sss or dd.dddd) */ + + int isnum( /* Return 1 if number, else 0 */ + const char* string); /* Character string which may be a number */ + int notnum( /* Return 0 if number, else 1 */ + const char* string); /* Character string which may be a number */ + int numdec( /* Return number of decimal places in number */ + const char* string); /* Character string which may be a number */ + void strfix( /* Clean up extraneous characters in string */ + char* string, /* Character string which may be a number */ + int fillblank, /* If 1, blanks are replaced by underscores */ + int dropzero); /* If 1, drop trailing zeroes from string */ + + char *getltime(void); /* Return current local time in ISO format */ + char *getutime(void); /* Return current UT as an ISO-format string */ + +/* Subroutines in iget.c */ + int mgetstr( /* Extract string from multiline FITS keyword */ + const char* hstring, /* FITS header string */ + const char* mkey, /* FITS keyword root _n added for extra lines */ + const char* keyword, /* IRAF keyword */ + const int lstr, /* maximum length of returned string */ + char* string); /* null-terminated string value (returned) */ + int mgeti4( /* Extract int from multiline FITS keyword */ + const char* hstring, /* FITS header string */ + const char* mkey, /* FITS keyword root _n added for extra lines */ + const char* keyword, /* IRAF keyword */ + int* ival); /* int keyword value (returned) */ + int mgetr8( /* Extract double from multiline FITS keyword */ + const char* hstring, /* FITS header string */ + const char* mkey, /* FITS keyword root _n added for extra lines */ + const char* keyword, /* IRAF keyword */ + double* dval); /* double keyword value (returned) */ + int igeti4( /* Extract int from IRAF keyword string */ + const char* hstring, /* Multiline IRAF keyword string value */ + const char* keyword, /* IRAF keyword */ + int* val); /* int value (returned) */ + int igetr4( /* Extract float from IRAF keyword string */ + const char* hstring, /* Multiline IRAF keyword string value */ + const char* keyword, /* IRAF keyword */ + float* val); /* float value (returned) */ + int igetr8( /* Extract double from IRAF keyword string */ + const char* hstring, /* Multiline IRAF keyword string value */ + const char* keyword, /* IRAF keyword */ + double* val); /* double value (returned) */ + int igets( /* Extract string from IRAF keyword string */ + const char* hstring, /* Multiline IRAF keyword string value */ + const char* keyword, /* IRAF keyword */ + const int lstr, /* maximum length of returned string */ + char* string); /* null-terminated string value (returned) */ + char *igetc( /* Extract string from IRAF keyword string */ + const char* hstring, /* Multiline IRAF keyword string value */ + const char* keyword); /* IRAF keyword */ + +/* Subroutines in hput.c */ +/* All hput* routines return 0 if successful, else -1 */ + int hputi2( /* Implant short value into FITS header */ + char* hstring, /* FITS header string (modified) */ + const char* keyword, /* FITS keyword */ + short ival); /* short value */ + int hputi4( /* Implant int value into FITS header */ + char* hstring, /* FITS header string (modified) */ + const char* keyword, /* FITS keyword */ + const int ival); /* int value */ + int hputr4( /* Implant float value into FITS header */ + char* hstring, /* FITS header string (modified) */ + const char* keyword, /* FITS keyword */ + const float* rval); /* float (4 byte) value */ + int hputr8( /* Implant short into FITS header */ + char* hstring, /* FITS header string (modified) */ + const char* keyword, /* FITS keyword */ + const double dval); /* double value */ + int hputnr8( /* double with specified number of decimal places */ + char* hstring, /* FITS header string (modified) */ + const char* keyword, /* FITS keyword */ + const int ndec, /* Number of decimal places in keyword value */ + const double dval); /* double value */ + int hputs( /* Quoted character string into FITS header */ + char* hstring, /* FITS header string (modified) */ + const char* keyword, /* FITS keyword */ + const char* cval); /* Character string value */ + int hputm( /* Quoted character string, mutiple keywords */ + char* hstring, /* FITS header string (modified) */ + const char* keyword, /* FITS keyword */ + const char* cval); /* Character string value */ + int hputcom( /* Add comment to keyword line in FITS header */ + char* hstring, /* FITS header string (modified) */ + const char* keyword, /* FITS keyword */ + const char* comment); /* Comment string */ + int hputra( /* Right ascension in degrees into hh:mm:ss.sss */ + char* hstring, /* FITS header string (modified) */ + const char* keyword, /* FITS keyword */ + const double ra); /* Right ascension in degrees */ + int hputdec( /* Declination in degrees into dd:mm:ss.ss */ + char* hstring, /* FITS header string (modified) */ + const char* keyword, /* FITS keyword */ + const double dec); /* Declination in degrees */ + int hputl( /* Implant boolean value into FITS header */ + char* hstring, /* FITS header string (modified) */ + const char* keyword, /* FITS keyword */ + const int lval); /* 0->F, else ->T */ + int hputc( /* Implant character string without quotes */ + char* hstring, /* FITS header string (modified) */ + const char* keyword, /* FITS keyword */ + const char* cval); /* Character string value */ + + int hdel( /* Delete a keyword line from a FITS header */ + char* hstring, /* FITS header string (modified) */ + const char* keyword); /* FITS keyword to delete */ + int hadd( /* Add a keyword line from a FITS header */ + char* hplace, /* Location in FITS header string (modified) */ + const char* keyword); /* FITS keyword to add */ + int hchange( /* Change a keyword name in a FITS header */ + char* hstring, /* FITS header string (modified) */ + const char* keyword1, /* Current FITS keyword name */ + const char* keyword2); /* New FITS keyword name */ + + void ra2str( /* Convert degrees to hh:mm:ss.ss */ + char *string, /* Character string (returned) */ + int lstr, /* Length of string */ + const double ra, /* Right ascension in degrees */ + const int ndec); /* Number of decimal places in seconds */ + void dec2str( /* Convert degrees to dd:mm:ss.ss */ + char *string, /* Character string (returned) */ + int lstr, /* Length of string */ + const double dec, /* Declination in degrees */ + const int ndec); /* Number of decimal places in arcseconds */ + void deg2str( /* Format angle into decimal degrees string */ + char *string, /* Character string (returned) */ + int lstr, /* Length of string */ + const double deg, /* Angle in degrees */ + const int ndec); /* Number of decimal places in degrees */ + void num2str( /* Format number into string */ + char *string, /* Character string (returned) */ + const double num, /* Number */ + const int field, /* Total field size in characters */ + const int ndec); /* Number of decimal places */ + void setheadshrink( /* 0 to keep blank line when keyword deleted */ + const int hsh); /* 1 to shrink header by one line */ + void setleaveblank( /* 1 to keep blank line where keyword deleted */ + const int hsh); /* 0 to shrink header by one line */ + +#else /* K&R prototypes */ + +/* Subroutines in hget.c */ + +/* Extract a value from a FITS header for given keyword */ +extern int hgeti4(); /* int (Multiple WCS) */ +extern int hgeti4c(); /* int */ +extern int hgeti2(); /* short */ +extern int hgetr4(); /* float */ +extern int hgetr8(); /* double */ +extern int hgetr8c(); /* double (Multiple WCS) */ +extern int hgetra(); /* Right ascension in degrees from string */ +extern int hgetdec(); /* Declination in degrees from string */ +extern int hgetdate(); /* Date in years from FITS date string */ +extern int hgetl(); /* T->1, F->0 from FITS logical entry */ +extern int hgets(); /* Previously allocated string */ +extern int hgetsc(); /* Previously allocated string (Multiple WCS) */ +extern int hgetm(); /* Previously allocated string from multiple keywords */ +extern char *hgetc(); /* Return pointer to string */ +extern int hgetndec(); /* Number of decimal places in keyword value */ + +/* Subroutines to convert strings to RA and Dec in degrees */ +extern double str2ra(); +extern double str2dec(); + +/* Check to see whether a string is a number or not */ +extern int isnum(); +extern int notnum(); +extern int decnum(); + +/* Find given keyword entry in FITS header */ +extern char *ksearch(); + +/* Find beginning of fillable blank line before FITS header keyword */ +extern char *blsearch(); + +/* Search for substring s2 within string s1 */ +extern char *strsrch (); /* s1 null-terminated */ +extern char *strnsrch (); /* s1 ls1 characters long */ +extern char *strcsrch (); /* s1 null-terminated (case-insensitive) */ +extern char *strncsrch (); /* s1 ls1 characters long (case-insensitive) */ +extern void strfix(); /* Drop or change extraneous characters in string */ + +/* Set length of header which is not null-terminated */ +extern int hlength(); + +/* Get length of current FITS header */ +extern int gethlength(); + +/* Subroutines in iget.c */ +extern int mgetstr(); /* Previously allocated string from multiline keyword */ +extern int mgetr8(); /* double from multiline keyword */ +extern int mgeti4(); /* int from multiline keyword */ +extern int igeti4(); /* long integer from IRAF compound keyword value */ +extern int igetr4(); /* real from IRAF compound keyword value */ +extern int igetr8(); /* double from IRAF compound keyword value */ +extern int igets(); /* character string from IRAF compound keyword value */ +extern char *igetc(); /* Extract string from IRAF keyword string */ + +/* Subroutines in hput.c */ + +/* Implant a value into a FITS header for given keyword */ +extern int hputi4(); /* int */ +extern int hputi2(); /* short */ +extern int hputr4(); /* float */ +extern int hputr8(); /* double */ +extern int hputnr8(); /* double with specified number of decimal places */ +extern int hputra(); /* Right ascension in degrees into hh:mm:ss.sss */ +extern int hputdec(); /* Declination in degrees into dd:mm:ss.ss */ +extern int hputl(); /* 0 -> F, else T FITS logical entry */ +extern int hputs(); /* Quoted character string */ +extern int hputm(); /* Quoted character string into mutiple keywords */ +extern int hputc(); /* Character string without quotes (returns 0 if OK) */ +extern int hputcom(); /* Comment after keyword=value (returns 0 if OK) */ + +extern int hdel(); /* Delete a keyword line from a FITS header */ +extern int hadd(); /* Add a keyword line to a FITS header */ +extern int hchange(); /* Change a keyword name in a FITS header */ +extern void setheadshrink(); /* Set flag for deleted keyword space disposition*/ +extern void setleaveblank(); /* Set flag for deleted keyword space disposition*/ + +/* Subroutines to convert RA and Dec in degrees to strings */ +extern void ra2str(); +extern void dec2str(); + +extern void deg2str(); +extern void num2str(); +extern int numdec(); /* Return number of decimal places in number */ + +extern char *getltime(); /* Return current local time in ISO format */ +extern char *getutime(); /* Return current UT as an ISO-format string */ + +#endif /* __STDC__ */ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* fitshead_h_ */ + +/* Apr 26 1996 Add HGETDATE to get year from date string + * May 22 1996 Return double from STR2RA and STR2DEC + * May 31 1996 Use stream I/O for reading as well as writing + * Jun 12 1996 Add byte-swapping subroutines + * Jul 10 1996 FITS header now allocated in subroutines + * Jul 17 1996 Add FITS table column extraction subroutines + * Jul 19 1996 Add declarations for header implanting subroutines + * Aug 5 1996 Add HLENGTH for FITS headers which are not null-terminated + * Aug 5 1996 Add STRNSRCH for FITS headers which are not null-terminated + * Aug 6 1996 Add HPUTNR8 to save a specified number of decimal places + * Aug 6 1996 Add MOVEPIX, HDEL and HCHANGE declarations + * Nov 1 1996 Add DEG2STR + * Dec 12 1996 Add ISNUM + * + * Oct 10 1997 FITS file opening subroutines now return int instead of FILE * + * + * Mar 12 1998 Add NOTNUM + * Apr 30 1998 Clean up declarations and add more comments + * May 12 1998 Add MGETS, MGETR8, MGETI4 for IRAF multi-line keywords + * May 26 1998 Add HGETNDEC for number of decimal places in keyword value + * May 27 1998 Add BLSEARCH to find usable blank lines in header + * May 27 1998 Split off fitsio and imhio subroutines to fitsio.h + * May 27 1998 Add all subroutines in hget.c, hput.c, and iget.c to C++ dec. + * Jun 24 1998 Add string lengths to ra2str(), dec2str, and deg2str() calls + * Jun 25 1998 Fix other C++ declarations with added string lengths + * Aug 31 1998 Add current date subroutines getltime() and getutime() + * Oct 28 1998 Add missing hgetc() to non c++ declarations + * + * Oct 6 1999 Add gethlength() to return current size of header + * Oct 14 1999 All HPUT subroutines now return an error code, 0 if OK, else -1 + * Oct 15 1999 Add hputcom() declaration + * Oct 21 1999 Add hgetm() declaration + * + * Mar 22 2000 Add int to iget*() declarations + * Mar 27 2000 Add hputm() declaration + * + * Apr 3 2002 Add hgeti4c(), hgetr8c(), and hgetsc() + * Apr 8 2002 Include sys/types.h + * Aug 30 2002 Add strcsrch() and strncsrch() + * + * Sep 23 2003 Change mgets() to mgetstr() to avoid name collision at UCO Lick + * Oct 20 2003 Add numdec() to return the number of decimal places in a string + * + * Feb 26 2004 Add igetc(), formerly internal to iget.c + * Jul 1 2004 Add setheadshrink() for hdel() + * Aug 30 2004 Add numdec() to non-C++ declarations + * + * May 22 2006 Add setleaveblank() to leave blank line where keyword is deleted + * Jun 28 2006 Add strfix() to clean up characters in strings + * Nov 29 2006 Drop semicolon at end of C++ ifdef + * + * Jan 9 2007 Fix declarations so ANSI prototypes are not just for C++ + */ |