-/* $NetBSD: move.c,v 1.10 1999/09/08 21:17:51 jsm Exp $ */
+/* $NetBSD: move.c,v 1.19 2019/02/03 03:19:25 mrg 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.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"
#undef CTRL
#define CTRL(c) (c - 'A' + 1)
+static void check_go(void);
+static int playcard(PLAY *);
+static void getmove(void);
+static int haspicked(const PLAY *);
+
void
-domove()
+domove(void)
{
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
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;
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) {
* Check and see if either side can go. If they cannot,
* the game is over
*/
-void
-check_go()
+static void
+check_go(void)
{
CARD card;
PLAY *pp, *op;
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
Finished = TRUE;
}
-int
-playcard(pp)
- PLAY *pp;
+static int
+playcard(PLAY *pp)
{
int v;
CARD card;
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");
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;
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;
}
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;
return TRUE;
}
-void
-getmove()
+static void
+getmove(void)
{
char c;
#ifdef EXTRAP
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();
}
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())
leaveok(Board, TRUE);
if ((outf = fopen(buf, "w")) == NULL)
warn("%s", buf);
- setbuf(outf, (char *)NULL);
+ setbuf(outf, NULL);
}
Debug = !Debug;
break;
/*
* return whether or not the player has picked
*/
-int
-haspicked(pp)
- const PLAY *pp;
+static int
+haspicked(const PLAY *pp)
{
int card;
}
void
-account(card)
- CARD card;
+account(CARD card)
{
CARD oppos;
}
void
-prompt(promptno)
- int promptno;
+prompt(int promptno)
{
static const char *const names[] = {
">>:Move:",
}
void
-sort(hand)
- CARD *hand;
+sort(CARD *hand)
{
CARD *cp, *tp;
CARD temp;