1 /* $OpenBSD: print.c,v 1.8 2016/01/08 18:20:33 mestre Exp $ */ 2 /* $NetBSD: print.c,v 1.3 1995/03/23 08:35:05 cgd Exp $ */ 3 4 /* 5 * Copyright (c) 1980, 1993 6 * The Regents of the University of California. All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 3. Neither the name of the University nor the names of its contributors 17 * may be used to endorse or promote products derived from this software 18 * without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 21 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 24 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 26 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 28 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 29 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30 * SUCH DAMAGE. 31 */ 32 33 #include <stdio.h> 34 35 #include "monop.ext" 36 37 static const char *header = "Name Own Price Mg # Rent"; 38 39 static void printmorg(SQUARE *); 40 41 /* 42 * This routine prints out the current board 43 */ 44 void 45 printboard(void) 46 { 47 int i; 48 49 printf("%s\t%s\n", header, header); 50 for (i = 0; i < N_SQRS/2; i++) { 51 printsq(i, FALSE); 52 putchar('\t'); 53 printsq(i+N_SQRS/2, TRUE); 54 } 55 } 56 /* 57 * This routine lists where each player is. 58 */ 59 void 60 where(void) 61 { 62 int i; 63 64 printf("%s Player\n", header); 65 for (i = 0; i < num_play; i++) { 66 printsq(play[i].loc, FALSE); 67 printf(" %s (%d)", play[i].name, i+1); 68 if (cur_p == &play[i]) 69 printf(" *"); 70 putchar('\n'); 71 } 72 } 73 /* 74 * This routine prints out an individual square 75 */ 76 void 77 printsq(int sqn, bool eoln) 78 { 79 int rnt; 80 PROP *pp; 81 SQUARE *sqp; 82 83 sqp = &board[sqn]; 84 printf("%-10.10s", sqp->name); 85 switch (sqp->type) { 86 case SAFE: 87 case CC: 88 case CHANCE: 89 case INC_TAX: 90 case GOTO_J: 91 case LUX_TAX: 92 case IN_JAIL: 93 if (!eoln) 94 printf(" "); 95 break; 96 case PRPTY: 97 pp = sqp->desc; 98 if (sqp->owner < 0) { 99 printf(" - %-8.8s %3d", pp->mon_desc->name, sqp->cost); 100 if (!eoln) 101 printf(" "); 102 break; 103 } 104 printf(" %d %-8.8s %3d", sqp->owner+1, pp->mon_desc->name, 105 sqp->cost); 106 printmorg(sqp); 107 if (pp->monop) { 108 if (pp->houses < 5) { 109 if (pp->houses > 0) 110 printf("%d %4d", pp->houses, 111 pp->rent[(int)pp->houses]); 112 else 113 printf("0 %4d", pp->rent[0] * 2); 114 } else 115 printf("H %4d", pp->rent[5]); 116 } else 117 printf(" %4d", pp->rent[0]); 118 break; 119 case UTIL: 120 if (sqp->owner < 0) { 121 printf(" - 150"); 122 if (!eoln) 123 printf(" "); 124 break; 125 } 126 printf(" %d 150", sqp->owner+1); 127 printmorg(sqp); 128 printf("%d", play[(int)sqp->owner].num_util); 129 if (!eoln) 130 printf(" "); 131 break; 132 case RR: 133 if (sqp->owner < 0) { 134 printf(" - Railroad 200"); 135 if (!eoln) 136 printf(" "); 137 break; 138 } 139 printf(" %d Railroad 200", sqp->owner+1); 140 printmorg(sqp); 141 rnt = 25; 142 rnt <<= play[(int)sqp->owner].num_rr - 1; 143 printf("%d %4d", play[(int)sqp->owner].num_rr, 144 25 << (play[(int)sqp->owner].num_rr - 1)); 145 break; 146 default: 147 printf("Warning: printsq() switch %d\n", sqp->type); 148 break; 149 } 150 if (eoln) 151 putchar('\n'); 152 } 153 /* 154 * This routine prints out the mortgage flag. 155 */ 156 static void 157 printmorg(SQUARE *sqp) 158 { 159 if (sqp->desc->morg) 160 printf(" * "); 161 else 162 printf(" "); 163 } 164 /* 165 * This routine lists the holdings of the player given 166 */ 167 void 168 printhold(int pl) 169 { 170 OWN *op; 171 PLAY *pp; 172 173 pp = &play[pl]; 174 printf("%s's (%d) holdings (Total worth: $%d):\n", name_list[pl], pl+1, 175 pp->money + prop_worth(pp)); 176 printf("\t$%d", pp->money); 177 if (pp->num_gojf) { 178 printf(", %d get-out-of-jail-free card", pp->num_gojf); 179 if (pp->num_gojf > 1) 180 putchar('s'); 181 } 182 putchar('\n'); 183 if (pp->own_list) { 184 printf("\t%s\n", header); 185 for (op = pp->own_list; op; op = op->next) { 186 putchar('\t'); 187 printsq(sqnum(op->sqr), TRUE); 188 } 189 } 190 } 191