X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fmain.c;h=05cc421b3ede67e4f08ef4ded3c10b0f065c5ec9;hb=b5c82cc9aabe7e641011130240ae1b2e84348e23;hp=a3d394618c5e4662113863915fb47e6db16eb090;hpb=db5b7f9dc9c86ae607f8bcbacaf49065b8cdcbae;p=pspp-builds.git
diff --git a/src/ui/gui/main.c b/src/ui/gui/main.c
index a3d39461..05cc421b 100644
--- a/src/ui/gui/main.c
+++ b/src/ui/gui/main.c
@@ -15,19 +15,54 @@
along with this program. If not, see . */
#include
+#include
#include
#include "psppire.h"
#include "progname.h"
#include
-#include
+#include
+#include
+#include
+#include
#include
#include
-static gboolean parse_command_line (int *argc, char ***argv, gchar **filename,
- gboolean *show_splash, GError **err);
+#include "gettext.h"
+#define _(msgid) gettext (msgid)
+#define N_(msgid) msgid
+const char *argp_program_version = version;
+const char *argp_program_bug_address = PACKAGE_BUGREPORT;
+
+/* Arguments to be interpreted before the X server gets initialised */
+
+static const struct argp_option startup_options [] =
+ {
+ {"no-splash", 'q', 0, 0, N_("Don't show the splash screen"), 0 },
+ { 0, 0, 0, 0, 0, 0 }
+ };
+
+static error_t
+parse_startup_opts (int key, char *arg, struct argp_state *state)
+{
+ gboolean *showsplash = state->input;
+
+ switch (key)
+ {
+ case 'q':
+ *showsplash = FALSE;
+ break;
+ default:
+ return ARGP_ERR_UNKNOWN;
+ }
+ return 0;
+}
+
+static const struct argp startup_argp = {startup_options, parse_startup_opts, 0, 0, 0, 0, 0};
+
+
static GtkWidget *
create_splash_window (void)
@@ -45,7 +80,7 @@ create_splash_window (void)
gtk_window_set_type_hint (GTK_WINDOW (splash),
GDK_WINDOW_TYPE_HINT_SPLASHSCREEN);
- image = gtk_image_new_from_file (PKGDATADIR "/splash.png");
+ image = gtk_image_new_from_file (relocate (PKGDATADIR "/splash.png"));
gtk_container_add (GTK_CONTAINER (splash), image);
@@ -71,13 +106,22 @@ quit_one_loop (gpointer data)
return FALSE;
}
+struct initialisation_parameters
+{
+ int argc;
+ char **argv;
+ GtkWidget *splash_window;
+ struct command_line_processor *clp;
+};
+
static gboolean
run_inner_loop (gpointer data)
{
- initialize ();
+ struct initialisation_parameters *ip = data;
+ initialize (ip->clp, ip->argc, ip->argv);
- g_timeout_add (500, hide_splash_window, data);
+ g_timeout_add (500, hide_splash_window, ip->splash_window);
gtk_main ();
@@ -87,18 +131,32 @@ run_inner_loop (gpointer data)
}
+static GMemVTable vtable =
+ {
+ xmalloc,
+ xrealloc,
+ free,
+ xcalloc,
+ malloc,
+ realloc
+ };
int
main (int argc, char *argv[])
{
- GtkWidget *splash_window;
- gchar *filename = 0;
+ struct command_line_processor *clp ;
+ struct initialisation_parameters init_p;
gboolean show_splash = TRUE;
- GError *err = 0;
+
const gchar *vers;
set_program_name (argv[0]);
+ g_mem_set_vtable (&vtable);
+
+ gtk_disable_setlocale ();
+
+
if ( ! gtk_parse_args (&argc, &argv) )
{
perror ("Error parsing arguments");
@@ -109,78 +167,32 @@ main (int argc, char *argv[])
GTK_MINOR_VERSION,
GTK_MICRO_VERSION)) )
{
- g_critical (vers);
+ g_warning (vers);
}
- /* Deal with options like --version, --help etc */
- if ( ! parse_command_line (&argc, &argv, &filename, &show_splash, &err) )
- {
- g_clear_error (&err);
- return 0;
- }
+ clp = command_line_processor_create (_("PSPPIRE --- A user interface for PSPP"), "[ DATA-FILE ]", 0);
+
+ command_line_processor_add_options (clp, &startup_argp, _("Miscellaneous options:"), &show_splash);
+ command_line_processor_add_options (clp, &post_init_argp,
+ _("Options affecting syntax and behavior:"), NULL);
+ command_line_processor_add_options (clp, &non_option_argp, NULL, NULL);
+
+ command_line_processor_parse (clp, argc, argv);
gdk_init (&argc, &argv);
- splash_window = create_splash_window ();
+ init_p.splash_window = create_splash_window ();
+ init_p.argc = argc;
+ init_p.argv = argv;
+ init_p.clp = clp;
+
if ( show_splash )
- gtk_widget_show (splash_window);
+ gtk_widget_show (init_p.splash_window);
g_idle_add (quit_one_loop, 0);
- gtk_quit_add (0, run_inner_loop, splash_window);
+ gtk_quit_add (0, run_inner_loop, &init_p);
gtk_main ();
-
return 0;
}
-
-
-/* Parses the command line specified by ARGC and ARGV as received by
- main (). Returns true if normal execution should proceed,
- false if the command-line indicates that PSPP should exit. */
-static gboolean
-parse_command_line (int *argc, char ***argv, gchar **filename,
- gboolean *show_splash, GError **err)
-{
-
- static struct option long_options[] =
- {
- {"help", no_argument, NULL, 'h'},
- {"version", no_argument, NULL, 'V'},
- {"no-splash", no_argument, NULL, 'q'},
- {0, 0, 0, 0},
- };
-
- int c;
-
- for (;;)
- {
- c = getopt_long (*argc, *argv, "hVq", long_options, NULL);
- if (c == -1)
- break;
-
- switch (c)
- {
- case 'h':
- g_print ("Usage: psppire {|--help|--version|--no-splash}\n");
- return FALSE;
- case 'V':
- g_print (version);
- g_print ("\n");
- g_print (legal);
- return FALSE;
- case 'q':
- *show_splash = FALSE;
- break;
- default:
- return FALSE;
- }
- }
-
- if ( optind < *argc)
- {
- *filename = (*argv)[optind];
- }
-
- return TRUE;
-}