Index: trunk/SophyaLib/BaseTools/dvlist.cc
===================================================================
--- trunk/SophyaLib/BaseTools/dvlist.cc	(revision 1139)
+++ trunk/SophyaLib/BaseTools/dvlist.cc	(revision 1157)
@@ -195,7 +195,7 @@
 /*! 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)
-{
-ValList::iterator it = mvlist.find(key);
+int_8       DVList::GetI(string const& key, int_8 def) const
+{
+ValList::const_iterator it = mvlist.find(key);
 if (it == mvlist.end())  return(def);
 return((*it).second.elval.iv);
@@ -205,7 +205,7 @@
 /*! 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)
-{
-ValList::iterator it = mvlist.find(key);
+r_8      DVList::GetD(string const& key, r_8 def) const
+{
+ValList::const_iterator it = mvlist.find(key);
 if (it == mvlist.end())  return(def);
 return((*it).second.elval.dv);
@@ -215,7 +215,7 @@
 /*! Returns the value corresponding to name \b key, converted to complex
     Default value \b def is returned if name \b key not found */
-complex<r_8>       DVList::GetZ(string const& key, complex<r_8> def)
-{
-ValList::iterator it = mvlist.find(key);
+complex<r_8>       DVList::GetZ(string const& key, complex<r_8> def) const
+{
+ValList::const_iterator it = mvlist.find(key);
 if (it == mvlist.end())  return(def);
 return((*it).second.elval.dv);
@@ -225,7 +225,7 @@
 /*! 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)
-{
-ValList::iterator it = mvlist.find(key);
+string      DVList::GetS(string const& key, char* def) const
+{
+ValList::const_iterator it = mvlist.find(key);
 if (it == mvlist.end())  return(def);
 return(*((*it).second.elval.strv));
@@ -234,7 +234,7 @@
 /* --Methode-- */
 /*! Returns the comment associated with name \b key */ 
-string      DVList::GetComment(string const& key)
-{
-ValList::iterator it = mvlist.find(key);
+string      DVList::GetComment(string const& key) const
+{
+ValList::const_iterator it = mvlist.find(key);
 if (it == mvlist.end())  return("");
 return((*it).second.elcomm);
@@ -259,4 +259,25 @@
 
 /* --Methode-- */
+/*! Removes the definition and value associated with the name \b key. 
+  Return \c true if the \b key is found in the list, \c false otherwise. */
+bool        DVList::DeleteKey(string const& key)
+{
+ValList::iterator it = mvlist.find(key);
+if (it == mvlist.end())  return(false);
+mvlist.erase(it);
+return(true);
+}
+
+/* --Methode-- */
+/*!  Return \c true if the \b key is found in the list, \c false otherwise. */
+bool        DVList::HasKey(string const& key) const
+{
+ValList::const_iterator it = mvlist.find(key);
+if (it == mvlist.end())  return(false);
+return(true);
+}
+
+
+/* --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)
@@ -316,4 +337,14 @@
 //	Renvoie une référence sur le champ commentaire de l'objet.
 //--
+
+/* --Methode-- */
+/*!  Return the MuTyV value associated with name \b key .
+     Integer 0 is returned if \b key is not present in the list   */
+MuTyV       DVList::Get(string const& key) const
+{
+ValList::const_iterator it = mvlist.find(key);
+if (it == mvlist.end()) return(MuTyV(0));
+else return((*it).second.elval);
+}
 
 /* --Methode-- */
Index: trunk/SophyaLib/BaseTools/dvlist.h
===================================================================
--- trunk/SophyaLib/BaseTools/dvlist.h	(revision 1139)
+++ trunk/SophyaLib/BaseTools/dvlist.h	(revision 1157)
@@ -34,9 +34,12 @@
   DVList&           Merge(const DVList&);
 
-  int_8             GetI(string const& key, int_8 def=-1);
-  r_8               GetD(string const& key, r_8 def=-9.e19);
-  complex<r_8>      GetZ(string const& key, complex<r_8> def=-9.e19);
-  string            GetS(string const& key, char* def="");
-  string            GetComment(string const& key);
+  int_8             GetI(string const& key, int_8 def=-1) const;
+  r_8               GetD(string const& key, r_8 def=-9.e19) const;
+  complex<r_8>      GetZ(string const& key, complex<r_8> def=-9.e19) const;
+  string            GetS(string const& key, char* def="") const;
+  string            GetComment(string const& key) const;
+
+  bool              DeleteKey(string const& key);
+  bool              HasKey(string const& key) const;
 
   void              SetI(string const& key, int_8 val);
@@ -47,5 +50,12 @@
   void              SetComment(string const& key, string const& comm);
 
+  MuTyV             Get(string const& key) const ;
   MuTyV&            Get(string const& key);
+/*! Returns the value associated with the name \b key */
+  inline MuTyV      operator()  (string const& key) const { return Get(key); }
+/*! Returns the value associated with the name \b key */
+  inline MuTyV      operator[]  (string const& key) const { return Get(key); }
+/*! Returns the global comment string associated with the object */
+  inline string     Comment() const { return(comment); }
 /*! Returns the value associated with the name \b key */
   inline MuTyV&     operator()  (string const& key)  { return Get(key); }
Index: trunk/SophyaLib/BaseTools/machdefs.h
===================================================================
--- trunk/SophyaLib/BaseTools/machdefs.h	(revision 1139)
+++ trunk/SophyaLib/BaseTools/machdefs.h	(revision 1157)
@@ -356,4 +356,8 @@
 #endif
 
+/* ---- La taille et les index des tableaux ---- */
+typedef int_4 sa_size_t ;
+
+
 /* Compatibilite, avant de migrer tout le code en "PLANCK" */
 
Index: trunk/SophyaLib/BaseTools/mutyv.cc
===================================================================
--- trunk/SophyaLib/BaseTools/mutyv.cc	(revision 1139)
+++ trunk/SophyaLib/BaseTools/mutyv.cc	(revision 1157)
@@ -32,4 +32,6 @@
 
 
+static void mutyv_decodestr(const char * si, double& r, double& im);
+
 /* --Methode-- */
 MuTyV::MuTyV(MuTyV const & a)
@@ -51,6 +53,5 @@
   typ = 'S';
   strv = new string(s);
-  dv = dv_im = 0.;
-  sscanf(s, "%lg %lg", &dv, &dv_im);
+  mutyv_decodestr(s, dv, dv_im);
   iv = (int_8)dv;
 }
@@ -61,6 +62,5 @@
   typ = 'S';
   strv = new string(s);
-  dv = dv_im = 0.;
-  sscanf(s.c_str(), "%lg %lg", &dv, &dv_im);
+  mutyv_decodestr(s.c_str(), dv, dv_im);
   iv = (int_8)dv;
 }
@@ -80,6 +80,5 @@
   typ = 'S';
   strv = new string(s);
-  dv = dv_im = 0.;
-  sscanf(s, "%lg %lg", &dv, &dv_im);
+  mutyv_decodestr(s, dv, dv_im);
   iv = (int_8)dv;
   return(s);
@@ -91,6 +90,5 @@
   typ = 'S';
   strv = new string(s);
-  dv = dv_im = 0.;
-  sscanf(s.c_str(), "%lg %lg", &dv, &dv_im);
+  mutyv_decodestr(s.c_str(), dv, dv_im);
   iv = (int_8)dv;
   return(s);
@@ -105,5 +103,5 @@
     if (typ == 'I')  sprintf(buff,"%ld", (long)iv);
     else if (typ == 'D') sprintf(buff,"%.20g", dv);
-    else if (typ == 'Z') sprintf(buff,"%.20g %.20g i", dv, dv_im);
+    else if (typ == 'Z') sprintf(buff,"(%.20g , %.20g)", dv, dv_im);
     else buff[0] = '\0';
     return(string(buff));
@@ -112,5 +110,28 @@
 
 
+static void mutyv_decodestr(const char * si, double& r, double& im)
+  // decodage d'une chaine contenant une ou deux valeurs
+{
+  r = im = 0.;
+  string s = si;
+  size_t l = s.length();
+  size_t p = s.find_first_not_of(" ()\t",0);
+  if (p >= l) return;
+  size_t q = s.find_first_of(" ()\t",p+1);
+  
+  
+  if (!isdigit(s[p]) && !(s[p] == '+') && !(s[p] == '-') )
+    return;
+  r = atof(s.substr(p,q-p).c_str());
+
+  p = s.find_first_not_of(" ()\t",q+1);
+  if (p >= l) return;
+  q = s.find_first_of(" ()\t",p+1);
+  if (!isdigit(s[p]) && !(s[p] == '+') && !(s[p] == '-') )
+    return;
+  im = atof(s.substr(p,q-p).c_str());
+}
 
 
 
+
Index: trunk/SophyaLib/BaseTools/sophyainit.cc
===================================================================
--- trunk/SophyaLib/BaseTools/sophyainit.cc	(revision 1139)
+++ trunk/SophyaLib/BaseTools/sophyainit.cc	(revision 1157)
@@ -144,4 +144,9 @@
 return(SOPHYA_VERSION + (SOPHYA_REVISION/1000.));
 }
+
+double SOPHYA::SophyaVersion()
+{
+return(SOPHYA_VERSION + (SOPHYA_REVISION/1000.));
+}
  
 // On met un objet initiator en statique, pour les loaders qui savent 
Index: trunk/SophyaLib/BaseTools/sversion.h
===================================================================
--- trunk/SophyaLib/BaseTools/sversion.h	(revision 1139)
+++ trunk/SophyaLib/BaseTools/sversion.h	(revision 1157)
@@ -3,6 +3,6 @@
 
 #define SOPHYA_VERSION   0.9 
-#define SOPHYA_REVISION  85
-#define SOPHYA_TAG       "V_Jul2000"
+#define SOPHYA_REVISION  90
+#define SOPHYA_TAG       "V_Aou2000"
 
 #endif
