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