]> git.cameronkatri.com Git - bsdgames-darwin.git/blobdiff - monop/trade.c
PR/55695: Andreas Gustafsson: factor(6) -h option doesn't always work
[bsdgames-darwin.git] / monop / trade.c
index 9a090b61f071e4e6dca1648cac406550da788afb..63d2e8a9b3a48c1d9e46b185f035379049f273df 100644 (file)
@@ -1,6 +1,8 @@
+/*     $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                */
@@ -47,15 +49,22 @@ struct trd_st {                     /* how much to give to other player     */
 
 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++) {
@@ -87,18 +96,19 @@ over:
        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;
@@ -110,16 +120,16 @@ int       struct_no, play_no; {
        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));
                        }
@@ -139,32 +149,35 @@ once_more:
                }
        }
 }
+
 /*
  *     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];
@@ -185,22 +198,25 @@ summate() {
                        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];
@@ -216,14 +232,16 @@ TRADE     *from, *to; {
        }
        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) {
@@ -231,6 +249,9 @@ resign() {
                  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;
@@ -255,7 +276,7 @@ resign() {
                } 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");
@@ -279,23 +300,24 @@ resign() {
                        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);