+/* $NetBSD: trade.c,v 1.16 2012/06/19 05:35:32 dholland Exp $ */
+
/*
- * Copyright (c) 1980 Regents of the University of California.
- * All rights reserved.
+ * Copyright (c) 1980, 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: @(#)trade.c 5.5 (Berkeley) 6/1/90";*/
-static char rcsid[] = "$Id: trade.c,v 1.2 1993/08/01 18:53:28 mycroft Exp $";
+#if 0
+static char sccsid[] = "@(#)trade.c 8.1 (Berkeley) 5/31/93";
+#else
+__RCSID("$NetBSD: trade.c,v 1.16 2012/06/19 05:35:32 dholland Exp $");
+#endif
#endif /* not lint */
-# include "monop.ext"
+#include "monop.h"
struct trd_st { /* how much to give to other player */
int trader; /* trader number */
typedef struct trd_st TRADE;
-static char *list[MAX_PRP+2];
+static const char *plist[MAX_PRP+2];
static int used[MAX_PRP];
static TRADE trades[2];
-trade() {
+static void get_list(int, int );
+static int set_list(OWN *);
+static void summate(void);
+static void do_trade(void);
+static void move_em(TRADE *, TRADE *);
- reg int tradee, i;
+void
+trade(void)
+{
+ int tradee, i;
trading = TRUE;
for (i = 0; i < 2; i++) {
if (getyn("Is the trade ok? ") == 0)
do_trade();
}
+
/*
* This routine gets the list of things to be trader for the
* player, and puts in the structure given.
*/
-get_list(struct_no, play_no)
-int struct_no, play_no; {
-
- reg int sn, pn;
- reg PLAY *pp;
- int numin, prop, num_prp;
- OWN *op;
- TRADE *tp;
+static void
+get_list(int struct_no, int play_no)
+{
+ int sn, pn;
+ PLAY *pp;
+ int numin, propnum, num_prp;
+ OWN *op;
+ TRADE *tp;
for (numin = 0; numin < MAX_PRP; numin++)
used[numin] = FALSE;
if (pp->own_list) {
numin = set_list(pp->own_list);
for (num_prp = numin; num_prp; ) {
- prop = getinp("Which property do you wish to trade? ",
- list);
- if (prop == numin)
+ propnum=getinp("Which property do you wish to trade? ",
+ plist);
+ if (propnum == numin)
break;
- else if (used[prop])
+ else if (used[propnum])
printf("You've already allocated that.\n");
else {
num_prp--;
- used[prop] = TRUE;
- for (op = pp->own_list; prop--; op = op->next)
+ used[propnum] = TRUE;
+ for (op = pp->own_list; propnum--; op = op->next)
continue;
add_list(pn, &(tp->prop_list), sqnum(op->sqr));
}
}
}
}
+
/*
* This routine sets up the list of tradable property.
*/
-set_list(the_list)
-reg OWN *the_list; {
-
- reg int i;
- reg OWN *op;
+static int
+set_list(OWN *the_list)
+{
+ int i;
+ OWN *op;
i = 0;
for (op = the_list; op; op = op->next)
if (!used[i])
- list[i++] = op->sqr->name;
- list[i++] = "done";
- list[i--] = 0;
+ plist[i++] = op->sqr->name;
+ plist[i++] = "done";
+ plist[i--] = 0;
return i;
}
+
/*
* This routine summates the trade.
*/
-summate() {
-
- reg bool some;
- reg int i;
- reg TRADE *tp;
- OWN *op;
+static void
+summate(void)
+{
+ bool some;
+ int i;
+ TRADE *tp;
+ OWN *op;
for (i = 0; i < 2; i++) {
tp = &trades[i];
printf("\t-- Nothing --\n");
}
}
+
/*
* This routine actually executes the trade.
*/
-do_trade() {
-
+static void
+do_trade(void)
+{
move_em(&trades[0], &trades[1]);
move_em(&trades[1], &trades[0]);
}
+
/*
* This routine does a switch from one player to another
*/
-move_em(from, to)
-TRADE *from, *to; {
-
- reg PLAY *pl_fr, *pl_to;
- reg OWN *op;
+static void
+move_em(TRADE *from, TRADE *to)
+{
+ PLAY *pl_fr, *pl_to;
+ OWN *op;
pl_fr = &play[from->trader];
pl_to = &play[to->trader];
}
set_ownlist(to->trader);
}
+
/*
* This routine lets a player resign
*/
-resign() {
-
- reg int i, new_own;
- reg OWN *op;
- SQUARE *sqp;
+void
+resign(void)
+{
+ int i, new_own;
+ OWN *op;
+ SQUARE *sqp;
if (cur_p->money <= 0) {
switch (board[cur_p->loc].type) {
case RR:
case PRPTY:
new_own = board[cur_p->loc].owner;
+ /* If you ran out of money by buying current location */
+ if (new_own == player)
+ new_own = num_play;
break;
default: /* Chance, taxes, etc */
new_own = num_play;
} while (new_own == player);
name_list[num_play] = "done";
}
- if (getyn("Do you really want to resign? ", yn) != 0)
+ if (getyn("Do you really want to resign? ") != 0)
return;
if (num_play == 1) {
printf("Then NOBODY wins (not even YOU!)\n");
sqp->owner = -1;
sqp->desc->morg = FALSE;
if (sqp->type == PRPTY) {
- isnot_monop(sqp->desc->mon_desc);
+ is_not_monop(sqp->desc->mon_desc);
sqp->desc->houses = 0;
}
}
if (cur_p->num_gojf)
ret_card(cur_p);
}
+ free(play[player].name);
for (i = player; i < num_play; i++) {
name_list[i] = name_list[i+1];
if (i + 1 < num_play)
- cpy_st(&play[i], &play[i+1], sizeof (PLAY));
+ play[i] = play[i+1];
}
- name_list[num_play--] = 0;
+ name_list[num_play--] = NULL;
for (i = 0; i < N_SQRS; i++)
if (board[i].owner > player)
--board[i].owner;
- player = --player < 0 ? num_play - 1 : player;
+ player = player == 0 ? num_play - 1 : player - 1;
next_play();
if (num_play < 2) {
printf("\nThen %s WINS!!!!!\n", play[0].name);