Add 2012 to FSF copyright years for Emacs files
[bpt/emacs.git] / nt / addpm.c
index 20b289f..361726b 100644 (file)
@@ -1,6 +1,5 @@
 /* Add entries to the GNU Emacs Program Manager folder.
-   Copyright (C) 1995, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
-     2008, 2009, 2010  Free Software Foundation, Inc.
+   Copyright (C) 1995, 2001-2012  Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -62,11 +61,13 @@ DdeCallback (UINT uType, UINT uFmt, HCONV hconv,
 #define REG_GTK "SOFTWARE\\GTK\\2.0"
 #define REG_APP_PATH \
   "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\emacs.exe"
+#define REG_RUNEMACS_PATH \
+  "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\runemacs.exe"
 
 static struct entry
 {
-  char *name;
-  char *value;
+  const char *name;
+  const char *value;
 }
 env_vars[] =
 {
@@ -83,7 +84,7 @@ env_vars[] =
 };
 
 BOOL
-add_registry (char *path)
+add_registry (const char *path)
 {
   HKEY hrootkey = NULL;
   int i;
@@ -111,7 +112,7 @@ add_registry (char *path)
       emacs_path = (char *) alloca (len);
       sprintf (emacs_path, "%s\\bin\\emacs.exe", path);
 
-      RegSetValueEx (hrootkey, NULL, 0, REG_SZ, emacs_path, len);
+      RegSetValueEx (hrootkey, NULL, 0, REG_EXPAND_SZ, emacs_path, len);
 
       /* Look for a GTK installation. If found, add it to the library search
          path for Emacs so that the image libraries it provides are available
@@ -129,10 +130,26 @@ add_registry (char *path)
                   /* Make sure the emacs bin directory continues to be searched
                      first by including it as well.  */
                   char *dll_paths;
+                 HKEY runemacs_key = NULL;
                   len = strlen (path) + 5 + size;
                   dll_paths = (char *) alloca (size + strlen (path) + 1);
                   sprintf (dll_paths, "%s\\bin;%s", path, gtk_path);
-                  RegSetValueEx (hrootkey, "Path", 0, REG_SZ, dll_paths, len);
+                  RegSetValueEx (hrootkey, "Path", 0, REG_EXPAND_SZ,
+                                dll_paths, len);
+
+                 /* Set the same path for runemacs.exe, as the Explorer shell
+                    looks this up, so the above does not take effect when
+                    emacs.exe is spawned from runemacs.exe.  */
+                 if (RegCreateKeyEx (HKEY_LOCAL_MACHINE, REG_RUNEMACS_PATH,
+                                     0, "", REG_OPTION_NON_VOLATILE,
+                                     KEY_WRITE, NULL, &runemacs_key, NULL)
+                     == ERROR_SUCCESS)
+                   {
+                     RegSetValueEx (runemacs_key, "Path", 0, REG_EXPAND_SZ,
+                                    dll_paths, len);
+
+                     RegCloseKey (runemacs_key);
+                   }
                 }
             }
           RegCloseKey (gtk_key);
@@ -160,7 +177,7 @@ add_registry (char *path)
 
   for (i = 0; i < (sizeof (env_vars) / sizeof (env_vars[0])); i++)
     {
-      char * value = env_vars[i].value ? env_vars[i].value : path;
+      const char * value = env_vars[i].value ? env_vars[i].value : path;
 
       if (RegSetValueEx (hrootkey, env_vars[i].name,
                         0, REG_EXPAND_SZ,
@@ -180,8 +197,8 @@ main (int argc, char *argv[])
   int shortcuts_created = 0;
   int com_available = 1;
   char modname[MAX_PATH];
-  char *prog_name;
-  char *emacs_path;
+  const char *prog_name;
+  const char *emacs_path;
   char *p;
   int quiet = 0;
   HRESULT result;
@@ -233,7 +250,7 @@ main (int argc, char *argv[])
                               MB_OKCANCEL | MB_ICONQUESTION);
          if (result != IDOK)
            {
-             fprintf (stderr, "Install cancelled\n");
+             fprintf (stderr, "Install canceled\n");
              exit (1);
            }
        }
@@ -257,8 +274,6 @@ main (int argc, char *argv[])
     {
       if (strlen (start_folder) < (MAX_PATH - 20))
        {
-         BOOL retval;
-
          strcat (start_folder, "\\Gnu Emacs");
          if (CreateDirectory (start_folder, NULL)
              || GetLastError () == ERROR_ALREADY_EXISTS)
@@ -290,8 +305,6 @@ main (int argc, char *argv[])
       /* Ensure there is enough room for "...\GNU Emacs\Emacs.lnk".  */
       if (strlen (start_folder) < (MAX_PATH - 20))
        {
-         BOOL retval;
-
          strcat (start_folder, "\\Gnu Emacs");
          if (CreateDirectory (start_folder, NULL)
              || GetLastError () == ERROR_ALREADY_EXISTS)
@@ -352,6 +365,3 @@ main (int argc, char *argv[])
 
   return 0;
 }
-
-/* arch-tag: f923609d-b781-4ef4-abce-ca0da29cbbf0
-   (do not change this comment) */