improved command-line argument handling

This commit is contained in:
berkeviktor@aol.com 2011-01-08 09:56:33 +01:00
parent a98b333a4d
commit 304136efae
1 changed files with 81 additions and 25 deletions

View File

@ -965,7 +965,7 @@ diff -ruN --strip-trailing-cr xchat-wdk.orig/src/fe-gtk/editlist.c xchat-wdk/src
#include <sys/stat.h>
diff -ruN --strip-trailing-cr xchat-wdk.orig/src/fe-gtk/fe-gtk.c xchat-wdk/src/fe-gtk/fe-gtk.c
--- xchat-wdk.orig/src/fe-gtk/fe-gtk.c 2010-08-14 03:46:21 +0200
+++ xchat-wdk/src/fe-gtk/fe-gtk.c 2010-12-31 05:23:47 +0100
+++ xchat-wdk/src/fe-gtk/fe-gtk.c 2011-01-08 09:54:34 +0100
@@ -19,7 +19,6 @@
#include <stdio.h>
#include <string.h>
@ -991,41 +991,94 @@ diff -ruN --strip-trailing-cr xchat-wdk.orig/src/fe-gtk/fe-gtk.c xchat-wdk/src/f
#include "gtkutil.h"
#include "maingui.h"
#include "pixmaps.h"
@@ -141,6 +143,9 @@
@@ -136,11 +138,26 @@
{NULL}
};
+#ifdef WIN32
+static void
+create_msg_dialog (gchar *title, gchar *message)
+{
+ GtkWidget *dialog;
+ dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, message);
+ gtk_window_set_title (GTK_WINDOW (dialog), title);
+ gtk_dialog_run (GTK_DIALOG (dialog));
+ gtk_widget_destroy (dialog);
+}
+#endif
+
int
fe_args (int argc, char *argv[])
{
GError *error = NULL;
GOptionContext *context;
+#ifdef WIN32
+ char buffer[512];
+ char *buffer[2048];
+#endif
#ifdef ENABLE_NLS
bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
@@ -156,7 +161,16 @@
@@ -149,22 +166,67 @@
#endif
context = g_option_context_new (NULL);
+#ifdef WIN32
+ g_option_context_set_help_enabled (context, FALSE); /* disable stdout help as stdout is unavailable for subsystem:windows */
+#endif
g_option_context_add_main_entries (context, gopt_entries, GETTEXT_PACKAGE);
g_option_context_add_group (context, gtk_get_option_group (FALSE));
g_option_context_parse (context, &argc, &argv, &error);
+#ifdef WIN32
+ if (error) /* workaround for argv not being available when using subsystem:windows */
+ {
+ if (error->message) /* the error message contains argv so search for patterns in that */
+ {
+ if (strstr (error->message, "--help-all") != NULL)
+ {
+ if (snprintf (buffer, 2048, g_option_context_get_help (context, FALSE, NULL)))
+ {
+ gtk_init (&argc, &argv);
+ create_msg_dialog ("Long Help", buffer);
+ }
+ return 0;
+ } else if (strstr (error->message, "--help") != NULL || strstr (error->message, "-?") != NULL)
+ {
+ if (snprintf (buffer, 2048, g_option_context_get_help (context, TRUE, NULL)))
+ {
+ gtk_init (&argc, &argv);
+ create_msg_dialog ("Help", buffer);
+ }
+ return 0;
+ } else
+ {
+ if (snprintf (buffer, 2048, "%s\n", error->message))
+ {
+ gtk_init (&argc, &argv);
+ create_msg_dialog ("Error", buffer);
+ }
+ return 1;
+ }
+ }
+ }
+#else
if (error)
{
if (error->message)
+ {
+#ifdef WIN32
+ if (snprintf (buffer, 512, "%s\n", error->message))
+ {
+ MessageBox (NULL, buffer, "Error", MB_OK);
+ }
+#else
printf ("%s\n", error->message);
+#endif
+ }
return 1;
}
+#endif
@@ -164,7 +178,14 @@
g_option_context_free (context);
if (arg_show_version)
{
+#ifdef WIN32
+ if (snprintf (buffer, 512, DISPLAY_NAME" "PACKAGE_VERSION"\n"))
+ if (snprintf (buffer, 2048, DISPLAY_NAME" "PACKAGE_VERSION"\n"))
+ {
+ MessageBox (NULL, buffer, "Version Information", MB_OK);
+ gtk_init (&argc, &argv);
+ create_msg_dialog ("Version Information", buffer);
+ }
+#else
printf (PACKAGE_TARNAME" "PACKAGE_VERSION"\n");
@ -1033,32 +1086,35 @@ diff -ruN --strip-trailing-cr xchat-wdk.orig/src/fe-gtk/fe-gtk.c xchat-wdk/src/f
return 0;
}
@@ -177,7 +198,16 @@
@@ -177,7 +239,18 @@
if (sl)
{
*sl = 0;
- printf ("%s\\plugins\n", exe);
+ if (snprintf (buffer, 512, "%s\\plugins\n", exe))
+ if (snprintf (buffer, 2048, "%s\\plugins\n", exe))
+ {
+ MessageBox (NULL, buffer, "Plugin Auto-load Directory", MB_OK);
+ gtk_init (&argc, &argv);
+ create_msg_dialog ("Plugin Auto-load Directory", buffer);
+ }
+ } else
+ {
+ if (snprintf (buffer, 512, ".\\plugins\n"))
+ if (snprintf (buffer, 2048, ".\\plugins\n"))
+ {
+ MessageBox (NULL, buffer, "Plugin Auto-load Directory", MB_OK);
+ gtk_init (&argc, &argv);
+ create_msg_dialog ("Plugin Auto-load Directory", buffer);
+ }
}
#else
printf ("%s\n", XCHATLIBDIR"/plugins");
@@ -187,7 +217,14 @@
@@ -187,7 +260,15 @@
if (arg_show_config)
{
+#ifdef WIN32
+ if (snprintf (buffer, 512, "%s\n", get_xdir_fs ()))
+ if (snprintf (buffer, 2048, "%s\n", get_xdir_fs ()))
+ {
+ MessageBox (NULL, buffer, "User Config Directory", MB_OK);
+ gtk_init (&argc, &argv);
+ create_msg_dialog ("User Config Directory", buffer);
+ }
+#else
printf ("%s\n", get_xdir_fs ());
@ -1066,7 +1122,7 @@ diff -ruN --strip-trailing-cr xchat-wdk.orig/src/fe-gtk/fe-gtk.c xchat-wdk/src/f
return 0;
}
@@ -330,7 +367,7 @@
@@ -330,7 +411,7 @@
{
session *sess;