add: if ( nouveau_fichier ) chmod ( nom_fichier_comptes, S_IRUSR | S_IWUSR );
context: gboolean enregistre_fichier ( gboolean force ){  xmlDocPtr doc;  xmlNodePtr node;  xmlNodePtr node_1;  gint resultat;  gchar *pointeur_char;  GSList *pointeur_liste;  GList *pointeur_list;  gint i, j;  GSList *pointeur_liste_2;  /*   si le fichier est dej ouvert par un autre, ne peut enregistrer */  if ( etat.fichier_deja_ouvert && !etat.force_enregistrement && !force )    {      dialogue ( PRESPACIFY(_("Fichier ouvert par un autre utilisateur, enregistrement impossible\nVous pouvez forcer l'enregistrement  partir des paramtres.")));      return ( FALSE );    }  etat.en_train_de_sauvegarder = 1;  /* on met  jour les soldes des comptes */  for ( i=0 ; i<nb_comptes ; i++ )    mise_a_jour_solde ( i );  /* creation de l'arbre xml en memoire */  doc = xmlNewDoc("1.0");  /* la racine est grisbi */  doc->root = xmlNewDocNode ( doc,			      NULL,			      "Grisbi",			      NULL );  /* on commence  ajouter les generalites */  node = xmlNewChild ( doc->root,		       NULL,		       "Generalites",		       NULL );  xmlNewTextChild ( node,		    NULL,		    "Version_fichier",		    VERSION_FICHIER );  xmlNewTextChild ( node,		    NULL,		    "Version_grisbi",		    VERSION );  /* on met fichier_ouvert  0 car si c'est une backup ... */  /* qd c'est un enregistrement normal, la mise  1 se fait plus tard */  xmlNewTextChild ( node,		    NULL,		    "Fichier_ouvert",		    "0" );  etat.fichier_deja_ouvert = 0;  xmlNewTextChild ( node,		    NULL,		    "Backup",		    nom_fichier_backup );  xmlNewTextChild ( node,		    NULL,		    "Titre",		    titre_fichier);  xmlNewTextChild ( node,		    NULL,		    "Adresse_commune",		    adresse_commune);  xmlNewTextChild ( node,		    NULL,		    "Adresse_secondaire",		    adresse_secondaire);  xmlNewTextChild ( node,		    NULL,		    "Utilise_exercices",		    itoa (etat.utilise_exercice));  xmlNewTextChild ( node,		    NULL,		    "Utilise_IB",		    itoa (etat.utilise_imputation_budgetaire));  xmlNewTextChild ( node,		    NULL,		    "Utilise_PC",		    itoa (etat.utilise_piece_comptable));  xmlNewTextChild ( node,		    NULL,		    "Utilise_info_BG",		    itoa (etat.utilise_info_banque_guichet));  xmlNewTextChild ( node,		    NULL,		    "Numero_devise_totaux_tiers",		    itoa ( no_devise_totaux_tiers));  xmlNewTextChild ( node,		    NULL,		    "Type_affichage_des_echeances",		    itoa (affichage_echeances));  xmlNewTextChild ( node,		    NULL,		    "Affichage_echeances_perso_nb_libre",		    itoa (affichage_echeances_perso_nb_libre));  xmlNewTextChild ( node,		    NULL,		    "Type_affichage_perso_echeances",		    itoa (affichage_echeances_perso_j_m_a));  xmlNewTextChild ( node,		    NULL,		    "Numero_derniere_operation",		    itoa ( no_derniere_operation));  xmlNewTextChild ( node,		    NULL,		    "Chemin_logo",		    chemin_logo );  /* creation de l'ordre de l'affichage des ops */  pointeur_char = NULL;  for ( i=0 ; i<4 ; i++ )    for ( j=0 ; j< 7 ; j++ )       if ( pointeur_char )	 pointeur_char = g_strconcat ( pointeur_char,				       "-",				       itoa ( tab_affichage_ope[i][j] ),				       NULL );       else	 pointeur_char = itoa ( tab_affichage_ope[i][j] );     xmlNewTextChild ( node,		    NULL,		    "Affichage_opes",		    pointeur_char );  /* creation des rapport largeurs colonnes */  pointeur_char = NULL;  for ( i=0 ; i<7 ; i++ )    if ( pointeur_char )      pointeur_char = g_strconcat ( pointeur_char,				    "-",				    itoa ( rapport_largeur_colonnes[i] ),				    NULL );    else      pointeur_char = itoa ( rapport_largeur_colonnes[i] );     xmlNewTextChild ( node,		    NULL,		    "Rapport_largeur_col",		    pointeur_char );  /* creation des lignes affiches par caractristiques */  xmlNewTextChild ( node,		    NULL,		    "Ligne_aff_une_ligne",		    itoa ( ligne_affichage_une_ligne ));  pointeur_char = g_strconcat ( itoa ( GPOINTER_TO_INT ( lignes_affichage_deux_lignes -> data )),				"-",				itoa ( GPOINTER_TO_INT ( lignes_affichage_deux_lignes -> next -> data )),				NULL );  xmlNewTextChild ( node,		    NULL,		    "Lignes_aff_deux_lignes",		    pointeur_char );  pointeur_char = g_strconcat ( itoa ( GPOINTER_TO_INT ( lignes_affichage_trois_lignes -> data )),				"-",				itoa ( GPOINTER_TO_INT ( lignes_affichage_trois_lignes -> next -> data )),				"-",				itoa ( GPOINTER_TO_INT ( lignes_affichage_trois_lignes -> next -> next -> data )),				NULL );  xmlNewTextChild ( node,		    NULL,		    "Lignes_aff_trois_lignes",		    pointeur_char );  /*   on commence la sauvegarde des comptes : 2 parties, les generalites */  /* puis les comptes 1 par 1 */  node = xmlNewChild ( doc->root,		       NULL,		       "Comptes",		       NULL );  /* c'est node_1 qui va contenir les generalites puis les comptes */  node_1 = xmlNewChild ( node,			 NULL,			 "Generalites",			 NULL );  /* creation de l'ordre des comptes */  pointeur_liste = ordre_comptes;  pointeur_char = NULL;  do  {    if ( pointeur_char )      pointeur_char = g_strconcat ( pointeur_char,				    "-",				    itoa ( GPOINTER_TO_INT ( pointeur_liste -> data )),				    NULL );    else      pointeur_char = itoa ( GPOINTER_TO_INT ( pointeur_liste -> data ));    pointeur_liste = pointeur_liste -> next;  }  while ( pointeur_liste );  xmlNewTextChild ( node_1,		    NULL,		    "Ordre_des_comptes",		    pointeur_char );  xmlNewTextChild ( node_1,		    NULL,		    "Compte_courant",		    itoa ( compte_courant ) );  /* mise en place des comptes 1 par 1 */  for ( i=0 ; i < nb_comptes ; i++)    {      xmlNodePtr node_compte;         p_tab_nom_de_compte_variable = p_tab_nom_de_compte + i;      node_1 = xmlNewChild ( node,			     NULL,			     "Compte",			     NULL );      /* on met d'abord le detail du compte, les types puis les operations */      /* mise en forme de la date du dernier releve */      if ( DATE_DERNIER_RELEVE )	pointeur_char = g_strconcat ( itoa ( g_date_day ( DATE_DERNIER_RELEVE ) ),				      "/",				      itoa ( g_date_month ( DATE_DERNIER_RELEVE ) ),				      "/",				      itoa ( g_date_year ( DATE_DERNIER_RELEVE ) ),				      NULL );      else	pointeur_char = NULL;      node_compte = xmlNewChild ( node_1,				  NULL,				  "Details",				  NULL );      xmlNewTextChild ( node_compte,			NULL,			"Nom",			NOM_DU_COMPTE );      xmlNewTextChild ( node_compte,			NULL,			"No_de_compte",			itoa ( NO_COMPTE ));      xmlNewTextChild ( node_compte,			NULL,			"Titulaire",			TITULAIRE );      xmlNewTextChild ( node_compte,			NULL,			"Type_de_compte",			itoa ( TYPE_DE_COMPTE ));      xmlNewTextChild ( node_compte,			NULL,			"Nb_operations",			itoa ( NB_OPE_COMPTE ));      xmlNewTextChild ( node_compte,			NULL,			"Devise",			itoa ( DEVISE ));      xmlNewTextChild ( node_compte,			NULL,			"Banque",			itoa ( BANQUE ));      xmlNewTextChild ( node_compte,			NULL,			"Guichet",			NO_GUICHET );      xmlNewTextChild ( node_compte,			NULL,			"No_compte_banque",			NO_COMPTE_BANQUE );      xmlNewTextChild ( node_compte,			NULL,			"Cle_du_compte",			CLE_COMPTE );      xmlNewTextChild ( node_compte,			NULL,			"Solde_initial",			g_strdup_printf ( "%4.2f",					  SOLDE_INIT ));      xmlNewTextChild ( node_compte,			NULL,			"Solde_mini_voulu",			g_strdup_printf ( "%4.2f",					  SOLDE_MINI_VOULU ));      xmlNewTextChild ( node_compte,			NULL,			"Solde_mini_autorise",			g_strdup_printf ( "%4.2f",					  SOLDE_MINI ));      xmlNewTextChild ( node_compte,			NULL,			"Solde_courant",			g_strdup_printf ( "%4.2f",					  SOLDE_COURANT ));      xmlNewTextChild ( node_compte,			NULL,			"Date_dernier_releve",			pointeur_char );      xmlNewTextChild ( node_compte,			NULL,			"Solde_dernier_releve",			g_strdup_printf ( "%4.2f",					  SOLDE_DERNIER_RELEVE ));      xmlNewTextChild ( node_compte,			NULL,			"Dernier_no_de_rapprochement",			itoa ( DERNIER_NO_RAPPROCHEMENT ));      xmlNewTextChild ( node_compte,			NULL,			"Compte_cloture",			itoa ( COMPTE_CLOTURE ));      xmlNewTextChild ( node_compte,			NULL,			"Affichage_r",			itoa ( AFFICHAGE_R ));      xmlNewTextChild ( node_compte,			NULL,			"Nb_lignes_ope",			itoa ( NB_LIGNES_OPE ));      xmlNewTextChild ( node_compte,			NULL,			"Commentaires",			COMMENTAIRE );      xmlNewTextChild ( node_compte,			NULL,			"Adresse_du_titulaire",			ADRESSE_TITULAIRE );      xmlNewTextChild ( node_compte,			NULL,			"Nombre_de_types",			itoa ( g_slist_length ( TYPES_OPES ) ));      xmlNewTextChild ( node_compte,			NULL,			"Type_defaut_debit",			itoa ( TYPE_DEFAUT_DEBIT ));      xmlNewTextChild ( node_compte,			NULL,			"Type_defaut_credit",			itoa ( TYPE_DEFAUT_CREDIT ));      xmlNewTextChild ( node_compte,			NULL,			"Tri_par_type",			itoa ( TRI ));      xmlNewTextChild ( node_compte,			NULL,			"Neutres_inclus",			itoa ( NEUTRES_INCLUS ));      /* mise en place de l'ordre du tri */      pointeur_liste = LISTE_TRI;      pointeur_char = NULL;      while ( pointeur_liste )	{	  if ( pointeur_char )	    pointeur_char = g_strconcat ( pointeur_char,					  "/",					  itoa ( GPOINTER_TO_INT ( pointeur_liste -> data )),					  NULL );	  else	    pointeur_char = itoa ( GPOINTER_TO_INT ( pointeur_liste -> data ));	  pointeur_liste = pointeur_liste -> next;	}      xmlNewTextChild ( node_compte,			NULL,			"Ordre_du_tri",			pointeur_char );      /* mise en place des types */      node_compte = xmlNewChild ( node_1,				  NULL,				  "Detail_de_Types",				  NULL );      pointeur_liste = TYPES_OPES;      while ( pointeur_liste )	{	  struct struct_type_ope *type;	  xmlNodePtr node_type;	  node_type = xmlNewChild ( node_compte,				    NULL,				    "Type",				    NULL );	  type = pointeur_liste -> data;	  xmlSetProp ( node_type,		       "No",		       itoa ( type -> no_type ));	  xmlSetProp ( node_type,		       "Nom",		       type -> nom_type );	  xmlSetProp ( node_type,		       "Signe",		       itoa ( type -> signe_type ));	  xmlSetProp ( node_type,		       "Affiche_entree",		       itoa ( type -> affiche_entree ));	  xmlSetProp ( node_type,		       "Numerotation_auto",		       itoa ( type -> numerotation_auto ));	  xmlSetProp ( node_type,		       "No_en_cours",		       itoa ( type -> no_en_cours ));	  pointeur_liste = pointeur_liste -> next;	}      /* mise en place des operations */      node_compte = xmlNewChild ( node_1,				  NULL,				  "Detail_des_operations",				  NULL );      pointeur_liste = LISTE_OPERATIONS;      while ( pointeur_liste )	{	  struct structure_operation *operation;	  xmlNodePtr node_ope;	  operation = pointeur_liste -> data;	  node_ope = xmlNewChild ( node_compte,				   NULL,				   "Operation",				   NULL );	  xmlSetProp ( node_ope,		       "No",		       itoa ( operation -> no_operation ));	  xmlSetProp ( node_ope,		       "D",		       g_strdup_printf ( "%d/%d/%d",					 operation -> jour,					 operation -> mois,					 operation -> annee ));    /* GDC : Ecriture de la date bancaire */	  xmlSetProp ( node_ope,		       "Db",		       g_strdup_printf ( "%d/%d/%d",					 operation -> jour_bancaire,					 operation -> mois_bancaire,					 operation -> annee_bancaire ));    /* GDCFin */	  xmlSetProp ( node_ope,		       "M",		       g_strdup_printf ( "%4.2f",					 operation -> montant ));	  xmlSetProp ( node_ope,		       "De",		       itoa ( operation -> devise ));	  xmlSetProp ( node_ope,		       "Rdc",		       itoa ( operation -> une_devise_compte_egale_x_devise_ope ));	  xmlSetProp ( node_ope,		       "Tc",		       g_strdup_printf ( "%4.2f",					 operation -> taux_change ));	  xmlSetProp ( node_ope,		       "Fc",		       g_strdup_printf ( "%4.2f",					 operation -> frais_change ));	  xmlSetProp ( node_ope,		       "T",		       itoa ( operation -> tiers ));	  xmlSetProp ( node_ope,		       "C",		       itoa ( operation -> categorie ));	  xmlSetProp ( node_ope,		       "Sc",		       itoa ( operation -> sous_categorie ));	  xmlSetProp ( node_ope,		       "Ov",		       itoa ( operation -> operation_ventilee ));	  xmlSetProp ( node_ope,		       "N",		       operation -> notes );	  xmlSetProp ( node_ope,		       "Ty",		       itoa ( operation -> type_ope ));	  xmlSetProp ( node_ope,		       "Ct",		       operation -> contenu_type );	  xmlSetProp ( node_ope,		       "P",		       itoa ( operation -> pointe ));	  xmlSetProp ( node_ope,		       "A",		       itoa ( operation -> auto_man ));	  xmlSetProp ( node_ope,		       "R",		       itoa ( operation -> no_rapprochement ));	  xmlSetProp ( node_ope,		       "E",		       itoa ( operation -> no_exercice ));	  xmlSetProp ( node_ope,		       "I",		       itoa ( operation -> imputation ));	  xmlSetProp ( node_ope,		       "Si",		       itoa ( operation -> sous_imputation ));	  xmlSetProp ( node_ope,		       "Pc",		       operation -> no_piece_comptable );	  xmlSetProp ( node_ope,		       "Ibg",		       operation -> info_banque_guichet );	  xmlSetProp ( node_ope,		       "Ro",		       itoa ( operation -> relation_no_operation ));	  xmlSetProp ( node_ope,		       "Rc",		       itoa ( operation -> relation_no_compte ));	  xmlSetProp ( node_ope,		       "Va",		       itoa ( operation -> no_operation_ventilee_associee ));	  pointeur_liste = pointeur_liste -> next;	}    }  /* on sauvegarde maintenant les echeances : generalites puis liste des echeances */  node = xmlNewChild ( doc->root,		       NULL,		       "Echeances",		       NULL );  /* c'est node_1 qui va contenir les generalites */  node_1 = xmlNewChild ( node,			 NULL,			 "Generalites",			 NULL );  xmlNewTextChild ( node_1,		    NULL,		    "Nb_echeances",		    itoa ( nb_echeances ));  xmlNewTextChild ( node_1,		    NULL,		    "No_derniere_echeance",		    itoa ( no_derniere_echeance ));  /* on met les echeances */  node_1 = xmlNewChild ( node,			 NULL,			 "Detail_des_echeances",			 NULL );  pointeur_liste = gsliste_echeances;  while ( pointeur_liste )    {      struct operation_echeance *echeance;      xmlNodePtr node_echeance;      echeance = pointeur_liste -> data;      node_echeance = xmlNewChild ( node_1,				    NULL,				    "Echeance",				    NULL );      xmlSetProp ( node_echeance,		   "No",		   itoa ( echeance -> no_operation ));      xmlSetProp ( node_echeance,		   "Date",		   g_strdup_printf ( "%d/%d/%d",				     echeance -> jour,				     echeance -> mois,				     echeance -> annee ));      xmlSetProp ( node_echeance,		   "Compte",		   itoa ( echeance -> compte ));      xmlSetProp ( node_echeance,		   "Montant",		   g_strdup_printf ( "%4.2f",				     echeance -> montant ));      xmlSetProp ( node_echeance,		   "Devise",		   itoa ( echeance -> devise ));      xmlSetProp ( node_echeance,		   "Tiers",		   itoa ( echeance -> tiers ));      xmlSetProp ( node_echeance,		   "Categorie",		   itoa ( echeance -> categorie ));      xmlSetProp ( node_echeance,		   "Sous-categorie",		   itoa ( echeance -> sous_categorie ));      xmlSetProp ( node_echeance,		   "Virement_compte",		   itoa ( echeance -> compte_virement ));      xmlSetProp ( node_echeance,		   "Type",		   itoa ( echeance -> type_ope ));      xmlSetProp ( node_echeance,		   "Contenu_du_type",		   echeance -> contenu_type );      xmlSetProp ( node_echeance,		   "Exercice",		   itoa ( echeance -> no_exercice ));      xmlSetProp ( node_echeance,		   "Imputation",		   itoa ( echeance -> imputation ));      xmlSetProp ( node_echeance,		   "Sous-imputation",		   itoa ( echeance -> sous_imputation ));      xmlSetProp ( node_echeance,		   "Notes",		   echeance -> notes );      xmlSetProp ( node_echeance,		   "Automatique",		   itoa ( echeance -> auto_man ));      xmlSetProp ( node_echeance,		   "Periodicite",		   itoa ( echeance -> periodicite ));      xmlSetProp ( node_echeance,		   "Intervalle_periodicite",		   itoa ( echeance -> intervalle_periodicite_personnalisee ));      xmlSetProp ( node_echeance,		   "Periodicite_personnalisee",		   itoa ( echeance -> periodicite_personnalisee ));      if ( echeance -> jour_limite )	xmlSetProp ( node_echeance,		     "Date_limite",		     g_strdup_printf ( "%d/%d/%d",				       echeance -> jour_limite,				       echeance -> mois_limite,				       echeance -> annee_limite ));      else	xmlSetProp ( node_echeance,		     "Date_limite",		     NULL );      pointeur_liste = pointeur_liste -> next;    }  /* mise en place des tiers : generalites puis liste */  node = xmlNewChild ( doc->root,		       NULL,		       "Tiers",		       NULL );  /* c'est node_1 qui va contenir les generalites */  node_1 = xmlNewChild ( node,			 NULL,			 "Generalites",			 NULL );  xmlNewTextChild ( node_1,		    NULL,		    "Nb_tiers",		    itoa ( nb_enregistrements_tiers ));  xmlNewTextChild ( node_1,		    NULL,		    "No_dernier_tiers",		    itoa ( no_dernier_tiers ));  /* on met les tiers */  node_1 = xmlNewChild ( node,			 NULL,			 "Detail_des_tiers",			 NULL );  pointeur_liste = liste_struct_tiers;  while ( pointeur_liste )    {      struct struct_tiers *tiers;      xmlNodePtr node_tiers;      tiers = pointeur_liste -> data;      node_tiers = xmlNewChild ( node_1,				 NULL,				 "Tiers",				 NULL );      xmlSetProp ( node_tiers,		   "No",		   itoa ( tiers -> no_tiers ));      xmlSetProp ( node_tiers,		   "Nom",		   tiers -> nom_tiers );      xmlSetProp ( node_tiers,		   "Informations",		   tiers -> texte );      xmlSetProp ( node_tiers,		   "Liaison",		   itoa ( tiers -> liaison ));      pointeur_liste = pointeur_liste -> next;    }  /* mise en place des categories : generalites puis liste */  node = xmlNewChild ( doc->root,		       NULL,		       "Categories",		       NULL );  /* c'est node_1 qui va contenir les generalites */  node_1 = xmlNewChild ( node,			 NULL,			 "Generalites",			 NULL );  xmlNewTextChild ( node_1,		    NULL,		    "Nb_categories",		    itoa ( nb_enregistrements_categories ));  xmlNewTextChild ( node_1,		    NULL,		    "No_derniere_categorie",		    itoa ( no_derniere_categorie ));  /* on met les categories */  node_1 = xmlNewChild ( node,			 NULL,			 "Detail_des_categories",			 NULL );  pointeur_liste = liste_struct_categories;  while ( pointeur_liste )    {      struct struct_categ *categ;      xmlNodePtr node_categ;      GSList *pointeur_sous_categ;      categ = pointeur_liste -> data;      node_categ = xmlNewChild ( node_1,				 NULL,				 "Categorie",				 NULL );      xmlSetProp ( node_categ,		   "No",		   itoa ( categ -> no_categ ));      xmlSetProp ( node_categ,		   "Nom",		   categ -> nom_categ );      xmlSetProp ( node_categ,		   "Type",		   itoa ( categ -> type_categ ));      xmlSetProp ( node_categ,		   "No_derniere_sous_cagegorie",		   itoa ( categ -> no_derniere_sous_categ ));      /* on ajoute les sous categories */      pointeur_sous_categ = categ -> liste_sous_categ;      while ( pointeur_sous_categ )	{	  struct struct_sous_categ *sous_categ;	  xmlNodePtr node_sous_categ;	  sous_categ = pointeur_sous_categ -> data;	  node_sous_categ = xmlNewChild ( node_categ,					  NULL,					  "Sous-categorie",					  NULL );	  xmlSetProp ( node_sous_categ,		       "No",		       itoa ( sous_categ -> no_sous_categ ));	  xmlSetProp ( node_sous_categ,		       "Nom",		       sous_categ -> nom_sous_categ );	  pointeur_sous_categ = pointeur_sous_categ -> next;	}      pointeur_liste = pointeur_liste -> next;    }  /* mise en place des imputations budgetaires : generalites puis liste */  node = xmlNewChild ( doc->root,		       NULL,		       "Imputations",		       NULL );  /* c'est node_1 qui va contenir les generalites */  node_1 = xmlNewChild ( node,			 NULL,			 "Generalites",			 NULL );  xmlNewTextChild ( node_1,		    NULL,		    "Nb_imputations",		    itoa ( nb_enregistrements_imputations ));  xmlNewTextChild ( node_1,		    NULL,		    "No_derniere_imputation",		    itoa ( no_derniere_imputation ));  /* on met les categories */  node_1 = xmlNewChild ( node,			 NULL,			 "Detail_des_imputations",			 NULL );  pointeur_liste = liste_struct_imputation;  while ( pointeur_liste )    {      struct struct_imputation *imputation;      xmlNodePtr node_imputation;      GSList *pointeur_sous_imputation;      imputation = pointeur_liste -> data;      node_imputation = xmlNewChild ( node_1,				      NULL,				      "Imputation",				      NULL );      xmlSetProp ( node_imputation,		   "No",		   itoa ( imputation -> no_imputation ));      xmlSetProp ( node_imputation,		   "Nom",		   imputation -> nom_imputation );      xmlSetProp ( node_imputation,		   "Type",		   itoa ( imputation -> type_imputation ));      xmlSetProp ( node_imputation,		   "No_derniere_sous_imputation",		   itoa ( imputation -> no_derniere_sous_imputation ));      /* on ajoute les sous ib */      pointeur_sous_imputation = imputation -> liste_sous_imputation;      while ( pointeur_sous_imputation )	{	  struct struct_sous_imputation *sous_imputation;	  xmlNodePtr node_sous_imputation;	  sous_imputation = pointeur_sous_imputation -> data;	  node_sous_imputation = xmlNewChild ( node_imputation,					  NULL,					  "Sous-imputation",					  NULL );	  xmlSetProp ( node_sous_imputation,		       "No",		       itoa ( sous_imputation -> no_sous_imputation ));	  xmlSetProp ( node_sous_imputation,		       "Nom",		       sous_imputation -> nom_sous_imputation );	  pointeur_sous_imputation = pointeur_sous_imputation -> next;	}      pointeur_liste = pointeur_liste -> next;    }  /* mise en place des devises : generalites puis liste */  node = xmlNewChild ( doc->root,		       NULL,		       "Devises",		       NULL );  /* c'est node_1 qui va contenir les generalites */  node_1 = xmlNewChild ( node,			 NULL,			 "Generalites",			 NULL );  xmlNewTextChild ( node_1,		    NULL,		    "Nb_devises",		    itoa ( nb_devises ));  xmlNewTextChild ( node_1,		    NULL,		    "No_derniere_devise",		    itoa ( no_derniere_devise ));  /* on met les devises */  node_1 = xmlNewChild ( node,			 NULL,			 "Detail_des_devises",			 NULL );  pointeur_liste = liste_struct_devises;  while ( pointeur_liste )    {      struct struct_devise *devise;      xmlNodePtr node_devise;      devise = pointeur_liste -> data;      node_devise = xmlNewChild ( node_1,				  NULL,				  "Devise",				  NULL );      xmlSetProp ( node_devise,		   "No",		   itoa ( devise -> no_devise ));      xmlSetProp ( node_devise,		   "Nom",		   devise -> nom_devise );      xmlSetProp ( node_devise,		   "Code",		   devise -> code_devise );      xmlSetProp ( node_devise,		   "Passage_euro",		   itoa ( devise -> passage_euro ));      if ( devise -> date_dernier_change )	xmlSetProp ( node_devise,		     "Date_dernier_change",		     g_strdup_printf (  "%d/%d/%d",					g_date_day ( devise -> date_dernier_change ),					g_date_month ( devise -> date_dernier_change ),					g_date_year ( devise -> date_dernier_change )));      else	xmlSetProp ( node_devise,		     "Date_dernier_change",		     NULL );      xmlSetProp ( node_devise,		   "Rapport_entre_devises",		   itoa ( devise -> une_devise_1_egale_x_devise_2 ));      xmlSetProp ( node_devise,		   "Devise_en_rapport",		   itoa ( devise -> no_devise_en_rapport ));      xmlSetProp ( node_devise,		   "Change",		   g_strdup_printf ( "%f",				     devise -> change ));      pointeur_liste = pointeur_liste -> next;    }  /* mise en place des banques : generalites puis liste */  node = xmlNewChild ( doc->root,		       NULL,		       "Banques",		       NULL );  /* c'est node_1 qui va contenir les generalites */  node_1 = xmlNewChild ( node,			 NULL,			 "Generalites",			 NULL );  xmlNewTextChild ( node_1,		    NULL,		    "Nb_banques",		    itoa ( nb_banques ));  xmlNewTextChild ( node_1,		    NULL,		    "No_derniere_banque",		    itoa ( no_derniere_banque ));  /* on met les banques */  node_1 = xmlNewChild ( node,			 NULL,			 "Detail_des_banques",			 NULL );  pointeur_liste = liste_struct_banques;  while ( pointeur_liste )    {      struct struct_banque *banque;      xmlNodePtr node_banque;      banque = pointeur_liste -> data;      node_banque = xmlNewChild ( node_1,				  NULL,				  "Banque",				  NULL );      xmlSetProp ( node_banque,		   "No",		   itoa ( banque -> no_banque ));      xmlSetProp ( node_banque,		   "Nom",		   banque -> nom_banque );      xmlSetProp ( node_banque,		   "Code",		   banque -> code_banque );      xmlSetProp ( node_banque,		   "Adresse",		   banque -> adr_banque );      xmlSetProp ( node_banque,		   "Tel",		   banque -> tel_banque );      xmlSetProp ( node_banque,		   "Mail",		   banque -> email_banque );      xmlSetProp ( node_banque,		   "Web",		   banque -> web_banque );      xmlSetProp ( node_banque,		   "Nom_correspondant",		   banque -> nom_correspondant );      xmlSetProp ( node_banque,		   "Fax_correspondant",		   banque -> fax_correspondant );      xmlSetProp ( node_banque,		   "Tel_correspondant",		   banque -> tel_correspondant );      xmlSetProp ( node_banque,		   "Mail_correspondant",		   banque -> email_correspondant );      xmlSetProp ( node_banque,		   "Remarques",		   banque -> remarque_banque );      pointeur_liste = pointeur_liste -> next;    }  /* mise en place des exercices : generalites puis liste */  node = xmlNewChild ( doc->root,		       NULL,		       "Exercices",		       NULL );  /* c'est node_1 qui va contenir les generalites */  node_1 = xmlNewChild ( node,			 NULL,			 "Generalites",			 NULL );  xmlNewTextChild ( node_1,		    NULL,		    "Nb_exercices",		    itoa ( nb_exercices ));  xmlNewTextChild ( node_1,		    NULL,		    "No_dernier_exercice",		    itoa ( no_derniere_exercice ));  /* on met les exercices */  node_1 = xmlNewChild ( node,			 NULL,			 "Detail_des_exercices",			 NULL );  pointeur_liste = liste_struct_exercices;  while ( pointeur_liste )    {      struct struct_exercice *exercice;      xmlNodePtr node_exercice;      exercice = pointeur_liste -> data;      node_exercice = xmlNewChild ( node_1,				  NULL,				  "Exercice",				  NULL );      xmlSetProp ( node_exercice,		   "No",		   itoa ( exercice -> no_exercice ));      xmlSetProp ( node_exercice,		   "Nom",		   exercice -> nom_exercice );      if ( exercice->date_debut )	xmlSetProp ( node_exercice,		     "Date_debut",		     g_strdup_printf ( "%d/%d/%d",				       g_date_day ( exercice->date_debut ),				       g_date_month ( exercice->date_debut ),				       g_date_year ( exercice->date_debut )));      else	xmlSetProp ( node_exercice,		     "Date_debut",		     NULL );      if ( exercice->date_fin )	xmlSetProp ( node_exercice,		     "Date_fin",		     g_strdup_printf ( "%d/%d/%d",				       g_date_day ( exercice->date_fin ),				       g_date_month ( exercice->date_fin ),				       g_date_year ( exercice->date_fin )));      else	xmlSetProp ( node_exercice,		     "Date_fin",		     NULL );      xmlSetProp ( node_exercice,		   "Affiche",		   itoa ( exercice -> affiche_dans_formulaire ));      pointeur_liste = pointeur_liste -> next;    }  /* mise en place des no de rapprochement : generalites puis liste */  node = xmlNewChild ( doc->root,		       NULL,		       "Rapprochements",		       NULL );  /* c'est node_1 qui va contenir les generalites */  /* on n'a pas de generalites, peut tre un jour ... *//*   node_1 = xmlNewChild ( node, *//* 			 NULL, *//* 			 "Generalites", *//* 			 NULL ); *//*   xmlNewTextChild ( node_1, *//* 		    NULL, *//* 		    "Nb_rapprochements", *//* 		    itoa ( g_slist_length ( liste_no_rapprochements ))); */  /* on met les rapprochements */  node_1 = xmlNewChild ( node,			 NULL,			 "Detail_des_rapprochements",			 NULL );  pointeur_liste = liste_no_rapprochements;  while ( pointeur_liste )    {      struct struct_no_rapprochement *rapprochement;      xmlNodePtr node_rapprochement;      rapprochement = pointeur_liste -> data;      node_rapprochement = xmlNewChild ( node_1,					 NULL,					 "Rapprochement",					 NULL );      xmlSetProp ( node_rapprochement,		   "No",		   itoa ( rapprochement -> no_rapprochement ));      xmlSetProp ( node_rapprochement,		   "Nom",		   rapprochement -> nom_rapprochement );      pointeur_liste = pointeur_liste -> next;    }  /* sauvegarde des etats */  node = xmlNewChild ( doc->root,		       NULL,		       "Etats",		       NULL );  /* c'est node_1 qui va contenir les generalites */  node_1 = xmlNewChild ( node,			 NULL,			 "Generalites",			 NULL );  xmlNewTextChild ( node_1,		    NULL,		    "No_dernier_etat",		    itoa ( no_dernier_etat ));  /* on met les etats */  node_1 = xmlNewChild ( node,			 NULL,			 "Detail_des_etats",			 NULL );  pointeur_liste_2 = liste_struct_etats;  while ( pointeur_liste_2 )    {      struct struct_etat *etat;      xmlNodePtr node_etat;      xmlNodePtr node_2;      etat = pointeur_liste_2 -> data;      node_etat = xmlNewChild ( node_1,				NULL,				"Etat",				NULL );      xmlNewTextChild ( node_etat,		    NULL,		   "No",		   itoa ( etat -> no_etat ));      xmlNewTextChild ( node_etat,		    NULL,		   "Nom",		   etat -> nom_etat );      pointeur_list = etat -> type_classement;      pointeur_char = NULL;      while ( pointeur_list )	{	  if ( pointeur_char )	    pointeur_char = g_strconcat ( pointeur_char,					  "/",					  itoa ( GPOINTER_TO_INT ( pointeur_list -> data )),					  NULL );	  else	    pointeur_char = itoa ( GPOINTER_TO_INT ( pointeur_list -> data ));	  pointeur_list = pointeur_list -> next;	}      xmlNewTextChild ( node_etat,		    NULL,		   "Type_classement",		   pointeur_char );      xmlNewTextChild ( node_etat,		    NULL,		   "Aff_r",		   itoa ( etat -> afficher_r ));      xmlNewTextChild ( node_etat,		    NULL,		   "Aff_ope",		   itoa ( etat -> afficher_opes ));      xmlNewTextChild ( node_etat,		    NULL,		   "Aff_nb_ope",		   itoa ( etat -> afficher_nb_opes ));      xmlNewTextChild ( node_etat,		    NULL,		   "Aff_no_ope",		   itoa ( etat -> afficher_no_ope ));      xmlNewTextChild ( node_etat,		    NULL,		   "Aff_date_ope",		   itoa ( etat -> afficher_date_ope ));      xmlNewTextChild ( node_etat,		    NULL,		   "Aff_tiers_ope",		   itoa ( etat -> afficher_tiers_ope ));      xmlNewTextChild ( node_etat,		    NULL,		   "Aff_categ_ope",		   itoa ( etat -> afficher_categ_ope ));      xmlNewTextChild ( node_etat,		    NULL,		   "Aff_ss_categ_ope",		   itoa ( etat -> afficher_sous_categ_ope ));      xmlNewTextChild ( node_etat,		    NULL,		   "Aff_type_ope",		   itoa ( etat -> afficher_type_ope ));      xmlNewTextChild ( node_etat,		    NULL,		   "Aff_ib_ope",		   itoa ( etat -> afficher_ib_ope ));      xmlNewTextChild ( node_etat,		    NULL,		   "Aff_ss_ib_ope",		   itoa ( etat -> afficher_sous_ib_ope ));      xmlNewTextChild ( node_etat,		    NULL,		   "Aff_cheque_ope",		   itoa ( etat -> afficher_cheque_ope ));      xmlNewTextChild ( node_etat,		    NULL,		   "Aff_notes_ope",		   itoa ( etat -> afficher_notes_ope ));      xmlNewTextChild ( node_etat,		    NULL,		   "Aff_pc_ope",		   itoa ( etat -> afficher_pc_ope ));      xmlNewTextChild ( node_etat,		    NULL,		   "Aff_rappr_ope",		   itoa ( etat -> afficher_rappr_ope ));      xmlNewTextChild ( node_etat,		    NULL,		   "Aff_infobd_ope",		   itoa ( etat -> afficher_infobd_ope ));      xmlNewTextChild ( node_etat,		    NULL,		   "Aff_exo_ope",		   itoa ( etat -> afficher_exo_ope ));      xmlNewTextChild ( node_etat,		    NULL,		   "Class_ope",		   itoa ( etat -> type_classement_ope ));      xmlNewTextChild ( node_etat,		    NULL,		   "Aff_titres_col",		   itoa ( etat -> afficher_titre_colonnes ));      xmlNewTextChild ( node_etat,		    NULL,		   "Aff_titres_chgt",		   itoa ( etat -> type_affichage_titres ));      xmlNewTextChild ( node_etat,		    NULL,		   "Pas_detail_ventil",		   itoa ( etat -> pas_detailler_ventilation ));      xmlNewTextChild ( node_etat,		    NULL,		   "Sep_rev_dep",		   itoa ( etat -> separer_revenus_depenses ));      xmlNewTextChild ( node_etat,		    NULL,		   "Devise_gen",		   itoa ( etat -> devise_de_calcul_general ));      xmlNewTextChild ( node_etat,		    NULL,		   "Incl_tiers",		   itoa ( etat -> inclure_dans_tiers ));      xmlNewTextChild ( node_etat,		    NULL,		   "Ope_click",		   itoa ( etat -> ope_clickables ));      xmlNewTextChild ( node_etat,		    NULL,		   "Exo_date",		   itoa ( etat -> exo_date ));      xmlNewTextChild ( node_etat,		    NULL,		   "Detail_exo",		   itoa ( etat -> utilise_detail_exo ));      pointeur_liste = etat -> no_exercices;      pointeur_char = NULL;      while ( pointeur_liste )	{	  if ( pointeur_char )	    pointeur_char = g_strconcat ( pointeur_char,					  "/",					  itoa ( GPOINTER_TO_INT ( pointeur_liste -> data )),					  NULL );	  else	    pointeur_char = itoa ( GPOINTER_TO_INT ( pointeur_liste -> data ));	  pointeur_liste = pointeur_liste -> next;	}      xmlNewTextChild ( node_etat,		    NULL,		   "No_exo",		   pointeur_char );      xmlNewTextChild ( node_etat,		    NULL,		   "Plage_date",		   itoa ( etat -> no_plage_date ));      if ( etat->date_perso_debut )	xmlNewTextChild ( node_etat,		    NULL,		     "Date_debut",		     g_strdup_printf ( "%d/%d/%d",				       g_date_day ( etat->date_perso_debut ),				       g_date_month ( etat->date_perso_debut ),				       g_date_year ( etat->date_perso_debut )));      else	xmlNewTextChild ( node_etat,		    NULL,		     "Date_debut",		     NULL );      if ( etat->date_perso_fin )	xmlNewTextChild ( node_etat,		    NULL,		     "Date_fin",		     g_strdup_printf ( "%d/%d/%d",				       g_date_day ( etat->date_perso_fin ),				       g_date_month ( etat->date_perso_fin ),				       g_date_year ( etat->date_perso_fin )));      else	xmlNewTextChild ( node_etat,		    NULL,		     "Date_fin",		     NULL );      xmlNewTextChild ( node_etat,		    NULL,		   "Utilise_plages",		   itoa ( etat -> separation_par_plage ));      xmlNewTextChild ( node_etat,		    NULL,		   "Sep_plages",		   itoa ( etat -> type_separation_plage ));      xmlNewTextChild ( node_etat,		    NULL,		   "Deb_sem_plages",		   itoa ( etat -> jour_debut_semaine ));      xmlNewTextChild ( node_etat,		    NULL,		   "Detail_comptes",		   itoa ( etat -> utilise_detail_comptes ));      pointeur_liste = etat -> no_comptes;      pointeur_char = NULL;      while ( pointeur_liste )	{	  if ( pointeur_char )	    pointeur_char = g_strconcat ( pointeur_char,					  "/",					  itoa ( GPOINTER_TO_INT ( pointeur_liste -> data )),					  NULL );	  else	    pointeur_char = itoa ( GPOINTER_TO_INT ( pointeur_liste -> data ));	  pointeur_liste = pointeur_liste -> next;	}      xmlNewTextChild ( node_etat,		    NULL,			"No_comptes",			pointeur_char );      xmlNewTextChild ( node_etat,		    NULL,		   "Grp_ope_compte",		   itoa ( etat -> regroupe_ope_par_compte ));      xmlNewTextChild ( node_etat,		    NULL,		   "Total_compte",		   itoa ( etat -> affiche_sous_total_compte ));      xmlNewTextChild ( node_etat,		    NULL,		   "Aff_nom_compte",		   itoa ( etat -> afficher_nom_compte ));      xmlNewTextChild ( node_etat,		    NULL,		   "Type_vir",		   itoa ( etat -> type_virement ));      pointeur_liste = etat -> no_comptes_virements;      pointeur_char = NULL;      while ( pointeur_liste )	{	  if ( pointeur_char )	    pointeur_char = g_strconcat ( pointeur_char,					  "/",					  itoa ( GPOINTER_TO_INT ( pointeur_liste -> data )),					  NULL );	  else	    pointeur_char = itoa ( GPOINTER_TO_INT ( pointeur_liste -> data ));	  pointeur_liste = pointeur_liste -> next;	}      xmlNewTextChild ( node_etat,		    NULL,			"No_comptes_virements",			pointeur_char );      xmlNewTextChild ( node_etat,		    NULL,		   "Exclure_non_vir",		   itoa ( etat -> exclure_ope_non_virement ));      xmlNewTextChild ( node_etat,		    NULL,		   "Categ",		   itoa ( etat -> utilise_categ ));      xmlNewTextChild ( node_etat,		    NULL,		   "Detail_categ",		   itoa ( etat -> utilise_detail_categ ));      pointeur_liste = etat -> no_categ;      pointeur_char = NULL;      while ( pointeur_liste )	{	  if ( pointeur_char )	    pointeur_char = g_strconcat ( pointeur_char,					  "/",					  itoa ( GPOINTER_TO_INT ( pointeur_liste -> data )),					  NULL );	  else	    pointeur_char = itoa ( GPOINTER_TO_INT ( pointeur_liste -> data ));	  pointeur_liste = pointeur_liste -> next;	}      xmlNewTextChild ( node_etat,		    NULL,			"No_categ",			pointeur_char );      xmlNewTextChild ( node_etat,		    NULL,		   "Exclut_categ",		   itoa ( etat -> exclure_ope_sans_categ ));      xmlNewTextChild ( node_etat,		    NULL,		   "Total_categ",		   itoa ( etat -> affiche_sous_total_categ ));      xmlNewTextChild ( node_etat,		    NULL,		   "Aff_ss_categ",		   itoa ( etat -> afficher_sous_categ ));      xmlNewTextChild ( node_etat,		    NULL,		   "Aff_pas_ss_categ",		   itoa ( etat -> afficher_pas_de_sous_categ ));      xmlNewTextChild ( node_etat,		    NULL,		   "Total_ss_categ",		   itoa ( etat -> affiche_sous_total_sous_categ ));      xmlNewTextChild ( node_etat,		    NULL,		   "Devise_categ",		   itoa ( etat -> devise_de_calcul_categ ));      xmlNewTextChild ( node_etat,		    NULL,		   "Aff_nom_categ",		   itoa ( etat -> afficher_nom_categ ));      xmlNewTextChild ( node_etat,		    NULL,		   "IB",		   itoa ( etat -> utilise_ib ));      xmlNewTextChild ( node_etat,		    NULL,		   "Detail_ib",		   itoa ( etat -> utilise_detail_ib ));      pointeur_liste = etat -> no_ib;      pointeur_char = NULL;      while ( pointeur_liste )	{	  if ( pointeur_char )	    pointeur_char = g_strconcat ( pointeur_char,					  "/",					  itoa ( GPOINTER_TO_INT ( pointeur_liste -> data )),					  NULL );	  else	    pointeur_char = itoa ( GPOINTER_TO_INT ( pointeur_liste -> data ));	  pointeur_liste = pointeur_liste -> next;	}      xmlNewTextChild ( node_etat,		    NULL,			"No_ib",			pointeur_char );      xmlNewTextChild ( node_etat,		    NULL,		   "Exclut_ib",		   itoa ( etat -> exclure_ope_sans_ib ));      xmlNewTextChild ( node_etat,		    NULL,		   "Total_ib",		   itoa ( etat -> affiche_sous_total_ib ));      xmlNewTextChild ( node_etat,		    NULL,		   "Aff_ss_ib",		   itoa ( etat -> afficher_sous_ib ));      xmlNewTextChild ( node_etat,		    NULL,		   "Aff_pas_ss_ib",		   itoa ( etat -> afficher_pas_de_sous_ib ));      xmlNewTextChild ( node_etat,		    NULL,		   "Total_ss_ib",		   itoa ( etat -> affiche_sous_total_sous_ib ));      xmlNewTextChild ( node_etat,		    NULL,		   "Devise_ib",		   itoa ( etat -> devise_de_calcul_ib ));      xmlNewTextChild ( node_etat,		    NULL,		   "Aff_nom_ib",		   itoa ( etat -> afficher_nom_ib ));      xmlNewTextChild ( node_etat,		    NULL,		   "Tiers",		   itoa ( etat -> utilise_tiers ));      xmlNewTextChild ( node_etat,		    NULL,		   "Detail_tiers",		   itoa ( etat -> utilise_detail_tiers ));      pointeur_liste = etat -> no_tiers;      pointeur_char = NULL;      while ( pointeur_liste )	{	  if ( pointeur_char )	    pointeur_char = g_strconcat ( pointeur_char,					  "/",					  itoa ( GPOINTER_TO_INT ( pointeur_liste -> data )),					  NULL );	  else	    pointeur_char = itoa ( GPOINTER_TO_INT ( pointeur_liste -> data ));	  pointeur_liste = pointeur_liste -> next;	}      xmlNewTextChild ( node_etat,		    NULL,			"No_tiers",			pointeur_char );      xmlNewTextChild ( node_etat,		    NULL,		   "Total_tiers",		   itoa ( etat -> affiche_sous_total_tiers ));      xmlNewTextChild ( node_etat,		    NULL,		   "Devise_tiers",		   itoa ( etat -> devise_de_calcul_tiers ));      xmlNewTextChild ( node_etat,		    NULL,		   "Aff_nom_tiers",		   itoa ( etat -> afficher_nom_tiers ));      xmlNewTextChild ( node_etat,		    NULL,		   "Texte",		   itoa ( etat -> utilise_texte ));      node_2 = xmlNewChild ( node_etat,			     NULL,			     "Texte_comp",			     NULL );      pointeur_liste = etat -> liste_struct_comparaison_textes;      while ( pointeur_liste )	{	  struct struct_comparaison_textes_etat *textes_comp;	  xmlNodePtr node_3;	  textes_comp = pointeur_liste -> data;	  node_3 = xmlNewChild ( node_2,				 NULL,				 "Comp",				 NULL );	  xmlSetProp ( node_3,		       "Lien_struct",		       itoa ( textes_comp -> lien_struct_precedente ));	  xmlSetProp ( node_3,		       "Champ",		       itoa ( textes_comp -> champ ));	  xmlSetProp ( node_3,		       "Op",		       itoa ( textes_comp -> operateur ));	  xmlSetProp ( node_3,		       "Txt",		       textes_comp -> texte );	  xmlSetProp ( node_3,		       "Util_txt",		       itoa ( textes_comp -> utilise_txt ));	  xmlSetProp ( node_3,		       "Comp_1",		       itoa ( textes_comp -> comparateur_1 ));	  xmlSetProp ( node_3,		       "Lien_1_2",		       itoa ( textes_comp -> lien_1_2 ));	  xmlSetProp ( node_3,		       "Comp_2",		       itoa ( textes_comp -> comparateur_2 ));	  xmlSetProp ( node_3,		       "Mont_1",		       itoa ( textes_comp -> montant_1 ));	  xmlSetProp ( node_3,		       "Mont_2",		       itoa ( textes_comp -> montant_2 ));	  pointeur_liste = pointeur_liste -> next;	}      xmlNewTextChild ( node_etat,		    NULL,		   "Montant",		   itoa ( etat -> utilise_montant ));      xmlNewTextChild ( node_etat,		    NULL,		   "Montant_devise",		   itoa ( etat -> choix_devise_montant ));      node_2 = xmlNewChild ( node_etat,			     NULL,			     "Montant_comp",			     NULL );      pointeur_liste = etat -> liste_struct_comparaison_montants;      while ( pointeur_liste )	{	  struct struct_comparaison_montants_etat *montants_comp;	  xmlNodePtr node_3;	  montants_comp = pointeur_liste -> data;	  node_3 = xmlNewChild ( node_2,				 NULL,				 "Comp",				 NULL );	  xmlSetProp ( node_3,		       "Lien_struct",		       itoa ( montants_comp -> lien_struct_precedente ));	  xmlSetProp ( node_3,		       "Comp_1",		       itoa ( montants_comp -> comparateur_1 ));	  xmlSetProp ( node_3,		       "Lien_1_2",		       itoa ( montants_comp -> lien_1_2 ));	  xmlSetProp ( node_3,		       "Comp_2",		       itoa ( montants_comp -> comparateur_2 ));	  xmlSetProp ( node_3,		       "Mont_1",		       g_strdup_printf ( "%4.2f",					 montants_comp -> montant_1 ));	  xmlSetProp ( node_3,		       "Mont_2",		       g_strdup_printf ( "%4.2f",					 montants_comp -> montant_2 ));	  pointeur_liste = pointeur_liste -> next;	}      xmlNewTextChild ( node_etat,		    NULL,		   "Excl_nul",		   itoa ( etat -> exclure_montants_nuls ));      xmlNewTextChild ( node_etat,			NULL,			"Detail_mod_paie",			itoa ( etat -> utilise_mode_paiement ));      node_2 = xmlNewChild ( node_etat,			     NULL,			     "Liste_mod_paie",			     NULL );      pointeur_liste = etat -> noms_modes_paiement;      pointeur_char = NULL;      while ( pointeur_liste )	{	  xmlNodePtr node_3;	  node_3 = xmlNewChild ( node_2,				 NULL,				 "Mode_paie",				 NULL );	  xmlSetProp ( node_3,		       "Nom",		       pointeur_liste -> data );	  pointeur_liste = pointeur_liste -> next;	}      pointeur_liste_2 = pointeur_liste_2 -> next;    }  /* l'arbre est fait, on sauvegarde */  resultat = xmlSaveFile ( nom_fichier_comptes,			   doc );  /* on libre la memoire */  xmlFreeDoc ( doc );  if ( resultat == -1 )    {      dialogue ( g_strdup_printf ( _("Erreur dans l'enregistrement du fichier : %s\n\n\n\nErreur :\n%s"),				   nom_fichier_comptes, strerror ( errno ) ));      return ( FALSE );    }  etat.en_train_de_sauvegarder = 0;  return ( TRUE );}