gdb - Local mods (compile)
[dragonfly.git] / games / backgammon / common_source / board.c
1 /*-
2  * Copyright (c) 1980, 1993
3  *      The Regents of the University of California.  All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  * 3. Neither the name of the University nor the names of its contributors
14  *    may be used to endorse or promote products derived from this software
15  *    without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27  * SUCH DAMAGE.
28  *
29  * @(#)board.c  8.1 (Berkeley) 5/31/93
30  * $FreeBSD: src/games/backgammon/common_source/board.c,v 1.6 1999/11/30 03:48:25 billf Exp $
31  * $DragonFly: src/games/backgammon/common_source/board.c,v 1.3 2006/08/08 16:36:11 pavalos Exp $
32  */
33
34 #include <string.h>
35 #include "back.h"
36
37 static void     wrbsub(void);
38
39 static int      i, j, k;
40 static char     ln[60];
41
42 void
43 wrboard(void)
44 {
45         int l;
46         static const char bl[] =
47                 "|                       |   |                       |\n";
48         static const char sv[] =
49                 "|                       |   |                       |    \n";
50
51         fixtty(noech);
52         clear();
53
54         if (tflag) {
55                 fboard();
56                 goto lastline;
57         }
58         writel("_____________________________________________________\n");
59         writel(bl);
60         strcpy(ln, bl);
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         writel(ln);
69         for (i = 0; i < 5; i++) {
70                 strcpy(ln, sv);
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                 writel(ln);
99         }
100         strcpy(ln, bl);
101         ln[25] = 'B';
102         ln[26] = 'A';
103         ln[27] = 'R';
104         writel(ln);
105         strcpy(ln, sv);
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                 writel(ln);
135         }
136         strcpy(ln, bl);
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         writel(ln);
146         writel("|_______________________|___|_______________________|\n");
147
148 lastline:
149         gwrite();
150         if (tflag)
151                 curmove(18, 0);
152         else {
153                 writec('\n');
154                 writec('\n');
155         }
156         fixtty(raw);
157 }
158
159 static void
160 wrbsub(void)
161 {
162         int m;
163         char d;
164
165         if (board[k] > 0) {
166                 m = board[k];
167                 d = 'r';
168         } else {
169                 m = -board[k];
170                 d = 'w';
171         }
172         if (m > i)
173                 ln[j + 1] = d;
174         if (m > i + 5)
175                 ln[j] = d;
176         if (m > i + 10)
177                 ln[j + 2] = d;
178 }