mille.h revision 1.1 1 /*
2 * Copyright (c) 1982 Regents of the University of California.
3 * 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. All advertising materials mentioning features or use of this software
14 * must display the following acknowledgement:
15 * This product includes software developed by the University of
16 * California, Berkeley and its contributors.
17 * 4. Neither the name of the University nor the names of its contributors
18 * may be used to endorse or promote products derived from this software
19 * without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 *
33 * @(#)mille.h 5.5 (Berkeley) 6/1/90
34 */
35
36 # include <sys/types.h>
37 # include <ctype.h>
38 # include <curses.h>
39 # include <string.h>
40
41 /*
42 * @(#)mille.h 1.1 (Berkeley) 4/1/82
43 */
44
45 /*
46 * Miscellaneous constants
47 */
48
49 # define unsgn unsigned
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 saftey 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 # ifdef SYSV
151 # define srandom(x) srand(x)
152 # define random() rand()
153
154 # ifndef attron
155 # define erasechar() _tty.c_cc[VERASE]
156 # define killchar() _tty.c_cc[VKILL]
157 # endif
158 # else
159 # ifndef erasechar
160 # define erasechar() _tty.sg_erase
161 # define killchar() _tty.sg_kill
162 # endif
163 # endif SYSV
164
165 typedef struct {
166 bool coups[NUM_SAFE];
167 bool can_go;
168 bool new_battle;
169 bool new_speed;
170 short safety[NUM_SAFE];
171 short sh_safety[NUM_SAFE];
172 short nummiles[NUM_MILES];
173 short sh_nummiles[NUM_MILES];
174 CARD hand[HAND_SZ];
175 CARD sh_hand[HAND_SZ];
176 CARD battle;
177 CARD sh_battle;
178 CARD speed;
179 CARD sh_speed;
180 int mileage;
181 int sh_mileage;
182 int hand_tot;
183 int sh_hand_tot;
184 int safescore;
185 int sh_safescore;
186 int coupscore;
187 int total;
188 int sh_total;
189 int games;
190 int sh_games;
191 int was_finished;
192 } PLAY;
193
194 /*
195 * macros
196 */
197
198 # define other(x) (1 - x)
199 # define nextplay() (Play = other(Play))
200 # define nextwin(x) (1 - x)
201 # define opposite(x) (Opposite[x])
202 # define issafety(x) (x >= C_GAS_SAFE)
203
204 /*
205 * externals
206 */
207
208 extern bool Debug, Finished, Next, On_exit, Order, Saved;
209
210 extern char *C_fmt, **C_name, *Fromfile, Initstr[];
211
212 extern int Card_no, End, Handstart, Movetype, Numcards[], Numgos,
213 Numneed[], Numseen[NUM_CARDS], Play, Value[], Window;
214
215 extern CARD Deck[DECK_SZ], Discard, Opposite[NUM_CARDS], Sh_discard,
216 *Topcard;
217
218 extern FILE *outf;
219
220 extern PLAY Player[2];
221
222 extern WINDOW *Board, *Miles, *Score;
223
224 /*
225 * functions
226 */
227
228 CARD getcard();
229