1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32: #include <sys/cdefs.h>
33: #ifndef lint
34: #if 0
35: static char sccsid[] = "@(#)morg.c 8.1 (Berkeley) 5/31/93";
36: #else
37: __RCSID("$NetBSD: morg.c,v 1.10 2004/01/27 20:30:30 jsm Exp $");
38: #endif
39: #endif
40:
41: #include "monop.ext"
42:
43:
44:
45:
46:
47: static const char *names[MAX_PRP+2],
48: *const morg_coms[] = {
49: "quit",
50: "print",
51: "where",
52: "own holdings",
53: "holdings",
54: "mortgage",
55: "unmortgage",
56: "buy",
57: "sell",
58: "card",
59: "pay",
60: "trade",
61: "resign",
62: "save game",
63: "restore game",
64: 0
65: };
66:
67: static short square[MAX_PRP+2];
68:
69: static int num_good,got_houses;
70:
71:
72: static int set_mlist(void);
73: static void m(int);
74: static int set_umlist(void);
75: static void unm(int);
76: static void fix_ex(int);
77:
78:
79:
80:
81:
82:
83: void
84: mortgage()
85: {
86: int prop;
87:
88: for (;;) {
89: if (set_mlist() == 0) {
90: if (got_houses)
91: printf("You can't mortgage property with "
92: "houses on it.\n");
93: else
94: printf("You don't have any un-mortgaged "
95: "property.\n");
96: return;
97: }
98: if (num_good == 1) {
99: printf("Your only mortageable property is %s\n",
100: names[0]);
101: if (getyn("Do you want to mortgage it? ") == 0)
102: m(square[0]);
103: return;
104: }
105: prop = getinp("Which property do you want to mortgage? ",names);
106: if (prop == num_good)
107: return;
108: m(square[prop]);
109: notify();
110: }
111: }
112:
113:
114:
115:
116: static int
117: set_mlist()
118: {
119: OWN *op;
120:
121: num_good = 0;
122: for (op = cur_p->own_list; op; op = op->next)
123: if (!op->sqr->desc->morg) {
124: if (op->sqr->type == PRPTY && op->sqr->desc->houses)
125: got_houses++;
126: else {
127: names[num_good] = op->sqr->name;
128: square[num_good++] = sqnum(op->sqr);
129: }
130: }
131: names[num_good++] = "done";
132: names[num_good--] = 0;
133: return num_good;
134: }
135:
136:
137:
138:
139: static void
140: m(prop)
141: int prop;
142: {
143: int price;
144:
145: price = board[prop].cost/2;
146: board[prop].desc->morg = TRUE;
147: printf("That got you $%d\n",price);
148: cur_p->money += price;
149: }
150:
151:
152:
153:
154:
155:
156: void
157: unmortgage()
158: {
159: int prop;
160:
161: for (;;) {
162: if (set_umlist() == 0) {
163: printf("You don't have any mortgaged property.\n");
164: return;
165: }
166: if (num_good == 1) {
167: printf("Your only mortaged property is %s\n",names[0]);
168: if (getyn("Do you want to unmortgage it? ") == 0)
169: unm(square[0]);
170: return;
171: }
172: prop = getinp("Which property do you want to unmortgage? ",
173: names);
174: if (prop == num_good)
175: return;
176: unm(square[prop]);
177: }
178: }
179:
180:
181:
182:
183: static int
184: set_umlist()
185: {
186: OWN *op;
187:
188: num_good = 0;
189: for (op = cur_p->own_list; op; op = op->next)
190: if (op->sqr->desc->morg) {
191: names[num_good] = op->sqr->name;
192: square[num_good++] = sqnum(op->sqr);
193: }
194: names[num_good++] = "done";
195: names[num_good--] = 0;
196: return num_good;
197: }
198:
199:
200:
201:
202: static void
203: unm(prop)
204: int prop;
205: {
206: int price;
207:
208: price = board[prop].cost/2;
209: board[prop].desc->morg = FALSE;
210: price += price/10;
211: printf("That cost you $%d\n",price);
212: cur_p->money -= price;
213: set_umlist();
214: }
215:
216:
217:
218:
219:
220: void
221: force_morg()
222: {
223: told_em = fixing = TRUE;
224: while (cur_p->money <= 0)
225: fix_ex(getinp("How are you going to fix it up? ",morg_coms));
226: fixing = FALSE;
227: }
228:
229:
230:
231:
232: static void
233: fix_ex(com_num)
234: int com_num;
235: {
236: told_em = FALSE;
237: (*func[com_num])();
238: notify();
239: }