rem: }
context: void calcule_total_montant_categ ( void ){    gint i;    /* on crée les tableaux de montant */    /* le +1 pour reserver le [0] pour aucune catégorie */    tab_montant_categ = calloc ( nb_enregistrements_categories + 1,				 sizeof ( gfloat ));    nb_ecritures_par_categ = calloc ( nb_enregistrements_categories + 1,				      sizeof ( gint ));    tab_montant_sous_categ = calloc ( nb_enregistrements_categories,				      sizeof ( gpointer ));    nb_ecritures_par_sous_categ = calloc ( nb_enregistrements_categories,					   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_categ;	    operation = liste_tmp -> data;	    /* on commence par calculer le montant dans la devise choisie dans les paramètres */	    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 -> categorie )	    {		struct struct_categ *categorie;		/* il y a une catégorie */		categorie = categ_par_no ( operation -> categorie );		/* recherche la place du tiers dans la liste */		place_categ = g_slist_index ( liste_struct_categories,					      categorie );		/* crée la place pour les sous catég de cette categ si ce n'est déjà fait */		if ( !tab_montant_sous_categ[place_categ] )		{		    gint nb_sous_categ;		    nb_sous_categ = g_slist_length ( categorie -> liste_sous_categ );		    /* on réserve nb_sous_categ + 1 pour aucune sous categ qui sera en [0] */		    tab_montant_sous_categ[place_categ] = calloc ( nb_sous_categ + 1,								   sizeof ( float ));		    nb_ecritures_par_sous_categ[place_categ] = calloc ( nb_sous_categ + 1,									sizeof ( gint ));		}		tab_montant_categ[place_categ+1] = tab_montant_categ[place_categ+1] + montant;		nb_ecritures_par_categ[place_categ+1]++;		/* on ajoute maintenant le montant à la sous categ si elle existe */		if ( operation -> sous_categorie )		{		    gint place_sous_categ;		    place_sous_categ = g_slist_index ( categorie -> liste_sous_categ,						       sous_categ_par_no ( operation -> categorie,									   operation -> sous_categorie ));		    tab_montant_sous_categ[place_categ][place_sous_categ+1] = tab_montant_sous_categ[place_categ][place_sous_categ+1] + montant;		    nb_ecritures_par_sous_categ[place_categ][place_sous_categ+1]++;		}		else		{		    if ( tab_montant_sous_categ[place_categ] )		    {			tab_montant_sous_categ[place_categ][0] = tab_montant_sous_categ[place_categ][0] + montant;			nb_ecritures_par_sous_categ[place_categ][0]++;		    }		}	    }	    else		/* il n'y a pas de catégorie */		/* on met le montant dans tab_montant_categ[0} si e n'est ni un virement ni une ventil */		if ( !operation -> relation_no_operation		     &&		     !operation -> operation_ventilee )		{		    tab_montant_categ[0] = tab_montant_categ[0] + montant;		    nb_ecritures_par_categ[0]++;		}	    liste_tmp = liste_tmp -> next;    }}}