]>
git.cameronkatri.com Git - bsdgames-darwin.git/blob - backgammon/common_source/subs.c
1 /* $NetBSD: subs.c,v 1.6 1997/10/10 08:59:48 lukem Exp $ */
4 * Copyright (c) 1980, 1993
5 * The Regents of the University of California. All rights reserved.
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
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. All advertising materials mentioning features or use of this software
16 * must display the following acknowledgement:
17 * This product includes software developed by the University of
18 * California, Berkeley and its contributors.
19 * 4. Neither the name of the University nor the names of its contributors
20 * may be used to endorse or promote products derived from this software
21 * without specific prior written permission.
23 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36 #include <sys/cdefs.h>
39 static char sccsid
[] = "@(#)subs.c 8.1 (Berkeley) 5/31/93";
41 __RCSID("$NetBSD: subs.c,v 1.6 1997/10/10 08:59:48 lukem Exp $");
50 static char plred
[] = "Player is red, computer is white.";
51 static char plwhite
[] = "Player is white, computer is red.";
52 static char nocomp
[] = "(No computer play.)";
55 "Usage: backgammon [-] [n r w b pr pw pb t3a]\n",
56 "\t-\tgets this list\n\tn\tdon't ask for rules or instructions",
57 "\tr\tplayer is red (implies n)\n\tw\tplayer is white (implies n)",
58 "\tb\ttwo players, red and white (implies n)",
59 "\tpr\tprint the board before red's turn",
60 "\tpw\tprint the board before white's turn",
61 "\tpb\tprint the board before both player's turn",
62 "\tterm\tterminal is a term",
63 "\tsfile\trecover saved game from file",
80 while ((*s1
++ = *s2
++) != '\0');
88 if (buffnum
== BUFSIZ
) {
89 if (write(1, outbuff
, BUFSIZ
) != BUFSIZ
)
90 errexit("addbuf (write):");
102 if (write(1, outbuff
, buffnum
) != buffnum
)
103 errexit("buflush (write):");
117 if (read(0, &c
, 1) != 1)
119 #ifdef WHY_IS_THIS_HARDWIRED_IN_HERE
123 if (c
== '\033' || c
== '\015')
129 if (c
>= 'a' && c
<= 'z')
152 trace
= fopen("bgtrace", "w");
154 fprintf(trace
, "writel: \"");
155 for (s
= l
; *s
; s
++) {
156 if (*s
< ' ' || *s
== '\177')
157 fprintf(trace
, "^%c", (*s
) ^ 0100);
161 fprintf(trace
, "\"\n");
175 writel("Red's roll: ");
177 writel("White's roll: ");
191 for (i
= 4; i
> 0; i
--) {
193 for (j
= 0; j
< i
; j
++)
196 writec((n
/ t
) % 10 + '0');
198 writec(n
% 10 + '0');
213 writel("Game value: ");
220 writel(" doubled last.");
223 case -1: /* player is red */
226 case 0: /* player is both colors */
229 case 1: /* player is white */
234 if (rscore
|| wscore
) {
253 writel("Are you sure you want to quit?");
256 writel("Would you like to save this game?");
268 char special
; /* special response */
274 while ((c
= readc()) != 'Y' && c
!= 'N') {
275 if (special
&& c
== special
)
279 writel(" (Y, N, or ");
301 writel("Blot hit on ");
313 c
= cturn
/ abs(cturn
);
330 /* process arguments here. dashes are ignored, nbrw are ignored if
331 * the game is being recovered */
334 while (s
[0][0] == '-') {
337 /* don't ask if rules or instructions needed */
345 /* player is both read and white */
363 /* player is white */
372 /* print board after move according to following
375 if (s
[0][2] != 'r' && s
[0][2] != 'w' && s
[0][2] != 'b')
378 args
[acnt
++] = s
[0][2];
388 if (s
[0][2] == '\0') { /* get terminal caps */
392 tflag
= getcaps(&s
[0][2]);
415 board
[6] = board
[13] = -5;
417 board
[12] = board
[19] = 5;
420 off
[0] = off
[1] = -15;
446 if (tcsetattr(0, TCSADRAIN
, t
) < 0)
454 /* go to bottom of screen */
461 /* fix terminal status */
484 while (c
< '1' || c
> '6')
490 while (c
< '1' || c
> '6')