From a8a6f5649f863377e35204395b1df02a9bacdc9a Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Thu, 8 Apr 2004 19:26:55 +0000 Subject: [PATCH] (item_by_name): New, factored out of whatitem(). Use it to simplify some uses of whatitem(). --- include/item.h | 3 ++- src/lib/commands/load.c | 8 ++++---- src/lib/commands/tend.c | 4 ++-- src/lib/subs/whatitem.c | 33 ++++++++++++++++++++++++++------- 4 files changed, 34 insertions(+), 14 deletions(-) diff --git a/include/item.h b/include/item.h index a5525b0e..f8688d81 100644 --- a/include/item.h +++ b/include/item.h @@ -52,6 +52,7 @@ extern struct ichrstr ichr[]; /* procedures using/returning this struct */ -extern struct ichrstr *whatitem(s_char *ptr, s_char *prompt); +extern struct ichrstr *whatitem(char *, char *); +extern struct ichrstr *item_by_name(char *); #endif /* _ITEM_H_ */ diff --git a/src/lib/commands/load.c b/src/lib/commands/load.c index 1668e1a3..e08a827d 100644 --- a/src/lib/commands/load.c +++ b/src/lib/commands/load.c @@ -94,10 +94,10 @@ load(void) type = EF_PLANE; else if (!strncmp(p, "land", 4)) type = EF_LAND; - else if (NULL != (ich = whatitem(p, (s_char *)0))) + else if (NULL != (ich = item_by_name(p))) type = EF_SECTOR; else { - pr("Bad commodity.\n"); + pr("Can't load '%s'\n", p); return RET_SYN; } @@ -234,10 +234,10 @@ lload(void) type = EF_PLANE; else if (!strncmp(p, "land", 4)) type = EF_LAND; - else if (NULL != (ich = whatitem(p, (s_char *)0))) + else if (NULL != (ich = item_by_name(p))) type = EF_SECTOR; else { - pr("Bad commodity.\n"); + pr("Can't load '%s'\n", p); return RET_SYN; } diff --git a/src/lib/commands/tend.c b/src/lib/commands/tend.c index 46a233c8..06e3c73b 100644 --- a/src/lib/commands/tend.c +++ b/src/lib/commands/tend.c @@ -80,10 +80,10 @@ tend(void) if (!strncmp(p, "land", 4)) type = EF_LAND; - else if (NULL != (ip = whatitem(p, (s_char *)0))) + else if (NULL != (ip = item_by_name(p))) type = EF_SECTOR; else { - pr("Bad commodity.\n"); + pr("Can't tend '%s'\n", p); return RET_SYN; } diff --git a/src/lib/subs/whatitem.c b/src/lib/subs/whatitem.c index 23e8a8de..428d64c3 100644 --- a/src/lib/subs/whatitem.c +++ b/src/lib/subs/whatitem.c @@ -35,20 +35,39 @@ #include "item.h" #include "prototypes.h" +/* + * Get item type argument. + * If INPUT is not empty, use it, else prompt for more input using PROMPT. + * Return item characteristics on success, else NULL. + */ struct ichrstr * -whatitem(s_char *ptr, s_char *prompt) +whatitem(char *input, char *prompt) { - register s_char *p; - register struct ichrstr *ip; - s_char buf[1024]; + char *p; + struct ichrstr *ip; + char buf[1024]; - p = getstarg(ptr, prompt, buf); + p = getstarg(input, prompt, buf); if (p == 0 || *p == 0) return 0; + ip = item_by_name(p); + if (!ip) + pr("Unrecognized item \"%c\"\n", *p); + return ip; +} + +/* + * Map item type name STR to item characteristics, NULL if not found. + */ +struct ichrstr * +item_by_name(char *str) +{ + struct ichrstr *ip; + for (ip = &ichr[1]; ip->i_mnem != 0; ip++) { - if (*p == ip->i_mnem) + /* FIXME check i_name if str[2]? */ + if (*str == ip->i_mnem) return ip; } - pr("Unrecognized item \"%c\"\n", *p); return 0; }