summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjsm <jsm@NetBSD.org>2000-09-23 19:23:57 +0000
committerjsm <jsm@NetBSD.org>2000-09-23 19:23:57 +0000
commited51e2ee8c47dbb4c8041637e215fab3dac5bc06 (patch)
treef0754b91491885c992dfec97463662771c64eb3e
parentd89b56558a1f45934500212b523bd084ad39752c (diff)
downloadbsdgames-darwin-ed51e2ee8c47dbb4c8041637e215fab3dac5bc06.tar.gz
bsdgames-darwin-ed51e2ee8c47dbb4c8041637e215fab3dac5bc06.tar.zst
bsdgames-darwin-ed51e2ee8c47dbb4c8041637e215fab3dac5bc06.zip
Use a lookup table to identify whether objects are plural or singular,
instead of testing the final character against 's' in each place. Avoids oddities about "pot of jewels" and "compass".
-rw-r--r--battlestar/com2.c10
-rw-r--r--battlestar/com3.c9
-rw-r--r--battlestar/com4.c26
-rw-r--r--battlestar/extern.h7
-rw-r--r--battlestar/globals.c15
5 files changed, 41 insertions, 26 deletions
diff --git a/battlestar/com2.c b/battlestar/com2.c
index ec0e4592..07634da4 100644
--- a/battlestar/com2.c
+++ b/battlestar/com2.c
@@ -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))
diff --git a/battlestar/com3.c b/battlestar/com3.c
index 86b2e9c1..ea6d122b 100644
--- a/battlestar/com3.c
+++ b/battlestar/com3.c
@@ -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
diff --git a/battlestar/com4.c b/battlestar/com4.c
index a29cb4df..72442cb4 100644
--- a/battlestar/com4.c
+++ b/battlestar/com4.c
@@ -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:
diff --git a/battlestar/extern.h b/battlestar/extern.h
index 81ffa9c3..3257bfd7 100644
--- a/battlestar/extern.h
+++ b/battlestar/extern.h
@@ -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
@@ -227,6 +227,9 @@
#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
diff --git a/battlestar/globals.c b/battlestar/globals.c
index 5805cf96..379cd70a 100644
--- a/battlestar/globals.c
+++ b/battlestar/globals.c
@@ -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;