Changeset 5141
- Timestamp:
- Sep 26, 2005, 4:27:32 PM (21 years ago)
- Location:
- trunk/psLib
- Files:
-
- 2 edited
-
src/fits/psFits.c (modified) (6 diffs)
-
test/fits/tst_psFits.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/fits/psFits.c
r5136 r5141 7 7 * @author Robert DeSonia, MHPCC 8 8 * 9 * @version $Revision: 1.4 6$ $Name: not supported by cvs2svn $10 * @date $Date: 2005-09-2 6 21:13:22$9 * @version $Revision: 1.47 $ $Name: not supported by cvs2svn $ 10 * @date $Date: 2005-09-27 02:27:28 $ 11 11 * 12 12 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 172 172 break; 173 173 case PS_DATA_STRING: 174 *fitsType = psStringCopy(" 1A");174 *fitsType = psStringCopy("A"); 175 175 break; 176 176 // XXX: Handle other types, e.g., Vectors, etc. … … 1497 1497 bool found = false; 1498 1498 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++) { 1500 1501 fItem = (psMetadataItem*)(columns->data[n]); 1501 1502 if (strcmp(item->name, fItem->name) == 0) { … … 1507 1508 psArrayAdd(columns, columns->nalloc, item); 1508 1509 } 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)) { 1510 1511 // 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 1513 1515 } 1514 1516 … … 1537 1539 if (fitsType[strlen(fitsType)-1] == 'A') { 1538 1540 // string type -- append length to the type. 1539 psString Append(&fitsType,"%d",strlen(((psMetadataItem*)columns->data[n])->data.V));1541 psStringPrepend(&fitsType,"%d",strlen(((psMetadataItem*)columns->data[n])->data.V)+1); 1540 1542 } 1541 1543 columnTypes->data[n] = fitsType; … … 1567 1569 int row; 1568 1570 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); 1656 1580 } 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 1665 1583 1, // firstrow 1666 1584 1, // firstelem 1667 1585 table->n, // nelements 1668 (char**)col->data,1586 col->data.S32, 1669 1587 &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 1672 1671 } 1673 1672 -
trunk/psLib/test/fits/tst_psFits.c
r5138 r5141 6 6 * @author Robert DeSonia, MHPCC 7 7 * 8 * @version $Revision: 1. 6$ $Name: not supported by cvs2svn $9 * @date $Date: 2005-09-2 6 22:54:40$8 * @version $Revision: 1.7 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2005-09-27 02:27:32 $ 10 10 * 11 11 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 195 195 196 196 char* str = NULL; 197 psStringAppend(&str,"row=%d",row );197 psStringAppend(&str,"row=%d",row+1); 198 198 psMetadataAdd(header,PS_LIST_TAIL, "MYSTR", 199 199 PS_DATA_STRING,
Note:
See TracChangeset
for help on using the changeset viewer.
