tGNU long command line options now supported on platforms that have getopt_long - vaccinewars - be a doctor and try to vaccinate the world (HTM) git clone git://src.adamsgaard.dk/vaccinewars (DIR) Log (DIR) Files (DIR) Refs (DIR) README (DIR) LICENSE --- (DIR) commit a18abcdeb0cc04a32cadd7ba529e35dab4e829ae (DIR) parent 3da714467e1f8a8015bb3df74212ea8c6ab3dbc3 (HTM) Author: Ben Webb <ben@salilab.org> Date: Thu, 13 Sep 2001 16:27:56 +0000 GNU long command line options now supported on platforms that have getopt_long Diffstat: M ChangeLog | 1 + M config.h.in | 3 +++ M configure | 2 +- M configure.in | 2 +- M src/dopewars.c | 73 ++++++++++++++++++++++++++++++- 5 files changed, 77 insertions(+), 4 deletions(-) --- (DIR) diff --git a/ChangeLog b/ChangeLog t@@ -8,6 +8,7 @@ cvs identify them, and so the -f option cannot be used to force setgid-games dopewars to overwrite random files writeable by group "games" - use the -C option to convert old high score files to the new format + - GNU long command line options now accepted on platforms with getopt_long 1.5.1 19-06-2001 - Improved logging in server via. LogLevel and LogTimestamp variables (DIR) diff --git a/config.h.in b/config.h.in t@@ -105,6 +105,9 @@ /* Define if you have the gethostbyname function. */ #undef HAVE_GETHOSTBYNAME +/* Define if you have the getopt_long function. */ +#undef HAVE_GETOPT_LONG + /* Define if you have the getpagesize function. */ #undef HAVE_GETPAGESIZE (DIR) diff --git a/configure b/configure t@@ -4486,7 +4486,7 @@ fi fi -for ac_func in strdup strstr +for ac_func in strdup strstr getopt_long do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:4493: checking for $ac_func" >&5 (DIR) diff --git a/configure.in b/configure.in t@@ -156,7 +156,7 @@ dnl Checks for library functions. AC_FUNC_MEMCMP AC_FUNC_SETVBUF_REVERSED AC_FUNC_STRFTIME -AC_CHECK_FUNCS(strdup strstr) +AC_CHECK_FUNCS(strdup strstr getopt_long) dnl Enable networking by default under Win32, but on Unix systems dnl make it dependent on the availability of select and socket (DIR) diff --git a/src/dopewars.c b/src/dopewars.c t@@ -18,6 +18,8 @@ /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, */ /* MA 02111-1307, USA. */ +#define _GNU_SOURCE + #ifdef HAVE_CONFIG_H #include <config.h> #endif t@@ -31,6 +33,9 @@ #ifdef HAVE_UNISTD_H #include <unistd.h> #endif +#ifdef HAVE_GETOPT_LONG +#include <getopt.h> +#endif #include <string.h> #include <errno.h> #include <signal.h> t@@ -1692,7 +1697,43 @@ void HandleHelpTexts() { if (!WantHelp) return; g_print( -/* Usage information, printed when the user runs "dopewars -h" */ +#ifdef HAVE_GETOPT_LONG +/* Usage information, printed when the user runs "dopewars -h" (version + with support for GNU long options) */ +_("Usage: dopewars [OPTION]...\n\ +Drug dealing game based on \"Drug Wars\" by John E. Dell\n\ + -b, --no-color, \"black and white\" - i.e. do not use pretty colours\n\ + --no-colour (by default colours are used where available)\n\ + -n, --single-player be boring and don't connect to any available dopewars\n\ + servers (i.e. single player mode)\n\ + -a, --antique \"antique\" dopewars - keep as closely to the original\n\ + version as possible (no networking)\n\ + -f, --scorefile=FILE specify a file to use as the high score table (by\n\ + default %s/dopewars.sco is used)\n\ + -o, --hostname=ADDR specify a hostname where the server for multiplayer\n\ + dopewars can be found\n\ + -s, --public-server run in server mode (note: for a \"non-interactive\"\n\ + server, simply run as\n\ + dopewars -s < /dev/null >> logfile & )\n\ + -S, --private-server run a \"private\" server (do not notify the metaserver)\n\ + -p, --port=PORT specify the network port to use (default: 7902)\n\ + -g, --config-file=FILE specify the pathname of a dopewars configuration file.\n\ + This file is read immediately when the -g option\n\ + is encountered\n\ + -r, --pidfile=FILE maintain pid file \"file\" while running the server\n\ + -c, --ai-player create and run a computer player\n\ + -w, --windowed-client force the use of a graphical (windowed)\n\ + client (GTK+ or Win32)\n\ + -t, --text-client force the use of a text-mode client (curses) (by\n\ + default, a windowed client is used when possible)\n\ + -C, --convert=FILE convert an \"old format\" score file to the new format\n\ + -h, --help display this help information\n\ + -v, --version output version information and exit\n\n\ +dopewars is Copyright (C) Ben Webb 1998-2001, and released under the GNU GPL\n\ +Report bugs to the author at ben@bellatrix.pcl.ox.ac.uk\n"),DATADIR); +#else +/* Usage information, printed when the user runs "dopewars -h" (short + options only version) */ _("Usage: dopewars [OPTION]...\n\ Drug dealing game based on \"Drug Wars\" by John E. Dell\n\ -b \"black and white\" - i.e. do not use pretty colours\n\ t@@ -1721,13 +1762,41 @@ Drug dealing game based on \"Drug Wars\" by John E. Dell\n\ -v output version information and exit\n\n\ dopewars is Copyright (C) Ben Webb 1998-2001, and released under the GNU GPL\n\ Report bugs to the author at ben@bellatrix.pcl.ox.ac.uk\n"),DATADIR); +#endif } void HandleCmdLine(int argc,char *argv[]) { int c; + static const gchar *options = "anbchvf:o:sSp:g:r:wtC:"; +#ifdef HAVE_GETOPT_LONG + static const struct option long_options[] = { + { "no-color", no_argument, NULL, 'b' }, + { "no-colour", no_argument, NULL, 'b' }, + { "single-player", no_argument, NULL, 'n' }, + { "antique", no_argument, NULL, 'a' }, + { "scorefile", required_argument, NULL, 'f' }, + { "hostname", required_argument, NULL, 'o' }, + { "public-server", no_argument, NULL, 's' }, + { "private-server", no_argument, NULL, 'S' }, + { "port", required_argument, NULL, 'p' }, + { "configfile", required_argument, NULL, 'g' }, + { "pidfile", required_argument, NULL, 'r' }, + { "ai-player", no_argument, NULL, 'c' }, + { "windowed-client", no_argument, NULL, 'w' }, + { "text-client", no_argument, NULL, 't' }, + { "convert", required_argument, NULL, 'C' }, + { "help", no_argument, NULL, 'h' }, + { "version", no_argument, NULL, 'v' }, + { 0, 0, 0, 0 } + }; +#endif while (1) { - c=getopt(argc,argv,"anbchvf:o:sSp:g:r:wtC:"); +#ifdef HAVE_GETOPT_LONG + c=getopt_long(argc,argv,options,long_options,NULL); +#else + c=getopt(argc,argv,options); +#endif if (c==-1) break; switch(c) { case 'n': WantNetwork=FALSE; break;