date and time created 90/05/02 08:40:48 by bostic
[unix-history] / usr / src / games / hangman / getguess.c
CommitLineData
ef609d98 1/*
b8c620d6 2 * Copyright (c) 1983 Regents of the University of California.
ef609d98
KB
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms are permitted
b8c620d6
KB
6 * provided that the above copyright notice and this paragraph are
7 * duplicated in all such forms and that any documentation,
8 * advertising materials, and other materials related to such
9 * distribution and use acknowledge that the software was developed
10 * by the University of California, Berkeley. The name of the
11 * University may not be used to endorse or promote products derived
12 * from this software without specific prior written permission.
13 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
ef609d98
KB
16 */
17
18#ifndef lint
b8c620d6 19static char sccsid[] = "@(#)getguess.c 5.3 (Berkeley) %G%";
ef609d98
KB
20#endif /* not lint */
21
22# include "hangman.h"
23
24/*
25 * getguess:
26 * Get another guess
27 */
28getguess()
29{
30 register int i;
31 register int ch;
32 register bool correct;
33
34 leaveok(stdscr, FALSE);
35 for (;;) {
36 move(PROMPTY, PROMPTX + sizeof "Guess: ");
37 refresh();
38 ch = readch();
39 if (isalpha(ch)) {
40 if (isupper(ch))
41 ch = tolower(ch);
42 if (Guessed[ch - 'a'])
43 mvprintw(MESGY, MESGX, "Already guessed '%c'", ch);
44 else
45 break;
46 }
85a9d303 47 else if (ch == CTRL('D'))
ef609d98
KB
48 die();
49 else
50 mvprintw(MESGY, MESGX, "Not a valid guess: '%s'",
51 unctrl(ch));
52 }
53 leaveok(stdscr, TRUE);
54 move(MESGY, MESGX);
55 clrtoeol();
56
57 Guessed[ch - 'a'] = TRUE;
58 correct = FALSE;
59 for (i = 0; Word[i] != '\0'; i++)
60 if (Word[i] == ch) {
61 Known[i] = ch;
62 correct = TRUE;
63 }
64 if (!correct)
65 Errors++;
66}
67
68/*
69 * readch;
70 * Read a character from the input
71 */
72readch()
73{
74 register int cnt, r;
75 auto char ch;
76
77 cnt = 0;
78 for (;;) {
79 if (read(0, &ch, sizeof ch) <= 0)
80 {
81 if (++cnt > 100)
82 die();
83 }
85a9d303 84 else if (ch == CTRL('L')) {
ef609d98
KB
85 wrefresh(curscr);
86 mvcur(0, 0, curscr->_cury, curscr->_curx);
87 }
88 else
89 return ch;
90 }
91}