]> git.cameronkatri.com Git - bsdgames-darwin.git/blobdiff - monop/misc.c
Use __dead and __printflike instead of __attribute__.
[bsdgames-darwin.git] / monop / misc.c
index 20d5c3674566acd23620ee03151f9045ab75d6f4..3f8810725153c3281656f357a74b9e9d8dda87db 100644 (file)
@@ -1,4 +1,4 @@
-/*     $NetBSD: misc.c,v 1.6 1997/10/12 17:45:15 christos Exp $        */
+/*     $NetBSD: misc.c,v 1.21 2009/08/12 08:10:49 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.
  *
 #if 0
 static char sccsid[] = "@(#)misc.c     8.1 (Berkeley) 5/31/93";
 #else
-__RCSID("$NetBSD: misc.c,v 1.6 1997/10/12 17:45:15 christos Exp $");
+__RCSID("$NetBSD: misc.c,v 1.21 2009/08/12 08:10:49 dholland Exp $");
 #endif
 #endif /* not lint */
 
-# include      "monop.ext"
-# include      <ctype.h>
-# include      <signal.h>
+#include <ctype.h>
+#include <limits.h>
+#include <signal.h>
+#include <errno.h>
+
+#include "monop.h"
+
+static void is_monop(MON *, int);
 
 /*
  *     This routine executes a truncated set of commands until a
@@ -52,24 +53,23 @@ __RCSID("$NetBSD: misc.c,v 1.6 1997/10/12 17:45:15 christos Exp $");
  */
 int
 getyn(prompt)
-char   *prompt;
+       const char *prompt;
 {
-
-       int     com;
+       int com;
 
        for (;;)
-               if ((com=getinp(prompt, yn)) < 2)
+               if ((com=getinp(prompt, yncoms)) < 2)
                        return com;
                else
                        (*func[com-2])();
 }
+
 /*
  *     This routine tells the player if he's out of money.
  */
 void
 notify()
 {
-
        if (cur_p->money < 0)
                printf("That leaves you $%d in debt\n", -cur_p->money);
        else if (cur_p->money == 0)
@@ -79,67 +79,63 @@ notify()
                told_em = TRUE;
        }
 }
+
 /*
  *     This routine switches to the next player
  */
 void
 next_play()
 {
-
-       player = ++player % num_play;
+       player = (player + 1) % num_play;
        cur_p = &play[player];
        num_doub = 0;
 }
+
 /*
  *     This routine gets an integer from the keyboard after the
  * given prompt.
  */
 int
 get_int(prompt)
-char   *prompt;
+       const char *prompt;
 {
-
-       int             num;
-       char    *sp;
-       int             c;
-       char            buf[257];
+       long num;
+       char *sp;
+       char buf[257];
 
        for (;;) {
-inter:
-               printf(prompt);
-               num = 0;
-               for (sp = buf; (c=getchar()) != '\n'; *sp++ = c)
-                       if (c == -1)    /* check for interrupted system call */
-                               goto inter;
-               *sp = c;
-               if (sp == buf)
-                       continue;
-               for (sp = buf; isspace(*sp); sp++)
-                       continue;
-               for (; isdigit(*sp); sp++)
-                       num = num * 10 + *sp - '0';
-               if (*sp == '\n')
-                       return num;
-               else
+               printf("%s", prompt);
+               fgets(buf, sizeof(buf), stdin);
+               if (feof(stdin))
+                       return 0;
+               sp = strchr(buf, '\n');
+               if (sp)
+                       *sp = '\0';
+               errno = 0;
+               num = strtol(buf, &sp, 10);
+               if (errno || strlen(sp) > 0 || num < 0 || num >= INT_MAX) {
                        printf("I can't understand that\n");
+                       continue;
+               }
+               return num;
        }
 }
+
 /*
  *     This routine sets the monopoly flag from the list given.
  */
 void
 set_ownlist(pl)
-int    pl; 
+       int pl;
 {
-
-       int     num;            /* general counter              */
-       MON     *orig;          /* remember starting monop ptr  */
-       OWN     *op;            /* current owned prop           */
-       OWN     *orig_op;               /* origianl prop before loop    */
+       int num;                /* general counter              */
+       MON *orig;              /* remember starting monop ptr  */
+       OWN *op;                /* current owned prop           */
+       OWN *orig_op;           /* original prop before loop    */
 
        op = play[pl].own_list;
 #ifdef DEBUG
-       printf("op [%d] = play[pl [%d] ].own_list;\n", op, pl);
+       printf("op [%p] = play[pl [%d] ].own_list;\n", op, pl);
 #endif
        while (op) {
 #ifdef DEBUG
@@ -150,7 +146,8 @@ int pl;
 #ifdef DEBUG
                        printf("  case UTIL:\n");
 #endif
-                       for (num = 0; op && op->sqr->type == UTIL; op = op->next)
+                       for (num = 0; op && op->sqr->type == UTIL;
+                           op = op->next)
                                num++;
                        play[pl].num_util = num;
 #ifdef DEBUG
@@ -161,10 +158,13 @@ int       pl;
 #ifdef DEBUG
                        printf("  case RR:\n");
 #endif
-                       for (num = 0; op && op->sqr->type == RR; op = op->next) {
+                       for (num = 0; op && op->sqr->type == RR;
+                           op = op->next) {
 #ifdef DEBUG
                                printf("iter: %d\n", num);
-                               printf("op = %d, op->sqr = %d, op->sqr->type = %d\n", op, op->sqr, op->sqr->type);
+                               printf("op = %p, op->sqr = %p, "
+                                   "op->sqr->type = %d\n", op, op->sqr,
+                                   op->sqr->type);
 #endif
                                num++;
                        }
@@ -190,25 +190,36 @@ int       pl;
 #endif
                                op = op->next;
 #ifdef DEBUG
-                               printf("[%d];\n", op);
+                               printf("[%p];\n", op);
 #endif
                        }
 #ifdef DEBUG
-                       printf("num = %d\n");
+                       printf("num = %d\n", num);
 #endif
-                       if (orig == 0) {
-                               printf("panic:  bad monopoly descriptor: orig = %p\n", orig);
+                       if (orig == NULL) {
+                               printf("panic:  bad monopoly descriptor: "
+                                   "orig = %p\n", orig);
                                printf("player # %d\n", pl+1);
                                printhold(pl);
                                printf("orig_op = %p\n", orig_op);
-                               printf("orig_op->sqr->type = %d (PRPTY)\n", op->sqr->type);
-                               printf("orig_op->next = %p\n", op->next);
-                               printf("orig_op->sqr->desc = %p\n", op->sqr->desc);
+                               if (orig_op) {
+                                       printf("orig_op->sqr->type = %d (PRPTY)\n",
+                                           orig_op->sqr->type);
+                                       printf("orig_op->next = %p\n",
+                                           orig_op->next);
+                                       printf("orig_op->sqr->desc = %p\n",
+                                           orig_op->sqr->desc);
+                               }
                                printf("op = %p\n", op);
-                               printf("op->sqr->type = %d (PRPTY)\n", op->sqr->type);
-                               printf("op->next = %p\n", op->next);
-                               printf("op->sqr->desc = %p\n", op->sqr->desc);
+                               if (op) {
+                                       printf("op->sqr->type = %d (PRPTY)\n",
+                                           op->sqr->type);
+                                       printf("op->next = %p\n", op->next);
+                                       printf("op->sqr->desc = %p\n",
+                                           op->sqr->desc);
+                               }
                                printf("num = %d\n", num);
+                               exit(1);
                        }
 #ifdef DEBUG
                        printf("orig->num_in = %d\n", orig->num_in);
@@ -216,21 +227,21 @@ int       pl;
                        if (num == orig->num_in)
                                is_monop(orig, pl);
                        else
-                               isnot_monop(orig);
+                               is_not_monop(orig);
                        break;
                }
        }
 }
+
 /*
  *     This routine sets things up as if it is a new monopoly
  */
-void
+static void
 is_monop(mp, pl)
-MON    *mp;
-int    pl; 
+       MON *mp;
+       int pl;
 {
-
-       int             i;
+       int i;
 
        mp->owner = pl;
        mp->num_own = mp->num_in;
@@ -238,49 +249,50 @@ int       pl;
                mp->sq[i]->desc->monop = TRUE;
        mp->name = mp->mon_n;
 }
+
 /*
  *     This routine sets things up as if it is no longer a monopoly
  */
 void
-isnot_monop(mp)
-MON    *mp; 
+is_not_monop(mp)
+       MON *mp;
 {
-
-       int             i;
+       int i;
 
        mp->owner = -1;
        for (i = 0; i < mp->num_in; i++)
                mp->sq[i]->desc->monop = FALSE;
        mp->name = mp->not_m;
 }
+
 /*
  *     This routine gives a list of the current player's routine
  */
 void
-list() 
+list()
 {
-
        printhold(player);
 }
+
 /*
  *     This routine gives a list of a given players holdings
  */
 void
-list_all() 
+list_all()
 {
+       int pl;
 
-       int     pl;
-
-       while ((pl=getinp("Whose holdings do you want to see? ", name_list)) < num_play)
+       while ((pl = getinp("Whose holdings do you want to see? ", name_list))
+           < num_play)
                printhold(pl);
 }
+
 /*
  *     This routine gives the players a chance before it exits.
  */
 void
 quit()
 {
-
        putchar('\n');
        if (getyn("Do you all really want to quit? ") == 0)
                exit(0);