diff src/aim.c @ 1009:d496fe2614a6

[gaim-migrate @ 1019] command-line options for the app. not for the applet because most of the time you don't run it from the command line anyway. thanks bmiller committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Fri, 20 Oct 2000 00:35:30 +0000
parents 1d8f05ea6bdf
children 5bad25457843
line wrap: on
line diff
--- a/src/aim.c	Thu Oct 19 22:34:22 2000 +0000
+++ b/src/aim.c	Fri Oct 20 00:35:30 2000 +0000
@@ -53,6 +53,9 @@
 #endif
 #include "locale.h"
 #include "gtkticker.h"
+#ifndef USE_GNOME
+#include <getopt.h>
+#endif
 
 static GtkWidget *name;
 static GtkWidget *pass;
@@ -73,6 +76,7 @@
 char toc_addy[16];
 char *quad_addr = NULL;
 
+
 void cancel_logon(void)
 {
 #ifdef USE_APPLET
@@ -430,8 +434,39 @@
 }
 #endif
 
+
 int main(int argc, char *argv[])
 {
+	char opt, i;
+	int opt_acct = 0, opt_help = 0, opt_version = 0,
+	    opt_user = 0, opt_login = 0, do_login_ret = -1;
+	char *opt_user_arg = NULL, *opt_login_arg = NULL;
+
+#ifdef USE_GNOME
+	poptContext popt_context;
+	struct poptOption popt_options[] =
+	{
+		{"acct",    'a', POPT_ARG_NONE,   &opt_acct,     'a', 
+		 "Display account editor window", NULL},
+		{"login",   'l', POPT_ARG_STRING,   NULL,        'l',
+		 "Automatically login (optional argument NAME specifies account(s) to use)", "[NAME]"},
+		{"user",    'u', POPT_ARG_STRING, &opt_user_arg, 'u',
+		 "Use account NAME", "NAME"},
+		{0, 0, 0, 0, 0, 0, 0}
+	};
+#else
+	struct option long_options[] = 
+	{
+		{"acct",    no_argument,	 NULL, 'a'},
+		{"help",    no_argument,	 NULL, 'h'},
+		{"login",   optional_argument, NULL, 'l'},
+		{"user",    required_argument, NULL, 'u'}, 
+		{"version", no_argument,	 NULL, 'v'},
+		{0, 0, 0, 0}
+	};
+#endif /* USE_GNOME */
+
+
 #ifdef ENABLE_NLS
 	bindtextdomain(PACKAGE, LOCALEDIR);
 	textdomain(PACKAGE);
@@ -442,7 +477,84 @@
 	/* signal(SIGSEGV, sighandler); */
 #endif
 
-	if (argc > 1 && !strcmp(argv[1], "--version")) {
+
+#ifdef USE_APPLET
+        init_applet_mgr(argc, argv);
+#elif defined USE_GNOME
+	for (i = 0; i < argc; i++) {
+		/* --login option */
+		if (strstr (argv[i], "--l") == argv[i]) { 
+			char *equals;
+			opt_login = 1;
+			if ((equals = strchr(argv[i], '=')) != NULL) {
+				/* --login=NAME */
+				opt_login_arg = g_strdup (equals+1);
+			} else if (i+1 < argc && argv[i+1][0] != '-') { 
+				/* --login NAME */
+				opt_login_arg = g_strdup (argv[i+1]);
+				strcpy (argv[i+1], " ");
+			}
+			strcpy (argv[i], " ");
+		}
+		/* -l option */
+		else if (strstr (argv[i], "-l") == argv[i]) {
+			opt_login = 1;
+			if (strlen (argv[i]) > 2) {
+				/* -lNAME */
+				opt_login_arg = g_strdup (argv[i]+2);
+			} else if (i+1 < argc && argv[i+1][0] != '-') {
+				/* -l NAME */
+				opt_login_arg = g_strdup (argv[i+1]);
+				strcpy (argv[i+1], " ");
+			}
+			strcpy (argv[i], " ");
+		}
+	}	
+
+        gnome_init_with_popt_table(PACKAGE,VERSION,argc,argv,
+				   popt_options,0,NULL);
+#else
+        gtk_init(&argc, &argv);
+
+	/* scan command-line options */
+	opterr = 1;
+	while ((opt = getopt_long (argc, argv, /*"ahl::u:v"*/"ahl::u:v",
+				   long_options, NULL)) != -1) {
+		switch (opt) {
+		case 'u': /* set user */
+			opt_user = 1;
+			opt_user_arg = g_strdup (optarg);
+			break;
+		case 'l':
+			opt_login = 1;
+			opt_login_arg = g_strdup (optarg);
+			break;
+		case 'a': /* account editor */
+			opt_acct = 1;
+			break;
+		case 'v': /* version */
+			opt_version = 1;
+			break;
+		case 'h': /* help */
+			opt_help = 1;
+			break;
+		case '?':
+		default:
+			show_usage(1, argv[0]);
+			return 0;
+			break;
+		}
+	}
+
+#endif /* USE_GNOME */
+
+	/* show help message */
+	if (opt_help) {
+		show_usage(0, argv[0]);
+		return 0;
+	}
+	/* show version window */
+	if (opt_version) {
 		gtk_init(&argc, &argv);
 		set_defaults(FALSE); /* needed for open_url_nw */
 		load_prefs();
@@ -451,17 +563,19 @@
 		return 0;
 	}
 
-#ifdef USE_APPLET
-        init_applet_mgr(argc, argv);
-#elif defined USE_GNOME
-        gnome_init(PACKAGE,VERSION,argc,argv);
-#else
-        gtk_init(&argc, &argv);
-#endif /* USE_GNOME */
 
         set_defaults(FALSE);
         load_prefs();
 
+	/* set the default username */
+	if (opt_user_arg != NULL) {
+		set_first_user (opt_user_arg);
+#ifndef USE_GNOME
+		g_free (opt_user_arg);
+		opt_user_arg = NULL;
+#endif /* USE_GNOME */
+	}
+
 	if (general_options & OPT_GEN_DEBUG)
 		show_debug(NULL);
 
@@ -471,9 +585,19 @@
 	perl_init();
 	perl_autoload();
 #endif
+	static_proto_init();
 
-	static_proto_init();
-	auto_login();
+	/* deal with --login */
+	if (opt_login) {
+		do_login_ret = do_auto_login (opt_login_arg);
+		if (opt_login_arg != NULL) {
+			g_free (opt_login_arg);
+			opt_login_arg = NULL;
+		}
+	}
+
+	if (!opt_acct)
+		auto_login();
 
 #ifdef USE_APPLET
 	applet_widget_register_callback(APPLET_WIDGET(applet),
@@ -499,7 +623,10 @@
 	applet_widget_gtk_main();
 #else
 
-        show_login();
+	if (opt_acct) {
+		account_editor (NULL, NULL);
+	} else if (do_login_ret == -1)
+		show_login();
         gtk_main();
         
 #endif /* USE_APPLET */