Index: /trunk/SophyaPI/PIext/piacmd.cc
===================================================================
--- /trunk/SophyaPI/PIext/piacmd.cc	(revision 2488)
+++ /trunk/SophyaPI/PIext/piacmd.cc	(revision 2489)
@@ -344,5 +344,8 @@
 {
   Commander::SetCurrentPrompt(pr);
-  if (mImgApp) mImgApp->GetConsole()->SetPrompt(pr);
+  if (mImgApp) { 
+    ZSync(mImgApp->getMutex());
+    mImgApp->GetConsole()->SetPrompt(pr);
+  }
 }
 
@@ -350,5 +353,12 @@
 void PIACmd::ShowMessage(const char * msg, int att)
 {
+  /*
+  Il faut faire quelque chose pour gerer correctement ca en multithread
   char va = (att == 0) ? 0 : PIVA_Magenta;
-  if (mImgApp) mImgApp->GetConsole()->AddStr(msg, va);
-}
+  if (mImgApp) { 
+    ZSync(mImgApp->getMutex());
+    mImgApp->GetConsole()->AddStr(msg, va);
+  }
+  */
+Commander::ShowMessage(msg, att);
+}
Index: /trunk/SophyaPI/PIext/piaversion.h
===================================================================
--- /trunk/SophyaPI/PIext/piaversion.h	(revision 2488)
+++ /trunk/SophyaPI/PIext/piaversion.h	(revision 2489)
@@ -2,5 +2,5 @@
 #define PIAPPVERSION_H_SEEN
 
-#define PIAPP_VERSIONNUMBER  3.95
+#define PIAPP_VERSIONNUMBER  3.96
 
 #endif
Index: /trunk/SophyaPI/PIext/pistdimgapp.cc
===================================================================
--- /trunk/SophyaPI/PIext/pistdimgapp.cc	(revision 2488)
+++ /trunk/SophyaPI/PIext/pistdimgapp.cc	(revision 2489)
@@ -76,5 +76,7 @@
 {
   if (_app) { 
-    _app->ExecuteExtCommand();
+    // RZDEL: Normalement, il ne devrait plus y avoir besoin de cette
+    // methode avec le thread separe de l'interpreteur - Reza 27/12/2003 
+    //    _app->ExecuteExtCommand();
     _app->UpdateStatResourceInfo();
   }
@@ -380,4 +382,15 @@
 }  
 
+class RunAlarm : public Periodic {
+public:
+  RunAlarm(PIStdImgApp* app) :
+    Periodic(1)
+  { _app = app; SetIntervalms(1); }
+  ~RunAlarm() { }
+  virtual void DoPeriodic()
+  { _app->getMutex().broadcast(); }
+  PIStdImgApp* _app;
+};
+
 /* --Methode-- */
 void PIStdImgApp::Run()
@@ -393,15 +406,29 @@
 else mStop = true;   // On rerentre apres un stop 
 
-mCmd->start();
-
+// Creation et demarrage de l'objet de reveil periodique
+// de la boucle d'evts 
+RunAlarm * mru = new RunAlarm(this);
+//mru->Start();
+// Demarrage du thread de l'interpreteur
+CmdInterpreter()->start();
+
+// Soumission de la commande exterieur a executer 
+if (fg_exc_cmd) {
+  fg_exc_cmd = false; 
+}
+
+bool fg_gls_lock = false;
 while (mStop) {
   thr_glsyn.lock(); //  <ZThread> 
-  if (XtAppPending(*appctx) != 0) {
+  while (XtAppPending(*appctx) != 0) {
     XtAppNextEvent(*appctx, &evt);
     XtDispatchEvent(&evt);
   }
-  thr_glsyn.unlock(); // <ZThread>
+  thr_glsyn.unlock(); //  <ZThread> 
+  //  thr_glsyn.wait();
   usleep(1000);
 }
+
+delete mru;
 return;
 }
@@ -514,5 +541,5 @@
   try {
     //    mCmd->Interpret(s);
-    mCmd->AddInputLine(s);
+    CmdInterpreter()->AddInputLine(s);
     }  
   catch ( PThrowable & exc ) {
@@ -596,5 +623,5 @@
 
 // <ZThread> global PIApplication event loop synchronisation
-ZSync zs(thr_glsyn);  
+ZSync zs(thr_glsyn, 2);  
 
 // Choix de la taille de fenetre
@@ -666,5 +693,5 @@
 
 // <ZThread> global PIApplication event loop synchronisation
-ZSync zs(thr_glsyn);  
+ZSync zs(thr_glsyn, 2);  
 
 // Trace en superpoistion
@@ -770,5 +797,5 @@
 
 // <ZThread> global PIApplication event loop synchronisation
-ZSync zs(thr_glsyn);  
+ZSync zs(thr_glsyn, 2);  
 
 // Trace en superpoistion
@@ -856,4 +883,6 @@
 }
 
+// RZDEL: Normalement, il ne devrait plus y avoir besoin de cette
+// methode avec le thread separe de l'interpreteur - Reza 27/12/2003 
 /* --Methode-- */
 int PIStdImgApp::ExecuteExtCommand() 
@@ -869,4 +898,7 @@
 void PIStdImgApp::AddText(string const & txt, double xp, double yp, string const& sop, bool fgcn)
 {
+// <ZThread> global PIApplication event loop synchronisation
+ZSync zs(thr_glsyn, 2);  
+
 PIDrawer *eld=CurrentElDrawer();
 if (eld == NULL) return;
@@ -893,4 +925,7 @@
 			      string const& optss, bool fgcn)
 {
+// <ZThread> global PIApplication event loop synchronisation
+ZSync zs(thr_glsyn, 2);  
+
 PIDrawer *eld=CurrentElDrawer();
 if (eld == NULL) return;
@@ -918,4 +953,7 @@
 			  string const& sop, bool fgarrow, bool fgcn)
 {
+// <ZThread> global PIApplication event loop synchronisation
+ZSync zs(thr_glsyn, 2);  
+
 PIDrawer *eld=CurrentElDrawer();
 if (eld == NULL) return;
@@ -941,4 +979,7 @@
 			       string const& sop, bool fgfill, bool fgcn)
 {
+// <ZThread> global PIApplication event loop synchronisation
+ZSync zs(thr_glsyn, 2);  
+
 PIDrawer *eld=CurrentElDrawer();
 if (eld == NULL) return;
@@ -978,4 +1019,7 @@
 			    bool fgfill, bool fgcn)
 {
+// <ZThread> global PIApplication event loop synchronisation
+ZSync zs(thr_glsyn, 2);  
+
 PIDrawer *eld=CurrentElDrawer();
 if (eld == NULL) return;
@@ -1002,4 +1046,7 @@
 			 string const& sop, bool fgfill, bool fgcn)
 {
+// <ZThread> global PIApplication event loop synchronisation
+ZSync zs(thr_glsyn, 2);  
+
 PIDrawer *eld=CurrentElDrawer();
 if (eld == NULL) return;
@@ -1023,4 +1070,7 @@
 			 double x3, double y3, string const& sop, bool fgfill, bool fgcn)
 {
+// <ZThread> global PIApplication event loop synchronisation
+ZSync zs(thr_glsyn, 2);  
+
 PIDrawer *eld=CurrentElDrawer();
 if (eld == NULL) return;
@@ -1046,4 +1096,7 @@
 			  string const& sop, bool fgfill, bool fgcn)
 {
+// <ZThread> global PIApplication event loop synchronisation
+ZSync zs(thr_glsyn, 2);  
+
 PIDrawer *eld=CurrentElDrawer();
 if (eld == NULL) return;
@@ -1070,4 +1123,7 @@
 void PIStdImgApp::SetTitle(string const & titletop, string const & titlebottom, string const& sop)
 {
+// <ZThread> global PIApplication event loop synchronisation
+ZSync zs(thr_glsyn, 2);  
+
 PIDrawer *eld=CurrentElDrawer();
 if (eld == NULL) return;
@@ -1093,4 +1149,7 @@
 void PIStdImgApp::SetAxeLabels(string const & xLabel, string const & yLabel, string const& sop)
 {
+// <ZThread> global PIApplication event loop synchronisation
+ZSync zs(thr_glsyn, 2);  
+
 PIDrawer *eld=CurrentElDrawer();
 if (eld == NULL) return;
@@ -1407,5 +1466,5 @@
   int nlx = 0;
   bool fgx = false;
-  if (mCmd) fgx = mCmd->isRunning(nlx);
+  if ( CmdInterpreter() ) fgx = CmdInterpreter()->isRunning(nlx);
   if (!fgx) {
     lab = "PIACmdThread Idle";
@@ -1547,5 +1606,5 @@
 
     case 10100 :
-      mCmd->ShowHelpWindow();
+      CmdInterpreter()->ShowHelpWindow();
       break;
 
@@ -1603,5 +1662,6 @@
 	cmd += nomobj;  cmd += " ";  cmd += afname;
 	try {
-	  mCmd->Interpret(cmd);
+	  CmdInterpreter()->AddInputLine(cmd);
+	  //	  mCmd->Interpret(cmd);
 	}  
 	catch ( PThrowable & exc ) {
@@ -1705,5 +1765,5 @@
 
   case 10304 :
-    mCmd->ShowCxxExecWindow();
+    CmdInterpreter()->ShowCxxExecWindow();
     break;
 
@@ -1981,5 +2041,5 @@
     break;
   case 10606:
-    mCmd->ShowCxxOptionWindow();
+    CmdInterpreter()->ShowCxxOptionWindow();
     break;
   default:
