oextra obj.h follow-up (trunk only)

Just add some notes to obj.h around oextra.
This commit is contained in:
nethack.allison
2006-04-15 13:09:57 +00:00
parent 5501922aa8
commit e7948e258c

View File

@@ -1,4 +1,4 @@
/* SCCS Id: @(#)obj.h 3.5 2006/04/14 */
/* SCCS Id: @(#)obj.h 3.5 2006/04/15 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -14,8 +14,9 @@ union vptrs {
struct monst *v_ocarry; /* point back to carrying monst */
};
/***
** oextra -- collection of all object extensions
/****
*** oextra -- collection of all object extensions
** (see the note at the bottom of this file before adding oextra fields)
*/
struct oextra {
char *oname; /* ptr to name of object */
@@ -113,6 +114,12 @@ struct obj {
struct oextra *oextra; /* pointer to oextra struct */
};
#define newobj() (struct obj *)alloc(sizeof(struct obj))
/***
** oextra referencing and testing macros
*/
#define ONAME(o) ((o)->oextra->oname)
#define OMID(o) ((o)->oextra->omid)
#define OMONST(o) ((o)->oextra->omonst)
@@ -125,8 +132,6 @@ struct obj {
#define has_olong(o) ((o)->oextra && OLONG(o))
#define has_omailcmd(o) ((o)->oextra && OMAILCMD(o))
#define newobj() (struct obj *)alloc(sizeof(struct obj))
/* Weapons and weapon-tools */
/* KMH -- now based on skill categories. Formerly:
* #define is_sword(otmp) (otmp->oclass == WEAPON_CLASS && \
@@ -317,4 +322,46 @@ struct obj {
#define CONTAINED_TOO 0x1
#define BURIED_TOO 0x2
/*
* Notes for adding new oextra structures:
*
* 1. Add the structure definition and any required macros in an appropriate
* header file that precedes this one.
* 2. Add a pointer to your new struct to the oextra struct in this file.
* 3. Add a referencing macro at the bottom of this file after the mextra
* struct (see ONAME, OMONST, OMIN, OLONG, or OMAILCMD for examples).
* 4. Add a testing macro after the set of referencing macros
* (see has_oname(), has_omonst(), has_omin(), has_olong(),
* has_omailcmd() for examples).
* 5. Create a newXX(otmp) function and possibly a free_XX(otmp) function
* in an appropriate new or existing source file and add a prototype
* for it to include/extern.h. The majority of these are currently
* located in mkobj.c for convenience.
*
* void FDECL(newXX, (struct obj *));
* void FDECL(free_XX, (struct obj *));
*
* void
* newxx(otmp)
* struct obj *otmp;
* {
* if (!otmp->mextra) otmp->oextra = newoextra();
* if (!XX(otmp)) {
* XX(otmp) = (struct XX *)alloc(sizeof(struct xx));
* (void) memset((genericptr_t) XX(otmp),
* 0, sizeof(struct xx));
* }
* }
*
* 6. Adjust size_obj() in src/cmd.c appropriately.
* 7. Adjust dealloc_oextra() in src/mkobj.c to clean up
* properly during obj deallocation.
* 8. Adjust copy_oextra() in src/mkobj.c to make duplicate
* copies of your struct or data onto another obj struct.
* 9. Adjust restobj() in src/restore.c to deal with your
* struct or data during a restore.
* 10. Adjust saveobj() in src/save.c to deal with your
* struct or data during a save.
*/
#endif /* OBJ_H */