- Timestamp:
- Mar 19, 2010, 5:35:25 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/largefiles.20100314/Ohana/src/libfits/header/F_scan.c
r27295 r27368 2 2 # include <gfitsio.h> 3 3 4 // this only scans the regular and non-boolean fields 4 5 int gfits_scan (Header *header, char *field, char *mode, int N,...) { 5 6 … … 13 14 } 14 15 16 // alternate version for the special types (boolean, comments, COMMENT) 17 int gfits_scan_alt (Header *header, char *field, char *mode, int N,...) { 18 19 int status; 20 va_list argp; 21 22 va_start (argp, N); 23 status = gfits_vscan_alt (header, field, mode, N, argp); 24 va_end (argp); 25 return (status); 26 } 27 28 // this only scans the regular and non-boolean fields 15 29 int gfits_vscan (Header *header, char *field, char *mode, int N, va_list argp) { 16 30 … … 27 41 } 28 42 29 /* non-data entry (COMMENT, HISTORY) */30 if (!strcmp (mode, "%S")) {31 strncpy (va_arg (argp, char *), p + 8, FT_HISTORY_LENGTH);32 return (TRUE);33 }34 35 43 /* all others require '=' in column 8 */ 36 44 if (p[8] != '=') return (FALSE); 37 38 /* comment from data line */39 if (!strcmp (mode, "%C")) {40 q = gfits_keyword_end (p) + 3;41 q = MIN (p + 80, q);42 bzero (tmp, 81);43 Nchar = MIN (80, p + 80 - q);44 memcpy (tmp, q, Nchar);45 stripwhite (tmp);46 strcpy (va_arg (argp, char *), tmp);47 return (TRUE);48 }49 45 50 46 /* extract data into char array (exclude containing ' chars) */ … … 61 57 } 62 58 63 /* boolean data, requires int target */64 if (!strcmp (mode, "%t")) {65 s = gfits_keyword_start (p);66 if (*s == 'T') {67 *va_arg (argp, int *) = TRUE;68 return (TRUE);69 }70 if (*s == 'F') {71 *va_arg (argp, int *) = FALSE;72 return (TRUE);73 }74 }75 76 59 /* remaining options are numerical data */ 77 60 /* need to interpret 1.0d5 as 1.0e5 */ … … 105 88 } 106 89 90 // alternate version for the special types (boolean, comments, COMMENT) 91 int gfits_vscan_alt (Header *header, char *field, char *mode, int N, va_list argp) { 92 93 char *p, *q, *s, tmp[81]; 94 int Nchar, status; 95 96 /* find the correct line with field */ 97 p = gfits_header_field (header, field, N); 98 if (p == NULL) { 99 status = gfits_vscan_hierarch (header, field, mode, N, argp); 100 return (status); 101 } 102 103 /* non-data entry (COMMENT, HISTORY) */ 104 if (!strcmp (mode, "%S")) { 105 strncpy (va_arg (argp, char *), p + 8, FT_HISTORY_LENGTH); 106 return (TRUE); 107 } 108 109 /* all others require '=' in column 8 */ 110 if (p[8] != '=') return (FALSE); 111 112 /* comment from data line */ 113 if (!strcmp (mode, "%C")) { 114 q = gfits_keyword_end (p) + 3; 115 q = MIN (p + 80, q); 116 bzero (tmp, 81); 117 Nchar = MIN (80, p + 80 - q); 118 memcpy (tmp, q, Nchar); 119 stripwhite (tmp); 120 strcpy (va_arg (argp, char *), tmp); 121 return (TRUE); 122 } 123 124 /* boolean data, requires int target */ 125 if (!strcmp (mode, "%t")) { 126 s = gfits_keyword_start (p); 127 if (*s == 'T') { 128 *va_arg (argp, int *) = TRUE; 129 return (TRUE); 130 } 131 if (*s == 'F') { 132 *va_arg (argp, int *) = FALSE; 133 return (TRUE); 134 } 135 } 136 137 /* no valid mode found */ 138 return (FALSE); 139 } 140 107 141 # define HIERARCH_LENGTH 71 108 142 int gfits_vscan_hierarch (Header *header, char *field, char *mode, int N, va_list argp) {
Note:
See TracChangeset
for help on using the changeset viewer.
