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

@ -1,11 +1,13 @@
1.4.5 (????/??/??) 1.4.5 (????/??/??)
* Reset offset if necessary to show at least one game to avoid things * Reset offset if necessary to show at least one game to avoid things
like "(15-14 of 14)". like "(15-14 of 14)".
* Provide several examples for dgl-create-chroot.conf. * Provide several examples for dgl-create-chroot.conf.
* Backup the savefile before starting nethack to help prevent more * Backup the savefile before starting nethack to help prevent more
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 ();
} }