IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Mar 17, 2005, 9:01:01 AM (21 years ago)
Author:
desonia
Message:

fixed psMetadataItemPrint to cast numeric values to specified format.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/astronomy/psMetadataIO.c

    r3381 r3441  
    99*  @author Ross Harman, MHPCC
    1010*
    11 *  @version $Revision: 1.22 $ $Name: not supported by cvs2svn $
    12 *  @date $Date: 2005-03-07 20:58:50 $
     11*  @version $Revision: 1.23 $ $Name: not supported by cvs2svn $
     12*  @date $Date: 2005-03-17 19:01:01 $
    1313*
    1414*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    315315    type = metadataItem->type;
    316316
    317     switch(type) {
    318     case PS_META_BOOL:
    319         fprintf(fd, format, metadataItem->data.B);
     317    // determining the format type
     318    char* fType = strchr(format,'%');
     319    if (fType == NULL) {
     320        // well, the format contains no reference to the metadataItem's data:
     321        // that is truly trival to do!
     322        fprintf(fd,format);
     323        return success;
     324    }
     325
     326    // skip over any format modifiers
     327    const char* formatEnd = format+strlen(format);
     328    while ( (fType < formatEnd) &&
     329        (strchr(" +-01234567890.$#, hlL",*(++fType)) != NULL) ) {}
     330
     331    #define METADATAITEM_NUMERIC_CAST(FORMAT_TYPE) { \
     332        switch(type) { \
     333        case PS_META_BOOL: \
     334            fprintf(fd, format, (FORMAT_TYPE) metadataItem->data.B); \
     335            break; \
     336        case PS_META_S32: \
     337            fprintf(fd,format,(FORMAT_TYPE)  metadataItem->data.S32); \
     338            break; \
     339        case PS_META_F32: \
     340            fprintf(fd, format,(FORMAT_TYPE)  metadataItem->data.F32); \
     341            break; \
     342        case PS_META_F64: \
     343            fprintf(fd, format,(FORMAT_TYPE) metadataItem->data.F64); \
     344            break; \
     345        default: \
     346            psError(PS_ERR_BAD_PARAMETER_TYPE,true, \
     347                    PS_ERRORTEXT_psMetadata_METATYPE_INVALID, (int)type); \
     348            success = false; \
     349        } \
     350    }
     351
     352    switch(*fType) {
     353    case 'd':
     354    case 'i':
     355    case 'c':
     356        METADATAITEM_NUMERIC_CAST(int)
    320357        break;
    321     case PS_META_S32:
    322         fprintf(fd,format, metadataItem->data.S32);
     358    case 'o':
     359    case 'u':
     360    case 'x':
     361    case 'X':
     362        METADATAITEM_NUMERIC_CAST(unsigned int)
    323363        break;
    324     case PS_META_F32:
    325         fprintf(fd, format, metadataItem->data.F32);
     364    case 'e':
     365    case 'E':
     366    case 'f':
     367    case 'F':
     368    case 'g':
     369    case 'G':
     370    case 'a':
     371    case 'A':
     372        METADATAITEM_NUMERIC_CAST(double)
    326373        break;
    327     case PS_META_F64:
    328         fprintf(fd, format, metadataItem->data.F64);
     374    case 's':
     375        if (type == PS_META_STR) {
     376            fprintf(fd,format,(char*)metadataItem->data.V);
     377        } else {
     378            psError(PS_ERR_BAD_PARAMETER_TYPE,true,
     379                    PS_ERRORTEXT_psMetadata_METATYPE_INVALID, (int)type);
     380            success = false;
     381        }
    329382        break;
    330     case PS_META_STR:
    331         fprintf(fd,format, (char*)metadataItem->data.V);
     383    case 'p':
     384        fprintf(fd,format,metadataItem->data.V);
    332385        break;
    333386    default:
    334         psError(PS_ERR_BAD_PARAMETER_TYPE,true, PS_ERRORTEXT_psMetadata_METATYPE_INVALID, (int)type);
    335         success = false;
     387        psError(PS_ERR_BAD_PARAMETER_TYPE, true,
     388                PS_ERRORTEXT_psMetadata_FORMAT_INVALID, *fType);
     389        break;
    336390    }
    337391
Note: See TracChangeset for help on using the changeset viewer.