From fc5f9b45f6f90e798a454c7b768e8d02c9cb61c2 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Fri, 4 Nov 2011 23:59:16 +0200 Subject: [PATCH] Last part of fix for bug #8562 with Emacs on Windows 9X. nt/runemacs.c (ensure_unicows_dll): New function, tries to load UNICOWS.DLL on Windows 9X. (WinMain): If ensure_unicows_dll fails to find UNICOWS.DLL, display a dialog to the effect that Emacs cannot be started. --- nt/ChangeLog | 8 ++++++++ nt/runemacs.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/nt/ChangeLog b/nt/ChangeLog index 64b9577e362..55535c460fe 100644 --- a/nt/ChangeLog +++ b/nt/ChangeLog @@ -1,3 +1,11 @@ +2011-11-04 Eli Zaretskii + + * runemacs.c (ensure_unicows_dll): New function, tries to load + UNICOWS.DLL on Windows 9X. + (WinMain): If ensure_unicows_dll fails to find UNICOWS.DLL, + display a dialog to the effect that Emacs cannot be started. + (Bug#8562) + 2011-10-28 Eli Zaretskii * README.W32: Mention UNICOWS.DLL as prerequisite for running diff --git a/nt/runemacs.c b/nt/runemacs.c index 07e24f745f8..47b8f54bb02 100644 --- a/nt/runemacs.c +++ b/nt/runemacs.c @@ -45,6 +45,7 @@ along with GNU Emacs. If not, see . */ #include static void set_user_model_id (void); +static int ensure_unicows_dll (void); int WINAPI WinMain (HINSTANCE hSelf, HINSTANCE hPrev, LPSTR cmdline, int nShow) @@ -59,6 +60,9 @@ WinMain (HINSTANCE hSelf, HINSTANCE hPrev, LPSTR cmdline, int nShow) char *p; char modname[MAX_PATH]; + if (!ensure_unicows_dll ()) + goto error; + set_user_model_id (); if (!GetModuleFileName (NULL, modname, MAX_PATH)) @@ -203,3 +207,43 @@ set_user_model_id (void) } } +static int +ensure_unicows_dll (void) +{ + OSVERSIONINFO os_ver; + HMODULE h; + + ZeroMemory (&os_ver, sizeof (OSVERSIONINFO)); + os_ver.dwOSVersionInfoSize = sizeof (OSVERSIONINFO); + if (!GetVersionEx (&os_ver)) + return 0; + + if (os_ver.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) + { + h = LoadLibrary ("Unicows.dll"); + if (!h) + { + int button; + + button = MessageBox (NULL, + "Emacs cannot load the UNICOWS.DLL library.\n" + "This library is essential for using Emacs\n" + "on this system. You need to install it.\n\n" + "However, you can still use Emacs by invoking\n" + "it with the '-nw' command-line option.\n\n" + "Emacs will exit when you click OK.", + "Emacs cannot load UNICOWS.DLL", + MB_ICONERROR | MB_TASKMODAL + | MB_SETFOREGROUND | MB_OK); + switch (button) + { + case IDOK: + default: + return 0; + } + } + FreeLibrary (h); + return 1; + } + return 1; +} -- 2.39.5