diff --git a/include/extern.h b/include/extern.h index 8ef94ed94..c3848a746 100644 --- a/include/extern.h +++ b/include/extern.h @@ -5,6 +5,66 @@ #ifndef EXTERN_H #define EXTERN_H +/* + * The placements of the NONNULLARG* and NONNULLPTRS macros were done + * using the following rules: + * These were the rules that were followed when determining which function + * parameters should be nonnul, and which are nullable: + * + * 1. If the first use of, or reference to, the pointer parameter in the + * function is a dereference, then the parameter will be considered + * nonnull. + * + * 2. If there is code in the function that tests for the pointer parameter + * being null, and adjusts the code-path accordingly so that no segfault + * will occur, then the parameter will not be considered nonnull (it can + * be null). + * + * Note that if an arg is declared nonnull, any tests inside the function + * for the variable being null, will likely trigger a compiler warning + * diagnostic about the unnecessary test. + * + * Description of the NONNULL macros: + * + * NONULL The function return value is never NULL. + * NONNULLPTRS Every pointer argument is declared nonnull. + * NONNULLARG1 The 1st argument is declared nonnull. + * NONNULLARG2 The 2nd argument is declared nonnull. + * NONNULLARG3 The 3rd argument is declared nonnull. + * NONNULLARG4 The 4th argument is declared nonnull (not used). + * NONNULLARG5 The 5th argument is declared nonnull. + * NONNULLARG7 The 7th argument is declared nonnull (bhit). + * NONNULLARG12 The 1st and 2nd arguments are declared nonnull. + * NONNULLARG13 The 1st and 3rd arguments are declared nonnull. + * NONNULLARG123 The 1st, 2nd and 3rd arguments are declared nonnull. + * NONNULLARG14 The 1st and 4th arguments are declared nonnull. + * NONNULLARG134 The 1st, 3rd and 4th arguments are declared nonnull. + * NONNULLARG17 The 1st and 7th arguments are declared nonnull (this + * was a special-case added for askchain(), where the + * arguments are spread out that way. This macro + * could be removed if the askchain arguments in the + * prototype and callers were changed to make the + * nonnull arguments side-by-side). + * NONNULLARG145 The 1st, 4th and 5th arguments are declared nonnull + * (this was a special-case added for find_roll_to_hit(), + * in uhitm.c, where the arguments are spread out that way. + * We can't just use NONNULLPTRS there because the 3rd + * argument 'weapon' can be NULL). + * NONNULLARG24 The 2nd and 4th arguments are declared nonnull (this + * was a special-case added for query_objlist() in invent.c). + * NONNULLARG45 The 4th and 5th arguments are declared nonnull (this + * was a special-case added for do_screen_description(), + * in pager.c, where the arguments are spread out that way. + * We can't just use NONNULLPTRS there because the 6th + * argument can be NULL). + * NO_NONNULLS This macro expands to nothing. It is just used to + * mark that analysis has been done on the function, + * and concluded that none of the arguments could be + * marked nonnull.That distinguishes a function that has + * not been analyzed (yet), from one that has. + * + */ + /* ### alloc.c ### */ #if 0 @@ -42,25 +102,25 @@ extern int dorub(void); extern int dojump(void); extern int jump(int); extern int number_leashed(void); -extern void o_unleash(struct obj *); -extern void m_unleash(struct monst *, boolean); +extern void o_unleash(struct obj *) NONNULLPTRS; +extern void m_unleash(struct monst *, boolean) NONNULLPTRS; extern void unleash_all(void); -extern boolean leashable(struct monst *); +extern boolean leashable(struct monst *) NONNULLARG1; extern boolean next_to_u(void); -extern struct obj *get_mleash(struct monst *); +extern struct obj *get_mleash(struct monst *) NONNULLARG1; extern const char *beautiful(void); extern void check_leash(coordxy, coordxy); extern boolean um_dist(coordxy, coordxy, xint16); -extern boolean snuff_candle(struct obj *); -extern boolean snuff_lit(struct obj *); -extern boolean splash_lit(struct obj *); -extern boolean catch_lit(struct obj *); +extern boolean snuff_candle(struct obj *) NONNULLPTRS; +extern boolean snuff_lit(struct obj *) NONNULLPTRS; +extern boolean splash_lit(struct obj *) NONNULLPTRS; +extern boolean catch_lit(struct obj *) NONNULLPTRS; extern void use_unicorn_horn(struct obj **); -extern boolean tinnable(struct obj *); +extern boolean tinnable(struct obj *) NONNULLPTRS; extern void reset_trapset(void); -extern int use_whip(struct obj *); -extern int use_pole(struct obj *, boolean); -extern void fig_transform(union any *, long); +extern int use_whip(struct obj *) NONNULLPTRS; +extern int use_pole(struct obj *, boolean) NONNULLPTRS; +extern void fig_transform(union any *, long) NONNULLARG1; extern int unfixable_trouble_count(boolean); /* ### artifact.c ### */ @@ -70,26 +130,26 @@ extern void save_artifacts(NHFILE *); extern void restore_artifacts(NHFILE *); extern const char *artiname(int); extern struct obj *mk_artifact(struct obj *, aligntyp); -extern const char *artifact_name(const char *, short *, boolean); -extern boolean exist_artifact(int, const char *); -extern void artifact_exists(struct obj *, const char *, boolean, unsigned); +extern const char *artifact_name(const char *, short *, boolean) NONNULLARG1; +extern boolean exist_artifact(int, const char *) NONNULLPTRS; +extern void artifact_exists(struct obj *, const char *, boolean, unsigned) ; extern void found_artifact(int); -extern void find_artifact(struct obj *); +extern void find_artifact(struct obj *) NONNULLPTRS; extern int nartifact_exist(void); -extern void artifact_origin(struct obj *, unsigned); +extern void artifact_origin(struct obj *, unsigned) NONNULLPTRS; extern boolean arti_immune(struct obj *, int); extern boolean spec_ability(struct obj *, unsigned long); -extern boolean confers_luck(struct obj *); +extern boolean confers_luck(struct obj *) NONNULLPTRS; extern boolean arti_reflects(struct obj *); -extern boolean shade_glare(struct obj *); -extern boolean restrict_name(struct obj *, const char *); +extern boolean shade_glare(struct obj *) NONNULLPTRS; +extern boolean restrict_name(struct obj *, const char *) NONNULLPTRS; extern boolean defends(int, struct obj *); extern boolean defends_when_carried(int, struct obj *); extern boolean protects(struct obj *, boolean); extern void set_artifact_intrinsic(struct obj *, boolean, long); -extern int touch_artifact(struct obj *, struct monst *); -extern int spec_abon(struct obj *, struct monst *); -extern int spec_dbon(struct obj *, struct monst *, int); +extern int touch_artifact(struct obj *, struct monst *) NONNULLARG2; +extern int spec_abon(struct obj *, struct monst *) NONNULLARG2; +extern int spec_dbon(struct obj *, struct monst *, int) NONNULLARG2; extern void discover_artifact(xint16); extern boolean undiscovered_artifact(xint16); extern int disp_artifact_discoveries(winid); @@ -102,16 +162,17 @@ extern int arti_speak(struct obj *); extern boolean artifact_light(struct obj *); extern long spec_m2(struct obj *); extern boolean artifact_has_invprop(struct obj *, uchar); -extern long arti_cost(struct obj *); -extern struct obj *what_gives(long *); +extern long arti_cost(struct obj *) NONNULLARG1; +extern struct obj *what_gives(long *) NONNULLARG1; extern const char *glow_color(int); extern const char *glow_verb(int, boolean); extern void Sting_effects(int); -extern int retouch_object(struct obj **, boolean); +extern int retouch_object(struct obj **, boolean) NONNULLARG1; extern void retouch_equipment(int); extern void mkot_trap_warn(void); extern boolean is_magic_key(struct monst *, struct obj *); extern struct obj *has_magic_key(struct monst *); +extern boolean is_art(struct obj *, int); /* ### attrib.c ### */ @@ -120,7 +181,7 @@ extern void gainstr(struct obj *, int, boolean); extern void losestr(int, const char *, schar); extern void poison_strdmg(int, int, const char *, schar); extern void poisontell(int, boolean); -extern void poisoned(const char *, int, const char *, int, boolean); +extern void poisoned(const char *, int, const char *, int, boolean) NONNULLARG1; extern void change_luck(schar); extern int stone_luck(boolean); extern void set_moreluck(void); @@ -161,20 +222,20 @@ extern void lift_covet_and_placebc(int); extern void set_bc(int); extern void move_bc(int, int, coordxy, coordxy, coordxy, coordxy); extern boolean drag_ball(coordxy, coordxy, int *, coordxy *, coordxy *, - coordxy *, coordxy *, boolean *, boolean); + coordxy *, coordxy *, boolean *, boolean) NONNULLPTRS; extern void drop_ball(coordxy, coordxy); extern void drag_down(void); extern void bc_sanity_check(void); /* ### bones.c ### */ -extern void sanitize_name(char *); +extern void sanitize_name(char *) NONNULLARG1; extern void drop_upon_death(struct monst *, struct obj *, coordxy, coordxy); extern boolean can_make_bones(void); extern void savebones(int, time_t, struct obj *); extern int getbones(void); -extern boolean bones_include_name(const char *); -extern void fix_ghostly_obj(struct obj *); +extern boolean bones_include_name(const char *) NONNULLARG1; +extern void fix_ghostly_obj(struct obj *) NONNULLARG1; /* ### botl.c ### */ @@ -331,7 +392,7 @@ extern boolean is_moat(coordxy, coordxy); extern schar db_under_typ(int); extern int is_drawbridge_wall(coordxy, coordxy); extern boolean is_db_wall(coordxy, coordxy); -extern boolean find_drawbridge(coordxy *, coordxy *); +extern boolean find_drawbridge(coordxy *, coordxy *) NONNULLPTRS; extern boolean create_drawbridge(coordxy, coordxy, int, boolean); extern void open_drawbridge(coordxy, coordxy); extern void close_drawbridge(coordxy, coordxy); @@ -346,23 +407,23 @@ extern void sa_victual(volatile struct victual_info *); extern boolean trapped_chest_at(int, coordxy, coordxy); extern boolean trapped_door_at(int, coordxy, coordxy); -extern struct obj *o_in(struct obj *, char); -extern struct obj *o_material(struct obj *, unsigned); +extern struct obj *o_in(struct obj *, char) NONNULLARG1; +extern struct obj *o_material(struct obj *, unsigned) NONNULLARG1; extern int gold_detect(struct obj *); extern int food_detect(struct obj *); extern int object_detect(struct obj *, int); extern int monster_detect(struct obj *, int); extern int trap_detect(struct obj *); -extern const char *level_distance(d_level *); -extern void use_crystal_ball(struct obj **); +extern const char *level_distance(d_level *) NONNULLARG1; +extern void use_crystal_ball(struct obj **) NONNULLARG1; extern void show_map_spot(coordxy, coordxy, boolean); extern void do_mapping(void); extern void do_vicinity_map(struct obj *); -extern void cvt_sdoor_to_door(struct rm *); +extern void cvt_sdoor_to_door(struct rm *) NONNULLARG1; extern int findit(void); extern int openit(void); extern boolean detecting(void(*)(coordxy, coordxy, void *)); -extern void find_trap(struct trap *); +extern void find_trap(struct trap *) NONNULLARG1; extern void warnreveal(void); extern int dosearch0(int); extern int dosearch(void); @@ -381,29 +442,29 @@ extern int holetime(void); extern boolean dig_check(struct monst *, boolean, coordxy, coordxy); extern void digactualhole(coordxy, coordxy, struct monst *, int); extern boolean dighole(boolean, boolean, coord *); -extern int use_pick_axe(struct obj *); -extern int use_pick_axe2(struct obj *); -extern boolean mdig_tunnel(struct monst *); +extern int use_pick_axe(struct obj *) NONNULLARG1; +extern int use_pick_axe2(struct obj *) NONNULLARG1; +extern boolean mdig_tunnel(struct monst *) NONNULLARG1; extern void draft_message(boolean); extern void watch_dig(struct monst *, coordxy, coordxy, boolean); extern void zap_dig(void); -extern struct obj *bury_an_obj(struct obj *, boolean *); +extern struct obj *bury_an_obj(struct obj *, boolean *) NONNULLARG1; extern void bury_objs(int, int); extern void unearth_objs(int, int); -extern void rot_organic(union any *, long); -extern void rot_corpse(union any *, long); -extern struct obj *buried_ball(coord *); +extern void rot_organic(union any *, long) NONNULLARG1; +extern void rot_corpse(union any *, long) NONNULLARG1; +extern struct obj *buried_ball(coord *) NONNULLARG1; extern void buried_ball_to_punishment(void); extern void buried_ball_to_freedom(void); extern schar fillholetyp(coordxy, coordxy, boolean); extern void liquid_flow(coordxy, coordxy, schar, struct trap *, const char *); extern boolean conjoined_pits(struct trap *, struct trap *, boolean); #if 0 -extern void bury_monst(struct monst *); +extern void bury_monst(struct monst *) NONNULLARG1; extern void bury_you(void); extern void unearth_you(void); extern void escape_tomb(void); -extern void bury_obj(struct obj *); +extern void bury_obj(struct obj *) NONNULLARG1; #endif #ifdef DEBUG extern int wiz_debug_cmd_bury(void); @@ -411,18 +472,18 @@ extern int wiz_debug_cmd_bury(void); /* ### display.c ### */ -extern int tp_sensemon(struct monst *); -extern int sensemon(struct monst *); -extern int mon_warning(struct monst *); -extern int mon_visible(struct monst *); -extern int see_with_infrared(struct monst *); -extern int canseemon(struct monst *); -extern int knowninvisible(struct monst *); -extern int is_safemon(struct monst *); +extern int tp_sensemon(struct monst *) NONNULLARG1; +extern int sensemon(struct monst *) NONNULLARG1; +extern int mon_warning(struct monst *) NONNULLARG1; +extern int mon_visible(struct monst *) NONNULLARG1; +extern int see_with_infrared(struct monst *) NONNULLARG1; +extern int canseemon(struct monst *) NONNULLARG1; +extern int knowninvisible(struct monst *) NONNULLARG1; +extern int is_safemon(struct monst *) NONNULLARG1; extern void magic_map_background(coordxy, coordxy, int); extern void map_background(coordxy, coordxy, int); -extern void map_trap(struct trap *, int); -extern void map_object(struct obj *, int); +extern void map_trap(struct trap *, int) NONNULLARG1; +extern void map_object(struct obj *, int) NONNULLARG1; extern void map_invisible(coordxy, coordxy); extern void map_engraving(struct engr *, int); extern boolean unmap_invisible(coordxy, coordxy); @@ -461,8 +522,8 @@ extern void reglyph_darkroom(void); extern void xy_set_wall_state(coordxy, coordxy); extern void set_wall_state(void); extern void unset_seenv(struct rm *, coordxy, coordxy, coordxy, coordxy); -extern int warning_of(struct monst *); -extern void map_glyphinfo(coordxy, coordxy, int, unsigned, glyph_info *); +extern int warning_of(struct monst *) NONNULLARG1; +extern void map_glyphinfo(coordxy, coordxy, int, unsigned, glyph_info *) NONNULLPTRS; extern void reset_glyphmap(enum glyphmap_change_triggers trigger); extern int fn_cmap_to_glyph(int); @@ -470,14 +531,15 @@ extern int fn_cmap_to_glyph(int); extern int dodrop(void); extern boolean boulder_hits_pool(struct obj *, coordxy, coordxy, boolean); -extern boolean flooreffects(struct obj *, coordxy, coordxy, const char *); -extern void doaltarobj(struct obj *); +extern boolean flooreffects(struct obj *, coordxy, coordxy, + const char *) NONNULLPTRS; +extern void doaltarobj(struct obj *) NONNULLARG1; extern void polymorph_sink(void); -extern void trycall(struct obj *); -extern boolean canletgo(struct obj *, const char *); -extern void dropx(struct obj *); -extern void dropy(struct obj *); -extern void dropz(struct obj *, boolean); +extern void trycall(struct obj *) NONNULLARG1; +extern boolean canletgo(struct obj *, const char *) NONNULLPTRS; +extern void dropx(struct obj *) NONNULLARG1; +extern void dropy(struct obj *) NONNULLARG1; +extern void dropz(struct obj *, boolean) NONNULLARG1; extern void obj_no_longer_held(struct obj *); extern int doddrop(void); extern int dodown(void); @@ -486,93 +548,97 @@ extern int doup(void); extern void save_currentstate(void); #endif extern void u_collide_m(struct monst *); -extern void goto_level(d_level *, boolean, boolean, boolean); +extern void goto_level(d_level *, boolean, boolean, boolean) NONNULLARG1; extern void hellish_smoke_mesg(void); extern void maybe_lvltport_feedback(void); -extern void schedule_goto(d_level *, int, const char *, const char *); +extern void schedule_goto(d_level *, int, const char *, const char *) NONNULLARG1; extern void deferred_goto(void); -extern boolean revive_corpse(struct obj *); -extern void revive_mon(union any *, long); -extern void zombify_mon(union any *, long); +extern boolean revive_corpse(struct obj *) NONNULLARG1; +extern void revive_mon(union any *, long) NONNULLARG1; +extern void zombify_mon(union any *, long) NONNULLARG1; extern boolean cmd_safety_prevention(const char *, const char *, - const char *, int *); + const char *, int *) NONNULLPTRS; extern int donull(void); extern int dowipe(void); -extern void legs_in_no_shape(const char *, boolean); +extern void legs_in_no_shape(const char *, boolean) NONNULLARG1; extern void set_wounded_legs(long, int); extern void heal_legs(int); /* ### do_name.c ### */ extern char *dxdy_to_dist_descr(coordxy, coordxy, boolean); -extern char *coord_desc(coordxy, coordxy, char *, char); +extern char *coord_desc(coordxy, coordxy, char *, char) NONNULLARG3; extern void auto_describe(coordxy, coordxy); -extern boolean getpos_menu(coord *, int); -extern int getpos(coord *, boolean, const char *); +extern boolean getpos_menu(coord *, int) NONNULLARG1; +extern int getpos(coord *, boolean, const char *) NONNULLARG1; extern void getpos_sethilite(void(*f)(int), boolean(*d)(coordxy,coordxy)); -extern void new_mgivenname(struct monst *, int); -extern void free_mgivenname(struct monst *); -extern void new_oname(struct obj *, int); -extern void free_oname(struct obj *); -extern const char *safe_oname(struct obj *); -extern struct monst *christen_monst(struct monst *, const char *); -extern struct obj *oname(struct obj *, const char *, unsigned); +extern void new_mgivenname(struct monst *, int) NONNULLARG1; +extern void free_mgivenname(struct monst *) NONNULLARG1; +extern void new_oname(struct obj *, int) NONNULLARG1; +extern void free_oname(struct obj *) NONNULLARG1; +extern const char *safe_oname(struct obj *) NONNULLARG1; +extern struct monst *christen_monst(struct monst *, const char *) NONNULLARG1; +extern struct obj *oname(struct obj *, const char *, unsigned) NONNULLPTRS; extern boolean objtyp_is_callable(int); extern int name_ok(struct obj *); extern int call_ok(struct obj *); extern int docallcmd(void); -extern void docall(struct obj *); +extern void docall(struct obj *) NONNULLARG1; extern const char *rndghostname(void); -extern char *x_monnam(struct monst *, int, const char *, int, boolean); -extern char *l_monnam(struct monst *); -extern char *mon_nam(struct monst *); -extern char *noit_mon_nam(struct monst *); -extern char *some_mon_nam(struct monst *); -extern char *Monnam(struct monst *); -extern char *noit_Monnam(struct monst *); -extern char *Some_Monnam(struct monst *); -extern char *noname_monnam(struct monst *, int); -extern char *m_monnam(struct monst *); -extern char *y_monnam(struct monst *); -extern char *Adjmonnam(struct monst *, const char *); -extern char *Amonnam(struct monst *); -extern char *a_monnam(struct monst *); -extern char *distant_monnam(struct monst *, int, char *); -extern char *mon_nam_too(struct monst *, struct monst *); -extern char *monverbself(struct monst *, char *, const char *, const char *); +extern char *x_monnam(struct monst *, int, const char *, int, boolean) NONNULLARG1; +extern char *l_monnam(struct monst *) NONNULLARG1; +extern char *mon_nam(struct monst *) NONNULLARG1; +extern char *noit_mon_nam(struct monst *) NONNULLARG1; +extern char *some_mon_nam(struct monst *) NONNULLARG1; +extern char *Monnam(struct monst *) NONNULLARG1; +extern char *noit_Monnam(struct monst *) NONNULLARG1; +extern char *Some_Monnam(struct monst *) NONNULLARG1; +extern char *noname_monnam(struct monst *, int) NONNULLARG1; +extern char *m_monnam(struct monst *) NONNULLARG1; +extern char *y_monnam(struct monst *) NONNULLARG1; +extern char *Adjmonnam(struct monst *, const char *) NONNULLARG1; +extern char *Amonnam(struct monst *) NONNULLARG1; +extern char *a_monnam(struct monst *) NONNULLARG1; +extern char *distant_monnam(struct monst *, int, char *) NONNULLARG1; +extern char *mon_nam_too(struct monst *, struct monst *) NONNULLPTRS; +extern char *monverbself(struct monst *, char *, + const char *, const char *) NONNULLARG123; extern char *minimal_monnam(struct monst *, boolean); -extern char *bogusmon(char *, char *); +extern char *bogusmon(char *, char *) NONNULLARG1; extern char *rndmonnam(char *); extern const char *hcolor(const char *); extern const char *rndcolor(void); extern const char *hliquid(const char *); extern const char *roguename(void); +/* extern struct obj *realloc_obj(struct obj *, int, genericptr_t, int, const char *); +*/ extern char *coyotename(struct monst *, char *); extern char *rndorcname(char *); -extern struct monst *christen_orc(struct monst *, const char *, const char *); +extern struct monst *christen_orc(struct monst *, const char *, + const char *) NONNULLARG1; extern const char *noveltitle(int *); -extern const char *lookup_novel(const char *, int *); +extern const char *lookup_novel(const char *, int *) NONNULLARG1; #ifndef PMNAME_MACROS -extern int Mgender(struct monst *); -extern const char *pmname(struct permonst *, int); +extern int Mgender(struct monst *) NONNULLARG1; +extern const char *pmname(struct permonst *, int) NONNULLARG1; #endif -extern const char *mon_pmname(struct monst *); -extern const char *obj_pmname(struct obj *); +extern const char *mon_pmname(struct monst *) NONNULLARG1; +extern const char *obj_pmname(struct obj *) NONNULLARG1; extern boolean mapxy_valid(coordxy, coordxy); /* ### do_wear.c ### */ extern const char *fingers_or_gloves(boolean); -extern void off_msg(struct obj *); +extern void off_msg(struct obj *) NONNULLARG1; extern void toggle_displacement(struct obj *, long, boolean); extern void set_wear(struct obj *); -extern boolean donning(struct obj *); -extern boolean doffing(struct obj *); -extern void cancel_doff(struct obj *, long); +extern boolean donning(struct obj *) NONNULLARG1; +extern boolean doffing(struct obj *) NONNULLARG1; +extern void cancel_doff(struct obj *, long) NONNULLARG1; extern void cancel_don(void); -extern int stop_donning(struct obj *); +extern int stop_donning(struct obj *); /* doseduce() calls with NULL */ extern int Armor_off(void); extern int Armor_gone(void); extern int Helmet_off(void); @@ -585,97 +651,98 @@ extern int Cloak_off(void); extern int Shield_off(void); extern int Shirt_off(void); extern void Amulet_off(void); -extern void Ring_on(struct obj *); -extern void Ring_off(struct obj *); -extern void Ring_gone(struct obj *); -extern void Blindf_on(struct obj *); +extern void Ring_on(struct obj *) NONNULLARG1; +extern void Ring_off(struct obj *) NONNULLARG1; +extern void Ring_gone(struct obj *) NONNULLARG1; +extern void Blindf_on(struct obj *) NONNULLARG1; extern void Blindf_off(struct obj *); extern int dotakeoff(void); extern int doremring(void); extern int cursed(struct obj *); extern int armoroff(struct obj *); -extern int canwearobj(struct obj *, long *, boolean); +extern int canwearobj(struct obj *, long *, boolean) NONNULLPTRS; extern int dowear(void); extern int doputon(void); extern void find_ac(void); extern void glibr(void); -extern struct obj *some_armor(struct monst *); +extern struct obj *some_armor(struct monst *) NONNULLARG1; extern struct obj *stuck_ring(struct obj *, int); extern struct obj *unchanger(void); extern void reset_remarm(void); extern int doddoremarm(void); extern int remarm_swapwep(void); extern int destroy_arm(struct obj *); -extern void adj_abon(struct obj *, schar); +extern void adj_abon(struct obj *, schar) NONNULLARG1; extern boolean inaccessible_equipment(struct obj *, const char *, boolean); /* ### dog.c ### */ -extern void newedog(struct monst *); -extern void free_edog(struct monst *); -extern void initedog(struct monst *); +extern void newedog(struct monst *) NONNULLARG1; +extern void free_edog(struct monst *) NONNULLARG1; +extern void initedog(struct monst *) NONNULLARG1; extern struct monst *make_familiar(struct obj *, coordxy, coordxy, boolean); extern struct monst *makedog(void); extern void update_mlstmv(void); extern void losedogs(void); -extern void mon_arrive(struct monst *, int); -extern void mon_catchup_elapsed_time(struct monst *, long); +extern void mon_arrive(struct monst *, int) NONNULLARG1; +extern void mon_catchup_elapsed_time(struct monst *, long) NONNULLARG1; extern void keepdogs(boolean); -extern void migrate_to_level(struct monst *, xint16, xint16, coord *); +extern void migrate_to_level(struct monst *, xint16, xint16, coord *) NONNULLARG1; extern void discard_migrations(void); -extern int dogfood(struct monst *, struct obj *); -extern boolean tamedog(struct monst *, struct obj *); -extern void abuse_dog(struct monst *); -extern void wary_dog(struct monst *, boolean); +extern int dogfood(struct monst *, struct obj *) NONNULLPTRS; +extern boolean tamedog(struct monst *, struct obj *) NONNULLARG1; +extern void abuse_dog(struct monst *) NONNULLARG1; +extern void wary_dog(struct monst *, boolean) NONNULLARG1; /* ### dogmove.c ### */ extern boolean cursed_object_at(coordxy, coordxy); -extern struct obj *droppables(struct monst *); -extern int dog_nutrition(struct monst *, struct obj *); -extern int dog_eat(struct monst *, struct obj *, coordxy, coordxy, boolean); -extern int pet_ranged_attk(struct monst *); -extern int dog_move(struct monst *, int); -extern boolean could_reach_item(struct monst *, coordxy, coordxy); -extern void finish_meating(struct monst *); -extern void quickmimic(struct monst *); +extern struct obj *droppables(struct monst *) NONNULLARG1; +extern int dog_nutrition(struct monst *, struct obj *) NONNULLPTRS; +extern int dog_eat(struct monst *, struct obj *, + coordxy, coordxy, boolean) NONNULLPTRS; +extern int pet_ranged_attk(struct monst *) NONNULLARG1; +extern int dog_move(struct monst *, int) NONNULLARG1; +extern boolean could_reach_item(struct monst *, coordxy, coordxy) NONNULLARG1; +extern void finish_meating(struct monst *) NONNULLARG1; +extern void quickmimic(struct monst *) NONNULLARG1; /* ### dokick.c ### */ -extern boolean ghitm(struct monst *, struct obj *); -extern void container_impact_dmg(struct obj *, coordxy, coordxy); +extern boolean ghitm(struct monst *, struct obj *) NONNULLPTRS; +extern void container_impact_dmg(struct obj *, coordxy, coordxy) NONNULLARG1; extern int dokick(void); extern boolean ship_object(struct obj *, coordxy, coordxy, boolean); extern void obj_delivery(boolean); -extern void deliver_obj_to_mon(struct monst *mtmp, int, unsigned long); +extern void deliver_obj_to_mon(struct monst *mtmp, int, unsigned long) NONNULLARG1; extern schar down_gate(coordxy, coordxy); extern void impact_drop(struct obj *, coordxy, coordxy, xint16); /* ### dothrow.c ### */ -extern int multishot_class_bonus(int, struct obj *, struct obj *); +extern int multishot_class_bonus(int, struct obj *, struct obj *) NONNULLARG2; extern int dothrow(void); extern int dofire(void); extern void endmultishot(boolean); -extern void hitfloor(struct obj *, boolean); -extern boolean hurtle_jump(genericptr_t, coordxy, coordxy); -extern boolean hurtle_step(genericptr_t, coordxy, coordxy); -extern boolean will_hurtle(struct monst *, coordxy, coordxy); +extern void hitfloor(struct obj *, boolean) NONNULLARG1; +extern boolean hurtle_jump(genericptr_t, coordxy, coordxy) NONNULLARG1; +extern boolean hurtle_step(genericptr_t, coordxy, coordxy) NONNULLARG1; +extern boolean will_hurtle(struct monst *, coordxy, coordxy) NONNULLARG1; extern void hurtle(int, int, int, boolean); -extern void mhurtle(struct monst *, int, int, int); -extern boolean harmless_missile(struct obj *); -extern boolean throwing_weapon(struct obj *); -extern void throwit(struct obj *, long, boolean, struct obj *); -extern int omon_adj(struct monst *, struct obj *, boolean); +extern void mhurtle(struct monst *, int, int, int) NONNULLARG1; +extern boolean harmless_missile(struct obj *) NONNULLARG1; +extern boolean throwing_weapon(struct obj *) NONNULLARG1; +extern void throwit(struct obj *, long, boolean, struct obj *) NONNULLARG1; +extern int omon_adj(struct monst *, struct obj *, boolean) NONNULLPTRS; extern boolean should_mulch_missile(struct obj *); -extern int thitmonst(struct monst *, struct obj *); +extern int thitmonst(struct monst *, struct obj *) NONNULLPTRS; extern int hero_breaks(struct obj *, coordxy, coordxy, unsigned); -extern int breaks(struct obj *, coordxy, coordxy); -extern void release_camera_demon(struct obj *, coordxy, coordxy); -extern int breakobj(struct obj *, coordxy, coordxy, boolean, boolean); -extern boolean breaktest(struct obj *); +extern int breaks(struct obj *, coordxy, coordxy) NONNULLARG1; +extern void release_camera_demon(struct obj *, coordxy, coordxy) NONNULLARG1; +extern int breakobj(struct obj *, coordxy, coordxy, boolean, boolean) NONNULLARG1; +extern boolean breaktest(struct obj *) NONNULLARG1; extern boolean walk_path(coord *, coord *, - boolean(*)(void *, coordxy, coordxy), genericptr_t); + boolean(*)(void *, coordxy, coordxy), genericptr_t) NONNULLARG12; /* ### drawing.c ### */ @@ -685,33 +752,34 @@ extern int def_char_is_furniture(char); /* ### dungeon.c ### */ -extern void save_dungeon(NHFILE *, boolean, boolean); -extern void restore_dungeon(NHFILE *); -extern void insert_branch(branch *, boolean); +extern void save_dungeon(NHFILE *, boolean, boolean) NONNULLARG1; +extern void restore_dungeon(NHFILE *) NONNULLARG1; +extern void insert_branch(branch *, boolean) NONNULLARG1; extern void init_dungeons(void); -extern s_level *find_level(const char *); -extern s_level *Is_special(d_level *); -extern branch *Is_branchlev(d_level *); -extern boolean builds_up(d_level *); -extern xint16 ledger_no(d_level *); +extern s_level *find_level(const char *) NONNULLARG1; +extern s_level *Is_special(d_level *) NONNULLARG1; +extern branch *Is_branchlev(d_level *) NONNULLARG1; +extern boolean builds_up(d_level *) NONNULLARG1; +extern xint16 ledger_no(d_level *) NONNULLARG1; extern xint16 maxledgerno(void); -extern schar depth(d_level *); -extern xint16 dunlev(d_level *); -extern xint16 dunlevs_in_dungeon(d_level *); +extern schar depth(d_level *) NONNULLARG1; +extern xint16 dunlev(d_level *) NONNULLARG1; +extern xint16 dunlevs_in_dungeon(d_level *) NONNULLARG1; extern xint16 ledger_to_dnum(xint16); extern xint16 ledger_to_dlev(xint16); extern xint16 deepest_lev_reached(boolean); -extern boolean on_level(d_level *, d_level *); +extern boolean on_level(d_level *, d_level *) NONNULLARG12; extern void next_level(boolean); extern void prev_level(boolean); extern void u_on_newpos(coordxy, coordxy); extern void u_on_rndspot(int); -extern void stairway_add(coordxy, coordxy, boolean, boolean, d_level *); +extern void stairway_add(coordxy, coordxy, + boolean, boolean, d_level *) NONNULLPTRS; extern void stairway_print(void); extern void stairway_free_all(void); extern stairway *stairway_at(coordxy, coordxy); -extern stairway *stairway_find(d_level *); -extern stairway *stairway_find_from(d_level *, boolean); +extern stairway *stairway_find(d_level *) NONNULLARG1; +extern stairway *stairway_find_from(d_level *, boolean) NONNULLARG1; extern stairway *stairway_find_dir(boolean); extern stairway *stairway_find_type_dir(boolean, boolean); extern stairway *stairway_find_special_dir(boolean); @@ -722,86 +790,86 @@ extern boolean On_stairs(coordxy, coordxy); extern boolean On_ladder(coordxy, coordxy); extern boolean On_stairs_up(coordxy, coordxy); extern boolean On_stairs_dn(coordxy, coordxy); -extern void get_level(d_level *, int); -extern boolean Is_botlevel(d_level *); -extern boolean Can_fall_thru(d_level *); -extern boolean Can_dig_down(d_level *); -extern boolean Can_rise_up(coordxy, coordxy, d_level *); -extern boolean has_ceiling(d_level *); -extern boolean avoid_ceiling(d_level *); +extern void get_level(d_level *, int) NONNULLARG1; +extern boolean Is_botlevel(d_level *) NONNULLARG1; +extern boolean Can_fall_thru(d_level *) NONNULLARG1; +extern boolean Can_dig_down(d_level *) NONNULLARG1; +extern boolean Can_rise_up(coordxy, coordxy, d_level *) NONNULLARG3; +extern boolean has_ceiling(d_level *) NONNULLARG1; +extern boolean avoid_ceiling(d_level *) NONNULLARG1; extern const char *surface(coordxy, coordxy); extern const char *ceiling(coordxy, coordxy); -extern boolean In_quest(d_level *); -extern boolean In_mines(d_level *); -extern branch *dungeon_branch(const char *); -extern boolean at_dgn_entrance(const char *); -extern boolean In_hell(d_level *); -extern boolean In_V_tower(d_level *); -extern boolean On_W_tower_level(d_level *); -extern boolean In_W_tower(coordxy, coordxy, d_level *); -extern void find_hell(d_level *); +extern boolean In_quest(d_level *) NONNULLARG1; +extern boolean In_mines(d_level *) NONNULLARG1; +extern branch *dungeon_branch(const char *) NONNULLARG1; +extern boolean at_dgn_entrance(const char *) NONNULLARG1; +extern boolean In_hell(d_level *) NONNULLARG1; +extern boolean In_V_tower(d_level *) NONNULLARG1; +extern boolean On_W_tower_level(d_level *) NONNULLARG1; +extern boolean In_W_tower(coordxy, coordxy, d_level *) NONNULLARG3; +extern void find_hell(d_level *) NONNULLARG1; extern void goto_hell(boolean, boolean); -extern boolean single_level_branch(d_level *); -extern void assign_level(d_level *, d_level *); -extern void assign_rnd_level(d_level *, d_level *, int); +extern boolean single_level_branch(d_level *) NONNULLARG1; +extern void assign_level(d_level *, d_level *) NONNULLPTRS; +extern void assign_rnd_level(d_level *, d_level *, int) NONNULLARG12; extern unsigned int induced_align(int); -extern boolean Invocation_lev(d_level *); +extern boolean Invocation_lev(d_level *) NONNULLARG1; extern xint16 level_difficulty(void); extern schar lev_by_name(const char *); extern boolean known_branch_stairs(stairway *); -extern char *stairs_description(stairway *, char *, boolean); +extern char *stairs_description(stairway *, char *, boolean) NONNULLARG1; extern schar print_dungeon(boolean, schar *, xint16 *); extern void print_level_annotation(void); extern int donamelevel(void); extern void free_exclusions(void); -extern void save_exclusions(NHFILE *); -extern void load_exclusions(NHFILE *); +extern void save_exclusions(NHFILE *) NONNULLARG1; +extern void load_exclusions(NHFILE *) NONNULLARG1; extern int dooverview(void); extern void show_overview(int, int); extern void rm_mapseen(int); -extern void init_mapseen(d_level *); +extern void init_mapseen(d_level *) NONNULLARG1; extern void recalc_mapseen(void); extern void mapseen_temple(struct monst *); extern void room_discovered(int); -extern void recbranch_mapseen(d_level *, d_level *); -extern void overview_stats(winid, const char *, long *, long *); +extern void recbranch_mapseen(d_level *, d_level *) NONNULLPTRS; +extern void overview_stats(winid, const char *, long *, long *) NONNULLPTRS; extern void remdun_mapseen(int); extern const char *endgamelevelname(char *, int); /* ### eat.c ### */ extern void eatmupdate(void); -extern boolean is_edible(struct obj *); +extern boolean is_edible(struct obj *) NONNULLARG1; extern void init_uhunger(void); extern int Hear_again(void); extern boolean eating_glob(struct obj *); extern void reset_eat(void); -extern unsigned obj_nutrition(struct obj *); +extern unsigned obj_nutrition(struct obj *) NONNULLARG1; extern int doeat(void); -extern int use_tin_opener(struct obj *); +extern int use_tin_opener(struct obj *) NONNULLARG1; extern void gethungry(void); extern void morehungry(int); extern void lesshungry(int); extern boolean is_fainted(void); extern void reset_faint(void); -extern int corpse_intrinsic(struct permonst *); +extern int corpse_intrinsic(struct permonst *) NONNULLARG1; extern void violated_vegetarian(void); extern void newuhs(boolean); -extern struct obj *floorfood(const char *, int); +extern struct obj *floorfood(const char *, int) NONNULLARG1; extern void vomit(void); -extern int eaten_stat(int, struct obj *); -extern void food_disappears(struct obj *); -extern void food_substitution(struct obj *, struct obj *); +extern int eaten_stat(int, struct obj *) NONNULLARG2; +extern void food_disappears(struct obj *) NONNULLARG1; +extern void food_substitution(struct obj *, struct obj *) NONNULLPTRS; extern long temp_resist(int); -extern void eating_conducts(struct permonst *); -extern int eat_brains(struct monst *, struct monst *, boolean, int *); +extern void eating_conducts(struct permonst *) NONNULLARG1; +extern int eat_brains(struct monst *, struct monst *, boolean, int *) NONNULLARG12; extern void fix_petrification(void); -extern int intrinsic_possible(int, struct permonst *); -extern boolean should_givit(int, struct permonst *); -extern void consume_oeaten(struct obj *, int); +extern int intrinsic_possible(int, struct permonst *) NONNULLARG2; +extern boolean should_givit(int, struct permonst *) NONNULLARG2; +extern void consume_oeaten(struct obj *, int) NONNULLARG1; extern boolean maybe_finished_meal(boolean); -extern void cant_finish_meal(struct obj *); -extern void set_tin_variety(struct obj *, int); +extern void cant_finish_meal(struct obj *) NONNULLARG1; +extern void set_tin_variety(struct obj *, int) NONNULLARG1; extern int tin_variety_txt(char *, int *); extern void tin_details(struct obj *, int, char *); extern boolean Popeye(int); @@ -811,7 +879,7 @@ extern int Finish_digestion(void); extern void done1(int); extern int done2(void); -extern void done_in_by(struct monst *, int); +extern void done_in_by(struct monst *, int) NONNULLARG1; extern void done_object_cleanup(void); #endif /* !MAKEDEFS_C && MDLIB_C && !CPPREGEX_C */ #if !defined(CPPREGEX_C) @@ -824,50 +892,50 @@ ATTRNORETURN extern void nh_terminate(int) NORETURN; extern void delayed_killer(int, int, const char *); extern struct kinfo *find_delayed_killer(int); extern void dealloc_killer(struct kinfo *); -extern void save_killers(NHFILE *); -extern void restore_killers(NHFILE *); +extern void save_killers(NHFILE *) NONNULLARG1; +extern void restore_killers(NHFILE *) NONNULLARG1; #ifdef CRASHREPORT extern boolean submit_web_report(const char *, char *); extern void crashreport_init(int, char *[]); extern void crashreport_bidshow(void); #endif -extern char *build_english_list(char *); +extern char *build_english_list(char *) NONNULLARG1; #if defined(PANICTRACE) && !defined(NO_SIGNAL) extern void panictrace_setsignals(boolean); #endif /* ### engrave.c ### */ -extern char *random_engraving(char *); -extern void wipeout_text(char *, int, unsigned); +extern char *random_engraving(char *) NONNULLARG1; +extern void wipeout_text(char *, int, unsigned) NONNULLARG1; extern boolean can_reach_floor(boolean); extern void cant_reach_floor(coordxy, coordxy, boolean, boolean); extern struct engr *engr_at(coordxy, coordxy); -extern struct engr *sengr_at(const char *, coordxy, coordxy, boolean); +extern struct engr *sengr_at(const char *, coordxy, coordxy, boolean) NONNULLARG1; extern void u_wipe_engr(int); extern void wipe_engr_at(coordxy, coordxy, xint16, boolean); extern void read_engr_at(coordxy, coordxy); -extern void make_engr_at(coordxy, coordxy, const char *, long, int); +extern void make_engr_at(coordxy, coordxy, const char *, long, int) NONNULLARG3; extern void del_engr_at(coordxy, coordxy); extern int freehand(void); extern int doengrave(void); extern void sanitize_engravings(void); extern void engraving_sanity_check(void); -extern void save_engravings(NHFILE *); -extern void rest_engravings(NHFILE *); -extern void engr_stats(const char *, char *, long *, long *); -extern void del_engr(struct engr *); -extern void rloc_engr(struct engr *); +extern void save_engravings(NHFILE *) NONNULLARG1; +extern void rest_engravings(NHFILE *) NONNULLARG1; +extern void engr_stats(const char *, char *, long *, long *) NONNULLPTRS; +extern void del_engr(struct engr *) NONNULLARG1; +extern void rloc_engr(struct engr *) NONNULLARG1; extern void make_grave(coordxy, coordxy, const char *); extern void disturb_grave(coordxy, coordxy); -extern void see_engraving(struct engr *); -extern void feel_engraving(struct engr *); +extern void see_engraving(struct engr *) NONNULLARG1; +extern void feel_engraving(struct engr *) NONNULLARG1; /* ### exper.c ### */ extern long newuexp(int); extern int newpw(void); -extern int experience(struct monst *, int); +extern int experience(struct monst *, int) NONNULLARG1; extern void more_experienced(int, int); extern void losexp(const char *); extern void newexplevel(void); @@ -879,9 +947,9 @@ extern long rndexp(boolean); extern void explode(coordxy, coordxy, int, int, char, int); extern long scatter(coordxy, coordxy, int, unsigned int, struct obj *); extern void splatter_burning_oil(coordxy, coordxy, boolean); -extern void explode_oil(struct obj *, coordxy, coordxy); +extern void explode_oil(struct obj *, coordxy, coordxy) NONNULLARG1; extern int adtyp_to_expltype(const int); -extern void mon_explodes(struct monst *, struct attack *); +extern void mon_explodes(struct monst *, struct attack *) NONNULLPTRS; /* ### extralev.c ### */ @@ -891,30 +959,31 @@ extern void makerogueghost(void); /* ### files.c ### */ -extern const char *nh_basename(const char *, boolean); +extern const char *nh_basename(const char *, boolean) NONNULLARG1; #if !defined(CROSSCOMPILE) || defined(CROSSCOMPILE_TARGET) -extern int l_get_config_errors(lua_State *); +extern int l_get_config_errors(lua_State *) NONNULLARG1; #endif -extern char *fname_encode(const char *, char, char *, char *, int); -extern char *fname_decode(char, char *, char *, int); +extern char *fname_encode(const char *, char, + char *, char *, int) NONNULLPTRS; +extern char *fname_decode(char, char *, char *, int) NONNULLPTRS; extern const char *fqname(const char *, int, int); -extern FILE *fopen_datafile(const char *, const char *, int); -extern void zero_nhfile(NHFILE *); -extern void close_nhfile(NHFILE *); -extern void rewind_nhfile(NHFILE *); -extern void set_levelfile_name(char *, int); +extern FILE *fopen_datafile(const char *, const char *, int) NONNULLPTRS; +extern void zero_nhfile(NHFILE *) NONNULLARG1; +extern void close_nhfile(NHFILE *) NONNULLARG1; +extern void rewind_nhfile(NHFILE *) NONNULLARG1; +extern void set_levelfile_name(char *, int) NONNULLARG1; extern NHFILE *create_levelfile(int, char *); extern NHFILE *open_levelfile(int, char *); extern void delete_levelfile(int); extern void clearlocks(void); -extern NHFILE *create_bonesfile(d_level *, char **, char *); -extern void commit_bonesfile(d_level *); -extern NHFILE *open_bonesfile(d_level *, char **); -extern int delete_bonesfile(d_level *); +extern NHFILE *create_bonesfile(d_level *, char **, char *) NONNULLARG12; +extern void commit_bonesfile(d_level *) NONNULLARG1; +extern NHFILE *open_bonesfile(d_level *, char **) NONNULLPTRS; +extern int delete_bonesfile(d_level *) NONNULLARG1; extern void compress_bonesfile(void); extern void set_savefile_name(boolean); #ifdef INSURANCE -extern void save_savefile_name(NHFILE *); +extern void save_savefile_name(NHFILE *) NONNULLARG1; #endif #ifndef MICRO extern void set_error_savefile(void); @@ -925,26 +994,26 @@ extern int delete_savefile(void); extern NHFILE *restore_saved_game(void); extern void nh_compress(const char *); extern void nh_uncompress(const char *); -extern boolean lock_file(const char *, int, int); -extern void unlock_file(const char *); +extern boolean lock_file(const char *, int, int) NONNULLARG1; +extern void unlock_file(const char *) NONNULLARG1; extern int do_write_config_file(void); -extern boolean parse_config_line(char *); +extern boolean parse_config_line(char *) NONNULLARG1; #ifdef USER_SOUNDS -extern boolean can_read_file(const char *); +extern boolean can_read_file(const char *) NONNULLARG1; #endif extern void config_error_init(boolean, const char *, boolean); extern void config_erradd(const char *); extern int config_error_done(void); -extern boolean read_config_file(const char *, int); +extern boolean read_config_file(const char *, int) NONNULLARG1; extern void check_recordfile(const char *); extern void read_wizkit(void); extern boolean parse_conf_str(const char *str, boolean (*proc)(char *)); extern int read_sym_file(int); -extern void paniclog(const char *, const char *); +extern void paniclog(const char *, const char *) NONNULLPTRS; extern void testinglog(const char *, const char *, const char *); extern int validate_prefix_locations(char *); #ifdef SELECTSAVED -extern char *plname_from_file(const char *, boolean); +extern char *plname_from_file(const char *, boolean) NONNULLARG1; #endif extern char **get_saved_games(void); extern void free_saved_games(char **); @@ -962,20 +1031,20 @@ extern boolean debugcore(const char *, boolean); extern void reveal_paths(void); extern boolean read_tribute(const char *, const char *, int, char *, int, unsigned); -extern boolean Death_quote(char *, int); -extern void livelog_add(long ll_type, const char *); +extern boolean Death_quote(char *, int) NONNULLARG1; +extern void livelog_add(long ll_type, const char *) NONNULLARG2; /* ### fountain.c ### */ -extern void floating_above(const char *); +extern void floating_above(const char *) NONNULLARG1; extern void dogushforth(int); extern void dryup(coordxy, coordxy, boolean); extern void drinkfountain(void); -extern void dipfountain(struct obj *); +extern void dipfountain(struct obj *) NONNULLARG1; extern int wash_hands(void); extern void breaksink(coordxy, coordxy); extern void drinksink(void); -extern void dipsink(struct obj *); +extern void dipsink(struct obj *) NONNULLARG1; extern void sink_backs_up(coordxy, coordxy); /* ### hack.c ### */ @@ -983,25 +1052,25 @@ extern void sink_backs_up(coordxy, coordxy); extern boolean is_valid_travelpt(coordxy, coordxy); extern anything *uint_to_any(unsigned); extern anything *long_to_any(long); -extern anything *monst_to_any(struct monst *); -extern anything *obj_to_any(struct obj *); +extern anything *monst_to_any(struct monst *) NONNULLARG1; +extern anything *obj_to_any(struct obj *) NONNULLARG1; extern boolean revive_nasty(coordxy, coordxy, const char *); extern int still_chewing(coordxy, coordxy); extern void movobj(struct obj *, coordxy, coordxy); extern boolean may_dig(coordxy, coordxy); extern boolean may_passwall(coordxy, coordxy); -extern boolean bad_rock(struct permonst *, coordxy, coordxy); -extern int cant_squeeze_thru(struct monst *); +extern boolean bad_rock(struct permonst *, coordxy, coordxy) NONNULLARG1; +extern int cant_squeeze_thru(struct monst *) NONNULLARG1; extern boolean invocation_pos(coordxy, coordxy); extern boolean test_move(coordxy, coordxy, coordxy, coordxy, int); #ifdef DEBUG extern int wiz_debug_cmd_traveldisplay(void); #endif extern boolean u_rooted(void); -extern void impact_disturbs_zombies(struct obj *, boolean); +extern void impact_disturbs_zombies(struct obj *, boolean) NONNULLARG1; extern void disturb_buried_zombies(coordxy, coordxy); extern boolean u_maybe_impaired(void); -extern const char *u_locomotion(const char *); +extern const char *u_locomotion(const char *) NONNULLARG1; extern void handle_tip(int); extern void domove(void); extern void runmode_delay_output(void); @@ -1023,7 +1092,7 @@ extern void end_running(boolean); extern void nomul(int); extern void unmul(const char *); extern int saving_grace(int); -extern void losehp(int, const char *, schar); +extern void losehp(int, const char *, schar) ; extern int weight_cap(void); extern int inv_weight(void); extern int near_capacity(void); @@ -1040,33 +1109,33 @@ extern boolean digit(char); extern boolean letter(char); extern char highc(char); extern char lowc(char); -extern char *lcase(char *); -extern char *ucase(char *); +extern char *lcase(char *) NONNULLARG1; +extern char *ucase(char *) NONNULLARG1; extern char *upstart(char *); -extern char *upwords(char *); -extern char *mungspaces(char *); -extern char *trimspaces(char *); -extern char *strip_newline(char *); -extern char *stripchars(char *, const char *, const char *); -extern char *stripdigits(char *); -extern char *eos(char *); -extern const char *c_eos(const char *); -extern unsigned Strlen_(const char *, const char *, int); -extern boolean str_start_is(const char *, const char *, boolean); -extern boolean str_end_is(const char *, const char *); +extern char *upwords(char *) NONNULLARG1; +extern char *mungspaces(char *) NONNULLARG1; +extern char *trimspaces(char *) NONNULLARG1; +extern char *strip_newline(char *) NONNULLARG1; +extern char *stripchars(char *, const char *, const char *) NONNULLPTRS; +extern char *stripdigits(char *) NONNULLARG1; +extern char *eos(char *) NONNULLARG1; +extern const char *c_eos(const char *) NONNULLARG1; +extern unsigned Strlen_(const char *, const char *, int) NONNULLPTRS; +extern boolean str_start_is(const char *, const char *, boolean) NONNULLPTRS; +extern boolean str_end_is(const char *, const char *) NONNULLPTRS; extern int str_lines_maxlen(const char *); -extern char *strkitten(char *, char); -extern void copynchars(char *, const char *, int); +extern char *strkitten(char *, char) NONNULLARG1; +extern void copynchars(char *, const char *, int) NONNULLARG12; extern char chrcasecpy(int, int); -extern char *strcasecpy(char *, const char *); -extern char *s_suffix(const char *); -extern char *ing_suffix(const char *); -extern char *xcrypt(const char *, char *); -extern boolean onlyspace(const char *); -extern char *tabexpand(char *); +extern char *strcasecpy(char *, const char *) NONNULLPTRS; +extern char *s_suffix(const char *) NONNULLARG1; +extern char *ing_suffix(const char *) NONNULLARG1; +extern char *xcrypt(const char *, char *) NONNULLPTRS; +extern boolean onlyspace(const char *) NONNULLARG1; +extern char *tabexpand(char *) NONNULLARG1; extern char *visctrl(char); extern char *strsubst(char *, const char *, const char *); -extern int strNsubst(char *, const char *, const char *, int); +extern int strNsubst(char *, const char *, const char *, int) NONNULLPTRS; extern const char *findword(const char *, const char *, int, boolean); extern const char *ordin(int); extern char *sitoa(int); @@ -1076,16 +1145,19 @@ extern int dist2(coordxy, coordxy, coordxy, coordxy); extern int isqrt(int); extern int distmin(coordxy, coordxy, coordxy, coordxy); extern boolean online2(coordxy, coordxy, coordxy, coordxy); -extern boolean pmatch(const char *, const char *); -extern boolean pmatchi(const char *, const char *); -extern boolean pmatchz(const char *, const char *); +extern boolean pmatch(const char *, const char *) NONNULLPTRS; +extern boolean pmatchi(const char *, const char *) NONNULLPTRS; +/* +extern boolean pmatchz(const char *, const char *) NONNULLPTRS; +*/ #ifndef STRNCMPI -extern int strncmpi(const char *, const char *, int); +extern int strncmpi(const char *, const char *, int) NONNULLPTRS; #endif #ifndef STRSTRI -extern char *strstri(const char *, const char *); +extern char *strstri(const char *, const char *) NONNULLPTRS; #endif -extern boolean fuzzymatch(const char *, const char *, const char *, boolean); +extern boolean fuzzymatch(const char *, const char *, + const char *, boolean) NONNULLPTRS; extern void init_random(int(*fn)(int)); extern void reseed_random(int(*fn)(int)); extern time_t getnow(void); @@ -1101,13 +1173,13 @@ extern int phase_of_the_moon(void); extern boolean friday_13th(void); extern int night(void); extern int midnight(void); -extern void strbuf_init(strbuf_t *); -extern void strbuf_append(strbuf_t *, const char *); -extern void strbuf_reserve(strbuf_t *, int); -extern void strbuf_empty(strbuf_t *); -extern void strbuf_nl_to_crlf(strbuf_t *); +extern void strbuf_init(strbuf_t *) NONNULLARG1; +extern void strbuf_append(strbuf_t *, const char *) NONNULLPTRS; +extern void strbuf_reserve(strbuf_t *, int) NONNULLARG1; +extern void strbuf_empty(strbuf_t *) NONNULLARG1; +extern void strbuf_nl_to_crlf(strbuf_t *) NONNULLARG1; extern int swapbits(int, int, int); -extern void shuffle_int_array(int *, int); +extern void shuffle_int_array(int *, int) NONNULLARG1; /* note: the snprintf CPP wrapper includes the "fmt" argument in "..." (__VA_ARGS__) to allow for zero arguments after fmt */ #define Snprintf(str, size, ...) \ @@ -1115,7 +1187,7 @@ extern void shuffle_int_array(int *, int); extern void nh_snprintf(const char *func, int line, char *str, size_t size, const char *fmt, ...) PRINTF_F(5, 6); #ifdef ENHANCED_SYMBOLS -extern int unicodeval_to_utf8str(int, uint8 *, size_t); +extern int unicodeval_to_utf8str(int, uint8 *, size_t) NONNULLARG2; #endif /* ### insight.c ### */ @@ -1123,7 +1195,7 @@ extern int unicodeval_to_utf8str(int, uint8 *, size_t); extern int doattributes(void); extern void enlightenment(int, int); extern void youhiding(boolean, int); -extern char *trap_predicament(char *, int, boolean); +extern char *trap_predicament(char *, int, boolean) NONNULLARG1; extern int doconduct(void); extern void show_conduct(int); extern void record_achievement(schar); @@ -1142,74 +1214,74 @@ extern void list_genocided(char, boolean); extern int dogenocided(void); extern const char *align_str(aligntyp); extern char *piousness(boolean, const char *); -extern void mstatusline(struct monst *); +extern void mstatusline(struct monst *) NONNULLARG1; extern void ustatusline(void); /* ### invent.c ### */ -extern void loot_classify(Loot *, struct obj *); +extern void loot_classify(Loot *, struct obj *) NONNULLPTRS; extern Loot *sortloot(struct obj **, unsigned, boolean, - boolean(*)(struct obj *)); -extern void unsortloot(Loot **); -extern void assigninvlet(struct obj *); -extern struct obj *merge_choice(struct obj *, struct obj *); -extern int merged(struct obj **, struct obj **); -extern void addinv_core1(struct obj *); -extern void addinv_core2(struct obj *); -extern struct obj *addinv(struct obj *); -extern struct obj *addinv_before(struct obj *, struct obj *); -extern struct obj *addinv_nomerge(struct obj *); + boolean(*)(struct obj *)) NONNULLARG1; +extern void unsortloot(Loot **) NONNULLARG1; +extern void assigninvlet(struct obj *) NONNULLARG1; +extern struct obj *merge_choice(struct obj *, struct obj *) NONNULLPTRS; +extern int merged(struct obj **, struct obj **) NONNULLPTRS; +extern void addinv_core1(struct obj *) NONNULLARG1; +extern void addinv_core2(struct obj *) NONNULLARG1; +extern struct obj *addinv(struct obj *) NONNULLARG1; +extern struct obj *addinv_before(struct obj *, struct obj *) NONNULLARG1; +extern struct obj *addinv_nomerge(struct obj *) NONNULLARG1; extern struct obj *hold_another_object(struct obj *, const char *, - const char *, const char *); -extern void useupall(struct obj *); -extern void useup(struct obj *); -extern void consume_obj_charge(struct obj *, boolean); -extern void freeinv_core(struct obj *); -extern void freeinv(struct obj *); + const char *, const char *) NONNULLARG1; +extern void useupall(struct obj *) NONNULLARG1; +extern void useup(struct obj *) NONNULLARG1; +extern void consume_obj_charge(struct obj *, boolean) NONNULLARG1; +extern void freeinv_core(struct obj *) NONNULLARG1; +extern void freeinv(struct obj *) NONNULLARG1; extern void delallobj(coordxy, coordxy); -extern void delobj(struct obj *); -extern void delobj_core(struct obj *, boolean); +extern void delobj(struct obj *) NONNULLARG1; +extern void delobj_core(struct obj *, boolean) NONNULLARG1; extern struct obj *sobj_at(int, coordxy, coordxy); -extern struct obj *nxtobj(struct obj *, int, boolean); +extern struct obj *nxtobj(struct obj *, int, boolean) NONNULLARG1; extern struct obj *carrying(int); extern struct obj *u_carried_gloves(void); extern struct obj *u_have_novel(void); extern struct obj *o_on(unsigned int, struct obj *); -extern boolean obj_here(struct obj *, coordxy, coordxy); +extern boolean obj_here(struct obj *, coordxy, coordxy) NONNULLARG1; extern boolean wearing_armor(void); -extern boolean is_worn(struct obj *); -extern boolean is_inuse(struct obj *); +extern boolean is_worn(struct obj *) NONNULLARG1; +extern boolean is_inuse(struct obj *) NONNULLARG1; extern struct obj *g_at(coordxy, coordxy); -extern boolean splittable(struct obj *); +extern boolean splittable(struct obj *) NONNULLARG1; extern int any_obj_ok(struct obj *); extern struct obj *getobj(const char *, int(*)(struct obj *), unsigned int); extern int ggetobj(const char *, int(*)(struct obj *), int, boolean, - unsigned *); + unsigned *) NONNULLARG1; extern int askchain(struct obj **, const char *, int, int(*)(struct obj *), - int(*)(struct obj *), int, const char *); -extern void set_cknown_lknown(struct obj *); -extern void fully_identify_obj(struct obj *); -extern int identify(struct obj *); + int(*)(struct obj *), int, const char *) NONNULLARG17; +extern void set_cknown_lknown(struct obj *) NONNULLARG1; +extern void fully_identify_obj(struct obj *) NONNULLARG1; +extern int identify(struct obj *) NONNULLARG1; extern int count_unidentified(struct obj *); extern void identify_pack(int, boolean); extern void learn_unseen_invent(void); extern void update_inventory(void); extern int doperminv(void); -extern void prinv(const char *, struct obj *, long); +extern void prinv(const char *, struct obj *, long) NONNULLARG2; extern char *xprname(struct obj *, const char *, char, boolean, long, long); extern int ddoinv(void); extern char display_inventory(const char *, boolean); extern int display_binventory(coordxy, coordxy, boolean); -extern struct obj *display_cinventory(struct obj *); -extern struct obj *display_minventory(struct monst *, int, char *); +extern struct obj *display_cinventory(struct obj *) NONNULLARG1; +extern struct obj *display_minventory(struct monst *, int, char *) NONNULLARG1; extern int dotypeinv(void); -extern const char *dfeature_at(coordxy, coordxy, char *); +extern const char *dfeature_at(coordxy, coordxy, char *) NONNULLARG3; extern int look_here(int, unsigned); extern int dolook(void); -extern boolean will_feel_cockatrice(struct obj *, boolean); -extern void feel_cockatrice(struct obj *, boolean); -extern void stackobj(struct obj *); -extern boolean mergable(struct obj *, struct obj *); +extern boolean will_feel_cockatrice(struct obj *, boolean) NONNULLARG1; +extern void feel_cockatrice(struct obj *, boolean) NONNULLARG1; +extern void stackobj(struct obj *) NONNULLARG1; +extern boolean mergable(struct obj *, struct obj *) NONNULLPTRS; extern int doprgold(void); extern int doprwep(void); extern int doprarm(void); @@ -1217,11 +1289,11 @@ extern int doprring(void); extern int dopramulet(void); extern int doprtool(void); extern int doprinuse(void); -extern void useupf(struct obj *, long); +extern void useupf(struct obj *, long) NONNULLARG1; extern char *let_to_name(char, boolean, boolean); extern void free_invbuf(void); extern void reassign(void); -extern boolean check_invent_gold(const char *); +extern boolean check_invent_gold(const char *) NONNULLARG1; extern int doorganize(void); extern int adjust_split(void); extern void free_pickinv_cache(void); @@ -1229,10 +1301,11 @@ extern int count_unpaid(struct obj *); extern int count_buc(struct obj *, int, boolean(*)(struct obj *)); extern void tally_BUCX(struct obj *, boolean, int *, int *, int *, int *, int *, int *); -extern long count_contents(struct obj *, boolean, boolean, boolean, boolean); -extern void carry_obj_effects(struct obj *); +extern long count_contents(struct obj *, boolean, + boolean, boolean, boolean) NONNULLARG1; +extern void carry_obj_effects(struct obj *) NONNULLARG1; extern const char *currency(long); -extern void silly_thing(const char *, struct obj *); +extern void silly_thing(const char *, struct obj *) NONNULLARG1; extern void sync_perminvent(void); extern void perm_invent_toggled(boolean negated); extern void prepare_perminvent(winid window); @@ -1250,43 +1323,44 @@ extern int dosuspend(void); /* ### light.c ### */ -extern void new_light_source(coordxy, coordxy, int, int, union any *); -extern void del_light_source(int, union any *); -extern void do_light_sources(seenV **); +extern void new_light_source(coordxy, coordxy, + int, int, union any *) NONNULLPTRS; +extern void del_light_source(int, union any *) NONNULLARG2; +extern void do_light_sources(seenV **) NONNULLARG1; extern void show_transient_light(struct obj *, coordxy, coordxy); extern void transient_light_cleanup(void); extern struct monst *find_mid(unsigned, unsigned); extern void save_light_sources(NHFILE *, int); -extern void restore_light_sources(NHFILE *); -extern void light_stats(const char *, char *, long *, long *); +extern void restore_light_sources(NHFILE *) NONNULLARG1; +extern void light_stats(const char *, char *, long *, long *) NONNULLPTRS; extern void relink_light_sources(boolean); extern void light_sources_sanity_check(void); -extern void obj_move_light_source(struct obj *, struct obj *); +extern void obj_move_light_source(struct obj *, struct obj *) NONNULLARG12; extern boolean any_light_source(void); extern void snuff_light_source(coordxy, coordxy); -extern boolean obj_sheds_light(struct obj *); -extern boolean obj_is_burning(struct obj *); -extern void obj_split_light_source(struct obj *, struct obj *); -extern void obj_merge_light_sources(struct obj *, struct obj *); -extern void obj_adjust_light_radius(struct obj *, int); -extern int candle_light_range(struct obj *); -extern int arti_light_radius(struct obj *); -extern const char *arti_light_description(struct obj *); +extern boolean obj_sheds_light(struct obj *) NONNULLARG1; +extern boolean obj_is_burning(struct obj *) NONNULLARG1; +extern void obj_split_light_source(struct obj *, struct obj *) NONNULLARG12; +extern void obj_merge_light_sources(struct obj *, struct obj *) NONNULLARG12; +extern void obj_adjust_light_radius(struct obj *, int) NONNULLARG1; +extern int candle_light_range(struct obj *) NONNULLARG1; +extern int arti_light_radius(struct obj *) NONNULLARG1; +extern const char *arti_light_description(struct obj *) NONNULLARG1; extern int wiz_light_sources(void); /* ### lock.c ### */ extern boolean picking_lock(coordxy *, coordxy *); extern boolean picking_at(coordxy, coordxy); -extern void breakchestlock(struct obj *, boolean); +extern void breakchestlock(struct obj *, boolean) NONNULLARG1; extern void reset_pick(void); extern void maybe_reset_pick(struct obj *); extern struct obj *autokey(boolean); extern int pick_lock(struct obj *, coordxy, coordxy, struct obj *); extern boolean u_have_forceable_weapon(void); extern int doforce(void); -extern boolean boxlock(struct obj *, struct obj *); -extern boolean doorlock(struct obj *, coordxy, coordxy); +extern boolean boxlock(struct obj *, struct obj *) NONNULLARG12; +extern boolean doorlock(struct obj *, coordxy, coordxy) NONNULLARG1; extern int doopen(void); extern boolean stumble_on_door_mimic(coordxy, coordxy); extern int doopen_indir(coordxy, coordxy); @@ -1315,39 +1389,41 @@ extern void readmail(struct obj *); /* ### makemon.c ### */ -extern boolean is_home_elemental(struct permonst *); -extern struct monst *clone_mon(struct monst *, coordxy, coordxy); -extern int monhp_per_lvl(struct monst *); -extern void newmonhp(struct monst *, int); +extern boolean is_home_elemental(struct permonst *) NONNULLARG1; +extern struct monst *clone_mon(struct monst *, coordxy, coordxy) NONNULLARG1; +extern int monhp_per_lvl(struct monst *) NONNULLARG1; +extern void newmonhp(struct monst *, int) NONNULLARG1; extern struct mextra *newmextra(void); extern struct monst *makemon(struct permonst *, coordxy, coordxy, mmflags_nht); -extern struct monst *unmakemon(struct monst *, mmflags_nht); +extern struct monst *unmakemon(struct monst *, mmflags_nht) NONNULLARG1; extern boolean create_critters(int, struct permonst *, boolean); extern struct permonst *rndmonst_adj(int, int); extern struct permonst *rndmonst(void); extern struct permonst *mkclass(char, int); extern struct permonst *mkclass_aligned(char, int, aligntyp); extern int mkclass_poly(int); -extern int adj_lev(struct permonst *); -extern struct permonst *grow_up(struct monst *, struct monst *); -extern struct obj* mongets(struct monst *, int); +extern int adj_lev(struct permonst *) NONNULLARG1; +extern struct permonst *grow_up(struct monst *, struct monst *) NONNULLARG1; +extern struct obj* mongets(struct monst *, int) NONNULLARG1; extern int golemhp(int); -extern boolean peace_minded(struct permonst *); -extern void set_malign(struct monst *); -extern void newmcorpsenm(struct monst *); -extern void freemcorpsenm(struct monst *); -extern void set_mimic_sym(struct monst *); +extern boolean peace_minded(struct permonst *) NONNULLARG1; +extern void set_malign(struct monst *) NONNULLARG1; +extern void newmcorpsenm(struct monst *) NONNULLARG1; +extern void freemcorpsenm(struct monst *) NONNULLARG1; +extern void set_mimic_sym(struct monst *) NO_NONNULLS; /* tests for NULL mtmp */ extern int mbirth_limit(int); -extern void mkmonmoney(struct monst *, long); +extern void mkmonmoney(struct monst *, long) NONNULLARG1; extern int bagotricks(struct obj *, boolean, int *); extern boolean propagate(int, boolean, boolean); /* ### mcastu.c ### */ -extern int castmu(struct monst *, struct attack *, boolean, boolean); -extern void touch_of_death(struct monst *); -extern char *death_inflicted_by(char *, const char *, struct monst *); -extern int buzzmu(struct monst *, struct attack *); +extern int castmu(struct monst *, struct attack *, + boolean, boolean) NONNULLARG12; +extern void touch_of_death(struct monst *) NONNULLARG1; +extern char *death_inflicted_by(char *, const char *, + struct monst *) NONNULLARG12; +extern int buzzmu(struct monst *, struct attack *) NONNULLARG12; /* ### mdlib.c ### */ @@ -1360,48 +1436,49 @@ extern void dump_glyphids(void); /* ### mhitm.c ### */ -extern int fightm(struct monst *); +extern int fightm(struct monst *) NONNULLARG1; extern int mdisplacem(struct monst *, struct monst *, boolean); extern int mattackm(struct monst *, struct monst *); -extern boolean failed_grab(struct monst *, struct monst *, struct attack *); -extern boolean engulf_target(struct monst *, struct monst *); -extern int mon_poly(struct monst *, struct monst *, int); -extern void paralyze_monst(struct monst *, int); -extern int sleep_monst(struct monst *, int, int); -extern void slept_monst(struct monst *); -extern void xdrainenergym(struct monst *, boolean); +extern boolean failed_grab(struct monst *, struct monst *, + struct attack *) NONNULLPTRS; +extern boolean engulf_target(struct monst *, struct monst *) NONNULLARG12; +extern int mon_poly(struct monst *, struct monst *, int) NONNULLARG12; +extern void paralyze_monst(struct monst *, int) NONNULLARG1; +extern int sleep_monst(struct monst *, int, int) NONNULLARG1; +extern void slept_monst(struct monst *) NONNULLARG1; +extern void xdrainenergym(struct monst *, boolean) NONNULLARG1; extern long attk_protection(int); extern void rustm(struct monst *, struct obj *); /* ### mhitu.c ### */ -extern void hitmsg(struct monst *, struct attack *); -extern const char *mswings_verb(struct obj *, boolean); -extern const char *mpoisons_subj(struct monst *, struct attack *); +extern void hitmsg(struct monst *, struct attack *) NONNULLARG12; +extern const char *mswings_verb(struct obj *, boolean) NONNULLARG1; +extern const char *mpoisons_subj(struct monst *, struct attack *) NONNULLARG12; extern void u_slow_down(void); extern struct monst *cloneu(void); -extern void expels(struct monst *, struct permonst *, boolean); +extern void expels(struct monst *, struct permonst *, boolean) NONNULLARG12; extern struct attack *getmattk(struct monst *, struct monst *, int, int *, - struct attack *); -extern int mattacku(struct monst *); -boolean diseasemu(struct permonst *); -boolean u_slip_free(struct monst *, struct attack *); -extern int magic_negation(struct monst *); + struct attack *) NONNULLARG12; +extern int mattacku(struct monst *) NONNULLARG1; +boolean diseasemu(struct permonst *) NONNULLARG1; +boolean u_slip_free(struct monst *, struct attack *) NONNULLARG12; +extern int magic_negation(struct monst *) NONNULLARG1; extern boolean gulp_blnd_check(void); -extern int gazemu(struct monst *, struct attack *); -extern void mdamageu(struct monst *, int); -extern int could_seduce(struct monst *, struct monst *, struct attack *); -extern int doseduce(struct monst *); +extern int gazemu(struct monst *, struct attack *) NONNULLARG12; +extern void mdamageu(struct monst *, int) NONNULLARG1; +extern int could_seduce(struct monst *, struct monst *, struct attack *) NONNULLARG12; +extern int doseduce(struct monst *) NONNULLARG1; /* ### minion.c ### */ -extern void newemin(struct monst *); -extern void free_emin(struct monst *); +extern void newemin(struct monst *) NONNULLARG1; +extern void free_emin(struct monst *) NONNULLARG1; extern int monster_census(boolean); extern int msummon(struct monst *); extern void summon_minion(aligntyp, boolean); -extern int demon_talk(struct monst *); -extern long bribe(struct monst *); +extern int demon_talk(struct monst *) NONNULLARG1; +extern long bribe(struct monst *) NONNULLARG1; extern int dprince(aligntyp); extern int dlord(aligntyp); extern int llord(void); @@ -1415,23 +1492,24 @@ extern void gain_guardian_angel(void); extern void sort_rooms(void); extern void add_room(int, int, int, int, boolean, schar, boolean); extern void add_subroom(struct mkroom *, int, int, int, int, boolean, schar, - boolean); + boolean) NONNULLARG1; extern void free_luathemes(enum lua_theme_group); extern void makecorridors(void); -extern void add_door(coordxy, coordxy, struct mkroom *); +extern void add_door(coordxy, coordxy, struct mkroom *) NONNULLARG3; extern void count_level_features(void); extern void clear_level_structures(void); extern void level_finalize_topology(void); extern void mklev(void); #ifdef SPECIALIZATION -extern void topologize(struct mkroom *, boolean); +extern void topologize(struct mkroom *, boolean) NONNULLARG1; #else -extern void topologize(struct mkroom *); +extern void topologize(struct mkroom *) NONNULLARG1; #endif -extern void place_branch(branch *, coordxy, coordxy); +/* place_branch() has tests for NULL branch arg, preventing NONNULLARG1 */ +extern void place_branch(branch *, coordxy, coordxy) NO_NONNULLS; extern boolean occupied(coordxy, coordxy); extern int okdoor(coordxy, coordxy); -extern void dodoor(coordxy, coordxy, struct mkroom *); +extern void dodoor(coordxy, coordxy, struct mkroom *) NONNULLARG3; extern void mktrap(int, int, struct mkroom *, coord *); extern void mkstairs(coordxy, coordxy, char, struct mkroom *, boolean); extern void mkinvokearea(void); @@ -1452,35 +1530,38 @@ extern void wallification(coordxy, coordxy, coordxy, coordxy); extern void fix_wall_spines(coordxy, coordxy, coordxy, coordxy); extern void walkfrom(coordxy, coordxy, schar); extern void pick_vibrasquare_location(void); -extern void makemaz(const char *); -extern void mazexy(coord *); -extern void get_level_extends(coordxy *, coordxy *, coordxy *, coordxy *); +extern void makemaz(const char *) NONNULLARG1; +extern void mazexy(coord *) NONNULLARG1; +extern void get_level_extends(coordxy *, coordxy *, coordxy *, coordxy *) NONNULLPTRS; extern void bound_digging(void); extern void mkportal(coordxy, coordxy, xint16, xint16); extern boolean bad_location(coordxy, coordxy, coordxy, coordxy, coordxy, coordxy); +/* dungeon.c u_on_rndspot() passes NULL final arg to place_lregion() */ extern void place_lregion(coordxy, coordxy, coordxy, coordxy, coordxy, - coordxy, coordxy, coordxy, xint16, d_level *); + coordxy, coordxy, coordxy, xint16, d_level *) NO_NONNULLS; extern void fixup_special(void); extern void fumaroles(void); extern void movebubbles(void); extern void water_friction(void); -extern void save_waterlevel(NHFILE *); -extern void restore_waterlevel(NHFILE *); +extern void save_waterlevel(NHFILE *) NONNULLARG1; +extern void restore_waterlevel(NHFILE *) NONNULLARG1; /* ### mkobj.c ### */ extern struct oextra *newoextra(void); extern void copy_oextra(struct obj *, struct obj *); -extern void dealloc_oextra(struct obj *); -extern void newomonst(struct obj *); -extern void free_omonst(struct obj *); -extern void newomid(struct obj *); -extern void free_omid(struct obj *); +extern void dealloc_oextra(struct obj *) NONNULLARG1; +extern void newomonst(struct obj *) NONNULLARG1; +extern void free_omonst(struct obj *) NONNULLARG1; +extern void newomid(struct obj *) NONNULLARG1; +extern void free_omid(struct obj *) NONNULLARG1; +/* extern void newolong(struct obj *); extern void free_olong(struct obj *); -extern void new_omailcmd(struct obj *, const char *); -extern void free_omailcmd(struct obj *); +*/ +extern void new_omailcmd(struct obj *, const char *) NONNULLPTRS; +extern void free_omailcmd(struct obj *) NONNULLARG1; extern struct obj *mkobj_at(char, coordxy, coordxy, boolean); extern struct obj *mksobj_at(int, coordxy, coordxy, boolean, boolean); extern struct obj *mksobj_migr_to_species(int, unsigned, boolean, boolean); @@ -1488,149 +1569,151 @@ extern struct obj *mkobj(int, boolean) NONNULL; extern int rndmonnum_adj(int, int); extern int rndmonnum(void); extern boolean bogon_is_pname(char); -extern struct obj *splitobj(struct obj *, long) NONNULL; +extern struct obj *splitobj(struct obj *, long) NONNULLARG1; extern unsigned next_ident(void); -extern struct obj *unsplitobj(struct obj *); +extern struct obj *unsplitobj(struct obj *) NONNULLARG1; extern void clear_splitobjs(void); -extern void replace_object(struct obj *, struct obj *); -extern struct obj *unknwn_contnr_contents(struct obj *); -extern void bill_dummy_object(struct obj *); -extern void costly_alteration(struct obj *, int); +extern void replace_object(struct obj *, struct obj *) NONNULLARG12; +extern struct obj *unknwn_contnr_contents(struct obj *) NONNULLARG1; +extern void bill_dummy_object(struct obj *) NONNULLARG1; +extern void costly_alteration(struct obj *, int) NONNULLARG1; extern void clear_dknown(struct obj *); extern void unknow_object(struct obj *); extern struct obj *mksobj(int, boolean, boolean) NONNULL; -extern int bcsign(struct obj *); -extern int weight(struct obj *); +extern int bcsign(struct obj *) NONNULLARG1; +extern int weight(struct obj *) NONNULLARG1; extern struct obj *mkgold(long, coordxy, coordxy); extern struct obj *mkcorpstat(int, struct monst *, struct permonst *, coordxy, coordxy, unsigned); -extern int corpse_revive_type(struct obj *); +extern int corpse_revive_type(struct obj *) NONNULLARG1; extern struct obj *obj_attach_mid(struct obj *, unsigned); -extern struct monst *get_mtraits(struct obj *, boolean); +extern struct monst *get_mtraits(struct obj *, boolean) NONNULLARG1; extern struct obj *mk_tt_object(int, coordxy, coordxy); extern struct obj *mk_named_object(int, struct permonst *, coordxy, coordxy, - const char *); + const char *) ; extern struct obj *rnd_treefruit_at(coordxy, coordxy); -extern void set_corpsenm(struct obj *, int); -extern long rider_revival_time(struct obj *, boolean); -extern void start_corpse_timeout(struct obj *); -extern void start_glob_timeout(struct obj *, long); -extern void shrink_glob(anything *, long); -extern void maybe_adjust_light(struct obj *, int); -extern void bless(struct obj *); -extern void unbless(struct obj *); -extern void curse(struct obj *); -extern void uncurse(struct obj *); -extern void blessorcurse(struct obj *, int); -extern void set_bknown(struct obj *, unsigned); -extern boolean is_flammable(struct obj *); -extern boolean is_rottable(struct obj *); -extern void place_object(struct obj *, coordxy, coordxy); +extern void set_corpsenm(struct obj *, int) NONNULLARG1; +extern long rider_revival_time(struct obj *, boolean) NONNULLARG1; +extern void start_corpse_timeout(struct obj *) NONNULLARG1; +extern void start_glob_timeout(struct obj *, long) NONNULLARG1; +extern void shrink_glob(anything *, long) NONNULLARG1; +extern void maybe_adjust_light(struct obj *, int) NONNULLARG1; +extern void bless(struct obj *) NONNULLARG1; +extern void unbless(struct obj *) NONNULLARG1; +extern void curse(struct obj *) NONNULLARG1; +extern void uncurse(struct obj *) NONNULLARG1; +extern void blessorcurse(struct obj *, int) NONNULLARG1; +extern void set_bknown(struct obj *, unsigned) NONNULLARG1; +extern boolean is_flammable(struct obj *) NONNULLARG1; +extern boolean is_rottable(struct obj *) NONNULLARG1; +extern void place_object(struct obj *, coordxy, coordxy) NONNULLARG1; extern void recreate_pile_at(coordxy, coordxy); -extern void remove_object(struct obj *); -extern void discard_minvent(struct monst *, boolean); -extern void obj_extract_self(struct obj *); -extern void extract_nobj(struct obj *, struct obj **); -extern void extract_nexthere(struct obj *, struct obj **); -extern int add_to_minv(struct monst *, struct obj *); -extern struct obj *add_to_container(struct obj *, struct obj *); -extern void add_to_migration(struct obj *); -extern void add_to_buried(struct obj *); -extern void dealloc_obj(struct obj *); +extern void remove_object(struct obj *) NONNULLARG1; +extern void discard_minvent(struct monst *, boolean) NONNULLARG1; +extern void obj_extract_self(struct obj *) NONNULLARG1; +extern void extract_nobj(struct obj *, struct obj **) NONNULLARG12; +extern void extract_nexthere(struct obj *, struct obj **) NONNULLARG12; +extern int add_to_minv(struct monst *, struct obj *) NONNULLARG12; +extern struct obj *add_to_container(struct obj *, struct obj *) NONNULLARG12; +extern void add_to_migration(struct obj *) NONNULLARG1; +extern void add_to_buried(struct obj *) NONNULLARG1; +extern void dealloc_obj(struct obj *) NONNULLARG1; extern void obj_ice_effects(coordxy, coordxy, boolean); -extern long peek_at_iced_corpse_age(struct obj *); +extern long peek_at_iced_corpse_age(struct obj *) NONNULLARG1; extern int hornoplenty(struct obj *, boolean, struct obj *); extern void obj_sanity_check(void); extern struct obj *obj_nexto(struct obj *); -extern struct obj *obj_nexto_xy(struct obj *, coordxy, coordxy, boolean); +extern struct obj *obj_nexto_xy(struct obj *, coordxy, coordxy, boolean) NONNULLARG1; extern struct obj *obj_absorb(struct obj **, struct obj **); extern struct obj *obj_meld(struct obj **, struct obj **); -extern void pudding_merge_message(struct obj *, struct obj *); +extern void pudding_merge_message(struct obj *, struct obj *) NONNULLARG12; extern struct obj *init_dummyobj(struct obj *, short, long); /* ### mkroom.c ### */ extern void do_mkroom(int); -extern void fill_zoo(struct mkroom *); +extern void fill_zoo(struct mkroom *) NONNULLARG1; extern struct permonst *antholemon(void); extern boolean nexttodoor(int, int); -extern boolean has_dnstairs(struct mkroom *); -extern boolean has_upstairs(struct mkroom *); -extern int somex(struct mkroom *); -extern int somey(struct mkroom *); -extern boolean inside_room(struct mkroom *, coordxy, coordxy); -extern boolean somexy(struct mkroom *, coord *); -extern boolean somexyspace(struct mkroom *, coord *); -extern void mkundead(coord *, boolean, int); +extern boolean has_dnstairs(struct mkroom *) NONNULLARG1; +extern boolean has_upstairs(struct mkroom *) NONNULLARG1; +extern int somex(struct mkroom *) NONNULLARG1; +extern int somey(struct mkroom *) NONNULLARG1; +extern boolean inside_room(struct mkroom *, coordxy, coordxy) NONNULLARG1; +extern boolean somexy(struct mkroom *, coord *) NONNULLARG12; +extern boolean somexyspace(struct mkroom *, coord *) NONNULLARG12; +extern void mkundead(coord *, boolean, int) NONNULLARG1; extern struct permonst *courtmon(void); -extern void save_rooms(NHFILE *); -extern void rest_rooms(NHFILE *); +extern void save_rooms(NHFILE *) NONNULLARG1; +extern void rest_rooms(NHFILE *) NONNULLARG1; extern struct mkroom *search_special(schar); extern int cmap_to_type(int); /* ### mon.c ### */ -extern void dealloc_monst(struct monst *); +extern void dealloc_monst(struct monst *) NONNULLARG1; +extern void copy_mextra(struct monst *, struct monst *); +extern void dealloc_mextra(struct monst *) NONNULLARG1; extern void mon_sanity_check(void); -extern boolean zombie_maker(struct monst *); -extern int zombie_form(struct permonst *); -extern int m_poisongas_ok(struct monst *); +extern boolean zombie_maker(struct monst *) NONNULLARG1; +extern int zombie_form(struct permonst *) NONNULLARG1; +extern int m_poisongas_ok(struct monst *) NONNULLARG1; extern int undead_to_corpse(int); extern int genus(int, int); extern int pm_to_cham(int); -extern int minliquid(struct monst *); -extern boolean movemon_singlemon(struct monst *); +extern int minliquid(struct monst *) NONNULLARG1; +extern boolean movemon_singlemon(struct monst *) NONNULLARG1; extern int movemon(void); -extern void meatbox(struct monst *, struct obj *); -extern void m_consume_obj(struct monst *, struct obj *); -extern int meatmetal(struct monst *); -extern int meatobj(struct monst *); -extern int meatcorpse(struct monst *); -extern void mon_give_prop(struct monst *, int); -extern void mon_givit(struct monst *, struct permonst *); -extern void mpickgold(struct monst *); -extern boolean mpickstuff(struct monst *); -extern int curr_mon_load(struct monst *); -extern int max_mon_load(struct monst *); -extern boolean can_touch_safely(struct monst *, struct obj *); -extern int can_carry(struct monst *, struct obj *); -extern long mon_allowflags(struct monst *); -extern boolean m_in_air(struct monst *); -extern int mfndpos(struct monst *, coord *, long *, long); -extern boolean monnear(struct monst *, coordxy, coordxy); +extern void meatbox(struct monst *, struct obj *) NONNULLPTRS; +extern void m_consume_obj(struct monst *, struct obj *) NONNULLPTRS; +extern int meatmetal(struct monst *) NONNULLARG1; +extern int meatobj(struct monst *) NONNULLARG1; +extern int meatcorpse(struct monst *) NONNULLARG1; +extern void mon_give_prop(struct monst *, int) NONNULLARG1; +extern void mon_givit(struct monst *, struct permonst *) NONNULLARG12; +extern void mpickgold(struct monst *) NONNULLARG1; +extern boolean mpickstuff(struct monst *) NONNULLARG1; +extern int curr_mon_load(struct monst *) NONNULLARG1; +extern int max_mon_load(struct monst *) NONNULLARG1; +extern boolean can_touch_safely(struct monst *, struct obj *) NONNULLARG12; +extern int can_carry(struct monst *, struct obj *) NONNULLARG12; +extern long mon_allowflags(struct monst *) NONNULLARG1; +extern boolean m_in_air(struct monst *) NONNULLARG1; +extern int mfndpos(struct monst *, coord *, long *, long) NONNULLPTRS; +extern boolean monnear(struct monst *, coordxy, coordxy) NONNULLARG1; extern void dmonsfree(void); -extern void elemental_clog(struct monst *); -extern int mcalcmove(struct monst *, boolean); +extern void elemental_clog(struct monst *) NONNULLARG1; +extern int mcalcmove(struct monst *, boolean) NONNULLARG1; extern void mcalcdistress(void); -extern void replmon(struct monst *, struct monst *); -extern void relmon(struct monst *, struct monst **); -extern struct obj *mlifesaver(struct monst *); -extern boolean corpse_chance(struct monst *, struct monst *, boolean); -extern void mondead(struct monst *); -extern void mondied(struct monst *); -extern void mongone(struct monst *); -extern void monstone(struct monst *); -extern void monkilled(struct monst *, const char *, int); +extern void replmon(struct monst *, struct monst *) NONNULLARG12; +extern void relmon(struct monst *, struct monst **) NONNULLARG1; +extern struct obj *mlifesaver(struct monst *) NONNULLARG1; +extern boolean corpse_chance(struct monst *, struct monst *, boolean) NONNULLARG1; +extern void mondead(struct monst *) NONNULLARG1; +extern void mondied(struct monst *) NONNULLARG1; +extern void mongone(struct monst *) NONNULLARG1; +extern void monstone(struct monst *) NONNULLARG1; +extern void monkilled(struct monst *, const char *, int) NONNULLARG1; extern void set_ustuck(struct monst *); -extern void unstuck(struct monst *); -extern void killed(struct monst *); -extern void xkilled(struct monst *, int); -extern void mon_to_stone(struct monst *); -extern void m_into_limbo(struct monst *); -extern void migrate_mon(struct monst *, xint16, xint16); -extern void mnexto(struct monst *, unsigned); -extern void deal_with_overcrowding(struct monst *); -extern void maybe_mnexto(struct monst *); -extern int mnearto(struct monst *, coordxy, coordxy, boolean, unsigned); -extern void m_respond(struct monst *); -extern void setmangry(struct monst *, boolean); -extern void wake_msg(struct monst *, boolean); -extern void wakeup(struct monst *, boolean); +extern void unstuck(struct monst *) NONNULLARG1; +extern void killed(struct monst *) NONNULLARG1; +extern void xkilled(struct monst *, int) NONNULLARG1; +extern void mon_to_stone(struct monst *) NONNULLARG1; +extern void m_into_limbo(struct monst *) NONNULLARG1; +extern void migrate_mon(struct monst *, xint16, xint16) NONNULLARG1; +extern void mnexto(struct monst *, unsigned) NONNULLARG1; +extern void deal_with_overcrowding(struct monst *) NONNULLARG1; +extern void maybe_mnexto(struct monst *) NONNULLARG1; +extern int mnearto(struct monst *, coordxy, coordxy, boolean, unsigned) NONNULLARG1; +extern void m_respond(struct monst *) NONNULLARG1; +extern void setmangry(struct monst *, boolean) NONNULLARG1; +extern void wake_msg(struct monst *, boolean) NONNULLARG1; +extern void wakeup(struct monst *, boolean) NONNULLARG1; extern void wake_nearby(void); extern void wake_nearto(coordxy, coordxy, int); -extern void seemimic(struct monst *); -extern void normal_shape(struct monst *); +extern void seemimic(struct monst *) NONNULLARG1; +extern void normal_shape(struct monst *) NONNULLARG1; extern void iter_mons_safe(boolean (*)(struct monst *)); extern void iter_mons(void (*)(struct monst *)); extern struct monst *get_iter_mons(boolean (*)(struct monst *)); @@ -1639,16 +1722,16 @@ extern struct monst *get_iter_mons_xy(boolean (*)(struct monst *, coordxy, coordxy); extern void rescham(void); extern void restartcham(void); -extern void restore_cham(struct monst *); +extern void restore_cham(struct monst *) NONNULLARG1; extern void maybe_unhide_at(coordxy, coordxy); -extern boolean hideunder(struct monst *); -extern void hide_monst(struct monst *); +extern boolean hideunder(struct monst *) NONNULLARG1; +extern void hide_monst(struct monst *) NONNULLARG1; extern void mon_animal_list(boolean); extern boolean valid_vampshiftform(int, int); -extern boolean validvamp(struct monst *, int *, int); -extern int select_newcham_form(struct monst *); -extern void mgender_from_permonst(struct monst *, struct permonst *); -extern int newcham(struct monst *, struct permonst *, unsigned); +extern boolean validvamp(struct monst *, int *, int) NONNULLARG12; +extern int select_newcham_form(struct monst *) NONNULLARG1; +extern void mgender_from_permonst(struct monst *, struct permonst *) NONNULLARG12; +extern int newcham(struct monst *, struct permonst *, unsigned) NONNULLARG1; extern int can_be_hatched(int); extern int egg_type_from_parent(int, boolean); extern boolean dead_species(int, boolean); @@ -1656,9 +1739,9 @@ extern void kill_genocided_monsters(void); extern void golemeffects(struct monst *, int, int); extern boolean angry_guards(boolean); extern void pacify_guards(void); -extern void decide_to_shapeshift(struct monst *, int); -extern boolean vamp_stone(struct monst *); -extern void check_gear_next_turn(struct monst *); +extern void decide_to_shapeshift(struct monst *, int) NONNULLARG1; +extern boolean vamp_stone(struct monst *) NONNULLARG1; +extern void check_gear_next_turn(struct monst *) NONNULLARG1; extern void copy_mextra(struct monst *, struct monst *); extern void dealloc_mextra(struct monst *); extern boolean usmellmon(struct permonst *); @@ -1666,95 +1749,96 @@ extern void mimic_hit_msg(struct monst *, short); /* ### mondata.c ### */ -extern void set_mon_data(struct monst *, struct permonst *); -extern struct attack *attacktype_fordmg(struct permonst *, int, int); -extern boolean attacktype(struct permonst *, int); -extern boolean noattacks(struct permonst *); -extern boolean poly_when_stoned(struct permonst *); -extern boolean defended(struct monst *, int); -extern boolean resists_drli(struct monst *); -extern boolean resists_magm(struct monst *); -extern boolean resists_blnd(struct monst *); -extern boolean can_blnd(struct monst *, struct monst *, uchar, struct obj *); -extern boolean ranged_attk(struct permonst *); -extern boolean mon_hates_silver(struct monst *); -extern boolean hates_silver(struct permonst *); -extern boolean mon_hates_blessings(struct monst *); -extern boolean hates_blessings(struct permonst *); -extern boolean mon_hates_light(struct monst *); -extern boolean passes_bars(struct permonst *); -extern boolean can_blow(struct monst *); -extern boolean can_chant(struct monst *); -extern boolean can_be_strangled(struct monst *); -extern boolean can_track(struct permonst *); -extern boolean breakarm(struct permonst *); -extern boolean sliparm(struct permonst *); -extern boolean sticks(struct permonst *); -extern boolean cantvomit(struct permonst *); -extern int num_horns(struct permonst *); -extern struct attack *dmgtype_fromattack(struct permonst *, int, int); -extern boolean dmgtype(struct permonst *, int); -extern int max_passive_dmg(struct monst *, struct monst *); -extern boolean same_race(struct permonst *, struct permonst *); -extern int name_to_mon(const char *, int *); -extern int name_to_monplus(const char *, const char **, int *); +extern void set_mon_data(struct monst *, struct permonst *) NONNULLARG12; +extern struct attack *attacktype_fordmg(struct permonst *, int, int) NONNULLARG1; +extern boolean attacktype(struct permonst *, int) NONNULLARG1; +extern boolean noattacks(struct permonst *) NONNULLARG1; +extern boolean poly_when_stoned(struct permonst *) NONNULLARG1; +extern boolean defended(struct monst *, int) NONNULLARG1; +extern boolean resists_drli(struct monst *) NONNULLARG1; +extern boolean resists_magm(struct monst *) NONNULLARG1; +extern boolean resists_blnd(struct monst *) NONNULLARG1; +extern boolean can_blnd(struct monst *, struct monst *, + uchar, struct obj *) NONNULLARG2; +extern boolean ranged_attk(struct permonst *) NONNULLARG1; +extern boolean mon_hates_silver(struct monst *) NONNULLARG1; +extern boolean hates_silver(struct permonst *) NONNULLARG1; +extern boolean mon_hates_blessings(struct monst *) NONNULLARG1; +extern boolean hates_blessings(struct permonst *) NONNULLARG1; +extern boolean mon_hates_light(struct monst *) NONNULLARG1; +extern boolean passes_bars(struct permonst *) NONNULLARG1; +extern boolean can_blow(struct monst *) NONNULLARG1; +extern boolean can_chant(struct monst *) NONNULLARG1; +extern boolean can_be_strangled(struct monst *) NONNULLARG1; +extern boolean can_track(struct permonst *) NONNULLARG1; +extern boolean breakarm(struct permonst *) NONNULLARG1; +extern boolean sliparm(struct permonst *) NONNULLARG1; +extern boolean sticks(struct permonst *) NONNULLARG1; +extern boolean cantvomit(struct permonst *) NONNULLARG1; +extern int num_horns(struct permonst *) NONNULLARG1; +extern struct attack *dmgtype_fromattack(struct permonst *, int, int) NONNULLARG1; +extern boolean dmgtype(struct permonst *, int) NONNULLARG1; +extern int max_passive_dmg(struct monst *, struct monst *) NONNULLARG12; +extern boolean same_race(struct permonst *, struct permonst *) NONNULLARG12; +extern int name_to_mon(const char *, int *) NONNULLARG1; +extern int name_to_monplus(const char *, const char **, int *) NONNULLARG1; extern int name_to_monclass(const char *, int *); -extern int gender(struct monst *); -extern int pronoun_gender(struct monst *, unsigned); -extern boolean levl_follower(struct monst *); +extern int gender(struct monst *) NONNULLARG1; +extern int pronoun_gender(struct monst *, unsigned) NONNULLARG1; +extern boolean levl_follower(struct monst *) NONNULLARG1; extern int little_to_big(int); extern int big_to_little(int); extern boolean big_little_match(int, int); -extern const char *locomotion(const struct permonst *, const char *); -extern const char *stagger(const struct permonst *, const char *); -extern const char *on_fire(struct permonst *, struct attack *); -extern const char *msummon_environ(struct permonst *, const char **); -extern const struct permonst *raceptr(struct monst *); -extern boolean olfaction(struct permonst *); +extern const char *locomotion(const struct permonst *, const char *) NONNULLARG12; +extern const char *stagger(const struct permonst *, const char *) NONNULLARG12; +extern const char *on_fire(struct permonst *, struct attack *) NONNULLARG12; +extern const char *msummon_environ(struct permonst *, const char **) NONNULLARG12; +extern const struct permonst *raceptr(struct monst *) NONNULLARG1; +extern boolean olfaction(struct permonst *) NONNULLARG1; unsigned long cvt_adtyp_to_mseenres(uchar); unsigned long cvt_prop_to_mseenres(uchar); extern void monstseesu(unsigned long); extern void monstunseesu(unsigned long); -extern boolean resist_conflict(struct monst *); -extern boolean mon_knows_traps(struct monst *, int); -extern void mon_learns_traps(struct monst *, int); -extern void mons_see_trap(struct trap *); +extern boolean resist_conflict(struct monst *) NONNULLARG1; +extern boolean mon_knows_traps(struct monst *, int) NONNULLARG1; +extern void mon_learns_traps(struct monst *, int) NONNULLARG1; +extern void mons_see_trap(struct trap *) NONNULLARG1; extern int get_atkdam_type(int); #if (NH_DEVEL_STATUS != NH_STATUS_RELEASED) || defined(DEBUG) -extern int mstrength(struct permonst *); +extern int mstrength(struct permonst *) NONNULLARG1; #endif /* ### monmove.c ### */ -extern boolean mon_would_take_item(struct monst *, struct obj *); -extern boolean mon_would_consume_item(struct monst *, struct obj *); -extern boolean itsstuck(struct monst *); -extern boolean mb_trapped(struct monst *, boolean); -extern void mon_track_add(struct monst *, coordxy, coordxy); -extern void mon_track_clear(struct monst *); -extern boolean monhaskey(struct monst *, boolean); -extern void mon_regen(struct monst *, boolean); -extern int dochugw(struct monst *, boolean); -extern boolean onscary(coordxy, coordxy, struct monst *); +extern boolean mon_would_take_item(struct monst *, struct obj *) NONNULLARG12; +extern boolean mon_would_consume_item(struct monst *, struct obj *) NONNULLARG12; +extern boolean itsstuck(struct monst *) NONNULLARG1; +extern boolean mb_trapped(struct monst *, boolean) NONNULLARG1; +extern void mon_track_add(struct monst *, coordxy, coordxy) NONNULLARG1; +extern void mon_track_clear(struct monst *) NONNULLARG1; +extern boolean monhaskey(struct monst *, boolean) NONNULLARG1; +extern void mon_regen(struct monst *, boolean) NONNULLARG1; +extern int dochugw(struct monst *, boolean) NONNULLARG1; +extern boolean onscary(coordxy, coordxy, struct monst *) NONNULLARG3; extern struct monst *find_pmmonst(int); -extern int bee_eat_jelly(struct monst *, struct obj *); -extern void monflee(struct monst *, int, boolean, boolean); -extern void mon_yells(struct monst *, const char *); -extern boolean m_can_break_boulder(struct monst *); -extern void m_break_boulder(struct monst *, coordxy, coordxy); -extern int dochug(struct monst *); -extern boolean m_digweapon_check(struct monst *, coordxy, coordxy); -extern int m_move(struct monst *, int); -extern int m_move_aggress(struct monst *, coordxy, coordxy); +extern int bee_eat_jelly(struct monst *, struct obj *) NONNULLARG12; +extern void monflee(struct monst *, int, boolean, boolean) NONNULLARG1; +extern void mon_yells(struct monst *, const char *) NONNULLARG12; +extern boolean m_can_break_boulder(struct monst *) NONNULLARG1; +extern void m_break_boulder(struct monst *, coordxy, coordxy) NONNULLARG1; +extern int dochug(struct monst *) NONNULLARG1; +extern boolean m_digweapon_check(struct monst *, coordxy, coordxy) NONNULLARG1; +extern int m_move(struct monst *, int) NONNULLARG1; +extern int m_move_aggress(struct monst *, coordxy, coordxy) NONNULLARG1; extern void dissolve_bars(coordxy, coordxy); extern boolean closed_door(coordxy, coordxy); extern boolean accessible(coordxy, coordxy); -extern void set_apparxy(struct monst *); -extern boolean can_ooze(struct monst *); -extern boolean can_fog(struct monst *); +extern void set_apparxy(struct monst *) NONNULLARG1; +extern boolean can_ooze(struct monst *) NONNULLARG1; +extern boolean can_fog(struct monst *) NONNULLARG1; extern boolean should_displace(struct monst *, coord *, long *, int, coordxy, - coordxy); -extern boolean undesirable_disp(struct monst *, coordxy, coordxy); + coordxy) NONNULLPTRS; +extern boolean undesirable_disp(struct monst *, coordxy, coordxy) NONNULLARG1; extern boolean can_hide_under_obj(struct obj *); /* ### monst.c ### */ @@ -1763,9 +1847,10 @@ extern void monst_globals_init(void); /* ### mplayer.c ### */ -extern struct monst *mk_mplayer(struct permonst *, coordxy, coordxy, boolean); +extern struct monst *mk_mplayer(struct permonst *, + coordxy, coordxy, boolean) NONNULLARG1; extern void create_mplayers(int, boolean); -extern void mplayer_talk(struct monst *); +extern void mplayer_talk(struct monst *) NONNULLARG1; #if defined(MICRO) || defined(WIN32) @@ -1821,70 +1906,69 @@ extern void Delay(int); /* ### mthrowu.c ### */ extern const char *rnd_hallublast(void); -extern boolean m_has_launcher_and_ammo(struct monst *); -extern int thitu(int, int, struct obj **, const char *); -extern boolean ohitmon(struct monst *, struct obj *, int, boolean); -extern void thrwmu(struct monst *); -extern int spitmu(struct monst *, struct attack *); -extern int breamu(struct monst *, struct attack *); +extern boolean m_has_launcher_and_ammo(struct monst *) NONNULLARG1; +extern int thitu(int, int, struct obj **, const char *) NO_NONNULLS; +extern boolean ohitmon(struct monst *, struct obj *, + int, boolean) NONNULLARG12; +extern void thrwmu(struct monst *) NONNULLARG1; +extern int spitmu(struct monst *, struct attack *) NONNULLPTRS; +extern int breamu(struct monst *, struct attack *) NONNULLPTRS; extern boolean linedup_callback(coordxy, coordxy, coordxy, coordxy, boolean(*)(coordxy, coordxy)); extern boolean linedup(coordxy, coordxy, coordxy, coordxy, int); -extern boolean lined_up(struct monst *); -extern struct obj *m_carrying(struct monst *, int); -extern int thrwmm(struct monst *, struct monst *); -extern int spitmm(struct monst *, struct attack *, struct monst *); -extern int breamm(struct monst *, struct attack *, struct monst *); -extern void m_useupall(struct monst *, struct obj *); -extern void m_useup(struct monst *, struct obj *); +extern boolean lined_up(struct monst *) NONNULLARG1; +extern struct obj *m_carrying(struct monst *, int) NONNULLARG1; +extern int thrwmm(struct monst *, struct monst *) NONNULLARG12; +extern int spitmm(struct monst *, struct attack *, struct monst *) NONNULLPTRS; +extern int breamm(struct monst *, struct attack *, struct monst *) NONNULLPTRS; +extern void m_useupall(struct monst *, struct obj *) NONNULLARG12; +extern void m_useup(struct monst *, struct obj *) NONNULLARG12; extern void m_throw(struct monst *, coordxy, coordxy, coordxy, coordxy, - int, struct obj *); + int, struct obj *) NONNULLPTRS; extern void hit_bars(struct obj **, coordxy, coordxy, coordxy, coordxy, - unsigned); + unsigned) NONNULLARG1; extern boolean hits_bars(struct obj **, coordxy, coordxy, coordxy, coordxy, - int, int); + int, int) NONNULLARG1; /* ### muse.c ### */ -extern boolean find_defensive(struct monst *, boolean); -extern int use_defensive(struct monst *); -extern int rnd_defensive_item(struct monst *); -extern boolean find_offensive(struct monst *); -extern int use_offensive(struct monst *); -extern int rnd_offensive_item(struct monst *); -extern boolean find_misc(struct monst *); -extern int use_misc(struct monst *); -extern int rnd_misc_item(struct monst *); -extern boolean searches_for_item(struct monst *, struct obj *); -extern boolean mon_reflects(struct monst *, const char *); -extern boolean ureflects(const char *, const char *); -extern void mcureblindness(struct monst *, boolean); -extern boolean munstone(struct monst *, boolean); -extern boolean munslime(struct monst *, boolean); +extern boolean find_defensive(struct monst *, boolean) NONNULLARG1; +extern int use_defensive(struct monst *) NONNULLARG1; +extern int rnd_defensive_item(struct monst *) NONNULLARG1; +extern boolean find_offensive(struct monst *) NONNULLARG1; +extern int use_offensive(struct monst *) NONNULLARG1; +extern int rnd_offensive_item(struct monst *) NONNULLARG1; +extern boolean find_misc(struct monst *) NONNULLARG1; +extern int use_misc(struct monst *) NONNULLARG1; +extern int rnd_misc_item(struct monst *) NONNULLARG1; +extern boolean searches_for_item(struct monst *, struct obj *) NONNULLARG12; +extern boolean mon_reflects(struct monst *, const char *) NONNULLARG1; +extern boolean ureflects(const char *, const char *) NO_NONNULLS; +extern void mcureblindness(struct monst *, boolean) NONNULLARG1; +extern boolean munstone(struct monst *, boolean) NONNULLARG1; +extern boolean munslime(struct monst *, boolean) NONNULLARG1; /* ### music.c ### */ -extern void awaken_soldiers(struct monst *); -extern int do_play_instrument(struct obj *); -enum instruments obj_to_instr(struct obj *); +extern void awaken_soldiers(struct monst *) NONNULLARG1; +extern int do_play_instrument(struct obj *) NONNULLARG1; +enum instruments obj_to_instr(struct obj *) NONNULLARG1; /* ### nhlsel.c ### */ #if !defined(CROSSCOMPILE) || defined(CROSSCOMPILE_TARGET) -extern struct selectionvar *l_selection_check(lua_State *, int); -extern int l_selection_register(lua_State *); -extern void l_selection_push_copy(lua_State *, struct selectionvar *); -extern void nhl_push_obj(lua_State *, struct obj *); -extern int nhl_obj_u_giveobj(lua_State *); -extern int l_obj_register(lua_State *); +extern struct selectionvar *l_selection_check(lua_State *, int) NONNULLARG1; +extern int l_selection_register(lua_State *) NONNULLARG1; +extern void l_selection_push_copy(lua_State *, struct selectionvar *) NONNULLARG12; +extern int l_obj_register(lua_State *) NONNULLARG1; #endif /* ### nhlobj.c ### */ #if !defined(CROSSCOMPILE) || defined(CROSSCOMPILE_TARGET) -extern void nhl_push_obj(lua_State *, struct obj *); -extern int nhl_obj_u_giveobj(lua_State *); -extern int l_obj_register(lua_State *); +extern void nhl_push_obj(lua_State *, struct obj *) NONNULLARG12; +extern int nhl_obj_u_giveobj(lua_State *) NONNULLARG1; +extern int l_obj_register(lua_State *) NONNULLARG1; #endif /* ### nhlua.c ### */ @@ -1893,40 +1977,43 @@ extern int l_obj_register(lua_State *); extern void l_nhcore_init(void); extern void l_nhcore_done(void); extern void l_nhcore_call(int); -extern lua_State * nhl_init(nhl_sandbox_info *); -extern void nhl_done(lua_State *); -extern boolean nhl_loadlua(lua_State *, const char *); +extern lua_State * nhl_init(nhl_sandbox_info *) NONNULLARG1; +/* nhl_done contains a test for NULL arg1, preventing NONNULLARG1 */ +extern void nhl_done(lua_State *) NONNULLARG1; +extern boolean nhl_loadlua(lua_State *, const char *) NONNULLARG12; extern char *get_nh_lua_variables(void); -extern void save_luadata(NHFILE *); -extern void restore_luadata(NHFILE *); -extern int nhl_pcall(lua_State *, int, int); -extern boolean load_lua(const char *, nhl_sandbox_info *); -ATTRNORETURN extern void nhl_error(lua_State *, const char *) NORETURN; -extern void lcheck_param_table(lua_State *); -extern schar get_table_mapchr(lua_State *, const char *); -extern schar get_table_mapchr_opt(lua_State *, const char *, schar); -extern short nhl_get_timertype(lua_State *, int); -extern boolean nhl_get_xy_params(lua_State *, lua_Integer *, lua_Integer *); -extern void nhl_add_table_entry_int(lua_State *, const char *, lua_Integer); -extern void nhl_add_table_entry_char(lua_State *, const char *, char); -extern void nhl_add_table_entry_str(lua_State *, const char *, const char *); -extern void nhl_add_table_entry_bool(lua_State *, const char *, boolean); +extern void save_luadata(NHFILE *) NONNULLARG1; +extern void restore_luadata(NHFILE *) NONNULLARG1; +extern int nhl_pcall(lua_State *, int, int) NONNULLARG1; +extern boolean load_lua(const char *, nhl_sandbox_info *) NONNULLARG12; +ATTRNORETURN extern void nhl_error(lua_State *, const char *) NORETURN NONNULLARG12; +extern void lcheck_param_table(lua_State *) NONNULLARG1; +extern schar get_table_mapchr(lua_State *, const char *) NONNULLARG12; +extern schar get_table_mapchr_opt(lua_State *, const char *, schar) NONNULLARG12; +extern short nhl_get_timertype(lua_State *, int) NONNULLARG1; +extern boolean nhl_get_xy_params(lua_State *, lua_Integer *, lua_Integer *) NONNULLARG123; +extern void nhl_add_table_entry_int(lua_State *, const char *, lua_Integer) NONNULLARG12; +extern void nhl_add_table_entry_char(lua_State *, const char *, char) NONNULLARG12; +extern void nhl_add_table_entry_str(lua_State *, const char *, const char *) NONNULLARG123; +extern void nhl_add_table_entry_bool(lua_State *, const char *, boolean) NONNULLARG12; extern void nhl_add_table_entry_region(lua_State *, const char *, - coordxy, coordxy, coordxy, coordxy); + coordxy, coordxy, coordxy, coordxy) NONNULLARG12; extern schar splev_chr2typ(char); -extern schar check_mapchr(const char *); -extern int get_table_int(lua_State *, const char *); -extern int get_table_int_opt(lua_State *, const char *, int); -extern char *get_table_str(lua_State *, const char *); -extern char *get_table_str_opt(lua_State *, const char *, char *); -extern int get_table_boolean(lua_State *, const char *); -extern int get_table_boolean_opt(lua_State *, const char *, int); +extern schar check_mapchr(const char *) NO_NONNULLS; +extern int get_table_int(lua_State *, const char *) NONNULLARG12; +extern int get_table_int_opt(lua_State *, const char *, int) NONNULLARG12; +extern char *get_table_str(lua_State *, const char *) NONNULLARG12; +/* dungeon.c init_dungeon_levels() passes NULL to get_table_str_opt arg3 */ +extern char *get_table_str_opt(lua_State *, const char *, char *) NONNULLARG12; +extern int get_table_boolean(lua_State *, const char *) NONNULLARG12; +extern int get_table_boolean_opt(lua_State *, const char *, int) NONNULLARG12; +/* lspo_feature calls get_table_option(L, "type", NULL, features), + so arg3 can be NULL. NONNULLARG124 is not currently defined */ extern int get_table_option(lua_State *, const char *, const char *, - const char *const *); -extern int str_lines_max_width(const char *); -extern char *stripdigits(char *); + const char *const *) NO_NONNULLS; +/* extern int str_lines_max_width(const char *); */ extern const char *get_lua_version(void); -extern void nhl_pushhooked_open_table(lua_State *L); +extern void nhl_pushhooked_open_table(lua_State *L) NONNULLARG1; extern void tutorial(boolean); #endif /* !CROSSCOMPILE || CROSSCOMPILE_TARGET */ #endif /* MAKEDEFS_C MDLIB_C CPPREGEX_C */ @@ -1934,10 +2021,10 @@ extern void tutorial(boolean); /* ### nhregex.c ### */ extern struct nhregex *regex_init(void); -extern boolean regex_compile(const char *, struct nhregex *); -extern char *regex_error_desc(struct nhregex *, char *); -extern boolean regex_match(const char *, struct nhregex *); -extern void regex_free(struct nhregex *); +extern boolean regex_compile(const char *, struct nhregex *) NONNULLARG1; +extern char *regex_error_desc(struct nhregex *, char *) NONNULLARG2; +extern boolean regex_match(const char *, struct nhregex *) NO_NONNULLS; +extern void regex_free(struct nhregex *) NONNULLARG1; #if !defined(MAKEDEFS_C) && !defined(MDLIB_C) && !defined(CPPREGEX_C) @@ -1965,11 +2052,12 @@ extern void tty_ibmgraphics_fixup(void); extern void init_objects(void); extern void init_oclass_probs(void); -extern void obj_shuffle_range(int, int *, int *); -extern boolean objdescr_is(struct obj *, const char *); +extern void obj_shuffle_range(int, int *, int *) NONNULLPTRS; +/* objdescr_is() contains a test for NULL arg1, so can't be NONNULLARG12 */ +extern boolean objdescr_is(struct obj *, const char *) NONNULLARG2; extern void oinit(void); -extern void savenames(NHFILE *); -extern void restnames(NHFILE *); +extern void savenames(NHFILE *) NONNULLARG1; +extern void restnames(NHFILE *) NONNULLARG1; extern void discover_object(int, boolean, boolean); extern void undiscover_object(int); extern boolean interesting_to_discover(int); @@ -1984,137 +2072,159 @@ extern void objects_globals_init(void); /* ### objnam.c ### */ -extern void maybereleaseobuf(char *); +extern void maybereleaseobuf(char *) NONNULLARG1; extern char *obj_typename(int); extern char *simple_typename(int); extern char *safe_typename(int); -extern boolean obj_is_pname(struct obj *); -extern char *distant_name(struct obj *, char *(*)(struct obj *)); +extern boolean obj_is_pname(struct obj *) NONNULLARG1; +extern char *distant_name(struct obj *, char *(*)(struct obj *)) NONNULLPTRS; extern char *fruitname(boolean); extern struct fruit *fruit_from_indx(int); -extern struct fruit *fruit_from_name(const char *, boolean, int *); +extern struct fruit *fruit_from_name(const char *, boolean, int *) NONNULLARG1; extern void reorder_fruit(boolean); -extern char *xname(struct obj *); -extern char *mshot_xname(struct obj *); -extern boolean the_unique_obj(struct obj *); -extern boolean the_unique_pm(struct permonst *); -extern boolean erosion_matters(struct obj *); -extern char *doname(struct obj *); -extern char *doname_with_price(struct obj *); -extern char *doname_vague_quan(struct obj *); -extern boolean not_fully_identified(struct obj *); -extern char *corpse_xname(struct obj *, const char *, unsigned); -extern char *cxname(struct obj *); -extern char *cxname_singular(struct obj *); -extern char *killer_xname(struct obj *); +extern char *xname(struct obj *) NONNULLARG1; +extern char *mshot_xname(struct obj *) NONNULLARG1; +extern boolean the_unique_obj(struct obj *) NONNULLARG1; +extern boolean the_unique_pm(struct permonst *) NONNULLARG1; +extern boolean erosion_matters(struct obj *) NONNULLARG1; +extern char *doname(struct obj *) NONNULLARG1; +extern char *doname_with_price(struct obj *) NONNULLARG1; +extern char *doname_vague_quan(struct obj *) NONNULLARG1; +extern boolean not_fully_identified(struct obj *) NONNULLARG1; +extern char *corpse_xname(struct obj *, const char *, unsigned) NONNULLARG1; +extern char *cxname(struct obj *) NONNULLARG1; +extern char *cxname_singular(struct obj *) NONNULLARG1; +extern char *killer_xname(struct obj *) NONNULLARG1; extern char *short_oname(struct obj *, char *(*)(struct obj *), - char *(*)(struct obj *), unsigned); -extern const char *singular(struct obj *, char *(*)(struct obj *)); -extern char *just_an(char *, const char *); -extern char *an(const char *); -extern char *An(const char *); -extern char *The(const char *); -extern char *the(const char *); -extern char *aobjnam(struct obj *, const char *); -extern char *yobjnam(struct obj *, const char *); -extern char *Yobjnam2(struct obj *, const char *); -extern char *Tobjnam(struct obj *, const char *); -extern char *otense(struct obj *, const char *); -extern char *vtense(const char *, const char *); -extern char *Doname2(struct obj *); -extern char *yname(struct obj *); -extern char *Yname2(struct obj *); -extern char *ysimple_name(struct obj *); -extern char *Ysimple_name2(struct obj *); -extern char *simpleonames(struct obj *); -extern char *ansimpleoname(struct obj *); -extern char *thesimpleoname(struct obj *); -extern char *actualoname(struct obj *); -extern char *bare_artifactname(struct obj *); -extern char *makeplural(const char *); -extern char *makesingular(const char *); -extern struct obj *readobjnam(char *, struct obj *); + char *(*)(struct obj *), unsigned) NONNULLARG12; +extern const char *singular(struct obj *, char *(*)(struct obj *)) NONNULLPTRS; +extern char *just_an(char *, const char *) NONNULLARG12; +/* an(), the() contain tests for NULL arg, preventing NONNULLARG1 */ +extern char *an(const char *) NO_NONNULLS; +extern char *An(const char *) NO_NONNULLS; +extern char *The(const char *) NO_NONNULLS; +extern char *the(const char *) NO_NONNULLS; +extern char *aobjnam(struct obj *, const char *) NONNULLARG1; +extern char *yobjnam(struct obj *, const char *) NONNULLARG1; +extern char *Yobjnam2(struct obj *, const char *) NONNULLARG1; +extern char *Tobjnam(struct obj *, const char *) NONNULLARG1; +extern char *otense(struct obj *, const char *) NONNULLARG12; +extern char *vtense(const char *, const char *) NONNULLARG2; +extern char *Doname2(struct obj *) NONNULLARG1; +extern char *yname(struct obj *) NONNULLARG1; +extern char *Yname2(struct obj *) NONNULLARG1; +extern char *ysimple_name(struct obj *) NONNULLARG1; +extern char *Ysimple_name2(struct obj *) NONNULLARG1; +extern char *simpleonames(struct obj *) NONNULLARG1; +extern char *ansimpleoname(struct obj *) NONNULLARG1; +extern char *thesimpleoname(struct obj *) NONNULLARG1; +extern char *actualoname(struct obj *) NONNULLARG1; +extern char *bare_artifactname(struct obj *) NONNULLARG1; +/* makeplural() and makesingular() have tests for NULL arg1, and code path + that leads to impossible(), preventing NONNULLARG1 */ +extern char *makeplural(const char *) NO_NONNULLS; +extern char *makesingular(const char *) NO_NONNULLS; +/* readobjnam() allows a NULL to trigger code path for random; if it + and its caller were modifed to look for/provide a particular address + to use as a trigger instead, it could be declared NONNULLARG1 */ +extern struct obj *readobjnam(char *, struct obj *) NO_NONNULLS; extern int rnd_class(int, int); -extern const char *Japanese_item_name(int, const char *); -extern const char *armor_simple_name(struct obj *); -extern const char *suit_simple_name(struct obj *); -extern const char *cloak_simple_name(struct obj *); -extern const char *helm_simple_name(struct obj *); -extern const char *gloves_simple_name(struct obj *); -extern const char *boots_simple_name(struct obj *); -extern const char *shield_simple_name(struct obj *); -extern const char *shirt_simple_name(struct obj *); -extern const char *mimic_obj_name(struct monst *); +/* discover_object() passes NULL arg2 to Japanese_item_name(), + * preventing NONNULLARG2 */ +extern const char *Japanese_item_name(int, const char *) NO_NONNULLS; +extern const char *armor_simple_name(struct obj *) NONNULLARG1; +/* suit_simple_name has its code in a NULL arg test + conditional block, preventing NONNULLARG1 */ +extern const char *suit_simple_name(struct obj *) NO_NONNULLS; +/* cloak_simple_name has its code in a NULL arg test + conditional block, preventing NONNULLARG1 */ +extern const char *cloak_simple_name(struct obj *) NO_NONNULLS; +/* helm_simple_name always just returns hardcoded literals */ +extern const char *helm_simple_name(struct obj *) NO_NONNULLS; +/* gloves_simple_name has its code in a NULL arg test + conditional block, preventing NONNULLARG1 */ +extern const char *gloves_simple_name(struct obj *) NO_NONNULLS; +/* boots_simple_name has its code in a NULL arg test + conditional block, preventing NONNULLARG1 */ +extern const char *boots_simple_name(struct obj *) NO_NONNULLS; +/* shield_simple_name has its code in a NULL arg test + conditional block, preventing NONNULLARG1 */ +extern const char *shield_simple_name(struct obj *) NO_NONNULLS; +/* shirt_simple_name always just returns hardcoded "shirt" */ +extern const char *shirt_simple_name(struct obj *) NO_NONNULLS; +extern const char *mimic_obj_name(struct monst *) NONNULLARG1; +/* safe_qbuf() contains tests for NULL arg2 and arg3, qprefix and qsuffix, + preventing use of NONNULLPTRS. NONNULLARG14567 is not defined */ extern char *safe_qbuf(char *, const char *, const char *, struct obj *, char *(*)(struct obj *), char *(*)(struct obj *), - const char *); + const char *) NO_NONNULLS; extern int shiny_obj(char); /* ### options.c ### */ extern boolean ask_do_tutorial(void); -extern boolean match_optname(const char *, const char *, int, boolean); -extern uchar txt2key(char *); +extern boolean match_optname(const char *, const char *, int, boolean) NONNULLARG12; +extern uchar txt2key(char *) NONNULLARG1; extern void initoptions(void); extern void initoptions_init(void); extern void initoptions_finish(void); -extern boolean parseoptions(char *, boolean, boolean); +extern boolean parseoptions(char *, boolean, boolean) NONNULLARG1; extern void freeroleoptvals(void); -extern char *get_option_value(const char *, boolean); +extern char *get_option_value(const char *, boolean) NONNULLARG1; extern int doset_simple(void); extern int doset(void); extern int dotogglepickup(void); extern void option_help(void); -extern void all_options_strbuf(strbuf_t *); -extern void next_opt(winid, const char *); -extern int fruitadd(char *, struct fruit *); -extern boolean parsebindings(char *); -extern void oc_to_str(char *, char *); +extern void all_options_strbuf(strbuf_t *) NONNULLARG1; +extern void next_opt(winid, const char *) NONNULLARG2; +extern int fruitadd(char *, struct fruit *) NONNULLARG1; +extern boolean parsebindings(char *) NONNULLARG1; +extern void oc_to_str(char *, char *) NONNULLARG12; extern void add_menu_cmd_alias(char, char); extern char get_menu_cmd_key(char); extern char map_menu_cmd(char); -extern char *collect_menu_keys(char *, unsigned, boolean); +extern char *collect_menu_keys(char *, unsigned, boolean) NONNULLARG1; extern void show_menu_controls(winid, boolean); -extern void assign_warnings(uchar *); -extern char *nh_getenv(const char *); +extern void assign_warnings(uchar *) NONNULLARG1; +extern char *nh_getenv(const char *) NONNULLARG1; extern void reset_duplicate_opt_detection(void); extern void set_wc_option_mod_status(unsigned long, int); extern void set_wc2_option_mod_status(unsigned long, int); -extern void set_option_mod_status(const char *, int); -extern int add_autopickup_exception(const char *); +extern void set_option_mod_status(const char *, int) NONNULLARG1; +extern int add_autopickup_exception(const char *) NONNULLARG1; extern void free_autopickup_exceptions(void); extern void set_playmode(void); -extern int sym_val(const char *); -extern int query_color(const char *, int); -extern int query_attr(const char *, int); -extern boolean query_color_attr(color_attr *, const char *); +extern int sym_val(const char *) NONNULLARG1; +extern int query_color(const char *, int) NO_NONNULLS; +extern int query_attr(const char *, int) NO_NONNULLS; +extern boolean query_color_attr(color_attr *, const char *) NONNULLARG1; extern const char *clr2colorname(int); -extern int match_str2clr(char *); -extern int match_str2attr(const char *, boolean); -extern boolean add_menu_coloring(char *); +extern int match_str2clr(char *) NONNULLARG1; +extern int match_str2attr(const char *, boolean) NONNULLARG1; +extern boolean add_menu_coloring(char *) NONNULLARG1; extern void free_menu_coloring(void); -extern boolean msgtype_parse_add(char *); -extern int msgtype_type(const char *, boolean); +extern boolean msgtype_parse_add(char *) NONNULLARG1; +extern int msgtype_type(const char *, boolean) NONNULLARG1; extern void hide_unhide_msgtypes(boolean, int); extern void msgtype_free(void); /* ### pager.c ### */ -extern char *self_lookat(char *); -extern char *monhealthdescr(struct monst *mon, boolean, char *); -extern void mhidden_description(struct monst *, boolean, char *); -extern boolean object_from_map(int, coordxy, coordxy, struct obj **); +extern char *self_lookat(char *) NONNULLARG1; +extern char *monhealthdescr(struct monst *mon, boolean, char *) NONNULLARG3; +extern void mhidden_description(struct monst *, boolean, char *) NONNULLPTRS; +extern boolean object_from_map(int, coordxy, coordxy, struct obj **) NONNULLPTRS; extern const char *waterbody_name(coordxy, coordxy); -extern char *ice_descr(coordxy, coordxy, char *); -extern boolean ia_checkfile(struct obj *); +extern char *ice_descr(coordxy, coordxy, char *) NONNULLARG3; +extern boolean ia_checkfile(struct obj *) NONNULLARG1; extern int do_screen_description(coord, boolean, int, char *, const char **, - struct permonst **); + struct permonst **) NONNULLARG45; extern int do_look(int, coord *); extern int dowhatis(void); extern int doquickwhatis(void); extern int doidtrap(void); extern int dowhatdoes(void); -extern char *dowhatdoes_core(char, char *); +extern char *dowhatdoes_core(char, char *) NONNULLARG2; extern int dohelp(void); extern int dohistory(void); @@ -2168,37 +2278,38 @@ extern void getlock(void); /* ### pickup.c ### */ extern int collect_obj_classes(char *, struct obj *, boolean, - boolean(*)(struct obj *), int *); -extern boolean rider_corpse_revival(struct obj *, boolean); + boolean(*)(struct obj *), int *) NONNULLARG5; +extern boolean rider_corpse_revival(struct obj *, boolean) NO_NONNULLS; extern void force_decor(boolean); extern void deferred_decor(boolean); extern boolean menu_class_present(int); extern void add_valid_menu_class(int); -extern boolean allow_all(struct obj *); -extern boolean allow_category(struct obj *); -extern boolean is_worn_by_type(struct obj *); -extern int ck_bag(struct obj *); -extern void removed_from_icebox(struct obj *); -extern void reset_justpicked(struct obj *); -extern int count_justpicked(struct obj *); -extern struct obj *find_justpicked(struct obj *); +extern boolean allow_all(struct obj *) NO_NONNULLS; +extern boolean allow_category(struct obj *) NONNULLARG1; +extern boolean is_worn_by_type(struct obj *) NONNULLARG1; +extern int ck_bag(struct obj *) NONNULLARG1; +extern void removed_from_icebox(struct obj *) NONNULLARG1; +extern void reset_justpicked(struct obj *) NONNULLARG1; +extern int count_justpicked(struct obj *) NONNULLARG1; +extern struct obj *find_justpicked(struct obj *) NONNULLARG1; extern int pickup(int); -extern int pickup_object(struct obj *, long, boolean); -extern int query_category(const char *, struct obj *, int, menu_item **, int); +extern int pickup_object(struct obj *, long, boolean) NONNULLARG1; +extern int query_category(const char *, struct obj *, int, menu_item **, int) NONNULLARG14; +/* dotypeinv() call query_objlist with NULL arg1 */ extern int query_objlist(const char *, struct obj **, int, menu_item **, int, - boolean(*)(struct obj *)); -extern struct obj *pick_obj(struct obj *); + boolean(*)(struct obj *)) NONNULLARG24; +extern struct obj *pick_obj(struct obj *) NONNULLARG1; extern int encumber_msg(void); extern int container_at(coordxy, coordxy, boolean); extern int doloot(void); -extern void observe_quantum_cat(struct obj *, boolean, boolean); -extern boolean container_gone(int(*)(struct obj *)); +extern void observe_quantum_cat(struct obj *, boolean, boolean) NONNULLARG1; +extern boolean container_gone(int(*)(struct obj *)) NONNULLARG1; extern boolean u_handsy(void); -extern int use_container(struct obj **, boolean, boolean); -extern int loot_mon(struct monst *, int *, boolean *); +extern int use_container(struct obj **, boolean, boolean) NONNULLARG1; +extern int loot_mon(struct monst *, int *, boolean *) NO_NONNULLS; extern int dotip(void); -extern struct autopickup_exception *check_autopickup_exceptions(struct obj *); -extern boolean autopick_testobj(struct obj *, boolean); +extern struct autopickup_exception *check_autopickup_exceptions(struct obj *) NONNULLARG1; +extern boolean autopick_testobj(struct obj *, boolean) NONNULLARG1; /* ### pline.c ### */ @@ -2249,7 +2360,7 @@ extern int dopoly(void); extern int domindblast(void); extern void uunstick(void); extern void skinback(boolean); -extern const char *mbodypart(struct monst *, int); +extern const char *mbodypart(struct monst *, int) NONNULLARG1; extern const char *body_part(int); extern int poly_gender(void); extern void ugolemeffects(int, int); @@ -2258,13 +2369,13 @@ extern const char *udeadinside(void); /* ### potion.c ### */ -extern void set_itimeout(long *, long); -extern void incr_itimeout(long *, int); +extern void set_itimeout(long *, long) NONNULLARG1; +extern void incr_itimeout(long *, int) NONNULLARG1; extern void make_confused(long, boolean); extern void make_stunned(long, boolean); -extern void make_sick(long, const char *, boolean, int); -extern void make_slimed(long, const char *); -extern void make_stoned(long, const char *, int, const char *); +extern void make_sick(long, const char *, boolean, int) NO_NONNULLS; +extern void make_slimed(long, const char *) NO_NONNULLS; +extern void make_stoned(long, const char *, int, const char *) NO_NONNULLS; extern void make_vomiting(long, boolean); extern void make_blinded(long, boolean); extern void toggle_blindness(void); @@ -2273,18 +2384,18 @@ extern void make_deaf(long, boolean); extern void make_glib(int); extern void self_invis_message(void); extern int dodrink(void); -extern int dopotion(struct obj *); -extern int peffects(struct obj *); +extern int dopotion(struct obj *) NONNULLARG1; +extern int peffects(struct obj *) NONNULLARG1; extern void healup(int, int, boolean, boolean); -extern void strange_feeling(struct obj *, const char *); -extern void impact_arti_light(struct obj *, boolean, boolean); -extern void potionhit(struct monst *, struct obj *, int); -extern void potionbreathe(struct obj *); +extern void strange_feeling(struct obj *, const char *) NO_NONNULLS; +extern void impact_arti_light(struct obj *, boolean, boolean) NONNULLARG1; +extern void potionhit(struct monst *, struct obj *, int) NONNULLARG12; +extern void potionbreathe(struct obj *) NONNULLARG1; extern int dodip(void); extern int dip_into(void); /* altdip */ -extern void mongrantswish(struct monst **); -extern void djinni_from_bottle(struct obj *); -extern struct monst *split_mon(struct monst *, struct monst *); +extern void mongrantswish(struct monst **) NONNULLARG1; +extern void djinni_from_bottle(struct obj *) NONNULLARG1; +extern struct monst *split_mon(struct monst *, struct monst *) NONNULLARG1; extern const char *bottlename(void); extern void speed_up(long); @@ -2309,43 +2420,43 @@ extern void altar_wrath(coordxy, coordxy); /* ### priest.c ### */ extern int move_special(struct monst *, boolean, schar, boolean, boolean, - coordxy, coordxy, coordxy, coordxy); -extern char temple_occupied(char *); -extern boolean inhistemple(struct monst *); -extern int pri_move(struct monst *); -extern void priestini(d_level *, struct mkroom *, int, int, boolean); -extern aligntyp mon_aligntyp(struct monst *); -extern char *priestname(struct monst *, int, boolean, char *); -extern boolean p_coaligned(struct monst *); + coordxy, coordxy, coordxy, coordxy) NONNULLARG1; +extern char temple_occupied(char *) NONNULLARG1; +extern boolean inhistemple(struct monst *) NO_NONNULLS; +extern int pri_move(struct monst *) NONNULLARG1; +extern void priestini(d_level *, struct mkroom *, int, int, boolean) NONNULLARG12; +extern aligntyp mon_aligntyp(struct monst *) NONNULLARG1; +extern char *priestname(struct monst *, int, boolean, char *) NONNULLARG1; +extern boolean p_coaligned(struct monst *) NONNULLARG1; extern struct monst *findpriest(char); extern void intemple(int); -extern void forget_temple_entry(struct monst *); -extern void priest_talk(struct monst *); +extern void forget_temple_entry(struct monst *) NONNULLARG1; +extern void priest_talk(struct monst *) NONNULLARG1; extern struct monst *mk_roamer(struct permonst *, aligntyp, coordxy, coordxy, - boolean); -extern void reset_hostility(struct monst *); -extern boolean in_your_sanctuary(struct monst *, coordxy, coordxy); -extern void ghod_hitsu(struct monst *); + boolean) NO_NONNULLS; +extern void reset_hostility(struct monst *) NONNULLARG1; +extern boolean in_your_sanctuary(struct monst *, coordxy, coordxy) NO_NONNULLS; +extern void ghod_hitsu(struct monst *) NONNULLARG1; extern void angry_priest(void); extern void clearpriests(void); -extern void restpriest(struct monst *, boolean); -extern void newepri(struct monst *); -extern void free_epri(struct monst *); +extern void restpriest(struct monst *, boolean) NONNULLARG1; +extern void newepri(struct monst *) NONNULLARG1; +extern void free_epri(struct monst *) NONNULLARG1; /* ### quest.c ### */ extern void onquest(void); extern void nemdead(void); extern void leaddead(void); -extern void artitouch(struct obj *); +extern void artitouch(struct obj *) NONNULLARG1; extern boolean ok_to_quest(void); -extern void leader_speaks(struct monst *); +extern void leader_speaks(struct monst *) NONNULLARG1; extern void nemesis_speaks(void); extern void nemesis_stinks(coordxy, coordxy); -extern void quest_chat(struct monst *); -extern void quest_talk(struct monst *); -extern void quest_stat_check(struct monst *); -extern void finish_quest(struct obj *); +extern void quest_chat(struct monst *) NONNULLARG1; +extern void quest_talk(struct monst *) NONNULLARG1; +extern void quest_stat_check(struct monst *) NONNULLARG1; +extern void finish_quest(struct obj *) NO_NONNULLS; /* ### questpgr.c ### */ @@ -2353,13 +2464,14 @@ extern void load_qtlist(void); extern void unload_qtlist(void); extern short quest_info(int); extern const char *ldrname(void); -extern boolean is_quest_artifact(struct obj *); +extern boolean is_quest_artifact(struct obj *) NONNULLARG1; extern struct obj *find_quest_artifact(unsigned); extern int stinky_nemesis(struct monst *); extern void com_pager(const char *); extern void qt_pager(const char *); extern struct permonst *qt_montype(void); extern void deliver_splev_message(void); + /* ### random.c ### */ #if defined(RANDOM) && !defined(__GO32__) /* djgpp has its own random */ @@ -2373,52 +2485,52 @@ extern long random(void); /* ### read.c ### */ -extern void learnscroll(struct obj *); -extern char *tshirt_text(struct obj *, char *); -extern char *hawaiian_motif(struct obj *, char *); -extern char *apron_text(struct obj *, char *); -extern const char *candy_wrapper_text(struct obj *); -extern void assign_candy_wrapper(struct obj *); +extern void learnscroll(struct obj *) NONNULLARG1; +extern char *tshirt_text(struct obj *, char *) NONNULLARG12; +extern char *hawaiian_motif(struct obj *, char *) NONNULLARG12; +extern char *apron_text(struct obj *, char *) NONNULLARG12; +extern const char *candy_wrapper_text(struct obj *) NONNULLARG1; +extern void assign_candy_wrapper(struct obj *) NONNULLARG1; extern int doread(void); -extern int charge_ok(struct obj *); -extern void recharge(struct obj *, int); +extern int charge_ok(struct obj *) NO_NONNULLS; +extern void recharge(struct obj *, int) NONNULLARG1; extern boolean valid_cloud_pos(coordxy, coordxy); -extern int seffects(struct obj *); +extern int seffects(struct obj *) NONNULLARG1; extern void drop_boulder_on_player(boolean, boolean, boolean, boolean); extern boolean drop_boulder_on_monster(coordxy, coordxy, boolean, boolean); -extern void wand_explode(struct obj *, int); -extern void litroom(boolean, struct obj *); +extern void wand_explode(struct obj *, int) NONNULLARG1; +extern void litroom(boolean, struct obj *) NO_NONNULLS; extern void do_genocide(int); -extern void punish(struct obj *); +extern void punish(struct obj *) NO_NONNULLS; extern void unpunish(void); -extern boolean cant_revive(int *, boolean, struct obj *); +extern boolean cant_revive(int *, boolean, struct obj *) NO_NONNULLS; extern boolean create_particular(void); /* ### rect.c ### */ extern void init_rect(void); extern void free_rect(void); -extern NhRect *get_rect(NhRect *); +extern NhRect *get_rect(NhRect *) NONNULLARG1; extern NhRect *rnd_rect(void); -extern void rect_bounds(NhRect, NhRect, NhRect *); -extern void remove_rect(NhRect *); -extern void add_rect(NhRect *); -extern void split_rects(NhRect *, NhRect *); +extern void rect_bounds(NhRect, NhRect, NhRect *) NONNULLARG3; +extern void remove_rect(NhRect *) NONNULLARG1; +extern void add_rect(NhRect *) NONNULLARG1; +extern void split_rects(NhRect *, NhRect *) NONNULLARG12; /* ## region.c ### */ -extern boolean inside_region(NhRegion *, int, int); +extern boolean inside_region(NhRegion *, int, int) NO_NONNULLS; extern void clear_regions(void); extern void run_regions(void); extern boolean in_out_region(coordxy, coordxy); -extern boolean m_in_out_region(struct monst *, coordxy, coordxy); +extern boolean m_in_out_region(struct monst *, coordxy, coordxy) NONNULLARG1; extern void update_player_regions(void); -extern void update_monster_region(struct monst *); +extern void update_monster_region(struct monst *) NONNULLARG1; extern NhRegion *visible_region_at(coordxy, coordxy); -extern void show_region(NhRegion *, coordxy, coordxy); -extern void save_regions(NHFILE *); -extern void rest_regions(NHFILE *); -extern void region_stats(const char *, char *, long *, long *); +extern void show_region(NhRegion *, coordxy, coordxy) NONNULLARG1; +extern void save_regions(NHFILE *) NONNULLARG1; +extern void rest_regions(NHFILE *) NONNULLARG1; +extern void region_stats(const char *, char *, long *, long *) NONNULLPTRS; extern NhRegion *create_gas_cloud(coordxy, coordxy, int, int); extern boolean region_danger(void); extern void region_safety(void); @@ -2426,20 +2538,20 @@ extern void region_safety(void); /* ### restore.c ### */ extern void inven_inuse(boolean); -extern int dorecover(NHFILE *); -extern void restcemetery(NHFILE *, struct cemetery **); -extern void trickery(char *); -extern void getlev(NHFILE *, int, xint8); -extern void get_plname_from_file(NHFILE *, char *); +extern int dorecover(NHFILE *) NONNULLARG1; +extern void restcemetery(NHFILE *, struct cemetery **) NONNULLARG12; +extern void trickery(char *) NO_NONNULLS; +extern void getlev(NHFILE *, int, xint8) NONNULLARG1; +extern void get_plname_from_file(NHFILE *, char *) NONNULLARG12; #ifdef SELECTSAVED extern int restore_menu(winid); #endif extern void minit(void); -extern boolean lookup_id_mapping(unsigned, unsigned *); -extern int validate(NHFILE *, const char *, boolean); -extern void reset_restpref(void); -extern void set_restpref(const char *); -extern void set_savepref(const char *); +extern boolean lookup_id_mapping(unsigned, unsigned *) NONNULLARG2; +extern int validate(NHFILE *, const char *, boolean) NONNULLARG1; +/* extern void reset_restpref(void); */ +/* extern void set_restpref(const char *); */ +/* extern void set_savepref(const char *); */ /* ### rip.c ### */ @@ -2470,10 +2582,10 @@ extern int randrole(boolean); extern int randrace(int); extern int randgend(int, int); extern int randalign(int, int); -extern int str2role(const char *); -extern int str2race(const char *); -extern int str2gend(const char *); -extern int str2align(const char *); +extern int str2role(const char *) NO_NONNULLS; +extern int str2race(const char *) NO_NONNULLS; +extern int str2gend(const char *) NO_NONNULLS; +extern int str2align(const char *) NO_NONNULLS; extern boolean ok_role(int, int, int, int); extern int pick_role(int, int, int, int); extern boolean ok_race(int, int, int, int); @@ -2483,17 +2595,17 @@ extern int pick_gend(int, int, int, int); extern boolean ok_align(int, int, int, int); extern int pick_align(int, int, int, int); extern void rigid_role_checks(void); -extern boolean setrolefilter(const char *); +extern boolean setrolefilter(const char *) NONNULLARG1; extern boolean gotrolefilter(void); -extern char *rolefilterstring(char *, int); +extern char *rolefilterstring(char *, int) NONNULLARG1; extern void clearrolefilter(int); -extern char *root_plselection_prompt(char *, int, int, int, int, int); -extern char *build_plselection_prompt(char *, int, int, int, int, int); +extern char *root_plselection_prompt(char *, int, int, int, int, int) NO_NONNULLS; +extern char *build_plselection_prompt(char *, int, int, int, int, int) NONNULLARG1; extern void plnamesuffix(void); extern void role_selection_prolog(int, winid); extern void role_menu_extra(int, winid, boolean); extern void role_init(void); -extern const char *Hello(struct monst *); +extern const char *Hello(struct monst *) NO_NONNULLS; extern const char *Goodbye(void); extern const struct Race *character_race(short); extern void genl_player_selection(void); @@ -2501,35 +2613,35 @@ extern int genl_player_setup(int); /* ### rumors.c ### */ -extern char *getrumor(int, char *, boolean); -extern char *get_rnd_text(const char *, char *, int(*)(int), unsigned); +extern char *getrumor(int, char *, boolean) NONNULLARG2; +extern char *get_rnd_text(const char *, char *, int(*)(int), + unsigned) NONNULLPTRS; extern void outrumor(int, int); extern void outoracle(boolean, boolean); -extern void save_oracles(NHFILE *); -extern void restore_oracles(NHFILE *); -extern int doconsult(struct monst *); +extern void save_oracles(NHFILE *) NONNULLARG1; +extern void restore_oracles(NHFILE *) NONNULLARG1; +extern int doconsult(struct monst *) NO_NONNULLS; extern void rumor_check(void); -extern boolean CapitalMon(const char *); +extern boolean CapitalMon(const char *) NO_NONNULLS; extern void free_CapMons(void); /* ### save.c ### */ extern int dosave(void); extern int dosave0(void); -extern boolean tricked_fileremoved(NHFILE *, char *); +extern boolean tricked_fileremoved(NHFILE *, char *) NONNULLARG2; #ifdef INSURANCE extern void savestateinlock(void); #endif -extern void savelev(NHFILE *, xint8); -extern genericptr_t mon_to_buffer(struct monst *, int *); -extern boolean close_check(int); -extern void savecemetery(NHFILE *, struct cemetery **); -extern void savefruitchn(NHFILE *); -extern void store_plname_in_file(NHFILE *); +extern void savelev(NHFILE *, xint8) NONNULLARG1; +/* extern genericptr_t mon_to_buffer(struct monst *, int *); */ +extern void savecemetery(NHFILE *, struct cemetery **) NONNULLARG12; +extern void savefruitchn(NHFILE *) NONNULLARG1; +extern void store_plname_in_file(NHFILE *) NONNULLARG1; extern void free_dungeons(void); extern void freedynamicdata(void); -extern void store_savefileinfo(NHFILE *); -extern void store_savefileinfo(NHFILE *); +extern void store_savefileinfo(NHFILE *) NONNULLARG1; +extern void store_savefileinfo(NHFILE *) NONNULLARG1; extern int nhdatatypes_size(void); #if 0 extern void assignlog(char *, char*, int); @@ -2539,12 +2651,13 @@ extern void closelog(NHFILE *); /* ### sfstruct.c ### */ -extern void newread(NHFILE *, int, int, genericptr_t, unsigned); +extern boolean close_check(int); +/* extern void newread(NHFILE *, int, int, genericptr_t, unsigned); */ extern void bufon(int); extern void bufoff(int); extern void bflush(int); -extern void bwrite(int, const genericptr_t, unsigned); -extern void mread(int, genericptr_t, unsigned); +extern void bwrite(int, const genericptr_t, unsigned) NONNULLARG2; +extern void mread(int, genericptr_t, unsigned) NONNULLARG2; extern void minit(void); extern void bclose(int); #if defined(ZEROCOMP) @@ -2553,89 +2666,97 @@ extern void zerocomp_bclose(int); /* ### shk.c ### */ -extern void setpaid(struct monst *); -extern long money2mon(struct monst *, long); -extern void money2u(struct monst *, long); -extern void shkgone(struct monst *); -extern void set_residency(struct monst *, boolean); -extern void replshk(struct monst *, struct monst *); -extern void restshk(struct monst *, boolean); +/* setpaid() has a conditional code block near the end of the + function, where arg1 is tested for NULL, preventing NONNULLARG1 */ +extern void setpaid(struct monst *) NO_NONNULLS; +extern long money2mon(struct monst *, long) NONNULLARG1; +extern void money2u(struct monst *, long) NONNULLARG1; +extern void shkgone(struct monst *) NONNULLARG1; +extern void set_residency(struct monst *, boolean) NONNULLARG1; +extern void replshk(struct monst *, struct monst *) NONNULLARG12; +extern void restshk(struct monst *, boolean) NONNULLARG1; extern char inside_shop(coordxy, coordxy); -extern void u_left_shop(char *, boolean); +extern void u_left_shop(char *, boolean) NONNULLARG1; extern void remote_burglary(coordxy, coordxy); extern void u_entered_shop(char *); -extern void pick_pick(struct obj *); -extern boolean same_price(struct obj *, struct obj *); +extern void pick_pick(struct obj *) NONNULLARG1; +extern boolean same_price(struct obj *, struct obj *) NONNULLARG12; extern void shopper_financial_report(void); -extern int inhishop(struct monst *); +extern int inhishop(struct monst *) NONNULLARG1; extern struct monst *shop_keeper(char); -extern struct monst *find_objowner(struct obj *, coordxy x, coordxy y); -extern boolean tended_shop(struct mkroom *); -extern boolean onshopbill(struct obj *, struct monst *, boolean); -extern boolean is_unpaid(struct obj *); -extern void delete_contents(struct obj *); -extern void obfree(struct obj *, struct obj *); -extern void make_happy_shk(struct monst *, boolean); +extern struct monst *find_objowner(struct obj *, + coordxy x, coordxy y) NONNULLARG1; +extern boolean tended_shop(struct mkroom *) NONNULLARG1; +extern boolean onshopbill(struct obj *, struct monst *, boolean) NONNULLARG1; +extern boolean is_unpaid(struct obj *) NONNULLARG1; +extern void delete_contents(struct obj *) NONNULLARG1; +extern void obfree(struct obj *, struct obj *) NONNULLARG1; +extern void make_happy_shk(struct monst *, boolean) NONNULLARG1; extern void make_happy_shoppers(boolean); -extern void hot_pursuit(struct monst *); -extern void make_angry_shk(struct monst *, coordxy, coordxy); +extern void hot_pursuit(struct monst *) NONNULLARG1; +extern void make_angry_shk(struct monst *, coordxy, coordxy) NONNULLARG1; extern int dopay(void); extern boolean paybill(int, boolean); extern void finish_paybill(void); extern struct obj *find_oid(unsigned); extern long contained_cost(struct obj *, struct monst *, long, boolean, - boolean); -extern long contained_gold(struct obj *, boolean); -extern void picked_container(struct obj *); + boolean) NONNULLARG12; +extern long contained_gold(struct obj *, boolean) NONNULLARG1; +extern void picked_container(struct obj *) NONNULLARG1; extern void gem_learned(int); -extern void alter_cost(struct obj *, long); -extern long unpaid_cost(struct obj *, boolean); -extern boolean billable(struct monst **, struct obj *, char, boolean); -extern void addtobill(struct obj *, boolean, boolean, boolean); -extern void splitbill(struct obj *, struct obj *); -extern void subfrombill(struct obj *, struct monst *); -extern long stolen_value(struct obj *, coordxy, coordxy, boolean, boolean); -extern void donate_gold(long, struct monst *, boolean); +extern void alter_cost(struct obj *, long) NONNULLARG1; +extern long unpaid_cost(struct obj *, boolean) NONNULLARG1; +extern boolean billable(struct monst **, struct obj *, char, + boolean) NONNULLARG12; +extern void addtobill(struct obj *, boolean, boolean, boolean) NONNULLARG1; +extern void splitbill(struct obj *, struct obj *) NONNULLARG12; +extern void subfrombill(struct obj *, struct monst *) NONNULLARG12; +extern long stolen_value(struct obj *, coordxy, coordxy, + boolean, boolean) NONNULLARG1; +extern void donate_gold(long, struct monst *, boolean) NONNULLARG2; extern void sellobj_state(int); -extern void sellobj(struct obj *, coordxy, coordxy); +extern void sellobj(struct obj *, coordxy, coordxy) NONNULLARG1; extern int doinvbill(int); -extern struct monst *shkcatch(struct obj *, coordxy, coordxy); +extern struct monst *shkcatch(struct obj *, coordxy, coordxy) NONNULLARG1; extern void add_damage(coordxy, coordxy, long); extern void fix_shop_damage(void); -extern int shk_move(struct monst *); -extern void after_shk_move(struct monst *); -extern boolean is_fshk(struct monst *); +extern int shk_move(struct monst *) NONNULLARG1; +extern void after_shk_move(struct monst *) NONNULLARG1; +extern boolean is_fshk(struct monst *) NONNULLARG1; extern void shopdig(int); extern void pay_for_damage(const char *, boolean); extern boolean costly_spot(coordxy, coordxy); -extern boolean costly_adjacent(struct monst *, coordxy, coordxy); +/* costly_adjacent() has checks for null 1st arg, and an early return, + so it cannot be NONNULLARG1 */ +extern boolean costly_adjacent(struct monst *, coordxy, coordxy) NO_NONNULLS; extern struct obj *shop_object(coordxy, coordxy); -extern void price_quote(struct obj *); -extern void shk_chat(struct monst *); -extern void check_unpaid_usage(struct obj *, boolean); -extern void check_unpaid(struct obj *); +extern void price_quote(struct obj *) NONNULLARG1; +extern void shk_chat(struct monst *) NONNULLARG1; +extern void check_unpaid_usage(struct obj *, boolean) NONNULLARG1; +extern void check_unpaid(struct obj *) NONNULLARG1; extern void costly_gold(coordxy, coordxy, long, boolean); -extern long get_cost_of_shop_item(struct obj *, int *); -extern int oid_price_adjustment(struct obj *, unsigned); +extern long get_cost_of_shop_item(struct obj *, int *) NONNULLARG1; +extern int oid_price_adjustment(struct obj *, unsigned) NONNULLARG1; extern boolean block_door(coordxy, coordxy); extern boolean block_entry(coordxy, coordxy); -extern char *shk_your(char *, struct obj *); -extern char *Shk_Your(char *, struct obj *); -extern void globby_bill_fixup(struct obj *, struct obj *); -extern void globby_donation(struct obj *, struct obj *); -extern void credit_report(struct monst *shkp, int idx, boolean silent); +extern char *shk_your(char *, struct obj *) NONNULLPTRS; +extern char *Shk_Your(char *, struct obj *) NONNULLPTRS; +extern void globby_bill_fixup(struct obj *, struct obj *) NONNULLARG12; +/*extern void globby_donation(struct obj *, struct obj *); */ +extern void credit_report(struct monst *shkp, int idx, + boolean silent) NONNULLARG1; /* ### shknam.c ### */ -extern void neweshk(struct monst *); -extern void free_eshk(struct monst *); -extern void stock_room(int, struct mkroom *); -extern boolean saleable(struct monst *, struct obj *); +extern void neweshk(struct monst *) NONNULLARG1; +extern void free_eshk(struct monst *) NONNULLARG1; +extern void stock_room(int, struct mkroom *) NONNULLARG2; +extern boolean saleable(struct monst *, struct obj *) NONNULLARG12; extern int get_shop_item(int); -extern char *Shknam(struct monst *); -extern char *shkname(struct monst *); -extern boolean shkname_is_pname(struct monst *); -extern boolean is_izchak(struct monst *, boolean); +extern char *Shknam(struct monst *) NONNULLARG1; +extern char *shkname(struct monst *) NONNULLARG1; +extern boolean shkname_is_pname(struct monst *) NONNULLARG1; +extern boolean is_izchak(struct monst *, boolean) NONNULLARG1; /* ### sit.c ### */ @@ -2647,19 +2768,19 @@ extern int attrcurse(void); /* ### sounds.c ### */ extern void dosounds(void); -extern const char *growl_sound(struct monst *); -extern void growl(struct monst *); -extern void yelp(struct monst *); -extern void whimper(struct monst *); -extern void beg(struct monst *); -extern const char *maybe_gasp(struct monst *); -extern const char *cry_sound(struct monst *); +extern const char *growl_sound(struct monst *) NONNULLARG1; +extern void growl(struct monst *) NONNULLARG1; +extern void yelp(struct monst *) NONNULLARG1; +extern void whimper(struct monst *) NONNULLARG1; +extern void beg(struct monst *) NONNULLARG1; +extern const char *maybe_gasp(struct monst *) NONNULLARG1; +extern const char *cry_sound(struct monst *) NONNULLARG1; extern int dotalk(void); extern int tiphat(void); #ifdef USER_SOUNDS -extern int add_sound_mapping(const char *); -extern void play_sound_for_message(const char *); -extern void maybe_play_sound(const char *); +extern int add_sound_mapping(const char *) NONNULLARG1; +extern void play_sound_for_message(const char *) NONNULLARG1; +extern void maybe_play_sound(const char *) NONNULLARG1; extern void release_sound_mappings(void); #if defined(WIN32) || defined(QT_GRAPHICS) extern void play_usersound(const char *, int); @@ -2670,48 +2791,48 @@ extern void play_usersound_via_idx(int, int); #endif /* USER SOUNDS */ extern void assign_soundlib(int); extern void activate_chosen_soundlib(void); -extern void get_soundlib_name(char *dest, int maxlen); +extern void get_soundlib_name(char *dest, int maxlen) NONNULLARG1; #ifdef SND_SOUNDEFFECTS_AUTOMAP extern char *get_sound_effect_filename(int32_t seidint, char *buf, size_t bufsz, int32_t); #endif -extern char *base_soundname_to_filename(char *, char *, size_t, int32_t); -extern void set_voice(struct monst *, int32_t, int32_t, int32_t); -extern void sound_speak(const char *); +extern char *base_soundname_to_filename(char *, char *, size_t, int32_t) NONNULLARG1; +extern void set_voice(struct monst *, int32_t, int32_t, int32_t) NO_NONNULLS; +extern void sound_speak(const char *) NO_NONNULLS; /* ### sp_lev.c ### */ #if !defined(CROSSCOMPILE) || defined(CROSSCOMPILE_TARGET) extern void create_des_coder(void); extern void reset_xystart_size(void); -extern struct mapfragment *mapfrag_fromstr(char *); -extern void mapfrag_free(struct mapfragment **); -extern schar mapfrag_get(struct mapfragment *, int, int); -extern boolean mapfrag_canmatch(struct mapfragment *); -extern const char * mapfrag_error(struct mapfragment *); -extern boolean mapfrag_match(struct mapfragment *, int, int); +extern struct mapfragment *mapfrag_fromstr(char *) NONNULLARG1; +extern void mapfrag_free(struct mapfragment **) NO_NONNULLS; +extern schar mapfrag_get(struct mapfragment *, int, int) NONNULLARG1; +extern boolean mapfrag_canmatch(struct mapfragment *) NONNULLARG1; +extern const char * mapfrag_error(struct mapfragment *) NO_NONNULLS; +extern boolean mapfrag_match(struct mapfragment *, int, int) NONNULLARG1; extern void flip_level(int, boolean); extern void flip_level_rnd(int, boolean); -extern boolean check_room(coordxy *, coordxy *, coordxy *, coordxy *, boolean); +extern boolean check_room(coordxy *, coordxy *, coordxy *, coordxy *, boolean) NONNULLPTRS; extern boolean create_room(coordxy, coordxy, coordxy, coordxy, coordxy, coordxy, xint16, xint16); -extern boolean dig_corridor(coord *, coord *, boolean, schar, schar); -extern void fill_special_room(struct mkroom *); +extern boolean dig_corridor(coord *, coord *, boolean, schar, schar) NONNULLARG12; +extern void fill_special_room(struct mkroom *) NO_NONNULLS; extern void wallify_map(coordxy, coordxy, coordxy, coordxy); -extern boolean load_special(const char *); -extern coordxy selection_getpoint(coordxy, coordxy, struct selectionvar *); +extern boolean load_special(const char *) NONNULLARG1; +extern coordxy selection_getpoint(coordxy, coordxy, struct selectionvar *) NO_NONNULLS; extern struct selectionvar *selection_new(void); -extern void selection_free(struct selectionvar *, boolean); -extern void selection_clear(struct selectionvar *, int); -extern struct selectionvar *selection_clone(struct selectionvar *); -extern void selection_getbounds(struct selectionvar *, NhRect *); -extern void selection_recalc_bounds(struct selectionvar *); +extern void selection_free(struct selectionvar *, boolean) NO_NONNULLS; +extern void selection_clear(struct selectionvar *, int) NONNULLARG1; +extern struct selectionvar *selection_clone(struct selectionvar *) NONNULLARG1; +extern void selection_getbounds(struct selectionvar *, NhRect *) NO_NONNULLS; +extern void selection_recalc_bounds(struct selectionvar *) NONNULLARG1; extern void set_selection_floodfillchk(int(*)(coordxy, coordxy)); extern void selection_floodfill(struct selectionvar *, coordxy, coordxy, boolean); -extern boolean pm_good_location(coordxy, coordxy, struct permonst *); +extern boolean pm_good_location(coordxy, coordxy, struct permonst *) NONNULLARG3; extern void get_location_coord(coordxy *, coordxy *, int, struct mkroom *, - long); + long) NONNULLPTRS; extern void selection_setpoint(coordxy, coordxy, struct selectionvar *, int); extern struct selectionvar * selection_not(struct selectionvar *); extern struct selectionvar *selection_filter_percent(struct selectionvar *, @@ -2730,24 +2851,28 @@ extern void selection_do_ellipse(struct selectionvar *, int, int, int, int, int); extern void selection_do_gradient(struct selectionvar *, long, long, long, long, long, long, long); -extern int lspo_reset_level(lua_State *); -extern int lspo_finalize_level(lua_State *); -extern boolean get_coord(lua_State *, int, lua_Integer *, lua_Integer *); -extern void cvt_to_abscoord(coordxy *, coordxy *); -extern void cvt_to_relcoord(coordxy *, coordxy *); -extern int nhl_abs_coord(lua_State *); -extern struct selectionvar *selection_from_mkroom(struct mkroom *); +extern int lspo_reset_level(lua_State *) NO_NONNULLS; /* wiz_load_splua NULL */ +/* lspo_finalize_level() has tests for whether arg1 L is null, and chooses + code paths to follow based on that. Also preventing NONNULLARG1 is it + being called from wiz_load_splua() with a NULL arg. + Side note: The parameter is also marked as UNUSED, but apparently it is */ +extern int lspo_finalize_level(lua_State *) NO_NONNULLS; +extern boolean get_coord(lua_State *, int, lua_Integer *, lua_Integer *) NONNULLPTRS; +extern void cvt_to_abscoord(coordxy *, coordxy *) NONNULLPTRS; +extern void cvt_to_relcoord(coordxy *, coordxy *) NONNULLPTRS; +extern int nhl_abs_coord(lua_State *) NONNULLARG1; +extern struct selectionvar *selection_from_mkroom(struct mkroom *) NO_NONNULLS; extern void update_croom(void); extern const char *get_trapname_bytype(int); -extern void l_register_des(lua_State *); +extern void l_register_des(lua_State *) NONNULLARG1; #endif /* !CROSSCOMPILE || CROSSCOMPILE_TARGET */ /* ### spell.c ### */ -extern void book_cursed(struct obj *); -extern int study_book(struct obj *); -extern void book_disappears(struct obj *); -extern void book_substitution(struct obj *, struct obj *); +extern void book_cursed(struct obj *) NONNULLARG1; +extern int study_book(struct obj *) NONNULLARG1; +extern void book_disappears(struct obj *) NONNULLARG1; +extern void book_substitution(struct obj *, struct obj *) NONNULLARG12; extern void age_spells(void); extern int dowizcast(void); extern int docast(void); @@ -2756,7 +2881,7 @@ extern int spelleffects(int, boolean, boolean); extern int tport_spell(int); extern void losespells(void); extern int dovspell(void); -extern void initialspell(struct obj *); +extern void initialspell(struct obj *) NONNULLARG1; extern int known_spell(short); extern int spell_idx(short); extern char force_learn_spell(short); @@ -2766,33 +2891,35 @@ extern void skill_based_spellbook_id(void); /* ### steal.c ### */ extern long somegold(long); -extern void stealgold(struct monst *); +extern void stealgold(struct monst *) NONNULLARG1; extern void thiefdead(void); extern boolean unresponsive(void); -extern void remove_worn_item(struct obj *, boolean); -extern int steal(struct monst *, char *); -extern int mpickobj(struct monst *, struct obj *); -extern void stealamulet(struct monst *); -extern void maybe_absorb_item(struct monst *, struct obj *, int, int); -extern void mdrop_obj(struct monst *, struct obj *, boolean); -extern void mdrop_special_objs(struct monst *); -extern void relobj(struct monst *, int, boolean); -extern struct obj *findgold(struct obj *); +extern void remove_worn_item(struct obj *, boolean) NONNULLARG1; +extern int steal(struct monst *, char *) NONNULLARG1; +/* mpickobj() contains a test for NULL arg2 obj and a code path + that leads to impossible(). Prevents NONNULLARG12. */ +extern int mpickobj(struct monst *, struct obj *) NONNULLARG1; +extern void stealamulet(struct monst *) NONNULLARG1; +extern void maybe_absorb_item(struct monst *, struct obj *, int, int) NONNULLARG12; +extern void mdrop_obj(struct monst *, struct obj *, boolean) NONNULLARG12; +extern void mdrop_special_objs(struct monst *) NONNULLARG1; +extern void relobj(struct monst *, int, boolean) NONNULLARG1; +extern struct obj *findgold(struct obj *) NONNULLARG1; /* ### steed.c ### */ extern void rider_cant_reach(void); -extern boolean can_saddle(struct monst *); -extern int use_saddle(struct obj *); -extern void put_saddle_on_mon(struct obj *, struct monst *); -extern boolean can_ride(struct monst *); +extern boolean can_saddle(struct monst *) NONNULLARG1; +extern int use_saddle(struct obj *) NONNULLARG1; +extern void put_saddle_on_mon(struct obj *, struct monst *) NONNULLARG12; +extern boolean can_ride(struct monst *) NONNULLARG1; extern int doride(void); -extern boolean mount_steed(struct monst *, boolean); +extern boolean mount_steed(struct monst *, boolean) NO_NONNULLS; extern void exercise_steed(void); extern void kick_steed(void); extern void dismount_steed(int); -extern void place_monster(struct monst *, coordxy, coordxy); -extern void poly_steed(struct monst *, struct permonst *); +extern void place_monster(struct monst *, coordxy, coordxy) NONNULLARG1; +extern void poly_steed(struct monst *, struct permonst *) NONNULLARG12; extern boolean stucksteed(boolean); /* ### symbols.c ### */ @@ -2806,26 +2933,26 @@ extern void init_rogue_symbols(void); extern void init_ov_primary_symbols(void); extern void init_ov_rogue_symbols(void); extern void clear_symsetentry(int, boolean); -extern void update_primary_symset(const struct symparse *, int); -extern void update_rogue_symset(const struct symparse *, int); -extern void update_ov_primary_symset(const struct symparse *, int); -extern void update_ov_rogue_symset(const struct symparse *, int); -extern int parse_sym_line(char *, int); +extern void update_primary_symset(const struct symparse *, int) NONNULLARG1; +extern void update_rogue_symset(const struct symparse *, int) NONNULLARG1; +extern void update_ov_primary_symset(const struct symparse *, int) NONNULLARG1; +extern void update_ov_rogue_symset(const struct symparse *, int) NONNULLARG1; +extern int parse_sym_line(char *, int) NONNULLARG1; extern nhsym get_othersym(int, int); extern boolean symset_is_compatible(enum symset_handling_types, unsigned long); -extern void set_symhandling(char *handling, int which_set); -extern boolean proc_symset_line(char *); +extern void set_symhandling(char *handling, int which_set) NONNULLARG1; +extern boolean proc_symset_line(char *) NONNULLARG1; extern int do_symset(boolean); -extern int load_symset(const char *, int); +extern int load_symset(const char *, int) NONNULLARG1; extern void free_symsets(void); -extern const struct symparse *match_sym(char *); +extern const struct symparse *match_sym(char *) NONNULLARG1; extern void savedsym_free(void); -extern void savedsym_strbuf(strbuf_t *); -extern boolean parsesymbols(char *, int); +extern void savedsym_strbuf(strbuf_t *) NONNULLARG1; +extern boolean parsesymbols(char *, int) NONNULLARG1; #ifdef ENHANCED_SYMBOLS extern struct customization_detail *find_matching_symset_customiz( const char *symset_name, int custtype, - enum graphics_sets which_set); + enum graphics_sets which_set) NONNULLARG1; extern void apply_customizations_to_symset(enum graphics_sets which_set); #endif @@ -2837,156 +2964,162 @@ extern void sysopt_seduce_set(int); /* ### teleport.c ### */ -extern boolean noteleport_level(struct monst *); -extern boolean goodpos(coordxy, coordxy, struct monst *, mmflags_nht); -extern boolean enexto(coord *, coordxy, coordxy, struct permonst *); +extern boolean noteleport_level(struct monst *) NONNULLARG1; +/* rloc_engr() passes NULL monst arg to goodpos()*/ +extern boolean goodpos(coordxy, coordxy, struct monst *, + mmflags_nht) NO_NONNULLS; +extern boolean enexto(coord *, coordxy, coordxy, + struct permonst *) NONNULLARG1; extern boolean enexto_core(coord *, coordxy, coordxy, struct permonst *, - mmflags_nht); + mmflags_nht) NONNULLARG1; extern void teleds(coordxy, coordxy, int); extern int collect_coords(coord *, coordxy, coordxy, int, unsigned, - boolean (*)(coordxy, coordxy)); + boolean (*)(coordxy, coordxy)) NONNULLARG1; extern boolean safe_teleds(int); -extern boolean teleport_pet(struct monst *, boolean); +extern boolean teleport_pet(struct monst *, boolean) NONNULLARG1; extern void tele(void); -extern void scrolltele(struct obj *); +extern void scrolltele(struct obj *) NO_NONNULLS; extern int dotelecmd(void); extern int dotele(boolean); extern void level_tele(void); -extern void domagicportal(struct trap *); -extern void tele_trap(struct trap *); -extern void level_tele_trap(struct trap *, unsigned); -extern void rloc_to(struct monst *, coordxy, coordxy); -extern void rloc_to_flag(struct monst *, coordxy, coordxy, unsigned); -extern boolean rloc(struct monst *, unsigned); -extern boolean control_mon_tele(struct monst *, coord *cc, unsigned, boolean); -extern boolean tele_restrict(struct monst *); -extern void mtele_trap(struct monst *, struct trap *, int); -extern int mlevel_tele_trap(struct monst *, struct trap *, boolean, int); -extern boolean rloco(struct obj *); +extern void domagicportal(struct trap *) NONNULLARG1; +extern void tele_trap(struct trap *) NONNULLARG1; +extern void level_tele_trap(struct trap *, unsigned) NONNULLARG1; +extern void rloc_to(struct monst *, coordxy, coordxy) NONNULLARG1; +extern void rloc_to_flag(struct monst *, coordxy, coordxy, + unsigned) NONNULLARG1; +extern boolean rloc(struct monst *, unsigned) NONNULLARG1; +extern boolean control_mon_tele(struct monst *, coord *cc, unsigned, + boolean) NONNULLARG1; +extern boolean tele_restrict(struct monst *) NONNULLARG1; +extern void mtele_trap(struct monst *, struct trap *, int) NONNULLARG12; +extern int mlevel_tele_trap(struct monst *, struct trap *, + boolean, int) NONNULLARG1; +extern boolean rloco(struct obj *) NONNULLARG1; extern int random_teleport_level(void); -extern boolean u_teleport_mon(struct monst *, boolean); - -/* ### tile.c ### */ - -#ifdef TILES_IN_GLYPHMAP -extern void substitute_tiles(d_level *); -#endif +extern boolean u_teleport_mon(struct monst *, boolean) NONNULLARG1; /* ### timeout.c ### */ -extern const char *property_by_index(int, int *); +extern const char *property_by_index(int, int *) NO_NONNULLS; extern void burn_away_slime(void); extern void nh_timeout(void); extern void fall_asleep(int, boolean); -extern void attach_egg_hatch_timeout(struct obj *, long); -extern void attach_fig_transform_timeout(struct obj *); -extern void kill_egg(struct obj *); -extern void hatch_egg(union any *, long); +extern void attach_egg_hatch_timeout(struct obj *, long) NONNULLARG1; +extern void attach_fig_transform_timeout(struct obj *) NONNULLARG1; +extern void kill_egg(struct obj *) NONNULLARG1; +extern void hatch_egg(union any *, long) NONNULLARG1; extern void learn_egg_type(int); -extern void burn_object(union any *, long); -extern void begin_burn(struct obj *, boolean); -extern void end_burn(struct obj *, boolean); +extern void burn_object(union any *, long) NONNULLARG1; +extern void begin_burn(struct obj *, boolean) NONNULLARG1; +extern void end_burn(struct obj *, boolean) NONNULLARG1; extern void do_storms(void); -extern boolean start_timer(long, short, short, union any *); -extern long stop_timer(short, union any *); -extern long peek_timer(short, union any *); +extern boolean start_timer(long, short, short, union any *) NONNULLARG4; +extern long stop_timer(short, union any *) NONNULLARG2; +extern long peek_timer(short, union any *) NONNULLARG2; extern void run_timers(void); -extern void obj_move_timers(struct obj *, struct obj *); -extern void obj_split_timers(struct obj *, struct obj *); -extern void obj_stop_timers(struct obj *); -extern boolean obj_has_timer(struct obj *, short); +extern void obj_move_timers(struct obj *, struct obj *) NONNULLARG12; +extern void obj_split_timers(struct obj *, struct obj *) NONNULLARG12; +extern void obj_stop_timers(struct obj *) NONNULLARG1; +extern boolean obj_has_timer(struct obj *, short) NONNULLARG1; extern void spot_stop_timers(coordxy, coordxy, short); extern long spot_time_expires(coordxy, coordxy, short); extern long spot_time_left(coordxy, coordxy, short); -extern boolean obj_is_local(struct obj *); -extern void save_timers(NHFILE *, int); -extern void restore_timers(NHFILE *, int, long); -extern void timer_stats(const char *, char *, long *, long *); +extern boolean obj_is_local(struct obj *) NONNULLARG1; +extern void save_timers(NHFILE *, int) NONNULLARG1; +extern void restore_timers(NHFILE *, int, long) NONNULLARG1; +extern void timer_stats(const char *, char *, long *, long *) NONNULLPTRS; extern void relink_timers(boolean); extern int wiz_timeout_queue(void); extern void timer_sanity_check(void); /* ### topten.c ### */ -extern void formatkiller(char *, unsigned, int, boolean); -extern int observable_depth(d_level *); +extern void formatkiller(char *, unsigned, int, boolean) NONNULLARG1; +extern int observable_depth(d_level *) NONNULLARG1; extern void topten(int, time_t); extern void prscore(int, char **); extern struct toptenentry *get_rnd_toptenentry(void); -extern struct obj *tt_oname(struct obj *); -extern int tt_doppel(struct monst *); +extern struct obj *tt_oname(struct obj *) NO_NONNULLS; +extern int tt_doppel(struct monst *) NONNULLARG1; /* ### track.c ### */ extern void initrack(void); extern void settrack(void); extern coord *gettrack(coordxy, coordxy); -extern void save_track(NHFILE *); -extern void rest_track(NHFILE *); +extern void save_track(NHFILE *) NONNULLARG1; +extern void rest_track(NHFILE *) NONNULLARG1; /* ### trap.c ### */ -extern boolean burnarmor(struct monst *); -extern int erode_obj(struct obj *, const char *, int, int); -extern boolean grease_protect(struct obj *, const char *, struct monst *); +extern boolean burnarmor(struct monst *) NO_NONNULLS; +extern int erode_obj(struct obj *, const char *, int, int) NO_NONNULLS; +extern boolean grease_protect(struct obj *, const char *, + struct monst *) NONNULLARG1; extern struct trap *maketrap(coordxy, coordxy, int); -extern d_level *clamp_hole_destination(d_level *); +extern d_level *clamp_hole_destination(d_level *) NONNULLARG1; extern void fall_through(boolean, unsigned); extern struct monst *animate_statue(struct obj *, coordxy, coordxy, - int, int *); + int, int *) NONNULLARG1; extern struct monst *activate_statue_trap(struct trap *, coordxy, coordxy, - boolean); -extern int immune_to_trap(struct monst *, unsigned); + boolean) NONNULLARG1; +extern int immune_to_trap(struct monst *, unsigned) NO_NONNULLS; /* revisit */ extern void set_utrap(unsigned, unsigned); extern void reset_utrap(boolean); -extern void dotrap(struct trap *, unsigned); -extern void seetrap(struct trap *); -extern void feeltrap(struct trap *); -extern int mintrap(struct monst *, unsigned); -extern void instapetrify(const char *); -extern void minstapetrify(struct monst *, boolean); -extern void selftouch(const char *); -extern void mselftouch(struct monst *, const char *, boolean); +extern void dotrap(struct trap *, unsigned) NONNULLARG1; +extern void seetrap(struct trap *) NONNULLARG1; +extern void feeltrap(struct trap *) NONNULLARG1; +extern int mintrap(struct monst *, unsigned) NONNULLARG1; +extern void instapetrify(const char *) NO_NONNULLS; +extern void minstapetrify(struct monst *, boolean) NONNULLARG1; +extern void selftouch(const char *) NONNULLARG1; +extern void mselftouch(struct monst *, const char *, boolean) NONNULLARG1; extern void float_up(void); extern void fill_pit(coordxy, coordxy); extern int float_down(long, long); extern void climb_pit(void); -extern boolean fire_damage(struct obj *, boolean, coordxy, coordxy); -extern int fire_damage_chain(struct obj *, boolean, boolean, coordxy, coordxy); -extern boolean lava_damage(struct obj *, coordxy, coordxy); -extern void acid_damage(struct obj *); -extern int water_damage(struct obj *, const char *, boolean); -extern void water_damage_chain(struct obj *, boolean); -extern boolean rnd_nextto_goodpos(coordxy *, coordxy *, struct monst *); +extern boolean fire_damage(struct obj *, boolean, + coordxy, coordxy) NONNULLARG1; +extern int fire_damage_chain(struct obj *, boolean, boolean, + coordxy, coordxy) NONNULLARG1; +extern boolean lava_damage(struct obj *, coordxy, coordxy) NONNULLARG1; +/* acid_damage() has a test for NULL arg and early return if so, + preventing NONNULLARG1 */ +extern void acid_damage(struct obj *) NO_NONNULLS; +extern int water_damage(struct obj *, const char *, boolean) NO_NONNULLS; +extern void water_damage_chain(struct obj *, boolean) NO_NONNULLS; +extern boolean rnd_nextto_goodpos(coordxy *, coordxy *, + struct monst *) NONNULLPTRS; extern void back_on_ground(boolean); extern void rescued_from_terrain(int); extern boolean drown(void); extern void drain_en(int, boolean); extern int dountrap(void); extern int could_untrap(boolean, boolean); -extern void cnv_trap_obj(int, int, struct trap *, boolean); -extern int untrap(boolean, coordxy, coordxy, struct obj *); -extern boolean openholdingtrap(struct monst *, boolean *); -extern boolean closeholdingtrap(struct monst *, boolean *); -extern boolean openfallingtrap(struct monst *, boolean, boolean *); -extern boolean chest_trap(struct obj *, int, boolean); -extern void deltrap(struct trap *); -extern boolean delfloortrap(struct trap *); +extern void cnv_trap_obj(int, int, struct trap *, boolean) NONNULLARG3; +extern int untrap(boolean, coordxy, coordxy, struct obj *) NO_NONNULLS; +extern boolean openholdingtrap(struct monst *, boolean *) NO_NONNULLS; +extern boolean closeholdingtrap(struct monst *, boolean *) NO_NONNULLS; +extern boolean openfallingtrap(struct monst *, boolean, boolean *) NONNULLARG3; +extern boolean chest_trap(struct obj *, int, boolean) NONNULLARG1; +extern void deltrap(struct trap *) NONNULLARG1; +extern boolean delfloortrap(struct trap *) NO_NONNULLS; extern struct trap *t_at(coordxy, coordxy); extern int count_traps(int); -extern void b_trapped(const char *, int); +extern void b_trapped(const char *, int) NONNULLARG1; extern boolean unconscious(void); -extern void blow_up_landmine(struct trap *); +extern void blow_up_landmine(struct trap *) NONNULLARG1; extern int launch_obj(short, coordxy, coordxy, coordxy, coordxy, int); extern boolean launch_in_progress(void); extern void force_launch_placement(void); -extern boolean uteetering_at_seen_pit(struct trap *); -extern boolean uescaped_shaft(struct trap *); +extern boolean uteetering_at_seen_pit(struct trap *) NO_NONNULLS; +extern boolean uescaped_shaft(struct trap *) NO_NONNULLS; extern boolean lava_effects(void); extern void sink_into_lava(void); extern void sokoban_guilt(void); extern const char * trapname(int, boolean); -extern void ignite_items(struct obj *); +extern void ignite_items(struct obj *) NO_NONNULLS; extern void trap_ice_effects(coordxy x, coordxy y, boolean ice_is_melting); extern void trap_sanity_check(void); @@ -2996,112 +3129,115 @@ extern void u_init(void); /* ### uhitm.c ### */ -extern void dynamic_multi_reason(struct monst *, const char *, boolean); -extern void erode_armor(struct monst *, int); -extern boolean attack_checks(struct monst *, struct obj *); -extern void check_caitiff(struct monst *); -extern void mon_maybe_unparalyze(struct monst *); -extern int find_roll_to_hit(struct monst *, uchar, struct obj *, int *, int *); -extern boolean force_attack(struct monst *, boolean); -extern boolean do_attack(struct monst *); -extern boolean hmon(struct monst *, struct obj *, int, int); +extern void dynamic_multi_reason(struct monst *, const char *, boolean) NONNULLARG12; +extern void erode_armor(struct monst *, int) NONNULLARG1; +extern boolean attack_checks(struct monst *, struct obj *) NONNULLARG1; +extern void check_caitiff(struct monst *) NONNULLARG1; +extern void mon_maybe_unparalyze(struct monst *) NONNULLARG1; +extern int find_roll_to_hit(struct monst *, uchar, struct obj *, + int *, int *) NONNULLARG145; +extern boolean force_attack(struct monst *, boolean) NONNULLARG1; +extern boolean do_attack(struct monst *) NONNULLARG1; +extern boolean hmon(struct monst *, struct obj *, int, int) NONNULLARG1; extern boolean shade_miss(struct monst *, struct monst *, struct obj *, - boolean, boolean); + boolean, boolean) NONNULLARG12; extern void mhitm_ad_rust(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLPTRS; extern void mhitm_ad_corr(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLPTRS; extern void mhitm_ad_dcay(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLPTRS; extern void mhitm_ad_dren(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLPTRS; extern void mhitm_ad_drli(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLPTRS; extern void mhitm_ad_fire(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLPTRS; extern void mhitm_ad_cold(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLPTRS; extern void mhitm_ad_elec(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLPTRS; extern void mhitm_ad_acid(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLPTRS; extern void mhitm_ad_sgld(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLPTRS; extern void mhitm_ad_tlpt(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLPTRS; +/* gazemm() calls mhitm_ad_blnd with a NULL 4th arg */ extern void mhitm_ad_blnd(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLARG123; extern void mhitm_ad_curs(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLPTRS; extern void mhitm_ad_drst(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLPTRS; extern void mhitm_ad_drin(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLPTRS; extern void mhitm_ad_stck(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLPTRS; extern void mhitm_ad_wrap(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLPTRS; extern void mhitm_ad_plys(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLPTRS; extern void mhitm_ad_slee(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLPTRS; extern void mhitm_ad_slim(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLPTRS; extern void mhitm_ad_ench(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLPTRS; extern void mhitm_ad_slow(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLPTRS; extern void mhitm_ad_conf(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLPTRS; extern void mhitm_ad_poly(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLPTRS; extern void mhitm_ad_famn(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLPTRS; extern void mhitm_ad_pest(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLPTRS; extern void mhitm_ad_deth(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLPTRS; extern void mhitm_ad_halu(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLPTRS; extern void mhitm_ad_phys(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLPTRS; extern void mhitm_ad_ston(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLPTRS; extern void mhitm_ad_were(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLPTRS; extern void mhitm_ad_heal(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLPTRS; extern void mhitm_ad_stun(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLPTRS; extern void mhitm_ad_legs(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLPTRS; extern void mhitm_ad_dgst(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLPTRS; extern void mhitm_ad_samu(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLPTRS; extern void mhitm_ad_dise(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLPTRS; extern void mhitm_ad_sedu(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLPTRS; extern void mhitm_ad_ssex(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); + struct mhitm_data *) NONNULLPTRS; extern void mhitm_adtyping(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); -extern boolean do_stone_u(struct monst *); + struct mhitm_data *) NONNULLPTRS; +extern boolean do_stone_u(struct monst *) NONNULLARG1; extern void do_stone_mon(struct monst *, struct attack *, struct monst *, - struct mhitm_data *); -extern int damageum(struct monst *, struct attack *, int); -extern int explum(struct monst *, struct attack *); -extern void missum(struct monst *, struct attack *, boolean); -extern boolean m_is_steadfast(struct monst *); + struct mhitm_data *) NONNULLARG134; +extern int damageum(struct monst *, struct attack *, int) NONNULLARG12; +/* domove_fight_empty passes NULL to explum arg1 */ +extern int explum(struct monst *, struct attack *) NONNULLARG2; +extern void missum(struct monst *, struct attack *, boolean) NONNULLARG12; +extern boolean m_is_steadfast(struct monst *) NONNULLARG1; extern boolean mhitm_knockback(struct monst *, struct monst *,struct attack *, - int *, boolean); + int *, boolean) NONNULLPTRS; extern int passive(struct monst *, struct obj *, boolean, boolean, uchar, - boolean); -extern void passive_obj(struct monst *, struct obj *, struct attack *); -extern void stumble_onto_mimic(struct monst *); -extern int flash_hits_mon(struct monst *, struct obj *); -extern void light_hits_gremlin(struct monst *, int); + boolean) NONNULLARG1; +extern void passive_obj(struct monst *, struct obj *, struct attack *) NONNULLARG1; +extern void stumble_onto_mimic(struct monst *) NONNULLARG1; +extern int flash_hits_mon(struct monst *, struct obj *) NONNULLARG12; +extern void light_hits_gremlin(struct monst *, int) NONNULLARG1; /* ### unixmain.c ### */ @@ -3112,8 +3248,8 @@ extern void port_help(void); extern void sethanguphandler(void(*)(int)); extern boolean authorize_wizard_mode(void); extern boolean authorize_explore_mode(void); -extern void append_slash(char *); -extern boolean check_user_string(const char *); +extern void append_slash(char *) NONNULLARG1; +extern boolean check_user_string(const char *) NONNULLARG1; extern char *get_login_name(void); extern unsigned long sys_random_seed(void); #endif /* UNIX */ @@ -3122,7 +3258,7 @@ extern unsigned long sys_random_seed(void); #if defined(UNIX) || defined(__BEOS__) extern void gettty(void); -extern void settty(const char *); +extern void settty(const char *) NO_NONNULLS; extern void setftty(void); extern void intron(void); extern void introff(void); @@ -3136,7 +3272,7 @@ extern void tty_utf8graphics_fixup(void); #ifdef UNIX extern void getlock(void); -extern void regularize(char *); +extern void regularize(char *) NONNULLARG1; #if defined(TIMED_DELAY) && !defined(msleep) && defined(SYSV) extern void msleep(unsigned); #endif @@ -3147,7 +3283,7 @@ extern int dosh(void); extern int child(int); #endif #ifdef PANICTRACE -extern boolean file_exists(const char *); +extern boolean file_exists(const char *) NONNULLARG1; #endif #endif /* UNIX */ @@ -3162,33 +3298,34 @@ extern int hide_privileges(boolean); /* ### utf8map.c ### */ #ifdef ENHANCED_SYMBOLS -extern int glyphrep(const char *); -extern char *mixed_to_utf8(char *buf, size_t bufsz, const char *str, int *); -extern int match_glyph(char *); -extern void dump_all_glyphids(FILE *fp); +extern int glyphrep(const char *) NONNULLARG1; +extern char *mixed_to_utf8(char *buf, size_t bufsz, const char *str, + int *) NONNULLARG1; +extern int match_glyph(char *) NONNULLARG1; +extern void dump_all_glyphids(FILE *fp) NONNULLARG1; extern void fill_glyphid_cache(void); extern void free_glyphid_cache(void); extern boolean glyphid_cache_status(void); -extern int glyphrep_to_custom_map_entries(const char *op, int *glyph); +extern int glyphrep_to_custom_map_entries(const char *op, int *glyph) NONNULLPTRS; void free_all_glyphmap_u(void); int add_custom_urep_entry(const char *symset_name, int glyphidx, uint32 utf32ch, const uint8 *utf8str, long ucolor, - enum graphics_sets which_set); + enum graphics_sets which_set) NONNULLARG1; int set_map_u(glyph_map *gm, uint32 utf32ch, const uint8 *utf8str, - long ucolor); + long ucolor) NONNULLPTRS; #endif /* ENHANCED_SYMBOLS */ /* ### vault.c ### */ -extern void newegd(struct monst *); -extern void free_egd(struct monst *); -extern boolean grddead(struct monst *); +extern void newegd(struct monst *) NONNULLARG1; +extern void free_egd(struct monst *) NONNULLARG1; +extern boolean grddead(struct monst *) NONNULLARG1; extern struct monst *findgd(void); extern void vault_summon_gd(void); -extern char vault_occupied(char *); -extern void uleftvault(struct monst *); +extern char vault_occupied(char *) NONNULLARG1; +extern void uleftvault(struct monst *); /* NULL leads to impossible() */ extern void invault(void); -extern int gd_move(struct monst *); +extern int gd_move(struct monst *) NONNULLARG1; extern void paygd(boolean); extern long hidden_gold(boolean); extern boolean gd_sound(void); @@ -3196,33 +3333,27 @@ extern void vault_gd_watching(unsigned int); /* ### version.c ### */ -extern char *version_string(char *, size_t bufsz); -extern char *getversionstring(char *, size_t bufsz); +extern char *version_string(char *, size_t bufsz) NONNULLARG1; +extern char *getversionstring(char *, size_t bufsz) NONNULLARG1; extern int doversion(void); extern int doextversion(void); #ifdef MICRO extern boolean comp_times(long); #endif extern boolean check_version(struct version_info *, const char *, boolean, - unsigned long); -extern boolean uptodate(NHFILE *, const char *, unsigned long); -extern void store_formatindicator(NHFILE *); -extern void store_version(NHFILE *); -extern unsigned long get_feature_notice_ver(char *); + unsigned long) NONNULLARG12; +extern boolean uptodate(NHFILE *, const char *, unsigned long) NONNULLARG1; +extern void store_formatindicator(NHFILE *) NONNULLARG1; +extern void store_version(NHFILE *) NONNULLARG1; +extern unsigned long get_feature_notice_ver(char *) NO_NONNULLS; extern unsigned long get_current_feature_ver(void); extern const char *copyright_banner_line(int); extern void early_version_info(boolean); -#ifdef RUNTIME_PORT_ID -extern char *get_port_id(char *); -#endif -#ifdef RUNTIME_PASTEBUF_SUPPORT -extern void port_insert_pastebuf(char *); -#endif /* ### video.c ### */ #ifdef MSDOS -extern int assign_video(char *); +extern int assign_video(char *) NONNULLARG1; #ifdef NO_TERMS extern void gr_init(void); extern void gr_finish(void); @@ -3230,14 +3361,14 @@ extern void gr_finish(void); extern void tileview(boolean); #endif #ifdef VIDEOSHADES -extern int assign_videoshades(char *); -extern int assign_videocolors(char *); +extern int assign_videoshades(char *) NONNULLARG1; +extern int assign_videocolors(char *) NONNULLARG1; #endif /* ### vision.c ### */ extern void vision_init(void); -extern int does_block(int, int, struct rm *); +extern int does_block(int, int, struct rm *) NONNULLARG3; extern void vision_reset(void); extern void vision_recalc(int); extern void block_point(int, int); @@ -3245,7 +3376,7 @@ extern void unblock_point(int, int); extern boolean clear_path(int, int, int, int); extern void do_clear_area(coordxy, coordxy, int, void(*)(coordxy, coordxy, void *), genericptr_t); -extern unsigned howmonseen(struct monst *); +extern unsigned howmonseen(struct monst *) NONNULLARG1; #ifdef VMS @@ -3339,22 +3470,22 @@ extern int vms_get_saved_games(const char *, char ***); /* ### weapon.c ### */ -extern const char *weapon_descr(struct obj *); -extern int hitval(struct obj *, struct monst *); -extern int dmgval(struct obj *, struct monst *); -extern int special_dmgval(struct monst *, struct monst *, long, long *); -extern void silver_sears(struct monst *, struct monst *, long); -extern struct obj *select_rwep(struct monst *); -extern boolean monmightthrowwep(struct obj *); -extern struct obj *select_hwep(struct monst *); -extern void possibly_unwield(struct monst *, boolean); -extern void mwepgone(struct monst *); -extern int mon_wield_item(struct monst *); +extern const char *weapon_descr(struct obj *) NONNULLARG1; +extern int hitval(struct obj *, struct monst *) NONNULLARG12; +extern int dmgval(struct obj *, struct monst *) NONNULLARG12; +extern int special_dmgval(struct monst *, struct monst *, long, long *) NONNULLARG12; +extern void silver_sears(struct monst *, struct monst *, long) NONNULLARG2; +extern struct obj *select_rwep(struct monst *) NONNULLARG1; +extern boolean monmightthrowwep(struct obj *) NONNULLARG1; +extern struct obj *select_hwep(struct monst *) NONNULLARG1; +extern void possibly_unwield(struct monst *, boolean) NONNULLARG1; +extern int mon_wield_item(struct monst *) NONNULLARG1; +extern void mwepgone(struct monst *) NONNULLARG1; extern int abon(void); extern int dbon(void); -extern void wet_a_towel(struct obj *, int, boolean); -extern void dry_a_towel(struct obj *, int, boolean); -extern char *skill_level_name(int, char *); +extern void wet_a_towel(struct obj *, int, boolean) NONNULLARG1; +extern void dry_a_towel(struct obj *, int, boolean) NONNULLARG1; +extern char *skill_level_name(int, char *) NONNULLARG2; extern const char *skill_name(int); extern boolean can_advance(int, boolean); extern int enhance_weapon_skill(void); @@ -3363,34 +3494,37 @@ extern void use_skill(int, int); extern void add_weapon_skill(int); extern void lose_weapon_skill(int); extern void drain_weapon_skill(int); -extern int weapon_type(struct obj *); +extern int weapon_type(struct obj *) NO_NONNULLS; extern int uwep_skill_type(void); -extern int weapon_hit_bonus(struct obj *); -extern int weapon_dam_bonus(struct obj *); -extern void skill_init(const struct def_skill *); +/* find_roll_to_hit() calls weapon_hit_bonus() with a NULL argument, + preventing NONNULLARG1 */ +extern int weapon_hit_bonus(struct obj *) NO_NONNULLS; +extern int weapon_dam_bonus(struct obj *) NONNULLARG1; +extern void skill_init(const struct def_skill *) NONNULLARG1; +extern void setmnotwielded(struct monst *, struct obj *) NONNULLARG1; /* ### were.c ### */ -extern void were_change(struct monst *); +extern void were_change(struct monst *) NONNULLARG1; extern int counter_were(int); extern int were_beastie(int); -extern void new_were(struct monst *); -extern int were_summon(struct permonst *, boolean, int *, char *); +extern void new_were(struct monst *) NONNULLARG1; +extern int were_summon(struct permonst *, boolean, int *, char *) NONNULLARG13; extern void you_were(void); extern void you_unwere(boolean); extern void set_ulycn(int); /* ### wield.c ### */ -extern void setuwep(struct obj *); +extern void setuwep(struct obj *) NO_NONNULLS; /* NULL:ball.c, do.c */ extern const char *empty_handed(void); -extern void setuqwep(struct obj *); -extern void setuswapwep(struct obj *); +extern void setuqwep(struct obj *) NO_NONNULLS; /* NULL:ball.c, do.c */ +extern void setuswapwep(struct obj *) NO_NONNULLS; /* NULL: ball.c, do.c */ extern int dowield(void); extern int doswapweapon(void); extern int dowieldquiver(void); -extern int doquiver_core(const char *); -extern boolean wield_tool(struct obj *, const char *); +extern int doquiver_core(const char *) NONNULLARG1; +extern boolean wield_tool(struct obj *, const char *) NONNULLARG1; extern int can_twoweapon(void); extern void drop_uswapwep(void); extern int dotwoweapon(void); @@ -3399,17 +3533,16 @@ extern void uswapwepgone(void); extern void uqwepgone(void); extern void set_twoweap(boolean); extern void untwoweapon(void); -extern int chwepon(struct obj *, int); -extern int welded(struct obj *); -extern void weldmsg(struct obj *); -extern void setmnotwielded(struct monst *, struct obj *); -extern boolean mwelded(struct obj *); +extern int chwepon(struct obj *, int) NO_NONNULLS; +extern int welded(struct obj *) NO_NONNULLS; +extern void weldmsg(struct obj *) NONNULLARG1; +extern boolean mwelded(struct obj *) NO_NONNULLS; /* ### windows.c ### */ -extern void choose_windows(const char *); +extern void choose_windows(const char *) NONNULLARG1; #ifdef WINCHAIN -void addto_windowchain(const char *s); +void addto_windowchain(const char *s) NONNULLARG1; void commit_windowchain(void); #endif #ifdef TTY_GRAPHICS @@ -3418,45 +3551,48 @@ extern boolean check_tty_wincap2(unsigned long); #endif extern boolean genl_can_suspend_no(void); extern boolean genl_can_suspend_yes(void); -extern char genl_message_menu(char, int, const char *); -extern void genl_preference_update(const char *); +extern char genl_message_menu(char, int, const char *) NONNULLARG3; +extern void genl_preference_update(const char *) NO_NONNULLS; extern char *genl_getmsghistory(boolean); -extern void genl_putmsghistory(const char *, boolean); +extern void genl_putmsghistory(const char *, boolean) NONNULLARG1; #ifdef HANGUPHANDLING extern void nhwindows_hangup(void); #endif extern void genl_status_init(void); extern void genl_status_finish(void); -extern void genl_status_enablefield(int, const char *, const char *, boolean); +extern void genl_status_enablefield(int, const char *, const char *, + boolean) NONNULLPTRS; extern void genl_status_update(int, genericptr_t, int, int, int, - unsigned long *); + unsigned long *) NONNULLARG2; #ifdef DUMPLOG -extern char *dump_fmtstr(const char *, char *, boolean); +extern char *dump_fmtstr(const char *, char *, boolean) NONNULLPTRS; #endif extern void dump_open_log(time_t); extern void dump_close_log(void); extern void dump_redirect(boolean); -extern void dump_forward_putstr(winid, int, const char*, int); +extern void dump_forward_putstr(winid, int, const char*, int) NONNULLARG3; extern int has_color(int); extern int glyph2ttychar(int); extern int glyph2symidx(int); extern char *encglyph(int); -extern int decode_glyph(const char *str, int *glyph_ptr); -extern char *decode_mixed(char *, const char *); -extern void genl_putmixed(winid, int, const char *); -extern void genl_display_file(const char *, boolean); +extern int decode_glyph(const char *str, int *glyph_ptr) NONNULLPTRS; +extern char *decode_mixed(char *, const char *) NONNULLARG1; +extern void genl_putmixed(winid, int, const char *) NONNULLARG3; +extern void genl_display_file(const char *, boolean) NONNULLARG1; extern boolean menuitem_invert_test(int, unsigned, boolean); -extern const char *mixed_to_glyphinfo(const char *str, glyph_info *gip); -extern void adjust_menu_promptstyle(winid, color_attr *); -extern int choose_classes_menu(const char *, int, boolean, char *, char *); +extern const char *mixed_to_glyphinfo(const char *str, + glyph_info *gip) NO_NONNULLS; +extern void adjust_menu_promptstyle(winid, color_attr *) NONNULLARG2; +extern int choose_classes_menu(const char *, int, boolean, + char *, char *) NONNULLARG1; extern void add_menu(winid, const glyph_info *, const ANY_P *, char, char, int, int, const char *, unsigned int); -extern void add_menu_heading(winid, const char *); -extern void add_menu_str(winid, const char *); -extern int select_menu(winid, int, menu_item **); -extern void getlin(const char *, char *); +extern void add_menu_heading(winid, const char *) NONNULLARG2; +extern void add_menu_str(winid, const char *) NONNULLARG2; +extern int select_menu(winid, int, menu_item **) NONNULLARG3; +extern void getlin(const char *, char *) NONNULLARG2; -/* ### windows.c ### */ +/* ### windsys.c ### */ #ifdef WIN32 extern void nethack_enter_windows(void); @@ -3465,138 +3601,152 @@ extern void nethack_enter_windows(void); /* ### wizard.c ### */ extern void amulet(void); -extern int mon_has_amulet(struct monst *); -extern int mon_has_special(struct monst *); -extern void choose_stairs(coordxy *, coordxy *, boolean); -extern int tactics(struct monst *); -extern boolean has_aggravatables(struct monst *); +extern int mon_has_amulet(struct monst *) NONNULLARG1; +extern int mon_has_special(struct monst *) NONNULLARG1; +extern void choose_stairs(coordxy *, coordxy *, boolean) NONNULLARG12; +extern int tactics(struct monst *) NONNULLARG1; +extern boolean has_aggravatables(struct monst *) NONNULLARG1; extern void aggravate(void); extern void clonewiz(void); extern int pick_nasty(int); -extern int nasty(struct monst *); +extern int nasty(struct monst *) NO_NONNULLS; extern void resurrect(void); extern void intervene(void); extern void wizdead(void); -extern void cuss(struct monst *); +extern void cuss(struct monst *) NONNULLARG1; /* ### worm.c ### */ extern int get_wormno(void); -extern void initworm(struct monst *, int); -extern void worm_move(struct monst *); -extern void worm_nomove(struct monst *); -extern void wormgone(struct monst *); -extern int wormhitu(struct monst *); -extern void cutworm(struct monst *, coordxy, coordxy, boolean); -extern void see_wsegs(struct monst *); -extern void detect_wsegs(struct monst *, boolean); -extern void save_worm(NHFILE *); -extern void rest_worm(NHFILE *); -extern void place_wsegs(struct monst *, struct monst *); -extern void sanity_check_worm(struct monst *); +extern void initworm(struct monst *, int) NONNULLARG1; +extern void worm_move(struct monst *) NONNULLARG1; +extern void worm_nomove(struct monst *) NONNULLARG1; +extern void wormgone(struct monst *) NONNULLARG1; +extern int wormhitu(struct monst *) NONNULLARG1; +extern void cutworm(struct monst *, coordxy, coordxy, boolean) NONNULLARG1; +extern void see_wsegs(struct monst *) NONNULLARG1; +extern void detect_wsegs(struct monst *, boolean) NONNULLARG1; +extern void save_worm(NHFILE *) NONNULLARG1; +extern void rest_worm(NHFILE *) NONNULLARG1; +extern void place_wsegs(struct monst *, struct monst *) NONNULLARG1; +extern void sanity_check_worm(struct monst *); /* NULL leads to impossible */ extern void wormno_sanity_check(void); -extern void remove_worm(struct monst *); -extern void place_worm_tail_randomly(struct monst *, coordxy, coordxy); -extern int size_wseg(struct monst *); -extern int count_wsegs(struct monst *); -extern boolean worm_known(struct monst *); +extern void remove_worm(struct monst *) NONNULLARG1; +extern void place_worm_tail_randomly(struct monst *, coordxy, coordxy) NONNULLARG1; +extern int size_wseg(struct monst *) NONNULLARG1; +extern int count_wsegs(struct monst *) NONNULLARG1; +extern boolean worm_known(struct monst *) NONNULLARG1; extern boolean worm_cross(int, int, int, int); -extern int wseg_at(struct monst *, int, int); -extern void flip_worm_segs_vertical(struct monst *, int, int); -extern void flip_worm_segs_horizontal(struct monst *, int, int); +extern int wseg_at(struct monst *, int, int) NO_NONNULLS; +extern void flip_worm_segs_vertical(struct monst *, int, int) NONNULLARG1; +extern void flip_worm_segs_horizontal(struct monst *, int, int) NONNULLARG1; /* ### worn.c ### */ -extern void setworn(struct obj *, long); -extern void setnotworn(struct obj *); +extern void setworn(struct obj *, long) NO_NONNULLS; /* has tests for obj */ +extern void setnotworn(struct obj *) NO_NONNULLS; /* has tests for obj */ extern void allunworn(void); extern struct obj *wearmask_to_obj(long); -extern long wearslot(struct obj *); -extern void mon_set_minvis(struct monst *); -extern void mon_adjust_speed(struct monst *, int, struct obj *); +extern long wearslot(struct obj *) NONNULLARG1; +extern void mon_set_minvis(struct monst *) NONNULLARG1; +extern void mon_adjust_speed(struct monst *, int, struct obj *) NONNULLARG1; extern void update_mon_extrinsics(struct monst *, struct obj *, boolean, - boolean); -extern int find_mac(struct monst *); -extern void m_dowear(struct monst *, boolean); -extern struct obj *which_armor(struct monst *, long); -extern void mon_break_armor(struct monst *, boolean); -extern void bypass_obj(struct obj *); + boolean) NONNULLARG12; +extern int find_mac(struct monst *) NONNULLARG1; +extern void m_dowear(struct monst *, boolean) NONNULLARG1; +extern struct obj *which_armor(struct monst *, long) NONNULLARG1; +extern void mon_break_armor(struct monst *, boolean) NONNULLARG1; +extern void bypass_obj(struct obj *) NONNULLARG1; extern void clear_bypasses(void); -extern void bypass_objlist(struct obj *, boolean); -extern struct obj *nxt_unbypassed_obj(struct obj *); -extern struct obj *nxt_unbypassed_loot(Loot *, struct obj *); -extern int racial_exception(struct monst *, struct obj *); +extern void bypass_objlist(struct obj *, boolean) NONNULLARG1; +extern struct obj *nxt_unbypassed_obj(struct obj *) NONNULLARG1; +extern struct obj *nxt_unbypassed_loot(Loot *, struct obj *) NONNULLARG12; +extern int racial_exception(struct monst *, struct obj *) NONNULLARG12; extern void extract_from_minvent(struct monst *, struct obj *, boolean, - boolean); + boolean) NONNULLARG12; /* ### write.c ### */ -extern int dowrite(struct obj *); +extern int dowrite(struct obj *) NONNULLARG1; /* ### zap.c ### */ -extern void learnwand(struct obj *); -extern int bhitm(struct monst *, struct obj *); +extern void learnwand(struct obj *) NONNULLARG1; +extern int bhitm(struct monst *, struct obj *) NONNULLARG12; extern void release_hold(void); -extern void probe_monster(struct monst *); -extern boolean get_obj_location(struct obj *, coordxy *, coordxy *, int); -extern boolean get_mon_location(struct monst *, coordxy *, coordxy *, int); -extern struct monst *get_container_location(struct obj * obj, int *, int *); -extern struct monst *montraits(struct obj *, coord *, boolean); -extern struct monst *revive(struct obj *, boolean); -extern int unturn_dead(struct monst *); +extern void probe_monster(struct monst *) NONNULLARG1; +extern boolean get_obj_location(struct obj *, coordxy *, coordxy *, + int) NONNULLPTRS; +extern boolean get_mon_location(struct monst *, coordxy *, coordxy *, + int) NONNULLPTRS; +extern struct monst *get_container_location(struct obj *, + int *, int *) NONNULLARG2; +extern struct monst *montraits(struct obj *, coord *, boolean) NONNULLARG12; +extern struct monst *revive(struct obj *, boolean) NONNULLARG1; +extern int unturn_dead(struct monst *) NONNULLARG1; extern void unturn_you(void); -extern void cancel_item(struct obj *); -extern boolean drain_item(struct obj *, boolean); -extern boolean obj_unpolyable(struct obj *); -extern struct obj *poly_obj(struct obj *, int); -extern boolean obj_resists(struct obj *, int, int); -extern boolean obj_shudders(struct obj *); -extern void do_osshock(struct obj *); -extern int bhito(struct obj *, struct obj *); +extern void cancel_item(struct obj *) NONNULLARG1; +extern boolean drain_item(struct obj *, boolean) NO_NONNULLS; /* tests !obj */ +extern boolean obj_unpolyable(struct obj *) NONNULLARG1; +extern struct obj *poly_obj(struct obj *, int) NONNULLARG1; +extern boolean obj_resists(struct obj *, int, int) NONNULLARG1; +extern boolean obj_shudders(struct obj *) NONNULLARG1; +extern void do_osshock(struct obj *) NONNULLARG1; +extern int bhito(struct obj *, struct obj *) NONNULLARG12; extern int bhitpile(struct obj *, int(*)(struct obj *, struct obj *), - coordxy, coordxy, schar); -extern int zappable(struct obj *); + coordxy, coordxy, schar) NONNULLARG12; +extern int zappable(struct obj *) NONNULLARG1; extern void do_enlightenment_effect(void); -extern void zapnodir(struct obj *); +extern void zapnodir(struct obj *) NONNULLARG1; extern int dozap(void); -extern int zapyourself(struct obj *, boolean); -extern void ubreatheu(struct attack *); -extern int lightdamage(struct obj *, boolean, int); +extern int zapyourself(struct obj *, boolean) NONNULLARG1; +extern void ubreatheu(struct attack *) NONNULLARG1; +extern int lightdamage(struct obj *, boolean, int) NONNULLARG1; extern boolean flashburn(long); extern boolean cancel_monst(struct monst *, struct obj *, boolean, boolean, - boolean); + boolean) NONNULLARG12; extern void zapsetup(void); extern void zapwrapup(void); -extern void weffects(struct obj *); +extern void weffects(struct obj *) NONNULLARG1; extern int spell_damage_bonus(int); extern const char *exclam(int force); -extern void hit(const char *, struct monst *, const char *); -extern void miss(const char *, struct monst *); +extern void hit(const char *, struct monst *, const char *) NONNULLPTRS; +extern void miss(const char *, struct monst *) NONNULLPTRS; extern struct monst *bhit(coordxy, coordxy, int, enum bhit_call_types, int(*)(struct monst *, struct obj *), - int(*)(struct obj *, struct obj *), struct obj **); -extern struct monst *boomhit(struct obj *, coordxy, coordxy); -extern int zhitm(struct monst *, int, int, struct obj **); + int(*)(struct obj *, struct obj *), + struct obj **) NONNULLARG7; +extern struct monst *boomhit(struct obj *, coordxy, coordxy) NONNULLARG1; +extern int zhitm(struct monst *, int, int, struct obj **) NONNULLPTRS; extern int burn_floor_objects(coordxy, coordxy, boolean, boolean); extern void ubuzz(int, int); extern void buzz(int, int, coordxy, coordxy, int, int); extern void dobuzz(int, int, coordxy, coordxy, int, int, boolean); -extern void melt_ice(coordxy, coordxy, const char *); +extern void melt_ice(coordxy, coordxy, const char *) NO_NONNULLS; extern void start_melt_ice_timeout(coordxy, coordxy, long); -extern void melt_ice_away(union any *, long); -extern int zap_over_floor(coordxy, coordxy, int, boolean *, boolean, short); -extern void fracture_rock(struct obj *); -extern boolean break_statue(struct obj *); +extern void melt_ice_away(union any *, long) NONNULLARG1; +extern int zap_over_floor(coordxy, coordxy, int, boolean *, + boolean, short) NONNULLARG4; +extern void fracture_rock(struct obj *) NONNULLARG1; +extern boolean break_statue(struct obj *) NONNULLARG1; extern int u_adtyp_resistance_obj(int); extern boolean inventory_resistance_check(int); extern char *item_what(int); extern void destroy_item(int, int); -extern int destroy_mitem(struct monst *, int, int); -extern int resist(struct monst *, char, int, int); +extern int destroy_mitem(struct monst *, int, int) NONNULLARG1; +extern int resist(struct monst *, char, int, int) NONNULLARG1; extern void makewish(void); extern const char *flash_str(int, boolean); +/* ### unixmain.c, windsys.c ### */ + +#ifdef RUNTIME_PORT_ID +extern char *get_port_id(char *); +#endif +#ifdef RUNTIME_PASTEBUF_SUPPORT +extern void port_insert_pastebuf(char *); +#endif + #endif /* !MAKEDEFS_C && !MDLIB_C */ #endif /* EXTERN_H */ diff --git a/include/obj.h b/include/obj.h index f3d8a424e..f92a0b02c 100644 --- a/include/obj.h +++ b/include/obj.h @@ -419,7 +419,9 @@ struct obj { #define is_mines_prize(o) ((o)->o_id == gc.context.achieveo.mines_prize_oid) #define is_soko_prize(o) ((o)->o_id == gc.context.achieveo.soko_prize_oid) -#define is_art(o,art) ((o) && (o)->oartifact == (art)) +/* is_art() is now a function in artifact.c */ +/* #define is_art(o,art) ((o) && (o)->oartifact == (art)) */ + #define u_wield_art(art) is_art(uwep, art) /* mummy wrappings are more versatile sizewise than other cloaks */ diff --git a/include/tradstdc.h b/include/tradstdc.h index ccbb6d839..6bb60b5bf 100644 --- a/include/tradstdc.h +++ b/include/tradstdc.h @@ -361,12 +361,40 @@ typedef genericptr genericptr_t; /* (void *) or (char *) */ #endif #endif #if __GNUC__ >= 5 -#define NONNULL __attribute__((returns_nonnull)) +#ifndef NONNULLS_DEFINED +#define DO_DEFINE_NONNULLS +#endif /* !NONNULLS_DEFINED */ /* #pragma message is available */ #define NH_PRAGMA_MESSAGE 1 #endif #endif +#if defined(__clang__) && !defined(DO_DEFINE_NONNULLS) +#define DO_DEFINE_NONNULLS +#endif + +#if defined(DO_DEFINE_NONNULLS) && !defined(NONNULLS_DEFINED) +#define NONNULL __attribute__((returns_nonnull)) +#define NONNULLPTRS __attribute__((nonnull)) +#define NONNULLARG1 __attribute__((nonnull (1))) +#define NONNULLARG2 __attribute__((nonnull (2))) +#define NONNULLARG3 __attribute__((nonnull (3))) +#define NONNULLARG4 __attribute__((nonnull (4))) +#define NONNULLARG5 __attribute__((nonnull (5))) +#define NONNULLARG7 __attribute__((nonnull (7))) /* for bhit() */ +#define NONNULLARG12 __attribute__((nonnull (1, 2))) +#define NONNULLARG123 __attribute__((nonnull (1, 2, 3))) +#define NONNULLARG13 __attribute__((nonnull (1, 3))) +#define NONNULLARG14 __attribute__((nonnull (1, 4))) /* for query_category */ +#define NONNULLARG134 __attribute__((nonnull (1, 3, 4))) /* for do_stone_mon */ +#define NONNULLARG145 __attribute__((nonnull (1, 4, 5))) /* find_roll_to_hit */ +#define NONNULLARG17 __attribute__((nonnull (1, 7))) /* for askchain() */ +#define NONNULLARG24 __attribute__((nonnull (2, 4))) /* query_objlist() */ +#define NONNULLARG45 __attribute__((nonnull (4, 5))) /* do_screen_descri... */ +#define NONNULLS_DEFINED +#undef DO_DEFINE_NONNULLS +#endif /* __clang__ && !NONNULLS_DEFINED */ + #ifdef _MSC_VER #ifndef ATTRNORETURN #define ATTRNORETURN __declspec(noreturn) @@ -390,9 +418,29 @@ typedef genericptr genericptr_t; /* (void *) or (char *) */ #ifndef NORETURN #define NORETURN #endif -#ifndef NONNULL +#ifndef NONNULLS_DEFINED #define NONNULL -#endif +#define NONNULLPTRS +#define NONNULLARG1 +#define NONNULLARG2 +#define NONNULLARG3 +#define NONNULLARG4 +#define NONNULLARG5 +#define NONNULLARG7 +#define NONNULLARG12 +#define NONNULLARG123 +#define NONNULLARG13 +#define NONNULLARG14 +#define NONNULLARG134 +#define NONNULLARG145 +#define NONNULLARG17 +#define NONNULLARG24 +#define NONNULLARG45 +#define NONNULLS_DEFINED +#endif /* NONNULLS_DEFINED */ +#ifndef NO_NONNULLS +#define NO_NONNULLS +#endif /* NO_NONNULLS */ /* * Allow gcc and clang to catch the use of non-C99 functions that diff --git a/src/artifact.c b/src/artifact.c index db303b7a9..1a803e9d5 100644 --- a/src/artifact.c +++ b/src/artifact.c @@ -2523,4 +2523,13 @@ has_magic_key(struct monst *mon) /* if null, hero assumed */ return (struct obj *) 0; } +/* #define is_art(o,art) ((o) && (o)->oartifact == (art)) */ +boolean +is_art(struct obj *obj, int art) +{ + if (obj && obj->oartifact == art) + return TRUE; + return FALSE; +} + /*artifact.c*/ diff --git a/src/files.c b/src/files.c index 0b256ca90..39c73a932 100644 --- a/src/files.c +++ b/src/files.c @@ -219,13 +219,14 @@ static void cnf_parser_init(struct _cnf_parser_state *parser); static void cnf_parser_done(struct _cnf_parser_state *parser); static void parse_conf_buf(struct _cnf_parser_state *parser, boolean (*proc)(char *arg)); +/* next one is in extern.h; why here too? */ boolean parse_conf_str(const char *str, boolean (*proc)(char *arg)); static boolean parse_conf_file(FILE *fp, boolean (*proc)(char *arg)); static void parseformat(int *, char *); static FILE *fopen_wizkit_file(void); static void wizkit_addinv(struct obj *); boolean proc_wizkit_line(char *buf); -void read_wizkit(void); +void read_wizkit(void); /* in extern.h; why here too? */ static FILE *fopen_sym_file(void); #ifdef SELF_RECOVER @@ -497,20 +498,18 @@ const int bei = 1; void zero_nhfile(NHFILE *nhfp) { - if (nhfp) { - nhfp->fd = -1; - nhfp->mode = COUNTING; - nhfp->structlevel = FALSE; - nhfp->fieldlevel = FALSE; - nhfp->addinfo = FALSE; - nhfp->bendian = IS_BIGENDIAN(); - nhfp->fpdef = (FILE *) 0; - nhfp->fplog = (FILE *) 0; - nhfp->fpdebug = (FILE *) 0; - nhfp->count = 0; - nhfp->eof = FALSE; - nhfp->fnidx = 0; - } + nhfp->fd = -1; + nhfp->mode = COUNTING; + nhfp->structlevel = FALSE; + nhfp->fieldlevel = FALSE; + nhfp->addinfo = FALSE; + nhfp->bendian = IS_BIGENDIAN(); + nhfp->fpdef = (FILE *) 0; + nhfp->fplog = (FILE *) 0; + nhfp->fpdebug = (FILE *) 0; + nhfp->count = 0; + nhfp->eof = FALSE; + nhfp->fnidx = 0; } static NHFILE * @@ -534,12 +533,10 @@ free_nhfile(NHFILE *nhfp) void close_nhfile(NHFILE *nhfp) { - if (nhfp) { - if (nhfp->structlevel && nhfp->fd != -1) - (void) nhclose(nhfp->fd), nhfp->fd = -1; - zero_nhfile(nhfp); - free_nhfile(nhfp); - } + if (nhfp->structlevel && nhfp->fd != -1) + (void) nhclose(nhfp->fd), nhfp->fd = -1; + zero_nhfile(nhfp); + free_nhfile(nhfp); } void diff --git a/sys/unix/hints/include/compiler.370 b/sys/unix/hints/include/compiler.370 index 36eff25e7..34fb1185d 100755 --- a/sys/unix/hints/include/compiler.370 +++ b/sys/unix/hints/include/compiler.370 @@ -63,6 +63,7 @@ CFLAGS+=-Wimplicit-int CFLAGS+=-Wmissing-prototypes CFLAGS+=-Wold-style-definition CFLAGS+=-Wstrict-prototypes +CFLAGS+=-Wnonnull #detection of clang vs gcc CCISCLANG := $(shell echo `$(CC) --version` | grep clang)