]> git.cameronkatri.com Git - bsdgames-darwin.git/blobdiff - mille/move.c
cgram: provide usage on incorrect invocation
[bsdgames-darwin.git] / mille / move.c
index c29baca23b68546d3acc3fa659640a62691fcd2a..1528aa38173be1a2217071f8c45ca14bde31c0c4 100644 (file)
@@ -1,6 +1,8 @@
+/*     $NetBSD: move.c,v 1.19 2019/02/03 03:19:25 mrg 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[] = "@(#)move.c     5.4 (Berkeley) 6/1/90";
+#if 0
+static char sccsid[] = "@(#)move.c     8.1 (Berkeley) 5/31/93";
+#else
+__RCSID("$NetBSD: move.c,v 1.19 2019/02/03 03:19:25 mrg 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
  */
@@ -52,17 +56,26 @@ static char sccsid[] = "@(#)move.c  5.4 (Berkeley) 6/1/90";
 #undef CTRL
 #define        CTRL(c)         (c - 'A' + 1)
 
-char   *Movenames[] = {
-               "M_DISCARD", "M_DRAW", "M_PLAY", "M_ORDER"
-       };
+static void check_go(void);
+static int playcard(PLAY *);
+static void getmove(void);
+static int haspicked(const PLAY *);
 
-domove()
+void
+domove(void)
 {
-       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
@@ -78,7 +91,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;
@@ -111,7 +124,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) {
@@ -159,21 +172,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;
+static void
+check_go(void)
+{
+       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
@@ -189,11 +203,11 @@ check_go() {
        Finished = TRUE;
 }
 
-playcard(pp)
-reg PLAY       *pp;
+static int
+playcard(PLAY *pp)
 {
-       reg int         v;
-       reg CARD        card;
+       int     v;
+       CARD    card;
 
        /*
         * check and see if player has picked
@@ -218,12 +232,15 @@ mustpick:
          case C_200:
                if (pp->nummiles[C_200] == 2)
                        return error("only two 200's per hand");
+               /* FALLTHROUGH */
          case C_100:   case C_75:
                if (pp->speed == C_LIMIT)
                        return error("limit of 50");
+               /* FALLTHROUGH */
          case C_50:
                if (pp->mileage + Value[card] > End)
                        return error("puts you over %d", End);
+               /* FALLTHROUGH */
          case C_25:
                if (!pp->can_go)
                        return error("cannot move now");
@@ -245,7 +262,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;
@@ -287,7 +304,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;
                        }
@@ -320,7 +337,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;
@@ -334,13 +351,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;
 }
 
-getmove()
+static void
+getmove(void)
 {
-       reg char        c, *sp;
+       char    c;
 #ifdef EXTRAP
        static bool     last_ex = FALSE;        /* set if last command was E */
 
@@ -356,9 +374,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();
                }
@@ -386,7 +404,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);
@@ -426,10 +444,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())
@@ -451,8 +471,8 @@ getmove()
                                *sp = '\0';
                                leaveok(Board, TRUE);
                                if ((outf = fopen(buf, "w")) == NULL)
-                                       perror(buf);
-                               setbuf(outf, (char *)NULL);
+                                       warn("%s", buf);
+                               setbuf(outf, NULL);
                        }
                        Debug = !Debug;
                        break;
@@ -465,13 +485,14 @@ getmove()
 ret:
        leaveok(Board, TRUE);
 }
+
 /*
  * return whether or not the player has picked
  */
-haspicked(pp)
-reg PLAY       *pp; {
-
-       reg int card;
+static int
+haspicked(const PLAY *pp)
+{
+       int     card;
 
        if (Topcard <= Deck)
                return TRUE;
@@ -487,10 +508,10 @@ reg PLAY  *pp; {
        return (pp->hand[card] != C_INIT);
 }
 
-account(card)
-reg CARD       card; {
-
-       reg CARD        oppos;
+void
+account(CARD card)
+{
+       CARD    oppos;
 
        if (card == C_INIT)
                return;
@@ -512,10 +533,10 @@ reg CARD  card; {
                }
 }
 
-prompt(promptno)
-int    promptno;
+void
+prompt(int promptno)
 {
-       static char     *names[] = {
+       static const char       *const names[] = {
                                ">>:Move:",
                                "Really?",
                                "Another hand?",
@@ -543,11 +564,11 @@ int       promptno;
        clrtoeol();
 }
 
-sort(hand)
-reg CARD       *hand;
+void
+sort(CARD *hand)
 {
-       reg CARD        *cp, *tp;
-       reg CARD        temp;
+       CARD    *cp, *tp;
+       CARD    temp;
 
        cp = hand;
        hand += HAND_SZ;
@@ -559,4 +580,3 @@ reg CARD    *hand;
                                *tp = temp;
                        }
 }
-