1 /* @(#)board.c 8.1 (Berkeley) 5/31/93 */
2 /* $NetBSD: board.c,v 1.9 2009/08/12 05:17:57 dholland 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 "back.h"
34
35 static int i, j, k;
36 static char ln[60];
37
38 static void wrbsub(void);
39
40 void
wrboard(void)41 wrboard(void)
42 {
43 int l;
44 static const char bl[] =
45 "| | | |\n";
46 static const char sv[] =
47 "| | | | \n";
48
49 fixtty(&noech);
50 clear();
51
52 if (tflag) {
53 fboard();
54 goto lastline;
55 }
56 writel("_____________________________________________________\n");
57 writel(bl);
58 strcpy(ln, bl);
59 for (j = 1; j < 50; j += 4) {
60 k = j / 4 + (j > 24 ? 12 : 13);
61 ln[j + 1] = k % 10 + '0';
62 ln[j] = k / 10 + '0';
63 if (j == 21)
64 j += 4;
65 }
66 writel(ln);
67 for (i = 0; i < 5; i++) {
68 strcpy(ln, sv);
69 for (j = 1; j < 50; j += 4) {
70 k = j / 4 + (j > 24 ? 12 : 13);
71 wrbsub();
72 if (j == 21)
73 j += 4;
74 }
75 if (-board[25] > i)
76 ln[26] = 'w';
77 if (-board[25] > i + 5)
78 ln[25] = 'w';
79 if (-board[25] > i + 10)
80 ln[27] = 'w';
81 l = 53;
82 if (off[1] > i || (off[1] < 0 && off[1] + 15 > i)) {
83 ln[54] = 'r';
84 l = 55;
85 }
86 if (off[1] > i + 5 || (off[1] < 0 && off[1] + 15 > i + 5)) {
87 ln[55] = 'r';
88 l = 56;
89 }
90 if (off[1] > i + 10 || (off[1] < 0 && off[1] + 15 > i + 10)) {
91 ln[56] = 'r';
92 l = 57;
93 }
94 ln[l++] = '\n';
95 ln[l] = '\0';
96 writel(ln);
97 }
98 strcpy(ln, bl);
99 ln[25] = 'B';
100 ln[26] = 'A';
101 ln[27] = 'R';
102 writel(ln);
103 strcpy(ln, sv);
104 for (i = 4; i > -1; i--) {
105 for (j = 1; j < 50; j += 4) {
106 k = ((j > 24 ? 53 : 49) - j) / 4;
107 wrbsub();
108 if (j == 21)
109 j += 4;
110 }
111 if (board[0] > i)
112 ln[26] = 'r';
113 if (board[0] > i + 5)
114 ln[25] = 'r';
115 if (board[0] > i + 10)
116 ln[27] = 'r';
117 l = 53;
118 if (off[0] > i || (off[0] < 0 && off[0] + 15 > i)) {
119 ln[54] = 'w';
120 l = 55;
121 }
122 if (off[0] > i + 5 || (off[0] < 0 && off[0] + 15 > i + 5)) {
123 ln[55] = 'w';
124 l = 56;
125 }
126 if (off[0] > i + 10 || (off[0] < 0 && off[0] + 15 > i + 10)) {
127 ln[56] = 'w';
128 l = 57;
129 }
130 ln[l++] = '\n';
131 ln[l] = '\0';
132 writel(ln);
133 }
134 strcpy(ln, bl);
135 for (j = 1; j < 50; j += 4) {
136 k = ((j > 24 ? 53 : 49) - j) / 4;
137 ln[j + 1] = k % 10 + '0';
138 if (k > 9)
139 ln[j] = k / 10 + '0';
140 if (j == 21)
141 j += 4;
142 }
143 writel(ln);
144 writel("|_______________________|___|_______________________|\n");
145
146 lastline:
147 gwrite();
148 if (tflag)
149 curmove(18, 0);
150 else {
151 writec('\n');
152 writec('\n');
153 }
154 fixtty(&raw);
155 }
156
157 static void
wrbsub(void)158 wrbsub(void)
159 {
160 int m;
161 char d;
162
163 if (board[k] > 0) {
164 m = board[k];
165 d = 'r';
166 } else {
167 m = -board[k];
168 d = 'w';
169 }
170 if (m > i)
171 ln[j + 1] = d;
172 if (m > i + 5)
173 ln[j] = d;
174 if (m > i + 10)
175 ln[j + 2] = d;
176 }
177