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 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 #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 *Fromfile, Initstr[]; 199 extern const char *C_fmt, **C_name; 200 201 extern int Card_no, End, Handstart, Movetype, Numcards[], Numgos, 202 Numneed[], Numseen[NUM_CARDS], Play, Value[], Window; 203 204 extern CARD Deck[DECK_SZ], Discard, Opposite[NUM_CARDS], Sh_discard, 205 *Topcard; 206 207 extern FILE *outf; 208 209 extern PLAY Player[2]; 210 211 extern WINDOW *Board, *Miles, *Score; 212 213 /* 214 * functions 215 */ 216 217 void account(CARD); 218 void calcmove(void); 219 bool canplay(PLAY *, PLAY *, CARD); 220 bool check_ext(bool); 221 void check_more(void); 222 void die(int) __dead2; 223 void domove(void); 224 bool error(const char *, ...); 225 #ifdef EXTRAP 226 void extrapolate(PLAY *); 227 #endif 228 void finalscore(PLAY *); 229 CARD getcard(void); 230 bool getyn(int); 231 void init(void); 232 int isrepair(CARD); 233 void newboard(void); 234 void newscore(void); 235 bool onecard(PLAY *); 236 void prboard(void); 237 void prompt(int); 238 void prscore(bool); 239 char readch(void); 240 bool rest_f(char *); 241 int roll(int, int); 242 void rub(int); 243 CARD safety(CARD); 244 bool save(void); 245 void shuffle(void); 246 void sort(CARD *); 247 bool varpush(int, ssize_t (*)(int, const struct iovec *, int)); 248 #ifdef EXTRAP 249 void undoex(void); 250 #endif 251