#if __STDC__ || defined(__cplusplus)
#define P_(s) s
#else
#define P_(s) ()
#endif

int insert_byte_opt P_((struct bootp *bp, struct opts *opt, unsigned char tag, unsigned char value));
int insert_ulong_opt P_((struct bootp *bp, struct opts *opt, unsigned char tag, unsigned long value));
int insert_ushort_opt P_((struct bootp *bp, struct opts *opt, unsigned char tag, unsigned short value));
int insert_addrs_opt P_((struct bootp *bp, struct opts *opt, unsigned char tag, struct in_addr *value, int len));
int insert_end_opt P_((struct bootp *bp, struct opts *opt));
int insert_string_opt P_((struct bootp *bp, struct opts *opt, unsigned char tag, char *value, int len));
int insert_str_opt P_((struct bootp *bp, struct opts *opt, unsigned char tag, char *value));
int insert_generic_opt P_((struct bootp *bp, struct opts *opt, unsigned char tag, byte *data, int data_len));
void * smalloc P_((unsigned nbytes));
int change_eid P_((int uid_or_gid, uid_t uid, gid_t gid));
FILE * open_for_writing P_((char *filename));

#ifndef max
#define max(x, y) (((x) > (y)) ? (x) : (y))
#endif

/* for our bitvector package */
typedef unsigned int32 * Bitvector;
int size_of_bitvector_for_n_bits P_((int num_bits));
Bitvector create_bitvector P_((int num_bits));
void destroy_bitvector P_((Bitvector vector));
void init_bitvector P_((Bitvector vector, int num_bits));
void set_bitvector P_((Bitvector vector, int i));
void clear_bitvector P_((Bitvector vector, int i));
int get_bitvector P_((Bitvector vector, int i));
#define BITVECTOR__BITS_PER_WORD 32
#define BITVECTOR__BYTES_PER_WORD (BITVECTOR__BITS_PER_WORD/8)
#define BITVECTOR__MASK 0x1F
#define BITVECTOR__SHIFT 5
#define BITVECTOR__BYTES_PER_VECTOR_OF_BITSIZE(n)  (((n / BITVECTOR__BITS_PER_WORD) * BITVECTOR__BYTES_PER_WORD) + 1)

void sleep_us P_((unsigned int n_usecs));


#undef P_
