Index: /trunk/psLib/src/types/psMetadata.c
===================================================================
--- /trunk/psLib/src/types/psMetadata.c	(revision 7447)
+++ /trunk/psLib/src/types/psMetadata.c	(revision 7448)
@@ -12,6 +12,6 @@
  *  @author Ross Harman, MHPCC
  *
- *  @version $Revision: 1.108 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2006-06-07 03:22:06 $
+ *  @version $Revision: 1.109 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2006-06-09 01:25:42 $
  *
  *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -21,7 +21,7 @@
 /*  INCLUDE FILES                                                             */
 /******************************************************************************/
-#include<stdio.h>
-#include<stdarg.h>
-#include<string.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <string.h>
 
 #include "fitsio.h"
@@ -1096,8 +1096,18 @@
 
 
-void psMetadataPrint(psMetadata *md,
+void psMetadataPrint(FILE *fd,
+                     psMetadata *md,
                      int level)
 {
     PS_ASSERT_PTR_NON_NULL(md,);
+    if (fd == NULL) {
+        fd = stdout;
+    } else {
+        if ( fprintf(fd, "\n") < 0 ) {
+            psError(PS_ERR_IO, true,
+                    "Invalid file pointer in psMetadataPrint.  Could not write to fd.\n");
+            return;
+        }
+    }
     psMetadataIterator *iter = psMetadataIteratorAlloc(md, PS_LIST_HEAD, NULL); // Iterator
     psMetadataItem *item = NULL; // Item from metadata
@@ -1105,70 +1115,147 @@
         // Indent...
         for (int i = 0; i < level; i++) {
-            printf(" ");
-        }
-        printf("%s", item->name);
+            fprintf(fd, "  ");
+        }
+        fprintf(fd, "%s", item->name);
         if (item->comment && strlen(item->comment) > 0) {
-            printf(" (%s)", item->comment);
-        }
-        printf(": ");
+            fprintf(fd, " (%s)", item->comment);
+        }
+        fprintf(fd, ": ");
         switch (item->type) {
         case PS_DATA_STRING:
-            printf("%s", (char*)(item->data.V));
+            fprintf(fd, "%s", (char*)(item->data.V));
             break;
         case PS_DATA_BOOL:
             if (item->data.B) {
-                printf("True");
+                fprintf(fd, "True");
             } else {
-                printf("False");
+                fprintf(fd, "False");
             }
             break;
         case PS_DATA_S8:
-            printf("%d", item->data.S8);
+            fprintf(fd, "%d", item->data.S8);
             break;
         case PS_DATA_S16:
-            printf("%d", item->data.S16);
+            fprintf(fd, "%d", item->data.S16);
             break;
         case PS_DATA_S32:
-            printf("%d", item->data.S32);
+            fprintf(fd, "%d", item->data.S32);
             break;
         case PS_DATA_U8:
-            printf("%u", item->data.U8);
+            fprintf(fd, "%u", item->data.U8);
             break;
         case PS_DATA_U16:
-            printf("%u", item->data.U16);
+            fprintf(fd, "%u", item->data.U16);
             break;
         case PS_DATA_U32:
-            printf("%u", item->data.U32);
+            fprintf(fd, "%u", item->data.U32);
             break;
         case PS_DATA_F32:
-            printf("%f", item->data.F32);
+            fprintf(fd, "%f", item->data.F32);
             break;
         case PS_DATA_F64:
-            printf("%f", item->data.F64);
+            fprintf(fd, "%f", item->data.F64);
             break;
         case PS_DATA_METADATA:
-            printf("\n");
-            psMetadataPrint(item->data.V, level + 1);
+            //            fprintf(fd, "\n");
+            psMetadataPrint(fd, item->data.V, level + 1);
+            for (int i = 0; i < level; i++) {
+                fprintf(fd, "  ");
+            }
+            fprintf(fd, "%s  -- END\n", item->name);
             break;
         case PS_DATA_REGION: {
                 psString region = psRegionToString(*(psRegion*)item->data.V);
-                printf("%s", region);
+                fprintf(fd, "%s", region);
                 psFree(region);
                 break;
             }
         case PS_DATA_LIST:
-            printf("<a list of unknown contents>");
+            fprintf(fd, "<a list of unknown contents>");
             break;
         case PS_DATA_TIME: {
                 psString time = psTimeToISO(item->data.V);
-                printf("%s", time);
+                fprintf(fd, "%s", time);
                 psFree(time);
                 break;
             }
+        case PS_DATA_VECTOR: {
+                psVector *vector = item->data.V;
+                switch (vector->type.type) {
+                case PS_DATA_U8:
+                    fprintf(fd, "U8  ");
+                    for (int i = 0; i < vector->n; i++) {
+                        fprintf(fd, "%u ", vector->data.U8[i]);
+                    }
+                    break;
+                case PS_DATA_U16:
+                    fprintf(fd, "U16  ");
+                    for (int i = 0; i < vector->n; i++) {
+                        fprintf(fd, "%u ", vector->data.U16[i]);
+                    }
+                    break;
+                case PS_DATA_U32:
+                    fprintf(fd, "U32  ");
+                    for (int i = 0; i < vector->n; i++) {
+                        fprintf(fd, "%u ", vector->data.U32[i]);
+                    }
+                    break;
+                    /*            case PS_DATA_U64:
+                                    fprintf(fd, "U64  ");
+                                    for (int i = 0; i < vector->n; i++) {
+                                        fprintf(fd, "%u ", vector->data.U64[i]);
+                                    }
+                                    break;
+                    */
+                case PS_DATA_S8:
+                    fprintf(fd, "S8  ");
+                    for (int i = 0; i < vector->n; i++) {
+                        fprintf(fd, "%d ", vector->data.S8[i]);
+                    }
+                    break;
+                case PS_DATA_S16:
+                    fprintf(fd, "S16  ");
+                    for (int i = 0; i < vector->n; i++) {
+                        fprintf(fd, "%d ", vector->data.S16[i]);
+                    }
+                    break;
+                case PS_DATA_S32:
+                    fprintf(fd, "S32  ");
+                    for (int i = 0; i < vector->n; i++) {
+                        fprintf(fd, "%d ", vector->data.S32[i]);
+                    }
+                    break;
+                    /*            case PS_DATA_S64:
+                                    fprintf(fd, "S64  ");
+                                    for (int i = 0; i < vector->n; i++) {
+                                        fprintf(fd, "%ld ", vector->data.S64[i]);
+                                    }
+                                    break;
+                    */
+                case PS_DATA_F32:
+                    fprintf(fd, "F32 ");
+                    for (int i = 0; i < vector->n; i++) {
+                        fprintf(fd, "%f ", vector->data.F32[i]);
+                    }
+                    break;
+                case PS_DATA_F64:
+                    fprintf(fd, "F64 ");
+                    for (int i = 0; i < vector->n; i++) {
+                        fprintf(fd, "%f ", vector->data.F64[i]);
+                    }
+                    break;
+                case PS_DATA_UNKNOWN:
+                default:
+                    psError(PS_ERR_BAD_PARAMETER_VALUE, true,
+                            PS_ERRORTEXT_psMetadata_METATYPE_INVALID, vector->type.type);
+                    return;
+                }
+                break;
+            }
         default:
-            printf("\n");
+            fprintf(fd, "\n");
             psError(PS_ERR_IO, false, "Non-printable metadata type: %x\n", item->type);
         }
-        printf("\n");
+        fprintf(fd, "\n");
     }
     psFree(iter);
Index: /trunk/psLib/src/types/psMetadata.h
===================================================================
--- /trunk/psLib/src/types/psMetadata.h	(revision 7447)
+++ /trunk/psLib/src/types/psMetadata.h	(revision 7448)
@@ -11,6 +11,6 @@
 *  @author Ross Harman, MHPCC
 *
-*  @version $Revision: 1.77 $ $Name: not supported by cvs2svn $
-*  @date $Date: 2006-06-07 03:22:06 $
+*  @version $Revision: 1.78 $ $Name: not supported by cvs2svn $
+*  @date $Date: 2006-06-09 01:25:42 $
 *
 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -947,6 +947,11 @@
 );
 
-/** Print metadata collection to screen      */
+/** Prints metadata collection.
+ *
+ *  Metadata contents are printed to a valid file descriptor if one exists.  Otherwise,
+ *  fd should be NULL and the contents are printed to the screen (stdout).
+*/
 void psMetadataPrint(
+    FILE *fd,                          ///< File Descriptor or NULL
     psMetadata *md,                    ///< Metadata collection to print.
     int level                          ///< the level of metadata items.
Index: /trunk/psLib/test/types/tst_psArguments.c
===================================================================
--- /trunk/psLib/test/types/tst_psArguments.c	(revision 7447)
+++ /trunk/psLib/test/types/tst_psArguments.c	(revision 7448)
@@ -5,6 +5,6 @@
 *  @author  David Robbins, MHPCC
 *
-*  @version $Revision: 1.2 $  $Name: not supported by cvs2svn $
-*  @date  $Date: 2006-05-25 03:51:51 $
+*  @version $Revision: 1.3 $  $Name: not supported by cvs2svn $
+*  @date  $Date: 2006-06-09 01:25:42 $
 *
 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -74,5 +74,5 @@
     }
 
-    psMetadataPrint(args, 4);
+    psMetadataPrint(NULL, args, 4);
 
     psFree(args);
Index: /trunk/psLib/test/types/tst_psMetadata_01.c
===================================================================
--- /trunk/psLib/test/types/tst_psMetadata_01.c	(revision 7447)
+++ /trunk/psLib/test/types/tst_psMetadata_01.c	(revision 7448)
@@ -5,6 +5,6 @@
 *  @author  dRob, MHPCC
 *
-*  @version $Revision: 1.6 $  $Name: not supported by cvs2svn $
-*  @date  $Date: 2006-06-07 01:39:17 $
+*  @version $Revision: 1.7 $  $Name: not supported by cvs2svn $
+*  @date  $Date: 2006-06-09 01:25:42 $
 *
 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -31,18 +31,4 @@
     return ( !runTestSuite(stderr,"psMetadata_01",tests,argc,argv) );
 
-}
-
-static psMetadata *setupMeta(void)
-{
-    psMetadata *md = NULL;
-    md = psMetadataAlloc();
-
-    psMetadataAddBool(md, PS_LIST_TAIL, "item1", 0, "I am a boolean", true);
-    psMetadataAddS32(md, PS_LIST_TAIL, "item2", 0, "I am a integer", 55);
-    psMetadataAddF32(md, PS_LIST_TAIL, "item3", 0, "I am a float", 3.14);
-    psMetadataAddF64(md, PS_LIST_TAIL, "item4", 0, "I am a double", 6.28);
-    psMetadataAddStr(md, PS_LIST_TAIL, "item5", 0, "I am a string", "GNIRTS");
-
-    return md;
 }
 
@@ -110,9 +96,57 @@
 }
 
+static psMetadata *setupMeta2(void)
+{
+    psMetadata *md = NULL;
+    psVector *vec = NULL;
+    psMetadata *newMD = NULL;
+    psTime *time;
+    int i = 0;
+    md = psMetadataAlloc();
+    newMD = psMetadataAlloc();
+    vec = psVectorAlloc(60, PS_DATA_S32);
+    time = psTimeAlloc(PS_TIME_TAI);
+    for (i = 0; i < 5; i++) {
+        vec->data.S32[i] = i+1;
+    }
+    vec->n = 5;
+    time->sec = 1000;
+    time->nsec = 25;
+    time->leapsecond = true;
+    psMetadataAddBool(md, PS_LIST_TAIL, "item1", 0, "I am a boolean", true);
+    psMetadataAddS32(md, PS_LIST_TAIL, "item2", 0, "I am a integer", 55);
+    psMetadataAddF32(md, PS_LIST_TAIL, "item3", 0, NULL, 3.14);
+    psMetadataAddF64(md, PS_LIST_TAIL, "item4", 0, "", 6.28);
+    psMetadataAddStr(md, PS_LIST_TAIL, "item5", 0, "I am a string", "GNIRTS");
+    psMetadataAddVector(md, PS_LIST_TAIL, "vector6", 0, "I am a vector", vec);
+    psMetadataAddTime(md, PS_LIST_TAIL, "time01", 0, "I am time", time);
+    psMetadataAddS8(md, PS_LIST_TAIL, "item6", 0, "I am S8", 6);
+    psMetadataAddS16(md, PS_LIST_TAIL, "item7", 0, "I am S16", -666);
+    psMetadataAddU8(md, PS_LIST_TAIL, "item8", 0, "I am U8", 6);
+    psMetadataAddU16(md, PS_LIST_TAIL, "item9", 0, "I am U16", 666);
+    psMetadataAddU32(md, PS_LIST_TAIL, "item10", 0, "I am U32", 666);
+
+    psMetadataAddS32(newMD, PS_LIST_TAIL, "ITEM01", 0, NULL, 666);
+    psMetadata *newestMD = NULL;
+    newestMD = psMetadataAlloc();
+    psMetadataAddVector(newestMD, PS_LIST_TAIL, "VECTORNEW", 0, "Newest VECTOR", vec);
+    psMetadataAddStr(newestMD, PS_LIST_TAIL, "cell", 0, "I am a p-Star", "pStArRs");
+    psMetadataAddMetadata(newMD, PS_LIST_TAIL, "META NEW", 0, "I AM Newest METADATA", newestMD);
+    psMetadataAddF32(newMD, PS_LIST_TAIL, "ITEM02", 0, "I AM FLOAT", 666.6);
+    psMetadataAddF64(newMD, PS_LIST_TAIL, "ITEM03", 0, "I AM DOUBLE", 666.666);
+
+    psMetadataAddMetadata(md, PS_LIST_TAIL, "metadata7", 0, "I am a metadata", newMD);
+    psFree(time);
+    psFree(newestMD);
+    psFree(vec);
+    psFree(newMD);
+    return md;
+}
+
 psS32 testMetadataPrint(void)
 {
     psMetadata *meta = NULL;
-    meta = setupMeta();
-    psMetadataPrint(meta, 0);
+    meta = setupMeta2();
+    psMetadataPrint(NULL, meta, 0);
     psFree(meta);
     return 0;
Index: /trunk/psLib/test/types/verified/tst_psArguments.stdout
===================================================================
--- /trunk/psLib/test/types/verified/tst_psArguments.stdout	(revision 7447)
+++ /trunk/psLib/test/types/verified/tst_psArguments.stdout	(revision 7448)
@@ -10,8 +10,9 @@
     -int       (1)               Int1
                (2)               Int2
-    -string (Test String): new
-    -float (Test Float): 0.000000
-    -int (Integers): 
-     int1 (Int1): 1
-     int2 (Int2): 2
+        -string (Test String): new
+        -float (Test Float): 0.000000
+        -int (Integers): 
+          int1 (Int1): 1
+          int2 (Int2): 2
+        -int  -- END
 
Index: /trunk/psLib/test/types/verified/tst_psMetadata_01.stdout
===================================================================
--- /trunk/psLib/test/types/verified/tst_psMetadata_01.stdout	(revision 7447)
+++ /trunk/psLib/test/types/verified/tst_psMetadata_01.stdout	(revision 7448)
@@ -1,5 +1,23 @@
 item1 (I am a boolean): True
 item2 (I am a integer): 55
-item3 (I am a float): 3.140000
-item4 (I am a double): 6.280000
+item3: 3.140000
+item4: 6.280000
 item5 (I am a string): GNIRTS
+vector6 (I am a vector): S32  1 2 3 4 5 
+time01 (I am time): 1970-01-01T<DATE>.0Z
+item6 (I am S8): 6
+item7 (I am S16): -666
+item8 (I am U8): 6
+item9 (I am U16): 666
+item10 (I am U32): 666
+metadata7 (I am a metadata): 
+  ITEM01: 666
+  META NEW (I AM Newest METADATA): 
+    VECTORNEW (Newest VECTOR): S32  1 2 3 4 5 
+    cell (I am a p-Star): pStArRs
+  META NEW  -- END
+
+  ITEM02 (I AM FLOAT): 666.599976
+  ITEM03 (I AM DOUBLE): 666.666000
+metadata7  -- END
+
