1
0
Fork 0
bsdgames/mille/mille.h

275 lines
6.6 KiB
C

/* $NetBSD: mille.h,v 1.13 2004/01/27 20:30:30 jsm Exp $ */
/*
* Copyright (c) 1982, 1993
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* @(#)mille.h 8.1 (Berkeley) 5/31/93
*/
# include <sys/types.h>
# include <sys/uio.h>
# include <sys/stat.h>
# include <ctype.h>
# include <err.h>
# include <errno.h>
# include <curses.h>
# include <fcntl.h>
# include <stdlib.h>
# include <string.h>
# include <termios.h>
# include <unistd.h>
/*
* @(#)mille.h 1.1 (Berkeley) 4/1/82
*/
/*
* Miscellaneous constants
*/
# define unsgn unsigned
# define CARD short
# define HAND_SZ 7 /* number of cards in a hand */
# define DECK_SZ 101 /* number of cards in decks */
# define NUM_SAFE 4 /* number of saftey cards */
# define NUM_MILES 5 /* number of milestones types */
# define NUM_CARDS 20 /* number of types of cards */
# define BOARD_Y 17 /* size of board screen */
# define BOARD_X 40
# define MILES_Y 7 /* size of mileage screen */
# define MILES_X 80
# define SCORE_Y 17 /* size of score screen */
# define SCORE_X 40
# define MOVE_Y 10 /* Where to print move prompt */
# define MOVE_X 20
# define ERR_Y 15 /* Where to print errors */
# define ERR_X 5
# define EXT_Y 4 /* Where to put Extension */
# define EXT_X 9
# define PLAYER 0
# define COMP 1
# define W_SMALL 0 /* Small (initial) window */
# define W_FULL 1 /* Full (final) window */
/*
* Move types
*/
# define M_DISCARD 0
# define M_DRAW 1
# define M_PLAY 2
# define M_ORDER 3
/*
* Scores
*/
# define SC_SAFETY 100
# define SC_ALL_SAFE 300
# define SC_COUP 300
# define SC_TRIP 400
# define SC_SAFE 300
# define SC_DELAY 300
# define SC_EXTENSION 200
# define SC_SHUT_OUT 500
/*
* safety descriptions
*/
# undef S_UNKNOWN
# undef S_IN_HAND
# undef S_PLAYED
# undef S_GAS_SAFE
# undef S_SPARE_SAFE
# undef S_DRIVE_SAFE
# undef S_RIGHT_WAY
# undef S_CONV
# define S_UNKNOWN 0 /* location of safety unknown */
# define S_IN_HAND 1 /* safety in player's hand */
# define S_PLAYED 2 /* safety has been played */
# define S_GAS_SAFE 0 /* Gas safety card index */
# define S_SPARE_SAFE 1 /* Tire safety card index */
# define S_DRIVE_SAFE 2 /* Driveing safety card index */
# define S_RIGHT_WAY 3 /* Right-of-Way card index */
# define S_CONV 15 /* conversion from C_ to S_ */
/*
* card numbers
*/
# define C_INIT -1
# define C_25 0
# define C_50 1
# define C_75 2
# define C_100 3
# define C_200 4
# define C_EMPTY 5
# define C_FLAT 6
# define C_CRASH 7
# define C_STOP 8
# define C_LIMIT 9
# define C_GAS 10
# define C_SPARE 11
# define C_REPAIRS 12
# define C_GO 13
# define C_END_LIMIT 14
# define C_GAS_SAFE 15
# define C_SPARE_SAFE 16
# define C_DRIVE_SAFE 17
# define C_RIGHT_WAY 18
/*
* prompt types
*/
# define MOVEPROMPT 0
# define REALLYPROMPT 1
# define ANOTHERHANDPROMPT 2
# define ANOTHERGAMEPROMPT 3
# define SAVEGAMEPROMPT 4
# define SAMEFILEPROMPT 5
# define FILEPROMPT 6
# define EXTENSIONPROMPT 7
# define OVERWRITEFILEPROMPT 8
# ifdef SYSV
# define srandom(x) srand(x)
# define random() rand()
# endif /* SYSV */
typedef struct {
bool coups[NUM_SAFE];
bool can_go;
bool new_battle;
bool new_speed;
short safety[NUM_SAFE];
short sh_safety[NUM_SAFE];
short nummiles[NUM_MILES];
short sh_nummiles[NUM_MILES];
CARD hand[HAND_SZ];
CARD sh_hand[HAND_SZ];
CARD battle;
CARD sh_battle;
CARD speed;
CARD sh_speed;
int mileage;
int sh_mileage;
int hand_tot;
int sh_hand_tot;
int safescore;
int sh_safescore;
int coupscore;
int total;
int sh_total;
int games;
int sh_games;
int was_finished;
} PLAY;
/*
* macros
*/
# define other(x) (1 - x)
# define nextplay() (Play = other(Play))
# define nextwin(x) (1 - x)
# define opposite(x) (Opposite[x])
# define is_safety(x) (x >= C_GAS_SAFE)
/*
* externals
*/
extern bool Debug, Finished, Next, On_exit, Order, Saved;
extern char Initstr[];
extern const char *C_fmt, *const *C_name, *Fromfile;
extern int Card_no, End, Handstart, Movetype, Numgos,
Numneed[], Numseen[NUM_CARDS], Play, Window;
extern const int Numcards[], Value[];
extern CARD Deck[DECK_SZ], Discard, Sh_discard, *Topcard;
extern const CARD Opposite[NUM_CARDS];
extern FILE *outf;
extern PLAY Player[2];
extern WINDOW *Board, *Miles, *Score;
/*
* functions
*/
void account(CARD);
void calcmove(void);
int canplay(const PLAY *, const PLAY *, CARD);
int check_ext(bool);
void check_go(void);
void check_more(void);
void die(int) __attribute__((__noreturn__));
void domove(void);
bool error(const char *, ...);
void extrapolate(PLAY *);
void finalscore(PLAY *);
CARD getcard(void);
void getmove(void);
int getyn(int);
int haspicked(const PLAY *);
void init(void);
int is_repair(CARD);
int main(int, char **);
void newboard(void);
void newscore(void);
int onecard(const PLAY *);
int playcard(PLAY *);
void prboard(void);
void prompt(int);
void prscore(bool);
int readch(void);
bool rest_f(const char *);
int roll(int, int);
void rub(int);
int safety(CARD);
bool save(void);
void show_card(int, int, CARD, CARD *);
void show_score(int, int, int, int *);
void shuffle(void);
void sort(CARD *);
void undoex(int);
#if defined(__linux__) && !defined(__GLIBC__)
bool varpush(int, ssize_t (int, const struct iovec *, size_t));
#else
bool varpush(int, ssize_t (int, const struct iovec *, int));
#endif