Internationalisation.
authorJohn Darrington <john@darrington.wattle.id.au>
Tue, 30 May 2006 12:01:33 +0000 (12:01 +0000)
committerJohn Darrington <john@darrington.wattle.id.au>
Tue, 30 May 2006 12:01:33 +0000 (12:01 +0000)
Removed dependence on glib2.10
Tidy up some files.

34 files changed:
Smake
lib/gtksheet/ChangeLog
lib/gtksheet/gtksheet.c
lib/gtksheet/gtksheet.h
src/data/ChangeLog
src/data/settings.c
src/libpspp/ChangeLog
src/libpspp/automake.mk
src/libpspp/i18n.c [new file with mode: 0644]
src/libpspp/i18n.h [new file with mode: 0644]
src/ui/gui/ChangeLog
src/ui/gui/helper.c
src/ui/gui/menu-actions.c
src/ui/gui/menu-actions.h
src/ui/gui/psppire-data-store.c
src/ui/gui/psppire-var-store.c
src/ui/gui/psppire-var-store.h
src/ui/gui/psppire.c
tests/bugs/alpha-freq.sh
tests/command/autorecod.sh
tests/command/beg-data.sh
tests/command/count.sh
tests/command/file-label.sh
tests/command/flip.sh
tests/command/lag.sh
tests/command/list.sh
tests/command/loop.sh
tests/command/print.sh
tests/command/split-file.sh
tests/command/sysfile-info.sh
tests/expressions/variables.sh
tests/expressions/vectors.sh
tests/stats/descript-basic.sh
tests/stats/descript-missing.sh

diff --git a/Smake b/Smake
index a13ce6b5bb36e3ec60105a29611a6602e06c1652..d20b5da84c277ba66c6fce752bccbeec1a6b732d 100644 (file)
--- a/Smake
+++ b/Smake
@@ -20,6 +20,7 @@ GNULIB_MODULES = \
        gettext \
        intprops \
        linebreak \
+       localcharset \
        memcasecmp \
        memchr \
        memcmp \
index eea30daace3a0bb23fd4446159ca6d2fbe08e648..0ccbb0e35135f8ea6009b61c97ffdb62823d77a5 100644 (file)
@@ -1,3 +1,7 @@
+Di Mai 30 19:51:19 WST 2006 John Darrington <john@darrington.wattle.id.au>
+
+    * gtksheet.c gtksheet.h: constness. Removed dependence on glib2.10
+
 Sat May 27 16:29:36 WST 2006 John Darrington <john@darrington.wattle.id.au>
 
     * gtksheet.c: Removed call to gtk_entry_set_text, which caused warnings 
index ff7ab3b0d2413994556c311fd3b0d9a7f6861a3f..6d47cfb9943ce05bf23f9841cf3146a258b4a2b1 100644 (file)
@@ -104,6 +104,7 @@ enum
 #define DEFAULT_COLUMN_WIDTH 80
 
 
+
 static gboolean gtk_sheet_cell_empty (const GtkSheet *sheet, gint row, gint col);
 
 static inline
@@ -720,7 +721,7 @@ static void gtk_sheet_button_size_request   (GtkSheet *sheet,
                                                 GtkRequisition *requisition);
 
 /* Attributes routines */
-static void init_attributes                    (GtkSheet *sheet, gint col,  
+static void init_attributes                    (const GtkSheet *sheet, gint col,  
                                                 GtkSheetCellAttr *attributes);
 
 
@@ -3959,11 +3960,12 @@ gtk_sheet_entry_changed(GtkWidget *widget, gpointer data)
 
  GTK_SHEET_SET_FLAGS(sheet, GTK_SHEET_IS_FROZEN);
 
- if(text && strlen(text) > 0){
-      gtk_sheet_get_attributes(sheet, row, col, &attributes); 
-      justification=attributes.justification;
-      gtk_sheet_set_cell(sheet, row, col, justification, text);
- }
+ if(text && strlen(text) > 0)
+   {
+     gtk_sheet_get_attributes(sheet, row, col, &attributes); 
+     justification = attributes.justification;
+     gtk_sheet_set_cell(sheet, row, col, justification, text);
+   }
 
  if(sheet->freeze_count == 0)
         GTK_SHEET_UNSET_FLAGS(sheet, GTK_SHEET_IS_FROZEN);
@@ -6135,7 +6137,7 @@ static void
 gtk_sheet_size_allocate_entry(GtkSheet *sheet)
 {
  GtkAllocation shentry_allocation;
- GtkSheetCellAttr attributes;
+ GtkSheetCellAttr attributes = { 0 };
  GtkEntry *sheet_entry;
  GtkStyle *style = NULL, *previous_style = NULL;
  gint row, col;
@@ -6147,40 +6149,41 @@ gtk_sheet_size_allocate_entry(GtkSheet *sheet)
 
  sheet_entry = GTK_ENTRY(gtk_sheet_get_entry(sheet));
 
- gtk_sheet_get_attributes(sheet, sheet->active_cell.row, sheet->active_cell.col, &attributes); 
+ gtk_sheet_get_attributes(sheet, sheet->active_cell.row, sheet->active_cell.col,                               &attributes);
 
- if(GTK_WIDGET_REALIZED(sheet->sheet_entry)){
+ if(GTK_WIDGET_REALIZED(sheet->sheet_entry))
+    {
 
-  if(!GTK_WIDGET(sheet_entry)->style) 
+      if(!GTK_WIDGET(sheet_entry)->style) 
         gtk_widget_ensure_style(GTK_WIDGET(sheet_entry));
 
-  previous_style = GTK_WIDGET(sheet_entry)->style;
-
-  style = gtk_style_copy(previous_style);
-  style->bg[GTK_STATE_NORMAL] = attributes.background;
-  style->fg[GTK_STATE_NORMAL] = attributes.foreground;
-  style->text[GTK_STATE_NORMAL] = attributes.foreground;
-  style->bg[GTK_STATE_ACTIVE] = attributes.background;
-  style->fg[GTK_STATE_ACTIVE] = attributes.foreground;
-  style->text[GTK_STATE_ACTIVE] = attributes.foreground;
-
-  pango_font_description_free(style->font_desc);
-  style->font_desc = pango_font_description_copy(attributes.font_desc);
-
-  GTK_WIDGET(sheet_entry)->style = style;
-  gtk_widget_size_request(sheet->sheet_entry, NULL);
-  GTK_WIDGET(sheet_entry)->style = previous_style;
-
-  if(style != previous_style){
-    if(!GTK_IS_ITEM_ENTRY(sheet->sheet_entry)){
-      style->bg[GTK_STATE_NORMAL] = previous_style->bg[GTK_STATE_NORMAL];
-      style->fg[GTK_STATE_NORMAL] = previous_style->fg[GTK_STATE_NORMAL];
-      style->bg[GTK_STATE_ACTIVE] = previous_style->bg[GTK_STATE_ACTIVE];
-      style->fg[GTK_STATE_ACTIVE] = previous_style->fg[GTK_STATE_ACTIVE];
+      previous_style = GTK_WIDGET(sheet_entry)->style;
+
+      style = gtk_style_copy(previous_style);
+      style->bg[GTK_STATE_NORMAL] = attributes.background;
+      style->fg[GTK_STATE_NORMAL] = attributes.foreground;
+      style->text[GTK_STATE_NORMAL] = attributes.foreground;
+      style->bg[GTK_STATE_ACTIVE] = attributes.background;
+      style->fg[GTK_STATE_ACTIVE] = attributes.foreground;
+      style->text[GTK_STATE_ACTIVE] = attributes.foreground;
+
+      pango_font_description_free(style->font_desc);
+      style->font_desc = pango_font_description_copy(attributes.font_desc);
+
+      GTK_WIDGET(sheet_entry)->style = style;
+      gtk_widget_size_request(sheet->sheet_entry, NULL);
+      GTK_WIDGET(sheet_entry)->style = previous_style;
+
+      if(style != previous_style){
+       if(!GTK_IS_ITEM_ENTRY(sheet->sheet_entry)){
+         style->bg[GTK_STATE_NORMAL] = previous_style->bg[GTK_STATE_NORMAL];
+         style->fg[GTK_STATE_NORMAL] = previous_style->fg[GTK_STATE_NORMAL];
+         style->bg[GTK_STATE_ACTIVE] = previous_style->bg[GTK_STATE_ACTIVE];
+         style->fg[GTK_STATE_ACTIVE] = previous_style->fg[GTK_STATE_ACTIVE];
+       }
+       gtk_widget_set_style(GTK_WIDGET(sheet_entry), style);
+      }
     }
-    gtk_widget_set_style(GTK_WIDGET(sheet_entry), style);
-  }
- }
 
  if(GTK_IS_ITEM_ENTRY(sheet_entry))
     max_size = GTK_ITEM_ENTRY(sheet_entry)->text_max_size;
@@ -6230,12 +6233,13 @@ gtk_sheet_size_allocate_entry(GtkSheet *sheet)
 
  }
 
- if(!GTK_IS_ITEM_ENTRY(sheet->sheet_entry)){
-   shentry_allocation.x += 2;
-   shentry_allocation.y += 2;
-   shentry_allocation.width -= MIN(shentry_allocation.width, 3);
-   shentry_allocation.height -= MIN(shentry_allocation.height, 3);
- }
+ if(!GTK_IS_ITEM_ENTRY(sheet->sheet_entry))
+   {
+     shentry_allocation.x += 2;
+     shentry_allocation.y += 2;
+     shentry_allocation.width -= MIN(shentry_allocation.width, 3);
+     shentry_allocation.height -= MIN(shentry_allocation.height, 3);
+   }
 
  gtk_widget_size_allocate(sheet->sheet_entry, &shentry_allocation);
 
@@ -7213,7 +7217,8 @@ gtk_sheet_set_row_height (GtkSheet * sheet,
 
 
 gboolean
-gtk_sheet_get_attributes(GtkSheet *sheet, gint row, gint col, GtkSheetCellAttr *attributes)
+gtk_sheet_get_attributes(const GtkSheet *sheet, gint row, gint col, 
+                        GtkSheetCellAttr *attributes)
 {
  const GdkColor *fg, *bg; 
  const GtkJustification *j ; 
@@ -7228,7 +7233,7 @@ gtk_sheet_get_attributes(GtkSheet *sheet, gint row, gint col, GtkSheetCellAttr *
  init_attributes(sheet, col, attributes);
 
  if ( !sheet->model) 
-        return FALSE;
+   return FALSE;
 
  attributes->is_editable = g_sheet_model_is_editable(sheet->model, row, col);
  attributes->is_visible = g_sheet_model_is_visible(sheet->model, row, col);
@@ -7255,7 +7260,7 @@ gtk_sheet_get_attributes(GtkSheet *sheet, gint row, gint col, GtkSheetCellAttr *
 }
 
 static void
-init_attributes(GtkSheet *sheet, gint col, GtkSheetCellAttr *attributes)
+init_attributes(const GtkSheet *sheet, gint col, GtkSheetCellAttr *attributes)
 {
  /* DEFAULT VALUES */    
  attributes->foreground = GTK_WIDGET(sheet)->style->black;
@@ -7276,9 +7281,7 @@ init_attributes(GtkSheet *sheet, gint col, GtkSheetCellAttr *attributes)
  attributes->is_editable = TRUE;
  attributes->is_visible = TRUE;
  attributes->font_desc = GTK_WIDGET(sheet)->style->font_desc;
-
 }       
 
 
 /********************************************************************
@@ -7913,7 +7916,7 @@ gtk_sheet_get_model(const GtkSheet *sheet)
 GtkSheetButton *
 gtk_sheet_button_new(void)
 {
-  GtkSheetButton *button = g_slice_new(GtkSheetButton);
+  GtkSheetButton *button = g_malloc(sizeof(GtkSheetButton));
   
   button->state = GTK_STATE_NORMAL;
   button->label = NULL;
@@ -7929,5 +7932,5 @@ inline void
 gtk_sheet_button_free(GtkSheetButton *button)
 {
   g_free(button->label);
-  g_slice_free(GtkSheetButton, button);
+  g_free(button);
 }
index ed6cd31ee43a10409ba634bd7dd85318ca7745d1..d8db6c40e39098ff2dd5138e45aae06ae5588138 100644 (file)
@@ -659,7 +659,7 @@ gtk_sheet_range_set_font            (GtkSheet *sheet,
 /* get cell attributes of the given cell */
 /* TRUE means that the cell is currently allocated */
 gboolean
-gtk_sheet_get_attributes               (GtkSheet *sheet, 
+gtk_sheet_get_attributes               (const GtkSheet *sheet, 
                                        gint row, gint col, 
                                        GtkSheetCellAttr *attributes);
 
index 87fb23ee78fe5ccd1d8e37c946e14003913e664f..329c688b9d4d0ff1ec3b8bf784a9dca04d444199 100644 (file)
@@ -1,3 +1,7 @@
+Tue May 30 19:52:33 WST 2006 John Darrington <john@darrington.wattle.id.au>
+
+       * settings.c: Added call to i18n{done, init}.
+
 Tue May  9 21:09:17 2006  Ben Pfaff  <blp@gnu.org>
 
        * procedure.h: Add WARN_UNUSED_RESULT to procedure function
index 64f037ed147de959efa4a9ceddb75a1bfc9f4e57..37fda6006ee3e99858abb9c7bbb1b1014cb17ffe 100644 (file)
@@ -25,6 +25,7 @@
 #include "format.h"
 #include "value.h"
 #include "xalloc.h"
+#include <libpspp/i18n.h>
 
 static int viewlength = 24;
 static int viewwidth = 79;
@@ -87,11 +88,13 @@ void
 settings_init (void)
 {
   init_viewport ();
+  i18n_init ();
 }
 
 void
 settings_done (void)
 {
+  i18n_done ();
 }
 
 /* Screen length in lines. */
index 34f95e3913c6403eff20de3a5e49b1a10e674f95..852b71b18b50abb30784f6f903bb19ca1dbc55cb 100644 (file)
@@ -1,3 +1,7 @@
+Tue May 30 19:45:12 WST 2006 John Darrington <john@darrington.wattle.id.au>
+
+       * i18n.c i18n.h: New files.
+
 Tue May 16 06:50:35 2006  Ben Pfaff  <blp@gnu.org>
 
        * automake.mk (src/libpspp/version.c): Removed groff_font_path,
index 8f1b096ba6913b66db2a9e00697e801894785ff4..b428672dbf47ad6736067a88a5e4c580081ce381 100644 (file)
@@ -16,6 +16,8 @@ src_libpspp_libpspp_a_SOURCES = \
        src/libpspp/freaderror.h \
        src/libpspp/hash.c \
        src/libpspp/hash.h \
+       src/libpspp/i18n.c \
+       src/libpspp/i18n.h \
        src/libpspp/magic.c \
        src/libpspp/magic.h \
        src/libpspp/misc.c \
diff --git a/src/libpspp/i18n.c b/src/libpspp/i18n.c
new file mode 100644 (file)
index 0000000..bcac52c
--- /dev/null
@@ -0,0 +1,176 @@
+/* PSPP - computes sample statistics.
+   Copyright (C) 2006 Free Software Foundation, Inc.
+   Written by John Darrington <john@darrington.wattle.id.au>
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+   02110-1301, USA. */
+
+#include <config.h>
+#include <xalloc.h>
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+#include <iconv.h>
+#include <errno.h>
+
+#include "i18n.h"
+
+#include <localcharset.h>
+
+
+static char *locale = 0;
+static const char *charset;
+
+
+static iconv_t convertor[n_CONV];
+
+/* Return a string based on TEXT converted according to HOW.
+   If length is not -1, then it must be the number of bytes in TEXT.
+   The returned string must be freed when no longer required.
+*/
+char *
+recode_string(enum conv_id how,  const char *text, int length)
+{
+  char *outbuf = 0;
+  size_t outbufferlength;
+  size_t result;
+  char *ip ;
+  char *op ;
+  size_t inbytes = 0;
+  size_t outbytes ;
+
+  /* FIXME: Need to ensure that this char is valid in the target encoding */
+  const char fallbackchar = '?';
+
+  if ( length == -1 ) 
+     length = strlen(text);
+
+  assert(how < n_CONV);
+
+  for ( outbufferlength = 1 ; outbufferlength != 0; outbufferlength <<= 1 )
+    if ( outbufferlength > length) 
+      break;
+
+  outbuf = xmalloc(outbufferlength);
+  op = outbuf;
+  ip = (char *) text;
+
+  outbytes = outbufferlength;
+  inbytes = length;
+  
+  do {
+
+  
+    result = iconv(convertor[how], &ip, &inbytes, 
+                  &op, &outbytes);
+
+    if ( -1 == result ) 
+      {
+       int the_error = errno;
+
+       switch ( the_error)
+         {
+         case EILSEQ:
+         case EINVAL:
+           if ( outbytes > 0 ) 
+             {
+               *op++ = fallbackchar;
+               outbytes--;
+               ip++;
+               inbytes--;
+               break;
+             }
+           /* Fall through */
+         case E2BIG:
+           free(outbuf);
+           outbufferlength <<= 1;
+           outbuf = xmalloc(outbufferlength);
+           op = outbuf;
+           ip = (char *) text;
+           outbytes = outbufferlength;
+           inbytes = length;
+           break;
+         default:
+           /* should never happen */
+           break;
+         }
+
+      }
+
+  } while ( -1 == result );
+
+  *op = '\0';
+  
+
+  return outbuf;
+}
+
+
+/* Returns the current PSPP locale */
+const char *
+get_pspp_locale(void)
+{
+  assert ( locale);
+  return locale;
+}
+
+/* Set the PSPP locale */
+void 
+set_pspp_locale(const char *l)
+{
+  char *current_locale;
+  const char *current_charset;
+
+  free(locale);
+  locale = strdup(l);
+
+  current_locale = setlocale(LC_CTYPE, 0);
+  current_charset = locale_charset();
+  setlocale(LC_CTYPE, locale);
+  
+  charset = locale_charset();
+  setlocale(LC_CTYPE, current_locale);
+
+  iconv_close(convertor[CONV_PSPP_TO_UTF8]);
+  convertor[CONV_PSPP_TO_UTF8] = iconv_open("UTF-8", charset);
+
+  iconv_close(convertor[CONV_SYSTEM_TO_PSPP]);
+  convertor[CONV_SYSTEM_TO_PSPP] = iconv_open(charset, current_charset);
+}
+
+void
+i18n_init(void)
+{
+  assert ( ! locale) ;
+  locale = strdup(setlocale(LC_CTYPE, NULL));
+
+  setlocale(LC_CTYPE, locale);
+  charset = locale_charset();
+
+  convertor[CONV_PSPP_TO_UTF8] = iconv_open("UTF-8", charset);
+  convertor[CONV_SYSTEM_TO_PSPP] = iconv_open(charset, charset);
+}
+
+
+void 
+i18n_done(void)
+{
+  int i;
+  free(locale);
+  locale = 0;
+
+  for(i = 0 ; i < n_CONV; ++i ) 
+    iconv_close(convertor[i]);
+}
diff --git a/src/libpspp/i18n.h b/src/libpspp/i18n.h
new file mode 100644 (file)
index 0000000..6bb2a86
--- /dev/null
@@ -0,0 +1,42 @@
+/* PSPP - computes sample statistics.
+   Copyright (C) 2006 Free Software Foundation, Inc.
+   Written by John Darrington <john@darrington.wattle.id.au>
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+   02110-1301, USA. */
+
+#ifndef I18N_H
+#define I18N_H
+
+const char * get_pspp_locale(void);
+void set_pspp_locale(const char *locale);
+const char * get_pspp_charset(void);
+
+void  i18n_done(void);
+void  i18n_init(void);
+
+enum conv_id
+  {
+    CONV_PSPP_TO_UTF8,
+    CONV_SYSTEM_TO_PSPP,
+    n_CONV
+  };
+
+
+char * recode_string(enum conv_id how,  const char *text, int len);
+
+
+
+#endif /* i18n.h */
index 5a875b32299a8dfe1ba44c0971c966aa28e5f68f..d4e34e39284282852c920cd3bf834ae19214325e 100644 (file)
@@ -1,3 +1,16 @@
+   
+Tue May 30 19:53:35 WST 2006 John Darringotn <john@darrington.wattle.id.au>
+
+   * menu-actions.c menu-actions.h psppire.c: Fixed up load/new 
+   interactions with startup.
+
+   * psppire-data-store.c: Fixed bad i18n call.
+
+   * pspppire-var-store.c, psppire-var-store.h: constness.
+
+   * helper.c: Implemented proper way to convert from PSPP to UTF8 encoding.
+
+
 Sat May 27 16:25:38 WST 2006 John Darrington <john@darrington.wattle.id.au>
 
    * customentry.c data-sheet.c menu-actions.c message-dialog.c 
index d2defd69933a85a4063d1673b8e61c8d0f7b3462..841bda5a96706411ef24198fe25320c87dcc3722 100644 (file)
@@ -1,10 +1,12 @@
-
 #include "helper.h"
 #include <data/data-in.h>
 #include <libpspp/message.h>
 
+#include <libpspp/i18n.h>
+
 #include <ctype.h>
 #include <string.h>
+#include <data/settings.h>
 
 /* Formats a value according to FORMAT 
    The returned string must be freed when no longer required */
@@ -80,21 +82,6 @@ get_widget_assert(GladeXML *xml, const gchar *name)
 char *
 pspp_locale_to_utf8(const gchar *text, gssize len, GError **err)
 {
-  GError *tmp_error = 0;
-
-  gchar *s;
-
-  if ( ! text ) 
-    return 0;
-
-  s = g_locale_to_utf8(text, len, 0, 0, &tmp_error);
-
-  if ( tmp_error)
-    {
-      g_warning("Error converting to UTF8: %s", tmp_error->message);
-      g_propagate_error (err, tmp_error);
-    }
-
-  return s;
+  return recode_string(CONV_PSPP_TO_UTF8, text, len);
 }
 
index bd56691dc60dda5141c65df39c14e20908eb7d8e..f031ea7030e5a1b75f2898c752a9db36678c1a14 100644 (file)
@@ -62,6 +62,7 @@ static const gchar untitled[] = N_("Untitled");
 static const gchar window_title[] = N_("PSPP Data Editor");
 
 
+/* Sets the title bar to TEXT */
 static void
 psppire_set_window_title(const gchar *text)
 {
@@ -70,13 +71,11 @@ psppire_set_window_title(const gchar *text)
   gchar *title = g_strdup_printf("%s --- %s", text, gettext(window_title));
 
   gtk_window_set_title(GTK_WINDOW(data_editor), title);
-
-  g_free(title);
 }
 
-void
-on_new1_activate                       (GtkMenuItem     *menuitem,
-                                        gpointer         user_data)
+
+gboolean
+clear_file(void)
 {
   GtkWidget *data_sheet = get_widget_assert(xml, "data_sheet");
   GtkWidget *var_sheet = get_widget_assert(xml, "variable_sheet");
@@ -93,8 +92,18 @@ on_new1_activate                       (GtkMenuItem     *menuitem,
   if (psppire_handle)
     fh_free(psppire_handle);
   psppire_handle = 0 ;
+
+  return TRUE;
 }
 
+void
+on_new1_activate                       (GtkMenuItem     *menuitem,
+                                        gpointer         user_data)
+{
+  clear_file();
+}
+
+
 
 static gboolean
 populate_case_from_reader(struct ccase *c, gpointer aux)
@@ -593,8 +602,10 @@ data_var_select(GtkNotebook *notebook,
   switch_menus(page_num);
 }
 
-static void
-var_data_selection_init()
+
+/* Initialised things on the variable sheet */
+void
+var_data_selection_init(void)
 {
   notebook = GTK_NOTEBOOK(get_widget_assert(xml, "notebook1"));
   menuitems[PAGE_DATA_SHEET] = get_widget_assert(xml, "data1");
@@ -626,14 +637,3 @@ on_variables1_activate(GtkMenuItem     *menuitem,
   select_sheet(PAGE_VAR_SHEET);
 }
 
-
-/* Callback which occurs when gtk_main is entered */
-gboolean
-callbacks_on_init(gpointer data)
-{
-  psppire_set_window_title(gettext(untitled));
-
-  var_data_selection_init();
-
-  return FALSE;
-}
index f4ed5c006d643db0582a19eec6870dd7e0aab7d9..46cb85f26f8b06f99b7272ef2053fbfdd4458e22 100644 (file)
@@ -77,15 +77,15 @@ psppire_variable_sheet_create (gchar *widget_name, gchar *string1, gchar *string
                 gint int1, gint int2);
 
 
-gboolean callbacks_on_init(gpointer data) ;
-
-
 /* Switch between the VAR SHEET and the DATA SHEET */
 enum {PAGE_DATA_SHEET = 0, PAGE_VAR_SHEET};
 
 gboolean load_system_file(const gchar *file_name);
+gboolean clear_file(void);
 
 void select_sheet(gint page);
+void var_data_selection_init(void);
+
 
 #endif
 
index 62bbfef9c879fb4f6aff76ee649494390cd87787..df36d0832e41ff600b966ae76186d86b192fdf4e 100644 (file)
@@ -401,7 +401,6 @@ psppire_data_store_get_string(GSheetModel *model, gint row, gint column)
      FP.  No null terminator is appended to the buffer.  */
   data_out (s->str, fp, v);
 
-  
   text = pspp_locale_to_utf8(s->str, fp->w, 0);
   g_string_free(s, TRUE);
 
@@ -579,7 +578,7 @@ geometry_get_column_count(const GSheetColumn *geom)
 /* Return the width that an  'M' character would occupy when typeset at
    row, col */
 static guint 
-M_width(GtkSheet *sheet, gint row, gint col)
+M_width(const GtkSheet *sheet, gint row, gint col)
 {
   GtkSheetCellAttr attributes;
   PangoRectangle rect;
@@ -673,7 +672,7 @@ geometry_get_button_label(const GSheetColumn *geom, gint unit)
   PsppireDataStore *ds = PSPPIRE_DATA_STORE(geom);
 
   if ( unit >= psppire_dict_get_var_cnt(ds->dict) )
-    return pspp_locale_to_utf8(null_var_name, -1, 0);
+    return g_locale_to_utf8(null_var_name, -1, 0, 0, 0);
 
   pv = psppire_dict_get_variable(ds->dict, unit);
 
index 36538723d43bf01da71940d6f3a147fb35d46395..9abf8653594ac5b49f34bea03a9c8a19d06f9e9b 100644 (file)
@@ -640,7 +640,7 @@ psppire_var_store_get_var_cnt(PsppireVarStore  *store)
 
 
 void
-psppire_var_store_set_font(PsppireVarStore *store, PangoFontDescription *fd)
+psppire_var_store_set_font(PsppireVarStore *store, const PangoFontDescription *fd)
 {
   g_return_if_fail (store);
   g_return_if_fail (PSPPIRE_IS_VAR_STORE (store));
index 7a4eee8e3b4b3ab2402567634de09ce9a8d88364..792db1f17aa4cd0c800f6aa324db51814b5d8e7a 100644 (file)
@@ -59,7 +59,7 @@ struct _PsppireVarStore
   /*< private >*/
   PsppireDict *dict;
   GdkColor disabled;
-  PangoFontDescription *font_desc;
+  const PangoFontDescription *font_desc;
 };
 
 struct _PsppireVarStoreClass
@@ -86,7 +86,7 @@ void psppire_var_store_set_dictionary(PsppireVarStore *var_store, PsppireDict *d
 /* Return the number of variables */
 gint psppire_var_store_get_var_cnt(PsppireVarStore      *var_store);
 
-void psppire_var_store_set_font(PsppireVarStore *store, PangoFontDescription *fd);
+void psppire_var_store_set_font(PsppireVarStore *store, const PangoFontDescription *fd);
 
 
 #ifdef __cplusplus
index 4d77cb3d1bfe13cbfdab1b6ea17b505522cdbdb1..3560dbf634e8f107a971fddf88e8740d11b9cd45 100644 (file)
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA. */
 
-/*
- * Initial main.c file generated by Glade. Edit as required.
- * Glade will not overwrite this file.
- */
 
 #include <assert.h>
 #include <libintl.h>
 
 #include <libpspp/version.h>
 #include <libpspp/copyleft.h>
+#include <data/settings.h>
+
 #include <getopt.h>
 #include <gtk/gtk.h>
 #include <gtk/gtk.h>
@@ -56,20 +54,6 @@ PsppireDataStore *data_store = 0;
 static bool parse_command_line (int *argc, char ***argv, 
                                gchar **filename, GError **err);
 
-static void
-i18n_init (void) 
-{
-#if ENABLE_NLS
-#if HAVE_LC_MESSAGES
-  setlocale (LC_MESSAGES, "");
-#endif
-  setlocale (LC_MONETARY, "");
-  bindtextdomain (PACKAGE, locale_dir);
-  textdomain (PACKAGE);
-#endif /* ENABLE_NLS */
-}
-
-
 int 
 main(int argc, char *argv[]) 
 {
@@ -83,16 +67,29 @@ main(int argc, char *argv[])
 
   gtk_init(&argc, &argv);
 
+  /* gtk_init messes with the locale. 
+     So unset the bits we want to control ourselves */
+  setlocale (LC_NUMERIC, "C");
+
+  bindtextdomain (PACKAGE, locale_dir);
+  textdomain (PACKAGE);
+
   if ( ! parse_command_line(&argc, &argv, &filename, &err) ) 
     {
       g_clear_error(&err);
       return 1;
     }
 
-
   glade_init();
 
-  i18n_init();
+
+  settings_init();
+
+  
+
+  /* 
+  set_pspp_locale("da_DK");
+  */
 
   message_dialog_init();
 
@@ -125,16 +122,20 @@ main(int argc, char *argv[])
   
   gtk_sheet_set_model(data_sheet, G_SHEET_MODEL(data_store));
 
-  gtk_init_add(callbacks_on_init, 0);
-
   if (filename)
     gtk_init_add((GtkFunction)load_system_file, filename);
+  else
+    gtk_init_add((GtkFunction)clear_file, 0);
+
+  var_data_selection_init();
 
   /* start the event loop */
   gtk_main();
 
   message_dialog_done();
 
+  settings_done();
+
   return 0;
 }
 
index d964057b0928b4121573edb44408171c0035cc31..687993053e5e89f57f2b16a00f627a2a4a376c6b 100755 (executable)
@@ -18,6 +18,8 @@ top_srcdir=`cd $top_srcdir; pwd`
 STAT_CONFIG_PATH=$top_srcdir/config
 export STAT_CONFIG_PATH
 
+LANG=C
+export LANG
 
 cleanup()
 {
index b33fe15cb0b2d1939ccaf416f5607a02c32d438b..57b2dc825f2627b1e061f9a5ff232ef48da6b7a6 100755 (executable)
@@ -18,6 +18,8 @@ top_srcdir=`cd $top_srcdir; pwd`
 STAT_CONFIG_PATH=$top_srcdir/config
 export STAT_CONFIG_PATH
 
+LANG=C
+export LANG
 
 cleanup()
 {
index 5b9e9384b30602c323a9055ef9ada5673a8e387e..35f937b51cbb67afdaa51edb9897d9f15bb8372c 100755 (executable)
@@ -17,6 +17,8 @@ top_srcdir=`cd $top_srcdir; pwd`
 STAT_CONFIG_PATH=$top_srcdir/config
 export STAT_CONFIG_PATH
 
+LANG=C
+export LANG
 
 cleanup()
 {
index 7b3e8e4b79cb1aedc3debaff8c69ec42240bcc07..7fa56cc4ba13a581592ce43baa75351333078623 100755 (executable)
@@ -17,6 +17,8 @@ top_srcdir=`cd $top_srcdir; pwd`
 STAT_CONFIG_PATH=$top_srcdir/config
 export STAT_CONFIG_PATH
 
+LANG=C
+export LANG
 
 cleanup()
 {
index ca9da9cdc8064ea37d18a9ecffe98352e20febab..72da802999e7d4675279d03666cd24ade772fdac 100755 (executable)
@@ -17,6 +17,8 @@ top_srcdir=`cd $top_srcdir; pwd`
 STAT_CONFIG_PATH=$top_srcdir/config
 export STAT_CONFIG_PATH
 
+LANG=C
+export LANG
 
 cleanup()
 {
index c7429b32a0a7cfc6315ff00839af4a349bf3415f..29caa1422c5d0e00a09d02ee4bb74f9c55bb497c 100755 (executable)
@@ -17,6 +17,8 @@ top_srcdir=`cd $top_srcdir; pwd`
 STAT_CONFIG_PATH=$top_srcdir/config
 export STAT_CONFIG_PATH
 
+LANG=C
+export LANG
 
 cleanup()
 {
index d5eadb0e1ac19fb034fed664730d826445cdff0e..4221fb7b88aba5ab81a708b8c2e16bf9a7175847 100755 (executable)
@@ -17,6 +17,8 @@ top_srcdir=`cd $top_srcdir; pwd`
 STAT_CONFIG_PATH=$top_srcdir/config
 export STAT_CONFIG_PATH
 
+LANG=C
+export LANG
 
 cleanup()
 {
index dc8d13135028ebca249dcccd6c552ab22a6d73fa..a11ea78dd665719608844cea402596b778083856 100755 (executable)
@@ -17,6 +17,8 @@ top_srcdir=`cd $top_srcdir; pwd`
 STAT_CONFIG_PATH=$top_srcdir/config
 export STAT_CONFIG_PATH
 
+LANG=C
+export LANG
 
 cleanup()
 {
index 03120299d0cf93f8793462d465017334a81d1c1d..7c7e493aa3767ece748ac3e16bd1c978c4cb1583 100755 (executable)
@@ -17,6 +17,9 @@ top_srcdir=`cd $top_srcdir; pwd`
 STAT_CONFIG_PATH=$top_srcdir/config
 export STAT_CONFIG_PATH
 
+LANG=C
+export LANG
+
 
 cleanup()
 {
index 32a96d7f27d480e2077d7914981c2d4a519de4e3..a7e5b655210f45faeaab715e6450a1c1e25f1de4 100755 (executable)
@@ -17,6 +17,8 @@ top_srcdir=`cd $top_srcdir; pwd`
 STAT_CONFIG_PATH=$top_srcdir/config
 export STAT_CONFIG_PATH
 
+LANG=C
+export LANG
 
 cleanup()
 {
index 250b97abe00eebd957617412a49bd34e2fe9c48b..10e34ed9e229a913cf820612bea63c55f0a9f687 100755 (executable)
@@ -17,6 +17,9 @@ top_srcdir=`cd $top_srcdir; pwd`
 STAT_CONFIG_PATH=$top_srcdir/config
 export STAT_CONFIG_PATH
 
+LANG=C
+export LANG
+
 
 cleanup()
 {
index 03d71f741f32fbb3bf409b80c251cf5ff1605131..9905466590319b690c06be89c770c467e222deca 100755 (executable)
@@ -17,6 +17,8 @@ top_srcdir=`cd $top_srcdir; pwd`
 STAT_CONFIG_PATH=$top_srcdir/config
 export STAT_CONFIG_PATH
 
+LANG=C
+export LANG
 
 cleanup()
 {
index 3a2a3c2b4519cbdd62ce9f79bb11fd9c7da8fc53..b9da30fb0b9489e98cedf016906bd8f3ae107d3b 100755 (executable)
@@ -14,6 +14,8 @@ PSPP=$top_builddir/src/ui/terminal/pspp
 STAT_CONFIG_PATH=$top_srcdir/config
 export STAT_CONFIG_PATH
 
+LANG=C
+export LANG
 
 cleanup()
 {
index 52b9be62e4a0196f684d1a160756c91f1329144c..62749d6743fe86595031f40a63a16808383301ab 100755 (executable)
@@ -14,6 +14,9 @@ PSPP=$top_builddir/src/ui/terminal/pspp
 STAT_CONFIG_PATH=$top_srcdir/config
 export STAT_CONFIG_PATH
 
+LANG=C
+export LANG
+
 
 cleanup()
 {
index 0a8dc114a29c2f342c245c0b4ca287aa1270517f..8f772ed3795a37ae34815e8e6febf15157b6e35a 100755 (executable)
@@ -16,11 +16,13 @@ top_srcdir=`cd $top_srcdir; pwd`
 STAT_CONFIG_PATH=$top_srcdir/config
 export STAT_CONFIG_PATH
 
+LANG=C
+export LANG
 
 cleanup()
 {
      cd /
-#     rm -rf $TEMPDIR
+     rm -rf $TEMPDIR
 }
 
 
index 8d0de7d612e599e822d9a9db5470187668907395..574ecf29d5572f7d12975c65a0b9a30494b79b7c 100755 (executable)
@@ -16,6 +16,8 @@ top_srcdir=`cd $top_srcdir; pwd`
 STAT_CONFIG_PATH=$top_srcdir/config
 export STAT_CONFIG_PATH
 
+LANG=C
+export LANG
 
 cleanup()
 {