Changeset 15487 for trunk/Ohana/src/opihi/cmd.data/read_vectors.c
- Timestamp:
- Nov 6, 2007, 5:09:52 PM (19 years ago)
- File:
-
- 1 edited
-
trunk/Ohana/src/opihi/cmd.data/read_vectors.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/opihi/cmd.data/read_vectors.c
r7917 r15487 150 150 int read_table_vectors (int argc, char **argv, char *extname) { 151 151 152 int i, j, k, N bytes, Nread, Nextend, Ny, Binary;153 char type[16] ;152 int i, j, k, N, Nbytes, Nread, Nextend, Ny, Binary; 153 char type[16], ID[80], *CCDKeyword; 154 154 FTable table; 155 155 Header header; 156 156 Vector **vec; 157 157 158 table.buffer = NULL; 159 header.buffer = NULL; 160 161 CCDKeyword = NULL; 162 if ((N = get_argument (argc, argv, "-keyword"))) { 163 remove_argument (N, &argc, argv); 164 CCDKeyword = strcreate (argv[N]); 165 remove_argument (N, &argc, argv); 166 } 167 168 Nextend = -1; 169 if ((N = get_argument (argc, argv, "-extnum"))) { 170 remove_argument (N, &argc, argv); 171 Nextend = atoi (extname); 172 } 173 158 174 if (argc < 2) { 159 gprint (GP_ERR, "USAGE: read -fits extension name name ...\n");175 gprint (GP_ERR, "USAGE: read -fits extension [-extnum] [-keyword key] name name ...\n"); 160 176 gprint (GP_ERR, " ('extension' may be a name or number)\n"); 161 return (FALSE);162 } 163 164 if (f == (FILE *) NULL) return (FALSE);177 goto escape; 178 } 179 180 if (f == (FILE *) NULL) goto escape; 165 181 fseek (f, 0, SEEK_SET); 166 182 table.header = &header; 167 183 168 184 /* load appropriate extension (if extname is a number, use count) */ 169 if (isdigit(extname[0])) { 170 Nextend = atoi (extname); 171 172 for (i = 0; i <= Nextend; i++) { 173 if (!gfits_load_header (f, &header)) return (FALSE); 174 Nbytes = gfits_matrix_size (&header); 185 if (Nextend > -1) { 186 // first extension is PHU, cannot be a table. 187 // Nextend counts from 0 for first extension 188 if (!gfits_load_header (f, &header)) goto escape; 189 Nbytes = gfits_data_size (&header); 190 fseek (f, Nbytes, SEEK_CUR); 191 gfits_free_header (&header); 192 193 for (i = 0; i < Nextend; i++) { 194 if (!gfits_load_header (f, &header)) goto escape; 195 Nbytes = gfits_data_size (&header); 175 196 /* skip the prior data buffers */ 176 if (i < Nextend) { 197 fseek (f, Nbytes, SEEK_CUR); 198 gfits_free_header (&header); 199 } 200 if (!gfits_load_header (f, &header)) goto escape; 201 if (!gfits_fread_ftable_data (f, &table)) goto escape; 202 203 } else { 204 if (CCDKeyword == NULL) { 205 CCDKeyword = get_variable ("CCDKEYWORD"); 206 } 207 if (CCDKeyword == NULL) { 208 CCDKeyword = strcreate ("EXTNAME"); 209 } 210 211 while (1) { 212 if (!gfits_load_header (f, &header)) goto escape; 213 Nbytes = gfits_data_size (&header); 214 215 if (!gfits_scan (&header, CCDKeyword, "%s", 1, ID)) { 177 216 fseek (f, Nbytes, SEEK_CUR); 178 217 gfits_free_header (&header); 179 218 continue; 180 219 } 181 /* on the desired header, load buffer */ 182 ALLOCATE (table.buffer, char, Nbytes); 183 Nread = fread (table.buffer, sizeof (char), Nbytes, f); 184 if (Nread != Nbytes) { 185 gfits_free_table (&table); 220 if (strcmp (ID, extname)) { 221 fseek (f, Nbytes, SEEK_CUR); 186 222 gfits_free_header (&header); 187 return (FALSE); 188 } 189 table.size = Nbytes; 190 } 191 } else { 192 if (!gfits_fread_ftable (f, &table, extname)) return (FALSE); 223 continue; 224 } 225 if (!gfits_fread_ftable_data (f, &table)) goto escape; 226 break; 227 } 193 228 } 194 229 … … 196 231 Binary = FALSE; 197 232 gfits_scan (&header, "XTENSION", "%s", 1, type); 198 if (!strcmp (type, "BINTABLE")) { 199 Binary = TRUE; 200 } 233 if (strcmp (type, "BINTABLE") && strcmp (type, "TABLE")) { 234 gprint (GP_ERR, "specified extension (%s) is not a table\n", extname); 235 goto escape; 236 } 237 Binary = !strcmp (type, "BINTABLE"); 201 238 Ny = header.Naxis[1]; 202 239 … … 214 251 Nval = 0; 215 252 if (Binary) { 216 if (!gfits_get_bintable_column_type (&header, argv[i], type, &Nval)) return (FALSE);217 if (!gfits_get_bintable_column (&header, &table, argv[i], &data)) return (FALSE);253 if (!gfits_get_bintable_column_type (&header, argv[i], type, &Nval)) goto escape; 254 if (!gfits_get_bintable_column (&header, &table, argv[i], &data)) goto escape; 218 255 } else { 219 if (!gfits_get_table_column_type (&header, argv[i], type)) return (FALSE);220 if (!gfits_get_table_column (&header, &table, argv[i], &data)) return (FALSE);221 } 222 if (Nval == 0) return (FALSE);256 if (!gfits_get_table_column_type (&header, argv[i], type)) goto escape; 257 if (!gfits_get_table_column (&header, &table, argv[i], &data)) goto escape; 258 } 259 if (Nval == 0) goto escape; 223 260 224 261 ALLOCATE (vec, Vector *, Nval); … … 228 265 else 229 266 sprintf (name, "%s:%d", argv[i], j); 230 if ((vec[j] = SelectVector (name, ANYVECTOR, TRUE)) == NULL) return (FALSE);267 if ((vec[j] = SelectVector (name, ANYVECTOR, TRUE)) == NULL) goto escape; 231 268 REALLOCATE (vec[j][0].elements, float, MAX (Ny,1)); 232 269 vec[j][0].Nelements = Ny; … … 276 313 free (vec); 277 314 } 315 if (CCDKeyword != NULL) free (CCDKeyword); 278 316 gfits_free_table (&table); 279 317 gfits_free_header (&header); 280 318 return (TRUE); 319 320 escape: 321 if (CCDKeyword != NULL) free (CCDKeyword); 322 gfits_free_table (&table); 323 gfits_free_header (&header); 324 return (FALSE); 281 325 }
Note:
See TracChangeset
for help on using the changeset viewer.
