Index: /trunk/psLib/test/collections/test4.config
===================================================================
--- /trunk/psLib/test/collections/test4.config	(revision 3952)
+++ /trunk/psLib/test/collections/test4.config	(revision 3952)
@@ -0,0 +1,161 @@
+#
+# This file contains examples from SDR-14 appendix A
+#
+CELL1 METADATA
+  EXTNAME  STR  CCD00
+  BIASSEC  STR  BSEC-00
+  CHIP     STR  CHIP.00
+  NCELL    S32  24
+END
+
+CELL2 METADATA
+   FOO METADATA
+       BAR   STR  BAZ
+       PING  STR  PONG
+   END
+
+   EXTNAME   STR  CCD00
+   BIASSEC   STR  BSEC-00
+   CHIP      STR  CHIP.00
+   NCELL     S32  24
+END
+
+FOO1 METADATA
+    FOO2 METADATA
+        FOO3 METADATA
+            FOO4 METADATA
+                FOO5 METADATA
+                    FOO6 METADATA
+                        BAR    STR   BAZ
+                        PING   STR   PONG
+                    END
+                    BAR   STR  BAZ
+                    PING  STR  PONG
+                END
+                BAR   STR  BAZ
+                PING  STR  PONG
+            END
+            BAR   STR   BAZ
+            PING  STR   PONG
+        END
+        BAR   STR  BAZ
+        PING  STR  PONG
+    END
+    BAR   STR  BAZ
+    PING  STR  PONG
+END
+
+FOO2 METADATA
+    BAR   STR  BAZ
+    PING  STR  PONG
+    FOO3 METADATA
+        BAR  STR  BAZ
+        PING STR  PONG
+        FOO4 METADATA
+            BAR  STR  BAZ
+            PING STR  PONG
+            FOO5 METADATA
+                BAR  STR BAZ
+                PING STR PONG
+                FOO6 METADATA
+                    BAR  STR  BAZ
+                    PING STR  PONG
+                    FOO7  METADATA
+                        BAR  STR BAZ
+                        PING STR PONG
+                    END
+                END
+            END
+        END
+    END
+END
+
+FOO3 METADATA
+    BAR  STR  BAZ
+    FOO4 METADATA
+        BAR  STR  BAZ
+        FOO5 METADATA
+            BAR  STR  BAZ
+            FOO6 METADATA
+                BAR   STR  BAZ
+                FOO7 METADATA
+                    BAR   STR   BAZ
+                    FOO8 METADATA
+                        BAR   STR  BAZ
+                        PING  STR  PONG
+                    END
+                    PING  STR  PONG
+                END
+                PING STR  PONG
+            END
+            PING STR  PONG
+        END
+        PING STR PONG
+    END
+    PING STR PONG
+END
+
+FOO4 METADATA
+    FOO5 METADATA
+        BAR  STR  BAZ
+        PING STR  PONG
+    END
+    FOO6 METADATA
+        BAR  STR  BAZ
+        PING STR  PONG
+    END
+END
+
+TYPE    CELL    EXTNAME   BIASSEC   CHIP
+CELL.00  CELL  CCD00  BSEC-00 CHIP.00
+CELL.01  CELL  CCD01  BSEC-01 CHIP.00
+FOO5 METADATA
+    TYPE CELL EXTNAME BIASSEC
+    CELL.00 CELL CCD00 BSEC-00
+    CELL.01 CELL CCD01 BSEC-01
+    FOO6 METADATA
+        TYPE CELL EXTNAME
+        CELL.00  CELL  CCD00
+        CELL.01  CELL  CCD01
+    END
+END
+
+foo MULTI
+foo S32   -1
+foo STR   bar baz
+foo BOOL  T
+
+foo1 MULTI        # foo
+foo1 S32  -1      # bar
+foo1 STR  bar baz # baz
+foo1 BOOL T       #
+
+foo2 MULTI
+foo2 S32 -1
+foo2 STR  bar baz
+foo2 BOOL  T
+bar1 METADATA
+    foo MULTI
+    foo S32  -1
+    foo STR  bar baz
+    foo BOOL T
+END
+
+foo3 MULTI
+foo3 METADATA
+    bar   BOOL T
+END
+foo3 METADATA
+    bar  BOOL T
+END
+
+foo4 MULTI
+TYPE bar a b c
+foo4 bar x y z
+foo4 bar x y z
+
+TYPE bar1 a b c
+foo5 MULTI
+foo5 bar1 x y z
+foo5 bar1 x y z
+
Index: /trunk/psLib/test/collections/test5.config
===================================================================
--- /trunk/psLib/test/collections/test5.config	(revision 3952)
+++ /trunk/psLib/test/collections/test5.config	(revision 3952)
@@ -0,0 +1,32 @@
+#
+# Examples from SDR-14 Appendix A which cause failures
+#
+TYPE  CELL1  EXTNAME  BIASSEC  CHIP
+FOO1 METADATA
+    CELL.00 CELL  CCD00  BSEC-00  CHIP.00
+END
+
+FOO2  METADATA
+    TYPE CELL2 EXTNAME BIASSEC CHIP
+END
+CELL.00 CELL2 CCD00 BSEC-00 CHIP.00
+
+FOO3 METADATA
+    TYPE CELL3 EXTNAME BIASSEC CHIP
+END
+BAR METADATA
+    CELL.00 CELL3 CCD00 BSEC-00 CHIP.00
+END
+
+TYPE CELL4 EXTNAME BIASSEC CHIP
+CELL.00 CELL4 CCD00 BSEC-00
+CELL.01 CELL4 CCD01 BSEC-01 CHIP.00
+
+TYPE CELL5 EXTNAME BIASSEC CHIP
+TYPE CELL5 EXTNAME BIASSEC CHIP
+CELL.02 CELL5 CCD00 BSEC-00 CHIP.00
+CELL.03 CELL5 CCD01 BSEC-01 CHIP.00
+
+CELL.04 CELL6 CCD00 BSEC-00 CHIP.00
+CELL.05 CELL6 CCD01 BSEC-01 CHIP.00
+
Index: /trunk/psLib/test/collections/tst_psMetadataIO.c
===================================================================
--- /trunk/psLib/test/collections/tst_psMetadataIO.c	(revision 3951)
+++ /trunk/psLib/test/collections/tst_psMetadataIO.c	(revision 3952)
@@ -13,6 +13,6 @@
  *  @author  Eric Van Alst, MHPCC
  *
- *  @version $Revision: 1.15 $  $Name: not supported by cvs2svn $
- *  @date  $Date: 2005-05-16 19:41:40 $
+ *  @version $Revision: 1.16 $  $Name: not supported by cvs2svn $
+ *  @date  $Date: 2005-05-16 22:19:15 $
  *
  *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -27,4 +27,6 @@
 static psS32 testMetadataParseConfig1(void);
 static psS32 testMetadataParseConfig2(void);
+static psS32 testMetadataParseConfig3(void);
+static psS32 testMetadataParseConfig4(void);
 
 testDescription tests[] = {
@@ -32,4 +34,6 @@
                               {testMetadataParseConfig1,000,"psMetadataParseConfig",0,false},
                               {testMetadataParseConfig2,000,"psMetadataParseConfig",0,false},
+                              {testMetadataParseConfig3,000,"psMetadataParseConfig",0,false},
+                              {testMetadataParseConfig4,000,"psMetadataParseConfig",0,false},
                               {NULL}
                           };
@@ -46,4 +50,10 @@
 
 #define ERROR_TOL  0.0001
+
+const char testConfig5[] = "test5.config";
+const psS32 testConfig5Fails = 7;
+
+const char testConfig4[] = "test4.config";
+const psS32 testConfig4Fails = 0;
 
 const char testConfig3[] = "test3.config";
@@ -378,5 +388,8 @@
     case PS_META_META:
         printf("%s%-25s METADATA\n",indentStr,metadataItem->name);
-        writeMetadata((psMetadata*)metadataItem->data.md,"    ");
+        char nestedStr[256] = "    ";
+        strcat(nestedStr,indentStr);
+        writeMetadata((psMetadata*)metadataItem->data.md,nestedStr);
+        printf("%sEND",indentStr);
         break;
     default:
@@ -955,5 +968,5 @@
     psS32             failedLines    = 0;
 
-    // Read config file test1.config with overwrite set false
+    // Read config file test3.config with overwrite set false
     psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error of duplicate key names");
     metadata1 = psMetadataParseConfig(metadata1,&failedLines,testConfig3,false);
@@ -971,2 +984,37 @@
 }
 
+psS32 testMetadataParseConfig3(void)
+{
+    psMetadata*       metadata1      = NULL;
+    psS32             failedLines    = 0;
+
+    // Read config file test4.config with overwrite set false
+    metadata1 = psMetadataParseConfig(metadata1,&failedLines,testConfig4,false);
+    // Verify the expected number of failed lines
+    if(!checkFailedLines(failedLines,testConfig4Fails,(char*)testConfig4)) {
+        return 1;
+    }
+    // Print out metadata items for comparison against STDERR verified file
+    writeMetadata(metadata1,"");
+
+    psFree(metadata1);
+
+    return 0;
+}
+
+psS32 testMetadataParseConfig4(void)
+{
+    psMetadata*       metadata1      = NULL;
+    psS32             failedLines    = 0;
+
+    // Read config file test4.config with overwrite set false
+    metadata1 = psMetadataParseConfig(metadata1,&failedLines,testConfig5,true);
+    // Verify the expected number of failed lines
+    if(!checkFailedLines(failedLines,testConfig5Fails,(char*)testConfig5)) {
+        return 1;
+    }
+    psFree(metadata1);
+
+    return 0;
+}
+
Index: /trunk/psLib/test/collections/verified/tst_psMetadataIO.stderr
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psMetadataIO.stderr	(revision 3951)
+++ /trunk/psLib/test/collections/verified/tst_psMetadataIO.stderr	(revision 3952)
@@ -84,2 +84,36 @@
 ---> TESTPOINT PASSED (psMetadataParseConfig{psMetadataParseConfig} | tst_psMetadataIO.c)
 
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadataIO.c                                         *
+*            TestPoint: psMetadataParseConfig{psMetadataParseConfig}               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|E|psStringNCopy (FILE:LINENO)
+    Can not copy a negative number of characters (-9).
+
+---> TESTPOINT PASSED (psMetadataParseConfig{psMetadataParseConfig} | tst_psMetadataIO.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadataIO.c                                         *
+*            TestPoint: psMetadataParseConfig{psMetadataParseConfig}               *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
+    Metadata type 'CELL', found on line 6 of test5.config, is not invalid.
+<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
+    Metadata type 'CELL2', found on line 12 of test5.config, is not invalid.
+<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
+    Metadata type 'CELL3', found on line 18 of test5.config, is not invalid.
+<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
+    Failed to read a metadata CELL.00 on line 22 of test5.config.
+<DATE><TIME>|<HOST>|E|parseLine (FILE:LINENO)
+    Specified type, CELL5, on line 26 of test5.config is already defined.
+<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
+    Metadata type 'CELL6', found on line 30 of test5.config, is not invalid.
+<DATE><TIME>|<HOST>|E|parseMetadataItem (FILE:LINENO)
+    Metadata type 'CELL6', found on line 31 of test5.config, is not invalid.
+
+---> TESTPOINT PASSED (psMetadataParseConfig{psMetadataParseConfig} | tst_psMetadataIO.c)
+
Index: /trunk/psLib/test/collections/verified/tst_psMetadataIO.stdout
===================================================================
--- /trunk/psLib/test/collections/verified/tst_psMetadataIO.stdout	(revision 3951)
+++ /trunk/psLib/test/collections/verified/tst_psMetadataIO.stdout	(revision 3952)
@@ -24,10 +24,10 @@
     BIASSEC                   STR                                    BSEC-00
     CHIP                      STR                                    CHIP.00
-
+END
 CELL.01                   METADATA
     EXTNAME                   STR                                      CCD01
     BIASSEC                   STR                                    BSEC-01
     CHIP                      STR                                    CHIP.00
-
+END
 MYCELL                    MULTI
 MYCELL                    METADATA
@@ -36,14 +36,187 @@
     CHIP                      STR                                    CHIP.00
     NCELL                     S32                                         24
-
+END
 MYCELL                    S32                                        123  # A number            
 cell                      METADATA
     foo                       METADATA
-    bar                       STR                                        BAZ
-    ping                      STR                                       PONG
-
+        bar                       STR                                        BAZ
+        ping                      STR                                       PONG
+    END
     EXTNAME                   STR                                      CCD00
     BIASSEC                   STR                                    BSEC-00
     CHIP                      STR                                    CHIP.00
     NCELL                     S32                                         12
-
+END
+CELL1                     METADATA
+    EXTNAME                   STR                                      CCD00
+    BIASSEC                   STR                                    BSEC-00
+    CHIP                      STR                                    CHIP.00
+    NCELL                     S32                                         24
+END
+CELL2                     METADATA
+    FOO                       METADATA
+        BAR                       STR                                        BAZ
+        PING                      STR                                       PONG
+    END
+    EXTNAME                   STR                                      CCD00
+    BIASSEC                   STR                                    BSEC-00
+    CHIP                      STR                                    CHIP.00
+    NCELL                     S32                                         24
+END
+FOO1                      METADATA
+    FOO2                      METADATA
+        FOO3                      METADATA
+            FOO4                      METADATA
+                FOO5                      METADATA
+                    FOO6                      METADATA
+                        BAR                       STR                                        BAZ
+                        PING                      STR                                       PONG
+                    END
+                    BAR                       STR                                        BAZ
+                    PING                      STR                                       PONG
+                END
+                BAR                       STR                                        BAZ
+                PING                      STR                                       PONG
+            END
+            BAR                       STR                                        BAZ
+            PING                      STR                                       PONG
+        END
+        BAR                       STR                                        BAZ
+        PING                      STR                                       PONG
+    END
+    BAR                       STR                                        BAZ
+    PING                      STR                                       PONG
+END
+FOO2                      METADATA
+    BAR                       STR                                        BAZ
+    PING                      STR                                       PONG
+    FOO3                      METADATA
+        BAR                       STR                                        BAZ
+        PING                      STR                                       PONG
+        FOO4                      METADATA
+            BAR                       STR                                        BAZ
+            PING                      STR                                       PONG
+            FOO5                      METADATA
+                BAR                       STR                                        BAZ
+                PING                      STR                                       PONG
+                FOO6                      METADATA
+                    BAR                       STR                                        BAZ
+                    PING                      STR                                       PONG
+                    FOO7                      METADATA
+                        BAR                       STR                                        BAZ
+                        PING                      STR                                       PONG
+                    END
+                END
+            END
+        END
+    END
+END
+FOO3                      METADATA
+    BAR                       STR                                        BAZ
+    FOO4                      METADATA
+        BAR                       STR                                        BAZ
+        FOO5                      METADATA
+            BAR                       STR                                        BAZ
+            FOO6                      METADATA
+                BAR                       STR                                        BAZ
+                FOO7                      METADATA
+                    BAR                       STR                                        BAZ
+                    FOO8                      METADATA
+                        BAR                       STR                                        BAZ
+                        PING                      STR                                       PONG
+                    END
+                    PING                      STR                                       PONG
+                END
+                PING                      STR                                       PONG
+            END
+            PING                      STR                                       PONG
+        END
+        PING                      STR                                       PONG
+    END
+    PING                      STR                                       PONG
+END
+FOO4                      METADATA
+    FOO5                      METADATA
+        BAR                       STR                                        BAZ
+        PING                      STR                                       PONG
+    END
+    FOO6                      METADATA
+        BAR                       STR                                        BAZ
+        PING                      STR                                       PONG
+    END
+END
+CELL.00                   METADATA
+    EXTNAME                   STR                                      CCD00
+    BIASSEC                   STR                                    BSEC-00
+    CHIP                      STR                                    CHIP.00
+END
+CELL.01                   METADATA
+    EXTNAME                   STR                                      CCD01
+    BIASSEC                   STR                                    BSEC-01
+    CHIP                      STR                                    CHIP.00
+END
+FOO5                      METADATA
+    CELL.00                   METADATA
+        EXTNAME                   STR                                      CCD00
+        BIASSEC                   STR                                    BSEC-00
+    END
+    CELL.01                   METADATA
+        EXTNAME                   STR                                      CCD01
+        BIASSEC                   STR                                    BSEC-01
+    END
+    FOO6                      METADATA
+        CELL.00                   METADATA
+            EXTNAME                   STR                                      CCD00
+        END
+        CELL.01                   METADATA
+            EXTNAME                   STR                                      CCD01
+        END
+    END
+END
+foo                       MULTI
+foo                       S32                                         -1
+foo                       STR                                    bar baz
+foo                       BOOL                                         1
+foo1                      MULTI
+foo1                      S32                                         -1  # bar                 
+foo1                      STR                                    bar baz  # baz                 
+foo1                      BOOL                                         1
+foo2                      MULTI
+foo2                      S32                                         -1
+foo2                      STR                                    bar baz
+foo2                      BOOL                                         1
+bar1                      METADATA
+foo                       MULTI
+    foo                       S32                                         -1
+    foo                       STR                                    bar baz
+    foo                       BOOL                                         1
+END
+foo3                      MULTI
+foo3                      METADATA
+    bar                       BOOL                                         1
+END
+foo3                      METADATA
+    bar                       BOOL                                         1
+END
+foo4                      MULTI
+foo4                      METADATA
+    a                         STR                                          x
+    b                         STR                                          y
+    c                         STR                                          z
+END
+foo4                      METADATA
+    a                         STR                                          x
+    b                         STR                                          y
+    c                         STR                                          z
+END
+foo5                      MULTI
+foo5                      METADATA
+    a                         STR                                          x
+    b                         STR                                          y
+    c                         STR                                          z
+END
+foo5                      METADATA
+    a                         STR                                          x
+    b                         STR                                          y
+    c                         STR                                          z
+END
