Psppire: Allow syntax files to be provided as an argument 20120216030502/pspp
authorJohn Darrington <john@darrington.wattle.id.au>
Wed, 15 Feb 2012 10:08:58 +0000 (11:08 +0100)
committerJohn Darrington <john@darrington.wattle.id.au>
Wed, 15 Feb 2012 17:35:20 +0000 (18:35 +0100)
src/ui/gui/main.c
src/ui/gui/psppire.c

index cc5ebe3f644748d130bbe11450f3c5d021ae22f9..bb8f19d69317ce7a999267d7c76a814c970e9e70 100644 (file)
@@ -106,7 +106,8 @@ Informative output:\n\
   -h, --help                display this help and exit\n\
   -V, --version             output version information and exit\n\
 \n\
-A non-option argument is interpreted as a .sav or .por file to load.\n"),
+A non-option argument is interpreted as a .sav file, a .por file or a syntax\n\
+file to load.\n"),
           program_name, gtk_help, inc_path);
 
   free (inc_path);
index 453bc3a80a7b8ae6e6bf35cb96e7548defd27947..7865a303f042eadcc26a884a13bedb03696b6350 100644 (file)
@@ -62,7 +62,8 @@
 
 static void inject_renamed_icons (void);
 static void create_icon_factory (void);
-static void load_data_file (PsppireDataWindow *, const char *);
+static gchar *local_to_filename_encoding (const char *fn);
+
 
 #define _(msgid) gettext (msgid)
 #define N_(msgid) msgid
@@ -98,8 +99,20 @@ initialize (const char *data_file)
   psppire_selector_set_default_selection_func (GTK_TYPE_TREE_VIEW, insert_source_row_into_tree_view);
 
   data_window = psppire_default_data_window ();
-  if (data_file != NULL)
-    load_data_file (data_window, data_file);
+
+  if (data_file)
+    {
+      gchar *filename = local_to_filename_encoding (data_file);
+
+      /* Check to see if the file is a .sav or a .por file.  If not
+         assume that it is a syntax file */
+      if ( any_reader_may_open (filename))
+        psppire_window_load (PSPPIRE_WINDOW (data_window), filename);
+      else
+        open_syntax_window (filename, NULL);
+
+      g_free (filename);
+    }
 }
 
 
@@ -242,8 +255,13 @@ create_icon_factory (void)
   gtk_icon_factory_add_default (factory);
 }
 \f
-static void
-load_data_file (PsppireDataWindow *window, const char *arg)
+/* 
+   Convert a filename from the local encoding into "filename" encoding.
+   The return value will be allocated on the heap.  It is the responsibility
+   of the caller to free it.
+ */
+static gchar *
+local_to_filename_encoding (const char *fn)
 {
   gchar *filename = NULL;
   gchar *utf8 = NULL;
@@ -263,12 +281,12 @@ load_data_file (PsppireDataWindow *window, const char *arg)
 
   if ( local_is_utf8)
     {
-      utf8 = xstrdup (arg);
+      utf8 = xstrdup (fn);
     }
   else
     {
       GError *err = NULL;
-      utf8 = g_locale_to_utf8 (arg, -1, NULL, &written, &err);
+      utf8 = g_locale_to_utf8 (fn, -1, NULL, &written, &err);
       if ( NULL == utf8)
         {
           g_warning ("Cannot convert filename from local encoding `%s' to UTF-8: %s",
@@ -293,11 +311,9 @@ load_data_file (PsppireDataWindow *window, const char *arg)
   g_free (utf8);
 
   if ( filename == NULL)
-    filename = xstrdup (arg);
-
-  psppire_window_load (PSPPIRE_WINDOW (window), filename);
+    filename = xstrdup (fn);
 
-  g_free (filename);
+  return filename;
 }
 
 static void