
/*
 * bboards.h -- definition of a BBoard structure
 *
 * $Id$
 */

#define	BBOARDS	"bboards"	/* name in /etc/passwd               */
#define	BBDB	"BBoards"	/* file in BBOARDS' home directory   */
#define	BBMODE	0644		/* default BBoards mode              */
#define	DISTADR	"dist-"		/* prefix for distribution addresses */

#ifdef POP
# define POPUID	"pop"		/* name in /etc/passwd                  */
# define POPDB	"POP"		/* file in POPUID's home directory      */
# define POMODE	0600		/* default POP subscriber maildrop mode */
#endif /* POP */

#define	BB_NULL    0x0000
#define	BB_ARCH    0x0007	/* archive policy              */
#define BB_ASAV    0x0001	/* save in archives/ directory */
#define	BB_AREM    0x0002	/* remove without saving       */
#define BB_INVIS   0x0010	/* invisible to bbc            */
#define	BB_REMOTE  0x0020	/* remote to bbc               */
#define	BB_SEEN	   0x0040	/* seen by bbc                 */
#define	BBITS      "\020\01ARCHIVE\02REMOVE\05INVIS\06REMOTE\07SEEN"

struct bboard {
    char  *bb_name;		/* name of the bboard      */
    char **bb_aka;		/* aliases for the bboards */

    char  *bb_file;		/* file it resides in            */
    char  *bb_archive;		/* file where archives reside    */
    char  *bb_info;		/* file where maxima resides     */
    char  *bb_map;		/* file where binary map resides */

    char  *bb_passwd;		/* password for it       */
    char **bb_leader;		/* list of local leaders */

    char  *bb_addr;		/* network address                      */
    char  *bb_request;		/* network address for requests         */
    char  *bb_relay;		/* host acting as relay in local domain */
    char **bb_dist;		/* distribution list                    */

    unsigned int bb_flags;	/* various flags */

    union {			/* unassigned    */
	unsigned int un_count;
	long         un_mtime;
    } bb_un;
    
    unsigned int bb_maxima;	/* highest BBoard-Id in it      */
    char *bb_date;		/* date that maxima was written */

    struct bboard *bb_next;	/* unassigned */
    struct bboard *bb_link;	/* unassigned */
    struct bboard *bb_chain;	/* unassigned */
};

#define	bb_count bb_un.un_count
#define	bb_mtime bb_un.un_mtime

/* flags for setbbent() */
#define	SB_NULL	0x0000
#define	SB_STAY	0x0001		/* stay open between calls */
#define	SB_FAST	0x0002		/* fast parse of file      */


/*
 * prototypes
 */
int setbbfile (char *, int);
int setbbinfo (char *, char *, int);
int setpwinfo (struct passwd *, char *, int);
int setbbent (int);
int endbbent (void);
long getbbtime (void);
struct bboard *getbbent (void);
struct bboard *getbbnam (char *);
struct bboard *getbbaka (char *);
static void BBread (void);
int ldrbb (struct bboard *);
int ldrchk (struct bboard *);
struct bboard *getbbcpy (struct bboard *);
int getbbdist (struct bboard  *, int (*)());
char *getbberr (void);
void make_lower (char *, char *);

