]> git.cameronkatri.com Git - bsdgames-darwin.git/blobdiff - monop/initdeck.c
Fix (another) typo in comment
[bsdgames-darwin.git] / monop / initdeck.c
index 9e5cd9b7bc1a9e83ec00342b0767be8fe89639c0..894ad835654e80f601ed58029bf12341fa412b46 100644 (file)
@@ -1,4 +1,4 @@
-/*     $NetBSD: initdeck.c,v 1.11 1999/09/10 00:18:21 jsm Exp $        */
+/*     $NetBSD: initdeck.c,v 1.16 2008/02/19 08:07:51 dholland Exp $   */
 
 /*
  * Copyright (c) 1980, 1993
  * 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. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
+ * 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.
  *
@@ -33,6 +29,7 @@
  * SUCH DAMAGE.
  */
 
+#ifdef __NetBSD__
 #include <sys/cdefs.h>
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1980, 1993\n\
@@ -43,22 +40,41 @@ __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.11 1999/09/10 00:18:21 jsm Exp $");
+__RCSID("$NetBSD: initdeck.c,v 1.16 2008/02/19 08:07:51 dholland Exp $");
 #endif
 #endif /* not lint */
+#endif /* __NetBSD__ */
 
-#include <err.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <sys/types.h>
-#include <sys/endian.h>
 #include "deck.h"
 
+#ifndef u_int32_t
+#define        u_int32_t       unsigned int
+#endif
+
+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
@@ -78,18 +94,24 @@ 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 i;
-       int32_t nc;
+       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) {
@@ -100,13 +122,17 @@ main(ac, av)
        /*
         * allocate space for pointers.
         */
-       CC_D.offsets = (off_t *)calloc(CC_D.num_cards + 1, sizeof (off_t));
-       CH_D.offsets = (off_t *)calloc(CH_D.num_cards + 1, sizeof (off_t));
-       if (CC_D.offsets == NULL || CH_D.offsets == NULL)
-               errx(1, "out of memory");
+       CC_D.offsets = (off_t *)calloc(CC_D.num_cards + 1, /* sizeof (off_t) */ 8);
+       CH_D.offsets = (off_t *)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)
-               err(1, "fopen %s", outfile);
+       if ((outf = fopen(outfile, "w")) == NULL) {
+               perror(outfile);
+               exit(1);
+       }
 
        /*
         * these fields will be overwritten after the offsets are calculated,
@@ -114,8 +140,8 @@ main(ac, av)
         */
        fwrite(&nc, sizeof(nc), 1, outf);
        fwrite(&nc, sizeof(nc), 1, outf);
-       fwrite(CC_D.offsets, sizeof (off_t), CC_D.num_cards, outf);
-       fwrite(CH_D.offsets, sizeof (off_t), CH_D.num_cards, 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).
@@ -126,24 +152,23 @@ main(ac, av)
        fseek(outf, 0, SEEK_SET);
 
        /* number of community chest cards first... */
-       nc = htobe32(CC_D.num_cards);
+       nc = h2nl(CC_D.num_cards);
        fwrite(&nc, sizeof(nc), 1, outf);
        /* ... then number of chance cards. */
-       nc = htobe32(CH_D.num_cards);
+       nc = h2nl(CH_D.num_cards);
        fwrite(&nc, sizeof(nc), 1, outf);
 
-       /* convert offsets to big-endian byte order */
+       /* dump offsets in big-endian byte order */
        for (i = 0; i < CC_D.num_cards; i++)
-               HTOBE64(CC_D.offsets[i]);
+               fwrite_be_offt(CC_D.offsets[i], outf);
        for (i = 0; i < CH_D.num_cards; i++)
-               HTOBE64(CH_D.offsets[i]);
-       /* then dump the offsets out */
-       fwrite(CC_D.offsets, sizeof (off_t), CC_D.num_cards, outf);
-       fwrite(CH_D.offsets, sizeof (off_t), CH_D.num_cards, outf);
+               fwrite_be_offt(CH_D.offsets[i], outf);
 
        fflush(outf);
-       if (ferror(outf))
-               err(1, "fwrite %s", outfile);
+       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);
@@ -204,7 +229,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 == '%') {
@@ -221,7 +246,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);
@@ -229,3 +254,23 @@ putem()
                }
        putc('\0', outf);
 }
+
+/*
+ * fwrite_be_offt:
+ *     Write out the off parameter 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);
+}