Index: /trunk/SophyaLib/SysTools/commander.cc
===================================================================
--- /trunk/SophyaLib/SysTools/commander.cc	(revision 2465)
+++ /trunk/SophyaLib/SysTools/commander.cc	(revision 2466)
@@ -321,4 +321,8 @@
 
 // cmdhgrp["All"] = 0;
+
+string grp = "Commander";
+string gdesc = "Basic (generic) interpreter (class SOPHYA::Commander) builtin commands";
+AddHelpGroup(grp, gdesc);
 
 string kw = "Commander";
@@ -354,5 +358,4 @@
 usage += "  > help <command_name>  # <command_name> usage info \n"; 
 usage += "  > timingon  timingoff traceon  traceoff \n";
-string grp = "Commander";
 RegisterHelp(kw, usage, grp);
 
@@ -436,5 +439,12 @@
 
 /* --Methode-- */
-void Commander::RegisterCommand(string& keyw, string& usage, CmdExecutor * ce, string grp)
+void Commander::AddHelpGroup(string& grp, string& desc)
+{
+  int gid; 
+  CheckHelpGrp(grp, gid, desc);
+}
+
+/* --Methode-- */
+void Commander::RegisterCommand(string& keyw, string& usage, CmdExecutor * ce, string& grp)
 {
 if (!ce) { 
@@ -442,5 +452,6 @@
   return;
   }
-int gid = CheckHelpGrp(grp);
+int gid;
+CheckHelpGrp(grp,gid);
 cmdex cme;
 cme.group = gid;
@@ -453,5 +464,6 @@
 void Commander::RegisterHelp(string& keyw, string& usage, string& grp)
 {
-int gid = CheckHelpGrp(grp);
+int gid;
+CheckHelpGrp(grp,gid);
 cmdex cme;
 cme.group = gid;
@@ -462,15 +474,19 @@
 
 /* --Methode-- */
-int Commander::CheckHelpGrp(string& grp)
-{
-int gid=0;
+bool Commander::CheckHelpGrp(string& grp, int& gid, string& desc)
+{
+gid = 0;
 CmdHGroup::iterator it = cmdhgrp.find(grp);
 if (it == cmdhgrp.end()) {
-  cmdgrpid++;   gid = cmdgrpid;
-  cmdhgrp[grp] = gid;
-  //  _helpmgr->AddHelpGroup(grp.c_str(), gid);
-  }
-else gid = (*it).second;
-return(gid);
+  cmdgrpid++;  gid = cmdgrpid;
+  hgrpst hgs;  hgs.gid = gid;  hgs.desc = desc;
+  cmdhgrp[grp] = hgs;
+  return true;
+  }
+else { 
+  if (desc.length() > 0)  (*it).second.desc = desc; 
+  gid = (*it).second.gid;
+  return false;
+}
 }
 
@@ -1736,4 +1752,5 @@
     if (! isalnum(prl[k]) )  prl[k] = 'Z';
 }
+
 // Fonction qui remplace _ en \_
 static string check_latex_underscore(string const & mot)
@@ -1741,5 +1758,5 @@
   string rs;
   for(int k=0; k<mot.length(); k++) {
-    if (mot[k] == '_') rs += "\\_";
+    if (mot[k] == '_')  rs += "\\_"; 
     else rs += mot[k];
   }
@@ -1800,10 +1817,10 @@
 int gid;
 for(it = cmdhgrp.begin(); it != cmdhgrp.end(); it++) {
-  gid = (*it).second;
+  gid = (*it).second.gid;
   if (gid == 0)  continue;
   //  fputs("\\begin{table}[h!] \n",fip);
   fputs("\\vspace{6mm} \n",fip);
   fputs("\\begin{center} \n ", fip);
-  fprintf(fip, "\\rule{2cm}{1mm} \\makebox[60mm]{{ \\bf %s } help group} \\rule{2cm}{1mm} \\\\ \n", 
+  fprintf(fip, "\\rule{2cm}{0.5mm} \\makebox[60mm]{{ \\bf %s } help group} \\rule{2cm}{0.5mm} \\\\ \n", 
 	  (*it).first.c_str());
   fputs("\\vspace{3mm} \n",fip);
@@ -1841,9 +1858,11 @@
 
 for(it = cmdhgrp.begin(); it != cmdhgrp.end(); it++) {
-  gid = (*it).second;
+  gid = (*it).second.gid;
   if (gid == 0)  continue;
   prl = (*it).first;  check_latex_reflabel(prl);
   fprintf(fip,"\\subsection{%s} \\label{%s} \n", 
           (*it).first.c_str(), prl.c_str());
+  if ((*it).second.desc.length() > 0) 
+    fprintf(fip,"%s \n \\\\[2mm]  ", (*it).second.desc.c_str());
   fprintf(fip,"\\noindent \n");
   for(ite = helpexmap.begin(); ite != helpexmap.end(); ite++) {
@@ -1870,4 +1889,6 @@
 
 fclose(fip);
+cout << " Commander::HelptoLaTeX() - LaTeX format help written to file " <<  fname << endl;
+ 
 return;
 }
Index: /trunk/SophyaLib/SysTools/commander.h
===================================================================
--- /trunk/SophyaLib/SysTools/commander.h	(revision 2465)
+++ /trunk/SophyaLib/SysTools/commander.h	(revision 2466)
@@ -73,6 +73,11 @@
   virtual string	Name();
 
+  virtual void		AddHelpGroup(string& grp, string& desc);
   virtual void		RegisterCommand(string& keyw, string& usage, CmdExecutor * ce, 
-                                        string grp="Commands");
+                                        string& grp);
+  inline  void		RegisterCommand(string& keyw, string& usage, CmdExecutor * ce, 
+                                        char* grp)
+                        { string sgrp = grp; RegisterCommand(keyw, usage, ce, sgrp); }
+
   virtual void		RegisterHelp(string& keyw, string& usage, string& grp);
 
@@ -104,5 +109,8 @@
 			    string& toks, bool uq=true);
 protected:
-  virtual int	CheckHelpGrp(string& grp);
+  virtual bool	CheckHelpGrp(string& grp, int& gid, string& desc);
+  inline  bool	CheckHelpGrp(string& grp, int& gid)
+  { string desc=""; return CheckHelpGrp(grp, gid, desc); }
+
   int           ExecuteCommandLine(string & keyw, vector<string> & args,
 				   string & toks);
@@ -135,10 +143,11 @@
 // Pour enregistrer la liste de commandes et leurs executeurs et le help
   struct cmdex {int group; string us; CmdExecutor * cex; } ;
-  typedef map<string, int, less<string> > CmdHGroup;   // Liste des groupes de commandes
+  struct hgrpst {int gid; string desc; } ;               // Identification+description d'un groupe de help
+  typedef map<string, hgrpst, less<string> > CmdHGroup;   // Liste des groupes de commandes
   CmdHGroup cmdhgrp;
-  int cmdgrpid;                                     // Numero de groupe courant
-  typedef map<string, cmdex, less<string> > CmdExmap;
-  CmdExmap cmdexmap;
-  CmdExmap helpexmap;                               // Pour les helps sans commande
+  int cmdgrpid;                                        // Numero de groupe courant
+  typedef map<string, cmdex, less<string> > CmdExmap;  
+  CmdExmap cmdexmap;                                   // Liste des commandes et leurs executeurs
+  CmdExmap helpexmap;                                  // Pour les helps sans commande
 
 // Pour garder la liste des modules 
