rem: }
context: void calcule_total_montant_imputation ( void ){    gint i;    /* on crée les tableaux de montant */    /* le +1 pour reserver le [0] pour aucune catégorie */    tab_montant_imputation = calloc ( nb_enregistrements_imputations + 1,				      sizeof ( gfloat ));    nb_ecritures_par_imputation = calloc ( nb_enregistrements_imputations + 1,					   sizeof ( gint ));    tab_montant_sous_imputation = calloc ( nb_enregistrements_imputations,					   sizeof ( gpointer ));    nb_ecritures_par_sous_imputation = calloc ( nb_enregistrements_imputations,						sizeof ( gpointer ));    for ( i=0 ; i<nb_comptes ; i++ )    {	GSList *liste_tmp;	p_tab_nom_de_compte_variable = p_tab_nom_de_compte + i;	liste_tmp = LISTE_OPERATIONS;	while ( liste_tmp )	{	    struct structure_operation *operation;	    gdouble montant;	    gint place_imputation;	    operation = liste_tmp -> data;	    /* on commence par calculer le montant dans la devise demandée */	    montant = calcule_montant_devise_renvoi ( operation -> montant,						      no_devise_totaux_tiers,						      operation -> devise,						      operation -> une_devise_compte_egale_x_devise_ope,						      operation -> taux_change,						      operation -> frais_change );	    /* on traite ensuite l'opération */	    if ( operation -> imputation )	    {		struct struct_imputation *imputation;		/* il y a une ib */		imputation = imputation_par_no ( operation -> imputation );		/* recherche la place du tiers dans la liste */		place_imputation = g_slist_index ( liste_struct_imputation,						   imputation );		/* crée la place pour les sous catég de cette imputation si ce n'est déjà fait */		if ( !tab_montant_sous_imputation[place_imputation] )		{		    gint nb_sous_imputation;		    nb_sous_imputation = g_slist_length ( imputation -> liste_sous_imputation );		    /* on réserve nb_sous_imputation + 1 pour aucune sous imputation qui sera en [0] */		    tab_montant_sous_imputation[place_imputation] = calloc ( nb_sous_imputation + 1,									     sizeof ( float ));		    nb_ecritures_par_sous_imputation[place_imputation] = calloc ( nb_sous_imputation + 1,										  sizeof ( gint ));		}		tab_montant_imputation[place_imputation+1] = tab_montant_imputation[place_imputation+1] + montant;		nb_ecritures_par_imputation[place_imputation+1]++;		/* on ajoute maintenant le montant à la sous imputation si elle existe */		if ( operation -> sous_imputation )		{		    gint place_sous_imputation;		    place_sous_imputation = g_slist_position ( imputation -> liste_sous_imputation,							       g_slist_find_custom ( imputation -> liste_sous_imputation,										     GINT_TO_POINTER ( operation -> sous_imputation ),										     (GCompareFunc) recherche_sous_imputation_par_no ));		    tab_montant_sous_imputation[place_imputation][place_sous_imputation+1] = tab_montant_sous_imputation[place_imputation][place_sous_imputation+1] + montant;		    nb_ecritures_par_sous_imputation[place_imputation][place_sous_imputation+1]++;		}		else		{		    if ( tab_montant_sous_imputation[place_imputation] )		    {			tab_montant_sous_imputation[place_imputation][0] = tab_montant_sous_imputation[place_imputation][0] + montant;			nb_ecritures_par_sous_imputation[place_imputation][0]++;		    }		}	    }	    else		/* il n'y a pas d'imputation */		/* on met le montant dans tab_montant_imputation[0} si ce n'est une ventil */		if ( !operation -> operation_ventilee )		{		    tab_montant_imputation[0] = tab_montant_imputation[0] + montant;		    nb_ecritures_par_imputation[0]++;		}	    liste_tmp = liste_tmp -> next;    }}}