Index: trunk/psLib/src/collections/psMetadata.c
===================================================================
--- trunk/psLib/src/collections/psMetadata.c	(revision 1844)
+++ trunk/psLib/src/collections/psMetadata.c	(revision 1970)
@@ -3,5 +3,5 @@
 *
 *
-*  @brief Contains metadata struuctures, enumerations and functions prototypes
+*  @brief Contains metadata structures, enumerations and functions prototypes.
 *
 *  This file defines metadata item, metadata type, metadata flags, metadata containers, and function
@@ -12,6 +12,6 @@
 *  @author Ross Harman, MHPCC
 *
-*  @version $Revision: 1.28 $ $Name: not supported by cvs2svn $
-*  @date $Date: 2004-09-21 23:27:55 $
+*  @version $Revision: 1.29 $ $Name: not supported by cvs2svn $
+*  @date $Date: 2004-10-06 01:06:20 $
 *
 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -32,4 +32,5 @@
 #include "psList.h"
 #include "psHash.h"
+#include "psVector.h"
 #include "psMetadata.h"
 #include "psString.h"
@@ -39,19 +40,4 @@
 /******************************************************************************/
 
-#define FITS_ERROR(STRING,PS_ERROR)                                                                          \
-fits_get_errstatus(status, fitsErr);                                                                     \
-psError(__func__, STRING, PS_ERROR, fitsErr);                                                            \
-status = 0;                                                                                              \
-fits_close_file(fd, &status);                                                                            \
-if(status){                                                                                              \
-    fits_get_errstatus(status, fitsErr);                                                                  \
-    psError(__func__, "Couldn't close FITS file. FITS error: %s", fitsErr);                               \
-}                                                                                                        \
-status = 0;                                                                                              \
-return output;
-
-/** Maximum size of a FITS line */
-#define FITS_LINE_SIZE 80
-
 /** Maximum size of a string */
 #define MAX_STRING_LENGTH 1024
@@ -93,7 +79,6 @@
     psFree(metadataItem->items);
 
-    if (type == PS_META_STR ||
-            type == PS_META_IMG ||
-            type == PS_META_JPEG || type == PS_META_PNG || type == PS_META_ASTROM || type == PS_META_UNKNOWN) {
+    if (type == PS_META_STR || type == PS_META_VEC || type == PS_META_IMG || type == PS_META_JPEG ||
+            type == PS_META_PNG || type == PS_META_ASTROM || type == PS_META_UNKNOWN) {
         psFree(metadataItem->data.V);
     }
@@ -133,5 +118,8 @@
                                      va_list argPtr)
 {
+    psVector *vecIn = NULL;
+    psVector *vecOut = NULL;
     psMetadataItem* metadataItem = NULL;
+
 
     if (name == NULL) {
@@ -182,4 +170,10 @@
         metadataItem->data.V = psStringNCopy(va_arg(argPtr, char *), MAX_STRING_LENGTH);
         break;
+    case PS_META_VEC:
+        vecIn = (psVector*)va_arg(argPtr, psVector*);
+        vecOut = psVectorAlloc(vecIn->nalloc, vecIn->type.type);
+        memcpy(vecOut->data.V, vecIn->data.V, vecIn->nalloc*PSELEMTYPE_SIZEOF(vecIn->type.type));
+        metadataItem->data.V = vecOut;
+        break;
     case PS_META_IMG:
     case PS_META_JPEG:
@@ -373,6 +367,4 @@
     return true;
 }
-
-
 
 bool psMetadataRemove(psMetadata* restrict md, int where, const char *restrict key)
@@ -603,163 +595,2 @@
     return entry;
 }
-
-void psMetadataItemPrint(FILE * fd, const char *format, const psMetadataItem* restrict metadataItem)
-{
-    psMetadataType type;
-
-    if (fd == NULL) {
-        psError(__func__, "Null file descriptor not allowed");
-        return;
-    }
-
-    if (format == NULL) {
-        psError(__func__, "Null format not allowed");
-        return;
-    }
-
-    if (metadataItem == NULL) {
-        psError(__func__, "Null metadata not allowed");
-        return;
-    }
-
-    type = metadataItem->type;
-
-    switch (type) {
-    case PS_META_BOOL:
-        fprintf(fd, format, metadataItem->data.B);
-        break;
-    case PS_META_S32:
-        fprintf(fd,format, metadataItem->data.S32);
-        break;
-    case PS_META_F32:
-        fprintf(fd, format, metadataItem->data.F32);
-        break;
-    case PS_META_F64:
-        fprintf(fd, format, metadataItem->data.F64);
-        break;
-    case PS_META_STR:
-        fprintf(fd, format, metadataItem->data.V);
-        break;
-    case PS_META_ITEM_SET:
-    case PS_META_IMG:
-    case PS_META_JPEG:
-    case PS_META_PNG:
-    case PS_META_ASTROM:
-    case PS_META_UNKNOWN:
-    default:
-        psError(__func__, " Invalid psMetadataType to print: %d", type);
-    }
-}
-
-psMetadata* psMetadataReadHeader(psMetadata* output, char *extName, int extNum, char *fileName)
-{
-    bool tempBool;
-    bool success;
-    char keyType;
-    char keyName[FITS_LINE_SIZE];
-    char keyValue[FITS_LINE_SIZE];
-    char keyComment[FITS_LINE_SIZE];
-    char fitsErr[MAX_STRING_LENGTH];
-    int i;
-    int hduType = 0;
-    int status = 0;
-    int numKeys = 0;
-    int keyNum = 0;
-    psMetadataType metadataItemType;
-    fitsfile *fd = NULL;
-
-    if(fileName == NULL) {
-        psError(__func__, "Null fileName not allowed");
-        return NULL;
-    }
-
-    fits_open_file(&fd, fileName, READONLY, &status);
-    if(fd == NULL || status != 0) {
-        FITS_ERROR("FITS error while opening file: %s %s", fileName);
-        return NULL;
-    }
-
-    if (extName == NULL && extNum == 0) {
-        psError(__func__, "Null extName and extNum = 0 not allowed");
-        return NULL;
-    } else if (extName && extNum) {
-        psError(__func__, "Both extName and extNum arguments should not have non zero values.");
-        return NULL;
-    }
-
-    // Allocate metadata if user didn't
-    if (output == NULL) {
-        output = psMetadataAlloc();
-    }
-
-    // Move to user designated HDU number or HDU name in FITS file. HDU numbers starts at one.
-    if (extName != NULL) {
-        if (fits_movnam_hdu(fd, ANY_HDU, extName, 0, &status) != 0) {
-            FITS_ERROR("FITS error while locating header %s: %s", extName);
-        }
-    } else {
-        if (fits_movabs_hdu(fd, extNum, &hduType, &status) != 0) {
-            FITS_ERROR("FITS error while locating header %d: %s", extNum);
-        }
-    }
-
-    // Get number of key names
-    if (fits_get_hdrpos(fd, &numKeys, &keyNum, &status) != 0) {
-        FITS_ERROR("FITS error while reading key %d: %s", keyNum);
-    }
-
-    // Get each key name. Keywords start at one.
-    for (i = 1; i <= numKeys; i++) {
-        if (fits_read_keyn(fd, i, keyName, keyValue, keyComment, &status) != 0) {
-            FITS_ERROR("FITS error while reading key %d: %s", keyNum);
-        }
-        if (fits_get_keytype(keyValue, &keyType, &status) != 0) {
-            fits_get_errstatus(status, fitsErr);
-            if (status != VALUE_UNDEFINED) {
-                FITS_ERROR("FITS error while determining key %d type: %s", keyNum);
-            } else {
-                // Some keywords are still valid if they don't have a type (like COMMENTS and HISTORY)
-                keyType = 'C';
-                status = 0;
-            }
-        }
-
-        switch (keyType) {
-        case 'I':
-            metadataItemType = PS_META_S32;
-            success =
-                psMetadataAdd(output, PS_LIST_TAIL, keyName, metadataItemType, keyComment,
-                              atoi(keyValue));
-            break;
-        case 'F':
-            metadataItemType = PS_META_F64;
-            success =
-                psMetadataAdd(output, PS_LIST_TAIL, keyName, metadataItemType, keyComment,
-                              atof(keyValue));
-            break;
-        case 'C':
-            metadataItemType = PS_META_STR;
-            success =
-                psMetadataAdd(output, PS_LIST_TAIL, keyName, metadataItemType, keyComment, keyValue);
-            break;
-        case 'L':
-            metadataItemType = PS_META_BOOL;
-            tempBool = (keyValue[0] == 'T') ? 1 : 0;
-            success =
-                psMetadataAdd(output, PS_LIST_TAIL, keyName, metadataItemType, keyComment, tempBool);
-            break;
-        case 'U':
-        case 'X':
-        default:
-            psError(__func__, "Invalid psMetadataType: %c", keyType);
-            return output;
-        }
-
-        if (!success) {
-            psError(__func__, "Failed to add metadata item. Name: %s", keyName);
-            return output;
-        }
-    }
-
-    return output;
-}
