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

View File

@@ -49,7 +49,7 @@ static const callback_proc callbacks[] = {
/* Should be inlined. */
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);
}
@@ -58,7 +58,7 @@ inside_rect(NhRect* r, int x, int y)
* Check if a point is inside a region.
*/
boolean
inside_region(NhRegion* reg, int x, int y)
inside_region(NhRegion *reg, int x, int y)
{
int i;
@@ -74,7 +74,7 @@ inside_region(NhRegion* reg, int x, int y)
* Create a region. It does not activate it.
*/
NhRegion *
create_region(NhRect* rects, int nrect)
create_region(NhRect *rects, int nrect)
{
int i;
NhRegion *reg;
@@ -119,7 +119,7 @@ create_region(NhRect* rects, int nrect)
clear_heros_fault(reg);
reg->n_monst = 0;
reg->max_monst = 0;
reg->monsters = (unsigned int *) 0;
reg->monsters = (unsigned *) 0;
reg->arg = cg.zeroany;
return reg;
}
@@ -128,7 +128,7 @@ create_region(NhRect* rects, int nrect)
* Add rectangle to region.
*/
void
add_rect_to_reg(NhRegion* reg, NhRect* rect)
add_rect_to_reg(NhRegion *reg, NhRect *rect)
{
NhRect *tmp_rect;
@@ -156,7 +156,7 @@ add_rect_to_reg(NhRegion* reg, NhRect* rect)
* Add a monster to the region
*/
void
add_mon_to_reg(NhRegion* reg, struct monst* mon)
add_mon_to_reg(NhRegion *reg, struct monst *mon)
{
int i;
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...)
*/
void
remove_mon_from_reg(NhRegion* reg, struct monst* mon)
remove_mon_from_reg(NhRegion *reg, struct monst *mon)
{
register int i;
@@ -197,7 +197,7 @@ remove_mon_from_reg(NhRegion* reg, struct monst* mon)
* than to check for coordinates.
*/
boolean
mon_in_region(NhRegion* reg, struct monst* mon)
mon_in_region(NhRegion *reg, struct monst *mon)
{
int i;
@@ -214,10 +214,11 @@ mon_in_region(NhRegion* reg, struct monst* mon)
* Clone (make a standalone copy) the region.
*/
NhRegion *
clone_region(reg)
NhRegion *reg;
clone_region(NhRegion *reg)
{
NhRegion *ret_reg;
unsigned *m_id_list;
short i;
ret_reg = create_region(reg->rects, reg->nrects);
ret_reg->ttl = reg->ttl;
@@ -231,14 +232,14 @@ NhRegion *reg;
ret_reg->can_leave_f = reg->can_leave_f;
ret_reg->player_flags = reg->player_flags; /* set/clear_hero_inside,&c*/
ret_reg->n_monst = reg->n_monst;
if (reg->n_monst > 0) {
ret_reg->monsters = (unsigned int *)
alloc((sizeof (unsigned)) * reg->n_monst);
(void) memcpy((genericptr_t) ret_reg->monsters,
(genericptr_t) reg->monsters,
sizeof (unsigned) * reg->n_monst);
ret_reg->max_monst = reg->max_monst;
if (reg->max_monst > 0) {
m_id_list = (unsigned *) alloc(reg->max_monst * sizeof (unsigned));
for (i = 0; i < reg->max_monst; ++i)
m_id_list[i] = reg->monsters[i];
} else
ret_reg->monsters = (unsigned int *) 0;
m_id_list = (unsigned *) 0;
ret_reg->monsters = m_id_list;
return ret_reg;
}
@@ -248,7 +249,7 @@ NhRegion *reg;
* Free mem from region.
*/
void
free_region(NhRegion* reg)
free_region(NhRegion *reg)
{
if (reg) {
if (reg->rects)
@@ -268,7 +269,7 @@ free_region(NhRegion* reg)
* This actually activates the region.
*/
void
add_region(NhRegion* reg)
add_region(NhRegion *reg)
{
NhRegion **tmp_reg;
int i, j;
@@ -311,7 +312,7 @@ add_region(NhRegion* reg)
* Remove a region from the list & free it.
*/
void
remove_region(NhRegion* reg)
remove_region(NhRegion *reg)
{
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.
*/
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;
@@ -530,7 +531,7 @@ update_player_regions(void)
* Ditto for a specified monster.
*/
void
update_monster_region(struct monst* mon)
update_monster_region(struct monst *mon)
{
register int i;
@@ -570,7 +571,7 @@ struct monst *monold, *monnew;
* Remove monster from all regions it was in (ie monster just died)
*/
void
remove_mon_from_regions(struct monst* mon)
remove_mon_from_regions(struct monst *mon)
{
register int i;
@@ -600,7 +601,7 @@ visible_region_at(xchar x, xchar y)
}
void
show_region(NhRegion* reg, xchar x, xchar y)
show_region(NhRegion *reg, xchar x, xchar y)
{
show_glyph(x, y, reg->glyph);
}
@@ -609,8 +610,9 @@ show_region(NhRegion* reg, xchar x, xchar y)
* save_regions :
*/
void
save_regions(NHFILE* nhfp)
save_regions(NHFILE *nhfp)
{
NhRegion *r;
int i, j;
unsigned n;
@@ -622,75 +624,56 @@ save_regions(NHFILE* nhfp)
bwrite(nhfp->fd, (genericptr_t) &g.n_regions, sizeof (g.n_regions));
}
for (i = 0; i < g.n_regions; i++) {
r = g.regions[i];
if (nhfp->structlevel) {
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->bounding_box,
sizeof (NhRect));
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->nrects,
sizeof (short));
bwrite(nhfp->fd, (genericptr_t) &r->bounding_box, sizeof (NhRect));
bwrite(nhfp->fd, (genericptr_t) &r->nrects, sizeof (short));
}
for (j = 0; j < g.regions[i]->nrects; j++) {
for (j = 0; j < r->nrects; j++) {
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->rects[j],
sizeof (NhRect));
bwrite(nhfp->fd, (genericptr_t) &r->rects[j], sizeof (NhRect));
}
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->attach_2_u,
sizeof (boolean));
n = 0;
bwrite(nhfp->fd, (genericptr_t) &r->attach_2_u, sizeof (boolean));
if (nhfp->structlevel)
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->attach_2_m,
sizeof (unsigned));
bwrite(nhfp->fd, (genericptr_t) &r->attach_2_m, 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)
bwrite(nhfp->fd, (genericptr_t) &n, sizeof n);
if (n > 0) {
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)
bwrite(nhfp->fd, (genericptr_t) &n, sizeof n);
if (n > 0) {
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) {
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->ttl,
sizeof (long));
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->expire_f,
sizeof (short));
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->can_enter_f,
sizeof (short));
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->enter_f,
sizeof (short));
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->can_leave_f,
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));
bwrite(nhfp->fd, (genericptr_t) &r->ttl, sizeof (long));
bwrite(nhfp->fd, (genericptr_t) &r->expire_f, sizeof (short));
bwrite(nhfp->fd, (genericptr_t) &r->can_enter_f, sizeof (short));
bwrite(nhfp->fd, (genericptr_t) &r->enter_f, sizeof (short));
bwrite(nhfp->fd, (genericptr_t) &r->can_leave_f, sizeof (short));
bwrite(nhfp->fd, (genericptr_t) &r->leave_f, sizeof (short));
bwrite(nhfp->fd, (genericptr_t) &r->inside_f, sizeof (short));
bwrite(nhfp->fd, (genericptr_t) &r->player_flags,
sizeof (unsigned));
bwrite(nhfp->fd, (genericptr_t) &r->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)
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->monsters[j],
bwrite(nhfp->fd, (genericptr_t) &r->monsters[j],
sizeof (unsigned));
}
if (nhfp->structlevel) {
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->visible,
sizeof (boolean));
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->glyph,
sizeof (int));
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->arg,
sizeof (anything));
bwrite(nhfp->fd, (genericptr_t) &r->visible, sizeof (boolean));
bwrite(nhfp->fd, (genericptr_t) &r->glyph, sizeof (int));
bwrite(nhfp->fd, (genericptr_t) &r->arg, sizeof (anything));
}
}
@@ -700,8 +683,9 @@ save_regions(NHFILE* nhfp)
}
void
rest_regions(NHFILE* nhfp)
rest_regions(NHFILE *nhfp)
{
NhRegion *r;
int i, j;
unsigned n = 0;
long tmstamp = 0L;
@@ -723,26 +707,22 @@ rest_regions(NHFILE* nhfp)
if (g.n_regions > 0)
g.regions = (NhRegion **) alloc(sizeof (NhRegion *) * g.n_regions);
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) {
mread(nhfp->fd, (genericptr_t) &g.regions[i]->bounding_box,
sizeof (NhRect));
mread(nhfp->fd, (genericptr_t) &g.regions[i]->nrects,
sizeof (short));
mread(nhfp->fd, (genericptr_t) &r->bounding_box, sizeof (NhRect));
mread(nhfp->fd, (genericptr_t) &r->nrects, sizeof (short));
}
if (g.regions[i]->nrects > 0)
g.regions[i]->rects = (NhRect *) alloc(
sizeof (NhRect) * g.regions[i]->nrects);
for (j = 0; j < g.regions[i]->nrects; j++) {
if (r->nrects > 0)
r->rects = (NhRect *) alloc(r->nrects * sizeof (NhRect));
else
r->rects = (NhRect *) 0;
for (j = 0; j < r->nrects; j++) {
if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) &g.regions[i]->rects[j],
sizeof (NhRect));
mread(nhfp->fd, (genericptr_t) &r->rects[j], sizeof (NhRect));
}
if (nhfp->structlevel) {
mread(nhfp->fd, (genericptr_t) &g.regions[i]->attach_2_u,
sizeof (boolean));
mread(nhfp->fd, (genericptr_t) &g.regions[i]->attach_2_m,
sizeof (unsigned));
mread(nhfp->fd, (genericptr_t) &r->attach_2_u, sizeof (boolean));
mread(nhfp->fd, (genericptr_t) &r->attach_2_m, sizeof (unsigned));
}
if (nhfp->structlevel)
@@ -753,9 +733,9 @@ rest_regions(NHFILE* nhfp)
mread(nhfp->fd, (genericptr_t) msg_buf, n);
}
msg_buf[n] = '\0';
g.regions[i]->enter_msg = (const char *) msg_buf;
} else
g.regions[i]->enter_msg = (const char *)0;
msg_buf = (char *) 0;
r->enter_msg = (const char *) msg_buf;
if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) &n, sizeof n);
@@ -765,66 +745,56 @@ rest_regions(NHFILE* nhfp)
mread(nhfp->fd, (genericptr_t) msg_buf, n);
}
msg_buf[n] = '\0';
g.regions[i]->leave_msg = (const char *) msg_buf;
} else
g.regions[i]->leave_msg = (const char *)0;
msg_buf = (char *) 0;
r->leave_msg = (const char *) msg_buf;
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 */
if (g.regions[i]->ttl >= 0L)
g.regions[i]->ttl = ((g.regions[i]->ttl > tmstamp)
? g.regions[i]->ttl - tmstamp
: 0L);
if (r->ttl >= 0L)
r->ttl = (r->ttl > tmstamp) ? r->ttl - tmstamp : 0L;
if (nhfp->structlevel) {
mread(nhfp->fd, (genericptr_t) &g.regions[i]->expire_f,
sizeof (short));
mread(nhfp->fd, (genericptr_t) &g.regions[i]->can_enter_f,
sizeof (short));
mread(nhfp->fd, (genericptr_t) &g.regions[i]->enter_f,
sizeof (short));
mread(nhfp->fd, (genericptr_t) &g.regions[i]->can_leave_f,
sizeof (short));
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));
mread(nhfp->fd, (genericptr_t) &r->expire_f, sizeof (short));
mread(nhfp->fd, (genericptr_t) &r->can_enter_f, sizeof (short));
mread(nhfp->fd, (genericptr_t) &r->enter_f, sizeof (short));
mread(nhfp->fd, (genericptr_t) &r->can_leave_f, sizeof (short));
mread(nhfp->fd, (genericptr_t) &r->leave_f, sizeof (short));
mread(nhfp->fd, (genericptr_t) &r->inside_f, sizeof (short));
mread(nhfp->fd, (genericptr_t) &r->player_flags,
sizeof (unsigned));
}
if (ghostly) { /* settings pertained to old player */
clear_hero_inside(g.regions[i]);
clear_heros_fault(g.regions[i]);
clear_hero_inside(r);
clear_heros_fault(r);
}
if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) &g.regions[i]->n_monst,
sizeof (short));
if (g.regions[i]->n_monst > 0)
g.regions[i]->monsters = (unsigned *) alloc(
sizeof (unsigned) * g.regions[i]->n_monst);
mread(nhfp->fd, (genericptr_t) &r->n_monst, sizeof (short));
if (r->n_monst > 0)
r->monsters = (unsigned *) alloc(r->n_monst * sizeof (unsigned));
else
g.regions[i]->monsters = (unsigned int *)0;
g.regions[i]->max_monst = g.regions[i]->n_monst;
for (j = 0; j < g.regions[i]->n_monst; j++) {
r->monsters = (unsigned *) 0;
r->max_monst = r->n_monst;
for (j = 0; j < r->n_monst; j++) {
if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) &g.regions[i]->monsters[j],
sizeof (unsigned));
mread(nhfp->fd, (genericptr_t) &r->monsters[j],
sizeof (unsigned));
}
if (nhfp->structlevel) {
mread(nhfp->fd, (genericptr_t) &g.regions[i]->visible,
sizeof (boolean));
mread(nhfp->fd, (genericptr_t) &g.regions[i]->glyph, sizeof (int));
mread(nhfp->fd, (genericptr_t) &g.regions[i]->arg,
sizeof (anything));
mread(nhfp->fd, (genericptr_t) &r->visible, sizeof (boolean));
mread(nhfp->fd, (genericptr_t) &r->glyph, sizeof (int));
mread(nhfp->fd, (genericptr_t) &r->arg, sizeof (anything));
}
}
/* remove expired regions, do not trigger the expire_f callback (yet!);
also update monster lists if this data is coming from a bones file */
for (i = g.n_regions - 1; i >= 0; i--)
if (g.regions[i]->ttl == 0L)
remove_region(g.regions[i]);
else if (ghostly && g.regions[i]->n_monst > 0)
reset_region_mids(g.regions[i]);
for (i = g.n_regions - 1; i >= 0; i--) {
r = g.regions[i];
if (r->ttl == 0L)
remove_region(r);
else if (ghostly && r->n_monst > 0)
reset_region_mids(r);
}
}
DISABLE_WARNING_FORMAT_NONLITERAL
@@ -860,7 +830,7 @@ RESTORE_WARNING_FORMAT_NONLITERAL
/* update monster IDs for region being loaded from bones; `ghostly' implied */
static void
reset_region_mids(NhRegion* reg)
reset_region_mids(NhRegion *reg)
{
int i = 0, n = reg->n_monst;
unsigned *mid_list = reg->monsters;
@@ -889,7 +859,7 @@ reset_region_mids(NhRegion* reg)
NhRegion *
create_msg_region(
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;
NhRegion *reg = create_region((NhRect *) 0, 0);

View File

@@ -32,12 +32,12 @@
#ifdef minit
#undef minit
#endif
void newread(NHFILE *, int, int, genericptr_t, unsigned int);
void newread(NHFILE *, int, int, genericptr_t, unsigned);
void bufon(int);
void bufoff(int);
void bflush(int);
void bwrite(int, genericptr_t, unsigned int);
void mread(int, genericptr_t, unsigned int);
void bwrite(int, const genericptr_t, unsigned);
void mread(int, genericptr_t, unsigned);
void minit(void);
void bclose(int);
#endif /* TRACE_BUFFERING */
@@ -48,7 +48,7 @@ static int getidx(int, int);
#endif
struct restore_info restoreinfo = {
"externalcomp", 0,
"externalcomp", 0,
};
#define MAXFD 5
@@ -197,7 +197,7 @@ bflush(int fd)
}
void
bwrite(register int fd, register genericptr_t loc, register unsigned num)
bwrite(int fd, const genericptr_t loc, unsigned num)
{
boolean failed;
int idx = getidx(fd, NOFLG);
@@ -237,9 +237,9 @@ minit(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)
#define readLenType int
#else /* e.g. SYSV, __TURBOC__ */
@@ -269,9 +269,12 @@ static FILE *tracefile;
#define TFILE "trace-buffering.log"
#define TRACE(xx) \
tracefile = fopen(TFILE, "a"); \
(void) fprintf(tracefile, "%s from %s:%d (%d)\n", __FUNCTION__, fncname, linenum, xx); \
fclose(tracefile);
do { \
tracefile = fopen(TFILE, "a"); \
(void) fprintf(tracefile, "%s from %s:%d (%d)\n", \
__FUNCTION__, fncname, linenum, xx); \
fclose(tracefile); \
} while (0)
void
Bufon(int fd, const char *fncname, int linenum)
@@ -296,9 +299,9 @@ Bflush(int fd, const char* fncname, int linenum)
void
Bwrite(
register int fd,
register genericptr_t loc,
register unsigned num,
int fd,
const genericptr_t loc,
unsigned num,
const char *fncname,
int linenum)
{
@@ -322,9 +325,9 @@ Minit(const char*fncname, int linenum)
void
Mread(
register int fd,
register genericptr_t buf,
register unsigned int len,
int fd,
genericptr_t buf,
unsigned len,
const char *fncname,
int linenum)
{