Annotation of 43BSDReno/games/hack/hack.do_name.c, revision 1.1

1.1     ! root        1: /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
        !             2: /* hack.do_name.c - version 1.0.3 */
        !             3: 
        !             4: #include "hack.h"
        !             5: #include <stdio.h>
        !             6: extern char plname[];
        !             7: 
        !             8: coord
        !             9: getpos(force,goal) int force; char *goal; {
        !            10: register cx,cy,i,c;
        !            11: extern char sdir[];            /* defined in hack.c */
        !            12: extern schar xdir[], ydir[];   /* idem */
        !            13: extern char *visctrl();                /* see below */
        !            14: coord cc;
        !            15:        pline("(For instructions type a ?)");
        !            16:        cx = u.ux;
        !            17:        cy = u.uy;
        !            18:        curs(cx,cy+2);
        !            19:        while((c = readchar()) != '.'){
        !            20:                for(i=0; i<8; i++) if(sdir[i] == c){
        !            21:                        if(1 <= cx + xdir[i] && cx + xdir[i] <= COLNO)
        !            22:                                cx += xdir[i];
        !            23:                        if(0 <= cy + ydir[i] && cy + ydir[i] <= ROWNO-1)
        !            24:                                cy += ydir[i];
        !            25:                        goto nxtc;
        !            26:                }
        !            27:                if(c == '?'){
        !            28:                        pline("Use [hjkl] to move the cursor to %s.", goal);
        !            29:                        pline("Type a . when you are at the right place.");
        !            30:                } else {
        !            31:                        pline("Unknown direction: '%s' (%s).",
        !            32:                                visctrl(c),
        !            33:                                force ? "use hjkl or ." : "aborted");
        !            34:                        if(force) goto nxtc;
        !            35:                        cc.x = -1;
        !            36:                        cc.y = 0;
        !            37:                        return(cc);
        !            38:                }
        !            39:        nxtc:   ;
        !            40:                curs(cx,cy+2);
        !            41:        }
        !            42:        cc.x = cx;
        !            43:        cc.y = cy;
        !            44:        return(cc);
        !            45: }
        !            46: 
        !            47: do_mname(){
        !            48: char buf[BUFSZ];
        !            49: coord cc;
        !            50: register int cx,cy,lth,i;
        !            51: register struct monst *mtmp, *mtmp2;
        !            52: extern char *lmonnam();
        !            53:        cc = getpos(0, "the monster you want to name");
        !            54:        cx = cc.x;
        !            55:        cy = cc.y;
        !            56:        if(cx < 0) return(0);
        !            57:        mtmp = m_at(cx,cy);
        !            58:        if(!mtmp){
        !            59:            if(cx == u.ux && cy == u.uy)
        !            60:                pline("This ugly monster is called %s and cannot be renamed.",
        !            61:                    plname);
        !            62:            else
        !            63:                pline("There is no monster there.");
        !            64:            return(1);
        !            65:        }
        !            66:        if(mtmp->mimic){
        !            67:            pline("I see no monster there.");
        !            68:            return(1);
        !            69:        }
        !            70:        if(!cansee(cx,cy)) {
        !            71:            pline("I cannot see a monster there.");
        !            72:            return(1);
        !            73:        }
        !            74:        pline("What do you want to call %s? ", lmonnam(mtmp));
        !            75:        getlin(buf);
        !            76:        clrlin();
        !            77:        if(!*buf || *buf == '\033')
        !            78:                return(1);
        !            79:        lth = strlen(buf)+1;
        !            80:        if(lth > 63){
        !            81:                buf[62] = 0;
        !            82:                lth = 63;
        !            83:        }
        !            84:        mtmp2 = newmonst(mtmp->mxlth + lth);
        !            85:        *mtmp2 = *mtmp;
        !            86:        for(i=0; i<mtmp->mxlth; i++)
        !            87:                ((char *) mtmp2->mextra)[i] = ((char *) mtmp->mextra)[i];
        !            88:        mtmp2->mnamelth = lth;
        !            89:        (void) strcpy(NAME(mtmp2), buf);
        !            90:        replmon(mtmp,mtmp2);
        !            91:        return(1);
        !            92: }
        !            93: 
        !            94: /*
        !            95:  * This routine changes the address of  obj . Be careful not to call it
        !            96:  * when there might be pointers around in unknown places. For now: only
        !            97:  * when  obj  is in the inventory.
        !            98:  */
        !            99: do_oname(obj) register struct obj *obj; {
        !           100: register struct obj *otmp, *otmp2;
        !           101: register lth;
        !           102: char buf[BUFSZ];
        !           103:        pline("What do you want to name %s? ", doname(obj));
        !           104:        getlin(buf);
        !           105:        clrlin();
        !           106:        if(!*buf || *buf == '\033')
        !           107:                return;
        !           108:        lth = strlen(buf)+1;
        !           109:        if(lth > 63){
        !           110:                buf[62] = 0;
        !           111:                lth = 63;
        !           112:        }
        !           113:        otmp2 = newobj(lth);
        !           114:        *otmp2 = *obj;
        !           115:        otmp2->onamelth = lth;
        !           116:        (void) strcpy(ONAME(otmp2), buf);
        !           117: 
        !           118:        setworn((struct obj *) 0, obj->owornmask);
        !           119:        setworn(otmp2, otmp2->owornmask);
        !           120: 
        !           121:        /* do freeinv(obj); etc. by hand in order to preserve
        !           122:           the position of this object in the inventory */
        !           123:        if(obj == invent) invent = otmp2;
        !           124:        else for(otmp = invent; ; otmp = otmp->nobj){
        !           125:                if(!otmp)
        !           126:                        panic("Do_oname: cannot find obj.");
        !           127:                if(otmp->nobj == obj){
        !           128:                        otmp->nobj = otmp2;
        !           129:                        break;
        !           130:                }
        !           131:        }
        !           132:        /* obfree(obj, otmp2);  /* now unnecessary: no pointers on bill */
        !           133:        free((char *) obj);     /* let us hope nobody else saved a pointer */
        !           134: }
        !           135: 
        !           136: ddocall()
        !           137: {
        !           138:        register struct obj *obj;
        !           139: 
        !           140:        pline("Do you want to name an individual object? [ny] ");
        !           141:        switch(readchar()) {
        !           142:        case '\033':
        !           143:                break;
        !           144:        case 'y':
        !           145:                obj = getobj("#", "name");
        !           146:                if(obj) do_oname(obj);
        !           147:                break;
        !           148:        default:
        !           149:                obj = getobj("?!=/", "call");
        !           150:                if(obj) docall(obj);
        !           151:        }
        !           152:        return(0);
        !           153: }
        !           154: 
        !           155: docall(obj)
        !           156: register struct obj *obj;
        !           157: {
        !           158:        char buf[BUFSZ];
        !           159:        struct obj otemp;
        !           160:        register char **str1;
        !           161:        extern char *xname();
        !           162:        register char *str;
        !           163: 
        !           164:        otemp = *obj;
        !           165:        otemp.quan = 1;
        !           166:        otemp.onamelth = 0;
        !           167:        str = xname(&otemp);
        !           168:        pline("Call %s %s: ", index(vowels,*str) ? "an" : "a", str);
        !           169:        getlin(buf);
        !           170:        clrlin();
        !           171:        if(!*buf || *buf == '\033')
        !           172:                return;
        !           173:        str = newstring(strlen(buf)+1);
        !           174:        (void) strcpy(str,buf);
        !           175:        str1 = &(objects[obj->otyp].oc_uname);
        !           176:        if(*str1) free(*str1);
        !           177:        *str1 = str;
        !           178: }
        !           179: 
        !           180: char *ghostnames[] = {         /* these names should have length < PL_NSIZ */
        !           181:        "adri", "andries", "andreas", "bert", "david", "dirk", "emile",
        !           182:        "frans", "fred", "greg", "hether", "jay", "john", "jon", "kay",
        !           183:        "kenny", "maud", "michiel", "mike", "peter", "robert", "ron",
        !           184:        "tom", "wilmar"
        !           185: };
        !           186: 
        !           187: char *
        !           188: xmonnam(mtmp, vb) register struct monst *mtmp; int vb; {
        !           189: static char buf[BUFSZ];                /* %% */
        !           190: extern char *shkname();
        !           191:        if(mtmp->mnamelth && !vb) {
        !           192:                (void) strcpy(buf, NAME(mtmp));
        !           193:                return(buf);
        !           194:        }
        !           195:        switch(mtmp->data->mlet) {
        !           196:        case ' ':
        !           197:                { register char *gn = (char *) mtmp->mextra;
        !           198:                  if(!*gn) {            /* might also look in scorefile */
        !           199:                    gn = ghostnames[rn2(SIZE(ghostnames))];
        !           200:                    if(!rn2(2)) (void)
        !           201:                      strcpy((char *) mtmp->mextra, !rn2(5) ? plname : gn);
        !           202:                  }
        !           203:                  (void) sprintf(buf, "%s's ghost", gn);
        !           204:                }
        !           205:                break;
        !           206:        case '@':
        !           207:                if(mtmp->isshk) {
        !           208:                        (void) strcpy(buf, shkname(mtmp));
        !           209:                        break;
        !           210:                }
        !           211:                /* fall into next case */
        !           212:        default:
        !           213:                (void) sprintf(buf, "the %s%s",
        !           214:                        mtmp->minvis ? "invisible " : "",
        !           215:                        mtmp->data->mname);
        !           216:        }
        !           217:        if(vb && mtmp->mnamelth) {
        !           218:                (void) strcat(buf, " called ");
        !           219:                (void) strcat(buf, NAME(mtmp));
        !           220:        }
        !           221:        return(buf);
        !           222: }
        !           223: 
        !           224: char *
        !           225: lmonnam(mtmp) register struct monst *mtmp; {
        !           226:        return(xmonnam(mtmp, 1));
        !           227: }
        !           228: 
        !           229: char *
        !           230: monnam(mtmp) register struct monst *mtmp; {
        !           231:        return(xmonnam(mtmp, 0));
        !           232: }
        !           233: 
        !           234: char *
        !           235: Monnam(mtmp) register struct monst *mtmp; {
        !           236: register char *bp = monnam(mtmp);
        !           237:        if('a' <= *bp && *bp <= 'z') *bp += ('A' - 'a');
        !           238:        return(bp);
        !           239: }
        !           240: 
        !           241: char *
        !           242: amonnam(mtmp,adj)
        !           243: register struct monst *mtmp;
        !           244: register char *adj;
        !           245: {
        !           246:        register char *bp = monnam(mtmp);
        !           247:        static char buf[BUFSZ];         /* %% */
        !           248: 
        !           249:        if(!strncmp(bp, "the ", 4)) bp += 4;
        !           250:        (void) sprintf(buf, "the %s %s", adj, bp);
        !           251:        return(buf);
        !           252: }
        !           253: 
        !           254: char *
        !           255: Amonnam(mtmp, adj)
        !           256: register struct monst *mtmp;
        !           257: register char *adj;
        !           258: {
        !           259:        register char *bp = amonnam(mtmp,adj);
        !           260: 
        !           261:        *bp = 'T';
        !           262:        return(bp);
        !           263: }
        !           264: 
        !           265: char *
        !           266: Xmonnam(mtmp) register struct monst *mtmp; {
        !           267: register char *bp = Monnam(mtmp);
        !           268:        if(!strncmp(bp, "The ", 4)) {
        !           269:                bp += 2;
        !           270:                *bp = 'A';
        !           271:        }
        !           272:        return(bp);
        !           273: }
        !           274: 
        !           275: char *
        !           276: visctrl(c)
        !           277: char c;
        !           278: {
        !           279: static char ccc[3];
        !           280:        if(c < 040) {
        !           281:                ccc[0] = '^';
        !           282:                ccc[1] = c + 0100;
        !           283:                ccc[2] = 0;
        !           284:        } else {
        !           285:                ccc[0] = c;
        !           286:                ccc[1] = 0;
        !           287:        }
        !           288:        return(ccc);
        !           289: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.