makedefs manpage, conditionals, and related bits

Add a man page for makedefs so mdgrep is documented better.
Add missing INSURANCE to mdgrep.h. (yes, LIFE leaks in as well)
Add makefile bits to build makedefs.txt.
Pass dungeon.def through mdgrep internally to makedefs - this will make
it possible to commit the LIFE patch and have config.h actually turn it
all the way off (by skipping bigrm-6).
This commit is contained in:
keni
2010-05-01 20:57:17 +00:00
parent 1b8c99d691
commit e04caf9a27
4 changed files with 317 additions and 14 deletions

235
doc/makedefs.6 Normal file
View File

@@ -0,0 +1,235 @@
.TH MAKEDEFS 6 "29 Apr 2010"
.\" NetHack 3.5 makedefs.6 $Date$ $Revision$
.UC 4
.SH NAME
makedefs \- NetHack miscellaneous build-time functions
.SH SYNOPSIS
.B makedefs
{
.B -o
|
.B -d
|
.B -e
|
.B -m
|
.B -v
|
.B -p
|
.B -q
|
.B -r
|
.B -h
|
.B -z
}
.P
.B makedefs --input
.I file
.B --output
.I file
.BI -- command
.SH DESCRIPTION
.PP
.B Makedefs
is a build-time tool used for a variety of
.BR NetHack (6)
source file creation and modification tasks. For historical reasons,
.B makedefs
takes two types of command lines. When invoked with a short option, the
files operated on are determined when
.B makedefs
is compiled. When invoked with a long option, the
.B --input
and
.B --output
options are used to specify the files for the
.BI -- command.
Each command is only available in one of the two formats.
.SH SHORT COMMANDS
Upper and lower case are both accepted for the short commands.
.TP
.B -o
Generate
.I onames.h.
.br
.TP
.B -d
Generate
.I data.base.
.br
.TP
.B -e
Generate
.I dungeon.pdf.
The input file
.I dungeon.def
is passed through the
same logic as that used by the
.B --grep
command; see the
.B MDGREP FUNCTIONS
section below for details.
.br
.TP
.B -m
Generate
.I monster.c.
.br
.TP
.B -v
Generate
.I date.h
and
.I options
file.
.br
.TP
.B -p
Generate
.I pm.h
.br
.TP
.B -q
Generate
.IR quest.dat .
.br
.TP
.B -r
Generate the
.I rumors
file.
.br
.TP
.B -h
Generate the
.B oracles
file.
.br
.TP
.B -z
Generate
.I vis_tab.c
and
.IR vis_tab.h .
.SH LONG COMMANDS
.TP
.BI --input " file"
Specify the input
.I file
for the command (if needed). If the file is - standard
input is read.
.br
.TP
.BI --output " file"
Specify the output
.I file
for the command (if needed). If the file is - standard
output is written.
.br
.TP
.B --svs \fR[\fIdelimiter\fR]
Generate a version string to standard output without a trailing newline.
If specified, the delimiter is used between each part of the version string.
.br
.TP
.B --grep
Filter the input
.I file to the output
.IR file .
See the
.B MDGREP FUNCTIONS
section below for information on controlling the filtering operation.
.br
.TP
.B --grep-showvars
Show the name and value for each variable known to the grep option.
.br
.TP
.B --grep-trace
Turn on debug tracing for the grep function (
.B --grep
must be specified as well).
.br
.TP
.BI --grep-define " symbol"
Force the value of
.I symbol
to be "defined."
.I Symbol
must already be known to
.BR makedefs .
.br
.TP
.BI --grep-undef " symbol"
Force the definition of
.I symbol
to be "undefined."
.I Symbol
must already be known to
.BR makedefs .
.SH MDGREP FUNCTIONS
The
.B --grep
command (and certain other commands) filter their input, on a line-by-line
basis, according to control lines embedded in the input and on information
gleaned from the
.BR NetHack (6)
configuration. This allows certain changes such as embedding platform-specific
documentation into the master documentation files.
.P
Rules:
.RS
.IP - 4
The default conditional state is printing enabled.
.IP - 4
Any line
.I NOT
starting with a caret (^) is either suppressed or passed through unchanged
depending on the current conditional state.
.IP - 4
Any line starting with a caret is a control line; as in C, zero or more spaces
may be embedded in the line almost anywhere (except immediately after the
caret); however the caret must be in column 1.
.IP - 4
Conditionals may be nested.
.IP - 4
.I Makedefs
will exit with an error code if any errors are detected; processing will
continue (if it can) to allow as many errors as possible to be detected.
.IP - 4
Unknown identifiers are treated as both TRUE and as an error. Note that
.BR --undef " or " #undef
in the
.BR NetHack (6)
configuration are different from unknown.
.RE
.P
Control lines:
.RS
.IP ^^ 4
a line starting with a (single) literal caret
.IP ^#
a comment
.IP ^?\fIID
if the
.I ID
is defined set the conditional state to TRUE
.IP ^!\fIID
if the
.I ID
is not defined set the conditional state to TRUE
.IP ^:
else; invert the conditional state
.IP ^.
end the most recent conditional
.RE
.\".SH EXAMPLES
.SH AUTHOR
The NetHack Development Team
.SH "SEE ALSO"
.PP
.BR dgn_comp (6)

View File

@@ -1,6 +1,5 @@
# NetHack Makefile.
# NetHack 3.5 Makefile.doc $Date$ $Revision$
# SCCS Id: @(#)Makefile.doc 3.5 2007/05/25
# Root of source tree:
NHSROOT=..
@@ -68,12 +67,14 @@ LEVMANCREATE = cat lev_comp.6 | $(NHGREP) >
DGNMANCREATE = cat dgn_comp.6 | $(NHGREP) >
RCVRMANCREATE = cat recover.6 | $(NHGREP) >
DLBMANCREATE = cat dlb.6 | $(NHGREP) >
MDMANCREATE = cat makedefs.6 | $(NHGREP) >
# manual installation for most SYSV-style systems
# GAMEMANCREATE = cat nethack.6 | $(NHGREP) | nroff -man - >
# LEVMANCREATE = cat lev_comp.6 | $(NHGREP) | nroff -man - >
# DGNMANCREATE = cat dgn_comp.6 | $(NHGREP) | nroff -man - >
# RCVRMANCREATE = cat recover.6 | $(NHGREP) | nroff -man - >
# DLBMANCREATE = cat dlb.6 | $(NHGREP) | nroff -man - >
MDMANCREATE = cat makedefs.6 | $(NHGREP) | nroff -man - >
manpages:
-$(GAMEMANCREATE) $(MANDIR)/$(GAME).$(MANEXT)
@@ -81,9 +82,11 @@ manpages:
-$(DGNMANCREATE) $(MANDIR)/dgn_comp.$(MANEXT)
-$(RCVRMANCREATE) $(MANDIR)/recover.$(MANEXT)
-$(DLBMANCREATE) $(MANDIR)/dlb.$(MANEXT)
-$(MDMANCREATE) $(MANDIR)/makedefs.$(MANEXT)
# manual creation for distribution
DISTRIB = Guidebook.txt nethack.txt lev_comp.txt dgn_comp.txt recover.txt dlb.txt
DISTRIB = Guidebook.txt nethack.txt lev_comp.txt dgn_comp.txt recover.txt \
dlb.txt makedefs.txt
distrib: $(DISTRIB)
@echo "Plain text documentation is up to date."
@@ -101,6 +104,8 @@ recover.txt : recover.6
cat recover.6 | $(MAN2TXT) > recover.txt
dlb.txt : dlb.6
cat dlb.6 | $(MAN2TXT) > dlb.txt
makedefs.txt : makedefs.6
cat makedefs.6 | $(MAN2TXT) > makedefs.txt
clean:
-rm -f Guidebook.aux Guidebook.log

View File

@@ -346,6 +346,41 @@ char *options;
}
static char namebuf[1000];
static char *
name_file(template, tag)
char *template;
char *tag;
{
Sprintf(namebuf, template, tag);
return namebuf;
}
static void
delete_file(template, tag)
char *template;
char *tag;
{
char *name = name_file(template, tag);
Unlink(name);
}
static FILE *
getfp(template, tag, mode)
char *template;
char *tag;
char *mode;
{
char *name = name_file(template, tag);
FILE *rv = fopen(name, mode);
if(!rv){
Fprintf(stderr, "Can't open '%s'.\n", name);
exit(EXIT_FAILURE);
}
return rv;
}
static FILE *inputfp;
static FILE *outputfp;
@@ -677,10 +712,10 @@ do_grep_rewrite(buf)
}
#endif
static void grep0(FILE *, FILE *);
static void
do_grep(){
char buf[16384]; /* looong, just in case */
if(!inputfp){
Fprintf(stderr,"--grep requires --input\n");
}
@@ -691,15 +726,25 @@ do_grep(){
exit(EXIT_FAILURE);
}
while(!feof(inputfp) && !ferror(inputfp)){
grep0(inputfp, outputfp);
}
static void
grep0(inputfp0, outputfp0)
FILE *inputfp0;
FILE *outputfp0;
{
char buf[16384]; /* looong, just in case */
while(!feof(inputfp0) && !ferror(inputfp0)){
char *tmp;
char *buf1;
if(fgets(buf, sizeof(buf), inputfp) == 0) break;
if(fgets(buf, sizeof(buf), inputfp0) == 0) break;
if( (tmp=strchr(buf,'\n')) ) *tmp = '\0';
grep_lineno++;
if(grep_trace){
Fprintf(outputfp, "%04d %c >%s\n",
Fprintf(outputfp0, "%04d %c >%s\n",
grep_lineno,
grep_writing?' ':'#',
buf
@@ -717,18 +762,18 @@ do_grep(){
do_grep_rewrite(buf1);
#endif
if(grep_writing)
Fprintf(outputfp, "%s\n", buf1);
Fprintf(outputfp0, "%s\n", buf1);
}
if(ferror(inputfp)){
if(ferror(inputfp0)){
Fprintf(stderr, "read error!\n");
exit(EXIT_FAILURE);
}
if(ferror(outputfp)){
if(ferror(outputfp0)){
Fprintf(stderr, "write error!\n");
exit(EXIT_FAILURE);
}
fclose(inputfp);
fclose(outputfp);
fclose(inputfp0);
fclose(outputfp0);
if(grep_sp){
Fprintf(stderr, "%d unterminated conditional level%s\n",
grep_sp, grep_sp==1?"":"s");
@@ -1159,6 +1204,9 @@ static const char *build_opts[] = {
#ifdef COM_COMPL
"command line completion",
#endif
#ifdef LIFE
"Conway's Game of Life",
#endif
#ifdef COMPRESS
"data file compression",
#endif
@@ -1765,6 +1813,10 @@ do_dungeon()
}
Fprintf(ofp,Dont_Edit_Data);
tfp = getfp(DATA_TEMPLATE, "grep.tmp", WRTMODE);
grep0(ifp, tfp);
ifp = getfp(DATA_TEMPLATE, "grep.tmp", RDTMODE);
while (fgets(in_line, sizeof in_line, ifp) != 0) {
SpinCursor(3);
@@ -1790,6 +1842,7 @@ recheck:
Fclose(ifp);
Fclose(ofp);
delete_file(DATA_TEMPLATE, "grep.tmp");
return;
}

View File

@@ -1,9 +1,9 @@
/*
* NetHack 3.5 mdgrep.h $Date$ $Revision$
* Copyright (c) Kenneth Lorber, Kensington, Maryland
* Copyright (c) Kenneth Lorber, Kensington, Maryland, 2008
* NetHack may be freely redistributed. See license for details.
*
* This file generated by mdgrep.pl version 1.5.
* This file generated by mdgrep.pl version 1.7.
* DO NOT EDIT! Your changes will be lost.
*/
static struct grep_var grep_vars[]={
@@ -70,6 +70,16 @@ static struct grep_var grep_vars[]={
#else
{"HANGUPHANDLING", 0},
#endif
#if defined(INSURANCE)
{"INSURANCE", 1},
#else
{"INSURANCE", 0},
#endif
#if defined(LIFE)
{"LIFE", 1},
#else
{"LIFE", 0},
#endif
#if defined(MAC)
{"MAC", 1},
#else