version feedback (trunk only)

Show the 'v' output (full version number plus build date-time) as
the first line of '#version' output (build time configuration settings).
It isn't simple to do that when generating dat/options (there's some
port-specific tweaking going), so do it at run-time by processing that
file one line at a time instead of passing it through a pager routine.

     This also inserts an "About NetHack" entry as the first choice in
the menu for '?', the way that most Windows programs have interactive
help organized.  Picking that gives the same output as using #version.

'make depend' manually updated for Unix and VMS (add dlb.h to version.*).
This commit is contained in:
nethack.rankin
2011-09-23 07:33:18 +00:00
parent 795c0a3a8d
commit 2ba506b385
5 changed files with 93 additions and 29 deletions

View File

@@ -523,6 +523,7 @@ flexibility for specifying "detect <foo>" vs "<foo> detection" when wishing
when a sokoban puzzle has been completed (last pit or hole filled in),
stop assessing luck penalties and lift most movement restrictions
'`' command to show discoveries for one class of objects
add "about nethack" to '?' menu as an alternate way to view 'v'+'#version'
Platform- and/or Interface-Specific New Features

View File

@@ -774,18 +774,21 @@ do_look(mode, click_cc)
return 0;
}
/* the '/' command */
int
dowhatis()
{
return do_look(0,(coord *)0);
}
/* the ';' command */
int
doquickwhatis()
{
return do_look(1,(coord *)0);
}
/* the '^' command */
int
doidtrap()
{
@@ -903,7 +906,7 @@ docontact()
}
putstr(cwin, 0, "To contact the NetHack development team directly,");
/*XXX overflow possibilities*/
Sprintf(buf, " see the Contact form on our website or email %s",
Sprintf(buf, "see the Contact form on our website or email %s",
DEVTEAM_EMAIL);
putstr(cwin, 0, buf);
putstr(cwin, 0, "");
@@ -916,22 +919,23 @@ docontact()
/* data for help_menu() */
static const char *help_menu_items[] = {
/* 0*/ "Long description of the game and commands.",
/* 1*/ "List of game commands.",
/* 2*/ "Concise history of NetHack.",
/* 3*/ "Info on a character in the game display.",
/* 4*/ "Info on what a given key does.",
/* 5*/ "List of game options.",
/* 6*/ "Longer explanation of game options.",
/* 7*/ "List of extended commands.",
/* 8*/ "The NetHack license.",
/* 9*/ "Support information.",
/* 0*/ "About NetHack (version information).",
/* 1*/ "Long description of the game and commands.",
/* 2*/ "List of game commands.",
/* 3*/ "Concise history of NetHack.",
/* 4*/ "Info on a character in the game display.",
/* 5*/ "Info on what a given key does.",
/* 6*/ "List of game options.",
/* 7*/ "Longer explanation of game options.",
/* 8*/ "List of extended commands.",
/* 9*/ "The NetHack license.",
/* 10*/ "Support information.",
#ifdef PORT_HELP
"%s-specific help and commands.",
#define PORT_HELP_ID 100
#define WIZHLP_SLOT 11
#define WIZHLP_SLOT 12
#else
#define WIZHLP_SLOT 10
#define WIZHLP_SLOT 11
#endif
#ifdef WIZARD
"List of wizard-mode commands.",
@@ -984,6 +988,7 @@ help_menu(sel)
return FALSE;
}
/* the '?' command */
int
dohelp()
{
@@ -991,22 +996,23 @@ dohelp()
if (help_menu(&sel)) {
switch (sel) {
case 0: display_file(HELP, TRUE); break;
case 1: display_file(SHELP, TRUE); break;
case 2: (void) dohistory(); break;
case 3: (void) dowhatis(); break;
case 4: (void) dowhatdoes(); break;
case 5: option_help(); break;
case 6: display_file(OPTIONFILE, TRUE); break;
case 7: (void) doextlist(); break;
case 8: display_file(LICENSE, TRUE); break;
case 9: (void) docontact(); break;
case 0: (void) doextversion(); break;
case 1: display_file(HELP, TRUE); break;
case 2: display_file(SHELP, TRUE); break;
case 3: (void) dohistory(); break;
case 4: (void) dowhatis(); break;
case 5: (void) dowhatdoes(); break;
case 6: option_help(); break;
case 7: display_file(OPTIONFILE, TRUE); break;
case 8: (void) doextlist(); break;
case 9: display_file(LICENSE, TRUE); break;
case 10: (void) docontact(); break;
#ifdef PORT_HELP
case PORT_HELP_ID: port_help(); break;
#endif
default:
#ifdef WIZARD
/* handle slot 10 or 11 */
/* handle slot 11 or 12 */
display_file(DEBUGHELP, TRUE);
#endif
break;
@@ -1015,6 +1021,7 @@ dohelp()
return 0;
}
/* the 'V' command; also a choice for '?' */
int
dohistory()
{

View File

@@ -1,9 +1,9 @@
/* NetHack 3.5 version.c $Date$ $Revision$ */
/* SCCS Id: @(#)version.c 3.5 2006/12/11 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
#include "hack.h"
#include "dlb.h"
#include "date.h"
/*
* All the references to the contents of patchlevel.h have been moved
@@ -40,6 +40,7 @@ char *buf;
return buf;
}
/* the 'v' command */
int
doversion()
{
@@ -49,10 +50,65 @@ doversion()
return 0;
}
/* the '#version' command; also a choice for '?' */
int
doextversion()
{
display_file(OPTIONS_USED, TRUE);
dlb *f;
char *cr, buf[BUFSZ];
winid win = create_nhwindow(NHW_TEXT);
/* instead of using ``display_file(OPTIONS_USED,TRUE)'' we handle
the file manually so we can include dynamic version info */
putstr(win, 0, getversionstring(buf));
f = dlb_fopen(OPTIONS_USED, "r");
if (!f) {
putstr(win, 0, "");
Sprintf(buf, "[Configuration '%s' not available?]", OPTIONS_USED);
putstr(win, 0, buf);
} else {
/*
* already inserted above:
* + outdented program name and version plus build date and time
* dat/options; display the contents with lines prefixed by '-' deleted:
* - blank-line
* - indented program name and version
* blank-line
* outdented feature header
* - blank-line
* indented feature list
* spread over multiple lines
* blank-line
* outdented windowing header
* - blank-line
* indented windowing choices with
* optional second line for default
* - blank-line
* - EOF
*/
boolean prolog = TRUE; /* to skip indented program name */
while (dlb_fgets(buf, BUFSZ, f)) {
if ((cr = index(buf, '\n')) != 0) *cr = 0;
if ((cr = index(buf, '\r')) != 0) *cr = 0;
if (index(buf, '\t') != 0) (void) tabexpand(buf);
if (*buf && *buf != ' ') {
/* found outdented header; insert a separator since we'll
have skipped corresponding blank line inside the file */
putstr(win, 0, "");
prolog = FALSE;
}
/* skip blank lines and prolog (progame name plus version) */
if (prolog || !*buf) continue;
putstr(win, 0, buf);
}
(void) dlb_fclose(f);
display_nhwindow(win, FALSE);
destroy_nhwindow(win);
}
return 0;
}

View File

@@ -1,6 +1,5 @@
# NetHack Makefile.
# NetHack 3.5 Makefile.src $Date$ $Revision$
# SCCS Id: @(#)Makefile.src 3.5 2008/01/30
# Root of source tree:
NHSROOT=..
@@ -805,7 +804,8 @@ trap.o: trap.c $(HACK_H)
u_init.o: u_init.c $(HACK_H)
uhitm.o: uhitm.c $(HACK_H)
vault.o: vault.c $(HACK_H)
version.o: version.c $(HACK_H) ../include/date.h ../include/patchlevel.h
version.o: version.c $(HACK_H) ../include/dlb.h ../include/date.h \
../include/patchlevel.h
vision.o: vision.c $(HACK_H) ../include/vis_tab.h
weapon.o: weapon.c $(HACK_H)
were.o: were.c $(HACK_H)

View File

@@ -469,7 +469,7 @@ trap.obj : trap.c $(HACK_H)
u_init.obj : u_init.c $(HACK_H)
uhitm.obj : uhitm.c $(HACK_H)
vault.obj : vault.c $(HACK_H)
version.obj : version.c $(HACK_H) $(INC)date.h $(INC)patchlevel.h
version.obj : version.c $(HACK_H) $(INC)dlb.h $(INC)date.h $(INC)patchlevel.h
vision.obj : vision.c $(HACK_H) $(INC)vis_tab.h
weapon.obj : weapon.c $(HACK_H)
were.obj : were.c $(HACK_H)