1 /* $OpenBSD: mille.h,v 1.13 2016/01/08 18:05:58 mestre Exp $ */ 2 /* $NetBSD: mille.h,v 1.5 1995/03/24 05:01:51 cgd Exp $ */ 3 4 /* 5 * Copyright (c) 1982, 1993 6 * The Regents of the University of California. All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 3. Neither the name of the University nor the names of its contributors 17 * may be used to endorse or promote products derived from this software 18 * without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 21 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 24 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 26 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 28 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 29 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30 * SUCH DAMAGE. 31 * 32 * @(#)mille.h 8.1 (Berkeley) 5/31/93 33 */ 34 35 #include <sys/uio.h> 36 37 #include <curses.h> 38 39 /* 40 * @(#)mille.h 1.1 (Berkeley) 4/1/82 41 */ 42 43 /* 44 * Miscellaneous constants 45 */ 46 47 #define CARD short 48 49 #define HAND_SZ 7 /* number of cards in a hand */ 50 #define DECK_SZ 101 /* number of cards in decks */ 51 #define NUM_SAFE 4 /* number of safety cards */ 52 #define NUM_MILES 5 /* number of milestones types */ 53 #define NUM_CARDS 20 /* number of types of cards */ 54 #define BOARD_Y 17 /* size of board screen */ 55 #define BOARD_X 40 56 #define MILES_Y 7 /* size of mileage screen */ 57 #define MILES_X 80 58 #define SCORE_Y 17 /* size of score screen */ 59 #define SCORE_X 40 60 #define MOVE_Y 10 /* Where to print move prompt */ 61 #define MOVE_X 20 62 #define ERR_Y 15 /* Where to print errors */ 63 #define ERR_X 5 64 #define EXT_Y 4 /* Where to put Extension */ 65 #define EXT_X 9 66 67 #define PLAYER 0 68 #define COMP 1 69 70 #define W_SMALL 0 /* Small (initial) window */ 71 #define W_FULL 1 /* Full (final) window */ 72 73 /* 74 * Move types 75 */ 76 77 #define M_DISCARD 0 78 #define M_DRAW 1 79 #define M_PLAY 2 80 #define M_ORDER 3 81 82 /* 83 * Scores 84 */ 85 86 #define SC_SAFETY 100 87 #define SC_ALL_SAFE 300 88 #define SC_COUP 300 89 #define SC_TRIP 400 90 #define SC_SAFE 300 91 #define SC_DELAY 300 92 #define SC_EXTENSION 200 93 #define SC_SHUT_OUT 500 94 95 /* 96 * safety descriptions 97 */ 98 99 #define S_UNKNOWN 0 /* location of safety unknown */ 100 #define S_IN_HAND 1 /* safety in player's hand */ 101 #define S_PLAYED 2 /* safety has been played */ 102 #define S_GAS_SAFE 0 /* Gas safety card index */ 103 #define S_SPARE_SAFE 1 /* Tire safety card index */ 104 #define S_DRIVE_SAFE 2 /* Driveing safety card index */ 105 #define S_RIGHT_WAY 3 /* Right-of-Way card index */ 106 #define S_CONV 15 /* conversion from C_ to S_ */ 107 108 /* 109 * card numbers 110 */ 111 112 #define C_INIT -1 113 #define C_25 0 114 #define C_50 1 115 #define C_75 2 116 #define C_100 3 117 #define C_200 4 118 #define C_EMPTY 5 119 #define C_FLAT 6 120 #define C_CRASH 7 121 #define C_STOP 8 122 #define C_LIMIT 9 123 #define C_GAS 10 124 #define C_SPARE 11 125 #define C_REPAIRS 12 126 #define C_GO 13 127 #define C_END_LIMIT 14 128 #define C_GAS_SAFE 15 129 #define C_SPARE_SAFE 16 130 #define C_DRIVE_SAFE 17 131 #define C_RIGHT_WAY 18 132 133 /* 134 * prompt types 135 */ 136 137 #define MOVEPROMPT 0 138 #define REALLYPROMPT 1 139 #define ANOTHERHANDPROMPT 2 140 #define ANOTHERGAMEPROMPT 3 141 #define SAVEGAMEPROMPT 4 142 #define SAMEFILEPROMPT 5 143 #define FILEPROMPT 6 144 #define EXTENSIONPROMPT 7 145 #define OVERWRITEFILEPROMPT 8 146 147 typedef struct { 148 bool coups[NUM_SAFE]; 149 bool can_go; 150 bool new_battle; 151 bool new_speed; 152 short safety[NUM_SAFE]; 153 short sh_safety[NUM_SAFE]; 154 short nummiles[NUM_MILES]; 155 short sh_nummiles[NUM_MILES]; 156 CARD hand[HAND_SZ]; 157 CARD sh_hand[HAND_SZ]; 158 CARD battle; 159 CARD sh_battle; 160 CARD speed; 161 CARD sh_speed; 162 int mileage; 163 int sh_mileage; 164 int hand_tot; 165 int sh_hand_tot; 166 int safescore; 167 int sh_safescore; 168 int coupscore; 169 int total; 170 int sh_total; 171 int games; 172 int sh_games; 173 int was_finished; 174 } PLAY; 175 176 /* 177 * macros 178 */ 179 180 #undef CTRL 181 #define CTRL(c) ((c) & 0x1f) 182 #define other(x) (1 - x) 183 #define nextplay() (Play = other(Play)) 184 #define nextwin(x) (1 - x) 185 #define opposite(x) (Opposite[x]) 186 #define is_safety(x) (x >= C_GAS_SAFE) 187 188 /* 189 * externals 190 */ 191 192 extern bool Debug, Finished, Next, On_exit, Order, Saved; 193 194 extern char Initstr[100], *C_fmt; 195 extern const char *const *C_name, *Fromfile; 196 197 extern int Card_no, End, Handstart, Movetype, Numgos, 198 Numneed[], Numseen[NUM_CARDS], Play, Window; 199 extern const int Numcards[], Value[]; 200 201 extern CARD Deck[DECK_SZ], Discard, Sh_discard, *Topcard; 202 extern const CARD Opposite[NUM_CARDS]; 203 204 extern FILE *outf; 205 206 extern PLAY Player[2]; 207 208 extern WINDOW *Board, *Miles, *Score; 209 210 /* 211 * functions 212 */ 213 214 void account(CARD); 215 void calcmove(void); 216 int canplay(const PLAY *, const PLAY *, CARD); 217 int check_ext(bool); 218 void check_go(void); 219 void check_more(void); 220 __dead void die(int); 221 void domove(void); 222 bool error(char *, ...); 223 void finalscore(PLAY *); 224 CARD getcard(void); 225 void getmove(void); 226 int getyn(int); 227 int haspicked(const PLAY *); 228 void init(void); 229 int is_repair(CARD); 230 void newboard(void); 231 void newscore(void); 232 int onecard(const PLAY *); 233 int playcard(PLAY *); 234 void prboard(void); 235 void prompt(int); 236 void prscore(bool); 237 int readch(void); 238 bool rest_f(const char *); 239 int roll(int, int); 240 void rub(int); 241 int safety(CARD); 242 bool save(void); 243 void show_card(int, int, CARD, CARD *); 244 void show_score(int, int, int, int *); 245 void shuffle(void); 246 void sort(CARD *); 247 bool varpush(int, ssize_t(int, const struct iovec *, int)); 248 #ifdef EXTRAP 249 void extrapolate(PLAY *); 250 void undoex(void); 251 #endif 252