]> git.cameronkatri.com Git - bsdgames-darwin.git/blobdiff - hangman/getguess.c
don't segv if the terminal is too big.
[bsdgames-darwin.git] / hangman / getguess.c
index 99001c955eef1885c98a6cf15e476efddfd4c269..c4516c17f5e7bebc9b1c498bb6f374f8a0b6417a 100644 (file)
@@ -1,6 +1,8 @@
+/*     $NetBSD: getguess.c,v 1.10 2012/10/13 21:01:13 dholland Exp $   */
+
 /*
- * Copyright (c) 1983 Regents of the University of California.
- * All rights reserved.
+ * 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
  * 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
+ * 3. 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.
  *
  * SUCH DAMAGE.
  */
 
+#include <sys/cdefs.h>
 #ifndef lint
-/*static char sccsid[] = "from: @(#)getguess.c 5.4 (Berkeley) 6/1/90";*/
-static char rcsid[] = "$Id: getguess.c,v 1.3 1993/08/10 16:50:01 mycroft Exp $";
+#if 0
+static char sccsid[] = "@(#)getguess.c 8.1 (Berkeley) 5/31/93";
+#else
+__RCSID("$NetBSD: getguess.c,v 1.10 2012/10/13 21:01:13 dholland Exp $");
+#endif
 #endif /* not lint */
 
-# include      <termios.h>
-# include      "hangman.h"
+#include <sys/ttydefaults.h>
+#include "hangman.h"
 
 /*
  * getguess:
  *     Get another guess
  */
-getguess()
+void
+getguess(void)
 {
-       register int    i;
-       register int    ch;
-       register bool   correct;
+       int i;
+       int ch;
+       bool correct;
 
        leaveok(stdscr, FALSE);
        for (;;) {
@@ -58,53 +61,50 @@ getguess()
                        if (isupper(ch))
                                ch = tolower(ch);
                        if (Guessed[ch - 'a'])
-                               mvprintw(MESGY, MESGX, "Already guessed '%c'", ch);
+                               mvprintw(MESGY, MESGX, "Already guessed '%c'",
+                                   ch);
                        else
                                break;
-               }
-               else if (ch == origtermio.c_cc[VEOF])
-                       die();
-               else
-                       mvprintw(MESGY, MESGX, "Not a valid guess: '%s'",
-                               unctrl(ch));
+               } else
+                       if (ch == CTRL('D'))
+                               die(0);
+                       else
+                               mvprintw(MESGY, MESGX,
+                                   "Not a valid guess: '%s'", unctrl(ch));
        }
        leaveok(stdscr, TRUE);
        move(MESGY, MESGX);
        clrtoeol();
 
-       Guessed[ch - 'a'] = TRUE;
-       correct = FALSE;
+       Guessed[ch - 'a'] = true;
+       correct = false;
        for (i = 0; Word[i] != '\0'; i++)
                if (Word[i] == ch) {
                        Known[i] = ch;
-                       correct = TRUE;
+                       correct = true;
                }
        if (!correct)
                Errors++;
 }
-
 /*
  * readch;
  *     Read a character from the input
  */
-readch()
+int
+readch(void)
 {
-       register int    cnt, r;
-       auto char       ch;
+       int cnt;
+       char ch;
 
        cnt = 0;
        for (;;) {
-               if (read(0, &ch, sizeof ch) <= 0)
-               {
+               if (read(0, &ch, sizeof ch) <= 0) {
                        if (++cnt > 100)
-                               die();
-               }
-#ifdef VREPRINT
-               else if (ch == origtermio.c_cc[VREPRINT]) {
-                       wrefresh(curscr);
-                       mvcur(0, 0, curscr->_cury, curscr->_curx);
+                               die(0);
                } else
-#endif
-                       return ch;
+                       if (ch == CTRL('L')) {
+                               wrefresh(curscr);
+                       } else
+                               return ch;
        }
 }