summaryrefslogtreecommitdiffstats
path: root/battlestar
diff options
context:
space:
mode:
authorhubertf <hubertf@NetBSD.org>1998-08-29 19:58:12 +0000
committerhubertf <hubertf@NetBSD.org>1998-08-29 19:58:12 +0000
commitaef282629e988d9cb50311fe149d660dfb95f863 (patch)
tree67eacb6ad30e704e3ecb603c8e2dfb3fbe75ca8f /battlestar
parent6a91faf8dfb7ce42973a6f5345bb74e37c8ae4ba (diff)
downloadbsdgames-darwin-aef282629e988d9cb50311fe149d660dfb95f863.tar.gz
bsdgames-darwin-aef282629e988d9cb50311fe149d660dfb95f863.tar.zst
bsdgames-darwin-aef282629e988d9cb50311fe149d660dfb95f863.zip
DTRT if "give" is invoked without arguments. Fix contributed by Joseph S.
Myers <jsm28@cam.ac.uk>, closeds PR 6049.
Diffstat (limited to 'battlestar')
-rw-r--r--battlestar/com5.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/battlestar/com5.c b/battlestar/com5.c
index 57da3aa6..85905558 100644
--- a/battlestar/com5.c
+++ b/battlestar/com5.c
@@ -1,4 +1,4 @@
-/* $NetBSD: com5.c,v 1.7 1998/08/28 00:44:31 hubertf Exp $ */
+/* $NetBSD: com5.c,v 1.8 1998/08/29 19:58:12 hubertf Exp $ */
/*
* Copyright (c) 1983, 1993
@@ -38,7 +38,7 @@
#if 0
static char sccsid[] = "@(#)com5.c 8.2 (Berkeley) 4/28/95";
#else
-__RCSID("$NetBSD: com5.c,v 1.7 1998/08/28 00:44:31 hubertf Exp $");
+__RCSID("$NetBSD: com5.c,v 1.8 1998/08/29 19:58:12 hubertf Exp $");
#endif
#endif /* not lint */
@@ -259,10 +259,19 @@ give()
person = wordvalue[wordnumber];
last2 = wordnumber;
}
- if (last1 == 0) {
- puts("You didn't say what to give.");
- return (0);
- }
+ /* Setting wordnumber to last1 - 1 looks wrong if last1 is 0, e.g.,
+ * plain `give'. However, detecting this case is liable to detect
+ * `give foo' as well, which would give a confusing error. We
+ * need to make sure the -1 value can cause no problems if it arises.
+ * If in the below we get to the drop("Given") then drop will look
+ * at word 0 for an object to give, and fail, which is OK; then
+ * result will be -1 and we get to the end, where wordnumber gets
+ * set to something more sensible. If we get to "I don't think
+ * that is possible" then again wordnumber is set to something
+ * sensible. The wordnumber we leave with still isn't right if
+ * you include words the game doesn't know in your command, but
+ * that's no worse than what other commands than give do in
+ * the same place. */
wordnumber = last1 - 1;
if (person && testbit(location[position].objects, person))
if (person == NORMGOD && godready < 2 && !(obj == RING || obj == BRACELET))
@@ -271,6 +280,7 @@ give()
result = drop("Given");
else {
puts("I don't think that is possible.");
+ wordnumber = max(last1, last2) + 1;
return (0);
}
if (result != -1 && (testbit(location[position].objects, obj) || obj == AMULET || obj == MEDALION || obj == TALISMAN)) {
@@ -335,6 +345,6 @@ give()
break;
}
}
- wordnumber = max(last1, last2);
+ wordnumber = max(last1, last2) + 1;
return (firstnumber);
}