xref: /dragonfly/games/mille/mille.h (revision 6693db17)
1 /*-
2  * Copyright (c) 1982, 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  *	@(#)mille.h	8.1 (Berkeley) 5/31/93
30  *
31  * $FreeBSD: src/games/mille/mille.h,v 1.7 1999/12/12 06:17:24 billf Exp $
32  * $DragonFly: src/games/mille/mille.h,v 1.6 2006/08/27 17:17:23 pavalos Exp $
33  */
34 
35 #include <sys/types.h>
36 #include <sys/uio.h>
37 #include <ctype.h>
38 #include <curses.h>
39 #include <stdlib.h>
40 #include <string.h>
41 #include <unistd.h>
42 
43 /*
44  * @(#)mille.h	1.1 (Berkeley) 4/1/82
45  */
46 
47 /*
48  * Miscellaneous constants
49  */
50 
51 #define	CARD		short
52 
53 #define	HAND_SZ		7	/* number of cards in a hand	*/
54 #define	DECK_SZ		101	/* number of cards in decks	*/
55 #define	NUM_SAFE	4	/* number of saftey cards	*/
56 #define	NUM_MILES	5	/* number of milestones types	*/
57 #define	NUM_CARDS	20	/* number of types of cards	*/
58 #define	BOARD_Y		17	/* size of board screen		*/
59 #define	BOARD_X		40
60 #define	MILES_Y		7	/* size of mileage screen	*/
61 #define	MILES_X		80
62 #define	SCORE_Y		17	/* size of score screen		*/
63 #define	SCORE_X		40
64 #define	MOVE_Y		10	/* Where to print move prompt	*/
65 #define	MOVE_X		20
66 #define	ERR_Y		15	/* Where to print errors	*/
67 #define	ERR_X		5
68 #define	EXT_Y		4	/* Where to put Extension	*/
69 #define	EXT_X		9
70 
71 #define	PLAYER		0
72 #define	COMP		1
73 
74 #define	W_SMALL		0	/* Small (initial) window	*/
75 #define	W_FULL		1	/* Full (final) window		*/
76 
77 /*
78  * Move types
79  */
80 
81 #define	M_DISCARD	0
82 #define	M_DRAW		1
83 #define	M_PLAY		2
84 #define	M_ORDER		3
85 
86 /*
87  * Scores
88  */
89 
90 #define	SC_SAFETY	100
91 #define	SC_ALL_SAFE	300
92 #define	SC_COUP		300
93 #define	SC_TRIP		400
94 #define	SC_SAFE		300
95 #define	SC_DELAY	300
96 #define	SC_EXTENSION	200
97 #define	SC_SHUT_OUT	500
98 
99 /*
100  * safety descriptions
101  */
102 
103 #define	S_UNKNOWN	0	/* location of safety unknown	*/
104 #define	S_IN_HAND	1	/* safety in player's hand	*/
105 #define	S_PLAYED	2	/* safety has been played	*/
106 #define	S_GAS_SAFE	0	/* Gas safety card index	*/
107 #define	S_SPARE_SAFE	1	/* Tire safety card index	*/
108 #define	S_DRIVE_SAFE	2	/* Driveing safety card index	*/
109 #define	S_RIGHT_WAY	3	/* Right-of-Way card index	*/
110 #define	S_CONV		15	/* conversion from C_ to S_	*/
111 
112 /*
113  * card numbers
114  */
115 
116 #define	C_INIT		-1
117 #define	C_25		0
118 #define	C_50		1
119 #define	C_75		2
120 #define	C_100		3
121 #define	C_200		4
122 #define	C_EMPTY		5
123 #define	C_FLAT		6
124 #define	C_CRASH		7
125 #define	C_STOP		8
126 #define	C_LIMIT		9
127 #define	C_GAS		10
128 #define	C_SPARE		11
129 #define	C_REPAIRS	12
130 #define	C_GO		13
131 #define	C_END_LIMIT	14
132 #define	C_GAS_SAFE	15
133 #define	C_SPARE_SAFE	16
134 #define	C_DRIVE_SAFE	17
135 #define	C_RIGHT_WAY	18
136 
137 /*
138  * prompt types
139  */
140 
141 #define	MOVEPROMPT		0
142 #define	REALLYPROMPT		1
143 #define	ANOTHERHANDPROMPT	2
144 #define	ANOTHERGAMEPROMPT	3
145 #define	SAVEGAMEPROMPT		4
146 #define	SAMEFILEPROMPT		5
147 #define	FILEPROMPT		6
148 #define	EXTENSIONPROMPT		7
149 #define	OVERWRITEFILEPROMPT	8
150 
151 #define	erasechar()	cur_term->Nttyb.c_cc[VERASE]
152 #define	killchar()	cur_term->Nttyb.c_cc[VKILL]
153 
154 typedef struct {
155 	bool	coups[NUM_SAFE];
156 	bool	can_go;
157 	bool	new_battle;
158 	bool	new_speed;
159 	short	safety[NUM_SAFE];
160 	short	sh_safety[NUM_SAFE];
161 	short	nummiles[NUM_MILES];
162 	short	sh_nummiles[NUM_MILES];
163 	CARD	hand[HAND_SZ];
164 	CARD	sh_hand[HAND_SZ];
165 	CARD	battle;
166 	CARD	sh_battle;
167 	CARD	speed;
168 	CARD	sh_speed;
169 	int	mileage;
170 	int	sh_mileage;
171 	int	hand_tot;
172 	int	sh_hand_tot;
173 	int	safescore;
174 	int	sh_safescore;
175 	int	coupscore;
176 	int	total;
177 	int	sh_total;
178 	int	games;
179 	int	sh_games;
180 	int	was_finished;
181 } PLAY;
182 
183 /*
184  * macros
185  */
186 
187 #define	other(x)	(1 - x)
188 #define	nextplay()	(Play = other(Play))
189 #define	nextwin(x)	(1 - x)
190 #define	opposite(x)	(Opposite[x])
191 #define	issafety(x)	(x >= C_GAS_SAFE)
192 
193 /*
194  * externals
195  */
196 
197 extern bool	Debug, Finished, Next, On_exit, Order, Saved;
198 
199 extern char	*Fromfile, Initstr[];
200 extern const char	*C_fmt, **C_name;
201 
202 extern int	Card_no, End, Handstart, Movetype, Numcards[], Numgos,
203 		Numneed[], Numseen[NUM_CARDS], Play, Value[], Window;
204 
205 extern CARD	Deck[DECK_SZ], Discard, Opposite[NUM_CARDS], Sh_discard,
206 		*Topcard;
207 
208 extern FILE	*outf;
209 
210 extern PLAY	Player[2];
211 
212 extern WINDOW	*Board, *Miles, *Score;
213 
214 /*
215  * functions
216  */
217 
218 void	account(CARD);
219 void	calcmove(void);
220 bool	canplay(PLAY *, PLAY *, CARD);
221 bool	check_ext(bool);
222 void	check_more(void);
223 void	die(int);
224 void	domove(void);
225 bool	error(const char *, ...);
226 #ifdef EXTRAP
227 void	extrapolate(PLAY *);
228 #endif
229 void	finalscore(PLAY *);
230 CARD	getcard(void);
231 bool	getyn(int);
232 void	init(void);
233 int	isrepair(CARD);
234 void	newboard(void);
235 void	newscore(void);
236 bool	onecard(PLAY *);
237 void	prboard(void);
238 void	prompt(int);
239 void	prscore(bool);
240 char	readch(void);
241 bool	rest_f(char *);
242 int	roll(int, int);
243 void	rub(int);
244 CARD	safety(CARD);
245 bool	save(void);
246 void	shuffle(void);
247 void	sort(CARD *);
248 bool	varpush(int, ssize_t (*)(int, const struct iovec *, int));
249 #ifdef EXTRAP
250 void	undoex(void);
251 #endif
252