#ifndef _C6TERM_H
#define _C6TERM_H

#include <errno.h>
#include <syslog.h>

#define C6TERM_VERSION		"0.65.0"

/* --- Global defines ------------------------------------------------------- */

#define NAME            program_invocation_short_name

#undef CDEBUG           /* undef it, just in case */
#undef PDEBUG           /* undef it, just in case */
#ifdef C6_DEBUG
   #define CDEBUG(code) do { code } while (0)
   #ifdef C6_USE_SYSLOG
      #define PDEBUG(fmt, args...) syslog(LOG_DEBUG, "%s[%d]: " fmt "\n", \
                                          __FILE__, __LINE__ , ## args)
   #else
      #define PDEBUG(fmt, args...) fprintf(stderr, "%s:%s[%d]: " fmt "\n", \
                                           NAME, __FILE__, __LINE__ , ## args)
   #endif
#else
   /* not debugging: nothing */
   #define CDEBUG(code)
   #define PDEBUG(fmt, args...)
#endif /* C6_DEBUG */

#undef PINFO            /* undef it, just in case */
#undef PERR             /* undef it, just in case */
#ifdef C6_USE_SYSLOG
   #define PINFO(fmt, args...) syslog(LOG_INFO, fmt "\n" , ## args)
   #define PERR(fmt, args...) syslog(LOG_ERR, fmt "\n" , ## args)
#else
   #define PINFO(fmt, args...) fprintf(stderr, "%s: " fmt "\n", NAME , ## args)
   #define PERR(fmt, args...) fprintf(stderr, "%s: " fmt "\n", NAME , ## args)
#endif

#undef MESSAGE		/* undef it, just in case */
#define MESSAGE(fmt, args...) printf(fmt "\n" , ## args)

/* --- Global variables ----------------------------------------------------- */

extern int status;
#define OFFLINE		1
#define ONLINE		2
#define STEP1		3
#define STEP2		4
#define STEP3		5
#define LOGGED		6
#define DO_PONG		7

extern char user[16+1];
extern char passwd[16+1];
extern char mode;
extern char tonick[16+1];

extern char *host;
extern int port;
extern int sock;

extern char server_key[8];
extern char reordered_key[8];

extern int server_count, client_count;

/* Client status definition bits */
#define CLIENT_ONLINE	0x40
#define MEETING		0x20
#define	BUSY		0x10
#define	NETFRIENDS	0x08
#define	AVAILABLE	0x04
#define	IP_SHOWED	0x01

/* --- Misc functions ------------------------------------------------------- */

extern void reset_status(void);
extern int readn(int fd, void *vptr, int n);
extern int writen(int fd, void *vptr, int n);
extern int unix_style_conv(char *string, int *argc, char ***argv);
extern char *escape(char *str);
extern char *unescape(char *str);

/* --- Encoding functions --------------------------------------------------- */

extern void nickpass_encode(unsigned char *StrCode, unsigned char *StrDest, int Psw);
extern void reorder_key_server(const unsigned char *unordered, unsigned char *ordered);
extern void packet_encode(unsigned char *dst, unsigned char *src, int len);

/* --- Commands managing functions ------------------------------------------ */

extern void manage_user_command(void);
extern void manage_server_command(void);

#endif   /* _C6TERM_H */

