1 /* T E M P L A T E P A R S E R H E A D E R F I L E 2 ===================================================== 3 4 by Jerzy.Borkowski@obs.unige.ch 5 6 Integral Science Data Center 7 ch. d'Ecogia 16 8 1290 Versoix 9 Switzerland 10 11 14-Oct-98: initial release 12 16-Oct-98: reference to fitsio.h removed, also removed strings after #endif 13 directives to make gcc -Wall not to complain 14 20-Oct-98: added declarations NGP_XTENSION_SIMPLE and NGP_XTENSION_FIRST 15 24-Oct-98: prototype of ngp_read_line() function updated. 16 22-Jan-99: prototype for ngp_set_extver() function added. 17 20-Jun-2002 Wm Pence, added support for the HIERARCH keyword convention 18 (changed NGP_MAX_NAME from (20) to FLEN_KEYWORD) 19 */ 20 21 #ifndef GRPARSER_H_INCLUDED 22 #define GRPARSER_H_INCLUDED 23 24 #ifdef __cplusplus 25 extern "C" { 26 #endif 27 28 /* error codes - now defined in fitsio.h */ 29 30 /* common constants definitions */ 31 32 #define NGP_ALLOCCHUNK (1000) 33 #define NGP_MAX_INCLUDE (10) /* include file nesting limit */ 34 #define NGP_MAX_COMMENT (80) /* max size for comment */ 35 #define NGP_MAX_NAME FLEN_KEYWORD /* max size for KEYWORD (FITS limits it to 8 chars) */ 36 /* except HIERARCH can have longer effective keyword names */ 37 #define NGP_MAX_STRING (80) /* max size for various strings */ 38 #define NGP_MAX_ARRAY_DIM (999) /* max. number of dimensions in array */ 39 #define NGP_MAX_FNAME (1000) /* max size of combined path+fname */ 40 #define NGP_MAX_ENVFILES (10000) /* max size of CFITSIO_INCLUDE_FILES env. variable */ 41 42 #define NGP_TOKEN_UNKNOWN (-1) /* token type unknown */ 43 #define NGP_TOKEN_INCLUDE (0) /* \INCLUDE token */ 44 #define NGP_TOKEN_GROUP (1) /* \GROUP token */ 45 #define NGP_TOKEN_END (2) /* \END token */ 46 #define NGP_TOKEN_XTENSION (3) /* XTENSION token */ 47 #define NGP_TOKEN_SIMPLE (4) /* SIMPLE token */ 48 #define NGP_TOKEN_EOF (5) /* End Of File pseudo token */ 49 50 #define NGP_TTYPE_UNKNOWN (0) /* undef (yet) token type - invalid to print/write to disk */ 51 #define NGP_TTYPE_BOOL (1) /* boolean, it is 'T' or 'F' */ 52 #define NGP_TTYPE_STRING (2) /* something withing "" or starting with letter */ 53 #define NGP_TTYPE_INT (3) /* starting with digit and not with '.' */ 54 #define NGP_TTYPE_REAL (4) /* digits + '.' */ 55 #define NGP_TTYPE_COMPLEX (5) /* 2 reals, separated with ',' */ 56 #define NGP_TTYPE_NULL (6) /* NULL token, format is : NAME = / comment */ 57 #define NGP_TTYPE_RAW (7) /* HISTORY/COMMENT/8SPACES + comment string without / */ 58 59 #define NGP_FOUND_EQUAL_SIGN (1) /* line contains '=' after keyword name */ 60 61 #define NGP_FORMAT_OK (0) /* line format OK */ 62 #define NGP_FORMAT_ERROR (1) /* line format error */ 63 64 #define NGP_NODE_INVALID (0) /* default node type - invalid (to catch errors) */ 65 #define NGP_NODE_IMAGE (1) /* IMAGE type */ 66 #define NGP_NODE_ATABLE (2) /* ASCII table type */ 67 #define NGP_NODE_BTABLE (3) /* BINARY table type */ 68 69 #define NGP_NON_SYSTEM_ONLY (0) /* save all keywords except NAXIS,BITPIX,etc.. */ 70 #define NGP_REALLY_ALL (1) /* save really all keywords */ 71 72 #define NGP_XTENSION_SIMPLE (1) /* HDU defined with SIMPLE T */ 73 #define NGP_XTENSION_FIRST (2) /* this is first extension in template */ 74 75 #define NGP_LINE_REREAD (1) /* reread line */ 76 77 #define NGP_BITPIX_INVALID (-12345) /* default BITPIX (to catch errors) */ 78 79 /* common macro definitions */ 80 81 #ifdef NGP_PARSER_DEBUG_MALLOC 82 83 #define ngp_alloc(x) dal_malloc(x) 84 #define ngp_free(x) dal_free(x) 85 #define ngp_realloc(x,y) dal_realloc(x,y) 86 87 #else 88 89 #define ngp_alloc(x) malloc(x) 90 #define ngp_free(x) free(x) 91 #define ngp_realloc(x,y) realloc(x,y) 92 93 #endif 94 95 /* type definitions */ 96 97 typedef struct NGP_RAW_LINE_STRUCT 98 { char *line; 99 char *name; 100 char *value; 101 int type; 102 char *comment; 103 int format; 104 int flags; 105 } NGP_RAW_LINE; 106 107 108 typedef union NGP_TOKVAL_UNION 109 { char *s; /* space allocated separately, be careful !!! */ 110 char b; 111 int i; 112 double d; 113 struct NGP_COMPLEX_STRUCT 114 { double re; 115 double im; 116 } c; /* complex value */ 117 } NGP_TOKVAL; 118 119 120 typedef struct NGP_TOKEN_STRUCT 121 { int type; 122 char name[NGP_MAX_NAME]; 123 NGP_TOKVAL value; 124 char comment[NGP_MAX_COMMENT]; 125 } NGP_TOKEN; 126 127 128 typedef struct NGP_HDU_STRUCT 129 { int tokcnt; 130 NGP_TOKEN *tok; 131 } NGP_HDU; 132 133 134 typedef struct NGP_TKDEF_STRUCT 135 { char *name; 136 int code; 137 } NGP_TKDEF; 138 139 140 typedef struct NGP_EXTVER_TAB_STRUCT 141 { char *extname; 142 int version; 143 } NGP_EXTVER_TAB; 144 145 146 /* globally visible variables declarations */ 147 148 extern NGP_RAW_LINE ngp_curline; 149 extern NGP_RAW_LINE ngp_prevline; 150 151 extern int ngp_extver_tab_size; 152 extern NGP_EXTVER_TAB *ngp_extver_tab; 153 154 155 /* globally visible functions declarations */ 156 157 int ngp_get_extver(char *extname, int *version); 158 int ngp_set_extver(char *extname, int version); 159 int ngp_delete_extver_tab(void); 160 int ngp_line_from_file(FILE *fp, char **p); 161 int ngp_free_line(void); 162 int ngp_free_prevline(void); 163 int ngp_read_line_buffered(FILE *fp); 164 int ngp_unread_line(void); 165 int ngp_extract_tokens(NGP_RAW_LINE *cl); 166 int ngp_include_file(char *fname); 167 int ngp_read_line(int ignore_blank_lines); 168 int ngp_keyword_is_write(NGP_TOKEN *ngp_tok); 169 int ngp_keyword_all_write(NGP_HDU *ngph, fitsfile *ffp, int mode); 170 int ngp_hdu_init(NGP_HDU *ngph); 171 int ngp_hdu_clear(NGP_HDU *ngph); 172 int ngp_hdu_insert_token(NGP_HDU *ngph, NGP_TOKEN *newtok); 173 int ngp_append_columns(fitsfile *ff, NGP_HDU *ngph, int aftercol); 174 int ngp_read_xtension(fitsfile *ff, int parent_hn, int simple_mode); 175 int ngp_read_group(fitsfile *ff, char *grpname, int parent_hn); 176 177 /* top level API function - now defined in fitsio.h */ 178 179 #ifdef __cplusplus 180 } 181 #endif 182 183 #endif 184