Allow getting the server time and date via banner variables:

bannervars = [ "$DATETIME" = timeformat("%F %T") ]


git-svn-id: svn://katsu.triplehelix.org/dgamelaunch/trunk@624 db0b04b0-f4d1-0310-9a6d-de3e77497b0e
This commit is contained in:
Pasi Kallinen 2011-10-12 14:34:40 +00:00
parent 5a0c90fa0f
commit b5d3e6257b
6 changed files with 37 additions and 7 deletions

4
TODO
View File

@ -1,4 +1,8 @@
-allow setting banners for the internal menus, with the same method
as normal user-defined menus, but only the banner is used from them.
if no such menu is defined, then uses the default banner file.
-update dgamelaunch.8
-occasionally dgl crashes, leaving the shmem semaphore in a state

View File

@ -88,6 +88,7 @@ extra_info_file { return TYPE_EXTRA_INFO_FILE; }
"rc_fmt" { return TYPE_RC_FMT; }
"ttyrecdir" { return TYPE_PATH_TTYREC; }
bannervars { return TYPE_BANNERVARS; }
timeformat { return TYPE_TIMEFORMAT; }
sortmode { return TYPE_WATCH_SORTMODE; }
watch_columns { return TYPE_WATCH_COLUMNS; }
commands { return TYPE_CMDQUEUE; }

View File

@ -57,7 +57,7 @@ static int sortmode_number(const char *sortmode_name) {
%token TYPE_PATH_PASSWD TYPE_PATH_LOCKFILE TYPE_PATH_TTYREC
%token TYPE_MALSTRING TYPE_PATH_INPROGRESS TYPE_GAME_ARGS TYPE_RC_FMT
%token TYPE_CMDQUEUE TYPE_DEFINE_MENU TYPE_BANNER_FILE TYPE_CURSOR
%token TYPE_POSTCMDQUEUE
%token TYPE_POSTCMDQUEUE TYPE_TIMEFORMAT
%token TYPE_MAX_IDLE_TIME TYPE_MENU_MAX_IDLE_TIME TYPE_EXTRA_INFO_FILE
%token TYPE_ENCODING TYPE_LOCALE TYPE_UTF8ESC TYPE_FILEMODE
%token <s> TYPE_VALUE
@ -301,7 +301,11 @@ banner_vars : banner_vars ',' banner_var
banner_var : TYPE_VALUE '=' TYPE_VALUE
{
banner_var_add($1, $3);
banner_var_add($1, $3, 0);
}
| TYPE_VALUE '=' TYPE_TIMEFORMAT '(' TYPE_VALUE ')'
{
banner_var_add($1, $5, 1);
};
watch_columns: watch_columns ',' watch_column

View File

@ -403,7 +403,7 @@ bannerstrmangle(char *buf, char *bufnew, int buflen, char *fromstr, char *tostr)
}
void
banner_var_add(char *name, char *value)
banner_var_add(char *name, char *value, int special)
{
struct dg_banner_var *tmp = (struct dg_banner_var *)malloc(sizeof(struct dg_banner_var));
@ -411,6 +411,7 @@ banner_var_add(char *name, char *value)
tmp->name = strdup(name);
tmp->value = strdup(value);
tmp->special = special;
tmp->next = globalconfig.banner_var_list;
globalconfig.banner_var_list = tmp;
}
@ -430,12 +431,26 @@ banner_var_free()
globalconfig.banner_var_list = NULL;
}
char *
banner_var_resolve(struct dg_banner_var *bv)
{
static char tmpbuf[81];
time_t tstamp;
struct tm *ptm;
if (!bv) return NULL;
if (!bv->special) return bv->value;
time(&tstamp);
ptm = gmtime(&tstamp);
strftime(tmpbuf, 80, bv->value, ptm);
return tmpbuf;
}
char *
banner_var_value(char *name)
{
struct dg_banner_var *bv = globalconfig.banner_var_list;
while (bv) {
if (!strcmp(bv->name, name)) return bv->name;
if (!strcmp(bv->name, name)) return banner_var_resolve(bv);
bv = bv->next;
}
return NULL;
@ -517,7 +532,7 @@ loadbanner (char *fname, struct dg_banner *ban)
char tmpbufnew[80];
struct dg_banner_var *bv = globalconfig.banner_var_list;
while (bv) {
strncpy(bufnew, bannerstrmangle(bufnew, tmpbufnew, 80, bv->name, bv->value), 80);
strncpy(bufnew, bannerstrmangle(bufnew, tmpbufnew, 80, bv->name, banner_var_resolve(bv)), 80);
bv = bv->next;
}
strncpy(bufnew, bannerstrmangle(bufnew, tmpbufnew, 80, "$VERSION", PACKAGE_STRING), 80);

View File

@ -106,6 +106,7 @@ static const char *SORTMODE_NAME[NUM_SORTMODES] = {
struct dg_banner_var {
char *name;
char *value;
int special;
struct dg_banner_var *next;
};
@ -281,7 +282,7 @@ extern char *gen_inprogress_lock(int game, pid_t pid, char *ttyrec_filename);
extern void catch_sighup(int signum);
extern void loadbanner(char *fname, struct dg_banner *ban);
extern void drawbanner(struct dg_banner *ban);
extern void banner_var_add(char *name, char *value);
extern void banner_var_add(char *name, char *value, int special);
extern char *banner_var_value(char *name);
extern void banner_var_free(void);
extern int check_retard(int reset);

View File

@ -47,8 +47,13 @@ chroot_path = "/opt/nethack/nethack.alt.org/"
dglroot = "/dgldir/"
# Strings to be replaced in every banner
# you can have either direct string replacements, like
# "$FOO" = "BAR", or you can get the server time with
# "$FOO" = timeformat("%F %T")
# for the timeformat parameter string format, see man strftime
bannervars = [ "$MOTDTIME" = "2011.10.08",
"$SERVERID" = "nethack.alt.org - http://nethack.alt.org/"
"$SERVERID" = "nethack.alt.org - http://nethack.alt.org/",
"$DATETIME" = timeformat("%F %T")
]
# From inside the jail, location of a banner file, which is