Mercurial > emacs
changeset 13427:71d734525d2c
(nt_get_resource, init_environment): Defined.
(prepare_standard_handles, restore_standard_handles) [HAVE_NTGUI]:
Don't duplicate or restore standard handles.
author | Geoff Voelker <voelker@cs.washington.edu> |
---|---|
date | Tue, 07 Nov 1995 07:36:09 +0000 |
parents | 8074deaef2f4 |
children | d5df560686b2 |
files | src/w32.c |
diffstat | 1 files changed, 107 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/w32.c Tue Nov 07 07:35:54 1995 +0000 +++ b/src/w32.c Tue Nov 07 07:36:09 1995 +0000 @@ -458,6 +458,7 @@ stdout_save = GetStdHandle (STD_OUTPUT_HANDLE); stderr_save = GetStdHandle (STD_ERROR_HANDLE); +#ifndef HAVE_NTGUI if (!DuplicateHandle (parent, GetStdHandle (STD_INPUT_HANDLE), parent, @@ -484,6 +485,7 @@ FALSE, DUPLICATE_SAME_ACCESS)) report_file_error ("Duplicating parent's error handle", Qnil); +#endif /* !HAVE_NTGUI */ if (!SetStdHandle (STD_INPUT_HANDLE, (HANDLE) _get_osfhandle (in))) report_file_error ("Changing stdin handle", Qnil); @@ -528,6 +530,7 @@ HANDLE err_handle = handles[3]; int i; +#ifndef HAVE_NTGUI if (!SetStdHandle (STD_INPUT_HANDLE, stdin_save)) report_file_error ("Resetting input handle", Qnil); @@ -539,6 +542,7 @@ if (!SetStdHandle (STD_ERROR_HANDLE, stderr_save)) report_file_error ("Resetting error handle", Qnil); +#endif /* !HAVE_NTGUI */ if (out == err) { @@ -662,6 +666,109 @@ return np - startp; } +#define REG_ROOT "SOFTWARE\\GNU\\Emacs\\" + +LPBYTE +nt_get_resource (key, lpdwtype) + char *key; + LPDWORD lpdwtype; +{ + LPBYTE lpvalue; + HKEY hrootkey = NULL; + DWORD cbData; + BOOL ok = FALSE; + + /* Check both the current user and the local machine to see if + we have any resources. */ + + if (RegOpenKeyEx (HKEY_CURRENT_USER, REG_ROOT, 0, KEY_READ, &hrootkey) == ERROR_SUCCESS) + { + lpvalue = NULL; + + if (RegQueryValueEx (hrootkey, key, NULL, NULL, NULL, &cbData) == ERROR_SUCCESS + && (lpvalue = (LPBYTE) xmalloc (cbData)) != NULL + && RegQueryValueEx (hrootkey, key, NULL, lpdwtype, lpvalue, &cbData) == ERROR_SUCCESS) + { + return (lpvalue); + } + + if (lpvalue) xfree (lpvalue); + + RegCloseKey (hrootkey); + } + + if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, REG_ROOT, 0, KEY_READ, &hrootkey) == ERROR_SUCCESS) + { + lpvalue = NULL; + + if (RegQueryValueEx (hrootkey, key, NULL, NULL, NULL, &cbData) == ERROR_SUCCESS && + (lpvalue = (LPBYTE) xmalloc (cbData)) != NULL && + RegQueryValueEx (hrootkey, key, NULL, lpdwtype, lpvalue, &cbData) == ERROR_SUCCESS) + { + return (lpvalue); + } + + if (lpvalue) xfree (lpvalue); + + RegCloseKey (hrootkey); + } + + return (NULL); +} + +void +init_environment () +{ + /* Open a console window to display messages during dumping. */ + if (!initialized) + AllocConsole (); + + /* Check for environment variables and use registry if they don't exist */ + { + int i; + LPBYTE lpval; + DWORD dwType; + + static char * env_vars[] = + { + "emacs_path", + "EMACSLOADPATH", + "SHELL", + "EMACSDATA", + "EMACSPATH", + "EMACSLOCKDIR", + "INFOPATH", + "EMACSDOC", + "TERM", + }; + + for (i = 0; i < (sizeof (env_vars) / sizeof (env_vars[0])); i++) + { + if (!getenv (env_vars[i]) && + (lpval = nt_get_resource (env_vars[i], &dwType)) != NULL) + { + if (dwType == REG_EXPAND_SZ) + { + char buf1[500], buf2[500]; + + ExpandEnvironmentStrings ((LPSTR) lpval, buf1, 500); + _snprintf (buf2, 499, "%s=%s", env_vars[i], buf1); + putenv (strdup (buf2)); + } + else if (dwType == REG_SZ) + { + char buf[500]; + + _snprintf (buf, 499, "%s=%s", env_vars[i], lpval); + putenv (strdup (buf)); + } + + xfree (lpval); + } + } + } +} + #ifdef HAVE_TIMEVAL #include <sys/timeb.h>