BSD 4_3_Tahoe release
[unix-history] / usr / src / games / monop / morg.c
CommitLineData
006e51ae 1/*
d99e6414 2 * Copyright (c) 1980 Regents of the University of California.
006e51ae
KB
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms are permitted
d99e6414
KB
6 * provided that the above copyright notice and this paragraph are
7 * duplicated in all such forms and that any documentation,
8 * advertising materials, and other materials related to such
9 * distribution and use acknowledge that the software was developed
10 * by the University of California, Berkeley. The name of the
11 * University may not be used to endorse or promote products derived
12 * from this software without specific prior written permission.
13 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
006e51ae
KB
16 */
17
18#ifndef lint
ca67e7b4 19static char sccsid[] = "@(#)morg.c 5.2 (Berkeley) 6/18/88";
006e51ae
KB
20#endif /* not lint */
21
22# include "monop.ext"
23
24/*
25 * These routines deal with mortgaging.
26 */
27
28static char *names[MAX_PRP+2],
29 *morg_coms[] = {
30 "quit", /* 0 */
31 "print", /* 1 */
32 "where", /* 2 */
33 "own holdings", /* 3 */
34 "holdings", /* 4 */
35 "shell", /* 5 */
36 "mortgage", /* 6 */
37 "unmortgage", /* 7 */
38 "buy", /* 8 */
39 "sell", /* 9 */
40 "card", /* 10 */
41 "pay", /* 11 */
42 "trade", /* 12 */
43 "resign", /* 13 */
44 "save game", /* 14 */
45 "restore game", /* 15 */
46 0
47 };
48
49static shrt square[MAX_PRP+2];
50
51static int num_good,got_houses;
52
53/*
54 * This routine is the command level response the mortgage command.
55 * it gets the list of mortgageable property and asks which are to
56 * be mortgaged.
57 */
58mortgage() {
59
60 reg int prop;
61
62 for (;;) {
63 if (set_mlist() == 0) {
64 if (got_houses)
65 printf("You can't mortgage property with houses on it.\n");
66 else
67 printf("You don't have any un-mortgaged property.\n");
68 return;
69 }
70 if (num_good == 1) {
71 printf("Your only mortageable property is %s\n",names[0]);
72 if (getyn("Do you want to mortgage it? ") == 0)
73 m(square[0]);
74 return;
75 }
76 prop = getinp("Which property do you want to mortgage? ",names);
77 if (prop == num_good)
78 return;
79 m(square[prop]);
80 notify(cur_p);
81 }
82}
83/*
84 * This routine sets up the list of mortgageable property
85 */
86set_mlist() {
87
88 reg OWN *op;
89
90 num_good = 0;
91 for (op = cur_p->own_list; op; op = op->next)
92 if (!op->sqr->desc->morg)
93 if (op->sqr->type == PRPTY && op->sqr->desc->houses)
94 got_houses++;
95 else {
96 names[num_good] = op->sqr->name;
97 square[num_good++] = sqnum(op->sqr);
98 }
99 names[num_good++] = "done";
100 names[num_good--] = 0;
101 return num_good;
102}
103/*
104 * This routine actually mortgages the property.
105 */
106m(prop)
107reg int prop; {
108
109 reg int price;
110
111 price = board[prop].cost/2;
112 board[prop].desc->morg = TRUE;
113 printf("That got you $%d\n",price);
114 cur_p->money += price;
115}
116/*
117 * This routine is the command level repsponse to the unmortgage
118 * command. It gets the list of mortgaged property and asks which are
119 * to be unmortgaged.
120 */
121unmortgage() {
122
123 reg int prop;
124
125 for (;;) {
126 if (set_umlist() == 0) {
127 printf("You don't have any mortgaged property.\n");
128 return;
129 }
130 if (num_good == 1) {
131 printf("Your only mortaged property is %s\n",names[0]);
132 if (getyn("Do you want to unmortgage it? ") == 0)
133 unm(square[0]);
134 return;
135 }
136 prop = getinp("Which property do you want to unmortgage? ",names);
137 if (prop == num_good)
138 return;
139 unm(square[prop]);
140 }
141}
142/*
143 * This routine sets up the list of mortgaged property
144 */
145set_umlist() {
146
147 reg OWN *op;
148
149 num_good = 0;
150 for (op = cur_p->own_list; op; op = op->next)
151 if (op->sqr->desc->morg) {
152 names[num_good] = op->sqr->name;
153 square[num_good++] = sqnum(op->sqr);
154 }
155 names[num_good++] = "done";
156 names[num_good--] = 0;
157 return num_good;
158}
159/*
160 * This routine actually unmortgages the property
161 */
162unm(prop)
163reg int prop; {
164
165 reg int price;
166
167 price = board[prop].cost/2;
168 board[prop].desc->morg = FALSE;
169 price += price/10;
170 printf("That cost you $%d\n",price);
171 cur_p->money -= price;
172 set_umlist();
173}
174/*
175 * This routine forces the indebted player to fix his
176 * financial woes.
177 */
178force_morg() {
179
180 told_em = fixing = TRUE;
181 while (cur_p->money <= 0)
182 fix_ex(getinp("How are you going to fix it up? ",morg_coms));
183 fixing = FALSE;
184}
185/*
186 * This routine is a special execute for the force_morg routine
187 */
188fix_ex(com_num)
189reg int com_num; {
190
191 told_em = FALSE;
192 (*func[com_num])();
193 notify();
194}