#define VERSION "REV_1.112"

/* colors */

enum { RED, GREEN, YELLOW, BLUE, VIOLET, CYAN, WHITE, NORMAL, BOLD, UNDERSCORE,
		BLINK, REVERSE };

/* menus */

enum { MEN_PALETTE, MEN_QUIT, MEN_LOGIN, MEN_SYSOP, MEN_CHAT, MEN_PLUS, MEN_MINUS,
		MEN_HANGUP, MEN_ATA, MEN_BUSY, MEN_TERMINAL, MEN_WINDOW, MEN_KEYBOARD,
		MEN_INPUT, MEN_OUTPUT, MEN_CAPTURE, MEN_PRINTER, MEN_SEND, MEN_RECEIVE,
		MEN_PROTOCOL, MEN_ASCII, MEN_USER1, MEN_USER2, MEN_USER3, MEN_USER4,
		MEN_USER5, MEN_USER6, MEN_USER7, MEN_USER8, MEN_USER9, MEN_USER10 };

#define HOTKEY (2 - User.hotkeys)

/* flags for struct Brett */

#define BFLG_ZENSUR		1  /* Brett steht unter Zensur */
#define BFLG_MAPS			2  /* Brett darf von User (ab-)bestellt werden */
#define BFLG_ABMAPS		4  /* Wenn kein Point => abbestellen bei Server */
#define BFLG_UNLIMITED	8  /* Keine Routing-Limits */

/* special chars */

#define CSI					0x9b
#define ESC					0x1b
#define BACK_SPACE		0x08
#define LINE_FEED			0x0a
#define CARRIAGE_RETURN	0x0d
#define FORM_FEED			0x0c
#define BELL				0x07
#define CTRL_K				11
#define CTRL_L				12
#define CTRL_Q				17
#define CTRL_X				24
#define CTRL_Z				26
#define CTRL_C				3
#define TAB					9
#define DEL					127
#define ACK					6
#define NAK					21

/* csi commands */
#define INSERT_LINE		'L'
#define DELETE_LINE		'M'
#define INSERT_CHAR		'@'
#define DELETE_CHAR		'P'
#define DEL_RO_LINE		'K'

/* other */

#define HELP				?~
#define F1					0~
#define F2					1~
#define F3					2~
#define F4					3~
#define F5					4~
#define F6					5~
#define F7					6~
#define F8					7~
#define F9					8~
#define F10					9~

#define SF1					10~
#define SF2					11~
#define SF3					12~
#define SF4					13~
#define SF5					14~
#define SF6					15~
#define SF7					16~
#define SF8					17~
#define SF9					18~
#define SF10				19~

/**
*       isalpha(c)    non-zero if c is alpha (a-z and A-Z)
*       isupper(c)    non-zero if c is upper case (A-Z)
*       islower(c)    non-zero if c is lower case (a-z)
*       isdigit(c)    non-zero if c is a digit (0 to 9)
*       isalnum(c)    non-zero if c is alpha or digit (a-z A-Z 0-1)
*       isprint(c)    non-zero if c is printable (32-127 , 161-255)
*       iscntrl(c)    non-zero if c is control character (0-31, 128-160)
*       isascii(c)    non-zero if c is ASCII (0-255)
**/

#define isalpha(c)	(((c>='a') && (c<='z')) || ((c>='A') && (c<='Z')))
#define isupper(c)	((c>='A') && (c<='Z'))
#define islower(c)	((c>='a') && (c<='z'))
#define isdigit(c)	((c>='0') && (c<='9'))
#define isalnum(c)	(((c>='a') && (c<='z')) || ((c>='A') && (c<='Z')) || ((c>='0') && (c<='9')))
#define isprint(c)	(((c>=32) && (c<=127)) || ((c>=161) && (c<=255)))
#define iscntrl(c)	(((c>=0) && (c<=31)) || ((c>=128) && (c<=160)))
#define isascii(c)	((c>=0) && (c<=255))

#define toupper(c)	(islower(c)?((c)-('a'-'A')):(c))
#define tolower(c)	(isupper(c)?((c)+('a'-'A')):(c))
#define toascii(c)	((c)&127)

char *strchr (char *, int);
char *strrchr (char *, int);
int strcmp (char *, char *);
char *strcpy (char *, char *);
int strlen (char *);
char *strstr(char *, char *);
void *memcpy (void *, void *, unsigned);

struct Config
{
	char system[41];
	char user[41];
	char text[41];
	char mail[41];
	char pmail[41];
	char bulletin[41];
	char door[41];
	char capture[41];
	char log[41];
	char temp[41];
	char receive[41];
	char scripts[41];

	char device[41];
	LONG unit;
	LONG baud;
	LONG ser_read_size;
	LONG lock_baud;
	LONG dtr_drop;
	LONG rts_cts;
	char init[41];
	char reset[41];
	char busy[41];
	char answer[41];
	char hangup[41];

	char box_name[41];
	char netz_name[41];
	char sysop_name[41];
	char system_passwort[41];
	char fontname[41];
	LONG fontsize;
	LONG priority;
	LONG chat_level;
	LONG bell;
	LONG screen_front;
	LONG backdrop;
	LONG interlaced;

	char fax_command[81];
	char ansi_colors[12][10];

	LONG reserved1;
	LONG reserved2;
	LONG reserved3;

	char reserved4[81];
	char reserved5[81];
	char reserved6[81];
};

struct Status
{
	LONG calls;
	LONG calls_today;
	LONG users;
	LONG users_new;
	LONG b_2400;
	LONG b_9600;
	LONG b_19200;
	LONG online;
	LONG online_today;
	LONG time_on;
	LONG mail_counter;
	LONG mails_today;
	LONG protocol;
	LONG sysop;
	LONG window;

	LONG colors[16];
	char wartung_date[LEN_DATSTRING];

	LONG reserved1;
	LONG reserved2;
	LONG reserved3;

	char reserved4[81];
	char reserved5[81];
	char reserved6[81];
};

struct User
{
	char number[41];

	char alias[41];
	char first_name[41];
	char name[41];
	char street[41];
	char place[41];
	char phone[41];
	char birthday[41];
	char terminal[41];

	char password[41];
	LONG level;

	LONG uploads;
	LONG bytes_upload;
	LONG downloads;
	LONG bytes_download;
	char ud_ratio[21];			/* z.b. 100 : 99 */
	LONG b_ratio;				/* TRUE: UDRatio nach Bytes, FALSE: UD-R nach Anz. */
	LONG ul_first;				/* if TRUE, muss er erst ul, um DL zu koennen */
	LONG ul_already;			/*  "   " , hat er heute schon UL */

	LONG time;
	LONG time_on;
	LONG time_used;
	char time_last[31];
	char time_joined[31];

	LONG calls;
	LONG mails_sent;
	LONG mails_read;
	char vertreter[41];
	LONG chat_requests;

	LONG hotkeys;
	LONG zone;
	LONG lines;

	LONG ansi;
	LONG screenblank;
	LONG partial_scroll;
	LONG amiga;

	LONG protocol;
	LONG editor;
	LONG help_level;	/* novice=1, immediate=2, expert=3 */

	LONG pw_try;
	LONG mail_count;
	LONG file_count;
	LONG time_already;		/* temporary variable */
};

struct Mail
{
	struct Node node;

	char Empfaenger[81];
	char Betreff[81];
	char Absender[81];
	char Datum[21];
	char Pfad[100];
	char MsgId[31];
	char Typ[41];
	char Laenge[11];
	char Filename[31];
};

struct Log
{
	char date[6];
	char in[6];
	char out[6];
	char baud[10];
	char user[131];

	LONG k_uloads;
	LONG k_dloads;
	LONG uloads;
	LONG dloads;
	LONG messages;
	LONG bad_logoff;
	LONG new_user;
	LONG paged_sysop;
	LONG pw_hacking;
	LONG bad_transfers;
};

struct Brett
{
	struct Node node;

	char name[81];
	LONG gruppe;
	LONG flags;
	LONG days;
	LONG mails;
	LONG bytes;
	LONG read_level;
	LONG write_level;
	char comment[81];

	struct List *point_list;
};

struct Protocol
{
	struct Node node;

	char name[41];
	char library[41];
	char options[41];
	LONG batch;
};

struct Line
{
	struct Node node;

	char text[81];
};

struct Point
{
	struct Node node;

	char systemname[41];
	char pointname[81];
	char passwort[41];
	LONG gruppe;
	LONG level;
	char packer[41];
	char entpacker[41];
	LONG protocol;
};

struct Mask
{
	struct Node node;

	STRPTR prompt;
	STRPTR string;
	LONG *value;
	LONG xpos;
	LONG ypos;
	LONG len;
	LONG level;
	struct List *list;
};
