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