BSD 4_2 development
authorCSRG <csrg@ucbvax.Berkeley.EDU>
Mon, 26 Sep 1983 09:49:27 +0000 (01:49 -0800)
committerCSRG <csrg@ucbvax.Berkeley.EDU>
Mon, 26 Sep 1983 09:49:27 +0000 (01:49 -0800)
Work on file usr/src/games/monop/x.c

Synthesized-from: CSRG/cd1/4.2

usr/src/games/monop/x.c [new file with mode: 0644]

diff --git a/usr/src/games/monop/x.c b/usr/src/games/monop/x.c
new file mode 100644 (file)
index 0000000..c82136f
--- /dev/null
@@ -0,0 +1,460 @@
+char   xstr[];
+#line 1 "trade.c"
+
+#line 1 "./monop.ext"
+
+#line 1 "./monop.h"
+
+#line 1 "/usr/include/stdio.h"
+
+
+
+
+extern struct  _iobuf {
+       int     _cnt;
+       char    *_ptr;
+       char    *_base;
+       int     _bufsiz;
+       short   _flag;
+       char    _file;
+} _iob[20];
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+struct _iobuf  *fopen();
+struct _iobuf  *fdopen();
+struct _iobuf  *freopen();
+long   ftell();
+char   *fgets();
+
+char   *sprintf();             
+
+#line 2 "./monop.h"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+                               
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+struct sqr_st {                        
+       char    *name;                  
+       char    owner;                  
+       char    type;                   
+       char    *desc;                  
+       int     cost;                   
+};
+
+typedef struct sqr_st  SQUARE;
+
+struct mon_st {                        
+       char    *name;                  
+       char    owner;                  
+       char    num_in;                 
+       char    num_own;                
+       char    h_cost;                 
+       char    *not_m;                 
+       char    *mon_n;                 
+       SQUARE  *sq[3];                 
+};
+
+typedef struct mon_st  MON;
+
+struct prp_st {                        
+       char    morg;                   
+       char    monop;                  
+       char    square;                 
+       char    houses;                 
+       MON     *mon_desc;              
+       int     rent[6];                
+};
+
+struct own_st {                        
+       SQUARE  *sqr;                   
+       struct own_st   *next;          
+};
+
+typedef struct own_st  OWN;
+
+struct plr_st {                        
+       char    *name;                  
+       char    num_gojf;               
+       char    num_rr;                 
+       char    num_util;               
+       char    loc;                    
+       char    in_jail;                
+       int     money;                  
+       OWN     *own_list;              
+};
+
+struct rr_st {                 
+       char    morg;                   
+};
+
+typedef struct plr_st  PLAY;
+typedef struct prp_st  PROP;
+typedef struct rr_st   RR_S;
+typedef struct rr_st   UTIL_S;
+
+int    cc(), chance(), lux_tax(), goto_jail(), inc_tax();
+#line 2 "./monop.ext"
+
+#line 1 "./deck.h"
+
+
+
+
+
+struct dk_st {                 
+       int     num_cards;              
+       int     last_card;              
+       char    gojf_used;              
+       long    *offsets;               
+};
+
+typedef struct dk_st   DECK;
+#line 3 "./monop.ext"
+
+extern char    trading, spec, fixing, told_em;
+
+extern char    *yn[], *comlist[], *name_list[], *lucky_mes[];
+
+extern int     num_play, player, num_doub, num_luck, (*func[])();
+
+extern DECK    deck[2];
+
+extern MON     mon[];
+
+extern PLAY    *play, *cur_p;
+
+extern PROP    prop[];
+
+extern RR_S    rr[];
+
+extern SQUARE  board[];
+
+extern UTIL_S  util[];
+#line 2 "trade.c"
+
+static struct  trd_st {        
+       int     trader;                 
+       int     cash;                   
+       int     gojf;                   
+       OWN     *prop_list;             
+};
+
+typedef        struct trd_st   TRADE;
+
+static char    *list[(22       +4      +2      ) +2];
+
+static int     used[(22        +4      +2      ) ];
+
+static TRADE   trades[2];
+
+trade() {
+
+       register int    tradee, i;
+
+       trading = (1);
+       for (i = 0; i < 2; i++) {
+               trades[i].cash = 0;
+               trades[i].gojf = (0);
+               trades[i].prop_list = 0;
+       }
+over:
+       if (num_play == 1) {
+               printf((&xstr[4876]));
+               return;
+       }
+       if (num_play > 2) {
+               tradee = getinp((&xstr[4919]),
+                   name_list);
+               if (tradee == num_play)
+                       return;
+               if (tradee == player) {
+                       printf((&xstr[4960]));
+                       goto over;
+               }
+       }
+       else
+               tradee = 1 - player;
+       get_list(0, player);
+       get_list(1, tradee);
+       if (getyn((&xstr[4992])) == 0)
+               summate();
+       if (getyn((&xstr[5016])) == 0)
+               do_trade();
+}
+
+
+
+
+get_list(struct_no, play_no)
+int    struct_no, play_no; {
+
+       register int            sn, pn;
+       register PLAY   *pp;
+       int             numin, prop, num_prp;
+       OWN             *op;
+       TRADE           *tp;
+
+       for (numin = 0; numin < (22     +4      +2      ) ; numin++)
+               used[numin] = (0);
+       sn = struct_no, pn = play_no;
+       pp = &play[pn];
+       tp = &trades[sn];
+       tp->trader = pn;
+       printf((&xstr[5034]), pp->name, pn+1);
+       if (pp->own_list) {
+               numin = set_list(pp->own_list);
+               for (num_prp = numin; num_prp; ) {
+                       prop = getinp((&xstr[5051]),
+                           list);
+                       if (prop == numin)
+                               break;
+                       else if (used[prop])
+                               printf((&xstr[5089]));
+                       else {
+                               num_prp--;
+                               used[prop] = (1);
+                               for (op = pp->own_list; prop--; op = op->next)
+                                       continue;
+                               add_list(pn, &(tp->prop_list),  (op->sqr - board));
+                       }
+               }
+       }
+       if (pp->money > 0) {
+               printf((&xstr[5121]), pp->money);
+               tp->cash = get_int((&xstr[5137]));
+       }
+       if (pp->num_gojf > 0) {
+once_more:
+               printf((&xstr[5164]),pp->num_gojf);
+               tp->gojf = get_int((&xstr[5205]));
+               if (tp->gojf > pp->num_gojf) {
+                       printf((&xstr[5232]));
+                       goto once_more;
+               }
+       }
+}
+
+
+
+set_list(the_list)
+register OWN   *the_list; {
+
+       register int    i;
+       register OWN    *op;
+
+       i = 0;
+       for (op = the_list; op; op = op->next)
+               if (!used[i])
+                       list[i++] = op->sqr->name;
+       list[i++] = (&xstr[1245]);
+       list[i--] = 0;
+       return i;
+}
+
+
+
+summate() {
+
+       register char   some;
+       register int            i;
+       register TRADE  *tp;
+       OWN     *op;
+
+       for (i = 0; i < 2; i++) {
+               tp = &trades[i];
+               some = (0);
+               printf((&xstr[5271]), play[tp->trader].name,
+                       tp->trader+1);
+               if (tp->cash > 0)
+                       printf((&xstr[5294]), tp->cash), some++;
+               if (tp->gojf > 0)
+                       printf((&xstr[5300]), tp->gojf),
+                       some++;
+               if (tp->prop_list) {
+                       for (op = tp->prop_list; op; op = op->next)
+                                        (--((&_iob[1]))->_cnt>=0? ((int)(*((&_iob[1]))->_ptr++=(unsigned)('\t'))):_flsbuf((unsigned)('\t'),(&_iob[1]))), printsq(      (op->sqr - board), (1));
+                       some++;
+               }
+               if (!some)
+                       printf((&xstr[5334]));
+       }
+}
+
+
+
+do_trade() {
+
+       move_em(&trades[0], &trades[1]);
+       move_em(&trades[1], &trades[0]);
+}
+
+
+
+move_em(from, to)
+TRADE  *from, *to; {
+
+       register PLAY   *pl_fr, *pl_to;
+       register OWN            *op;
+
+       pl_fr = &play[from->trader];
+       pl_to = &play[to->trader];
+
+       pl_fr->money -= from->cash;
+       pl_to->money += from->cash;
+       pl_fr->num_gojf -= from->gojf;
+       pl_to->num_gojf += from->gojf;
+       for (op = from->prop_list; op; op = op->next) {
+               add_list(to->trader, &(pl_to->own_list),        (op->sqr - board));
+               op->sqr->owner = to->trader;
+               del_list(from->trader, &(pl_fr->own_list),      (op->sqr - board));
+       }
+       set_ownlist(to->trader);
+}
+
+
+
+resign() {
+
+       register int    i, new_own;
+       register OWN    *op;
+       SQUARE  *sqp;
+
+       if (cur_p->money <= 0) {
+               switch (board[cur_p->loc].type) {
+                 case 2        :
+                 case 1        :
+                 case 0        :
+                       new_own = board[cur_p->loc].owner;
+                       break;
+                 case 6        :
+                 case 4        :
+                 case 5        :
+                       new_own = num_play;
+                       break;
+               }
+               if (new_own == num_play)
+                       printf((&xstr[5350]));
+               else
+                       printf((&xstr[5380]), name_list[new_own]);
+       }
+       else if (num_play == 1) {
+               new_own = num_play;
+               printf((&xstr[5350]));
+       }
+       else {
+               name_list[num_play] = (&xstr[5404]);
+               do {
+                       new_own = getinp((&xstr[5409]),
+                           name_list);
+                       if (new_own == player)
+                               printf((&xstr[5440]));
+               } while (new_own == player);
+               name_list[num_play] = (&xstr[1245]);
+       }
+       if (getyn((&xstr[5472]), yn) != 0)
+               return;
+       if (num_play == 1) {
+               printf((&xstr[5503]));
+               exit(0);
+       }
+       if (new_own < num_play) {       
+               printf((&xstr[5537]));
+               trades[0].trader = new_own;
+               trades[0].cash = trades[0].gojf = 0;
+               trades[0].prop_list = 0;
+               trades[1].trader = player;
+               trades[1].cash = cur_p->money > 0 ? cur_p->money : 0;
+               trades[1].gojf = cur_p->num_gojf;
+               trades[1].prop_list = cur_p->own_list;
+               do_trade();
+       }
+       else {                          
+               printf((&xstr[5558]));
+               for (op = cur_p->own_list; op; op = op->next) {
+                       sqp = op->sqr;
+                       sqp->owner = -1;
+                       sqp->desc->morg = (0);
+                       if (op->type == 0       ) {
+                               isnot_monop(sqp->desc->mon_desc);
+                               sqp->desc->houses = 0;
+                       }
+               }
+               if (cur_p->num_gojf)
+                       ret_card(cur_p);
+       }
+       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));
+       }
+       name_list[num_play--] = 0;
+       for (i = 0; i < 40      ; i++)
+               if (board[i].owner > player)
+                       --board[i].owner;
+       player = --player < 0 ? num_play - 1 : player;
+       next_play();
+       if (num_play < 2) {
+               printf((&xstr[5577]), play[0].name);
+               printhold(0);
+               printf((&xstr[5597]),
+                       play[0].money+prop_worth(&play[0]));
+               exit(0);
+       }
+}