IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 5141


Ignore:
Timestamp:
Sep 26, 2005, 4:27:32 PM (21 years ago)
Author:
desonia
Message:

fixed various bugs in writing of text to table.

Location:
trunk/psLib
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/fits/psFits.c

    r5136 r5141  
    77 *  @author Robert DeSonia, MHPCC
    88 *
    9  *  @version $Revision: 1.46 $ $Name: not supported by cvs2svn $
    10  *  @date $Date: 2005-09-26 21:13:22 $
     9 *  @version $Revision: 1.47 $ $Name: not supported by cvs2svn $
     10 *  @date $Date: 2005-09-27 02:27:28 $
    1111 *
    1212 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    172172        break;
    173173    case PS_DATA_STRING:
    174         *fitsType = psStringCopy("1A");
     174        *fitsType = psStringCopy("A");
    175175        break;
    176176        // XXX: Handle other types, e.g., Vectors, etc.
     
    14971497                    bool found = false;
    14981498                    psMetadataItem* fItem = NULL;
    1499                     for (int n=0; n < columns->n && ! found; n++) {
     1499                    int n;
     1500                    for (n=0; n < columns->n && ! found; n++) {
    15001501                        fItem = (psMetadataItem*)(columns->data[n]);
    15011502                        if (strcmp(item->name, fItem->name) == 0) {
     
    15071508                        psArrayAdd(columns, columns->nalloc, item);
    15081509                    } else if (item->type == PS_DATA_STRING &&
    1509                                strlen(fItem->data.V) > strlen(item->data.V)) {
     1510                               strlen(fItem->data.V) < strlen(item->data.V)) {
    15101511                        // got to keep the longest string value as to know what size to create the table column
    1511                         psMemDecrRefCounter(item->data.V);
    1512                         item->data.V = psMemIncrRefCounter(fItem->data.V);
     1512                        psMemDecrRefCounter(fItem);
     1513                        columns->data[n] = psMemIncrRefCounter(item);
     1514
    15131515                    }
    15141516
     
    15371539        if (fitsType[strlen(fitsType)-1] == 'A') {
    15381540            // string type -- append length to the type.
    1539             psStringAppend(&fitsType,"%d",strlen(((psMetadataItem*)columns->data[n])->data.V));
     1541            psStringPrepend(&fitsType,"%d",strlen(((psMetadataItem*)columns->data[n])->data.V)+1);
    15401542        }
    15411543        columnTypes->data[n] = fitsType;
     
    15671569        int row;
    15681570        item = columns->data[n];
    1569         if (PS_DATA_IS_PRIMITIVE(item->type)) {
    1570             psVector* col = NULL;
    1571             psArray* colArray = NULL;
    1572             switch (item->type) {
    1573             case PS_DATA_S32:
    1574                 col = psVectorAlloc(table->n, PS_TYPE_S32);
    1575                 for (row = 0; row < table->n; row++) {
    1576                     col->data.S32[row] = psMetadataLookupS32(NULL,
    1577                                          table->data[row],
    1578                                          item->name);
    1579                 }
    1580                 fits_write_col_int(fits->fd,
    1581                                    n+1, // column number
    1582                                    1, // firstrow
    1583                                    1, // firstelem
    1584                                    table->n, // nelements
    1585                                    col->data.S32,
    1586                                    &status);
    1587                 break;
    1588 
    1589             case PS_DATA_F32:
    1590                 col = psVectorAlloc(table->n, PS_TYPE_F32);
    1591                 for (row = 0; row < table->n; row++) {
    1592                     col->data.F32[row] = psMetadataLookupF32(NULL,
    1593                                          table->data[row],
    1594                                          item->name);
    1595                 }
    1596                 fits_write_col_flt(fits->fd,
    1597                                    n+1, // column number
    1598                                    1, // firstrow
    1599                                    1, // firstelem
    1600                                    table->n, // nelements
    1601                                    col->data.F32,
    1602                                    &status);
    1603                 break;
    1604 
    1605             case PS_DATA_F64:
    1606                 col = psVectorAlloc(table->n, PS_TYPE_F64);
    1607                 for (row = 0; row < table->n; row++) {
    1608                     col->data.F64[row] = psMetadataLookupF64(NULL,
    1609                                          table->data[row],
    1610                                          item->name);
    1611                 }
    1612                 fits_write_col_dbl(fits->fd,
    1613                                    n+1, // column number
    1614                                    1, // firstrow
    1615                                    1, // firstelem
    1616                                    table->n, // nelements
    1617                                    col->data.F64,
    1618                                    &status);
    1619                 break;
    1620 
    1621             case PS_DATA_BOOL:
    1622                 col = psVectorAlloc(table->n, PS_TYPE_BOOL);
    1623                 for (row = 0; row < table->n; row++) {
    1624                     col->data.S8[row] = psMetadataLookupBool(NULL,
    1625                                         table->data[row],
    1626                                         item->name);
    1627                 }
    1628                 fits_write_col_log(fits->fd,
    1629                                    n+1, // column number
    1630                                    1, // firstrow
    1631                                    1, // firstelem
    1632                                    table->n, // nelements
    1633                                    (char*)col->data.S8,
    1634                                    &status);
    1635                 break;
    1636 
    1637             case PS_DATA_STRING:
    1638                 colArray = psArrayAlloc(table->n);
    1639                 for (row = 0; row < table->n; row++) {
    1640                     colArray->data[row] = psMetadataLookupStr(NULL,
    1641                                           table->data[row],
    1642                                           item->name);
    1643                 }
    1644                 fits_write_col_str(fits->fd,
    1645                                    n+1,
    1646                                    1,
    1647                                    1,
    1648                                    table->n,
    1649                                    (char**)colArray->data,
    1650                                    &status);
    1651                 break;
    1652 
    1653             default:
    1654                 // XXX: error message?
    1655                 break;
     1571        psVector* col = NULL;
     1572        psArray* colArray = NULL;
     1573        switch (item->type) {
     1574        case PS_DATA_S32:
     1575            col = psVectorAlloc(table->n, PS_TYPE_S32);
     1576            for (row = 0; row < table->n; row++) {
     1577                col->data.S32[row] = psMetadataLookupS32(NULL,
     1578                                     table->data[row],
     1579                                     item->name);
    16561580            }
    1657             psFree(col);
    1658         } else if (item->type == PS_DATA_STRING) {
    1659             psArray* col = psArrayAlloc(table->n);
    1660             for (row = 0; row < table->n; row++) {
    1661                 col->data[row] = item->data.V;
    1662             }
    1663             fits_write_col_str(fits->fd,
    1664                                n, // column number
     1581            fits_write_col_int(fits->fd,
     1582                               n+1, // column number
    16651583                               1, // firstrow
    16661584                               1, // firstelem
    16671585                               table->n, // nelements
    1668                                (char**)col->data,
     1586                               col->data.S32,
    16691587                               &status);
    1670             psFree(col);
    1671         }
     1588            break;
     1589
     1590        case PS_DATA_F32:
     1591            col = psVectorAlloc(table->n, PS_TYPE_F32);
     1592            for (row = 0; row < table->n; row++) {
     1593                col->data.F32[row] = psMetadataLookupF32(NULL,
     1594                                     table->data[row],
     1595                                     item->name);
     1596            }
     1597            fits_write_col_flt(fits->fd,
     1598                               n+1, // column number
     1599                               1, // firstrow
     1600                               1, // firstelem
     1601                               table->n, // nelements
     1602                               col->data.F32,
     1603                               &status);
     1604            break;
     1605
     1606        case PS_DATA_F64:
     1607            col = psVectorAlloc(table->n, PS_TYPE_F64);
     1608            for (row = 0; row < table->n; row++) {
     1609                col->data.F64[row] = psMetadataLookupF64(NULL,
     1610                                     table->data[row],
     1611                                     item->name);
     1612            }
     1613            fits_write_col_dbl(fits->fd,
     1614                               n+1, // column number
     1615                               1, // firstrow
     1616                               1, // firstelem
     1617                               table->n, // nelements
     1618                               col->data.F64,
     1619                               &status);
     1620            break;
     1621
     1622        case PS_DATA_BOOL:
     1623            col = psVectorAlloc(table->n, PS_TYPE_BOOL);
     1624            for (row = 0; row < table->n; row++) {
     1625                col->data.S8[row] = psMetadataLookupBool(NULL,
     1626                                    table->data[row],
     1627                                    item->name);
     1628            }
     1629            fits_write_col_log(fits->fd,
     1630                               n+1, // column number
     1631                               1, // firstrow
     1632                               1, // firstelem
     1633                               table->n, // nelements
     1634                               (char*)col->data.S8,
     1635                               &status);
     1636            break;
     1637
     1638        case PS_DATA_STRING:
     1639            colArray = psArrayAlloc(table->n);
     1640            for (row = 0; row < table->n; row++) {
     1641                colArray->data[row] = psMemIncrRefCounter(
     1642                                          psMetadataLookupStr(NULL,
     1643                                                              table->data[row],
     1644                                                              item->name));
     1645            }
     1646            fits_write_col_str(fits->fd,
     1647                               n+1,
     1648                               1,
     1649                               1,
     1650                               table->n,
     1651                               (char**)colArray->data,
     1652                               &status);
     1653            psFree(colArray);
     1654            break;
     1655
     1656        default:
     1657            // XXX: error message?
     1658            break;
     1659        }
     1660        psFree(col);
     1661        if (status != 0) {
     1662            char fitsErr[MAX_STRING_LENGTH];
     1663            (void)fits_get_errstatus(status, fitsErr);
     1664            psError(PS_ERR_IO, true,
     1665                    PS_ERRORTEXT_psFits_WRITE_FAILED,
     1666                    fits->filename, fitsErr);
     1667            psFree(columns);
     1668            return false;
     1669        }
     1670
    16721671    }
    16731672
  • trunk/psLib/test/fits/tst_psFits.c

    r5138 r5141  
    66*  @author Robert DeSonia, MHPCC
    77*
    8 *  @version $Revision: 1.6 $ $Name: not supported by cvs2svn $
    9 *  @date $Date: 2005-09-26 22:54:40 $
     8*  @version $Revision: 1.7 $ $Name: not supported by cvs2svn $
     9*  @date $Date: 2005-09-27 02:27:32 $
    1010*
    1111*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    195195
    196196        char* str = NULL;
    197         psStringAppend(&str,"row=%d",row);
     197        psStringAppend(&str,"row=%d",row+1);
    198198        psMetadataAdd(header,PS_LIST_TAIL, "MYSTR",
    199199                      PS_DATA_STRING,
Note: See TracChangeset for help on using the changeset viewer.