From 77e3814f0c0e3dea4d0032e25666f77e6f83bfff Mon Sep 17 00:00:00 2001 From: cgd Date: Sun, 21 Mar 1993 09:45:37 +0000 Subject: initial import of 386bsd-0.1 sources --- hangman/Makefile | 13 +++++++ hangman/endgame.c | 73 +++++++++++++++++++++++++++++++++++ hangman/extern.c | 74 ++++++++++++++++++++++++++++++++++++ hangman/getguess.c | 107 ++++++++++++++++++++++++++++++++++++++++++++++++++++ hangman/getword.c | 92 ++++++++++++++++++++++++++++++++++++++++++++ hangman/hangman.6 | 50 ++++++++++++++++++++++++ hangman/hangman.h | 81 +++++++++++++++++++++++++++++++++++++++ hangman/main.c | 75 ++++++++++++++++++++++++++++++++++++ hangman/pathnames.h | 36 ++++++++++++++++++ hangman/playgame.c | 60 +++++++++++++++++++++++++++++ hangman/prdata.c | 58 ++++++++++++++++++++++++++++ hangman/prman.c | 55 +++++++++++++++++++++++++++ hangman/prword.c | 49 ++++++++++++++++++++++++ hangman/setup.c | 72 +++++++++++++++++++++++++++++++++++ 14 files changed, 895 insertions(+) create mode 100644 hangman/Makefile create mode 100644 hangman/endgame.c create mode 100644 hangman/extern.c create mode 100644 hangman/getguess.c create mode 100644 hangman/getword.c create mode 100644 hangman/hangman.6 create mode 100644 hangman/hangman.h create mode 100644 hangman/main.c create mode 100644 hangman/pathnames.h create mode 100644 hangman/playgame.c create mode 100644 hangman/prdata.c create mode 100644 hangman/prman.c create mode 100644 hangman/prword.c create mode 100644 hangman/setup.c (limited to 'hangman') 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 + + 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 +# include +# include +# include +# include +# 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; +} -- cgit v1.2.3-56-ge451