IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jan 18, 2008, 3:04:13 PM (19 years ago)
Author:
Paul Price
Message:

Moving all options on FITS I/O into an additional structure, psFitsOptions. The idea is that this can be carried around independently of the FITS structure, which is only created when opening a file.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/pap_branch_080117/psLib/src/fits/psFits.c

    r16131 r16141  
    77 *  @author Robert DeSonia, MHPCC
    88 *
    9  *  @version $Revision: 1.76.2.2 $ $Name: not supported by cvs2svn $
    10  *  @date $Date: 2008-01-18 03:37:50 $
     9 *  @version $Revision: 1.76.2.3 $ $Name: not supported by cvs2svn $
     10 *  @date $Date: 2008-01-19 01:04:13 $
    1111 *
    1212 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    7878        fitsClose(fits);
    7979    }
    80     psFree (fits->extword);
     80    psFree(fits->options);
    8181}
    8282
     
    160160
    161161    psFits* fits = psAlloc(sizeof(psFits));
     162    psMemSetDeallocator(fits, (psFreeFunc)fitsFree);
     163
    162164    fits->fd = fptr;
    163165    fits->writable = (iomode == READWRITE);
    164     fits->extword = NULL;
    165     fits->conventions.compression = true;
    166     fits->conventions.psBitpix = true;
    167 
    168     fits->floatType = PS_FITS_FLOAT_NONE;
    169     fits->bitpix = 0;
    170     fits->scaling = PS_FITS_SCALE_NONE;
    171     fits->fuzz = true;
    172     fits->bscale = 1.0;
    173     fits->bzero = 0.0;
    174     fits->mean = NAN;
    175     fits->stdev = NAN;
    176     fits->stdevBits = 4;
    177     fits->stdevNum = 5.0;
    178 
    179     psMemSetDeallocator(fits,(psFreeFunc)fitsFree);
     166
     167    fits->options = NULL;
    180168
    181169    return fits;
     170}
     171
     172
     173static void fitsOptionsFree(psFitsOptions *options)
     174{
     175    psFree(options->extword);
     176}
     177
     178
     179psFitsOptions *psFitsOptionsAlloc(void)
     180{
     181    psFitsOptions *options = psAlloc(sizeof(psFitsOptions)); // Options, to return
     182    psMemSetDeallocator(options, (psFreeFunc)fitsOptionsFree);
     183
     184    options->extword = NULL;
     185
     186    options->conventions.compression = true;
     187    options->conventions.psBitpix = true;
     188
     189    options->floatType = PS_FITS_FLOAT_NONE;
     190
     191    options->bitpix = 0;
     192
     193    options->scaling = PS_FITS_SCALE_NONE;
     194    options->fuzz = true;
     195    options->bscale = 1.0;
     196    options->bzero = 0.0;
     197    options->mean = NAN;
     198    options->stdev = NAN;
     199    options->stdevBits = 4;
     200    options->stdevNum = 5.0;
     201
     202    return options;
    182203}
    183204
     
    237258}
    238259
    239 bool psFitsSetExtnameWord (psFits *fits, const char *extword)
     260bool psFitsSetExtnameWord(psFits *fits, const char *extword)
    240261{
    241262    PS_ASSERT_PTR_NON_NULL(fits,    false);
    242263    PS_ASSERT_PTR_NON_NULL(extword, false);
    243264
    244     psFree (fits->extword);
    245     fits->extword = psStringCopy (extword);
     265    if (!fits->options) {
     266        fits->options = psFitsOptionsAlloc();
     267    }
     268
     269    psFree(fits->options->extword);
     270    fits->options->extword = psStringCopy(extword);
    246271    return true;
    247272}
     
    261286    int status = 0;
    262287
    263     if (!fits->conventions.compression && !fits->extword) {
     288    psFitsOptions *options = fits->options; // FITS options
     289    if (options && !options->conventions.compression && !options->extword) {
    264290        // User wants to use cfitsio.  Good luck to them!
    265291        if (fits_movnam_hdu(fits->fd, ANY_HDU, (char*)extname, 0, &status) != 0) {
     
    270296    }
    271297
    272     bool ignoreCI = (fits->conventions.compression &&
     298    bool ignoreCI = (options->conventions.compression &&
    273299                     (strcmp(extname, "COMPRESSED_IMAGE") != 0)); // Ignore COMPRESSED_IMAGE extension name?
    274     char *extword = (fits->extword ? fits->extword : "EXTNAME"); // Word to use as extension name
     300    char *extword = (options->extword ? options->extword : "EXTNAME"); // Word to use as extension name
    275301
    276302#if 0
     
    375401    char name[MAX_STRING_LENGTH];
    376402
    377     char *extword = (fits->extword == NULL) ? defaultExtword : fits->extword;
     403    psFitsOptions *options = fits->options; // FITS options
     404    char *extword = (!options || !options->extword) ? defaultExtword : options->extword;
    378405
    379406    if (fits_read_key_str(fits->fd, extword, name, NULL, &status) != 0) {
    380         psError(PS_ERR_BAD_PARAMETER_NULL, true,
    381                 _("Header keyword %s is not found"), extword);
     407        psError(PS_ERR_BAD_PARAMETER_NULL, true, _("Header keyword %s is not found"), extword);
    382408        return NULL;
    383409    }
     
    392418    int status = 0;
    393419
    394     char *extword = (fits->extword == NULL) ? defaultExtword : fits->extword;
     420    psFitsOptions *options = fits->options; // FITS options
     421    char *extword = (!options || !options->extword) ? defaultExtword : options->extword;
    395422
    396423    if (fits_update_key_str(fits->fd, extword, (char*)name, NULL, &status) != 0) {
    397424        char fitsErr[MAX_STRING_LENGTH];
    398425        (void)fits_get_errstatus(status, fitsErr);
    399         psError(PS_ERR_IO, true,
    400                 _("Could not write data to file. CFITSIO Error: %s"),
    401                 fitsErr);
     426        psError(PS_ERR_IO, true, _("Could not write data to file. CFITSIO Error: %s"), fitsErr);
    402427        return false;
    403428    }
     
    414439
    415440    // move to the specified HDU
    416     if (! psFitsMoveExtNum(fits,extnum,relative) ) {
    417         psError(PS_ERR_BAD_PARAMETER_VALUE, false,
    418                 "Failed to delete HDU #%d",
    419                 extnum);
     441    if (!psFitsMoveExtNum(fits, extnum, relative) ) {
     442        psError(PS_ERR_BAD_PARAMETER_VALUE, false, "Failed to delete HDU #%d", extnum);
    420443        return false;
    421444    }
     
    427450        char fitsErr[MAX_STRING_LENGTH];
    428451        (void)fits_get_errstatus(status, fitsErr);
    429         psError(PS_ERR_IO, true,
    430                 _("Could not write data to file. CFITSIO Error: %s"),
    431                 fitsErr);
     452        psError(PS_ERR_IO, true, _("Could not write data to file. CFITSIO Error: %s"), fitsErr);
    432453        return false;
    433454    }
Note: See TracChangeset for help on using the changeset viewer.