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.
This commit is contained in:
Eli Zaretskii 2011-11-04 23:59:16 +02:00
parent a58c13ed78
commit fc5f9b45f6
2 changed files with 52 additions and 0 deletions

View file

@ -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

View file

@ -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;
}