rem: gdouble frais_change)
add: gdouble frais_change, gboolean force )
context: void demande_taux_de_change ( struct struct_devise *devise_compte,			      struct struct_devise *devise ,			      gint une_devise_compte_egale_x_devise_ope,			      gdouble taux_change,			      gdouble frais_change){  GtkWidget *dialog, *label, *entree, *menu, *item, *hbox, *entree_frais;  gint resultat;    dialog = gnome_dialog_new ( _("Entry of the exchange rate"),			      GNOME_STOCK_BUTTON_OK, NULL );  gtk_window_set_transient_for ( GTK_WINDOW ( dialog ), GTK_WINDOW ( window ));  gtk_signal_connect ( GTK_OBJECT ( dialog), "delete_event",		       GTK_SIGNAL_FUNC ( blocage_boites_dialogues ),		       NULL );  label = gtk_label_new ( COLON(_("Please enter the exchange rate")) );  gtk_box_pack_start ( GTK_BOX ( GNOME_DIALOG ( dialog ) -> vbox ), label,		       FALSE, FALSE, 20 );  /* création de la ligne du change */  hbox = gtk_hbox_new ( FALSE, 5 );  gtk_box_pack_start ( GTK_BOX ( GNOME_DIALOG ( dialog ) -> vbox ), hbox,		       FALSE, FALSE, 0);  label = gtk_label_new ( POSTSPACIFY(_("A")) );  gtk_box_pack_start ( GTK_BOX ( hbox ), label,		       FALSE, FALSE, 0);  option_menu_devise_1= gtk_option_menu_new ();  gtk_box_pack_start ( GTK_BOX ( hbox ), option_menu_devise_1,		       FALSE, FALSE, 0);  label = gtk_label_new ( SPACIFY(_("equals")) );  gtk_box_pack_start ( GTK_BOX ( hbox ), label,		       FALSE, FALSE, 0);  entree = gtk_entry_new ();  gtk_widget_set_usize ( entree, 100, FALSE );  gnome_dialog_editable_enters ( GNOME_DIALOG ( dialog ),				 GTK_EDITABLE ( entree ));  gtk_box_pack_start ( GTK_BOX ( hbox ), entree,		       FALSE, FALSE, 0);  option_menu_devise_2 = gtk_option_menu_new ();  gtk_box_pack_start ( GTK_BOX ( hbox ), option_menu_devise_2,		       FALSE, FALSE, 0);  /* création du menu de la 1ère devise ( le menu comporte la devise     courante et celle associée ) */  menu = gtk_menu_new ();  item = gtk_menu_item_new_with_label ( devise -> nom_devise );  g_object_set_data ( G_OBJECT ( item ), "adr_devise", devise );  gtk_menu_append ( GTK_MENU ( menu ), item );  item = gtk_menu_item_new_with_label ( devise_compte -> nom_devise );  g_object_set_data ( G_OBJECT ( item ), "adr_devise", devise_compte );  gtk_menu_append ( GTK_MENU ( menu ), item );  gtk_option_menu_set_menu ( GTK_OPTION_MENU ( option_menu_devise_1 ), menu );  g_signal_connect ( G_OBJECT ( option_menu_devise_1 ),		     "changed",		     GTK_SIGNAL_FUNC ( devise_selectionnee ),		     NULL );  g_object_set_data ( G_OBJECT (option_menu_devise_1), "associate",		      option_menu_devise_2 );  g_object_set_data ( G_OBJECT (option_menu_devise_1), "currency", devise );  /* création du menu de la 2ème devise ( le menu comporte la devise     courante et celle associée ) */  menu = gtk_menu_new ();  item = gtk_menu_item_new_with_label ( devise -> nom_devise );  g_object_set_data ( G_OBJECT ( item ), "adr_devise", devise );  gtk_menu_append ( GTK_MENU ( menu ), item );  item = gtk_menu_item_new_with_label ( devise_compte -> nom_devise );  g_object_set_data ( G_OBJECT ( item ), "adr_devise", devise_compte );  gtk_menu_append ( GTK_MENU ( menu ), item );  gtk_option_menu_set_menu ( GTK_OPTION_MENU ( option_menu_devise_2 ), menu );  g_signal_connect ( G_OBJECT ( option_menu_devise_2 ),		     "changed",		     GTK_SIGNAL_FUNC ( devise_selectionnee ),		     GINT_TO_POINTER ( 1 ));  g_object_set_data ( G_OBJECT (option_menu_devise_2), "associate",		      option_menu_devise_1 );  g_object_set_data ( G_OBJECT (option_menu_devise_2), "currency", devise );   /* création de la ligne des frais de change */  hbox = gtk_hbox_new ( FALSE, 5 );  gtk_box_pack_start ( GTK_BOX ( GNOME_DIALOG ( dialog ) -> vbox ), hbox,		       FALSE, FALSE, 5 );  label = gtk_label_new ( COLON(_("Exchange fees")) );  gtk_box_pack_start ( GTK_BOX ( hbox ), label,		       FALSE, FALSE, 5 );  entree_frais = gtk_entry_new ();  gnome_dialog_editable_enters ( GNOME_DIALOG ( dialog ),				 GTK_EDITABLE ( entree_frais ));  gtk_box_pack_start ( GTK_BOX ( hbox ), entree_frais,		       FALSE, FALSE, 5 );  label = gtk_label_new ( devise_compte -> nom_devise );  gtk_box_pack_start ( GTK_BOX ( hbox ), label,		       FALSE, FALSE, 5 );  gtk_widget_show_all ( dialog );  /* choix des 1ère et 2ème devise */  if ( taux_change || frais_change )    {      if ( une_devise_compte_egale_x_devise_ope )	{	  gtk_option_menu_set_history ( GTK_OPTION_MENU ( option_menu_devise_1 ),					1 );	  gtk_option_menu_set_history ( GTK_OPTION_MENU ( option_menu_devise_2 ),					0 );	}      else	{	  gtk_option_menu_set_history ( GTK_OPTION_MENU ( option_menu_devise_1 ),					0 );	  gtk_option_menu_set_history ( GTK_OPTION_MENU ( option_menu_devise_2 ),					1 );	}      gtk_entry_set_text ( GTK_ENTRY ( entree ),			   g_strdup_printf ( "%f", taux_change ));      gtk_entry_set_text ( GTK_ENTRY ( entree_frais ),			   g_strdup_printf ( "%4.2f", fabs ( frais_change )));    }  else    {      /* vérifie s'il y a déjà une association entre la devise du	 compte et la devise de l'opération */      if ( devise_compte -> no_devise_en_rapport == devise -> no_devise )	{	  /* il y a une association de la devise du compte vers la	     devise de l'opération */	  gtk_option_menu_set_history ( GTK_OPTION_MENU ( option_menu_devise_1 ),					devise_compte -> une_devise_1_egale_x_devise_2 );	  gtk_option_menu_set_history ( GTK_OPTION_MENU ( option_menu_devise_2 ),					!( devise_compte -> une_devise_1_egale_x_devise_2 ));	  /* si un change est déjà entré, on l'affiche */	  if ( devise_compte -> date_dernier_change )	    gtk_entry_set_text ( GTK_ENTRY ( entree ),				 g_strdup_printf ( "%f",						   devise_compte -> change ));	}      else	if ( devise -> no_devise_en_rapport == devise_compte -> no_devise )	  {	    /* il y a une association de la devise de l'opération	       vers la devise du compte */	    gtk_option_menu_set_history ( GTK_OPTION_MENU ( option_menu_devise_1 ),					  !(devise -> une_devise_1_egale_x_devise_2 ));	    gtk_option_menu_set_history ( GTK_OPTION_MENU ( option_menu_devise_2 ),					  devise -> une_devise_1_egale_x_devise_2 );	    /* si un change est déjà entré, on l'affiche */	    if ( devise -> date_dernier_change )	      gtk_entry_set_text ( GTK_ENTRY ( entree ),				   g_strdup_printf ( "%f",						     devise -> change ));	  }      else	{	  /* il n'y a aucun rapport établi entre les 2 devises */	  gtk_option_menu_set_history ( GTK_OPTION_MENU ( option_menu_devise_1 ),					1 );	  gtk_option_menu_set_history ( GTK_OPTION_MENU ( option_menu_devise_2 ),					0 );	}    }  /* on lance la fenetre */  resultat = gnome_dialog_run ( GNOME_DIALOG ( dialog ));  if ( !resultat )    {      struct struct_devise *devise_tmp;      taux_de_change[0] = my_strtod ( (gchar *) gtk_entry_get_text ( GTK_ENTRY ( entree )),				  NULL );      taux_de_change[1] = my_strtod ( (gchar *) gtk_entry_get_text ( GTK_ENTRY ( entree_frais )),				  NULL );      /* FIXME: use gtk_menu_get_active + gtk_option_menu_get_menu ? */      devise_tmp = g_object_get_data ( G_OBJECT ( GTK_OPTION_MENU ( option_menu_devise_1 ) -> menu_item ),					 "adr_devise" );      if ( devise_tmp -> no_devise != devise -> no_devise )	taux_de_change[0] = -taux_de_change[0];      gnome_dialog_close ( GNOME_DIALOG ( dialog ));    }  else    {      taux_de_change[0] = 0;      taux_de_change[1] = 0;    }}