diff --git a/include/budg.h b/include/budg.h index 6bb5d119..f33c3167 100644 --- a/include/budg.h +++ b/include/budg.h @@ -39,10 +39,11 @@ #define SCT_EFFIC (SCT_TYPE_MAX + 1) -void fill_update_array(int *bp, struct sctstr *sp); -int gt_bg_nmbr(int *bp, struct sctstr *sp, i_type comm); -void pt_bg_nmbr(int *bp, struct sctstr *sp, i_type comm, int amount); -int get_materials(struct sctstr *, int *, int *, int); +struct bp *alloc_bp(void); +void fill_update_array(struct bp *, struct sctstr *); +int gt_bg_nmbr(struct bp *, struct sctstr *, i_type); +void pt_bg_nmbr(struct bp *, struct sctstr *, i_type, int); +int get_materials(struct sctstr *, struct bp *, int *, int); extern long money[MAXNOC]; extern long pops[MAXNOC]; diff --git a/include/prototypes.h b/include/prototypes.h index c39dbb92..bd22a830 100644 --- a/include/prototypes.h +++ b/include/prototypes.h @@ -735,12 +735,12 @@ extern void finish_sects(int); /* human.c */ extern int new_work(struct sctstr *, int); extern int do_feed(struct sctstr *, struct natstr *, - short *, int *, int *, int); + short *, int *, struct bp *, int); extern int feed_people(short *, int); extern double food_needed(short *, int); extern int famine_victims(short *, int); /* land.c */ -extern int prod_land(int, int, int *, int); +extern int prod_land(int, int, struct bp *, int); /* main.c */ /* in server.h */ /* material.c */ @@ -774,7 +774,7 @@ extern void *nxtitemp(struct nstr_item *); extern void do_plague(struct sctstr *, struct natstr *, int); extern int plague_people(struct natstr *, short *, int *, int *, int); /* plane.c */ -extern int prod_plane(int, int, int *, int); +extern int prod_plane(int, int, struct bp *, int); /* populace.c */ extern void populace(struct natstr *, struct sctstr *, int); extern int total_work(int, int, int, int, int, int); @@ -782,7 +782,7 @@ extern int total_work(int, int, int, int, int, int); extern void tax(struct sctstr *, struct natstr *, int, long *, int *, int *, int *); extern int upd_slmilcosts(natid, int); -extern void prepare_sects(int, int *); +extern void prepare_sects(int, struct bp *); extern int bank_income(struct sctstr *, int); /* produce.c */ extern int produce(struct natstr *, struct sctstr *, short *, int, int, @@ -799,9 +799,9 @@ extern void sail_ship(natid); extern void do_fallout(struct sctstr *, int); extern void spread_fallout(struct sctstr *, int); extern void decay_fallout(struct sctstr *, int); -extern void produce_sect(int, int, int *, long [][2]); +extern void produce_sect(int, int, struct bp *, long [][2]); /* ship.c */ -extern int prod_ship(int, int, int *, int); +extern int prod_ship(int, int, struct bp *, int); /* * src/server diff --git a/include/types.h b/include/types.h index c5cf337a..d685255b 100644 --- a/include/types.h +++ b/include/types.h @@ -37,6 +37,7 @@ typedef unsigned char natid; /* NSC_NATID must match this */ typedef short coord; +struct bp; struct emp_qelem; struct empobj; struct lndstr; diff --git a/src/lib/commands/budg.c b/src/lib/commands/budg.c index e1e939f1..6befd205 100644 --- a/src/lib/commands/budg.c +++ b/src/lib/commands/budg.c @@ -184,7 +184,7 @@ calc_all(long p_sect[][2], int *planes, int *pbuild, int *npbuild, int *pmaint) { struct natstr *np; - int *bp; + struct bp *bp; long pop = 0; int n, civ_tax, uw_tax, mil_pay; struct sctstr *sp; @@ -197,7 +197,7 @@ calc_all(long p_sect[][2], *planes = *pbuild = *npbuild = *pmaint = 0; np = getnatp(player->cnum); - bp = calloc(WORLD_X * WORLD_Y * 8, sizeof(int)); + bp = alloc_bp(); for (n = 0; NULL != (sp = getsectid(n)); n++) { fill_update_array(bp, sp); if (sp->sct_own == player->cnum) { diff --git a/src/lib/update/bp.c b/src/lib/update/bp.c index 6ad99936..b6895397 100644 --- a/src/lib/update/bp.c +++ b/src/lib/update/bp.c @@ -29,6 +29,7 @@ * * Known contributors to this file: * Ville Virrankoski, 1996 + * Markus Armbruster, 2007 */ #include @@ -36,18 +37,21 @@ #include "budg.h" #include "update.h" +struct bp { + int val[7]; +}; + static int bud_key[I_MAX + 2] = { 1, 2, 3, 4, 0, 0, 0, 0, 0, 0, 5, 6, 0, 0, 7 }; static int * -get_wp(int *bp, struct sctstr *sp, int cm) +get_wp(struct bp *bp, struct sctstr *sp, int cm) { - return (bp + (sp->sct_x + (sp->sct_y * WORLD_X)) + - WORLD_X * WORLD_Y * (cm - 1)); + return &bp[sp->sct_x + sp->sct_y * WORLD_X].val[cm - 1]; } int -gt_bg_nmbr(int *bp, struct sctstr *sp, i_type comm) +gt_bg_nmbr(struct bp *bp, struct sctstr *sp, i_type comm) { int *wp; int cm; @@ -61,7 +65,7 @@ gt_bg_nmbr(int *bp, struct sctstr *sp, i_type comm) } void -pt_bg_nmbr(int *bp, struct sctstr *sp, i_type comm, int amount) +pt_bg_nmbr(struct bp *bp, struct sctstr *sp, i_type comm, int amount) { int *wp; int cm; @@ -73,7 +77,7 @@ pt_bg_nmbr(int *bp, struct sctstr *sp, i_type comm, int amount) } void -fill_update_array(int *bp, struct sctstr *sp) +fill_update_array(struct bp *bp, struct sctstr *sp) { int k; int *wp; @@ -87,3 +91,9 @@ fill_update_array(int *bp, struct sctstr *sp) wp = get_wp(bp, sp, bud_key[I_MAX + 1]); *wp = sp->sct_avail; } + +struct bp * +alloc_bp(void) +{ + return calloc(WORLD_X * WORLD_Y, sizeof(struct bp)); +} diff --git a/src/lib/update/human.c b/src/lib/update/human.c index 853e694c..43c0b1a3 100644 --- a/src/lib/update/human.c +++ b/src/lib/update/human.c @@ -55,7 +55,7 @@ static int babies(int, int, double, int, int); */ int do_feed(struct sctstr *sp, struct natstr *np, short *vec, - int *workp, int *bp, int etu) + int *workp, struct bp *bp, int etu) { int work_avail; int starved, sctwork; diff --git a/src/lib/update/land.c b/src/lib/update/land.c index ece5cf05..a6d3566c 100644 --- a/src/lib/update/land.c +++ b/src/lib/update/land.c @@ -46,12 +46,12 @@ #include "update.h" #include -static void landrepair(struct lndstr *, struct natstr *, int *, int); -static void upd_land(struct lndstr *, int, struct natstr *, int *, int); +static void landrepair(struct lndstr *, struct natstr *, struct bp *, int); +static void upd_land(struct lndstr *, int, struct natstr *, struct bp *, int); static int feed_land(struct lndstr *, int); int -prod_land(int etus, int natnum, int *bp, int build) +prod_land(int etus, int natnum, struct bp *bp, int build) /* build = 1, maintain = 0 */ { struct lndstr *lp; @@ -104,7 +104,7 @@ prod_land(int etus, int natnum, int *bp, int build) static void upd_land(struct lndstr *lp, int etus, - struct natstr *np, int *bp, int build) + struct natstr *np, struct bp *bp, int build) /* build = 1, maintain = 0 */ { struct lchrstr *lcp; @@ -214,7 +214,7 @@ upd_land(struct lndstr *lp, int etus, } static void -landrepair(struct lndstr *land, struct natstr *np, int *bp, int etus) +landrepair(struct lndstr *land, struct natstr *np, struct bp *bp, int etus) { int delta; struct sctstr *sp; diff --git a/src/lib/update/main.c b/src/lib/update/main.c index 5d79042d..65ebb573 100644 --- a/src/lib/update/main.c +++ b/src/lib/update/main.c @@ -58,7 +58,7 @@ update_main(void *unused) int etu = etu_per_update; int n; int x; - int *bp; + struct bp *bp; int cn, cn2, rel; struct natstr *cnp; struct natstr *np; @@ -92,7 +92,7 @@ update_main(void *unused) memset(air_money, 0, sizeof(air_money)); memset(sea_money, 0, sizeof(sea_money)); memset(lnd_money, 0, sizeof(lnd_money)); - bp = calloc(WORLD_X * WORLD_Y * 7, sizeof(int)); + bp = alloc_bp(); for (n = 0; n < MAXNOC; n++) { money[n] = 0; if (!(np = getnatp(n))) diff --git a/src/lib/update/material.c b/src/lib/update/material.c index 5b733ef2..8ccd09b3 100644 --- a/src/lib/update/material.c +++ b/src/lib/update/material.c @@ -48,7 +48,7 @@ * Return adjusted build percentage. */ int -get_materials(struct sctstr *sp, int *bp, int *mvec, int pct) +get_materials(struct sctstr *sp, struct bp *bp, int *mvec, int pct) { int i, amt; diff --git a/src/lib/update/plane.c b/src/lib/update/plane.c index 97fdc078..82e2d91b 100644 --- a/src/lib/update/plane.c +++ b/src/lib/update/plane.c @@ -42,11 +42,11 @@ #include "ship.h" #include "update.h" -static void planerepair(struct plnstr *, struct natstr *, int *, int); -static void upd_plane(struct plnstr *, int, struct natstr *, int *, int); +static void planerepair(struct plnstr *, struct natstr *, struct bp *, int); +static void upd_plane(struct plnstr *, int, struct natstr *, struct bp *, int); int -prod_plane(int etus, int natnum, int *bp, int buildem) +prod_plane(int etus, int natnum, struct bp *bp, int buildem) /* Build = 1, maintain =0 */ { struct plnstr *pp; @@ -88,7 +88,7 @@ prod_plane(int etus, int natnum, int *bp, int buildem) static void upd_plane(struct plnstr *pp, int etus, - struct natstr *np, int *bp, int build) + struct natstr *np, struct bp *bp, int build) { struct plchrstr *pcp = &plchr[(int)pp->pln_type]; int mult, cost, eff; @@ -125,7 +125,7 @@ upd_plane(struct plnstr *pp, int etus, } static void -planerepair(struct plnstr *pp, struct natstr *np, int *bp, int etus) +planerepair(struct plnstr *pp, struct natstr *np, struct bp *bp, int etus) { int build; int mvec[I_MAX + 1]; diff --git a/src/lib/update/prepare.c b/src/lib/update/prepare.c index 4c5d74a1..cd0afb11 100644 --- a/src/lib/update/prepare.c +++ b/src/lib/update/prepare.c @@ -44,7 +44,7 @@ #include "update.h" void -prepare_sects(int etu, int *bp) +prepare_sects(int etu, struct bp *bp) { struct sctstr *sp; struct natstr *np; diff --git a/src/lib/update/sect.c b/src/lib/update/sect.c index 90ed0371..ccc36371 100644 --- a/src/lib/update/sect.c +++ b/src/lib/update/sect.c @@ -257,7 +257,7 @@ decay_fallout(struct sctstr *sp, int etus) * Produce for a specific nation */ void -produce_sect(int natnum, int etu, int *bp, long p_sect[][2]) +produce_sect(int natnum, int etu, struct bp *bp, long p_sect[][2]) { struct sctstr *sp; struct natstr *np; diff --git a/src/lib/update/ship.c b/src/lib/update/ship.c index fd5863f2..54c18ec3 100644 --- a/src/lib/update/ship.c +++ b/src/lib/update/ship.c @@ -47,12 +47,12 @@ #include "ship.h" #include "update.h" -static void shiprepair(struct shpstr *, struct natstr *, int *, int); -static void upd_ship(struct shpstr *, int, struct natstr *, int *, int); +static void shiprepair(struct shpstr *, struct natstr *, struct bp *, int); +static void upd_ship(struct shpstr *, int, struct natstr *, struct bp *, int); static int feed_ship(struct shpstr *, int); int -prod_ship(int etus, int natnum, int *bp, int build) +prod_ship(int etus, int natnum, struct bp *bp, int build) /* build = 1, maintain = 0 */ { struct shpstr *sp; @@ -107,7 +107,7 @@ prod_ship(int etus, int natnum, int *bp, int build) static void upd_ship(struct shpstr *sp, int etus, - struct natstr *np, int *bp, int build) + struct natstr *np, struct bp *bp, int build) /* build = 1, maintain = 0 */ { struct sctstr *sectp; @@ -266,7 +266,7 @@ upd_ship(struct shpstr *sp, int etus, * 8 * 8 * $40 = $2560! */ static void -shiprepair(struct shpstr *ship, struct natstr *np, int *bp, int etus) +shiprepair(struct shpstr *ship, struct natstr *np, struct bp *bp, int etus) { int delta; struct sctstr *sp;