/*
 *  MB.H - 5/10/87 - Definitions for MailBox.
 */

/*
 *  System specific includes.
 *  IBM PC, Microsoft C
 *  UNIX BSD 4,2
 */


#include <stdio.h>
#include <fcntl.h>
#include <ctype.h>
#include <string.h>
#include <malloc.h>

#include "mbcmpsw.h"
#if (XENIX|UNIX|BSD)
#define O_BINARY 0
#endif

#if (XENIX|UNIX|BSD)
#define XEPARSE() xeparse()
#else
#define XEPARSE() pparse()  /* CHANGED SMC 5-Feb. */
#endif

#if SHARE		/* AY-881106 */
#define SETMFHS() setmfhs()
#define DB_LOCK(arg) db_lock(arg)
#define DB_UNLOCK(arg) db_unlock(arg)
#else
#define SETMFHS()
#define DB_LOCK(arg)
#define DB_UNLOCK(arg)
#endif

#ifdef DEBUG
#define DBGMSG(args) fprintf args
#else
#define DBGMSG(args)
#endif

typedef unsigned char  byte;
typedef unsigned short word;

/*
 *  Sizes of things.
 */

#define RECSIZE  128

#define ln_call  6  /* # chars in a callsign	*/
#define ln_callp 9  /* # chars in callsign+ssid */
#define ln_date  6  /* # chars in date		*/
#define ln_time  4  /* # chars in time		*/
#define maxflds  16

/*
 *  MailBox includes.
 */

#include "mbmail.h"
#include "mbuser.h"
#include "mbport.h"
#include "mbbid.h"

/*
 *  Cosmetics.
 */

#define is   ==
#define isnt !=
#define and  &&
#define or   ||
#define not   !

#define setbit	|=
#define clrbit	&= ~
#define flipbit ^=

#define true   1
#define false  0
/* #define match  !strcmp
#define matchn !strncmp */
#define match(s1,s2) (*(s1) == *(s2) && strcmp(s1, s2) == 0)
#define matchn(s1,s2,n) (*(s1) == *(s2) && strncmp(s1,s2,n) == 0)

#define pmode 438  /* Permissions for creat() */
#define TRUE   1
#define FALSE  0

/*
 *  Some character values.
 */

#define ctl_c  '\03'
#define ctl_g  '\07'
#define ctl_v  '\026'
#define ctl_w  '\027'
#define cpmeof '\032'
#define del	0x7f

/*
 *  Index values for standard TNC commands.
 */

#define t_con  0  /* Connect on */
#define t_coff 1  /* Connect off */
#define t_mon  2  /* Monitor on */
#define t_moff 3  /* Monitor off */

#define cmdlen	 80
#define linelen 256

/*	extern char scmd[24]; AY-881105 */
extern char scmd[linelen];

extern word filesize;

/*
 *  Directory path stuff.
 */

#define dp_dnload 1  /* Ok to download */
#define dp_upload 2  /* Ok to upload   */

typedef struct dirpath_s
{
  char *name;		   /* Name of this directory path */
  char *path;		   /* The path or device spec */
  struct dirpath_s *next;  /* Pointer to next path */
  byte flags;		   /* Flag bits */
  char id;		   /* Path identifier */
} DIRPATH;

extern DIRPATH *dphd, *getdir();

/*
 *  Directory entry stuff.
 */

typedef struct
{
  word size;	/* Device size, in k */
  word block;	/* Device block size */
  word free;	/* Device free space, in k */
} DIRDEF;

typedef struct
{
  char name[14];  /* File name */
  short size;	  /* File size, in k */
} DIRENT;

/*
 *  Scratch area. Used by directory listing commands,
 *  and by user file and message file backup.
 *  Also used hither, and yon.
 */

typedef union
{
  char scr[1];
  DIRENT dirent[1];
} TMP;

extern int scrmax, dirmax;
extern TMP *tmp;

/*
 *  Date and time stuff.
 */

extern char l_date[ln_date + 1];
extern char l_time[ln_time + 1];

/*
 *  File names.
 */

extern char *helpfile, *infofile, *fwdfile, *lgfile, *monfile;

extern char *hrdfile;
extern int  hrdmax;

/*
 *  Error / status messages.
 */

extern char *mcant, *mfind, *mprot, *mexst, *mtime, *mwhat;
extern char *mdone, *mnport, *mndir, *mnfile, *mnmsg, *minuse;
/* Expanded by A.Yamada */
extern char *bbsonly_msg, *tomanydigi_msg, rliversion[], *noneed,
            *bid_inuse, *can_t_do, *shortprompt, *dorfwd, *bidprompt,
	        *bid_toolong, *abortby_usr, *nomail, *oksndmark, mblmode[],
            *meantime;
extern int  check_kanji_title;
#if	(XENIX|UNIX|BSD)
extern char *mailer;          /* Mailer prog name with opt */
extern char *mailingfile;     /* Interface file Xenix & MB */
extern char *to_file;         /* File name of To: feeld data base */
extern char *at_file;         /* File name of At: feeld data base */
extern word kill_after_m;     /* Flag */
#else
extern int  trace_tnc;        /* TNC TRACE YES/NO ADD SMC */
#endif

/*
 *  Misc text.
 */

extern char *ver;

extern char *talkm1, *talkm2, *talkm3, *talkm4;
extern char *bbmenu, *symenu, *rmenus, *gmenus, *lmenus, *mumsg;
extern char *pausemsg, *fm, *motd, *reqmsg;
extern char *qth;

#define num_gm 7
extern char *gm[num_gm];

extern char achar, rchar, tchar, wchar;

/*
 *  System parameters.
 */

#define s_page	   0x0001   /* Page sysop ?		       */
#define s_files    0x0002   /* Messages in files?	       */
#define s_mchange  0x0004   /* Mail file changed?	       */
#define s_kill	   0x0008   /* Kill all msgs after forward     */
#define s_fkill    0x0010   /* Kill F msgs after forward       */
#define s_svc	   0x0020   /* Generate service message on KT  */
#define s_log_on   0x0040   /* Logging enabled		       */
#define s_log_gate 0x0080   /* Log gateway events	       */
#define s_log_file 0x0100   /* Log file events		       */
#define s_log_msg  0x0200   /* Log message events	       */
#define s_log_loc  0x0400   /* Log stuff happens local console */
#define s_nobbs    0x0800   /* Remove @ BBS if @ SYSOP	       */
#define s_cmd	   0x1000   /* Delayed remote sysop cmd to do  */
#define s_edtfc    0x2000   /* Edit traffic command enabled?   */
#define s_dd	   0x4000   /* DoubleDOS active, give slice    */

extern word s_param;
