region save/restore

When shortening/splitting wide lines I noticed that the save and
restore code for regions had a bunch of those and they could be
shortened by using an intermediate variable.  Easier to read too.

Also, change several 'unsigned int' to just 'unsigned' as is used in
most of the rest of the code.

At one point I omitted a (genericptr_t) cast (which should no longer
be necessary...) and discovered that bwrite() wasn't declaring the
input buffer it never modifies as 'const'.
This commit is contained in:
PatR
2021-12-19 19:31:19 -08:00
parent 7ccc195155
commit 63e47d8ac8
4 changed files with 153 additions and 181 deletions
+6 -6
View File
@@ -2299,12 +2299,12 @@ extern void closelog(NHFILE *);
/* ### sfstruct.c ### */ /* ### sfstruct.c ### */
#ifndef TRACEBUFFERING #ifndef TRACEBUFFERING
extern void newread(NHFILE *, int, int, genericptr_t, unsigned int); extern void newread(NHFILE *, int, int, genericptr_t, unsigned);
extern void bufon(int); extern void bufon(int);
extern void bufoff(int); extern void bufoff(int);
extern void bflush(int); extern void bflush(int);
extern void bwrite(int, genericptr_t, unsigned int); extern void bwrite(int, const genericptr_t, unsigned);
extern void mread(int, genericptr_t, unsigned int); extern void mread(int, genericptr_t, unsigned);
extern void minit(void); extern void minit(void);
extern void bclose(int); extern void bclose(int);
#else #else
@@ -2319,11 +2319,11 @@ extern void bclose(int);
extern void Bufon(int, const char *, int); extern void Bufon(int, const char *, int);
extern void Bufoff(int, const char *, int); extern void Bufoff(int, const char *, int);
extern void Bflush(int, const char *, int); extern void Bflush(int, const char *, int);
extern void Bwrite(int, genericptr_t, unsigned int, const char *, int); extern void Bwrite(int, const genericptr_t, unsigned, const char *, int);
extern void Bread(int, genericptr_t, unsigned int, const char *, int); extern void Bread(int, genericptr_t, unsigned, const char *, int);
extern void Binit(const char *, int); extern void Binit(const char *, int);
extern void Bclose(int, const char *, int); extern void Bclose(int, const char *, int);
extern void Mread(int, genericptr_t, unsigned int, const char *, int); extern void Mread(int, genericptr_t, unsigned, const char *, int);
extern void Minit(const char *, int); extern void Minit(const char *, int);
#if defined(ZEROCOMP) #if defined(ZEROCOMP)
extern void zerocomp_bclose(int); extern void zerocomp_bclose(int);
+25 -26
View File
@@ -30,37 +30,36 @@ typedef boolean (*callback_proc)(genericptr_t, genericptr_t);
*/ */
typedef struct { typedef struct {
NhRect bounding_box; /* Bounding box of the region */ NhRect bounding_box; /* Bounding box of the region */
NhRect *rects; /* Rectangles composing the region */ NhRect *rects; /* Rectangles composing the region */
short nrects; /* Number of rectangles */ short nrects; /* Number of rectangles */
boolean attach_2_u; /* Region attached to player ? */ boolean attach_2_u; /* Region attached to player ? */
unsigned int attach_2_m; /* Region attached to monster ? */ unsigned attach_2_m; /* Region attached to monster ? */
/*struct obj *attach_2_o;*/ /* Region attached to object ? UNUSED YET */ /*struct obj *attach_2_o;*/ /* Region attached to object ? UNUSED YET */
const char *enter_msg; /* Message when entering */ const char *enter_msg; /* Message when entering */
const char *leave_msg; /* Message when leaving */ const char *leave_msg; /* Message when leaving */
long ttl; /* Time to live. -1 is forever */ long ttl; /* Time to live. -1 is forever */
short expire_f; /* Function to call when region's ttl expire */ short expire_f; /* Function to call when region's ttl expire */
short can_enter_f; /* Function to call to check whether the player short can_enter_f; /* Function to call to check whether the player
can, or can not, enter the region */ * can, or can not, enter the region */
short enter_f; /* Function to call when the player enters*/ short enter_f; /* Function to call when the player enters*/
short can_leave_f; /* Function to call to check whether the player short can_leave_f; /* Function to call to check whether the player
can, or can not, leave the region */ * can, or can not, leave the region */
short leave_f; /* Function to call when the player leaves */ short leave_f; /* Function to call when the player leaves */
short inside_f; /* Function to call every turn if player's short inside_f; /* Function to call every turn if player's inside */
inside */ unsigned player_flags; /* (see above) */
unsigned int player_flags; /* (see above) */ unsigned *monsters; /* Monsters currently inside this region */
unsigned int *monsters; /* Monsters currently inside this region */ short n_monst; /* Number of monsters inside this region */
short n_monst; /* Number of monsters inside this region */ short max_monst; /* Maximum number of monsters that can be
short max_monst; /* Maximum number of monsters that can be * listed without having to grow the array */
listed without having to grow the array */
#define MONST_INC 5 #define MONST_INC 5
/* Should probably do the same thing about objects */ /* Should probably do the same thing about objects */
boolean visible; /* Is the region visible ? */ boolean visible; /* Is the region visible ? */
int glyph; /* Which glyph to use if visible */ int glyph; /* Which glyph to use if visible */
anything arg; /* Optional user argument (Ex: strength of anything arg; /* Optional user argument (Ex: strength of
force field, damage of a fire zone, ...*/ * force field, damage of a fire zone, ...*/
} NhRegion; } NhRegion;
#endif /* REGION_H */ #endif /* REGION_H */
+103 -133
View File
@@ -49,7 +49,7 @@ static const callback_proc callbacks[] = {
/* Should be inlined. */ /* Should be inlined. */
boolean boolean
inside_rect(NhRect* r, int x, int y) inside_rect(NhRect *r, int x, int y)
{ {
return (boolean) (x >= r->lx && x <= r->hx && y >= r->ly && y <= r->hy); return (boolean) (x >= r->lx && x <= r->hx && y >= r->ly && y <= r->hy);
} }
@@ -58,7 +58,7 @@ inside_rect(NhRect* r, int x, int y)
* Check if a point is inside a region. * Check if a point is inside a region.
*/ */
boolean boolean
inside_region(NhRegion* reg, int x, int y) inside_region(NhRegion *reg, int x, int y)
{ {
int i; int i;
@@ -74,7 +74,7 @@ inside_region(NhRegion* reg, int x, int y)
* Create a region. It does not activate it. * Create a region. It does not activate it.
*/ */
NhRegion * NhRegion *
create_region(NhRect* rects, int nrect) create_region(NhRect *rects, int nrect)
{ {
int i; int i;
NhRegion *reg; NhRegion *reg;
@@ -119,7 +119,7 @@ create_region(NhRect* rects, int nrect)
clear_heros_fault(reg); clear_heros_fault(reg);
reg->n_monst = 0; reg->n_monst = 0;
reg->max_monst = 0; reg->max_monst = 0;
reg->monsters = (unsigned int *) 0; reg->monsters = (unsigned *) 0;
reg->arg = cg.zeroany; reg->arg = cg.zeroany;
return reg; return reg;
} }
@@ -128,7 +128,7 @@ create_region(NhRect* rects, int nrect)
* Add rectangle to region. * Add rectangle to region.
*/ */
void void
add_rect_to_reg(NhRegion* reg, NhRect* rect) add_rect_to_reg(NhRegion *reg, NhRect *rect)
{ {
NhRect *tmp_rect; NhRect *tmp_rect;
@@ -156,7 +156,7 @@ add_rect_to_reg(NhRegion* reg, NhRect* rect)
* Add a monster to the region * Add a monster to the region
*/ */
void void
add_mon_to_reg(NhRegion* reg, struct monst* mon) add_mon_to_reg(NhRegion *reg, struct monst *mon)
{ {
int i; int i;
unsigned *tmp_m; unsigned *tmp_m;
@@ -179,7 +179,7 @@ add_mon_to_reg(NhRegion* reg, struct monst* mon)
* Remove a monster from the region list (it left or died...) * Remove a monster from the region list (it left or died...)
*/ */
void void
remove_mon_from_reg(NhRegion* reg, struct monst* mon) remove_mon_from_reg(NhRegion *reg, struct monst *mon)
{ {
register int i; register int i;
@@ -197,7 +197,7 @@ remove_mon_from_reg(NhRegion* reg, struct monst* mon)
* than to check for coordinates. * than to check for coordinates.
*/ */
boolean boolean
mon_in_region(NhRegion* reg, struct monst* mon) mon_in_region(NhRegion *reg, struct monst *mon)
{ {
int i; int i;
@@ -214,10 +214,11 @@ mon_in_region(NhRegion* reg, struct monst* mon)
* Clone (make a standalone copy) the region. * Clone (make a standalone copy) the region.
*/ */
NhRegion * NhRegion *
clone_region(reg) clone_region(NhRegion *reg)
NhRegion *reg;
{ {
NhRegion *ret_reg; NhRegion *ret_reg;
unsigned *m_id_list;
short i;
ret_reg = create_region(reg->rects, reg->nrects); ret_reg = create_region(reg->rects, reg->nrects);
ret_reg->ttl = reg->ttl; ret_reg->ttl = reg->ttl;
@@ -231,14 +232,14 @@ NhRegion *reg;
ret_reg->can_leave_f = reg->can_leave_f; ret_reg->can_leave_f = reg->can_leave_f;
ret_reg->player_flags = reg->player_flags; /* set/clear_hero_inside,&c*/ ret_reg->player_flags = reg->player_flags; /* set/clear_hero_inside,&c*/
ret_reg->n_monst = reg->n_monst; ret_reg->n_monst = reg->n_monst;
if (reg->n_monst > 0) { ret_reg->max_monst = reg->max_monst;
ret_reg->monsters = (unsigned int *) if (reg->max_monst > 0) {
alloc((sizeof (unsigned)) * reg->n_monst); m_id_list = (unsigned *) alloc(reg->max_monst * sizeof (unsigned));
(void) memcpy((genericptr_t) ret_reg->monsters, for (i = 0; i < reg->max_monst; ++i)
(genericptr_t) reg->monsters, m_id_list[i] = reg->monsters[i];
sizeof (unsigned) * reg->n_monst);
} else } else
ret_reg->monsters = (unsigned int *) 0; m_id_list = (unsigned *) 0;
ret_reg->monsters = m_id_list;
return ret_reg; return ret_reg;
} }
@@ -248,7 +249,7 @@ NhRegion *reg;
* Free mem from region. * Free mem from region.
*/ */
void void
free_region(NhRegion* reg) free_region(NhRegion *reg)
{ {
if (reg) { if (reg) {
if (reg->rects) if (reg->rects)
@@ -268,7 +269,7 @@ free_region(NhRegion* reg)
* This actually activates the region. * This actually activates the region.
*/ */
void void
add_region(NhRegion* reg) add_region(NhRegion *reg)
{ {
NhRegion **tmp_reg; NhRegion **tmp_reg;
int i, j; int i, j;
@@ -311,7 +312,7 @@ add_region(NhRegion* reg)
* Remove a region from the list & free it. * Remove a region from the list & free it.
*/ */
void void
remove_region(NhRegion* reg) remove_region(NhRegion *reg)
{ {
register int i, x, y; register int i, x, y;
@@ -465,7 +466,7 @@ in_out_region(xchar x, xchar y)
* check whether a monster enters/leaves one or more regions. * check whether a monster enters/leaves one or more regions.
*/ */
boolean boolean
m_in_out_region(struct monst* mon, xchar x, xchar y) m_in_out_region(struct monst *mon, xchar x, xchar y)
{ {
int i, f_indx = 0; int i, f_indx = 0;
@@ -530,7 +531,7 @@ update_player_regions(void)
* Ditto for a specified monster. * Ditto for a specified monster.
*/ */
void void
update_monster_region(struct monst* mon) update_monster_region(struct monst *mon)
{ {
register int i; register int i;
@@ -570,7 +571,7 @@ struct monst *monold, *monnew;
* Remove monster from all regions it was in (ie monster just died) * Remove monster from all regions it was in (ie monster just died)
*/ */
void void
remove_mon_from_regions(struct monst* mon) remove_mon_from_regions(struct monst *mon)
{ {
register int i; register int i;
@@ -600,7 +601,7 @@ visible_region_at(xchar x, xchar y)
} }
void void
show_region(NhRegion* reg, xchar x, xchar y) show_region(NhRegion *reg, xchar x, xchar y)
{ {
show_glyph(x, y, reg->glyph); show_glyph(x, y, reg->glyph);
} }
@@ -609,8 +610,9 @@ show_region(NhRegion* reg, xchar x, xchar y)
* save_regions : * save_regions :
*/ */
void void
save_regions(NHFILE* nhfp) save_regions(NHFILE *nhfp)
{ {
NhRegion *r;
int i, j; int i, j;
unsigned n; unsigned n;
@@ -622,75 +624,56 @@ save_regions(NHFILE* nhfp)
bwrite(nhfp->fd, (genericptr_t) &g.n_regions, sizeof (g.n_regions)); bwrite(nhfp->fd, (genericptr_t) &g.n_regions, sizeof (g.n_regions));
} }
for (i = 0; i < g.n_regions; i++) { for (i = 0; i < g.n_regions; i++) {
r = g.regions[i];
if (nhfp->structlevel) { if (nhfp->structlevel) {
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->bounding_box, bwrite(nhfp->fd, (genericptr_t) &r->bounding_box, sizeof (NhRect));
sizeof (NhRect)); bwrite(nhfp->fd, (genericptr_t) &r->nrects, sizeof (short));
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->nrects,
sizeof (short));
} }
for (j = 0; j < g.regions[i]->nrects; j++) { for (j = 0; j < r->nrects; j++) {
if (nhfp->structlevel) if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->rects[j], bwrite(nhfp->fd, (genericptr_t) &r->rects[j], sizeof (NhRect));
sizeof (NhRect));
} }
if (nhfp->structlevel) if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->attach_2_u, bwrite(nhfp->fd, (genericptr_t) &r->attach_2_u, sizeof (boolean));
sizeof (boolean));
n = 0;
if (nhfp->structlevel) if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->attach_2_m, bwrite(nhfp->fd, (genericptr_t) &r->attach_2_m, sizeof (unsigned));
sizeof (unsigned));
n = !g.regions[i]->enter_msg ? 0 : strlen(g.regions[i]->enter_msg); n = !r->enter_msg ? 0U : (unsigned) strlen(r->enter_msg);
if (nhfp->structlevel) if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &n, sizeof n); bwrite(nhfp->fd, (genericptr_t) &n, sizeof n);
if (n > 0) { if (n > 0) {
if (nhfp->structlevel) if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) g.regions[i]->enter_msg, n); bwrite(nhfp->fd, (genericptr_t) r->enter_msg, n);
} }
n = !g.regions[i]->leave_msg ? 0 : strlen(g.regions[i]->leave_msg); n = !r->leave_msg ? 0U : (unsigned) strlen(r->leave_msg);
if (nhfp->structlevel) if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &n, sizeof n); bwrite(nhfp->fd, (genericptr_t) &n, sizeof n);
if (n > 0) { if (n > 0) {
if (nhfp->structlevel) { if (nhfp->structlevel) {
bwrite(nhfp->fd, (genericptr_t) g.regions[i]->leave_msg, n); bwrite(nhfp->fd, (genericptr_t) r->leave_msg, n);
} }
} }
if (nhfp->structlevel) { if (nhfp->structlevel) {
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->ttl, bwrite(nhfp->fd, (genericptr_t) &r->ttl, sizeof (long));
sizeof (long)); bwrite(nhfp->fd, (genericptr_t) &r->expire_f, sizeof (short));
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->expire_f, bwrite(nhfp->fd, (genericptr_t) &r->can_enter_f, sizeof (short));
sizeof (short)); bwrite(nhfp->fd, (genericptr_t) &r->enter_f, sizeof (short));
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->can_enter_f, bwrite(nhfp->fd, (genericptr_t) &r->can_leave_f, sizeof (short));
sizeof (short)); bwrite(nhfp->fd, (genericptr_t) &r->leave_f, sizeof (short));
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->enter_f, bwrite(nhfp->fd, (genericptr_t) &r->inside_f, sizeof (short));
sizeof (short)); bwrite(nhfp->fd, (genericptr_t) &r->player_flags,
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->can_leave_f, sizeof (unsigned));
sizeof (short)); bwrite(nhfp->fd, (genericptr_t) &r->n_monst, sizeof (short));
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->leave_f,
sizeof (short));
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->inside_f,
sizeof (short));
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->player_flags,
sizeof (unsigned int));
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->n_monst,
sizeof (short));
} }
for (j = 0; j < g.regions[i]->n_monst; j++) { for (j = 0; j < r->n_monst; j++) {
if (nhfp->structlevel) if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->monsters[j], bwrite(nhfp->fd, (genericptr_t) &r->monsters[j],
sizeof (unsigned)); sizeof (unsigned));
} }
if (nhfp->structlevel) { if (nhfp->structlevel) {
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->visible, bwrite(nhfp->fd, (genericptr_t) &r->visible, sizeof (boolean));
sizeof (boolean)); bwrite(nhfp->fd, (genericptr_t) &r->glyph, sizeof (int));
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->glyph, bwrite(nhfp->fd, (genericptr_t) &r->arg, sizeof (anything));
sizeof (int));
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->arg,
sizeof (anything));
} }
} }
@@ -700,8 +683,9 @@ save_regions(NHFILE* nhfp)
} }
void void
rest_regions(NHFILE* nhfp) rest_regions(NHFILE *nhfp)
{ {
NhRegion *r;
int i, j; int i, j;
unsigned n = 0; unsigned n = 0;
long tmstamp = 0L; long tmstamp = 0L;
@@ -723,26 +707,22 @@ rest_regions(NHFILE* nhfp)
if (g.n_regions > 0) if (g.n_regions > 0)
g.regions = (NhRegion **) alloc(sizeof (NhRegion *) * g.n_regions); g.regions = (NhRegion **) alloc(sizeof (NhRegion *) * g.n_regions);
for (i = 0; i < g.n_regions; i++) { for (i = 0; i < g.n_regions; i++) {
g.regions[i] = (NhRegion *) alloc(sizeof (NhRegion)); r = g.regions[i] = (NhRegion *) alloc(sizeof (NhRegion));
if (nhfp->structlevel) { if (nhfp->structlevel) {
mread(nhfp->fd, (genericptr_t) &g.regions[i]->bounding_box, mread(nhfp->fd, (genericptr_t) &r->bounding_box, sizeof (NhRect));
sizeof (NhRect)); mread(nhfp->fd, (genericptr_t) &r->nrects, sizeof (short));
mread(nhfp->fd, (genericptr_t) &g.regions[i]->nrects,
sizeof (short));
} }
if (g.regions[i]->nrects > 0) if (r->nrects > 0)
g.regions[i]->rects = (NhRect *) alloc( r->rects = (NhRect *) alloc(r->nrects * sizeof (NhRect));
sizeof (NhRect) * g.regions[i]->nrects); else
for (j = 0; j < g.regions[i]->nrects; j++) { r->rects = (NhRect *) 0;
for (j = 0; j < r->nrects; j++) {
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) &g.regions[i]->rects[j], mread(nhfp->fd, (genericptr_t) &r->rects[j], sizeof (NhRect));
sizeof (NhRect));
} }
if (nhfp->structlevel) { if (nhfp->structlevel) {
mread(nhfp->fd, (genericptr_t) &g.regions[i]->attach_2_u, mread(nhfp->fd, (genericptr_t) &r->attach_2_u, sizeof (boolean));
sizeof (boolean)); mread(nhfp->fd, (genericptr_t) &r->attach_2_m, sizeof (unsigned));
mread(nhfp->fd, (genericptr_t) &g.regions[i]->attach_2_m,
sizeof (unsigned));
} }
if (nhfp->structlevel) if (nhfp->structlevel)
@@ -753,9 +733,9 @@ rest_regions(NHFILE* nhfp)
mread(nhfp->fd, (genericptr_t) msg_buf, n); mread(nhfp->fd, (genericptr_t) msg_buf, n);
} }
msg_buf[n] = '\0'; msg_buf[n] = '\0';
g.regions[i]->enter_msg = (const char *) msg_buf;
} else } else
g.regions[i]->enter_msg = (const char *)0; msg_buf = (char *) 0;
r->enter_msg = (const char *) msg_buf;
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) &n, sizeof n); mread(nhfp->fd, (genericptr_t) &n, sizeof n);
@@ -765,66 +745,56 @@ rest_regions(NHFILE* nhfp)
mread(nhfp->fd, (genericptr_t) msg_buf, n); mread(nhfp->fd, (genericptr_t) msg_buf, n);
} }
msg_buf[n] = '\0'; msg_buf[n] = '\0';
g.regions[i]->leave_msg = (const char *) msg_buf;
} else } else
g.regions[i]->leave_msg = (const char *)0; msg_buf = (char *) 0;
r->leave_msg = (const char *) msg_buf;
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) &g.regions[i]->ttl, sizeof (long)); mread(nhfp->fd, (genericptr_t) &r->ttl, sizeof (long));
/* check for expired region */ /* check for expired region */
if (g.regions[i]->ttl >= 0L) if (r->ttl >= 0L)
g.regions[i]->ttl = ((g.regions[i]->ttl > tmstamp) r->ttl = (r->ttl > tmstamp) ? r->ttl - tmstamp : 0L;
? g.regions[i]->ttl - tmstamp
: 0L);
if (nhfp->structlevel) { if (nhfp->structlevel) {
mread(nhfp->fd, (genericptr_t) &g.regions[i]->expire_f, mread(nhfp->fd, (genericptr_t) &r->expire_f, sizeof (short));
sizeof (short)); mread(nhfp->fd, (genericptr_t) &r->can_enter_f, sizeof (short));
mread(nhfp->fd, (genericptr_t) &g.regions[i]->can_enter_f, mread(nhfp->fd, (genericptr_t) &r->enter_f, sizeof (short));
sizeof (short)); mread(nhfp->fd, (genericptr_t) &r->can_leave_f, sizeof (short));
mread(nhfp->fd, (genericptr_t) &g.regions[i]->enter_f, mread(nhfp->fd, (genericptr_t) &r->leave_f, sizeof (short));
sizeof (short)); mread(nhfp->fd, (genericptr_t) &r->inside_f, sizeof (short));
mread(nhfp->fd, (genericptr_t) &g.regions[i]->can_leave_f, mread(nhfp->fd, (genericptr_t) &r->player_flags,
sizeof (short)); sizeof (unsigned));
mread(nhfp->fd, (genericptr_t) &g.regions[i]->leave_f,
sizeof (short));
mread(nhfp->fd, (genericptr_t) &g.regions[i]->inside_f,
sizeof (short));
mread(nhfp->fd, (genericptr_t) &g.regions[i]->player_flags,
sizeof (unsigned int));
} }
if (ghostly) { /* settings pertained to old player */ if (ghostly) { /* settings pertained to old player */
clear_hero_inside(g.regions[i]); clear_hero_inside(r);
clear_heros_fault(g.regions[i]); clear_heros_fault(r);
} }
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) &g.regions[i]->n_monst, mread(nhfp->fd, (genericptr_t) &r->n_monst, sizeof (short));
sizeof (short)); if (r->n_monst > 0)
if (g.regions[i]->n_monst > 0) r->monsters = (unsigned *) alloc(r->n_monst * sizeof (unsigned));
g.regions[i]->monsters = (unsigned *) alloc(
sizeof (unsigned) * g.regions[i]->n_monst);
else else
g.regions[i]->monsters = (unsigned int *)0; r->monsters = (unsigned *) 0;
g.regions[i]->max_monst = g.regions[i]->n_monst; r->max_monst = r->n_monst;
for (j = 0; j < g.regions[i]->n_monst; j++) { for (j = 0; j < r->n_monst; j++) {
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) &g.regions[i]->monsters[j], mread(nhfp->fd, (genericptr_t) &r->monsters[j],
sizeof (unsigned)); sizeof (unsigned));
} }
if (nhfp->structlevel) { if (nhfp->structlevel) {
mread(nhfp->fd, (genericptr_t) &g.regions[i]->visible, mread(nhfp->fd, (genericptr_t) &r->visible, sizeof (boolean));
sizeof (boolean)); mread(nhfp->fd, (genericptr_t) &r->glyph, sizeof (int));
mread(nhfp->fd, (genericptr_t) &g.regions[i]->glyph, sizeof (int)); mread(nhfp->fd, (genericptr_t) &r->arg, sizeof (anything));
mread(nhfp->fd, (genericptr_t) &g.regions[i]->arg,
sizeof (anything));
} }
} }
/* remove expired regions, do not trigger the expire_f callback (yet!); /* remove expired regions, do not trigger the expire_f callback (yet!);
also update monster lists if this data is coming from a bones file */ also update monster lists if this data is coming from a bones file */
for (i = g.n_regions - 1; i >= 0; i--) for (i = g.n_regions - 1; i >= 0; i--) {
if (g.regions[i]->ttl == 0L) r = g.regions[i];
remove_region(g.regions[i]); if (r->ttl == 0L)
else if (ghostly && g.regions[i]->n_monst > 0) remove_region(r);
reset_region_mids(g.regions[i]); else if (ghostly && r->n_monst > 0)
reset_region_mids(r);
}
} }
DISABLE_WARNING_FORMAT_NONLITERAL DISABLE_WARNING_FORMAT_NONLITERAL
@@ -860,7 +830,7 @@ RESTORE_WARNING_FORMAT_NONLITERAL
/* update monster IDs for region being loaded from bones; `ghostly' implied */ /* update monster IDs for region being loaded from bones; `ghostly' implied */
static void static void
reset_region_mids(NhRegion* reg) reset_region_mids(NhRegion *reg)
{ {
int i = 0, n = reg->n_monst; int i = 0, n = reg->n_monst;
unsigned *mid_list = reg->monsters; unsigned *mid_list = reg->monsters;
@@ -889,7 +859,7 @@ reset_region_mids(NhRegion* reg)
NhRegion * NhRegion *
create_msg_region( create_msg_region(
xchar x, xchar y, xchar w, xchar h, xchar x, xchar y, xchar w, xchar h,
const char* msg_enter, const char* msg_leave) const char *msg_enter, const char *msg_leave)
{ {
NhRect tmprect; NhRect tmprect;
NhRegion *reg = create_region((NhRect *) 0, 0); NhRegion *reg = create_region((NhRect *) 0, 0);
+19 -16
View File
@@ -32,12 +32,12 @@
#ifdef minit #ifdef minit
#undef minit #undef minit
#endif #endif
void newread(NHFILE *, int, int, genericptr_t, unsigned int); void newread(NHFILE *, int, int, genericptr_t, unsigned);
void bufon(int); void bufon(int);
void bufoff(int); void bufoff(int);
void bflush(int); void bflush(int);
void bwrite(int, genericptr_t, unsigned int); void bwrite(int, const genericptr_t, unsigned);
void mread(int, genericptr_t, unsigned int); void mread(int, genericptr_t, unsigned);
void minit(void); void minit(void);
void bclose(int); void bclose(int);
#endif /* TRACE_BUFFERING */ #endif /* TRACE_BUFFERING */
@@ -48,7 +48,7 @@ static int getidx(int, int);
#endif #endif
struct restore_info restoreinfo = { struct restore_info restoreinfo = {
"externalcomp", 0, "externalcomp", 0,
}; };
#define MAXFD 5 #define MAXFD 5
@@ -197,7 +197,7 @@ bflush(int fd)
} }
void void
bwrite(register int fd, register genericptr_t loc, register unsigned num) bwrite(int fd, const genericptr_t loc, unsigned num)
{ {
boolean failed; boolean failed;
int idx = getidx(fd, NOFLG); int idx = getidx(fd, NOFLG);
@@ -237,9 +237,9 @@ minit(void)
} }
void void
mread(register int fd, register genericptr_t buf, register unsigned int len) mread(int fd, genericptr_t buf, unsigned len)
{ {
register int rlen; int rlen;
#if defined(BSD) || defined(ULTRIX) #if defined(BSD) || defined(ULTRIX)
#define readLenType int #define readLenType int
#else /* e.g. SYSV, __TURBOC__ */ #else /* e.g. SYSV, __TURBOC__ */
@@ -269,9 +269,12 @@ static FILE *tracefile;
#define TFILE "trace-buffering.log" #define TFILE "trace-buffering.log"
#define TRACE(xx) \ #define TRACE(xx) \
tracefile = fopen(TFILE, "a"); \ do { \
(void) fprintf(tracefile, "%s from %s:%d (%d)\n", __FUNCTION__, fncname, linenum, xx); \ tracefile = fopen(TFILE, "a"); \
fclose(tracefile); (void) fprintf(tracefile, "%s from %s:%d (%d)\n", \
__FUNCTION__, fncname, linenum, xx); \
fclose(tracefile); \
} while (0)
void void
Bufon(int fd, const char *fncname, int linenum) Bufon(int fd, const char *fncname, int linenum)
@@ -296,9 +299,9 @@ Bflush(int fd, const char* fncname, int linenum)
void void
Bwrite( Bwrite(
register int fd, int fd,
register genericptr_t loc, const genericptr_t loc,
register unsigned num, unsigned num,
const char *fncname, const char *fncname,
int linenum) int linenum)
{ {
@@ -322,9 +325,9 @@ Minit(const char*fncname, int linenum)
void void
Mread( Mread(
register int fd, int fd,
register genericptr_t buf, genericptr_t buf,
register unsigned int len, unsigned len,
const char *fncname, const char *fncname,
int linenum) int linenum)
{ {