#ifndef DEF_H
#define DEF_H

#include "Desk.Core.h"

#ifdef MEMORY_DEBUG

#include "memleak.h"
/*#define free(x)*/
#endif

#define MAX_CONNECTIONS 16
#define MAX_EVENT_HANDLERS MAX_CONNECTIONS*4
#define STRING_BUFFER_SIZE 1024

/* from winsock.h - also used in RISC OS code */
#define INVALID_SOCKET  /*(SOCKET)*/(~0)
/*#define INVALID_SOCKET -1*/

#define NO_OSERROR NULL
#define ERROR_BASE 0x123400

#define  UNUSED(x)              (x = x)

#define LOG_ERROR          0
#define LOG_WARNING        30
#define LOG_INIT           60
#define LOG_INFO           70
#define LOG_CONNECTION     100
#define LOG_CONNECTION_LOW 130
#define LOG_DEBUG_HIGH     160
#define LOG_DEBUG_LOW      200
#define LOG_DEBUG_VERYLOW  230
#define LOG_DEBUG_TRACE    250
/*#define SYSLOG(n,s) xsyslogf_irq(SYSLOG_FILE,n,"%s\n",s)*/
#define SYSLOG_FILE "SSHProxy"
#define SYSLOG_ENTRY(proc) xsyslogf(SYSLOG_FILE, LOG_DEBUG_TRACE, "entering %s\n",proc)

#define SYSLOG_EXIT(proc) xsyslogf(SYSLOG_FILE, LOG_DEBUG_TRACE, "exiting %s\n",proc)



#define system_exit(v) exit(v)
#undef exit
#define exit(v) {xsyslogf(SYSLOG_FILE,LOG_ERROR,"Exit called with %d from %s line %d",v,__FILE__,__LINE__); system_exit(v);}

#define EVENT_PASSON        Desk_FALSE
#define EVENT_CLAIM         Desk_TRUE

#define TELNET_IAC          255
#define TELNET_ESC          27
#define TELNET_DONT         254
#define TELNET_DO           253
#define TELNET_WONT         252
#define TELNET_WILL         251
#define TELNET_SB           250
#define TELNET_GA           249
#define TELNET_EL           248
#define TELNET_EC           247
#define TELNET_AYT          246
#define TELNET_AO           245
#define TELNET_IP           244
#define TELNET_BRK          243
#define TELNET_DM           242
#define TELNET_NOP          241
#define TELNET_SE           240

#define TELNET_ECHO                1
#define TELNET_SUPPRESSGOAHEAD     3
#define TELNET_TERMINALTYPE        24
#define TELNET_WINDOWSIZE          31

#define TELOPT_BINARY	0	/* 8-bit data path */
#define TELOPT_ECHO	1	/* echo */
#define	TELOPT_RCP	2	/* prepare to reconnect */
#define	TELOPT_SGA	3	/* suppress go ahead */
#define	TELOPT_NAMS	4	/* approximate message size */
#define	TELOPT_STATUS	5	/* give status */
#define	TELOPT_TM	6	/* timing mark */
#define	TELOPT_RCTE	7	/* remote controlled transmission and echo */
#define TELOPT_NAOL 	8	/* negotiate about output line width */
#define TELOPT_NAOP 	9	/* negotiate about output page size */
#define TELOPT_NAOCRD	10	/* negotiate about CR disposition */
#define TELOPT_NAOHTS	11	/* negotiate about horizontal tabstops */
#define TELOPT_NAOHTD	12	/* negotiate about horizontal tab disposition */
#define TELOPT_NAOFFD	13	/* negotiate about formfeed disposition */
#define TELOPT_NAOVTS	14	/* negotiate about vertical tab stops */
#define TELOPT_NAOVTD	15	/* negotiate about vertical tab disposition */
#define TELOPT_NAOLFD	16	/* negotiate about output LF disposition */
#define TELOPT_XASCII	17	/* extended ascic character set */
#define	TELOPT_LOGOUT	18	/* force logout */
#define	TELOPT_BM	19	/* byte macro */
#define	TELOPT_DET	20	/* data entry terminal */
#define	TELOPT_SUPDUP	21	/* supdup protocol */
#define	TELOPT_SUPDUPOUTPUT 22	/* supdup output */
#define	TELOPT_SNDLOC	23	/* send location */
#define	TELOPT_TTYPE	24	/* terminal type */
#define	TELOPT_EOR	25	/* end or record */
#define	TELOPT_TUID	26	/* TACACS user identification */
#define	TELOPT_OUTMRK	27	/* output marking */
#define	TELOPT_TTYLOC	28	/* terminal location number */
#define	TELOPT_3270REGIME 29	/* 3270 regime */
#define	TELOPT_X3PAD	30	/* X.3 PAD */
#define	TELOPT_NAWS	31	/* window size */
#define	TELOPT_TSPEED	32	/* terminal speed */
#define	TELOPT_LFLOW	33	/* remote flow control */
#define TELOPT_LINEMODE	34	/* Linemode option */
#define TELOPT_XDISPLOC	35	/* X Display Location */
#define TELOPT_OLD_ENVIRON 36	/* Old - Environment variables */
#define	TELOPT_AUTHENTICATION 37/* Authenticate */
#define	TELOPT_ENCRYPT	38	/* Encryption option */
#define TELOPT_NEW_ENVIRON 39	/* New - Environment variables */
#define	TELOPT_EXOPL	255	/* extended-options-list */

#define	TELQUAL_IS	0	/* option is... */
#define	TELQUAL_SEND	1	/* send option */
#define	TELQUAL_INFO	2	/* ENVIRON: informational version of IS */

#define TELNET_OPTION_COUNT     9  /* number of telnet options we're interested in */

#define CVSID(idstring) static const char *cvsid_string = idstring

#endif
