changeset 88:07c4d4883ef2

rogue3: begin porting to autoconf. Rogue V3 can now be built with './configure && make'. This is preliminary: 'make install' does not work yet.
author John "Elwin" Edwards
date Sat, 24 Aug 2013 13:36:13 -0700
parents f871cb0539d3
children 84651832f967
files rogue3/Makefile rogue3/Makefile.in rogue3/acinclude.m4 rogue3/configure.ac rogue3/install-sh rogue3/machdep.h rogue3/mdport.c rogue3/rogue.6 rogue3/rogue.6.in rogue3/rogue.r rogue3/rogue.r.in
diffstat 11 files changed, 1503 insertions(+), 662 deletions(-) [+]
line wrap: on
line diff
--- a/rogue3/Makefile	Tue Aug 13 09:19:56 2013 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,151 +0,0 @@
-#
-# Makefile for rogue
-# %W% (Berkeley) %G%
-#
-# Rogue: Exploring the Dungeons of Doom
-# Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman
-# All rights reserved.
-#
-# See the file LICENSE.TXT for full copyright and licensing information.
-#
-
-DISTNAME=rogue3.6.4
-PROGRAM=rogue3
-
-O=o
-
-HDRS= 	rogue.h machdep.h
-
-OBJS1 = vers.$(O) armor.$(O) chase.$(O) command.$(O) daemon.$(O) daemons.$(O) \
-        fight.$(O) init.$(O) io.$(O) list.$(O) main.$(O) mdport.$(O) \
-	misc.$(O) monsters.$(O) move.$(O) newlevel.$(O) options.$(O) 
-OBJS2 =	pack.$(O) passages.$(O) potions.$(O) rings.$(O) rip.$(O) rooms.$(O) \
-	save.$(O) scrolls.$(O) state.$(O) sticks.$(O) things.$(O) \
-	weapons.$(O) wizard.$(O) xcrypt.$(O)
-OBJS  = $(OBJS1) $(OBJS2)
-
-CFILES= vers.c armor.c chase.c command.c daemon.c daemons.c fight.c \
-	init.c io.c list.c main.c mdport.c misc.c monsters.c move.c newlevel.c \
-	options.c pack.c passages.c potions.c rings.c rip.c rooms.c \
-	save.c scrolls.c state.c sticks.c things.c weapons.c wizard.c xcrypt.c
-
-
-MISC_C=
-DOCSRC= rogue.6 rogue.r
-DOCS  = $(PROGRAM).doc $(PROGRAM).cat $(PROGRAM).html readme36.html
-MISC  =	Makefile $(MISC_C) LICENSE.TXT $(PROGRAM).sln $(PROGRAM).vcproj $(DOCS)\
-	$(DOCSRC)
-
-CC    = gcc
-ROPTS =
-COPTS = -O3
-CFLAGS= $(COPTS) $(ROPTS)
-LIBS  = -lcurses
-RM    = rm -f
-LD    = $(CC)
-LDOUT = -o 
-
-.SUFFIXES: .obj
-
-.c.obj:
-	$(CC) $(CFLAGS) /c $*.c
-
-$(PROGRAM)$(EXE): $(HDRS) $(OBJS)
-	$(LD) $(LDFLAGS) $(OBJS) $(LIBS) $(LDOUT)$@
-
-clean:
-	$(RM) $(OBJS1)
-	$(RM) $(OBJS2)
-	$(RM) core $(PROGRAM) $(PROGRAM).exe $(DISTNAME).tar $(DISTNAME).tar.gz 
-	$(RM) $(DISTNAME).zip
-
-dist.src:
-	make clean
-	tar cf $(DISTNAME)-src.tar $(CFILES) $(HDRS) $(MISC) $(DOCS)
-	gzip -f $(DISTNAME)-src.tar
-
-dist.irix:
-	@$(MAKE) clean
-	@$(MAKE) CC=cc CFLAGS="-woff 1116 -O3" $(PROGRAM)
-#	tbl rogue.r | nroff -ms | colcrt - > $(PROGRAM).doc
-#	nroff -man rogue.6 | colcrt - > $(PROGRAM).cat
-	tar cf $(DISTNAME)-irix.tar $(PROGRAM) LICENSE.TXT $(DOCS)
-	gzip -f $(DISTNAME)-irix.tar
-
-dist.aix:
-	@$(MAKE) clean
-	@$(MAKE) CC=xlc CFLAGS="-qmaxmem=16768 -O3 -qstrict" $(PROGRAM)
-#	tbl rogue.r | nroff -ms | colcrt - > $(ROGUE).doc
-#	nroff -man rogue.6 | colcrt - > $(ROGUE).cat
-	tar cf $(DISTNAME)-aix.tar $(PROGRAM) LICENSE.TXT $(DOCS)
-	gzip -f $(DISTNAME)-aix.tar
-
-dist.linux:
-	@$(MAKE) clean
-	@$(MAKE) $(PROGRAM)
-#	groff -P-c -t -ms -Tascii rogue.r | sed -e 's/.\x08//g' > $(PROGRAM).doc
-#	groff -man rogue.6 | sed -e 's/.\x08//g' > $(PROGRAM).cat
-	tar cf $(DISTNAME)-linux.tar $(PROGRAM) LICENSE.TXT $(DOCS)
-	gzip -f $(DISTNAME)-linux.tar
-	
-debug.linux:
-	@$(MAKE) clean
-	@$(MAKE) COPTS="-g" $(PROGRAM)
-#	groff -P-c -t -ms -Tascii rogue.r | sed -e 's/.\x08//g' > $(PROGRAM).doc
-#	groff -man rogue.6 | sed -e 's/.\x08//g' > $(PROGRAM).cat
-	
-dist.interix: 
-	@$(MAKE) clean
-	@$(MAKE) COPTS="-ansi" $(PROGRAM)
-#	groff -P-b -P-u -t -ms -Tascii rogue.r > $(PROGRAM).doc
-#	groff -P-b -P-u -man -Tascii rogue.6 > $(PROGRAM).cat
-	tar cf $(DISTNAME)-interix.tar $(PROGRAM) LICENSE.TXT $(DOCS)
-	gzip -f $(DISTNAME)-interix.tar	
-
-dist.cygwin:
-	@$(MAKE) --no-print-directory clean
-	@$(MAKE) COPTS="-I/usr/include/ncurses" --no-print-directory $(PROGRAM)
-#	groff -P-c -t -ms -Tascii rogue.r | sed -e 's/.\x08//g' > $(PROGRAM).doc
-#	groff -P-c -man -Tascii rogue.6 | sed -e 's/.\x08//g' > $(PROGRAM).cat
-	tar cf $(DISTNAME)-cygwin.tar $(PROGRAM).exe LICENSE.TXT $(DOCS)
-	gzip -f $(DISTNAME)-cygwin.tar
-
-#
-# Use MINGW32-MAKE to build this target
-#
-dist.mingw32:
-	@$(MAKE) --no-print-directory RM="cmd /c del" clean
-	@$(MAKE) --no-print-directory COPTS="-I../pdcurses" LIBS="../pdcurses/pdcurses.a" $(PROGRAM)
-	cmd /c del $(DISTNAME)-mingw32.zip
-	zip $(DISTNAME)-mingw32.zip $(PROGRAM).exe LICENSE.TXT $(DOCS)
-	
-#
-# Seperate doc targets for DJGPP prevent strange SIGSEGV in groff
-# in that environment.
-#
-doc.djgpp:
-	groff -t -ms -Tascii rogue.r | sed -e 's/.\x08//g' > $(PROGRAM).doc
-
-cat.djgpp:
-	groff -man -Tascii rogue.6 | sed -e 's/.\x08//g' > $(PROGRAM).cat
-
-dist.djgpp: 
-	@$(MAKE) --no-print-directory clean
-	@$(MAKE) --no-print-directory LDFLAGS="-L$(DJDIR)/LIB" \
-		LIBS="-lpdcur" $(PROGRAM)
-#	@$(MAKE) --no-print-directory doc.djgpp
-#	@$(MAKE) --no-print-directory cat.djgpp
-	rm -f $(DISTNAME)-djgpp.zip
-	zip $(DISTNAME)-djgpp.zip $(PROGRAM) LICENSE.TXT $(DOCS)
-
-#
-# Use NMAKE to build this target
-#
-dist.win32:
-	@$(MAKE) /NOLOGO O="obj" RM="-del" clean
-	@$(MAKE) /NOLOGO O="obj" CC="@CL" LD="link" LDOUT="/OUT:" EXE=".exe"\
-	    LIBS="/NODEFAULTLIB:LIBC ..\pdcurses\pdcurses.lib shell32.lib user32.lib Advapi32.lib" \
-	    COPTS="-nologo -D_CRT_SECURE_NO_DEPRECATE -I..\pdcurses \
-	    -Ox -wd4033 -wd4716" $(PROGRAM).exe
-	-del $(DISTNAME)-win32.zip
-	zip $(DISTNAME)-win32.zip $(PROGRAM).exe LICENSE.TXT $(DOCS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rogue3/Makefile.in	Sat Aug 24 13:36:13 2013 -0700
@@ -0,0 +1,152 @@
+#
+# Makefile for rogue
+# %W% (Berkeley) %G%
+#
+# Rogue: Exploring the Dungeons of Doom
+# Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman
+# All rights reserved.
+#
+# See the file LICENSE.TXT for full copyright and licensing information.
+#
+
+DISTNAME=rogue3.6.4
+PROGRAM=@PROGRAM@
+
+O=o
+
+HDRS= 	rogue.h machdep.h
+
+OBJS1 = vers.$(O) armor.$(O) chase.$(O) command.$(O) daemon.$(O) daemons.$(O) \
+        fight.$(O) init.$(O) io.$(O) list.$(O) main.$(O) mdport.$(O) \
+	misc.$(O) monsters.$(O) move.$(O) newlevel.$(O) options.$(O) 
+OBJS2 =	pack.$(O) passages.$(O) potions.$(O) rings.$(O) rip.$(O) rooms.$(O) \
+	save.$(O) scrolls.$(O) state.$(O) sticks.$(O) things.$(O) \
+	weapons.$(O) wizard.$(O) xcrypt.$(O)
+OBJS  = $(OBJS1) $(OBJS2)
+
+CFILES= vers.c armor.c chase.c command.c daemon.c daemons.c fight.c \
+	init.c io.c list.c main.c mdport.c misc.c monsters.c move.c newlevel.c \
+	options.c pack.c passages.c potions.c rings.c rip.c rooms.c \
+	save.c scrolls.c state.c sticks.c things.c weapons.c wizard.c xcrypt.c
+
+
+MISC_C=
+DOCSRC= rogue.6 rogue.r
+DOCS  = $(PROGRAM).doc $(PROGRAM).cat $(PROGRAM).html readme36.html
+MISC  =	Makefile $(MISC_C) LICENSE.TXT $(PROGRAM).sln $(PROGRAM).vcproj $(DOCS)\
+	$(DOCSRC)
+
+CC    = gcc
+CPPFLAGS =@DEFS@
+ROPTS =
+COPTS = -O3
+CFLAGS= $(COPTS) $(ROPTS)
+LIBS  = -lcurses
+RM    = rm -f
+LD    = $(CC)
+LDOUT = -o 
+
+.SUFFIXES: .obj
+
+.c.obj:
+	$(CC) $(CFLAGS) /c $*.c
+
+$(PROGRAM)$(EXE): $(HDRS) $(OBJS)
+	$(LD) $(LDFLAGS) $(OBJS) $(LIBS) $(LDOUT)$@
+
+clean:
+	$(RM) $(OBJS1)
+	$(RM) $(OBJS2)
+	$(RM) core $(PROGRAM) $(PROGRAM).exe $(DISTNAME).tar $(DISTNAME).tar.gz 
+	$(RM) $(DISTNAME).zip
+
+dist.src:
+	make clean
+	tar cf $(DISTNAME)-src.tar $(CFILES) $(HDRS) $(MISC) $(DOCS)
+	gzip -f $(DISTNAME)-src.tar
+
+dist.irix:
+	@$(MAKE) clean
+	@$(MAKE) CC=cc CFLAGS="-woff 1116 -O3" $(PROGRAM)
+#	tbl rogue.r | nroff -ms | colcrt - > $(PROGRAM).doc
+#	nroff -man rogue.6 | colcrt - > $(PROGRAM).cat
+	tar cf $(DISTNAME)-irix.tar $(PROGRAM) LICENSE.TXT $(DOCS)
+	gzip -f $(DISTNAME)-irix.tar
+
+dist.aix:
+	@$(MAKE) clean
+	@$(MAKE) CC=xlc CFLAGS="-qmaxmem=16768 -O3 -qstrict" $(PROGRAM)
+#	tbl rogue.r | nroff -ms | colcrt - > $(ROGUE).doc
+#	nroff -man rogue.6 | colcrt - > $(ROGUE).cat
+	tar cf $(DISTNAME)-aix.tar $(PROGRAM) LICENSE.TXT $(DOCS)
+	gzip -f $(DISTNAME)-aix.tar
+
+dist.linux:
+	@$(MAKE) clean
+	@$(MAKE) $(PROGRAM)
+#	groff -P-c -t -ms -Tascii rogue.r | sed -e 's/.\x08//g' > $(PROGRAM).doc
+#	groff -man rogue.6 | sed -e 's/.\x08//g' > $(PROGRAM).cat
+	tar cf $(DISTNAME)-linux.tar $(PROGRAM) LICENSE.TXT $(DOCS)
+	gzip -f $(DISTNAME)-linux.tar
+	
+debug.linux:
+	@$(MAKE) clean
+	@$(MAKE) COPTS="-g" $(PROGRAM)
+#	groff -P-c -t -ms -Tascii rogue.r | sed -e 's/.\x08//g' > $(PROGRAM).doc
+#	groff -man rogue.6 | sed -e 's/.\x08//g' > $(PROGRAM).cat
+	
+dist.interix: 
+	@$(MAKE) clean
+	@$(MAKE) COPTS="-ansi" $(PROGRAM)
+#	groff -P-b -P-u -t -ms -Tascii rogue.r > $(PROGRAM).doc
+#	groff -P-b -P-u -man -Tascii rogue.6 > $(PROGRAM).cat
+	tar cf $(DISTNAME)-interix.tar $(PROGRAM) LICENSE.TXT $(DOCS)
+	gzip -f $(DISTNAME)-interix.tar	
+
+dist.cygwin:
+	@$(MAKE) --no-print-directory clean
+	@$(MAKE) COPTS="-I/usr/include/ncurses" --no-print-directory $(PROGRAM)
+#	groff -P-c -t -ms -Tascii rogue.r | sed -e 's/.\x08//g' > $(PROGRAM).doc
+#	groff -P-c -man -Tascii rogue.6 | sed -e 's/.\x08//g' > $(PROGRAM).cat
+	tar cf $(DISTNAME)-cygwin.tar $(PROGRAM).exe LICENSE.TXT $(DOCS)
+	gzip -f $(DISTNAME)-cygwin.tar
+
+#
+# Use MINGW32-MAKE to build this target
+#
+dist.mingw32:
+	@$(MAKE) --no-print-directory RM="cmd /c del" clean
+	@$(MAKE) --no-print-directory COPTS="-I../pdcurses" LIBS="../pdcurses/pdcurses.a" $(PROGRAM)
+	cmd /c del $(DISTNAME)-mingw32.zip
+	zip $(DISTNAME)-mingw32.zip $(PROGRAM).exe LICENSE.TXT $(DOCS)
+	
+#
+# Seperate doc targets for DJGPP prevent strange SIGSEGV in groff
+# in that environment.
+#
+doc.djgpp:
+	groff -t -ms -Tascii rogue.r | sed -e 's/.\x08//g' > $(PROGRAM).doc
+
+cat.djgpp:
+	groff -man -Tascii rogue.6 | sed -e 's/.\x08//g' > $(PROGRAM).cat
+
+dist.djgpp: 
+	@$(MAKE) --no-print-directory clean
+	@$(MAKE) --no-print-directory LDFLAGS="-L$(DJDIR)/LIB" \
+		LIBS="-lpdcur" $(PROGRAM)
+#	@$(MAKE) --no-print-directory doc.djgpp
+#	@$(MAKE) --no-print-directory cat.djgpp
+	rm -f $(DISTNAME)-djgpp.zip
+	zip $(DISTNAME)-djgpp.zip $(PROGRAM) LICENSE.TXT $(DOCS)
+
+#
+# Use NMAKE to build this target
+#
+dist.win32:
+	@$(MAKE) /NOLOGO O="obj" RM="-del" clean
+	@$(MAKE) /NOLOGO O="obj" CC="@CL" LD="link" LDOUT="/OUT:" EXE=".exe"\
+	    LIBS="/NODEFAULTLIB:LIBC ..\pdcurses\pdcurses.lib shell32.lib user32.lib Advapi32.lib" \
+	    COPTS="-nologo -D_CRT_SECURE_NO_DEPRECATE -I..\pdcurses \
+	    -Ox -wd4033 -wd4716" $(PROGRAM).exe
+	-del $(DISTNAME)-win32.zip
+	zip $(DISTNAME)-win32.zip $(PROGRAM).exe LICENSE.TXT $(DOCS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rogue3/acinclude.m4	Sat Aug 24 13:36:13 2013 -0700
@@ -0,0 +1,122 @@
+AC_DEFUN([MP_WITH_CURSES],
+  [AC_ARG_WITH(ncurses, [  --with-ncurses          Force the use of ncurses over curses],,)
+   mp_save_LIBS="$LIBS"
+   CURSES_LIB=""
+   if test "$with_ncurses" != yes
+   then
+     AC_CACHE_CHECK([for working curses], mp_cv_curses,
+       [LIBS="$LIBS -lcurses"
+        AC_TRY_LINK(
+          [#include <curses.h>],
+          [chtype a; int b=A_STANDOUT, c=KEY_LEFT; initscr(); ],
+          mp_cv_curses=yes, mp_cv_curses=no)])
+     if test "$mp_cv_curses" = yes
+     then
+       AC_DEFINE(HAVE_CURSES_H, 1, [Define to 1 if libcurses is requested])
+       #AC_DEFINE(HAVE_CURSES_H)
+       CURSES_LIB="-lcurses"
+     fi
+   fi
+   if test ! "$CURSES_LIB"
+   then
+     AC_CACHE_CHECK([for working ncurses], mp_cv_ncurses,
+       [LIBS="$mp_save_LIBS -lncurses"
+        AC_TRY_LINK(
+          [#include <ncurses.h>],
+          [chtype a; int b=A_STANDOUT, c=KEY_LEFT; initscr(); ],
+          mp_cv_ncurses=yes, mp_cv_ncurses=no)])
+     if test "$mp_cv_ncurses" = yes
+     then
+       AC_DEFINE(HAVE_NCURSES_H, 1, [Define to 1 if libncurses is requested])
+       CURSES_LIB="-lncurses"
+     fi
+   fi
+   if test ! "$CURSES_LIB"
+   then
+     AC_CACHE_CHECK([for working pdcurses], mp_cv_pdcurses,
+       [LIBS="$mp_save_LIBS -lpdcurses"
+        AC_TRY_LINK(
+          [#include <curses.h>],
+          [chtype a; int b=A_STANDOUT, c=KEY_LEFT; initscr(); ],
+          mp_cv_pdcurses=yes, mp_cv_pdcurses=no)])
+     if test "$mp_cv_pdcurses" = yes
+     then
+       AC_DEFINE(HAVE_CURSES_H, 1, [Define to 1 if libcurses is requested])
+       CURSES_LIB="-lpdcurses"
+     fi
+   fi
+   if test ! "$CURSES_LIB"
+   then
+     AC_CACHE_CHECK([for working pdcur], mp_cv_pdcur,
+       [LIBS="$mp_save_LIBS -lpdcur"
+        AC_TRY_LINK(
+          [#include <curses.h>],
+          [chtype a; int b=A_STANDOUT, c=KEY_LEFT; initscr(); ],
+          mp_cv_pdcur=yes, mp_cv_pdcur=no)])
+     if test "$mp_cv_pdcur" = yes
+     then
+       AC_DEFINE(HAVE_CURSES_H, 1, [Define to 1 if libcurses is requested])
+       CURSES_LIB="-lpdcur"
+     fi
+   fi
+   if test ! "$CURSES_LIB"
+   then
+     AC_CACHE_CHECK([for working peer pdcurses], mp_cv_lpdcurses,
+       [LIBS="$mp_save_LIBS ../pdcurses/pdcurses.a"
+        AC_TRY_LINK(
+          [#include "../pdcurses/curses.h"],
+          [chtype a; int b=A_STANDOUT, c=KEY_LEFT; initscr(); ],
+          mp_cv_lpdcurses=yes, mp_cv_lpdcurses=no)])
+     if test "$mp_cv_lpdcurses" = yes
+     then
+       AC_DEFINE(HAVE_CURSES_H, 1, [Define to 1 if libcurses is requested])
+       CURSES_LIB="../pdcurses/pdcurses.a"
+       RF_ADDTO(CPPFLAGS,"-I../pdcurses")
+     fi
+   fi
+   AC_CACHE_CHECK([for ESCDELAY variable],
+		   [mc_cv_ncurses_escdelay],
+		   [AC_TRY_LINK([], [
+			extern int ESCDELAY;
+			ESCDELAY = 0;
+			],
+			[mc_cv_ncurses_escdelay=yes],
+			[mc_cv_ncurses_escdelay=no])
+    ])
+    if test "$mc_cv_ncurses_escdelay" = yes; then
+	AC_DEFINE(HAVE_ESCDELAY, 1,
+		  [Define if ncurses has ESCDELAY variable])
+    fi
+   if test ! "$CURSES_LIB" ; then
+       LIBS="$mp_save_LIBS"
+   fi
+])dnl
+
+dnl
+dnl RF_ADDTO(variable, value)
+dnl
+dnl  Add value to variable
+dnl
+AC_DEFUN([RF_ADDTO],[
+  if test "x$$1" = "x"; then
+    test "x$silent" != "xyes" && echo "  setting $1 to \"$2\""
+    $1="$2"
+  else
+    apr_addto_bugger="$2"
+    for i in $apr_addto_bugger; do
+      apr_addto_duplicate="0"
+      for j in $$1; do
+        if test "x$i" = "x$j"; then
+          apr_addto_duplicate="1"
+          break
+        fi
+      done
+      if test $apr_addto_duplicate = "0"; then
+        test "x$silent" != "xyes" && echo "  adding \"$i\" to $1"
+        $1="$$1 $i"
+      fi
+    done
+  fi
+])dnl
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rogue3/configure.ac	Sat Aug 24 13:36:13 2013 -0700
@@ -0,0 +1,200 @@
+#                                               -*- Autoconf -*-
+# Process this file with autoconf to produce a configure script.
+
+AC_PREREQ(2.56)
+AC_INIT([Rogue],[3.6.4], [yendor@rogueforge.net])
+AC_CONFIG_HEADERS([config.h])
+# May not be needed for the documentation
+AC_CONFIG_FILES([Makefile rogue.6 rogue.r])
+
+# Checks for programs.
+AC_PROG_CC
+# Checks for libraries.
+MP_WITH_CURSES
+# Checks for header files.
+AC_HEADER_STDC
+AC_CHECK_HEADERS([arpa/inet.h pwd.h errno.h fcntl.h limits.h nlist.h stdlib.h string.h sys/ioctl.h termios.h unistd.h utmp.h utmpx.h term.h ncurses/term.h process.h])
+# WARN: the sources often don't include the headers when needed.  That is one
+# reason why adding "-Wall" to CFLAGS produces 1246 lines of messages.
+
+# Checks for typedefs, structures, and compiler characteristics.
+AC_TYPE_UID_T
+AC_TYPE_SIZE_T
+AC_STRUCT_TM
+# Checks for library functions.
+AC_FUNC_FORK
+AC_PROG_GCC_TRADITIONAL
+AC_FUNC_LSTAT
+AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK
+AC_TYPE_SIGNAL
+AC_FUNC_STAT
+AC_FUNC_VPRINTF
+AC_CHECK_FUNCS([erasechar killchar alarm getpass memset setenv strchr nlist _spawnl spawnl getpwuid loadav getloadavg strerror setgid setuid getuid getgid])
+AC_PROG_INSTALL
+
+# Programs to process the documentation
+AC_CHECK_PROG([NROFF], [nroff], [nroff],)
+AC_CHECK_PROG([GROFF], [groff], [groff],)
+AC_CHECK_PROG([COLCRT], [colcrt], [colcrt],)
+AC_CHECK_PROG([TBL], [tbl], [tbl],)
+AC_CHECK_PROG([SED], [sed], [sed],)
+
+AC_ARG_WITH(program-name, AC_HELP_STRING([--with-program-name=NAME],[alternate executable name]),[progname="$withval" ], [progname="rogue3"] )
+PROGRAM=$progname
+AC_SUBST(PROGRAM)
+
+AC_ARG_ENABLE(setgid, AC_HELP_STRING([--enable-setgid=NAME],[install executable as setgid with group ownership of NAME @<:@default=no@:>@])],[],[])
+AC_MSG_CHECKING([if using setgid execute bit])
+if test "x$enable_setgid" = "xno" ; then
+GROUPOWNER=
+elif test "x$enable_setgid" = "xyes" ; then
+GROUPOWNER=games
+elif test "x$enable_setgid" = "x" ; then
+GROUPOWNER=
+else
+GROUPOWNER=$enable_setgid
+fi
+
+if test "x$GROUPOWNER" != "x" ; then
+AC_DEFINE_UNQUOTED([GROUPOWNER],[$GROUPOWNER], [Define to group owner of setgid executable])
+AC_MSG_RESULT([$GROUPOWNER])
+else
+AC_MSG_RESULT([no])
+fi
+
+AC_SUBST(GROUPOWNER)
+
+AC_ARG_ENABLE([scorefile],[AC_HELP_STRING([--enable-scorefile=SCOREFILE], [enable scoreboard with given filename])],[],[])
+AC_MSG_CHECKING([for scoreboard file])
+if test "x$enable_scorefile" = "xno" ; then
+SCOREFILE=
+elif test "x$enable_scorefile" = "xyes" ;  then
+SCOREFILE=$progname.scr
+elif test "x$enable_scorefile" = "x" ; then
+SCOREFILE=$progname.scr
+else
+SCOREFILE=$enable_scorefile
+fi
+
+if test "x$SCOREFILE" != "x" ; then
+AC_DEFINE_UNQUOTED([SCOREFILE], ["$SCOREFILE"], [Define to file to use for scoreboard])
+AC_MSG_RESULT([$SCOREFILE])
+else
+AC_MSG_RESULT([disabled])
+fi
+
+AC_SUBST(SCOREFILE)
+
+AC_ARG_ENABLE([logfile],[AC_HELP_STRING([--enable-logfile=LOGFILE], [enable logfile with given filename])],[],[])
+AC_MSG_CHECKING([for log file])
+if test "x$enable_logfile" = "xno" ; then
+LOGFILE=
+elif test "x$enable_logfile" = "xyes" ;  then
+LOGFILE=$progname.log
+elif test "x$enable_logfile" = "x" ; then
+LOGFILE=$progname.log
+else
+LOGFILE=$enable_logfile
+fi
+
+if test "x$LOGFILE" != "x" ; then
+AC_DEFINE_UNQUOTED([LOGFILE], ["$LOGFILE"], [Define to file to use for log])
+AC_MSG_RESULT([$LOGFILE])
+else
+AC_MSG_RESULT([disabled])
+fi
+
+AC_SUBST(LOGFILE)
+
+AC_ARG_ENABLE([savedir],[AC_HELP_STRING([--enable-savedir=SAVEDIR], [enable systemwide location for saved games])],[],[enable_savedir="no"])
+AC_MSG_CHECKING([for save directory])
+if test "x$enable_savedir" = "xno" ; then
+SAVEDIR=
+elif test "x$enable_savedir" = "xyes" -o "x$enable_savedir" = "x"; then
+  if text "x$GROUPOWNER" != "x"; then
+  SAVEDIR="/var/local/games/roguelike/${progname}save/"
+  else
+  SAVEDIR="$progname/"
+  fi
+else
+SAVEDIR="$enable_savedir"
+fi
+
+if test "x$SAVEDIR" != "x" ; then
+AC_DEFINE_UNQUOTED([SAVEDIR], ["$SAVEDIR"], [Define to systemwide directory for storing saved games])
+AC_MSG_RESULT([$SAVEDIR])
+else
+AC_MSG_RESULT([disabled])
+fi
+
+AC_SUBST(SAVEDIR)
+
+AC_ARG_ENABLE([destdir],[AC_HELP_STRING([--enable-destdir=DESTDIR], [chroot to install into])],[],[])
+AC_MSG_CHECKING([for chrooted install])
+if test "x$enable_destdir" = "xno" ; then
+DESTDIR=
+elif test "x$enable_destdir" = "xyes" ; then
+DESTDIR=
+elif test "x$enable_destdir" = "x" ; then
+DESTDIR=
+else
+DESTDIR=$enable_destdir
+fi
+
+if test "x$DESTDIR" != "x" ; then
+AC_MSG_RESULT([$DESTDIR])
+else
+AC_MSG_RESULT([disabled])
+fi
+
+AC_SUBST(DESTDIR)
+
+AC_ARG_ENABLE([wizardmode],[AC_HELP_STRING([--enable-wizardmode], [enable availability of wizard mode @<:@default=no@:>@])],[],[])
+AC_MSG_CHECKING([if wizard mode is enabled])
+if test "x$enable_wizardmode" = "xno" ; then
+AC_MSG_RESULT([no])
+elif test "x$enable_wizardmode" = "x" ; then
+AC_MSG_RESULT([no])
+else
+AC_DEFINE([WIZARD], [], [Define to include wizard mode])
+AC_MSG_RESULT([yes])
+fi
+
+AC_ARG_ENABLE([maxload],[AC_HELP_STRING([--enable-maxload], [enable maxload @<:@default=no@:>@])],[],[])
+AC_MSG_CHECKING([runtime execution limit (maximum system load average)])
+if test "x$enable_maxload" = "xyes" ; then
+AC_DEFINE([MAXLOAD], [100], [Define if maxload feature should be enabled])
+AC_MSG_RESULT([100])
+elif test "x$enable_maxload" = "x" ; then
+AC_MSG_RESULT([unlimited])
+elif test "x$enable_maxload" = "xno" ; then
+AC_MSG_RESULT([unlimited])
+else
+AC_DEFINE_UNQUOTED([MAXLOAD], [$enable_maxload], [Define if maxload feature should be enabled])
+AC_MSG_RESULT([$enable_maxload])
+fi
+
+AC_ARG_ENABLE([maxusers],[AC_HELP_STRING([--enable-maxusers], [enable maxuser @<:@default=no@:>@])],[],[])
+AC_MSG_CHECKING([runtime execution limit (maximum online system users)])
+if test "x$enable_maxusers" = "xyes" ; then
+AC_DEFINE([MAXUSERS], [100], [Define if maxusers feature should be enabled])
+AC_MSG_RESULT([100])
+elif test "x$enable_maxusers" = "x" ; then
+AC_MSG_RESULT([unlimited])
+elif test "x$enable_maxload" = "xno" ; then 
+AC_MSG_RESULT([unlimited])
+else
+AC_DEFINE_UNQUOTED([MAXLOAD], [$enable_maxusers], [Define if maxusers feature should be enabled])
+AC_MSG_RESULT([$enable_maxusers])
+fi
+
+AC_MSG_CHECKING([whether to docdir is defined])
+if test "x$docdir" = "x" ; then
+AC_MSG_RESULT([docdir undefined])
+docdir=\${datadir}/doc/\${PACKAGE_TARNAME}
+AC_SUBST(docdir)
+else
+AC_MSG_RESULT([docdir defined])
+fi
+
+AC_OUTPUT
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rogue3/install-sh	Sat Aug 24 13:36:13 2013 -0700
@@ -0,0 +1,527 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2011-11-20.07; # UTC
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# 'make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+
+nl='
+'
+IFS=" ""	$nl"
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit=${DOITPROG-}
+if test -z "$doit"; then
+  doit_exec=exec
+else
+  doit_exec=$doit
+fi
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_glob='?'
+initialize_posix_glob='
+  test "$posix_glob" != "?" || {
+    if (set -f) 2>/dev/null; then
+      posix_glob=
+    else
+      posix_glob=:
+    fi
+  }
+'
+
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+chgrpcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
+rmcmd="$rmprog -f"
+stripcmd=
+
+src=
+dst=
+dir_arg=
+dst_arg=
+
+copy_on_change=false
+no_target_directory=
+
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+   or: $0 [OPTION]... SRCFILES... DIRECTORY
+   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+   or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+     --help     display this help and exit.
+     --version  display version info and exit.
+
+  -c            (ignored)
+  -C            install only if different (preserve the last data modification time)
+  -d            create directories instead of installing files.
+  -g GROUP      $chgrpprog installed files to GROUP.
+  -m MODE       $chmodprog installed files to MODE.
+  -o USER       $chownprog installed files to USER.
+  -s            $stripprog installed files.
+  -t DIRECTORY  install into DIRECTORY.
+  -T            report an error if DSTFILE is a directory.
+
+Environment variables override the default commands:
+  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+  RMPROG STRIPPROG
+"
+
+while test $# -ne 0; do
+  case $1 in
+    -c) ;;
+
+    -C) copy_on_change=true;;
+
+    -d) dir_arg=true;;
+
+    -g) chgrpcmd="$chgrpprog $2"
+	shift;;
+
+    --help) echo "$usage"; exit $?;;
+
+    -m) mode=$2
+	case $mode in
+	  *' '* | *'	'* | *'
+'*	  | *'*'* | *'?'* | *'['*)
+	    echo "$0: invalid mode: $mode" >&2
+	    exit 1;;
+	esac
+	shift;;
+
+    -o) chowncmd="$chownprog $2"
+	shift;;
+
+    -s) stripcmd=$stripprog;;
+
+    -t) dst_arg=$2
+	# Protect names problematic for 'test' and other utilities.
+	case $dst_arg in
+	  -* | [=\(\)!]) dst_arg=./$dst_arg;;
+	esac
+	shift;;
+
+    -T) no_target_directory=true;;
+
+    --version) echo "$0 $scriptversion"; exit $?;;
+
+    --)	shift
+	break;;
+
+    -*)	echo "$0: invalid option: $1" >&2
+	exit 1;;
+
+    *)  break;;
+  esac
+  shift
+done
+
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+  # When -d is used, all remaining arguments are directories to create.
+  # When -t is used, the destination is already specified.
+  # Otherwise, the last argument is the destination.  Remove it from $@.
+  for arg
+  do
+    if test -n "$dst_arg"; then
+      # $@ is not empty: it contains at least $arg.
+      set fnord "$@" "$dst_arg"
+      shift # fnord
+    fi
+    shift # arg
+    dst_arg=$arg
+    # Protect names problematic for 'test' and other utilities.
+    case $dst_arg in
+      -* | [=\(\)!]) dst_arg=./$dst_arg;;
+    esac
+  done
+fi
+
+if test $# -eq 0; then
+  if test -z "$dir_arg"; then
+    echo "$0: no input file specified." >&2
+    exit 1
+  fi
+  # It's OK to call 'install-sh -d' without argument.
+  # This can happen when creating conditional directories.
+  exit 0
+fi
+
+if test -z "$dir_arg"; then
+  do_exit='(exit $ret); exit $ret'
+  trap "ret=129; $do_exit" 1
+  trap "ret=130; $do_exit" 2
+  trap "ret=141; $do_exit" 13
+  trap "ret=143; $do_exit" 15
+
+  # Set umask so as not to create temps with too-generous modes.
+  # However, 'strip' requires both read and write access to temps.
+  case $mode in
+    # Optimize common cases.
+    *644) cp_umask=133;;
+    *755) cp_umask=22;;
+
+    *[0-7])
+      if test -z "$stripcmd"; then
+	u_plus_rw=
+      else
+	u_plus_rw='% 200'
+      fi
+      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+    *)
+      if test -z "$stripcmd"; then
+	u_plus_rw=
+      else
+	u_plus_rw=,u+rw
+      fi
+      cp_umask=$mode$u_plus_rw;;
+  esac
+fi
+
+for src
+do
+  # Protect names problematic for 'test' and other utilities.
+  case $src in
+    -* | [=\(\)!]) src=./$src;;
+  esac
+
+  if test -n "$dir_arg"; then
+    dst=$src
+    dstdir=$dst
+    test -d "$dstdir"
+    dstdir_status=$?
+  else
+
+    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+    # might cause directories to be created, which would be especially bad
+    # if $src (and thus $dsttmp) contains '*'.
+    if test ! -f "$src" && test ! -d "$src"; then
+      echo "$0: $src does not exist." >&2
+      exit 1
+    fi
+
+    if test -z "$dst_arg"; then
+      echo "$0: no destination specified." >&2
+      exit 1
+    fi
+    dst=$dst_arg
+
+    # If destination is a directory, append the input filename; won't work
+    # if double slashes aren't ignored.
+    if test -d "$dst"; then
+      if test -n "$no_target_directory"; then
+	echo "$0: $dst_arg: Is a directory" >&2
+	exit 1
+      fi
+      dstdir=$dst
+      dst=$dstdir/`basename "$src"`
+      dstdir_status=0
+    else
+      # Prefer dirname, but fall back on a substitute if dirname fails.
+      dstdir=`
+	(dirname "$dst") 2>/dev/null ||
+	expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	     X"$dst" : 'X\(//\)[^/]' \| \
+	     X"$dst" : 'X\(//\)$' \| \
+	     X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+	echo X"$dst" |
+	    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\/\)[^/].*/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\/\)$/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\).*/{
+		   s//\1/
+		   q
+		 }
+		 s/.*/./; q'
+      `
+
+      test -d "$dstdir"
+      dstdir_status=$?
+    fi
+  fi
+
+  obsolete_mkdir_used=false
+
+  if test $dstdir_status != 0; then
+    case $posix_mkdir in
+      '')
+	# Create intermediate dirs using mode 755 as modified by the umask.
+	# This is like FreeBSD 'install' as of 1997-10-28.
+	umask=`umask`
+	case $stripcmd.$umask in
+	  # Optimize common cases.
+	  *[2367][2367]) mkdir_umask=$umask;;
+	  .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+	  *[0-7])
+	    mkdir_umask=`expr $umask + 22 \
+	      - $umask % 100 % 40 + $umask % 20 \
+	      - $umask % 10 % 4 + $umask % 2
+	    `;;
+	  *) mkdir_umask=$umask,go-w;;
+	esac
+
+	# With -d, create the new directory with the user-specified mode.
+	# Otherwise, rely on $mkdir_umask.
+	if test -n "$dir_arg"; then
+	  mkdir_mode=-m$mode
+	else
+	  mkdir_mode=
+	fi
+
+	posix_mkdir=false
+	case $umask in
+	  *[123567][0-7][0-7])
+	    # POSIX mkdir -p sets u+wx bits regardless of umask, which
+	    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+	    ;;
+	  *)
+	    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+	    trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+	    if (umask $mkdir_umask &&
+		exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+	    then
+	      if test -z "$dir_arg" || {
+		   # Check for POSIX incompatibilities with -m.
+		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+		   # other-writable bit of parent directory when it shouldn't.
+		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
+		   case $ls_ld_tmpdir in
+		     d????-?r-*) different_mode=700;;
+		     d????-?--*) different_mode=755;;
+		     *) false;;
+		   esac &&
+		   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+		     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+		   }
+		 }
+	      then posix_mkdir=:
+	      fi
+	      rmdir "$tmpdir/d" "$tmpdir"
+	    else
+	      # Remove any dirs left behind by ancient mkdir implementations.
+	      rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+	    fi
+	    trap '' 0;;
+	esac;;
+    esac
+
+    if
+      $posix_mkdir && (
+	umask $mkdir_umask &&
+	$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+      )
+    then :
+    else
+
+      # The umask is ridiculous, or mkdir does not conform to POSIX,
+      # or it failed possibly due to a race condition.  Create the
+      # directory the slow way, step by step, checking for races as we go.
+
+      case $dstdir in
+	/*) prefix='/';;
+	[-=\(\)!]*) prefix='./';;
+	*)  prefix='';;
+      esac
+
+      eval "$initialize_posix_glob"
+
+      oIFS=$IFS
+      IFS=/
+      $posix_glob set -f
+      set fnord $dstdir
+      shift
+      $posix_glob set +f
+      IFS=$oIFS
+
+      prefixes=
+
+      for d
+      do
+	test X"$d" = X && continue
+
+	prefix=$prefix$d
+	if test -d "$prefix"; then
+	  prefixes=
+	else
+	  if $posix_mkdir; then
+	    (umask=$mkdir_umask &&
+	     $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+	    # Don't fail if two instances are running concurrently.
+	    test -d "$prefix" || exit 1
+	  else
+	    case $prefix in
+	      *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+	      *) qprefix=$prefix;;
+	    esac
+	    prefixes="$prefixes '$qprefix'"
+	  fi
+	fi
+	prefix=$prefix/
+      done
+
+      if test -n "$prefixes"; then
+	# Don't fail if two instances are running concurrently.
+	(umask $mkdir_umask &&
+	 eval "\$doit_exec \$mkdirprog $prefixes") ||
+	  test -d "$dstdir" || exit 1
+	obsolete_mkdir_used=true
+      fi
+    fi
+  fi
+
+  if test -n "$dir_arg"; then
+    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+  else
+
+    # Make a couple of temp file names in the proper directory.
+    dsttmp=$dstdir/_inst.$$_
+    rmtmp=$dstdir/_rm.$$_
+
+    # Trap to clean up those temp files at exit.
+    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+    # Copy the file name to the temp name.
+    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+    # and set any options; do chmod last to preserve setuid bits.
+    #
+    # If any of these fail, we abort the whole thing.  If we want to
+    # ignore errors from any of these, just make sure not to ignore
+    # errors from the above "$doit $cpprog $src $dsttmp" command.
+    #
+    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+    # If -C, don't bother to copy if it wouldn't change the file.
+    if $copy_on_change &&
+       old=`LC_ALL=C ls -dlL "$dst"	2>/dev/null` &&
+       new=`LC_ALL=C ls -dlL "$dsttmp"	2>/dev/null` &&
+
+       eval "$initialize_posix_glob" &&
+       $posix_glob set -f &&
+       set X $old && old=:$2:$4:$5:$6 &&
+       set X $new && new=:$2:$4:$5:$6 &&
+       $posix_glob set +f &&
+
+       test "$old" = "$new" &&
+       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+    then
+      rm -f "$dsttmp"
+    else
+      # Rename the file to the real destination.
+      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+      # The rename failed, perhaps because mv can't rename something else
+      # to itself, or perhaps because mv is so ancient that it does not
+      # support -f.
+      {
+	# Now remove or move aside any old file at destination location.
+	# We try this two ways since rm can't unlink itself on some
+	# systems and the destination file might be busy for other
+	# reasons.  In this case, the final cleanup might fail but the new
+	# file should still install successfully.
+	{
+	  test ! -f "$dst" ||
+	  $doit $rmcmd -f "$dst" 2>/dev/null ||
+	  { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+	    { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+	  } ||
+	  { echo "$0: cannot unlink or rename $dst" >&2
+	    (exit 1); exit 1
+	  }
+	} &&
+
+	# Now rename the file to the real destination.
+	$doit $mvcmd "$dsttmp" "$dst"
+      }
+    fi || exit 1
+
+    trap '' 0
+  fi
+done
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
--- a/rogue3/machdep.h	Tue Aug 13 09:19:56 2013 -0700
+++ b/rogue3/machdep.h	Sat Aug 24 13:36:13 2013 -0700
@@ -14,17 +14,12 @@
  * Variables for checking to make sure the system isn't too loaded
  * for people to play
  */
-/* Comment out MAXLOAD or MAXUSERS to disable a check */
+/* MAXLOAD and MAXUSERS are now set by configure. */
 
 #define AUTHORUID        0
+#if 0
 #define	MAXUSERS	25	/* max number of users for this game */
 #define	MAXLOAD		40	/* 10 * max 15 minute load average */
+#endif
 #define	CHECKTIME	15	/* number of minutes between load checks */
 
-/* Locations of various files.  Comment out to disable. */
-/* The list of top ten scores. */
-#define SCOREFILE "/var/local/games/roguelike/rogue3.scr"
-/* A text file with a record of every game. */
-#define LOGFILE   "/var/local/games/roguelike/rogue3.log"
-/* A standard location for saved games. */
-#define SAVEDIR   "/var/local/games/roguelike/rogue3save/"
--- a/rogue3/mdport.c	Tue Aug 13 09:19:56 2013 -0700
+++ b/rogue3/mdport.c	Sat Aug 24 13:36:13 2013 -0700
@@ -61,10 +61,6 @@
 #include <pwd.h>
 #endif
 
-#if defined(HAVE_SYS_UTSNAME)
-#include <sys/utsname.h>
-#endif
-
 #if defined(HAVE_ARPA_INET_H)
 #include <arpa/inet.h> /* Solaris 2.8 required this for htonl() and ntohl() */
 #endif
@@ -1568,7 +1564,7 @@
 
    return(count);
 #else
-   return(1)
+   return(1);
 #endif
 }
 
--- a/rogue3/rogue.6	Tue Aug 13 09:19:56 2013 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,87 +0,0 @@
-.TH ROGUE 6
-.UC
-.SH NAME
-rogue \- Exploring The Dungeons of Doom
-.SH SYNOPSIS
-.B rogue
-[ -s ]
-[
-.I save_file
-]
-[ -n
-.I playername
-]
-.SH DESCRIPTION
-.PP
-.I Rogue
-is a computer fantasy game with a new twist.  It is crt oriented and the
-object of the game is to survive the attacks of various monsters and get
-a lot of gold, rather than the puzzle solving orientation of most computer
-fantasy games.
-.PP
-To get started you really only need to know two commands.  The command
-.B ?
-will give you a list of the available commands and the command
-.B /
-will identify the things you see on the screen.
-.PP
-To win the game (as opposed to merely playing to beat other people's high
-scores) you must locate the Amulet of Yendor which is somewhere below
-the 20th level of the dungeon and get it out.  Nobody has achieved this
-yet and if somebody does, they will probably go down in history as a hero
-among heros.
-.PP
-When the game ends, either by your death, when you quit, or if you (by
-some miracle) manage to win,
-.I rogue
-will give you a list of the top-ten scorers.  The scoring is based entirely
-upon how much gold you get.  There is a 10% penalty for getting yourself
-killed.
-.PP
-For more detailed directions, read the document
-.I "A Guide to the Dungeons of Doom."
-.SH OPTIONS
-.PP
-If a
-.I save_file
-argument is given,
-.I rogue
-will attempt to load a previously saved game from that file.
-.PP
-With the
-.B -n
-option,
-.I rogue
-will load a game with the name
-.I playername
-from a location defined at compile time.  If no such game exists, it will 
-start one.
-.PP
-The
-.B -s
-option prints the top-ten scores list and exits.
-
-.SH FILES
-.ta 2i
-/usr/local/games/roguelike/rogue3.scr   Score file
-.br
-~/rogue3.save                           Default save file
-.br
-/usr/local/games/roguelike/rogue3save   System savefiles
-.DT
-.SH SEE ALSO
-Michael C. Toy,
-.I "A Guide to the Dungeons of Doom"
-.SH BUGS
-.PP
-Probably infinite.  Currently known bugs are: Sometimes you are still hungry
-even after you eat food and sometimes you get a monster on the screen in
-reverse video which may or may not cause a core dump.
-.SH COPYRIGHT
-Rogue: Exploring the Dungeons of Doom
-.br
-Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman
-.br
-All rights reserved.
-.br
-License: 3-clause BSD, see LICENSE.txt for details.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rogue3/rogue.6.in	Sat Aug 24 13:36:13 2013 -0700
@@ -0,0 +1,87 @@
+.TH ROGUE 6
+.UC
+.SH NAME
+rogue \- Exploring The Dungeons of Doom
+.SH SYNOPSIS
+.B @PROGRAM@
+[ -s ]
+[
+.I save_file
+]
+[ -n
+.I playername
+]
+.SH DESCRIPTION
+.PP
+.I Rogue
+is a computer fantasy game with a new twist.  It is crt oriented and the
+object of the game is to survive the attacks of various monsters and get
+a lot of gold, rather than the puzzle solving orientation of most computer
+fantasy games.
+.PP
+To get started you really only need to know two commands.  The command
+.B ?
+will give you a list of the available commands and the command
+.B /
+will identify the things you see on the screen.
+.PP
+To win the game (as opposed to merely playing to beat other people's high
+scores) you must locate the Amulet of Yendor which is somewhere below
+the 20th level of the dungeon and get it out.  Nobody has achieved this
+yet and if somebody does, they will probably go down in history as a hero
+among heros.
+.PP
+When the game ends, either by your death, when you quit, or if you (by
+some miracle) manage to win,
+.I rogue
+will give you a list of the top-ten scorers.  The scoring is based entirely
+upon how much gold you get.  There is a 10% penalty for getting yourself
+killed.
+.PP
+For more detailed directions, read the document
+.I "A Guide to the Dungeons of Doom."
+.SH OPTIONS
+.PP
+If a
+.I save_file
+argument is given,
+.I rogue
+will attempt to load a previously saved game from that file.
+.PP
+With the
+.B -n
+option,
+.I rogue
+will load a game with the name
+.I playername
+from a location defined at compile time.  If no such game exists, it will 
+start one.
+.PP
+The
+.B -s
+option prints the top-ten scores list and exits.
+
+.SH FILES
+.ta 2i
+@SCOREFILE@   Score file
+.br
+~/rogue3.save                           Default save file
+.br
+/usr/local/games/roguelike/rogue3save   System savefiles
+.DT
+.SH SEE ALSO
+Michael C. Toy,
+.I "A Guide to the Dungeons of Doom"
+.SH BUGS
+.PP
+Probably infinite.  Currently known bugs are: Sometimes you are still hungry
+even after you eat food and sometimes you get a monster on the screen in
+reverse video which may or may not cause a core dump.
+.SH COPYRIGHT
+Rogue: Exploring the Dungeons of Doom
+.br
+Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman
+.br
+All rights reserved.
+.br
+License: 3-clause BSD, see LICENSE.txt for details.
--- a/rogue3/rogue.r	Tue Aug 13 09:19:56 2013 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,411 +0,0 @@
-.RP
-.ds RH A Guide to the Dungeons of Doom
-.ds CH
-.ds CF - % -
-.TL
-A Guide to the Dungeons of Doom
-.AU
-Michael C. Toy
-.AI
-Computer Systems Research Group
-Department of Electrical Engineering and Computer Science
-University of California
-Berkeley, California  94720
-.AB
-Rogue is a visual CRT based fantasy game which runs
-under the UNIX timesharing system.  This paper describes
-how to play rogue and gives a few hints for those who might
-otherwise get lost in the Dungeons of Doom.
-.AE
-.NH
-Introduction
-.PP
-You have just finished your years as a student at the local fighter's guild.
-After much practice and sweat you have finally completed your training and
-are ready to embark upon a perilous adventure.  As a test of your skills,
-the local guildmasters have sent you into the Dungeons of Doom.  Your
-task is to return with the Amulet of Yendor.  Your reward for the completion
-of this task will be a full membership in the local guild. In addition, you are
-allowed to keep all the loot you bring back from the dungeons.
-.PP
-In preparation for your journey, you are given an enchanted sword, taken
-from a dragon's hoard in the far off Dark Mountains.  You are also outfitted
-with elf-crafted armor and given enough food to reach the dungeons.  You
-say goodbye to family and friends for what may be the last time and head
-up the road.
-.PP
-You set out on your way to the dungeons and after several days of uneventful
-travel, you see the ancient ruins that mark the entrance to the Dungeons
-of Doom.  It is late at night so you make camp at the entrance and spend
-the night sleeping under the open skies.  In the morning you gather
-your sword, put on your armor, eat what is almost your last food and enter
-the dungeons.
-.NH
-What is going on here?
-.PP
-You have just begun a game of rogue.  Your goal is to grab as much treasure
-as you can, find the Amulet of Yendor, and get out of the Dungeons of Doom
-alive.  On the screen, a map of where you have been and what you have seen on
-the current dungeon level is kept.  As you explore more of the level,
-it appears on the screen in front of you.
-.PP
-Rogue differs from most computer fantasy games in that it is screen
-oriented.  Commands are all one or two keystrokes\(dg
-.FS
-\(dgAs opposed to pseudo English sentences.
-.FE
-and the results of your commands are displayed
-graphically on the screen rather than being explained in words.
-.PP
-Another major difference between rogue and other computer fantasy games
-is that once you have solved all the puzzles in a standard fantasy game,
-it has lost most of its excitement and it ceases to be fun.  Rogue on the
-other hand generates a new dungeon every time you play it and
-even the author finds it an entertaining and exciting game.
-.NH
-What do all those things on the screen mean?
-.PP
-In order to understand what is going on in rogue you have to first get
-some grasp of what rogue is doing with the screen.
-The rogue screen is intended to replace the "You can see ..." descriptions
-of standard fantasy games.  Here is a sample of what a rogue screen might
-look like.
-.in +1i
-.nf
-.cs R 15
-                  ---------------------
-                  |...................+
-                  |...@...........[...|
-                  |........B..........|
-                  |...................|
-                  --------+------------
-
-
-.cs R
-Level: 1  Gold: 0      Hp: 12(12)  Str: 16  Ac: 6  Exp: 1/0
-.fi
-.in 0
-.NH 2
-The bottom line
-.PP
-At the bottom line of the screen is a few pieces of cryptic information,
-describing your current status.  Here is an explanation of what these
-things mean:
-.IP Level 8
-This number indicates how deep you have gone in the dungeon.  It starts
-at one and goes up forever\(dg.
-.FS
-\(dgOr until you get killed or decide to quit.
-.FE
-.IP Gold
-The number of gold pieces you have managed to find and keep with
-you so far.
-.IP Hp
-Your current and maximum hit points.  Hit points indicate how much
-damage you can take before you die.  The more you get hit in a
-fight, the lower they
-get.  You can regain hit points by resting. The number in parentheses is
-the maximum number your hit points can reach.
-.IP Str
-Your current strength.  This can be any integer less than or
-equal to eighteen.  The higher the number, the stronger you are.
-.IP Ac
-Your current armor class.  This number indicates how effective
-your armor is in stopping blows from unfriendly creatures.  The lower
-this number is, the more effective the armor.
-.IP Exp
-These two numbers give your current experience level and experience points.
-As you do things, you gain experience points.  At certain experience point
-totals, you gain an experience level.  The more experienced you are, the
-better you are able to fight and to withstand magical attacks.
-.NH 2
-The top line
-.PP
-The top line of the screen is reserved for printing messages that describe
-things that are impossible to represent visually.  If you see a
-"--More--" on the top line, this means that rogue wants to print another
-message on the screen, but it wants to make certain that you have read
-the one that is there first.  To read the next message, just press a
-space.
-.NH 2
-The rest of the screen
-.PP
-The rest of the screen is the map of the level as you have explored it so far.
-Each symbol on the screen represents something.  Here is a list of what
-the various symbols mean:
-.IP @
-This symbol represents you, the adventurer.
-.IP "-|" 6
-These symbols represent the walls of rooms.
-.IP +
-A door to/from a room.
-.IP .
-The floor of a room.
-.IP #
-The floor of a passage between rooms.
-.IP *
-A pile or pot of gold.
-.IP )
-A weapon of some sort.
-.IP ]
-A piece of armor.
-.IP !
-A flask containing a magic potion.
-.IP ?
-A piece of paper, usually a magic scroll.
-.IP ^
-A trap, watch out for these.
-.IP %
-The passage leading down to the next level.
-.IP :
-A piece of food.
-.IP A-Z
-The uppercase letters represent the various inhabitants of the
-Dungeons of Doom.  Watch out, they can be mean.
-.NH
-Commands
-.PP
-Commands are given to rogue by pressing single letters.  Most commands can
-be preceded by a count to repeat them (e.g. typing "10s" will do ten searches)
-The list of commands is rather long, but it can be read at any time during
-the game with the ? command.  Here it is for reference, with a short
-explanation of each command.
-.IP ? 6
-The help command.  Asks for a character to give help on.  If you type
-a "*", it will list all the commands, otherwise it will explain what the
-character you typed does.
-.IP /
-This is the "What is that on the screen?" command. A "/" followed by any
-character that you see on the level, will tell you what that character
-is.  For instance, typing "/@" will tell you that the @ symbol represents
-you, the player.
-.IP "h , H"
-Move left.  You move one space to the left.  If you use upper case
-h, you will continue to move left until you run into something.  This
-works for all movement commands (e.g. "L" means run in direction "l")
-.IP j
-Move down.
-.IP k
-Move up.
-.IP l
-Move right.
-.IP y
-Move diagonally up and left.
-.IP u
-Move diagonally up and right.
-.IP b
-Move diagonally down and left.
-.IP n
-Move diagonally down and right.
-.IP f
-Find prefix.  When followed by a direction it means to continue moving
-in the specified direction until you pass something interesting or
-run into a wall.
-.IP t
-Throw an object.  This is a prefix command.  Follow it with a direction and
-you throw an object in the specified direction.  (e.g. type "th" to throw
-something left.)
-.IP >
-If you are standing over the passage down to the next level, this command
-means to climb down.
-.IP s
-Search for traps and secret doors.  Examine each space immediately adjacent
-to you for the existence of a trap or secret door.  There is a large chance
-that even if there is something there, you won't find it so you might
-have to search a while before you find something.
-.IP " "
-(space) Rest.  This is the "do nothing" command.
-This is good for waiting and healing.
-.IP i
-Inventory.  List what you are carrying in your pack.
-.IP I
-Selective inventory.  Tells you what a single item in your pack is.
-.IP q
-Quaff.  Drink one of the potions you are carrying.
-.IP r
-Read.  Read one of the scrolls in your pack.
-.IP e
-Eat food.  Take some food out of your pack and eat it.
-.IP w
-Wield a weapon.  Take a weapon out of your pack and carry it.  You must be
-wielding  weapon to use it (except to throw things).  To fire an arrow,
-you must wield the bow.  You can only wield one weapon at a time.
-.IP W
-Wear armor.  Take a piece of armor out of your pack and put it on.  You can
-only wear one suit of armor at a time.
-.IP T
-Take armor off.  You can't remove armor that is cursed.
-This takes extra time.
-.IP d
-Drop an object.  Take something out of your pack and leave it lying
-on the floor.  Only one object can occupy each space.
-.IP o
-Examine and set options.  This command is further explained in the section
-on options.
-.IP ^L
-REdraws the screen. Useful if spurious messages or transmission errors
-have messed up the display.
-.IP v
-Prints the program version number.
-.IP Q
-Quit.  Leave the game.
-.IP R
-Repeat last message.  Useful when a message disappears before you can
-read it.
-.IP S
-Save the current game in a file.  Caveat: Rogue won't let you start
-up a copy of a saved game, and it removes the save file as soon as
-you start up a restored game.  This is to prevent people from saving
-a game just before a dangerous position and then restarting it
-if they die.  To restore a saved game, give the file name as an argument
-to rogue. As in
-.ti +1i
-.nf
-% rogue save_file
-.NH
-Dealing with objects
-.PP
-When you find something in the dungeon, it is common to want to pick the
-object up.  This is accomplished in rogue by walking over the object.  If
-you are carrying too many things, the program will tell you and it won't pick
-up the object, otherwise it will add it to your pack and if the notify
-option is set, tell you what you just picked up.
-.PP
-Many of the commands that operate on objects must prompt you to find
-out which object you want to use.  If you change your mind and don't want to
-do that command after all, just press an escape and the command will be
-aborted.
-.NH
-Light
-.PP
-Rooms in the dungeons are either lit or dark.  If you walk into a lit room,
-the entire room will be drawn on the screen as soon as you enter.  If you
-walk into a dark room, it will only be displayed as you explore it.  Upon
-leaving a dark room, all objects inside the room which might move are
-removed from the screen.  In the darkness you can only see one space
-in all directions around you.
-.NH
-Fighting
-.PP
-If you see a monster and you wish to fight it, just attempt to run into it.
-Many times a monster you find will mind its own business unless you attack
-it.  It is often the case that discretion is the better part of valor.
-.NH
-Armor
-.PP
-There are various sorts of armor lying around in the dungeon.  Some of it
-is enchanted, some is cursed and some is just normal.  Different armor
-types have different armor classes.  The lower the armor class, the
-more protection the armor affords against the blows of monsters.
-If a piece of armor is enchanted or
-cursed, its armor class will be higher or lower than normal.  Here is
-a list of the various armor types and their normal armor class.
-.TS
-center box;
-c c
-l | c.
-Type	Class
-=
-Leather armor	8
-Studded leather / Ring mail	7
-Scale mail	6
-Chain mail	5
-Banded mail / Splint mail	4
-Plate mail	3
-.TE
-.NH
-Options
-.PP
-Due to variations in personal tastes and conceptions of the way rogue
-should do things, there are a set of options you can set that cause
-rogue to behave in various different ways.
-.NH 2
-Setting the options
-.PP
-There are basically two ways to set the options.  The first is with the
-"o" command of rogue, the second is with the ROGUEOPTS environment
-variable.  On Version 6 systems, there is no equivalent of
-the ROGUEOPTS feature.
-.NH 3
-Using the "o" command
-.PP
-When you press "o" in rogue, it clears the screen and displays the current
-settings for all the options.  It then places the cursor by the value of the
-first option and waits for you to type.  You can type a RETURN which means to
-go to the next option, a "\-" which means to go to the previous option, an
-escape which means to return to the game, or you can give the option a
-value.  For boolean options this merely involves pressing "t" for true or
-"f" for false.  For string options, type the new value followed by a
-return.
-.NH 3
-Using the ROGUEOPTS variable
-.PP
-The ROGUEOPTS variable is a string containing a comma separated list of
-initial values for the various options.  Boolean variables can be turned
-on by listing their name and turned off by putting a "no" in front of the
-name.  Thus to set up an environment variable so that jump is on, terse is
-off, the name is set to "Conan the Barbarian" and the fruit is "mango",
-use the command
-.nf
-.nf
-.ti +3
-% setenv ROGUEOPTS "jump,noterse,name=Conan the Barbarian,fruit=mango" \(dg
-.fi
-.ti +3
-% setenv ROGUEOPTS "jump,noterse,name=Conan the Barbarian,fruit=mango" \(dg
-.fi
-.FS
-\(dgFor those of you who use the bourne shell, the commands would be
-.in +3
-.nf
-$ ROGUEOPTS="jump,noterse,name=Conan the Barbarian,fruit=mango"
-$ export ROGUEOPTS
-.fi
-.in +0
-.FE
-.NH 2
-Option list
-.PP
-Here is a list of the options and an explanation of what each one is for.
-The default value for each is enclosed in square brackets.
-.IP "terse [noterse]" 25
-Useful for those who are tired of the sometimes lengthy messages of rogue.
-This is a useful option for those on slow terminals.  This option defaults to
-on if your are on a slow (under 1200 baud) terminal.
-.IP "jump [nojump]"
-If this option is set, running moves will not be displayed until you
-reach the end of the move.  This saves considerable cpu time and
-display time.  This option defaults to on if you are using a slow terminal.
-.IP "step [nostep]
-When step is set, lists of things, like inventories or "*" responses to
-"Which item do you wish to xxxx? " questions, are displayed one item
-at a time on the top of the screen, rather than clearing the screen,
-displaying the list, then re-displaying the dungeon level.
-.IP "flush [noflush]"
-If flush is set, all typeahead is thrown away after each round of battle.
-This is useful for those who type way ahead and watch to their dismay as
-a Kobold kills them.
-.IP "askme [noaskme]"
-Upon reading a scroll or quaffing a potion which does not automatically
-identify it upon use, rogue will ask you what to name it so you can
-recognize it in the future.
-.IP "name [account name]"
-This is the name of your character.  It is used if you get on the top ten
-scorer's list.  It should be less than eighty characters long.
-.IP "fruit [slime-mold]"
-This should hold the name of a fruit that you enjoy eating.  It is basically
-a whimsy that the program uses in a couple of places.
-.IP "file [rogue3.save]"
-The default file name for saving the game.  If your phone is hung up by
-accident, rogue will automatically save the game in this file.  The
-file name may contain the special character "~" which expands to be
-your home directory.
-.NH
-Acknowledgements
-.PP
-Rogue was originally conceived of by Glenn Wichman and Michael Toy.  The
-help of Ken Arnold in making the program easier to use and putting the
-finishing touches on is greatly appreciated.  I would also like to thank
-Marty McNary, Scott Nelson, Daniel Jensen, Kipp Hickman, Joe Kalash,
-Steve Maurer, Bill Joy, Mark Horton and Jan Miller for their ideas
-and assistance.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rogue3/rogue.r.in	Sat Aug 24 13:36:13 2013 -0700
@@ -0,0 +1,411 @@
+.RP
+.ds RH A Guide to the Dungeons of Doom
+.ds CH
+.ds CF - % -
+.TL
+A Guide to the Dungeons of Doom
+.AU
+Michael C. Toy
+.AI
+Computer Systems Research Group
+Department of Electrical Engineering and Computer Science
+University of California
+Berkeley, California  94720
+.AB
+Rogue is a visual CRT based fantasy game which runs
+under the UNIX timesharing system.  This paper describes
+how to play rogue and gives a few hints for those who might
+otherwise get lost in the Dungeons of Doom.
+.AE
+.NH
+Introduction
+.PP
+You have just finished your years as a student at the local fighter's guild.
+After much practice and sweat you have finally completed your training and
+are ready to embark upon a perilous adventure.  As a test of your skills,
+the local guildmasters have sent you into the Dungeons of Doom.  Your
+task is to return with the Amulet of Yendor.  Your reward for the completion
+of this task will be a full membership in the local guild. In addition, you are
+allowed to keep all the loot you bring back from the dungeons.
+.PP
+In preparation for your journey, you are given an enchanted sword, taken
+from a dragon's hoard in the far off Dark Mountains.  You are also outfitted
+with elf-crafted armor and given enough food to reach the dungeons.  You
+say goodbye to family and friends for what may be the last time and head
+up the road.
+.PP
+You set out on your way to the dungeons and after several days of uneventful
+travel, you see the ancient ruins that mark the entrance to the Dungeons
+of Doom.  It is late at night so you make camp at the entrance and spend
+the night sleeping under the open skies.  In the morning you gather
+your sword, put on your armor, eat what is almost your last food and enter
+the dungeons.
+.NH
+What is going on here?
+.PP
+You have just begun a game of rogue.  Your goal is to grab as much treasure
+as you can, find the Amulet of Yendor, and get out of the Dungeons of Doom
+alive.  On the screen, a map of where you have been and what you have seen on
+the current dungeon level is kept.  As you explore more of the level,
+it appears on the screen in front of you.
+.PP
+Rogue differs from most computer fantasy games in that it is screen
+oriented.  Commands are all one or two keystrokes\(dg
+.FS
+\(dgAs opposed to pseudo English sentences.
+.FE
+and the results of your commands are displayed
+graphically on the screen rather than being explained in words.
+.PP
+Another major difference between rogue and other computer fantasy games
+is that once you have solved all the puzzles in a standard fantasy game,
+it has lost most of its excitement and it ceases to be fun.  Rogue on the
+other hand generates a new dungeon every time you play it and
+even the author finds it an entertaining and exciting game.
+.NH
+What do all those things on the screen mean?
+.PP
+In order to understand what is going on in rogue you have to first get
+some grasp of what rogue is doing with the screen.
+The rogue screen is intended to replace the "You can see ..." descriptions
+of standard fantasy games.  Here is a sample of what a rogue screen might
+look like.
+.in +1i
+.nf
+.cs R 15
+                  ---------------------
+                  |...................+
+                  |...@...........[...|
+                  |........B..........|
+                  |...................|
+                  --------+------------
+
+
+.cs R
+Level: 1  Gold: 0      Hp: 12(12)  Str: 16  Ac: 6  Exp: 1/0
+.fi
+.in 0
+.NH 2
+The bottom line
+.PP
+At the bottom line of the screen is a few pieces of cryptic information,
+describing your current status.  Here is an explanation of what these
+things mean:
+.IP Level 8
+This number indicates how deep you have gone in the dungeon.  It starts
+at one and goes up forever\(dg.
+.FS
+\(dgOr until you get killed or decide to quit.
+.FE
+.IP Gold
+The number of gold pieces you have managed to find and keep with
+you so far.
+.IP Hp
+Your current and maximum hit points.  Hit points indicate how much
+damage you can take before you die.  The more you get hit in a
+fight, the lower they
+get.  You can regain hit points by resting. The number in parentheses is
+the maximum number your hit points can reach.
+.IP Str
+Your current strength.  This can be any integer less than or
+equal to eighteen.  The higher the number, the stronger you are.
+.IP Ac
+Your current armor class.  This number indicates how effective
+your armor is in stopping blows from unfriendly creatures.  The lower
+this number is, the more effective the armor.
+.IP Exp
+These two numbers give your current experience level and experience points.
+As you do things, you gain experience points.  At certain experience point
+totals, you gain an experience level.  The more experienced you are, the
+better you are able to fight and to withstand magical attacks.
+.NH 2
+The top line
+.PP
+The top line of the screen is reserved for printing messages that describe
+things that are impossible to represent visually.  If you see a
+"--More--" on the top line, this means that rogue wants to print another
+message on the screen, but it wants to make certain that you have read
+the one that is there first.  To read the next message, just press a
+space.
+.NH 2
+The rest of the screen
+.PP
+The rest of the screen is the map of the level as you have explored it so far.
+Each symbol on the screen represents something.  Here is a list of what
+the various symbols mean:
+.IP @
+This symbol represents you, the adventurer.
+.IP "-|" 6
+These symbols represent the walls of rooms.
+.IP +
+A door to/from a room.
+.IP .
+The floor of a room.
+.IP #
+The floor of a passage between rooms.
+.IP *
+A pile or pot of gold.
+.IP )
+A weapon of some sort.
+.IP ]
+A piece of armor.
+.IP !
+A flask containing a magic potion.
+.IP ?
+A piece of paper, usually a magic scroll.
+.IP ^
+A trap, watch out for these.
+.IP %
+The passage leading down to the next level.
+.IP :
+A piece of food.
+.IP A-Z
+The uppercase letters represent the various inhabitants of the
+Dungeons of Doom.  Watch out, they can be mean.
+.NH
+Commands
+.PP
+Commands are given to rogue by pressing single letters.  Most commands can
+be preceded by a count to repeat them (e.g. typing "10s" will do ten searches)
+The list of commands is rather long, but it can be read at any time during
+the game with the ? command.  Here it is for reference, with a short
+explanation of each command.
+.IP ? 6
+The help command.  Asks for a character to give help on.  If you type
+a "*", it will list all the commands, otherwise it will explain what the
+character you typed does.
+.IP /
+This is the "What is that on the screen?" command. A "/" followed by any
+character that you see on the level, will tell you what that character
+is.  For instance, typing "/@" will tell you that the @ symbol represents
+you, the player.
+.IP "h , H"
+Move left.  You move one space to the left.  If you use upper case
+h, you will continue to move left until you run into something.  This
+works for all movement commands (e.g. "L" means run in direction "l")
+.IP j
+Move down.
+.IP k
+Move up.
+.IP l
+Move right.
+.IP y
+Move diagonally up and left.
+.IP u
+Move diagonally up and right.
+.IP b
+Move diagonally down and left.
+.IP n
+Move diagonally down and right.
+.IP f
+Find prefix.  When followed by a direction it means to continue moving
+in the specified direction until you pass something interesting or
+run into a wall.
+.IP t
+Throw an object.  This is a prefix command.  Follow it with a direction and
+you throw an object in the specified direction.  (e.g. type "th" to throw
+something left.)
+.IP >
+If you are standing over the passage down to the next level, this command
+means to climb down.
+.IP s
+Search for traps and secret doors.  Examine each space immediately adjacent
+to you for the existence of a trap or secret door.  There is a large chance
+that even if there is something there, you won't find it so you might
+have to search a while before you find something.
+.IP " "
+(space) Rest.  This is the "do nothing" command.
+This is good for waiting and healing.
+.IP i
+Inventory.  List what you are carrying in your pack.
+.IP I
+Selective inventory.  Tells you what a single item in your pack is.
+.IP q
+Quaff.  Drink one of the potions you are carrying.
+.IP r
+Read.  Read one of the scrolls in your pack.
+.IP e
+Eat food.  Take some food out of your pack and eat it.
+.IP w
+Wield a weapon.  Take a weapon out of your pack and carry it.  You must be
+wielding  weapon to use it (except to throw things).  To fire an arrow,
+you must wield the bow.  You can only wield one weapon at a time.
+.IP W
+Wear armor.  Take a piece of armor out of your pack and put it on.  You can
+only wear one suit of armor at a time.
+.IP T
+Take armor off.  You can't remove armor that is cursed.
+This takes extra time.
+.IP d
+Drop an object.  Take something out of your pack and leave it lying
+on the floor.  Only one object can occupy each space.
+.IP o
+Examine and set options.  This command is further explained in the section
+on options.
+.IP ^L
+REdraws the screen. Useful if spurious messages or transmission errors
+have messed up the display.
+.IP v
+Prints the program version number.
+.IP Q
+Quit.  Leave the game.
+.IP R
+Repeat last message.  Useful when a message disappears before you can
+read it.
+.IP S
+Save the current game in a file.  Caveat: Rogue won't let you start
+up a copy of a saved game, and it removes the save file as soon as
+you start up a restored game.  This is to prevent people from saving
+a game just before a dangerous position and then restarting it
+if they die.  To restore a saved game, give the file name as an argument
+to rogue. As in
+.ti +1i
+.nf
+% rogue save_file
+.NH
+Dealing with objects
+.PP
+When you find something in the dungeon, it is common to want to pick the
+object up.  This is accomplished in rogue by walking over the object.  If
+you are carrying too many things, the program will tell you and it won't pick
+up the object, otherwise it will add it to your pack and if the notify
+option is set, tell you what you just picked up.
+.PP
+Many of the commands that operate on objects must prompt you to find
+out which object you want to use.  If you change your mind and don't want to
+do that command after all, just press an escape and the command will be
+aborted.
+.NH
+Light
+.PP
+Rooms in the dungeons are either lit or dark.  If you walk into a lit room,
+the entire room will be drawn on the screen as soon as you enter.  If you
+walk into a dark room, it will only be displayed as you explore it.  Upon
+leaving a dark room, all objects inside the room which might move are
+removed from the screen.  In the darkness you can only see one space
+in all directions around you.
+.NH
+Fighting
+.PP
+If you see a monster and you wish to fight it, just attempt to run into it.
+Many times a monster you find will mind its own business unless you attack
+it.  It is often the case that discretion is the better part of valor.
+.NH
+Armor
+.PP
+There are various sorts of armor lying around in the dungeon.  Some of it
+is enchanted, some is cursed and some is just normal.  Different armor
+types have different armor classes.  The lower the armor class, the
+more protection the armor affords against the blows of monsters.
+If a piece of armor is enchanted or
+cursed, its armor class will be higher or lower than normal.  Here is
+a list of the various armor types and their normal armor class.
+.TS
+center box;
+c c
+l | c.
+Type	Class
+=
+Leather armor	8
+Studded leather / Ring mail	7
+Scale mail	6
+Chain mail	5
+Banded mail / Splint mail	4
+Plate mail	3
+.TE
+.NH
+Options
+.PP
+Due to variations in personal tastes and conceptions of the way rogue
+should do things, there are a set of options you can set that cause
+rogue to behave in various different ways.
+.NH 2
+Setting the options
+.PP
+There are basically two ways to set the options.  The first is with the
+"o" command of rogue, the second is with the ROGUEOPTS environment
+variable.  On Version 6 systems, there is no equivalent of
+the ROGUEOPTS feature.
+.NH 3
+Using the "o" command
+.PP
+When you press "o" in rogue, it clears the screen and displays the current
+settings for all the options.  It then places the cursor by the value of the
+first option and waits for you to type.  You can type a RETURN which means to
+go to the next option, a "\-" which means to go to the previous option, an
+escape which means to return to the game, or you can give the option a
+value.  For boolean options this merely involves pressing "t" for true or
+"f" for false.  For string options, type the new value followed by a
+return.
+.NH 3
+Using the ROGUEOPTS variable
+.PP
+The ROGUEOPTS variable is a string containing a comma separated list of
+initial values for the various options.  Boolean variables can be turned
+on by listing their name and turned off by putting a "no" in front of the
+name.  Thus to set up an environment variable so that jump is on, terse is
+off, the name is set to "Conan the Barbarian" and the fruit is "mango",
+use the command
+.nf
+.nf
+.ti +3
+% setenv ROGUEOPTS "jump,noterse,name=Conan the Barbarian,fruit=mango" \(dg
+.fi
+.ti +3
+% setenv ROGUEOPTS "jump,noterse,name=Conan the Barbarian,fruit=mango" \(dg
+.fi
+.FS
+\(dgFor those of you who use the bourne shell, the commands would be
+.in +3
+.nf
+$ ROGUEOPTS="jump,noterse,name=Conan the Barbarian,fruit=mango"
+$ export ROGUEOPTS
+.fi
+.in +0
+.FE
+.NH 2
+Option list
+.PP
+Here is a list of the options and an explanation of what each one is for.
+The default value for each is enclosed in square brackets.
+.IP "terse [noterse]" 25
+Useful for those who are tired of the sometimes lengthy messages of rogue.
+This is a useful option for those on slow terminals.  This option defaults to
+on if your are on a slow (under 1200 baud) terminal.
+.IP "jump [nojump]"
+If this option is set, running moves will not be displayed until you
+reach the end of the move.  This saves considerable cpu time and
+display time.  This option defaults to on if you are using a slow terminal.
+.IP "step [nostep]
+When step is set, lists of things, like inventories or "*" responses to
+"Which item do you wish to xxxx? " questions, are displayed one item
+at a time on the top of the screen, rather than clearing the screen,
+displaying the list, then re-displaying the dungeon level.
+.IP "flush [noflush]"
+If flush is set, all typeahead is thrown away after each round of battle.
+This is useful for those who type way ahead and watch to their dismay as
+a Kobold kills them.
+.IP "askme [noaskme]"
+Upon reading a scroll or quaffing a potion which does not automatically
+identify it upon use, rogue will ask you what to name it so you can
+recognize it in the future.
+.IP "name [account name]"
+This is the name of your character.  It is used if you get on the top ten
+scorer's list.  It should be less than eighty characters long.
+.IP "fruit [slime-mold]"
+This should hold the name of a fruit that you enjoy eating.  It is basically
+a whimsy that the program uses in a couple of places.
+.IP "file [rogue3.save]"
+The default file name for saving the game.  If your phone is hung up by
+accident, rogue will automatically save the game in this file.  The
+file name may contain the special character "~" which expands to be
+your home directory.
+.NH
+Acknowledgements
+.PP
+Rogue was originally conceived of by Glenn Wichman and Michael Toy.  The
+help of Ken Arnold in making the program easier to use and putting the
+finishing touches on is greatly appreciated.  I would also like to thank
+Marty McNary, Scott Nelson, Daniel Jensen, Kipp Hickman, Joe Kalash,
+Steve Maurer, Bill Joy, Mark Horton and Jan Miller for their ideas
+and assistance.