Index: /trunk/glueforge/glueforge.in
===================================================================
--- /trunk/glueforge/glueforge.in	(revision 4333)
+++ /trunk/glueforge/glueforge.in	(revision 4334)
@@ -3,5 +3,5 @@
 # Copyright (C) 2005  Joshua Hoblitt
 #
-# $Id: glueforge.in,v 1.22 2005-06-21 03:44:53 jhoblitt Exp $
+# $Id: glueforge.in,v 1.23 2005-06-22 00:17:26 jhoblitt Exp $
 
 use strict;
@@ -106,4 +106,5 @@
     'selectrowsfits_c.tt'   => "$output/tests/selectrowsfits.c",
     'metadatafromobject_c.tt' => "$output/tests/metadatafromobject.c",
+    'objectfrommetadata_c.tt' => "$output/tests/objectfrommetadata.c",
 );
 
Index: /trunk/glueforge/templates/psdb/code.tt
===================================================================
--- /trunk/glueforge/templates/psdb/code.tt	(revision 4333)
+++ /trunk/glueforge/templates/psdb/code.tt	(revision 4334)
@@ -17,3 +17,4 @@
 [% INCLUDE popfits.tt %]
 [% INCLUDE selectrowsfits.tt %]
-[% INCLUDE metadatafromobject.tt -%]
+[% INCLUDE metadatafromobject.tt %]
+[% INCLUDE objectfrommetadata.tt -%]
Index: /trunk/glueforge/templates/psdb/objectfrommetadata.tt
===================================================================
--- /trunk/glueforge/templates/psdb/objectfrommetadata.tt	(revision 4334)
+++ /trunk/glueforge/templates/psdb/objectfrommetadata.tt	(revision 4334)
@@ -0,0 +1,34 @@
+[% USE format -%]
+[% indented = format('%-15s %s') -%]
+[% object_name %] *[% namespace %]ObjectFromMetadata(const psMetadata *md)
+{
+    bool            status;
+[% FOREACH item = columns -%]
+[% IF item.type == "STR" -%]
+    [% indented("char", "*$item.name") %];
+[% ELSE-%]
+    [% indented("$item.ctype", "$item.name") %];
+[% END -%]
+[% END -%]
+
+[% FOREACH item = columns -%]
+[% IF item.type == "S32" or item.type == "F32" or item.type == "F64" -%]
+    [% item.name %] = psMetadataLookup[% item.type %](&status, md, "[% item.name %]");
+[% ELSIF item.type == "STR" -%]
+    [% item.name %] = psMetadataLookupPtr(&status, md, "[% item.name %]");
+[% ELSIF item.type == "BOOL" -%]
+    [% item.name %] = psMetadataLookupBool(&status, md, "[% item.name %]");
+[% END -%]
+    if (!status) {
+        // psError(); something bad happened
+        return false;
+    }
+[% END -%]
+
+    return [% object_name %]Alloc(
+[%- SET i = 0 -%]
+[% FOREACH item = columns -%]
+[% IF i == 0 -%][%- i = 1 -%][% ELSE %], [% END -%]
+[% item.name %]
+[%- END -%]);
+}
Index: /trunk/glueforge/templates/psdb/objectfrommetadata_at.tt
===================================================================
--- /trunk/glueforge/templates/psdb/objectfrommetadata_at.tt	(revision 4334)
+++ /trunk/glueforge/templates/psdb/objectfrommetadata_at.tt	(revision 4334)
@@ -0,0 +1,6 @@
+AT_SETUP([[% namespace %]ObjectFromMetadata()])
+AT_KEYWORDS([[% namespace %]ObjectFromMetadata])
+
+AT_CHECK([objectfrommetadata])
+
+AT_CLEANUP
Index: /trunk/glueforge/templates/psdb/objectfrommetadata_c.tt
===================================================================
--- /trunk/glueforge/templates/psdb/objectfrommetadata_c.tt	(revision 4334)
+++ /trunk/glueforge/templates/psdb/objectfrommetadata_c.tt	(revision 4334)
@@ -0,0 +1,51 @@
+[% USE format -%]
+[% indented = format('%-15s %s') -%]
+#include <pslib.h>
+#include <[% pkg_name %].h>
+#include <stdlib.h>
+#include <string.h>
+
+#define MAX_STRING_LENGTH 1024
+
+int main ()
+{
+    psMetadata      *md;
+    [% indented(object_name, "*object") %];
+
+    md = psMetadataAlloc();
+[% FOREACH item = columns -%]
+[% IF item.type == "S32" or item.type == "F32" or item.type == "F64" -%]
+    if (!psMetadataAdd[% item.type %](md, PS_LIST_TAIL, "[% item.name %]", NULL, [% item.test %])) {
+[% ELSIF item.type == "STR" -%]
+    if (!psMetadataAddStr(md, PS_LIST_TAIL, "[% item.name %]", NULL, [% item.test %])) {
+[% ELSIF item.type == "BOOL" -%]
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "[% item.name %]", PS_META_BOOL, NULL, [% item.test %])) {
+[% END -%]
+        psFree(md);
+        exit(EXIT_FAILURE);
+    }
+[% END -%]
+
+    object = [% namespace %]ObjectFromMetadata(md);
+    if (!object) {
+        psFree(md);
+        exit(EXIT_FAILURE);
+    }
+
+    psFree(md);
+
+[% FOREACH item = columns -%]
+[% IF item.type == "S32" or item.type == "F32" or item.type == "F64" or item.type == "BOOL" -%]
+    if (!object->[% item.name %] == [% item.test %]) {
+[% ELSIF item.type == "STR" -%]
+    if (strncmp(object->[% item.name %], [% item.test %], MAX_STRING_LENGTH)) {
+[% END -%]
+        psFree(object);
+        exit(EXIT_FAILURE);
+    }
+[% END -%]
+
+    psFree(object);
+
+    exit(EXIT_SUCCESS);
+}
Index: /trunk/glueforge/templates/psdb/tests_makefile_am.tt
===================================================================
--- /trunk/glueforge/templates/psdb/tests_makefile_am.tt	(revision 4333)
+++ /trunk/glueforge/templates/psdb/tests_makefile_am.tt	(revision 4334)
@@ -57,5 +57,6 @@
     popfits \
     selectrowsfits \
-    metadatafromobject
+    metadatafromobject \
+    objectfrommetadata
 
 AM_CPPFLAGS = -I$(top_srcdir)/src$
Index: /trunk/glueforge/templates/psdb/testsuite_at.tt
===================================================================
--- /trunk/glueforge/templates/psdb/testsuite_at.tt	(revision 4333)
+++ /trunk/glueforge/templates/psdb/testsuite_at.tt	(revision 4334)
@@ -30,2 +30,4 @@
 [% INCLUDE metadatafromobject_at.tt %]
 ###
+[% INCLUDE objectfrommetadata_at.tt %]
+###
