From: Pasi Kallinen Date: Fri, 20 Mar 2015 17:25:19 +0000 (+0200) Subject: Fix C343-108 (e- leaves prompt on screen) X-Git-Tag: NetHack-3.6.0_RC01~580 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2ec4ff0b8c35be3f4a44b4928ee72199df46a40c;p=nethack Fix C343-108 (e- leaves prompt on screen) You'll get "You mime eating something." --- diff --git a/include/extern.h b/include/extern.h index 23d10d324..1ba3e110f 100644 --- a/include/extern.h +++ b/include/extern.h @@ -813,6 +813,7 @@ E void FDECL(copynchars, (char *,const char *,int)); E char FDECL(chrcasecpy, (int,int)); E char *FDECL(strcasecpy, (char *,const char *)); E char *FDECL(s_suffix, (const char *)); +E char *FDECL(ing_suffix, (const char *)); E char *FDECL(xcrypt, (const char *,char *)); E boolean FDECL(onlyspace, (const char *)); E char *FDECL(tabexpand, (char *)); diff --git a/src/hacklib.c b/src/hacklib.c index fd4273074..005aa02b9 100644 --- a/src/hacklib.c +++ b/src/hacklib.c @@ -235,6 +235,39 @@ s_suffix(s) /* return a name converted to possessive */ return buf; } +char * +ing_suffix(s) + const char *s; +{ + const char *vowel = "aeiouy"; + static char buf[BUFSZ]; + char onoff[10]; + char *p; + Strcpy(buf, s); + p = eos(buf); + onoff[0] = *p = *(p+1) = '\0'; + if ((strlen(buf) > 4) && + (!strcmpi(p-3, " on") || + !strcmpi(p-4, " off") || + !strcmpi(p-5, " with"))) { + p = strrchr(buf, ' '); + Strcpy(onoff, p); + } + if (!index(vowel, *(p-1)) && index(vowel, *(p-2)) && !index(vowel, *(p-3))) { + /* tip -> tipp + ing */ + *p = *(p-1); + *(p+1) = '\0'; + } else if (!strcmpi(p-2, "ie")) { /* vie -> vy + ing */ + *(p-2) = 'y'; + *(p-1) = '\0'; + } else if (*(p-1) == 'e') /* grease -> greas + ing */ + *(p-1) = '\0'; + Strcat(buf, "ing"); + if (onoff[0]) Strcat(buf, onoff); + return buf; +} + + char * xcrypt(str, buf) /* trivial text encryption routine (see makedefs) */ const char *str; diff --git a/src/invent.c b/src/invent.c index 24213c7e3..66e7e7307 100644 --- a/src/invent.c +++ b/src/invent.c @@ -972,7 +972,15 @@ register const char *let,*word; return((struct obj *)0); } if(ilet == '-') { - return(allownone ? &zeroobj : (struct obj *) 0); + if (!allownone) { + strcpy(buf, word); + if ((bp = strstr(buf, " or ")) != NULL) { + *bp = '\0'; + bp = (rn2(2) ? buf : (bp + 4)); + } else bp = buf; + You("mime %s something.", ing_suffix(bp)); + } + return(allownone ? &zeroobj : (struct obj *) 0); } if(ilet == def_oc_syms[COIN_CLASS].sym) { if (!usegold) {