Index: /trunk/SophyaLib/BaseTools/ppersist.cc
===================================================================
--- /trunk/SophyaLib/BaseTools/ppersist.cc	(revision 2481)
+++ /trunk/SophyaLib/BaseTools/ppersist.cc	(revision 2482)
@@ -18,11 +18,4 @@
 // -----------------------------------------------------------------
 
-
-//  strptime n'est pas defini sous Linux  - Reza Mars 2000
-#if defined(OS_LINUX) || defined(OS_MACOSX)
-extern "C" {
-char *strptime(const char *buf, const char *format, struct tm *tm);
-}
-#endif
 
 #define MAXTAGLEN 255
@@ -382,10 +375,11 @@
 //--
 
-//++
+PInPersist::PInPersist(RawInOutStream * is, bool ad, bool scan)
+  : PPFBinaryInputStream(is, ad, scan)
+{
+}
+
 PInPersist::PInPersist(string const& flnm, bool scan)
   : PPFBinaryInputStream(flnm, scan)
-//
-//	Constructeur. Ouvre le fichier.
-//--
 {
 }
@@ -613,4 +607,5 @@
   //  Comptage d'objets ecrits
   _nbobjs++;
+  if (wobj_level > _maxnestlevel)  _maxnestlevel = wobj_level;
   if (wobj_level == 1) _nbtlobjs++;
   wobj_level--;  
@@ -633,4 +628,5 @@
     PutRawU8(id);      // Writing the corresponding object Id
     PutRawI8(pos);     // The original object position 
+    _nbrefs++;         // Compteur de nombre de reference ecrits
     return true;
   }
Index: /trunk/SophyaLib/BaseTools/ppfbinstream.cc
===================================================================
--- /trunk/SophyaLib/BaseTools/ppfbinstream.cc	(revision 2481)
+++ /trunk/SophyaLib/BaseTools/ppfbinstream.cc	(revision 2482)
@@ -8,12 +8,10 @@
 
 
-/*
-//  strptime n'est pas defini sous Linux  - Reza Mars 2000
-#if defined(OS_LINUX) || defined(OS_MACOSX)
+//  strptime n'est pas defini sous Linux avec g++ avant gcc 3.x - Reza Mars 2000
+#if defined(OS_LINUX) && defined(__GNUG__) && (__GNUC__ < 3) 
 extern "C" {
 char *strptime(const char *buf, const char *format, struct tm *tm);
 }
 #endif
-*/
 
 #define MAXTAGLEN_V2 255
@@ -61,4 +59,6 @@
   _nbobjs = 0;       // Nb total d'objets
   _nbtlobjs = 0;     // Nb d'objets de niveau 1 
+  _nbrefs = 0;       // Nb de reference d'objets
+  _maxnestlevel = 0; // Niveau maximum d'objets emboites
 }
 
@@ -83,6 +83,7 @@
   rs += buff;
   rs += CreationDateStr();
-  sprintf(buff,"\n NbObjs= %ld NbTopLevObjs= %ld ", (long)NbObjects(), 
-	  (long)NbTopLevelObjects());
+  sprintf(buff,"\n NbObjs= %ld NbTopLevObjs= %ld NbRefs= %ld MaxNest= %d ", 
+	  (long)NbObjects(), (long)NbTopLevelObjects(), 
+	  (long)NbReferences(), MaxNestedObjsLevel());
   rs += buff;
   sprintf(buff,"\n NbPosTag= %ld NbNameTag= %ld ", (long)NbPosTags(), 
@@ -172,13 +173,10 @@
   rbuf[32] = '\0'; 
   struct tm tm;
-  /*  #if !(defined(__MWERKS__) || defined(OS_MACOSX))  RZ-DEL */
   strptime(rbuf,"%d/%m/%Y %H:%M:%S GMT",&tm);
   /*  #else
   sscanf(rbuf,"%2d/%2d/%4d %2d:%2d:%2d GMT",&tm.tm_mday,&tm.tm_mon,&tm.tm_year,
                                             &tm.tm_hour,&tm.tm_min,&tm.tm_sec);
-
-  tm.tm_mon  --;
-  tm.tm_year -= 1900;
-  #endif    RZ-DEL */
+  tm.tm_mon  --;   tm.tm_year -= 1900; 
+  #endif  */
 
   creationdate = mktime(&tm);
@@ -212,15 +210,20 @@
     throw FileFormatExc("PPFBinaryInputStream::ReadNameTagTable()  Corrupted file PPS_NAMETAG_TABLE not found");
   // Lecture nb de PosTag et nb d'objets dans le flot
-  GetI8(_nbpostag);
-  GetI8(_nbobjs);
-  GetI8(_nbtlobjs);
+  int_8 stats[8] = {0,0,0,0,0,0,0,0};
+  GetI8s(stats, 8);
+  _nbpostag = stats[0];
+  _nbobjs = stats[1];
+  _nbtlobjs = stats[2];
+  _nbrefs = stats[3];
+  _maxnestlevel = stats[4];
+
   uint_8 ttsz,it;
   // Lecture nombre de NameTag
-  GetU8(ttsz);
+  GetRawU8(ttsz);
   if (ttsz > 0) {
     for(it=0; it<ttsz; it++) {
       int_8 tpos;
       string tname;
-      GetI8(tpos);
+      GetRawI8(tpos);
       GetStr(tname);
       tags[tname] = tpos;
@@ -1022,4 +1025,5 @@
   cout << " NbPosTag=" << NbPosTags() << " NbNameTag=" << tags.size() 
        << " NbObjs=" << NbObjects() << " NbTopLevObjs=" << NbTopLevelObjects()
+       << " NbRefs=" << NbReferences() << " MaxNest=" << MaxNestedObjsLevel()
        << endl << endl;
 
@@ -1099,11 +1103,10 @@
 	else {
 	  cout << "<PPS_NAMETAG_TABLE> tag at position " << hex << cpos << dec << endl;
-	  GetI8(i8);  // nb pos tag
-	  GetI8(i8);  // nb d'objets
-	  GetI8(i8);  // nb objets toplevel
-	  GetU8(ui8); // nb de nametag
+	  int_8 stats[8];
+	  GetI8s(stats,8); 
+	  GetRawU8(ui8); // nb de nametag
 	  for(int kt=0; kt<ui8; kt++) {
 	    string tname;
-	    GetI8(i8);
+	    GetRawI8(i8);
 	    GetStr(tname);
 	    if (lev > 0)  
@@ -1254,13 +1257,17 @@
   PutRawUByte(PPS_NAMETAG_TABLE);  //   NameTagTable tag
   // Ecriture nb de PosTag et nb d'objets dans le flot
-  PutI8(_nbpostag);
-  PutI8(_nbobjs);
-  PutI8(_nbtlobjs);  
+  int_8 stats[8] = {0,0,0,0,0,0,0,0};
+  stats[0] = _nbpostag;
+  stats[1] = _nbobjs;
+  stats[2] = _nbtlobjs;
+  stats[3] = _nbrefs;
+  stats[4] = _maxnestlevel;
+  PutI8s(stats, 8);
   // Ecriture nb de tag et les tags
-  PutU8((uint_8)tags.size());    // Number of tags
+  PutRawU8((uint_8)tags.size());    // Number of tags
   if (tags.size() > 0) {
     for (map<string,int_8>::iterator i = tags.begin(); i != tags.end(); i++) {
       int_8 pos = (*i).second;
-      PutI8(pos);
+      PutRawI8(pos);
       PutStr((*i).first);
     }
Index: /trunk/SophyaLib/BaseTools/ppfbinstream.h
===================================================================
--- /trunk/SophyaLib/BaseTools/ppfbinstream.h	(revision 2481)
+++ /trunk/SophyaLib/BaseTools/ppfbinstream.h	(revision 2482)
@@ -67,4 +67,6 @@
   inline int_8  NbObjects() {return _nbobjs; }
   inline int_8  NbTopLevelObjects() {return _nbtlobjs; }
+  inline int_8  NbReferences() {return _nbrefs; }
+  inline int_4  MaxNestedObjsLevel() {return _maxnestlevel; }
 
   string GetTagName(int itag);  // 0..NbTags-1
@@ -83,4 +85,6 @@
   int_8 _nbobjs;       // Nb total d'objets
   int_8 _nbtlobjs;     // Nb d'objets de niveau 1 
+  int_8 _nbrefs;       // Nb de references PPS_REFERENCE
+  int_4 _maxnestlevel; // Niveau maximum d'objets emboites 
 };
   
