summaryrefslogtreecommitdiffstats
path: root/hangman
diff options
context:
space:
mode:
authorcgd <cgd@NetBSD.org>1993-03-21 09:45:37 +0000
committercgd <cgd@NetBSD.org>1993-03-21 09:45:37 +0000
commit77e3814f0c0e3dea4d0032e25666f77e6f83bfff (patch)
tree7eddfcbf3dd12089e71dc3fafb0a106c5c5766c7 /hangman
parente81d63576b2e46ab90da7d75fa155ea57ee4d32e (diff)
downloadbsdgames-darwin-77e3814f0c0e3dea4d0032e25666f77e6f83bfff.tar.gz
bsdgames-darwin-77e3814f0c0e3dea4d0032e25666f77e6f83bfff.tar.zst
bsdgames-darwin-77e3814f0c0e3dea4d0032e25666f77e6f83bfff.zip
initial import of 386bsd-0.1 sources
Diffstat (limited to 'hangman')
-rw-r--r--hangman/Makefile13
-rw-r--r--hangman/endgame.c73
-rw-r--r--hangman/extern.c74
-rw-r--r--hangman/getguess.c107
-rw-r--r--hangman/getword.c92
-rw-r--r--hangman/hangman.650
-rw-r--r--hangman/hangman.h81
-rw-r--r--hangman/main.c75
-rw-r--r--hangman/pathnames.h36
-rw-r--r--hangman/playgame.c60
-rw-r--r--hangman/prdata.c58
-rw-r--r--hangman/prman.c55
-rw-r--r--hangman/prword.c49
-rw-r--r--hangman/setup.c72
14 files changed, 895 insertions, 0 deletions
diff --git a/hangman/Makefile b/hangman/Makefile
new file mode 100644
index 00000000..bdb1d2c4
--- /dev/null
+++ b/hangman/Makefile
@@ -0,0 +1,13 @@
+# @(#)Makefile 5.7 (Berkeley) 5/11/90
+
+PROG= hangman
+SRCS= endgame.c extern.c getguess.c getword.c main.c playgame.c \
+ prdata.c prman.c prword.c setup.c
+MAN6= hangman.0
+DPADD= ${LIBCURSES} ${LIBTERM} ${LIBCOMPAT}
+LDADD= -lcurses -ltermlib -lcompat
+HIDEGAME=hidegame
+
+.include <bsd.prog.mk>
+
+
diff --git a/hangman/endgame.c b/hangman/endgame.c
new file mode 100644
index 00000000..4b08d532
--- /dev/null
+++ b/hangman/endgame.c
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 1983 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef lint
+static char sccsid[] = "@(#)endgame.c 5.3 (Berkeley) 6/1/90";
+#endif /* not lint */
+
+# include "hangman.h"
+
+/*
+ * endgame:
+ * Do what's necessary at the end of the game
+ */
+endgame()
+{
+ register char ch;
+
+ prman();
+ if (Errors >= MAXERRS)
+ Errors = MAXERRS + 2;
+ prword();
+ prdata();
+ move(MESGY, MESGX);
+ if (Errors > MAXERRS)
+ printw("Sorry, the word was \"%s\"\n", Word);
+ else
+ printw("You got it!\n");
+
+ for (;;) {
+ mvaddstr(MESGY + 1, MESGX, "Another word? ");
+ leaveok(stdscr, FALSE);
+ refresh();
+ if ((ch = readch()) == 'n')
+ die();
+ else if (ch == 'y')
+ break;
+ mvaddstr(MESGY + 2, MESGX, "Please type 'y' or 'n'");
+ }
+
+ leaveok(stdscr, TRUE);
+ move(MESGY, MESGX);
+ addstr("\n\n\n");
+}
diff --git a/hangman/extern.c b/hangman/extern.c
new file mode 100644
index 00000000..1dd593de
--- /dev/null
+++ b/hangman/extern.c
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 1983 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef lint
+static char sccsid[] = "@(#)extern.c 5.3 (Berkeley) 6/1/90";
+#endif /* not lint */
+
+# include "hangman.h"
+
+bool Guessed[26];
+
+char Word[BUFSIZ],
+ Known[BUFSIZ],
+ *Noose_pict[] = {
+ " ______",
+ " | |",
+ " |",
+ " |",
+ " |",
+ " |",
+ " __|_____",
+ " | |___",
+ " |_________|",
+ NULL
+ };
+
+int Errors,
+ Wordnum = 0;
+
+double Average = 0.0;
+
+ERR_POS Err_pos[MAXERRS] = {
+ { 2, 10, 'O' },
+ { 3, 10, '|' },
+ { 4, 10, '|' },
+ { 5, 9, '/' },
+ { 3, 9, '/' },
+ { 3, 11, '\\' },
+ { 5, 11, '\\' }
+};
+
+FILE *Dict = NULL;
+
+off_t Dict_size;
diff --git a/hangman/getguess.c b/hangman/getguess.c
new file mode 100644
index 00000000..c363e051
--- /dev/null
+++ b/hangman/getguess.c
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 1983 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef lint
+static char sccsid[] = "@(#)getguess.c 5.4 (Berkeley) 6/1/90";
+#endif /* not lint */
+
+# include "hangman.h"
+
+/*
+ * getguess:
+ * Get another guess
+ */
+getguess()
+{
+ register int i;
+ register int ch;
+ register bool correct;
+
+ leaveok(stdscr, FALSE);
+ for (;;) {
+ move(PROMPTY, PROMPTX + sizeof "Guess: ");
+ refresh();
+ ch = readch();
+ if (isalpha(ch)) {
+ if (isupper(ch))
+ ch = tolower(ch);
+ if (Guessed[ch - 'a'])
+ mvprintw(MESGY, MESGX, "Already guessed '%c'", ch);
+ else
+ break;
+ }
+ else if (ch == CTRL('D'))
+ die();
+ else
+ mvprintw(MESGY, MESGX, "Not a valid guess: '%s'",
+ unctrl(ch));
+ }
+ leaveok(stdscr, TRUE);
+ move(MESGY, MESGX);
+ clrtoeol();
+
+ Guessed[ch - 'a'] = TRUE;
+ correct = FALSE;
+ for (i = 0; Word[i] != '\0'; i++)
+ if (Word[i] == ch) {
+ Known[i] = ch;
+ correct = TRUE;
+ }
+ if (!correct)
+ Errors++;
+}
+
+/*
+ * readch;
+ * Read a character from the input
+ */
+readch()
+{
+ register int cnt, r;
+ auto char ch;
+
+ cnt = 0;
+ for (;;) {
+ if (read(0, &ch, sizeof ch) <= 0)
+ {
+ if (++cnt > 100)
+ die();
+ }
+ else if (ch == CTRL('L')) {
+ wrefresh(curscr);
+ mvcur(0, 0, curscr->_cury, curscr->_curx);
+ }
+ else
+ return ch;
+ }
+}
diff --git a/hangman/getword.c b/hangman/getword.c
new file mode 100644
index 00000000..35c51979
--- /dev/null
+++ b/hangman/getword.c
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 1983 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef lint
+static char sccsid[] = "@(#)getword.c 5.3 (Berkeley) 6/1/90";
+#endif /* not lint */
+
+# include "hangman.h"
+
+# if pdp11
+# define RN (((off_t) rand() << 16) | (off_t) rand())
+# else
+# define RN rand()
+# endif
+
+/*
+ * getword:
+ * Get a valid word out of the dictionary file
+ */
+getword()
+{
+ register FILE *inf;
+ register char *wp, *gp;
+
+ inf = Dict;
+ for (;;) {
+ fseek(inf, abs(RN % Dict_size), 0);
+ if (fgets(Word, BUFSIZ, inf) == NULL)
+ continue;
+ if (fgets(Word, BUFSIZ, inf) == NULL)
+ continue;
+ Word[strlen(Word) - 1] = '\0';
+ if (strlen(Word) < MINLEN)
+ continue;
+ for (wp = Word; *wp; wp++)
+ if (!islower(*wp))
+ goto cont;
+ break;
+cont: ;
+ }
+ gp = Known;
+ wp = Word;
+ while (*wp) {
+ *gp++ = '-';
+ wp++;
+ }
+ *gp = '\0';
+}
+
+/*
+ * abs:
+ * Return the absolute value of an integer
+ */
+off_t
+abs(i)
+off_t i;
+{
+ if (i < 0)
+ return -(off_t) i;
+ else
+ return (off_t) i;
+}
diff --git a/hangman/hangman.6 b/hangman/hangman.6
new file mode 100644
index 00000000..8743b090
--- /dev/null
+++ b/hangman/hangman.6
@@ -0,0 +1,50 @@
+.\" Copyright (c) 1983 The Regents of the University of California.
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\" 3. All advertising materials mentioning features or use of this software
+.\" must display the following acknowledgement:
+.\" This product includes software developed by the University of
+.\" California, Berkeley and its contributors.
+.\" 4. Neither the name of the University nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" @(#)hangman.6 6.3 (Berkeley) 6/23/90
+.\"
+.TH HANGMAN 6 "June 23, 1990"
+.UC 4
+.SH NAME
+hangman \- Computer version of the game hangman
+.SH SYNOPSIS
+.B /usr/games/hangman
+.SH DESCRIPTION
+In
+.I hangman,
+the computer picks a word from the on-line word list
+and you must try to guess it.
+The computer keeps track of which letters have been guessed
+and how many wrong guesses you have made on the screen in a graphic fashion.
+.SH FILES
+/usr/dict/words On-line word list
+.SH AUTHOR
+Ken Arnold
diff --git a/hangman/hangman.h b/hangman/hangman.h
new file mode 100644
index 00000000..c41e5f82
--- /dev/null
+++ b/hangman/hangman.h
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 1983 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)hangman.h 5.5 (Berkeley) 2/28/91
+ */
+
+# include <curses.h>
+# include <sys/types.h>
+# include <sys/stat.h>
+# include <ctype.h>
+# include <signal.h>
+# include "pathnames.h"
+
+# define MINLEN 6
+# define MAXERRS 7
+
+# define MESGY 12
+# define MESGX 0
+# define PROMPTY 11
+# define PROMPTX 0
+# define KNOWNY 10
+# define KNOWNX 1
+# define NUMBERY 4
+# define NUMBERX (COLS - 1 - 26)
+# define AVGY 5
+# define AVGX (COLS - 1 - 26)
+# define GUESSY 2
+# define GUESSX (COLS - 1 - 26)
+
+
+typedef struct {
+ short y, x;
+ char ch;
+} ERR_POS;
+
+extern bool Guessed[];
+
+extern char Word[], Known[], *Noose_pict[];
+
+extern int Errors, Wordnum;
+
+extern double Average;
+
+extern ERR_POS Err_pos[];
+
+extern FILE *Dict;
+
+extern off_t Dict_size;
+
+void die();
+
+off_t abs();
diff --git a/hangman/main.c b/hangman/main.c
new file mode 100644
index 00000000..47bffb5a
--- /dev/null
+++ b/hangman/main.c
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 1983 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef lint
+char copyright[] =
+"@(#) Copyright (c) 1983 Regents of the University of California.\n\
+ All rights reserved.\n";
+#endif /* not lint */
+
+#ifndef lint
+static char sccsid[] = "@(#)main.c 5.4 (Berkeley) 2/28/91";
+#endif /* not lint */
+
+# include "hangman.h"
+
+/*
+ * This game written by Ken Arnold.
+ */
+main()
+{
+ void die();
+
+ initscr();
+ signal(SIGINT, die);
+ setup();
+ for (;;) {
+ Wordnum++;
+ playgame();
+ Average = (Average * (Wordnum - 1) + Errors) / Wordnum;
+ }
+ /* NOTREACHED */
+}
+
+/*
+ * die:
+ * Die properly.
+ */
+void
+die()
+{
+ mvcur(0, COLS - 1, LINES - 1, 0);
+ endwin();
+ putchar('\n');
+ exit(0);
+}
diff --git a/hangman/pathnames.h b/hangman/pathnames.h
new file mode 100644
index 00000000..ebbaefd8
--- /dev/null
+++ b/hangman/pathnames.h
@@ -0,0 +1,36 @@
+/*-
+ * Copyright (c) 1990 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)pathnames.h 5.1 (Berkeley) 6/1/90
+ */
+
+#define _PATH_DICT "/usr/share/dict/words"
diff --git a/hangman/playgame.c b/hangman/playgame.c
new file mode 100644
index 00000000..84eb3913
--- /dev/null
+++ b/hangman/playgame.c
@@ -0,0 +1,60 @@
+/*-
+ * Copyright (c) 1983 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef lint
+static char sccsid[] = "@(#)playgame.c 5.3 (Berkeley) 4/8/91";
+#endif /* not lint */
+
+# include "hangman.h"
+
+/*
+ * playgame:
+ * play a game
+ */
+playgame()
+{
+ register bool *bp;
+
+ getword();
+ Errors = 0;
+ bp = Guessed;
+ while (bp < &Guessed[26])
+ *bp++ = FALSE;
+ while (Errors < MAXERRS && index(Known, '-') != NULL) {
+ prword();
+ prdata();
+ prman();
+ getguess();
+ }
+ endgame();
+}
diff --git a/hangman/prdata.c b/hangman/prdata.c
new file mode 100644
index 00000000..5ac6e0f3
--- /dev/null
+++ b/hangman/prdata.c
@@ -0,0 +1,58 @@
+/*-
+ * Copyright (c) 1983 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef lint
+static char sccsid[] = "@(#)prdata.c 5.3 (Berkeley) 4/8/91";
+#endif /* not lint */
+
+# include "hangman.h"
+
+/*
+ * prdata:
+ * Print out the current guesses
+ */
+prdata()
+{
+ register bool *bp;
+
+ move(GUESSY, GUESSX + sizeof "Guessed: ");
+ bp = Guessed;
+ while (bp < &Guessed[26])
+ if (*bp++)
+ addch((bp - Guessed) + 'a' - 1);
+ clrtoeol();
+ mvprintw(NUMBERY, NUMBERX + sizeof "Word #: ", "%d", Wordnum);
+ mvprintw(AVGY, AVGX + sizeof "Current Average: ", "%.3f",
+ (Average * (Wordnum - 1) + Errors) / Wordnum);
+ mvprintw(AVGY + 1, AVGX + sizeof "Overall Average: ", "%.3f", Average);
+}
diff --git a/hangman/prman.c b/hangman/prman.c
new file mode 100644
index 00000000..a5225967
--- /dev/null
+++ b/hangman/prman.c
@@ -0,0 +1,55 @@
+/*-
+ * Copyright (c) 1983 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef lint
+static char sccsid[] = "@(#)prman.c 5.3 (Berkeley) 4/8/91";
+#endif /* not lint */
+
+# include "hangman.h"
+
+/*
+ * prman:
+ * Print out the man appropriately for the give number
+ * of incorrect guesses.
+ */
+prman()
+{
+ register int i;
+
+ for (i = 0; i < Errors; i++)
+ mvaddch(Err_pos[i].y, Err_pos[i].x, Err_pos[i].ch);
+ while (i < MAXERRS) {
+ mvaddch(Err_pos[i].y, Err_pos[i].x, ' ');
+ i++;
+ }
+}
diff --git a/hangman/prword.c b/hangman/prword.c
new file mode 100644
index 00000000..1136cc8a
--- /dev/null
+++ b/hangman/prword.c
@@ -0,0 +1,49 @@
+/*-
+ * Copyright (c) 1983 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef lint
+static char sccsid[] = "@(#)prword.c 5.3 (Berkeley) 4/8/91";
+#endif /* not lint */
+
+# include "hangman.h"
+
+/*
+ * prword:
+ * Print out the current state of the word
+ */
+prword()
+{
+ move(KNOWNY, KNOWNX + sizeof "Word: ");
+ addstr(Known);
+ clrtoeol();
+}
diff --git a/hangman/setup.c b/hangman/setup.c
new file mode 100644
index 00000000..a72df8e1
--- /dev/null
+++ b/hangman/setup.c
@@ -0,0 +1,72 @@
+/*-
+ * Copyright (c) 1983 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef lint
+static char sccsid[] = "@(#)setup.c 5.4 (Berkeley) 4/8/91";
+#endif /* not lint */
+
+# include "hangman.h"
+
+/*
+ * setup:
+ * Set up the strings on the screen.
+ */
+setup()
+{
+ register char **sp;
+ static struct stat sbuf;
+
+ noecho();
+ crmode();
+
+ mvaddstr(PROMPTY, PROMPTX, "Guess:");
+ mvaddstr(GUESSY, GUESSX, "Guessed:");
+ mvaddstr(NUMBERY, NUMBERX, "Word #:");
+ mvaddstr(AVGY, AVGX, "Current Average:");
+ mvaddstr(AVGY + 1, AVGX, "Overall Average:");
+ mvaddstr(KNOWNY, KNOWNX, "Word: ");
+
+ for (sp = Noose_pict; *sp != NULL; sp++) {
+ move(sp - Noose_pict, 0);
+ addstr(*sp);
+ }
+
+ srand(time(NULL) + getpid());
+ if ((Dict = fopen(_PATH_DICT, "r")) == NULL) {
+ perror(_PATH_DICT);
+ endwin();
+ exit(1);
+ }
+ fstat(fileno(Dict), &sbuf);
+ Dict_size = sbuf.st_size;
+}