Index: /trunk/psLib/src/astronomy/psAstronomyErrors.dat
===================================================================
--- /trunk/psLib/src/astronomy/psAstronomyErrors.dat	(revision 3440)
+++ /trunk/psLib/src/astronomy/psAstronomyErrors.dat	(revision 3441)
@@ -37,4 +37,5 @@
 #
 psMetadata_METATYPE_INVALID            Specified psMetadataType, %d, is not supported.
+psMetadata_FORMAT_INVALID              Specified print format, %%%c, is not supported.
 psMetadata_METATYPE_MISMATCH           Specified psMetadataType, %d, is incorrect. Expected %d.
 psMetadata_ADD_LIST_FAILED             Failed to add metadata item, %s, to items list.
Index: /trunk/psLib/src/astronomy/psAstronomyErrors.h
===================================================================
--- /trunk/psLib/src/astronomy/psAstronomyErrors.h	(revision 3440)
+++ /trunk/psLib/src/astronomy/psAstronomyErrors.h	(revision 3441)
@@ -7,6 +7,6 @@
  *  @author Robert DeSonia, MHPCC
  *
- *  @version $Revision: 1.13 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2005-03-07 20:58:50 $
+ *  @version $Revision: 1.14 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2005-03-17 19:01:01 $
  *
  *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -55,4 +55,5 @@
 #define PS_ERRORTEXT_psAstrometry_NONLINEAR_TRANSFORM "The %s transfrom is not linear.  Only linear transforms are supported."
 #define PS_ERRORTEXT_psMetadata_METATYPE_INVALID "Specified psMetadataType, %d, is not supported."
+#define PS_ERRORTEXT_psMetadata_FORMAT_INVALID "Specified print format, %%%c, is not supported."
 #define PS_ERRORTEXT_psMetadata_METATYPE_MISMATCH "Specified psMetadataType, %d, is incorrect. Expected %d."
 #define PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED "Failed to add metadata item, %s, to items list."
Index: /trunk/psLib/src/astronomy/psMetadataIO.c
===================================================================
--- /trunk/psLib/src/astronomy/psMetadataIO.c	(revision 3440)
+++ /trunk/psLib/src/astronomy/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;
     }
 
Index: /trunk/psLib/src/collections/psMetadataIO.c
===================================================================
--- /trunk/psLib/src/collections/psMetadataIO.c	(revision 3440)
+++ /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;
     }
 
Index: /trunk/psLib/src/types/psMetadataConfig.c
===================================================================
--- /trunk/psLib/src/types/psMetadataConfig.c	(revision 3440)
+++ /trunk/psLib/src/types/psMetadataConfig.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;
     }
 
Index: /trunk/psLib/src/xml/psXML.c
===================================================================
--- /trunk/psLib/src/xml/psXML.c	(revision 3440)
+++ /trunk/psLib/src/xml/psXML.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;
     }
 
