Index: /trunk/SophyaLib/TArray/basarr.h
===================================================================
--- /trunk/SophyaLib/TArray/basarr.h	(revision 1549)
+++ /trunk/SophyaLib/TArray/basarr.h	(revision 1550)
@@ -69,4 +69,6 @@
 
   // Array dimensions
+  //! Return true if the array was allocated ( Rank() > 0 )
+  inline bool IsAllocated() const { return( (ndim_ > 0) ? true : false ); }
   //! Return number of dimensions (array rank)
   inline int_4 NbDimensions() const { return( ndim_ ); }
Index: /trunk/SophyaLib/TArray/tarray.cc
===================================================================
--- /trunk/SophyaLib/TArray/tarray.cc	(revision 1549)
+++ /trunk/SophyaLib/TArray/tarray.cc	(revision 1550)
@@ -1000,8 +1000,11 @@
   \param maxprt : maximum numer of print
   \param si : if true,  display attached DvList
+  \param ascd : if true, suppresses the display of line numbers,
+  suitable for ascii dump format.
   \sa SetMaxPrint
- */
-template <class T>
-void TArray<T>::Print(ostream& os, int_4 maxprt, bool si) const
+  \sa WriteASCII
+ */
+template <class T>
+void TArray<T>::Print(ostream& os, sa_size_t maxprt, bool si, bool ascd) const
 {
   if (maxprt < 0)  maxprt = max_nprt_;
@@ -1011,13 +1014,17 @@
   sa_size_t k0,k1,k2,k3,k4;
   for(k4=0; k4<size_[4]; k4++) {
-    if (size_[4] > 1) cout << "\n ----- Dimension 5 (U) K4= " << k4 << endl;
+    if ((size_[4] > 1) && ascd) 
+      cout << "\n ----- Dimension 5 (U) K4= " << k4 << endl;
     for(k3=0; k3<size_[3]; k3++) {
-      if (size_[3] > 1) cout << "\n ----- Dimension 4 (T) K3= " << k3 << endl;
+      if ((size_[3] > 1) && ascd) 
+	cout << "\n ----- Dimension 4 (T) K3= " << k3 << endl;
       for(k2=0; k2<size_[2]; k2++) {
-	if (size_[2] > 1) cout << "\n ----- Dimension 3 (Z) K2= " << k2 << endl;
+	if ((size_[2] > 1) & ascd) 
+	  cout << "\n ----- Dimension 3 (Z) K2= " << k2 << endl;
 	for(k1=0; k1<size_[1]; k1++) {
-	  if ( (size_[1] > 1) && (size_[0] > 10) ) cout << "----- Dimension 2 (Y) K1= " << k1 << endl;
+	  if ( (size_[1] > 1) && (size_[0] > 10) && ascd) 
+	    cout << "----- Dimension 2 (Y) K1= " << k1 << endl;
 	  for(k0=0; k0<size_[0]; k0++) {
-            if(k0 > 0) os << ", ";  
+            if(k0 > 0) os << " ";  
             os << Elem(k0, k1, k2, k3, k4);     npr++;
 	    if (npr >= (sa_size_t) maxprt) {
@@ -1040,5 +1047,7 @@
 void TArray<T>::ReadASCII(istream& is)
 {
-  cerr << " TArray<T>::ReadASCII() - Pas encore implemente - Reza 12/6/2001 " << endl;
+  EnumeratedSequence es;
+  sa_size_t nr, nc;
+  es.FillFromFile(is, nr, nc);
 }
 
@@ -1050,5 +1059,5 @@
 void TArray<T>::WriteASCII(ostream& os) const
 {
-  Print(os, Size(), true);
+  Print(os, Size(), false, true);
 }
 
Index: /trunk/SophyaLib/TArray/tarray.h
===================================================================
--- /trunk/SophyaLib/TArray/tarray.h	(revision 1549)
+++ /trunk/SophyaLib/TArray/tarray.h	(revision 1550)
@@ -178,5 +178,6 @@
 // Impression, I/O, ...
   virtual string InfoString() const;   
-  virtual void   Print(ostream& os, int_4 maxprt=-1, bool si=false) const ;
+  virtual void   Print(ostream& os, sa_size_t maxprt=-1, 
+		       bool si=false, bool ascd=false) const ;
 
 // Lecture,Ecriture sur fichier ASCII
Index: /trunk/SophyaLib/TArray/utilarr.cc
===================================================================
--- /trunk/SophyaLib/TArray/utilarr.cc	(revision 1549)
+++ /trunk/SophyaLib/TArray/utilarr.cc	(revision 1550)
@@ -144,4 +144,35 @@
 }
 
+EnumeratedSequence & EnumeratedSequence::Merge(EnumeratedSequence const & seq)
+{
+  for(int k=0; k<seq.vecv_.size(); k++) 
+    vecv_.push_back(seq.vecv_[k]);
+  return(*this);
+}
+
+void EnumeratedSequence::Print(ostream& os) const 
+{
+  os << " EnumeratedSequence::Print() - Size()= " << Size() << endl;
+  for(int k=0; k<vecv_.size(); k++) {
+    os << vecv_[k];
+    if ((k > 0) && (k%10 == 0))  os << endl;
+    else os << " " ;
+  }
+  return;
+}
+
+sa_size_t EnumeratedSequence::FillFromString(string const & str)
+{
+  cerr << " EnumeratedSequence::FillFromString() pas implemente !" << endl;
+  return (0);
+}
+
+sa_size_t EnumeratedSequence::FillFromFile(istream& is, 
+					   sa_size_t& nr, sa_size_t& nc)
+{
+  cerr << " EnumeratedSequence::FillFromFile() pas implemente !" << endl;
+  return (0);
+}
+
 //////////////////////////////////////////////////////////
 /*!
Index: /trunk/SophyaLib/TArray/utilarr.h
===================================================================
--- /trunk/SophyaLib/TArray/utilarr.h	(revision 1549)
+++ /trunk/SophyaLib/TArray/utilarr.h	(revision 1550)
@@ -88,4 +88,7 @@
 };
 
+//////////////////////////////////////////////////////////
+//! Class for creation and handling of an explicitly defined list of values
+
 class EnumeratedSequence : public Sequence  {
 public:
@@ -93,10 +96,24 @@
   virtual ~EnumeratedSequence();
   virtual MuTyV & Value(sa_size_t k) const ;
+
+  inline sa_size_t Size() const { return vecv_.size(); }
+
   EnumeratedSequence & operator , (MuTyV const & v);
   EnumeratedSequence & operator = (MuTyV const & v);
+
+  EnumeratedSequence & Merge(EnumeratedSequence const & seq);
+  inline  void         Clear()  { vecv_.clear(); }      
+  void                 Print(ostream& os) const;
+
+  sa_size_t            FillFromString(string const & str);
+  sa_size_t            FillFromFile(istream& is, sa_size_t& nr, sa_size_t& nc);
+
 private:
   vector<MuTyV> vecv_;
   mutable MuTyV retv_;
 };
+
+inline ostream& operator << (ostream& os, const EnumeratedSequence& a)
+                            { a.Print(os);    return(os);    }
 
   //inline EnumeratedSequence operator , (MuTyV const & a, MuTyV const & b)
