X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/65cd66876a0d2a0a76718ce17909797e7d662771..4ec5239cc90673a066fa12caffb1ac9461f2dd2f:/nt/addpm.c diff --git a/nt/addpm.c b/nt/addpm.c index 56718f9a76..0827d2453c 100644 --- a/nt/addpm.c +++ b/nt/addpm.c @@ -1,5 +1,5 @@ /* Add entries to the GNU Emacs Program Manager folder. - Copyright (C) 1995 Free Software Foundation, Inc. + Copyright (C) 1995, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -15,8 +15,8 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Emacs; see the file COPYING. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ +the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +Boston, MA 02110-1301, USA. */ /**************************************************************************** * @@ -32,7 +32,7 @@ Boston, MA 02111-1307, USA. */ #include #include -HDDEDATA CALLBACK +HDDEDATA CALLBACK DdeCallback (UINT uType, UINT uFmt, HCONV hconv, HSZ hsz1, HSZ hsz2, HDDEDATA hdata, DWORD dwData1, DWORD dwData2) @@ -50,21 +50,22 @@ static struct entry { char *name; char *value; -} -env_vars[] = +} +env_vars[] = { {"emacs_dir", NULL}, - {"EMACSLOADPATH", "%emacs_dir%/lisp;%emacs_dir%/site-lisp"}, - {"SHELL", "%emacs_dir/bin/cmdproxy.exe%"}, + {"EMACSLOADPATH", "%emacs_dir%/site-lisp;%emacs_dir%/../site-lisp;%emacs_dir%/lisp;%emacs_dir%/leim"}, + {"SHELL", "%emacs_dir%/bin/cmdproxy.exe"}, {"EMACSDATA", "%emacs_dir%/etc"}, {"EMACSPATH", "%emacs_dir%/bin"}, - {"EMACSLOCKDIR", "%emacs_dir%/lock"}, - {"INFOPATH", "%emacs_dir%/info"}, + /* We no longer set INFOPATH because Info-default-directory-list + is then ignored. */ + /* {"INFOPATH", "%emacs_dir%/info"}, */ {"EMACSDOC", "%emacs_dir%/etc"}, {"TERM", "cmd"} }; -BOOL +BOOL add_registry (path) char *path; { @@ -72,58 +73,66 @@ add_registry (path) DWORD dwDisp; int i; BOOL ok = TRUE; - - /* Check both the current user and the local machine to see if we + + /* Check both the current user and the local machine to see if we have any resources. */ - + if (RegCreateKeyEx (HKEY_LOCAL_MACHINE, REG_ROOT, 0, "", REG_OPTION_NON_VOLATILE, - KEY_WRITE, NULL, &hrootkey, &dwDisp) != ERROR_SUCCESS + KEY_WRITE, NULL, &hrootkey, &dwDisp) != ERROR_SUCCESS && RegCreateKeyEx (HKEY_CURRENT_USER, REG_ROOT, 0, "", REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hrootkey, &dwDisp) != ERROR_SUCCESS) { return FALSE; } - - for (i = 0; i < (sizeof (env_vars) / sizeof (env_vars[0])); i++) + + for (i = 0; i < (sizeof (env_vars) / sizeof (env_vars[0])); i++) { char * value = env_vars[i].value ? env_vars[i].value : path; - + if (RegSetValueEx (hrootkey, env_vars[i].name, 0, REG_EXPAND_SZ, value, lstrlen (value) + 1) != ERROR_SUCCESS) ok = FALSE; - } - + } + RegCloseKey (hrootkey); - + return (ok); } int main (argc, argv) int argc; - char *argv[]; + char *argv[]; { DWORD idDde = 0; HCONV HConversation; HSZ ProgMan; char modname[MAX_PATH]; char additem[MAX_PATH*2 + 100]; - char *lpext; + char *prog_name; char *emacs_path; char *p; + int quiet = 0; /* If no args specified, use our location to set emacs_path. */ #if 0 if (argc < 2 || argc > 3) { - fprintf (stderr, "usage: addpm emacs_path [icon_path]\n"); + fprintf (stderr, "usage: addpm [/q] [emacs_path [icon_path]]\n"); exit (1); } #endif + if (argc > 1 && argv[1][0] == '/' && argv[1][1] == 'q') + { + quiet = 1; + --argc; + ++argv; + } + if (argc > 1) emacs_path = argv[1]; else @@ -149,30 +158,40 @@ main (argc, argv) } /* Tell user what we are going to do. */ - { - char msg[ MAX_PATH ]; - sprintf (msg, "Install Emacs at %s?\n", emacs_path); - if (!MessageBox (NULL, msg, "Install Emacs", MB_OKCANCEL | MB_ICONQUESTION)) - { - fprintf (stderr, "Install cancelled\n"); - exit (1); - } - } + if (!quiet) + { + int result; + + char msg[ MAX_PATH ]; + sprintf (msg, "Install Emacs at %s?\n", emacs_path); + result = MessageBox (NULL, msg, "Install Emacs", + MB_OKCANCEL | MB_ICONQUESTION); + if (result != IDOK) + { + fprintf (stderr, "Install cancelled\n"); + exit (1); + } + } } - lpext = add_registry (emacs_path) ? "exe" : "bat"; + add_registry (emacs_path); + prog_name = "runemacs.exe"; DdeInitialize (&idDde, (PFNCALLBACK)DdeCallback, APPCMD_CLIENTONLY, 0); ProgMan = DdeCreateStringHandle (idDde, "PROGMAN", CP_WINANSI); - if (HConversation = DdeConnect (idDde, ProgMan, ProgMan, NULL)) + HConversation = DdeConnect (idDde, ProgMan, ProgMan, NULL); + if (HConversation != 0) { - DdeCommand ("[CreateGroup (Gnu Emacs)]"); + DdeCommand ("[CreateGroup (\"Gnu Emacs\")]"); DdeCommand ("[ReplaceItem (Emacs)]"); - sprintf (additem, "[AddItem (%s\\bin\\runemacs.%s, Emacs%c%s)]", - emacs_path, lpext, (argc>2 ? ',' : ' '), - (argc>2 ? argv[2] : "")); + if (argc > 2) + sprintf (additem, "[AddItem (\"%s\\bin\\%s\", Emacs, \"%s\")]", + emacs_path, prog_name, argv[2]); + else + sprintf (additem, "[AddItem (\"%s\\bin\\%s\", Emacs)]", + emacs_path, prog_name); DdeCommand (additem); DdeDisconnect (HConversation); @@ -184,3 +203,6 @@ main (argc, argv) return (0); } + +/* arch-tag: f923609d-b781-4ef4-abce-ca0da29cbbf0 + (do not change this comment) */