]> git.cameronkatri.com Git - bsdgames-darwin.git/commitdiff
Use a lookup table to identify whether objects are plural or singular,
authorjsm <jsm@NetBSD.org>
Sat, 23 Sep 2000 19:23:57 +0000 (19:23 +0000)
committerjsm <jsm@NetBSD.org>
Sat, 23 Sep 2000 19:23:57 +0000 (19:23 +0000)
instead of testing the final character against 's' in each place.
Avoids oddities about "pot of jewels" and "compass".

battlestar/com2.c
battlestar/com3.c
battlestar/com4.c
battlestar/extern.h
battlestar/globals.c

index ec0e45922ee2abb6c0dd90579bd71216e2836e36..07634da4b6bace12a5c5135fb10334c4854b13f7 100644 (file)
@@ -1,4 +1,4 @@
-/*     $NetBSD: com2.c,v 1.14 2000/09/22 08:19:21 jsm Exp $    */
+/*     $NetBSD: com2.c,v 1.15 2000/09/23 19:23:57 jsm Exp $    */
 
 /*
  * Copyright (c) 1983, 1993
@@ -38,7 +38,7 @@
 #if 0
 static char sccsid[] = "@(#)com2.c     8.2 (Berkeley) 4/28/95";
 #else
-__RCSID("$NetBSD: com2.c,v 1.14 2000/09/22 08:19:21 jsm Exp $");
+__RCSID("$NetBSD: com2.c,v 1.15 2000/09/23 19:23:57 jsm Exp $");
 #endif
 #endif                         /* not lint */
 
@@ -47,7 +47,6 @@ __RCSID("$NetBSD: com2.c,v 1.14 2000/09/22 08:19:21 jsm Exp $");
 int
 wearit()
 {                              /* synonyms = {sheathe, sheath} */
-       int     n;
        int     firstnumber, value;
 
        firstnumber = wordnumber;
@@ -57,7 +56,6 @@ wearit()
                value = wordvalue[wordnumber];
                if (objsht[value] == NULL)
                        break;
-               for (n = 0; objsht[value][n]; n++);
                switch (value) {
 
                case -1:
@@ -65,7 +63,7 @@ wearit()
                        return (firstnumber);
 
                default:
-                       printf("You can't wear%s%s!\n", (objsht[value][n - 1] == 's' ? " " : " a "), objsht[value]);
+                       printf("You can't wear%s%s!\n", (is_plural_object(value) ? " " : " a "), objsht[value]);
                        return (firstnumber);
 
                case KNIFE:
@@ -94,7 +92,7 @@ wearit()
                                encumber -= objcumber[value];
                                ourtime++;
                                printf("You are now wearing %s %s.\n",
-                                   (objsht[value][n - 1] == 's' ? "the"
+                                   (is_plural_object(value) ? "the"
                                        : "a"), objsht[value]);
                        } else
                                if (testbit(wear, value))
index 86b2e9c1cd1281dcda68bb81a5a57e161807f1cb..ea6d122b33e2b7f0cf113f1875fe1a98b75aa966 100644 (file)
@@ -1,4 +1,4 @@
-/*     $NetBSD: com3.c,v 1.9 2000/09/22 08:19:21 jsm Exp $     */
+/*     $NetBSD: com3.c,v 1.10 2000/09/23 19:23:58 jsm Exp $    */
 
 /*
  * Copyright (c) 1983, 1993
@@ -38,7 +38,7 @@
 #if 0
 static char sccsid[] = "@(#)com3.c     8.2 (Berkeley) 4/28/95";
 #else
-__RCSID("$NetBSD: com3.c,v 1.9 2000/09/22 08:19:21 jsm Exp $");
+__RCSID("$NetBSD: com3.c,v 1.10 2000/09/23 19:23:58 jsm Exp $");
 #endif
 #endif                         /* not lint */
 
@@ -194,7 +194,6 @@ int
 shoot()
 {
        int     firstnumber, value;
-       int     n;
 
        firstnumber = wordnumber;
        if (!testbit(inven, LASER))
@@ -204,11 +203,11 @@ shoot()
                while (wordnumber <= wordcount && wordtype[wordnumber] == OBJECT) {
                        value = wordvalue[wordnumber];
                        printf("%s:\n", objsht[value]);
-                       for (n = 0; objsht[value][n]; n++);
                        if (testbit(location[position].objects, value)) {
                                clearbit(location[position].objects, value);
                                ourtime++;
-                               printf("The %s explode%s\n", objsht[value], (objsht[value][n - 1] == 's' ? (objsht[value][n - 2] == 's' ? "s." : ".") : "s."));
+                               printf("The %s explode%s\n", objsht[value],
+                                   (is_plural_object(value) ? "." : "s."));
                                if (value == BOMB)
                                        die();
                        } else
index a29cb4df988c10cc42c7b30e62dd970517b23342..72442cb4e2c3a16c1a057abc833c83c8d313dc0b 100644 (file)
@@ -1,4 +1,4 @@
-/*     $NetBSD: com4.c,v 1.13 2000/09/22 12:38:10 jsm Exp $    */
+/*     $NetBSD: com4.c,v 1.14 2000/09/23 19:23:58 jsm Exp $    */
 
 /*
  * Copyright (c) 1983, 1993
@@ -38,7 +38,7 @@
 #if 0
 static char sccsid[] = "@(#)com4.c     8.2 (Berkeley) 4/28/95";
 #else
-__RCSID("$NetBSD: com4.c,v 1.13 2000/09/22 12:38:10 jsm Exp $");
+__RCSID("$NetBSD: com4.c,v 1.14 2000/09/23 19:23:58 jsm Exp $");
 #endif
 #endif                         /* not lint */
 
@@ -49,7 +49,6 @@ take(from)
        unsigned int from[];
 {
        int     firstnumber, heavy, bulky, value;
-       int     n;
 
        firstnumber = wordnumber;
        if (wordnumber < wordcount && wordvalue[wordnumber + 1] == OFF) {
@@ -61,7 +60,6 @@ take(from)
                while (wordnumber <= wordcount && wordtype[wordnumber] == OBJECT) {
                        value = wordvalue[wordnumber];
                        printf("%s:\n", objsht[value]);
-                       for (n = 0; objsht[value][n]; n++);
                        heavy = (carrying + objwt[value]) <= WEIGHT;
                        bulky = (encumber + objcumber[value]) <= CUMBER;
                        if ((testbit(from, value) || wiz || tempwiz) && heavy && bulky && !testbit(inven, value)) {
@@ -77,13 +75,18 @@ take(from)
                                if (value == MEDALION)
                                        win--;
                        } else if (testbit(inven, value))
-                               printf("You're already holding%s%s.\n", (objsht[value][n - 1] == 's' ? " " : " a "), objsht[value]);
+                               printf("You're already holding%s%s.\n",
+                                   (is_plural_object(value) ? " " : " a "),
+                                   objsht[value]);
                        else if (!testbit(from, value))
                                printf("I dont see any %s around here.\n", objsht[value]);
                        else if (!heavy)
-                               printf("The %s %s too heavy.\n", objsht[value], (objsht[value][n - 1] == 's' ? "are" : "is"));
+                               printf("The %s %s too heavy.\n", objsht[value],
+                                   (is_plural_object(value) ? "are" : "is"));
                        else
-                               printf("The %s %s too cumbersome to hold.\n", objsht[value], (objsht[value][n - 1] == 's' ? "are" : "is"));
+                               printf("The %s %s too cumbersome to hold.\n",
+                                   objsht[value],
+                                   (is_plural_object(value) ? "are" : "is"));
                        if (wordnumber < wordcount - 1 && wordvalue[++wordnumber] == AND)
                                wordnumber++;
                        else
@@ -343,6 +346,8 @@ eat()
        wordnumber++;
        while (wordnumber <= wordcount) {
                value = wordvalue[wordnumber];
+               if (wordtype[wordnumber] != OBJECT)
+                       value = -1;
                switch (value) {
 
                case -1:
@@ -351,11 +356,8 @@ eat()
 
                default:
                        printf("You can't eat%s%s!\n",
-                           wordtype[wordnumber] == OBJECT &&
-                           objsht[value]
-                           [strlen(objsht[value]) - 1] == 's' ?
-                           " " : " a ",
-                           words[wordnumber]);
+                           is_plural_object(value) ? " " : " a ",
+                           objsht[value]);
                        return (firstnumber);
 
                case PAPAYAS:
index 81ffa9c3d7e895667ccee809d46b54cbc0b5a77d..3257bfd779f4c0790197fcfcdd1122cbae91947e 100644 (file)
@@ -1,4 +1,4 @@
-/*     $NetBSD: extern.h,v 1.21 2000/09/21 17:44:34 jsm Exp $ */
+/*     $NetBSD: extern.h,v 1.22 2000/09/23 19:23:58 jsm Exp $ */
 
 /*
  * Copyright (c) 1983, 1993
 #define MAXWEIGHT      60
 #define MAXCUMBER      10
 
+/* Flags for objects.  */
+#define OBJ_PLURAL     1
+
 struct room {
        const char   *name;
        int     link[8];
@@ -251,6 +254,8 @@ extern const char   *const objsht[NUMOFOBJECTS];
 extern const char   *const ouch[NUMOFINJURIES];
 extern const int     objwt[NUMOFOBJECTS];
 extern const int     objcumber[NUMOFOBJECTS];
+extern const int     objflags[NUMOFOBJECTS];
+#define is_plural_object(n)    (objflags[(n)] & OBJ_PLURAL)
 
  /* current input line */
 #define WORDLEN        15
index 5805cf963e75a2bd4967988147e1c9bdb4ad4341..379cd70a22fe5f24d54f0c84e4be6905882e6e91 100644 (file)
@@ -1,4 +1,4 @@
-/*     $NetBSD: globals.c,v 1.13 2000/09/21 17:44:34 jsm Exp $ */
+/*     $NetBSD: globals.c,v 1.14 2000/09/23 19:23:58 jsm Exp $ */
 
 /*
  * Copyright (c) 1983, 1993
@@ -38,7 +38,7 @@
 #if 0
 static char sccsid[] = "@(#)globals.c  8.2 (Berkeley) 4/28/95";
 #else
-__RCSID("$NetBSD: globals.c,v 1.13 2000/09/21 17:44:34 jsm Exp $");
+__RCSID("$NetBSD: globals.c,v 1.14 2000/09/23 19:23:58 jsm Exp $");
 #endif
 #endif                         /* not lint */
 
@@ -220,6 +220,17 @@ const int     objcumber[NUMOFOBJECTS] = {
        10, 8, 8, 10, 10, 3, 1, 2
 };
 
+const int objflags[NUMOFOBJECTS] = {
+       0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, OBJ_PLURAL, 0, OBJ_PLURAL,
+       0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, OBJ_PLURAL, 0, 0, 0,
+       0, 0, 0, 0, OBJ_PLURAL, 0, 0, OBJ_PLURAL,
+       0, 0, OBJ_PLURAL, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0
+};
+
 int     win = 1;
 int     matchcount = 20;
 int     followgod = -1;