annotate nt/runemacs.c @ 43968:7ec801358b7e

(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily) (QClocal, QCremote, QCserver, QCdatagram, QCnowait, QCnoquery,QCstop) (QCcoding, QCoptions, QCfilter, QCsentinel, QClog, QCfeature): New variables. (NETCONN1_P): New macro. (DATAGRAM_SOCKETS): New conditional symbol. (datagram_address): New array. (DATAGRAM_CONN_P, DATAGRAM_CHAN_P): New macros. (status_message): Use concat3. (Fprocess_status): Add `listen' status to doc string. Return `stop' for a stopped network process. (Fset_process_buffer): Update contact plist for network process. (Fset_process_filter): Ditto. Don't enable input for stopped network processes. Server must listen, even if filter is t. (Fset_process_query_on_exit_flag, Fprocess_query_on_exit_flag): New functions. (Fprocess_kill_without_query): Removed. Now defined in simple.el. (Fprocess_contact): Added KEY argument. Handle datagrams. (list_processes_1): Optionally show only processes with the query on exit flag set. Dynamically adjust column widths. Omit tty column if not needed. Report stopped network processes. Identify server and datagram network processes. (Flist_processes): New optional arg `query-only'. (conv_sockaddr_to_lisp, get_lisp_to_sockaddr_size) (conv_lisp_to_sockaddr, set_socket_options) (network_process_featurep, unwind_request_sigio): New helper functions. (Fprocess_datagram_address, Fset_process_datagram_address): (Fset_network_process_options): New lisp functions. (Fopen_network_stream): Removed. Now defined in simple.el. (Fmake_network_process): New lisp function. Code is based on previous Fopen_network_stream, but heavily reworked with new property list based argument list, support for datagrams, server processes, and local sockets in addition to old client-only functionality. (server_accept_connection): New function. (wait_reading_process_input): Use it to handle incoming connects. Do not enable input on a new connection if process is stopped. (read_process_output): Handle datagram sockets. Use 2k buffer for them. (send_process): Handle datagram sockets. (Fstop_process, Fcontinue_process): Apply to network processes. A stopped network process is indicated by setting command field to t . (Fprocess_send_eof): No-op if datagram connection. (Fstatus_notify): Don't read input for a stream server socket or a stopped network process. (init_process): Initialize datagram_address array. (syms_of_process): Intern and staticpro new variables, defsubr new functions.
author Kim F. Storm <storm@cua.dk>
date Sun, 17 Mar 2002 20:20:33 +0000
parents b2e0c0638bf2
children 695cf19ef79e d7ddb3e565de
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15139
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1 /*
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2 Simple program to start Emacs with its console window hidden.
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
3
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
4 This program is provided purely for convenience, since most users will
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
5 use Emacs in windowing (GUI) mode, and will not want to have an extra
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
6 console window lying around. */
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
7
15320
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
8 /*
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
9 You may want to define this if you want to be able to install updated
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
10 emacs binaries even when other users are using the current version.
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
11 The problem with some file servers (notably Novell) is that an open
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
12 file cannot be overwritten, deleted, or even renamed. So if someone
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
13 is running emacs.exe already, you cannot install a newer version.
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
14 By defining CHOOSE_NEWEST_EXE, you can name your new emacs.exe
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
15 something else which matches "emacs*.exe", and runemacs will
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
16 automatically select the newest emacs executeable in the bin directory.
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
17 (So you'll probably be able to delete the old version some hours/days
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
18 later).
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
19 */
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
20
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
21 /* #define CHOOSE_NEWEST_EXE */
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
22
15139
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
23 #include <windows.h>
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
24 #include <string.h>
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
25 #include <malloc.h>
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
26
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
27 int WINAPI
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
28 WinMain (HINSTANCE hSelf, HINSTANCE hPrev, LPSTR cmdline, int nShow)
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
29 {
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
30 STARTUPINFO start;
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
31 SECURITY_ATTRIBUTES sec_attrs;
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
32 SECURITY_DESCRIPTOR sec_desc;
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
33 PROCESS_INFORMATION child;
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
34 int wait_for_child = FALSE;
19720
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
35 DWORD priority_class = NORMAL_PRIORITY_CLASS;
15139
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
36 DWORD ret_code = 0;
15320
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
37 char *new_cmdline;
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
38 char *p;
15139
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
39 char modname[MAX_PATH];
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
40
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
41 if (!GetModuleFileName (NULL, modname, MAX_PATH))
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
42 goto error;
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
43 if ((p = strrchr (modname, '\\')) == NULL)
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
44 goto error;
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
45 *p = 0;
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
46
38139
b2e0c0638bf2 (WinMain): Add quotes around executable name.
Jason Rumney <jasonr@gnu.org>
parents: 31089
diff changeset
47 new_cmdline = alloca (MAX_PATH + strlen (cmdline) + 3);
b2e0c0638bf2 (WinMain): Add quotes around executable name.
Jason Rumney <jasonr@gnu.org>
parents: 31089
diff changeset
48 /* Quote executable name in case of spaces in the path. */
b2e0c0638bf2 (WinMain): Add quotes around executable name.
Jason Rumney <jasonr@gnu.org>
parents: 31089
diff changeset
49 *new_cmdline = '"';
b2e0c0638bf2 (WinMain): Add quotes around executable name.
Jason Rumney <jasonr@gnu.org>
parents: 31089
diff changeset
50 strcpy (new_cmdline + 1, modname);
15320
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
51
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
52 #ifdef CHOOSE_NEWEST_EXE
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
53 {
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
54 /* Silly hack to allow new versions to be installed on
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
55 server even when current version is in use. */
15139
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
56
15320
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
57 char * best_name = alloca (MAX_PATH + 1);
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
58 FILETIME best_time = {0,0};
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
59 WIN32_FIND_DATA wfd;
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
60 HANDLE fh;
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
61 p = new_cmdline + strlen (new_cmdline);
38139
b2e0c0638bf2 (WinMain): Add quotes around executable name.
Jason Rumney <jasonr@gnu.org>
parents: 31089
diff changeset
62 strcpy (p, "\\emacs*.exe\" ");
15320
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
63 fh = FindFirstFile (new_cmdline, &wfd);
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
64 if (fh == INVALID_HANDLE_VALUE)
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
65 goto error;
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
66 do
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
67 {
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
68 if (wfd.ftLastWriteTime.dwHighDateTime > best_time.dwHighDateTime
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
69 || (wfd.ftLastWriteTime.dwHighDateTime == best_time.dwHighDateTime
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
70 && wfd.ftLastWriteTime.dwLowDateTime > best_time.dwLowDateTime))
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
71 {
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
72 best_time = wfd.ftLastWriteTime;
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
73 strcpy (best_name, wfd.cFileName);
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
74 }
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
75 }
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
76 while (FindNextFile (fh, &wfd));
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
77 FindClose (fh);
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
78 *p++ = '\\';
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
79 strcpy (p, best_name);
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
80 strcat (p, " ");
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
81 }
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
82 #else
38139
b2e0c0638bf2 (WinMain): Add quotes around executable name.
Jason Rumney <jasonr@gnu.org>
parents: 31089
diff changeset
83 strcat (new_cmdline, "\\emacs.exe\" ");
15320
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
84 #endif
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
85
19720
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
86 /* Append original arguments if any; first look for arguments we
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
87 recognise (-wait, -high, and -low), and apply them ourselves. */
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
88 while (cmdline[0] == '-' || cmdline[0] == '/')
15320
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
89 {
19720
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
90 if (strncmp (cmdline+1, "wait", 4) == 0)
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
91 {
15320
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
92 wait_for_child = TRUE;
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
93 cmdline += 5;
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
94 }
19720
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
95 else if (strncmp (cmdline+1, "high", 4) == 0)
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
96 {
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
97 priority_class = HIGH_PRIORITY_CLASS;
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
98 cmdline += 5;
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
99 }
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
100 else if (strncmp (cmdline+1, "low", 3) == 0)
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
101 {
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
102 priority_class = IDLE_PRIORITY_CLASS;
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
103 cmdline += 4;
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
104 }
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
105 else
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
106 break;
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
107 }
15139
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
108 strcat (new_cmdline, cmdline);
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
109
15320
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
110 /* Set emacs_dir variable if runemacs was in "%emacs_dir%\bin". */
15139
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
111 if ((p = strrchr (modname, '\\')) && stricmp (p, "\\bin") == 0)
15320
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
112 {
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
113 *p = 0;
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
114 for (p = modname; *p; p++)
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
115 if (*p == '\\') *p = '/';
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
116 SetEnvironmentVariable ("emacs_dir", modname);
b76f57d4320b (CHOOSE_NEWEST_EXE): New parameter macro.
Richard M. Stallman <rms@gnu.org>
parents: 15139
diff changeset
117 }
15139
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
118
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
119 memset (&start, 0, sizeof (start));
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
120 start.cb = sizeof (start);
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
121 start.dwFlags = STARTF_USESHOWWINDOW;
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
122 start.wShowWindow = SW_HIDE;
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
123
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
124 sec_attrs.nLength = sizeof (sec_attrs);
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
125 sec_attrs.lpSecurityDescriptor = NULL;
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
126 sec_attrs.bInheritHandle = FALSE;
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
127
19720
8d429173786f (WinMain): Allow Emacs process to be started with
Geoff Voelker <voelker@cs.washington.edu>
parents: 15848
diff changeset
128 if (CreateProcess (NULL, new_cmdline, &sec_attrs, NULL, TRUE, priority_class,
24193
2cc3642eb734 (WinMain): Pass explicit environment block to
Andrew Innes <andrewi@gnu.org>
parents: 19720
diff changeset
129 GetEnvironmentStrings (), NULL, &start, &child))
15139
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
130 {
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
131 if (wait_for_child)
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
132 {
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
133 WaitForSingleObject (child.hProcess, INFINITE);
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
134 GetExitCodeProcess (child.hProcess, &ret_code);
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
135 }
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
136 CloseHandle (child.hThread);
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
137 CloseHandle (child.hProcess);
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
138 }
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
139 else
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
140 goto error;
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
141 return (int) ret_code;
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
142
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
143 error:
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
144 MessageBox (NULL, "Could not start Emacs.", "Error", MB_ICONSTOP);
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
145 return 1;
4d638e5a9e7d Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
146 }