Defer to the validation code from pickup.c for checking
valid categories. This reduces the number of callback
functions required, and allows combinations of BUCX
to be used in traditional menu style.
getobj used display_inventory when "?" was selected. However, any count
entered via the menu interface was lost. Provide a new internal function
that can return both a letter and a count
1. The switch statement was using the material "GOLD"
rather than GOLD_CLASS.
2. If getobj() had been working for gold when it
came to touchstones, there would have been a
memory leak here because the object returned
would have been from mkgoldobj(). The goldobj
was not being freed anywhere, nor was it being
put on a chain. You also would have had zero
gold after rubbing it on the stone. The intent
was clearly to allow gold since there was a
case in the switch statement.
3. getobj() wasn't working properly for gold
selection here anyway, so this was
not the cause of <Someone>'s gold obj in inventory.
You ended up dropping through to code that
was supposed to print "You cannot verb object."
For touchstones that came out as:
"You cannot rub on the stone gold."
over the place.
Often they would use
"%ld zorkmid%s", amt, plur(amt)
but not consistently, so some of the hard-coded usage
could result in "1 zorkmids"
This adds the function
currency(long)
to return the name of the currency, either plural
or singular depending on the argument passed to it.
That eliminates the need for the extra %s in the
format string and the use of the plur() macro.
The GOLDOBJ fix I posted back on 1/3 caused "Ix" to access a null pointer
(obj) while generating the total line. This patch fixes the bug I added to
xprname.
This adds the BUC-patch, except that it includes four separate choices for
blessed/cursed/uncursed/unknown. The patch only applies to full menu styles.
--Ken A
(Incidentally, I have a suggestion: when deciding what's the first line for
purposes of mailing out messages, use the first nonblank line...)