Index: trunk/psLib/src/collections/psMetadataIO.c
===================================================================
--- trunk/psLib/src/collections/psMetadataIO.c	(revision 3381)
+++ trunk/psLib/src/collections/psMetadataIO.c	(revision 3441)
@@ -9,6 +9,6 @@
 *  @author Ross Harman, MHPCC
 *
-*  @version $Revision: 1.22 $ $Name: not supported by cvs2svn $
-*  @date $Date: 2005-03-07 20:58:50 $
+*  @version $Revision: 1.23 $ $Name: not supported by cvs2svn $
+*  @date $Date: 2005-03-17 19:01:01 $
 *
 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -315,23 +315,77 @@
     type = metadataItem->type;
 
-    switch(type) {
-    case PS_META_BOOL:
-        fprintf(fd, format, metadataItem->data.B);
+    // determining the format type
+    char* fType = strchr(format,'%');
+    if (fType == NULL) {
+        // well, the format contains no reference to the metadataItem's data:
+        // that is truly trival to do!
+        fprintf(fd,format);
+        return success;
+    }
+
+    // skip over any format modifiers
+    const char* formatEnd = format+strlen(format);
+    while ( (fType < formatEnd) &&
+        (strchr(" +-01234567890.$#, hlL",*(++fType)) != NULL) ) {}
+
+    #define METADATAITEM_NUMERIC_CAST(FORMAT_TYPE) { \
+        switch(type) { \
+        case PS_META_BOOL: \
+            fprintf(fd, format, (FORMAT_TYPE) metadataItem->data.B); \
+            break; \
+        case PS_META_S32: \
+            fprintf(fd,format,(FORMAT_TYPE)  metadataItem->data.S32); \
+            break; \
+        case PS_META_F32: \
+            fprintf(fd, format,(FORMAT_TYPE)  metadataItem->data.F32); \
+            break; \
+        case PS_META_F64: \
+            fprintf(fd, format,(FORMAT_TYPE) metadataItem->data.F64); \
+            break; \
+        default: \
+            psError(PS_ERR_BAD_PARAMETER_TYPE,true, \
+                    PS_ERRORTEXT_psMetadata_METATYPE_INVALID, (int)type); \
+            success = false; \
+        } \
+    }
+
+    switch(*fType) {
+    case 'd':
+    case 'i':
+    case 'c':
+        METADATAITEM_NUMERIC_CAST(int)
         break;
-    case PS_META_S32:
-        fprintf(fd,format, metadataItem->data.S32);
+    case 'o':
+    case 'u':
+    case 'x':
+    case 'X':
+        METADATAITEM_NUMERIC_CAST(unsigned int)
         break;
-    case PS_META_F32:
-        fprintf(fd, format, metadataItem->data.F32);
+    case 'e':
+    case 'E':
+    case 'f':
+    case 'F':
+    case 'g':
+    case 'G':
+    case 'a':
+    case 'A':
+        METADATAITEM_NUMERIC_CAST(double)
         break;
-    case PS_META_F64:
-        fprintf(fd, format, metadataItem->data.F64);
+    case 's':
+        if (type == PS_META_STR) {
+            fprintf(fd,format,(char*)metadataItem->data.V);
+        } else {
+            psError(PS_ERR_BAD_PARAMETER_TYPE,true,
+                    PS_ERRORTEXT_psMetadata_METATYPE_INVALID, (int)type);
+            success = false;
+        }
         break;
-    case PS_META_STR:
-        fprintf(fd,format, (char*)metadataItem->data.V);
+    case 'p':
+        fprintf(fd,format,metadataItem->data.V);
         break;
     default:
-        psError(PS_ERR_BAD_PARAMETER_TYPE,true, PS_ERRORTEXT_psMetadata_METATYPE_INVALID, (int)type);
-        success = false;
+        psError(PS_ERR_BAD_PARAMETER_TYPE, true,
+                PS_ERRORTEXT_psMetadata_FORMAT_INVALID, *fType);
+        break;
     }
 
