- use getopt for command line parameters
- add --launch parameter, syntax subject to modification git-svn-id: http://svn.code.sf.net/p/xqf/code/trunk@501 d2ac09be-c843-0410-8b1f-f8a84130e0ec
This commit is contained in:
parent
9584a3c322
commit
814189f4b5
@ -1,3 +1,7 @@
|
|||||||
|
Aug 10, 2003: Ludwig Nussel <l-n@users.sourceforge.net>
|
||||||
|
- use getopt for command line parameters
|
||||||
|
- add --launch parameter, syntax subject to modification
|
||||||
|
|
||||||
Aug 03, 2003: Ludwig Nussel <l-n@users.sourceforge.net>
|
Aug 03, 2003: Ludwig Nussel <l-n@users.sourceforge.net>
|
||||||
- Fix default ping value when reading server filters
|
- Fix default ping value when reading server filters
|
||||||
|
|
||||||
|
739
xqf/po/de.po
739
xqf/po/de.po
File diff suppressed because it is too large
Load Diff
@ -366,6 +366,9 @@ struct condef *condef_new (struct server *s) {
|
|||||||
|
|
||||||
|
|
||||||
void condef_free (struct condef *con) {
|
void condef_free (struct condef *con) {
|
||||||
|
|
||||||
|
g_return_if_fail(con!=NULL);
|
||||||
|
|
||||||
if (con->s)
|
if (con->s)
|
||||||
server_unref (con->s);
|
server_unref (con->s);
|
||||||
|
|
||||||
|
@ -4617,7 +4617,7 @@ int fix_qw_player_color (int color) {
|
|||||||
|
|
||||||
int init_user_info (void) {
|
int init_user_info (void) {
|
||||||
if (!g_get_user_name () || !g_get_home_dir () || !g_get_tmp_dir ()) {
|
if (!g_get_user_name () || !g_get_home_dir () || !g_get_tmp_dir ()) {
|
||||||
fprintf (stderr, _("Unable to get user name/home/tmpdir\n"));
|
xqf_error(_("Unable to get user name/home/tmpdir"));
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
user_rcdir = file_in_dir (g_get_home_dir (), RC_DIR);
|
user_rcdir = file_in_dir (g_get_home_dir (), RC_DIR);
|
||||||
|
@ -59,7 +59,7 @@ static int failed (char *name, char *arg) {
|
|||||||
fprintf (stderr, "%s(%s) failed: %s\n", name, (arg)? arg : "",
|
fprintf (stderr, "%s(%s) failed: %s\n", name, (arg)? arg : "",
|
||||||
g_strerror (errno));
|
g_strerror (errno));
|
||||||
|
|
||||||
debug (0, "%s(%s) failed: %s\n", name, (arg)? arg : "", g_strerror (errno));
|
xqf_error("%s(%s) failed: %s\n", name, (arg)? arg : "", g_strerror (errno));
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@ -1506,7 +1506,6 @@ static void move_q2masters_to_top (GSList **list) {
|
|||||||
*list = g_slist_concat (q2masters, *list);
|
*list = g_slist_concat (q2masters, *list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void stat_next (struct stat_job *job) {
|
static void stat_next (struct stat_job *job) {
|
||||||
GSList *list;
|
GSList *list;
|
||||||
GSList *tmp;
|
GSList *tmp;
|
||||||
@ -1607,7 +1606,7 @@ static void stat_next (struct stat_job *job) {
|
|||||||
if (!stat_open_conn_qstat (job)) {
|
if (!stat_open_conn_qstat (job)) {
|
||||||
|
|
||||||
/* It's very bad, stop everything. */
|
/* It's very bad, stop everything. */
|
||||||
debug (0, "Error! Could not stat_open_conn_qstat()");
|
xqf_error ("Error! Could not stat_open_conn_qstat()");
|
||||||
stat_close (job, TRUE);
|
stat_close (job, TRUE);
|
||||||
}
|
}
|
||||||
debug_decrease_indent();
|
debug_decrease_indent();
|
||||||
|
206
xqf/src/xqf.c
206
xqf/src/xqf.c
@ -27,6 +27,7 @@
|
|||||||
#include <time.h> /* time */
|
#include <time.h> /* time */
|
||||||
#include <string.h> /* strlen */
|
#include <string.h> /* strlen */
|
||||||
#include <ctype.h> /* isspace */
|
#include <ctype.h> /* isspace */
|
||||||
|
#include <getopt.h>
|
||||||
|
|
||||||
// select, fork, pipe ...
|
// select, fork, pipe ...
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
@ -283,13 +284,13 @@ int start_prog_and_return_fd(char *const argv[], pid_t *pid)
|
|||||||
|
|
||||||
if (pipe (pipefds) < 0)
|
if (pipe (pipefds) < 0)
|
||||||
{
|
{
|
||||||
debug(0,"start_prog_and_return_fd -- error creating pipe: %s",strerror(errno));
|
xqf_error("start_prog_and_return_fd -- error creating pipe: %s",strerror(errno));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
*pid = fork();
|
*pid = fork();
|
||||||
if (*pid < (pid_t) 0)
|
if (*pid < (pid_t) 0)
|
||||||
{
|
{
|
||||||
debug(0,"start_prog_and_return_fd -- fork failed: %s",strerror(errno));
|
xqf_error("start_prog_and_return_fd -- fork failed: %s",strerror(errno));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -306,7 +307,7 @@ int start_prog_and_return_fd(char *const argv[], pid_t *pid)
|
|||||||
|
|
||||||
execvp (argv[0], argv);
|
execvp (argv[0], argv);
|
||||||
|
|
||||||
debug(0,"start_prog_and_return_fd -- failed to exec %s: %s",argv[0],strerror(errno));
|
xqf_error("start_prog_and_return_fd -- failed to exec %s: %s",argv[0],strerror(errno));
|
||||||
|
|
||||||
_exit (1);
|
_exit (1);
|
||||||
}
|
}
|
||||||
@ -344,7 +345,7 @@ int check_qstat_version( const char* version )
|
|||||||
flags = fcntl (fd, F_GETFL, 0);
|
flags = fcntl (fd, F_GETFL, 0);
|
||||||
if (flags < 0 || fcntl (fd, F_SETFL, flags | O_NONBLOCK) < 0)
|
if (flags < 0 || fcntl (fd, F_SETFL, flags | O_NONBLOCK) < 0)
|
||||||
{
|
{
|
||||||
debug(0,"fcntl failed: %s", strerror(errno));
|
xqf_error("fcntl failed: %s", strerror(errno));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -359,7 +360,7 @@ int check_qstat_version( const char* version )
|
|||||||
|
|
||||||
if (!retval)
|
if (!retval)
|
||||||
{
|
{
|
||||||
debug(0,"check_qstat_version -- No data within two seconds.");
|
xqf_error("check_qstat_version -- No data within two seconds.");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -368,13 +369,13 @@ int check_qstat_version( const char* version )
|
|||||||
// read error
|
// read error
|
||||||
if (read_ret < 0)
|
if (read_ret < 0)
|
||||||
{
|
{
|
||||||
debug(0,"check_qstat_version -- read failed: %s", strerror(errno));
|
xqf_error("check_qstat_version -- read failed: %s", strerror(errno));
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
// read hasn't read anything
|
// read hasn't read anything
|
||||||
else if(read_ret == 0)
|
else if(read_ret == 0)
|
||||||
{
|
{
|
||||||
debug(0,"check_qstat_version -- didn't read anything");
|
xqf_error("check_qstat_version -- didn't read anything");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -703,7 +704,7 @@ void set_server_filter_menu_list_text( void ){
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
snprintf( status_buf, 64, _("Server Filter: %d"), current_server_filter );
|
snprintf( status_buf, 64, _("Server Filter: %d"), current_server_filter );
|
||||||
debug(0,"this is a bug");
|
xqf_error("this is a bug");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -998,7 +999,6 @@ static gboolean check_launch (struct condef* con)
|
|||||||
struct server *s;
|
struct server *s;
|
||||||
int reserved_slots;
|
int reserved_slots;
|
||||||
|
|
||||||
|
|
||||||
if (!con)
|
if (!con)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
@ -1243,7 +1243,7 @@ static void launch_close_handler_part2(struct condef *con)
|
|||||||
launchargv[2] = g_strdup_printf("%s:%d", inet_ntoa (s->host->ip), s->port);
|
launchargv[2] = g_strdup_printf("%s:%d", inet_ntoa (s->host->ip), s->port);
|
||||||
launchargv[3] = NULL;
|
launchargv[3] = NULL;
|
||||||
execv(launchargv[0],launchargv);
|
execv(launchargv[0],launchargv);
|
||||||
debug(0,"PreLaunch failed");
|
xqf_error("PreLaunch failed");
|
||||||
_exit(EXIT_FAILURE);
|
_exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1265,6 +1265,13 @@ static void launch_server_handler (struct stat_job *job, struct server *s) {
|
|||||||
srvinf_ctree_set_server (s);
|
srvinf_ctree_set_server (s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// no connection defined, maybe because of a hostname instead of ip specified
|
||||||
|
// on command line. just take first server to launch
|
||||||
|
if(!job->data)
|
||||||
|
{
|
||||||
|
job->data = condef_new (s);
|
||||||
|
}
|
||||||
|
|
||||||
/* Don't spend time on host name lookups */
|
/* Don't spend time on host name lookups */
|
||||||
|
|
||||||
if (job->hosts) {
|
if (job->hosts) {
|
||||||
@ -1491,11 +1498,11 @@ static void add_to_favorites_callback (GtkWidget *widget, gpointer data) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// add a server to favorites
|
||||||
static void add_server_real (struct stat_job *job, struct server *s) {
|
static void new_server_to_favorites (struct stat_job *job, struct server *s) {
|
||||||
int row;
|
int row;
|
||||||
|
|
||||||
debug (6, "add_server_real() -- Server %lx", s);
|
debug (6, "Server %lx, job %p", s, job);
|
||||||
favorites->servers = server_list_append (favorites->servers, s);
|
favorites->servers = server_list_append (favorites->servers, s);
|
||||||
save_favorites ();
|
save_favorites ();
|
||||||
|
|
||||||
@ -1518,7 +1525,7 @@ static void add_server_real (struct stat_job *job, struct server *s) {
|
|||||||
static void add_server_name_handler (struct stat_job *job, struct userver *us,
|
static void add_server_name_handler (struct stat_job *job, struct userver *us,
|
||||||
enum dns_status status) {
|
enum dns_status status) {
|
||||||
if (us->s) {
|
if (us->s) {
|
||||||
add_server_real (job, us->s);
|
new_server_to_favorites (job, us->s);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
progress_bar_reset (main_progress_bar);
|
progress_bar_reset (main_progress_bar);
|
||||||
@ -1526,28 +1533,18 @@ static void add_server_name_handler (struct stat_job *job, struct userver *us,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** check specified address is valid, resolve hostname if needed, stat server,
|
||||||
static void add_server_callback (GtkWidget *widget, gpointer data) {
|
* finally call new_server_to_favorites
|
||||||
char *str;
|
* calls free(str)!!!
|
||||||
|
*/
|
||||||
|
static void prepare_new_server_to_favorites(enum server_type type, char* str, gboolean dolaunch)
|
||||||
|
{
|
||||||
char *addr;
|
char *addr;
|
||||||
unsigned short port;
|
unsigned short port;
|
||||||
struct host *h;
|
struct host *h;
|
||||||
struct server *s = NULL;
|
struct server *s = NULL;
|
||||||
struct userver *us = NULL;
|
struct userver *us = NULL;
|
||||||
enum server_type type;
|
|
||||||
|
|
||||||
debug (6, "add_server_callback() -- ");
|
|
||||||
|
|
||||||
if (stat_process)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// FIXME:
|
|
||||||
// Set type to 0 - what was is supposed to pass? The last server type selected in the server list???
|
|
||||||
// Alex - 10/14/2002
|
|
||||||
type = 0;
|
|
||||||
|
|
||||||
str = add_server_dialog (&type);
|
|
||||||
// str = add_server_dialog (0);
|
|
||||||
if (!str || !*str)
|
if (!str || !*str)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -1564,7 +1561,7 @@ static void add_server_callback (GtkWidget *widget, gpointer data) {
|
|||||||
host_ref (h);
|
host_ref (h);
|
||||||
s = server_add (h, port, type);
|
s = server_add (h, port, type);
|
||||||
if (s)
|
if (s)
|
||||||
add_server_real (NULL, s);
|
new_server_to_favorites (NULL, s);
|
||||||
host_unref (h);
|
host_unref (h);
|
||||||
}
|
}
|
||||||
else { /* hostname */
|
else { /* hostname */
|
||||||
@ -1584,17 +1581,45 @@ static void add_server_callback (GtkWidget *widget, gpointer data) {
|
|||||||
stat_process->close_handlers = g_slist_prepend (
|
stat_process->close_handlers = g_slist_prepend (
|
||||||
stat_process->close_handlers, stat_lists_close_handler);
|
stat_process->close_handlers, stat_lists_close_handler);
|
||||||
|
|
||||||
stat_process->server_handlers = g_slist_append (
|
// stat_process->server_handlers = g_slist_append (
|
||||||
stat_process->server_handlers, stat_lists_server_handler);
|
// stat_process->server_handlers, stat_lists_server_handler);
|
||||||
|
|
||||||
stat_process->name_handlers = g_slist_prepend (
|
stat_process->name_handlers = g_slist_prepend (
|
||||||
stat_process->name_handlers, add_server_name_handler);
|
stat_process->name_handlers, add_server_name_handler);
|
||||||
|
|
||||||
|
if(dolaunch)
|
||||||
|
{
|
||||||
|
if(s)
|
||||||
|
{
|
||||||
|
struct condef* con = condef_new (s);
|
||||||
|
stat_process->data = con;
|
||||||
|
}
|
||||||
|
|
||||||
|
stat_process->server_handlers = g_slist_append (
|
||||||
|
stat_process->server_handlers, launch_server_handler);
|
||||||
|
|
||||||
|
stat_process->close_handlers = g_slist_append (
|
||||||
|
stat_process->close_handlers, launch_close_handler);
|
||||||
|
}
|
||||||
|
|
||||||
stat_start (stat_process);
|
stat_start (stat_process);
|
||||||
set_widgets_sensitivity ();
|
set_widgets_sensitivity ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void add_server_callback (GtkWidget *widget, gpointer data) {
|
||||||
|
char *str = NULL;
|
||||||
|
enum server_type type = 0;
|
||||||
|
|
||||||
|
if (stat_process)
|
||||||
|
return;
|
||||||
|
|
||||||
|
str = add_server_dialog (&type);
|
||||||
|
|
||||||
|
prepare_new_server_to_favorites(type, str, FALSE);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
static void del_server_callback (GtkWidget *widget, gpointer data) {
|
static void del_server_callback (GtkWidget *widget, gpointer data) {
|
||||||
GSList *list;
|
GSList *list;
|
||||||
@ -3502,13 +3527,98 @@ void play_sound (const char *sound, const int override)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void cmdlinehelp()
|
||||||
|
{
|
||||||
|
puts("XQF Version " PACKAGE_VERSION);
|
||||||
|
puts(_(
|
||||||
|
"Usage:\n"
|
||||||
|
"\txqf [OPTIONS]\n"
|
||||||
|
"\n"
|
||||||
|
"OPTIONS:\n"
|
||||||
|
"\t--launch \"SERVERTYPE IP\"\tlaunch game on specified server\n"
|
||||||
|
"\t--debug <level>\t\t\tset debug level\n"
|
||||||
|
"\t--version\t\t\tprint version and exit\n"));
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static char* cmdline_launch = NULL;
|
||||||
|
gboolean check_cmdline_launch(gpointer nothing)
|
||||||
|
{
|
||||||
|
char* token[2] = {0};
|
||||||
|
enum server_type type;
|
||||||
|
if(!cmdline_launch) return FALSE;
|
||||||
|
if(tokenize_bychar(cmdline_launch, token, 2, ' ') != 2)
|
||||||
|
{
|
||||||
|
dialog_ok(NULL,"Invalid server specification: %s",cmdline_launch);
|
||||||
|
g_free(cmdline_launch);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
type = id2type(token[0]);
|
||||||
|
if(type == UNKNOWN_SERVER)
|
||||||
|
{
|
||||||
|
dialog_ok(NULL,"Invalid server specification: %s",token[0]);
|
||||||
|
g_free(cmdline_launch);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
prepare_new_server_to_favorites(type,g_strdup(token[1]), TRUE);
|
||||||
|
|
||||||
|
g_free(cmdline_launch);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct option long_options[] =
|
||||||
|
{
|
||||||
|
{"launch", 1, 0, 'l'},
|
||||||
|
{"debug", 1, 0, 'd'},
|
||||||
|
{"version", 0, 0, 'v'},
|
||||||
|
{"help", 0, 0, 'h'},
|
||||||
|
{0, 0, 0, 0}
|
||||||
|
};
|
||||||
|
|
||||||
|
static void parse_commandline(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
char c;
|
||||||
|
int option_index = 0;
|
||||||
|
|
||||||
|
c = getopt_long (argc, argv, "d:l:h", long_options, &option_index);
|
||||||
|
if (c == -1)
|
||||||
|
break;
|
||||||
|
|
||||||
|
switch(c)
|
||||||
|
{
|
||||||
|
case 'd':
|
||||||
|
set_debug_level(atoi(optarg));
|
||||||
|
break;
|
||||||
|
case 'l':
|
||||||
|
cmdline_launch = strdup(optarg);
|
||||||
|
break;
|
||||||
|
case 'h':
|
||||||
|
cmdlinehelp();
|
||||||
|
break;
|
||||||
|
case 'v':
|
||||||
|
puts("XQF Version " PACKAGE_VERSION);
|
||||||
|
exit(0);
|
||||||
|
break;
|
||||||
|
case '?':
|
||||||
|
case ':':
|
||||||
|
exit(1);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
xqf_warning("getopt error, starting anyway ...");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int main (int argc, char *argv[]) {
|
int main (int argc, char *argv[]) {
|
||||||
char *gtk_config;
|
char *gtk_config;
|
||||||
int newversion = FALSE;
|
int newversion = FALSE;
|
||||||
char required_qstat_version[]="2.4e";
|
char required_qstat_version[]="2.4e";
|
||||||
|
|
||||||
int i,j; /* For parsing the command line. */
|
|
||||||
|
|
||||||
xqf_start_time = time (NULL);
|
xqf_start_time = time (NULL);
|
||||||
|
|
||||||
redialserver=0;
|
redialserver=0;
|
||||||
@ -3527,7 +3637,7 @@ int main (int argc, char *argv[]) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (dns_spawn_helper () < 0) {
|
if (dns_spawn_helper () < 0) {
|
||||||
fprintf (stderr, "Unable to start DNS helper\n");
|
xqf_error ("Unable to start DNS helper");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3537,25 +3647,7 @@ int main (int argc, char *argv[]) {
|
|||||||
|
|
||||||
gtk_init (&argc, &argv);
|
gtk_init (&argc, &argv);
|
||||||
|
|
||||||
/* Parse the command line. Really should use getops lib
|
parse_commandline(argc,argv);
|
||||||
but we only have one option right now. Start
|
|
||||||
at pos. 1 since location 0 has the program name. */
|
|
||||||
for (i = 1; i < argc; i++ ) {
|
|
||||||
if (strcmp (argv[i], "-d") == 0){
|
|
||||||
if ((i+1) < argc ) {
|
|
||||||
j = atoi (argv[i+1]);
|
|
||||||
if (j) i++;
|
|
||||||
else j = 1; /* In case it was not a number. */
|
|
||||||
|
|
||||||
} else {
|
|
||||||
j = 1;
|
|
||||||
}
|
|
||||||
set_debug_level (j);
|
|
||||||
debug( 1, "main() -- Debug level set to %d", get_debug_level());
|
|
||||||
} else {
|
|
||||||
fprintf (stderr, "main() -- Unknown Option '%s' (only -d N is valid, N>5 == Lots of output)\n", argv[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
add_pixmap_directory (PACKAGE_DATA_DIR "/pixmaps");
|
add_pixmap_directory (PACKAGE_DATA_DIR "/pixmaps");
|
||||||
|
|
||||||
@ -3602,7 +3694,7 @@ int main (int argc, char *argv[]) {
|
|||||||
|
|
||||||
print_status (main_status_bar, NULL);
|
print_status (main_status_bar, NULL);
|
||||||
|
|
||||||
if (default_auto_favorites)
|
if (default_auto_favorites && !cmdline_launch)
|
||||||
refresh_callback (NULL, NULL);
|
refresh_callback (NULL, NULL);
|
||||||
|
|
||||||
if(check_qstat_version(required_qstat_version) == FALSE)
|
if(check_qstat_version(required_qstat_version) == FALSE)
|
||||||
@ -3616,6 +3708,8 @@ int main (int argc, char *argv[]) {
|
|||||||
|
|
||||||
destroy_splashscreen();
|
destroy_splashscreen();
|
||||||
|
|
||||||
|
g_timeout_add(0, check_cmdline_launch, NULL);
|
||||||
|
|
||||||
gtk_main ();
|
gtk_main ();
|
||||||
|
|
||||||
play_sound(sound_xqf_quit, 0);
|
play_sound(sound_xqf_quit, 0);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user