move junk around, genericize things

git-svn-id: svn://katsu.triplehelix.org/dgamelaunch/trunk@287 db0b04b0-f4d1-0310-9a6d-de3e77497b0e
This commit is contained in:
Joshua Kwan 2004-04-03 19:27:42 +00:00
parent 61c7349a86
commit 4d45d4d263
11 changed files with 37 additions and 23 deletions

View File

@ -6,6 +6,8 @@
lost games. Note this must be explicitly configured in the lost games. Note this must be explicitly configured in the
configuration file. configuration file.
* Added ^W for delete word in mygetnstr(). * Added ^W for delete word in mygetnstr().
* Begun generalization of code so that someone can get it to work
with stuff like Slash'EM etc. easier.
1.4.4 (2004/03/07) 1.4.4 (2004/03/07)
* Show total number of games in progress below the list, useful if * Show total number of games in progress below the list, useful if

View File

@ -58,7 +58,8 @@ COMMENT ^#.*
"maxusers" { return TYPE_MAX; } "maxusers" { return TYPE_MAX; }
"chroot_path" { return TYPE_PATH_CHROOT; } "chroot_path" { return TYPE_PATH_CHROOT; }
"nethack" { return TYPE_PATH_NETHACK; } "game_name" { return TYPE_NAME_GAME; }
"game_path" { return TYPE_PATH_GAME; }
"dglroot" { return TYPE_PATH_DGLDIR; } "dglroot" { return TYPE_PATH_DGLDIR; }
"spooldir" { return TYPE_PATH_SPOOL; } "spooldir" { return TYPE_PATH_SPOOL; }
"banner" { return TYPE_PATH_BANNER; } "banner" { return TYPE_PATH_BANNER; }

View File

@ -26,7 +26,7 @@ static const char* lookup_token (int t);
} }
%token TYPE_SUSER TYPE_SGROUP TYPE_SGID TYPE_SUID TYPE_MAX %token TYPE_SUSER TYPE_SGROUP TYPE_SGID TYPE_SUID TYPE_MAX
%token TYPE_PATH_NETHACK TYPE_PATH_DGLDIR TYPE_PATH_SPOOL %token TYPE_PATH_GAME TYPE_NAME_GAME TYPE_PATH_DGLDIR TYPE_PATH_SPOOL
%token TYPE_PATH_BANNER TYPE_PATH_CANNED TYPE_PATH_CHROOT %token TYPE_PATH_BANNER TYPE_PATH_CANNED TYPE_PATH_CHROOT
%token TYPE_PATH_PASSWD TYPE_PATH_LOCKFILE TYPE_PATH_SAVEFILEFMT %token TYPE_PATH_PASSWD TYPE_PATH_LOCKFILE TYPE_PATH_SAVEFILEFMT
%token TYPE_MALSTRING %token TYPE_MALSTRING
@ -113,9 +113,14 @@ KeyPair: KeyType '=' TYPE_VALUE {
myconfig->chroot = strdup ($3); myconfig->chroot = strdup ($3);
break; break;
case TYPE_PATH_NETHACK: case TYPE_PATH_GAME:
if (myconfig->nethack) free(myconfig->nethack); if (myconfig->game_path) free(myconfig->game_path);
myconfig->nethack = strdup ($3); myconfig->game_path = strdup ($3);
break;
case TYPE_NAME_GAME:
if (myconfig->game_name) free (myconfig->game_name);
myconfig->game_name = strdup($3);
break; break;
case TYPE_PATH_DGLDIR: case TYPE_PATH_DGLDIR:
@ -214,7 +219,8 @@ KeyType : TYPE_SUSER { $$ = TYPE_SUSER; }
| TYPE_SGID { $$ = TYPE_SGID; } | TYPE_SGID { $$ = TYPE_SGID; }
| TYPE_MAX { $$ = TYPE_MAX; } | TYPE_MAX { $$ = TYPE_MAX; }
| TYPE_PATH_CHROOT { $$ = TYPE_PATH_CHROOT; } | TYPE_PATH_CHROOT { $$ = TYPE_PATH_CHROOT; }
| TYPE_PATH_NETHACK { $$ = TYPE_PATH_NETHACK; } | TYPE_PATH_GAME { $$ = TYPE_PATH_GAME; }
| TYPE_NAME_GAME { $$ = TYPE_NAME_GAME; }
| TYPE_PATH_DGLDIR { $$ = TYPE_PATH_DGLDIR; } | TYPE_PATH_DGLDIR { $$ = TYPE_PATH_DGLDIR; }
| TYPE_PATH_SPOOL { $$ = TYPE_PATH_SPOOL; } | TYPE_PATH_SPOOL { $$ = TYPE_PATH_SPOOL; }
| TYPE_PATH_BANNER { $$ = TYPE_PATH_BANNER; } | TYPE_PATH_BANNER { $$ = TYPE_PATH_BANNER; }
@ -236,11 +242,13 @@ const char* lookup_token (int t)
case TYPE_SGID: return "shed_gid"; case TYPE_SGID: return "shed_gid";
case TYPE_MAX: return "maxusers"; case TYPE_MAX: return "maxusers";
case TYPE_PATH_CHROOT: return "chroot_path"; case TYPE_PATH_CHROOT: return "chroot_path";
case TYPE_PATH_NETHACK: return "nethack"; case TYPE_PATH_GAME: return "game_path";
case TYPE_NAME_GAME: return "game_name";
case TYPE_PATH_DGLDIR: return "dglroot"; case TYPE_PATH_DGLDIR: return "dglroot";
case TYPE_PATH_SPOOL: return "spooldir"; case TYPE_PATH_SPOOL: return "spooldir";
case TYPE_PATH_BANNER: return "banner"; case TYPE_PATH_BANNER: return "banner";
case TYPE_PATH_CANNED: return "rc_template"; case TYPE_PATH_CANNED: return "rc_template";
case TYPE_PATH_SAVEFILEFMT: return "savefilefmt";
default: abort(); default: abort();
} }
} }

View File

@ -689,7 +689,7 @@ drawmenu ()
mvaddstr (banner.len + 5, 1, "e) Change email address"); mvaddstr (banner.len + 5, 1, "e) Change email address");
mvaddstr (banner.len + 6, 1, "o) Edit option file"); mvaddstr (banner.len + 6, 1, "o) Edit option file");
mvaddstr (banner.len + 7, 1, "w) Watch games in progress"); mvaddstr (banner.len + 7, 1, "w) Watch games in progress");
mvaddstr (banner.len + 8, 1, "p) Play nethack!"); mvprintw (banner.len + 8, 1, "p) Play %s!", myconfig->game_name);
mvaddstr (banner.len + 9, 1, "q) Quit"); mvaddstr (banner.len + 9, 1, "q) Quit");
mvaddstr (banner.len + 11, 1, "=> "); mvaddstr (banner.len + 11, 1, "=> ");
} }
@ -1391,8 +1391,6 @@ backup_savefile (void)
return n >= 0; return n >= 0;
} }
/* TODO: Some of the messages here (sorry no nethack for you!) are nethack specific
* as may be some code... don't think so though. Globalize it. */
int int
purge_stale_locks (void) purge_stale_locks (void)
{ {
@ -1453,7 +1451,8 @@ purge_stale_locks (void)
#define HUP_WAIT 10 /* seconds before HUPPING */ #define HUP_WAIT 10 /* seconds before HUPPING */
mvprintw (3, 1, mvprintw (3, 1,
"There are some stale Nethack processes, will recover in %d seconds.", HUP_WAIT); "There are some stale %s processes, will recover in %d seconds.",
myconfig->game_name, HUP_WAIT);
mvaddstr (4, 1, mvaddstr (4, 1,
"Press a key NOW if you don't want this to happen!"); "Press a key NOW if you don't want this to happen!");
@ -1494,8 +1493,8 @@ purge_stale_locks (void)
sleep (1); sleep (1);
if (seconds == 10) if (seconds == 10)
{ {
mvaddstr (3, 1, mvprintw (3, 1,
"Couldn't terminate one of your stale Nethack processes gracefully."); "Couldn't terminate one of your stale %s processes gracefully.", myconfig->game_name);
mvaddstr (4, 1, "Force its termination? [yn] "); mvaddstr (4, 1, "Force its termination? [yn] ");
if (tolower (getch ()) == 'y') if (tolower (getch ()) == 'y')
{ {
@ -1505,8 +1504,8 @@ purge_stale_locks (void)
else else
{ {
endwin (); endwin ();
fprintf (stderr, "Sorry, no nethack for you now, please " fprintf (stderr, "Sorry, no %s for you now, please "
"contact the admin.\n"); "contact the admin.\n", myconfig->game_name);
graceful_exit (1); graceful_exit (1);
} }
} }

View File

@ -45,7 +45,8 @@ struct dg_game
struct dg_config struct dg_config
{ {
char* chroot; char* chroot;
char* nethack; char* game_path;
char* game_name;
char* dglroot; char* dglroot;
char* lockfile; char* lockfile;
char* passwd; char* passwd;

View File

@ -18,7 +18,8 @@ extern int yyparse ();
struct dg_config *myconfig = NULL; struct dg_config *myconfig = NULL;
struct dg_config defconfig = { struct dg_config defconfig = {
/* chroot = */ "/var/lib/dgamelaunch/", /* chroot = */ "/var/lib/dgamelaunch/",
/* nethack = */ "/bin/nethack", /* game_path = */ "/bin/nethack",
/* game_name = */ "NetHack",
/* dglroot = */ "/dgldir/", /* dglroot = */ "/dgldir/",
/* lockfile = */ "/dgl-lock", /* lockfile = */ "/dgl-lock",
/* passwd = */ "/dgl-login", /* passwd = */ "/dgl-login",
@ -232,7 +233,8 @@ create_config ()
if (myconfig->max == 0 && !set_max) myconfig->max = defconfig.max; if (myconfig->max == 0 && !set_max) myconfig->max = defconfig.max;
if (!myconfig->banner) myconfig->banner = defconfig.banner; if (!myconfig->banner) myconfig->banner = defconfig.banner;
if (!myconfig->chroot) myconfig->chroot = defconfig.chroot; if (!myconfig->chroot) myconfig->chroot = defconfig.chroot;
if (!myconfig->nethack) myconfig->nethack = defconfig.nethack; if (!myconfig->game_path) myconfig->game_path = defconfig.game_path;
if (!myconfig->game_name) myconfig->game_name = defconfig.game_name;
if (!myconfig->dglroot) myconfig->dglroot = defconfig.dglroot; if (!myconfig->dglroot) myconfig->dglroot = defconfig.dglroot;
if (!myconfig->rcfile) myconfig->rcfile = defconfig.rcfile; if (!myconfig->rcfile) myconfig->rcfile = defconfig.rcfile;
if (!myconfig->spool) myconfig->spool = defconfig.spool; if (!myconfig->spool) myconfig->spool = defconfig.spool;

View File

@ -26,8 +26,9 @@ maxusers = 64000
# Path to a prepared chroot jail. # Path to a prepared chroot jail.
chroot_path = "/var/lib/dgamelaunch/" chroot_path = "/var/lib/dgamelaunch/"
# From inside the jail, the location of the nethack binary. # From inside the jail, the location of the binary to be launched.
nethack = "/bin/nethack" game_path = "/bin/nethack"
game_name = "NetHack"
# From inside the jail, dgamelaunch's working directory for rcfiles/ttyrec/etc # From inside the jail, dgamelaunch's working directory for rcfiles/ttyrec/etc
dglroot = "/dgldir/" dglroot = "/dgldir/"

View File

@ -262,7 +262,7 @@ dooutput ()
void void
doshell (char *username) doshell (char *username)
{ {
char *argv1 = myconfig->nethack; char *argv1 = myconfig->game_path;
char *argv2 = "-u"; char *argv2 = "-u";
char *myargv[10]; char *myargv[10];
@ -279,7 +279,7 @@ doshell (char *username)
myargv[2] = username; myargv[2] = username;
myargv[3] = 0; myargv[3] = 0;
execvp (myconfig->nethack, myargv); execvp (myconfig->game_path, myargv);
fail (); fail ();
} }