summaryrefslogtreecommitdiff
path: root/data/vim/patches/8.1.1230
diff options
context:
space:
mode:
Diffstat (limited to 'data/vim/patches/8.1.1230')
-rw-r--r--data/vim/patches/8.1.12305087
1 files changed, 5087 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.1230 b/data/vim/patches/8.1.1230
new file mode 100644
index 000000000..cf5780776
--- /dev/null
+++ b/data/vim/patches/8.1.1230
@@ -0,0 +1,5087 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.1230
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.1230
+Problem: A lot of code is shared between vim.exe and gvim.exe.
+Solution: Optionally put the shared code in vim.dll. (Ken Takata,
+ closes #4287)
+Files: Filelist, nsis/gvim.nsi, runtime/doc/gui_w32.txt,
+ src/Make_cyg_ming.mak, src/Make_mvc.mak, src/channel.c,
+ src/evalfunc.c, src/ex_cmds.c, src/ex_docmd.c, src/feature.h,
+ src/fileio.c, src/getchar.c, src/globals.h, src/gui.c, src/gui.h,
+ src/gui_gtk_x11.c, src/gui_w32.c, src/if_mzsch.c, src/main.c,
+ src/mbyte.c, src/memline.c, src/message.c, src/misc2.c,
+ src/normal.c, src/option.c, src/os_mswin.c, src/os_w32dll.c,
+ src/os_w32exe.c, src/os_win32.c, src/os_win32.h,
+ src/proto/gui.pro, src/proto/gui_w32.pro, src/proto/misc2.pro,
+ src/proto/os_mswin.pro, src/proto/os_win32.pro, src/syntax.c,
+ src/term.c, src/terminal.c, src/ui.c, src/version.c, src/vim.rc
+
+
+*** ../vim-8.1.1229/Filelist 2019-04-27 13:03:20.000715982 +0200
+--- Filelist 2019-04-28 18:55:14.804080057 +0200
+***************
+*** 454,459 ****
+--- 454,460 ----
+ src/iscygpty.h \
+ src/iid_ole.c \
+ src/os_dos.h \
++ src/os_w32dll.c \
+ src/os_w32exe.c \
+ src/os_win32.c \
+ src/os_mswin.c \
+*** ../vim-8.1.1229/nsis/gvim.nsi 2019-04-12 21:29:30.213641315 +0200
+--- nsis/gvim.nsi 2019-04-28 18:55:14.804080057 +0200
+***************
+*** 322,327 ****
+--- 322,330 ----
+
+ SetOutPath $0
+ File /oname=gvim.exe ${VIMSRC}\gvim_ole.exe
++ !if /FileExists "${VIMSRC}\vim${BIT}.dll"
++ File ${VIMSRC}\vim${BIT}.dll
++ !endif
+ File /oname=install.exe ${VIMSRC}\installw32.exe
+ File /oname=uninstal.exe ${VIMSRC}\uninstalw32.exe
+ File ${VIMSRC}\vimrun.exe
+*** ../vim-8.1.1229/runtime/doc/gui_w32.txt 2018-05-17 13:41:40.000000000 +0200
+--- runtime/doc/gui_w32.txt 2019-04-28 19:12:44.911186981 +0200
+***************
+*** 31,36 ****
+--- 31,47 ----
+ return with a command prompt after starting gvim. If not, you should use the
+ "start" command: >
+ start gvim [options] file ..
++ < *E988*
++ The console version with the |-g| option may also start the GUI by executing
++ gvim.exe: >
++ vim -g [options] file ..
++ To make this work, gvim.exe must exist in the same directory as the vim.exe,
++ and this feature must be enabled at compile time.
++
++ One may also use `:gui` from the console version. However, this is an
++ experimental feature and this feature must be enabled at compile time.
++ It uses a session file to recreate the current state of the console Vim in the
++ GUI Vim.
+
+ Note: All fonts (bold, italic) must be of the same size!!! If you don't do
+ this, text will disappear or mess up the display. Vim does not check the font
+***************
+*** 442,448 ****
+
+ XPM support *w32-xpm-support*
+
+! Gvim can be build on MS-Windows with support for XPM files. |+xpm_w32|
+ See the Make_mvc.mak file for instructions, search for XPM.
+
+ To try out if XPM support works do this: >
+--- 453,459 ----
+
+ XPM support *w32-xpm-support*
+
+! GVim can be build on MS-Windows with support for XPM files. |+xpm_w32|
+ See the Make_mvc.mak file for instructions, search for XPM.
+
+ To try out if XPM support works do this: >
+*** ../vim-8.1.1229/src/Make_cyg_ming.mak 2019-04-27 13:03:20.000715982 +0200
+--- src/Make_cyg_ming.mak 2019-04-28 18:55:14.804080057 +0200
+***************
+*** 36,42 ****
+ DEBUG=no
+
+ # set to yes to create a mapfile
+! # MAP=yes
+
+ # set to SIZE for size, SPEED for speed, MAXSPEED for maximum optimization
+ OPTIMIZE=MAXSPEED
+--- 36,42 ----
+ DEBUG=no
+
+ # set to yes to create a mapfile
+! #MAP=yes
+
+ # set to SIZE for size, SPEED for speed, MAXSPEED for maximum optimization
+ OPTIMIZE=MAXSPEED
+***************
+*** 44,49 ****
+--- 44,54 ----
+ # set to yes to make gvim, no for vim
+ GUI=yes
+
++ # set to yes to enable the DLL support (EXPERIMENTAL).
++ # Creates vim{32,64}.dll, and stub gvim.exe and vim.exe.
++ # "GUI" should be also set to "yes".
++ #VIMDLL=yes
++
+ # set to no if you do not want to use DirectWrite (DirectX)
+ # MinGW-w64 is needed, and ARCH should be set to i686 or x86-64.
+ DIRECTX=yes
+***************
+*** 687,693 ****
+ CFLAGS += -O2
+ endif
+ endif
+! CFLAGS += -s
+ endif
+
+ LIB = -lkernel32 -luser32 -lgdi32 -ladvapi32 -lcomdlg32 -lcomctl32 -lnetapi32 -lversion
+--- 692,698 ----
+ CFLAGS += -O2
+ endif
+ endif
+! LFLAGS += -s
+ endif
+
+ LIB = -lkernel32 -luser32 -lgdi32 -ladvapi32 -lcomdlg32 -lcomctl32 -lnetapi32 -lversion
+***************
+*** 739,745 ****
+ $(OUTDIR)/ops.o \
+ $(OUTDIR)/option.o \
+ $(OUTDIR)/os_mswin.o \
+- $(OUTDIR)/os_w32exe.o \
+ $(OUTDIR)/os_win32.o \
+ $(OUTDIR)/pathdef.o \
+ $(OUTDIR)/popupmnu.o \
+--- 744,749 ----
+***************
+*** 760,769 ****
+ $(OUTDIR)/usercmd.o \
+ $(OUTDIR)/userfunc.o \
+ $(OUTDIR)/version.o \
+- $(OUTDIR)/vimrc.o \
+ $(OUTDIR)/winclip.o \
+ $(OUTDIR)/window.o
+
+ ifdef PERL
+ OBJ += $(OUTDIR)/if_perl.o
+ endif
+--- 764,780 ----
+ $(OUTDIR)/usercmd.o \
+ $(OUTDIR)/userfunc.o \
+ $(OUTDIR)/version.o \
+ $(OUTDIR)/winclip.o \
+ $(OUTDIR)/window.o
+
++ ifeq ($(VIMDLL),yes)
++ OBJ += $(OUTDIR)/os_w32dll.o $(OUTDIR)/vimrcd.o
++ EXEOBJC = $(OUTDIR)/os_w32exec.o $(OUTDIR)/vimrcc.o
++ EXEOBJG = $(OUTDIR)/os_w32exeg.o $(OUTDIR)/vimrcg.o
++ else
++ OBJ += $(OUTDIR)/os_w32exe.o $(OUTDIR)/vimrc.o
++ endif
++
+ ifdef PERL
+ OBJ += $(OUTDIR)/if_perl.o
+ endif
+***************
+*** 870,885 ****
+
+ LFLAGS += -municode
+
+! ifeq ($(GUI),yes)
+ TARGET := gvim$(DEBUG_SUFFIX).exe
+ DEFINES += $(DEF_GUI)
+ OBJ += $(GUIOBJ)
+ LFLAGS += -mwindows
+ OUTDIR = gobj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)$(ARCH)
+ else
+ OBJ += $(CUIOBJ)
+ TARGET := vim$(DEBUG_SUFFIX).exe
+ OUTDIR = obj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)$(ARCH)
+ endif
+
+ ifdef GETTEXT
+--- 881,916 ----
+
+ LFLAGS += -municode
+
+! ifeq ($(VIMDLL),yes)
+! VIMEXE := vim$(DEBUG_SUFFIX).exe
+! GVIMEXE := gvim$(DEBUG_SUFFIX).exe
+! ifeq ($(ARCH),x86-64)
+! VIMDLLBASE := vim64$(DEBUG_SUFFIX)
+! else
+! VIMDLLBASE := vim32$(DEBUG_SUFFIX)
+! endif
+! TARGET = $(VIMDLLBASE).dll
+! LFLAGS += -shared
+! EXELFLAGS += -municode
+! ifneq ($(DEBUG),yes)
+! EXELFLAGS += -s
+! endif
+! DEFINES += $(DEF_GUI) -DVIMDLL
+! OBJ += $(GUIOBJ) $(CUIOBJ)
+! OUTDIR = dobj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)$(ARCH)
+! MAIN_TARGET = $(GVIMEXE) $(VIMEXE) $(VIMDLLBASE).dll
+! else ifeq ($(GUI),yes)
+ TARGET := gvim$(DEBUG_SUFFIX).exe
+ DEFINES += $(DEF_GUI)
+ OBJ += $(GUIOBJ)
+ LFLAGS += -mwindows
+ OUTDIR = gobj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)$(ARCH)
++ MAIN_TARGET = $(TARGET)
+ else
+ OBJ += $(CUIOBJ)
+ TARGET := vim$(DEBUG_SUFFIX).exe
+ OUTDIR = obj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)$(ARCH)
++ MAIN_TARGET = $(TARGET)
+ endif
+
+ ifdef GETTEXT
+***************
+*** 955,961 ****
+ LFLAGS += -Wl,-Map=$(TARGET).map
+ endif
+
+! all: $(TARGET) vimrun.exe xxd/xxd.exe tee/tee.exe install.exe uninstal.exe GvimExt/gvimext.dll
+
+ vimrun.exe: vimrun.c
+ $(CC) $(CFLAGS) -o vimrun.exe vimrun.c $(LIB)
+--- 986,992 ----
+ LFLAGS += -Wl,-Map=$(TARGET).map
+ endif
+
+! all: $(MAIN_TARGET) vimrun.exe xxd/xxd.exe tee/tee.exe install.exe uninstal.exe GvimExt/gvimext.dll
+
+ vimrun.exe: vimrun.c
+ $(CC) $(CFLAGS) -o vimrun.exe vimrun.c $(LIB)
+***************
+*** 966,973 ****
+--- 997,1015 ----
+ uninstal.exe: uninstal.c
+ $(CC) $(CFLAGS) -o uninstal.exe uninstal.c $(LIB)
+
++ ifeq ($(VIMDLL),yes)
++ $(TARGET): $(OUTDIR) $(OBJ)
++ $(LINK) $(CFLAGS) $(LFLAGS) -o $@ $(OBJ) $(LIB) -lole32 -luuid -lgdi32 $(LUA_LIB) $(MZSCHEME_LIBDIR) $(MZSCHEME_LIB) $(PYTHONLIB) $(PYTHON3LIB) $(RUBYLIB)
++
++ $(GVIMEXE): $(OUTDIR) $(EXEOBJG) $(VIMDLLBASE).dll
++ $(CC) -L. $(EXELFLAGS) -mwindows -o $@ $(EXEOBJG) -l$(VIMDLLBASE)
++
++ $(VIMEXE): $(OUTDIR) $(EXEOBJC) $(VIMDLLBASE).dll
++ $(CC) -L. $(EXELFLAGS) -o $@ $(EXEOBJC) -l$(VIMDLLBASE)
++ else
+ $(TARGET): $(OUTDIR) $(OBJ)
+ $(LINK) $(CFLAGS) $(LFLAGS) -o $@ $(OBJ) $(LIB) -lole32 -luuid $(LUA_LIB) $(MZSCHEME_LIBDIR) $(MZSCHEME_LIB) $(PYTHONLIB) $(PYTHON3LIB) $(RUBYLIB)
++ endif
+
+ upx: exes
+ upx gvim.exe
+***************
+*** 996,1002 ****
+ -$(DEL) $(OUTDIR)$(DIRSLASH)*.o
+ -$(DEL) $(OUTDIR)$(DIRSLASH)*.res
+ -rmdir $(OUTDIR)
+! -$(DEL) $(TARGET) vimrun.exe install.exe uninstal.exe
+ -$(DEL) pathdef.c
+ ifdef PERL
+ -$(DEL) if_perl.c
+--- 1038,1044 ----
+ -$(DEL) $(OUTDIR)$(DIRSLASH)*.o
+ -$(DEL) $(OUTDIR)$(DIRSLASH)*.res
+ -rmdir $(OUTDIR)
+! -$(DEL) $(MAIN_TARGET) vimrun.exe install.exe uninstal.exe
+ -$(DEL) pathdef.c
+ ifdef PERL
+ -$(DEL) if_perl.c
+***************
+*** 1025,1098 ****
+ $(OUTDIR)/%.o : %.c $(INCL)
+ $(CC) -c $(CFLAGS) $< -o $@
+
+! $(OUTDIR)/vimrc.o: vim.rc version.h gui_w32_rc.h
+ $(WINDRES) $(WINDRES_FLAGS) $(DEFINES) \
+ --input-format=rc --output-format=coff -i vim.rc -o $@
+
+ $(OUTDIR):
+ $(MKDIR) $(OUTDIR)
+
+ $(OUTDIR)/gui_dwrite.o: gui_dwrite.cpp $(INCL) gui_dwrite.h
+! $(CC) -c $(CFLAGS) $(CXXFLAGS) gui_dwrite.cpp -o $(OUTDIR)/gui_dwrite.o
+
+ $(OUTDIR)/gui.o: gui.c $(INCL) $(GUI_INCL)
+! $(CC) -c $(CFLAGS) gui.c -o $(OUTDIR)/gui.o
+
+ $(OUTDIR)/beval.o: beval.c $(INCL) $(GUI_INCL)
+! $(CC) -c $(CFLAGS) beval.c -o $(OUTDIR)/beval.o
+
+ $(OUTDIR)/gui_beval.o: gui_beval.c $(INCL) $(GUI_INCL)
+! $(CC) -c $(CFLAGS) gui_beval.c -o $(OUTDIR)/gui_beval.o
+
+ $(OUTDIR)/gui_w32.o: gui_w32.c $(INCL) $(GUI_INCL)
+! $(CC) -c $(CFLAGS) gui_w32.c -o $(OUTDIR)/gui_w32.o
+
+ $(OUTDIR)/if_cscope.o: if_cscope.c $(INCL) if_cscope.h
+! $(CC) -c $(CFLAGS) if_cscope.c -o $(OUTDIR)/if_cscope.o
+
+ $(OUTDIR)/if_mzsch.o: if_mzsch.c $(INCL) $(MZSCHEME_INCL) $(MZ_EXTRA_DEP)
+! $(CC) -c $(CFLAGS) if_mzsch.c -o $(OUTDIR)/if_mzsch.o
+
+ mzscheme_base.c:
+ $(MZSCHEME)/mzc --c-mods mzscheme_base.c ++lib scheme/base
+
+ # Remove -D__IID_DEFINED__ for newer versions of the w32api
+ $(OUTDIR)/if_ole.o: if_ole.cpp $(INCL) if_ole.h
+! $(CC) $(CFLAGS) $(CXXFLAGS) -c -o $(OUTDIR)/if_ole.o if_ole.cpp
+
+ auto/if_perl.c: if_perl.xs typemap
+ $(XSUBPP) -prototypes -typemap \
+ $(PERLTYPEMAP) if_perl.xs -output $@
+
+ $(OUTDIR)/if_perl.o: auto/if_perl.c $(INCL)
+! $(CC) -c $(CFLAGS) auto/if_perl.c -o $(OUTDIR)/if_perl.o
+
+
+ $(OUTDIR)/if_ruby.o: if_ruby.c $(INCL)
+ ifeq (16, $(RUBY))
+! $(CC) $(CFLAGS) -U_WIN32 -c -o $(OUTDIR)/if_ruby.o if_ruby.c
+ endif
+
+ $(OUTDIR)/iscygpty.o: iscygpty.c $(CUI_INCL)
+ $(CC) -c $(CFLAGS) iscygpty.c -o $(OUTDIR)/iscygpty.o -U_WIN32_WINNT -D_WIN32_WINNT=0x0600 -DUSE_DYNFILEID -DENABLE_STUB_IMPL
+
+ $(OUTDIR)/main.o: main.c $(INCL) $(CUI_INCL)
+! $(CC) -c $(CFLAGS) main.c -o $(OUTDIR)/main.o
+
+ $(OUTDIR)/netbeans.o: netbeans.c $(INCL) $(NBDEBUG_INCL) $(NBDEBUG_SRC)
+! $(CC) -c $(CFLAGS) netbeans.c -o $(OUTDIR)/netbeans.o
+
+ $(OUTDIR)/os_win32.o: os_win32.c $(INCL) $(MZSCHEME_INCL)
+! $(CC) -c $(CFLAGS) os_win32.c -o $(OUTDIR)/os_win32.o
+
+ $(OUTDIR)/regexp.o: regexp.c regexp_nfa.c $(INCL)
+! $(CC) -c $(CFLAGS) regexp.c -o $(OUTDIR)/regexp.o
+
+ $(OUTDIR)/terminal.o: terminal.c $(INCL) $(TERM_DEPS)
+! $(CC) -c $(CFLAGS) terminal.c -o $(OUTDIR)/terminal.o
+!
+! $(OUTDIR)/textprop.o: textprop.c $(INCL)
+! $(CC) -c $(CFLAGS) textprop.c -o $(OUTDIR)/textprop.o
+
+
+ CCCTERM = $(CC) -c $(CFLAGS) -Ilibvterm/include -DINLINE="" \
+--- 1067,1161 ----
+ $(OUTDIR)/%.o : %.c $(INCL)
+ $(CC) -c $(CFLAGS) $< -o $@
+
+! ifeq ($(VIMDLL),yes)
+! $(OUTDIR)/vimrcc.o: vim.rc gvim.exe.mnf version.h gui_w32_rc.h vim.ico
+! $(WINDRES) $(WINDRES_FLAGS) $(DEFINES) -UFEAT_GUI_MSWIN \
+! --input-format=rc --output-format=coff -i vim.rc -o $@
+!
+! $(OUTDIR)/vimrcg.o: vim.rc gvim.exe.mnf version.h gui_w32_rc.h vim.ico
+! $(WINDRES) $(WINDRES_FLAGS) $(DEFINES) \
+! --input-format=rc --output-format=coff -i vim.rc -o $@
+!
+! $(OUTDIR)/vimrcd.o: vim.rc version.h gui_w32_rc.h \
+! tools.bmp tearoff.bmp vim.ico vim_error.ico \
+! vim_alert.ico vim_info.ico vim_quest.ico
+! $(WINDRES) $(WINDRES_FLAGS) $(DEFINES) -DRCDLL -DVIMDLLBASE=\\\"$(VIMDLLBASE)\\\" \
+! --input-format=rc --output-format=coff -i vim.rc -o $@
+! else
+! $(OUTDIR)/vimrc.o: vim.rc gvim.exe.mnf version.h gui_w32_rc.h \
+! tools.bmp tearoff.bmp vim.ico vim_error.ico \
+! vim_alert.ico vim_info.ico vim_quest.ico
+ $(WINDRES) $(WINDRES_FLAGS) $(DEFINES) \
+ --input-format=rc --output-format=coff -i vim.rc -o $@
++ endif
+
+ $(OUTDIR):
+ $(MKDIR) $(OUTDIR)
+
+ $(OUTDIR)/gui_dwrite.o: gui_dwrite.cpp $(INCL) gui_dwrite.h
+! $(CC) -c $(CFLAGS) $(CXXFLAGS) gui_dwrite.cpp -o $@
+
+ $(OUTDIR)/gui.o: gui.c $(INCL) $(GUI_INCL)
+! $(CC) -c $(CFLAGS) gui.c -o $@
+
+ $(OUTDIR)/beval.o: beval.c $(INCL) $(GUI_INCL)
+! $(CC) -c $(CFLAGS) beval.c -o $@
+
+ $(OUTDIR)/gui_beval.o: gui_beval.c $(INCL) $(GUI_INCL)
+! $(CC) -c $(CFLAGS) gui_beval.c -o $@
+
+ $(OUTDIR)/gui_w32.o: gui_w32.c $(INCL) $(GUI_INCL)
+! $(CC) -c $(CFLAGS) gui_w32.c -o $@
+
+ $(OUTDIR)/if_cscope.o: if_cscope.c $(INCL) if_cscope.h
+! $(CC) -c $(CFLAGS) if_cscope.c -o $@
+
+ $(OUTDIR)/if_mzsch.o: if_mzsch.c $(INCL) $(MZSCHEME_INCL) $(MZ_EXTRA_DEP)
+! $(CC) -c $(CFLAGS) if_mzsch.c -o $@
+
+ mzscheme_base.c:
+ $(MZSCHEME)/mzc --c-mods mzscheme_base.c ++lib scheme/base
+
+ # Remove -D__IID_DEFINED__ for newer versions of the w32api
+ $(OUTDIR)/if_ole.o: if_ole.cpp $(INCL) if_ole.h
+! $(CC) -c $(CFLAGS) $(CXXFLAGS) if_ole.cpp -o $@
+
+ auto/if_perl.c: if_perl.xs typemap
+ $(XSUBPP) -prototypes -typemap \
+ $(PERLTYPEMAP) if_perl.xs -output $@
+
+ $(OUTDIR)/if_perl.o: auto/if_perl.c $(INCL)
+! $(CC) -c $(CFLAGS) auto/if_perl.c -o $@
+
+
+ $(OUTDIR)/if_ruby.o: if_ruby.c $(INCL)
+ ifeq (16, $(RUBY))
+! $(CC) $(CFLAGS) -U_WIN32 -c -o $@ if_ruby.c
+ endif
+
+ $(OUTDIR)/iscygpty.o: iscygpty.c $(CUI_INCL)
+ $(CC) -c $(CFLAGS) iscygpty.c -o $(OUTDIR)/iscygpty.o -U_WIN32_WINNT -D_WIN32_WINNT=0x0600 -DUSE_DYNFILEID -DENABLE_STUB_IMPL
+
+ $(OUTDIR)/main.o: main.c $(INCL) $(CUI_INCL)
+! $(CC) -c $(CFLAGS) main.c -o $@
+
+ $(OUTDIR)/netbeans.o: netbeans.c $(INCL) $(NBDEBUG_INCL) $(NBDEBUG_SRC)
+! $(CC) -c $(CFLAGS) netbeans.c -o $@
+!
+! $(OUTDIR)/os_w32exec.o: os_w32exe.c $(INCL)
+! $(CC) -c $(CFLAGS) -UFEAT_GUI_MSWIN os_w32exe.c -o $@
+!
+! $(OUTDIR)/os_w32exeg.o: os_w32exe.c $(INCL)
+! $(CC) -c $(CFLAGS) os_w32exe.c -o $@
+
+ $(OUTDIR)/os_win32.o: os_win32.c $(INCL) $(MZSCHEME_INCL)
+! $(CC) -c $(CFLAGS) os_win32.c -o $@
+
+ $(OUTDIR)/regexp.o: regexp.c regexp_nfa.c $(INCL)
+! $(CC) -c $(CFLAGS) regexp.c -o $@
+
+ $(OUTDIR)/terminal.o: terminal.c $(INCL) $(TERM_DEPS)
+! $(CC) -c $(CFLAGS) terminal.c -o $@
+
+
+ CCCTERM = $(CC) -c $(CFLAGS) -Ilibvterm/include -DINLINE="" \
+***************
+*** 1100,1149 ****
+ -DIS_COMBINING_FUNCTION=utf_iscomposing_uint \
+ -DWCWIDTH_FUNCTION=utf_uint2cells
+
+! $(OUTDIR)/encoding.o: libvterm/src/encoding.c $(TERM_DEPS)
+! $(CCCTERM) libvterm/src/encoding.c -o $@
+!
+! $(OUTDIR)/keyboard.o: libvterm/src/keyboard.c $(TERM_DEPS)
+! $(CCCTERM) libvterm/src/keyboard.c -o $@
+!
+! $(OUTDIR)/mouse.o: libvterm/src/mouse.c $(TERM_DEPS)
+! $(CCCTERM) libvterm/src/mouse.c -o $@
+!
+! $(OUTDIR)/parser.o: libvterm/src/parser.c $(TERM_DEPS)
+! $(CCCTERM) libvterm/src/parser.c -o $@
+!
+! $(OUTDIR)/pen.o: libvterm/src/pen.c $(TERM_DEPS)
+! $(CCCTERM) libvterm/src/pen.c -o $@
+
+- $(OUTDIR)/termscreen.o: libvterm/src/termscreen.c $(TERM_DEPS)
+- $(CCCTERM) libvterm/src/termscreen.c -o $@
+
+! $(OUTDIR)/state.o: libvterm/src/state.c $(TERM_DEPS)
+! $(CCCTERM) libvterm/src/state.c -o $@
+!
+! $(OUTDIR)/unicode.o: libvterm/src/unicode.c $(TERM_DEPS)
+! $(CCCTERM) libvterm/src/unicode.c -o $@
+!
+! $(OUTDIR)/vterm.o: libvterm/src/vterm.c $(TERM_DEPS)
+! $(CCCTERM) libvterm/src/vterm.c -o $@
+!
+! $(OUTDIR)/xdiffi.o: xdiff/xdiffi.c $(XDIFF_DEPS)
+! $(CC) -c $(CFLAGS) xdiff/xdiffi.c -o $(OUTDIR)/xdiffi.o
+!
+! $(OUTDIR)/xemit.o: xdiff/xemit.c $(XDIFF_DEPS)
+! $(CC) -c $(CFLAGS) xdiff/xemit.c -o $(OUTDIR)/xemit.o
+!
+! $(OUTDIR)/xprepare.o: xdiff/xprepare.c $(XDIFF_DEPS)
+! $(CC) -c $(CFLAGS) xdiff/xprepare.c -o $(OUTDIR)/xprepare.o
+!
+! $(OUTDIR)/xutils.o: xdiff/xutils.c $(XDIFF_DEPS)
+! $(CC) -c $(CFLAGS) xdiff/xutils.c -o $(OUTDIR)/xutils.o
+!
+! $(OUTDIR)/xhistogram.o: xdiff/xhistogram.c $(XDIFF_DEPS)
+! $(CC) -c $(CFLAGS) xdiff/xhistogram.c -o $(OUTDIR)/xhistogram.o
+
+- $(OUTDIR)/xpatience.o: xdiff/xpatience.c $(XDIFF_DEPS)
+- $(CC) -c $(CFLAGS) xdiff/xpatience.c -o $(OUTDIR)/xpatience.o
+
+ pathdef.c: $(INCL)
+ ifneq (sh.exe, $(SHELL))
+--- 1163,1175 ----
+ -DIS_COMBINING_FUNCTION=utf_iscomposing_uint \
+ -DWCWIDTH_FUNCTION=utf_uint2cells
+
+! $(OUTDIR)/%.o : libvterm/src/%.c $(TERM_DEPS)
+! $(CCCTERM) $< -o $@
+
+
+! $(OUTDIR)/%.o : xdiff/%.c $(XDIFF_DEPS)
+! $(CC) -c $(CFLAGS) $< -o $@
+
+
+ pathdef.c: $(INCL)
+ ifneq (sh.exe, $(SHELL))
+*** ../vim-8.1.1229/src/Make_mvc.mak 2019-04-27 13:03:20.000715982 +0200
+--- src/Make_mvc.mak 2019-04-28 18:55:14.804080057 +0200
+***************
+*** 40,45 ****
+--- 40,51 ----
+ #
+ # Terminal support: TERMINAL=yes (default is yes)
+ #
++ # DLL support (EXPERIMENTAL): VIMDLL=yes (default is no)
++ # Creates vim{32,64}.dll, and stub gvim.exe and vim.exe.
++ # The shared codes between the GUI and the console are built into
++ # the DLL. This reduces the total file size and memory usage.
++ # Also supports `vim -g` and the `:gui` command.
++ #
+ # Lua interface:
+ # LUA=[Path to Lua directory]
+ # DYNAMIC_LUA=yes (to load the Lua DLL dynamically)
+***************
+*** 178,183 ****
+--- 184,193 ----
+
+ TARGETOS = WINNT
+
++ !if "$(VIMDLL)" == "yes"
++ GUI = yes
++ !endif
++
+ !ifndef DIRECTX
+ DIRECTX = $(GUI)
+ !endif
+***************
+*** 185,191 ****
+ # Select one of eight object code directories, depends on GUI, OLE, DEBUG and
+ # interfaces.
+ # If you change something else, do "make clean" first!
+! !if "$(GUI)" == "yes"
+ OBJDIR = .\ObjG
+ !else
+ OBJDIR = .\ObjC
+--- 195,203 ----
+ # Select one of eight object code directories, depends on GUI, OLE, DEBUG and
+ # interfaces.
+ # If you change something else, do "make clean" first!
+! !if "$(VIMDLL)" == "yes"
+! OBJDIR = .\ObjD
+! !elseif "$(GUI)" == "yes"
+ OBJDIR = .\ObjG
+ !else
+ OBJDIR = .\ObjC
+***************
+*** 410,416 ****
+ !endif
+ !endif
+
+! # GUI sepcific features.
+ !if "$(GUI)" == "yes"
+ # Only allow NETBEANS for a GUI build and CHANNEL.
+ !if "$(NETBEANS)" == "yes" && "$(CHANNEL)" == "yes"
+--- 422,428 ----
+ !endif
+ !endif
+
+! # GUI specific features.
+ !if "$(GUI)" == "yes"
+ # Only allow NETBEANS for a GUI build and CHANNEL.
+ !if "$(NETBEANS)" == "yes" && "$(CHANNEL)" == "yes"
+***************
+*** 461,467 ****
+ XPM_OBJ = $(OBJDIR)/xpm_w32.obj
+ XPM_DEFS = -DFEAT_XPM_W32
+ !if $(MSVC_MAJOR) >= 14
+! # VC14 cannot use a library built by VC12 or eariler, because VC14 uses
+ # Universal CRT.
+ XPM_LIB = $(XPM)\lib-vc14\libXpm.lib
+ !else
+--- 473,479 ----
+ XPM_OBJ = $(OBJDIR)/xpm_w32.obj
+ XPM_DEFS = -DFEAT_XPM_W32
+ !if $(MSVC_MAJOR) >= 14
+! # VC14 cannot use a library built by VC12 or earlier, because VC14 uses
+ # Universal CRT.
+ XPM_LIB = $(XPM)\lib-vc14\libXpm.lib
+ !else
+***************
+*** 566,572 ****
+ # VC<11 generates fp87 code by default
+ ! if $(MSVC_MAJOR) < 11
+ CPUARG =
+! # VC>=11 needs explicit insturctions to generate fp87 code
+ ! else
+ CPUARG = /arch:IA32
+ ! endif
+--- 578,584 ----
+ # VC<11 generates fp87 code by default
+ ! if $(MSVC_MAJOR) < 11
+ CPUARG =
+! # VC>=11 needs explicit instructions to generate fp87 code
+ ! else
+ CPUARG = /arch:IA32
+ ! endif
+***************
+*** 612,617 ****
+--- 624,640 ----
+ # Pass CPUARG to GvimExt, to avoid using version-dependent defaults
+ MAKEFLAGS_GVIMEXT = $(MAKEFLAGS_GVIMEXT) CPUARG="$(CPUARG)"
+
++ !if "$(VIMDLL)" == "yes"
++ VIMDLLBASE = vim
++ ! if "$(ASSEMBLY_ARCHITECTURE)" == "i386"
++ VIMDLLBASE = $(VIMDLLBASE)32
++ ! else
++ VIMDLLBASE = $(VIMDLLBASE)64
++ ! endif
++ ! if "$(DEBUG)" == "yes"
++ VIMDLLBASE = $(VIMDLLBASE)d
++ ! endif
++ !endif
+
+ LIBC =
+ DEBUGINFO = /Zi
+***************
+*** 747,753 ****
+ $(OUTDIR)\ops.obj \
+ $(OUTDIR)\option.obj \
+ $(OUTDIR)\os_mswin.obj \
+- $(OUTDIR)\os_w32exe.obj \
+ $(OUTDIR)\os_win32.obj \
+ $(OUTDIR)\pathdef.obj \
+ $(OUTDIR)\popupmnu.obj \
+--- 770,775 ----
+***************
+*** 769,775 ****
+ $(OUTDIR)\userfunc.obj \
+ $(OUTDIR)\winclip.obj \
+ $(OUTDIR)\window.obj \
+! $(OUTDIR)\vim.res
+
+ !if "$(OLE)" == "yes"
+ CFLAGS = $(CFLAGS) -DFEAT_OLE
+--- 791,805 ----
+ $(OUTDIR)\userfunc.obj \
+ $(OUTDIR)\winclip.obj \
+ $(OUTDIR)\window.obj \
+!
+! !if "$(VIMDLL)" == "yes"
+! OBJ = $(OBJ) $(OUTDIR)\os_w32dll.obj $(OUTDIR)\vimd.res
+! EXEOBJC = $(OUTDIR)\os_w32exec.obj $(OUTDIR)\vimc.res
+! EXEOBJG = $(OUTDIR)\os_w32exeg.obj $(OUTDIR)\vimg.res
+! CFLAGS = $(CFLAGS) -DVIMDLL
+! !else
+! OBJ = $(OBJ) $(OUTDIR)\os_w32exe.obj $(OUTDIR)\vim.res
+! !endif
+
+ !if "$(OLE)" == "yes"
+ CFLAGS = $(CFLAGS) -DFEAT_OLE
+***************
+*** 800,806 ****
+--- 830,844 ----
+ SUBSYSTEM = windows
+ CFLAGS = $(CFLAGS) -DFEAT_GUI_MSWIN
+ RCFLAGS = $(RCFLAGS) -DFEAT_GUI_MSWIN
++ ! if "$(VIMDLL)" == "yes"
++ SUBSYSTEM_CON = console
++ GVIM = g$(VIM)
++ CUI_INCL = iscygpty.h
++ CUI_OBJ = $(OUTDIR)\iscygpty.obj
++ RCFLAGS = $(RCFLAGS) -DVIMDLL
++ ! else
+ VIM = g$(VIM)
++ ! endif
+ GUI_INCL = \
+ gui.h
+ GUI_OBJ = \
+***************
+*** 839,844 ****
+--- 877,885 ----
+ !if "$(SUBSYSTEM_VER)" != ""
+ SUBSYSTEM = $(SUBSYSTEM),$(SUBSYSTEM_VER)
+ SUBSYSTEM_TOOLS = $(SUBSYSTEM_TOOLS),$(SUBSYSTEM_VER)
++ ! if "$(VIMDLL)" != "yes"
++ SUBSYSTEM_CON = $(SUBSYSTEM_CON),$(SUBSYSTEM_VER)
++ ! endif
+ # Pass SUBSYSTEM_VER to GvimExt and other tools
+ MAKEFLAGS_GVIMEXT = $(MAKEFLAGS_GVIMEXT) SUBSYSTEM_VER=$(SUBSYSTEM_VER)
+ MAKEFLAGS_TOOLS = $(MAKEFLAGS_TOOLS) SUBSYSTEM_VER=$(SUBSYSTEM_VER)
+***************
+*** 1174,1180 ****
+--- 1215,1225 ----
+ # debug more conveniently (able to look at variables which are in registers)
+ #
+ CFLAGS = $(CFLAGS) /Fd$(OUTDIR)/ $(DEBUGINFO)
++ !if "$(VIMDLL)" == "yes"
++ LINK_PDB = /PDB:$(VIMDLLBASE).pdb -debug
++ !else
+ LINK_PDB = /PDB:$(VIM).pdb -debug
++ !endif
+
+ #
+ # End extra feature include
+***************
+*** 1186,1192 ****
+
+ # Add /opt:ref to remove unreferenced functions and data even when /DEBUG is
+ # added.
+! conflags = /nologo /subsystem:$(SUBSYSTEM) /opt:ref
+
+ PATHDEF_SRC = $(OUTDIR)\pathdef.c
+
+--- 1231,1237 ----
+
+ # Add /opt:ref to remove unreferenced functions and data even when /DEBUG is
+ # added.
+! conflags = /nologo /opt:ref
+
+ PATHDEF_SRC = $(OUTDIR)\pathdef.c
+
+***************
+*** 1219,1225 ****
+ LINKARGS1 = $(LINKARGS1) /HIGHENTROPYVA:NO
+ !endif
+
+! all: $(VIM).exe \
+ vimrun.exe \
+ install.exe \
+ uninstal.exe \
+--- 1264,1276 ----
+ LINKARGS1 = $(LINKARGS1) /HIGHENTROPYVA:NO
+ !endif
+
+! !if "$(VIMDLL)" == "yes"
+! MAIN_TARGET = $(GVIM).exe $(VIM).exe $(VIMDLLBASE).dll
+! !else
+! MAIN_TARGET = $(VIM).exe
+! !endif
+!
+! all: $(MAIN_TARGET) \
+ vimrun.exe \
+ install.exe \
+ uninstal.exe \
+***************
+*** 1227,1243 ****
+ tee/tee.exe \
+ GvimExt/gvimext.dll
+
+ $(VIM).exe: $(OUTDIR) $(OBJ) $(XDIFF_OBJ) $(GUI_OBJ) $(CUI_OBJ) $(OLE_OBJ) $(OLE_IDL) $(MZSCHEME_OBJ) \
+ $(LUA_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ) $(TCL_OBJ) \
+ $(CSCOPE_OBJ) $(TERM_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ) $(XPM_OBJ) \
+ version.c version.h
+ $(CC) $(CFLAGS_OUTDIR) version.c
+! $(link) $(LINKARGS1) -out:$(VIM).exe $(OBJ) $(XDIFF_OBJ) $(GUI_OBJ) $(CUI_OBJ) $(OLE_OBJ) \
+ $(LUA_OBJ) $(MZSCHEME_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ) \
+ $(TCL_OBJ) $(CSCOPE_OBJ) $(TERM_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ) \
+ $(XPM_OBJ) $(OUTDIR)\version.obj $(LINKARGS2)
+ if exist $(VIM).exe.manifest mt.exe -nologo -manifest $(VIM).exe.manifest -updateresource:$(VIM).exe;1
+
+ $(VIM): $(VIM).exe
+
+ $(OUTDIR):
+--- 1278,1318 ----
+ tee/tee.exe \
+ GvimExt/gvimext.dll
+
++ !if "$(VIMDLL)" == "yes"
++
++ $(VIMDLLBASE).dll: $(OUTDIR) $(OBJ) $(XDIFF_OBJ) $(GUI_OBJ) $(CUI_OBJ) $(OLE_OBJ) $(OLE_IDL) $(MZSCHEME_OBJ) \
++ $(LUA_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ) $(TCL_OBJ) \
++ $(CSCOPE_OBJ) $(TERM_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ) $(XPM_OBJ) \
++ version.c version.h
++ $(CC) $(CFLAGS_OUTDIR) version.c
++ $(link) $(LINKARGS1) /dll -out:$(VIMDLLBASE).dll $(OBJ) $(XDIFF_OBJ) $(GUI_OBJ) $(CUI_OBJ) $(OLE_OBJ) \
++ $(LUA_OBJ) $(MZSCHEME_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ) \
++ $(TCL_OBJ) $(CSCOPE_OBJ) $(TERM_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ) \
++ $(XPM_OBJ) $(OUTDIR)\version.obj $(LINKARGS2)
++
++ $(GVIM).exe: $(OUTDIR) $(EXEOBJG) $(VIMDLLBASE).dll
++ $(link) $(LINKARGS1) /subsystem:$(SUBSYSTEM) -out:$(GVIM).exe $(EXEOBJG) $(VIMDLLBASE).lib $(LIBC)
++ if exist $(GVIM).exe.manifest mt.exe -nologo -manifest $(GVIM).exe.manifest -updateresource:$(GVIM).exe;1
++
++ $(VIM).exe: $(OUTDIR) $(EXEOBJC) $(VIMDLLBASE).dll
++ $(link) $(LINKARGS1) /subsystem:$(SUBSYSTEM_CON) -out:$(VIM).exe $(EXEOBJC) $(VIMDLLBASE).lib $(LIBC)
++ if exist $(VIM).exe.manifest mt.exe -nologo -manifest $(VIM).exe.manifest -updateresource:$(VIM).exe;1
++
++ !else
++
+ $(VIM).exe: $(OUTDIR) $(OBJ) $(XDIFF_OBJ) $(GUI_OBJ) $(CUI_OBJ) $(OLE_OBJ) $(OLE_IDL) $(MZSCHEME_OBJ) \
+ $(LUA_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ) $(TCL_OBJ) \
+ $(CSCOPE_OBJ) $(TERM_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ) $(XPM_OBJ) \
+ version.c version.h
+ $(CC) $(CFLAGS_OUTDIR) version.c
+! $(link) $(LINKARGS1) /subsystem:$(SUBSYSTEM) -out:$(VIM).exe $(OBJ) $(XDIFF_OBJ) $(GUI_OBJ) $(CUI_OBJ) $(OLE_OBJ) \
+ $(LUA_OBJ) $(MZSCHEME_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(PYTHON3_OBJ) $(RUBY_OBJ) \
+ $(TCL_OBJ) $(CSCOPE_OBJ) $(TERM_OBJ) $(NETBEANS_OBJ) $(CHANNEL_OBJ) \
+ $(XPM_OBJ) $(OUTDIR)\version.obj $(LINKARGS2)
+ if exist $(VIM).exe.manifest mt.exe -nologo -manifest $(VIM).exe.manifest -updateresource:$(VIM).exe;1
+
++ !endif
++
+ $(VIM): $(VIM).exe
+
+ $(OUTDIR):
+***************
+*** 1287,1292 ****
+--- 1362,1376 ----
+ - if exist $(VIM).pdb del $(VIM).pdb
+ - if exist $(VIM).map del $(VIM).map
+ - if exist $(VIM).ncb del $(VIM).ncb
++ !if "$(VIMDLL)" == "yes"
++ - if exist $(GVIM).exe del $(GVIM).exe
++ - if exist $(GVIM).map del $(GVIM).map
++ - if exist $(VIMDLLBASE).dll del $(VIMDLLBASE).dll
++ - if exist $(VIMDLLBASE).lib del $(VIMDLLBASE).lib
++ - if exist $(VIMDLLBASE).exp del $(VIMDLLBASE).exp
++ - if exist $(VIMDLLBASE).pdb del $(VIMDLLBASE).pdb
++ - if exist $(VIMDLLBASE).map del $(VIMDLLBASE).map
++ !endif
+ - if exist vimrun.exe del vimrun.exe
+ - if exist install.exe del install.exe
+ - if exist uninstal.exe del uninstal.exe
+***************
+*** 1334,1354 ****
+ ###########################################################################
+
+ # Create a default rule for transforming .c files to .obj files in $(OUTDIR)
+- # Batch compilation is supported by nmake 1.62 (part of VS 5.0) and later)
+- !IF "$(_NMAKE_VER)" == ""
+- .c{$(OUTDIR)/}.obj:
+- !ELSE
+ .c{$(OUTDIR)/}.obj::
+! !ENDIF
+ $(CC) $(CFLAGS_OUTDIR) $<
+
+ # Create a default rule for transforming .cpp files to .obj files in $(OUTDIR)
+- # Batch compilation is supported by nmake 1.62 (part of VS 5.0) and later)
+- !IF "$(_NMAKE_VER)" == ""
+- .cpp{$(OUTDIR)/}.obj:
+- !ELSE
+ .cpp{$(OUTDIR)/}.obj::
+- !ENDIF
+ $(CC) $(CFLAGS_OUTDIR) $<
+
+ $(OUTDIR)/arabic.obj: $(OUTDIR) arabic.c $(INCL)
+--- 1418,1432 ----
+ ###########################################################################
+
+ # Create a default rule for transforming .c files to .obj files in $(OUTDIR)
+ .c{$(OUTDIR)/}.obj::
+! $(CC) $(CFLAGS_OUTDIR) $<
+!
+! # Create a default rule for xdiff.
+! {xdiff/}.c{$(OUTDIR)/}.obj::
+ $(CC) $(CFLAGS_OUTDIR) $<
+
+ # Create a default rule for transforming .cpp files to .obj files in $(OUTDIR)
+ .cpp{$(OUTDIR)/}.obj::
+ $(CC) $(CFLAGS_OUTDIR) $<
+
+ $(OUTDIR)/arabic.obj: $(OUTDIR) arabic.c $(INCL)
+***************
+*** 1376,1397 ****
+ $(OUTDIR)/diff.obj: $(OUTDIR) diff.c $(INCL)
+
+ $(OUTDIR)/xdiffi.obj: $(OUTDIR) xdiff/xdiffi.c $(XDIFF_DEPS)
+- $(CC) $(CFLAGS_OUTDIR) xdiff/xdiffi.c
+
+ $(OUTDIR)/xemit.obj: $(OUTDIR) xdiff/xemit.c $(XDIFF_DEPS)
+- $(CC) $(CFLAGS_OUTDIR) xdiff/xemit.c
+
+ $(OUTDIR)/xprepare.obj: $(OUTDIR) xdiff/xprepare.c $(XDIFF_DEPS)
+- $(CC) $(CFLAGS_OUTDIR) xdiff/xprepare.c
+
+ $(OUTDIR)/xutils.obj: $(OUTDIR) xdiff/xutils.c $(XDIFF_DEPS)
+- $(CC) $(CFLAGS_OUTDIR) xdiff/xutils.c
+
+ $(OUTDIR)/xhistogram.obj: $(OUTDIR) xdiff/xhistogram.c $(XDIFF_DEPS)
+- $(CC) $(CFLAGS_OUTDIR) xdiff/xhistogram.c
+
+ $(OUTDIR)/xpatience.obj: $(OUTDIR) xdiff/xpatience.c $(XDIFF_DEPS)
+- $(CC) $(CFLAGS_OUTDIR) xdiff/xpatience.c
+
+ $(OUTDIR)/digraph.obj: $(OUTDIR) digraph.c $(INCL)
+
+--- 1454,1469 ----
+***************
+*** 1516,1523 ****
+--- 1588,1603 ----
+
+ $(OUTDIR)/os_win32.obj: $(OUTDIR) os_win32.c $(INCL) $(MZSCHEME_INCL)
+
++ $(OUTDIR)/os_w32dll.obj: $(OUTDIR) os_w32dll.c
++
+ $(OUTDIR)/os_w32exe.obj: $(OUTDIR) os_w32exe.c $(INCL)
+
++ $(OUTDIR)/os_w32exec.obj: $(OUTDIR) os_w32exe.c $(INCL)
++ $(CC) $(CFLAGS:-DFEAT_GUI_MSWIN=) /Fo$@ os_w32exe.c
++
++ $(OUTDIR)/os_w32exeg.obj: $(OUTDIR) os_w32exe.c $(INCL)
++ $(CC) $(CFLAGS) /Fo$@ os_w32exe.c
++
+ $(OUTDIR)/pathdef.obj: $(OUTDIR) $(PATHDEF_SRC) $(INCL)
+ $(CC) $(CFLAGS_OUTDIR) $(PATHDEF_SRC)
+
+***************
+*** 1560,1569 ****
+ $(OUTDIR)/xpm_w32.obj: $(OUTDIR) xpm_w32.c
+ $(CC) $(CFLAGS_OUTDIR) $(XPM_INC) xpm_w32.c
+
+! $(OUTDIR)/vim.res: $(OUTDIR) vim.rc gvim.exe.mnf version.h tools.bmp \
+! tearoff.bmp vim.ico vim_error.ico \
+ vim_alert.ico vim_info.ico vim_quest.ico
+! $(RC) /nologo /l 0x409 /Fo$(OUTDIR)/vim.res $(RCFLAGS) vim.rc
+
+ iid_ole.c if_ole.h vim.tlb: if_ole.idl
+ midl /nologo /error none /proxy nul /iid iid_ole.c /tlb vim.tlb \
+--- 1640,1664 ----
+ $(OUTDIR)/xpm_w32.obj: $(OUTDIR) xpm_w32.c
+ $(CC) $(CFLAGS_OUTDIR) $(XPM_INC) xpm_w32.c
+
+! !if "$(VIMDLL)" == "yes"
+! $(OUTDIR)/vimc.res: $(OUTDIR) vim.rc gvim.exe.mnf version.h gui_w32_rc.h \
+! vim.ico
+! $(RC) /nologo /l 0x409 /Fo$@ $(RCFLAGS:-DFEAT_GUI_MSWIN=) vim.rc
+!
+! $(OUTDIR)/vimg.res: $(OUTDIR) vim.rc gvim.exe.mnf version.h gui_w32_rc.h \
+! vim.ico
+! $(RC) /nologo /l 0x409 /Fo$@ $(RCFLAGS) vim.rc
+!
+! $(OUTDIR)/vimd.res: $(OUTDIR) vim.rc version.h gui_w32_rc.h \
+! tools.bmp tearoff.bmp vim.ico vim_error.ico \
+! vim_alert.ico vim_info.ico vim_quest.ico
+! $(RC) /nologo /l 0x409 /Fo$@ $(RCFLAGS) -DRCDLL -DVIMDLLBASE=\"$(VIMDLLBASE)\" vim.rc
+! !else
+! $(OUTDIR)/vim.res: $(OUTDIR) vim.rc gvim.exe.mnf version.h gui_w32_rc.h \
+! tools.bmp tearoff.bmp vim.ico vim_error.ico \
+ vim_alert.ico vim_info.ico vim_quest.ico
+! $(RC) /nologo /l 0x409 /Fo$@ $(RCFLAGS) vim.rc
+! !endif
+
+ iid_ole.c if_ole.h vim.tlb: if_ole.idl
+ midl /nologo /error none /proxy nul /iid iid_ole.c /tlb vim.tlb \
+***************
+*** 1583,1614 ****
+ -DWCWIDTH_FUNCTION=utf_uint2cells \
+ -D_CRT_SECURE_NO_WARNINGS
+
+ $(OUTDIR)/encoding.obj: $(OUTDIR) libvterm/src/encoding.c $(TERM_DEPS)
+- $(CCCTERM) -Fo$@ libvterm/src/encoding.c
+
+ $(OUTDIR)/keyboard.obj: $(OUTDIR) libvterm/src/keyboard.c $(TERM_DEPS)
+- $(CCCTERM) -Fo$@ libvterm/src/keyboard.c
+
+ $(OUTDIR)/mouse.obj: $(OUTDIR) libvterm/src/mouse.c $(TERM_DEPS)
+- $(CCCTERM) -Fo$@ libvterm/src/mouse.c
+
+ $(OUTDIR)/parser.obj: $(OUTDIR) libvterm/src/parser.c $(TERM_DEPS)
+- $(CCCTERM) -Fo$@ libvterm/src/parser.c
+
+ $(OUTDIR)/pen.obj: $(OUTDIR) libvterm/src/pen.c $(TERM_DEPS)
+- $(CCCTERM) -Fo$@ libvterm/src/pen.c
+
+ $(OUTDIR)/termscreen.obj: $(OUTDIR) libvterm/src/termscreen.c $(TERM_DEPS)
+- $(CCCTERM) -Fo$@ libvterm/src/termscreen.c
+
+ $(OUTDIR)/state.obj: $(OUTDIR) libvterm/src/state.c $(TERM_DEPS)
+- $(CCCTERM) -Fo$@ libvterm/src/state.c
+
+ $(OUTDIR)/unicode.obj: $(OUTDIR) libvterm/src/unicode.c $(TERM_DEPS)
+- $(CCCTERM) -Fo$@ libvterm/src/unicode.c
+
+ $(OUTDIR)/vterm.obj: $(OUTDIR) libvterm/src/vterm.c $(TERM_DEPS)
+- $(CCCTERM) -Fo$@ libvterm/src/vterm.c
+
+
+ # $CFLAGS may contain backslashes and double quotes, escape them both.
+--- 1678,1704 ----
+ -DWCWIDTH_FUNCTION=utf_uint2cells \
+ -D_CRT_SECURE_NO_WARNINGS
+
++ # Create a default rule for libvterm.
++ {libvterm/src/}.c{$(OUTDIR)/}.obj::
++ $(CCCTERM) -Fo$(OUTDIR)/ $<
++
+ $(OUTDIR)/encoding.obj: $(OUTDIR) libvterm/src/encoding.c $(TERM_DEPS)
+
+ $(OUTDIR)/keyboard.obj: $(OUTDIR) libvterm/src/keyboard.c $(TERM_DEPS)
+
+ $(OUTDIR)/mouse.obj: $(OUTDIR) libvterm/src/mouse.c $(TERM_DEPS)
+
+ $(OUTDIR)/parser.obj: $(OUTDIR) libvterm/src/parser.c $(TERM_DEPS)
+
+ $(OUTDIR)/pen.obj: $(OUTDIR) libvterm/src/pen.c $(TERM_DEPS)
+
+ $(OUTDIR)/termscreen.obj: $(OUTDIR) libvterm/src/termscreen.c $(TERM_DEPS)
+
+ $(OUTDIR)/state.obj: $(OUTDIR) libvterm/src/state.c $(TERM_DEPS)
+
+ $(OUTDIR)/unicode.obj: $(OUTDIR) libvterm/src/unicode.c $(TERM_DEPS)
+
+ $(OUTDIR)/vterm.obj: $(OUTDIR) libvterm/src/vterm.c $(TERM_DEPS)
+
+
+ # $CFLAGS may contain backslashes and double quotes, escape them both.
+*** ../vim-8.1.1229/src/channel.c 2019-04-21 00:00:07.942354840 +0200
+--- src/channel.c 2019-04-28 18:55:14.808080039 +0200
+***************
+*** 5319,5325 ****
+ return job_need_end_check(job) || job_channel_still_useful(job);
+ }
+
+! #if defined(GUI_MAY_FORK) || defined(PROTO)
+ /*
+ * Return TRUE when there is any running job that we care about.
+ */
+--- 5319,5325 ----
+ return job_need_end_check(job) || job_channel_still_useful(job);
+ }
+
+! #if defined(GUI_MAY_FORK) || defined(GUI_MAY_SPAWN) || defined(PROTO)
+ /*
+ * Return TRUE when there is any running job that we care about.
+ */
+*** ../vim-8.1.1229/src/evalfunc.c 2019-04-27 20:36:52.530303581 +0200
+--- src/evalfunc.c 2019-04-28 18:55:14.808080039 +0200
+***************
+*** 4201,4211 ****
+ {
+ #ifdef FEAT_GUI
+ if (gui.in_use)
+ gui_mch_set_foreground();
+! #else
+! # ifdef MSWIN
+ win32_set_foreground();
+- # endif
+ #endif
+ }
+
+--- 4201,4213 ----
+ {
+ #ifdef FEAT_GUI
+ if (gui.in_use)
++ {
+ gui_mch_set_foreground();
+! return;
+! }
+! #endif
+! #if defined(MSWIN) && (!defined(FEAT_GUI) || defined(VIMDLL))
+ win32_set_foreground();
+ #endif
+ }
+
+*** ../vim-8.1.1229/src/ex_cmds.c 2019-04-28 18:04:56.058492178 +0200
+--- src/ex_cmds.c 2019-04-28 18:55:14.808080039 +0200
+***************
+*** 1537,1543 ****
+ int flags) /* may be SHELL_DOOUT when output is redirected */
+ {
+ buf_T *buf;
+! #ifndef FEAT_GUI_MSWIN
+ int save_nwr;
+ #endif
+ #ifdef MSWIN
+--- 1537,1543 ----
+ int flags) /* may be SHELL_DOOUT when output is redirected */
+ {
+ buf_T *buf;
+! #if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
+ int save_nwr;
+ #endif
+ #ifdef MSWIN
+***************
+*** 1636,1667 ****
+ * Otherwise there is probably text on the screen that the user wants
+ * to read before redrawing, so call wait_return().
+ */
+! #ifndef FEAT_GUI_MSWIN
+! if (cmd == NULL
+! # ifdef MSWIN
+! || (keep_termcap && !need_wait_return)
+ # endif
+- )
+- {
+- if (msg_silent == 0)
+- redraw_later_clear();
+- need_wait_return = FALSE;
+- }
+- else
+ {
+! /*
+! * If we switch screens when starttermcap() is called, we really
+! * want to wait for "hit return to continue".
+! */
+! save_nwr = no_wait_return;
+! if (swapping_screen())
+! no_wait_return = FALSE;
+ # ifdef AMIGA
+! wait_return(term_console ? -1 : msg_silent == 0); /* see below */
+ # else
+! wait_return(msg_silent == 0);
+ # endif
+! no_wait_return = save_nwr;
+ }
+ #endif /* FEAT_GUI_MSWIN */
+
+--- 1636,1672 ----
+ * Otherwise there is probably text on the screen that the user wants
+ * to read before redrawing, so call wait_return().
+ */
+! #if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
+! # ifdef VIMDLL
+! if (!gui.in_use)
+ # endif
+ {
+! if (cmd == NULL
+! # ifdef MSWIN
+! || (keep_termcap && !need_wait_return)
+! # endif
+! )
+! {
+! if (msg_silent == 0)
+! redraw_later_clear();
+! need_wait_return = FALSE;
+! }
+! else
+! {
+! /*
+! * If we switch screens when starttermcap() is called, we
+! * really want to wait for "hit return to continue".
+! */
+! save_nwr = no_wait_return;
+! if (swapping_screen())
+! no_wait_return = FALSE;
+ # ifdef AMIGA
+! wait_return(term_console ? -1 : msg_silent == 0); // see below
+ # else
+! wait_return(msg_silent == 0);
+ # endif
+! no_wait_return = save_nwr;
+! }
+ }
+ #endif /* FEAT_GUI_MSWIN */
+
+*** ../vim-8.1.1229/src/ex_docmd.c 2019-04-27 20:36:52.530303581 +0200
+--- src/ex_docmd.c 2019-04-28 18:55:14.812080022 +0200
+***************
+*** 7756,7762 ****
+ if (*arg == NUL)
+ {
+ # if defined(FEAT_GUI) || defined(MSWIN)
+! # ifdef FEAT_GUI
+ if (gui.in_use && gui_mch_get_winpos(&x, &y) != FAIL)
+ # else
+ if (mch_get_winpos(&x, &y) != FAIL)
+--- 7756,7765 ----
+ if (*arg == NUL)
+ {
+ # if defined(FEAT_GUI) || defined(MSWIN)
+! # ifdef VIMDLL
+! if (gui.in_use ? gui_mch_get_winpos(&x, &y) != FAIL :
+! mch_get_winpos(&x, &y) != FAIL)
+! # elif defined(FEAT_GUI)
+ if (gui.in_use && gui_mch_get_winpos(&x, &y) != FAIL)
+ # else
+ if (mch_get_winpos(&x, &y) != FAIL)
+***************
+*** 7789,7801 ****
+ gui_win_x = x;
+ gui_win_y = y;
+ }
+! # ifdef HAVE_TGETENT
+ else
+ # endif
+! # else
+! # ifdef MSWIN
+ mch_set_winpos(x, y);
+- # endif
+ # endif
+ # ifdef HAVE_TGETENT
+ if (*T_CWP)
+--- 7792,7803 ----
+ gui_win_x = x;
+ gui_win_y = y;
+ }
+! # if defined(HAVE_TGETENT) || defined(VIMDLL)
+ else
+ # endif
+! # endif
+! # if defined(MSWIN) && (!defined(FEAT_GUI) || defined(VIMDLL))
+ mch_set_winpos(x, y);
+ # endif
+ # ifdef HAVE_TGETENT
+ if (*T_CWP)
+***************
+*** 8239,8246 ****
+ if (need_maketitle)
+ maketitle();
+ #endif
+! #if defined(MSWIN) && !defined(FEAT_GUI_MSWIN)
+! resize_console_buf();
+ #endif
+ RedrawingDisabled = r;
+ p_lz = p;
+--- 8241,8251 ----
+ if (need_maketitle)
+ maketitle();
+ #endif
+! #if defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))
+! # ifdef VIMDLL
+! if (!gui.in_use)
+! # endif
+! resize_console_buf();
+ #endif
+ RedrawingDisabled = r;
+ p_lz = p;
+*** ../vim-8.1.1229/src/feature.h 2019-04-27 13:03:20.008715938 +0200
+--- src/feature.h 2019-04-28 19:05:41.293187966 +0200
+***************
+*** 712,718 ****
+ * 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_DARWIN))
+ # define ALWAYS_USE_GUI
+ #endif
+
+--- 712,719 ----
+ * 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(VIMDLL)) \
+! || (defined(FEAT_GUI_MAC) && !defined(MACOS_X_DARWIN))
+ # define ALWAYS_USE_GUI
+ #endif
+
+***************
+*** 1138,1145 ****
+ * mouse shape Adjust the shape of the mouse pointer to the mode.
+ */
+ #ifdef FEAT_NORMAL
+! /* MS-DOS console and Win32 console can change cursor shape */
+! # if defined(MSWIN) && !defined(FEAT_GUI_MSWIN)
+ # define MCH_CURSOR_SHAPE
+ # endif
+ # if defined(FEAT_GUI_MSWIN) || defined(FEAT_GUI_MOTIF) \
+--- 1139,1146 ----
+ * mouse shape Adjust the shape of the mouse pointer to the mode.
+ */
+ #ifdef FEAT_NORMAL
+! // Win32 console can change cursor shape
+! # if defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))
+ # define MCH_CURSOR_SHAPE
+ # endif
+ # if defined(FEAT_GUI_MSWIN) || defined(FEAT_GUI_MOTIF) \
+***************
+*** 1263,1269 ****
+ * +balloon_eval_term Allow balloon expression evaluation in the terminal.
+ */
+ #if defined(FEAT_HUGE) && defined(FEAT_TIMERS) && \
+! (defined(UNIX) || defined(VMS) || (defined(MSWIN) && !defined(FEAT_GUI_MSWIN)))
+ # define FEAT_BEVAL_TERM
+ #endif
+
+--- 1264,1271 ----
+ * +balloon_eval_term Allow balloon expression evaluation in the terminal.
+ */
+ #if defined(FEAT_HUGE) && defined(FEAT_TIMERS) && \
+! (defined(UNIX) || defined(VMS) || \
+! (defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))))
+ # define FEAT_BEVAL_TERM
+ #endif
+
+***************
+*** 1317,1322 ****
+ /*
+ * +vtp: Win32 virtual console.
+ */
+! #if !defined(FEAT_GUI) && defined(MSWIN)
+ # define FEAT_VTP
+ #endif
+--- 1319,1324 ----
+ /*
+ * +vtp: Win32 virtual console.
+ */
+! #if (!defined(FEAT_GUI) || defined(VIMDLL)) && defined(MSWIN)
+ # define FEAT_VTP
+ #endif
+*** ../vim-8.1.1229/src/fileio.c 2019-03-21 21:45:30.875282175 +0100
+--- src/fileio.c 2019-04-28 18:55:14.812080022 +0200
+***************
+*** 792,798 ****
+ if (!is_not_a_term())
+ {
+ #ifndef ALWAYS_USE_GUI
+! mch_msg(_("Vim: Reading from stdin...\n"));
+ #endif
+ #ifdef FEAT_GUI
+ /* Also write a message in the GUI window, if there is one. */
+--- 792,801 ----
+ if (!is_not_a_term())
+ {
+ #ifndef ALWAYS_USE_GUI
+! # ifdef VIMDLL
+! if (!gui.in_use)
+! # endif
+! mch_msg(_("Vim: Reading from stdin...\n"));
+ #endif
+ #ifdef FEAT_GUI
+ /* Also write a message in the GUI window, if there is one. */
+*** ../vim-8.1.1229/src/getchar.c 2019-04-24 23:08:20.078079973 +0200
+--- src/getchar.c 2019-04-28 18:55:14.812080022 +0200
+***************
+*** 1626,1632 ****
+ #if defined(FEAT_GUI_MSWIN) && defined(FEAT_MENU) && defined(FEAT_TEAROFF)
+ // Handle K_TEAROFF here, the caller of vgetc() doesn't need to
+ // know that a menu was torn off
+! if (c == K_TEAROFF)
+ {
+ char_u name[200];
+ int i;
+--- 1626,1636 ----
+ #if defined(FEAT_GUI_MSWIN) && defined(FEAT_MENU) && defined(FEAT_TEAROFF)
+ // Handle K_TEAROFF here, the caller of vgetc() doesn't need to
+ // know that a menu was torn off
+! if (
+! # ifdef VIMDLL
+! gui.in_use &&
+! # endif
+! c == K_TEAROFF)
+ {
+ char_u name[200];
+ int i;
+***************
+*** 3113,3118 ****
+--- 3117,3123 ----
+ p += 2;
+ i -= 2;
+ }
++ # ifndef MSWIN
+ /* When the GUI is not used CSI needs to be escaped. */
+ else if (!gui.in_use && p[0] == CSI)
+ {
+***************
+*** 3122,3133 ****
+ *p = (int)KE_CSI;
+ len += 2;
+ }
+ else
+ #endif
+ if (p[0] == NUL || (p[0] == K_SPECIAL
+ /* timeout may generate K_CURSORHOLD */
+ && (i < 2 || p[1] != KS_EXTRA || p[2] != (int)KE_CURSORHOLD)
+! #if defined(MSWIN) && !defined(FEAT_GUI)
+ /* Win32 console passes modifiers */
+ && (i < 2 || p[1] != KS_MODIFIER)
+ #endif
+--- 3127,3142 ----
+ *p = (int)KE_CSI;
+ len += 2;
+ }
++ # endif
+ else
+ #endif
+ if (p[0] == NUL || (p[0] == K_SPECIAL
+ /* timeout may generate K_CURSORHOLD */
+ && (i < 2 || p[1] != KS_EXTRA || p[2] != (int)KE_CURSORHOLD)
+! #if defined(MSWIN) && (!defined(FEAT_GUI) || defined(VIMDLL))
+! # ifdef VIMDLL
+! && !gui.in_use
+! # endif
+ /* Win32 console passes modifiers */
+ && (i < 2 || p[1] != KS_MODIFIER)
+ #endif
+***************
+*** 5232,5251 ****
+
+ #if defined(MSWIN) || defined(MACOS_X)
+
+! #define VIS_SEL (VISUAL+SELECTMODE) /* abbreviation */
+
+ /*
+ * Default mappings for some often used keys.
+ */
+! static struct initmap
+ {
+ char_u *arg;
+ int mode;
+! } initmappings[] =
+ {
+- #if defined(MSWIN)
+- /* Use the Windows (CUA) keybindings. */
+- # ifdef FEAT_GUI
+ /* paste, copy and cut */
+ {(char_u *)"<S-Insert> \"*P", NORMAL},
+ {(char_u *)"<S-Insert> \"-d\"*P", VIS_SEL},
+--- 5241,5261 ----
+
+ #if defined(MSWIN) || defined(MACOS_X)
+
+! # define VIS_SEL (VISUAL+SELECTMODE) /* abbreviation */
+
+ /*
+ * Default mappings for some often used keys.
+ */
+! struct initmap
+ {
+ char_u *arg;
+ int mode;
+! };
+!
+! # ifdef FEAT_GUI_MSWIN
+! /* Use the Windows (CUA) keybindings. (GUI) */
+! static struct initmap initmappings[] =
+ {
+ /* paste, copy and cut */
+ {(char_u *)"<S-Insert> \"*P", NORMAL},
+ {(char_u *)"<S-Insert> \"-d\"*P", VIS_SEL},
+***************
+*** 5255,5261 ****
+ {(char_u *)"<C-Del> \"*d", VIS_SEL},
+ {(char_u *)"<C-X> \"*d", VIS_SEL},
+ /* Missing: CTRL-C (cancel) and CTRL-V (block selection) */
+! # else
+ {(char_u *)"\316w <C-Home>", NORMAL+VIS_SEL},
+ {(char_u *)"\316w <C-Home>", INSERT+CMDLINE},
+ {(char_u *)"\316u <C-End>", NORMAL+VIS_SEL},
+--- 5265,5277 ----
+ {(char_u *)"<C-Del> \"*d", VIS_SEL},
+ {(char_u *)"<C-X> \"*d", VIS_SEL},
+ /* Missing: CTRL-C (cancel) and CTRL-V (block selection) */
+! };
+! # endif
+!
+! # if defined(MSWIN) && (!defined(FEAT_GUI) || defined(VIMDLL))
+! /* Use the Windows (CUA) keybindings. (Console) */
+! static struct initmap cinitmappings[] =
+! {
+ {(char_u *)"\316w <C-Home>", NORMAL+VIS_SEL},
+ {(char_u *)"\316w <C-Home>", INSERT+CMDLINE},
+ {(char_u *)"\316u <C-End>", NORMAL+VIS_SEL},
+***************
+*** 5278,5287 ****
+ {(char_u *)"\316\327 d", VIS_SEL}, /* SHIFT-Del is d */
+ {(char_u *)"\316\330 d", VIS_SEL}, /* CTRL-Del is d */
+ # endif
+ # endif
+- #endif
+
+! #if defined(MACOS_X)
+ /* Use the Standard MacOS binding. */
+ /* paste, copy and cut */
+ {(char_u *)"<D-v> \"*P", NORMAL},
+--- 5294,5305 ----
+ {(char_u *)"\316\327 d", VIS_SEL}, /* SHIFT-Del is d */
+ {(char_u *)"\316\330 d", VIS_SEL}, /* CTRL-Del is d */
+ # endif
++ };
+ # endif
+
+! # if defined(MACOS_X)
+! static struct initmap initmappings[] =
+! {
+ /* Use the Standard MacOS binding. */
+ /* paste, copy and cut */
+ {(char_u *)"<D-v> \"*P", NORMAL},
+***************
+*** 5290,5297 ****
+ {(char_u *)"<D-c> \"*y", VIS_SEL},
+ {(char_u *)"<D-x> \"*d", VIS_SEL},
+ {(char_u *)"<Backspace> \"-d", VIS_SEL},
+- #endif
+ };
+
+ # undef VIS_SEL
+ #endif
+--- 5308,5315 ----
+ {(char_u *)"<D-c> \"*y", VIS_SEL},
+ {(char_u *)"<D-x> \"*d", VIS_SEL},
+ {(char_u *)"<Backspace> \"-d", VIS_SEL},
+ };
++ # endif
+
+ # undef VIS_SEL
+ #endif
+***************
+*** 5305,5312 ****
+--- 5323,5342 ----
+ #if defined(MSWIN) || defined(MACOS_X)
+ int i;
+
++ # if defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))
++ # ifdef VIMDLL
++ if (!gui.starting)
++ # endif
++ {
++ for (i = 0;
++ i < (int)(sizeof(cinitmappings) / sizeof(struct initmap)); ++i)
++ add_map(cinitmappings[i].arg, cinitmappings[i].mode);
++ }
++ # endif
++ # if defined(FEAT_GUI_MSWIN) || defined(MACOS_X)
+ for (i = 0; i < (int)(sizeof(initmappings) / sizeof(struct initmap)); ++i)
+ add_map(initmappings[i].arg, initmappings[i].mode);
++ # endif
+ #endif
+ }
+
+*** ../vim-8.1.1229/src/globals.h 2019-04-28 18:04:56.058492178 +0200
+--- src/globals.h 2019-04-28 18:55:14.812080022 +0200
+***************
+*** 1442,1448 ****
+ EXTERN char e_noalt[] INIT(= N_("E23: No alternate file"));
+ EXTERN char e_noabbr[] INIT(= N_("E24: No such abbreviation"));
+ EXTERN char e_nobang[] INIT(= N_("E477: No ! allowed"));
+! #ifndef FEAT_GUI
+ EXTERN char e_nogvim[] INIT(= N_("E25: GUI cannot be used: Not enabled at compile time"));
+ #endif
+ #ifndef FEAT_RIGHTLEFT
+--- 1442,1448 ----
+ EXTERN char e_noalt[] INIT(= N_("E23: No alternate file"));
+ EXTERN char e_noabbr[] INIT(= N_("E24: No such abbreviation"));
+ EXTERN char e_nobang[] INIT(= N_("E477: No ! allowed"));
+! #if !defined(FEAT_GUI) || defined(VIMDLL)
+ EXTERN char e_nogvim[] INIT(= N_("E25: GUI cannot be used: Not enabled at compile time"));
+ #endif
+ #ifndef FEAT_RIGHTLEFT
+***************
+*** 1645,1650 ****
+--- 1645,1651 ----
+
+ #ifdef MSWIN
+ EXTERN int ctrl_break_was_pressed INIT(= FALSE);
++ EXTERN HINSTANCE g_hinst INIT(= NULL);
+ #endif
+
+ #ifdef FEAT_TEXT_PROP
+*** ../vim-8.1.1229/src/gui.c 2019-03-30 22:26:35.091091278 +0100
+--- src/gui.c 2019-04-28 18:55:14.812080022 +0200
+***************
+*** 65,74 ****
+ * recursive call.
+ */
+ void
+! gui_start(void)
+ {
+ char_u *old_term;
+ static int recursive = 0;
+
+ old_term = vim_strsave(T_NAME);
+
+--- 65,77 ----
+ * recursive call.
+ */
+ void
+! gui_start(char_u *arg UNUSED)
+ {
+ char_u *old_term;
+ static int recursive = 0;
++ #ifdef GUI_MAY_SPAWN
++ char *msg = NULL;
++ #endif
+
+ old_term = vim_strsave(T_NAME);
+
+***************
+*** 98,103 ****
+--- 101,122 ----
+ }
+ else
+ #endif
++ #ifdef GUI_MAY_SPAWN
++ if (gui.dospawn
++ # ifdef EXPERIMENTAL_GUI_CMD
++ && gui.dofork
++ # endif
++ && !vim_strchr(p_go, GO_FORG)
++ && !anyBufIsChanged()
++ # ifdef FEAT_JOB_CHANNEL
++ && !job_any_running()
++ # endif
++ )
++ {
++ msg = gui_mch_do_spawn(arg);
++ }
++ else
++ #endif
+ {
+ #ifdef FEAT_GUI_GTK
+ /* If there is 'f' in 'guioptions' and specify -g argument,
+***************
+*** 125,130 ****
+--- 144,153 ----
+ #ifdef FEAT_TITLE
+ set_title_defaults(); /* set 'title' and 'icon' again */
+ #endif
++ #if defined(GUI_MAY_SPAWN) && defined(EXPERIMENTAL_GUI_CMD)
++ if (msg)
++ emsg(msg);
++ #endif
+ }
+
+ vim_free(old_term);
+***************
+*** 431,437 ****
+ gui.scrollbar_width = gui.scrollbar_height = SB_DEFAULT_WIDTH;
+ gui.prev_wrap = -1;
+
+! #ifdef ALWAYS_USE_GUI
+ result = OK;
+ #else
+ # ifdef FEAT_GUI_GTK
+--- 454,460 ----
+ gui.scrollbar_width = gui.scrollbar_height = SB_DEFAULT_WIDTH;
+ gui.prev_wrap = -1;
+
+! #if defined(ALWAYS_USE_GUI) || defined(VIMDLL)
+ result = OK;
+ #else
+ # ifdef FEAT_GUI_GTK
+***************
+*** 4948,4959 ****
+ }
+ if (!gui.in_use)
+ {
+ /* Clear the command. Needed for when forking+exiting, to avoid part
+ * of the argument ending up after the shell prompt. */
+ msg_clr_eos_force();
+! gui_start();
+! #ifdef FEAT_JOB_CHANNEL
+ channel_gui_register_all();
+ #endif
+ }
+ if (!ends_excmd(*eap->arg))
+--- 4971,4992 ----
+ }
+ if (!gui.in_use)
+ {
++ #if defined(VIMDLL) && !defined(EXPERIMENTAL_GUI_CMD)
++ emsg(_(e_nogvim));
++ return;
++ #else
+ /* Clear the command. Needed for when forking+exiting, to avoid part
+ * of the argument ending up after the shell prompt. */
+ msg_clr_eos_force();
+! # ifdef GUI_MAY_SPAWN
+! if (!ends_excmd(*eap->arg))
+! gui_start(eap->arg);
+! else
+! # endif
+! gui_start(NULL);
+! # ifdef FEAT_JOB_CHANNEL
+ channel_gui_register_all();
++ # endif
+ #endif
+ }
+ if (!ends_excmd(*eap->arg))
+*** ../vim-8.1.1229/src/gui.h 2019-02-17 17:44:36.207875527 +0100
+--- src/gui.h 2019-04-28 18:55:14.812080022 +0200
+***************
+*** 237,242 ****
+--- 237,252 ----
+ # endif
+ #endif
+
++ #ifdef VIMDLL
++ // Use spawn when GUI is starting.
++ # define GUI_MAY_SPAWN
++
++ // Uncomment the next definition if you want to use the `:gui` command on
++ // Windows. It uses `:mksession` to inherit the session from vim.exe to
++ // gvim.exe. So, it doesn't work perfectly. (EXPERIMENTAL)
++ //# define EXPERIMENTAL_GUI_CMD
++ #endif
++
+ typedef struct Gui
+ {
+ int in_focus; /* Vim has input focus */
+***************
+*** 245,250 ****
+--- 255,263 ----
+ 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 */
++ #ifdef GUI_MAY_SPAWN
++ int dospawn; /* Use spawn() when GUI is starting */
++ #endif
+ 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? */
+*** ../vim-8.1.1229/src/gui_gtk_x11.c 2019-04-27 22:06:33.352200698 +0200
+--- src/gui_gtk_x11.c 2019-04-28 18:55:14.812080022 +0200
+***************
+*** 2315,2389 ****
+ }
+
+ /*
+- * Generate a script that can be used to restore the current editing session.
+- * Save the value of v:this_session before running :mksession in order to make
+- * automagic session save fully transparent. Return TRUE on success.
+- */
+- static int
+- write_session_file(char_u *filename)
+- {
+- char_u *escaped_filename;
+- char *mksession_cmdline;
+- unsigned int save_ssop_flags;
+- int failed;
+-
+- /*
+- * Build an ex command line to create a script that restores the current
+- * session if executed. Escape the filename to avoid nasty surprises.
+- */
+- escaped_filename = vim_strsave_escaped(filename, escape_chars);
+- if (escaped_filename == NULL)
+- return FALSE;
+- mksession_cmdline = g_strconcat("mksession ", (char *)escaped_filename,
+- NULL);
+- vim_free(escaped_filename);
+-
+- /*
+- * Use a reasonable hardcoded set of 'sessionoptions' flags to avoid
+- * unpredictable effects when the session is saved automatically. Also,
+- * we definitely need SSOP_GLOBALS to be able to restore v:this_session.
+- * Don't use SSOP_BUFFERS to prevent the buffer list from becoming
+- * enormously large if the GNOME session feature is used regularly.
+- */
+- save_ssop_flags = ssop_flags;
+- ssop_flags = (SSOP_BLANK|SSOP_CURDIR|SSOP_FOLDS|SSOP_GLOBALS
+- |SSOP_HELP|SSOP_OPTIONS|SSOP_WINSIZE|SSOP_TABPAGES);
+-
+- do_cmdline_cmd((char_u *)"let Save_VV_this_session = v:this_session");
+- failed = (do_cmdline_cmd((char_u *)mksession_cmdline) == FAIL);
+- do_cmdline_cmd((char_u *)"let v:this_session = Save_VV_this_session");
+- do_unlet((char_u *)"Save_VV_this_session", TRUE);
+-
+- ssop_flags = save_ssop_flags;
+- g_free(mksession_cmdline);
+-
+- /*
+- * Reopen the file and append a command to restore v:this_session,
+- * as if this save never happened. This is to avoid conflicts with
+- * the user's own sessions. FIXME: It's probably less hackish to add
+- * a "stealth" flag to 'sessionoptions' -- gotta ask Bram.
+- */
+- if (!failed)
+- {
+- FILE *fd;
+-
+- fd = open_exfile(filename, TRUE, APPENDBIN);
+-
+- failed = (fd == NULL
+- || put_line(fd, "let v:this_session = Save_VV_this_session") == FAIL
+- || put_line(fd, "unlet Save_VV_this_session") == FAIL);
+-
+- if (fd != NULL && fclose(fd) != 0)
+- failed = TRUE;
+-
+- if (failed)
+- mch_remove(filename);
+- }
+-
+- return !failed;
+- }
+-
+- /*
+ * "save_yourself" signal handler. Initiate an interaction to ask the user
+ * for confirmation if necessary. Save the current editing session and tell
+ * the session manager how to restart Vim.
+--- 2315,2320 ----
+*** ../vim-8.1.1229/src/gui_w32.c 2019-04-28 14:02:25.414687593 +0200
+--- src/gui_w32.c 2019-04-28 19:01:10.762451360 +0200
+***************
+*** 320,326 ****
+ // for find/replace dialog
+ #endif
+
+- static HINSTANCE s_hinst = NULL;
+ #if !defined(FEAT_GUI)
+ static
+ #endif
+--- 320,325 ----
+***************
+*** 1424,1430 ****
+ 10, /* Any value will do for now */
+ 10, /* Any value will do for now */
+ s_hwnd, NULL,
+! s_hinst, NULL);
+ }
+
+ /*
+--- 1423,1429 ----
+ 10, /* Any value will do for now */
+ 10, /* Any value will do for now */
+ s_hwnd, NULL,
+! g_hinst, NULL);
+ }
+
+ /*
+***************
+*** 2237,2251 ****
+ }
+ #endif /*FEAT_MENU*/
+
+- #ifndef PROTO
+- void
+- _cdecl
+- SaveInst(HINSTANCE hInst)
+- {
+- s_hinst = hInst;
+- }
+- #endif
+-
+ /*
+ * Return the RGB value of a pixel as a long.
+ */
+--- 2236,2241 ----
+***************
+*** 4839,4844 ****
+--- 4829,4969 ----
+ }
+ #endif
+
++ #if defined(GUI_MAY_SPAWN) || defined(PROTO)
++ static char *
++ gvim_error(void)
++ {
++ char *msg = _("E988: GUI cannot be used. Cannot execute gvim.exe.");
++
++ if (starting)
++ {
++ mch_errmsg(msg);
++ mch_errmsg("\n");
++ mch_exit(2);
++ }
++ return msg;
++ }
++
++ char *
++ gui_mch_do_spawn(char_u *arg)
++ {
++ int len;
++ # if defined(FEAT_SESSION) && defined(EXPERIMENTAL_GUI_CMD)
++ char_u *session = NULL;
++ LPWSTR tofree1 = NULL;
++ # endif
++ WCHAR name[MAX_PATH];
++ LPWSTR cmd, newcmd = NULL, p, warg, tofree2 = NULL;
++ STARTUPINFOW si = {sizeof(si)};
++ PROCESS_INFORMATION pi;
++
++ if (!GetModuleFileNameW(g_hinst, name, MAX_PATH))
++ goto error;
++ p = wcsrchr(name, L'\\');
++ if (p == NULL)
++ goto error;
++ // Replace the executable name from vim(d).exe to gvim(d).exe.
++ # ifdef DEBUG
++ wcscpy(p + 1, L"gvimd.exe");
++ # else
++ wcscpy(p + 1, L"gvim.exe");
++ # endif
++
++ # if defined(FEAT_SESSION) && defined(EXPERIMENTAL_GUI_CMD)
++ if (starting)
++ # endif
++ {
++ // Pass the command line to the new process.
++ p = GetCommandLineW();
++ // Skip 1st argument.
++ while (*p && *p != L' ' && *p != L'\t')
++ {
++ if (*p == L'"')
++ {
++ while (*p && *p != L'"')
++ ++p;
++ if (*p)
++ ++p;
++ }
++ else
++ ++p;
++ }
++ cmd = p;
++ }
++ # if defined(FEAT_SESSION) && defined(EXPERIMENTAL_GUI_CMD)
++ else
++ {
++ // Create a session file and pass it to the new process.
++ LPWSTR wsession;
++ char_u *savebg;
++ int ret;
++
++ session = vim_tempname('s', FALSE);
++ if (session == NULL)
++ goto error;
++ savebg = p_bg;
++ p_bg = vim_strsave((char_u *)"light"); // Set 'bg' to "light".
++ ret = write_session_file(session);
++ vim_free(p_bg);
++ p_bg = savebg;
++ if (!ret)
++ goto error;
++ wsession = enc_to_utf16(session, NULL);
++ if (wsession == NULL)
++ goto error;
++ len = (int)wcslen(wsession) * 2 + 27 + 1;
++ cmd = (LPWSTR)alloc(len * (int)sizeof(WCHAR));
++ if (cmd == NULL)
++ {
++ vim_free(wsession);
++ goto error;
++ }
++ tofree1 = cmd;
++ _snwprintf(cmd, len, L" -S \"%s\" -c \"call delete('%s')\"",
++ wsession, wsession);
++ vim_free(wsession);
++ }
++ # endif
++
++ // Check additional arguments to the `:gui` command.
++ if (arg != NULL)
++ {
++ warg = enc_to_utf16(arg, NULL);
++ if (warg == NULL)
++ goto error;
++ tofree2 = warg;
++ }
++ else
++ warg = L"";
++
++ // Set up the new command line.
++ len = (int)wcslen(name) + (int)wcslen(cmd) + (int)wcslen(warg) + 4;
++ newcmd = (LPWSTR)alloc(len * (int)sizeof(WCHAR));
++ if (newcmd == NULL)
++ goto error;
++ _snwprintf(newcmd, len, L"\"%s\"%s %s", name, cmd, warg);
++
++ // Spawn a new GUI process.
++ if (!CreateProcessW(NULL, newcmd, NULL, NULL, TRUE, 0,
++ NULL, NULL, &si, &pi))
++ goto error;
++ CloseHandle(pi.hProcess);
++ CloseHandle(pi.hThread);
++ mch_exit(0);
++
++ error:
++ # if defined(FEAT_SESSION) && defined(EXPERIMENTAL_GUI_CMD)
++ if (session)
++ mch_remove(session);
++ vim_free(session);
++ vim_free(tofree1);
++ # endif
++ vim_free(newcmd);
++ vim_free(tofree2);
++ return gvim_error();
++ }
++ #endif
++
+ /*
+ * Parse the GUI related command-line arguments. Any arguments used are
+ * deleted from argv, and *argc is decremented accordingly. This is called
+***************
+*** 4957,4963 ****
+ * Load the tearoff bitmap
+ */
+ #ifdef FEAT_TEAROFF
+! s_htearbitmap = LoadBitmap(s_hinst, "IDB_TEAROFF");
+ #endif
+
+ gui.scrollbar_width = GetSystemMetrics(SM_CXVSCROLL);
+--- 5082,5088 ----
+ * Load the tearoff bitmap
+ */
+ #ifdef FEAT_TEAROFF
+! s_htearbitmap = LoadBitmap(g_hinst, "IDB_TEAROFF");
+ #endif
+
+ gui.scrollbar_width = GetSystemMetrics(SM_CXVSCROLL);
+***************
+*** 4971,4983 ****
+
+ /* First try using the wide version, so that we can use any title.
+ * Otherwise only characters in the active codepage will work. */
+! if (GetClassInfoW(s_hinst, szVimWndClassW, &wndclassw) == 0)
+ {
+ wndclassw.style = CS_DBLCLKS;
+ wndclassw.lpfnWndProc = _WndProc;
+ wndclassw.cbClsExtra = 0;
+ wndclassw.cbWndExtra = 0;
+! wndclassw.hInstance = s_hinst;
+ wndclassw.hIcon = LoadIcon(wndclassw.hInstance, "IDR_VIM");
+ wndclassw.hCursor = LoadCursor(NULL, IDC_ARROW);
+ wndclassw.hbrBackground = s_brush;
+--- 5096,5108 ----
+
+ /* First try using the wide version, so that we can use any title.
+ * Otherwise only characters in the active codepage will work. */
+! if (GetClassInfoW(g_hinst, szVimWndClassW, &wndclassw) == 0)
+ {
+ wndclassw.style = CS_DBLCLKS;
+ wndclassw.lpfnWndProc = _WndProc;
+ wndclassw.cbClsExtra = 0;
+ wndclassw.cbWndExtra = 0;
+! wndclassw.hInstance = g_hinst;
+ wndclassw.hIcon = LoadIcon(wndclassw.hInstance, "IDR_VIM");
+ wndclassw.hCursor = LoadCursor(NULL, IDC_ARROW);
+ wndclassw.hbrBackground = s_brush;
+***************
+*** 5011,5017 ****
+ 100, // Any value will do
+ 100, // Any value will do
+ vim_parent_hwnd, NULL,
+! s_hinst, NULL);
+ #ifdef HAVE_TRY_EXCEPT
+ }
+ __except(EXCEPTION_EXECUTE_HANDLER)
+--- 5136,5142 ----
+ 100, // Any value will do
+ 100, // Any value will do
+ vim_parent_hwnd, NULL,
+! g_hinst, NULL);
+ #ifdef HAVE_TRY_EXCEPT
+ }
+ __except(EXCEPTION_EXECUTE_HANDLER)
+***************
+*** 5043,5049 ****
+ 100, /* Any value will do */
+ 100, /* Any value will do */
+ NULL, NULL,
+! s_hinst, NULL);
+ if (s_hwnd != NULL && win_socket_id != 0)
+ {
+ SetParent(s_hwnd, (HWND)win_socket_id);
+--- 5168,5174 ----
+ 100, /* Any value will do */
+ 100, /* Any value will do */
+ NULL, NULL,
+! g_hinst, NULL);
+ if (s_hwnd != NULL && win_socket_id != 0)
+ {
+ SetParent(s_hwnd, (HWND)win_socket_id);
+***************
+*** 5062,5074 ****
+ #endif
+
+ /* Create the text area window */
+! if (GetClassInfoW(s_hinst, szTextAreaClassW, &wndclassw) == 0)
+ {
+ wndclassw.style = CS_OWNDC;
+ wndclassw.lpfnWndProc = _TextAreaWndProc;
+ wndclassw.cbClsExtra = 0;
+ wndclassw.cbWndExtra = 0;
+! wndclassw.hInstance = s_hinst;
+ wndclassw.hIcon = NULL;
+ wndclassw.hCursor = LoadCursor(NULL, IDC_ARROW);
+ wndclassw.hbrBackground = NULL;
+--- 5187,5199 ----
+ #endif
+
+ /* Create the text area window */
+! if (GetClassInfoW(g_hinst, szTextAreaClassW, &wndclassw) == 0)
+ {
+ wndclassw.style = CS_OWNDC;
+ wndclassw.lpfnWndProc = _TextAreaWndProc;
+ wndclassw.cbClsExtra = 0;
+ wndclassw.cbWndExtra = 0;
+! wndclassw.hInstance = g_hinst;
+ wndclassw.hIcon = NULL;
+ wndclassw.hCursor = LoadCursor(NULL, IDC_ARROW);
+ wndclassw.hbrBackground = NULL;
+***************
+*** 5086,5092 ****
+ 100, // Any value will do for now
+ 100, // Any value will do for now
+ s_hwnd, NULL,
+! s_hinst, NULL);
+
+ if (s_textArea == NULL)
+ return FAIL;
+--- 5211,5217 ----
+ 100, // Any value will do for now
+ 100, // Any value will do for now
+ s_hwnd, NULL,
+! g_hinst, NULL);
+
+ if (s_textArea == NULL)
+ return FAIL;
+***************
+*** 6640,6647 ****
+
+ #ifndef NO_CONSOLE
+ /* Don't output anything in silent mode ("ex -s") */
+! if (silent_mode)
+! return dfltbutton; /* return default option */
+ #endif
+
+ if (s_hwnd == NULL)
+--- 6765,6775 ----
+
+ #ifndef NO_CONSOLE
+ /* Don't output anything in silent mode ("ex -s") */
+! # ifdef VIMDLL
+! if (!(gui.in_use || gui.starting))
+! # endif
+! if (silent_mode)
+! return dfltbutton; /* return default option */
+ #endif
+
+ if (s_hwnd == NULL)
+***************
+*** 7050,7056 ****
+
+ /* show the dialog box modally and get a return value */
+ nchar = (int)DialogBoxIndirect(
+! s_hinst,
+ (LPDLGTEMPLATE)pdlgtemplate,
+ s_hwnd,
+ (DLGPROC)dialog_callback);
+--- 7178,7184 ----
+
+ /* show the dialog box modally and get a return value */
+ nchar = (int)DialogBoxIndirect(
+! g_hinst,
+ (LPDLGTEMPLATE)pdlgtemplate,
+ s_hwnd,
+ (DLGPROC)dialog_callback);
+***************
+*** 7644,7650 ****
+
+ /* show modelessly */
+ the_menu->tearoff_handle = CreateDialogIndirectParam(
+! s_hinst,
+ (LPDLGTEMPLATE)pdlgtemplate,
+ s_hwnd,
+ (DLGPROC)tearoff_callback,
+--- 7772,7778 ----
+
+ /* show modelessly */
+ the_menu->tearoff_handle = CreateDialogIndirectParam(
+! g_hinst,
+ (LPDLGTEMPLATE)pdlgtemplate,
+ s_hwnd,
+ (DLGPROC)tearoff_callback,
+***************
+*** 7689,7695 ****
+ WS_CHILD | TBSTYLE_TOOLTIPS | TBSTYLE_FLAT,
+ 4000, //any old big number
+ 31, //number of images in initial bitmap
+! s_hinst,
+ IDR_TOOLBAR1, // id of initial bitmap
+ NULL,
+ 0, // initial number of buttons
+--- 7817,7823 ----
+ WS_CHILD | TBSTYLE_TOOLTIPS | TBSTYLE_FLAT,
+ 4000, //any old big number
+ 31, //number of images in initial bitmap
+! g_hinst,
+ IDR_TOOLBAR1, // id of initial bitmap
+ NULL,
+ 0, // initial number of buttons
+***************
+*** 7790,7796 ****
+ s_tabhwnd = CreateWindow(WC_TABCONTROL, "Vim tabline",
+ WS_CHILD|TCS_FOCUSNEVER|TCS_TOOLTIPS,
+ CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
+! CW_USEDEFAULT, s_hwnd, NULL, s_hinst, NULL);
+ s_tabline_wndproc = SubclassWindow(s_tabhwnd, tabline_wndproc);
+
+ gui.tabline_height = TABLINE_HEIGHT;
+--- 7918,7924 ----
+ s_tabhwnd = CreateWindow(WC_TABCONTROL, "Vim tabline",
+ WS_CHILD|TCS_FOCUSNEVER|TCS_TOOLTIPS,
+ CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
+! CW_USEDEFAULT, s_hwnd, NULL, g_hinst, NULL);
+ s_tabline_wndproc = SubclassWindow(s_tabhwnd, tabline_wndproc);
+
+ gui.tabline_height = TABLINE_HEIGHT;
+***************
+*** 8245,8251 ****
+ beval->balloon = CreateWindowExW(WS_EX_TOPMOST, TOOLTIPS_CLASSW,
+ NULL, WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,
+ CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
+! beval->target, NULL, s_hinst, NULL);
+
+ SetWindowPos(beval->balloon, HWND_TOPMOST, 0, 0, 0, 0,
+ SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
+--- 8373,8379 ----
+ beval->balloon = CreateWindowExW(WS_EX_TOPMOST, TOOLTIPS_CLASSW,
+ NULL, WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,
+ CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
+! beval->target, NULL, g_hinst, NULL);
+
+ SetWindowPos(beval->balloon, HWND_TOPMOST, 0, 0, 0, 0,
+ SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
+*** ../vim-8.1.1229/src/if_mzsch.c 2019-03-30 18:46:57.352077376 +0100
+--- src/if_mzsch.c 2019-04-28 18:55:14.816080005 +0200
+***************
+*** 822,828 ****
+ static EventLoopTimerUPP timerUPP;
+ #endif
+
+! #ifndef FEAT_GUI_MSWIN /* Win32 console and Unix */
+ void
+ mzvim_check_threads(void)
+ {
+--- 822,828 ----
+ static EventLoopTimerUPP timerUPP;
+ #endif
+
+! #if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL) /* Win32 console and Unix */
+ void
+ mzvim_check_threads(void)
+ {
+***************
+*** 1775,1783 ****
+--- 1775,1785 ----
+ case -2:
+ MZ_GC_UNREG();
+ raise_vim_exn(_("hidden option"));
++ /*NOTREACHED*/
+ case -3:
+ MZ_GC_UNREG();
+ raise_vim_exn(_("unknown option"));
++ /*NOTREACHED*/
+ }
+ /* unreachable */
+ return scheme_void;
+*** ../vim-8.1.1229/src/main.c 2019-04-21 15:54:29.606587753 +0200
+--- src/main.c 2019-04-28 18:55:14.816080005 +0200
+***************
+*** 19,25 ****
+ # include <limits.h>
+ #endif
+
+! #if defined(MSWIN) && !defined(FEAT_GUI_MSWIN)
+ # include "iscygpty.h"
+ #endif
+
+--- 19,25 ----
+ # include <limits.h>
+ #endif
+
+! #if defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))
+ # include "iscygpty.h"
+ #endif
+
+***************
+*** 95,100 ****
+--- 95,103 ----
+
+ static int has_dash_c_arg = FALSE;
+
++ # ifdef VIMDLL
++ __declspec(dllexport)
++ # endif
+ int
+ # ifdef MSWIN
+ # ifdef __BORLANDC__
+***************
+*** 174,179 ****
+--- 177,187 ----
+ #endif
+ common_init(&params);
+
++ #ifdef VIMDLL
++ // Check if the current executable file is for the GUI subsystem.
++ gui.starting = mch_is_gui_executable();
++ #endif
++
+ #ifdef FEAT_CLIENTSERVER
+ /*
+ * Do the client-server stuff, unless "--servername ''" was used.
+***************
+*** 292,298 ****
+ * For GTK we can't be sure, but when started from the desktop it doesn't
+ * make sense to try using a terminal.
+ */
+! #if defined(ALWAYS_USE_GUI) || defined(FEAT_GUI_X11) || defined(FEAT_GUI_GTK)
+ if (gui.starting
+ # ifdef FEAT_GUI_GTK
+ && !isatty(2)
+--- 300,307 ----
+ * For GTK we can't be sure, but when started from the desktop it doesn't
+ * make sense to try using a terminal.
+ */
+! #if defined(ALWAYS_USE_GUI) || defined(FEAT_GUI_X11) || defined(FEAT_GUI_GTK) \
+! || defined(VIMDLL)
+ if (gui.starting
+ # ifdef FEAT_GUI_GTK
+ && !isatty(2)
+***************
+*** 542,548 ****
+ putchar('\n');
+ #endif
+
+! gui_start(); /* will set full_screen to TRUE */
+ TIME_MSG("starting GUI");
+
+ /* When running "evim" or "gvim -y" we need the menus, exit if we
+--- 551,557 ----
+ putchar('\n');
+ #endif
+
+! gui_start(NULL); /* will set full_screen to TRUE */
+ TIME_MSG("starting GUI");
+
+ /* When running "evim" or "gvim -y" we need the menus, exit if we
+***************
+*** 851,858 ****
+ }
+ #endif
+
+! #if defined(MSWIN) && !defined(FEAT_GUI_MSWIN)
+! mch_set_winsize_now(); /* Allow winsize changes from now on */
+ #endif
+
+ #if defined(FEAT_GUI)
+--- 860,870 ----
+ }
+ #endif
+
+! #if defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))
+! # ifdef VIMDLL
+! if (!gui.in_use)
+! # endif
+! mch_set_winsize_now(); /* Allow winsize changes from now on */
+ #endif
+
+ #if defined(FEAT_GUI)
+***************
+*** 1761,1767 ****
+--- 1773,1787 ----
+ #ifdef FEAT_GUI
+ ++initstr;
+ #endif
++ #ifdef GUI_MAY_SPAWN
++ gui.dospawn = FALSE; // No need to spawn a new process.
++ #endif
+ }
++ #ifdef GUI_MAY_SPAWN
++ else
++ gui.dospawn = TRUE; // Not "gvim". Need to spawn gvim.exe.
++ #endif
++
+
+ if (STRNICMP(initstr, "view", 4) == 0)
+ {
+***************
+*** 2181,2187 ****
+
+ case 'v': /* "-v" Vi-mode (as if called "vi") */
+ exmode_active = 0;
+! #ifdef FEAT_GUI
+ gui.starting = FALSE; /* don't start GUI */
+ #endif
+ break;
+--- 2201,2207 ----
+
+ case 'v': /* "-v" Vi-mode (as if called "vi") */
+ exmode_active = 0;
+! #if defined(FEAT_GUI) && !defined(VIMDLL)
+ gui.starting = FALSE; /* don't start GUI */
+ #endif
+ break;
+***************
+*** 2558,2565 ****
+ exit(1);
+ }
+ #endif
+! #if defined(MSWIN) && !defined(FEAT_GUI_MSWIN)
+! if (is_cygpty_used())
+ {
+ # if defined(HAVE_BIND_TEXTDOMAIN_CODESET) \
+ && defined(FEAT_GETTEXT)
+--- 2578,2589 ----
+ exit(1);
+ }
+ #endif
+! #if defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))
+! if (
+! # ifdef VIMDLL
+! !gui.starting &&
+! # endif
+! is_cygpty_used())
+ {
+ # if defined(HAVE_BIND_TEXTDOMAIN_CODESET) \
+ && defined(FEAT_GETTEXT)
+***************
+*** 3440,3447 ****
+ main_msg(_("--echo-wid\t\tMake gvim echo the Window ID on stdout"));
+ #endif
+ #ifdef FEAT_GUI_MSWIN
+! main_msg(_("-P <parent title>\tOpen Vim inside parent application"));
+! main_msg(_("--windowid <HWND>\tOpen Vim inside another win32 widget"));
+ #endif
+
+ #ifdef FEAT_GUI_GNOME
+--- 3464,3476 ----
+ main_msg(_("--echo-wid\t\tMake gvim echo the Window ID on stdout"));
+ #endif
+ #ifdef FEAT_GUI_MSWIN
+! # ifdef VIMDLL
+! if (gui.starting)
+! # endif
+! {
+! main_msg(_("-P <parent title>\tOpen Vim inside parent application"));
+! main_msg(_("--windowid <HWND>\tOpen Vim inside another win32 widget"));
+! }
+ #endif
+
+ #ifdef FEAT_GUI_GNOME
+*** ../vim-8.1.1229/src/mbyte.c 2019-04-12 20:08:51.478186362 +0200
+--- src/mbyte.c 2019-04-28 18:55:14.816080005 +0200
+***************
+*** 4392,4398 ****
+ # include <langinfo.h>
+ #endif
+
+! #ifndef FEAT_GUI_MSWIN
+ /*
+ * Get the canonicalized encoding from the specified locale string "locale"
+ * or from the environment variables LC_ALL, LC_CTYPE and LANG.
+--- 4392,4398 ----
+ # include <langinfo.h>
+ #endif
+
+! #if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
+ /*
+ * Get the canonicalized encoding from the specified locale string "locale"
+ * or from the environment variables LC_ALL, LC_CTYPE and LANG.
+*** ../vim-8.1.1229/src/memline.c 2019-03-30 18:46:57.356077354 +0100
+--- src/memline.c 2019-04-28 18:55:14.816080005 +0200
+***************
+*** 4798,4804 ****
+ // the messages displayed in the Vim window when
+ // loading a session from the .gvimrc file.
+ if (gui.starting && !gui.in_use)
+! gui_start();
+ #endif
+ // Show info about the existing swap file.
+ attention_message(buf, fname);
+--- 4798,4804 ----
+ // the messages displayed in the Vim window when
+ // loading a session from the .gvimrc file.
+ if (gui.starting && !gui.in_use)
+! gui_start(NULL);
+ #endif
+ // Show info about the existing swap file.
+ attention_message(buf, fname);
+*** ../vim-8.1.1229/src/message.c 2019-04-24 23:08:20.078079973 +0200
+--- src/message.c 2019-04-28 18:55:14.816080005 +0200
+***************
+*** 2563,2570 ****
+ msg_use_printf(void)
+ {
+ return (!msg_check_screen()
+! #if defined(MSWIN) && !defined(FEAT_GUI_MSWIN)
+ || !termcap_active
+ #endif
+ || (swapping_screen() && !termcap_active)
+ );
+--- 2563,2574 ----
+ msg_use_printf(void)
+ {
+ return (!msg_check_screen()
+! #if defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))
+! # ifdef VIMDLL
+! || (!gui.in_use && !termcap_active)
+! # else
+ || !termcap_active
++ # endif
+ #endif
+ || (swapping_screen() && !termcap_active)
+ );
+***************
+*** 2940,2954 ****
+ # undef mch_msg
+ #endif
+
+! /*
+! * Give an error message. To be used when the screen hasn't been initialized
+! * yet. When stderr can't be used, collect error messages until the GUI has
+! * started and they can be displayed in a message box.
+! */
+! void
+! mch_errmsg(char *str)
+ {
+- #if defined(MSWIN) && !defined(FEAT_GUI_MSWIN)
+ int len = (int)STRLEN(str);
+ DWORD nwrite = 0;
+ DWORD mode = 0;
+--- 2944,2953 ----
+ # undef mch_msg
+ #endif
+
+! #if defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))
+! static void
+! mch_errmsg_c(char *str)
+ {
+ int len = (int)STRLEN(str);
+ DWORD nwrite = 0;
+ DWORD mode = 0;
+***************
+*** 2966,2999 ****
+ {
+ fprintf(stderr, "%s", str);
+ }
+! #else
+ int len;
+
+! # if (defined(UNIX) || defined(FEAT_GUI)) && !defined(ALWAYS_USE_GUI)
+ /* On Unix use stderr if it's a tty.
+ * When not going to start the GUI also use stderr.
+ * On Mac, when started from Finder, stderr is the console. */
+ if (
+! # ifdef UNIX
+! # ifdef MACOS_X
+ (isatty(2) && strcmp("/dev/console", ttyname(2)) != 0)
+! # else
+ isatty(2)
+- # endif
+- # ifdef FEAT_GUI
+- ||
+- # endif
+ # endif
+ # ifdef FEAT_GUI
+! !(gui.in_use || gui.starting)
+ # endif
+ )
+ {
+ fprintf(stderr, "%s", str);
+ return;
+ }
+ # endif
+
+ /* avoid a delay for a message that isn't there */
+ emsg_on_display = FALSE;
+
+--- 2965,3021 ----
+ {
+ fprintf(stderr, "%s", str);
+ }
+! }
+! #endif
+!
+! /*
+! * Give an error message. To be used when the screen hasn't been initialized
+! * yet. When stderr can't be used, collect error messages until the GUI has
+! * started and they can be displayed in a message box.
+! */
+! void
+! mch_errmsg(char *str)
+! {
+! #if !defined(MSWIN) || defined(FEAT_GUI_MSWIN)
+ int len;
++ #endif
+
+! #if (defined(UNIX) || defined(FEAT_GUI)) && (!defined(ALWAYS_USE_GUI) || !defined(VIMDLL))
+ /* On Unix use stderr if it's a tty.
+ * When not going to start the GUI also use stderr.
+ * On Mac, when started from Finder, stderr is the console. */
+ if (
+! # ifdef UNIX
+! # ifdef MACOS_X
+ (isatty(2) && strcmp("/dev/console", ttyname(2)) != 0)
+! # else
+ isatty(2)
+ # endif
+ # ifdef FEAT_GUI
+! ||
+ # endif
++ # endif
++ # ifdef FEAT_GUI
++ !(gui.in_use || gui.starting)
++ # endif
+ )
+ {
+ fprintf(stderr, "%s", str);
+ return;
+ }
++ #endif
++
++ #if defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))
++ # ifdef VIMDLL
++ if (!(gui.in_use || gui.starting))
+ # endif
++ {
++ mch_errmsg_c(str);
++ return;
++ }
++ #endif
+
++ #if !defined(MSWIN) || defined(FEAT_GUI_MSWIN)
+ /* avoid a delay for a message that isn't there */
+ emsg_on_display = FALSE;
+
+***************
+*** 3028,3042 ****
+ #endif
+ }
+
+! /*
+! * Give a message. To be used when the screen hasn't been initialized yet.
+! * When there is no tty, collect messages until the GUI has started and they
+! * can be displayed in a message box.
+! */
+! void
+! mch_msg(char *str)
+ {
+- #if defined(MSWIN) && !defined(FEAT_GUI_MSWIN)
+ int len = (int)STRLEN(str);
+ DWORD nwrite = 0;
+ DWORD mode;
+--- 3050,3059 ----
+ #endif
+ }
+
+! #if defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))
+! static void
+! mch_msg_c(char *str)
+ {
+ int len = (int)STRLEN(str);
+ DWORD nwrite = 0;
+ DWORD mode;
+***************
+*** 3055,3086 ****
+ {
+ printf("%s", str);
+ }
+! #else
+! # if (defined(UNIX) || defined(FEAT_GUI)) && !defined(ALWAYS_USE_GUI)
+ /* On Unix use stdout if we have a tty. This allows "vim -h | more" and
+ * uses mch_errmsg() when started from the desktop.
+ * When not going to start the GUI also use stdout.
+ * On Mac, when started from Finder, stderr is the console. */
+ if (
+! # ifdef UNIX
+! # ifdef MACOS_X
+ (isatty(2) && strcmp("/dev/console", ttyname(2)) != 0)
+! # else
+ isatty(2)
+- # endif
+- # ifdef FEAT_GUI
+- ||
+ # endif
+- # endif
+ # ifdef FEAT_GUI
+! !(gui.in_use || gui.starting)
+ # endif
+ )
+ {
+ printf("%s", str);
+ return;
+ }
+ # endif
+ mch_errmsg(str);
+ #endif
+ }
+--- 3072,3124 ----
+ {
+ printf("%s", str);
+ }
+! }
+! #endif
+!
+! /*
+! * Give a message. To be used when the screen hasn't been initialized yet.
+! * When there is no tty, collect messages until the GUI has started and they
+! * can be displayed in a message box.
+! */
+! void
+! mch_msg(char *str)
+! {
+! #if (defined(UNIX) || defined(FEAT_GUI)) && (!defined(ALWAYS_USE_GUI) || !defined(VIMDLL))
+ /* On Unix use stdout if we have a tty. This allows "vim -h | more" and
+ * uses mch_errmsg() when started from the desktop.
+ * When not going to start the GUI also use stdout.
+ * On Mac, when started from Finder, stderr is the console. */
+ if (
+! # ifdef UNIX
+! # ifdef MACOS_X
+ (isatty(2) && strcmp("/dev/console", ttyname(2)) != 0)
+! # else
+ isatty(2)
+ # endif
+ # ifdef FEAT_GUI
+! ||
+ # endif
++ # endif
++ # ifdef FEAT_GUI
++ !(gui.in_use || gui.starting)
++ # endif
+ )
+ {
+ printf("%s", str);
+ return;
+ }
++ #endif
++
++ #if defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))
++ # ifdef VIMDLL
++ if (!(gui.in_use || gui.starting))
+ # endif
++ {
++ mch_msg_c(str);
++ return;
++ }
++ #endif
++ #if !defined(MSWIN) || defined(FEAT_GUI_MSWIN)
+ mch_errmsg(str);
+ #endif
+ }
+*** ../vim-8.1.1229/src/misc2.c 2019-04-27 13:03:20.008715938 +0200
+--- src/misc2.c 2019-04-28 18:55:14.820079984 +0200
+***************
+*** 4650,4652 ****
+--- 4650,4729 ----
+ }
+ # endif
+ #endif
++
++ #if defined(FEAT_SESSION) || defined(PROTO)
++ /*
++ * Generate a script that can be used to restore the current editing session.
++ * Save the value of v:this_session before running :mksession in order to make
++ * automagic session save fully transparent. Return TRUE on success.
++ */
++ int
++ write_session_file(char_u *filename)
++ {
++ char_u *escaped_filename;
++ char *mksession_cmdline;
++ unsigned int save_ssop_flags;
++ int failed;
++
++ /*
++ * Build an ex command line to create a script that restores the current
++ * session if executed. Escape the filename to avoid nasty surprises.
++ */
++ escaped_filename = vim_strsave_escaped(filename, escape_chars);
++ if (escaped_filename == NULL)
++ return FALSE;
++ mksession_cmdline = (char *)alloc(10 + (int)STRLEN(escaped_filename) + 1);
++ if (mksession_cmdline == NULL)
++ {
++ vim_free(escaped_filename);
++ return FALSE;
++ }
++ strcpy(mksession_cmdline, "mksession ");
++ STRCAT(mksession_cmdline, escaped_filename);
++ vim_free(escaped_filename);
++
++ /*
++ * Use a reasonable hardcoded set of 'sessionoptions' flags to avoid
++ * unpredictable effects when the session is saved automatically. Also,
++ * we definitely need SSOP_GLOBALS to be able to restore v:this_session.
++ * Don't use SSOP_BUFFERS to prevent the buffer list from becoming
++ * enormously large if the GNOME session feature is used regularly.
++ */
++ save_ssop_flags = ssop_flags;
++ ssop_flags = (SSOP_BLANK|SSOP_CURDIR|SSOP_FOLDS|SSOP_GLOBALS
++ |SSOP_HELP|SSOP_OPTIONS|SSOP_WINSIZE|SSOP_TABPAGES);
++
++ do_cmdline_cmd((char_u *)"let Save_VV_this_session = v:this_session");
++ failed = (do_cmdline_cmd((char_u *)mksession_cmdline) == FAIL);
++ do_cmdline_cmd((char_u *)"let v:this_session = Save_VV_this_session");
++ do_unlet((char_u *)"Save_VV_this_session", TRUE);
++
++ ssop_flags = save_ssop_flags;
++ vim_free(mksession_cmdline);
++
++ /*
++ * Reopen the file and append a command to restore v:this_session,
++ * as if this save never happened. This is to avoid conflicts with
++ * the user's own sessions. FIXME: It's probably less hackish to add
++ * a "stealth" flag to 'sessionoptions' -- gotta ask Bram.
++ */
++ if (!failed)
++ {
++ FILE *fd;
++
++ fd = open_exfile(filename, TRUE, APPENDBIN);
++
++ failed = (fd == NULL
++ || put_line(fd, "let v:this_session = Save_VV_this_session") == FAIL
++ || put_line(fd, "unlet Save_VV_this_session") == FAIL);
++
++ if (fd != NULL && fclose(fd) != 0)
++ failed = TRUE;
++
++ if (failed)
++ mch_remove(filename);
++ }
++
++ return !failed;
++ }
++ #endif
+*** ../vim-8.1.1229/src/normal.c 2019-04-28 18:04:56.058492178 +0200
+--- src/normal.c 2019-04-28 18:55:14.820079984 +0200
+***************
+*** 5394,5401 ****
+ # endif
+ #endif
+ redraw_later(CLEAR);
+! #if defined(MSWIN) && !defined(FEAT_GUI_MSWIN)
+! resize_console_buf();
+ #endif
+ }
+ }
+--- 5394,5404 ----
+ # endif
+ #endif
+ redraw_later(CLEAR);
+! #if defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))
+! # ifdef VIMDLL
+! if (!gui.in_use)
+! # endif
+! resize_console_buf();
+ #endif
+ }
+ }
+*** ../vim-8.1.1229/src/option.c 2019-04-28 18:04:56.058492178 +0200
+--- src/option.c 2019-04-28 18:55:14.820079984 +0200
+***************
+*** 3321,3329 ****
+ if (((p = mch_getenv((char_u *)"SHELL")) != NULL && *p != NUL)
+ #if defined(MSWIN)
+ || ((p = mch_getenv((char_u *)"COMSPEC")) != NULL && *p != NUL)
+- # ifdef MSWIN
+ || ((p = (char_u *)default_shell()) != NULL && *p != NUL)
+- # endif
+ #endif
+ )
+ set_string_default_esc("sh", p, TRUE);
+--- 3321,3327 ----
+***************
+*** 3673,3682 ****
+ }
+ #endif
+
+! #if defined(MSWIN) && !defined(FEAT_GUI)
+ /* Win32 console: When GetACP() returns a different value from
+ * GetConsoleCP() set 'termencoding'. */
+! if (GetACP() != GetConsoleCP())
+ {
+ char buf[50];
+
+--- 3671,3684 ----
+ }
+ #endif
+
+! #if defined(MSWIN) && (!defined(FEAT_GUI) || defined(VIMDLL))
+ /* Win32 console: When GetACP() returns a different value from
+ * GetConsoleCP() set 'termencoding'. */
+! if (
+! # ifdef VIMDLL
+! (!gui.in_use && !gui.starting) &&
+! # endif
+! GetACP() != GetConsoleCP())
+ {
+ char buf[50];
+
+***************
+*** 6856,6866 ****
+ {
+ out_str(T_ME);
+ redraw_later(CLEAR);
+! #if defined(MSWIN) && !defined(FEAT_GUI_MSWIN)
+ /* Since t_me has been set, this probably means that the user
+ * wants to use this as default colors. Need to reset default
+ * background/foreground colors. */
+! mch_set_normal_colors();
+ #endif
+ }
+ if (varp == &T_BE && termcap_active)
+--- 6858,6871 ----
+ {
+ out_str(T_ME);
+ redraw_later(CLEAR);
+! #if defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))
+ /* Since t_me has been set, this probably means that the user
+ * wants to use this as default colors. Need to reset default
+ * background/foreground colors. */
+! # ifdef VIMDLL
+! if (!gui.in_use && !gui.starting)
+! # endif
+! mch_set_normal_colors();
+ #endif
+ }
+ if (varp == &T_BE && termcap_active)
+***************
+*** 8838,8844 ****
+ {
+ # ifdef FEAT_VTP
+ /* Do not turn on 'tgc' when 24-bit colors are not supported. */
+! if (!has_vtp_working())
+ {
+ p_tgc = 0;
+ return N_("E954: 24-bit colors are not supported on this environment");
+--- 8843,8853 ----
+ {
+ # ifdef FEAT_VTP
+ /* Do not turn on 'tgc' when 24-bit colors are not supported. */
+! if (
+! # ifdef VIMDLL
+! !gui.in_use && !gui.starting &&
+! # endif
+! !has_vtp_working())
+ {
+ p_tgc = 0;
+ return N_("E954: 24-bit colors are not supported on this environment");
+*** ../vim-8.1.1229/src/os_mswin.c 2019-04-28 14:02:25.414687593 +0200
+--- src/os_mswin.c 2019-04-28 19:00:21.650678844 +0200
+***************
+*** 129,135 ****
+ FILE* fdDump = NULL;
+ #endif
+
+! #ifndef FEAT_GUI_MSWIN
+ extern char g_szOrigTitle[];
+ #endif
+
+--- 129,135 ----
+ FILE* fdDump = NULL;
+ #endif
+
+! #if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
+ extern char g_szOrigTitle[];
+ #endif
+
+***************
+*** 195,200 ****
+--- 195,211 ----
+ #endif
+
+
++ #ifndef PROTO
++ /*
++ * Save the instance handle of the exe/dll.
++ */
++ void
++ SaveInst(HINSTANCE hInst)
++ {
++ g_hinst = hInst;
++ }
++ #endif
++
+ #if defined(FEAT_GUI_MSWIN) || defined(PROTO)
+ /*
+ * GUI version of mch_exit().
+***************
+*** 202,208 ****
+ * Careful: mch_exit() may be called before mch_init()!
+ */
+ void
+! mch_exit(int r)
+ {
+ exiting = TRUE;
+
+--- 213,219 ----
+ * Careful: mch_exit() may be called before mch_init()!
+ */
+ void
+! mch_exit_g(int r)
+ {
+ exiting = TRUE;
+
+***************
+*** 262,269 ****
+ mch_input_isatty(void)
+ {
+ #ifdef FEAT_GUI_MSWIN
+! return OK; /* GUI always has a tty */
+! #else
+ if (isatty(read_cmd_fd))
+ return TRUE;
+ return FALSE;
+--- 273,284 ----
+ mch_input_isatty(void)
+ {
+ #ifdef FEAT_GUI_MSWIN
+! # ifdef VIMDLL
+! if (gui.in_use)
+! # endif
+! return TRUE; /* GUI always has a tty */
+! #endif
+! #if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
+ if (isatty(read_cmd_fd))
+ return TRUE;
+ return FALSE;
+***************
+*** 280,287 ****
+ char_u *icon)
+ {
+ # ifdef FEAT_GUI_MSWIN
+! gui_mch_settitle(title, icon);
+! # else
+ if (title != NULL)
+ {
+ WCHAR *wp = enc_to_utf16(title, NULL);
+--- 295,309 ----
+ char_u *icon)
+ {
+ # ifdef FEAT_GUI_MSWIN
+! # ifdef VIMDLL
+! if (gui.in_use)
+! # endif
+! {
+! gui_mch_settitle(title, icon);
+! return;
+! }
+! # endif
+! # if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
+ if (title != NULL)
+ {
+ WCHAR *wp = enc_to_utf16(title, NULL);
+***************
+*** 307,314 ****
+ void
+ mch_restore_title(int which UNUSED)
+ {
+! #ifndef FEAT_GUI_MSWIN
+! SetConsoleTitle(g_szOrigTitle);
+ #endif
+ }
+
+--- 329,339 ----
+ void
+ mch_restore_title(int which UNUSED)
+ {
+! #if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
+! # ifdef VIMDLL
+! if (!gui.in_use)
+! # endif
+! SetConsoleTitle(g_szOrigTitle);
+ #endif
+ }
+
+***************
+*** 554,560 ****
+ return n;
+ }
+
+! #if defined(FEAT_GUI_MSWIN) || defined(PROTO)
+ void
+ mch_settmode(int tmode UNUSED)
+ {
+--- 579,585 ----
+ return n;
+ }
+
+! #if (defined(FEAT_GUI_MSWIN) && !defined(VIMDLL)) || defined(PROTO)
+ void
+ mch_settmode(int tmode UNUSED)
+ {
+***************
+*** 596,640 ****
+
+ #if defined(USE_MCH_ERRMSG) || defined(PROTO)
+
+! #ifdef display_errors
+! # undef display_errors
+! #endif
+
+- #ifdef FEAT_GUI
+ /*
+ * Display the saved error message(s).
+ */
+ void
+ display_errors(void)
+ {
+ char *p;
+
+! if (error_ga.ga_data != NULL)
+ {
+! /* avoid putting up a message box with blanks only */
+! for (p = (char *)error_ga.ga_data; *p; ++p)
+! if (!isspace(*p))
+! {
+! (void)gui_mch_dialog(
+ gui.starting ? VIM_INFO :
+ VIM_ERROR,
+ gui.starting ? (char_u *)_("Message") :
+ (char_u *)_("Error"),
+ (char_u *)p, (char_u *)_("&Ok"),
+ 1, NULL, FALSE);
+! break;
+! }
+! ga_clear(&error_ga);
+ }
+! }
+! #else
+! void
+! display_errors(void)
+! {
+ FlushFileBuffers(GetStdHandle(STD_ERROR_HANDLE));
+ }
+ #endif
+- #endif
+
+
+ /*
+--- 621,668 ----
+
+ #if defined(USE_MCH_ERRMSG) || defined(PROTO)
+
+! # ifdef display_errors
+! # undef display_errors
+! # endif
+
+ /*
+ * Display the saved error message(s).
+ */
+ void
+ display_errors(void)
+ {
++ # ifdef FEAT_GUI
+ char *p;
+
+! # ifdef VIMDLL
+! if (gui.in_use || gui.starting)
+! # endif
+ {
+! if (error_ga.ga_data != NULL)
+! {
+! /* avoid putting up a message box with blanks only */
+! for (p = (char *)error_ga.ga_data; *p; ++p)
+! if (!isspace(*p))
+! {
+! (void)gui_mch_dialog(
+ gui.starting ? VIM_INFO :
+ VIM_ERROR,
+ gui.starting ? (char_u *)_("Message") :
+ (char_u *)_("Error"),
+ (char_u *)p, (char_u *)_("&Ok"),
+ 1, NULL, FALSE);
+! break;
+! }
+! ga_clear(&error_ga);
+! }
+! return;
+ }
+! # endif
+! # if !defined(FEAT_GUI) || defined(VIMDLL)
+ FlushFileBuffers(GetStdHandle(STD_ERROR_HANDLE));
++ # endif
+ }
+ #endif
+
+
+ /*
+***************
+*** 717,723 ****
+ }
+
+
+! #ifdef FEAT_GUI_MSWIN
+ /*
+ * return non-zero if a character is available
+ */
+--- 745,751 ----
+ }
+
+
+! #if defined(FEAT_GUI_MSWIN) && !defined(VIMDLL)
+ /*
+ * return non-zero if a character is available
+ */
+***************
+*** 955,961 ****
+
+ #endif //_DEBUG
+
+! #if !defined(FEAT_GUI) || defined(PROTO)
+ # ifdef FEAT_TITLE
+ extern HWND g_hWnd; /* This is in os_win32.c. */
+ # endif
+--- 983,989 ----
+
+ #endif //_DEBUG
+
+! #if !defined(FEAT_GUI) || defined(VIMDLL) || defined(PROTO)
+ # ifdef FEAT_TITLE
+ extern HWND g_hWnd; /* This is in os_win32.c. */
+ # endif
+***************
+*** 1121,1128 ****
+ VIM_CLEAR(prt_name);
+ }
+ EnableMenuItem(GetSystemMenu(hDlg, FALSE), SC_CLOSE, MF_GRAYED);
+! #ifndef FEAT_GUI
+! BringWindowToTop(s_hwnd);
+ #endif
+ return TRUE;
+
+--- 1149,1159 ----
+ VIM_CLEAR(prt_name);
+ }
+ EnableMenuItem(GetSystemMenu(hDlg, FALSE), SC_CLOSE, MF_GRAYED);
+! #if !defined(FEAT_GUI) || defined(VIMDLL)
+! # ifdef VIMDLL
+! if (!gui.in_use)
+! # endif
+! BringWindowToTop(s_hwnd);
+ #endif
+ return TRUE;
+
+***************
+*** 1155,1161 ****
+ return !*bUserAbort;
+ }
+
+! #ifndef FEAT_GUI
+
+ static UINT_PTR CALLBACK
+ PrintHookProc(
+--- 1186,1192 ----
+ return !*bUserAbort;
+ }
+
+! #if !defined(FEAT_GUI) || defined(VIMDLL)
+
+ static UINT_PTR CALLBACK
+ PrintHookProc(
+***************
+*** 1349,1356 ****
+ bUserAbort = &(psettings->user_abort);
+ vim_memset(&prt_dlg, 0, sizeof(PRINTDLGW));
+ prt_dlg.lStructSize = sizeof(PRINTDLGW);
+! #ifndef FEAT_GUI
+! GetConsoleHwnd(); /* get value of s_hwnd */
+ #endif
+ prt_dlg.hwndOwner = s_hwnd;
+ prt_dlg.Flags = PD_NOPAGENUMS | PD_NOSELECTION | PD_RETURNDC;
+--- 1380,1390 ----
+ bUserAbort = &(psettings->user_abort);
+ vim_memset(&prt_dlg, 0, sizeof(PRINTDLGW));
+ prt_dlg.lStructSize = sizeof(PRINTDLGW);
+! #if !defined(FEAT_GUI) || defined(VIMDLL)
+! # ifdef VIMDLL
+! if (!gui.in_use)
+! # endif
+! GetConsoleHwnd(); /* get value of s_hwnd */
+ #endif
+ prt_dlg.hwndOwner = s_hwnd;
+ prt_dlg.Flags = PD_NOPAGENUMS | PD_NOSELECTION | PD_RETURNDC;
+***************
+*** 1359,1370 ****
+ prt_dlg.hDevMode = stored_dm;
+ prt_dlg.hDevNames = stored_devn;
+ prt_dlg.lCustData = stored_nCopies; // work around bug in print dialog
+! #ifndef FEAT_GUI
+! /*
+! * Use hook to prevent console window being sent to back
+! */
+! prt_dlg.lpfnPrintHook = PrintHookProc;
+! prt_dlg.Flags |= PD_ENABLEPRINTHOOK;
+ #endif
+ prt_dlg.Flags |= stored_nFlags;
+ }
+--- 1393,1409 ----
+ prt_dlg.hDevMode = stored_dm;
+ prt_dlg.hDevNames = stored_devn;
+ prt_dlg.lCustData = stored_nCopies; // work around bug in print dialog
+! #if !defined(FEAT_GUI) || defined(VIMDLL)
+! # ifdef VIMDLL
+! if (!gui.in_use)
+! # endif
+! {
+! /*
+! * Use hook to prevent console window being sent to back
+! */
+! prt_dlg.lpfnPrintHook = PrintHookProc;
+! prt_dlg.Flags |= PD_ENABLEPRINTHOOK;
+! }
+ #endif
+ prt_dlg.Flags |= stored_nFlags;
+ }
+***************
+*** 1374,1381 ****
+ * never show dialog if we are running over telnet
+ */
+ if (forceit
+! #ifndef FEAT_GUI
+ || !term_console
+ #endif
+ )
+ {
+--- 1413,1424 ----
+ * never show dialog if we are running over telnet
+ */
+ if (forceit
+! #if !defined(FEAT_GUI) || defined(VIMDLL)
+! # ifdef VIMDLL
+! || (!gui.in_use && !term_console)
+! # else
+ || !term_console
++ # endif
+ #endif
+ )
+ {
+***************
+*** 1548,1554 ****
+ char szBuffer[300];
+ WCHAR *wp;
+
+! hDlgPrint = CreateDialog(GetModuleHandle(NULL), TEXT("PrintDlgBox"),
+ prt_dlg.hwndOwner, PrintDlgProc);
+ SetAbortProc(prt_dlg.hDC, AbortProc);
+ wsprintf(szBuffer, _("Printing '%s'"), gettail(psettings->jobname));
+--- 1591,1597 ----
+ char szBuffer[300];
+ WCHAR *wp;
+
+! hDlgPrint = CreateDialog(g_hinst, TEXT("PrintDlgBox"),
+ prt_dlg.hwndOwner, PrintDlgProc);
+ SetAbortProc(prt_dlg.hDC, AbortProc);
+ wsprintf(szBuffer, _("Printing '%s'"), gettail(psettings->jobname));
+***************
+*** 1568,1574 ****
+
+ #ifdef FEAT_GUI
+ /* Give focus back to main window (when using MDI). */
+! SetFocus(s_hwnd);
+ #endif
+
+ return (ret > 0);
+--- 1611,1620 ----
+
+ #ifdef FEAT_GUI
+ /* Give focus back to main window (when using MDI). */
+! # ifdef VIMDLL
+! if (gui.in_use)
+! # endif
+! SetFocus(s_hwnd);
+ #endif
+
+ return (ret > 0);
+***************
+*** 1927,1942 ****
+ }
+ #endif
+
+! #if (defined(FEAT_EVAL) && !defined(FEAT_GUI)) || defined(PROTO)
+ /*
+ * Bring ourselves to the foreground. Does work if the OS doesn't allow it.
+ */
+ void
+ win32_set_foreground(void)
+ {
+- # ifndef FEAT_GUI
+ GetConsoleHwnd(); /* get value of s_hwnd */
+- # endif
+ if (s_hwnd != 0)
+ SetForegroundWindow(s_hwnd);
+ }
+--- 1973,1986 ----
+ }
+ #endif
+
+! #if (defined(FEAT_EVAL) && (!defined(FEAT_GUI) || defined(VIMDLL))) || defined(PROTO)
+ /*
+ * Bring ourselves to the foreground. Does work if the OS doesn't allow it.
+ */
+ void
+ win32_set_foreground(void)
+ {
+ GetConsoleHwnd(); /* get value of s_hwnd */
+ if (s_hwnd != 0)
+ SetForegroundWindow(s_hwnd);
+ }
+***************
+*** 2078,2085 ****
+
+ # ifdef FEAT_GUI
+ /* Wake up the main GUI loop. */
+! if (s_hwnd != 0)
+! PostMessage(s_hwnd, WM_NULL, 0, 0);
+ # endif
+ return 1;
+
+--- 2122,2132 ----
+
+ # ifdef FEAT_GUI
+ /* Wake up the main GUI loop. */
+! # ifdef VIMDLL
+! if (gui.in_use)
+! # endif
+! if (s_hwnd != 0)
+! PostMessage(s_hwnd, WM_NULL, 0, 0);
+ # endif
+ return 1;
+
+***************
+*** 2145,2152 ****
+ {
+ /* When the message window is activated (brought to the foreground),
+ * this actually applies to the text window. */
+! #ifndef FEAT_GUI
+! GetConsoleHwnd(); /* get value of s_hwnd */
+ #endif
+ if (s_hwnd != 0)
+ {
+--- 2192,2202 ----
+ {
+ /* When the message window is activated (brought to the foreground),
+ * this actually applies to the text window. */
+! #if !defined(FEAT_GUI) || defined(VIMDLL)
+! # ifdef VIMDLL
+! if (!gui.in_use)
+! # endif
+! GetConsoleHwnd(); /* get value of s_hwnd */
+ #endif
+ if (s_hwnd != 0)
+ {
+***************
+*** 2166,2172 ****
+ serverInitMessaging(void)
+ {
+ WNDCLASS wndclass;
+- HINSTANCE s_hinst;
+
+ /* Clean up on exit */
+ atexit(CleanUpMessaging);
+--- 2216,2221 ----
+***************
+*** 2174,2185 ****
+ /* Register a window class - we only really care
+ * about the window procedure
+ */
+- s_hinst = (HINSTANCE)GetModuleHandle(0);
+ wndclass.style = 0;
+ wndclass.lpfnWndProc = Messaging_WndProc;
+ wndclass.cbClsExtra = 0;
+ wndclass.cbWndExtra = 0;
+! wndclass.hInstance = s_hinst;
+ wndclass.hIcon = NULL;
+ wndclass.hCursor = NULL;
+ wndclass.hbrBackground = NULL;
+--- 2223,2233 ----
+ /* Register a window class - we only really care
+ * about the window procedure
+ */
+ wndclass.style = 0;
+ wndclass.lpfnWndProc = Messaging_WndProc;
+ wndclass.cbClsExtra = 0;
+ wndclass.cbWndExtra = 0;
+! wndclass.hInstance = g_hinst;
+ wndclass.hIcon = NULL;
+ wndclass.hCursor = NULL;
+ wndclass.hbrBackground = NULL;
+***************
+*** 2194,2200 ****
+ WS_POPUPWINDOW | WS_CAPTION,
+ CW_USEDEFAULT, CW_USEDEFAULT,
+ 100, 100, NULL, NULL,
+! s_hinst, NULL);
+ }
+
+ /* Used by serverSendToVim() to find an alternate server name. */
+--- 2242,2248 ----
+ WS_POPUPWINDOW | WS_CAPTION,
+ CW_USEDEFAULT, CW_USEDEFAULT,
+ 100, 100, NULL, NULL,
+! g_hinst, NULL);
+ }
+
+ /* Used by serverSendToVim() to find an alternate server name. */
+***************
+*** 2744,2755 ****
+ L"Fixedsys" /* see _ReadVimIni */
+ };
+
+! /* Initialise the "current height" to -12 (same as s_lfDefault) just
+! * in case the user specifies a font in "guifont" with no size before a font
+! * with an explicit size has been set. This defaults the size to this value
+! * (-12 equates to roughly 9pt).
+! */
+! int current_font_height = -12; /* also used in gui_w48.c */
+
+ /* Convert a string representing a point size into pixels. The string should
+ * be a positive decimal number, with an optional decimal point (eg, "12", or
+--- 2792,2802 ----
+ L"Fixedsys" /* see _ReadVimIni */
+ };
+
+! // Initialise the "current height" to -12 (same as s_lfDefault) just
+! // in case the user specifies a font in "guifont" with no size before a font
+! // with an explicit size has been set. This defaults the size to this value
+! // (-12 equates to roughly 9pt).
+! int current_font_height = -12; // also used in gui_w32.c
+
+ /* Convert a string representing a point size into pixels. The string should
+ * be a positive decimal number, with an optional decimal point (eg, "12", or
+*** ../vim-8.1.1229/src/os_w32dll.c 2019-04-28 19:44:58.074429436 +0200
+--- src/os_w32dll.c 2019-04-28 18:58:04.375310506 +0200
+***************
+*** 0 ****
+--- 1,27 ----
++ /* vi:set ts=8 sts=4 sw=4 noet:
++ *
++ * VIM - Vi IMproved by Bram Moolenaar
++ *
++ * Do ":help uganda" in Vim to read copying and usage conditions.
++ * Do ":help credits" in Vim to see a list of people who contributed.
++ * See README.txt for an overview of the Vim source code.
++ */
++ /*
++ * Windows GUI: main program (DLL) entry point:
++ *
++ * Ron Aaron <ronaharon@yahoo.com> wrote this and the DLL support code.
++ * Adapted by Ken Takata.
++ */
++ #ifndef WIN32_LEAN_AND_MEAN
++ # define WIN32_LEAN_AND_MEAN
++ #endif
++ #include <windows.h>
++
++ void SaveInst(HINSTANCE hInst);
++
++ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
++ {
++ if (fdwReason == DLL_PROCESS_ATTACH)
++ SaveInst(hinstDLL);
++ return TRUE;
++ }
+*** ../vim-8.1.1229/src/os_w32exe.c 2019-04-03 20:30:56.085017544 +0200
+--- src/os_w32exe.c 2019-04-28 18:55:14.820079984 +0200
+***************
+*** 22,29 ****
+ #endif
+
+ // cproto doesn't create a prototype for VimMain()
+ int _cdecl VimMain(int argc, char **argv);
+! #ifdef FEAT_GUI
+ void _cdecl SaveInst(HINSTANCE hInst);
+ #endif
+
+--- 22,32 ----
+ #endif
+
+ // cproto doesn't create a prototype for VimMain()
++ #ifdef VIMDLL
++ __declspec(dllimport)
++ #endif
+ int _cdecl VimMain(int argc, char **argv);
+! #ifndef VIMDLL
+ void _cdecl SaveInst(HINSTANCE hInst);
+ #endif
+
+***************
+*** 40,47 ****
+ wmain(int argc UNUSED, wchar_t **argv UNUSED)
+ # endif
+ {
+! # ifdef FEAT_GUI
+ SaveInst(hInstance);
+ # endif
+ VimMain(0, NULL);
+
+--- 43,54 ----
+ wmain(int argc UNUSED, wchar_t **argv UNUSED)
+ # endif
+ {
+! # ifndef VIMDLL
+! # ifdef FEAT_GUI
+ SaveInst(hInstance);
++ # else
++ SaveInst(GetModuleHandleW(NULL));
++ # endif
+ # endif
+ VimMain(0, NULL);
+
+*** ../vim-8.1.1229/src/os_win32.c 2019-04-02 22:15:51.348273497 +0200
+--- src/os_win32.c 2019-04-28 18:55:14.824079967 +0200
+***************
+*** 151,157 ****
+ # define wcsicmp(a, b) wcscmpi((a), (b))
+ #endif
+
+! #ifndef FEAT_GUI_MSWIN
+ /* Win32 Console handles for input and output */
+ static HANDLE g_hConIn = INVALID_HANDLE_VALUE;
+ static HANDLE g_hConOut = INVALID_HANDLE_VALUE;
+--- 151,157 ----
+ # define wcsicmp(a, b) wcscmpi((a), (b))
+ #endif
+
+! #if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
+ /* Win32 Console handles for input and output */
+ static HANDLE g_hConIn = INVALID_HANDLE_VALUE;
+ static HANDLE g_hConOut = INVALID_HANDLE_VALUE;
+***************
+*** 179,185 ****
+ static void standout(void);
+ static int s_cursor_visible = TRUE;
+ static int did_create_conin = FALSE;
+! #else
+ static int s_dont_use_vimrun = TRUE;
+ static int need_vimrun_warning = FALSE;
+ static char *vimrun_path = "vimrun ";
+--- 179,186 ----
+ static void standout(void);
+ static int s_cursor_visible = TRUE;
+ static int did_create_conin = FALSE;
+! #endif
+! #ifdef FEAT_GUI_MSWIN
+ static int s_dont_use_vimrun = TRUE;
+ static int need_vimrun_warning = FALSE;
+ static char *vimrun_path = "vimrun ";
+***************
+*** 193,199 ****
+ static int conpty_stable = 0;
+ static void vtp_flag_init();
+
+! #ifndef FEAT_GUI_MSWIN
+ static int vtp_working = 0;
+ static void vtp_init();
+ static void vtp_exit();
+--- 194,200 ----
+ static int conpty_stable = 0;
+ static void vtp_flag_init();
+
+! #if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
+ static int vtp_working = 0;
+ static void vtp_init();
+ static void vtp_exit();
+***************
+*** 227,233 ****
+ # define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
+ #endif
+
+! #ifndef FEAT_GUI_MSWIN
+ static int suppress_winsize = 1; /* don't fiddle with console */
+ #endif
+
+--- 228,234 ----
+ # define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
+ #endif
+
+! #if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
+ static int suppress_winsize = 1; /* don't fiddle with console */
+ #endif
+
+***************
+*** 235,241 ****
+
+ static BOOL win8_or_later = FALSE;
+
+! #ifndef FEAT_GUI_MSWIN
+ /* Dynamic loading for portability */
+ typedef struct _DYN_CONSOLE_SCREEN_BUFFER_INFOEX
+ {
+--- 236,242 ----
+
+ static BOOL win8_or_later = FALSE;
+
+! #if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
+ /* Dynamic loading for portability */
+ typedef struct _DYN_CONSOLE_SCREEN_BUFFER_INFOEX
+ {
+***************
+*** 284,290 ****
+ return ver;
+ }
+
+! #ifndef FEAT_GUI_MSWIN
+ /*
+ * Version of ReadConsoleInput() that works with IME.
+ * Works around problems on Windows 8.
+--- 285,291 ----
+ return ver;
+ }
+
+! #if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
+ /*
+ * Version of ReadConsoleInput() that works with IME.
+ * Works around problems on Windows 8.
+***************
+*** 496,501 ****
+--- 497,524 ----
+ return dll;
+ }
+
++ #if defined(VIMDLL) || defined(PROTO)
++ /*
++ * Check if the current executable file is for the GUI subsystem.
++ */
++ int
++ mch_is_gui_executable(void)
++ {
++ PBYTE pImage = (PBYTE)GetModuleHandle(NULL);
++ PIMAGE_DOS_HEADER pDOS = (PIMAGE_DOS_HEADER)pImage;
++ PIMAGE_NT_HEADERS pPE;
++
++ if (pDOS->e_magic != IMAGE_DOS_SIGNATURE)
++ return FALSE;
++ pPE = (PIMAGE_NT_HEADERS)(pImage + pDOS->e_lfanew);
++ if (pPE->Signature != IMAGE_NT_SIGNATURE)
++ return FALSE;
++ if (pPE->OptionalHeader.Subsystem == IMAGE_SUBSYSTEM_WINDOWS_GUI)
++ return TRUE;
++ return FALSE;
++ }
++ #endif
++
+ #if defined(DYNAMIC_ICONV) || defined(DYNAMIC_GETTEXT) || defined(PROTO)
+ /*
+ * Get related information about 'funcname' which is imported by 'hInst'.
+***************
+*** 816,822 ****
+ }
+ }
+
+! #ifndef FEAT_GUI_MSWIN
+
+ #define SHIFT (SHIFT_PRESSED)
+ #define CTRL (RIGHT_CTRL_PRESSED | LEFT_CTRL_PRESSED)
+--- 839,845 ----
+ }
+ }
+
+! #if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
+
+ #define SHIFT (SHIFT_PRESSED)
+ #define CTRL (RIGHT_CTRL_PRESSED | LEFT_CTRL_PRESSED)
+***************
+*** 1116,1122 ****
+ /*
+ * For the GUI the mouse handling is in gui_w32.c.
+ */
+! # ifdef FEAT_GUI_MSWIN
+ void
+ mch_setmouse(int on UNUSED)
+ {
+--- 1139,1145 ----
+ /*
+ * For the GUI the mouse handling is in gui_w32.c.
+ */
+! # if defined(FEAT_GUI_MSWIN) && !defined(VIMDLL)
+ void
+ mch_setmouse(int on UNUSED)
+ {
+***************
+*** 1136,1141 ****
+--- 1159,1168 ----
+ {
+ DWORD cmodein;
+
++ # ifdef VIMDLL
++ if (gui.in_use)
++ return;
++ # endif
+ if (!g_fMouseAvail)
+ return;
+
+***************
+*** 1454,1459 ****
+--- 1481,1491 ----
+ int idx;
+ int thickness;
+
++ # ifdef VIMDLL
++ if (gui.in_use)
++ return;
++ # endif
++
+ /*
+ * How the cursor is drawn depends on the current mode.
+ */
+***************
+*** 1467,1473 ****
+ }
+ #endif
+
+! #ifndef FEAT_GUI_MSWIN /* this isn't used for the GUI */
+ /*
+ * Handle FOCUS_EVENT.
+ */
+--- 1499,1505 ----
+ }
+ #endif
+
+! #if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
+ /*
+ * Handle FOCUS_EVENT.
+ */
+***************
+*** 1677,1689 ****
+ return FALSE;
+ }
+
+- #ifndef FEAT_GUI_MSWIN
+ /*
+ * return non-zero if a character is available
+ */
+ int
+ mch_char_avail(void)
+ {
+ return WaitForChar(0L, FALSE);
+ }
+
+--- 1709,1724 ----
+ return FALSE;
+ }
+
+ /*
+ * return non-zero if a character is available
+ */
+ int
+ mch_char_avail(void)
+ {
++ # ifdef VIMDLL
++ if (gui.in_use)
++ return TRUE;
++ # endif
+ return WaitForChar(0L, FALSE);
+ }
+
+***************
+*** 1694,1703 ****
+ int
+ mch_check_messages(void)
+ {
+ return WaitForChar(0L, TRUE);
+ }
+ # endif
+- #endif
+
+ /*
+ * Create the console input. Used when reading stdin doesn't work.
+--- 1729,1741 ----
+ int
+ mch_check_messages(void)
+ {
++ # ifdef VIMDLL
++ if (gui.in_use)
++ return TRUE;
++ # endif
+ return WaitForChar(0L, TRUE);
+ }
+ # endif
+
+ /*
+ * Create the console input. Used when reading stdin doesn't work.
+***************
+*** 1779,1785 ****
+ long time UNUSED,
+ int tb_change_cnt UNUSED)
+ {
+! #ifndef FEAT_GUI_MSWIN /* this isn't used for the GUI */
+
+ int len;
+ int c;
+--- 1817,1823 ----
+ long time UNUSED,
+ int tb_change_cnt UNUSED)
+ {
+! #if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
+
+ int len;
+ int c;
+***************
+*** 1787,1792 ****
+--- 1825,1835 ----
+ static char_u typeahead[TYPEAHEADLEN]; /* previously typed bytes. */
+ static int typeaheadlen = 0;
+
++ # ifdef VIMDLL
++ if (gui.in_use)
++ return 0;
++ # endif
++
+ /* First use any typeahead that was kept because "buf" was too small. */
+ if (typeaheadlen > 0)
+ goto theend;
+***************
+*** 2092,2099 ****
+ /*
+ * GUI version of mch_init().
+ */
+! void
+! mch_init(void)
+ {
+ #ifndef __MINGW32__
+ extern int _fmode;
+--- 2135,2142 ----
+ /*
+ * GUI version of mch_init().
+ */
+! static void
+! mch_init_g(void)
+ {
+ #ifndef __MINGW32__
+ extern int _fmode;
+***************
+*** 2160,2166 ****
+ }
+
+
+! #else /* FEAT_GUI_MSWIN */
+
+ #define SRWIDTH(sr) ((sr).Right - (sr).Left + 1)
+ #define SRHEIGHT(sr) ((sr).Bottom - (sr).Top + 1)
+--- 2203,2211 ----
+ }
+
+
+! #endif /* FEAT_GUI_MSWIN */
+!
+! #if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
+
+ #define SRWIDTH(sr) ((sr).Right - (sr).Left + 1)
+ #define SRHEIGHT(sr) ((sr).Bottom - (sr).Top + 1)
+***************
+*** 2442,2452 ****
+ static ConsoleBuffer g_cbTermcap = { 0 };
+
+ #ifdef FEAT_TITLE
+- #ifdef __BORLANDC__
+- typedef HWND (__stdcall *GETCONSOLEWINDOWPROC)(VOID);
+- #else
+- typedef HWND (WINAPI *GETCONSOLEWINDOWPROC)(VOID);
+- #endif
+ char g_szOrigTitle[256] = { 0 };
+ HWND g_hWnd = NULL; /* also used in os_mswin.c */
+ static HICON g_hOrigIconSmall = NULL;
+--- 2487,2492 ----
+***************
+*** 2563,2570 ****
+ /*
+ * non-GUI version of mch_init().
+ */
+! void
+! mch_init(void)
+ {
+ #ifndef FEAT_RESTORE_ORIG_SCREEN
+ CONSOLE_SCREEN_BUFFER_INFO csbi;
+--- 2603,2610 ----
+ /*
+ * non-GUI version of mch_init().
+ */
+! static void
+! mch_init_c(void)
+ {
+ #ifndef FEAT_RESTORE_ORIG_SCREEN
+ CONSOLE_SCREEN_BUFFER_INFO csbi;
+***************
+*** 2660,2667 ****
+ * Shut down and exit with status `r'
+ * Careful: mch_exit() may be called before mch_init()!
+ */
+! void
+! mch_exit(int r)
+ {
+ exiting = TRUE;
+
+--- 2700,2707 ----
+ * Shut down and exit with status `r'
+ * Careful: mch_exit() may be called before mch_init()!
+ */
+! static void
+! mch_exit_c(int r)
+ {
+ exiting = TRUE;
+
+***************
+*** 2711,2716 ****
+--- 2751,2786 ----
+ }
+ #endif /* !FEAT_GUI_MSWIN */
+
++ void
++ mch_init(void)
++ {
++ #ifdef VIMDLL
++ if (gui.starting)
++ mch_init_g();
++ else
++ mch_init_c();
++ #elif defined(FEAT_GUI_MSWIN)
++ mch_init_g();
++ #else
++ mch_init_c();
++ #endif
++ }
++
++ void
++ mch_exit(int r)
++ {
++ #ifdef VIMDLL
++ if (gui.starting || gui.in_use)
++ mch_exit_g(r);
++ else
++ mch_exit_c(r);
++ #elif defined(FEAT_GUI_MSWIN)
++ mch_exit_g(r);
++ #else
++ mch_exit_c(r);
++ #endif
++ }
++
+ /*
+ * Do we have an interactive window?
+ */
+***************
+*** 2721,2729 ****
+ {
+ get_exe_name();
+
+! #ifdef FEAT_GUI_MSWIN
+ return OK; /* GUI always has a tty */
+ #else
+ if (isatty(1))
+ return OK;
+ return FAIL;
+--- 2791,2803 ----
+ {
+ get_exe_name();
+
+! #if defined(FEAT_GUI_MSWIN) && !defined(VIMDLL)
+ return OK; /* GUI always has a tty */
+ #else
++ # ifdef VIMDLL
++ if (gui.in_use)
++ return OK;
++ # endif
+ if (isatty(1))
+ return OK;
+ return FAIL;
+***************
+*** 3446,3452 ****
+ #endif
+ }
+
+! #ifndef FEAT_GUI_MSWIN
+
+ /*
+ * handler for ctrl-break, ctrl-c interrupts, and fatal events.
+--- 3520,3526 ----
+ #endif
+ }
+
+! #if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
+
+ /*
+ * handler for ctrl-break, ctrl-c interrupts, and fatal events.
+***************
+*** 3516,3521 ****
+--- 3590,3599 ----
+ DWORD cmodeout;
+ BOOL bEnableHandler;
+
++ # ifdef VIMDLL
++ if (gui.in_use)
++ return;
++ # endif
+ GetConsoleMode(g_hConIn, &cmodein);
+ GetConsoleMode(g_hConOut, &cmodeout);
+ if (tmode == TMODE_RAW)
+***************
+*** 3528,3534 ****
+ #endif
+ cmodeout &= ~(
+ #ifdef FEAT_TERMGUICOLORS
+! /* Do not turn off the ENABLE_PROCESSRD_OUTPUT flag when using
+ * VTP. */
+ ((vtp_working) ? 0 : ENABLE_PROCESSED_OUTPUT) |
+ #else
+--- 3606,3612 ----
+ #endif
+ cmodeout &= ~(
+ #ifdef FEAT_TERMGUICOLORS
+! /* Do not turn off the ENABLE_PROCESSED_OUTPUT flag when using
+ * VTP. */
+ ((vtp_working) ? 0 : ENABLE_PROCESSED_OUTPUT) |
+ #else
+***************
+*** 3570,3575 ****
+--- 3648,3657 ----
+ {
+ CONSOLE_SCREEN_BUFFER_INFO csbi;
+
++ # ifdef VIMDLL
++ if (gui.in_use)
++ return OK;
++ # endif
+ if (!g_fTermcapMode && g_cbTermcap.IsValid)
+ {
+ /*
+***************
+*** 3717,3722 ****
+--- 3799,3808 ----
+ {
+ COORD coordScreen;
+
++ # ifdef VIMDLL
++ if (gui.in_use)
++ return;
++ # endif
+ /* Don't change window size while still starting up */
+ if (suppress_winsize != 0)
+ {
+***************
+*** 3744,3749 ****
+--- 3830,3839 ----
+ void
+ mch_new_shellsize(void)
+ {
++ # ifdef VIMDLL
++ if (gui.in_use)
++ return;
++ # endif
+ set_scroll_region(0, 0, Columns - 1, Rows - 1);
+ }
+
+***************
+*** 4369,4375 ****
+ }
+
+ static int
+! mch_system(char *cmd, int options)
+ {
+ /* if we can pipe and the shelltemp option is off */
+ if (!p_stmp)
+--- 4459,4465 ----
+ }
+
+ static int
+! mch_system_g(char *cmd, int options)
+ {
+ /* if we can pipe and the shelltemp option is off */
+ if (!p_stmp)
+***************
+*** 4377,4386 ****
+ else
+ return mch_system_classic(cmd, options);
+ }
+! #else
+
+ static int
+! mch_system(char *cmd, int options)
+ {
+ int ret;
+ WCHAR *wcmd;
+--- 4467,4477 ----
+ else
+ return mch_system_classic(cmd, options);
+ }
+! #endif
+
++ #if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
+ static int
+! mch_system_c(char *cmd, int options)
+ {
+ int ret;
+ WCHAR *wcmd;
+***************
+*** 4396,4401 ****
+--- 4487,4507 ----
+
+ #endif
+
++ static int
++ mch_system(char *cmd, int options)
++ {
++ #ifdef VIMDLL
++ if (gui.in_use)
++ return mch_system_g(cmd, options);
++ else
++ return mch_system_c(cmd, options);
++ #elif defined(FEAT_GUI_MSWIN)
++ return mch_system_g(cmd, options);
++ #else
++ return mch_system_c(cmd, options);
++ #endif
++ }
++
+ #if defined(FEAT_GUI) && defined(FEAT_TERMINAL)
+ /*
+ * Use a terminal window to run a shell command in.
+***************
+*** 4527,4533 ****
+ #endif
+ #if defined(FEAT_GUI) && defined(FEAT_TERMINAL)
+ /* TODO: make the terminal window work with input or output redirected. */
+! if (vim_strchr(p_go, GO_TERMINAL) != NULL
+ && (options & (SHELL_FILTER|SHELL_DOOUT|SHELL_WRITE|SHELL_READ)) == 0)
+ {
+ /* Use a terminal window to run the command in. */
+--- 4633,4643 ----
+ #endif
+ #if defined(FEAT_GUI) && defined(FEAT_TERMINAL)
+ /* TODO: make the terminal window work with input or output redirected. */
+! if (
+! # ifdef VIMDLL
+! gui.in_use &&
+! # endif
+! vim_strchr(p_go, GO_TERMINAL) != NULL
+ && (options & (SHELL_FILTER|SHELL_DOOUT|SHELL_WRITE|SHELL_READ)) == 0)
+ {
+ /* Use a terminal window to run the command in. */
+***************
+*** 4679,4685 ****
+ {
+ x = -1;
+ #ifdef FEAT_GUI_MSWIN
+! emsg(_("E371: Command not found"));
+ #endif
+ }
+
+--- 4789,4798 ----
+ {
+ x = -1;
+ #ifdef FEAT_GUI_MSWIN
+! # ifdef VIMDLL
+! if (gui.in_use)
+! # endif
+! emsg(_("E371: Command not found"));
+ #endif
+ }
+
+***************
+*** 4699,4705 ****
+ {
+ cmdlen = (
+ #ifdef FEAT_GUI_MSWIN
+! (!p_stmp ? 0 : STRLEN(vimrun_path)) +
+ #endif
+ STRLEN(p_sh) + STRLEN(p_shcf) + STRLEN(cmd) + 10);
+
+--- 4812,4818 ----
+ {
+ cmdlen = (
+ #ifdef FEAT_GUI_MSWIN
+! (gui.in_use ? (!p_stmp ? 0 : STRLEN(vimrun_path)) : 0) +
+ #endif
+ STRLEN(p_sh) + STRLEN(p_shcf) + STRLEN(cmd) + 10);
+
+***************
+*** 4707,4713 ****
+ if (newcmd != NULL)
+ {
+ #if defined(FEAT_GUI_MSWIN)
+! if (need_vimrun_warning)
+ {
+ char *msg = _("VIMRUN.EXE not found in your $PATH.\n"
+ "External commands will not pause after completion.\n"
+--- 4820,4830 ----
+ if (newcmd != NULL)
+ {
+ #if defined(FEAT_GUI_MSWIN)
+! if (
+! # ifdef VIMDLL
+! gui.in_use &&
+! # endif
+! need_vimrun_warning)
+ {
+ char *msg = _("VIMRUN.EXE not found in your $PATH.\n"
+ "External commands will not pause after completion.\n"
+***************
+*** 4722,4728 ****
+ vim_free(wtitle);
+ need_vimrun_warning = FALSE;
+ }
+! if (!s_dont_use_vimrun && p_stmp)
+ /* Use vimrun to execute the command. It opens a console
+ * window, which can be closed without killing Vim. */
+ vim_snprintf((char *)newcmd, cmdlen, "%s%s%s %s %s",
+--- 4839,4849 ----
+ vim_free(wtitle);
+ need_vimrun_warning = FALSE;
+ }
+! if (
+! # ifdef VIMDLL
+! gui.in_use &&
+! # endif
+! !s_dont_use_vimrun && p_stmp)
+ /* Use vimrun to execute the command. It opens a console
+ * window, which can be closed without killing Vim. */
+ vim_snprintf((char *)newcmd, cmdlen, "%s%s%s %s %s",
+***************
+*** 4746,4752 ****
+ /* Print the return value, unless "vimrun" was used. */
+ if (x != 0 && !(options & SHELL_SILENT) && !emsg_silent
+ #if defined(FEAT_GUI_MSWIN)
+! && ((options & SHELL_DOOUT) || s_dont_use_vimrun || !p_stmp)
+ #endif
+ )
+ {
+--- 4867,4874 ----
+ /* Print the return value, unless "vimrun" was used. */
+ if (x != 0 && !(options & SHELL_SILENT) && !emsg_silent
+ #if defined(FEAT_GUI_MSWIN)
+! && (gui.in_use ?
+! ((options & SHELL_DOOUT) || s_dont_use_vimrun || !p_stmp) : 1)
+ #endif
+ )
+ {
+***************
+*** 5278,5284 ****
+ #endif
+
+
+! #ifndef FEAT_GUI_MSWIN
+
+ /*
+ * Start termcap mode
+--- 5400,5406 ----
+ #endif
+
+
+! #if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
+
+ /*
+ * Start termcap mode
+***************
+*** 5397,5403 ****
+ #endif /* FEAT_GUI_MSWIN */
+
+
+! #ifdef FEAT_GUI_MSWIN
+ void
+ mch_write(
+ char_u *s UNUSED,
+--- 5519,5525 ----
+ #endif /* FEAT_GUI_MSWIN */
+
+
+! #if defined(FEAT_GUI_MSWIN) && !defined(VIMDLL)
+ void
+ mch_write(
+ char_u *s UNUSED,
+***************
+*** 5694,5700 ****
+
+ /*
+ * Set the current text attribute = (foreground | background)
+! * See ../doc/os_win32.txt for the numbers.
+ */
+ static void
+ textattr(WORD wAttr)
+--- 5816,5822 ----
+
+ /*
+ * Set the current text attribute = (foreground | background)
+! * See ../runtime/doc/os_win32.txt for the numbers.
+ */
+ static void
+ textattr(WORD wAttr)
+***************
+*** 5924,5929 ****
+--- 6046,6056 ----
+ char_u *s,
+ int len)
+ {
++ # ifdef VIMDLL
++ if (gui.in_use)
++ return;
++ # endif
++
+ s[len] = NUL;
+
+ if (!term_console)
+***************
+*** 6222,6230 ****
+ long msec,
+ int ignoreinput UNUSED)
+ {
+! #ifdef FEAT_GUI_MSWIN
+ Sleep((int)msec); /* never wait for input */
+ #else /* Console */
+ if (ignoreinput)
+ # ifdef FEAT_MZSCHEME
+ if (mzthreads_allowed() && p_mzq > 0 && msec > p_mzq)
+--- 6349,6364 ----
+ long msec,
+ int ignoreinput UNUSED)
+ {
+! #if defined(FEAT_GUI_MSWIN) && !defined(VIMDLL)
+ Sleep((int)msec); /* never wait for input */
+ #else /* Console */
++ # ifdef VIMDLL
++ if (gui.in_use)
++ {
++ Sleep((int)msec); /* never wait for input */
++ return;
++ }
++ # endif
+ if (ignoreinput)
+ # ifdef FEAT_MZSCHEME
+ if (mzthreads_allowed() && p_mzq > 0 && msec > p_mzq)
+***************
+*** 6286,6298 ****
+ void
+ mch_breakcheck(int force)
+ {
+! #ifndef FEAT_GUI_MSWIN /* never used */
+! if (g_fCtrlCPressed || g_fCBrkPressed)
+! {
+! ctrl_break_was_pressed = g_fCBrkPressed;
+! g_fCtrlCPressed = g_fCBrkPressed = FALSE;
+! got_int = TRUE;
+! }
+ #endif
+ }
+
+--- 6420,6435 ----
+ void
+ mch_breakcheck(int force)
+ {
+! #if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
+! # ifdef VIMDLL
+! if (!gui.in_use)
+! # endif
+! if (g_fCtrlCPressed || g_fCBrkPressed)
+! {
+! ctrl_break_was_pressed = g_fCBrkPressed;
+! g_fCtrlCPressed = g_fCBrkPressed = FALSE;
+! got_int = TRUE;
+! }
+ #endif
+ }
+
+***************
+*** 6308,6314 ****
+ MEMORYSTATUSEX ms;
+
+ /* Need to use GlobalMemoryStatusEx() when there is more memory than
+! * what fits in 32 bits. But it's not always available. */
+ ms.dwLength = sizeof(MEMORYSTATUSEX);
+ GlobalMemoryStatusEx(&ms);
+ if (ms.ullAvailVirtual < ms.ullTotalPhys)
+--- 6445,6451 ----
+ MEMORYSTATUSEX ms;
+
+ /* Need to use GlobalMemoryStatusEx() when there is more memory than
+! * what fits in 32 bits. */
+ ms.dwLength = sizeof(MEMORYSTATUSEX);
+ GlobalMemoryStatusEx(&ms);
+ if (ms.ullAvailVirtual < ms.ullTotalPhys)
+***************
+*** 7098,7114 ****
+ vtp_flag_init(void)
+ {
+ DWORD ver = get_build_number();
+! #ifndef FEAT_GUI_MSWIN
+ DWORD mode;
+ HANDLE out;
+
+! out = GetStdHandle(STD_OUTPUT_HANDLE);
+
+! vtp_working = (ver >= VTP_FIRST_SUPPORT_BUILD) ? 1 : 0;
+! GetConsoleMode(out, &mode);
+! mode |= (ENABLE_PROCESSED_OUTPUT | ENABLE_VIRTUAL_TERMINAL_PROCESSING);
+! if (SetConsoleMode(out, mode) == 0)
+! vtp_working = 0;
+ #endif
+
+ if (ver >= CONPTY_FIRST_SUPPORT_BUILD)
+--- 7235,7256 ----
+ vtp_flag_init(void)
+ {
+ DWORD ver = get_build_number();
+! #if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
+ DWORD mode;
+ HANDLE out;
+
+! # ifdef VIMDLL
+! if (!gui.in_use)
+! # endif
+! {
+! out = GetStdHandle(STD_OUTPUT_HANDLE);
+
+! vtp_working = (ver >= VTP_FIRST_SUPPORT_BUILD) ? 1 : 0;
+! GetConsoleMode(out, &mode);
+! mode |= (ENABLE_PROCESSED_OUTPUT | ENABLE_VIRTUAL_TERMINAL_PROCESSING);
+! if (SetConsoleMode(out, mode) == 0)
+! vtp_working = 0;
+! }
+ #endif
+
+ if (ver >= CONPTY_FIRST_SUPPORT_BUILD)
+***************
+*** 7118,7124 ****
+
+ }
+
+! #if !defined(FEAT_GUI_MSWIN) || defined(PROTO)
+
+ static void
+ vtp_init(void)
+--- 7260,7266 ----
+
+ }
+
+! #if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL) || defined(PROTO)
+
+ static void
+ vtp_init(void)
+***************
+*** 7343,7349 ****
+ return conpty_stable;
+ }
+
+! #if !defined(FEAT_GUI_MSWIN) || defined(PROTO)
+ void
+ resize_console_buf(void)
+ {
+--- 7485,7491 ----
+ return conpty_stable;
+ }
+
+! #if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL) || defined(PROTO)
+ void
+ resize_console_buf(void)
+ {
+*** ../vim-8.1.1229/src/os_win32.h 2019-02-17 17:44:36.219875473 +0100
+--- src/os_win32.h 2019-04-28 18:55:14.824079967 +0200
+***************
+*** 78,84 ****
+
+ #define HAVE_PUTENV /* at least Bcc 5.2 and MSC have it */
+
+! #ifdef FEAT_GUI_MSWIN
+ # define NO_CONSOLE /* don't included console-only code */
+ #endif
+
+--- 78,84 ----
+
+ #define HAVE_PUTENV /* at least Bcc 5.2 and MSC have it */
+
+! #if defined(FEAT_GUI_MSWIN) && !defined(VIMDLL)
+ # define NO_CONSOLE /* don't included console-only code */
+ #endif
+
+*** ../vim-8.1.1229/src/proto/gui.pro 2018-05-17 13:52:58.000000000 +0200
+--- src/proto/gui.pro 2019-04-28 18:55:14.824079967 +0200
+***************
+*** 1,5 ****
+ /* gui.c */
+! void gui_start(void);
+ void gui_prepare(int *argc, char **argv);
+ int gui_init_check(void);
+ void gui_init(void);
+--- 1,5 ----
+ /* gui.c */
+! void gui_start(char_u *arg);
+ void gui_prepare(int *argc, char **argv);
+ int gui_init_check(void);
+ void gui_init(void);
+*** ../vim-8.1.1229/src/proto/gui_w32.pro 2019-04-17 18:24:32.006143206 +0200
+--- src/proto/gui_w32.pro 2019-04-28 18:55:14.824079967 +0200
+***************
+*** 61,66 ****
+--- 61,67 ----
+ char_u *gui_mch_browse(int saving, char_u *title, char_u *dflt, char_u *ext, char_u *initdir, char_u *filter);
+ char_u *gui_mch_browsedir(char_u *title, char_u *initdir);
+ void gui_mch_set_parent(char *title);
++ char *gui_mch_do_spawn(char_u *arg);
+ void gui_mch_prepare(int *argc, char **argv);
+ int gui_mch_init(void);
+ void gui_mch_set_shellsize(int width, int height, int min_width, int min_height, int base_width, int base_height, int direction);
+*** ../vim-8.1.1229/src/proto/misc2.pro 2019-02-13 22:45:21.512636158 +0100
+--- src/proto/misc2.pro 2019-04-28 18:55:14.824079967 +0200
+***************
+*** 108,111 ****
+--- 108,112 ----
+ int mch_parse_cmd(char_u *cmd, int use_shcf, char ***argv, int *argc);
+ int build_argv_from_string(char_u *cmd, char ***argv, int *argc);
+ int build_argv_from_list(list_T *l, char ***argv, int *argc);
++ int write_session_file(char_u *filename);
+ /* vim: set ft=c : */
+*** ../vim-8.1.1229/src/proto/os_mswin.pro 2019-03-30 16:24:12.240380238 +0100
+--- src/proto/os_mswin.pro 2019-04-28 18:55:14.824079967 +0200
+***************
+*** 1,5 ****
+ /* os_mswin.c */
+! void mch_exit(int r);
+ void mch_early_init(void);
+ int mch_input_isatty(void);
+ void mch_settitle(char_u *title, char_u *icon);
+--- 1,5 ----
+ /* os_mswin.c */
+! void mch_exit_g(int r);
+ void mch_early_init(void);
+ int mch_input_isatty(void);
+ void mch_settitle(char_u *title, char_u *icon);
+*** ../vim-8.1.1229/src/proto/os_win32.pro 2019-02-17 15:00:48.450637077 +0100
+--- src/proto/os_win32.pro 2019-04-28 18:55:14.824079967 +0200
+***************
+*** 1,5 ****
+--- 1,6 ----
+ /* os_win32.c */
+ HINSTANCE vimLoadLib(char *name);
++ int mch_is_gui_executable(void);
+ HINSTANCE find_imported_module_by_funcname(HINSTANCE hInst, const char *funcname);
+ void *get_dll_import_func(HINSTANCE hInst, const char *funcname);
+ int dyn_libintl_init(void);
+*** ../vim-8.1.1229/src/syntax.c 2019-04-26 22:33:44.896723710 +0200
+--- src/syntax.c 2019-04-28 18:55:14.824079967 +0200
+***************
+*** 8280,8285 ****
+--- 8280,8292 ----
+ * background/foreground colors. */
+ mch_set_normal_colors();
+ #else
++ # ifdef VIMDLL
++ if (!gui.in_use)
++ {
++ mch_set_normal_colors();
++ return;
++ }
++ # endif
+ cterm_normal_fg_color = 0;
+ cterm_normal_fg_bold = 0;
+ cterm_normal_bg_color = 0;
+***************
+*** 9823,9829 ****
+ #endif
+
+ #if (defined(MSWIN) \
+! && !defined(FEAT_GUI_MSWIN) \
+ && defined(FEAT_TERMGUICOLORS)) || defined(PROTO)
+ void
+ syn_id2cterm_bg(int hl_id, int *fgp, int *bgp)
+--- 9830,9836 ----
+ #endif
+
+ #if (defined(MSWIN) \
+! && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL)) \
+ && defined(FEAT_TERMGUICOLORS)) || defined(PROTO)
+ void
+ syn_id2cterm_bg(int hl_id, int *fgp, int *bgp)
+*** ../vim-8.1.1229/src/term.c 2019-04-21 17:22:29.749014298 +0200
+--- src/term.c 2019-04-28 18:55:14.824079967 +0200
+***************
+*** 4094,4100 ****
+ #if defined(MSWIN) && !defined(FEAT_GUI)
+ s = vim_strnsave(string, (int)STRLEN(string) + 1);
+ #else
+! s = vim_strsave(string);
+ #endif
+ if (s == NULL)
+ return;
+--- 4094,4105 ----
+ #if defined(MSWIN) && !defined(FEAT_GUI)
+ s = vim_strnsave(string, (int)STRLEN(string) + 1);
+ #else
+! # ifdef VIMDLL
+! if (!gui.in_use)
+! s = vim_strnsave(string, (int)STRLEN(string) + 1);
+! else
+! # endif
+! s = vim_strsave(string);
+ #endif
+ if (s == NULL)
+ return;
+***************
+*** 4106,4116 ****
+ s[0] = term_7to8bit(string);
+ }
+
+! #if defined(MSWIN) && !defined(FEAT_GUI)
+! if (s[0] == K_NUL)
+ {
+! STRMOVE(s + 1, s);
+! s[1] = 3;
+ }
+ #endif
+
+--- 4111,4126 ----
+ s[0] = term_7to8bit(string);
+ }
+
+! #if defined(MSWIN) && (!defined(FEAT_GUI) || defined(VIMDLL))
+! # ifdef VIMDLL
+! if (!gui.in_use)
+! # endif
+ {
+! if (s[0] == K_NUL)
+! {
+! STRMOVE(s + 1, s);
+! s[1] = 3;
+! }
+ }
+ #endif
+
+***************
+*** 6712,6718 ****
+ }
+ #endif
+
+! #if (defined(MSWIN) && !defined(FEAT_GUI)) || defined(PROTO)
+ static char ksme_str[20];
+ static char ksmr_str[20];
+ static char ksmd_str[20];
+--- 6722,6728 ----
+ }
+ #endif
+
+! #if (defined(MSWIN) && (!defined(FEAT_GUI) || defined(VIMDLL))) || defined(PROTO)
+ static char ksme_str[20];
+ static char ksmr_str[20];
+ static char ksmd_str[20];
+***************
+*** 6902,6907 ****
+--- 6912,6930 ----
+ return 0x1ffffff;
+ }
+
++ # ifdef VIMDLL
++ static guicolor_T
++ gui_adjust_rgb(guicolor_T c)
++ {
++ if (gui.in_use)
++ return c;
++ else
++ return ((c & 0xff) << 16) | (c & 0x00ff00) | ((c >> 16) & 0xff);
++ }
++ # else
++ # define gui_adjust_rgb(c) (c)
++ # endif
++
+ guicolor_T
+ gui_get_color_cmn(char_u *name)
+ {
+***************
+*** 6973,6985 ****
+ ((hex_digit(name[5]) << 4) + hex_digit(name[6])));
+ if (color > 0xffffff)
+ return INVALCOLOR;
+! return color;
+ }
+
+ /* Check if the name is one of the colors we know */
+ for (i = 0; i < (int)(sizeof(rgb_table) / sizeof(rgb_table[0])); i++)
+ if (STRICMP(name, rgb_table[i].color_name) == 0)
+! return rgb_table[i].color;
+
+ /*
+ * Last attempt. Look in the file "$VIMRUNTIME/rgb.txt".
+--- 6996,7008 ----
+ ((hex_digit(name[5]) << 4) + hex_digit(name[6])));
+ if (color > 0xffffff)
+ return INVALCOLOR;
+! return gui_adjust_rgb(color);
+ }
+
+ /* Check if the name is one of the colors we know */
+ for (i = 0; i < (int)(sizeof(rgb_table) / sizeof(rgb_table[0])); i++)
+ if (STRICMP(name, rgb_table[i].color_name) == 0)
+! return gui_adjust_rgb(rgb_table[i].color);
+
+ /*
+ * Last attempt. Look in the file "$VIMRUNTIME/rgb.txt".
+***************
+*** 7060,7066 ****
+
+ for (i = 0; i < size; i++)
+ if (STRICMP(name, colornames_table[i].color_name) == 0)
+! return colornames_table[i].color;
+
+ return INVALCOLOR;
+ }
+--- 7083,7089 ----
+
+ for (i = 0; i < size; i++)
+ if (STRICMP(name, colornames_table[i].color_name) == 0)
+! return gui_adjust_rgb(colornames_table[i].color);
+
+ return INVALCOLOR;
+ }
+***************
+*** 7072,7082 ****
+
+ if (color > 0xffffff)
+ return INVALCOLOR;
+! return color;
+ }
+ #endif
+
+! #if (defined(MSWIN) && !defined(FEAT_GUI_MSWIN)) || defined(FEAT_TERMINAL) \
+ || defined(PROTO)
+ static int cube_value[] = {
+ 0x00, 0x5F, 0x87, 0xAF, 0xD7, 0xFF
+--- 7095,7105 ----
+
+ if (color > 0xffffff)
+ return INVALCOLOR;
+! return gui_adjust_rgb(color);
+ }
+ #endif
+
+! #if (defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))) || defined(FEAT_TERMINAL) \
+ || defined(PROTO)
+ static int cube_value[] = {
+ 0x00, 0x5F, 0x87, 0xAF, 0xD7, 0xFF
+*** ../vim-8.1.1229/src/terminal.c 2019-04-21 00:00:07.946354820 +0200
+--- src/terminal.c 2019-04-28 18:55:14.824079967 +0200
+***************
+*** 3553,3559 ****
+ }
+ else
+ {
+! #if defined(MSWIN) && !defined(FEAT_GUI_MSWIN)
+ int tmp;
+ #endif
+
+--- 3553,3559 ----
+ }
+ else
+ {
+! #if defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))
+ int tmp;
+ #endif
+
+***************
+*** 3561,3570 ****
+ if (cterm_normal_fg_color > 0)
+ {
+ cterm_color2vterm(cterm_normal_fg_color - 1, fg);
+! # if defined(MSWIN) && !defined(FEAT_GUI_MSWIN)
+! tmp = fg->red;
+! fg->red = fg->blue;
+! fg->blue = tmp;
+ # endif
+ }
+ # ifdef FEAT_TERMRESPONSE
+--- 3561,3575 ----
+ if (cterm_normal_fg_color > 0)
+ {
+ cterm_color2vterm(cterm_normal_fg_color - 1, fg);
+! # if defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))
+! # ifdef VIMDLL
+! if (!gui.in_use)
+! # endif
+! {
+! tmp = fg->red;
+! fg->red = fg->blue;
+! fg->blue = tmp;
+! }
+ # endif
+ }
+ # ifdef FEAT_TERMRESPONSE
+***************
+*** 3575,3584 ****
+ if (cterm_normal_bg_color > 0)
+ {
+ cterm_color2vterm(cterm_normal_bg_color - 1, bg);
+! # if defined(MSWIN) && !defined(FEAT_GUI_MSWIN)
+! tmp = bg->red;
+! bg->red = bg->blue;
+! bg->blue = tmp;
+ # endif
+ }
+ # ifdef FEAT_TERMRESPONSE
+--- 3580,3594 ----
+ if (cterm_normal_bg_color > 0)
+ {
+ cterm_color2vterm(cterm_normal_bg_color - 1, bg);
+! # if defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))
+! # ifdef VIMDLL
+! if (!gui.in_use)
+! # endif
+! {
+! tmp = fg->red;
+! fg->red = fg->blue;
+! fg->blue = tmp;
+! }
+ # endif
+ }
+ # ifdef FEAT_TERMRESPONSE
+***************
+*** 3887,3893 ****
+ #endif
+ {
+ // We roughly estimate the position of the terminal window inside
+! // the Vim window by assuing a 10 x 7 character cell.
+ x += wp->w_wincol * 7;
+ y += W_WINROW(wp) * 10;
+ }
+--- 3897,3903 ----
+ #endif
+ {
+ // We roughly estimate the position of the terminal window inside
+! // the Vim window by assuming a 10 x 7 character cell.
+ x += wp->w_wincol * 7;
+ y += W_WINROW(wp) * 10;
+ }
+*** ../vim-8.1.1229/src/ui.c 2019-04-06 22:01:20.756989404 +0200
+--- src/ui.c 2019-04-28 18:55:14.824079967 +0200
+***************
+*** 643,649 ****
+ if (gui.in_use)
+ return gui_mch_get_winpos(x, y);
+ # endif
+! # if defined(MSWIN) && !defined(FEAT_GUI)
+ return mch_get_winpos(x, y);
+ # else
+ # if defined(HAVE_TGETENT) && defined(FEAT_TERMRESPONSE)
+--- 643,649 ----
+ if (gui.in_use)
+ return gui_mch_get_winpos(x, y);
+ # endif
+! # if defined(MSWIN) && (!defined(FEAT_GUI) || defined(VIMDLL))
+ return mch_get_winpos(x, y);
+ # else
+ # if defined(HAVE_TGETENT) && defined(FEAT_TERMRESPONSE)
+*** ../vim-8.1.1229/src/version.c 2019-04-28 18:39:59.559845361 +0200
+--- src/version.c 2019-04-28 18:55:14.824079967 +0200
+***************
+*** 3420,3429 ****
+ msg(longVersion);
+ #ifdef MSWIN
+ # ifdef FEAT_GUI_MSWIN
+! # ifdef _WIN64
+! msg_puts(_("\nMS-Windows 64-bit GUI version"));
+ # else
+ msg_puts(_("\nMS-Windows 32-bit GUI version"));
+ # endif
+ # ifdef FEAT_OLE
+ msg_puts(_(" with OLE support"));
+--- 3422,3439 ----
+ msg(longVersion);
+ #ifdef MSWIN
+ # ifdef FEAT_GUI_MSWIN
+! # ifdef VIMDLL
+! # ifdef _WIN64
+! msg_puts(_("\nMS-Windows 64-bit GUI/console version"));
+! # else
+! msg_puts(_("\nMS-Windows 32-bit GUI/console version"));
+! # endif
+ # else
++ # ifdef _WIN64
++ msg_puts(_("\nMS-Windows 64-bit GUI version"));
++ # else
+ msg_puts(_("\nMS-Windows 32-bit GUI version"));
++ # endif
+ # endif
+ # ifdef FEAT_OLE
+ msg_puts(_(" with OLE support"));
+*** ../vim-8.1.1229/src/vim.rc 2019-02-18 21:41:34.477750367 +0100
+--- src/vim.rc 2019-04-28 18:55:14.828079949 +0200
+***************
+*** 23,29 ****
+ //
+ IDR_VIM ICON "vim.ico"
+
+! #ifdef FEAT_GUI_MSWIN
+ IDR_VIM_ERROR ICON "vim_error.ico"
+ IDR_VIM_ALERT ICON "vim_alert.ico"
+ IDR_VIM_INFO ICON "vim_info.ico"
+--- 23,29 ----
+ //
+ IDR_VIM ICON "vim.ico"
+
+! #if (defined(FEAT_GUI_MSWIN) && !defined(VIMDLL)) || defined(RCDLL)
+ IDR_VIM_ERROR ICON "vim_error.ico"
+ IDR_VIM_ALERT ICON "vim_alert.ico"
+ IDR_VIM_INFO ICON "vim_info.ico"
+***************
+*** 34,40 ****
+--- 34,42 ----
+ //
+ IDB_TEAROFF BITMAP DISCARDABLE "tearoff.bmp"
+ IDR_TOOLBAR1 BITMAP DISCARDABLE "tools.bmp"
++ #endif // FEAT_GUI_MSWIN
+
++ #ifndef RCDLL
+ //
+ // WinXP theme support
+ //
+***************
+*** 46,52 ****
+ #endif
+
+ CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "gvim.exe.mnf"
+! #endif // FEAT_GUI_MSWIN
+
+ //
+ // Type Library
+--- 48,54 ----
+ #endif
+
+ CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "gvim.exe.mnf"
+! #endif // RCDLL
+
+ //
+ // Type Library
+***************
+*** 79,85 ****
+--- 81,91 ----
+ #endif
+
+ FILEOS VOS__WINDOWS32
++ #ifdef RCDLL
++ FILETYPE VFT_DLL
++ #else
+ FILETYPE VFT_APP
++ #endif
+ FILESUBTYPE 0x0L
+ BEGIN
+ BLOCK "StringFileInfo"
+***************
+*** 93,99 ****
+ VALUE "InternalName", "VIM\0"
+ VALUE "LegalCopyright", "Copyright \251 1996\0"
+ VALUE "LegalTrademarks", "Vim\0"
+! VALUE "OriginalFilename", "VIM.EXE\0"
+ VALUE "ProductName", "Vim\0"
+ VALUE "ProductVersion", VIM_VERSION_MAJOR_STR ", " VIM_VERSION_MINOR_STR ", " VIM_VERSION_BUILD_STR ", " VIM_VERSION_PATCHLEVEL_STR "\0"
+ END
+--- 99,111 ----
+ VALUE "InternalName", "VIM\0"
+ VALUE "LegalCopyright", "Copyright \251 1996\0"
+ VALUE "LegalTrademarks", "Vim\0"
+! #ifdef VIMDLLBASE
+! VALUE "OriginalFilename", VIMDLLBASE ".dll\0"
+! #elif defined(FEAT_GUI_MSWIN)
+! VALUE "OriginalFilename", "gvim.exe\0"
+! #else
+! VALUE "OriginalFilename", "vim.exe\0"
+! #endif
+ VALUE "ProductName", "Vim\0"
+ VALUE "ProductVersion", VIM_VERSION_MAJOR_STR ", " VIM_VERSION_MINOR_STR ", " VIM_VERSION_BUILD_STR ", " VIM_VERSION_PATCHLEVEL_STR "\0"
+ END
+***************
+*** 104,109 ****
+--- 116,122 ----
+ END
+ END
+
++ #if !defined(VIMDLL) || defined(RCDLL)
+ /*
+ * Printing Status Dialog (should only be used when FEAT_PRINTER is defined)
+ */
+***************
+*** 121,123 ****
+--- 134,137 ----
+ CTEXT "Initializing...",IDC_PROGRESS,24,38,157,9
+ GROUPBOX "",IDC_BOX1,19,9,170,47
+ END
++ #endif
+*** ../vim-8.1.1229/src/version.c 2019-04-28 18:39:59.559845361 +0200
+--- src/version.c 2019-04-28 18:55:14.824079967 +0200
+***************
+*** 769,770 ****
+--- 769,772 ----
+ { /* Add new patch number below this line */
++ /**/
++ 1230,
+ /**/
+
+--
+Seen on the back of a biker's vest: If you can read this, my wife fell off.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///