]> granicus.if.org Git - nethack/commitdiff
back out part1 patch (trunk only)
authornethack.allison <nethack.allison>
Sat, 8 Jul 2006 20:16:13 +0000 (20:16 +0000)
committernethack.allison <nethack.allison>
Sat, 8 Jul 2006 20:16:13 +0000 (20:16 +0000)
I got an unexpected access violation since
checking in that patch, so I'm backing out the
change while investigating.

include/extern.h
include/lev.h
include/wintype.h
src/hack.c
src/light.c
src/makemon.c
src/mon.c
src/polyself.c

index 32948a1a6539e6fd1d88f82aad3d13fbc222a9af..db6f401f9c8cfc4a30152c2d1ab23081071a7c05 100644 (file)
@@ -737,11 +737,6 @@ E void NDECL(drinksink);
 
 /* ### hack.c ### */
 
-E anything *FDECL(uint_to_any, (unsigned));
-E anything *FDECL(long_to_any, (long));
-E anything *FDECL(monst_to_any, (struct monst *));
-E anything *FDECL(obj_to_any, (struct obj *));
-E void FDECL(zero_anything, (ANY_P *));
 E boolean FDECL(revive_nasty, (int,int,const char*));
 E void FDECL(movobj, (struct obj *,XCHAR_P,XCHAR_P));
 E boolean FDECL(may_dig, (XCHAR_P,XCHAR_P));
@@ -898,8 +893,8 @@ E int NDECL(dosuspend);
 
 /* ### light.c ### */
 
-E void FDECL(new_light_source, (XCHAR_P, XCHAR_P, int, int, ANY_P *));
-E void FDECL(del_light_source, (int, ANY_P *));
+E void FDECL(new_light_source, (XCHAR_P, XCHAR_P, int, int, genericptr_t));
+E void FDECL(del_light_source, (int, genericptr_t));
 E void FDECL(do_light_sources, (char **));
 E struct monst *FDECL(find_mid, (unsigned, unsigned));
 E void FDECL(save_light_sources, (int, int, int));
index 678b3eb30de58810af75c5fc85e373a1a14bb4bb..ae9cd2915e1d7e1308933e83da06b374b1634ea0 100644 (file)
@@ -43,7 +43,7 @@ typedef struct ls_t {
     short range;       /* source's current range */
     short flags;
     short type;                /* type of light source */
-    anything id;       /* source's identifier */
+    genericptr_t id;   /* source's identifier */
 } light_source;
 
 #endif /* LEV_H */
index ad539f7d30eae0ac11bba856d38dc864e056d539..7b1bcf951810ffc9afae34ab5b62172f7dc62d77 100644 (file)
@@ -11,7 +11,6 @@ typedef int winid;            /* a window identifier */
 typedef union any {
     genericptr_t a_void;
     struct obj *a_obj;
-    struct monst *a_monst;
     int  a_int;
     char a_char;
     schar a_schar;
index 2d2474847419237f2a18ecc5a664e946965a0b59..2ef27dcabb77c56da1d9130f80eb288e3e2dd54f 100644 (file)
@@ -1,4 +1,4 @@
-/*     SCCS Id: @(#)hack.c     3.5     2006/07/08      */
+/*     SCCS Id: @(#)hack.c     3.5     2006/06/11      */
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
@@ -19,51 +19,6 @@ STATIC_DCL void FDECL(move_update, (BOOLEAN_P));
 
 #define IS_SHOP(x)     (rooms[x].rtype >= SHOPBASE)
 
-static anything tmp_anything;
-
-anything *
-uint_to_any(ui)
-unsigned ui;
-{
-    zero_anything(&tmp_anything);
-    tmp_anything.a_uint = ui;
-    return &tmp_anything;
-}
-
-anything *
-long_to_any(lng)
-unsigned lng;
-{
-    zero_anything(&tmp_anything);
-    tmp_anything.a_long = lng;
-    return &tmp_anything;
-}
-
-anything *
-monst_to_any(mtmp)
-struct monst *mtmp;
-{
-    zero_anything(&tmp_anything);
-    tmp_anything.a_monst = mtmp;
-    return &tmp_anything;
-}
-
-anything *
-obj_to_any(obj)
-struct obj *obj;
-{
-    zero_anything(&tmp_anything);
-    tmp_anything.a_obj = obj;
-    return &tmp_anything;
-}
-
-void
-zero_anything(any)
-anything *any;
-{
-    (void) memset((genericptr_t)any, 0, sizeof(anything));
-}
-
 boolean
 revive_nasty(x, y, msg)
 int x,y;
index 4d9ff4c2bf5d0f1326e3cde5d5ee57796d6fa1d2..b63d7aba186cebe53330ca66f2cf511831835215 100644 (file)
@@ -57,7 +57,7 @@ void
 new_light_source(x, y, range, type, id)
     xchar x, y;
     int range, type;
-    anything *id;
+    genericptr_t id;
 {
     light_source *ls;
 
@@ -73,7 +73,7 @@ new_light_source(x, y, range, type, id)
     ls->y = y;
     ls->range = range;
     ls->type = type;
-    ls->id = *id;
+    ls->id = id;
     ls->flags = 0;
     light_base = ls;
 
@@ -87,28 +87,26 @@ new_light_source(x, y, range, type, id)
 void
 del_light_source(type, id)
     int type;
-    anything *id;
+    genericptr_t id;
 {
     light_source *curr, *prev;
-    anything tmp_id;
-
-    zero_anything(&tmp_id);
+    genericptr_t tmp_id;
 
     /* need to be prepared for dealing a with light source which
        has only been partially restored during a level change
        (in particular: chameleon vs prot. from shape changers) */
     switch (type) {
-    case LS_OBJECT:    tmp_id.a_uint = id->a_obj->o_id;
+    case LS_OBJECT:    tmp_id = (genericptr_t)(((struct obj *)id)->o_id);
                        break;
-    case LS_MONSTER:   tmp_id.a_uint = id->a_monst->m_id;
+    case LS_MONSTER:   tmp_id = (genericptr_t)(((struct monst *)id)->m_id);
                        break;
-    default:           tmp_id.a_uint = 0;
+    default:           tmp_id = 0;
                        break;
     }
 
     for (prev = 0, curr = light_base; curr; prev = curr, curr = curr->next) {
        if (curr->type != type) continue;
-       if (curr->id.a_obj == ((curr->flags & LSF_NEEDS_FIXUP) ? tmp_id.a_obj : id->a_obj)) {
+       if (curr->id == ((curr->flags & LSF_NEEDS_FIXUP) ? tmp_id : id)) {
            if (prev)
                prev->next = curr->next;
            else
@@ -120,7 +118,7 @@ del_light_source(type, id)
        }
     }
     impossible("del_light_source: not found type=%d, id=%s",
-             type, fmt_ptr((genericptr_t)id->a_obj));
+             type, fmt_ptr((genericptr_t)id));
 }
 
 /* Mark locations that are temporarily lit via mobile light sources. */
@@ -144,10 +142,10 @@ do_light_sources(cs_rows)
         * vision recalc.
         */
        if (ls->type == LS_OBJECT) {
-           if (get_obj_location(ls->id.a_obj, &ls->x, &ls->y, 0))
+           if (get_obj_location((struct obj *) ls->id, &ls->x, &ls->y, 0))
                ls->flags |= LSF_SHOW;
        } else if (ls->type == LS_MONSTER) {
-           if (get_mon_location(ls->id.a_monst, &ls->x, &ls->y, 0))
+           if (get_mon_location((struct monst *) ls->id, &ls->x, &ls->y, 0))
                ls->flags |= LSF_SHOW;
        }
 
@@ -246,16 +244,16 @@ save_light_sources(fd, mode, range)
 
     if (release_data(mode)) {
        for (prev = &light_base; (curr = *prev) != 0; ) {
-           if (!curr->id.a_monst) {
+           if (!curr->id) {
                impossible("save_light_sources: no id! [range=%d]", range);
                is_global = 0;
            } else
            switch (curr->type) {
            case LS_OBJECT:
-               is_global = !obj_is_local(curr->id.a_obj);
+               is_global = !obj_is_local((struct obj *)curr->id);
                break;
            case LS_MONSTER:
-               is_global = !mon_is_local(curr->id.a_monst);
+               is_global = !mon_is_local((struct monst *)curr->id);
                break;
            default:
                is_global = 0;
@@ -309,18 +307,18 @@ relink_light_sources(ghostly)
        if (ls->flags & LSF_NEEDS_FIXUP) {
            if (ls->type == LS_OBJECT || ls->type == LS_MONSTER) {
                if (ghostly) {
-                   if (!lookup_id_mapping(ls->id.a_uint, &nid))
+                   if (!lookup_id_mapping((unsigned)ls->id, &nid))
                        impossible("relink_light_sources: no id mapping");
                } else
-                   nid = ls->id.a_uint;
+                   nid = (unsigned) ls->id;
                if (ls->type == LS_OBJECT) {
                    which = 'o';
-                   ls->id.a_obj = find_oid(nid);
+                   ls->id = (genericptr_t) find_oid(nid);
                } else {
                    which = 'm';
-                   ls->id.a_monst = find_mid(nid, FM_EVERYWHERE);
+                   ls->id = (genericptr_t) find_mid(nid, FM_EVERYWHERE);
                }
-               if (!ls->id.a_monst)
+               if (!ls->id)
                    impossible("relink_light_sources: cant find %c_id %d",
                               which, nid);
            } else
@@ -345,16 +343,16 @@ maybe_write_ls(fd, range, write_it)
     light_source *ls;
 
     for (ls = light_base; ls; ls = ls->next) {
-       if (!ls->id.a_monst) {
+       if (!ls->id) {
            impossible("maybe_write_ls: no id! [range=%d]", range);
            continue;
        }
        switch (ls->type) {
        case LS_OBJECT:
-           is_global = !obj_is_local(ls->id.a_obj);
+           is_global = !obj_is_local((struct obj *)ls->id);
            break;
        case LS_MONSTER:
-           is_global = !mon_is_local(ls->id.a_monst);
+           is_global = !mon_is_local((struct monst *)ls->id);
            break;
        default:
            is_global = 0;
@@ -378,7 +376,7 @@ write_ls(fd, ls)
     int fd;
     light_source *ls;
 {
-    anything arg_save;
+    genericptr_t arg_save;
     struct obj *otmp;
     struct monst *mtmp;
 
@@ -389,20 +387,18 @@ write_ls(fd, ls)
            /* replace object pointer with id for write, then put back */
            arg_save = ls->id;
            if (ls->type == LS_OBJECT) {
-               otmp = ls->id.a_obj;
-               ls->id.a_obj = (struct obj *)0;
-               ls->id.a_uint = otmp->o_id;
+               otmp = (struct obj *)ls->id;
+               ls->id = (genericptr_t)otmp->o_id;
 #ifdef DEBUG
                if (find_oid((unsigned)ls->id) != otmp)
-                   panic("write_ls: can't find obj #%u!", ls->id.a_uint);
+                   panic("write_ls: can't find obj #%u!", (unsigned)ls->id);
 #endif
            } else { /* ls->type == LS_MONSTER */
-               mtmp = (struct monst *)ls->id.a_monst;
-               ls->id.a_monst = (struct monst *)0;
-               ls->id.a_uint = mtmp->m_id;
+               mtmp = (struct monst *)ls->id;
+               ls->id = (genericptr_t)mtmp->m_id;
 #ifdef DEBUG
                if (find_mid((unsigned)ls->id, FM_EVERYWHERE) != mtmp)
-                   panic("write_ls: can't find mon #%u!", ls->x_id);
+                   panic("write_ls: can't find mon #%u!", (unsigned)ls->id);
 #endif
            }
            ls->flags |= LSF_NEEDS_FIXUP;
@@ -423,8 +419,8 @@ obj_move_light_source(src, dest)
     light_source *ls;
 
     for (ls = light_base; ls; ls = ls->next)
-       if (ls->type == LS_OBJECT && ls->id.a_obj == src)
-           ls->id.a_obj = dest;
+       if (ls->type == LS_OBJECT && ls->id == (genericptr_t) src)
+           ls->id = (genericptr_t) dest;
     src->lamplit = 0;
     dest->lamplit = 1;
 }
@@ -454,7 +450,7 @@ snuff_light_source(x, y)
        updated with the last vision update?  [Is that recent enough???]
        */
        if (ls->type == LS_OBJECT && ls->x == x && ls->y == y) {
-           obj = ls->id.a_obj;
+           obj = (struct obj *) ls->id;
            if (obj_is_burning(obj)) {
                /* The only way to snuff Sunsword is to unwield it.  Darkness
                 * scrolls won't affect it.  (If we got here because it was
@@ -499,7 +495,7 @@ obj_split_light_source(src, dest)
     light_source *ls, *new_ls;
 
     for (ls = light_base; ls; ls = ls->next)
-       if (ls->type == LS_OBJECT && ls->id.a_obj == src) {
+       if (ls->type == LS_OBJECT && ls->id == (genericptr_t) src) {
            /*
             * Insert the new source at beginning of list.  This will
             * never interfere us walking down the list - we are already
@@ -513,7 +509,7 @@ obj_split_light_source(src, dest)
                new_ls->range = candle_light_range(dest);
                vision_full_recalc = 1; /* in case range changed */
            }
-           new_ls->id.a_obj = dest;
+           new_ls->id = (genericptr_t) dest;
            new_ls->next = light_base;
            light_base = new_ls;
            dest->lamplit = 1;          /* now an active light source */
@@ -532,7 +528,7 @@ struct obj *src, *dest;
     if (src != dest) end_burn(src, TRUE);              /* extinguish candles */
 
     for (ls = light_base; ls; ls = ls->next)
-       if (ls->type == LS_OBJECT && ls->id.a_obj == dest) {
+       if (ls->type == LS_OBJECT && ls->id == (genericptr_t) dest) {
            ls->range = candle_light_range(dest);
            vision_full_recalc = 1;     /* in case range changed */
            break;
@@ -604,11 +600,11 @@ wiz_light_sources()
                    ls->x, ls->y, ls->range, ls->flags,
                    (ls->type == LS_OBJECT ? "obj" :
                     ls->type == LS_MONSTER ?
-                       (mon_is_local(ls->id.a_monst) ? "mon" :
-                        (ls->id.a_monst == &youmonst) ? "you" :
+                       (mon_is_local((struct monst *)ls->id) ? "mon" :
+                        ((struct monst *)ls->id == &youmonst) ? "you" :
                         "<m>") :               /* migrating monster */
                     "???"),
-                   fmt_ptr(ls->id.a_void));
+                   fmt_ptr(ls->id));
            putstr(win, 0, buf);
        }
     } else
index 7bba1e9622ac97968f1a54ab9b8608a04ee50dd0..86f991a34beca5565720a8d6f25280caeb44d50f 100644 (file)
@@ -716,7 +716,7 @@ xchar x, y; /* clone's preferred location or 0 (near mon) */
        place_monster(m2, m2->mx, m2->my);
        if (emits_light(m2->data))
            new_light_source(m2->mx, m2->my, emits_light(m2->data),
-                            LS_MONSTER, monst_to_any(m2));
+                            LS_MONSTER, (genericptr_t)m2);
        if (has_mname(mon)) {
                m2 = christen_monst(m2, MNAME(mon));
        } else if (mon->isshk) {
@@ -1025,7 +1025,7 @@ register int      mmflags;
        }
        if ((ct = emits_light(mtmp->data)) > 0)
                new_light_source(mtmp->mx, mtmp->my, ct,
-                                LS_MONSTER, monst_to_any(mtmp));
+                                LS_MONSTER, (genericptr_t)mtmp);
        mitem = 0;      /* extra inventory item for this monster */
 
        if (mndx == PM_VLAD_THE_IMPALER)
index cf0add298a67fd38df1c31fcf06c8e717034f82c..f8f917c33b6002afe012d80d6f03e10569adda07 100644 (file)
--- a/src/mon.c
+++ b/src/mon.c
@@ -1311,7 +1311,7 @@ register struct monst *mtmp, *mtmp2;
        /* since this is so rare, we don't have any `mon_move_light_source' */
        new_light_source(mtmp2->mx, mtmp2->my,
                         emits_light(mtmp2->data),
-                        LS_MONSTER, monst_to_any(mtmp2));
+                        LS_MONSTER, (genericptr_t)mtmp2);
        /* here we rely on the fact that `mtmp' hasn't actually been deleted */
        del_light_source(LS_MONSTER, (genericptr_t)mtmp);
     }
@@ -2623,7 +2623,7 @@ boolean msg;              /* "The oldmon turns into a newmon!" */
                del_light_source(LS_MONSTER, (genericptr_t)mtmp);
            if (emits_light(mtmp->data))
                new_light_source(mtmp->mx, mtmp->my, emits_light(mtmp->data),
-                                LS_MONSTER, monst_to_any(mtmp));
+                                LS_MONSTER, (genericptr_t)mtmp);
        }
        if (!mtmp->perminvis || pm_invisible(olddata))
            mtmp->perminvis = pm_invisible(mdat);
index 77bbf3d7fa0d7bfb4e7483d8b40d1e7857ef3f97..e8de4d48617a2e16d4d6819a08a9d100a0f110d7 100644 (file)
@@ -357,7 +357,7 @@ int psflags;
            if (new_light == 1) ++new_light;  /* otherwise it's undetectable */
            if (new_light)
                new_light_source(u.ux, u.uy, new_light,
-                                LS_MONSTER, monst_to_any(&youmonst));
+                                LS_MONSTER, (genericptr_t)&youmonst);
        }
 }