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