/*
 *  GraphApp
 *  --------
 *  Common cross-platform graphics application routines.
 *  Version 2.4 (c) Lachlan Patrick 1996-1998.
 *  This header file is designed to be platform-independent.
 *
 *  Copyright 2006-8	The R Foundation
 *  Copyright 2013-20	The R Core Team
 *
 */

/*
 *  Common cross-platform graphics routines library.
 */

#ifndef _GRAPHAPP_H
#define _GRAPHAPP_H	240

/*
 *  Assume C declarations for C++
 */

#ifdef __cplusplus
extern "C" {
#endif /* begin normal C declarations */

/*
 *  Definition of some constants.
 */

#include <stdio.h>
#include <stdlib.h>

#ifndef Pi
#define Pi 3.14159265359
#endif

/*
 *  Types.
 */

typedef unsigned char GAbyte;

#ifndef objptr
  typedef struct { int kind; } gui_obj;
  typedef gui_obj * objptr;
#endif

typedef unsigned long rgb;    /* red-green-blue colour value */

typedef objptr font;          /* font of certain size and style */
typedef objptr cursor;        /* mouse cursor shape */

typedef objptr drawing;       /* bitmap, window or control */

typedef drawing bitmap;       /* platform-specific bitmap */
typedef drawing window;       /* on-screen window */
typedef drawing control;      /* buttons, text-fields, scrollbars */

typedef control label;        /* text label */
typedef control button;       /* push button */
typedef control checkbox;     /* check-box */
typedef control radiobutton;  /* radio button */
typedef control radiogroup;   /* group of radio buttons */
typedef control field;        /* one-line text field */
typedef control textbox;      /* multi-line text box */
typedef control scrollbar;    /* scroll-bar */
typedef control listbox;      /* list of text */
typedef control progressbar;  /* progress bar */

typedef control menubar;      /* contains menus */
typedef control menu;         /* pull-down menu contains menuitems */
typedef control menuitem;     /* a single item in a pull-down menu */

/*
 *  Structures.
 */

typedef struct point point;
typedef struct rect rect;
typedef struct drawstruct drawstruct;
typedef struct drawstruct *drawstate;
typedef struct imagedata imagedata;
typedef struct imagedata *image;

struct point
{
    int x, y;
};

struct rect
{
    int x, y;		/* top-left point inside rect */
    int width, height;	/* width and height of rect */
};

struct drawstruct
{
    drawing	dest;
    rgb	hue;
    int	mode;
    point	p;
    int	linewidth;
    font	fnt;
    cursor	crsr;
};

struct imagedata {
    int     depth;
    int     width;
    int     height;
    int     cmapsize;
    rgb *   cmap;
    GAbyte *  pixels;
};

/*
 *  Call-backs.
 */

typedef void (*voidfn)(void);
typedef void (*timerfn)(void *data);
typedef void (*actionfn)(control c);
typedef void (*drawfn)(control c, rect r);
typedef void (*mousefn)(control c, int buttons, point xy);
typedef void (*intfn)(control c, int argument);
typedef void (*keyfn)(control c, int key);
typedef void (*menufn)(menuitem m);
typedef void (*scrollfn)(scrollbar s, int position);
typedef void (*dropfn)(control c, char *data);
typedef void (*imfn)(control c, font *f, point *xy);

/*
 *  Mouse buttons state (bit-fields).
 */

#define NoButton	0x0000
#define LeftButton	0x0001
#define MiddleButton	0x0002
#define RightButton	0x0004

/*
 *  ANSI character codes.
 */

#define BELL	0x07
#define BKSP	0x08
#define VTAB	0x0B
#define FF	0x0C
#define ESC	0x1B

/*
 *  Edit-key codes.
 */

#define INS	0x2041
#define DEL	0x2326
#define HOME	0x21B8
#define END	0x2198
#define PGUP	0x21DE
#define PGDN	0x21DF
#define ENTER	0x2324

/*
 *  Cursor-key codes.
 */

#define LEFT	0x2190
#define UP	0x2191
#define RIGHT	0x2192
#define DOWN	0x2193

/*
 *  Function-key codes.
 */

#define F1	0x276C
#define F2	0x276D
#define F3	0x276E
#define F4	0x276F
#define F5	0x2770
#define F6	0x2771
#define F7	0x2772
#define F8	0x2773
#define F9	0x2774
#define F10	0x2775

/*
 *  Redefined functions.
 */
#define REDEFINE_FUNC_NAMES
#define addpt      GA_addpt
#define subpt      GA_subpt
#define equalpt    GA_equalpt
#define newmenu    GA_newmenu
#define newcontrol GA_newcontrol
#define newwindow  GA_newwindow
/* #define gettext    GA_gettext */
#define settext    GA_settext

#define R_REMAP
#ifdef R_REMAP
#define BringToTop		GA_BringToTop
#define GetCurrentWinPos	GA_GetCurrentWinPos
#define activatecontrol		GA_activatecontrol
#define add_context		GAI_add_context
#define add_strings		GA_add_strings
#define addstatusbar		GA_addstatusbar
#define addto		GA_addto
#define addtooltip		GA_addtooltip
#define adjust_menu		GAI_adjust_menu
#define app_cleanup		GA_appcleanup
#define apperror		GA_apperror
#define apply_to_list		GAI_apply_to_list
#define askUserPass		GA_askUserPass
#define askcdstring		GA_askcdstring
#define askchangedir		GA_askchangedir
#define askfilename		GA_askfilename
#define askfilenames		GA_askfilenames
#define askfilenamewithdir	GA_askfilenamewithdir
#define askfilesave		GA_askfilesave
#define askfilesavewithdir	GA_askfilesavewithdir
#define askok		GA_askok
#define askokcancel		GA_askokcancel
#define askpassword		GA_askpassword
#define askstring		GA_askstring
#define askyesno		GA_askyesno
#define askyesnocancel		GA_askyesnocancel
#define bitblt		GA_bitblt
#define bitmaptoimage		GA_bitmaptoimage
#define bottomleft		GA_bottomleft
#define bottomright		GA_bottomright
#define brighter		GA_brighter
#define changelistbox		GA_changelistbox
#define changescrollbar		GA_changescrollbar
#define char_to_string		GAI_char_to_string
#define check		GA_check
#define checklimittext		GA_checklimittext
#define clear		GA_clear
#define cleartext		GA_cleartext
#define clipboardhastext		GA_clipboardhastext
#define clipr		GA_clipr
#define compare_strings		GAI_compare_strings
#define convert32to8		GA_convert32to8
#define convert8to32		GA_convert8to32
#define copy_string		GAI_copy_string
#define copydrawstate		GA_copydrawstate
#define copyimage		GA_copyimage
#define copyrect		GA_copyrect
#define copystringtoclipboard		GA_copystringtoclipboard
#define copytext		GA_copytext
#define copytoclipboard		GA_copytoclipboard
#define countFilenames		GA_countFilenames
#define createbitmap		GA_createbitmap
#define createcursor		GA_createcursor
#define currentcursor		GA_currentcursor
#define currentdrawing		GA_currentdrawing
#define currentfont		GA_currentfont
#define currentlinewidth		GA_currentlinewidth
#define currentmode		GA_currentmode
#define currentpoint		GA_currentpoint
#define currentrgb		GA_currentrgb
#define currenttime		GA_currenttime
#define cuttext		GA_cuttext
#define darker		GA_darker
#define decrease_refcount	GAI_decrease_refcount
#define del_all_contexts	GAI_del_all_contexts
#define del_context		GAI_del_context
#define del_string		GAI_del_string
#define delay		GA_delay
#define deletion_traversal	GAI_deletion_traversal
#define delimage		GA_delimage
#define delobj		GA_delobj
#define delstatusbar		GA_delstatusbar
#define deviceheight		GA_deviceheight
#define deviceheightmm		GA_deviceheightmm
#define devicepixelsx		GA_devicepixelsx
#define devicepixelsy		GA_devicepixelsy
#define devicewidth		GA_devicewidth
#define devicewidthmm		GA_devicewidthmm
#define dialog_bg		GA_dialog_bg
#define disable		GA_disable
#define divpt		GA_divpt
#define doevent		GA_doevent
#define draw		GA_draw
#define drawall		GA_drawall
#define drawarc		GA_drawarc
#define drawbrighter		GA_drawbrighter
#define drawdarker		GA_drawdarker
#define drawellipse		GA_drawellipse
#define drawgreyscale		GA_drawgreyscale
#define drawimage		GA_drawimage
#define drawline		GA_drawline
#define drawmonochrome		GA_drawmonochrome
#define drawpoint		GA_drawpoint
#define drawpolygon		GA_drawpolygon
#define drawrect		GA_drawrect
#define drawroundrect		GA_drawroundrect
#define drawstr		GA_drawstr
#define drawtext		GA_drawtext
#define drawto		GA_drawto
#define enable		GA_enable
#define equalr		GA_equalr
#define execapp		GA_execapp
#define exitapp		GA_exitapp
#define fillarc		GA_fillarc
#define fillellipse		GA_fillellipse
#define fillpolygon		GA_fillpolygon
#define fillrect		GA_fillrect
#define fillroundrect		GA_fillroundrect
#define find_object		GAI_find_object
#define find_valid_sibling	GAI_find_valid_sibling
#define finddialog		GA_finddialog
#define finish_contexts		GAI_finish_contexts
#define finish_events		GAI_finish_events
#define finish_objects		GAI_finish_objects
#define fix_brush		GAI_fix_brush
#define flashcontrol		GA_flashcontrol
#define float_to_string		GAI_float_to_string
#define fontascent		GA_fontascent
#define fontdescent		GA_fontdescent
#define fontheight		GA_fontheight
#define fontwidth		GA_fontwidth
#define gabeep		GA_gabeep
#define gamainloop		GA_gamainloop
#define gbitblt		GA_gbitblt
#define gchangemenubar		GA_gchangemenubar
#define gchangepopup		GA_gchangepopup
#define gchangescrollbar		GA_gchangescrollbar
#define gcharmetric		GA_gcharmetric
#define gcopy		GA_gcopy
#define gcopyalpha		GA_gcopyalpha
#define gdrawellipse		GA_gdrawellipse
#define gdrawline		GA_gdrawline
#define gdrawpolyline		GA_gdrawpolyline
#define gdrawrect		GA_gdrawrect
#define gdrawstr		GA_gdrawstr
#define gdrawstr1		GA_gdrawstr1
#define gdrawwcs		GA_gdrawwcs
#define getHandle		GA_getHandle
#define getSysFontSize		GA_getSysFontSize
#define get_context		GAI_get_context
#define get_grey_pixel		GAI_get_grey_pixel
#define get_image_pixel		GAI_get_image_pixel
#define get_modeless		GAI_get_modeless
#define get_monochrome_pixel	GAI_get_monochrome_pixel
#define getbackground		GA_getbackground
#define getbitmapdata		GA_getbitmapdata
#define getbitmapdata2		GA_getbitmapdata2
#define getcliprect		GA_getcliprect
#define getcurrentline		GA_getcurrentline
#define getdata		GA_getdata
#define getforeground		GA_getforeground
#define getkeystate		GA_getkeystate
#define getlimittext		GA_getlimittext
#define getlinelength		GA_getlinelength
#define getlistitem		GA_getlistitem
#define getpalette		GA_getpalette
#define getpalettesize		GA_getpalettesize
#define getpastelength		GA_getpastelength
#define getpixel		GA_getpixel
#define getpixels		GA_getpixels
#define getseltext		GA_getseltext
#define getstringfromclipboard		GA_getstringfromclipboard
#define gettextfont		GA_gettextfont
#define getvalue		GA_getvalue
#define gfillellipse		GA_gfillellipse
#define gfillpolygon		GA_gfillpolygon
#define gfillrect		GA_gfillrect
#define ggetcliprect		GA_ggetcliprect
#define ggetkeystate		GA_ggetkeystate
#define ggetmodified		GA_ggetmodified
#define ggetpixel		GA_ggetpixel
#define ghasfixedwidth		GA_ghasfixedwidth
#define ginvert		GA_ginvert
#define gmenubar		GA_gmenubar
#define gnewfont		GA_gnewfont
#define gnewfont2		GA_gnewfont2
#define goldfillellipse		GA_goldfillellipse
#define gpopup		GA_gpopup
#define gprintf		GA_gprintf
#define growr		GA_growr
#define gscroll		GA_gscroll
#define gsetcliprect		GA_gsetcliprect
#define gsetcursor		GA_gsetcursor
#define gsetpolyfillmode	GA_gsetpolyfillmode
#define gsetmodified		GA_gsetmodified
#define gsetpixel		GA_gsetpixel
#define gstrrect		GA_gstrrect
#define gstrsize		GA_gstrsize
#define gstrwidth		GA_gstrwidth
#define gwcharmetric		GA_gwcharmetric
#define gwcswidth		GA_gwcswidth
#define gwdrawstr1		GA_gwdrawstr1
#define handle_control		GAI_handle_control
#define handle_findreplace	GAI_handle_findreplace
#define handle_menu_id		GAI_handle_menu_id
#define handle_menu_key		GAI_handle_menu_key
#define has_transparent_pixels	GAI_has_transparent_pixels
#define hide			GA_hide
#define hide_window		GAI_hide_window
#define highlight		GA_highlight
#define imagedepth		GA_imagedepth
#define imageheight		GA_imageheight
#define imagetobitmap		GA_imagetobitmap
#define imagewidth		GA_imagewidth
#define increase_refcount	GAI_increase_refcount
#define init_contexts		GAI_init_contexts
#define init_cursors		GAI_init_cursors
#define init_events		GAI_init_events
#define init_fonts		GAI_init_fonts
#define init_menus		GAI_init_menus
#define init_objects		GAI_init_objects
#define initapp			GA_initapp
#define inserttext		GA_inserttext
#define insetr			GA_insetr
#define int_to_string		GAI_int_to_string
#define invertrect		GA_invertrect
#define isTopmost		GA_isTopmost
#define ischecked		GA_ischecked
#define isenabled		GA_isenabled
#define ishighlighted		GA_ishighlighted
#define isiconic		GA_isiconic
#define ismdi			GA_ismdi
#define isselected		GA_isselected
#define isUnicodeWindow		GA_isUnicodeWindow
#define isvisible		GA_isvisible
#define lineto			GA_lineto
#define load_gif		GAI_load_gif
#define loadbitmap		GA_loadbitmap
#define loadcursor		GA_loadcursor
#define loadimage		GA_loadimage
#define memalloc		GAI_memalloc
#define memexpand		GAI_memexpand
#define memfree		GAI_memfree
#define memjoin		GAI_memjoin
#define memlength		GAI_memlength
#define memrealloc		GAI_memrealloc
#define midpt		GA_midpt
#define modeless_active		GA_modeless_active
#define move_to_front		GAI_move_to_front
#define moveto		GA_moveto
#define mulpt		GA_mulpt
#define myAppendMenu		GA_myAppendMenu
#define myGetSysColor		GA_myGetSysColor
#define myMessageBox		GA_myMessageBox
#define nametorgb		GA_nametorgb
#define new_font_object		GA_new_font_object
#define new_object		GAI_new_object
#define new_string		GAI_new_string
#define newbitmap		GA_newbitmap
#define newbutton		GA_newbutton
#define newcheckbox		GA_newcheckbox
#define newcursor		GA_newcursor
#define newdrawing		GA_newdrawing
#define newdropfield		GA_newdropfield
#define newdroplist		GA_newdroplist
#define newfield		GA_newfield
#define newfield_no_border		GA_newfield_no_border
#define newfont		GA_newfont
#define newimage		GA_newimage
#define newimagebutton		GA_newimagebutton
#define newimagecheckbox		GA_newimagecheckbox
#define newlabel		GA_newlabel
#define newlistbox		GA_newlistbox
#define newmdimenu		GA_newmdimenu
#define newmenubar		GA_newmenubar
#define newmenuitem		GA_newmenuitem
#define newmetafile		GA_newmetafile
#define newmultilist		GA_newmultilist
#define newpassword		GA_newpassword
#define newpicture		GA_newpicture
#define newpoint		GA_newpoint
#define newpopup		GA_newpopup
#define newprinter		GA_newprinter
#define newprogressbar		GA_newprogressbar
#define newradiobutton		GA_newradiobutton
#define newradiogroup		GA_newradiogroup
#define newrect		GA_newrect
#define newrichtextarea		GA_newrichtextarea
#define newscrollbar		GA_newscrollbar
#define newsubmenu		GA_newsubmenu
#define newtextarea		GA_newtextarea
#define newtextbox		GA_newtextbox
#define newtoolbar		GA_newtoolbar
#define newtoolbutton		GA_newtoolbutton
#define nextpage		GA_nextpage
#define objdepth		GA_objdepth
#define objheight		GA_objheight
#define objrect		GA_objrect
#define objwidth		GA_objwidth
#define oldfillellipse		GA_oldfillellipse
#define parentwindow		GA_parentwindow
#define pastetext		GA_pastetext
#define peekevent		GA_peekevent
#define protect_object		GAI_protect_object
#define ptinr		GA_ptinr
#define raddpt		GA_raddpt
#define rcanon		GA_rcanon
#define rcenter		GA_rcenter
#define rdiv		GA_rdiv
#define redraw		GA_redraw
#define remove_context		GAI_remove_context
#define remove_menu_item	GA_remove_menu_item
#define replacedialog		GA_replacedialog
#define resetdrawstate		GA_resetdrawstate
#define resize			GA_resize
#define restoredrawstate	GA_restoredrawstate
#define rgbtoname		GA_rgbtoname
#define rgbtonum		GA_rgbtonum
#define rinr		GA_rinr
#define rmove		GA_rmove
#define rmul		GA_rmul
#define rpt		GA_rpt
#define rsubpt		GA_rsubpt
#define rxr		GA_rxr
#define save_gif		GAI_save_gif
#define saveimage		GA_saveimage
#define scaleimage		GA_scaleimage
#define screen_coords		GA_screen_coords
#define scrollcaret		GA_scrollcaret
#define scrollrect		GA_scrollrect
#define scrolltext		GA_scrolltext
#define selecttext		GA_selecttext
#define selecttextex		GA_selecttextex
#define setaction		GA_setaction
#define setbackground		GA_setbackground
#define setbitmapdata		GA_setbitmapdata
#define setcaret		GA_setcaret
#define setcliprect		GA_setcliprect
#define setclose		GA_setclose
#define setcursor		GA_setcursor
#define setdata		GA_setdata
#define setdel		GA_setdel
#define setdrawmode		GA_setdrawmode
#define setdrawstate		GA_setdrawstate
#define setdrop		GA_setdrop
#define setfont		GA_setfont
#define setforeground		GA_setforeground
#define sethit		GA_sethit
#define setimage		GA_setimage
#define setim		GA_setim
#define setkeyaction		GA_setkeyaction
#define setkeydown		GA_setkeydown
#define setlimittext		GA_setlimittext
#define setlinewidth		GA_setlinewidth
#define setlistitem		GA_setlistitem
#define setmousedown		GA_setmousedown
#define setmousedrag		GA_setmousedrag
#define setmousemove		GA_setmousemove
#define setmouserepeat		GA_setmouserepeat
#define setmousetimer		GA_setmousetimer
#define setmouseup		GA_setmouseup
#define setonfocus		GA_setonfocus
#define setpalette		GA_setpalette
#define setpixel		GA_setpixel
#define setpixels		GA_setpixels
#define setprogressbar		GA_setprogressbar
#define setprogressbarrange		GA_setprogressbarrange
#define setredraw		GA_setredraw
#define setresize		GA_setresize
#define setrgb		GA_setrgb
#define setstatus		GA_setstatus
#define settextfont		GA_settextfont
#define settimer		GA_settimer
#define settimerfn		GA_settimerfn
#define setuserfilter		GA_setuserfilter
#define setvalue		GA_setvalue
#define show		GA_show
#define showcaret	GA_showcaret
#define show_window		GAI_show_window
#define simple_window		GAI_simple_window
#define sortpalette		GA_sortpalette
#define startgraphapp		GA_startgraphapp
#define stepprogressbar		GA_stepprogressbar
#define string_diff		GAI_string_diff
#define string_length		GAI_string_length
#define strrect		GA_strrect
#define strsize		GA_strsize
#define strwidth		GA_strwidth
#define textheight		GA_textheight
#define textselection		GA_textselection
#define textselectionex		GA_textselectionex
#define texturerect		GA_texturerect
#define to_c_string		GAI_to_c_string
#define to_dos_string		GAI_to_dos_string
#define toolbar_hide		GA_toolbar_hide
#define toolbar_show		GA_toolbar_show
#define topleft		GA_topleft
#define topright		GA_topright
#define tree_search		GA_tree_search
#define uncheck		GA_uncheck
#define undotext		GA_undotext
#define unhighlight		GA_unhighlight
#define updatestatus		GA_updatestatus
#define waitevent		GA_waitevent

#define ColorName		GA_ColorName
#define Courier			GA_Courier
#define FixedFont		GA_FixedFont
#define Helvetica		GA_Helvetica
#define MDIFrame		GA_MDIFrame
#define MDIStatus		GA_MDIStatus
#define MDIToolbar		GA_MDIToolbar
#define SystemFont		GA_SystemFont
#define Times			GA_Times
#define TopmostDialogs		GA_TopmostDialogs
#define active_windows		GAI_active_windows
#define app_control_proc	GAI_app_control_proc
#define app_control_procedure	GAI_app_control_procedure
#define app_doc_proc		GAI_app_doc_proc
#define app_drawstate		GAI_app_drawstate
#define app_initialised		GAI_app_initialised
#define app_name		GAI_app_name
#define app_timer_proc		GAI_app_timer_proc
#define app_timer_procedure	GAI_app_timer_procedure
#define app_win_proc		GAI_app_win_proc
#define app_work_proc		GAI_app_work_proc
#define child_id		GAI_child_id
#define current			GAI_current
#define current_menu		GAI_current_menu
#define current_menubar		GAI_current_menubar
#define current_window		GAI_current_window
#define dc			GAI_dc
#define hAccel			GAI_hAccel
#define hwndClient		GAI_hwndClient
#define hwndFrame		GAI_hwndFrame
#define hwndMain		GAI_hwndMain
#define is_NT			GA_isNT
#define keystate		GAI_keystate
#define menus_active		GAI_menus_active
#define prev_instance		GAI_prev_instance
#define the_brush		GAI_the_brush
#define the_pen			GAI_the_pen
#define this_instance		GAI_this_instance
#define win_rgb			GAI_win_rgb

#define ArrowCursor		GA_ArrowCursor
#define BlankCursor		GA_BlankCursor
#define CaretCursor		GA_CaretCursor
#define CrossCursor		GA_CrossCursor
#define HandCursor		GA_HandCursor
#define TextCursor		GA_TextCursor
#define WatchCursor		GA_WatchCursor

#define cam_image		GA_cam_image
#define color_image		GA_color_image
#define console1_image		GA_console1_image
#define console_image		GA_console_image
#define copy1_image		GA_copy1_image
#define copy_image		GA_copy_image
#define copypaste_image		GA_copypaste_image
#define cut_image		GA_cut_image
#define erase_image		GA_erase_image
#define help_image		GA_help_image
#define open1_image		GA_open1_image
#define open_image		GA_open_image
#define paste1_image		GA_paste1_image
#define paste_image		GA_paste_image
#define print_image		GA_print_image
#define save_image		GA_save_image
#define stop_image		GA_stop_image
#endif

/*
 *  General functions.
 */

int	initapp(int argc, char *argv[]);
void	exitapp(void);

void	drawall(void);
int	peekevent(void);
void	waitevent(void);
int	doevent(void);
void	mainloop(void);

int	execapp(char *cmd);

/*void	beep(void);*/

/*
 *  Point and rectangle arithmetic.
 */

point	newpoint(int x, int y);
rect	newrect(int left, int top, int width, int height);
rect	rpt(point min, point max);

#define pt(x,y)         newpoint((x),(y))
#define rect(x,y,w,h)   newrect((x),(y),(w),(h))

point	topleft(rect r);
point	bottomright(rect r);
point	topright(rect r);
point	bottomleft(rect r);

point	addpt(point p1, point p2);
point	subpt(point p1, point p2);
point	midpt(point p1, point p2);
point	mulpt(point p1, int i);
point	divpt(point p1, int i);
rect	rmove(rect r, point p);
rect	raddpt(rect r, point p);
rect	rsubpt(rect r, point p);
rect	rmul(rect r, int i);
rect	rdiv(rect r, int i);
rect	growr(rect r, int w, int h);
rect	insetr(rect r, int i);
rect	rcenter(rect r1, rect r2);
int	ptinr(point p, rect r);
int	rinr(rect r1, rect r2);
int	rxr(rect r1, rect r2);
int	equalpt(point p1, point p2);
int	equalr(rect r1, rect r2);
rect	clipr(rect r1, rect r2);
rect	rcanon(rect r);

/*
 *  Colour functions and constants.
 */

#define	rgb(r,g,b)    ((((rgb)r)<<16)|(((rgb)g)<<8)|((rgb)b))
#define getalpha(col) (((col)>>24)&0x00FFUL)
#define getred(col)   (((col)>>16)&0x00FFUL)
#define getgreen(col) (((col)>>8)&0x00FFUL)
#define getblue(col)  ((col)&0x00FFUL)

void	setrgb(rgb c);
#define	setcolor(c)  setrgb(c)
#define	setcolour(c) setrgb(c)

/* changed to avoid clashes with w32api 2.0 */
#define gaRed		0x00FF0000UL
#define gaGreen		0x0000FF00UL
#define gaBlue		0x000000FFUL


#define Transparent     0xFFFFFFFFUL

#define Black		0x00000000UL
#define White		0x00FFFFFFUL
#define Yellow		0x00FFFF00UL
#define Magenta		0x00FF00FFUL
#define Cyan		0x0000FFFFUL

#define Grey		0x00808080UL
#define Gray		0x00808080UL
#define LightGrey	0x00C0C0C0UL
#define LightGray	0x00C0C0C0UL
#define DarkGrey	0x00404040UL
#define DarkGray	0x00404040UL

#define DarkBlue	0x00000080UL
#define DarkGreen	0x00008000UL
#define DarkRed		0x008B0000UL/* changed to match rgb */
#define LightBlue	0x0080C0FFUL
#define LightGreen	0x0080FF80UL
#define LightRed	0x00FFC0FFUL
#define Pink		0x00FFAFAFUL
#define Brown		0x00603000UL
#define Orange		0x00FF8000UL
#define Purple		0x00C000FFUL
#define Lime		0x0080FF00UL

/*
 *  Context functions for bitmaps, windows, controls.
 */

void	addto(control dest);
void	drawto(drawing dest);
void	setlinewidth(int width);

/*
 *  Transfer modes for drawing operations, S=source, D=destination.
 *  The modes are arranged so that, for example, (~D)|S == notDorS.
 */

void	setdrawmode(int mode);

#define Zeros	 0x00
#define DnorS	 0x01
#define DandnotS 0x02
#define notS	 0x03
#define notDandS 0x04
#define notD	 0x05
#define DxorS	 0x06
#define DnandS	 0x07
#define DandS	 0x08
#define DxnorS	 0x09
#define D	 0x0A
#define DornotS	 0x0B
#define S	 0x0C
#define notDorS	 0x0D
#define DorS	 0x0E
#define Ones	 0x0F

/*
 *  Drawing functions.
 */

void	bitblt(drawing dest, drawing src, point dp, rect sr, int mode);

void	scrollrect(point dp, rect sr);
void	copyrect(drawing src, point dp, rect sr);
void	texturerect(drawing src, rect r);
void	invertrect(rect r);

rgb	getpixel(point p);
void	setpixel(point p, rgb c);

/*
 *  Drawing using the current colour.
 */

void	moveto(point p);
void	lineto(point p);

void	drawpoint(point p);
void	drawline(point p1, point p2);
void	drawrect(rect r);
void	fillrect(rect r);
void	drawarc(rect r, int start_angle, int end_angle);
void	fillarc(rect r, int start_angle, int end_angle);
void	drawellipse(rect r);
void	fillellipse(rect r);
void	drawroundrect(rect r);
void	fillroundrect(rect r);
void	drawpolygon(point *p, int n);
void	fillpolygon(point *p, int n);

/*
 *  Drawing text, selecting fonts.
 */

font	newfont(const char *name, int style, int size);
void	setfont(font f);

int	fontwidth(font f);
int	fontheight(font f);
int	fontascent(font f);
int	fontdescent(font f);

#define	getascent(f)	fontascent(f)
#define	getdescent(f)	fontdescent(f)

int	strwidth(font f, const char *s);
point	strsize(font f, const char *s);
rect	strrect(font f, const char *s);

int	drawstr(point p, const char *str);
int	textheight(int width, const char *text);
const char *drawtext(rect r, int alignment, const char *text);
int	gprintf(const char *fmt, ...);

/*
 *  Text styles and alignments.
 */

#define Plain		0x0000
#define Bold		0x0001
#define Italic		0x0002
#define BoldItalic	0x0003
#define SansSerif	0x0004
#define FixedWidth	0x0008
#define Wide		0x0010
#define Narrow		0x0020

#define AlignTop        0x0000
#define AlignBottom     0x0100
#define VJustify        0x0200
#define VCenter         0x0400
#define VCentre         0x0400
#define AlignLeft       0x0000
#define AlignRight      0x1000
#define Justify	        0x2000
#define Center	        0x4000
#define Centre          0x4000
#define AlignCenter     0x4000
#define AlignCentre     0x4000
#define Underline       0x0800

/*
 *  Find the current state of drawing.
 */

drawing	currentdrawing(void);
rgb	currentrgb(void);
#define	currentcolor() currentrgb()
#define	currentcolour() currentrgb()
int	currentmode(void);
point	currentpoint(void);
int	currentlinewidth(void);
font	currentfont(void);
cursor	currentcursor(void);

/*
 *  Find current keyboard state.
 */

int	getkeystate(void);

#define AltKey	0x0001
#define CmdKey	0x0001
#define CtrlKey		0x0002
#define OptionKey	0x0002
#define ShiftKey	0x0004

/*
 *  Bitmaps.
 */

bitmap	newbitmap(int width, int height, int depth);
bitmap	loadbitmap(const char *name);
bitmap	imagetobitmap(image img);
bitmap	createbitmap(int width, int height, int depth, GAbyte *data);
void	setbitmapdata(bitmap b, GAbyte data[]);
void	getbitmapdata(bitmap b, GAbyte data[]);
void	getbitmapdata2(bitmap b, GAbyte **data);

/*
 *  Images.
 */

image	newimage(int width, int height, int depth);
image	copyimage(image img);
void	delimage(image img);

int     imagedepth(image img);
int     imagewidth(image img);
int     imageheight(image img);

void	setpixels(image img, GAbyte pixels[]);
GAbyte *	getpixels(image img);

void	setpalette(image img, int length, rgb cmap[]);
rgb *	getpalette(image img);
int	getpalettesize(image img);

image	scaleimage(image src, rect dr, rect sr);
image	convert32to8(image img);
image	convert8to32(image img);
void	sortpalette(image img);

image	loadimage(const char *filename);
void	saveimage(image img, const char *filename);

void	drawimage(image img, rect dr, rect sr);
void	drawmonochrome(image img, rect dr, rect sr);
void	drawgreyscale(image img, rect dr, rect sr);
#define drawgrayscale drawgreyscale
void	drawdarker(image img, rect dr, rect sr);
void	drawbrighter(image img, rect dr, rect sr);

/*
 *  Windows.
 */

window	newwindow(const char *name, rect r, long flags);
void	show(window w);
void	hide(window w);
rect    GetCurrentWinPos(window obj);

/*
 *  Window creation flags.
 */

#define SimpleWindow	0x00000000L

#define Menubar		0x00000010L
#define Titlebar	0x00000020L
#define Closebox	0x00000040L
#define Resize		0x00000080L
#define Maximize	0x00000100L
#define Minimize	0x00000200L
#define HScrollbar	0x00000400L
#define VScrollbar	0x00000800L
#define CanvasSize	0x00200000L

#define Modal		0x00001000L
#define Floating	0x00002000L
#define Centered	0x00004000L
#define Centred		0x00004000L

#define Workspace	0x00010000L
#define Document	0x00020000L
#define ChildWindow	0x00040000L

#define TrackMouse	0x00080000L

#define UsePalette	0x00100000L
#define UseUnicode	0x00200000L

#define StandardWindow	(Titlebar|Closebox|Resize|Maximize|Minimize)

/*
 *  Functions which work for bitmaps, windows and controls.
 */

int	objdepth(objptr obj);
rect	objrect(objptr obj);
int	objwidth(objptr obj);
int	objheight(objptr obj);
void	delobj(objptr obj);

#define	getdepth(obj)	objdepth((objptr)(obj))
#define	getrect(obj)	objrect((objptr)(obj))
#define	getwidth(obj)	objwidth((objptr)(obj))
#define	getheight(obj)	objheight((objptr)(obj))
#define	del(obj)	delobj((objptr)(obj))

/*
 *  Setting window and control callback functions.
 */

void	setaction(control c, actionfn fn);
void	sethit(control c, intfn fn);
void	setdel(control c, actionfn fn);
void	setclose(control c, actionfn fn);

void	setredraw(control c, drawfn fn);
void	setresize(control c, drawfn fn);

void	setkeydown(control c, keyfn fn);
void	setkeyaction(control c, keyfn fn);

void	setmousedown(control c, mousefn fn);
void	setmousedrag(control c, mousefn fn);
void	setmouseup(control c, mousefn fn);
void	setmousemove(control c, mousefn fn);
void	setmouserepeat(control c, mousefn fn);

void	setdrop(control c, dropfn fn);

void	setonfocus(control c, actionfn fn);

void    setim(control c, imfn fn);

/*
 *  Using windows and controls.
 */

void	clear(control c);
void	draw(control c);
void	redraw(control c);
void	resize(control c, rect r);

void	show(control c);
void	hide(control c);
int	isvisible(control c);

void	enable(control c);
void	disable(control c);
int	isenabled(control c);

void	check(control c);
void	uncheck(control c);
int	ischecked(control c);

void	highlight(control c);
void	unhighlight(control c);
int	ishighlighted(control c);

void	flashcontrol(control c);
void	activatecontrol(control c);

/*
 *  Changing the state of a control.
 */

void	settext(control c, const char *newtext);
char *	GA_gettext(control c);
#define setname(c,newname) settext(c,newname)
#define getname(c) GA_gettext(c)

void	settextfont(control c, font f);
font	gettextfont(control c);

void	setforeground(control c, rgb fg);
rgb	getforeground(control c);
void	setbackground(control c, rgb bg);
rgb	getbackground(control c);

void	setvalue(control c, int value);
int	getvalue(control c);
void	setdata(control c, void *data);
void *	getdata(control c);

window	parentwindow(control c);

/*
 *  Control states.
 */

#define GA_Visible	0x0001L
#define GA_Enabled	0x0002L
#define GA_Checked	0x0004L
#define GA_Highlighted	0x0008L
#define GA_Armed	0x0010L
#define GA_Focus	0x0020L

/*
 *  Create buttons, scrollbars, controls etc on the current window.
 */

control	  newcontrol(const char *text, rect r);

drawing	  newdrawing(rect r, drawfn fn);
drawing	  newpicture(image img, rect r);

button	  newbutton(const char *text, rect r, actionfn fn);
button	  newimagebutton(image img, rect r, actionfn fn);
void	  setimage(control c, image img);

checkbox  newcheckbox(const char *text, rect r, actionfn fn);
checkbox  newimagecheckbox(image img, rect r, actionfn fn);

radiobutton newradiobutton(const char *text, rect r, actionfn fn);
radiogroup  newradiogroup(void);

scrollbar newscrollbar(rect r, int max, int pagesize, scrollfn fn);
void	  changescrollbar(scrollbar s, int where, int max, int size);

label	  newlabel(const char *text, rect r, int alignment);
field	  newfield(const char *text, rect r);
field	  newpassword(const char *text, rect r);
textbox	  newtextbox(const char *text, rect r);
textbox	  newtextarea(const char *text, rect r);
textbox	  newrichtextarea(const char *text, rect r);

listbox	  newlistbox(const char *list[], rect r, scrollfn fn, actionfn dble);
listbox	  newdroplist(const char *list[], rect r, scrollfn fn);
listbox	  newdropfield(const char *list[], rect r, scrollfn fn);
listbox	  newmultilist(const char *list[], rect r, scrollfn fn, actionfn dble);
int	  isselected(listbox b, int index);
void	  setlistitem(listbox b, int index);
int	  getlistitem(listbox b);
void	  changelistbox(listbox b, const char *new_list[]);

progressbar newprogressbar(rect r, int pmin, int pmax, int incr, int smooth);
void setprogressbar(progressbar obj, int n);
void stepprogressbar(progressbar obj, int n);
void setprogressbarrange(progressbar obj, int pbmin, int pbmax);


menubar	  newmenubar(actionfn adjust_menus);
menu	  newsubmenu(menu parent, const char *name);
menu	  newmenu(const char *name);
menuitem  newmenuitem(const char *name, int key, menufn fn);

/*
 *  Text editing functions.
 */

void  undotext(textbox t);
void  cuttext(textbox t);
void  copytext(textbox t);
void  cleartext(textbox t);
void  pastetext(textbox t);
void  inserttext(textbox t, const char *text);
void  selecttext(textbox t, long start, long end);
void  textselection(textbox t, long *start, long *end);

/*
 *  Dialogs.
 */

#define YES    1
#define NO    -1
#define CANCEL 0

void	apperror(const char *errstr);
void	askok(const char *info);
int	askokcancel(const char *question);
int	askyesno(const char *question);
int	askyesnocancel(const char *question);
char *	askstring(const char *question, const char *default_string);
char *	askpassword(const char *question, const char *default_string);
char *	askfilename(const char *title, const char *default_name);
char *  askfilenamewithdir(const char *title, const char *default_name, const char *dir);
char *	askfilesave(const char *title, const char *default_name);
char *	askUserPass(const char *title);

/*
 *  Time functions.
 */

int	settimer(unsigned millisec);
void	settimerfn(timerfn timeout, void *data);
int	setmousetimer(unsigned millisec);
void	delay(unsigned millisec);
long	currenttime(void);

/*
 *  Cursors.
 */

cursor	newcursor(point hotspot, image img);
cursor	createcursor(point offset, GAbyte *white_mask, GAbyte *black_shape);
cursor	loadcursor(const char *name);
void	setcursor(cursor c);

/*
 *  Change the drawing state.
 */

drawstate copydrawstate(void);
void	setdrawstate(drawstate saved_state);
void	restoredrawstate(drawstate saved_state);
void	resetdrawstate(void);

/*
 *  Caret-related functions.
 */
 
void 	setcaret(control c, int x, int y, int width, int height);
void	showcaret(control c, int showing);

/*
 *  Library supplied variables.
 */

#include <R_ext/libextern.h>
#undef LibExtern
#ifdef GA_DLL_BUILD
# define LibExtern extern
#else
# define LibExtern extern LibImport
#endif

LibExtern font		FixedFont;	/* fixed-width font */
LibExtern cursor	ArrowCursor;	/* normal arrow cursor */
LibExtern cursor	BlankCursor;	/* invisible cursor */
LibExtern cursor	WatchCursor;	/* wait for the computer */
LibExtern cursor	CaretCursor;	/* insert text */
LibExtern cursor	TextCursor;	/* insert text */
LibExtern cursor	HandCursor;	/* hand pointer */
LibExtern cursor	CrossCursor;	/* cross pointer */
LibExtern font		SystemFont;	/* system font */
LibExtern font		Times;	/* times roman font (serif) */
LibExtern font		Helvetica;	/* helvetica font (sans serif) */
LibExtern font		Courier;	/* courier font (fixed width) */

#undef LibExtern
#undef extern

#ifdef __cplusplus
}
#endif /* end normal C declarations */


#ifdef __cplusplus

/* begin C++ declarations */

/*
 *  Point and rectangle arithmetic.
 */

inline point operator +  (point p, point p2)  {p.x+=p2.x; p.y+=p2.y; return p;}
inline point operator -  (point p, point p2)  {p.x-=p2.x; p.y-=p2.y; return p;}
inline point operator += (point& p, point p2) {p.x+=p2.x; p.y+=p2.y; return p;}
inline point operator -= (point& p, point p2) {p.x-=p2.x; p.y-=p2.y; return p;}

inline rect operator +  (rect r, point p)  {r.x+=p.x; r.y+=p.y; return r;}
inline rect operator -  (rect r, point p)  {r.x-=p.x; r.y-=p.y; return r;}
inline rect operator += (rect& r, point p) {r.x+=p.x; r.y+=p.y; return r;}
inline rect operator -= (rect& r, point p) {r.x-=p.x; r.y-=p.y; return r;}

inline rect operator +  (rect r, int i)    {return insetr(r,-i);}
inline rect operator -  (rect r, int i)    {return insetr(r,i);}
inline rect operator ++ (rect& r)          {return r=insetr(r,-1);}
inline rect operator -- (rect& r)          {return r=insetr(r,1);}
inline rect operator += (rect& r, int i)   {return r=insetr(r,-i);}
inline rect operator -= (rect& r, int i)   {return r=insetr(r,i);}

inline int operator == (point p1, point p2) {return equalpt(p1,p2);}
inline int operator == (rect r1, rect r2)   {return equalr(r1,r2);}
inline int operator != (point p1, point p2) {return !equalpt(p1,p2);}
inline int operator != (rect r1, rect r2)   {return !equalr(r1,r2);}

#endif /* end C++ declarations */

#endif /* Common cross-platform graphics library. */
