]> git.cameronkatri.com Git - bsdgames-darwin.git/blobdiff - hack/hack.do_name.c
Integrate Warp Kit into the NetBSD build
[bsdgames-darwin.git] / hack / hack.do_name.c
index 72ac62c86253d2fa5a593cb29f018b237ae80c6e..c01e35b4568c4c7bc800bd1a1a5589ccb2d27d9d 100644 (file)
-/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
-/* hack.do_name.c - version 1.0.3 */
+/*     $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) 1982 Jay Fenlason <hack@gnu.org>
+ * 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 <sys/cdefs.h>
+#ifndef lint
+__RCSID("$NetBSD: hack.do_name.c,v 1.13 2011/08/07 06:03:45 dholland Exp $");
+#endif                         /* not lint */
+
+#include <stdlib.h>
 #include "hack.h"
-#include <stdio.h>
-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; i<mtmp->mxlth; 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);
 }
 
 /*
@@ -96,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;
        }
@@ -118,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;
@@ -285,5 +374,5 @@ static char ccc[3];
                ccc[0] = c;
                ccc[1] = 0;
        }
-       return(ccc);
+       return (ccc);
 }