/*
   DoorLib header file
   ===================


   ArcBBS SWI number definitions
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
#define ARCbbsDoors_ReadStatus    0x41040
#define ARCbbsDoors_WriteStatus   0x41041
#define ARCbbsDoors_SendRequest   0x41042
#define ARCbbsDoors_GetReply      0x41043
#define ARCbbsDoors_InputStatus   0x41046
#define ARCbbsDoors_InputRead     0x41047
#define ARCbbsDoors_OutputStatus  0x41048
#define ARCbbsDoors_OutputWrite   0x41049
#define ARCbbsDoors_ClearInput    0x4104A
#define ARCbbsDoors_ClearOutput   0x4104B


/*
   Some other definitions
   ~~~~~~~~~~~~~~~~~~~~~~
*/
#define TRUE  1
#define FALSE 0

/* For 'drawbox' */
#define BS_DOUBLE_OUTLINE   1
#define BS_SINGLE_OUTLINE   2
#define BS_ASCII_OUTLINE    3
#define BS_NO_OUTLINE       4
#define BS_BOX_UNFILLED     0
#define BS_BOX_FILLED       1

/* Colours for screen handling routines */
/* First colour set indicates no change to current intensity */
#define BS_BLACK            0
#define BS_RED              1
#define BS_GREEN            2
#define BS_YELLOW           3
#define BS_BLUE             4
#define BS_MAGENTA          5
#define BS_CYAN             6
#define BS_WHITE            7
/* Second colour set switches to high intensity */
#define BS_BOLD_BLACK      10
#define BS_BOLD_RED        11
#define BS_BOLD_GREEN      12
#define BS_BOLD_YELLOW     13
#define BS_BOLD_BLUE       14
#define BS_BOLD_MAGENTA    15
#define BS_BOLD_CYAN       16
#define BS_BOLD_WHITE      17
/* Third colour set switches to low intensity. As a side effect it will
   clear the background colour too */
#define BS_NORMAL_BLACK    20
#define BS_NORMAL_RED      21
#define BS_NORMAL_GREEN    22
#define BS_NORMAL_YELLOW   23
#define BS_NORMAL_BLUE     24
#define BS_NORMAL_MAGENTA  25
#define BS_NORMAL_CYAN     26
#define BS_NORMAL_WHITE    27
/* Third colour set switches to light (faint) intensity - this is
   not supported on ALL terminals. */
#define BS_LIGHT_BLACK     30
#define BS_LIGHT_RED       31
#define BS_LIGHT_GREEN     32
#define BS_LIGHT_YELLOW    33
#define BS_LIGHT_BLUE      34
#define BS_LIGHT_MAGENTA   35
#define BS_LIGHT_CYAN      36
#define BS_LIGHT_WHITE     37
/* The last set is a grouping off effects. They can be used in repeated
   calls to screen_colour(), but not in things like the drawbox routine. */
#define BS_STANDARD        40  /* Reset terminal colours */
#define BS_BOLD            41  /* Select bold */
#define BS_FLASHING        42  /* Flashing */
#define BS_ITALIC          43  /* Italic, non-standard */
#define BS_UNDERLINE       44  /* Underline, non-standard */
#define BS_LIGHT           45  /* Light, non-standard */


/*
   Structures
   ~~~~~~~~~~
*/
struct bs_userdatum_type0
{
   int  bs_usernumber;
   int  bs_firstlogon;
   int  bs_lastlogon;
   int  bs_mailwaiting;
   int  bs_mailstart;
   int  bs_mailend;
   int  bs_highestmessage;
   int  bs_highestfile;
   int  bs_terminaltype;
   int  bs_messageflags;
   int  bs_fileflags;
   int  bs_userflags;
   int  bs_updownratio;
   int  bs_userlevel;
   int  bs_numberoflogons;
   int  bs_numberofuploads;
   int  bs_numberofdownloads;
   int  bs_timeperday;
   int  bs_timeusedtoday;
   int  bs_fidocredit;
   int  bs_fidoflags;
   int  bs_messagearea;
   int  bs_filearea;
   int  bs_outboxstart;
   int  bs_outboxend;
   int  bs_outboxcount;
   char bs_areasjoined[64];
   int  bs_timeusedthiscall;
   int  bs_timeleftthiscall;
   int  bs_timeallocthiscall;
   int  bs_connectspeed;
   char bs_arq[1];
   char bs_callrate[1];
   char bs_screenlength[1];
   char bs_username[31];
   char bs_remainder[38];
};
struct bs_userdatum_type1
{
   char bs_username[31];
   char bs_realname[31];
   char bs_address1[31];
   char bs_address2[31];
   char bs_address3[31];
   char bs_address4[31];
   char bs_postcode[11];
   char bs_telephone[11];
   char bs_remainder[48];
};


/*
   Function definitions
   ~~~~~~~~~~~~~~~~~~~~

   Found in: doorlib112 */
int   doors_scanconnect(int);
int   doors_scanconnecttimed(int, int);
int   doors_getbyte(int);
int   doors_getbytef(int, int);
int   doors_byteswaiting(int);
int   doors_bytesfree(int);
int   doors_checkactive(int);
void  doors_tx(int, char *);
void  doors_txf(int, char *, ...);
void  doors_txesc(int, char *);
void  doors_close(int);

/* Found in: drawbox */
int   doors_drawbox(int, int, int, int, int, int);

/* Found in: ftp */
int   doors_xmodem1tx(char *, char *);
int   doors_xmodem1rx(char *);

/* Found in: typetextf */
int   doors_typetextfile(int, int, char *);

/* Found in: userdata */
int   doors_isportavailable(int);
struct bs_userdatum_type0 *doors_genericfetchdata_typezero(int);
struct bs_userdatum_type1 *doors_genericfetchdata_typeone(int);
int   doors_checkchatirq(int);
char *doors_getusername(int);
int   doors_gettermtype(int);
int   doors_gettimeleft(int);
int   doors_getuserlevel(int);
char *doors_getrealname(int);

/* Found in: utility */
int   doors_yesno(int, int);
int   doors_scrollrq(int);
char *doors_centretext(char *, int);
void  doors_strfill(char *, int, int);
void  doors_substr(char *, char *, int, int);
char *doors_itoa(int);
char *doors_string(int, int);
void  doors_reset(int);
void  doors_flush(int);
void  doors_inputflush(int);
void  doors_outputflush(int);



/*
   External definitions ... Created by user.
   ~~~~~~~~~~~~~~~~~~~~     ^^^^^^^^^^^^^^^^
*/
extern int  doors_connectedokay;
extern void poll_the_wimp(void);
