X-Git-Url: https://git.cameronkatri.com/bsdgames-darwin.git/blobdiff_plain/94b5353c71e7246077d468afe68d51ce85fc213d..d83ae3073815d24b7f25631da96992bf92984230:/hack/hack.do_name.c?ds=inline diff --git a/hack/hack.do_name.c b/hack/hack.do_name.c index 313b5533..c01e35b4 100644 --- a/hack/hack.do_name.c +++ b/hack/hack.do_name.c @@ -1,99 +1,168 @@ +/* $NetBSD: hack.do_name.c,v 1.13 2011/08/07 06:03:45 dholland Exp $ */ + +/* + * Copyright (c) 1985, Stichting Centrum voor Wiskunde en Informatica, + * Amsterdam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of the Stichting Centrum voor Wiskunde en + * Informatica, nor the names of its contributors may be used to endorse or + * promote products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER + * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + /* - * Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. + * Copyright (c) 1982 Jay Fenlason + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include #ifndef lint -static char rcsid[] = "$NetBSD: hack.do_name.c,v 1.3 1995/03/23 08:29:56 cgd Exp $"; -#endif /* not lint */ +__RCSID("$NetBSD: hack.do_name.c,v 1.13 2011/08/07 06:03:45 dholland Exp $"); +#endif /* not lint */ +#include #include "hack.h" -#include -extern char plname[]; +#include "extern.h" + +static void do_oname(struct obj *); +static char *xmonnam(struct monst *, int); +static char *lmonnam(struct monst *); +static char *visctrl(int); coord -getpos(force,goal) int force; char *goal; { -register cx,cy,i,c; -extern char sdir[]; /* defined in hack.c */ -extern schar xdir[], ydir[]; /* idem */ -extern char *visctrl(); /* see below */ -coord cc; +getpos(int force, const char *goal) +{ + int cx, cy, i, c; + coord cc; pline("(For instructions type a ?)"); cx = u.ux; cy = u.uy; - curs(cx,cy+2); - while((c = readchar()) != '.'){ - for(i=0; i<8; i++) if(sdir[i] == c){ - if(1 <= cx + xdir[i] && cx + xdir[i] <= COLNO) - cx += xdir[i]; - if(0 <= cy + ydir[i] && cy + ydir[i] <= ROWNO-1) - cy += ydir[i]; - goto nxtc; - } - if(c == '?'){ + curs(cx, cy + 2); + while ((c = readchar()) != '.') { + for (i = 0; i < 8; i++) + if (sdir[i] == c) { + if (1 <= cx + xdir[i] && cx + xdir[i] <= COLNO) + cx += xdir[i]; + if (0 <= cy + ydir[i] && cy + ydir[i] <= ROWNO - 1) + cy += ydir[i]; + goto nxtc; + } + if (c == '?') { pline("Use [hjkl] to move the cursor to %s.", goal); pline("Type a . when you are at the right place."); } else { pline("Unknown direction: '%s' (%s).", - visctrl(c), - force ? "use hjkl or ." : "aborted"); - if(force) goto nxtc; + visctrl(c), + force ? "use hjkl or ." : "aborted"); + if (force) + goto nxtc; cc.x = -1; cc.y = 0; - return(cc); + return (cc); } - nxtc: ; - curs(cx,cy+2); +nxtc: ; + curs(cx, cy + 2); } cc.x = cx; cc.y = cy; - return(cc); + return (cc); } -do_mname(){ -char buf[BUFSZ]; -coord cc; -register int cx,cy,lth,i; -register struct monst *mtmp, *mtmp2; -extern char *lmonnam(); +int +do_mname(void) +{ + char buf[BUFSZ]; + coord cc; + int cx, cy; + size_t lth; + unsigned i; + struct monst *mtmp, *mtmp2; cc = getpos(0, "the monster you want to name"); cx = cc.x; cy = cc.y; - if(cx < 0) return(0); - mtmp = m_at(cx,cy); - if(!mtmp){ - if(cx == u.ux && cy == u.uy) - pline("This ugly monster is called %s and cannot be renamed.", - plname); - else - pline("There is no monster there."); - return(1); + if (cx < 0) + return (0); + mtmp = m_at(cx, cy); + if (!mtmp) { + if (cx == u.ux && cy == u.uy) + pline("This ugly monster is called %s and cannot be renamed.", + plname); + else + pline("There is no monster there."); + return (1); } - if(mtmp->mimic){ - pline("I see no monster there."); - return(1); + if (mtmp->mimic) { + pline("I see no monster there."); + return (1); } - if(!cansee(cx,cy)) { - pline("I cannot see a monster there."); - return(1); + if (!cansee(cx, cy)) { + pline("I cannot see a monster there."); + return (1); } pline("What do you want to call %s? ", lmonnam(mtmp)); getlin(buf); clrlin(); - if(!*buf || *buf == '\033') - return(1); - lth = strlen(buf)+1; - if(lth > 63){ + if (!*buf || *buf == '\033') + return (1); + lth = strlen(buf) + 1; + if (lth > 63) { buf[62] = 0; lth = 63; } mtmp2 = newmonst(mtmp->mxlth + lth); *mtmp2 = *mtmp; - for(i=0; imxlth; i++) + for (i = 0; i < mtmp->mxlth; i++) ((char *) mtmp2->mextra)[i] = ((char *) mtmp->mextra)[i]; mtmp2->mnamelth = lth; (void) strcpy(NAME(mtmp2), buf); - replmon(mtmp,mtmp2); - return(1); + replmon(mtmp, mtmp2); + return (1); } /* @@ -101,17 +170,19 @@ extern char *lmonnam(); * when there might be pointers around in unknown places. For now: only * when obj is in the inventory. */ -do_oname(obj) register struct obj *obj; { -register struct obj *otmp, *otmp2; -register lth; -char buf[BUFSZ]; +static void +do_oname(struct obj *obj) +{ + struct obj *otmp, *otmp2; + size_t lth; + char buf[BUFSZ]; pline("What do you want to name %s? ", doname(obj)); getlin(buf); clrlin(); - if(!*buf || *buf == '\033') + if (!*buf || *buf == '\033') return; - lth = strlen(buf)+1; - if(lth > 63){ + lth = strlen(buf) + 1; + if (lth > 63) { buf[62] = 0; lth = 63; } @@ -123,166 +194,179 @@ char buf[BUFSZ]; setworn((struct obj *) 0, obj->owornmask); setworn(otmp2, otmp2->owornmask); - /* do freeinv(obj); etc. by hand in order to preserve - the position of this object in the inventory */ - if(obj == invent) invent = otmp2; - else for(otmp = invent; ; otmp = otmp->nobj){ - if(!otmp) - panic("Do_oname: cannot find obj."); - if(otmp->nobj == obj){ - otmp->nobj = otmp2; - break; + /* + * do freeinv(obj); etc. by hand in order to preserve the position of + * this object in the inventory + */ + if (obj == invent) + invent = otmp2; + else + for (otmp = invent;; otmp = otmp->nobj) { + if (!otmp) + panic("Do_oname: cannot find obj."); + if (otmp->nobj == obj) { + otmp->nobj = otmp2; + break; + } } - } - /* obfree(obj, otmp2); /* now unnecessary: no pointers on bill */ - free((char *) obj); /* let us hope nobody else saved a pointer */ +#if 0 + obfree(obj, otmp2); /* now unnecessary: no pointers on bill */ +#endif + free(obj); /* let us hope nobody else saved a pointer */ } -ddocall() +int +ddocall(void) { - register struct obj *obj; + struct obj *obj; pline("Do you want to name an individual object? [ny] "); - switch(readchar()) { + switch (readchar()) { case '\033': break; case 'y': obj = getobj("#", "name"); - if(obj) do_oname(obj); + if (obj) + do_oname(obj); break; default: obj = getobj("?!=/", "call"); - if(obj) docall(obj); + if (obj) + docall(obj); } - return(0); + return (0); } -docall(obj) -register struct obj *obj; +void +docall(struct obj *obj) { - char buf[BUFSZ]; - struct obj otemp; - register char **str1; - extern char *xname(); - register char *str; + char buf[BUFSZ]; + struct obj otemp; + char **str1; + char *str; otemp = *obj; otemp.quan = 1; otemp.onamelth = 0; str = xname(&otemp); - pline("Call %s %s: ", index(vowels,*str) ? "an" : "a", str); + pline("Call %s %s: ", strchr(vowels, *str) ? "an" : "a", str); getlin(buf); clrlin(); - if(!*buf || *buf == '\033') + if (!*buf || *buf == '\033') return; - str = newstring(strlen(buf)+1); - (void) strcpy(str,buf); + str = newstring(strlen(buf) + 1); + (void) strcpy(str, buf); str1 = &(objects[obj->otyp].oc_uname); - if(*str1) free(*str1); + if (*str1) + free(*str1); *str1 = str; } -char *ghostnames[] = { /* these names should have length < PL_NSIZ */ +static const char *const ghostnames[] = { + /* these names should have length < PL_NSIZ */ "adri", "andries", "andreas", "bert", "david", "dirk", "emile", "frans", "fred", "greg", "hether", "jay", "john", "jon", "kay", "kenny", "maud", "michiel", "mike", "peter", "robert", "ron", "tom", "wilmar" }; -char * -xmonnam(mtmp, vb) register struct monst *mtmp; int vb; { -static char buf[BUFSZ]; /* %% */ -extern char *shkname(); - if(mtmp->mnamelth && !vb) { - (void) strcpy(buf, NAME(mtmp)); - return(buf); +static char * +xmonnam(struct monst *mtmp, int vb) +{ + static char buf[BUFSZ]; /* %% */ + if (mtmp->mnamelth && !vb) { + (void) strlcpy(buf, NAME(mtmp), sizeof(buf)); + return (buf); } - switch(mtmp->data->mlet) { + switch (mtmp->data->mlet) { case ' ': - { register char *gn = (char *) mtmp->mextra; - if(!*gn) { /* might also look in scorefile */ - gn = ghostnames[rn2(SIZE(ghostnames))]; - if(!rn2(2)) (void) - strcpy((char *) mtmp->mextra, !rn2(5) ? plname : gn); - } - (void) sprintf(buf, "%s's ghost", gn); + { + const char *gn = (char *) mtmp->mextra; + if (!*gn) { /* might also look in scorefile */ + gn = ghostnames[rn2(SIZE(ghostnames))]; + if (!rn2(2)) + (void) + strlcpy((char *) mtmp->mextra, !rn2(5) ? plname : gn, mtmp->mxlth); + } + (void) snprintf(buf, sizeof(buf), "%s's ghost", gn); } break; case '@': - if(mtmp->isshk) { - (void) strcpy(buf, shkname(mtmp)); + if (mtmp->isshk) { + (void) strlcpy(buf, shkname(mtmp), sizeof(buf)); break; } - /* fall into next case */ + /* FALLTHROUGH */ default: - (void) sprintf(buf, "the %s%s", - mtmp->minvis ? "invisible " : "", - mtmp->data->mname); + (void) snprintf(buf, sizeof(buf), "the %s%s", + mtmp->minvis ? "invisible " : "", + mtmp->data->mname); } - if(vb && mtmp->mnamelth) { - (void) strcat(buf, " called "); - (void) strcat(buf, NAME(mtmp)); + if (vb && mtmp->mnamelth) { + (void) strlcat(buf, " called ", sizeof(buf)); + (void) strlcat(buf, NAME(mtmp), sizeof(buf)); } - return(buf); + return (buf); } -char * -lmonnam(mtmp) register struct monst *mtmp; { - return(xmonnam(mtmp, 1)); +static char * +lmonnam(struct monst *mtmp) +{ + return (xmonnam(mtmp, 1)); } -char * -monnam(mtmp) register struct monst *mtmp; { - return(xmonnam(mtmp, 0)); +char * +monnam(struct monst *mtmp) +{ + return (xmonnam(mtmp, 0)); } -char * -Monnam(mtmp) register struct monst *mtmp; { -register char *bp = monnam(mtmp); - if('a' <= *bp && *bp <= 'z') *bp += ('A' - 'a'); - return(bp); +char * +Monnam(struct monst *mtmp) +{ + char *bp = monnam(mtmp); + if ('a' <= *bp && *bp <= 'z') + *bp += ('A' - 'a'); + return (bp); } -char * -amonnam(mtmp,adj) -register struct monst *mtmp; -register char *adj; +char * +amonnam(struct monst *mtmp, const char *adj) { - register char *bp = monnam(mtmp); - static char buf[BUFSZ]; /* %% */ + char *bp = monnam(mtmp); + static char buf[BUFSZ]; /* %% */ - if(!strncmp(bp, "the ", 4)) bp += 4; - (void) sprintf(buf, "the %s %s", adj, bp); - return(buf); + if (!strncmp(bp, "the ", 4)) + bp += 4; + (void) snprintf(buf, sizeof(buf), "the %s %s", adj, bp); + return (buf); } -char * -Amonnam(mtmp, adj) -register struct monst *mtmp; -register char *adj; +char * +Amonnam(struct monst *mtmp, const char *adj) { - register char *bp = amonnam(mtmp,adj); + char *bp = amonnam(mtmp, adj); *bp = 'T'; - return(bp); + return (bp); } -char * -Xmonnam(mtmp) register struct monst *mtmp; { -register char *bp = Monnam(mtmp); - if(!strncmp(bp, "The ", 4)) { +char * +Xmonnam(struct monst *mtmp) +{ + char *bp = Monnam(mtmp); + if (!strncmp(bp, "The ", 4)) { bp += 2; *bp = 'A'; } - return(bp); + return (bp); } -char * -visctrl(c) -char c; +static char * +visctrl(int c) { -static char ccc[3]; - if(c < 040) { + static char ccc[3]; + if (c < 040) { ccc[0] = '^'; ccc[1] = c + 0100; ccc[2] = 0; @@ -290,5 +374,5 @@ static char ccc[3]; ccc[0] = c; ccc[1] = 0; } - return(ccc); + return (ccc); }