void build_mangeld_field_name(const Field_Id & id, Nom & name)
{
  name = id.uname_.build_string();
  name += "_";
  name += Nom(id.timestep_);
  name += "_";
  name += Nom(id.block_);
  name.majuscule();
}
void build_mangeld_domain_name(const Domain_Id & id, Nom & name)
{
  name = id.name_;
  name += "_";
  name += Nom(id.timestep_);
  name += "_";
  name += Nom(id.block_);
  name.majuscule();
}
Nom LataOptions::read_string_opt(const Nom & s)
{
  const char *ptr = strstr(s, "=");
  if (!ptr) 
    return s;
  else
    return Nom(ptr+1);
}
void LataOptions::extract_path_basename(const char * s, Nom & path_prefix, Nom & basename)
{
  int i;
  for (i=strlen(s)-1;i>=0;i--)
    if ((s[i]==PATH_SEPARATOR) ||(s[i]=='\\'))
      break;
  path_prefix = "";
  int j;
  for (j = 0; j <= i; j++)
    path_prefix += Nom(s[j]);
  
  // Parse basename : if extension given, remove it
  int n = strlen(s);
  if (n > 5 && strcmp(s+n-5,".lata") == 0)
    n -= 5;
  basename = "";
  for (j = i+1; j < n; j++)
    basename += Nom(s[j]);
  //  Journal(9)<<" prefix "<<path_prefix<< " "<<i<<endl;
}
void split_path_filename(const char *s, Nom & path, Nom & filename)
{
  int i;
  for (i=strlen(s)-1;i>=0;i--)
    if ((s[i]==PATH_SEPARATOR) || (s[i]=='\\'))
      break;
  path = "";
  int j;
  for (j = 0; j <= i; j++)
    path += Nom(s[j]);
  
  // Parse basename : if extension given, remove it
  filename = s+i+1;
}
Noms extract_list(const Nom & n) 
{
  Noms liste;
  if (n == "")
    return liste;
  const char *ptr = n;
  Nom tmp("");
  while (*ptr) {
    if (*ptr == ',') {
      liste.add(tmp);
      tmp = "";
    } else {
      tmp += Nom(*ptr);
    }
  }
  liste.add(tmp);
  return liste;
}
    /*!
      @par Etat 
        Test codé en dur
    */
    void Charger(const Base::Chaine& _nom)
    {
     
      if (_nom == "TestDemonstration")
      {
        /// 1. Construction d'un univers
        Base::Traceur::MessageInterne("construction de Univers...") ;
        Base::Association<Objet> univers = Ajouter(new Objet(Nom("Univers"))) ;
        
        /// ses facettes
        univers->Ajouter(new Univers()) ;
        univers->Ajouter(new Positionne()) ;

        Base::Traceur::MessageInterne("construction de Univers terminée") ;

        /// 1.4 Une galaxie
        
        /// 1.5 Un système stellaire
        Base::Traceur::MessageInterne("construction d'un système...") ;
        Base::Association<Objet> systeme = univers->Ajouter(new Objet(Nom("Systeme#1"))) ;
        systeme->Ajouter(new Positionne(Position())) ;
        systeme->Ajouter(new SystemeStellaire()) ;
         
        Base::Traceur::MessageInterne("construction d'un système terminée") ;
        
        
        
        /// 2. Ajout d'objets planetes
        Base::Traceur::MessageInterne("construction d'une planete...") ;
        Base::Association<Objet> planete1 = systeme->Ajouter(new Objet(Nom("Planete#1"))) ;
        planete1->Ajouter(new Positionne(Position())) ;

        Base::Traceur::MessageInterne("construction d'une planete terminée") ;

        /// Ajouter(new Solide(planete1, 
        
        /// 3. Ajout d'un vaisseau
        Base::Traceur::MessageInterne("construction d'un vaisseau...") ;
        Base::Association<Objet> vaisseau = systeme->Ajouter(new Objet(Nom("Vaisseau"))) ;
        vaisseau->Ajouter(new Positionne(Position(Distance(Distance::_Metre, 0),
                                                  Distance(Distance::_Metre, 0),
                                                  Distance(Distance::_Metre, 0)) )) ;
        
        vaisseau->Ajouter(new Solide(Modele3D("razor.mesh"))) ;

        Base::Traceur::MessageInterne("construction d'un vaisseau terminée") ;
        
        /// 4. Ajout d'un observateur
        Base::Traceur::MessageInterne("construction d'un observateur...") ;
        Base::Association<Objet> observateur = systeme->Ajouter(new Objet(Nom("Observateur"))) ;
        observateur->Ajouter(new Positionne(Position(Distance(Distance::_Metre, 0),
                                                     Distance(Distance::_Metre, 0),
                                                     Distance(Distance::_Metre, 500000)) )) ;

        /// Il a la faculté d'observer
        observateur->Ajouter(new Observateur()) ;

        Base::Traceur::MessageInterne("construction d'un observateur terminée") ;
      
      }
      
            
    }