]> git.cameronkatri.com Git - bsdgames-darwin.git/blobdiff - cribbage/score.c
Reset CVS keywords
[bsdgames-darwin.git] / cribbage / score.c
index 69c38a7f362254aa5376a39567e3438fecd132d3..56c023c8e56fdc60faa8f3e1369d187bc14be474 100644 (file)
@@ -1,4 +1,4 @@
-/*     $NetBSD: score.c,v 1.6 1998/08/30 09:19:37 veego Exp $  */
+/*     $NetBSD: score.c,v 1.17 2019/02/03 10:48:46 mrg 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.
  *
@@ -38,7 +34,7 @@
 #if 0
 static char sccsid[] = "@(#)score.c    8.1 (Berkeley) 5/31/93";
 #else
-__RCSID("$NetBSD: score.c,v 1.6 1998/08/30 09:19:37 veego Exp $");
+__RCSID("$NetBSD: score.c,v 1.17 2019/02/03 10:48:46 mrg Exp $");
 #endif
 #endif /* not lint */
 
@@ -50,13 +46,16 @@ __RCSID("$NetBSD: score.c,v 1.6 1998/08/30 09:19:37 veego Exp $");
 #include "deck.h"
 #include "cribbage.h"
 
+static int fifteens(const CARD [], int);
+static int pairuns(const CARD [], int);
+
 /*
  * the following arrays give the sum of the scores of the (50 2)*48 = 58800
  * hands obtainable for the crib given the two cards whose ranks index the
  * array.  the two arrays are for the case where the suits are equal and
  * not equal respectively
  */
-long crbescr[169] = {
+static const long crbescr[169] = {
     -10000, 271827, 278883, 332319, 347769, 261129, 250653, 253203, 248259,
     243435, 256275, 237435, 231051, -10000, -10000, 412815, 295707, 349497,
     267519, 262521, 259695, 254019, 250047, 262887, 244047, 237663, -10000,
@@ -78,7 +77,7 @@ long crbescr[169] = {
     -10000, -10000, -10000, -10000, -10000, -10000, -10000
 };
 
-long crbnescr[169] = {
+static const long crbnescr[169] = {
     325272, 260772, 267828, 321264, 336714, 250074, 239598, 242148, 237204,
     232380, 246348, 226380, 219996, -10000, 342528, 401760, 284652, 338442,
     256464, 251466, 248640, 242964, 238992, 252960, 232992, 226608, -10000,
@@ -100,7 +99,7 @@ long crbnescr[169] = {
     -10000, -10000, -10000, -10000, -10000, -10000, 295896
 };
 
-static int ichoose2[5] = { 0, 0, 2, 6, 12 };
+static const int ichoose2[5] = { 0, 0, 2, 6, 12 };
 static int pairpoints, runpoints;              /* Globals from pairuns. */
 
 /*
@@ -109,88 +108,84 @@ static int pairpoints, runpoints;         /* Globals from pairuns. */
  *     n must be <= 4
  */
 int
-scorehand(hand, starter, n, crb, do_explain)
-       CARD hand[];
-       CARD starter;
-       int n;
-       BOOLEAN crb;            /* true if scoring crib */
-       BOOLEAN do_explain;     /* true if must explain this hand */
+scorehand(const CARD hand[], CARD starter, int n, BOOLEAN crb, 
+          BOOLEAN do_explain)
 {
        int i, k;
-       int score;
+       int hscore;
        BOOLEAN flag;
        CARD h[(CINHAND + 1)];
-       char buf[32];
+       char buf[52];
 
-       expl[0] = '\0';         /* initialize explanation */
-       score = 0;
+       explan[0] = '\0';       /* initialize explanation */
+       hscore = 0;
        flag = TRUE;
        k = hand[0].suit;
        for (i = 0; i < n; i++) {       /* check for flush */
                flag = (flag && (hand[i].suit == k));
                if (hand[i].rank == JACK)       /* check for his nibs */
                        if (hand[i].suit == starter.suit) {
-                               score++;
+                               hscore++;
                                if (do_explain)
-                                       strcat(expl, "His Nobs");
+                                       strcat(explan, "His Nobs");
                        }
                h[i] = hand[i];
        }
 
        if (flag && n >= CINHAND) {
-               if (do_explain && expl[0] != '\0')
-                       strcat(expl, ", ");
+               if (do_explain && explan[0] != '\0')
+                       strcat(explan, ", ");
                if (starter.suit == k) {
-                       score += 5;
+                       hscore += 5;
                        if (do_explain)
-                               strcat(expl, "Five-flush");
+                               strcat(explan, "Five-flush");
                } else
                        if (!crb) {
-                               score += 4;
-                               if (do_explain && expl[0] != '\0')
-                                       strcat(expl, ", Four-flush");
+                               hscore += 4;
+                               if (do_explain && explan[0] != '\0')
+                                       strcat(explan, ", Four-flush");
                                else
-                                       strcpy(expl, "Four-flush");
+                                       strcpy(explan, "Four-flush");
                        }
        }
-       if (do_explain && expl[0] != '\0')
-               strcat(expl, ", ");
+       if (do_explain && explan[0] != '\0')
+               strcat(explan, ", ");
        h[n] = starter;
        sorthand(h, n + 1);     /* sort by rank */
        i = 2 * fifteens(h, n + 1);
-       score += i;
+       hscore += i;
        if (do_explain) {
                if (i > 0) {
-                       (void) sprintf(buf, "%d points in fifteens", i);
-                       strcat(expl, buf);
+                       (void) snprintf(buf, sizeof(buf),
+                           "%d points in fifteens", i);
+                       strcat(explan, buf);
                } else
-                       strcat(expl, "No fifteens");
+                       strcat(explan, "No fifteens");
        }
        i = pairuns(h, n + 1);
-       score += i;
+       hscore += i;
        if (do_explain) {
                if (i > 0) {
-                       (void) sprintf(buf, ", %d points in pairs, %d in runs",
+                       (void) snprintf(buf, sizeof(buf),
+                           ", %d points in pairs, %d in runs",
                            pairpoints, runpoints);
-                       strcat(expl, buf);
+                       strcat(explan, buf);
                } else
-                       strcat(expl, ", No pairs/runs");
+                       strcat(explan, ", No pairs/runs");
        }
-       return (score);
+       return (hscore);
 }
 
 /*
  * fifteens:
  *     Return number of fifteens in hand of n cards
  */
-int
-fifteens(hand, n)
-       CARD hand[];
-       int n;
+static int
+fifteens(const CARD hand[], int n)
 {
        int *sp, *np;
        int i;
-       CARD *endp;
+       const CARD *endp;
        static int sums[15], nsums[15];
 
        np = nsums;
@@ -226,10 +221,8 @@ fifteens(hand, n)
  * this routine only works if n is strictly less than 6
  * sets the globals pairpoints and runpoints appropriately
  */
-int
-pairuns(h, n)
-       CARD h[];
-       int n;
+static int
+pairuns(const CARD h[], int n)
 {
        int i;
        int runlength, runmult, lastmult, curmult;
@@ -296,13 +289,12 @@ pairuns(h, n)
  * the n cards in tbl during pegging
  */
 int
-pegscore(crd, tbl, n, sum)
-       CARD crd, tbl[];
-       int n, sum;
+pegscore(CARD crd, const CARD tbl[], unsigned n, int sum)
 {
        BOOLEAN got[RANKS];
        int i, j, scr;
        int k, lo, hi;
+       unsigned ju;
 
        sum += VAL(crd.rank);
        if (sum > 31)
@@ -313,11 +305,11 @@ pegscore(crd, tbl, n, sum)
                scr = 0;
        if (!n)
                return (scr);
-       j = 1;
-       while ((crd.rank == tbl[n - j].rank) && (n - j >= 0))
-               ++j;
-       if (j > 1)
-               return (scr + ichoose2[j]);
+       ju = 1;
+       while (ju <= n && crd.rank == tbl[n - ju].rank)
+               ++ju;
+       if (ju > 1)
+               return (scr + ichoose2[ju]);
        if (n < 2)
                return (scr);
        lo = hi = crd.rank;
@@ -351,8 +343,7 @@ pegscore(crd, tbl, n, sum)
  * points such a crib will get.
  */
 int
-adjust(cb, tnv)
-       CARD cb[], tnv;
+adjust(const CARD cb[], CARD tnv __unused)
 {
        long scr;
        int i, c0, c1;