Index: /trunk/SophyaPI/DemoPIApp/Makefile
===================================================================
--- /trunk/SophyaPI/DemoPIApp/Makefile	(revision 1338)
+++ /trunk/SophyaPI/DemoPIApp/Makefile	(revision 1338)
@@ -0,0 +1,36 @@
+MODULEDECCXXFLAGS := -msg_quiet 
+include $(DPCBASEREP)/Include/MakefileUser.h
+LIBS = -L$(SLB) -lPI -lextsophya -lsophya -lm 
+
+ifeq ($(MACHEROS),OSF1)
+LIBS := $(LIBS) -lfor
+endif
+ifeq ($(MACHEROS),Linux)
+LIBS := $(LIBS) -ldl -lf2c
+endif
+
+%.so:$(OBJ)%.o 
+%:%.cc
+%:%.o
+%.o:%.cc
+%.o:%.c
+%:%.c
+
+.PRECIOUS: %.so  
+
+
+%:%.so
+	echo $@ " made (.so) "
+
+%.so:$(OBJ)%.o
+	$(LINK.cc) -shared -o $@ $< $(LIBS)
+
+$(OBJ)%.o:%.cc 
+	$(COMPILE.cc)  -o $@ $<
+
+$(OBJ)%.o:%.c
+	$(COMPILE.c) -c $(CFLAGS)   $(USERFLAGS) -o $@ $< 
+
+dump :
+	echo $(LIBS)
+
Index: /trunk/SophyaPI/DemoPIApp/demo.pic
===================================================================
--- /trunk/SophyaPI/DemoPIApp/demo.pic	(revision 1338)
+++ /trunk/SophyaPI/DemoPIApp/demo.pic	(revision 1338)
@@ -0,0 +1,21 @@
+#   macro de commande piapp -  Exemple de demo
+#  Mode Trace -> On 
+traceon
+#  Suppression de tous les objets existants
+delobjs *
+#  ouverture de fichier PPF
+openppf demo.ppf
+# affichage divers dans une fenetre graphique 2x2
+zone 2 2 
+#  Affichage d'histo 1D
+disp h1d blue
+#  Affichage d'histo 2D
+disp h2d 
+#  Trace de fonction
+func sin(x)/x 0.1 10. 200 gold
+#  Representation en surface d'une matrice
+surf mtx1 colbr32
+#  Trace des points 3d en utilisant une commande a la paw dans une fenetre
+n/plot nt31.z%y%x ! ! win
+#  Trace des points 3d avec des erreurs superpose au dessin precedant
+nt3d nt32 x y  z ex ey ez - - same,fcirclemarker7,red
Index: /trunk/SophyaPI/DemoPIApp/exlink.pic
===================================================================
--- /trunk/SophyaPI/DemoPIApp/exlink.pic	(revision 1338)
+++ /trunk/SophyaPI/DemoPIApp/exlink.pic	(revision 1338)
@@ -0,0 +1,12 @@
+#  Exemple de fichier de commande pour linker et appeler une fonction user
+#  Appel a make pour construire le module
+shell gmake user.so
+#  Link de la fonction user ds user.so
+link user.so user
+#  L'appel a user cree un nouvel NTuple
+call user toto titi 
+print usernt
+#  On affiche quelque chose du NTuple sortant
+zone 1 
+plot2de usernt 5*x y ex ey  1. blue,fcirclemarker5 
+
Index: /trunk/SophyaPI/DemoPIApp/exmod.pic
===================================================================
--- /trunk/SophyaPI/DemoPIApp/exmod.pic	(revision 1338)
+++ /trunk/SophyaPI/DemoPIApp/exmod.pic	(revision 1338)
@@ -0,0 +1,18 @@
+#  Exemple de macro de commandes pour charger un module
+# Mode trace
+traceon
+#  On passe une commande shell pour fabriquer le module
+shell gmake exmodule.so
+# On charge le module
+loadmodule exmodule.so exmodule
+#  Deux nouvelles commandes sont definies maintenant
+excmd1 
+excmd2
+
+#  On fabrique deux vecteurs
+zone 1 2
+newvec v1 20 sin(x)
+newvec v2 10 cos(x*0.2)+sin(x*0.2)
+#  Execution des commandes de exmodule
+excmd1 v1
+excmd2 v1 v2
Index: /trunk/SophyaPI/DemoPIApp/exmodule.cc
===================================================================
--- /trunk/SophyaPI/DemoPIApp/exmodule.cc	(revision 1338)
+++ /trunk/SophyaPI/DemoPIApp/exmodule.cc	(revision 1338)
@@ -0,0 +1,106 @@
+#include "machdefs.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <iostream.h>
+#include <math.h>
+
+#include <typeinfo>
+
+#include <vector>
+#include <string>
+
+#include "piacmd.h"
+#include "nobjmgr.h"
+#include "pistdimgapp.h"
+
+
+//  Exemple de module chargeable ds piapp 
+
+//  Declaration de la fonction d'activation et de desactivation du module
+extern "C" {
+void exmodule_init();
+void exmodule_end();
+}
+
+
+//  Une classe commande-executor, permettant d'enregistrer de 
+//  nouvelles commandes a piapp
+class exmoduleExecutor : public CmdExecutor {
+public:
+                exmoduleExecutor();
+  virtual       ~exmoduleExecutor();
+  // Execute s'occupe de l'execution effective des commandes
+  virtual int   Execute(string& keyw, vector<string>& args, string& toks);
+};
+
+/* --Methode-- */
+exmoduleExecutor::exmoduleExecutor()
+{
+
+PIACmd * mpiac;
+NamedObjMgr omg;
+mpiac = omg.GetImgApp()->CmdInterpreter();
+
+// On enregistre deux nouvelles commandes 
+string hgrp = "ExModuleCmd";
+// commande excmd1
+string kw = "excmd1";
+string usage = "exmd1: Appel Print pour obj1 \n" ;
+usage += "Usage: excmd1 obj1 ";
+mpiac->RegisterCommand(kw, usage, this, hgrp);
+// commande excmd2
+kw = "excmd2";
+usage = "exmd2: Appel Print pour obj1 et obj2 \n" ;
+usage += "Usage: excmd2 obj1 obj2";
+mpiac->RegisterCommand(kw, usage, this, hgrp);
+
+}
+
+/* --Methode-- */
+exmoduleExecutor::~exmoduleExecutor()
+{
+}
+
+/* --Methode-- */
+int exmoduleExecutor::Execute(string& kw, vector<string>& tokens, string&)
+{
+
+NamedObjMgr omg;
+if (kw == "excmd1") {
+  if (tokens.size() < 1) {
+    cout << "Usage: excmd1 obj1" << endl;
+    return(0);
+    }
+  omg.PrintObj(tokens[0]);
+  }
+else if (kw == "excmd2") {
+  if (tokens.size() < 2) {
+    cout << "Usage: excmd2 obj1 obj2" << endl;
+    return(0);
+    }
+  omg.PrintObj(tokens[0]);
+  omg.PrintObj(tokens[1]);
+  }
+
+return(0);
+
+}
+
+static exmoduleExecutor * piaerex = NULL;
+/* Nouvelle-Fonction */
+void exmodule_init()
+{
+// Fonction d'initialisation du module
+// Appele par le gestionnaire de modules de piapp (PIACmd::LoadModule())
+if (piaerex) delete piaerex;
+piaerex = new exmoduleExecutor;
+}
+
+/* Nouvelle-Fonction */
+void exmodule_end()
+{
+// Desactivation du module
+if (piaerex) delete piaerex;
+piaerex = NULL;
+}
+
Index: /trunk/SophyaPI/DemoPIApp/user.cc
===================================================================
--- /trunk/SophyaPI/DemoPIApp/user.cc	(revision 1338)
+++ /trunk/SophyaPI/DemoPIApp/user.cc	(revision 1338)
@@ -0,0 +1,46 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <iostream.h>
+#include <string>
+
+#include "nobjmgr.h"
+
+#include "tvector.h"
+#include "histos.h"
+#include "histos2.h"
+#include "ntuple.h"
+
+#include "nbrandom.h"
+
+// ---------- Fonction pour link ds piapp -----------------
+// Exemple de fonction pouvant etre linke a piapp 
+// La fonction doit etre declare extern "C"
+extern "C" {
+  void user(vector<string>& args);
+}
+
+void user(vector<string>& args)
+{
+  // On instancie un objet NamedObjMgr
+  NamedObjMgr omg;
+  cout << " User Function user(...) nargs=" << args.size() << endl;
+
+  // On cree un NTuple et on le remplit
+  float xnt[4];
+  char *ntn[4] = {"x","y","ex","ey"};
+  int nent,i;
+  nent = 100;
+  NTuple* nt = new NTuple(4,ntn);  // Creation NTuple (AVEC new )
+  for(i=0; i<nent; i++) {
+    xnt[0] = i*50./nent; xnt[1] = 0.2*xnt[0]*xnt[0]+(NorRand()*xnt[0]/3.);
+    xnt[2] = 0.; xnt[3] = xnt[0]/3.;
+    nt->Fill(xnt);
+  }
+
+  // On ajoute le ntuple cree a la liste des objets geres par piapp
+  string nom = "usernt";
+  omg.AddObj(nt, nom);
+  return;
+}
+
