IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 6789


Ignore:
Timestamp:
Apr 4, 2006, 4:36:46 PM (20 years ago)
Author:
drobbin
Message:

* empty log message *

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/rel10_ifa/psLib/src/fits/psFitsHeader.c

    r6728 r6789  
    77 *  @author Robert DeSonia, MHPCC
    88 *
    9  *  @version $Revision: 1.2.4.3 $ $Name: not supported by cvs2svn $
    10  *  @date $Date: 2006-03-30 00:31:04 $
     9 *  @version $Revision: 1.2.4.4 $ $Name: not supported by cvs2svn $
     10 *  @date $Date: 2006-04-05 02:36:46 $
    1111 *
    1212 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    174174}
    175175
    176 psMetadata* psFitsReadHeaderSet(const psFits* fits)
     176psMetadata* psFitsReadHeaderSet(psMetadata* out, const psFits* fits)
    177177{
    178178    if (fits == NULL) {
    179179        psError(PS_ERR_BAD_PARAMETER_NULL, true,
    180180                PS_ERRORTEXT_psFits_NULL);
     181        psFree(out);
    181182        return NULL;
    182183    }
    183184
    184     psMetadata* out = psMetadataAlloc();
     185    if (out == NULL) {
     186        out = psMetadataAlloc();
     187    }
    185188
    186189    int size = psFitsGetSize(fits);
     
    251254                break;
    252255            }
     256        case PS_DATA_S8:
     257            fits_update_key(fits->fd,
     258                            TBYTE,
     259                            item->name,
     260                            &item->data.S8,
     261                            item->comment,
     262                            &status);
     263            break;
     264        case PS_DATA_S16:
     265            fits_update_key(fits->fd,
     266                            TSHORT,
     267                            item->name,
     268                            &item->data.S16,
     269                            item->comment,
     270                            &status);
     271            break;
    253272        case PS_DATA_S32:
    254273            fits_update_key(fits->fd,
     
    259278                            &status);
    260279            break;
     280        case PS_DATA_U8: {
     281                unsigned short int temp = item->data.U8;
     282                fits_update_key(fits->fd,
     283                                TUSHORT,
     284                                item->name,
     285                                &temp,
     286                                item->comment,
     287                                &status);
     288            }
     289            break;
     290        case PS_DATA_U16:
     291            fits_update_key(fits->fd,
     292                            TUSHORT,
     293                            item->name,
     294                            &item->data.U16,
     295                            item->comment,
     296                            &status);
     297            break;
     298        case PS_DATA_U32:
     299            fits_update_key(fits->fd,
     300                            TUINT,
     301                            item->name,
     302                            &item->data.U32,
     303                            item->comment,
     304                            &status);
     305            break;
    261306        case PS_DATA_F32:
    262307            fits_update_key(fits->fd,
     
    276321            break;
    277322        case PS_DATA_STRING:
    278             if (!strcmp (item->name, "COMMENT")) {
    279                 fits_write_comment(fits->fd, item->comment, &status);
    280                 break;
    281             }
    282             if (!strcmp (item->name, "HISTORY")) {
    283                 fits_write_history(fits->fd, item->comment, &status);
    284                 break;
    285             }
    286323            fits_update_key(fits->fd,
    287324                            TSTRING,
     
    305342    }
    306343
     344    psFree(iter);
     345
    307346    return true;
    308347}
    309348
     349bool psFitsHeaderValidate(psMetadata *header)
     350{
     351    bool valid = true;
     352    int status;
     353
     354    if (header == NULL) {
     355        psError(PS_ERR_BAD_PARAMETER_NULL, true,
     356                PS_ERRORTEXT_psFits_METADATA_NULL);
     357        return false;
     358    }
     359
     360    //transverse the metadata list and inspect at each key
     361
     362    psListIterator* iter = psListIteratorAlloc(header->list,PS_LIST_HEAD,true);
     363    psMetadataItem* item;
     364    while ( (item=psListGetAndIncrement(iter)) != NULL ) {
     365        psDataType type = item->type;
     366
     367        if (type > PS_DATA_STRING) { // i.e., a non-primitive type
     368            valid = false;
     369        }
     370
     371        if (strlen(item->name) > 8) {
     372            item->name[8] = '\0'; // truncate to 8 characters
     373        }
     374
     375        fits_uppercase(item->name); // make uppercase
     376
     377        // now, let's see if CFITSIO thinks this is a good keyword...
     378        status = 0;
     379        if (fits_test_keyword(item->name,&status) != 0) {
     380            valid = false;
     381        }
     382    }
     383
     384    psFree(iter);
     385
     386    return valid;
     387}
Note: See TracChangeset for help on using the changeset viewer.