Index: trunk/psModules/src/concepts/pmConcepts.h
===================================================================
--- trunk/psModules/src/concepts/pmConcepts.h	(revision 22688)
+++ trunk/psModules/src/concepts/pmConcepts.h	(revision 22699)
@@ -37,21 +37,34 @@
 
 /// Function to call to parse a concept once it has been read
-typedef psMetadataItem* (*pmConceptParseFunc)(const psMetadataItem *concept, ///< Concept to parse
-        const psMetadataItem *pattern, ///< Pattern for parsing
-                                              pmConceptSource source, ///< Source of concept
-        const psMetadata *cameraFormat, ///< Camera format definition
-        const pmFPA *fpa, ///< FPA for concept, or NULL
-        const pmChip *chip, ///< Chip for concept, or NULL
-        const pmCell *cell ///< Cell for concept, or NULL
-                                             );
+typedef psMetadataItem* (*pmConceptParseFunc)(
+    const psMetadataItem *concept, ///< Concept to parse
+    const psMetadataItem *pattern, ///< Pattern for parsing
+    pmConceptSource source, ///< Source of concept
+    const psMetadata *cameraFormat, ///< Camera format definition
+    const pmFPA *fpa, ///< FPA for concept, or NULL
+    const pmChip *chip, ///< Chip for concept, or NULL
+    const pmCell *cell ///< Cell for concept, or NULL
+    );
 
 /// Function to call to format a concept for writing
-typedef psMetadataItem* (*pmConceptFormatFunc)(const psMetadataItem *concept, ///< Concept to format
-                                               pmConceptSource source, ///< Source of concept
-        const psMetadata *cameraFormat, ///< Camera format definition
-        const pmFPA *fpa, ///< FPA for concept, or NULL
-        const pmChip *chip, ///< Chip for concept, or NULL
-        const pmCell *cell ///< Cell for concept, or NULL
-                                              );
+typedef psMetadataItem* (*pmConceptFormatFunc)(
+    const psMetadataItem *concept, ///< Concept to format
+    pmConceptSource source, ///< Source of concept
+    const psMetadata *cameraFormat, ///< Camera format definition
+    const pmFPA *fpa, ///< FPA for concept, or NULL
+    const pmChip *chip, ///< Chip for concept, or NULL
+    const pmCell *cell ///< Cell for concept, or NULL
+    );
+
+/// Function to call to copy a concept
+typedef psMetadataItem* (*pmConceptCopyFunc)(
+    const psMetadataItem *target,       ///< Target concept
+    const psMetadataItem *source,       ///< Source concept
+    const psMetadata *cameraFormat,     ///< Camera format definition
+    const pmFPA *fpa,                   ///< Source FPA for concept, or NULL
+    const pmChip *chip,                 ///< Source chip for concept, or NULL
+    const pmCell *cell                  ///< Source cell for concept, or NULL
+    );
+
 
 /// A "concept" specification
@@ -59,9 +72,9 @@
 /// Defines the name, default comment, blank value, and functions to parse (after reading) and format (before
 /// writing) the concept.
-typedef struct
-{
+typedef struct {
     psMetadataItem *blank;              ///< Blank value of concept; also contains the name and comment
-    pmConceptParseFunc parse;           ///< Function to call to read the concept
-    pmConceptFormatFunc format;         ///< Function to call to write the concept
+    pmConceptParseFunc parse;           ///< Function to call to read the concept, or NULL
+    pmConceptFormatFunc format;         ///< Function to call to write the concept, or NULL
+    pmConceptCopyFunc copy;             ///< Function to call to copy the concept, or NULL
     bool required;                      ///< Is concept required (throw an error on problems)?
 }
@@ -70,6 +83,7 @@
 /// Allocator for pmConceptSpec
 pmConceptSpec *pmConceptSpecAlloc(psMetadataItem *blank, ///< Blank value; contains the name
-                                  pmConceptParseFunc parse, ///< Function to call to parse the concept
-                                  pmConceptFormatFunc format, ///< Function to call to format the concept
+                                  pmConceptParseFunc parse, ///< Function to call to parse the concept/NULL
+                                  pmConceptFormatFunc format, ///< Function to call to format the concept/NULL
+                                  pmConceptCopyFunc copy, ///< Function to call to copy the concept, or NULL
                                   bool required ///< Is concept required?
                                  );
@@ -95,46 +109,15 @@
                        pmConceptParseFunc parse, ///< Function to call to parse the concept, or NULL
                        pmConceptFormatFunc format, ///< Function to call to format the concept, or NULL
+                       pmConceptCopyFunc copy, ///< Function to call to copy the concept, or NULL
                        bool required,   ///< Is concept required?
                        pmFPALevel level ///< Level at which to store concept in the FPA hierarchy
                       );
 
-/// Get a list of defined concepts for a particular level.
-psList *pmConceptsList(pmFPALevel level);
+/// Get the specifications for defined concepts of a particular level
+psMetadata *pmConceptsSpecs(pmFPALevel level);
 
-/// Read the concepts for the given set of fpa, chip, cell
-///
-/// Attempts to read as many concepts as possible from the specified source for the specified FPA, chip and
-/// cell.  That is, it will read chip- and cell-level concepts in addition to fpa-level concepts, if the chip
-/// and cell are provided.
-bool pmConceptsRead(pmFPA *fpa,         ///< FPA for which to read concepts
-                    pmChip *chip,       ///< Chip for which to read concepts, or NULL
-                    pmCell *cell,       ///< Cell for which to read concepts, or NULL
-                    pmConceptSource source, ///< The source of the concepts to read
-                    pmConfig *config    ///< Configuration
-                   );
 
 /// Set the concepts within the FPA to the blank value
 bool pmConceptsBlankFPA(pmFPA *fpa      ///< FPA for which to set blank concepts
-                       );
-
-/// Read concepts for an FPA; optionally, read concepts at all lower levels.
-///
-/// Once concepts should be available for reading at the FPA-level, this function attempts to read the
-/// concepts from the specified source.  It also allows concepts to be read at lower levels by iterating over
-/// the components.
-bool pmConceptsReadFPA(pmFPA *fpa,      ///< FPA for which to read concepts
-                       pmConceptSource source, ///< Source for concepts
-                       bool propagateDown, ///< Propagate to lower levels?
-                       pmConfig *config         ///< Configuration
-                      );
-
-/// Write concepts for an FPA; optionally, write concepts at all lower levels.
-///
-/// This function writes all concepts for the FPA to the specified "source".  It also allows concepts to be
-/// written for all lower levels by iterating over the components.
-bool pmConceptsWriteFPA(const pmFPA *fpa,     ///< FPA for which to write concepts
-                        pmConceptSource source, ///< Source for concepts
-                        bool propagateDown, ///< Propagate to lower levels?
-                        pmConfig *config        ///< Configuration
                        );
 
@@ -143,51 +126,6 @@
                         );
 
-/// Read concepts for a chip; optionally, read concepts at the FPA and cell levels.
-///
-/// Once concepts should be available for reading at the FPA-level, this function attempts to read the
-/// concepts from the specified source.  It also allows concepts to be read at the fpa level (through the
-/// parent), and the cell level by iterating over the components.
-bool pmConceptsReadChip(pmChip *chip,   ///< Chip for which to read concepts
-                        pmConceptSource source, ///< Source for concepts
-                        bool propagateUp, ///< Propagate to higher levels?
-                        bool propagateDown, ///< Propagate to lower levels?
-                        pmConfig *config        ///< Configuration
-                       );
-
-/// Write concepts for a chip; optionally, write concepts at the FPA and cell levels.
-///
-/// This function writes all concepts for the chip to the specified "source".  It also allows concepts to be
-/// written for the FPA, and the cell level by iterating over the components.
-bool pmConceptsWriteChip(const pmChip *chip,  ///< Chip for which to write concepts
-                         pmConceptSource source, ///< Source for concepts
-                         bool propagateUp,///< Propagate to higher levels?
-                         bool propagateDown, ///< Propagate to lower levels?
-                         pmConfig *config       ///< Configuration
-                        );
-
 /// Set the concepts within the cell to the blank value
 bool pmConceptsBlankCell(pmCell *cell   ///< Cell for which to set blank concepts
-                        );
-
-/// Read concepts for a cell; optionally, read concepts for the parents.
-///
-/// Once concepts should be available for reading at the FPA-level, this function attempts to read the
-/// concepts from the specified source.  It also allows concepts to be read at upper levels through the
-/// parents (note, it would not read concepts for all chips, but only the parent of this cell).
-bool pmConceptsReadCell(pmCell *cell,   ///< Cell for which to read concepts
-                        pmConceptSource source, ///< Source for concepts
-                        bool propagateUp, ///< Propagate to higher levels?
-                        pmConfig *config        ///< Configuration
-                       );
-
-/// Write concepts for a cell; optionally, write concepts for the parents.
-///
-/// This function writes all concepts for the chip to the specified "source".  It also allows concepts to be
-/// written for the upper levels through the parents (note, it would not write concepts for all chips, but
-/// only the parent of this cell).
-bool pmConceptsWriteCell(const pmCell *cell,  ///< FPA for which to write concepts
-                         pmConceptSource source, ///< Source for concepts
-                         bool propagateUp, ///< Propagate to higher levels?
-                         pmConfig *config ///< Configuration
                         );
 
@@ -202,29 +140,4 @@
 /// Frees the registered concepts so there is no memory leak when the user checks "persistent" memory.
 void pmConceptsDone(void);
-
-/// Copy all the concepts within an FPA to another FPA
-///
-/// Iterates over all components of the FPA, and copies the concepts metadata from the source to the target.
-bool pmFPACopyConcepts(pmFPA *target,   ///< The target FPA
-                       const pmFPA *source    ///< The source FPA
-                      );
-
-/// Copy the concepts within an FPA to another FPA; optionally recurse to lower levels
-bool pmConceptsCopyFPA(pmFPA *target,   ///< Target FPA
-                       const pmFPA *source, ///< Source FPA
-                       bool chips,      ///< Recurse to chips level?
-                       bool cells       ///< Recurse to cells level?
-    );
-
-/// Copy the concepts within a chip to another chip; optionally recurse to lower level
-bool pmConceptsCopyChip(pmChip *target, ///< Target chip
-                        const pmChip *source, ///< Source chip
-                        bool cells      ///< Recurse to cells level?
-    );
-
-/// Copy the concepts within a cell to another cell
-bool pmConceptsCopyCell(pmCell *target, ///< Target cell
-                        const pmCell *source ///< Source cell
-    );
 
 /// Interpolate a concept name to the actual value
