]> git.cameronkatri.com Git - bsdgames-darwin.git/blobdiff - mille/move.c
Add a missing bp->b_score not null check - addresses Coverity CID 1003
[bsdgames-darwin.git] / mille / move.c
index a6b8fd270c088ea4614f411d2fbe65bbb5489dbf..e383e9c8dd5cbe859ec8fca52ca8f2ee1371b981 100644 (file)
@@ -1,6 +1,8 @@
+/*     $NetBSD: move.c,v 1.15 2004/11/05 21:30:32 dsl 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: @(#)move.c     5.4 (Berkeley) 6/1/90";*/
-static char rcsid[] = "$Id: move.c,v 1.2 1993/08/01 18:53:58 mycroft Exp $";
+#if 0
+static char sccsid[] = "@(#)move.c     8.1 (Berkeley) 5/31/93";
+#else
+__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"
 #endif
 
-# ifdef        attron
-#      include <term.h>
-#      define  _tty    cur_term->Nttyb
-# endif        attron
-
 /*
  * @(#)move.c  1.2 (Berkeley) 3/28/83
  */
@@ -53,17 +56,21 @@ static char rcsid[] = "$Id: move.c,v 1.2 1993/08/01 18:53:58 mycroft Exp $";
 #undef CTRL
 #define        CTRL(c)         (c - 'A' + 1)
 
-char   *Movenames[] = {
-               "M_DISCARD", "M_DRAW", "M_PLAY", "M_ORDER"
-       };
-
+void
 domove()
 {
-       reg PLAY        *pp;
-       reg int         i, j;
-       reg bool        goodplay;
+       PLAY    *pp;
+       int     i, j;
+       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) {
@@ -160,21 +167,22 @@ acc:
  *     Check and see if either side can go.  If they cannot,
  * the game is over
  */
-check_go() {
-
-       reg CARD        card;
-       reg PLAY        *pp, *op;
-       reg int         i;
+void
+check_go()
+{
+       CARD    card;
+       PLAY    *pp, *op;
+       int     i;
 
        for (pp = Player; pp < &Player[2]; pp++) {
                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
@@ -190,11 +198,12 @@ check_go() {
        Finished = TRUE;
 }
 
+int
 playcard(pp)
-reg PLAY       *pp;
+       PLAY    *pp;
 {
-       reg int         v;
-       reg CARD        card;
+       int     v;
+       CARD    card;
 
        /*
         * check and see if player has picked
@@ -246,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;
@@ -288,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;
                        }
@@ -321,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;
@@ -335,13 +344,14 @@ protected:
        if (pp == &Player[PLAYER])
                account(card);
        pp->hand[Card_no] = C_INIT;
-       Next = (Next == -1 ? FALSE : TRUE);
+       Next = (Next == (bool)-1 ? FALSE : TRUE);
        return TRUE;
 }
 
+void
 getmove()
 {
-       reg char        c, *sp;
+       char    c;
 #ifdef EXTRAP
        static bool     last_ex = FALSE;        /* set if last command was E */
 
@@ -357,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();
                }
@@ -387,7 +397,7 @@ getmove()
                        Movetype = M_ORDER;
                        goto ret;
                  case 'Q':             /* Quit */
-                       rub();          /* Same as a rubout */
+                       rub(0);         /* Same as a rubout */
                        break;
                  case 'W':             /* Window toggle */
                        Window = nextwin(Window);
@@ -427,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())
@@ -452,7 +464,7 @@ getmove()
                                *sp = '\0';
                                leaveok(Board, TRUE);
                                if ((outf = fopen(buf, "w")) == NULL)
-                                       perror(buf);
+                                       warn("%s", buf);
                                setbuf(outf, (char *)NULL);
                        }
                        Debug = !Debug;
@@ -466,13 +478,15 @@ getmove()
 ret:
        leaveok(Board, TRUE);
 }
+
 /*
  * return whether or not the player has picked
  */
+int
 haspicked(pp)
-reg PLAY       *pp; {
-
-       reg int card;
+       const PLAY      *pp;
+{
+       int     card;
 
        if (Topcard <= Deck)
                return TRUE;
@@ -488,10 +502,11 @@ reg PLAY  *pp; {
        return (pp->hand[card] != C_INIT);
 }
 
+void
 account(card)
-reg CARD       card; {
-
-       reg CARD        oppos;
+       CARD    card; 
+{
+       CARD    oppos;
 
        if (card == C_INIT)
                return;
@@ -513,10 +528,11 @@ reg CARD  card; {
                }
 }
 
+void
 prompt(promptno)
-int    promptno;
+       int     promptno;
 {
-       static char     *names[] = {
+       static const char       *const names[] = {
                                ">>:Move:",
                                "Really?",
                                "Another hand?",
@@ -544,11 +560,12 @@ int       promptno;
        clrtoeol();
 }
 
+void
 sort(hand)
-reg CARD       *hand;
+       CARD    *hand;
 {
-       reg CARD        *cp, *tp;
-       reg CARD        temp;
+       CARD    *cp, *tp;
+       CARD    temp;
 
        cp = hand;
        hand += HAND_SZ;
@@ -560,4 +577,3 @@ reg CARD    *hand;
                                *tp = temp;
                        }
 }
-