Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/games/monop Don't use <err.h>. Use ANSI prototypes (no depe...



details:   https://anonhg.NetBSD.org/src/rev/21e3c9e9baab
branches:  trunk
changeset: 480002:21e3c9e9baab
user:      simonb <simonb%NetBSD.org@localhost>
date:      Thu Dec 30 01:40:08 1999 +0000

description:
Don't use <err.h>.  Use ANSI prototypes (no dependance on the __P()
macro).  Add new fwrite_be_offt() function which writes out a big-endian
64bit number regards of the size of off_t on the host machine.

Also fix ``bug'' in previous - even though the off_t pointers were
stored big-endian, the individual card lenghs were in host-order.  The
cards.pck files are now identical when make on a big- or little-endian
machine.

Now builds a correct cards.pck file on non-NetBSD machines as well
- tested on Ultrix and Solaris (but Solaris needs -lsocket to get
htonl()).

diffstat:

 games/monop/cards.c    |   6 +-
 games/monop/initdeck.c |  89 +++++++++++++++++++++++++++++++++----------------
 2 files changed, 62 insertions(+), 33 deletions(-)

diffs (204 lines):

diff -r 4b84f8fe23b0 -r 21e3c9e9baab games/monop/cards.c
--- a/games/monop/cards.c       Thu Dec 30 01:32:33 1999 +0000
+++ b/games/monop/cards.c       Thu Dec 30 01:40:08 1999 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: cards.c,v 1.10 1999/09/09 17:27:58 jsm Exp $   */
+/*     $NetBSD: cards.c,v 1.11 1999/12/30 01:40:08 simonb Exp $        */
 
 /*
  * Copyright (c) 1980, 1993
@@ -38,7 +38,7 @@
 #if 0
 static char sccsid[] = "@(#)cards.c    8.1 (Berkeley) 5/31/93";
 #else
-__RCSID("$NetBSD: cards.c,v 1.10 1999/09/09 17:27:58 jsm Exp $");
+__RCSID("$NetBSD: cards.c,v 1.11 1999/12/30 01:40:08 simonb Exp $");
 #endif
 #endif /* not lint */
 
@@ -143,7 +143,7 @@
                type_maj = getc(deckf);
        } while (dp->gojf_used && type_maj == GOJF);
        type_min = getc(deckf);
-       num = getw(deckf);
+       num = ntohl(getw(deckf));
        printmes();
        switch (type_maj) {
          case '+':             /* get money            */
diff -r 4b84f8fe23b0 -r 21e3c9e9baab games/monop/initdeck.c
--- a/games/monop/initdeck.c    Thu Dec 30 01:32:33 1999 +0000
+++ b/games/monop/initdeck.c    Thu Dec 30 01:40:08 1999 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: initdeck.c,v 1.11 1999/09/10 00:18:21 jsm Exp $        */
+/*     $NetBSD: initdeck.c,v 1.12 1999/12/30 01:40:08 simonb 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,15 +44,14 @@
 #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.12 1999/12/30 01:40:08 simonb Exp $");
 #endif
 #endif /* not lint */
+#endif /* __NetBSD__ */
 
-#include <err.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <sys/types.h>
-#include <sys/endian.h>
 #include "deck.h"
 
 /*
@@ -78,18 +78,24 @@
 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 +106,17 @@
        /*
         * 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 +124,8 @@
         */
        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 +136,23 @@
        fseek(outf, 0, SEEK_SET);
 
        /* number of community chest cards first... */
-       nc = htobe32(CC_D.num_cards);
+       nc = htonl(CC_D.num_cards);
        fwrite(&nc, sizeof(nc), 1, outf);
        /* ... then number of chance cards. */
-       nc = htobe32(CH_D.num_cards);
+       nc = htonl(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 +213,7 @@
        putc(getc(inf), outf);
        for (num = 0; (c=getc(inf)) != '\n'; )
                num = num * 10 + (c - '0');
-       putw(num, outf);
+       putw(htonl(num), outf);
        newline = FALSE;
        while ((c=getc(inf)) != EOF)
                if (newline && c == '%') {
@@ -221,7 +230,7 @@
                        putc(c = getc(inf), outf);
                        for (num = 0; (c=getc(inf)) != EOF && c != '\n'; )
                                num = num * 10 + (c - '0');
-                       putw(num, outf);
+                       putw(htonl(num), outf);
                }
                else {
                        putc(c, outf);
@@ -229,3 +238,23 @@
                }
        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);
+}



Home | Main Index | Thread Index | Old Index