Index: /trunk/archive/pslib/src/Metadata/metadata.c
===================================================================
--- /trunk/archive/pslib/src/Metadata/metadata.c	(revision 457)
+++ /trunk/archive/pslib/src/Metadata/metadata.c	(revision 458)
@@ -51,4 +51,22 @@
     )
 {
+    va_list ap;
+    va_start(ap, name);
+
+    psMetadataItem *mi = psVMetadataItemAlloc(typeFlags, data, comment, name, ap);
+
+    va_end(ap);
+
+    return mi;
+}
+
+psMetadataItem *psVMetadataItemAlloc(
+    int typeFlags,			// type of this piece of metadata + flags
+    const void *data,			// value of new item
+    const char *comment,		// comment associated with item; may be NULL
+    const char *name,			// name of new item of metadata (may be an sprintf format)
+    va_list ap				// possible arguments for name format
+    )
+{
     const psMetadataType type = typeFlags & PS_META_TYPE_MASK; // the type part of typeFlags
     psMetadataFlags flags = typeFlags & ~PS_META_TYPE_MASK;    // the flags part of typeFlags
@@ -77,10 +95,7 @@
 	static char tmp[201];		// should be enough; we won't overflow even if it isn't
 
-	va_list ap;
-	va_start(ap, name);
 	if(vsnprintf(tmp, sizeof(tmp), name, ap) > sizeof(tmp) - 1) {
 	    psTrace("metadata.name", 1, "Keyword \"%s\" was truncated to \"%s\" upon expansion\n", name, tmp);
 	}
-	va_end(ap);
 
 	name = tmp;	    
@@ -169,5 +184,5 @@
  * Add an new psMetadataItem to a psMetadata
  */
-psMetadataItem *psMetadataAppend(psMetadata *restrict ms, psMetadataItem *restrict item)
+psMetadataItem *psMetadataAppendItem(psMetadata *restrict ms, psMetadataItem *restrict item)
 {
     psMetadataItem *meta = NULL;	// an item of metadata
@@ -180,5 +195,5 @@
 	psMetadataItem *head = meta;
 	if (head == NULL) {		// this is the first item of this name
-	    head = psMetadataAppend(ms, psMetadataItemAlloc(PS_META_ITEM_SET, NULL, NULL, item->name));
+	    head = psMetadataAppend(ms, PS_META_ITEM_SET, NULL, NULL, item->name);
 	}	    
 
@@ -218,4 +233,29 @@
     return item;
 }
+
+/************************************************************************************************************/
+/*
+ * Convenience wrapper for psMetadataAppend()
+ */
+psMetadataItem *psMetadataAppend(psMetadata *restrict md, ///< Metadata to add to
+				 int typeFlags, ///< type of this piece of metadata + flags
+				 const void *val, ///< value of new item N.b. a pointer even if the item
+				                  ///< is of type e.g. int
+				 const char *comment, ///< comment associated with item
+				 const char *name, ///< name of new item of metadata (may be in sprintf
+				                   ///< format)
+				 ...		   ///< possible arguments for name format
+    )
+{
+    va_list ap;
+    va_start(ap, name);
+
+    psMetadataItem *mi = psVMetadataItemAlloc(typeFlags, val, comment, name, ap);
+
+    va_end(ap);
+
+    return psMetadataAppendItem(md, mi);
+}
+
 
 /*****************************************************************************/
@@ -375,13 +415,10 @@
     for (int i = 0; i < 10; i += 5) {
 	float sqrti = sqrt(i);
-	psMetadataAppend(ms, psMetadataItemAlloc(PS_META_INT, &i, NULL, "const.%d", i));
-	psMetadataAppend(ms, psMetadataItemAlloc(PS_META_FLOAT, &sqrti, "square root", "const.sqrt%d", i));
-    }
-    psMetadataAppend(ms, psMetadataItemAlloc(PS_META_STR | PS_META_NON_UNIQUE,
-					   "Bonjour", "French", "lang.hello"));
-    psMetadataAppend(ms, psMetadataItemAlloc(PS_META_STR | PS_META_NON_UNIQUE,
-					   "Aloha", "Hawaiian", "lang.hello"));
-    psMetadataAppend(ms, psMetadataItemAlloc(PS_META_STR | PS_META_NON_UNIQUE,
-					   "Good Morning", "English", "lang.hello"));
+	psMetadataAppend(ms, PS_META_INT, &i, NULL, "const.%d", i);
+	psMetadataAppend(ms, PS_META_FLOAT, &sqrti, "square root", "const.sqrt%d", i);
+    }
+    psMetadataAppend(ms, PS_META_STR | PS_META_NON_UNIQUE, "Bonjour", "French", "lang.hello");
+    psMetadataAppend(ms, PS_META_STR | PS_META_NON_UNIQUE, "Aloha", "Hawaiian", "lang.hello");
+    psMetadataAppend(ms, PS_META_STR | PS_META_NON_UNIQUE, "Good Morning", "English", "lang.hello");
     /*
      * Print all metadata starting "lang"
