]> git.cameronkatri.com Git - bsdgames-darwin.git/blobdiff - mille/move.c
don't try to switch a char and have a case of EOF - use an int.
[bsdgames-darwin.git] / mille / move.c
index afc3acb6851f8a9b4ceca4131d7c5ca72a34edc3..e383e9c8dd5cbe859ec8fca52ca8f2ee1371b981 100644 (file)
@@ -1,4 +1,4 @@
-/*     $NetBSD: move.c,v 1.10 1999/09/08 21:17:51 jsm Exp $    */
+/*     $NetBSD: move.c,v 1.15 2004/11/05 21:30:32 dsl Exp $    */
 
 /*
  * Copyright (c) 1983, 1993
  * 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.
  *
 #if 0
 static char sccsid[] = "@(#)move.c     8.1 (Berkeley) 5/31/93";
 #else
-__RCSID("$NetBSD: move.c,v 1.10 1999/09/08 21:17:51 jsm Exp $");
+__RCSID("$NetBSD: move.c,v 1.15 2004/11/05 21:30:32 dsl Exp $");
 #endif
 #endif /* not lint */
 
 #include <termios.h>
 
+#ifdef DEBUG
+#include <sys/param.h>
+#endif
+
 #include       "mille.h"
 #ifndef        unctrl
 #include       "unctrl.h"
@@ -64,6 +64,13 @@ domove()
        bool    goodplay;
 
        pp = &Player[Play];
+       for (i = 0, j = 0; i < HAND_SZ; i++)
+               if (pp->hand[i] != -1)
+                       j++;
+       if (!j) {
+               nextplay();
+               return;
+       }
        if (Play == PLAYER)
                getmove();
        else
@@ -79,7 +86,7 @@ domove()
                                else
                                        error("no card there");
                        else {
-                               if (issafety(pp->hand[Card_no])) {
+                               if (is_safety(pp->hand[Card_no])) {
                                        error("discard a safety?");
                                        goodplay = FALSE;
                                        break;
@@ -112,7 +119,7 @@ domove()
 acc:
                        if (Play == COMP) {
                                account(*Topcard);
-                               if (issafety(*Topcard))
+                               if (is_safety(*Topcard))
                                        pp->safety[*Topcard-S_CONV] = S_IN_HAND;
                        }
                        if (pp->hand[1] == C_INIT && Topcard > Deck) {
@@ -171,11 +178,11 @@ check_go()
                op = (pp == &Player[COMP] ? &Player[PLAYER] : &Player[COMP]);
                for (i = 0; i < HAND_SZ; i++) {
                        card = pp->hand[i];
-                       if (issafety(card) || canplay(pp, op, card)) {
+                       if (is_safety(card) || canplay(pp, op, card)) {
 #ifdef DEBUG
                                if (Debug) {
                                        fprintf(outf, "CHECK_GO: can play %s (%d), ", C_name[card], card);
-                                       fprintf(outf, "issafety(card) = %d, ", issafety(card));
+                                       fprintf(outf, "is_safety(card) = %d, ", is_safety(card));
                                        fprintf(outf, "canplay(pp, op, card) = %d\n", canplay(pp, op, card));
                                }
 #endif
@@ -248,7 +255,7 @@ mustpick:
 
          case C_GO:
                if (pp->battle != C_INIT && pp->battle != C_STOP
-                   && !isrepair(pp->battle))
+                   && !is_repair(pp->battle))
                        return error("cannot play \"Go\" on a \"%s\"",
                            C_name[pp->battle]);
                pp->battle = C_GO;
@@ -290,7 +297,7 @@ protected:
          case C_DRIVE_SAFE:    case C_RIGHT_WAY:
                if (pp->battle == opposite(card)
                    || (card == C_RIGHT_WAY && pp->speed == C_LIMIT)) {
-                       if (!(card == C_RIGHT_WAY && !isrepair(pp->battle))) {
+                       if (!(card == C_RIGHT_WAY && !is_repair(pp->battle))) {
                                pp->battle = C_GO;
                                pp->can_go = TRUE;
                        }
@@ -323,7 +330,7 @@ protected:
                                pp->can_go = TRUE;
                                pp->battle = C_INIT;
                        }
-                       if (!pp->can_go && isrepair(pp->battle))
+                       if (!pp->can_go && is_repair(pp->battle))
                                pp->can_go = TRUE;
                }
                Next = -1;
@@ -360,9 +367,9 @@ getmove()
                refresh();
                while ((c = readch()) == killchar() || c == erasechar())
                        continue;
-               if (islower(c))
-                       c = toupper(c);
-               if (isprint(c) && !isspace(c)) {
+               if (islower((unsigned char)c))
+                       c = toupper((unsigned char)c);
+               if (isprint((unsigned char)c) && !isspace((unsigned char)c)) {
                        addch(c);
                        refresh();
                }
@@ -430,10 +437,12 @@ getmove()
                  case 'Z':             /* Debug code */
                        if (!Debug && outf == NULL) {
                                char    buf[MAXPATHLEN];
+                               char    *sp;
 
                                prompt(FILEPROMPT);
                                leaveok(Board, FALSE);
                                refresh();
+over:
                                sp = buf;
                                while ((*sp = readch()) != '\n') {
                                        if (*sp == killchar())