#define FL_INIT(l, f) (l) = (f)
#define FL_SET(l, f) ((l) |= (f))
#define FL_CLR(l, f) ((l) &= ~(f))
#define FL_ISSET(l, f) ((l) & (f))
#define LF_INIT(f) FL_INIT(flags, (f))
#define LF_SET(f) FL_SET(flags, (f))
#define LF_CLR(f) FL_CLR(flags, (f))
#define LF_ISSET(f) FL_ISSET(flags, (f))
#define F_INIT(p, f) FL_INIT((p)->flags, (f))
#define F_SET(p, f) FL_SET((p)->flags, (f))
#define F_CLR(p, f) FL_CLR((p)->flags, (f))
#define F_ISSET(p, f) FL_ISSET((p)->flags, (f))
#define COL_OFF(c, stop) ((stop) - ((c) % (stop)))
typedef enum { B_NONE, B_OFF, B_READ, B_RECOVER, B_SEARCH, B_WRITE } bmsg_t;
enum nresult { NUM_ERR, NUM_OK, NUM_OVER, NUM_UNDER };
#define NNFITS(min, cur, add) \
(((long)(min)) - (cur) <= (add))
#define NPFITS(max, cur, add) \
(((unsigned long)(max)) - (cur) >= (add))
#define NADD_SLONG(v1, v2) \
((v1) < 0 ? \
((v2) < 0 && \
NNFITS(LONG_MIN, (v1), (v2))) ? NUM_UNDER : NUM_OK : \
(v1) > 0 ? \
(v2) > 0 && \
NPFITS(LONG_MAX, (v1), (v2)) ? NUM_OK : NUM_OVER : \
NUM_OK)