1 /* $OpenBSD: board.c,v 1.7 2003/06/03 03:01:38 millert Exp $ */ 2 3 /* 4 * Copyright (c) 1980, 1993 5 * The Regents of the University of California. All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 3. Neither the name of the University nor the names of its contributors 16 * may be used to endorse or promote products derived from this software 17 * without specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 23 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29 * SUCH DAMAGE. 30 */ 31 32 #ifndef lint 33 #if 0 34 static char sccsid[] = "@(#)board.c 8.1 (Berkeley) 5/31/93"; 35 #else 36 static char rcsid[] = "$OpenBSD: board.c,v 1.7 2003/06/03 03:01:38 millert Exp $"; 37 #endif 38 #endif /* not lint */ 39 40 #include "back.h" 41 42 static int i, j, k; 43 static char ln[60]; 44 45 void 46 wrboard() 47 { 48 int l; 49 static const char bl[] = 50 "| | | |\n"; 51 static const char sv[] = 52 "| | | | \n"; 53 54 clear(); 55 56 fboard(); 57 goto lastline; 58 addstr("_____________________________________________________\n"); 59 addstr(bl); 60 strlcpy(ln, bl, sizeof ln); 61 for (j = 1; j < 50; j += 4) { 62 k = j / 4 + (j > 24 ? 12 : 13); 63 ln[j + 1] = k % 10 + '0'; 64 ln[j] = k / 10 + '0'; 65 if (j == 21) 66 j += 4; 67 } 68 addstr(ln); 69 for (i = 0; i < 5; i++) { 70 strlcpy(ln, sv, sizeof ln); 71 for (j = 1; j < 50; j += 4) { 72 k = j / 4 + (j > 24 ? 12 : 13); 73 wrbsub(); 74 if (j == 21) 75 j += 4; 76 } 77 if (-board[25] > i) 78 ln[26] = 'w'; 79 if (-board[25] > i + 5) 80 ln[25] = 'w'; 81 if (-board[25] > i + 10) 82 ln[27] = 'w'; 83 l = 53; 84 if (off[1] > i || (off[1] < 0 && off[1] + 15 > i)) { 85 ln[54] = 'r'; 86 l = 55; 87 } 88 if (off[1] > i + 5 || (off[1] < 0 && off[1] + 15 > i + 5)) { 89 ln[55] = 'r'; 90 l = 56; 91 } 92 if (off[1] > i + 10 || (off[1] < 0 && off[1] + 15 > i + 10)) { 93 ln[56] = 'r'; 94 l = 57; 95 } 96 ln[l++] = '\n'; 97 ln[l] = '\0'; 98 addstr(ln); 99 } 100 strlcpy(ln, bl, sizeof ln); 101 ln[25] = 'B'; 102 ln[26] = 'A'; 103 ln[27] = 'R'; 104 addstr(ln); 105 strlcpy(ln, sv, sizeof ln); 106 for (i = 4; i > -1; i--) { 107 for (j = 1; j < 50; j += 4) { 108 k = ((j > 24 ? 53 : 49) - j) / 4; 109 wrbsub(); 110 if (j == 21) 111 j += 4; 112 } 113 if (board[0] > i) 114 ln[26] = 'r'; 115 if (board[0] > i + 5) 116 ln[25] = 'r'; 117 if (board[0] > i + 10) 118 ln[27] = 'r'; 119 l = 53; 120 if (off[0] > i || (off[0] < 0 && off[0] + 15 > i)) { 121 ln[54] = 'w'; 122 l = 55; 123 } 124 if (off[0] > i + 5 || (off[0] < 0 && off[0] + 15 > i + 5)) { 125 ln[55] = 'w'; 126 l = 56; 127 } 128 if (off[0] > i + 10 || (off[0] < 0 && off[0] + 15 > i + 10)) { 129 ln[56] = 'w'; 130 l = 57; 131 } 132 ln[l++] = '\n'; 133 ln[l] = '\0'; 134 addstr(ln); 135 } 136 strlcpy(ln, bl, sizeof ln); 137 for (j = 1; j < 50; j += 4) { 138 k = ((j > 24 ? 53 : 49) - j) / 4; 139 ln[j + 1] = k % 10 + '0'; 140 if (k > 9) 141 ln[j] = k / 10 + '0'; 142 if (j == 21) 143 j += 4; 144 } 145 addstr(ln); 146 addstr("|_______________________|___|_______________________|\n"); 147 148 lastline: 149 gwrite(); 150 move(18, 0); 151 } 152 153 void 154 wrbsub() 155 { 156 int m; 157 char d; 158 159 if (board[k] > 0) { 160 m = board[k]; 161 d = 'r'; 162 } else { 163 m = -board[k]; 164 d = 'w'; 165 } 166 if (m > i) 167 ln[j + 1] = d; 168 if (m > i + 5) 169 ln[j] = d; 170 if (m > i + 10) 171 ln[j + 2] = d; 172 } 173