diff --git a/src/gui.h b/src/gui.h
new file mode 100644
index 0000000..4357c46
--- /dev/null
+++ b/src/gui.h
@@ -0,0 +1,525 @@
+/* vi:set ts=8 sts=4 sw=4:
+ *
+ * VIM - Vi IMproved		by Bram Moolenaar
+ *				Motif support by Robert Webb
+ *
+ * Do ":help uganda"  in Vim to read copying and usage conditions.
+ * Do ":help credits" in Vim to see a list of people who contributed.
+ */
+
+/* For debugging */
+/* #define D(x)	printf x; */
+#define D(x)
+
+#if defined(FEAT_GUI_AMIGA)
+# include <intuition/intuition.h>
+#endif
+
+#ifdef FEAT_GUI_MOTIF
+# define FEAT_GUI_X11
+# include <Xm/Xm.h>
+#endif
+
+#ifdef FEAT_GUI_ATHENA
+# define FEAT_GUI_X11
+# include <X11/Intrinsic.h>
+# include <X11/StringDefs.h>
+#endif
+
+#ifdef FEAT_BEVAL
+# include "gui_beval.h"
+#endif
+
+#ifdef FEAT_GUI_GTK
+# include <X11/Intrinsic.h>
+# include <gtk/gtk.h>
+#endif
+
+#ifdef FEAT_GUI_BEOS
+# include "gui_beos.h"
+#endif
+
+#ifdef FEAT_GUI_MAC
+# include <Types.h>
+/*# include <Memory.h>*/
+# include <Quickdraw.h>
+# include <Fonts.h>
+# include <Events.h>
+# include <Menus.h>
+# if !(defined (TARGET_API_MAC_CARBON) && (TARGET_API_MAC_CARBON))
+#   include <Windows.h>
+# endif
+# include <Controls.h>
+/*# include <TextEdit.h>*/
+# include <Dialogs.h>
+# include <OSUtils.h>
+/*
+# include <ToolUtils.h>
+# include <SegLoad.h>*/
+#endif
+
+#ifdef RISCOS
+# include "gui_riscos.h"
+#endif
+
+#ifdef FEAT_GUI_PHOTON
+# include <Ph.h>
+# include <Pt.h>
+# include "photon/PxProto.h"
+#endif
+
+/*
+ * On some systems, when we compile with the GUI, we always use it.  On Mac
+ * there is no terminal version, and on Windows we can't figure out how to
+ * fork one off with :gui.
+ */
+#if defined(FEAT_GUI_MSWIN) || (defined(FEAT_GUI_MAC) && !defined(MACOS_X_UNIX))
+# define ALWAYS_USE_GUI
+#endif
+
+#if defined(FEAT_GUI_MSWIN) || defined(FEAT_GUI_MAC) || defined(HAVE_GTK2)
+# define USE_ON_FLY_SCROLL
+#endif
+
+/*
+ * GUIs that support dropping files on a running Vim.
+ */
+#if defined(FEAT_GUI_MSWIN) || defined(FEAT_GUI_MAC) \
+	|| defined(FEAT_GUI_BEOS) || defined(FEAT_GUI_GTK)
+# define HAVE_DROP_FILE
+#endif
+
+/*
+ * This define makes menus always use a fontset.
+ * We're not sure if this code always works, thus it can be disabled.
+ */
+#ifdef FEAT_XFONTSET
+# define FONTSET_ALWAYS
+#endif
+
+/*
+ * These macros convert between character row/column and pixel coordinates.
+ * TEXT_X   - Convert character column into X pixel coord for drawing strings.
+ * TEXT_Y   - Convert character row into Y pixel coord for drawing strings.
+ * FILL_X   - Convert character column into X pixel coord for filling the area
+ *		under the character.
+ * FILL_Y   - Convert character row into Y pixel coord for filling the area
+ *		under the character.
+ * X_2_COL  - Convert X pixel coord into character column.
+ * Y_2_ROW  - Convert Y pixel coord into character row.
+ */
+#ifdef FEAT_GUI_W32
+# define TEXT_X(col)	((col) * gui.char_width)
+# define TEXT_Y(row)	((row) * gui.char_height + gui.char_ascent)
+# define FILL_X(col)	((col) * gui.char_width)
+# define FILL_Y(row)	((row) * gui.char_height)
+# define X_2_COL(x)	((x) / gui.char_width)
+# define Y_2_ROW(y)	((y) / gui.char_height)
+#else
+# define TEXT_X(col)	((col) * gui.char_width  + gui.border_offset)
+# define FILL_X(col)	((col) * gui.char_width  + gui.border_offset)
+# define X_2_COL(x)	(((x) - gui.border_offset) / gui.char_width)
+# define TEXT_Y(row)	((row) * gui.char_height + gui.char_ascent \
+							+ gui.border_offset)
+# define FILL_Y(row)	((row) * gui.char_height + gui.border_offset)
+# define Y_2_ROW(y)	(((y) - gui.border_offset) / gui.char_height)
+#endif
+
+/* Indices for arrays of scrollbars */
+#define SBAR_NONE	    -1
+#define SBAR_LEFT	    0
+#define SBAR_RIGHT	    1
+#define SBAR_BOTTOM	    2
+
+/* Orientations for scrollbars */
+#define SBAR_VERT	    0
+#define SBAR_HORIZ	    1
+
+/* Default size of scrollbar */
+#define SB_DEFAULT_WIDTH    16
+
+/* Default height of the menu bar */
+#define MENU_DEFAULT_HEIGHT 1		/* figure it out at runtime */
+
+/* Flags for gui_mch_outstr_nowrap() */
+#define GUI_MON_WRAP_CURSOR	0x01	/* wrap cursor at end of line */
+#define GUI_MON_INVERT		0x02	/* invert the characters */
+#define GUI_MON_IS_CURSOR	0x04	/* drawing cursor */
+#define GUI_MON_TRS_CURSOR	0x08	/* drawing transparent cursor */
+#define GUI_MON_NOCLEAR		0x10	/* don't clear selection */
+
+/* Flags for gui_mch_draw_string() */
+#define DRAW_TRANSP		0x01	/* draw with transparant bg */
+#define DRAW_BOLD		0x02	/* draw bold text */
+#define DRAW_UNDERL		0x04	/* draw underline text */
+#if defined(RISCOS) || defined(HAVE_GTK2)
+# define DRAW_ITALIC		0x08	/* draw italic text */
+#endif
+#define DRAW_CURSOR		0x10	/* drawing block cursor (win32) */
+
+/* For our own tearoff menu item */
+#define TEAR_STRING		"-->Detach"
+#define TEAR_LEN		(9)	/* length of above string */
+
+/* for the toolbar */
+#ifdef FEAT_GUI_W16
+# define TOOLBAR_BUTTON_HEIGHT	15
+# define TOOLBAR_BUTTON_WIDTH	16
+#else
+# define TOOLBAR_BUTTON_HEIGHT	18
+# define TOOLBAR_BUTTON_WIDTH	18
+#endif
+#define TOOLBAR_BORDER_HEIGHT	12  /* room above+below buttons for MSWindows */
+
+#if defined(NO_CONSOLE) || defined(FEAT_GUI_GTK) || defined(FEAT_GUI_X11)
+# define NO_CONSOLE_INPUT	/* use no_console_input() to check if there
+				   is no console input possible */
+#endif
+
+typedef struct GuiScrollbar
+{
+    long	ident;		/* Unique identifier for each scrollbar */
+    struct window *wp;		/* Scrollbar's window, NULL for bottom */
+    int		type;		/* one of SBAR_{LEFT,RIGHT,BOTTOM} */
+    long	value;		/* Represents top line number visible */
+#ifdef FEAT_GUI_ATHENA
+    int		pixval;		/* pixel count of value */
+#endif
+    long	size;		/* Size of scrollbar thumb */
+    long	max;		/* Number of lines in buffer */
+
+    /* Values measured in characters: */
+    int		top;		/* Top of scroll bar (chars from row 0) */
+    int		height;		/* Current height of scroll bar in rows */
+#ifdef FEAT_VERTSPLIT
+    int		width;		/* Current width of scroll bar in cols */
+#endif
+    int		status_height;	/* Height of status line */
+#ifdef FEAT_GUI_X11
+    Widget	id;		/* Id of real scroll bar */
+#endif
+#ifdef FEAT_GUI_GTK
+    GtkWidget *id;		/* Id of real scroll bar */
+    unsigned long handler_id;   /* Id of "value_changed" signal handler */
+#endif
+
+#ifdef FEAT_GUI_MSWIN
+    HWND	id;		/* Id of real scroll bar */
+    int		scroll_shift;	/* The scrollbar stuff can handle only up to
+				   32767 lines.  When the file is longer,
+				   scroll_shift is set to the number of shifts
+				   to reduce the count.  */
+#endif
+#if FEAT_GUI_BEOS
+    VimScrollBar *id;		/* Pointer to real scroll bar */
+#endif
+#ifdef FEAT_GUI_MAC
+    ControlHandle id;		/* A handle to the scrollbar */
+#endif
+#ifdef RISCOS
+    int		id;		/* Window handle of scrollbar window */
+#endif
+#ifdef FEAT_GUI_PHOTON
+    PtWidget_t	*id;
+#endif
+} scrollbar_T;
+
+typedef long	    guicolor_T;	/* handle for a GUI color; for X11 this should
+				   be "Pixel", but that's an unsigned and we
+				   need a signed value */
+#define INVALCOLOR (guicolor_T)-11111	/* number for invalid color; on 32 bit
+				   displays there is a tiny chance this is an
+				   actual color */
+
+#ifdef FEAT_GUI_GTK
+# ifdef HAVE_GTK2
+  typedef PangoFontDescription	*GuiFont;       /* handle for a GUI font */
+  typedef PangoFontDescription  *GuiFontset;    /* handle for a GUI fontset */
+# else
+  typedef GdkFont	*GuiFont;	/* handle for a GUI font */
+  typedef GdkFont	*GuiFontset;	/* handle for a GUI fontset */
+# endif
+# define NOFONT		(GuiFont)NULL
+# define NOFONTSET	(GuiFontset)NULL
+#else
+# ifdef FEAT_GUI_PHOTON
+  typedef char		*GuiFont;
+  typedef char		*GuiFontset;
+#  define NOFONT	(GuiFont)NULL
+#  define NOFONTSET	(GuiFontset)NULL
+# else
+#  ifdef FEAT_GUI_X11
+  typedef XFontStruct	*GuiFont;	/* handle for a GUI font */
+  typedef XFontSet	GuiFontset;	/* handle for a GUI fontset */
+#   define NOFONT	(GuiFont)0
+#   define NOFONTSET	(GuiFontset)0
+#  else
+  typedef long_u	GuiFont;	/* handle for a GUI font */
+  typedef long_u	GuiFontset;	/* handle for a GUI fontset */
+#   define NOFONT	(GuiFont)0
+#   define NOFONTSET	(GuiFontset)0
+#  endif
+# endif
+#endif
+
+typedef struct Gui
+{
+    int		in_focus;	    /* Vim has input focus */
+    int		in_use;		    /* Is the GUI being used? */
+    int		starting;	    /* GUI will start in a little while */
+    int		shell_created;	    /* Has the shell been created yet? */
+    int		dying;		    /* Is vim dying? Then output to terminal */
+    int		dofork;		    /* Use fork() when GUI is starting */
+    int		dragged_sb;	    /* Which scrollbar being dragged, if any? */
+    win_T	*dragged_wp;	    /* Which WIN's sb being dragged, if any? */
+    int		pointer_hidden;	    /* Is the mouse pointer hidden? */
+    int		col;		    /* Current cursor column in GUI display */
+    int		row;		    /* Current cursor row in GUI display */
+    int		cursor_col;	    /* Physical cursor column in GUI display */
+    int		cursor_row;	    /* Physical cursor row in GUI display */
+    char	cursor_is_valid;    /* There is a cursor at cursor_row/col */
+    int		num_cols;	    /* Number of columns */
+    int		num_rows;	    /* Number of rows */
+    int		scroll_region_top;  /* Top (first) line of scroll region */
+    int		scroll_region_bot;  /* Bottom (last) line of scroll region */
+    int		scroll_region_left;  /* Left (first) column of scroll region */
+    int		scroll_region_right;  /* Right (last) col. of scroll region */
+    int		highlight_mask;	    /* Highlight attribute mask */
+    int		scrollbar_width;    /* Width of vertical scrollbars */
+    int		scrollbar_height;   /* Height of horizontal scrollbar */
+    int		left_sbar_x;	    /* Calculated x coord for left scrollbar */
+    int		right_sbar_x;	    /* Calculated x coord for right scrollbar */
+
+#ifdef FEAT_MENU
+# ifndef FEAT_GUI_GTK
+    int		menu_height;	    /* Height of the menu bar */
+    int		menu_width;	    /* Width of the menu bar */
+# endif
+    char	menu_is_active;	    /* TRUE if menu is present */
+# ifdef FEAT_GUI_ATHENA
+    char	menu_height_fixed;  /* TRUE if menu height fixed */
+# endif
+#endif
+
+    scrollbar_T bottom_sbar;	    /* Bottom scrollbar */
+    int		which_scrollbars[3];/* Which scrollbar boxes are active? */
+    int		prev_wrap;	    /* For updating the horizontal scrollbar */
+    int		char_width;	    /* Width of char in pixels */
+    int		char_height;	    /* Height of char in pixels + 'linespace' */
+    int		char_ascent;	    /* Ascent of char in pixels */
+    int		border_width;	    /* Width of our border around text area */
+    int		border_offset;	    /* Total pixel offset for all borders */
+
+    GuiFont	norm_font;	    /* Normal font */
+#ifndef HAVE_GTK2
+    GuiFont	bold_font;	    /* Bold font */
+    GuiFont	ital_font;	    /* Italic font */
+    GuiFont	boldital_font;	    /* Bold-Italic font */
+#else
+    int		font_can_bold;	    /* Whether norm_font supports bold weight.
+				     * The styled font variants are not used. */
+#endif
+
+#if defined(FEAT_MENU) && !defined(HAVE_GTK2)
+# ifdef FONTSET_ALWAYS
+    GuiFontset	menu_fontset;	    /* set of fonts for multi-byte chars */
+# else
+    GuiFont	menu_font;	    /* menu item font */
+# endif
+#endif
+#ifdef FEAT_MBYTE
+    GuiFont	wide_font;	    /* 'guifontwide' font */
+#endif
+#ifdef FEAT_XFONTSET
+    GuiFontset	fontset;	    /* set of fonts for multi-byte chars */
+#endif
+    guicolor_T	back_pixel;	    /* Color of background */
+    guicolor_T	norm_pixel;	    /* Color of normal text */
+    guicolor_T	def_back_pixel;	    /* default Color of background */
+    guicolor_T	def_norm_pixel;	    /* default Color of normal text */
+
+#ifdef FEAT_GUI_X11
+    char	*rsrc_menu_fg_name;	/* Color of menu and dialog foregound */
+    guicolor_T	menu_fg_pixel;		/* Same in Pixel format */
+    char	*rsrc_menu_bg_name;	/* Color of menu and dialog backgound */
+    guicolor_T	menu_bg_pixel;		/* Same in Pixel format */
+    char	*rsrc_scroll_fg_name;	/* Color of scrollbar foreground */
+    guicolor_T	scroll_fg_pixel;	/* Same in Pixel format */
+    char	*rsrc_scroll_bg_name;	/* Color of scrollbar background */
+    guicolor_T	scroll_bg_pixel;	/* Same in Pixel format */
+
+# ifdef FEAT_GUI_MOTIF
+    guicolor_T	menu_def_fg_pixel;  /* Default menu foreground */
+    guicolor_T	menu_def_bg_pixel;  /* Default menu background */
+    guicolor_T	scroll_def_fg_pixel;  /* Default scrollbar foreground */
+    guicolor_T	scroll_def_bg_pixel;  /* Default scrollbar background */
+# endif
+    Display	*dpy;		    /* X display */
+    Window	wid;		    /* Window id of text area */
+    int		visibility;	    /* Is shell partially/fully obscured? */
+    GC		text_gc;
+    GC		back_gc;
+    GC		invert_gc;
+    Cursor	blank_pointer;	    /* Blank pointer */
+
+    /* X Resources */
+    char_u	*rsrc_font_name;    /* Resource font name, used if 'guifont'
+				       not set */
+    char_u	*rsrc_bold_font_name; /* Resource bold font name */
+    char_u	*rsrc_ital_font_name; /* Resource italic font name */
+    char_u	*rsrc_boldital_font_name;  /* Resource bold-italic font name */
+    char_u	*rsrc_menu_font_name;    /* Resource menu Font name */
+    Bool	rsrc_rev_video;	    /* Use reverse video? */
+
+    char_u	*geom;		    /* Geometry, eg "80x24" */
+    Bool	color_approx;	    /* Some color was approximated */
+#endif
+
+#ifdef FEAT_GUI_GTK
+    int		visibility;	    /* Is shell partially/fully obscured? */
+    GdkCursor	*blank_pointer;	    /* Blank pointer */
+
+    /* X Resources */
+    char_u	*geom;		    /* Geometry, eg "80x24" */
+
+    GtkWidget	*mainwin;	    /* top level GTK window */
+    GtkWidget	*formwin;	    /* manages all the windows below */
+    GtkWidget	*drawarea;	    /* the "text" area */
+# ifdef FEAT_MENU
+    GtkWidget	*menubar;	    /* menubar */
+# endif
+# ifdef FEAT_TOOLBAR
+    GtkWidget	*toolbar;	    /* toolbar */
+# endif
+# ifdef FEAT_GUI_GNOME
+    GtkWidget	*menubar_h;	    /* menubar handle */
+    GtkWidget	*toolbar_h;	    /* toolbar handle */
+# endif
+    GdkColor	*fgcolor;	    /* GDK-styled foreground color */
+    GdkColor	*bgcolor;	    /* GDK-styled background color */
+# ifndef HAVE_GTK2
+    GuiFont	current_font;
+# endif
+    GdkGC	*text_gc;	    /* cached GC for normal text */
+# ifdef HAVE_GTK2
+    PangoContext     *text_context; /* the context used for all text */
+    PangoFont	     *ascii_font;   /* cached font for ASCII strings */
+    PangoGlyphString *ascii_glyphs; /* cached code point -> glyph map */
+# endif
+
+    GtkAccelGroup *accel_group;
+# ifndef HAVE_GTK2
+    GtkWidget	*fontdlg;	    /* font selection dialog window */
+    char_u	*fontname;	    /* font name from font selection dialog */
+# endif
+    GtkWidget	*filedlg;	    /* file selection dialog */
+    char_u	*browse_fname;	    /* file name from filedlg */
+#endif	/* FEAT_GUI_GTK */
+
+#ifdef FEAT_FOOTER
+    int		footer_height;	    /* height of the message footer */
+#endif
+
+#if defined(FEAT_TOOLBAR) \
+	&& (defined(FEAT_GUI_ATHENA) || defined(FEAT_GUI_MOTIF))
+    int		toolbar_height;	    /* height of the toolbar */
+#endif
+
+#ifdef FEAT_BEVAL_TIP
+    /* Tooltip properties; also used for balloon evaluation */
+    char_u	*rsrc_tooltip_font_name; /* tooltip font name */
+    char	*rsrc_tooltip_fg_name;	/* tooltip foreground color name */
+    char	*rsrc_tooltip_bg_name;	/* tooltip background color name */
+    guicolor_T	tooltip_fg_pixel;	/* tooltip foreground color */
+    guicolor_T	tooltip_bg_pixel;	/* tooltip background color */
+    XFontSet	tooltip_fontset;	/* tooltip fontset */
+#endif
+
+#ifdef FEAT_GUI_MSWIN
+    GuiFont	currFont;	    /* Current font */
+    guicolor_T	currFgColor;	    /* Current foreground text color */
+    guicolor_T	currBgColor;	    /* Current background text color */
+#endif
+
+#ifdef FEAT_GUI_BEOS
+    VimApp     *vimApp;
+    VimWindow  *vimWindow;
+    VimFormView *vimForm;
+    VimTextAreaView *vimTextArea;
+    int		vdcmp;		    /* Vim Direct Communication Message Port */
+#endif
+
+#ifdef FEAT_GUI_MAC
+    WindowPtr	VimWindow;
+    MenuHandle	MacOSHelpMenu;	    /* Help menu provided by the MacOS */
+    int		MacOSHelpItems;	    /* Nr of help-items supplied by MacOS */
+    int		MacOSHaveCntxMenu;  /* Contextual menu available */
+    WindowPtr	wid;		    /* Window id of text area */
+    int		visibility;	    /* Is window partially/fully obscured? */
+#endif
+
+#if defined(FEAT_GUI_AMIGA)
+    struct Window *window;		/* a handle to the amiga window */
+    struct Menu	  *menu;		/* a pointer to the first menu */
+    struct TextFont *textfont;		/* a pointer to the font structure */
+#endif
+
+#ifdef RISCOS
+    int		window_handle;
+    char_u	*window_title;
+    int		window_title_size;
+    int		fg_colour;		/* in 0xBBGGRR format */
+    int		bg_colour;
+#endif
+
+#ifdef FEAT_GUI_PHOTON
+    PtWidget_t	*vimWindow;		/* PtWindow */
+    PtWidget_t	*vimTextArea;		/* PtRaw */
+    PtWidget_t	*vimContainer;		/* PtPanel */
+# if defined(FEAT_MENU) || defined(FEAT_TOOLBAR)
+    PtWidget_t	*vimToolBarGroup;
+# endif
+# ifdef FEAT_MENU
+    PtWidget_t	*vimMenuBar;
+# endif
+# ifdef FEAT_TOOLBAR
+    PtWidget_t	*vimToolBar;
+    int		toolbar_height;
+# endif
+    PhEvent_t	*event_buffer;
+#endif
+
+#ifdef FEAT_XIM
+    char	*rsrc_input_method;
+    char	*rsrc_preedit_type_name;
+#endif
+} gui_T;
+
+extern gui_T gui;			/* this is defined in gui.c */
+
+/* definitions of available window positionings for gui_*_position_in_parent()
+ */
+typedef enum
+{
+    VW_POS_MOUSE,
+    VW_POS_CENTER,
+    VW_POS_TOP_CENTER
+}
+gui_win_pos_T;
+
+#if defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_GTK) \
+	|| defined(MSWIN_FIND_REPLACE)
+/*
+ * Flags used to distinguish the different contexts in which the
+ * find/replace callback may be called.
+ */
+# define FRD_FINDNEXT	1	/* Find next in find dialog */
+# define FRD_R_FINDNEXT	2	/* Find next in repl dialog */
+# define FRD_REPLACE	3	/* Replace once */
+# define FRD_REPLACEALL	4	/* Replace remaining matches */
+# define FRD_UNDO	5	/* Undo replaced text */
+# define FRD_TYPE_MASK   7	/* Mask for the callback type */
+/* Flags which change the way searching is done. */
+# define FRD_WHOLE_WORD	0x08	/* match whole word only */
+# define FRD_MATCH_CASE	0x10	/* match case */
+#endif
