summaryrefslogtreecommitdiff
path: root/games/hangman
diff options
context:
space:
mode:
authorTheo de Raadt <deraadt@cvs.openbsd.org>1995-10-18 08:53:40 +0000
committerTheo de Raadt <deraadt@cvs.openbsd.org>1995-10-18 08:53:40 +0000
commitd6583bb2a13f329cf0332ef2570eb8bb8fc0e39c (patch)
treeece253b876159b39c620e62b6c9b1174642e070e /games/hangman
initial import of NetBSD tree
Diffstat (limited to 'games/hangman')
-rw-r--r--games/hangman/Makefile14
-rw-r--r--games/hangman/endgame.c91
-rw-r--r--games/hangman/extern.c80
-rw-r--r--games/hangman/getguess.c114
-rw-r--r--games/hangman/getword.c81
-rw-r--r--games/hangman/hangman.657
-rw-r--r--games/hangman/hangman.h82
-rw-r--r--games/hangman/main.c81
-rw-r--r--games/hangman/pathnames.h38
-rw-r--r--games/hangman/playgame.c66
-rw-r--r--games/hangman/prdata.c64
-rw-r--r--games/hangman/prman.c61
-rw-r--r--games/hangman/prword.c55
-rw-r--r--games/hangman/setup.c78
14 files changed, 962 insertions, 0 deletions
diff --git a/games/hangman/Makefile b/games/hangman/Makefile
new file mode 100644
index 00000000000..1c965e9281c
--- /dev/null
+++ b/games/hangman/Makefile
@@ -0,0 +1,14 @@
+# $NetBSD: Makefile,v 1.5 1995/03/23 08:32:38 cgd Exp $
+# @(#)Makefile 8.1 (Berkeley) 5/31/93
+
+PROG= hangman
+SRCS= endgame.c extern.c getguess.c getword.c main.c playgame.c \
+ prdata.c prman.c prword.c setup.c
+MAN= hangman.6
+DPADD= ${LIBCURSES} ${LIBTERM}
+LDADD= -lcurses -ltermlib
+HIDEGAME=hidegame
+
+.include <bsd.prog.mk>
+
+
diff --git a/games/hangman/endgame.c b/games/hangman/endgame.c
new file mode 100644
index 00000000000..300c0efb83b
--- /dev/null
+++ b/games/hangman/endgame.c
@@ -0,0 +1,91 @@
+/* $NetBSD: endgame.c,v 1.3 1995/03/23 08:32:40 cgd Exp $ */
+
+/*
+ * Copyright (c) 1983, 1993
+ * 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
+#if 0
+static char sccsid[] = "@(#)endgame.c 8.1 (Berkeley) 5/31/93";
+#else
+static char rcsid[] = "$NetBSD: endgame.c,v 1.3 1995/03/23 08:32:40 cgd Exp $";
+#endif
+#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);
+ deleteln();
+ deleteln();
+ deleteln();
+}
+
+
+
+
+
+
+
+
+
+
diff --git a/games/hangman/extern.c b/games/hangman/extern.c
new file mode 100644
index 00000000000..2d5f0082873
--- /dev/null
+++ b/games/hangman/extern.c
@@ -0,0 +1,80 @@
+/* $NetBSD: extern.c,v 1.3 1995/03/23 08:32:41 cgd Exp $ */
+
+/*
+ * Copyright (c) 1983, 1993
+ * 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
+#if 0
+static char sccsid[] = "@(#)extern.c 8.1 (Berkeley) 5/31/93";
+#else
+static char rcsid[] = "$NetBSD: extern.c,v 1.3 1995/03/23 08:32:41 cgd Exp $";
+#endif
+#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/games/hangman/getguess.c b/games/hangman/getguess.c
new file mode 100644
index 00000000000..e7a31acda7e
--- /dev/null
+++ b/games/hangman/getguess.c
@@ -0,0 +1,114 @@
+/* $NetBSD: getguess.c,v 1.5 1995/03/23 08:32:43 cgd Exp $ */
+
+/*
+ * Copyright (c) 1983, 1993
+ * 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
+#if 0
+static char sccsid[] = "@(#)getguess.c 8.1 (Berkeley) 5/31/93";
+#else
+static char rcsid[] = "$NetBSD: getguess.c,v 1.5 1995/03/23 08:32:43 cgd Exp $";
+#endif
+#endif /* not lint */
+
+#include <sys/ttydefaults.h>
+#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/games/hangman/getword.c b/games/hangman/getword.c
new file mode 100644
index 00000000000..e858fabeff6
--- /dev/null
+++ b/games/hangman/getword.c
@@ -0,0 +1,81 @@
+/* $NetBSD: getword.c,v 1.4 1995/03/23 08:32:45 cgd Exp $ */
+
+/*
+ * Copyright (c) 1983, 1993
+ * 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
+#if 0
+static char sccsid[] = "@(#)getword.c 8.1 (Berkeley) 5/31/93";
+#else
+static char rcsid[] = "$NetBSD: getword.c,v 1.4 1995/03/23 08:32:45 cgd Exp $";
+#endif
+#endif /* not lint */
+
+#include "hangman.h"
+#include <stdlib.h>
+
+/*
+ * getword:
+ * Get a valid word out of the dictionary file
+ */
+getword()
+{
+ register FILE *inf;
+ register char *wp, *gp;
+ register long pos;
+
+ inf = Dict;
+ for (;;) {
+ pos = (double)rand() / (RAND_MAX + 1.0) * (double)Dict_size;
+ fseek(inf, pos, 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';
+}
diff --git a/games/hangman/hangman.6 b/games/hangman/hangman.6
new file mode 100644
index 00000000000..42040574dc1
--- /dev/null
+++ b/games/hangman/hangman.6
@@ -0,0 +1,57 @@
+.\" $NetBSD: hangman.6,v 1.5 1995/03/23 08:32:46 cgd Exp $
+.\"
+.\" Copyright (c) 1983, 1993
+.\" 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 8.1 (Berkeley) 5/31/93
+.\"
+.Dd May 31, 1993
+.Dt HANGMAN 6
+.Os
+.Sh NAME
+.Nm hangman
+.Nd Computer version of the game hangman
+.Sh SYNOPSIS
+.Nm /usr/games/hangman
+.Sh DESCRIPTION
+In
+.Nm 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
+.Bl -tag -width /usr/share/dict/words -compact
+.It Pa /usr/share/dict/words
+On-line word list
+.El
+.Sh AUTHOR
+Ken Arnold
diff --git a/games/hangman/hangman.h b/games/hangman/hangman.h
new file mode 100644
index 00000000000..7452b3ecd8f
--- /dev/null
+++ b/games/hangman/hangman.h
@@ -0,0 +1,82 @@
+/* $NetBSD: hangman.h,v 1.5 1995/04/24 12:23:44 cgd Exp $ */
+
+/*
+ * Copyright (c) 1983, 1993
+ * 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.h 8.1 (Berkeley) 5/31/93
+ */
+
+# include <curses.h>
+# include <sys/types.h>
+# include <sys/stat.h>
+# include <ctype.h>
+# include <signal.h>
+# include <string.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();
diff --git a/games/hangman/main.c b/games/hangman/main.c
new file mode 100644
index 00000000000..3da3bac1077
--- /dev/null
+++ b/games/hangman/main.c
@@ -0,0 +1,81 @@
+/* $NetBSD: main.c,v 1.3 1995/03/23 08:32:50 cgd Exp $ */
+
+/*
+ * Copyright (c) 1983, 1993
+ * 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 copyright[] =
+"@(#) Copyright (c) 1983, 1993\n\
+ The Regents of the University of California. All rights reserved.\n";
+#endif /* not lint */
+
+#ifndef lint
+#if 0
+static char sccsid[] = "@(#)main.c 8.1 (Berkeley) 5/31/93";
+#else
+static char rcsid[] = "$NetBSD: main.c,v 1.3 1995/03/23 08:32:50 cgd Exp $";
+#endif
+#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/games/hangman/pathnames.h b/games/hangman/pathnames.h
new file mode 100644
index 00000000000..5b539e37670
--- /dev/null
+++ b/games/hangman/pathnames.h
@@ -0,0 +1,38 @@
+/* $NetBSD: pathnames.h,v 1.3 1995/03/23 08:32:51 cgd Exp $ */
+
+/*-
+ * Copyright (c) 1990, 1993
+ * 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 8.1 (Berkeley) 5/31/93
+ */
+
+#define _PATH_DICT "/usr/share/dict/words"
diff --git a/games/hangman/playgame.c b/games/hangman/playgame.c
new file mode 100644
index 00000000000..5a591520d71
--- /dev/null
+++ b/games/hangman/playgame.c
@@ -0,0 +1,66 @@
+/* $NetBSD: playgame.c,v 1.3 1995/03/23 08:32:53 cgd Exp $ */
+
+/*-
+ * Copyright (c) 1983, 1993
+ * 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
+#if 0
+static char sccsid[] = "@(#)playgame.c 8.1 (Berkeley) 5/31/93";
+#else
+static char rcsid[] = "$NetBSD: playgame.c,v 1.3 1995/03/23 08:32:53 cgd Exp $";
+#endif
+#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/games/hangman/prdata.c b/games/hangman/prdata.c
new file mode 100644
index 00000000000..adfff8f3e7e
--- /dev/null
+++ b/games/hangman/prdata.c
@@ -0,0 +1,64 @@
+/* $NetBSD: prdata.c,v 1.3 1995/03/23 08:32:54 cgd Exp $ */
+
+/*-
+ * Copyright (c) 1983, 1993
+ * 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
+#if 0
+static char sccsid[] = "@(#)prdata.c 8.1 (Berkeley) 5/31/93";
+#else
+static char rcsid[] = "$NetBSD: prdata.c,v 1.3 1995/03/23 08:32:54 cgd Exp $";
+#endif
+#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/games/hangman/prman.c b/games/hangman/prman.c
new file mode 100644
index 00000000000..2337b6390e3
--- /dev/null
+++ b/games/hangman/prman.c
@@ -0,0 +1,61 @@
+/* $NetBSD: prman.c,v 1.3 1995/03/23 08:32:56 cgd Exp $ */
+
+/*-
+ * Copyright (c) 1983, 1993
+ * 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
+#if 0
+static char sccsid[] = "@(#)prman.c 8.1 (Berkeley) 5/31/93";
+#else
+static char rcsid[] = "$NetBSD: prman.c,v 1.3 1995/03/23 08:32:56 cgd Exp $";
+#endif
+#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/games/hangman/prword.c b/games/hangman/prword.c
new file mode 100644
index 00000000000..ba2ab634d3b
--- /dev/null
+++ b/games/hangman/prword.c
@@ -0,0 +1,55 @@
+/* $NetBSD: prword.c,v 1.3 1995/03/23 08:32:58 cgd Exp $ */
+
+/*-
+ * Copyright (c) 1983, 1993
+ * 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
+#if 0
+static char sccsid[] = "@(#)prword.c 8.1 (Berkeley) 5/31/93";
+#else
+static char rcsid[] = "$NetBSD: prword.c,v 1.3 1995/03/23 08:32:58 cgd Exp $";
+#endif
+#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/games/hangman/setup.c b/games/hangman/setup.c
new file mode 100644
index 00000000000..73c835f9551
--- /dev/null
+++ b/games/hangman/setup.c
@@ -0,0 +1,78 @@
+/* $NetBSD: setup.c,v 1.3 1995/03/23 08:32:59 cgd Exp $ */
+
+/*-
+ * Copyright (c) 1983, 1993
+ * 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
+#if 0
+static char sccsid[] = "@(#)setup.c 8.1 (Berkeley) 5/31/93";
+#else
+static char rcsid[] = "$NetBSD: setup.c,v 1.3 1995/03/23 08:32:59 cgd Exp $";
+#endif
+#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;
+}