Annotation of src/games/hangman/getguess.c, Revision 1.10
1.10 ! dholland 1: /* $NetBSD: getguess.c,v 1.9 2012/06/19 05:45:00 dholland Exp $ */
1.5 cgd 2:
1.1 cgd 3: /*
1.5 cgd 4: * Copyright (c) 1983, 1993
5: * The Regents of the University of California. All rights reserved.
1.1 cgd 6: *
7: * Redistribution and use in source and binary forms, with or without
8: * modification, are permitted provided that the following conditions
9: * are met:
10: * 1. Redistributions of source code must retain the above copyright
11: * notice, this list of conditions and the following disclaimer.
12: * 2. Redistributions in binary form must reproduce the above copyright
13: * notice, this list of conditions and the following disclaimer in the
14: * documentation and/or other materials provided with the distribution.
1.8 agc 15: * 3. Neither the name of the University nor the names of its contributors
1.1 cgd 16: * may be used to endorse or promote products derived from this software
17: * without specific prior written permission.
18: *
19: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29: * SUCH DAMAGE.
30: */
31:
1.7 lukem 32: #include <sys/cdefs.h>
1.1 cgd 33: #ifndef lint
1.5 cgd 34: #if 0
35: static char sccsid[] = "@(#)getguess.c 8.1 (Berkeley) 5/31/93";
36: #else
1.10 ! dholland 37: __RCSID("$NetBSD: getguess.c,v 1.9 2012/06/19 05:45:00 dholland Exp $");
1.5 cgd 38: #endif
1.1 cgd 39: #endif /* not lint */
40:
1.5 cgd 41: #include <sys/ttydefaults.h>
42: #include "hangman.h"
1.1 cgd 43:
44: /*
45: * getguess:
46: * Get another guess
47: */
1.7 lukem 48: void
1.9 dholland 49: getguess(void)
1.1 cgd 50: {
1.7 lukem 51: int i;
52: int ch;
53: bool correct;
1.1 cgd 54:
55: leaveok(stdscr, FALSE);
56: for (;;) {
57: move(PROMPTY, PROMPTX + sizeof "Guess: ");
58: refresh();
59: ch = readch();
60: if (isalpha(ch)) {
61: if (isupper(ch))
62: ch = tolower(ch);
63: if (Guessed[ch - 'a'])
1.7 lukem 64: mvprintw(MESGY, MESGX, "Already guessed '%c'",
65: ch);
1.1 cgd 66: else
67: break;
1.7 lukem 68: } else
69: if (ch == CTRL('D'))
70: die(0);
71: else
72: mvprintw(MESGY, MESGX,
73: "Not a valid guess: '%s'", unctrl(ch));
1.1 cgd 74: }
75: leaveok(stdscr, TRUE);
76: move(MESGY, MESGX);
77: clrtoeol();
78:
1.10 ! dholland 79: Guessed[ch - 'a'] = true;
! 80: correct = false;
1.1 cgd 81: for (i = 0; Word[i] != '\0'; i++)
82: if (Word[i] == ch) {
83: Known[i] = ch;
1.10 ! dholland 84: correct = true;
1.1 cgd 85: }
86: if (!correct)
87: Errors++;
88: }
89: /*
90: * readch;
91: * Read a character from the input
92: */
1.7 lukem 93: int
1.9 dholland 94: readch(void)
1.1 cgd 95: {
1.7 lukem 96: int cnt;
97: char ch;
1.1 cgd 98:
99: cnt = 0;
100: for (;;) {
1.7 lukem 101: if (read(0, &ch, sizeof ch) <= 0) {
1.1 cgd 102: if (++cnt > 100)
1.7 lukem 103: die(0);
104: } else
105: if (ch == CTRL('L')) {
106: wrefresh(curscr);
107: } else
108: return ch;
1.1 cgd 109: }
110: }
CVSweb <webmaster@jp.NetBSD.org>