pennmush/game/data/
pennmush/game/log/
pennmush/game/save/
pennmush/game/txt/evt/
pennmush/game/txt/nws/
pennmush/os2/
pennmush/po/
pennmush/win32/msvc.net/
pennmush/win32/msvc6/
/* mail.h - header for Javelin's extended mailer */

#ifndef _EXTMAIL_H
#define _EXTMAIL_H
/* Some of this isn't implemented yet, but heralds the future! */
#define M_MSGREAD       0x0001
#define M_UNREAD        0x0FFE
#define M_CLEARED       0x0002
#define M_URGENT        0x0004
#define M_MASS          0x0008
#define M_EXPIRE        0x0010
#define M_RECEIPT       0x0020
#define M_TAG           0x0040
#define M_FORWARD       0x0080
/* 0x0100 - 0x0F00 reserved for folder numbers */
#define M_FMASK         0xF0FF
#define M_ALL           0x1000	/* In mail_selector, all msgs in all folders */
#define M_MSUNREAD      0x2000	/* Mail selectors */
#define M_REPLY         0x4000
#define M_FOLDER        0x8000	/* In mail selector, all msgs in cur folder */

#define MAX_FOLDERS     15
#define FOLDER_NAME_LEN (BUFFER_LEN / 30)
#define FolderBit(f) (256 * (f))
#define Urgent(m)       (m->read & M_URGENT)
#define Mass(m)         (m->read & M_MASS)
#define Expire(m)       (m->read & M_EXPIRE)
#define Receipt(m)      (m->read & M_RECEIPT)
#define Forward(m)      (m->read & M_FORWARD)
#define Reply(m)        (m->read & M_REPLY)
#define Tagged(m)       (m->read & M_TAG)
#define Folder(m)       ((m->read & ~M_FMASK) >> 8)
#define Read(m)         (m->read & M_MSGREAD)
#define Cleared(m)      (m->read & M_CLEARED)
#define Unread(m)       (!Read(m))
#define All(ms)         (ms.flags & M_ALL)
#define AllInFolder(ms) (ms.flags & M_FOLDER)
#define MSFolder(ms)    ((int)((ms.flags & ~M_FMASK) >> 8U))

typedef unsigned int mail_flag;

/** A mail selection.
 * This structure maintains information about a selected list of
 * messages. Messages can be selected in several ways.
 */
struct mail_selector {
  int low;		/**< Minimum message number */
  int high;		/**< Maximum message number */
  mail_flag flags;	/**< Message flags */
  dbref player;		/**< Message sender's dbref */
  int days;		/**< Target message age in days */
  int day_comp;		/**< Direction of comparison to target age */
};

typedef int folder_array[MAX_FOLDERS + 1];
#define FA_Init(fa,x) \
for (x = 0; x <= MAX_FOLDERS; x++) \
fa[x] = 0

#define SUBJECT_COOKIE  '/'
#define SUBJECT_LEN     60

#define MDBF_SUBJECT    0x1
#define MDBF_ALIASES    0x2

/* Database ends with ***END OF DUMP*** not *** END OF DUMP *** */
#define MDBF_NEW_EOD    0x4

/* Database contains sender ctimes */
#define MDBF_SENDERCTIME        0x8

/* From extmail.c */
extern struct mail *maildb;
extern void set_player_folder(dbref player, int fnum);
extern void add_folder_name(dbref player, int fld, const char *name);
extern struct mail *find_exact_starting_point(dbref player);
extern void check_mail(dbref player, int folder, int silent);
extern int dump_mail(FILE * fp);
extern int load_mail(FILE * fp);
extern void mail_init(void);
extern int mdb_top;
extern void do_mail(dbref player, char *arg1, char *arg2);
enum mail_stats_type { MSTATS_COUNT, MSTATS_READ, MSTATS_SIZE };
extern void do_mail_stats(dbref player, char *name, enum mail_stats_type full);
extern void do_mail_debug(dbref player, const char *action, const char *victim);
extern void do_mail_nuke(dbref player);
extern void do_mail_change_folder(dbref player, char *fld, char *newname);
extern void do_mail_unfolder(dbref player, char *fld);
extern void do_mail_list(dbref player, const char *msglist);
extern void do_mail_read(dbref player, char *msglist);
extern void do_mail_clear(dbref player, const char *msglist);
extern void do_mail_unclear(dbref player, const char *msglist);
extern void do_mail_purge(dbref player);
extern void do_mail_file(dbref player, char *msglist, char *folder);
extern void do_mail_tag(dbref player, const char *msglist);
extern void do_mail_untag(dbref player, const char *msglist);
extern void do_mail_fwd(dbref player, char *msglist, char *tolist);
extern void do_mail_send
  (dbref player, char *tolist, char *message, mail_flag flags,
   int silent, int nosig);

/* From bsd.c */
extern struct mail *desc_mail(dbref player);
extern void desc_mail_set(dbref player, struct mail *mp);
extern void desc_mail_clear(void);

#endif				/* _EXTMAIL_H */