+/* $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
*/
#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
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
*/
-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
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
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;
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 */
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();
}
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);
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())
*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;
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;
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;
}
}
-prompt(promptno)
-int promptno;
+void
+prompt(int promptno)
{
- static char *names[] = {
+ static const char *const names[] = {
">>:Move:",
"Really?",
"Another hand?",
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;
*tp = temp;
}
}
-