X-Git-Url: https://git.hcoop.net/bpt/emacs.git/blobdiff_plain/77ab81d0545e980c57c0a35510ade29a9e43b4cd..c6c863df8dfde4d25a08f1dd97932c8746809e88:/nt/runemacs.c
diff --git a/nt/runemacs.c b/nt/runemacs.c
index dc8503b7a3..20b6f0cab7 100644
--- a/nt/runemacs.c
+++ b/nt/runemacs.c
@@ -1,5 +1,6 @@
-/* Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
- Free Software Foundation, Inc.
+/* runemacs --- Simple program to start Emacs with its console window hidden.
+
+Copyright (C) 2001-2014 Free Software Foundation, Inc.
This file is part of GNU Emacs.
@@ -44,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)
@@ -58,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))
@@ -70,6 +75,11 @@ WinMain (HINSTANCE hSelf, HINSTANCE hPrev, LPSTR cmdline, int nShow)
/* Quote executable name in case of spaces in the path. */
*new_cmdline = '"';
strcpy (new_cmdline + 1, modname);
+ /* Detect and handle un-installed runemacs.exe in nt/ subdirectory,
+ while emacs.exe is in src/. */
+ if ((p = strrchr (new_cmdline, '\\')) != NULL
+ && stricmp (p, "\\nt") == 0)
+ strcpy (p, "\\src");
#ifdef CHOOSE_NEWEST_EXE
{
@@ -106,7 +116,7 @@ WinMain (HINSTANCE hSelf, HINSTANCE hPrev, LPSTR cmdline, int nShow)
#endif
/* Append original arguments if any; first look for arguments we
- recognise (-wait, -high, and -low), and apply them ourselves. */
+ recognize (-wait, -high, and -low), and apply them ourselves. */
while (cmdline[0] == '-' || cmdline[0] == '/')
{
if (strncmp (cmdline+1, "wait", 4) == 0)
@@ -202,5 +212,43 @@ set_user_model_id (void)
}
}
-/* arch-tag: 7e02df73-4df7-4aa0-baea-99c6d047a384
- (do not change this comment) */
+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;
+}