Changeset 2971 for trunk/psLib/src/fits/psFits.c
- Timestamp:
- Jan 13, 2005, 9:50:45 AM (22 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/fits/psFits.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/fits/psFits.c
r2967 r2971 7 7 * @author Robert DeSonia, MHPCC 8 8 * 9 * @version $Revision: 1. 6$ $Name: not supported by cvs2svn $10 * @date $Date: 2005-01-13 02:08:30$9 * @version $Revision: 1.7 $ $Name: not supported by cvs2svn $ 10 * @date $Date: 2005-01-13 19:50:44 $ 11 11 * 12 12 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 25 25 26 26 #define MAX_STRING_LENGTH 256 // maximum length string for FITS routines 27 28 static char* standardFitsKeys[] = { 29 "SIMPLE", 30 "BITPIX", 31 "NAXIS", 32 "NAXIS1", 33 "NAXIS2", 34 "NAXIS3", 35 "EXTEND", 36 "COMMENT", 37 "EXTNAME", 38 "HDUNAME", 39 NULL 40 }; 27 41 28 42 static psElemType convertFitsToPsType(int datatype) … … 457 471 psBool tempBool; 458 472 psBool success; 473 psBool stdKey; 459 474 for (int i = 1; i <= numKeys; i++) { 460 475 461 476 fits_read_keyn(fits->p_fd, i, keyName, keyValue, keyComment, &status); 462 fits_get_keytype(keyValue, &keyType, &status); 477 478 stdKey = false; 479 480 int stdKeyIdx = 0; 481 while (standardFitsKeys[stdKeyIdx] != NULL && ! stdKey) { 482 if (strcmp(keyName,standardFitsKeys[stdKeyIdx++]) == 0) { 483 stdKey = true; 484 } 485 } 486 487 if (keyValue[0] != 0) { // blank values are not handled by fits_get_keytype 488 fits_get_keytype(keyValue, &keyType, &status); 489 } else { 490 keyType = 'C'; 491 } 463 492 if (status != 0) { 464 493 break; 465 494 } 466 495 467 switch (keyType) { 468 case 'I': 469 success = psMetadataAdd(out, 470 PS_LIST_TAIL, 471 keyName, 472 PS_TYPE_S32, 473 PS_META_PRIMITIVE, 474 keyComment, 475 atoi(keyValue)); 476 break; 477 case 'F': 478 success = psMetadataAdd(out, 479 PS_LIST_TAIL, 480 keyName, 481 PS_TYPE_F64, 482 PS_META_PRIMITIVE, 483 keyComment, 484 atof(keyValue)); 485 break; 486 case 'C': 487 success = psMetadataAdd(out, 488 PS_LIST_TAIL, 489 keyName, 490 PS_TYPE_U8, 491 PS_META_STR, 492 keyComment, 493 keyValue); 494 break; 495 case 'L': 496 tempBool = (keyValue[0] == 'T') ? 1 : 0; 497 success = psMetadataAdd(out, 498 PS_LIST_TAIL, 499 keyName, 500 PS_TYPE_BOOL, 501 PS_META_PRIMITIVE, 502 keyComment, 503 tempBool); 504 break; 505 case 'U': 506 case 'X': 507 default: 508 psError(PS_ERR_IO, true, 509 PS_ERRORTEXT_psFits_METATYPE_INVALID, 510 keyType); 511 return out; 512 } 513 514 if (!success) { 515 psError(PS_ERR_UNKNOWN, false, 516 PS_ERRORTEXT_psFits_METADATA_ADD_FAILED, 517 keyName); 518 return out; 519 } 496 if (! stdKey) { 497 switch (keyType) { 498 case 'X': // bit 499 case 'I': // short int. 500 case 'J': // int. 501 case 'B': // byte 502 success = psMetadataAdd(out, 503 PS_LIST_TAIL, 504 keyName, 505 PS_TYPE_S32, 506 PS_META_PRIMITIVE, 507 keyComment, 508 atoi(keyValue)); 509 break; 510 case 'U': // unsigned int. may not fit in a psS32 511 case 'K': // long int. can't all fit in a psS32 512 case 'F': 513 success = psMetadataAdd(out, 514 PS_LIST_TAIL, 515 keyName, 516 PS_TYPE_F64, 517 PS_META_PRIMITIVE, 518 keyComment, 519 atof(keyValue)); 520 break; 521 case 'C': 522 success = psMetadataAdd(out, 523 PS_LIST_TAIL, 524 keyName, 525 PS_TYPE_U8, 526 PS_META_STR, 527 keyComment, 528 keyValue); 529 break; 530 case 'L': 531 tempBool = (keyValue[0] == 'T') ? 1 : 0; 532 success = psMetadataAdd(out, 533 PS_LIST_TAIL, 534 keyName, 535 PS_TYPE_BOOL, 536 PS_META_PRIMITIVE, 537 keyComment, 538 tempBool); 539 break; 540 default: 541 psError(PS_ERR_IO, true, 542 PS_ERRORTEXT_psFits_METATYPE_INVALID, 543 keyType); 544 return out; 545 } 546 547 if (!success) { 548 psError(PS_ERR_UNKNOWN, false, 549 PS_ERRORTEXT_psFits_METADATA_ADD_FAILED, 550 keyName); 551 return out; 552 } 553 } 554 520 555 } 521 556
Note:
See TracChangeset
for help on using the changeset viewer.
