[grisbi-cvs] [SCM] grisbi branch, master, updated. upstream_version_0_7_4-120-g18da736
Pierre Biava
nobody at users.sourceforge.net
Thu Dec 9 22:47:52 CET 2010
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "grisbi".
The branch, master has been updated
via 18da736da2d01da2f9127dca75aad864556c8757 (commit)
via c73b4371c0d94bfa480f1e309669f88bcad0ab66 (commit)
from fa0ce382b152584e04c0079f0ca7fcc5906f1616 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 18da736da2d01da2f9127dca75aad864556c8757
Author: pbiava <pierre.biava at nerim.net>
Date: Thu Dec 9 22:41:57 2010 +0100
Fixed a bug management exercises in the display of historical data
commit c73b4371c0d94bfa480f1e309669f88bcad0ab66
Author: pbiava <pierre.biava at nerim.net>
Date: Thu Dec 9 22:40:19 2010 +0100
Fixed a bug management of locale and adding of point as thousands separator
-----------------------------------------------------------------------
Changes:
diff --git a/src/bet_data_finance.c b/src/bet_data_finance.c
index 9bee4cd..e006fe9 100644
--- a/src/bet_data_finance.c
+++ b/src/bet_data_finance.c
@@ -178,8 +178,8 @@ gdouble bet_data_finance_troncate_number ( gdouble number, gint nbre_decimal )
gchar *str_number;
gdouble result;
- str_number = utils_str_dtostr ( number, nbre_decimal, FALSE );
- result = my_strtod ( str_number, NULL );
+ str_number = utils_str_dtostr ( number, nbre_decimal, TRUE );
+ result = utils_str_safe_strtod ( str_number, NULL );
g_free ( str_number );
diff --git a/src/bet_finance_ui.c b/src/bet_finance_ui.c
index c4c5159..03e1fb5 100644
--- a/src/bet_finance_ui.c
+++ b/src/bet_finance_ui.c
@@ -798,9 +798,11 @@ gdouble bet_finance_get_number_from_string ( GtkWidget *parent, const gchar *nam
gchar *tmp_str;
entry = gtk_entry_get_text ( GTK_ENTRY ( widget ) );
+
if ( entry && strlen ( entry ) > 0 )
{
- number = my_strtod ( entry, NULL );
+ number = utils_str_strtod ( entry, NULL );
+
tmp_str = gsb_real_get_string_with_currency (
gsb_real_double_to_real ( number ),
etat.bet_currency,
@@ -2081,7 +2083,7 @@ gboolean bet_finance_capital_entry_changed ( GtkWidget *entry, GtkWidget *page
gboolean valide;
text = gtk_entry_get_text ( GTK_ENTRY ( entry ) );
- capital = my_strtod ( text, NULL );
+ capital = utils_str_strtod ( text, NULL );
if ( strlen ( text ) == 0 || capital == 0 )
{
diff --git a/src/bet_hist.c b/src/bet_hist.c
index 4a41619..3d5dac7 100644
--- a/src/bet_hist.c
+++ b/src/bet_hist.c
@@ -70,6 +70,7 @@ static gboolean bet_historical_div_toggle_clicked ( GtkCellRendererToggle *rende
gchar *path_string,
GtkTreeModel *model );
static gboolean bet_historical_fyear_create_combobox_store ( void );
+static void bet_historical_fyear_hide_present_futures_fyears ( void );
static gsb_real bet_historical_get_children_amount ( GtkTreeModel *model, GtkTreeIter *parent );
static GtkWidget *bet_historical_get_data_tree_view ( GtkWidget *container );
static gboolean bet_historical_get_full_div ( GtkTreeModel *model, GtkTreeIter *parent );
@@ -132,8 +133,6 @@ GtkWidget *bet_historical_create_page ( void )
GtkWidget *label;
GtkWidget *button_1, *button_2;
GtkWidget *tree_view;
- gchar *str_year;
- gint year;
gpointer pointeur;
devel_debug (NULL);
@@ -192,11 +191,8 @@ GtkWidget *bet_historical_create_page ( void )
gtk_box_pack_start ( GTK_BOX ( hbox ), widget, FALSE, FALSE, 5);
- /* hide the present financial year */
- year = g_date_get_year ( gdate_today ( ) );
- str_year = utils_str_itoa ( year );
- gsb_fyear_hide_iter_by_name ( bet_fyear_model, str_year );
- g_free ( str_year );
+ /* hide the present and futures financial years */
+ bet_historical_fyear_hide_present_futures_fyears ( );
/* set the signal */
pointeur = GINT_TO_POINTER ( 1 );
@@ -1701,38 +1697,26 @@ void bet_historical_set_page_title ( gint account_number )
* */
GDate *bet_historical_get_start_date_current_fyear ( void )
{
- GSList *tmp_list;
GDate *date = NULL;
+ gint fyear_number = 0;
- tmp_list = gsb_data_fyear_get_fyears_list ( );
+ date = gdate_today ( );
+ fyear_number = gsb_data_fyear_get_from_date ( date );
- if ( g_slist_length ( tmp_list ) == 0 )
+ if ( fyear_number <= 0 )
{
- date = gdate_today ( );
g_date_set_month ( date, 1 );
g_date_set_day ( date, 1 );
return date;
}
-
- while ( tmp_list )
+ else
{
- struct_fyear *fyear;
-
- fyear = tmp_list -> data;
-
- if ( date == NULL )
- date = fyear -> beginning_date;
- else
- {
- if ( g_date_compare ( date, fyear -> beginning_date ) < 0 )
- date = fyear -> beginning_date;
- }
+ g_date_free ( date );
+ date = gsb_data_fyear_get_beginning_date ( fyear_number );
- tmp_list = tmp_list -> next;
+ return gsb_date_copy ( date );
}
-
- return gsb_date_copy ( date );
}
@@ -1766,11 +1750,45 @@ gint bet_historical_get_type_transaction ( const GDate *date,
/**
- *
+ * cache l'exercice courant et les exercices futurs
*
*
*
* */
+void bet_historical_fyear_hide_present_futures_fyears ( void )
+{
+ GDate *date;
+ GSList *tmp_list;
+
+ date = gdate_today ( );
+
+ tmp_list = gsb_data_fyear_get_fyears_list ( );
+ while (tmp_list)
+ {
+ struct_fyear *fyear;
+
+ fyear = tmp_list -> data;
+
+ /* check the fyear only if the dates are valid */
+ if ( fyear -> beginning_date && fyear -> end_date )
+ {
+ if ( g_date_compare ( date, fyear -> beginning_date ) >= 0
+ &&
+ g_date_compare ( date, fyear -> end_date ) <= 0 )
+ {
+ gsb_fyear_hide_iter_by_name ( bet_fyear_model, fyear -> fyear_name );
+ }
+ else if ( g_date_compare ( date, fyear -> beginning_date ) <= 0 )
+ {
+ gsb_fyear_hide_iter_by_name ( bet_fyear_model, fyear -> fyear_name );
+ }
+ }
+ tmp_list = tmp_list -> next;
+ }
+
+}
+
+
/* Local Variables: */
/* c-basic-offset: 4 */
/* End: */
diff --git a/src/gsb_account_property.c b/src/gsb_account_property.c
index 0e2182f..15467e0 100644
--- a/src/gsb_account_property.c
+++ b/src/gsb_account_property.c
@@ -1442,7 +1442,7 @@ gint gsb_account_property_iban_control_iban ( gchar *iban )
while ( gstring -> len > 0 )
{
substr = g_strndup ( gstring -> str, 9 );
- lnum = ( gulong ) my_strtod ( substr, NULL );
+ lnum = ( gulong ) utils_str_safe_strtod ( substr, NULL );
reste = lnum % 97;
g_free ( substr );
diff --git a/src/gsb_file_load.c b/src/gsb_file_load.c
index 823e994..de19036 100644
--- a/src/gsb_file_load.c
+++ b/src/gsb_file_load.c
@@ -1070,7 +1070,7 @@ void gsb_file_load_general_part ( const gchar **attribute_names,
else if ( !strcmp ( attribute_names[i], "Bet_capital" ) )
{
- etat.bet_capital = utils_str_strtod ( attribute_values[i], NULL );
+ etat.bet_capital = utils_str_safe_strtod ( attribute_values[i], NULL );
}
else if ( !strcmp ( attribute_names[i], "Bet_currency" ) )
@@ -1080,7 +1080,7 @@ void gsb_file_load_general_part ( const gchar **attribute_names,
else if ( !strcmp ( attribute_names[i], "Bet_taux_annuel" ) )
{
- etat.bet_taux_annuel = utils_str_strtod ( attribute_values[i], NULL );
+ etat.bet_taux_annuel = utils_str_safe_strtod ( attribute_values[i], NULL );
}
else if ( !strcmp ( attribute_names[i], "Bet_index_duree" ) )
@@ -1090,7 +1090,7 @@ void gsb_file_load_general_part ( const gchar **attribute_names,
else if ( !strcmp ( attribute_names[i], "Bet_frais" ) )
{
- etat.bet_frais = utils_str_strtod ( attribute_values[i], NULL );
+ etat.bet_frais = utils_str_safe_strtod ( attribute_values[i], NULL );
}
else if ( !strcmp ( attribute_names[i], "Bet_type_taux" ) )
diff --git a/src/gsb_form.c b/src/gsb_form.c
index 27d96ec..b99a630 100644
--- a/src/gsb_form.c
+++ b/src/gsb_form.c
@@ -1803,6 +1803,8 @@ void gsb_form_check_auto_separator ( GtkWidget *entry )
gchar *string;
gint floating_point;
gchar *tmp = NULL;
+ gchar *mon_decimal_point;
+ gunichar decimal_point;
gint i;
if (!etat.automatic_separator
@@ -1820,30 +1822,30 @@ void gsb_form_check_auto_separator ( GtkWidget *entry )
account_number = gsb_form_get_account_number ();
floating_point = gsb_data_currency_get_floating_point (gsb_data_account_get_currency (account_number));
- if ( strchr (string, '.')
- ||
- strchr (string, ','))
+ mon_decimal_point = gsb_real_get_decimal_point ( );
+ decimal_point = g_utf8_get_char_validated ( mon_decimal_point, -1 );
+
+ if ( g_utf8_strchr (string, -1, decimal_point ) )
{
- g_free (string);
- return;
+ g_free (string);
+ g_free ( mon_decimal_point );
+ return;
}
/* if string is < the floating_point, increase it to have
* 1 character more (to set the 0 before the .) */
if (strlen(string) <= floating_point)
{
- gchar *concat_tmp;
-
- tmp = g_malloc (floating_point - strlen(string) + 2);
- for (i=0 ; i<(floating_point - strlen(string) + 1) ; i++)
- tmp[i] = '0';
- tmp[floating_point - strlen(string) + 1] = 0;
- concat_tmp = g_strconcat ( tmp,
- string,
- NULL );
- g_free (tmp);
- g_free (string);
- string = concat_tmp;
+ gchar *concat_tmp;
+
+ tmp = g_malloc (floating_point - strlen(string) + 2);
+ for (i=0 ; i<(floating_point - strlen(string) + 1) ; i++)
+ tmp[i] = '0';
+ tmp[floating_point - strlen(string) + 1] = 0;
+ concat_tmp = g_strconcat ( tmp, string, NULL );
+ g_free (tmp);
+ g_free (string);
+ string = concat_tmp;
}
tmp = g_malloc ((strlen(string)+2) * sizeof (gchar));
@@ -1851,17 +1853,15 @@ void gsb_form_check_auto_separator ( GtkWidget *entry )
memcpy ( tmp, string, strlen(string) - floating_point);
i = strlen(string) - floating_point;
- tmp[i] = '.';
+ tmp[i] = decimal_point;
i++;
- memcpy ( tmp + i,
- string + i - 1,
- floating_point );
+ memcpy ( tmp + i, string + i - 1, floating_point );
i = i + floating_point;
tmp[i] = 0;
- gtk_entry_set_text (GTK_ENTRY (entry),
- tmp );
+ gtk_entry_set_text (GTK_ENTRY (entry), tmp );
g_free (tmp);
g_free (string);
+ g_free ( mon_decimal_point );
}
diff --git a/src/gsb_form_widget.c b/src/gsb_form_widget.c
index bf4768d..6756489 100644
--- a/src/gsb_form_widget.c
+++ b/src/gsb_form_widget.c
@@ -998,21 +998,32 @@ gboolean gsb_form_widget_get_valide_amout_entry ( const gchar *string )
ch = g_utf8_get_char_validated ( ptr, -1 );
if ( !g_unichar_isdefined ( ch ) )
+ {
+ g_free ( mon_decimal_point );
+ if ( mon_thousands_sep )
+ g_free ( mon_thousands_sep );
+
return FALSE;
+ }
if ( !g_ascii_isdigit ( ch ) )
{
if ( g_unichar_isdefined ( thousands_sep ) )
{
if ( ch != '.' && ch != ',' && ch != '+' && ch != '-' && ch != '*' && ch != thousands_sep )
+ {
+ g_free ( mon_decimal_point );
+ g_free ( mon_thousands_sep );
+
return FALSE;
+ }
if ( ch == decimal_point
&& g_utf8_strlen ( ptr, -1) == 1
&& g_utf8_strchr ( string, -1, thousands_sep ) )
{
gchar **tab;
- guint i = 0;
+ guint i = 1; /* le premier champs peut etre < à 3 */
guint nbre_champs;
tab = g_strsplit ( string, mon_thousands_sep, 0 );
@@ -1023,11 +1034,17 @@ gboolean gsb_form_widget_get_valide_amout_entry ( const gchar *string )
if ( i < nbre_champs - 1 && g_utf8_strlen ( tab[i], -1 ) != 3 )
{
g_strfreev ( tab );
+ g_free ( mon_decimal_point );
+ g_free ( mon_thousands_sep );
+
return FALSE;
}
else if ( i == nbre_champs - 1 && g_utf8_strlen ( tab[i], -1 ) != 4 )
{
g_strfreev ( tab );
+ g_free ( mon_decimal_point );
+ g_free ( mon_thousands_sep );
+
return FALSE;
}
i++;
@@ -1042,6 +1059,10 @@ gboolean gsb_form_widget_get_valide_amout_entry ( const gchar *string )
ptr = g_utf8_next_char ( ptr );
}
+ g_free ( mon_decimal_point );
+ if ( mon_thousands_sep )
+ g_free ( mon_thousands_sep );
+
return TRUE;
}
diff --git a/src/parametres.c b/src/parametres.c
index 9108bd8..3c104c2 100644
--- a/src/parametres.c
+++ b/src/parametres.c
@@ -1392,6 +1392,7 @@ GtkWidget *gsb_config_number_format_chosen ( GtkWidget *parent, gint sens )
gtk_editable_set_editable ( GTK_EDITABLE ( GTK_BIN ( thou_sep ) -> child ), FALSE );
gtk_entry_set_width_chars ( GTK_ENTRY ( GTK_BIN ( thou_sep ) -> child ), 5 );
gtk_combo_box_append_text ( GTK_COMBO_BOX ( thou_sep ), "' '" );
+ gtk_combo_box_append_text ( GTK_COMBO_BOX ( thou_sep ), "." );
gtk_combo_box_append_text ( GTK_COMBO_BOX ( thou_sep ), "," );
gtk_combo_box_append_text ( GTK_COMBO_BOX ( thou_sep ), "''" );
@@ -1421,9 +1422,11 @@ GtkWidget *gsb_config_number_format_chosen ( GtkWidget *parent, gint sens )
mon_thousands_sep = gsb_real_get_thousands_sep ( );
if ( mon_thousands_sep == NULL )
- gtk_combo_box_set_active ( GTK_COMBO_BOX ( thou_sep ), 2 );
- else if ( strcmp ( mon_thousands_sep, "," ) == 0 )
+ gtk_combo_box_set_active ( GTK_COMBO_BOX ( thou_sep ), 3 );
+ else if ( strcmp ( mon_thousands_sep, "." ) == 0 )
gtk_combo_box_set_active ( GTK_COMBO_BOX ( thou_sep ), 1 );
+ else if ( strcmp ( mon_thousands_sep, "," ) == 0 )
+ gtk_combo_box_set_active ( GTK_COMBO_BOX ( thou_sep ), 2 );
else
gtk_combo_box_set_active ( GTK_COMBO_BOX ( thou_sep ), 0 );
@@ -1454,16 +1457,15 @@ GtkWidget *gsb_config_number_format_chosen ( GtkWidget *parent, gint sens )
* */
void gsb_localisation_decimal_point_changed ( GtkComboBox *widget, gpointer user_data )
{
+ GtkWidget *combo_box;
const gchar *text;
text = gtk_combo_box_get_active_text ( widget );
+ combo_box = g_object_get_data ( G_OBJECT ( widget ), "separator" );
if ( g_strcmp0 ( text, "," ) == 0 )
{
- GtkWidget *combo_box;
-
gsb_real_set_decimal_point ( "," );
- combo_box = g_object_get_data ( G_OBJECT ( widget ), "separator" );
if ( g_strcmp0 ( gtk_combo_box_get_active_text ( GTK_COMBO_BOX ( combo_box ) ), "," ) == 0 )
{
@@ -1472,7 +1474,14 @@ void gsb_localisation_decimal_point_changed ( GtkComboBox *widget, gpointer user
}
}
else
+ {
gsb_real_set_decimal_point ( "." );
+ if ( g_strcmp0 ( gtk_combo_box_get_active_text ( GTK_COMBO_BOX ( combo_box ) ), "." ) == 0 )
+ {
+ gsb_real_set_thousands_sep ( "," );
+ gtk_combo_box_set_active ( GTK_COMBO_BOX ( combo_box ), 2 );
+ }
+ }
if ( GPOINTER_TO_INT ( user_data ) == GTK_ORIENTATION_HORIZONTAL )
return;
@@ -1489,20 +1498,30 @@ void gsb_localisation_decimal_point_changed ( GtkComboBox *widget, gpointer user
* */
void gsb_localisation_thousands_sep_changed ( GtkComboBox *widget, gpointer user_data )
{
+ GtkWidget *combo_box;
const gchar *text;
text = gtk_combo_box_get_active_text ( widget );
+ combo_box = g_object_get_data ( G_OBJECT ( widget ), "separator" );
if ( g_strcmp0 ( text, "' '" ) == 0 )
{
gsb_real_set_thousands_sep ( " " );
}
+ else if ( g_strcmp0 ( text, "." ) == 0 )
+ {
+
+ gsb_real_set_thousands_sep ( "." );
+ if ( g_strcmp0 ( gtk_combo_box_get_active_text ( GTK_COMBO_BOX ( combo_box ) ), "." ) == 0 )
+ {
+ gsb_real_set_decimal_point ( "," );
+ gtk_combo_box_set_active ( GTK_COMBO_BOX ( combo_box ), 1 );
+ }
+ }
else if ( g_strcmp0 ( text, "," ) == 0 )
{
- GtkWidget *combo_box;
gsb_real_set_thousands_sep ( "," );
- combo_box = g_object_get_data ( G_OBJECT ( widget ), "separator" );
if ( g_strcmp0 ( gtk_combo_box_get_active_text ( GTK_COMBO_BOX ( combo_box ) ), "," ) == 0 )
{
gsb_real_set_decimal_point ( "." );
diff --git a/src/utils_str.c b/src/utils_str.c
index f6f453b..1b53ca3 100644
--- a/src/utils_str.c
+++ b/src/utils_str.c
@@ -244,101 +244,6 @@ G_MODULE_EXPORT gint utils_str_atoi ( const gchar *chaine )
/**
- * Fonction my_strtod (string to decimal)
- * Convertie une chaine de caractères en un nombre
- * Paramètres d'entrée :
- * - nptr : pointeur sur la chaine de caractères à convertir
- * - endptr : renvoie le reste de la chaine après le dernier caractère utilisé dans la conversion
- * Valeur de retour :
- * - resultat : le résultat de la conversion
- * Variables locales :
- * - entier : la partie entière du résultat
- * - mantisse : la partie décimale du résultat
- * - invert : le signe du résultat (0 -> positif, 1 -> négatif)
- * - p, m : pointeurs locaux sur la chaine de caractères à convertir
- * */
-double my_strtod ( const gchar *nptr, gchar **endptr )
-{
- double entier= 0, mantisse = 0, resultat = 0;
- gint invert = 0;
- const gchar *p;
-
- if ( !nptr )
- return 0;
-
- for ( p = nptr; p < nptr + strlen ( nptr ); p++ )
- {
- if ( g_ascii_isspace ( *p ) || *p == '+' )
- continue;
-
- if ( *p == '-' )
- {
- invert = 1;
- continue;
- }
-
- /* on traite ici la partie décimale */
- if ( *p == ',' || *p == '.' )
- {
- const gchar *m;
-
- for ( m = p + 1; m <= nptr + strlen ( nptr ) &&
- ( g_ascii_isdigit ( *m ) || g_ascii_isspace ( *m ) ); m++ )
- /* Nothing, just loop pour atteindre la fin de la chaine ou le dernier
- * caractère utilisable */
- ;
-
- if ( strlen ( m ) > 0 )
- {
- gchar *tmp_str = NULL;
- gchar *tmp_str_2 = NULL;
- const gchar *ptr;
-
- for ( ptr = m; ptr < m + strlen ( m ); ptr++ )
- {
- tmp_str = g_strndup ( ptr, 1 );
- if ( tmp_str_2 == NULL )
- tmp_str_2 = g_strconcat ( tmp_str, "|", NULL );
- else
- tmp_str_2 = g_strconcat ( tmp_str_2, tmp_str, "|", NULL );
- g_free ( tmp_str );
- }
- endptr = g_strsplit ( tmp_str_2, "|", strlen ( m ) );
- g_free ( tmp_str_2 );
- }
-
- for ( --m; m > p; m-- )
- {
- if ( isdigit ( *m ) )
- {
- mantisse /= 10;
- mantisse += ( *m - '0' );
- }
- }
- mantisse /= 10;
- }
-
- /* on traite ici la partie entière */
- if ( isdigit ( *p ) )
- {
- entier = entier * 10;
- entier += ( *p - '0' );
- }
- else
- {
- break;
- }
- }
-
- resultat = entier + mantisse;
- if ( invert )
- resultat = - resultat;
-
- return resultat;
-}
-
-
-/**
*
*
*
@@ -996,18 +901,46 @@ gchar *utils_str_dtostr ( gdouble number, gint nbre_decimal, gboolean canonical
/**
+ * fonction de conversion de char à double pour chaine avec un . comme séparateur décimal
+ * et pas de séparateur de milliers
+ *
*
+ * */
+gdouble utils_str_safe_strtod ( const gchar *str_number, gchar **endptr )
+{
+ gdouble number;
+
+ if ( str_number == NULL )
+ return 0.0;
+
+ number = g_ascii_strtod ( str_number, endptr);
+
+ return number;
+}
+
+
+/**
+ * fonction de conversion de char à double pour chaine en tenant compte du séparateur décimal
+ * et du séparateur de milliers configurés dans les préférences.
*
*
*
* */
gdouble utils_str_strtod ( const gchar *str_number, gchar **endptr )
{
+ gchar *mon_thousands_sep;
gdouble number;
if ( str_number == NULL )
return 0.0;
+ mon_thousands_sep = gsb_real_get_thousands_sep ( );
+
+ /* on supprime le séparateur des milliers */
+ if ( mon_thousands_sep && g_strrstr ( str_number, mon_thousands_sep ) )
+ str_number = my_strdelimit ( str_number, mon_thousands_sep, "" );
+
+ /* on met le . comme séparateur décimal */
if ( g_strrstr ( str_number, "," ) )
str_number = my_strdelimit ( str_number, ",", "." );
diff --git a/src/utils_str.h b/src/utils_str.h
index 8670852..8aaeb84 100644
--- a/src/utils_str.h
+++ b/src/utils_str.h
@@ -40,7 +40,6 @@ G_MODULE_EXPORT gchar *my_strdup ( const gchar *string );
gint my_strncasecmp ( gchar *string_1,
gchar *string_2,
gint longueur );
-double my_strtod ( const gchar *nptr, gchar **endptr );
G_MODULE_EXPORT gint utils_str_atoi ( const gchar *chaine );
gint utils_str_get_nbre_motifs ( const gchar *chaine, const gchar *motif );
G_MODULE_EXPORT gchar *utils_str_colon ( const gchar *s );
@@ -50,6 +49,7 @@ gchar *utils_str_incremente_number_from_str ( const gchar *str_number, gint incr
gchar *utils_str_localise_decimal_point_from_string ( const gchar *string );
gchar *utils_str_reduce_exponant_from_string ( const gchar *amount_string,
gint exponent );
+gdouble utils_str_safe_strtod ( const gchar *str_number, gchar **endptr );
gdouble utils_str_strtod ( const gchar *str_number, gchar **endptr );
/* END_DECLARATION */
hooks/post-receive
--
grisbi
More information about the cvs
mailing list