Index: trunk/ArchTOIPipe/Kernel/Makefile.in
===================================================================
--- trunk/ArchTOIPipe/Kernel/Makefile.in	(revision 2361)
+++ trunk/ArchTOIPipe/Kernel/Makefile.in	(revision 2369)
@@ -57,5 +57,5 @@
 
 ifeq ($(USE_PIOLIB),1)
-  PIOFILES := piotoirdr.cc
+  PIOFILES := piotoirdr.cc piotoiwtr.cc
 else
   PIOFILES :=
Index: trunk/ArchTOIPipe/Kernel/piotoirdr.cc
===================================================================
--- trunk/ArchTOIPipe/Kernel/piotoirdr.cc	(revision 2361)
+++ trunk/ArchTOIPipe/Kernel/piotoirdr.cc	(revision 2369)
@@ -3,5 +3,5 @@
 //                               Christophe Magneville
 //                               Reza Ansari
-// $Id: piotoirdr.cc,v 1.3 2003-04-01 13:27:48 aubourg Exp $
+// $Id: piotoirdr.cc,v 1.4 2003-04-24 13:22:26 aubourg Exp $
 
 #include "piotoirdr.h"
@@ -61,10 +61,14 @@
 	     pioGroup);
 
-  // On recupere un tableau de beginIndex, mais si on en croit
-  // la doc, dans un groupe, tout le monde a les memes bornes, donc
-  // on peut lire le premier ?
-
-  snBegin = beginIndex[0];
-  snEnd   = endIndex[0];
+  // On recupere un tableau de beginIndex, il faut retrouver celui qui nous concerne
+  for (int i=0; i<nbTOI; i++) {
+    cout << toiName[i] << endl;
+    if (object == toiName[i]) {
+      snBegin = beginIndex[i];
+      snEnd   = endIndex[i];
+      cout << snBegin << " " << snEnd << endl;
+      break;
+    }
+  }
 
   PIOFreeInfoTOI(flgName,
@@ -115,5 +119,5 @@
     fits_lock();
     PIODeleteTOI(data, pioGroup);
-    if (flags != NULL) PIODeleteFLG(flags, pioGroup);
+    //    if (flags != NULL) PIODeleteFLG(flags, pioGroup); // PB !
     fits_unlock();
   }
Index: trunk/ArchTOIPipe/Kernel/piotoirdr.h
===================================================================
--- trunk/ArchTOIPipe/Kernel/piotoirdr.h	(revision 2361)
+++ trunk/ArchTOIPipe/Kernel/piotoirdr.h	(revision 2369)
@@ -5,5 +5,5 @@
 //                               Christophe Magneville
 //                               Reza Ansari
-// $Id: piotoirdr.h,v 1.1 2003-02-24 09:18:01 aubourg Exp $
+// $Id: piotoirdr.h,v 1.2 2003-04-24 13:22:26 aubourg Exp $
 
 #ifndef PIOTOIRDR_H
@@ -15,7 +15,7 @@
 
 #include "HL2_PIOLIB/PIOLib.h"
-//  #include "HL2_PIOLIB/PIOCpp.h"  // BUGGY !! Ne marche pas !!!
 
 /* Missing from PIO headers... */
+extern "C" {
 PIOErr PIOFreeInfoTOI(
 		      PIOSTRING       *FLGname,
@@ -37,5 +37,5 @@
 		    PIOGroup *MyGroup /* Input : opened group reference */
 		    );
-
+}
 /* End missing */
 
Index: trunk/ArchTOIPipe/Kernel/piotoiwtr.cc
===================================================================
--- trunk/ArchTOIPipe/Kernel/piotoiwtr.cc	(revision 2369)
+++ trunk/ArchTOIPipe/Kernel/piotoiwtr.cc	(revision 2369)
@@ -0,0 +1,59 @@
+// ArchTOIPipe           (C)     CEA/DAPNIA/SPP IN2P3/LAL
+//                               Eric Aubourg
+//                               Christophe Magneville
+//                               Reza Ansari
+// $Id: piotoiwtr.cc,v 1.1 2003-04-24 13:22:26 aubourg Exp $
+
+#include "piotoiwtr.h"
+
+extern void fits_lock();
+extern void fits_unlock();
+
+PIOTOIWriter::PIOTOIWriter(string grp, string obj) {
+  group = grp;
+  object = obj;
+  pioGroup = NULL;
+}
+
+PIOTOIWriter::~PIOTOIWriter() {
+}
+
+void PIOTOIWriter::init() {
+  fits_lock();
+  pioGroup = PIOOpenTOI(const_cast<char*>(group.c_str()), "w");
+  int err = PIOCreateTOIObject(const_cast<char*>(object.c_str()),
+			       "PIODOUBLE",
+			       pioGroup);
+  fits_unlock();
+  bufferSize = 1000;
+  cout << "PIOTOIWriter : opened " << group << endl;
+  declareInput(object); // Un seul, fourni lors de la creation
+}
+
+void PIOTOIWriter::run() {
+  cout << "piotoiwriter run " << group << "[" << object << "] " 
+       << snBegin << " " << snEnd << endl;
+
+  double* data = new double[bufferSize];
+  for (int snb = snBegin; snb <= snEnd; snb += bufferSize) {
+    int sne = snb + bufferSize - 1;
+    if (sne > snEnd) sne=snEnd;
+    char command[80];
+    sprintf(command, "Begin=%d; End=%d", snb, sne);    
+    getData(0, snb, sne-snb+1, data);
+    fits_lock();
+    PIOLONG tableSize = PIOWriteTOI(data,
+			    const_cast<char*>(object.c_str()),
+			    "PIODOUBLE",
+			    command,
+			    pioGroup);
+    fits_unlock();
+  }
+  delete[] data;
+  fits_lock();
+  PIOCloseTOI(pioGroup);
+  fits_unlock();
+}
+
+  
+  
Index: trunk/ArchTOIPipe/Kernel/piotoiwtr.h
===================================================================
--- trunk/ArchTOIPipe/Kernel/piotoiwtr.h	(revision 2369)
+++ trunk/ArchTOIPipe/Kernel/piotoiwtr.h	(revision 2369)
@@ -0,0 +1,33 @@
+// This may look like C code, but it is really -*- C++ -*-
+
+// ArchTOIPipe           (C)     CEA/DAPNIA/SPP IN2P3/LAL
+//                               Eric Aubourg
+//                               Christophe Magneville
+//                               Reza Ansari
+// $Id: piotoiwtr.h,v 1.1 2003-04-24 13:22:26 aubourg Exp $
+
+#ifndef PIOTOIWTR_H
+#define PIOTOIWTR_H
+
+#include "config.h"
+#include "toiprocessor.h"
+#include <vector>
+
+#include "HL2_PIOLIB/PIOLib.h"
+
+class PIOTOIWriter : public TOIProcessor {
+public:
+  PIOTOIWriter(string group, string object);
+  ~PIOTOIWriter();
+
+  virtual void init();
+  virtual void run();
+
+protected:
+  PIOGroup* pioGroup;
+  string group; // le "object" de PIOOpenTOI qui semble etre un group
+  string object; // le "Objectname" de PIOReadTOI qui lui est un objet (?)
+  int bufferSize;
+};
+
+#endif
