From 0a354903e01ef01e4675e4a72548d6ceef0728d8 Mon Sep 17 00:00:00 2001 From: "John \"Elwin\" Edwards" Date: Sat, 5 Mar 2016 20:49:37 -0500 Subject: [PATCH 1/8] Daemons and fuses now return void. Functions for starting and stopping daemons and fuses now expect the type 'void (*func)()'. Only a few functions in XRogue needed to be modified to fit. Determining the type of the argument is left for a later date. Building with GCC5 should now produce less than 200 lines of warnings per game. --- arogue5/daemon.c | 12 ++++++------ arogue5/rogue.h | 14 +++++++------- arogue7/daemon.c | 12 ++++++------ arogue7/rogue.h | 14 +++++++------- arogue7/state.c | 4 ++-- rogue4/daemon.c | 12 ++++++------ rogue4/rogue.h | 12 ++++++------ srogue/daemon.c | 12 ++++++------ srogue/rogue.ext | 8 ++++---- srogue/rogue.h | 2 +- xrogue/daemon.c | 12 ++++++------ xrogue/daemons.c | 12 ++++-------- xrogue/potions.c | 38 +++++++++++++++++++------------------- xrogue/rogue.h | 23 +++++++++++------------ 14 files changed, 91 insertions(+), 96 deletions(-) diff --git a/arogue5/daemon.c b/arogue5/daemon.c index 59fc05d..102744b 100644 --- a/arogue5/daemon.c +++ b/arogue5/daemon.c @@ -70,7 +70,7 @@ f_slot(void) * Find a particular slot in the table */ struct delayed_action * -find_slot(int (*func)()) +find_slot(void (*func)()) { reg int i; reg struct delayed_action *dev; @@ -87,7 +87,7 @@ find_slot(int (*func)()) * Start a daemon, takes a function. */ void -start_daemon(int (*func)(), void *arg, int type) +start_daemon(void (*func)(), void *arg, int type) { reg struct delayed_action *dev; @@ -107,7 +107,7 @@ start_daemon(int (*func)(), void *arg, int type) * Remove a daemon from the list */ void -kill_daemon(int (*func)()) +kill_daemon(void (*func)()) { reg struct delayed_action *dev; reg int i; @@ -155,7 +155,7 @@ do_daemons(int flag) * Start a fuse to go off in a certain number of turns */ void -fuse(int (*func)(), void *arg, int time, int type) +fuse(void (*func)(), void *arg, int time, int type) { reg struct delayed_action *wire; @@ -175,7 +175,7 @@ fuse(int (*func)(), void *arg, int time, int type) * Increase the time until a fuse goes off */ void -lengthen(int (*func)(), int xtime) +lengthen(void (*func)(), int xtime) { reg struct delayed_action *wire; @@ -190,7 +190,7 @@ lengthen(int (*func)(), int xtime) * Put out a fuse */ void -extinguish(int (*func)()) +extinguish(void (*func)()) { reg struct delayed_action *wire; diff --git a/arogue5/rogue.h b/arogue5/rogue.h index 8bb1936..9be0567 100644 --- a/arogue5/rogue.h +++ b/arogue5/rogue.h @@ -724,7 +724,7 @@ struct delayed_action { int d_type; - int (*d_func)(); + void (*d_func)(); void *d_arg; int d_time; }; @@ -1013,17 +1013,17 @@ int encread(char *start, unsigned int size, int inf); int encwrite(char *start, unsigned int size, FILE *outf); void endit(int sig); void endmsg(void); -void extinguish(int (*func)()); +void extinguish(void (*func)()); void fall(struct linked_list *item, bool pr); coord *fallpos(coord *pos, bool be_clear, int range); void fatal(char *s); bool fight(coord *mp, struct object *weap, bool thrown); struct linked_list *find_mons(int y, int x); struct linked_list *find_obj(int y, int x); -struct delayed_action *find_slot(int (*func)()); +struct delayed_action *find_slot(void (*func)()); void fix_stick(struct object *cur); void fumble(void); -void fuse(int (*func)(), void *arg, int time, int type); +void fuse(void (*func)(), void *arg, int time, int type); void genmonsters(int least, bool treas); bool get_dir(void); struct linked_list *get_item(struct linked_list *list, char *purpose, int type); @@ -1053,11 +1053,11 @@ bool is_current(struct object *obj); bool is_magic(struct object *obj); bool isatrap(char ch); int itemweight(struct object *wh); -void kill_daemon(int (*func)()); +void kill_daemon(void (*func)()); void killed(struct linked_list *item, bool pr, bool points); void lake_check(coord *place); void land(void); -void lengthen(int (*func)(), int xtime); +void lengthen(void (*func)(), int xtime); void light(coord *cp); bool lit_room(struct room *rp); void look(bool wakeup, bool runend); @@ -1133,7 +1133,7 @@ bool shoot_ok(char ch); char show(int y, int x); void sight(void); struct linked_list *spec_item(int type, int which, int hit, int damage); -void start_daemon(int (*func)(), void *arg, int type); +void start_daemon(void (*func)(), void *arg, int type); void status(bool display); void steal(void); bool step_ok(int y, int x, int can_on_monst, struct thing *flgptr); diff --git a/arogue7/daemon.c b/arogue7/daemon.c index 5addb22..3a6138c 100644 --- a/arogue7/daemon.c +++ b/arogue7/daemon.c @@ -78,7 +78,7 @@ f_slot(void) * Find a particular slot in the table */ struct delayed_action * -find_slot(int (*func)()) +find_slot(void (*func)()) { reg int i; reg struct delayed_action *dev; @@ -95,7 +95,7 @@ find_slot(int (*func)()) * Start a daemon, takes a function. */ void -start_daemon(int (*func)(), int arg, int type) +start_daemon(void (*func)(), int arg, int type) { reg struct delayed_action *dev; @@ -115,7 +115,7 @@ start_daemon(int (*func)(), int arg, int type) * Remove a daemon from the list */ void -kill_daemon(int (*func)()) +kill_daemon(void (*func)()) { reg struct delayed_action *dev; reg int i; @@ -163,7 +163,7 @@ do_daemons(int flag) * Start a fuse to go off in a certain number of turns */ void -fuse(int (*func)(), int arg, int time, int type) +fuse(void (*func)(), int arg, int time, int type) { reg struct delayed_action *wire; @@ -183,7 +183,7 @@ fuse(int (*func)(), int arg, int time, int type) * Increase the time until a fuse goes off */ void -lengthen(int (*func)(), int xtime) +lengthen(void (*func)(), int xtime) { reg struct delayed_action *wire; @@ -198,7 +198,7 @@ lengthen(int (*func)(), int xtime) * Put out a fuse */ void -extinguish(int (*func)()) +extinguish(void (*func)()) { reg struct delayed_action *wire; diff --git a/arogue7/rogue.h b/arogue7/rogue.h index 0544bea..048f54a 100644 --- a/arogue7/rogue.h +++ b/arogue7/rogue.h @@ -1113,7 +1113,7 @@ struct quill { struct delayed_action { int d_type; - int (*d_func)(); + void (*d_func)(); union { int arg; void *varg; @@ -1212,18 +1212,18 @@ int encread(char *start, unsigned int size, int inf); int encwrite(char *start, unsigned int size, int outf); void endmsg(void); void explode(struct thing *tp); -void extinguish(int (*func)()); +void extinguish(void (*func)()); void fall(struct linked_list *item, bool pr); coord *fallpos(coord *pos, bool be_clear, int range); void fatal(char *s); bool fight(coord *mp, struct object *weap, bool thrown); struct linked_list *find_mons(int y, int x); struct linked_list *find_obj(int y, int x); -struct delayed_action *find_slot(int (*func)()); +struct delayed_action *find_slot(void (*func)()); int findmindex(char *name); void fix_stick(struct object *cur); void fumble(void); -void fuse(int (*func)(), int arg, int time, int type); +void fuse(void (*func)(), int arg, int time, int type); void genmonsters(int least, bool treas); coord get_coordinates(void); bool get_dir(coord *direction); @@ -1256,11 +1256,11 @@ bool is_current(struct object *obj); bool is_magic(struct object *obj); bool isatrap(char ch); int itemweight(struct object *wh); -void kill_daemon(int (*func)()); +void kill_daemon(void (*func)()); void killed(struct linked_list *item, bool pr, bool points, bool treasure); void lake_check(coord *place); void land(void); -void lengthen(int (*func)(), int xtime); +void lengthen(void (*func)(), int xtime); void light(coord *cp); bool lit_room(struct room *rp); void look(bool wakeup, bool runend); @@ -1357,7 +1357,7 @@ bool skirmish(struct thing *attacker, coord *mp, struct object *weap, bool thrown); struct linked_list *spec_item(int type, int which, int hit, int damage); void spell_recovery(void); -void start_daemon(int (*func)(), int arg, int type); +void start_daemon(void (*func)(), int arg, int type); void status(bool display); void steal(void); bool step_ok(int y, int x, int can_on_monst, struct thing *flgptr); diff --git a/arogue7/state.c b/arogue7/state.c index 98fe107..928ae05 100644 --- a/arogue7/state.c +++ b/arogue7/state.c @@ -1504,7 +1504,7 @@ rs_write_daemons(FILE *savef, struct delayed_action *d_list, int count) func = 15; else if (d_list[i].d_func == unstink) func = 16; - else if (d_list[i].d_func == (int (*)()) res_strength) + else if (d_list[i].d_func == res_strength) func = 17; else if (d_list[i].d_func == undance) func = 18; @@ -1644,7 +1644,7 @@ rs_read_daemons(int inf, struct delayed_action *d_list, int count) break; case 16: d_list[i].d_func = unstink; break; - case 17: d_list[i].d_func = (int (*)()) res_strength; + case 17: d_list[i].d_func = res_strength; break; case 18: d_list[i].d_func = undance; break; diff --git a/rogue4/daemon.c b/rogue4/daemon.c index fa02989..48b1463 100644 --- a/rogue4/daemon.c +++ b/rogue4/daemon.c @@ -48,7 +48,7 @@ d_slot(void) * Find a particular slot in the table */ struct delayed_action * -find_slot(int (*func)()) +find_slot(void (*func)()) { register int i; register struct delayed_action *dev; @@ -64,7 +64,7 @@ find_slot(int (*func)()) * Start a daemon, takes a function. */ void -start_daemon(int (*func)(), int arg, int type) +start_daemon(void (*func)(), int arg, int type) { register struct delayed_action *dev; @@ -80,7 +80,7 @@ start_daemon(int (*func)(), int arg, int type) * Remove a daemon from the list */ void -kill_daemon(int (*func)()) +kill_daemon(void (*func)()) { register struct delayed_action *dev; @@ -118,7 +118,7 @@ do_daemons(int flag) * Start a fuse to go off in a certain number of turns */ void -fuse(int (*func)(), int arg, int time, int type) +fuse(void (*func)(), int arg, int time, int type) { register struct delayed_action *wire; @@ -134,7 +134,7 @@ fuse(int (*func)(), int arg, int time, int type) * Increase the time until a fuse goes off */ void -lengthen(int (*func)(), int xtime) +lengthen(void (*func)(), int xtime) { register struct delayed_action *wire; @@ -148,7 +148,7 @@ lengthen(int (*func)(), int xtime) * Put out a fuse */ void -extinguish(int (*func)()) +extinguish(void (*func)()) { register struct delayed_action *wire; diff --git a/rogue4/rogue.h b/rogue4/rogue.h index 8fc4e6e..d0c1326 100644 --- a/rogue4/rogue.h +++ b/rogue4/rogue.h @@ -324,7 +324,7 @@ typedef struct { struct delayed_action { int d_type; - int (*d_func)(); + void (*d_func)(); int d_arg; int d_time; }; @@ -517,7 +517,7 @@ int encread(void *starta, int size, int inf); void encwrite(void *starta, int size, FILE *outf); void endmsg(void); void enter_room(coord *cp); -void extinguish(int (*func)()); +void extinguish(void (*func)()); void fall(THING *obj, bool pr); bool fallpos(coord *pos, coord *newpos, bool pass); void fatal(char *s); @@ -526,7 +526,7 @@ THING *find_obj(int y, int x); void fire_bolt(coord *start, coord *dir, char *name); void fix_stick(THING *cur); void flush_type(void); -void fuse(int (*func)(), int arg, int time, int type); +void fuse(void (*func)(), int arg, int time, int type); void genocide(void); bool get_dir(void); THING *get_item(char *purpose, int type); @@ -547,11 +547,11 @@ void invis_on(void); bool is_current(THING *obj); bool is_magic(THING *obj); bool issymlink(char *sp); -void kill_daemon(int (*func)()); +void kill_daemon(void (*func)()); void killed(THING *tp, bool pr); void leave(int sig); void leave_room(coord *cp); -void lengthen(int (*func)(), int xtime); +void lengthen(void (*func)(), int xtime); bool lock_sc(void); void look(bool wakeup); void missile(int ydelta, int xdelta); @@ -601,7 +601,7 @@ void shell(void); void show_win(WINDOW *scr, char *message); void sight(void); int sign(int nm); -void start_daemon(int (*func)(), int arg, int type); +void start_daemon(void (*func)(), int arg, int type); void start_score(void); void status(void); bool step_ok(char ch); diff --git a/srogue/daemon.c b/srogue/daemon.c index 441f1e0..40035fb 100644 --- a/srogue/daemon.c +++ b/srogue/daemon.c @@ -34,7 +34,7 @@ struct delayed_action d_list[MAXDAEMONS] = { * Insert a function in the daemon list. */ struct delayed_action * -d_insert(int (*func)(), int arg, int type, int time) +d_insert(void (*func)(), int arg, int type, int time) { reg struct delayed_action *dev; @@ -72,7 +72,7 @@ d_delete(struct delayed_action *wire) * Find a particular slot in the table */ struct delayed_action * -find_slot(int (*func)()) +find_slot(void (*func)()) { reg struct delayed_action *dev; @@ -87,7 +87,7 @@ find_slot(int (*func)()) * Start a daemon, takes a function. */ void -start_daemon(int (*func)(), int arg, int type) +start_daemon(void (*func)(), int arg, int type) { d_insert(func, arg, type, DAEMON); } @@ -112,7 +112,7 @@ do_daemons(int flag) * Start a fuse to go off in a certain number of turns */ void -fuse(int (*func)(), int arg, int time) +fuse(void (*func)(), int arg, int time) { d_insert(func, arg, AFTER, time); } @@ -122,7 +122,7 @@ fuse(int (*func)(), int arg, int time) * Increase the time until a fuse goes off */ void -lengthen(int (*func)(), int xtime) +lengthen(void (*func)(), int xtime) { reg struct delayed_action *wire; @@ -136,7 +136,7 @@ lengthen(int (*func)(), int xtime) * Put out a fuse. Find all such fuses and kill them. */ void -extinguish(int (*func)()) +extinguish(void (*func)()) { reg struct delayed_action *dev; diff --git a/srogue/rogue.ext b/srogue/rogue.ext index 6439723..b009320 100644 --- a/srogue/rogue.ext +++ b/srogue/rogue.ext @@ -96,7 +96,7 @@ int encread(void *starta, unsigned int size, int inf); void encwrite(void *starta, unsigned int size, FILE *outf); void endit(int a); void endmsg(void); -void extinguish(int (*func)()); +void extinguish(void (*func)()); int extras(void); void fall(struct linked_list *item, bool pr); bool fallpos(struct coord *pos, struct coord *newpos, bool passages); @@ -105,7 +105,7 @@ bool fight(struct coord *mp, struct object *weap, bool thrown); struct linked_list *find_mons(int y, int x); struct linked_list *find_obj(int y, int x); void fix_stick(struct object *cur); -void fuse(int (*func)(), int arg, int time); +void fuse(void (*func)(), int arg, int time); void game_err(int a); void genocide(void); bool get_dir(void); @@ -140,7 +140,7 @@ bool isatrap(char ch); bool isring(int hand, int ring); bool iswearing(int ring); void killed(struct linked_list *item, bool pr); -void lengthen(int (*func)(), int xtime); +void lengthen(void (*func)(), int xtime); void lev_mon(void); void light(struct coord *cp); void look(bool wakeup); @@ -215,7 +215,7 @@ void setup(void); char show(int y, int x); bool showtop(int showname); void sight(int fromfuse); -void start_daemon(int (*func)(), int arg, int type); +void start_daemon(void (*func)(), int arg, int type); void status(int fromfuse); bool step_ok(unsigned char ch); void stomach(int fromfuse); diff --git a/srogue/rogue.h b/srogue/rogue.h index d171fe2..9c5adec 100644 --- a/srogue/rogue.h +++ b/srogue/rogue.h @@ -531,7 +531,7 @@ char *xcrypt(const char *key, const char *setting); struct delayed_action { int d_type; - int (*d_func)(); + void (*d_func)(); int d_arg; int d_time; }; diff --git a/xrogue/daemon.c b/xrogue/daemon.c index 8d36bc7..09c245e 100644 --- a/xrogue/daemon.c +++ b/xrogue/daemon.c @@ -74,7 +74,7 @@ f_slot(void) */ struct delayed_action * -find_slot(int (*func)()) +find_slot(void (*func)()) { reg int i; reg struct delayed_action *dev; @@ -91,7 +91,7 @@ find_slot(int (*func)()) */ void -start_daemon(int (*dfunc)(), VOID *arg, int type) +start_daemon(void (*dfunc)(), VOID *arg, int type) { reg struct delayed_action *dev; @@ -111,7 +111,7 @@ start_daemon(int (*dfunc)(), VOID *arg, int type) */ void -kill_daemon(int (*dfunc)()) +kill_daemon(void (*dfunc)()) { reg struct delayed_action *dev; reg int i; @@ -164,7 +164,7 @@ do_daemons(int flag) */ void -fuse(int (*dfunc)(), VOID *arg, int time, int type) +fuse(void (*dfunc)(), VOID *arg, int time, int type) { reg struct delayed_action *wire; @@ -184,7 +184,7 @@ fuse(int (*dfunc)(), VOID *arg, int time, int type) */ void -lengthen(int (*dfunc)(), int xtime) +lengthen(void (*dfunc)(), int xtime) { reg struct delayed_action *wire; @@ -199,7 +199,7 @@ lengthen(int (*dfunc)(), int xtime) */ void -extinguish(int (*dfunc)()) +extinguish(void (*dfunc)()) { reg struct delayed_action *wire; diff --git a/xrogue/daemons.c b/xrogue/daemons.c index 82e431d..06f8167 100644 --- a/xrogue/daemons.c +++ b/xrogue/daemons.c @@ -222,13 +222,12 @@ unphase(void) * Player can no longer fly */ -int +void land(void) { turn_off(player, ISFLY); msg("You regain your normal weight"); running = FALSE; - return(0); } /* @@ -253,7 +252,7 @@ sight(void) * Restore player's strength */ -int +void res_strength(long howmuch) { @@ -271,7 +270,6 @@ res_strength(long howmuch) min(pstats.s_str + howmuch, max_stats.s_str + ring_value(R_ADDSTR)); updpack(TRUE, &player); - return(0); } /* @@ -507,12 +505,11 @@ alchemy(struct object *obj) * otto's irresistable dance wears off */ -int +void undance(void) { turn_off(player, ISDANCE); msg ("Your feet take a break.....whew!"); - return(0); } /* @@ -637,12 +634,11 @@ unskill(void) * charge up the cloak of Emori */ -int +void cloak_charge(struct object *obj) { if (obj->o_charges < 1) obj->o_charges = 1; - return(0); } /* diff --git a/xrogue/potions.c b/xrogue/potions.c index 7c0d197..b409f0b 100644 --- a/xrogue/potions.c +++ b/xrogue/potions.c @@ -27,11 +27,11 @@ int add_intelligence(int change); int add_strength(int change); int add_wisdom(int change); -int res_charisma(int howmuch); -int res_constitution(int howmuch); -int res_dexterity(int howmuch); -int res_intelligence(int howmuch); -int res_wisdom(int howmuch); +void res_charisma(int howmuch); +void res_constitution(int howmuch); +void res_dexterity(int howmuch); +void res_intelligence(int howmuch); +void res_wisdom(int howmuch); /* * add_abil is an array of functions used to change attributes. It must be @@ -48,7 +48,7 @@ int (*add_abil[NUMABILITIES])() = { * ordered according to the attribute definitions in rogue.h. */ -int (*res_abil[NUMABILITIES])() = { +void (*res_abil[NUMABILITIES])() = { res_intelligence, res_strength, res_wisdom, res_dexterity, res_constitution, res_charisma }; @@ -945,13 +945,13 @@ quaff(int which, int kind, int flags, bool is_potion) * if called with zero the restore fully */ -int +void res_dexterity(int howmuch) { short save_max; int ring_str; - if (howmuch < 0) return(0); + if (howmuch < 0) return; /* Discount the ring value */ ring_str = ring_value(R_ADDHIT); @@ -970,7 +970,7 @@ res_dexterity(int howmuch) pstats.s_dext += ring_str; max_stats.s_dext = save_max; } - return(0); + return; } /* @@ -978,13 +978,13 @@ res_dexterity(int howmuch) * Restore player's intelligence */ -int +void res_intelligence(int howmuch) { short save_max; int ring_str; - if (howmuch <= 0) return(0); + if (howmuch <= 0) return; /* Discount the ring value */ ring_str = ring_value(R_ADDINTEL); @@ -998,7 +998,7 @@ res_intelligence(int howmuch) pstats.s_intel += ring_str; max_stats.s_intel = save_max; } - return(0); + return; } /* @@ -1006,13 +1006,13 @@ res_intelligence(int howmuch) * Restore player's wisdom */ -int +void res_wisdom(int howmuch) { short save_max; int ring_str; - if (howmuch <= 0) return(0); + if (howmuch <= 0) return; /* Discount the ring value */ ring_str = ring_value(R_ADDWISDOM); @@ -1026,7 +1026,7 @@ res_wisdom(int howmuch) pstats.s_wisdom += ring_str; max_stats.s_wisdom = save_max; } - return(0); + return; } /* @@ -1034,13 +1034,13 @@ res_wisdom(int howmuch) * Restore the players constitution. */ -int +void res_constitution(int howmuch) { if (howmuch > 0) pstats.s_const = min(pstats.s_const + howmuch, max_stats.s_const); - return(0); + return; } /* @@ -1048,12 +1048,12 @@ res_constitution(int howmuch) * Restore the players charisma. */ -int +void res_charisma(int howmuch) { if (howmuch > 0) pstats.s_charisma = min(pstats.s_charisma + howmuch, max_stats.s_charisma); - return(0); + return; } diff --git a/xrogue/rogue.h b/xrogue/rogue.h index 547cb80..409d71d 100644 --- a/xrogue/rogue.h +++ b/xrogue/rogue.h @@ -933,7 +933,7 @@ struct delayed_action { int d_type; - int (*d_func)(); + void (*d_func)(); union { VOID *vp; int i; @@ -1258,7 +1258,7 @@ long check_level(void); void check_residue(struct thing *tp); void chg_str(int amt); void choose_qst(void); -int cloak_charge(struct object *obj); +void cloak_charge(struct object *obj); void command(void); void confus_player(void); int const_bonus(void); @@ -1310,19 +1310,19 @@ void endit(int sig); void endmsg(void); void exit_game(int flag); void explode(struct thing *tp); -void extinguish(int (*dfunc)()); +void extinguish(void (*dfunc)()); void fall(struct linked_list *item, bool pr); coord *fallpos(coord *pos, bool be_clear, int range); void fatal(char *s); bool fight(coord *mp, struct object *weap, bool thrown); struct linked_list *find_mons(int y, int x); struct linked_list *find_obj(int y, int x); -struct delayed_action *find_slot(int (*func)()); +struct delayed_action *find_slot(void (*func)()); int findmindex(char *name); void fix_stick(struct object *cur); void fright(struct thing *th); void fumble(void); -void fuse(int (*dfunc)(), VOID *arg, int time, int type); +void fuse(void (*dfunc)(), VOID *arg, int time, int type); void genmonsters(int least, bool treas); coord get_coordinates(void); bool get_dir(coord *direction); @@ -1359,10 +1359,10 @@ bool is_current(struct object *obj); bool is_magic(struct object *obj); bool isatrap(char ch); int itemweight(struct object *wh); -void kill_daemon(int (*dfunc)()); +void kill_daemon(void (*dfunc)()); void killed(struct linked_list *item, bool pr, bool points, bool treasure); -int land(void); -void lengthen(int (*dfunc)(), int xtime); +void land(void); +void lengthen(void (*dfunc)(), int xtime); void light(coord *cp); bool lit_room(struct room *rp); void look(bool wakeup, bool runend); @@ -1415,7 +1415,7 @@ void raise_level(void); short randmonster(bool wander, bool no_unique); void read_scroll(int which, int flag, bool is_scroll); void reap(void); -int res_strength(long howmuch); +void res_strength(long howmuch); bool restore(char *file, char *envp[]); void restscr(WINDOW *scr); int ring_eat(int hand); @@ -1452,7 +1452,7 @@ bool skirmish(struct thing *attacker, coord *mp, struct object *weap, bool thrown); struct linked_list *spec_item(int type, int which, int hit, int damage); void spell_recovery(void); -void start_daemon(int (*dfunc)(), VOID *arg, int type); +void start_daemon(void (*dfunc)(), VOID *arg, int type); void status(bool display); void steal(void); bool step_ok(int y, int x, int can_on_monst, struct thing *flgptr); @@ -1475,7 +1475,7 @@ void trap_look(void); void unchoke(void); void unclrhead(void); void unconfuse(void); -int undance(void); +void undance(void); void unphase(void); void unsee(void); void unskill(void); @@ -1648,7 +1648,6 @@ extern FILE *scorefi; extern FILE *logfile; extern LEVTYPE levtype; extern int (*add_abil[NUMABILITIES])(int); /* Functions to change abilities */ -extern int (*res_abil[NUMABILITIES])(); /* Functions to change abilities */ extern int mf_count; /* move_free counter - see actions.c(m_act()) */ extern int mf_jmpcnt; /* move_free counter for # of jumps */ extern int killed_chance; /* cumulative chance for goodies to loose it, fight.c */ From 35bea2ba0d6af3c88ef96a430505ffb27a525a34 Mon Sep 17 00:00:00 2001 From: "John \"Elwin\" Edwards" Date: Sun, 6 Mar 2016 14:45:18 -0500 Subject: [PATCH 2/8] Use uniform return types for functions related to options. Functions for printing options now return void. Functions for setting options now return int. Argument types still vary, though converting all the option pointers to void* would be possible. --- arogue5/options.c | 51 +++++++++++++++++++++++---------------------- arogue7/options.c | 45 ++++++++++++++++++++-------------------- rogue4/options.c | 22 ++++++++++---------- xrogue/options.c | 53 ++++++++++++++++++++++++----------------------- 4 files changed, 87 insertions(+), 84 deletions(-) diff --git a/arogue5/options.c b/arogue5/options.c index f7e4c99..4a08ee0 100644 --- a/arogue5/options.c +++ b/arogue5/options.c @@ -28,8 +28,8 @@ struct optstruct { char *o_name; /* option name */ char *o_prompt; /* prompt for interactive entry */ - int *o_opt; /* pointer to thing to set */ - int (*o_putfunc)(); /* function to print value */ + void *o_opt; /* pointer to thing to set */ + void (*o_putfunc)(); /* function to print value */ int (*o_getfunc)(); /* function to get value interactively */ }; @@ -39,38 +39,38 @@ int get_ro(WINDOW *win, int oy, int ox); int get_restr(char *optstr, WINDOW *win); int get_score(char *optstr, WINDOW *win); void put_abil(int *ability, WINDOW *win); -void get_abil(int *abil, WINDOW *win); +int get_abil(int *abil, WINDOW *win); void put_quest(int *quest, WINDOW *win); -void get_quest(int *quest, WINDOW *win); +int get_quest(int *quest, WINDOW *win); void put_bool(bool *b, WINDOW *win); int get_bool(bool *bp, WINDOW *win); void put_str(char *str, WINDOW *win); OPTION optlist[] = { {"terse", "Terse output: ", - (int *) &terse, put_bool, get_bool }, + (void *) &terse, put_bool, get_bool }, {"flush", "Flush typeahead during battle: ", - (int *) &fight_flush, put_bool, get_bool }, + (void *) &fight_flush, put_bool, get_bool }, {"jump", "Show position only at end of run: ", - (int *) &jump, put_bool, get_bool }, + (void *) &jump, put_bool, get_bool }, {"step", "Do inventories one line at a time: ", - (int *) &slow_invent, put_bool, get_bool }, + (void *) &slow_invent, put_bool, get_bool }, {"askme", "Ask me about unidentified things: ", - (int *) &askme, put_bool, get_bool }, + (void *) &askme, put_bool, get_bool }, {"pickup", "Pick things up automatically: ", - (int *) &auto_pickup, put_bool, get_bool }, + (void *) &auto_pickup, put_bool, get_bool }, {"name", "Name: ", - (int *) whoami, put_str, get_restr }, + (void *) whoami, put_str, get_restr }, {"fruit", "Fruit: ", - (int *) fruit, put_str, get_str }, + (void *) fruit, put_str, get_str }, {"file", "Save file: ", - (int *) file_name, put_str, get_restr }, + (void *) file_name, put_str, get_restr }, {"score", "Score file: ", - (int *) score_file, put_str, get_score }, + (void *) score_file, put_str, get_score }, {"class", "Character class: ", - (int *)&char_type, put_abil, get_abil }, + (void *)&char_type, put_abil, get_abil }, {"quest", "Quest item: ", - (int *) &quest_item, put_quest, get_quest } + (void *) &quest_item, put_quest, get_quest } }; /* For fields that would be restricted if use_savedir is set. */ @@ -111,27 +111,27 @@ int get_score(char *optstr, WINDOW *win) /* * The ability field is read-only */ -void +int get_abil(int *abil, WINDOW *win) { register int oy, ox; getyx(win, oy, ox); put_abil(abil, win); - get_ro(win, oy, ox); + return get_ro(win, oy, ox); } /* * The quest field is read-only */ -void +int get_quest(int *quest, WINDOW *win) { register int oy, ox; getyx(win, oy, ox); waddstr(win, rel_magic[*quest].mi_name); - get_ro(win, oy, ox); + return get_ro(win, oy, ox); } /* @@ -416,18 +416,19 @@ parse_opts(char *str) if (op->o_putfunc != put_abil) strcpy((char *)op->o_opt, value); - else if (*op->o_opt == -1) { /* Only init ability once */ + else if (*(int *)op->o_opt == -1) { + /* Only init ability once */ register int len = strlen(value); if (isupper(value[0])) value[0] = tolower(value[0]); if (EQSTR(value, "fighter", len)) - *op->o_opt = C_FIGHTER; + *(int *)op->o_opt = C_FIGHTER; else if (EQSTR(value, "magic", min(len, 5))) - *op->o_opt = C_MAGICIAN; + *(int *)op->o_opt = C_MAGICIAN; else if (EQSTR(value, "cleric", len)) - *op->o_opt = C_CLERIC; + *(int *)op->o_opt = C_CLERIC; else if (EQSTR(value, "thief", len)) - *op->o_opt = C_THIEF; + *(int *)op->o_opt = C_THIEF; } } break; diff --git a/arogue7/options.c b/arogue7/options.c index 488da76..5ae0bcf 100644 --- a/arogue7/options.c +++ b/arogue7/options.c @@ -33,8 +33,8 @@ struct optstruct { char *o_name; /* option name */ char *o_prompt; /* prompt for interactive entry */ - int *o_opt; /* pointer to thing to set */ - int (*o_putfunc)(); /* function to print value */ + void *o_opt; /* pointer to thing to set */ + void (*o_putfunc)(); /* function to print value */ int (*o_getfunc)(); /* function to get value interactively */ }; @@ -45,9 +45,9 @@ int get_bool(bool *bp, WINDOW *win); void put_str(char *str, WINDOW *win); int get_str(char *opt, WINDOW *win); void put_abil(int *ability, WINDOW *win); -void get_abil(int *abil, WINDOW *win); +int get_abil(int *abil, WINDOW *win); void put_quest(int *quest, WINDOW *win); -void get_quest(int *quest, WINDOW *win); +int get_quest(int *quest, WINDOW *win); int get_ro(WINDOW *win, int oy, int ox); int get_str_prot(char *opt, WINDOW *win); @@ -56,55 +56,55 @@ bool allowchange(OPTION *op); OPTION optlist[] = { {"terse", "Terse output: ", - (int *) &terse, put_bool, get_bool }, + (void *) &terse, put_bool, get_bool }, {"flush", "Flush typeahead during battle: ", - (int *) &fight_flush, put_bool, get_bool }, + (void *) &fight_flush, put_bool, get_bool }, {"jump", "Show position only at end of run: ", - (int *) &jump, put_bool, get_bool }, + (void *) &jump, put_bool, get_bool }, {"step", "Do inventories one line at a time: ", - (int *) &slow_invent, put_bool, get_bool }, + (void *) &slow_invent, put_bool, get_bool }, {"askme", "Ask me about unidentified things: ", - (int *) &askme, put_bool, get_bool }, + (void *) &askme, put_bool, get_bool }, {"pickup", "Pick things up automatically: ", - (int *) &auto_pickup, put_bool, get_bool }, + (void *) &auto_pickup, put_bool, get_bool }, {"overlay", "Overlay menu: ", - (int *) &menu_overlay, put_bool, get_bool }, + (void *) &menu_overlay, put_bool, get_bool }, {"name", "Name: ", - (int *) whoami, put_str, get_str_prot }, + (void *) whoami, put_str, get_str_prot }, {"file", "Save file: ", - (int *) file_name, put_str, get_str_prot }, + (void *) file_name, put_str, get_str_prot }, {"score", "Score file: ", - (int *) score_file, put_str, get_score }, + (void *) score_file, put_str, get_score }, {"class", "Character class: ", - (int *)&char_type, put_abil, get_abil }, + (void *)&char_type, put_abil, get_abil }, {"quest", "Quest item: ", - (int *) &quest_item, put_quest, get_quest } + (void *) &quest_item, put_quest, get_quest } }; /* * The ability field is read-only */ -void +int get_abil(int *abil, WINDOW *win) { register int oy, ox; getyx(win, oy, ox); put_abil(abil, win); - get_ro(win, oy, ox); + return get_ro(win, oy, ox); } /* * The quest field is read-only */ -void +int get_quest(int *quest, WINDOW *win) { register int oy, ox; getyx(win, oy, ox); waddstr(win, rel_magic[*quest].mi_name); - get_ro(win, oy, ox); + return get_ro(win, oy, ox); } /* @@ -387,14 +387,15 @@ parse_opts(char *str) strcpy((char *)op->o_opt, (char *)value); } - else if (*op->o_opt == -1) { /* Only init ability once */ + else if (*(int *)op->o_opt == -1) { + /* Only init ability once */ register int len = strlen(value); register int i; if (isupper(value[0])) value[0] = tolower(value[0]); for (i=0; io_opt = i; + *(int *)op->o_opt = i; break; } } diff --git a/rogue4/options.c b/rogue4/options.c index a4bc062..f14b70f 100644 --- a/rogue4/options.c +++ b/rogue4/options.c @@ -27,8 +27,8 @@ struct optstruct { char *o_name; /* option name */ char *o_prompt; /* prompt for interactive entry */ - int *o_opt; /* pointer to thing to set */ - int (*o_putfunc)(); /* function to print value */ + void *o_opt; /* pointer to thing to set */ + void (*o_putfunc)(); /* function to print value */ int (*o_getfunc)(); /* function to get value interactively */ }; @@ -43,23 +43,23 @@ int get_str(char *opt, WINDOW *win); OPTION optlist[] = { {"terse", "Terse output: ", - (int *) &terse, put_bool, get_bool }, + (void *) &terse, put_bool, get_bool }, {"flush", "Flush typeahead during battle: ", - (int *) &fight_flush, put_bool, get_bool }, + (void *) &fight_flush, put_bool, get_bool }, {"jump", "Show position only at end of run: ", - (int *) &jump, put_bool, get_bool }, + (void *) &jump, put_bool, get_bool }, {"step", "Do inventories one line at a time: ", - (int *) &slow_invent, put_bool, get_bool }, + (void *) &slow_invent, put_bool, get_bool }, {"askme", "Ask me about unidentified things: ", - (int *) &askme, put_bool, get_bool }, + (void *) &askme, put_bool, get_bool }, {"passgo", "Follow turnings in passageways: ", - (int *) &passgo, put_bool, get_bool }, + (void *) &passgo, put_bool, get_bool }, {"name", "Name: ", - (int *) whoami, put_str, get_str }, + (void *) whoami, put_str, get_str }, {"fruit", "Fruit: ", - (int *) fruit, put_str, get_str }, + (void *) fruit, put_str, get_str }, {"file", "Save file: ", - (int *) file_name, put_str, get_str } + (void *) file_name, put_str, get_str } }; /* diff --git a/xrogue/options.c b/xrogue/options.c index 91497e9..1e743e5 100644 --- a/xrogue/options.c +++ b/xrogue/options.c @@ -34,8 +34,8 @@ struct optstruct { char *o_name; /* option name */ char *o_prompt; /* prompt for interactive entry */ - int *o_opt; /* pointer to thing to set */ - int (*o_putfunc)(); /* function to print value */ + void *o_opt; /* pointer to thing to set */ + void (*o_putfunc)(); /* function to print value */ int (*o_getfunc)(); /* function to get value interactively */ }; @@ -47,83 +47,83 @@ int get_bool(bool *bp, WINDOW *win); void put_str(char *str, WINDOW *win); int get_str(char *opt, WINDOW *win); void put_abil(int *ability, WINDOW *win); -void get_abil(int *abil, WINDOW *win); +int get_abil(int *abil, WINDOW *win); void put_quest(int *quest, WINDOW *win); -void get_quest(int *quest, WINDOW *win); -void get_default(bool *bp, WINDOW *win); +int get_quest(int *quest, WINDOW *win); +int get_default(bool *bp, WINDOW *win); int get_str_prot(char *opt, WINDOW *win); int get_score(char *opt, WINDOW *win); bool allowchange(OPTION *op); OPTION optlist[] = { {"terse", "Terse output: ", - (int *) &terse, put_bool, get_bool }, + (void *) &terse, put_bool, get_bool }, {"flush", "Flush typeahead during battle: ", - (int *) &fight_flush, put_bool, get_bool }, + (void *) &fight_flush, put_bool, get_bool }, {"jump", "Show position only at end of run: ", - (int *) &jump, put_bool, get_bool }, + (void *) &jump, put_bool, get_bool }, {"step", "Do inventories one line at a time: ", - (int *) &slow_invent, put_bool, get_bool }, + (void *) &slow_invent, put_bool, get_bool }, {"askme", "Ask me about unidentified things: ", - (int *) &askme, put_bool, get_bool }, + (void *) &askme, put_bool, get_bool }, {"pickup", "Pick things up automatically: ", - (int *) &auto_pickup, put_bool, get_bool }, + (void *) &auto_pickup, put_bool, get_bool }, {"overlay", "Overlay menu: ", - (int *) &menu_overlay, put_bool, get_bool }, + (void *) &menu_overlay, put_bool, get_bool }, {"name", "Name: ", - (int *) whoami, put_str, get_str_prot }, + (void *) whoami, put_str, get_str_prot }, {"file", "Save file: ", - (int *) file_name, put_str, get_str_prot }, + (void *) file_name, put_str, get_str_prot }, {"score", "Score file: ", - (int *) score_file, put_str, get_score }, + (void *) score_file, put_str, get_score }, {"class", "Character type: ", - (int *) &char_type, put_abil, get_abil }, + (void *) &char_type, put_abil, get_abil }, {"quest", "Quest item: ", - (int *) &quest_item, put_quest, get_quest }, + (void *) &quest_item, put_quest, get_quest }, {"default", "Default Attributes: ", - (int *) &def_attr, put_bool, get_default } + (void *) &def_attr, put_bool, get_default } }; /* * The default attribute field is read-only */ -void +int get_default(bool *bp, WINDOW *win) { register int oy, ox; getyx(win, oy, ox); put_bool(bp, win); - get_ro(win, oy, ox); + return get_ro(win, oy, ox); } /* * The ability (class) field is read-only */ -void +int get_abil(int *abil, WINDOW *win) { register int oy, ox; getyx(win, oy, ox); put_abil(abil, win); - get_ro(win, oy, ox); + return get_ro(win, oy, ox); } /* * The quest field is read-only */ -void +int get_quest(int *quest, WINDOW *win) { register int oy, ox; getyx(win, oy, ox); waddstr(win, rel_magic[*quest].mi_name); - get_ro(win, oy, ox); + return get_ro(win, oy, ox); } /* @@ -411,13 +411,14 @@ parse_opts(char *str) strcpy((char *)op->o_opt, value); } - else if (*op->o_opt == -1) { /* Only init ability once */ + else if (*(int *)op->o_opt == -1) { + /* Only init ability once */ register int len = strlen(value); register int i; for (i=0; io_opt = i; + *(int *)op->o_opt = i; break; } } From 5cf0194676f74a3fc6a687a59760a3eb1de84ade Mon Sep 17 00:00:00 2001 From: "John \"Elwin\" Edwards" Date: Sun, 6 Mar 2016 19:32:47 -0500 Subject: [PATCH 3/8] Declare some function arguments as const. Some functions, mostly in fight.c, declared variables as pointers to const char but passed them to functions that took pointers to ordinary char. The strings did not actually get modified, so adding 'const' to the function definitions removed the warnings. --- arogue5/fight.c | 30 ++++++++++++++++-------------- rogue4/fight.c | 10 +++++----- rogue4/misc.c | 2 +- rogue4/rogue.h | 2 +- 4 files changed, 23 insertions(+), 21 deletions(-) diff --git a/arogue5/fight.c b/arogue5/fight.c index 7735b56..c983de2 100644 --- a/arogue5/fight.c +++ b/arogue5/fight.c @@ -20,17 +20,18 @@ bool roll_em(struct thing *att_er, struct thing *def_er, struct object *weap, bool hurl, struct object *cur_weapon, bool back_stab); -void hit(struct object *weapon, struct thing *tp, char *er, char *ee, - bool back_stab); -void miss(struct object *weapon, struct thing *tp, char *er, char *ee); +void hit(struct object *weapon, struct thing *tp, const char *er, + const char *ee, bool back_stab); +void miss(struct object *weapon, struct thing *tp, const char *er, + const char *ee); int dext_plus(int dexterity); int str_plus(short str); int add_dam(short str); int hung_dam(void); -void thunk(struct object *weap, struct thing *tp, char *mname); -void m_thunk(struct object *weap, struct thing *tp, char *mname); -void bounce(struct object *weap, struct thing *tp, char *mname); -void m_bounce(struct object *weap, struct thing *tp, char *mname); +void thunk(struct object *weap, struct thing *tp, const char *mname); +void m_thunk(struct object *weap, struct thing *tp, const char *mname); +void bounce(struct object *weap, struct thing *tp, const char *mname); +void m_bounce(struct object *weap, struct thing *tp, const char *mname); struct object *wield_weap(struct object *thrown, struct thing *mp); void explode(struct thing *tp); @@ -1037,7 +1038,7 @@ roll_em(struct thing *att_er, struct thing *def_er, struct object *weap, */ char * -prname(char *who, bool upper) +prname(const char *who, bool upper) { static char tbuf[LINELEN]; @@ -1062,7 +1063,8 @@ prname(char *who, bool upper) */ void -hit(struct object *weapon, struct thing *tp, char *er, char *ee, bool back_stab) +hit(struct object *weapon, struct thing *tp, const char *er, const char *ee, + bool back_stab) { register char *s = NULL; char @@ -1119,7 +1121,7 @@ hit(struct object *weapon, struct thing *tp, char *er, char *ee, bool back_stab) */ void -miss(struct object *weapon, struct thing *tp, char *er, char *ee) +miss(struct object *weapon, struct thing *tp, const char *er, const char *ee) { register char *s = NULL; char @@ -1226,7 +1228,7 @@ hung_dam(void) */ void -thunk(struct object *weap, struct thing *tp, char *mname) +thunk(struct object *weap, struct thing *tp, const char *mname) { /* tp: Defender */ char *def_name; /* Name of defender */ @@ -1254,7 +1256,7 @@ thunk(struct object *weap, struct thing *tp, char *mname) */ void -m_thunk(struct object *weap, struct thing *tp, char *mname) +m_thunk(struct object *weap, struct thing *tp, const char *mname) { char *att_name; /* Name of attacker */ @@ -1281,7 +1283,7 @@ m_thunk(struct object *weap, struct thing *tp, char *mname) */ void -bounce(struct object *weap, struct thing *tp, char *mname) +bounce(struct object *weap, struct thing *tp, const char *mname) { /* tp: Defender */ char *def_name; /* Name of defender */ @@ -1309,7 +1311,7 @@ bounce(struct object *weap, struct thing *tp, char *mname) */ void -m_bounce(struct object *weap, struct thing *tp, char *mname) +m_bounce(struct object *weap, struct thing *tp, const char *mname) { char *att_name; /* Name of attacker */ diff --git a/rogue4/fight.c b/rogue4/fight.c index 2c0ae82..c7ed6df 100644 --- a/rogue4/fight.c +++ b/rogue4/fight.c @@ -22,8 +22,8 @@ long e_levels[] = { }; bool roll_em(THING *thatt, THING *thdef, THING *weap, bool hurl); -void hit(char *er, char *ee); -void miss(char *er, char *ee); +void hit(const char *er, const char *ee); +void miss(const char *er, const char *ee); int str_plus(str_t str); int add_dam(str_t str); void thunk(THING *weap, const char *mname); @@ -446,7 +446,7 @@ roll_em(THING *thatt, THING *thdef, THING *weap, bool hurl) * The print name of a combatant */ char * -prname(char *who, bool upper) +prname(const char *who, bool upper) { static char tbuf[MAXSTR]; @@ -470,7 +470,7 @@ prname(char *who, bool upper) * Print a message to indicate a succesful hit */ void -hit(char *er, char *ee) +hit(const char *er, const char *ee) { register char *s = ""; @@ -496,7 +496,7 @@ hit(char *er, char *ee) * Print a message to indicate a poor swing */ void -miss(char *er, char *ee) +miss(const char *er, const char *ee) { register char *s = ""; diff --git a/rogue4/misc.c b/rogue4/misc.c index 6fe845d..f1151bb 100644 --- a/rogue4/misc.c +++ b/rogue4/misc.c @@ -345,7 +345,7 @@ aggravate(void) * "an". */ char * -vowelstr(char *str) +vowelstr(const char *str) { switch (*str) { diff --git a/rogue4/rogue.h b/rogue4/rogue.h index d0c1326..71342f1 100644 --- a/rogue4/rogue.h +++ b/rogue4/rogue.h @@ -619,7 +619,7 @@ void unconfuse(void); char *unctrol(char ch); void unlock_sc(void); void unsee(void); -char *vowelstr(char *str); +char *vowelstr(const char *str); char *xcrypt(const char *key, const char *setting); void w_wait_for(WINDOW *win, char ch); void wait_for(char ch); From a6c73eb65a764f9f917187dc42c2c02114a3e486 Mon Sep 17 00:00:00 2001 From: "John \"Elwin\" Edwards" Date: Sun, 6 Mar 2016 21:02:59 -0500 Subject: [PATCH 4/8] Fix various overlooked causes of warnings. GCC5 now produces under 300 lines of warnings, but the remaining ones will require more complex solutions. --- arogue5/rogue.h | 1 + rogue4/state.c | 5 ++++- srogue/rogue.h | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/arogue5/rogue.h b/arogue5/rogue.h index 9be0567..38ae143 100644 --- a/arogue5/rogue.h +++ b/arogue5/rogue.h @@ -1165,6 +1165,7 @@ void use_mm(int which); char *vowelstr(char *str); void wait_for(WINDOW *win, char ch); struct linked_list *wake_monster(int y, int x); +void wanderer(void); void waste_time(void); char *weap_name(struct object *obj); void wear(void); diff --git a/rogue4/state.c b/rogue4/state.c index 07f10fd..13e95c3 100644 --- a/rogue4/state.c +++ b/rogue4/state.c @@ -70,6 +70,9 @@ #define READSTAT ((format_error == 0) && (read_error == 0)) #define WRITESTAT (write_error == 0) +int rs_write_int(FILE *savef, int c); +int rs_read_int(int inf, int *i); + int read_error = FALSE; int write_error = FALSE; int format_error = FALSE; @@ -1533,7 +1536,7 @@ rs_write_thing(FILE *savef, THING *t) return(WRITESTAT); } -int +void rs_fix_thing(THING *t) { THING *item; diff --git a/srogue/rogue.h b/srogue/rogue.h index 9c5adec..a003572 100644 --- a/srogue/rogue.h +++ b/srogue/rogue.h @@ -565,7 +565,7 @@ struct monlev { struct linked_list { struct linked_list *l_next; struct linked_list *l_prev; - char *l_data; /* Various structure pointers */ + void *l_data; /* Various structure pointers */ }; From 090622896b4923615162808c3ae15cb2122c7964 Mon Sep 17 00:00:00 2001 From: "John \"Elwin\" Edwards" Date: Mon, 7 Mar 2016 19:26:08 -0500 Subject: [PATCH 5/8] Rogue V4: add two more function declarations. Though it was called with different numbers of arguments, add_line() does not need to be a variadic function. Making the second argument mandatory is a better solution. --- rogue4/rogue.h | 2 ++ rogue4/things.c | 20 ++++++++++---------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/rogue4/rogue.h b/rogue4/rogue.h index 71342f1..fdfa3ff 100644 --- a/rogue4/rogue.h +++ b/rogue4/rogue.h @@ -484,6 +484,7 @@ void _attach(THING **list, THING *item); void _detach(THING **list, THING *item); void _free_list(THING **ptr); bool add_haste(bool potion); +void add_line(char *fmt, char *arg); void add_pack(THING *obj, bool silent); void add_str(str_t *sp, int amt); void addmsg(char *fmt, ...); @@ -515,6 +516,7 @@ bool dropcheck(THING *op); void eat(void); int encread(void *starta, int size, int inf); void encwrite(void *starta, int size, FILE *outf); +void end_line(void); void endmsg(void); void enter_room(coord *cp); void extinguish(void (*func)()); diff --git a/rogue4/things.c b/rogue4/things.c index db6e161..292dba4 100644 --- a/rogue4/things.c +++ b/rogue4/things.c @@ -438,11 +438,11 @@ discovered(void) if (ch == '*') { print_disc(POTION); - add_line(""); + add_line("", NULL); print_disc(SCROLL); - add_line(""); + add_line("", NULL); print_disc(RING); - add_line(""); + add_line("", NULL); print_disc(STICK); end_line(); } @@ -505,7 +505,7 @@ print_disc(char type) num_found++; } if (num_found == 0) - add_line(nothing(type)); + add_line(nothing(type), NULL); } /* @@ -533,9 +533,8 @@ set_order(short *order, int numthings) * add_line: * Add a line to the list of discoveries */ -/* VARARGS1 */ -add_line(fmt, arg) -char *fmt, *arg; +void +add_line(char *fmt, char *arg) { if (line_cnt == 0) { @@ -545,7 +544,7 @@ char *fmt, *arg; } if (slow_invent) { - if (*fmt != '\0') + if (fmt != NULL && *fmt != '\0') msg(fmt, arg); line_cnt++; } @@ -575,7 +574,8 @@ char *fmt, *arg; * end_line: * End the list of lines */ -end_line() +void +end_line(void) { if (!slow_invent) if (line_cnt == 1 && !newpage) @@ -584,7 +584,7 @@ end_line() msg(lastfmt, lastarg); } else - add_line(NULL); + add_line(NULL, NULL); line_cnt = 0; newpage = FALSE; } From e9c84b263757596bae1f36522e770e113d8609e9 Mon Sep 17 00:00:00 2001 From: "John \"Elwin\" Edwards" Date: Mon, 7 Mar 2016 20:44:01 -0500 Subject: [PATCH 6/8] XRogue: get rid of VOID as an alias for long. Maybe some compilers in 1986 didn't handle void pointers well, but they are no longer a concern. --- xrogue/bolt.c | 2 +- xrogue/command.c | 2 +- xrogue/daemon.c | 4 ++-- xrogue/daemons.c | 12 ++++++------ xrogue/eat.c | 2 +- xrogue/effects.c | 12 ++++++------ xrogue/encumb.c | 2 +- xrogue/fight.c | 2 +- xrogue/main.c | 12 ++++++------ xrogue/misc.c | 12 ++++++------ xrogue/monsters.c | 4 ++-- xrogue/pack.c | 4 ++-- xrogue/potions.c | 26 +++++++++++++------------- xrogue/rings.c | 4 ++-- xrogue/rogue.h | 10 +++------- xrogue/state.c | 1 - xrogue/sticks.c | 2 +- xrogue/util.c | 2 +- xrogue/wear.c | 4 ++-- 19 files changed, 57 insertions(+), 62 deletions(-) diff --git a/xrogue/bolt.c b/xrogue/bolt.c index a41e26c..b108237 100644 --- a/xrogue/bolt.c +++ b/xrogue/bolt.c @@ -341,7 +341,7 @@ at_hero: if (!save(VS_BREATH, &player, rnd(20)+HUHDURATION); else { turn_on(player, ISHUH); - fuse(unconfuse, (VOID *)NULL, + fuse(unconfuse, NULL, rnd(20)+HUHDURATION, AFTER); msg("The confusion gas has confused you."); } diff --git a/xrogue/command.c b/xrogue/command.c index 5226eb6..6102e86 100644 --- a/xrogue/command.c +++ b/xrogue/command.c @@ -693,7 +693,7 @@ quit(int sig) * Reset the signal in case we got here via an interrupt */ - if ((VOID(*)())signal(SIGINT, quit) != (VOID(*)())quit) + if (signal(SIGINT, quit) != quit) mpos = 0; getyx(cw, oy, ox); diff --git a/xrogue/daemon.c b/xrogue/daemon.c index 09c245e..d38ff14 100644 --- a/xrogue/daemon.c +++ b/xrogue/daemon.c @@ -91,7 +91,7 @@ find_slot(void (*func)()) */ void -start_daemon(void (*dfunc)(), VOID *arg, int type) +start_daemon(void (*dfunc)(), void *arg, int type) { reg struct delayed_action *dev; @@ -164,7 +164,7 @@ do_daemons(int flag) */ void -fuse(void (*dfunc)(), VOID *arg, int time, int type) +fuse(void (*dfunc)(), void *arg, int time, int type) { reg struct delayed_action *wire; diff --git a/xrogue/daemons.c b/xrogue/daemons.c index 06f8167..9fb7dd8 100644 --- a/xrogue/daemons.c +++ b/xrogue/daemons.c @@ -114,7 +114,7 @@ doctor(struct thing *tp) void swander(void) { - start_daemon(rollwand, (VOID *)NULL, BEFORE); + start_daemon(rollwand, NULL, BEFORE); } /* @@ -137,7 +137,7 @@ rollwand(void) if (levtype != POSTLEV) wanderer(); kill_daemon(rollwand); - fuse(swander, (VOID *)NULL, WANDERTIME, BEFORE); + fuse(swander, NULL, WANDERTIME, BEFORE); } between = 0; } @@ -612,7 +612,7 @@ quill_charge(void) return; if (tobj->o_charges < QUILLCHARGES) tobj->o_charges++; - fuse (quill_charge, (VOID *)NULL, player.t_ctype == C_MAGICIAN ? 4 : 8, AFTER); + fuse (quill_charge, NULL, player.t_ctype == C_MAGICIAN ? 4 : 8, AFTER); } /* @@ -719,7 +719,7 @@ spell_recovery(void) time = SPELLTIME - max(17-pstats.s_intel, 0); time = max(time, 5); if (spell_power > 0) spell_power--; - fuse(spell_recovery, (VOID *)NULL, time, AFTER); + fuse(spell_recovery, NULL, time, AFTER); } /* @@ -734,7 +734,7 @@ prayer_recovery(void) time = SPELLTIME - max(17-pstats.s_wisdom, 0); time = max(time, 5); if (pray_time > 0) pray_time--; - fuse(prayer_recovery, (VOID *)NULL, time, AFTER); + fuse(prayer_recovery, NULL, time, AFTER); } /* @@ -749,6 +749,6 @@ chant_recovery(void) time = SPELLTIME - max(17-pstats.s_wisdom, 0); time = max(time, 5); if (chant_time > 0) chant_time--; - fuse(chant_recovery, (VOID *)NULL, time, AFTER); + fuse(chant_recovery, NULL, time, AFTER); } diff --git a/xrogue/eat.c b/xrogue/eat.c index b48f43d..122d8e2 100644 --- a/xrogue/eat.c +++ b/xrogue/eat.c @@ -153,7 +153,7 @@ eat(void) } else { turn_on(player, HASDISEASE); - fuse(cure_disease, (VOID *)NULL, roll(HEALTIME,SICKTIME),AFTER); + fuse(cure_disease, NULL, roll(HEALTIME,SICKTIME),AFTER); msg("You become ill. "); } } diff --git a/xrogue/effects.c b/xrogue/effects.c index b6ce3a8..2a5b115 100644 --- a/xrogue/effects.c +++ b/xrogue/effects.c @@ -309,7 +309,7 @@ effect(struct thing *att, struct thing *def, struct object *weap, bool thrown, if (on(player, HASSTINK)) lengthen(unstink, STINKTIME); else { turn_on(player, HASSTINK); - fuse(unstink, (VOID *)NULL, STINKTIME, AFTER); + fuse(unstink, NULL, STINKTIME, AFTER); } } } @@ -324,7 +324,7 @@ effect(struct thing *att, struct thing *def, struct object *weap, bool thrown, prname(attname, FALSE)); chg_str(-1); if (lost_str++ == 0) - fuse(res_strength, (VOID *)NULL, CHILLTIME, AFTER); + fuse(res_strength, NULL, CHILLTIME, AFTER); else lengthen(res_strength, CHILLTIME); } } @@ -359,7 +359,7 @@ effect(struct thing *att, struct thing *def, struct object *weap, bool thrown, } else { turn_on(*def, HASDISEASE); - fuse(cure_disease, (VOID *)NULL, roll(HEALTIME,SICKTIME), AFTER); + fuse(cure_disease, NULL, roll(HEALTIME,SICKTIME), AFTER); msg(terse ? "You have been diseased!" : "You have contracted an annoying disease!"); } @@ -491,7 +491,7 @@ effect(struct thing *att, struct thing *def, struct object *weap, bool thrown, turn_off(*att, CANDANCE); turn_on(*def, ISDANCE); msg("You begin to dance uncontrollably!"); - fuse(undance, (VOID *)NULL, roll(2,4), AFTER); + fuse(undance, NULL, roll(2,4), AFTER); } /* @@ -504,7 +504,7 @@ effect(struct thing *att, struct thing *def, struct object *weap, bool thrown, (find_slot(suffocate) == 0)) { turn_on(*att, DIDSUFFOCATE); msg("%s is beginning to suffocate you!", prname(attname, TRUE)); - fuse(suffocate, (VOID *)NULL, roll(9,3), AFTER); + fuse(suffocate, NULL, roll(9,3), AFTER); } /* @@ -552,7 +552,7 @@ effect(struct thing *att, struct thing *def, struct object *weap, bool thrown, msg("You are overcome by a foul odor!"); if (lost_str == 0) { chg_str(odor_str); - fuse(res_strength, (VOID *)NULL, SMELLTIME, AFTER); + fuse(res_strength, NULL, SMELLTIME, AFTER); lost_str -= odor_str; } else lengthen(res_strength, SMELLTIME); diff --git a/xrogue/encumb.c b/xrogue/encumb.c index 8aa9063..18c9848 100644 --- a/xrogue/encumb.c +++ b/xrogue/encumb.c @@ -169,7 +169,7 @@ wghtchk(void) ch = mvwinch(stdscr, hero.y, hero.x); if((ch != FLOOR && ch != PASSAGE)) { extinguish(wghtchk); - fuse(wghtchk, (VOID *)NULL, 1, AFTER); + fuse(wghtchk, NULL, 1, AFTER); inwhgt = FALSE; return; } diff --git a/xrogue/fight.c b/xrogue/fight.c index 724603d..d16874f 100644 --- a/xrogue/fight.c +++ b/xrogue/fight.c @@ -564,7 +564,7 @@ roll_em(struct thing *att_er, struct thing *def_er, struct object *weap, if (find_slot(unconfuse)) lengthen(unconfuse, HUHDURATION); else - fuse(unconfuse, (VOID *)NULL, HUHDURATION, AFTER); + fuse(unconfuse, NULL, HUHDURATION, AFTER); turn_on(player, ISHUH); } else msg("You feel dizzy, but it quickly passes."); diff --git a/xrogue/main.c b/xrogue/main.c index 8ffb759..cdaf917 100644 --- a/xrogue/main.c +++ b/xrogue/main.c @@ -244,19 +244,19 @@ main(int argc, char *argv[], char *envp[]) * Start up daemons and fuses */ start_daemon(doctor, &player, AFTER); - fuse(swander, (VOID *)NULL, WANDERTIME, AFTER); + fuse(swander, NULL, WANDERTIME, AFTER); /* Give characters their innate abilities */ if (player.t_ctype == C_MAGICIAN || player.t_ctype == C_RANGER) - fuse(spell_recovery, (VOID *)NULL, SPELLTIME, AFTER); + fuse(spell_recovery, NULL, SPELLTIME, AFTER); if (player.t_ctype == C_DRUID || player.t_ctype == C_MONK) - fuse(chant_recovery, (VOID *)NULL, SPELLTIME, AFTER); + fuse(chant_recovery, NULL, SPELLTIME, AFTER); if (player.t_ctype == C_CLERIC || player.t_ctype == C_PALADIN) - fuse(prayer_recovery, (VOID *)NULL, SPELLTIME, AFTER); - start_daemon(stomach, (VOID *)NULL, AFTER); + fuse(prayer_recovery, NULL, SPELLTIME, AFTER); + start_daemon(stomach, NULL, AFTER); if (player.t_ctype == C_THIEF || player.t_ctype == C_ASSASSIN || player.t_ctype == C_MONK) - start_daemon(trap_look, (VOID *)NULL, AFTER); + start_daemon(trap_look, NULL, AFTER); /* Does this character have any special knowledge? */ switch (player.t_ctype) { diff --git a/xrogue/misc.c b/xrogue/misc.c index 1ffaffc..cc67659 100644 --- a/xrogue/misc.c +++ b/xrogue/misc.c @@ -82,11 +82,11 @@ changeclass(long *newclass) * if he becomes a spell caster of some kind, give him a fuse */ if (*newclass == C_MAGICIAN || *newclass == C_RANGER) - fuse(spell_recovery, (VOID *)NULL, SPELLTIME, AFTER); + fuse(spell_recovery, NULL, SPELLTIME, AFTER); if (*newclass == C_DRUID || *newclass == C_MONK) - fuse(chant_recovery, (VOID *)NULL, SPELLTIME, AFTER); + fuse(chant_recovery, NULL, SPELLTIME, AFTER); if ((*newclass==C_CLERIC || *newclass==C_PALADIN) && !cur_misc[HEIL_ANKH]) - fuse(prayer_recovery, (VOID *)NULL, SPELLTIME, AFTER); + fuse(prayer_recovery, NULL, SPELLTIME, AFTER); /* * if he's changing from a fighter, ranger, or paladin then we * may have to change his sword since only these types can wield @@ -132,7 +132,7 @@ changeclass(long *newclass) */ if (*newclass == C_THIEF || *newclass == C_ASSASSIN || *newclass == C_MONK) - start_daemon(trap_look, (VOID *)NULL, AFTER); + start_daemon(trap_look, NULL, AFTER); /* adjust stats */ char_type = player.t_ctype = *newclass; @@ -1029,7 +1029,7 @@ use_mm(int which) else msg("Ahh.. Ahh... Choo!! "); if (!find_slot(dust_appear)) { turn_on(player, ISINVIS); - fuse(dust_appear, (VOID *)NULL, DUSTTIME, AFTER); + fuse(dust_appear, NULL, DUSTTIME, AFTER); PLAYER = IPLAYER; light(&hero); } @@ -1059,7 +1059,7 @@ use_mm(int which) if (find_slot(unchoke)) lengthen(unchoke, DUSTTIME); else - fuse(unchoke, (VOID *)NULL, DUSTTIME, AFTER); + fuse(unchoke, NULL, DUSTTIME, AFTER); turn_on(player, ISHUH); turn_on(player, ISBLIND); light(&hero); diff --git a/xrogue/monsters.c b/xrogue/monsters.c index db3c9d6..d3c5aac 100644 --- a/xrogue/monsters.c +++ b/xrogue/monsters.c @@ -685,7 +685,7 @@ wake_monster(int y, int x) if (find_slot(unconfuse)) lengthen(unconfuse, HUHDURATION); else { - fuse(unconfuse, (VOID *)NULL, HUHDURATION, AFTER); + fuse(unconfuse, NULL, HUHDURATION, AFTER); msg("%s's gaze has confused you.",prname(mname, TRUE)); turn_on(player, ISHUH); } @@ -727,7 +727,7 @@ wake_monster(int y, int x) if (!save(VS_WAND, &player, 0)) { msg("The gaze of %s blinds you! ", prname(mname, FALSE)); turn_on(player, ISBLIND); - fuse(sight, (VOID *)NULL, rnd(30)+20, AFTER); + fuse(sight, NULL, rnd(30)+20, AFTER); light(&hero); } } diff --git a/xrogue/pack.c b/xrogue/pack.c index 0129c73..b5e099f 100644 --- a/xrogue/pack.c +++ b/xrogue/pack.c @@ -259,7 +259,7 @@ picked_up: case HEIL_ANKH: msg("The ankh welds itself into your hand. "); if (player.t_ctype != C_CLERIC && player.t_ctype != C_PALADIN) - fuse(prayer_recovery, (VOID *)NULL, SPELLTIME, AFTER); + fuse(prayer_recovery, NULL, SPELLTIME, AFTER); /* start a fuse to change player into a paladin */ if (quest_item != HEIL_ANKH) { msg("You hear a strange, distant hypnotic calling... "); @@ -336,7 +336,7 @@ picked_up: } when QUILL_NAGROM: - fuse(quill_charge,(VOID *)NULL, 8, AFTER); + fuse(quill_charge, NULL, 8, AFTER); /* start a fuse to change player into a druid */ if (quest_item != QUILL_NAGROM) { msg("You begin to see things differently... "); diff --git a/xrogue/potions.c b/xrogue/potions.c index b409f0b..7042659 100644 --- a/xrogue/potions.c +++ b/xrogue/potions.c @@ -172,7 +172,7 @@ add_haste(bool blessed) else { msg("You feel yourself moving %sfaster.", blessed ? "much " : ""); turn_on(player, ISHASTE); - fuse(nohaste, (VOID *)NULL, roll(hasttime, hasttime), AFTER); + fuse(nohaste, NULL, roll(hasttime, hasttime), AFTER); } } @@ -232,7 +232,7 @@ add_slow(void) lengthen(noslow, roll(HASTETIME,HASTETIME)); else { turn_on(player, ISSLOW); - fuse(noslow, (VOID *)NULL, roll(HASTETIME,HASTETIME), AFTER); + fuse(noslow, NULL, roll(HASTETIME,HASTETIME), AFTER); } } } @@ -353,7 +353,7 @@ quaff(int which, int kind, int flags, bool is_potion) } else { /* Just light a fuse for how long player is safe */ if (off(player, ISCLEAR)) { - fuse(unclrhead, (VOID *)NULL, CLRDURATION, AFTER); + fuse(unclrhead, NULL, CLRDURATION, AFTER); msg("A faint blue aura surrounds your head."); } else { /* If we have a fuse lengthen it, else we @@ -518,7 +518,7 @@ quaff(int which, int kind, int flags, bool is_potion) { msg("A cloak of darkness falls around you."); turn_on(player, ISBLIND); - fuse(sight, (VOID *)NULL, SEEDURATION, AFTER); + fuse(sight, NULL, SEEDURATION, AFTER); light(&hero); } else @@ -529,7 +529,7 @@ quaff(int which, int kind, int flags, bool is_potion) if (off(player, CANSEE)) { turn_on(player, CANSEE); msg("Your eyes begin to tingle."); - fuse(unsee, (VOID *)NULL, blessed ? SEEDURATION*3 :SEEDURATION, AFTER); + fuse(unsee, NULL, blessed ? SEEDURATION*3 :SEEDURATION, AFTER); light(&hero); } else if (find_slot(unsee) != 0) { @@ -553,7 +553,7 @@ quaff(int which, int kind, int flags, bool is_potion) if (on(player, CANINWALL)) lengthen(unphase, duration*PHASEDURATION); else { - fuse(unphase, (VOID *)NULL, duration*PHASEDURATION, AFTER); + fuse(unphase, NULL, duration*PHASEDURATION, AFTER); turn_on(player, CANINWALL); } msg("You feel %slight-headed!", @@ -577,7 +577,7 @@ quaff(int which, int kind, int flags, bool is_potion) } } else { - fuse(land, (VOID *)NULL, duration*FLYTIME, AFTER); + fuse(land, NULL, duration*FLYTIME, AFTER); turn_on(player, ISFLY); } if (say_message) { @@ -641,7 +641,7 @@ quaff(int which, int kind, int flags, bool is_potion) if (off(player, ISINVIS)) { turn_on(player, ISINVIS); msg("You have a tingling feeling all over your body"); - fuse(appear, (VOID *)NULL, blessed ? GONETIME*3 : GONETIME, AFTER); + fuse(appear, NULL, blessed ? GONETIME*3 : GONETIME, AFTER); PLAYER = IPLAYER; light(&hero); } @@ -703,7 +703,7 @@ quaff(int which, int kind, int flags, bool is_potion) if (!find_slot(unskill)) { /* No skill */ pstats.s_lvladj = -2; pstats.s_lvl += pstats.s_lvladj; - fuse(unskill, (VOID *)NULL, SKILLDURATION, AFTER); + fuse(unskill, NULL, SKILLDURATION, AFTER); } else { /* Has an artifical skill */ /* Is the skill beneficial? */ @@ -759,7 +759,7 @@ quaff(int which, int kind, int flags, bool is_potion) if (!find_slot(unskill)) { pstats.s_lvladj = adjust; pstats.s_lvl += pstats.s_lvladj; - fuse(unskill, (VOID *)NULL, + fuse(unskill, NULL, blessed ? SKILLDURATION*2 : SKILLDURATION, AFTER); } else { /* Has an artifical skill */ @@ -819,7 +819,7 @@ quaff(int which, int kind, int flags, bool is_potion) say_message = FALSE; } else { - fuse(nofire, (VOID *)NULL, duration*FIRETIME, AFTER); + fuse(nofire, NULL, duration*FIRETIME, AFTER); turn_on(player, NOFIRE); } if (say_message) { @@ -856,7 +856,7 @@ quaff(int which, int kind, int flags, bool is_potion) say_message = FALSE; } else { - fuse(nocold, (VOID *)NULL, duration*COLDTIME, AFTER); + fuse(nocold, NULL, duration*COLDTIME, AFTER); turn_on(player, NOCOLD); } if (say_message) { @@ -890,7 +890,7 @@ quaff(int which, int kind, int flags, bool is_potion) say_message = FALSE; } else { - fuse(nobolt, (VOID *)NULL, duration*BOLTTIME, AFTER); + fuse(nobolt, NULL, duration*BOLTTIME, AFTER); turn_on(player, NOBOLT); } if (say_message) { diff --git a/xrogue/rings.c b/xrogue/rings.c index ee61bfd..4e1cf0d 100644 --- a/xrogue/rings.c +++ b/xrogue/rings.c @@ -100,9 +100,9 @@ ring_on(struct linked_list *item) } } when R_SEARCH: - start_daemon(ring_search, (VOID *)NULL, AFTER); + start_daemon(ring_search, NULL, AFTER); when R_TELEPORT: - start_daemon(ring_teleport, (VOID *)NULL, AFTER); + start_daemon(ring_teleport, NULL, AFTER); } status(FALSE); if (r_know[obj->o_which] && r_guess[obj->o_which]) { diff --git a/xrogue/rogue.h b/xrogue/rogue.h index 409d71d..8aa0f15 100644 --- a/xrogue/rogue.h +++ b/xrogue/rogue.h @@ -20,12 +20,8 @@ #include "config.h" #endif -/* - * some compiler don't handle void pointers well so - */ #include #define reg register -#define VOID long #undef lines #define ENCREAD encread #define ENCWRITE encwrite @@ -935,7 +931,7 @@ struct delayed_action { int d_type; void (*d_func)(); union { - VOID *vp; + void *vp; int i; } d_arg; int d_time; @@ -1322,7 +1318,7 @@ int findmindex(char *name); void fix_stick(struct object *cur); void fright(struct thing *th); void fumble(void); -void fuse(void (*dfunc)(), VOID *arg, int time, int type); +void fuse(void (*dfunc)(), void *arg, int time, int type); void genmonsters(int least, bool treas); coord get_coordinates(void); bool get_dir(coord *direction); @@ -1452,7 +1448,7 @@ bool skirmish(struct thing *attacker, coord *mp, struct object *weap, bool thrown); struct linked_list *spec_item(int type, int which, int hit, int damage); void spell_recovery(void); -void start_daemon(void (*dfunc)(), VOID *arg, int type); +void start_daemon(void (*dfunc)(), void *arg, int type); void status(bool display); void steal(void); bool step_ok(int y, int x, int can_on_monst, struct thing *flgptr); diff --git a/xrogue/state.c b/xrogue/state.c index 610bc6d..a9b7752 100644 --- a/xrogue/state.c +++ b/xrogue/state.c @@ -57,7 +57,6 @@ #include #include #include -#undef VOID #undef MOUSE_MOVED #elif defined(__DJGPP__) #include diff --git a/xrogue/sticks.c b/xrogue/sticks.c index 4332647..e2ad563 100644 --- a/xrogue/sticks.c +++ b/xrogue/sticks.c @@ -613,7 +613,7 @@ do_zap(struct thing *zapper, struct object *obj, coord *direction, int which, turn_on(player, HASDISEASE); turn_on(player, HASINFEST); turn_on(player, DOROT); - fuse(cure_disease, (VOID *)NULL, roll(HEALTIME,SICKTIME), AFTER); + fuse(cure_disease, NULL, roll(HEALTIME,SICKTIME), AFTER); infest_dam++; } else if (sick == FALSE) msg("You feel momentarily sick"); diff --git a/xrogue/util.c b/xrogue/util.c index fc0472d..0e584bc 100644 --- a/xrogue/util.c +++ b/xrogue/util.c @@ -203,7 +203,7 @@ confus_player(void) if (find_slot(unconfuse)) lengthen(unconfuse, HUHDURATION); else - fuse(unconfuse, (VOID *)NULL, HUHDURATION, AFTER); + fuse(unconfuse, NULL, HUHDURATION, AFTER); turn_on(player, ISHUH); } else msg("You feel dizzy for a moment, but it quickly passes."); diff --git a/xrogue/wear.c b/xrogue/wear.c index bc092cb..ef16512 100644 --- a/xrogue/wear.c +++ b/xrogue/wear.c @@ -328,7 +328,7 @@ wear(void) msg("Wearing %s", inv_name(obj,TRUE)); cur_misc[WEAR_GAUNTLET] = obj; if (obj->o_which == MM_FUMBLE) - start_daemon(fumble, (VOID *)NULL, AFTER); + start_daemon(fumble, NULL, AFTER); /* * the jewel of attacks does an aggavate monster */ @@ -358,7 +358,7 @@ wear(void) msg("Wearing %s",inv_name(obj,TRUE)); cur_misc[WEAR_NECKLACE] = obj; msg("The necklace is beginning to strangle you!"); - start_daemon(strangle, (VOID *)NULL, AFTER); + start_daemon(strangle, NULL, AFTER); otherwise: msg("What a strange item you have!"); } From dafa5cc722780c67e2b506559943549cd6d43b1e Mon Sep 17 00:00:00 2001 From: "John \"Elwin\" Edwards" Date: Tue, 8 Mar 2016 20:47:57 -0500 Subject: [PATCH 7/8] XRogue: fix some uses of entire structs instead of their members. Some calls to runto() were given a pointer to the player struct instead of to the player's coordinates. A call to death() was passed a pointer to a monster instead of the monster's type number. --- xrogue/player.c | 4 ++-- xrogue/sticks.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/xrogue/player.c b/xrogue/player.c index 5045ac2..e6c73fa 100644 --- a/xrogue/player.c +++ b/xrogue/player.c @@ -510,7 +510,7 @@ give(struct thing *th) /* just let him roam around */ turn_on(*th, ISRUN); if (on(*th, ISFLEE)) turn_off(*th, ISFLEE); - runto(th, &player); + runto(th, &hero); th->t_action = A_NIL; return; } @@ -537,7 +537,7 @@ give(struct thing *th) turn_on(*th, ISRUN); if (on(*th, ISFLEE)) turn_off(*th, ISFLEE); - runto(th, &player); + runto(th, &hero); th->t_action = A_NIL; return; } diff --git a/xrogue/sticks.c b/xrogue/sticks.c index e2ad563..df2a0a7 100644 --- a/xrogue/sticks.c +++ b/xrogue/sticks.c @@ -513,7 +513,7 @@ do_zap(struct thing *zapper, struct object *obj, coord *direction, int which, pstats.s_hpt = -1; msg("Your life has been sucked out from you! --More--"); wait_for(' '); - death(zapper); + death(zapper->t_index); } else msg("You feel a great drain on your system."); From 758c6b1bf08f249614c6b1df46bcc114dea00884 Mon Sep 17 00:00:00 2001 From: "John \"Elwin\" Edwards" Date: Fri, 11 Mar 2016 17:40:00 -0500 Subject: [PATCH 8/8] arogue7, xrogue: improve the handling of the arguments to fuses. fuse() now expects a pointer as the argument to a fuse function. If this is one of the functions that takes int, fuse() follows the pointer and stores that value in the f_list slot, in the integer field of the argument union. When the fuse goes off, do_fuses() recognizes the function and passes it the integer field instead of the pointer. This has the disadvantage of hard-coding the functions that require int in daemon.c, but since the int is copied into f_list, it no longer has to be in static or global memory, which simplifies several files. --- arogue7/daemon.c | 17 +++++++++----- arogue7/daemons.c | 10 ++++----- arogue7/effects.c | 18 ++++++++------- arogue7/encumb.c | 2 +- arogue7/fight.c | 2 +- arogue7/main.c | 12 +++++----- arogue7/misc.c | 12 +++++----- arogue7/monsters.c | 4 ++-- arogue7/pack.c | 11 ++++++---- arogue7/potions.c | 26 +++++++++++----------- arogue7/rings.c | 4 ++-- arogue7/rogue.h | 4 ++-- arogue7/sticks.c | 4 ++-- arogue7/util.c | 2 +- arogue7/wear.c | 4 ++-- xrogue/daemon.c | 33 ++++++++++++++++------------ xrogue/effects.c | 9 +++++--- xrogue/fight.c | 4 +--- xrogue/misc.c | 36 +++++++++++++++--------------- xrogue/pack.c | 55 ++++++++++++++++++++++++++-------------------- xrogue/rogue.h | 2 +- 21 files changed, 147 insertions(+), 124 deletions(-) diff --git a/arogue7/daemon.c b/arogue7/daemon.c index 3a6138c..b9e52a5 100644 --- a/arogue7/daemon.c +++ b/arogue7/daemon.c @@ -95,7 +95,7 @@ find_slot(void (*func)()) * Start a daemon, takes a function. */ void -start_daemon(void (*func)(), int arg, int type) +start_daemon(void (*func)(), void *arg, int type) { reg struct delayed_action *dev; @@ -103,7 +103,7 @@ start_daemon(void (*func)(), int arg, int type) if (dev != NULL) { dev->d_type = type; dev->d_func = func; - dev->d_.arg = arg; + dev->d_.varg = arg; dev->d_time = DAEMON; demoncnt += 1; /* update count */ } @@ -154,7 +154,7 @@ do_daemons(int flag) * Executing each one, giving it the proper arguments */ if (dev->d_type == flag && dev->d_time == DAEMON) - (*dev->d_func)(dev->d_.arg); + (*dev->d_func)(dev->d_.varg); } @@ -163,7 +163,7 @@ do_daemons(int flag) * Start a fuse to go off in a certain number of turns */ void -fuse(void (*func)(), int arg, int time, int type) +fuse(void (*func)(), void *arg, int time, int type) { reg struct delayed_action *wire; @@ -171,7 +171,10 @@ fuse(void (*func)(), int arg, int time, int type) if (wire != NULL) { wire->d_type = type; wire->d_func = func; - wire->d_.arg = arg; + if (func == changeclass || func == res_strength) + wire->d_.arg = *(int *) arg; + else + wire->d_.varg = arg; wire->d_time = time; fusecnt += 1; /* update count */ } @@ -232,8 +235,10 @@ do_fuses(int flag) if(flag == wire->d_type && wire->d_time > 0 && --wire->d_time == 0) { wire->d_type = EMPTY; - if (wire->d_func != NULL) + if (wire->d_func == changeclass || wire->d_func == res_strength) (*wire->d_func)(wire->d_.arg); + else if (wire->d_func != NULL) + (*wire->d_func)(wire->d_.varg); fusecnt -= 1; } } diff --git a/arogue7/daemons.c b/arogue7/daemons.c index da5d976..241bebe 100644 --- a/arogue7/daemons.c +++ b/arogue7/daemons.c @@ -111,7 +111,7 @@ doctor(struct thing *tp) void swander(void) { - start_daemon(rollwand, 0, BEFORE); + start_daemon(rollwand, NULL, BEFORE); } /* @@ -134,7 +134,7 @@ rollwand(void) if (levtype != POSTLEV) wanderer(); kill_daemon(rollwand); - fuse(swander, 0, WANDERTIME, BEFORE); + fuse(swander, NULL, WANDERTIME, BEFORE); } between = 0; } @@ -663,7 +663,7 @@ spell_recovery(void) time = SPELLTIME - max(17-pstats.s_intel, 0); time = max(time, 5); if (spell_power > 0) spell_power--; - fuse(spell_recovery, 0, time, AFTER); + fuse(spell_recovery, NULL, time, AFTER); } /* * give the hero back some prayer points @@ -676,7 +676,7 @@ prayer_recovery(void) time = SPELLTIME - max(17-pstats.s_wisdom, 0); time = max(time, 5); if (pray_time > 0) pray_time--; - fuse(prayer_recovery, 0, time, AFTER); + fuse(prayer_recovery, NULL, time, AFTER); } /* * give the hero back some chant points @@ -689,5 +689,5 @@ chant_recovery(void) time = SPELLTIME - max(17-pstats.s_wisdom, 0); time = max(time, 5); if (chant_time > 0) chant_time--; - fuse(chant_recovery, 0, time, AFTER); + fuse(chant_recovery, NULL, time, AFTER); } diff --git a/arogue7/effects.c b/arogue7/effects.c index 082026c..8066e0f 100644 --- a/arogue7/effects.c +++ b/arogue7/effects.c @@ -294,7 +294,7 @@ effect(struct thing *att, struct thing *def, struct object *weap, bool thrown, if (on(player, HASSTINK)) lengthen(unstink, STINKTIME); else { turn_on(player, HASSTINK); - fuse(unstink, 0, STINKTIME, AFTER); + fuse(unstink, NULL, STINKTIME, AFTER); } } } @@ -308,8 +308,10 @@ effect(struct thing *att, struct thing *def, struct object *weap, bool thrown, msg("You cringe at %s's chilling touch.", prname(attname, FALSE)); chg_str(-1); - if (lost_str++ == 0) - fuse(res_strength, 0, CHILLTIME, AFTER); + if (lost_str++ == 0) { + int fuse_arg = 0; + fuse(res_strength, &fuse_arg, CHILLTIME, AFTER); + } else lengthen(res_strength, CHILLTIME); } } @@ -344,7 +346,7 @@ effect(struct thing *att, struct thing *def, struct object *weap, bool thrown, } else { turn_on(*def, HASDISEASE); - fuse(cure_disease, 0, roll(HEALTIME,SICKTIME), AFTER); + fuse(cure_disease, NULL, roll(HEALTIME,SICKTIME), AFTER); msg(terse ? "You have been diseased." : "You have contracted a disease!"); } @@ -478,7 +480,7 @@ effect(struct thing *att, struct thing *def, struct object *weap, bool thrown, turn_off(*att, CANDANCE); turn_on(*def, ISDANCE); msg("You begin to dance uncontrollably!"); - fuse(undance, 0, roll(2,4), AFTER); + fuse(undance, NULL, roll(2,4), AFTER); } /* @@ -491,7 +493,7 @@ effect(struct thing *att, struct thing *def, struct object *weap, bool thrown, (find_slot(suffocate) == 0)) { turn_on(*att, DIDSUFFOCATE); msg("%s is beginning to suffocate you.", prname(attname, TRUE)); - fuse(suffocate, 0, roll(9,3), AFTER); + fuse(suffocate, NULL, roll(9,3), AFTER); } /* @@ -530,11 +532,11 @@ effect(struct thing *att, struct thing *def, struct object *weap, bool thrown, msg("You smell an unpleasant odor."); else { int odor_str = -(rnd(6)+1); - + int fuse_arg2 = 0; msg("You are overcome by a foul odor."); if (lost_str == 0) { chg_str(odor_str); - fuse(res_strength, 0, SMELLTIME, AFTER); + fuse(res_strength, &fuse_arg2, SMELLTIME, AFTER); lost_str -= odor_str; } else lengthen(res_strength, SMELLTIME); diff --git a/arogue7/encumb.c b/arogue7/encumb.c index c703379..b92e904 100644 --- a/arogue7/encumb.c +++ b/arogue7/encumb.c @@ -174,7 +174,7 @@ wghtchk(void) ch = CCHAR( mvwinch(stdscr, hero.y, hero.x) ); if((ch != FLOOR && ch != PASSAGE)) { extinguish(wghtchk); - fuse(wghtchk,TRUE,1,AFTER); + fuse(wghtchk, NULL, 1, AFTER); inwhgt = FALSE; return; } diff --git a/arogue7/fight.c b/arogue7/fight.c index a94e2f2..b172ac0 100644 --- a/arogue7/fight.c +++ b/arogue7/fight.c @@ -538,7 +538,7 @@ roll_em(struct thing *att_er, struct thing *def_er, struct object *weap, if (find_slot(unconfuse)) lengthen(unconfuse, HUHDURATION); else - fuse(unconfuse, 0, HUHDURATION, AFTER); + fuse(unconfuse, NULL, HUHDURATION, AFTER); turn_on(player, ISHUH); } else msg("You feel dizzy, but it quickly passes."); diff --git a/arogue7/main.c b/arogue7/main.c index 55fbadb..db650da 100644 --- a/arogue7/main.c +++ b/arogue7/main.c @@ -393,18 +393,18 @@ main(int argc, char *argv[], char *envp[]) * Start up daemons and fuses */ start_daemon(doctor, &player, AFTER); - fuse(swander, 0, WANDERTIME, AFTER); + fuse(swander, NULL, WANDERTIME, AFTER); if (player.t_ctype == C_MAGICIAN || player.t_ctype == C_RANGER) - fuse(spell_recovery, 0, SPELLTIME, AFTER); + fuse(spell_recovery, NULL, SPELLTIME, AFTER); if (player.t_ctype == C_DRUID || player.t_ctype == C_RANGER) - fuse(chant_recovery, 0, SPELLTIME, AFTER); + fuse(chant_recovery, NULL, SPELLTIME, AFTER); if (player.t_ctype == C_CLERIC || player.t_ctype == C_PALADIN) - fuse(prayer_recovery, 0, SPELLTIME, AFTER); - start_daemon(stomach, 0, AFTER); + fuse(prayer_recovery, NULL, SPELLTIME, AFTER); + start_daemon(stomach, NULL, AFTER); if (player.t_ctype == C_THIEF || player.t_ctype == C_ASSASIN || player.t_ctype == C_MONK) - start_daemon(trap_look, 0, AFTER); + start_daemon(trap_look, NULL, AFTER); /* Does this character have any special knowledge? */ switch (player.t_ctype) { diff --git a/arogue7/misc.c b/arogue7/misc.c index 536124c..1304ad4 100644 --- a/arogue7/misc.c +++ b/arogue7/misc.c @@ -81,11 +81,11 @@ changeclass(int newclass) * if he becomes a spell caster of some kind, give him a fuse */ if (newclass == C_MAGICIAN || newclass == C_RANGER) - fuse(spell_recovery, 0, SPELLTIME, AFTER); + fuse(spell_recovery, NULL, SPELLTIME, AFTER); if (newclass == C_DRUID || newclass == C_RANGER) - fuse(chant_recovery, 0, SPELLTIME, AFTER); + fuse(chant_recovery, NULL, SPELLTIME, AFTER); if ((newclass==C_CLERIC || newclass==C_PALADIN) && !cur_misc[HEIL_ANKH]) - fuse(prayer_recovery, 0, SPELLTIME, AFTER); + fuse(prayer_recovery, NULL, SPELLTIME, AFTER); /* * if he's changing from a fighter then may have to change * his sword since only fighter can use two-handed @@ -117,7 +117,7 @@ changeclass(int newclass) * if he becomes a thief then add the trap_look() daemon */ if (newclass == C_THIEF || newclass == C_ASSASIN || newclass == C_MONK) - start_daemon(trap_look, 0, AFTER); + start_daemon(trap_look, NULL, AFTER); char_type = player.t_ctype = newclass; save = pstats.s_hpt; max_stats.s_hpt = pstats.s_hpt = 0; @@ -1025,7 +1025,7 @@ use_mm(int which) msg("aaAAACHOOOooo. Cough. Cough. Sneeze. Sneeze."); if (!find_slot(dust_appear)) { turn_on(player, ISINVIS); - fuse(dust_appear, 0, DUSTTIME, AFTER); + fuse(dust_appear, NULL, DUSTTIME, AFTER); PLAYER = IPLAYER; light(&hero); } @@ -1054,7 +1054,7 @@ use_mm(int which) if (find_slot(unchoke)) lengthen(unchoke, DUSTTIME); else - fuse(unchoke, 0, DUSTTIME, AFTER); + fuse(unchoke, NULL, DUSTTIME, AFTER); turn_on(player, ISHUH); turn_on(player, ISBLIND); light(&hero); diff --git a/arogue7/monsters.c b/arogue7/monsters.c index 65a775d..a574b3e 100644 --- a/arogue7/monsters.c +++ b/arogue7/monsters.c @@ -649,7 +649,7 @@ wake_monster(int y, int x) if (find_slot(unconfuse)) lengthen(unconfuse, HUHDURATION); else { - fuse(unconfuse, 0, HUHDURATION, AFTER); + fuse(unconfuse, NULL, HUHDURATION, AFTER); msg("%s's gaze has confused you.",prname(mname, TRUE)); turn_on(player, ISHUH); } @@ -691,7 +691,7 @@ wake_monster(int y, int x) if (!save(VS_WAND, &player, 0)) { msg("The gaze of %s blinds you", prname(mname, FALSE)); turn_on(player, ISBLIND); - fuse(sight, 0, rnd(30)+20, AFTER); + fuse(sight, NULL, rnd(30)+20, AFTER); light(&hero); } } diff --git a/arogue7/pack.c b/arogue7/pack.c index 46c52f1..a9363ec 100644 --- a/arogue7/pack.c +++ b/arogue7/pack.c @@ -249,12 +249,13 @@ picked_up: /* Relics can do strange things when you pick them up */ if (obj->o_type == RELIC) { + int newclass; switch (obj->o_which) { /* the ankh of Heil gives you prayers */ case HEIL_ANKH: msg("The ankh welds itself into your hand."); if (player.t_ctype != C_CLERIC && player.t_ctype != C_PALADIN) - fuse(prayer_recovery, 0, SPELLTIME, AFTER); + fuse(prayer_recovery, NULL, SPELLTIME, AFTER); /* A cloak must be worn. */ when EMORI_CLOAK: @@ -306,7 +307,7 @@ picked_up: msg("The excrutiating pain slowly turns into a dull throb."); when QUILL_NAGROM: - fuse(quill_charge,0,player.t_ctype==C_MAGICIAN ? 4 : 8,AFTER); + fuse(quill_charge,NULL,player.t_ctype==C_MAGICIAN ? 4 : 8,AFTER); /* Weapons will insist on being wielded. */ when MUSTY_DAGGER: @@ -316,7 +317,8 @@ picked_up: /* For the daggers start a fuse to change player to a thief. */ /* and set a daemon to eat gold. */ if (obj->o_which == MUSTY_DAGGER) { - fuse(changeclass, C_THIEF, roll(20, 20), AFTER); + newclass = C_THIEF; + fuse(changeclass, &newclass, roll(20, 20), AFTER); if (purse > 0) msg("Your purse feels lighter"); else @@ -326,7 +328,8 @@ picked_up: } /* For the axe start a fuse to change player to a fighter. */ if (obj->o_which == AXE_AKLAD) - fuse(changeclass, C_FIGHTER, roll(20, 20), AFTER); + newclass = C_FIGHTER; + fuse(changeclass, &newclass, roll(20, 20), AFTER); if (cur_weapon != NULL) { msg("The artifact insists you release your current weapon."); if (!dropcheck(cur_weapon)) { diff --git a/arogue7/potions.c b/arogue7/potions.c index a22fab5..122ed06 100644 --- a/arogue7/potions.c +++ b/arogue7/potions.c @@ -150,7 +150,7 @@ add_haste(bool blessed) else { msg("You feel yourself moving %sfaster.", blessed ? "much " : ""); turn_on(player, ISHASTE); - fuse(nohaste, 0, roll(hasttime, hasttime), AFTER); + fuse(nohaste, NULL, roll(hasttime, hasttime), AFTER); } } @@ -206,7 +206,7 @@ add_slow(void) lengthen(noslow, roll(HASTETIME,HASTETIME)); else { turn_on(player, ISSLOW); - fuse(noslow, 0, roll(HASTETIME,HASTETIME), AFTER); + fuse(noslow, NULL, roll(HASTETIME,HASTETIME), AFTER); } } } @@ -324,7 +324,7 @@ quaff(int which, int kind, int flags, bool is_potion) } else { /* Just light a fuse for how long player is safe */ if (off(player, ISCLEAR)) { - fuse(unclrhead, 0, CLRDURATION, AFTER); + fuse(unclrhead, NULL, CLRDURATION, AFTER); msg("A faint blue aura surrounds your head."); } else { /* If we have a fuse lengthen it, else we @@ -491,7 +491,7 @@ quaff(int which, int kind, int flags, bool is_potion) { msg("A cloak of darkness falls around you."); turn_on(player, ISBLIND); - fuse(sight, 0, SEEDURATION, AFTER); + fuse(sight, NULL, SEEDURATION, AFTER); light(&hero); } else @@ -501,7 +501,7 @@ quaff(int which, int kind, int flags, bool is_potion) if (off(player, CANSEE)) { turn_on(player, CANSEE); msg("Your eyes begin to tingle."); - fuse(unsee, 0, blessed ? SEEDURATION*3 :SEEDURATION, AFTER); + fuse(unsee, NULL, blessed ? SEEDURATION*3 :SEEDURATION, AFTER); light(&hero); } else if (find_slot(unsee) != 0) @@ -523,7 +523,7 @@ quaff(int which, int kind, int flags, bool is_potion) if (on(player, CANINWALL)) lengthen(unphase, duration*PHASEDURATION); else { - fuse(unphase, 0, duration*PHASEDURATION, AFTER); + fuse(unphase, NULL, duration*PHASEDURATION, AFTER); turn_on(player, CANINWALL); } msg("You feel %slight-headed!", @@ -547,7 +547,7 @@ quaff(int which, int kind, int flags, bool is_potion) } } else { - fuse(land, 0, duration*FLYTIME, AFTER); + fuse(land, NULL, duration*FLYTIME, AFTER); turn_on(player, ISFLY); } if (say_message) { @@ -610,7 +610,7 @@ quaff(int which, int kind, int flags, bool is_potion) if (off(player, ISINVIS)) { turn_on(player, ISINVIS); msg("You have a tingling feeling all over your body"); - fuse(appear, 0, blessed ? GONETIME*3 : GONETIME, AFTER); + fuse(appear, NULL, blessed ? GONETIME*3 : GONETIME, AFTER); PLAYER = IPLAYER; light(&hero); } @@ -675,7 +675,7 @@ quaff(int which, int kind, int flags, bool is_potion) if (!find_slot(unskill)) { /* No skill */ pstats.s_lvladj = -2; pstats.s_lvl += pstats.s_lvladj; - fuse(unskill, 0, SKILLDURATION, AFTER); + fuse(unskill, NULL, SKILLDURATION, AFTER); } else { /* Has an artifical skill */ /* Is the skill beneficial? */ @@ -714,7 +714,7 @@ quaff(int which, int kind, int flags, bool is_potion) if (!find_slot(unskill)) { pstats.s_lvladj = adjust; pstats.s_lvl += pstats.s_lvladj; - fuse(unskill, 0, + fuse(unskill, NULL, blessed ? SKILLDURATION*2 : SKILLDURATION, AFTER); } else { /* Has an artifical skill */ @@ -763,7 +763,7 @@ quaff(int which, int kind, int flags, bool is_potion) } } else { - fuse(nofire, 0, duration*FIRETIME, AFTER); + fuse(nofire, NULL, duration*FIRETIME, AFTER); turn_on(player, NOFIRE); } if (say_message) { @@ -789,7 +789,7 @@ quaff(int which, int kind, int flags, bool is_potion) } } else { - fuse(nocold, 0, duration*COLDTIME, AFTER); + fuse(nocold, NULL, duration*COLDTIME, AFTER); turn_on(player, NOCOLD); } if (say_message) { @@ -811,7 +811,7 @@ quaff(int which, int kind, int flags, bool is_potion) lengthen(nobolt, duration*BOLTTIME); } else { - fuse(nobolt, 0, duration*BOLTTIME, AFTER); + fuse(nobolt, NULL, duration*BOLTTIME, AFTER); turn_on(player, NOBOLT); } if (say_message) diff --git a/arogue7/rings.c b/arogue7/rings.c index 1c87346..7cb33c2 100644 --- a/arogue7/rings.c +++ b/arogue7/rings.c @@ -90,9 +90,9 @@ ring_on(struct linked_list *item) } } when R_SEARCH: - start_daemon(ring_search, 0, AFTER); + start_daemon(ring_search, NULL, AFTER); when R_TELEPORT: - start_daemon(ring_teleport, 0, AFTER); + start_daemon(ring_teleport, NULL, AFTER); } status(FALSE); if (r_know[obj->o_which] && r_guess[obj->o_which]) diff --git a/arogue7/rogue.h b/arogue7/rogue.h index 048f54a..311f181 100644 --- a/arogue7/rogue.h +++ b/arogue7/rogue.h @@ -1223,7 +1223,7 @@ struct delayed_action *find_slot(void (*func)()); int findmindex(char *name); void fix_stick(struct object *cur); void fumble(void); -void fuse(void (*func)(), int arg, int time, int type); +void fuse(void (*func)(), void *arg, int time, int type); void genmonsters(int least, bool treas); coord get_coordinates(void); bool get_dir(coord *direction); @@ -1357,7 +1357,7 @@ bool skirmish(struct thing *attacker, coord *mp, struct object *weap, bool thrown); struct linked_list *spec_item(int type, int which, int hit, int damage); void spell_recovery(void); -void start_daemon(void (*func)(), int arg, int type); +void start_daemon(void (*func)(), void *arg, int type); void status(bool display); void steal(void); bool step_ok(int y, int x, int can_on_monst, struct thing *flgptr); diff --git a/arogue7/sticks.c b/arogue7/sticks.c index 12002f2..f5aa0cb 100644 --- a/arogue7/sticks.c +++ b/arogue7/sticks.c @@ -590,7 +590,7 @@ do_zap(struct thing *zapper, struct object *obj, coord *direction, int which, turn_on(player, HASDISEASE); turn_on(player, HASINFEST); turn_on(player, DOROT); - fuse(cure_disease, 0, roll(HEALTIME,SICKTIME), AFTER); + fuse(cure_disease, NULL, roll(HEALTIME,SICKTIME), AFTER); infest_dam++; } else msg("You fell momentarily sick"); @@ -1188,7 +1188,7 @@ at_hero: if (!save(VS_BREATH, &player, rnd(20)+HUHDURATION); else { turn_on(player, ISHUH); - fuse(unconfuse, 0, + fuse(unconfuse, NULL, rnd(20)+HUHDURATION, AFTER); msg( "The confusion gas has confused you."); diff --git a/arogue7/util.c b/arogue7/util.c index cde6869..9ccb23d 100644 --- a/arogue7/util.c +++ b/arogue7/util.c @@ -209,7 +209,7 @@ confus_player(void) if (find_slot(unconfuse)) lengthen(unconfuse, HUHDURATION); else - fuse(unconfuse, 0, HUHDURATION, AFTER); + fuse(unconfuse, NULL, HUHDURATION, AFTER); turn_on(player, ISHUH); } else msg("You feel dizzy for a moment, but it quickly passes."); diff --git a/arogue7/wear.c b/arogue7/wear.c index 9a7a8cb..7447054 100644 --- a/arogue7/wear.c +++ b/arogue7/wear.c @@ -327,7 +327,7 @@ wear(void) msg("Wearing %s", inv_name(obj,TRUE)); cur_misc[WEAR_GAUNTLET] = obj; if (obj->o_which == MM_FUMBLE) - start_daemon(fumble, 0, AFTER); + start_daemon(fumble, NULL, AFTER); /* * the jewel of attacks does an aggavate monster */ @@ -351,7 +351,7 @@ wear(void) msg("Wearing %s",inv_name(obj,TRUE)); cur_misc[WEAR_NECKLACE] = obj; msg("The necklace is beginning to strangle you!"); - start_daemon(strangle, 0, AFTER); + start_daemon(strangle, NULL, AFTER); otherwise: msg("What a strange item you have!"); } diff --git a/xrogue/daemon.c b/xrogue/daemon.c index d38ff14..7b3acc7 100644 --- a/xrogue/daemon.c +++ b/xrogue/daemon.c @@ -172,7 +172,10 @@ fuse(void (*dfunc)(), void *arg, int time, int type) if (wire != NULL) { wire->d_type = type; wire->d_func = dfunc; - wire->d_arg.vp = arg; + if (dfunc == changeclass || dfunc == res_strength) + wire->d_arg.i = *(int *) arg; + else + wire->d_arg.vp = arg; wire->d_time = time; fusecnt += 1; /* update count */ } @@ -220,26 +223,28 @@ extinguish(void (*dfunc)()) void do_fuses(int flag) { - struct delayed_action *wire; - int i; + struct delayed_action *wire; + int i; - /* - * Step though the list - */ - for (i = 0; i < MAXFUSES; i++) { - wire = &f_list[i]; + /* + * Step though the list + */ + for (i = 0; i < MAXFUSES; i++) { + wire = &f_list[i]; /* * Decrementing counters and starting things we want. We also need * to remove the fuse from the list once it has gone off. */ - if(flag == wire->d_type && wire->d_time > 0 && + if(flag == wire->d_type && wire->d_time > 0 && --wire->d_time == 0) { - wire->d_type = EMPTY; - if (wire->d_func != NULL) - (*wire->d_func)(wire->d_arg.vp); - fusecnt -= 1; - } + wire->d_type = EMPTY; + if (*wire->d_func == changeclass || *wire->d_func == res_strength) + (*wire->d_func)(wire->d_arg.i); + else if (wire->d_func != NULL) + (*wire->d_func)(wire->d_arg.vp); + fusecnt -= 1; } + } } /* diff --git a/xrogue/effects.c b/xrogue/effects.c index 2a5b115..b80d05d 100644 --- a/xrogue/effects.c +++ b/xrogue/effects.c @@ -323,8 +323,10 @@ effect(struct thing *att, struct thing *def, struct object *weap, bool thrown, msg("You cringe at %s's chilling touch.", prname(attname, FALSE)); chg_str(-1); - if (lost_str++ == 0) - fuse(res_strength, NULL, CHILLTIME, AFTER); + if (lost_str++ == 0) { + int temp_arg = 0; + fuse(res_strength, &temp_arg, CHILLTIME, AFTER); + } else lengthen(res_strength, CHILLTIME); } } @@ -548,11 +550,12 @@ effect(struct thing *att, struct thing *def, struct object *weap, bool thrown, else { int odor_str = -(rnd(6)+1); + int temp_arg2 = 0; msg("You are overcome by a foul odor!"); if (lost_str == 0) { chg_str(odor_str); - fuse(res_strength, NULL, SMELLTIME, AFTER); + fuse(res_strength, &temp_arg2, SMELLTIME, AFTER); lost_str -= odor_str; } else lengthen(res_strength, SMELLTIME); diff --git a/xrogue/fight.c b/xrogue/fight.c index d16874f..45c7940 100644 --- a/xrogue/fight.c +++ b/xrogue/fight.c @@ -966,7 +966,6 @@ killed(struct linked_list *item, bool pr, bool points, bool treasure) register struct linked_list *pitem, *nexti, *mitem; char *monst; int adj; /* used for hit point adj. below. */ - long temp; tp = THINGPTR(item); @@ -1029,8 +1028,7 @@ killed(struct linked_list *item, bool pr, bool points, bool treasure) if (roll(1,100) < killed_chance) { msg("You had a feeling this was going to happen... "); msg("**POOF** "); - temp = C_ASSASSIN; /* make him pay */ - changeclass(&temp); + changeclass(C_ASSASSIN); /* make him pay */ } else { switch (rnd(9)) { diff --git a/xrogue/misc.c b/xrogue/misc.c index cc67659..71be11f 100644 --- a/xrogue/misc.c +++ b/xrogue/misc.c @@ -24,9 +24,9 @@ */ void -changeclass(long *newclass) +changeclass(int newclass) { - if (*newclass == player.t_ctype) { + if (newclass == player.t_ctype) { msg("You feel more skillful."); raise_level(); } @@ -38,19 +38,19 @@ changeclass(long *newclass) */ long save; - msg("You are transformed into a %s! ", char_class[*newclass].name); + msg("You are transformed into a %s! ", char_class[newclass].name); /* * if he becomes a thief or an assassin give him studded leather armor */ - if ((*newclass == C_THIEF || *newclass == C_ASSASSIN) && + if ((newclass == C_THIEF || newclass == C_ASSASSIN) && cur_armor != NULL && cur_armor->o_which != STUDDED_LEATHER) cur_armor->o_which = STUDDED_LEATHER; /* * if he becomes a monk he can't wear any armor * so give him a cloak of protection */ - if (*newclass == C_MONK && cur_armor != NULL) { + if (newclass == C_MONK && cur_armor != NULL) { cur_armor->o_ac = armors[cur_armor->o_which].a_class - cur_armor->o_ac; cur_armor->o_type = MM; @@ -62,8 +62,8 @@ changeclass(long *newclass) /* * otherwise give him plate armor */ - if ((*newclass != C_THIEF || - *newclass != C_ASSASSIN || *newclass != C_MONK) && + if ((newclass != C_THIEF || + newclass != C_ASSASSIN || newclass != C_MONK) && cur_armor != NULL && cur_armor->o_which != PLATE_ARMOR) cur_armor->o_which = PLATE_ARMOR; @@ -81,11 +81,11 @@ changeclass(long *newclass) /* * if he becomes a spell caster of some kind, give him a fuse */ - if (*newclass == C_MAGICIAN || *newclass == C_RANGER) + if (newclass == C_MAGICIAN || newclass == C_RANGER) fuse(spell_recovery, NULL, SPELLTIME, AFTER); - if (*newclass == C_DRUID || *newclass == C_MONK) + if (newclass == C_DRUID || newclass == C_MONK) fuse(chant_recovery, NULL, SPELLTIME, AFTER); - if ((*newclass==C_CLERIC || *newclass==C_PALADIN) && !cur_misc[HEIL_ANKH]) + if ((newclass==C_CLERIC || newclass==C_PALADIN) && !cur_misc[HEIL_ANKH]) fuse(prayer_recovery, NULL, SPELLTIME, AFTER); /* * if he's changing from a fighter, ranger, or paladin then we @@ -98,8 +98,8 @@ changeclass(long *newclass) cur_weapon != NULL && cur_weapon->o_type == WEAPON && (cur_weapon->o_which == BASWORD || cur_weapon->o_which == TWOSWORD) && - !(*newclass == C_FIGHTER || *newclass == C_RANGER || - *newclass == C_PALADIN) && + !(newclass == C_FIGHTER || newclass == C_RANGER || + newclass == C_PALADIN) && cur_weapon->o_which == TWOSWORD) cur_weapon->o_which = SWORD; @@ -113,8 +113,8 @@ changeclass(long *newclass) cur_weapon != NULL && cur_weapon->o_type == WEAPON && (cur_weapon->o_which == BASWORD || cur_weapon->o_which == TWOSWORD) && - !(*newclass == C_THIEF || *newclass == C_ASSASSIN || - *newclass == C_MONK) && + !(newclass == C_THIEF || newclass == C_ASSASSIN || + newclass == C_MONK) && cur_weapon->o_which == BASWORD) cur_weapon->o_which = SWORD; @@ -130,12 +130,12 @@ changeclass(long *newclass) * if he becomes a thief, assassin, or monk then add * the trap_look() daemon */ - if (*newclass == C_THIEF || *newclass == C_ASSASSIN || - *newclass == C_MONK) + if (newclass == C_THIEF || newclass == C_ASSASSIN || + newclass == C_MONK) start_daemon(trap_look, NULL, AFTER); /* adjust stats */ - char_type = player.t_ctype = *newclass; + char_type = player.t_ctype = newclass; save = pstats.s_hpt; max_stats.s_hpt = pstats.s_hpt = 0; max_stats.s_lvl = pstats.s_lvl = 0; @@ -1103,7 +1103,7 @@ use_mm(int which) when MM_SKILLS: detach (pack, item); inpack--; - changeclass(&obj->o_ac); + changeclass(obj->o_ac); when MM_CRYSTAL: { register char *str; diff --git a/xrogue/pack.c b/xrogue/pack.c index b5e099f..e3fdefc 100644 --- a/xrogue/pack.c +++ b/xrogue/pack.c @@ -36,15 +36,7 @@ add_pack(struct linked_list *item, bool silent) register struct object *obj, *op = NULL; register bool exact, from_floor; bool giveflag = 0; - static long cleric = C_CLERIC, - monk = C_MONK, - magician = C_MAGICIAN, - assassin = C_ASSASSIN, - druid = C_DRUID, - thief = C_THIEF, - fighter = C_FIGHTER, - ranger = C_RANGER, - paladin = C_PALADIN; + int newclass; if (item == NULL) { @@ -263,8 +255,10 @@ picked_up: /* start a fuse to change player into a paladin */ if (quest_item != HEIL_ANKH) { msg("You hear a strange, distant hypnotic calling... "); - if (player.t_ctype != C_PALADIN && obj->o_which ==HEIL_ANKH) - fuse(changeclass, &paladin, roll(8, 8), AFTER); + if (player.t_ctype != C_PALADIN && obj->o_which ==HEIL_ANKH) { + newclass = C_PALADIN; + fuse(changeclass, &newclass, roll(8, 8), AFTER); + } } /* A cloak must be worn. */ @@ -287,8 +281,10 @@ picked_up: /* start a fuse to change player into a monk */ if (quest_item != EMORI_CLOAK) { msg("You suddenly become calm and quiet. "); - if (player.t_ctype != C_MONK && obj->o_which == EMORI_CLOAK) - fuse(changeclass, &monk, roll(8, 8), AFTER); + if (player.t_ctype != C_MONK && obj->o_which == EMORI_CLOAK) { + newclass = C_MONK; + fuse(changeclass, &newclass, roll(8, 8), AFTER); + } } /* The amulet must be worn. */ @@ -312,7 +308,8 @@ picked_up: if (player.t_ctype != C_MAGICIAN && obj->o_which == STONEBONES_AMULET) { msg("You sense approaching etheric forces... "); - fuse(changeclass, &magician, roll(8, 8), AFTER); + newclass = C_MAGICIAN; + fuse(changeclass, &newclass, roll(8, 8), AFTER); } } @@ -331,8 +328,10 @@ picked_up: /* start a fuse to change player into an assassin */ if (quest_item != EYE_VECNA) { msg("Your blood rushes and you begin to sweat profusely... "); - if (player.t_ctype != C_ASSASSIN && obj->o_which == EYE_VECNA) - fuse(changeclass, &assassin, roll(8, 8), AFTER); + if (player.t_ctype != C_ASSASSIN && obj->o_which == EYE_VECNA) { + newclass = C_ASSASSIN; + fuse(changeclass, &newclass, roll(8, 8), AFTER); + } } when QUILL_NAGROM: @@ -340,8 +339,10 @@ picked_up: /* start a fuse to change player into a druid */ if (quest_item != QUILL_NAGROM) { msg("You begin to see things differently... "); - if (player.t_ctype != C_DRUID && obj->o_which == QUILL_NAGROM) - fuse(changeclass, &druid, roll(8, 8), AFTER); + if (player.t_ctype != C_DRUID && obj->o_which == QUILL_NAGROM) { + newclass = C_DRUID; + fuse(changeclass, &newclass, roll(8, 8), AFTER); + } } /* Weapons will insist on being wielded. */ @@ -362,7 +363,8 @@ picked_up: if (player.t_ctype != C_THIEF && obj->o_which == MUSTY_DAGGER) { msg("You look about furtively. "); - fuse(changeclass, &thief, roll(8, 8), AFTER); + newclass = C_THIEF; + fuse(changeclass, &newclass, roll(8, 8), AFTER); } } /* start a fuse to change player into a fighter */ @@ -370,7 +372,8 @@ picked_up: if (player.t_ctype != C_FIGHTER && obj->o_which == AXE_AKLAD) { msg("Your bones feel strengthened. "); - fuse(changeclass, &fighter, roll(8, 8), AFTER); + newclass = C_FIGHTER; + fuse(changeclass, &newclass, roll(8, 8), AFTER); } } if (cur_weapon != NULL) { @@ -405,8 +408,10 @@ picked_up: /* start a fuse to change player into a ranger */ if (quest_item != BRIAN_MANDOLIN) { msg("You are transfixed with empathy. "); - if (player.t_ctype != C_RANGER && obj->o_which == BRIAN_MANDOLIN) - fuse(changeclass, &ranger, roll(8, 8), AFTER); + if (player.t_ctype != C_RANGER && obj->o_which == BRIAN_MANDOLIN) { + newclass = C_RANGER; + fuse(changeclass, &newclass, roll(8, 8), AFTER); + } } /* add to the music */ @@ -415,8 +420,10 @@ picked_up: /* start a fuse to change player into a cleric */ if (quest_item != GERYON_HORN) { msg("You follow their calling. "); - if (player.t_ctype != C_CLERIC && obj->o_which == GERYON_HORN) - fuse(changeclass, &cleric, roll(8, 8), AFTER); + if (player.t_ctype != C_CLERIC && obj->o_which == GERYON_HORN) { + newclass = C_CLERIC; + fuse(changeclass, &newclass, roll(8, 8), AFTER); + } } /* the card can not be picked up, it must be traded for */ diff --git a/xrogue/rogue.h b/xrogue/rogue.h index 8aa0f15..f648c8e 100644 --- a/xrogue/rogue.h +++ b/xrogue/rogue.h @@ -1245,7 +1245,7 @@ int can_shoot(coord *er, coord *ee, coord *shoot_dir); bool cansee(int y, int x); void carry_obj(struct thing *mp, int chance); void cast(void); -void changeclass(long *newclass); +void changeclass(int newclass); void chant(void); void chant_recovery(void); void chase(struct thing *tp, coord *ee, struct room *rer, struct room *ree,