rem: gint i;
context: void supprime_operation ( struct structure_operation *operation ){    GSList *pointeur_tmp;    struct structure_operation *ope_tmp;    GtkTreeIter *iter;    gdouble montant;    gint i;    /* vérifications de bases */    if ( !operation	 ||	 operation == GINT_TO_POINTER ( -1 ) )	return;    /* l'opération ne doit pas être relevée */    if ( operation -> pointe == 3 )    {	dialogue_error ( _("Imposible to delete a reconciled transaction.") );	return;    }    /* si l'opération est liée, on recherche l'autre opération, */    /* on vire ses liaisons et on l'efface */    /* sauf si elle est relevée, dans ce cas on annule tout */    if ( operation -> relation_no_operation && operation -> relation_no_compte != -1 )    {	ope_tmp = operation_par_no ( operation -> relation_no_operation,				     operation -> relation_no_compte );	if ( ope_tmp )	{	    if ( ope_tmp -> pointe == 3 )	    {		dialogue_error ( _("The contra-transaction of this transfer is reconciled, deletion impossible.") );		return;	    }	    ope_tmp -> relation_no_operation = 0;	    ope_tmp -> relation_no_compte = 0;	    supprime_operation ( ope_tmp );	}    }    /* si c'est une ventilation, on fait le tour de ses opérations */    /* de ventilation pour vérifier qu'il n'y en a pas une qui est un virement */    /* vers une opération relevée */    if ( operation -> operation_ventilee )    {	pointeur_tmp = gsb_account_get_transactions_list (operation -> no_compte);	while ( pointeur_tmp )	{	    ope_tmp = pointeur_tmp -> data;	    if ( ope_tmp -> no_operation_ventilee_associee == operation -> no_operation )	    {		/* ope_tmp est une opération de ventilation de l'opération */		/* à supprimer, on recherche si c'est un virement */		if ( ope_tmp -> relation_no_operation )		{		    /* c'est un virement, on va voir la contre opération */		    struct structure_operation *contre_operation;		    contre_operation = operation_par_no ( ope_tmp -> relation_no_operation,							  ope_tmp -> relation_no_compte );		    if ( contre_operation			 &&			 contre_operation -> pointe == 3 )		    {			dialogue_error ( _("One of the breakdown lines is a transfer whose contra-transaction is reconciled.  Deletion canceled."));			return;		    }		}	    }	    pointeur_tmp = pointeur_tmp -> next;	}    }    /* les tests sont passés, si c'est une ventilation, */    /* on vire toutes les opérations associées */    if ( operation -> operation_ventilee )    {	pointeur_tmp = gsb_account_get_transactions_list (operation -> no_compte);	while ( pointeur_tmp )	{	    ope_tmp = pointeur_tmp -> data;	    if ( ope_tmp -> no_operation_ventilee_associee == operation -> no_operation )	    {		/* on se place tout de suite sur l'opé suivante */		pointeur_tmp = pointeur_tmp -> next;		supprime_operation ( ope_tmp );	    }	    else		pointeur_tmp = pointeur_tmp -> next;	}    }    /*     on se met sur l'iter de l'opé et on retir l'opé de la liste */    iter = cherche_iter_operation ( operation,				    operation -> no_compte );    if ( iter )    {	/* si la sélection est sur l'opération qu'on supprime, */	/* on met la sélection sur celle du dessous */	if ( gsb_account_get_current_transaction (operation -> no_compte) == operation )	    gsb_account_set_current_transaction ( operation -> no_compte,						  cherche_operation_from_ligne ( cherche_ligne_operation ( gsb_account_get_current_transaction (operation -> no_compte),													   operation -> no_compte ) + gsb_account_get_nb_rows ( operation -> no_compte ),										 operation -> no_compte ) );	for ( i=0 ; i<gsb_account_get_nb_rows ( operation -> no_compte ) ; i++ )	    gtk_list_store_remove ( GTK_LIST_STORE ( gsb_account_get_store (operation -> no_compte) ),				    iter );	/*     on met à jour les couleurs et les soldes */	gsb_transactions_list_set_background_color ( operation -> no_compte );	gsb_transactions_list_set_transactions_balances ( operation -> no_compte );	gsb_transactions_list_set_current_transaction ( gsb_account_get_current_transaction (operation -> no_compte),							operation -> no_compte );    }    /*     calcul des nouveaux soldes */    montant = calcule_montant_devise_renvoi ( operation -> montant,					      gsb_account_get_currency (operation -> no_compte),					      operation -> devise,					      operation -> une_devise_compte_egale_x_devise_ope,					      operation -> taux_change,					      operation -> frais_change );    gsb_account_set_current_balance ( operation -> no_compte,				      gsb_account_get_current_balance (operation -> no_compte) - montant );    if ( operation -> pointe )	gsb_account_set_marked_balance ( operation -> no_compte,					 gsb_account_get_marked_balance (operation -> no_compte) - montant );    /*     on met à jour les labels de solde */    mise_a_jour_labels_soldes ();    /* si on est en train d'équilibrer => recalcule le total pointé */    if ( etat.equilibrage )	calcule_total_pointe_compte ( operation -> no_compte );    /* supprime l'opération dans la liste des opés */    gsb_account_set_transactions_list ( operation -> no_compte,					g_slist_remove ( gsb_account_get_transactions_list (operation -> no_compte),							 operation ));    /* on réaffiche la liste de l'état des comptes de l'accueil */    mise_a_jour_liste_comptes_accueil = 1;    mise_a_jour_soldes_minimaux = 1;    affiche_dialogue_soldes_minimaux ();    /* FIXME : on devrait réafficher les listes de tiers, categ, ib... */    modification_fichier( TRUE );}