sockaddr's now require length (K. Sklower);
[unix-history] / usr / src / games / backgammon / common_source / check.c
CommitLineData
e0bbfbf9
DF
1/*
2 * Copyright (c) 1980 Regents of the University of California.
69fb7db6
KB
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms are permitted
65c7d3b6
KB
6 * provided that the above copyright notice and this paragraph are
7 * duplicated in all such forms and that any documentation,
8 * advertising materials, and other materials related to such
9 * distribution and use acknowledge that the software was developed
10 * by the University of California, Berkeley. The name of the
11 * University may not be used to endorse or promote products derived
12 * from this software without specific prior written permission.
13 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
e0bbfbf9
DF
16 */
17
18#ifndef lint
65c7d3b6 19static char sccsid[] = "@(#)check.c 5.3 (Berkeley) %G%";
69fb7db6 20#endif /* not lint */
4980a535
RH
21
22#include "back.h"
23
24getmove () {
25 register int i, c;
26
27 c = 0;
28 for (;;) {
29 i = checkmove(c);
30
31 switch (i) {
32 case -1:
33 if (movokay(mvlim)) {
34 if (tflag)
35 curmove (20,0);
36 else
37 writec ('\n');
38 for (i = 0; i < mvlim; i++)
39 if (h[i])
40 wrhit(g[i]);
41 nexturn();
42 if (*offopp == 15)
43 cturn *= -2;
44 if (tflag && pnum)
45 bflag = pnum;
46 return;
47 }
48
49 case -4:
50 case 0:
51 if (tflag)
52 refresh();
53 if (i != 0 && i != -4)
54 break;
55 if (tflag)
56 curmove (20,0);
57 else
58 writec ('\n');
59 writel (*Colorptr);
60 if (i == -4)
61 writel (" must make ");
62 else
63 writel (" can only make ");
64 writec (mvlim+'0');
65 writel (" move");
66 if (mvlim > 1)
67 writec ('s');
68 writec ('.');
69 writec ('\n');
70 break;
71
72 case -3:
73 if (quit())
74 return;
75 }
76
77 if (! tflag)
78 proll ();
79 else {
80 curmove (cturn == -1? 18: 19,39);
81 cline ();
82 c = -1;
83 }
84 }
85}
86\f
87movokay (mv)
88register int mv;
89
90{
91 register int i, m;
92
93 if (d0)
94 swap;
95
96 for (i = 0; i < mv; i++) {
97
98 if (p[i] == g[i]) {
99 moverr (i);
100 curmove (20,0);
101 writel ("Attempt to move to same location.\n");
102 return (0);
103 }
104
105 if (cturn*(g[i]-p[i]) < 0) {
106 moverr (i);
107 curmove (20,0);
108 writel ("Backwards move.\n");
109 return (0);
110 }
111
112 if (abs(board[bar]) && p[i] != bar) {
113 moverr (i);
114 curmove (20,0);
115 writel ("Men still on bar.\n");
116 return (0);
117 }
118
119 if ( (m = makmove(i)) ) {
120 moverr (i);
121 switch (m) {
122
123 case 1:
124 writel ("Move not rolled.\n");
125 break;
126
127 case 2:
128 writel ("Bad starting position.\n");
129 break;
130
131 case 3:
132 writel ("Destination occupied.\n");
133 break;
134
135 case 4:
136 writel ("Can't remove men yet.\n");
137 }
138 return (0);
139 }
140 }
141 return (1);
142}