patch 8.1.1104: MS-Windows: not all environment variables can be used

Problem:    MS-Windows: not all environment variables can be used.
Solution:   Use the wide version of WinMain() and main(). (Ken Takata,
            closes #4206)
diff --git a/src/Make_cyg.mak b/src/Make_cyg.mak
index 8c1b60e..8bb2b72 100644
--- a/src/Make_cyg.mak
+++ b/src/Make_cyg.mak
@@ -37,13 +37,12 @@
 #RUBY=/cygdribe/c/ruby
 
 
-# Use MinGW(-w64) cross compiler.
-# There are three MinGW packages in Cygwin:
-#   32-bit: mingw-gcc-g++ and mingw64-i686-gcc-g++
+# Use MinGW-w64 cross compiler.
+# There are two MinGW-w64 packages in Cygwin:
+#   32-bit: mingw64-i686-gcc-g++
 #   64-bit: mingw64-x86_64-gcc-g++
 # You may also need to set 'ARCH' in Make_cyg_ming.mak.
-CROSS_COMPILE = i686-pc-mingw32-
-#CROSS_COMPILE = i686-w64-mingw32-
+CROSS_COMPILE = i686-w64-mingw32-
 #CROSS_COMPILE = x86_64-w64-mingw32-
 
 
diff --git a/src/Make_cyg_ming.mak b/src/Make_cyg_ming.mak
index e439de3..bfc5545 100644
--- a/src/Make_cyg_ming.mak
+++ b/src/Make_cyg_ming.mak
@@ -691,7 +691,7 @@
 endif
 
 LIB = -lkernel32 -luser32 -lgdi32 -ladvapi32 -lcomdlg32 -lcomctl32 -lnetapi32 -lversion
-GUIOBJ =  $(OUTDIR)/gui.o $(OUTDIR)/gui_w32.o $(OUTDIR)/gui_beval.o $(OUTDIR)/os_w32exe.o
+GUIOBJ =  $(OUTDIR)/gui.o $(OUTDIR)/gui_w32.o $(OUTDIR)/gui_beval.o
 CUIOBJ = $(OUTDIR)/iscygpty.o
 OBJ = \
 	$(OUTDIR)/arabic.o \
@@ -737,9 +737,9 @@
 	$(OUTDIR)/normal.o \
 	$(OUTDIR)/ops.o \
 	$(OUTDIR)/option.o \
-	$(OUTDIR)/os_win32.o \
 	$(OUTDIR)/os_mswin.o \
-	$(OUTDIR)/winclip.o \
+	$(OUTDIR)/os_w32exe.o \
+	$(OUTDIR)/os_win32.o \
 	$(OUTDIR)/pathdef.o \
 	$(OUTDIR)/popupmnu.o \
 	$(OUTDIR)/quickfix.o \
@@ -759,6 +759,7 @@
 	$(OUTDIR)/userfunc.o \
 	$(OUTDIR)/version.o \
 	$(OUTDIR)/vimrc.o \
+	$(OUTDIR)/winclip.o \
 	$(OUTDIR)/window.o
 
 ifdef PERL
@@ -865,6 +866,8 @@
 MZSCHEME_SUFFIX = Z
 endif
 
+LFLAGS += -municode
+
 ifeq ($(GUI),yes)
 TARGET := gvim$(DEBUG_SUFFIX).exe
 DEFINES += $(DEF_GUI)
diff --git a/src/Make_mvc.mak b/src/Make_mvc.mak
index d71a3d3..c502dec 100644
--- a/src/Make_mvc.mak
+++ b/src/Make_mvc.mak
@@ -742,7 +742,7 @@
 	$(OUTDIR)\ops.obj \
 	$(OUTDIR)\option.obj \
 	$(OUTDIR)\os_mswin.obj \
-	$(OUTDIR)\winclip.obj \
+	$(OUTDIR)\os_w32exe.obj \
 	$(OUTDIR)\os_win32.obj \
 	$(OUTDIR)\pathdef.obj \
 	$(OUTDIR)\popupmnu.obj \
@@ -761,6 +761,7 @@
 	$(OUTDIR)\ui.obj \
 	$(OUTDIR)\undo.obj \
 	$(OUTDIR)\userfunc.obj \
+	$(OUTDIR)\winclip.obj \
 	$(OUTDIR)\window.obj \
 	$(OUTDIR)\vim.res
 
@@ -799,8 +800,7 @@
 GUI_OBJ = \
 	$(OUTDIR)\gui.obj \
 	$(OUTDIR)\gui_beval.obj \
-	$(OUTDIR)\gui_w32.obj \
-	$(OUTDIR)\os_w32exe.obj
+	$(OUTDIR)\gui_w32.obj
 GUI_LIB = \
 	gdi32.lib version.lib $(IME_LIB) \
 	winspool.lib comctl32.lib advapi32.lib shell32.lib netapi32.lib \
diff --git a/src/main.c b/src/main.c
index 3041df9..a07ce1b 100644
--- a/src/main.c
+++ b/src/main.c
@@ -96,7 +96,7 @@
 static int has_dash_c_arg = FALSE;
 
     int
-# ifdef FEAT_GUI_MSWIN
+# ifdef MSWIN
 #  ifdef __BORLANDC__
 _cdecl
 #  endif
diff --git a/src/os_w32exe.c b/src/os_w32exe.c
index 6c45ec2..769a851 100644
--- a/src/os_w32exe.c
+++ b/src/os_w32exe.c
@@ -28,20 +28,22 @@
 #endif
 
 #ifndef PROTO
+# ifdef FEAT_GUI
     int WINAPI
-WinMain(
+wWinMain(
     HINSTANCE	hInstance,
     HINSTANCE	hPrevInst UNUSED,
-    LPSTR	lpszCmdLine UNUSED,
+    LPWSTR	lpszCmdLine UNUSED,
     int		nCmdShow UNUSED)
+# else
+    int
+wmain(int argc UNUSED, wchar_t **argv UNUSED)
+# endif
 {
-    int		argc = 0;
-    char	**argv = NULL;
-
 # ifdef FEAT_GUI
     SaveInst(hInstance);
 # endif
-    VimMain(argc, argv);
+    VimMain(0, NULL);
 
     return 0;
 }
diff --git a/src/version.c b/src/version.c
index 7228d13..3f8d347 100644
--- a/src/version.c
+++ b/src/version.c
@@ -772,6 +772,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1104,
+/**/
     1103,
 /**/
     1102,