rem: GSList *liste_ope; GSList *ope_trouvees; struct struct_ope_importation *ope_import; struct structure_operation *operation; gint i; struct struct_ope_importation *autre_ope_import;  ope_import = liste_tmp -> data; ope_trouvees = NULL;    if ( ope_import -> id_operation ) ope_trouvees = g_slist_find_custom ( LISTE_OPERATIONS, ope_import -> id_operation, (GCompareFunc) recherche_operation_par_id );       if ( !ope_trouvees ) { liste_ope = LISTE_OPERATIONS;  while ( liste_ope )
add: GSList *liste_ope; GSList *ope_trouvees; struct struct_ope_importation *ope_import; struct structure_operation *operation; gint i; struct struct_ope_importation *autre_ope_import;  ope_import = liste_tmp -> data; ope_trouvees = NULL;    if ( ope_import -> id_operation ) ope_trouvees = g_slist_find_custom ( LISTE_OPERATIONS, ope_import -> id_operation, (GCompareFunc) recherche_operation_par_id );       if ( !ope_trouvees )
context: void pointe_opes_importees ( struct struct_compte_importation *compte_import ){  GSList *liste_tmp;  GSList *liste_opes_import_celibataires;  gint no_compte;  /* on se place sur le compte dans lequel on va pointer les ops */  no_compte = GPOINTER_TO_INT ( gtk_object_get_data ( GTK_OBJECT ( GTK_OPTION_MENU ( compte_import -> bouton_compte )->menu_item ),											       "no_compte" ));  p_tab_nom_de_compte_variable = p_tab_nom_de_compte + no_compte;  /* on fait le tour des ops importes et recherche dans la liste d'op s'il y a la correspondance */     liste_tmp = compte_import -> operations_importees;  liste_opes_import_celibataires = NULL;  while ( liste_tmp )    {      GSList *liste_ope;      GSList *ope_trouvees;      struct struct_ope_importation *ope_import;      struct structure_operation *operation;	  gint i;	  struct struct_ope_importation *autre_ope_import;       ope_import = liste_tmp -> data;      ope_trouvees = NULL;       /* si l'op d'import a une id, on recherche dans la liste d'op pour trouver	      une id comparable */            if ( ope_import -> id_operation )	      ope_trouvees = g_slist_find_custom ( LISTE_OPERATIONS,			  	    ope_import -> id_operation,			      	(GCompareFunc) recherche_operation_par_id );	             /* si on n'a rien trouv par id, */      /* on fait le tour de la liste d'ops pour trouver des ops comparable */      /* cad mme date et mme montant et pas une op de ventil */      if ( !ope_trouvees )      {      liste_ope = LISTE_OPERATIONS;      while ( liste_ope )	{	  operation = liste_ope -> data;	  if ( fabs ( operation -> montant - ope_import -> montant ) < 0.01	       &&	       !g_date_compare ( operation -> date,				 ope_import -> date )	       &&	       !operation -> no_operation_ventilee_associee )	    /* on a retouv une op de mme date et mme montant, on l'ajoute  la liste des ops trouves */	    ope_trouvees = g_slist_append ( ope_trouvees,					    operation );	  liste_ope = liste_ope -> next;	}      }      /*        ce stade, ope_trouvees contient la ou les ops qui sont comparables  l'op importe */      /* soit il n'y en n'a qu'une, et on la pointe, soit il y en a plusieurs, et on recherche dans */      /* 	les ops importes s'il y en a d'autre comparables, et on pointe les ops en fonction */      /* du nb de celles importes */      switch ( g_slist_length ( ope_trouvees ))	{	case 0:	  /* aucune op comparable n'a t retrouve */ 	/* on marque donc cette op comme seule */		 /* sauf si c'est une op de ventil  */		 	if ( !ope_import -> ope_de_ventilation ) 	{		 /* on met le no de compte et la devise de l'opration si plus tard on l'enregistre */					ope_import -> no_compte = no_compte;		ope_import -> devise = GPOINTER_TO_INT ( gtk_object_get_data ( GTK_OBJECT ( GTK_OPTION_MENU ( compte_import -> bouton_devise ) -> menu_item ),									"no_devise" ));		liste_opes_import_celibataires = g_slist_append ( liste_opes_import_celibataires,								ope_import );	}	  break;	case 1:	  /*  il n'y a qu'une op retrouve, on la pointe */ /* si elle est dj pointe ou releve, on ne fait rien */ /* si l'op d'import a une id et pas l'op, on marque l'id dans l'op */	  operation = ope_trouvees -> data;	if ( !operation -> id_operation			&&		ope_import -> id_operation )		operation -> id_operation = ope_import -> id_operation;	  if ( !operation -> pointe )	  {	  operation -> pointe = 3;	  /* si c'est une op ventile, on recherche les op filles pour leur mettre le mme pointage que la mre */	  if ( operation -> operation_ventilee )	    {	      liste_ope = LISTE_OPERATIONS;	      while ( liste_ope )		{		  struct structure_operation *ope_fille;		  ope_fille = liste_ope -> data;		  if ( ope_fille -> no_operation_ventilee_associee == operation -> no_operation )		    ope_fille -> pointe = 3;	  	liste_ope = liste_ope -> next;		}    	    }	  }	  break;	default: 	   	  /* il y a plusieurs op trouves correspondant  l'op importe */	 /* on va voir s'il y a d'autres opes importes ayant la mme date et le mme montant		si on retrouve autant d'op importes que d'op trouves, on peut marquer cette		op sans s'en proccuper */	  	  	i=0;	      liste_ope = compte_import -> operations_importees;	      while ( liste_ope )		{		  autre_ope_import = liste_ope -> data;		  if ( fabs ( autre_ope_import -> montant - ope_import -> montant ) < 0.01		       &&		       !g_date_compare ( autre_ope_import -> date,					 ope_import -> date )		       &&		       !autre_ope_import -> ope_de_ventilation )		    /* on a retouv une op d'import de mme date et mme montant, on incrmente le nb d'op d'import semblables trouvees */			i++;		  liste_ope = liste_ope -> next;		} 	 if ( i ==  g_slist_length ( ope_trouvees ))		{		 /* on a trouv autant d'op d'import semblables que d'ops semblables dans la liste d'op			donc on peut marquer les ops trouves */			  /* pour celles qui sont dj pointes, on ne fait rien */ 		/* si l'op importe  une id, on met cette id dans l'opration si elle n'en a pas */			GSList *liste_tmp_2;						liste_tmp_2 = ope_trouvees;			while ( liste_tmp_2 )			{		  	operation = liste_tmp_2 -> data;			if ( !operation -> id_operation					&&					ope_import -> id_operation )				operation -> id_operation = ope_import -> id_operation;			if ( !operation -> pointe )			{		  	operation -> pointe = 3;		  	/* si c'est une op ventile, on recherche les op filles pour leur mettre le mme pointage que la mre */		  	if ( operation -> operation_ventilee )		    	{		      	liste_ope = LISTE_OPERATIONS;		      	while ( liste_ope )				{			  	struct structure_operation *ope_fille;			  	ope_fille = liste_ope -> data;			  	if ( ope_fille -> no_operation_ventilee_associee == operation -> no_operation )			    	ope_fille -> pointe = 3;		  		liste_ope = liste_ope -> next;				}	    	    	}			}			liste_tmp_2 = liste_tmp_2 -> next;			}		}	else	{ 	/* on a trouv un nombre diffrent d'ops d'import et d'ops semblables dans la liste d'ops	on marque donc cette op d'import comme seule */		 		ope_import -> no_compte = no_compte;		ope_import -> devise = GPOINTER_TO_INT ( gtk_object_get_data ( GTK_OBJECT ( GTK_OPTION_MENU ( compte_import -> bouton_devise ) -> menu_item ),									"no_devise" ));		liste_opes_import_celibataires = g_slist_append ( liste_opes_import_celibataires,							ope_import );	}	 	}      liste_tmp = liste_tmp -> next;    }   /* a ce niveau, liste_opes_import_celibataires contient les ops d'import dont on n'a pas retrouv	  l'op correspondante	  on les affiche dans une liste en proposant de les ajouter  la liste */    if ( liste_opes_import_celibataires ) {	 GtkWidget *liste_ope_celibataires;	 GtkWidget *dialog;	 GtkWidget *label;	gint result;	GtkListStore *store;	GtkCellRenderer *renderer;	GtkTreeViewColumn *column;	 dialog = gtk_dialog_new_with_buttons ( _("Orphelines transactions"),			 GTK_WINDOW ( window ),			 GTK_DIALOG_DESTROY_WITH_PARENT,			 GTK_STOCK_ADD,			 1,			 GTK_STOCK_CLOSE,			 GTK_RESPONSE_CLOSE,			 NULL );	label = gtk_label_new ( _("Mark the transactions you want to add to the list and click the add button"));	gtk_box_pack_start ( GTK_BOX ( GTK_DIALOG ( dialog ) -> vbox ),			label,			FALSE,			FALSE,			0 );	gtk_widget_show ( label );	store = gtk_list_store_new ( 4,			G_TYPE_BOOLEAN,			G_TYPE_STRING,			G_TYPE_STRING,			G_TYPE_DOUBLE );	 /* on remplit la liste */	 	liste_tmp = liste_opes_import_celibataires;	while ( liste_tmp ) 	{		struct struct_ope_importation *ope_import;		GtkTreeIter iter;				ope_import = liste_tmp -> data;		gtk_list_store_append ( store,				&iter ); 		gtk_list_store_set ( store,				&iter,				0, FALSE,				1, g_strdup_printf ( "%d/%d/%d",					g_date_get_day ( ope_import -> date ),					g_date_get_month ( ope_import -> date ),					g_date_get_year ( ope_import -> date )),				2, ope_import -> tiers,				3, ope_import -> montant,				-1 );		liste_tmp = liste_tmp -> next;	}		 /* on cre la liste des ops clibataires		et on y associe la gslist */			liste_ope_celibataires = gtk_tree_view_new_with_model ( GTK_TREE_MODEL (store));	g_object_set_data ( G_OBJECT ( liste_ope_celibataires ),			"liste_ope",			liste_opes_import_celibataires );	gtk_box_pack_start ( GTK_BOX ( GTK_DIALOG ( dialog ) -> vbox ),			liste_ope_celibataires,			FALSE,			FALSE,			0 );	gtk_widget_show ( liste_ope_celibataires );	 /* on affiche les colonnes */	 	renderer = gtk_cell_renderer_toggle_new ();	g_signal_connect ( renderer,			"toggled",			G_CALLBACK (click_sur_liste_opes_orphelines ),			store );	column = gtk_tree_view_column_new_with_attributes ( _("Mark"),        	                                           renderer,							     "active", 0,							                            	                           NULL);	gtk_tree_view_append_column (GTK_TREE_VIEW (liste_ope_celibataires), column);	renderer = gtk_cell_renderer_text_new ();	column = gtk_tree_view_column_new_with_attributes ( _("Date"),        	                                           renderer,                	                                   "text", 1,                        	                           NULL);	gtk_tree_view_append_column (GTK_TREE_VIEW (liste_ope_celibataires), column);	renderer = gtk_cell_renderer_text_new ();	column = gtk_tree_view_column_new_with_attributes ( _("Third party"),        	                                           renderer,                	                                   "text", 2,                        	                           NULL);	gtk_tree_view_append_column (GTK_TREE_VIEW (liste_ope_celibataires), column);	renderer = gtk_cell_renderer_text_new ();	column = gtk_tree_view_column_new_with_attributes ( _("Amount"),        	                                           renderer,                	                                   "text", 3,                        	                           NULL);	gtk_tree_view_append_column (GTK_TREE_VIEW (liste_ope_celibataires), column);	 g_signal_connect ( G_OBJECT ( dialog ),			 "response",			 G_CALLBACK ( click_dialog_ope_orphelines ),			 liste_ope_celibataires );	gtk_widget_show ( dialog ); }}