Index: /trunk/SophyaPI/PI/Tests/pitcons.cc
===================================================================
--- /trunk/SophyaPI/PI/Tests/pitcons.cc	(revision 473)
+++ /trunk/SophyaPI/PI/Tests/pitcons.cc	(revision 474)
@@ -89,5 +89,5 @@
   
 
-scons->AcceptCmd(true);
+scons->AcceptCmd(true,8);
 // RedirectOutStream(scons);
 // RedirectErrStream(scons);
@@ -189,5 +189,5 @@
 
     case 10110 :
-      if (scons) scons->AcceptCmd(true);
+      if (scons) scons->AcceptCmd(true,5);
       break;
     case 10111 :
Index: /trunk/SophyaPI/PI/picons.cc
===================================================================
--- /trunk/SophyaPI/PI/picons.cc	(revision 473)
+++ /trunk/SophyaPI/PI/picons.cc	(revision 474)
@@ -7,4 +7,45 @@
 #include "picons.h"
 
+
+//++
+// Class	PIConsole
+// Lib		PI
+// include	picons.h
+//
+//   	Cette classe fournit une partie des services equivalentes
+//	a une console. Les sorties stdout et stderr peuvent etre 
+//	redirigees sur un objet *PIConsole* (Voir "PIApplication").
+//	La classe offre aussi la possibilite de gestion d'un ScrollBar,
+//	ainsi que la saisie et l'edition de commande, avec la gestion
+//	d'un buffer de rappel.
+//	de *Drawer* avec la gestion de zoom (agrandissement).
+//	* Bouton-1 : Envoie le message "PIMsg_Active". Permet aussi 
+//	la selection d'un rectangle pour le copie/coller
+//	* Bouton-2 : Effectue l'operation Copier/*Coller* sur la ligne
+//	d'edition de commandes.
+//	de commande (convention Xt)
+//	* Bouton-3 : Affiche le menu des options d'affichage.
+//
+//	Gestion du clavier :
+//	* <Alt>O : Affiche le menu des options d'affichage.
+//	* <Alt>V : Copier/*Coller* Copie le texte depuis le buffer copier/coller
+//	sur la ligne d'edition de commande.
+//	* <Alt>A : Selectionne toute la fenetre pour *Copier*/Coller
+//	* <Alt>L : Liste des commandes dans le tampon de rappel.
+//
+//	Commandes d'edition : 
+//	* <Ctl>A : Debut de ligne.
+//	* <Ctl>E : Fin de ligne.
+//	* <Ctl>K : Effacement jusqu'en fin de ligne.
+//	* <Ctl>C : Effacement de la ligne.
+//	* Curseur gauche, droite : deplacement curseur
+//	* Cursur Haut,bas : rappel de commande
+//	* Backspace, del : effacement de caracteres
+//	* <Return> : Validation
+//--
+//++
+// Links	Parents
+// PIBaseWdg
+//--
 
 // #define DEBUG_PICONS 1
@@ -47,4 +88,16 @@
 static int Scb_Width = 14;
 
+
+//++
+// Titre	Constructeur
+//--
+//++
+// PIConsole(PIContainer* par, const char* nom, PIMessage msg, \
+//           int nl, int nc, int sx, int sy, int px, int py, bool scb)
+//	Creation d'un objet PIConsole, avec "nl" lignes et  "nc" colonnes.
+//	"sx,sy" indique la taille de la fenetre. Si "scb==true", un
+//	ScrollBar est cree associe a l'objet PIConsole.
+//--
+
 /* --Methode-- */
 PIConsole::PIConsole(PIContainer* par, const char* nom, PIMessage msg,
@@ -119,4 +172,41 @@
 if (opmc) { delete opmc;  opmc=NULL; }
 }
+
+
+//++
+// Titre	Méthodes
+//	le type "enum PIVAType" est utilise pour definir les attributs
+//	graphiques du texte affiche dans l'objet PIConsole. Les attributs 
+//	de texte et de couleur peuvent etre combine a l'aide de l'operateur
+//	ou logique (|)
+//|  PIVA_Def : Attribut par defaut
+//|  PIVA_Bold : Caracteres gras
+//|  PIVA_Ital : Caracteres italiques
+//|  PIVA_Reverse : Caracteres en video inverse
+//|  PIVA_DefCol : Couleur par defaut
+//|  PIVA_Red : couleur rouge 
+//|  PIVA_Blue : Couleur bleue 
+//|  PIVA_Green : Couleur verte 
+//|  PIVA_Yellow : couleur jaune
+//|  PIVA_Magenta : couleur mauve 
+//--  
+
+//++
+// void  AddChar(char c, unsigned char va= PIVA_Def, bool ref=true)
+//	Ajout d'un caractere a la position courante. si "ref==true", 
+//	la fenetre est rafraichie. le caractere newline declenche
+//	un retour a la ligne.
+// void  AddStr(const char* strg, unsigned char va= PIVA_Def, bool ref=true);
+//	Ajout d'une chaine de caracteres a partir de la position courante. 
+//	si "ref==true", la fenetre est rafraichie. le caractere newline declenche
+//	un retour a la ligne.
+// void  AcceptCmd(bool acc=true, int nrecmx=20)
+//	Active/desactive l'edition de commandes. "nrecmx" indique la profondeur
+//	du tampon de rappel de commandes. Le message associe a l'objet PIConsole
+//	avec la qualificatif "PIMsg_OK" est envoye lors de la validation de la
+//	commande.
+// string  GetCmdString()
+//	Renvoie la chaine de caractere correspondant a la ligne editee.
+//--
 
 /* --Methode-- */
@@ -316,4 +406,22 @@
     return;
     }
+  else if (key == 'L' || key == 'l') {  // Pour lister le buffer de rappel
+    int nmxrec = (mNComm < NMxRecall) ? mNComm : NMxRecall;
+    if (nmxrec < 1)  return;
+    AddStr("PIConsole - Command history : \n",  PIVA_Def, false);
+    int ridx = mRCindx+nmxrec;
+    int kk;
+    char strg[64];
+    for(kk=0; kk<nmxrec; kk++) {
+      sprintf(strg, "%d- ", mNComm-nmxrec+kk+1);
+      AddStr(strg, PIVA_Def, false);
+      AddStr(mRStr[ridx%nmxrec].c_str(), PIVA_Def, false);
+      AddChar('\n', PIVA_Def, false);
+      ridx++;
+      }
+    AddChar('\n', PIVA_Def, false);
+    Refresh();
+    return;
+    }
   }
 
@@ -325,11 +433,17 @@
 if (kmod == PIKM_Cntl) {
   switch (key) {
-    case 1 :  // <Cntl> A
+    case 1 :  // <Cntl> A  Debut de ligne
       mCCP = 0;
       break;
-    case 5 :  // <Cntl> E
+    case 3 :  // <Cntl> C  On efface la ligne
+      mCCP = mCLC = 0;
+      mCmdStr[mCLC] = '\0';
+      mRindx = mRCindx;
+      mChangeFg = true;
+      break;
+    case 5 :  // <Cntl> E  Fin de ligne
       mCCP = mCLC;
       break;
-    case 11 :  // <Cntl> K
+    case 11 :  // <Cntl> K  On efface jusqu'en fin de ligne
       mCLC = mCCP;
       break;
@@ -382,14 +496,12 @@
 	  }
         int nmxrec = ((mNComm+1) < NMxRecall) ? mNComm+1 : NMxRecall;
-        if (key == PIK_Up)  {
-          mRindx--; 
-          if (mRindx < 0)  mRindx = 0;
-          }
-        else { 
-          mRindx++;
-          if (mRindx >= nmxrec) mRindx= nmxrec-1;
-          }
-        mCLC = mCCP = mRStr[mRindx].length();
-        for(k=0; k< mCLC; k++)  mCmdStr[k] =  mRStr[mRindx][k];
+        if (key == PIK_Up) { 
+           mRindx --;
+           if (mRindx < 0) mRindx += nmxrec;
+	   }
+        else mRindx++;
+        int ridx = mRindx%nmxrec;
+        mCLC = mCCP = mRStr[ridx].length();
+        for(k=0; k< mCLC; k++)  mCmdStr[k] =  mRStr[ridx][k];
         mCmdStr[mCLC] = '\0';      
         }      
