Index: trunk/psLib/src/astronomy/psMetadata.c
===================================================================
--- trunk/psLib/src/astronomy/psMetadata.c	(revision 2971)
+++ trunk/psLib/src/astronomy/psMetadata.c	(revision 2973)
@@ -12,6 +12,6 @@
 *  @author Ross Harman, MHPCC
 *
-*  @version $Revision: 1.44 $ $Name: not supported by cvs2svn $
-*  @date $Date: 2005-01-13 19:50:44 $
+*  @version $Revision: 1.45 $ $Name: not supported by cvs2svn $
+*  @date $Date: 2005-01-13 20:48:59 $
 *
 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -421,93 +421,78 @@
 void* psMetadataLookupPtr(psMetadata *md, const char *key, psU32 *status)
 {
-    void *value = NULL;
-    psElemType pType;
     psMetadataItem *metadataItem = NULL;
 
+    if (status) {
+        *status = 0;
+    }
 
     metadataItem = psMetadataLookup(md, key);
     if(metadataItem == NULL) {
-        *status = 1;
-        return value;
-    }
-
-    pType = metadataItem->pType;
-    value = metadataItem->data.V;
-    if(pType != PS_TYPE_PTR) {
-        psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_METATYPE_MISMATCH, pType,
+        if (status) {
+            *status = 1;
+        }
+        return NULL;
+    }
+
+    if(metadataItem->type == PS_META_PRIMITIVE && metadataItem->pType != PS_TYPE_PTR) {
+        if (status) {
+            *status = 1;
+        }
+        psError(PS_ERR_BAD_PARAMETER_VALUE, true,
+                PS_ERRORTEXT_psMetadata_METATYPE_MISMATCH,
+                metadataItem->pType,
                 PS_TYPE_PTR);
-    }
-
-    return value;
-}
-
-psS32 psMetadataLookupS32(psMetadata *md, const char *key, psU32 *status)
-{
-    psS32 value = 0;
-    psElemType pType;
-    psMetadataItem *metadataItem = NULL;
-
-
-    metadataItem = psMetadataLookup(md, key);
-    if(metadataItem == NULL) {
-        *status = 1;
-        return value;
-    }
-
-    pType = metadataItem->pType;
-    value = metadataItem->data.S32;
-    if(pType != PS_TYPE_S32) {
-        psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_METATYPE_MISMATCH, pType,
-                PS_TYPE_S32);
-    }
-
-    return value;
-}
-
-psF32 psMetadataLookupF32(psMetadata *md, const char *key, psU32 *status)
-{
-    psF32 value = 0.0;
-    psElemType pType;
-    psMetadataItem *metadataItem = NULL;
-
-
-    metadataItem = psMetadataLookup(md, key);
-    if(metadataItem == NULL) {
-        *status = 1;
-        return value;
-    }
-
-    pType = metadataItem->pType;
-    value = metadataItem->data.F32;
-    if(pType != PS_TYPE_F32) {
-        psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_METATYPE_MISMATCH, pType,
-                PS_TYPE_F32);
-    }
-
-    return value;
-}
-
-psF64 psMetadataLookupF64(psMetadata *md, const char *key, psU32 *status)
-{
-    psF64 value = 0.0;
-    psElemType pType;
-    psMetadataItem *metadataItem = NULL;
-
-
-    metadataItem = psMetadataLookup(md, key);
-    if(metadataItem == NULL) {
-        *status = 1;
-        return value;
-    }
-
-    pType = metadataItem->pType;
-    value = metadataItem->data.F64;
-    if(pType != PS_TYPE_F64) {
-        psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_METATYPE_MISMATCH, pType,
-                PS_TYPE_F64);
-    }
-
-    return value;
-}
+        return NULL;
+    } else {
+        return metadataItem->data.V;
+    }
+}
+
+#define psMetadataLookupNumTYPE(TYPE) \
+ps##TYPE psMetadataLookup##TYPE(psMetadata *md, const char *key, psU32 *status) \
+{ \
+    psMetadataItem *metadataItem = NULL; \
+    \
+    if (status) { \
+        *status = 0; \
+    } \
+    \
+    metadataItem = psMetadataLookup(md, key); \
+    if(metadataItem == NULL) { \
+        if (status) { \
+            *status = 1; \
+        } \
+        return 0; \
+    } \
+    \
+    if (metadataItem->type == PS_META_PRIMITIVE) { \
+        switch (metadataItem->pType) { \
+        case PS_TYPE_S32: \
+            return metadataItem->data.S32; \
+        case PS_TYPE_F32: \
+            return metadataItem->data.F32; \
+        case PS_TYPE_F64: \
+            return metadataItem->data.F64; \
+        case PS_TYPE_BOOL: \
+            if (metadataItem->data.B) { \
+                return 1; \
+            } \
+            return 0; \
+        default: \
+            break; \
+        } \
+    } \
+    \
+    /* if you get to this point, the value is not a number. */ \
+    if (status) { \
+        *status = 1; \
+    } \
+    \
+    return 0; \
+}
+
+psMetadataLookupNumTYPE(F32)
+psMetadataLookupNumTYPE(F64)
+psMetadataLookupNumTYPE(S32)
 
 psMetadataItem* psMetadataGet(psMetadata *md, psS32 where)
