diff options
-rw-r--r-- | nt/ChangeLog | 8 | ||||
-rw-r--r-- | nt/runemacs.c | 44 |
2 files changed, 52 insertions, 0 deletions
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 <eliz@gnu.org> + + * 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 <eliz@gnu.org> * 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 <http://www.gnu.org/licenses/>. */ #include <malloc.h> 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; +} |