Index: trunk/SophyaLib/BaseTools/anydataobj.h
===================================================================
--- trunk/SophyaLib/BaseTools/anydataobj.h	(revision 871)
+++ trunk/SophyaLib/BaseTools/anydataobj.h	(revision 895)
@@ -10,4 +10,6 @@
 namespace SOPHYA {
 
+//! Ancestor class for all data objects (for RTTI).
+
 class AnyDataObj {
 public:
Index: trunk/SophyaLib/BaseTools/dvlist.cc
===================================================================
--- trunk/SophyaLib/BaseTools/dvlist.cc	(revision 871)
+++ trunk/SophyaLib/BaseTools/dvlist.cc	(revision 895)
@@ -12,5 +12,5 @@
 //++
 // Class	DVList
-// Lib		Outils++
+// Lib		SysTools
 // include	dvlist.h
 //
@@ -42,4 +42,48 @@
 static MuTyV ddvdum(-9.e19);
 
+/*!
+   \class SOPHYA::DVList
+   This class can be used to construct list of values associated with names.
+   Variables names should not contain space characters and is limited to 64
+   characters. The DVList class uses \b SOPHYA::MuTyV objects to hold values
+   of type string, integer (\b int_8) or float (\b r_8). A comment string
+   can be associated with each variable name. A global comment string
+   can be attached to the DVList object. DVList objects can conveniently be 
+   used to represent FITS headers. The class \b SOPHYA::ObjFileIO<DVList>
+   handles serialisation for DVList. (See SOPHYA::PPersist ).
+   An 
+   \code
+   //  ------- Using MuTyV objects ------- 
+   MuTyV mvu;         // MuTyV variable declaration 
+   mvu = 60;          // mvu contains the integer value 60
+   mvu = 66.6;        // and now the double value 66.6 
+   string ds = mvu;   // ds contains the string "66.6"
+   MuTyV mvi(14);     // New MuTyV variable containing integer value 14
+   r_4 x = mvi;       // x has the value 14.0
+   MuTyV mvs("Bonjour !");  // mvs contains the string "Bonjour !"
+   string s = mvs;          // s vaut "Bonjour, Ca va ?"  
+   //  ------- Using DVList objects ------ 
+   DVList  dvl;
+   dvl("toto") = 14;      // Integer type value (=14) named toto
+   dvl("titi") = 25.5;    // float type value (=25.5) named titi
+   dvl("tata") = "Bonjour !"; // string type value (="Bonjour !") named tata 
+   // Upper and lower case letters are distinguished
+   dvl("hello") = 88;
+   dvl("Hello") = 77.77;    
+   dvl.Comment() = "DVList test object, with values named hello, Hello ";
+   // Saving the dvl object into a PPF file 
+   POutStream os("dvl.ppf");
+   os << dvl;
+   //  later on ...
+   DVList dvlr; 
+   PInStream is("dvl.ppf");
+   is << dvlr;
+   int k = dvlr["toto"] ;     //  k = 14
+   r_8 b = dvlr["titi"] ;     //  b = 25.5
+   string s =  dvlr["tata"] ; //  s = "Bonjour !"
+   int m =  dvlr["hello"] ;   //  m = 88
+
+   \endcode
+*/
 
 //++
@@ -58,4 +102,5 @@
 
 /* --Methode-- */
+/*! Default constructor */
 DVList::DVList()
 {
@@ -64,4 +109,5 @@
 
 /* --Methode-- */
+/*! copy constructor */
 DVList::DVList(const DVList& dvl)
 {
@@ -70,4 +116,5 @@
 
 /* --Methode-- */
+/*! Copy constructor - Object initialized using the PPF file \b flnm */
 DVList::DVList(char *flnm)
 {
@@ -97,4 +144,5 @@
 
 /* --Methode-- */
+/*! Copy operator - Replaces the variables list with the list from \b dvl */
 DVList&     DVList::operator= (const DVList& dvl)
 {
@@ -105,4 +153,5 @@
 
 /* --Methode-- */
+/*! Resets the object and clears the variable list and global comment */
 void        DVList::Clear()
 {
@@ -112,4 +161,5 @@
 
 /* --Methode-- */
+/*! Appends the values from the object \b dvl to the objects list */
 DVList&     DVList::Merge(const DVList& dvl)
 {
@@ -149,4 +199,6 @@
 
 /* --Methode-- */
+/*! Returns the value corresponding to name \b key, converted to integer
+    Default value \b def is returned if name \b key not found */
 int_8       DVList::GetI(string const& key, int_8 def)
 {
@@ -158,4 +210,6 @@
 
 /* --Methode-- */
+/*! Returns the value corresponding to name \b key, converted to double
+    Default value \b def is returned if name \b key not found */
 r_8      DVList::GetD(string const& key, r_8 def)
 {
@@ -167,4 +221,6 @@
 
 /* --Methode-- */
+/*! Returns the value corresponding to name \b key, converted to string
+    Default value \b def is returned if name \b key not found */
 string      DVList::GetS(string const& key, char* def)
 {
@@ -176,4 +232,5 @@
 
 /* --Methode-- */
+/*! Returns the comment associated with name \b key */ 
 string      DVList::GetComment(string const& key)
 {
@@ -200,4 +257,5 @@
 
 /* --Methode-- */
+/*! Appends or sets the integer value \b val in the list with name \b key */
 void        DVList::SetI(string const& key, int_8 val)
 {
@@ -207,4 +265,5 @@
 /* --Methode-- */
 void        DVList::SetD(string const& key, r_8 val)
+/*! Appends or sets the double value \b val in the list with name \b key */
 {
 Get(key) = (r_8)val;
@@ -212,4 +271,5 @@
 
 /* --Methode-- */
+/*! Appends or sets the string value \b val in the list with name \b key */
 void        DVList::SetS(string const& key, char const* val)
 {
@@ -219,4 +279,5 @@
 
 /* --Methode-- */
+/*! Appends or sets the string value \b val in the list with name \b key */
 void        DVList::SetS(string const& key, string val)
 {
@@ -226,4 +287,6 @@
 
 /* --Methode-- */
+/*! Assigns the comment \b comm with the name \b key . 
+    Does nothing if the entry with name is not present in the list   */
 void        DVList::SetComment(string const& key, string const& comm)
 {
@@ -246,4 +309,6 @@
 
 /* --Methode-- */
+/*!  Return the MuTyV value associated with name \b key .
+     Adds an entry of type integer in the list if \b key is not present in the list   */
 MuTyV&      DVList::Get(string const& key)
 {
@@ -272,6 +337,14 @@
 //--
 
-
-/* --Methode-- */
+/* --Methode-- */
+/*! Prints a brief description of object on on the output stream \b os */
+void        DVList::Show(ostream& os) const
+{
+os << "DVList::Show() - NVar= " << (int)mvlist.size() << "\n";
+os << comment << endl;
+}
+
+/* --Methode-- */
+/*! Prints the list of variables on the output stream \b os */
 void        DVList::Print(ostream& os) const
 {
Index: trunk/SophyaLib/BaseTools/dvlist.h
===================================================================
--- trunk/SophyaLib/BaseTools/dvlist.h	(revision 871)
+++ trunk/SophyaLib/BaseTools/dvlist.h	(revision 895)
@@ -70,4 +70,5 @@
 //  Classe liste de variables  Dynamic Variable List  
 
+//! Dynamic Variable List class. 
 class DVList : public AnyDataObj {
 public:
@@ -97,9 +98,16 @@
 
   MuTyV&            Get(string const& key);
+/*! Returns the value associated with the name \b key */
   inline MuTyV&     operator()  (string const& key)  { return Get(key); }
+/*! Returns the value associated with the name \b key */
   inline MuTyV&     operator[]  (string const& key)  { return Get(key); }
+/*! Returns the global comment string associated with the object */
   inline string&    Comment() { return(comment); }
 
-  inline void       Print() const  { Print(cout); }  
+/*! Prints a brief description of object on \b cout */
+  inline  void      Show() const { Show(cout); }
+  virtual void      Show(ostream& os)  const;
+/*! Prints the list of variables on \b cout */
+  inline  void      Print() const  { Print(cout); }  
   virtual void      Print(ostream& os)  const;
 
@@ -111,5 +119,7 @@
   struct dvlElement {MuTyV elval; string elcomm; } ;
   typedef map<string, dvlElement, less<string> >  ValList; 
+/*! Returns an iterator pointing on the first variable in the list */
   inline ValList::const_iterator Begin() { return(mvlist.begin()); } 
+/*! Returns the iterator end value */
   inline ValList::const_iterator End() { return(mvlist.end()); } 
   
@@ -121,9 +131,12 @@
 };
 
+/*! operator << overloading - Prints the list on the stream \b s */
 inline ostream& operator << (ostream& s, DVList const & dvl)
   {  dvl.Print(s);  return(s);  }
 
+/*! Writes the object in the POutPersist stream \b os */
 inline POutPersist& operator << (POutPersist& os, DVList & obj)
 { ObjFileIO<DVList> fio(&obj);  fio.Write(os);  return(os); }
+/*! Reads the object from the PInPersist stream \b is */
 inline PInPersist& operator >> (PInPersist& is, DVList & obj)
 { ObjFileIO<DVList> fio(&obj);  fio.Read(is);  return(is); }
Index: trunk/SophyaLib/BaseTools/pexceptions.h
===================================================================
--- trunk/SophyaLib/BaseTools/pexceptions.h	(revision 871)
+++ trunk/SophyaLib/BaseTools/pexceptions.h	(revision 895)
@@ -14,22 +14,32 @@
 namespace SOPHYA {
 
-  // Utiliatire pour accoler un nom de fichier et numero de ligne au message
+//! Utility function for appending a file name and line number to a message
   string BuildLongExceptionMessage(const char * s, const char *file, int line);
 
-  // Ancestor for PError and PException
-  // It has a message, and an id to give more
-  // information on the exception.
+//! Base exception class in Sophya.
+/*! Ancestor for PError and PException
+    It has a message, and an id to give more
+    information on the exception.
+*/
   class PThrowable {
   public:
+    //! Constructor with the message and error-id (optional) specification
     explicit PThrowable(const string& m, int ident=0) 
       : msg(m), id(ident) {}
     virtual ~PThrowable() { }
+    //! Returns the associated message string
     virtual string const& Msg() const  {return msg;}
+    //! Returns the associated error-id
+    virtual int Id() const {return id; }
   private:
     string msg;
     int    id;
   };
-  
-  // A PError is a serious logic error. Usually not caught...
+
+//  PThrowable
+//      PError
+//      PException
+  
+//! A PError is a serious logic error. Usually not caught...
   class PError : public PThrowable {
   public:
@@ -37,5 +47,5 @@
   };
   
-  // A PException is not as serious... Can be caught.
+//! A PException is not as serious... Can be caught.
   class PException : public PThrowable {
   public:
@@ -43,6 +53,12 @@
   };
   
-  // Errors
-  // Memory allocation failure
+//  ----   Errors ----
+//  PError
+//     AllocationError
+//     NullPtrError
+//     ForbiddenError
+//     AssertionFailedError
+
+//! Memory allocation failure
   class AllocationError : public PError {
   public:
@@ -50,5 +66,5 @@
   };
   
-  // Null pointer error
+//! Null pointer error
   class NullPtrError : public PError {
   public:
@@ -56,23 +72,6 @@
   };
   
-  // Size mismatch between objects
-  class SzMismatchError : public PError {
-  public:
-    explicit SzMismatchError(const string& m, int id=0) : PError(m,id) {}
-  };
-  
-  // Out of bounds for array, matrix, etc.
-  class RangeCheckError : public PError {
-  public:
-    explicit RangeCheckError(const string& m, int id=0) : PError(m,id) {}
-  };
-  
-  // Invalid parameter to method/constructor...
-  class ParmError : public PError {
-  public:
-    explicit ParmError(const string& m, int id=0) : PError(m,id) {}
-  };
-  
-  // Calling a forbidden method, trying a forbidden operation
+  
+//! Calling a forbidden method, trying a forbidden operation
   class ForbiddenError : public PError {
   public:
@@ -80,11 +79,6 @@
   };
 
-  // Calling a non available / not implemented method
-  class NotAvailableOperation : public PException {
-  public:
-    explicit NotAvailableOperation(const string& m, int id=0) : PException(m,id) {}
-  };
-  
-  // ASSERT macro failure. The message is the assertion...
+  
+//! ASSERT macro failure. The message is the assertion...
   class AssertionFailedError : public PError {
   public:
@@ -97,11 +91,15 @@
   //   IOExc
   //     FileFormatExc
+  //   SzMismatchError
+  //   RangeCheckError
+  //   ParmError
   //   TypeMismatchExc
+  //   MathExc
+  //     SingMatxExc
   //   DuplicateIdExc
   //   NotFoundExc
-  //   MathExc
-  //     SingMatxExc
-  
-  // generic IO Exception
+  //   CaughtSignalExc
+  
+  //! Generic IO Exception.
   class IOExc : public PException {
   public:
@@ -109,10 +107,41 @@
   };
 
-  // Bad type -> keep ?
+  //! Bad file format.
+  class FileFormatExc : public IOExc {
+  public:
+    explicit FileFormatExc(const string& m, int id=0) : IOExc(m,id) {}
+  };
+
+  //! Size mismatch between objects.
+  class SzMismatchError : public PException {
+  public:
+    explicit SzMismatchError(const string& m, int id=0) : PException(m,id) {}
+  };
+  
+  //! Out of bounds for array, matrix, etc.
+  class RangeCheckError : public PException {
+  public:
+    explicit RangeCheckError(const string& m, int id=0) : PException(m,id) {}
+  };
+  
+  //! Invalid parameter to method/constructor...
+  class ParmError : public PException {
+  public:
+    explicit ParmError(const string& m, int id=0) : PException(m,id) {}
+  };
+
+  //! Calling a non available / not implemented method
+  class NotAvailableOperation : public PException {
+  public:
+    explicit NotAvailableOperation(const string& m, int id=0) : PException(m,id) {}
+  };
+
+  //! Bad data type -> keep ?
   class TypeMismatchExc : public PException {
   public:
     explicit TypeMismatchExc(const string& m, int id=0) : PException(m,id) {}
   };
-  
+
+  //! Math operation exception
   class MathExc : public PException {
   public:
@@ -120,4 +149,11 @@
   };
   
+  //! Singular matrix 
+  class SingMatrixExc : public MathExc {
+  public:
+    explicit SingMatrixExc(const string& m, int id=0) : MathExc(m,id) {}
+  };
+
+  //! Duplicate identifier during registration
   class DuplicateIdExc : public PException {
   public:
@@ -125,4 +161,5 @@
   };
   
+  //! Not found identifier 
   class NotFoundExc : public PException {
   public:
@@ -130,22 +167,11 @@
   };
   
+  //! Generated exception when processing a signal
   class CaughtSignalExc : public PException {
   public:
     explicit CaughtSignalExc(const string& m, int id=0) : PException(m,id) {}
   };
-
-  // Bad file format
-  class FileFormatExc : public IOExc {
-  public:
-    explicit FileFormatExc(const string& m, int id=0) : IOExc(m,id) {}
-  };
-  
-  class SingMatrixExc : public MathExc {
-  public:
-    explicit SingMatrixExc(const string& m, int id=0) : MathExc(m,id) {}
-  };
-  
-  
-}
+    
+} // namespace SOPHYA
 
 
Index: trunk/SophyaLib/BaseTools/ppersist.h
===================================================================
--- trunk/SophyaLib/BaseTools/ppersist.h	(revision 871)
+++ trunk/SophyaLib/BaseTools/ppersist.h	(revision 895)
@@ -34,6 +34,5 @@
   class PPersist;
 
-  /* Persistant (delegate or mixin) object */
-
+//! Persistent (delegate or mixin) base class 
   class PPersist  {
   public:
@@ -69,6 +68,6 @@
 
 
-  // Ancestor for PInPersist and POutPersist
-  // Handles (statically) the registration of classes.
+//! Ancestor for PInPersist and POutPersist PPF streams.
+// Handles (statically) the registration of classes.
 
   class PIOPersist {
@@ -137,4 +136,5 @@
   // TBD : use hash tables instead of maps. Check hashtbl status in STL.
 
+//! Input stream for PPersit objects.
   class PInPersist : public PIOPersist {
   public:
@@ -236,4 +236,5 @@
   };
 
+//! Output stream for PPersit objects.
   class POutPersist : public PIOPersist {
   public:
@@ -370,5 +371,6 @@
   //   - compute the class ID from a MD5 hash of the class name
   //   - register classes with PIOPersist, through PPRegister macro
-  
+
+//! template class for handling the PPersist registration mechanism.
   template <class T>
     class PPersistRegistrar {
