Index: /trunk/psLib/test/astronomy/tst_psMetadata_01.c
===================================================================
--- /trunk/psLib/test/astronomy/tst_psMetadata_01.c	(revision 1388)
+++ /trunk/psLib/test/astronomy/tst_psMetadata_01.c	(revision 1389)
@@ -4,23 +4,23 @@
 *
 *  This test driver contains the following tests for psMetadata:
-*     A) 
-*     B) 
-*     C) 
-*     D) 
-*     E) 
-*     F) 
-*     G) 
-*     H) 
-*     I) 
-*     J) 
-*     K) 
-*     L) 
-*     M) 
-*     N) 
+*     Test A - Read 1st hdr from simple FITS file
+*     Test B - Read 2nd hdr from complex FITS file
+*     Test C - Read named hdr from complex FITS file
+*     D
+*     E
+*     F
+*     G
+*     H
+*     I
+*     J
+*     K
+*     L
+*     M
+*     N
 *
 *  @author  Ross Harman, MHPCC
 *
-*  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
-*  @date  $Date: 2004-07-31 00:41:59 $
+*  @version $Revision: 1.2 $  $Name: not supported by cvs2svn $
+*  @date  $Date: 2004-08-05 02:25:23 $
 *
 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -32,12 +32,184 @@
 #include <string.h>
 
+void printListInt(psList* list)
+{
+    int* data = NULL;
+    bool first = true;
+
+    psListSetIterator(list,PS_LIST_HEAD);
+    data = psListGetCurrent(list);
+
+    while ( data != NULL ) {
+        if (!first) {
+            printf(", %d",*(int*)data);
+        } else {
+            printf("%d",*(int*)data);
+            first = false;
+        }
+        data = psListGetNext(list);
+    }
+
+    printf(".\n");
+}
+
+static void printMetadata(psMetadata *metadata)
+{
+    psList *mdList = NULL;
+    psHash *mdTable = NULL;
+    psMetadataItem *entryChild = NULL;
+
+    mdList = metadata->list;
+    mdTable = metadata->table;
+    if(mdList==NULL || mdTable==NULL) {
+        printf("ERROR: Null collection metadata found\n");
+    }
+
+    psListSetIterator( mdList, PS_LIST_HEAD );
+    entryChild = psListGetCurrent( mdList );
+    while ( entryChild != NULL ) {
+        printf("Key Name: %8s  ", entryChild->name);
+        printf("Key Type: %2d  ", entryChild->type);
+
+        switch (entryChild->type ) {
+        case PS_META_BOOL:
+            printf("Key Value: %15d  ", entryChild->data.B);
+            break;
+        case PS_META_S32:
+            printf("Key Value: %15d  ", entryChild->data.S32);
+            break;
+        case PS_META_F32:
+            printf("Key Value: %15.3f  ", entryChild->data.F32);
+            break;
+        case PS_META_F64:
+            printf("Key Value: %15.3f  ", entryChild->data.F64);
+            break;
+        case PS_META_STR:
+            printf("Key Value: %15s  ", (char*)entryChild->data.V);
+            break;
+        case PS_META_IMG:
+        case PS_META_JPEG:
+        case PS_META_PNG:
+        case PS_META_ASTROM:
+        case PS_META_UNKNOWN:
+            printf("Value: unknown ");
+            break;
+        default:
+            printf("Bad type: %d ", entryChild->type);
+        }
+        printf("Key Comment: %s\n", entryChild->comment);
+
+        entryChild = psListGetNext( mdList);
+    }
+}
+
+
 int main( int argc, char* argv[] )
 {
-
-
-    // Test A -
-    printPositiveTestHeader( stdout, "psMetadata", "" );
-    printFooter( stdout, "psMetadata", "", true );
-    
+    int status = 0;
+    char fitsErr[ 256 ];
+    psMetadata *metadata1 = NULL;
+    psMetadata *metadata2 = NULL;
+    psMetadata *metadata3 = NULL;
+    fitsfile *fptr;
+
+
+    // Test A - Read 1st hdr from simple FITS file
+
+    /* Header contents for header_1.fits:
+
+        SIMPLE  =                    T / file does conform to FITS standard
+        BITPIX  =                    8 / number of bits per data pixel
+        NAXIS   =                    0 / number of data axes
+        HISTORY File modified by user 'harman' with fv  on 2004-08-04T11:11:18
+        END
+    */
+    printPositiveTestHeader(stdout, "psMetadata", "Test A - Read 1st hdr from simple FITS file");
+    fits_open_file(&fptr, "header_1.fits", READONLY, &status);
+    fits_get_errstatus( status, fitsErr );
+    status = 0;
+    printf("FITS file open status: %s\n\n",fitsErr);
+    metadata1 = psMetadataFReadHeader(metadata1, NULL, 1, fptr);
+    printMetadata(metadata1);
+    printFooter(stdout, "psMetadata", "Test A - Read 1st hdr from simple FITS file", true);
+    printf("\n\n");
+
+
+    // Test B - Test B - Read 2nd hdr from complex FITS file
+
+    /* Header contents for header_2.fits:
+
+        SIMPLE  =                    T / file does conform to FITS standard
+        BITPIX  =                  -64 / number of bits per data pixel
+        NAXIS   =                    1 / number of data axes
+        NAXIS1  =                   64 / length of data axis 1
+        EXTEND  =                    T / FITS dataset may contain extensions
+        COMMENT   FITS (Flexible Image Transport System) format is defined in 'Astronomy
+        COMMENT   and Astrophysics', volume 376, page 359; bibcode: 2001A&A...376..359H
+        END
+        <DATA>
+
+        XTENSION= 'IMAGE   '           / IMAGE extension
+        BITPIX  =                  -64 / number of bits per data pixel
+        NAXIS   =                    1 / number of data axes
+        NAXIS1  =                   64 / length of data axis 1
+        PCOUNT  =                    0 / required keyword; must = 0
+        GCOUNT  =                    1 / required keyword; must = 1
+        BITPIX  =                  -64 / number of bits per data pixel
+        EXTNAME = 'MY_DATA_1'
+        HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:14:45
+        HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:15:29
+        HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:21:18
+        HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:21:46
+        END
+        <DATA>
+
+        XTENSION= 'IMAGE   '           / IMAGE extension
+        BITPIX  =                  -64 / number of bits per data pixel
+        NAXIS   =                    1 / number of data axes
+        NAXIS1  =                   64 / length of data axis 1
+        PCOUNT  =                    0 / required keyword; must = 0
+        GCOUNT  =                    1 / required keyword; must = 1
+        EXTNAME = 'MY_DATA_2'
+        HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:22:12
+        HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:22:52
+        END
+        <DATA>
+    */
+    printPositiveTestHeader(stdout, "psMetadata", "Test B - Read 2nd hdr from complex FITS file");
+    fits_open_file(&fptr, "header_2.fits", READONLY, &status);
+    fits_get_errstatus( status, fitsErr );
+    status = 0;
+    printf("FITS file open status: %s\n\n",fitsErr);
+    metadata2 = psMetadataFReadHeader(metadata2, NULL, 2, fptr);
+    printMetadata(metadata2);
+    printFooter(stdout, "psMetadata", "Test B - Read 2nd hdr from complex FITS file", true);
+    printf("\n\n");
+
+
+    //Test C - Read named hdr from complex FITS file
+    printPositiveTestHeader(stdout, "psMetadata", "Test C - Read named hdr from complex FITS file");
+    fits_open_file(&fptr, "header_2.fits", READONLY, &status);
+    fits_get_errstatus( status, fitsErr );
+    status = 0;
+    printf("FITS file open status: %s\n\n",fitsErr);
+    metadata3 = psMetadataFReadHeader(metadata3, "MY_DATA_2", 0, fptr);
+    printMetadata(metadata3);
+    printFooter(stdout, "psMetadata", "Test C - Read named hdr from complex FITS file", true);
+    printf("\n\n");
+
+
+    // Test - Free psMetadata
+    printPositiveTestHeader(stdout, "psMetadata", "Test - Free psMetadata");
+    psFree(metadata1);
+    psFree(metadata2);
+    psFree(metadata3);
+    psMemCheckLeaks(0, NULL, stdout);
+    psMemCheckCorruption(0);
+    int nBad = psMemCheckCorruption(0);
+    if(nBad) {
+        printf("ERROR: Found %d bad memory blocks\n", nBad);
+    }
+    printFooter(stdout, "psMetadata", "Test - Free psMetadata", true);
+
     return 0;
 }
Index: /trunk/psLib/test/astronomy/verified/tst_psMetadata_01.stdout
===================================================================
--- /trunk/psLib/test/astronomy/verified/tst_psMetadata_01.stdout	(revision 1388)
+++ /trunk/psLib/test/astronomy/verified/tst_psMetadata_01.stdout	(revision 1389)
@@ -1,9 +1,71 @@
 /***************************** TESTPOINT ******************************************\
 *             TestFile: tst_psMetadata_01.c                                        *
-*            TestPoint: psMetadata{}                                               *
+*            TestPoint: psMetadata{Test A - Read 1st hdr from simple FITS file}    *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+FITS file open status: OK - no error
+
+Key Name:  HISTORY  Key Type:  5  Key Value:                  Key Comment: File modified by user 'harman' with fv  on 2004-08-04T11:11:18
+Key Name:    NAXIS  Key Type:  2  Key Value:               0  Key Comment: number of data axes
+Key Name:   BITPIX  Key Type:  2  Key Value:               8  Key Comment: number of bits per data pixel
+Key Name:   SIMPLE  Key Type:  1  Key Value:               1  Key Comment: file does conform to FITS standard
+
+---> TESTPOINT PASSED (psMetadata{Test A - Read 1st hdr from simple FITS file} | tst_psMetadata_01.c)
+
+
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_01.c                                        *
+*            TestPoint: psMetadata{Test B - Read 2nd hdr from complex FITS file}   *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+FITS file open status: OK - no error
+
+Key Name:  HISTORY  Key Type:  5  Key Value:                  Key Comment: File modified by user 'harman' with fv  on 2004-08-04T13:21:46
+Key Name:  HISTORY  Key Type:  5  Key Value:                  Key Comment: File modified by user 'harman' with fv  on 2004-08-04T13:21:18
+Key Name:  HISTORY  Key Type:  5  Key Value:                  Key Comment: File modified by user 'harman' with fv  on 2004-08-04T13:15:29
+Key Name:  HISTORY  Key Type:  5  Key Value:                  Key Comment: File modified by user 'harman' with fv  on 2004-08-04T13:14:45
+Key Name:  EXTNAME  Key Type:  5  Key Value:     'MY_DATA_1'  Key Comment: 
+Key Name:   BITPIX  Key Type:  2  Key Value:             -64  Key Comment: number of bits per data pixel
+Key Name:   GCOUNT  Key Type:  2  Key Value:               1  Key Comment: required keyword; must = 1
+Key Name:   PCOUNT  Key Type:  2  Key Value:               0  Key Comment: required keyword; must = 0
+Key Name:   NAXIS1  Key Type:  2  Key Value:              64  Key Comment: length of data axis 1
+Key Name:    NAXIS  Key Type:  2  Key Value:               1  Key Comment: number of data axes
+Key Name:   BITPIX  Key Type:  2  Key Value:             -64  Key Comment: number of bits per data pixel
+Key Name: XTENSION  Key Type:  5  Key Value:      'IMAGE   '  Key Comment: IMAGE extension
+
+---> TESTPOINT PASSED (psMetadata{Test B - Read 2nd hdr from complex FITS file} | tst_psMetadata_01.c)
+
+
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_01.c                                        *
+*            TestPoint: psMetadata{Test C - Read named hdr from complex FITS file} *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+FITS file open status: OK - no error
+
+Key Name:  COMMENT  Key Type:  5  Key Value:                  Key Comment:   and Astrophysics', volume 376, page 359; bibcode: 2001A&A...376..359H
+Key Name:  COMMENT  Key Type:  5  Key Value:                  Key Comment:   FITS (Flexible Image Transport System) format is defined in 'Astronomy
+Key Name:   EXTEND  Key Type:  1  Key Value:               1  Key Comment: FITS dataset may contain extensions
+Key Name:   NAXIS1  Key Type:  2  Key Value:              64  Key Comment: length of data axis 1
+Key Name:    NAXIS  Key Type:  2  Key Value:               1  Key Comment: number of data axes
+Key Name:   BITPIX  Key Type:  2  Key Value:             -64  Key Comment: number of bits per data pixel
+Key Name:   SIMPLE  Key Type:  1  Key Value:               1  Key Comment: file does conform to FITS standard
+
+---> TESTPOINT PASSED (psMetadata{Test C - Read named hdr from complex FITS file} | tst_psMetadata_01.c)
+
+
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_01.c                                        *
+*            TestPoint: psMetadata{Test - Free psMetadata}                         *
 *             TestType: Positive                                                   *
 \**********************************************************************************/
 
 
----> TESTPOINT PASSED (psMetadata{} | tst_psMetadata_01.c)
+---> TESTPOINT PASSED (psMetadata{Test - Free psMetadata} | tst_psMetadata_01.c)
 
Index: /trunk/psLib/test/collections/tst_psMetadata_01.c
===================================================================
--- /trunk/psLib/test/collections/tst_psMetadata_01.c	(revision 1388)
+++ /trunk/psLib/test/collections/tst_psMetadata_01.c	(revision 1389)
@@ -4,23 +4,23 @@
 *
 *  This test driver contains the following tests for psMetadata:
-*     A) 
-*     B) 
-*     C) 
-*     D) 
-*     E) 
-*     F) 
-*     G) 
-*     H) 
-*     I) 
-*     J) 
-*     K) 
-*     L) 
-*     M) 
-*     N) 
+*     Test A - Read 1st hdr from simple FITS file
+*     Test B - Read 2nd hdr from complex FITS file
+*     Test C - Read named hdr from complex FITS file
+*     D
+*     E
+*     F
+*     G
+*     H
+*     I
+*     J
+*     K
+*     L
+*     M
+*     N
 *
 *  @author  Ross Harman, MHPCC
 *
-*  @version $Revision: 1.1 $  $Name: not supported by cvs2svn $
-*  @date  $Date: 2004-07-31 00:41:59 $
+*  @version $Revision: 1.2 $  $Name: not supported by cvs2svn $
+*  @date  $Date: 2004-08-05 02:25:23 $
 *
 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -32,12 +32,184 @@
 #include <string.h>
 
+void printListInt(psList* list)
+{
+    int* data = NULL;
+    bool first = true;
+
+    psListSetIterator(list,PS_LIST_HEAD);
+    data = psListGetCurrent(list);
+
+    while ( data != NULL ) {
+        if (!first) {
+            printf(", %d",*(int*)data);
+        } else {
+            printf("%d",*(int*)data);
+            first = false;
+        }
+        data = psListGetNext(list);
+    }
+
+    printf(".\n");
+}
+
+static void printMetadata(psMetadata *metadata)
+{
+    psList *mdList = NULL;
+    psHash *mdTable = NULL;
+    psMetadataItem *entryChild = NULL;
+
+    mdList = metadata->list;
+    mdTable = metadata->table;
+    if(mdList==NULL || mdTable==NULL) {
+        printf("ERROR: Null collection metadata found\n");
+    }
+
+    psListSetIterator( mdList, PS_LIST_HEAD );
+    entryChild = psListGetCurrent( mdList );
+    while ( entryChild != NULL ) {
+        printf("Key Name: %8s  ", entryChild->name);
+        printf("Key Type: %2d  ", entryChild->type);
+
+        switch (entryChild->type ) {
+        case PS_META_BOOL:
+            printf("Key Value: %15d  ", entryChild->data.B);
+            break;
+        case PS_META_S32:
+            printf("Key Value: %15d  ", entryChild->data.S32);
+            break;
+        case PS_META_F32:
+            printf("Key Value: %15.3f  ", entryChild->data.F32);
+            break;
+        case PS_META_F64:
+            printf("Key Value: %15.3f  ", entryChild->data.F64);
+            break;
+        case PS_META_STR:
+            printf("Key Value: %15s  ", (char*)entryChild->data.V);
+            break;
+        case PS_META_IMG:
+        case PS_META_JPEG:
+        case PS_META_PNG:
+        case PS_META_ASTROM:
+        case PS_META_UNKNOWN:
+            printf("Value: unknown ");
+            break;
+        default:
+            printf("Bad type: %d ", entryChild->type);
+        }
+        printf("Key Comment: %s\n", entryChild->comment);
+
+        entryChild = psListGetNext( mdList);
+    }
+}
+
+
 int main( int argc, char* argv[] )
 {
-
-
-    // Test A -
-    printPositiveTestHeader( stdout, "psMetadata", "" );
-    printFooter( stdout, "psMetadata", "", true );
-    
+    int status = 0;
+    char fitsErr[ 256 ];
+    psMetadata *metadata1 = NULL;
+    psMetadata *metadata2 = NULL;
+    psMetadata *metadata3 = NULL;
+    fitsfile *fptr;
+
+
+    // Test A - Read 1st hdr from simple FITS file
+
+    /* Header contents for header_1.fits:
+
+        SIMPLE  =                    T / file does conform to FITS standard
+        BITPIX  =                    8 / number of bits per data pixel
+        NAXIS   =                    0 / number of data axes
+        HISTORY File modified by user 'harman' with fv  on 2004-08-04T11:11:18
+        END
+    */
+    printPositiveTestHeader(stdout, "psMetadata", "Test A - Read 1st hdr from simple FITS file");
+    fits_open_file(&fptr, "header_1.fits", READONLY, &status);
+    fits_get_errstatus( status, fitsErr );
+    status = 0;
+    printf("FITS file open status: %s\n\n",fitsErr);
+    metadata1 = psMetadataFReadHeader(metadata1, NULL, 1, fptr);
+    printMetadata(metadata1);
+    printFooter(stdout, "psMetadata", "Test A - Read 1st hdr from simple FITS file", true);
+    printf("\n\n");
+
+
+    // Test B - Test B - Read 2nd hdr from complex FITS file
+
+    /* Header contents for header_2.fits:
+
+        SIMPLE  =                    T / file does conform to FITS standard
+        BITPIX  =                  -64 / number of bits per data pixel
+        NAXIS   =                    1 / number of data axes
+        NAXIS1  =                   64 / length of data axis 1
+        EXTEND  =                    T / FITS dataset may contain extensions
+        COMMENT   FITS (Flexible Image Transport System) format is defined in 'Astronomy
+        COMMENT   and Astrophysics', volume 376, page 359; bibcode: 2001A&A...376..359H
+        END
+        <DATA>
+
+        XTENSION= 'IMAGE   '           / IMAGE extension
+        BITPIX  =                  -64 / number of bits per data pixel
+        NAXIS   =                    1 / number of data axes
+        NAXIS1  =                   64 / length of data axis 1
+        PCOUNT  =                    0 / required keyword; must = 0
+        GCOUNT  =                    1 / required keyword; must = 1
+        BITPIX  =                  -64 / number of bits per data pixel
+        EXTNAME = 'MY_DATA_1'
+        HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:14:45
+        HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:15:29
+        HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:21:18
+        HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:21:46
+        END
+        <DATA>
+
+        XTENSION= 'IMAGE   '           / IMAGE extension
+        BITPIX  =                  -64 / number of bits per data pixel
+        NAXIS   =                    1 / number of data axes
+        NAXIS1  =                   64 / length of data axis 1
+        PCOUNT  =                    0 / required keyword; must = 0
+        GCOUNT  =                    1 / required keyword; must = 1
+        EXTNAME = 'MY_DATA_2'
+        HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:22:12
+        HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:22:52
+        END
+        <DATA>
+    */
+    printPositiveTestHeader(stdout, "psMetadata", "Test B - Read 2nd hdr from complex FITS file");
+    fits_open_file(&fptr, "header_2.fits", READONLY, &status);
+    fits_get_errstatus( status, fitsErr );
+    status = 0;
+    printf("FITS file open status: %s\n\n",fitsErr);
+    metadata2 = psMetadataFReadHeader(metadata2, NULL, 2, fptr);
+    printMetadata(metadata2);
+    printFooter(stdout, "psMetadata", "Test B - Read 2nd hdr from complex FITS file", true);
+    printf("\n\n");
+
+
+    //Test C - Read named hdr from complex FITS file
+    printPositiveTestHeader(stdout, "psMetadata", "Test C - Read named hdr from complex FITS file");
+    fits_open_file(&fptr, "header_2.fits", READONLY, &status);
+    fits_get_errstatus( status, fitsErr );
+    status = 0;
+    printf("FITS file open status: %s\n\n",fitsErr);
+    metadata3 = psMetadataFReadHeader(metadata3, "MY_DATA_2", 0, fptr);
+    printMetadata(metadata3);
+    printFooter(stdout, "psMetadata", "Test C - Read named hdr from complex FITS file", true);
+    printf("\n\n");
+
+
+    // Test - Free psMetadata
+    printPositiveTestHeader(stdout, "psMetadata", "Test - Free psMetadata");
+    psFree(metadata1);
+    psFree(metadata2);
+    psFree(metadata3);
+    psMemCheckLeaks(0, NULL, stdout);
+    psMemCheckCorruption(0);
+    int nBad = psMemCheckCorruption(0);
+    if(nBad) {
+        printf("ERROR: Found %d bad memory blocks\n", nBad);
+    }
+    printFooter(stdout, "psMetadata", "Test - Free psMetadata", true);
+
     return 0;
 }
