#ifndef BOOLEAN
#define BOOLEAN short
#endif
#ifndef FALSE
#define FALSE 0
#define TRUE 1
#endif

#ifdef LINUX
#define _MAX_PATH 512
#define _MAX_EXT 6
#define _MAX_DRIVE 6
#define _MAX_DIR 512
#define _MAX_FNAME 512
#endif

typedef unsigned long WINDOW;
typedef unsigned int UNIT_TYPE;
typedef unsigned long ULONG;
typedef unsigned long XVT_ERRMSG;
typedef unsigned long XVT_ODBC;

typedef wchar_t XVT_WCHAR;
typedef short MENU_TAG;
typedef short CURSOR;
typedef char* DATA_PTR;

#define EOL_SEQ "\015\012"

typedef struct
{
	short top, left, bottom, right;
} RCT;

typedef long XVT_HELP_TID;
typedef unsigned long COLOR;
typedef unsigned long XVT_COLOR_TYPE;
typedef unsigned long XVT_FONT_ATTR_MASK;
typedef unsigned long XVT_FONT_STYLE_MASK;
typedef long PICTURE;
typedef void* XVT_IMAGE;

typedef enum {
XVT_IMAGE_NONE,
XVT_IMAGE_CL8,
XVT_IMAGE_RGB,
XVT_IMAGE_MONO,
} XVT_IMAGE_FORMAT;

#define XVT_FNTID void*
typedef void* XVT_PALETTE;
typedef unsigned long XVT_PALETTE_ATTR;

#define XVT_ESC_GET_PRINTER_INFO 883
#define XVT_ESC_SET_PRINTER_INFO 884

typedef enum e_display_type {
    XVT_DISPLAY_MONO,           /* monochromatic display */
    XVT_DISPLAY_GRAY_16,        /* 16-entry grayscale */
    XVT_DISPLAY_GRAY_256,       /* 256-entry grayscale */
    XVT_DISPLAY_COLOR_16,       /* 16-entry color */
    XVT_DISPLAY_COLOR_256,      /* 256-entry color */
    XVT_DISPLAY_DIRECT_COLOR,   /* full color capabilities */
} XVT_DISPLAY_TYPE;

typedef enum {

XVT_PALETTE_NONE,
XVT_PALETTE_STOCK,
XVT_PALETTE_CURRENT,
XVT_PALETTE_CUBE16,
XVT_PALETTE_CUBE256,
XVT_PALETTE_USER
} XVT_PALETTE_TYPE;

typedef enum {                  /* response from ask fcn */
    RESP_DEFAULT,               /* default button */
    RESP_2,                     /* second button */
    RESP_3,                     /* third button */
} ASK_RESPONSE;

typedef enum {                  /* result from file open & save dialogs */
    FL_BAD,                     /* error occurred */
    FL_CANCEL,                  /* cancel button clicked */
    FL_OK,                      /* OK button clicked */
} FL_STATUS;

typedef struct
{
	char path[_MAX_DIR];
} DIRECTORY;

typedef struct s_mitem {

MENU_TAG tag;	/* menu tag */
char *text;	/* text to appear in menu */
short mkey;	/* mnemonic */
unsigned enabled: 1;	/* enabled? */
unsigned checked: 1;	/* checked? */
unsigned checkable: 1;	/* checkable? */
unsigned separator: 1;	/* separator? */
struct s_mitem *child;	/* pointer to submenu */
} MENU_ITEM;

typedef enum e_popup_alignment { 
XVT_POPUP_CENTER, 
XVT_POPUP_LEFT_ALIGN, 
XVT_POPUP_RIGHT_ALIGN, 
XVT_POPUP_OVER_ITEM 
} XVT_POPUP_ALIGNMENT;

#define SZ_FNAME _MAX_FNAME

typedef struct {	/* file specification */
DIRECTORY dir;	/* directory */
char type[6];	/* file type/extension */
char name[SZ_FNAME];	/* filename */
char creator[6];	/* file creator */
} FILE_SPEC;

typedef struct
{
	void* pr;
} PRINT_RCD;

typedef struct
{
	short v, h;
} PNT;

typedef struct { char* str; long data; void* next; } SLIST_ITEM;
typedef SLIST_ITEM* SLIST_ELT;

typedef struct { SLIST_ELT head; long count; } xvtList;
typedef xvtList* SLIST;

typedef enum {	/* drawing (transfer) mode */
M_COPY,
M_OR,
M_XOR,
M_CLEAR,
M_NOT_COPY,
M_NOT_OR,
M_NOT_XOR,
M_NOT_CLEAR
} DRAW_MODE;

typedef enum e_pen_style {	/* pen style */
P_SOLID,	/* solid */
P_DOT,	/* dotted line */
P_DASH	/* dashed line */
} PEN_STYLE;

typedef enum {
PAT_NONE,	/* no pattern */
PAT_HOLLOW,	/* hollow */
PAT_SOLID,	/* solid fill */
PAT_HORZ,	/* horizontal lines */
PAT_VERT,	/* vertical lines */
PAT_FDIAG,	/* diagonal lines -- top-left to bottom-right */
PAT_BDIAG,	/* diagonal lines -- top-right to bottom-left */
PAT_CROSS,	/* horizontal and vertical crossing lines */
PAT_DIAGCROSS,	/* diagonal crossing lines */
PAT_RUBBER,	/* rubber banding */
PAT_SPECIAL
} PAT_STYLE;

typedef struct {	/* color pen tool */
short width;	/* width */
PAT_STYLE pat;	/* pattern */
PEN_STYLE style;	/* style */
COLOR color;	/* color */
} CPEN;

typedef struct
{
	PAT_STYLE pat;
	COLOR color;
}	CBRUSH;

typedef struct {	/* color drawing tools */
CPEN pen;	/* color pen */
CBRUSH brush;	/* color brush */
DRAW_MODE mode;	/* drawing mode */
COLOR fore_color;	/* foreground color */
COLOR back_color;	/* background color */
BOOLEAN opaque_text;	/* is text opaque*/
} DRAW_CTOOLS;

typedef enum {	/* scrollbar activity */
SC_NONE,	/* nowhere (ignore) */
SC_LINE_UP,	/* one line up */
SC_LINE_DOWN,	/* one line down */
SC_PAGE_UP,	/* previous page */
SC_PAGE_DOWN,	/* next page */
SC_THUMB,	/* thumb repositioning */
SC_THUMBTRACK	/* thumb tracking */
} SCROLL_CONTROL;

typedef enum {	/* type of window */

W_NONE,		/* marker for end of WIN_DEF array */
W_DOC,	/* document window */
W_PLAIN,	/* window with plain border */
W_DBL,	/* window with double border */
W_PRINT,	/* XVT internal use only */
W_TASK,	/* task window */
W_SCREEN,	/* screen window */
W_NO_BORDER,	/* no border */
W_PIXMAP,	/* pixmap */
W_MODAL,	/* modal window */
WD_MODAL,	/* modal dialog */
WD_MODELESS,	/* modeless dialog */
WC_PUSHBUTTON,	/* button control */
WC_RADIOBUTTON,	/* radio button control */
WC_CHECKBOX,	/* check box control */
WC_HSCROLL,	/* horizontal scrollbar control */
WC_VSCROLL,	/* vertical scrollbar control */
//WC_EDIT,	/* edit control */              commentato perche' rompe le scatole
WC_TEXT,	/* static text control */
WC_LBOX,	/* list box control */
WC_LISTBUTTON,	/* button with list */
WC_CHECKBUTTON, /* check button control */
WC_LISTEDIT,	/* edit with field list */
WC_GROUPBOX,	/* group box */
WC_TEXTEDIT,	/* text edit object */
WC_ICON,	 /* icon control */
WO_TE,     /* text edit */
WC_HGAUGE, /* horizontal progress bar */
WC_VGAUGE, /* vertical progress bar */
WC_NOTEBK, /* notebook control */
WC_HTML,   /* HTML control */
WC_TREE,   /* tree view */
WC_OUTLOOKBAR, /* Barra di outlook */
WC_HSLIDER, /* horizontal slider control */
WC_VSLIDER, /* vertical slider control */
} WIN_TYPE;

typedef enum {
SEV_NONE,
SEV_WARNING,
SEV_ERROR,
SEV_FATAL,
} XVT_ERRSEV;

typedef enum {	/* type of scrollbar */

HSCROLL,	/* horizontal */
VSCROLL,	/* vertical */
HVSCROLL,	/* either */
HVGAUGE,  /* progress bar */
HVSLIDER, /* slider */

} SCROLL_TYPE;

/* Treeview - Types */

typedef void * XVT_TREEVIEW_NODE;

typedef enum e_treeview_node_type {
    XVT_TREEVIEW_NODE_TERMINAL,           /* leaf - no children */
    XVT_TREEVIEW_NODE_NONTERMINAL,        /* branch - may have children */
    XVT_ENUM_DUMMY26 = XVT_CC_ENUM_END
} XVT_TREEVIEW_NODE_TYPE;

typedef XVT_CALLCONV_TYPEDEF( BOOLEAN, XVT_TREEVIEW_CALLBACK,
         (WINDOW ctl_win, XVT_TREEVIEW_NODE node) );

typedef struct s_ctlinfo {

WIN_TYPE type;
WINDOW win;		
union {

struct s_scroll {

SCROLL_CONTROL what;
short pos;

} scroll;
struct s_edit {

BOOLEAN focus_change;
BOOLEAN active;

} edit;
struct s_lbox {

BOOLEAN dbl_click;

} lbox;
struct s_listedit {

BOOLEAN focus_change;
BOOLEAN active;

} listedit;
struct s_notebk {

    WINDOW face;
    short  tab_no;
    short  page_no;

} notebk;
struct s_html {

    int reserved;            /* Reserved...no usage yet.*/

} html;
struct s_treeview {

    XVT_TREEVIEW_NODE node;  /* Node */
    BOOLEAN sgl_click;       /* Single click */
    BOOLEAN dbl_click;       /* Double click */
    BOOLEAN expanded;        /* Node was expanded */
    BOOLEAN collapsed;       /* Node was collapsed */

} treeview;

} v;

} CONTROL_INFO;

typedef struct s_xvt_color_component {
XVT_COLOR_TYPE type;	/* color component being defined */
COLOR color;	/* RGB color value */
} XVT_COLOR_COMPONENT;

typedef enum s_xvt_color_action {
XVT_COLOR_ACTION_SET,/* set the colors */
XVT_COLOR_ACTION_UNSET/* unset the colors */
} XVT_COLOR_ACTION;

typedef struct s_win_def {

WIN_TYPE wtype;	/* WC_* or WO_* type */

RCT rct;
char *text;
UNIT_TYPE units;
XVT_COLOR_COMPONENT * ctlcolors;
union {

struct s_win_def_win {	/* WINDOW's */

short int menu_rid;	/* menu resource id */
MENU_ITEM *menu_p;	/* pointer to menu tree */
long flags;	/* WSF_* flags */
XVT_FNTID ctl_font_id;	/* control font id */

} win;

struct s_win_def_dlg {	/* DIALOG's */

long flags;	/* WSF_* flags */
XVT_FNTID ctl_font_id;	/* control font id */

} dlg;

struct s_win_def_ctl {	/* CONTROL's */

short int ctrl_id;

short int icon_id;	/* for icons only */
long flags;	/* CTL_* flags */
XVT_FNTID font_id;	/* logical font */

} ctl;

struct s_win_def_tx {	/* text edit objects */

unsigned short attrib;	/* TX_* flags */
XVT_FNTID font_id;	/* logical font */
short margin;	/* right margin */
short limit;	/* max chars */
short int tx_id;	/* text ID */

} tx;

} v;

} WIN_DEF;

typedef enum {
E_CREATE,	/* creation */
E_DESTROY,	/* destruction */
E_FOCUS,	/* window focus gain/loss */
E_SIZE,	/* resize */
E_UPDATE,	/* update */
E_CLOSE,	/* close window request */
E_MOUSE_DOWN,	/* mouse down */
E_MOUSE_UP,	/* mouse up */
E_MOUSE_MOVE,	/* mouse move */
E_MOUSE_DBL,	/* mouse double click */
E_CHAR,	/* character typed */
E_VSCROLL,	/* vert. window scrollbar activity */
E_HSCROLL,	/* horz. window scrollbar activity */
E_COMMAND,	/* menu command */
E_FONT,	/* font menu selection */
E_CONTROL,	/* control activity */
E_TIMER,	/* timer */
E_QUIT,	/* application shutdown request */
E_HELP,	/* help invoked */
E_USER,	/* user defined */
} EVENT_TYPE;

typedef struct s_event {

EVENT_TYPE type;
union {

struct s_mouse {

PNT where;
BOOLEAN shift;
BOOLEAN control;
short button;

} mouse;
struct s_char {

XVT_WCHAR ch;
BOOLEAN shift;
BOOLEAN control;
BOOLEAN virtual_key;
unsigned long modifiers;

} chr;
BOOLEAN active;
BOOLEAN query;
struct s_scroll_info {

SCROLL_CONTROL what;
short pos;

} scroll;
struct s_cmd {

MENU_TAG tag;
BOOLEAN shift;
BOOLEAN control;

} cmd;
struct s_size {

short height;
short width;

} size;
struct s_efont {

XVT_FNTID font_id;

} font;
struct s_ctl {

short id;
CONTROL_INFO ci;

} ctl;
struct s_update {

RCT rct;

} update;
struct s_timer {

long id;

} timer;
struct s_user {

long id;
void *ptr;

} user;
struct s_help {

WINDOW obj;
MENU_TAG tag;
XVT_HELP_TID tid;

}help;

} v;

} EVENT;

typedef unsigned long EVENT_MASK;
typedef long (* EVENT_HANDLER) (WINDOW win, EVENT *ep);
typedef BOOLEAN (* XVT_ERRMSG_HANDLER) (XVT_ERRMSG err, DATA_PTR context);
typedef BOOLEAN (* XVT_ENUM_CHILDREN)(WINDOW child, long data);

typedef enum {	/* std. clipboard format */
CB_TEXT,	/* ASCII text */
CB_PICT,	/* encapsulated picture */
CB_APPL	/* app's own (must have name) */
} CB_FORMAT;

typedef struct s_xvt_config 
{
  short menu_bar_ID;	        /* task menubar ResID */
  short about_box_ID;	        /* default aboutbox ResID */
  const char* base_appl_name;	/* application's "filename" */
  const char* appl_name;	    /* application's name */
  const char* taskwin_title;	/* title for task window */
} XVT_CONFIG;