mirror of
https://github.com/vattam/BSDGames.git
synced 2025-12-21 03:14:50 +00:00
copy in from cvs; cvs2svn fucked up big time
git-svn-id: file:///srv/svn/joey/trunk/src/packages/bsdgames@9775 a4a2c43b-8ac3-0310-8836-e0e880c912e2
This commit is contained in:
163
monop/initdeck.c
163
monop/initdeck.c
@@ -1,4 +1,4 @@
|
||||
/* $NetBSD: initdeck.c,v 1.5 1997/10/12 17:45:12 christos Exp $ */
|
||||
/* $NetBSD: initdeck.c,v 1.14 2001/07/22 13:34:01 wiz Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1980, 1993
|
||||
@@ -33,6 +33,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifdef __NetBSD__
|
||||
#include <sys/cdefs.h>
|
||||
#ifndef lint
|
||||
__COPYRIGHT("@(#) Copyright (c) 1980, 1993\n\
|
||||
@@ -43,48 +44,78 @@ __COPYRIGHT("@(#) Copyright (c) 1980, 1993\n\
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)initdeck.c 8.1 (Berkeley) 5/31/93";
|
||||
#else
|
||||
__RCSID("$NetBSD: initdeck.c,v 1.5 1997/10/12 17:45:12 christos Exp $");
|
||||
__RCSID("$NetBSD: initdeck.c,v 1.14 2001/07/22 13:34:01 wiz Exp $");
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
#endif /* __NetBSD__ */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include "deck.h"
|
||||
|
||||
#ifndef u_int32_t
|
||||
#define u_int32_t unsigned int
|
||||
#endif
|
||||
|
||||
static u_int32_t
|
||||
h2nl(u_int32_t h)
|
||||
{
|
||||
unsigned char c[4];
|
||||
u_int32_t rv;
|
||||
|
||||
c[0] = (h >> 24) & 0xff;
|
||||
c[1] = (h >> 16) & 0xff;
|
||||
c[2] = (h >> 8) & 0xff;
|
||||
c[3] = (h >> 0) & 0xff;
|
||||
memcpy(&rv, c, sizeof rv);
|
||||
|
||||
return (rv);
|
||||
}
|
||||
|
||||
/*
|
||||
* This program initializes the card files for monopoly.
|
||||
* It reads in a data file with Com. Chest cards, followed by
|
||||
* the Chance card. The two are seperated by a line of "%-".
|
||||
* All other cards are seperated by lines of "%%". In the front
|
||||
* the Chance card. The two are separated by a line of "%-".
|
||||
* All other cards are separated by lines of "%%". In the front
|
||||
* of the file is the data for the decks in the same order.
|
||||
* This includes the seek pointer for the start of each card.
|
||||
* All cards start with their execution code, followed by the
|
||||
* string to print, terminated with a null byte.
|
||||
*/
|
||||
|
||||
# define TRUE 1
|
||||
# define FALSE 0
|
||||
#define TRUE 1
|
||||
#define FALSE 0
|
||||
|
||||
# define bool char
|
||||
# define reg register
|
||||
#define bool char
|
||||
|
||||
char *infile = "cards.inp", /* input file */
|
||||
*outfile = "cards.pck"; /* "packed" file */
|
||||
const char *infile = "cards.inp", /* input file */
|
||||
*outfile = "cards.pck"; /* "packed" file */
|
||||
|
||||
DECK deck[2];
|
||||
|
||||
FILE *inf, *outf;
|
||||
|
||||
/* initdeck.c */
|
||||
int main __P((int, char *[]));
|
||||
static void getargs __P((int, char *[]));
|
||||
static void count __P((void));
|
||||
static void putem __P((void));
|
||||
int main(int, char *[]);
|
||||
static void getargs(int, char *[]);
|
||||
static void fwrite_be_offt(off_t, FILE *);
|
||||
static void count(void);
|
||||
static void putem(void);
|
||||
|
||||
int
|
||||
main(ac, av)
|
||||
int ac;
|
||||
char *av[]; {
|
||||
int ac;
|
||||
char *av[];
|
||||
{
|
||||
int i, nc;
|
||||
|
||||
/* sanity test */
|
||||
if (sizeof(int) != 4) {
|
||||
fprintf(stderr, "sizeof(int) != 4\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
getargs(ac, av);
|
||||
if ((inf = fopen(infile, "r")) == NULL) {
|
||||
@@ -95,35 +126,64 @@ char *av[]; {
|
||||
/*
|
||||
* allocate space for pointers.
|
||||
*/
|
||||
CC_D.offsets = (long *)calloc(CC_D.num_cards + 1, sizeof (long));
|
||||
CH_D.offsets = (long *)calloc(CH_D.num_cards + 1, sizeof (long));
|
||||
fseek(inf, 0L, 0);
|
||||
CC_D.offsets = calloc(CC_D.num_cards + 1, /* sizeof (off_t) */ 8);
|
||||
CH_D.offsets = calloc(CH_D.num_cards + 1, /* sizeof (off_t) */ 8);
|
||||
if (CC_D.offsets == NULL || CH_D.offsets == NULL) {
|
||||
fprintf(stderr, "out of memory\n");
|
||||
exit(1);
|
||||
}
|
||||
fseek(inf, 0L, SEEK_SET);
|
||||
if ((outf = fopen(outfile, "w")) == NULL) {
|
||||
perror(outfile);
|
||||
exit(0);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
fwrite(deck, sizeof (DECK), 2, outf);
|
||||
fwrite(CC_D.offsets, sizeof (long), CC_D.num_cards, outf);
|
||||
fwrite(CH_D.offsets, sizeof (long), CH_D.num_cards, outf);
|
||||
/*
|
||||
* these fields will be overwritten after the offsets are calculated,
|
||||
* so byte-order doesn't matter yet.
|
||||
*/
|
||||
fwrite(&nc, sizeof(nc), 1, outf);
|
||||
fwrite(&nc, sizeof(nc), 1, outf);
|
||||
fwrite(CC_D.offsets, /* sizeof (off_t) */ 8, CC_D.num_cards, outf);
|
||||
fwrite(CH_D.offsets, /* sizeof (off_t) */ 8, CH_D.num_cards, outf);
|
||||
|
||||
/*
|
||||
* write out the cards themselves (calculating the offsets).
|
||||
*/
|
||||
putem();
|
||||
|
||||
fclose(inf);
|
||||
fseek(outf, 0, 0L);
|
||||
fwrite(deck, sizeof (DECK), 2, outf);
|
||||
fwrite(CC_D.offsets, sizeof (long), CC_D.num_cards, outf);
|
||||
fwrite(CH_D.offsets, sizeof (long), CH_D.num_cards, outf);
|
||||
fseek(outf, 0, SEEK_SET);
|
||||
|
||||
/* number of community chest cards first... */
|
||||
nc = h2nl(CC_D.num_cards);
|
||||
fwrite(&nc, sizeof(nc), 1, outf);
|
||||
/* ... then number of chance cards. */
|
||||
nc = h2nl(CH_D.num_cards);
|
||||
fwrite(&nc, sizeof(nc), 1, outf);
|
||||
|
||||
/* dump offsets in big-endian byte order */
|
||||
for (i = 0; i < CC_D.num_cards; i++)
|
||||
fwrite_be_offt(CC_D.offsets[i], outf);
|
||||
for (i = 0; i < CH_D.num_cards; i++)
|
||||
fwrite_be_offt(CH_D.offsets[i], outf);
|
||||
|
||||
fflush(outf);
|
||||
if (ferror(outf)) {
|
||||
perror(outfile);
|
||||
exit(1);
|
||||
}
|
||||
fclose(outf);
|
||||
printf("There were %d com. chest and %d chance cards\n", CC_D.num_cards, CH_D.num_cards);
|
||||
printf("There were %d com. chest and %d chance cards\n",
|
||||
CC_D.num_cards, CH_D.num_cards);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
static void
|
||||
getargs(ac, av)
|
||||
int ac;
|
||||
char *av[];
|
||||
int ac;
|
||||
char *av[];
|
||||
{
|
||||
|
||||
if (ac > 1)
|
||||
infile = av[1];
|
||||
if (ac > 2)
|
||||
@@ -136,10 +196,9 @@ char *av[];
|
||||
static void
|
||||
count()
|
||||
{
|
||||
|
||||
reg bool newline;
|
||||
reg DECK *in_deck;
|
||||
reg int c;
|
||||
bool newline;
|
||||
DECK *in_deck;
|
||||
int c;
|
||||
|
||||
newline = TRUE;
|
||||
in_deck = &CC_D;
|
||||
@@ -154,17 +213,17 @@ count()
|
||||
newline = (c == '\n');
|
||||
in_deck->num_cards++;
|
||||
}
|
||||
|
||||
/*
|
||||
* put strings in the file
|
||||
*/
|
||||
static void
|
||||
putem()
|
||||
{
|
||||
|
||||
reg bool newline;
|
||||
reg DECK *in_deck;
|
||||
reg int c;
|
||||
reg int num;
|
||||
bool newline;
|
||||
DECK *in_deck;
|
||||
int c;
|
||||
int num;
|
||||
|
||||
in_deck = &CC_D;
|
||||
CC_D.num_cards = 1;
|
||||
@@ -174,7 +233,7 @@ putem()
|
||||
putc(getc(inf), outf);
|
||||
for (num = 0; (c=getc(inf)) != '\n'; )
|
||||
num = num * 10 + (c - '0');
|
||||
putw(num, outf);
|
||||
putw(h2nl(num), outf);
|
||||
newline = FALSE;
|
||||
while ((c=getc(inf)) != EOF)
|
||||
if (newline && c == '%') {
|
||||
@@ -191,7 +250,7 @@ putem()
|
||||
putc(c = getc(inf), outf);
|
||||
for (num = 0; (c=getc(inf)) != EOF && c != '\n'; )
|
||||
num = num * 10 + (c - '0');
|
||||
putw(num, outf);
|
||||
putw(h2nl(num), outf);
|
||||
}
|
||||
else {
|
||||
putc(c, outf);
|
||||
@@ -199,3 +258,23 @@ putem()
|
||||
}
|
||||
putc('\0', outf);
|
||||
}
|
||||
|
||||
/*
|
||||
* fwrite_be_offt:
|
||||
* Write out the off paramater as a 64 bit big endian number
|
||||
*/
|
||||
|
||||
static void
|
||||
fwrite_be_offt(off, f)
|
||||
off_t off;
|
||||
FILE *f;
|
||||
{
|
||||
int i;
|
||||
unsigned char c[8];
|
||||
|
||||
for (i = 7; i >= 0; i--) {
|
||||
c[i] = off & 0xff;
|
||||
off >>= 8;
|
||||
}
|
||||
fwrite(c, sizeof(c), 1, f);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user