annotate src/process.c @ 13709:d16f31ae8adf

(create_process): Use Posix signal handling to block signals, if available. If HAVE_VFORK, save and restore signal handlers that the child might change, since in many systems (e.g. Solaris 2.4) if the child changes the signal handlers this munges the parent's handler.
author Karl Heuer <kwzh@gnu.org>
date Wed, 13 Dec 1995 01:52:07 +0000
parents b035c6e41457
children 5e0cbd5fcb46
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1 /* Asynchronous subprocess control for GNU Emacs.
11235
e6bdaaa6ce1b Update copyright.
Karl Heuer <kwzh@gnu.org>
parents: 11148
diff changeset
2 Copyright (C) 1985, 86, 87, 88, 93, 94, 95 Free Software Foundation, Inc.
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4 This file is part of GNU Emacs.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6 GNU Emacs is free software; you can redistribute it and/or modify
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7 it under the terms of the GNU General Public License as published by
1780
d01c59bac5c1 * frame.h (FRAME_SAMPLE_VISIBILITY): Make sure frame is marked as
Jim Blandy <jimb@redhat.com>
parents: 1683
diff changeset
8 the Free Software Foundation; either version 2, or (at your option)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9 any later version.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11 GNU Emacs is distributed in the hope that it will be useful,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 GNU General Public License for more details.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 along with GNU Emacs; see the file COPYING. If not, write to
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
19
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
20
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
21 #include <signal.h>
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
22
4696
1fc792473491 Include <config.h> instead of "config.h".
Roland McGrath <roland@gnu.org>
parents: 4682
diff changeset
23 #include <config.h>
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
24
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
25 /* This file is split into two parts by the following preprocessor
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
26 conditional. The 'then' clause contains all of the support for
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
27 asynchronous subprocesses. The 'else' clause contains stub
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
28 versions of some of the asynchronous subprocess routines that are
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
29 often called elsewhere in Emacs, so we don't have to #ifdef the
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
30 sections that call them. */
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
31
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
32
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
33 #ifdef subprocesses
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
34
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
35 #include <stdio.h>
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
36 #include <errno.h>
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
37 #include <setjmp.h>
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
38 #include <sys/types.h> /* some typedefs are used in sys/file.h */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
39 #include <sys/file.h>
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
40 #include <sys/stat.h>
6158
6b81b2575071 Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 5891
diff changeset
41 #ifdef HAVE_UNISTD_H
6b81b2575071 Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 5891
diff changeset
42 #include <unistd.h>
6b81b2575071 Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 5891
diff changeset
43 #endif
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
44
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
45 #ifdef WINDOWSNT
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
46 #include <stdlib.h>
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
47 #include <fcntl.h>
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
48 #endif /* not WINDOWSNT */
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
49
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
50 #ifdef HAVE_SOCKETS /* TCP connection support, if kernel can do it */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
51 #include <sys/socket.h>
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
52 #include <netdb.h>
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
53 #include <netinet/in.h>
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
54 #include <arpa/inet.h>
12749
ce48ec025b0a Maybe include net/errno.h.
Richard M. Stallman <rms@gnu.org>
parents: 12648
diff changeset
55 #ifdef NEED_NET_ERRNO_H
ce48ec025b0a Maybe include net/errno.h.
Richard M. Stallman <rms@gnu.org>
parents: 12648
diff changeset
56 #include <net/errno.h>
ce48ec025b0a Maybe include net/errno.h.
Richard M. Stallman <rms@gnu.org>
parents: 12648
diff changeset
57 #endif /* NEED_NET_ERRNO_H */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
58 #endif /* HAVE_SOCKETS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
59
4914
56bc426b1eb4 [TERM]: Include client.h.
Richard M. Stallman <rms@gnu.org>
parents: 4883
diff changeset
60 /* TERM is a poor-man's SLIP, used on Linux. */
56bc426b1eb4 [TERM]: Include client.h.
Richard M. Stallman <rms@gnu.org>
parents: 4883
diff changeset
61 #ifdef TERM
56bc426b1eb4 [TERM]: Include client.h.
Richard M. Stallman <rms@gnu.org>
parents: 4883
diff changeset
62 #include <client.h>
56bc426b1eb4 [TERM]: Include client.h.
Richard M. Stallman <rms@gnu.org>
parents: 4883
diff changeset
63 #endif
56bc426b1eb4 [TERM]: Include client.h.
Richard M. Stallman <rms@gnu.org>
parents: 4883
diff changeset
64
7238
c9598edda1a2 (IN_ADDR, NUMERIC_ADDR_ERROR): Made conditional on HAVE_BROKEN_INET_ADDR.
Paul Reilly <pmr@pajato.com>
parents: 7220
diff changeset
65 /* On some systems, e.g. DGUX, inet_addr returns a 'struct in_addr'. */
c9598edda1a2 (IN_ADDR, NUMERIC_ADDR_ERROR): Made conditional on HAVE_BROKEN_INET_ADDR.
Paul Reilly <pmr@pajato.com>
parents: 7220
diff changeset
66 #ifdef HAVE_BROKEN_INET_ADDR
4998
3cd3a39f98f4 (IN_ADDR, NUMERIC_ADDR_ERROR): New macros (two versions).
Richard M. Stallman <rms@gnu.org>
parents: 4994
diff changeset
67 #define IN_ADDR struct in_addr
3cd3a39f98f4 (IN_ADDR, NUMERIC_ADDR_ERROR): New macros (two versions).
Richard M. Stallman <rms@gnu.org>
parents: 4994
diff changeset
68 #define NUMERIC_ADDR_ERROR (numeric_addr.s_addr == -1)
3cd3a39f98f4 (IN_ADDR, NUMERIC_ADDR_ERROR): New macros (two versions).
Richard M. Stallman <rms@gnu.org>
parents: 4994
diff changeset
69 #else
3cd3a39f98f4 (IN_ADDR, NUMERIC_ADDR_ERROR): New macros (two versions).
Richard M. Stallman <rms@gnu.org>
parents: 4994
diff changeset
70 #define IN_ADDR unsigned long
3cd3a39f98f4 (IN_ADDR, NUMERIC_ADDR_ERROR): New macros (two versions).
Richard M. Stallman <rms@gnu.org>
parents: 4994
diff changeset
71 #define NUMERIC_ADDR_ERROR (numeric_addr == -1)
3cd3a39f98f4 (IN_ADDR, NUMERIC_ADDR_ERROR): New macros (two versions).
Richard M. Stallman <rms@gnu.org>
parents: 4994
diff changeset
72 #endif
3cd3a39f98f4 (IN_ADDR, NUMERIC_ADDR_ERROR): New macros (two versions).
Richard M. Stallman <rms@gnu.org>
parents: 4994
diff changeset
73
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
74 #if defined(BSD) || defined(STRIDE)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
75 #include <sys/ioctl.h>
1012
a48ed1d416dd * process.c (process_send_signal): Don't send SIGTSTP if the
Jim Blandy <jimb@redhat.com>
parents: 849
diff changeset
76 #if !defined (O_NDELAY) && defined (HAVE_PTYS) && !defined(USG5)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
77 #include <fcntl.h>
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
78 #endif /* HAVE_PTYS and no O_NDELAY */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
79 #endif /* BSD or STRIDE */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
80
5240
eed870591987 (Fprocess_status): Use get_process, not Fget_process.
Richard M. Stallman <rms@gnu.org>
parents: 5239
diff changeset
81 #ifdef BROKEN_O_NONBLOCK
eed870591987 (Fprocess_status): Use get_process, not Fget_process.
Richard M. Stallman <rms@gnu.org>
parents: 5239
diff changeset
82 #undef O_NONBLOCK
eed870591987 (Fprocess_status): Use get_process, not Fget_process.
Richard M. Stallman <rms@gnu.org>
parents: 5239
diff changeset
83 #endif /* BROKEN_O_NONBLOCK */
eed870591987 (Fprocess_status): Use get_process, not Fget_process.
Richard M. Stallman <rms@gnu.org>
parents: 5239
diff changeset
84
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
85 #ifdef NEED_BSDTTY
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
86 #include <bsdtty.h>
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
87 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
88
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
89 #ifdef IRIS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
90 #include <sys/sysmacros.h> /* for "minor" */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
91 #endif /* not IRIS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
92
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
93 #include "systime.h"
1047
1ab1ed32e82a * process.c: Include "systty.h", not "systerm.h".
Jim Blandy <jimb@redhat.com>
parents: 1030
diff changeset
94 #include "systty.h"
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
95
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
96 #include "lisp.h"
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
97 #include "window.h"
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
98 #include "buffer.h"
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
99 #include "process.h"
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
100 #include "termhooks.h"
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
101 #include "termopts.h"
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
102 #include "commands.h"
1780
d01c59bac5c1 * frame.h (FRAME_SAMPLE_VISIBILITY): Make sure frame is marked as
Jim Blandy <jimb@redhat.com>
parents: 1683
diff changeset
103 #include "frame.h"
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
104
4682
c4d471244116 (keyboard_descriptor): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4639
diff changeset
105 Lisp_Object Qprocessp;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
106 Lisp_Object Qrun, Qstop, Qsignal, Qopen, Qclosed;
8231
5226ed89c1a6 (Qlast_nonmenu_event): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8063
diff changeset
107 Lisp_Object Qlast_nonmenu_event;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
108 /* Qexit is declared and initialized in eval.c. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
109
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
110 /* a process object is a network connection when its childp field is neither
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
111 Qt nor Qnil but is instead a string (name of foreign host we
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
112 are connected to + name of port we are connected to) */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
113
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
114 #ifdef HAVE_SOCKETS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
115 static Lisp_Object stream_process;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
116
9952
9daedd94a204 (NETCONN_P, kill_buffer_processes): Use the new type-test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9882
diff changeset
117 #define NETCONN_P(p) (GC_STRINGP (XPROCESS (p)->childp))
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
118 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
119 #define NETCONN_P(p) 0
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
120 #endif /* HAVE_SOCKETS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
121
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
122 /* Define first descriptor number available for subprocesses. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
123 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
124 #define FIRST_PROC_DESC 1
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
125 #else /* Not VMS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
126 #define FIRST_PROC_DESC 3
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
127 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
128
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
129 /* Define SIGCHLD as an alias for SIGCLD. There are many conditionals
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
130 testing SIGCHLD. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
131
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
132 #if !defined (SIGCHLD) && defined (SIGCLD)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
133 #define SIGCHLD SIGCLD
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
134 #endif /* SIGCLD */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
135
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
136 #include "syssignal.h"
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
137
4639
76f242eb1fa8 Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 4320
diff changeset
138 #include "syswait.h"
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
139
5543
dbc1d920ef5c Don't declare sys_nerr.
Roland McGrath <roland@gnu.org>
parents: 5534
diff changeset
140 extern int errno;
dbc1d920ef5c Don't declare sys_nerr.
Roland McGrath <roland@gnu.org>
parents: 5534
diff changeset
141 extern char *strerror ();
dbc1d920ef5c Don't declare sys_nerr.
Roland McGrath <roland@gnu.org>
parents: 5534
diff changeset
142 #ifdef VMS
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
143 extern char *sys_errlist[];
5543
dbc1d920ef5c Don't declare sys_nerr.
Roland McGrath <roland@gnu.org>
parents: 5534
diff changeset
144 #endif
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
145
8331
14ddb4c66461 [!HAVE_H_ERRNO]: Declare h_errno.
Richard M. Stallman <rms@gnu.org>
parents: 8287
diff changeset
146 #ifndef HAVE_H_ERRNO
14ddb4c66461 [!HAVE_H_ERRNO]: Declare h_errno.
Richard M. Stallman <rms@gnu.org>
parents: 8287
diff changeset
147 extern int h_errno;
14ddb4c66461 [!HAVE_H_ERRNO]: Declare h_errno.
Richard M. Stallman <rms@gnu.org>
parents: 8287
diff changeset
148 #endif
14ddb4c66461 [!HAVE_H_ERRNO]: Declare h_errno.
Richard M. Stallman <rms@gnu.org>
parents: 8287
diff changeset
149
5891
ffe51baf2728 (sys_siglist): Protect decl with #ifndef SYS_SIGLIST_DECLARED.
Roland McGrath <roland@gnu.org>
parents: 5846
diff changeset
150 #ifndef SYS_SIGLIST_DECLARED
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
151 #ifndef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
152 #ifndef BSD4_1
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
153 #ifndef WINDOWSNT
3023
cfd999700613 (create_process): Ignore retval from TIOCSTTY.
Richard M. Stallman <rms@gnu.org>
parents: 2961
diff changeset
154 #ifndef LINUX
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
155 extern char *sys_siglist[];
5534
7a0de0f56c86 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 5404
diff changeset
156 #endif /* not LINUX */
7a0de0f56c86 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 5404
diff changeset
157 #else /* BSD4_1 */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
158 char *sys_siglist[] =
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
159 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
160 "bum signal!!",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
161 "hangup",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
162 "interrupt",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
163 "quit",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
164 "illegal instruction",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
165 "trace trap",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
166 "iot instruction",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
167 "emt instruction",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
168 "floating point exception",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
169 "kill",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
170 "bus error",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
171 "segmentation violation",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
172 "bad argument to system call",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
173 "write on a pipe with no one to read it",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
174 "alarm clock",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
175 "software termination signal from kill",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
176 "status signal",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
177 "sendable stop signal not from tty",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
178 "stop signal from tty",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
179 "continue a stopped process",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
180 "child status has changed",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
181 "background read attempted from control tty",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
182 "background write attempted from control tty",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
183 "input record available at control tty",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
184 "exceeded CPU time limit",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
185 "exceeded file size limit"
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
186 };
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
187 #endif /* not WINDOWSNT */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
188 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
189 #endif /* VMS */
5891
ffe51baf2728 (sys_siglist): Protect decl with #ifndef SYS_SIGLIST_DECLARED.
Roland McGrath <roland@gnu.org>
parents: 5846
diff changeset
190 #endif /* ! SYS_SIGLIST_DECLARED */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
191
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
192 /* t means use pty, nil means use a pipe,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
193 maybe other values to come. */
4682
c4d471244116 (keyboard_descriptor): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4639
diff changeset
194 static Lisp_Object Vprocess_connection_type;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
195
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
196 #ifdef SKTPAIR
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
197 #ifndef HAVE_SOCKETS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
198 #include <sys/socket.h>
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
199 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
200 #endif /* SKTPAIR */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
201
10548
dcae4394587d (process_tick, update_tick): Make non-static.
Karl Heuer <kwzh@gnu.org>
parents: 10527
diff changeset
202 /* These next two vars are non-static since sysdep.c uses them in the
dcae4394587d (process_tick, update_tick): Make non-static.
Karl Heuer <kwzh@gnu.org>
parents: 10527
diff changeset
203 emulation of `select'. */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
204 /* Number of events of change of status of a process. */
10548
dcae4394587d (process_tick, update_tick): Make non-static.
Karl Heuer <kwzh@gnu.org>
parents: 10527
diff changeset
205 int process_tick;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
206 /* Number of events for which the user or sentinel has been notified. */
10548
dcae4394587d (process_tick, update_tick): Make non-static.
Karl Heuer <kwzh@gnu.org>
parents: 10527
diff changeset
207 int update_tick;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
208
10527
68b8191091a7 #include sysselect.h instead of defining things by hand.
Karl Heuer <kwzh@gnu.org>
parents: 10032
diff changeset
209 #include "sysselect.h"
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
210
13414
b035c6e41457 [HAVE_NTGUI] (POLL_FOR_INPUT): Define macro.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13159
diff changeset
211 /* If we support a window system, turn on the code to poll periodically
7486
cfe4840ffde9 (Fopen_network_stream): Call bind_polling_period; later unbind the binding.
Richard M. Stallman <rms@gnu.org>
parents: 7454
diff changeset
212 to detect C-g. It isn't actually used when doing interrupt input. */
13414
b035c6e41457 [HAVE_NTGUI] (POLL_FOR_INPUT): Define macro.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13159
diff changeset
213 #ifdef HAVE_WINDOW_SYSTEM
7486
cfe4840ffde9 (Fopen_network_stream): Call bind_polling_period; later unbind the binding.
Richard M. Stallman <rms@gnu.org>
parents: 7454
diff changeset
214 #define POLL_FOR_INPUT
cfe4840ffde9 (Fopen_network_stream): Call bind_polling_period; later unbind the binding.
Richard M. Stallman <rms@gnu.org>
parents: 7454
diff changeset
215 #endif
cfe4840ffde9 (Fopen_network_stream): Call bind_polling_period; later unbind the binding.
Richard M. Stallman <rms@gnu.org>
parents: 7454
diff changeset
216
9686
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
217 /* Mask of bits indicating the descriptors that we wait for input on. */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
218
4682
c4d471244116 (keyboard_descriptor): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4639
diff changeset
219 static SELECT_TYPE input_wait_mask;
c4d471244116 (keyboard_descriptor): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4639
diff changeset
220
9686
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
221 /* Mask that excludes keyboard input descriptor (s). */
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
222
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
223 static SELECT_TYPE non_keyboard_wait_mask;
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
224
7044
7032d07f5ad9 (max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7013
diff changeset
225 /* The largest descriptor currently in use for a process object. */
7032d07f5ad9 (max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7013
diff changeset
226 static int max_process_desc;
7032d07f5ad9 (max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7013
diff changeset
227
9686
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
228 /* The largest descriptor currently in use for keyboard input. */
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
229 static int max_keyboard_desc;
4682
c4d471244116 (keyboard_descriptor): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4639
diff changeset
230
c4d471244116 (keyboard_descriptor): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4639
diff changeset
231 /* Nonzero means delete a process right away if it exits. */
c4d471244116 (keyboard_descriptor): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4639
diff changeset
232 static int delete_exited_processes;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
233
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
234 /* Indexed by descriptor, gives the process (if any) for that descriptor */
6164
d047d5a48e0e (chan_process, Vprocess_alist): No longer static.
Richard M. Stallman <rms@gnu.org>
parents: 6158
diff changeset
235 Lisp_Object chan_process[MAXDESC];
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
236
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
237 /* Alist of elements (NAME . PROCESS) */
6164
d047d5a48e0e (chan_process, Vprocess_alist): No longer static.
Richard M. Stallman <rms@gnu.org>
parents: 6158
diff changeset
238 Lisp_Object Vprocess_alist;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
239
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
240 /* Buffered-ahead input char from process, indexed by channel.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
241 -1 means empty (no char is buffered).
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
242 Used on sys V where the only way to tell if there is any
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
243 output from the process is to read at least one char.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
244 Always -1 on systems that support FIONREAD. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
245
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
246 /* Don't make static; need to access externally. */
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
247 int proc_buffered_char[MAXDESC];
4682
c4d471244116 (keyboard_descriptor): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4639
diff changeset
248
c4d471244116 (keyboard_descriptor): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4639
diff changeset
249 static Lisp_Object get_process ();
6158
6b81b2575071 Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 5891
diff changeset
250
6b81b2575071 Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 5891
diff changeset
251 /* Maximum number of bytes to send to a pty without an eof. */
6b81b2575071 Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 5891
diff changeset
252 static int pty_max_bytes;
9030
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
253
11609
3b2dacb1bfe9 (create_process): Don't reference pty_name if !HAVE_PTYS.
Karl Heuer <kwzh@gnu.org>
parents: 11514
diff changeset
254 #ifdef HAVE_PTYS
3b2dacb1bfe9 (create_process): Don't reference pty_name if !HAVE_PTYS.
Karl Heuer <kwzh@gnu.org>
parents: 11514
diff changeset
255 /* The file name of the pty opened by allocate_pty. */
9030
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
256
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
257 static char pty_name[24];
11609
3b2dacb1bfe9 (create_process): Don't reference pty_name if !HAVE_PTYS.
Karl Heuer <kwzh@gnu.org>
parents: 11514
diff changeset
258 #endif
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
259
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
260 /* Compute the Lisp form of the process status, p->status, from
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
261 the numeric status that was returned by `wait'. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
262
1522
19ccf004b172 * process.c: (status_convert): Declare this to return a
Jim Blandy <jimb@redhat.com>
parents: 1323
diff changeset
263 Lisp_Object status_convert ();
19ccf004b172 * process.c: (status_convert): Declare this to return a
Jim Blandy <jimb@redhat.com>
parents: 1323
diff changeset
264
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
265 update_status (p)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
266 struct Lisp_Process *p;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
267 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
268 union { int i; WAITTYPE wt; } u;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
269 u.i = XFASTINT (p->raw_status_low) + (XFASTINT (p->raw_status_high) << 16);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
270 p->status = status_convert (u.wt);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
271 p->raw_status_low = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
272 p->raw_status_high = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
273 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
274
3608
Jim Blandy <jimb@redhat.com>
parents: 3593
diff changeset
275 /* Convert a process status word in Unix format to
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
276 the list that we use internally. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
277
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
278 Lisp_Object
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
279 status_convert (w)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
280 WAITTYPE w;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
281 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
282 if (WIFSTOPPED (w))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
283 return Fcons (Qstop, Fcons (make_number (WSTOPSIG (w)), Qnil));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
284 else if (WIFEXITED (w))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
285 return Fcons (Qexit, Fcons (make_number (WRETCODE (w)),
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
286 WCOREDUMP (w) ? Qt : Qnil));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
287 else if (WIFSIGNALED (w))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
288 return Fcons (Qsignal, Fcons (make_number (WTERMSIG (w)),
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
289 WCOREDUMP (w) ? Qt : Qnil));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
290 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
291 return Qrun;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
292 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
293
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
294 /* Given a status-list, extract the three pieces of information
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
295 and store them individually through the three pointers. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
296
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
297 void
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
298 decode_status (l, symbol, code, coredump)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
299 Lisp_Object l;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
300 Lisp_Object *symbol;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
301 int *code;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
302 int *coredump;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
303 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
304 Lisp_Object tem;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
305
9115
59bc2d010b5f (decode_status, Fprocessp, Fget_process, Fget_buffer_process, Fprocess_status,
Karl Heuer <kwzh@gnu.org>
parents: 9034
diff changeset
306 if (SYMBOLP (l))
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
307 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
308 *symbol = l;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
309 *code = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
310 *coredump = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
311 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
312 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
313 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
314 *symbol = XCONS (l)->car;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
315 tem = XCONS (l)->cdr;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
316 *code = XFASTINT (XCONS (tem)->car);
1522
19ccf004b172 * process.c: (status_convert): Declare this to return a
Jim Blandy <jimb@redhat.com>
parents: 1323
diff changeset
317 tem = XCONS (tem)->cdr;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
318 *coredump = !NILP (tem);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
319 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
320 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
321
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
322 /* Return a string describing a process status list. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
323
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
324 Lisp_Object
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
325 status_message (status)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
326 Lisp_Object status;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
327 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
328 Lisp_Object symbol;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
329 int code, coredump;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
330 Lisp_Object string, string2;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
331
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
332 decode_status (status, &symbol, &code, &coredump);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
333
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
334 if (EQ (symbol, Qsignal) || EQ (symbol, Qstop))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
335 {
5579
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
336 char *signame = 0;
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
337 if (code < NSIG)
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
338 {
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
339 #ifndef VMS
9705
f7535deb913a (status_message): Add a cast.
Richard M. Stallman <rms@gnu.org>
parents: 9697
diff changeset
340 /* Cast to suppress warning if the table has const char *. */
f7535deb913a (status_message): Add a cast.
Richard M. Stallman <rms@gnu.org>
parents: 9697
diff changeset
341 signame = (char *) sys_siglist[code];
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
342 #else
5579
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
343 signame = sys_errlist[code];
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
344 #endif
5579
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
345 }
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
346 if (signame == 0)
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
347 signame = "unknown";
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
348 string = build_string (signame);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
349 string2 = build_string (coredump ? " (core dumped)\n" : "\n");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
350 XSTRING (string)->data[0] = DOWNCASE (XSTRING (string)->data[0]);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
351 return concat2 (string, string2);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
352 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
353 else if (EQ (symbol, Qexit))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
354 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
355 if (code == 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
356 return build_string ("finished\n");
2429
96b55f2f19cd Rename int-to-string to number-to-string, since it can handle
Jim Blandy <jimb@redhat.com>
parents: 2357
diff changeset
357 string = Fnumber_to_string (make_number (code));
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
358 string2 = build_string (coredump ? " (core dumped)\n" : "\n");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
359 return concat2 (build_string ("exited abnormally with code "),
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
360 concat2 (string, string2));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
361 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
362 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
363 return Fcopy_sequence (Fsymbol_name (symbol));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
364 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
365
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
366 #ifdef HAVE_PTYS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
367
11609
3b2dacb1bfe9 (create_process): Don't reference pty_name if !HAVE_PTYS.
Karl Heuer <kwzh@gnu.org>
parents: 11514
diff changeset
368 /* Open an available pty, returning a file descriptor.
3b2dacb1bfe9 (create_process): Don't reference pty_name if !HAVE_PTYS.
Karl Heuer <kwzh@gnu.org>
parents: 11514
diff changeset
369 Return -1 on failure.
3b2dacb1bfe9 (create_process): Don't reference pty_name if !HAVE_PTYS.
Karl Heuer <kwzh@gnu.org>
parents: 11514
diff changeset
370 The file name of the terminal corresponding to the pty
3b2dacb1bfe9 (create_process): Don't reference pty_name if !HAVE_PTYS.
Karl Heuer <kwzh@gnu.org>
parents: 11514
diff changeset
371 is left in the variable pty_name. */
3b2dacb1bfe9 (create_process): Don't reference pty_name if !HAVE_PTYS.
Karl Heuer <kwzh@gnu.org>
parents: 11514
diff changeset
372
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
373 int
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
374 allocate_pty ()
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
375 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
376 struct stat stb;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
377 register c, i;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
378 int fd;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
379
624
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
380 /* Some systems name their pseudoterminals so that there are gaps in
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
381 the usual sequence - for example, on HP9000/S700 systems, there
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
382 are no pseudoterminals with names ending in 'f'. So we wait for
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
383 three failures in a row before deciding that we've reached the
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
384 end of the ptys. */
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
385 int failed_count = 0;
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
386
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
387 #ifdef PTY_ITERATION
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
388 PTY_ITERATION
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
389 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
390 for (c = FIRST_PTY_LETTER; c <= 'z'; c++)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
391 for (i = 0; i < 16; i++)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
392 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
393 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
394 #ifdef PTY_NAME_SPRINTF
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
395 PTY_NAME_SPRINTF
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
396 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
397 sprintf (pty_name, "/dev/pty%c%x", c, i);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
398 #endif /* no PTY_NAME_SPRINTF */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
399
822
c6e94e13926c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 808
diff changeset
400 #ifdef PTY_OPEN
c6e94e13926c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 808
diff changeset
401 PTY_OPEN;
c6e94e13926c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 808
diff changeset
402 #else /* no PTY_OPEN */
624
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
403 #ifdef IRIS
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
404 /* Unusual IRIS code */
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
405 *ptyv = open ("/dev/ptc", O_RDWR | O_NDELAY, 0);
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
406 if (fd < 0)
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
407 return -1;
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
408 if (fstat (fd, &stb) < 0)
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
409 return -1;
822
c6e94e13926c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 808
diff changeset
410 #else /* not IRIS */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
411 if (stat (pty_name, &stb) < 0)
624
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
412 {
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
413 failed_count++;
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
414 if (failed_count >= 3)
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
415 return -1;
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
416 }
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
417 else
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
418 failed_count = 0;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
419 #ifdef O_NONBLOCK
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
420 fd = open (pty_name, O_RDWR | O_NONBLOCK, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
421 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
422 fd = open (pty_name, O_RDWR | O_NDELAY, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
423 #endif
822
c6e94e13926c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 808
diff changeset
424 #endif /* not IRIS */
c6e94e13926c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 808
diff changeset
425 #endif /* no PTY_OPEN */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
426
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
427 if (fd >= 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
428 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
429 /* check to make certain that both sides are available
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
430 this avoids a nasty yet stupid bug in rlogins */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
431 #ifdef PTY_TTY_NAME_SPRINTF
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
432 PTY_TTY_NAME_SPRINTF
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
433 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
434 sprintf (pty_name, "/dev/tty%c%x", c, i);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
435 #endif /* no PTY_TTY_NAME_SPRINTF */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
436 #ifndef UNIPLUS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
437 if (access (pty_name, 6) != 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
438 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
439 close (fd);
2887
0554478bfa71 * process.c [__sgi] (allocate_pty): Give up immediately if pty is
Jim Blandy <jimb@redhat.com>
parents: 2830
diff changeset
440 #if !defined(IRIS) && !defined(__sgi)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
441 continue;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
442 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
443 return -1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
444 #endif /* IRIS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
445 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
446 #endif /* not UNIPLUS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
447 setup_pty (fd);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
448 return fd;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
449 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
450 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
451 return -1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
452 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
453 #endif /* HAVE_PTYS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
454
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
455 Lisp_Object
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
456 make_process (name)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
457 Lisp_Object name;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
458 {
9969
007d93b04e1f (make_process): Use allocate_vectorlike and VECSIZE.
Karl Heuer <kwzh@gnu.org>
parents: 9952
diff changeset
459 struct Lisp_Vector *vec;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
460 register Lisp_Object val, tem, name1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
461 register struct Lisp_Process *p;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
462 char suffix[10];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
463 register int i;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
464
9969
007d93b04e1f (make_process): Use allocate_vectorlike and VECSIZE.
Karl Heuer <kwzh@gnu.org>
parents: 9952
diff changeset
465 vec = allocate_vectorlike ((EMACS_INT) VECSIZE (struct Lisp_Process));
007d93b04e1f (make_process): Use allocate_vectorlike and VECSIZE.
Karl Heuer <kwzh@gnu.org>
parents: 9952
diff changeset
466 for (i = 0; i < VECSIZE (struct Lisp_Process); i++)
007d93b04e1f (make_process): Use allocate_vectorlike and VECSIZE.
Karl Heuer <kwzh@gnu.org>
parents: 9952
diff changeset
467 vec->contents[i] = Qnil;
007d93b04e1f (make_process): Use allocate_vectorlike and VECSIZE.
Karl Heuer <kwzh@gnu.org>
parents: 9952
diff changeset
468 vec->size = VECSIZE (struct Lisp_Process);
007d93b04e1f (make_process): Use allocate_vectorlike and VECSIZE.
Karl Heuer <kwzh@gnu.org>
parents: 9952
diff changeset
469 p = (struct Lisp_Process *)vec;
007d93b04e1f (make_process): Use allocate_vectorlike and VECSIZE.
Karl Heuer <kwzh@gnu.org>
parents: 9952
diff changeset
470
9277
21f6120be5ba (make_process, create_process, Fopen_network_stream, deactivate_process,
Karl Heuer <kwzh@gnu.org>
parents: 9115
diff changeset
471 XSETINT (p->infd, -1);
21f6120be5ba (make_process, create_process, Fopen_network_stream, deactivate_process,
Karl Heuer <kwzh@gnu.org>
parents: 9115
diff changeset
472 XSETINT (p->outfd, -1);
9318
a14cc1712337 (make_process, list_processes_1, create_process, Faccept_process_output,
Karl Heuer <kwzh@gnu.org>
parents: 9277
diff changeset
473 XSETFASTINT (p->pid, 0);
a14cc1712337 (make_process, list_processes_1, create_process, Faccept_process_output,
Karl Heuer <kwzh@gnu.org>
parents: 9277
diff changeset
474 XSETFASTINT (p->tick, 0);
a14cc1712337 (make_process, list_processes_1, create_process, Faccept_process_output,
Karl Heuer <kwzh@gnu.org>
parents: 9277
diff changeset
475 XSETFASTINT (p->update_tick, 0);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
476 p->raw_status_low = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
477 p->raw_status_high = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
478 p->status = Qrun;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
479 p->mark = Fmake_marker ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
480
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
481 /* If name is already in use, modify it until it is unused. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
482
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
483 name1 = name;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
484 for (i = 1; ; i++)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
485 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
486 tem = Fget_process (name1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
487 if (NILP (tem)) break;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
488 sprintf (suffix, "<%d>", i);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
489 name1 = concat2 (name, build_string (suffix));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
490 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
491 name = name1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
492 p->name = name;
9969
007d93b04e1f (make_process): Use allocate_vectorlike and VECSIZE.
Karl Heuer <kwzh@gnu.org>
parents: 9952
diff changeset
493 XSETPROCESS (val, p);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
494 Vprocess_alist = Fcons (Fcons (name, val), Vprocess_alist);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
495 return val;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
496 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
497
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
498 remove_process (proc)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
499 register Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
500 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
501 register Lisp_Object pair;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
502
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
503 pair = Frassq (proc, Vprocess_alist);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
504 Vprocess_alist = Fdelq (pair, Vprocess_alist);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
505 Fset_marker (XPROCESS (proc)->mark, Qnil, Qnil);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
506
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
507 deactivate_process (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
508 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
509
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
510 DEFUN ("processp", Fprocessp, Sprocessp, 1, 1, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
511 "Return t if OBJECT is a process.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
512 (obj)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
513 Lisp_Object obj;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
514 {
9115
59bc2d010b5f (decode_status, Fprocessp, Fget_process, Fget_buffer_process, Fprocess_status,
Karl Heuer <kwzh@gnu.org>
parents: 9034
diff changeset
515 return PROCESSP (obj) ? Qt : Qnil;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
516 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
517
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
518 DEFUN ("get-process", Fget_process, Sget_process, 1, 1, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
519 "Return the process named NAME, or nil if there is none.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
520 (name)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
521 register Lisp_Object name;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
522 {
9115
59bc2d010b5f (decode_status, Fprocessp, Fget_process, Fget_buffer_process, Fprocess_status,
Karl Heuer <kwzh@gnu.org>
parents: 9034
diff changeset
523 if (PROCESSP (name))
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
524 return name;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
525 CHECK_STRING (name, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
526 return Fcdr (Fassoc (name, Vprocess_alist));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
527 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
528
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
529 DEFUN ("get-buffer-process", Fget_buffer_process, Sget_buffer_process, 1, 1, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
530 "Return the (or, a) process associated with BUFFER.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
531 BUFFER may be a buffer or the name of one.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
532 (name)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
533 register Lisp_Object name;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
534 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
535 register Lisp_Object buf, tail, proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
536
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
537 if (NILP (name)) return Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
538 buf = Fget_buffer (name);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
539 if (NILP (buf)) return Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
540
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
541 for (tail = Vprocess_alist; !NILP (tail); tail = Fcdr (tail))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
542 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
543 proc = Fcdr (Fcar (tail));
9115
59bc2d010b5f (decode_status, Fprocessp, Fget_process, Fget_buffer_process, Fprocess_status,
Karl Heuer <kwzh@gnu.org>
parents: 9034
diff changeset
544 if (PROCESSP (proc) && EQ (XPROCESS (proc)->buffer, buf))
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
545 return proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
546 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
547 return Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
548 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
549
808
707866b2a190 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 765
diff changeset
550 /* This is how commands for the user decode process arguments. It
707866b2a190 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 765
diff changeset
551 accepts a process, a process name, a buffer, a buffer name, or nil.
707866b2a190 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 765
diff changeset
552 Buffers denote the first process in the buffer, and nil denotes the
707866b2a190 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 765
diff changeset
553 current buffer. */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
554
4994
4146a65b9f02 (get_process): Add `static' to definition.
Richard M. Stallman <rms@gnu.org>
parents: 4914
diff changeset
555 static Lisp_Object
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
556 get_process (name)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
557 register Lisp_Object name;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
558 {
6313
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
559 register Lisp_Object proc, obj;
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
560 if (STRINGP (name))
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
561 {
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
562 obj = Fget_process (name);
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
563 if (NILP (obj))
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
564 obj = Fget_buffer (name);
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
565 if (NILP (obj))
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
566 error ("Process %s does not exist", XSTRING (name)->data);
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
567 }
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
568 else if (NILP (name))
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
569 obj = Fcurrent_buffer ();
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
570 else
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
571 obj = name;
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
572
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
573 /* Now obj should be either a buffer object or a process object.
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
574 */
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
575 if (BUFFERP (obj))
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
576 {
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
577 proc = Fget_buffer_process (obj);
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
578 if (NILP (proc))
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
579 error ("Buffer %s has no process", XSTRING (XBUFFER (obj)->name)->data);
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
580 }
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
581 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
582 {
6313
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
583 CHECK_PROCESS (obj, 0);
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
584 proc = obj;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
585 }
6313
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
586 return proc;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
587 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
588
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
589 DEFUN ("delete-process", Fdelete_process, Sdelete_process, 1, 1, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
590 "Delete PROCESS: kill it and forget about it immediately.\n\
808
707866b2a190 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 765
diff changeset
591 PROCESS may be a process, a buffer, the name of a process or buffer, or\n\
707866b2a190 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 765
diff changeset
592 nil, indicating the current buffer's process.")
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
593 (proc)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
594 register Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
595 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
596 proc = get_process (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
597 XPROCESS (proc)->raw_status_low = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
598 XPROCESS (proc)->raw_status_high = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
599 if (NETCONN_P (proc))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
600 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
601 XPROCESS (proc)->status = Fcons (Qexit, Fcons (make_number (0), Qnil));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
602 XSETINT (XPROCESS (proc)->tick, ++process_tick);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
603 }
5161
62c2601563c4 (Fdelete_process): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents: 5134
diff changeset
604 else if (XINT (XPROCESS (proc)->infd) >= 0)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
605 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
606 Fkill_process (proc, Qnil);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
607 /* Do this now, since remove_process will make sigchld_handler do nothing. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
608 XPROCESS (proc)->status
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
609 = Fcons (Qsignal, Fcons (make_number (SIGKILL), Qnil));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
610 XSETINT (XPROCESS (proc)->tick, ++process_tick);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
611 status_notify ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
612 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
613 remove_process (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
614 return Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
615 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
616
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
617 DEFUN ("process-status", Fprocess_status, Sprocess_status, 1, 1, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
618 "Return the status of PROCESS: a symbol, one of these:\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
619 run -- for a process that is running.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
620 stop -- for a process stopped but continuable.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
621 exit -- for a process that has exited.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
622 signal -- for a process that has got a fatal signal.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
623 open -- for a network stream connection that is open.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
624 closed -- for a network stream connection that is closed.\n\
808
707866b2a190 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 765
diff changeset
625 nil -- if arg is a process name and no such process exists.\n\
707866b2a190 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 765
diff changeset
626 PROCESS may be a process, a buffer, the name of a process or buffer, or\n\
707866b2a190 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 765
diff changeset
627 nil, indicating the current buffer's process.")
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
628 (proc)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
629 register Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
630 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
631 register struct Lisp_Process *p;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
632 register Lisp_Object status;
7937
bf963799d8be (Fprocess_status): Return nil for process name that has no process.
Richard M. Stallman <rms@gnu.org>
parents: 7893
diff changeset
633
bf963799d8be (Fprocess_status): Return nil for process name that has no process.
Richard M. Stallman <rms@gnu.org>
parents: 7893
diff changeset
634 if (STRINGP (proc))
bf963799d8be (Fprocess_status): Return nil for process name that has no process.
Richard M. Stallman <rms@gnu.org>
parents: 7893
diff changeset
635 proc = Fget_process (proc);
bf963799d8be (Fprocess_status): Return nil for process name that has no process.
Richard M. Stallman <rms@gnu.org>
parents: 7893
diff changeset
636 else
bf963799d8be (Fprocess_status): Return nil for process name that has no process.
Richard M. Stallman <rms@gnu.org>
parents: 7893
diff changeset
637 proc = get_process (proc);
bf963799d8be (Fprocess_status): Return nil for process name that has no process.
Richard M. Stallman <rms@gnu.org>
parents: 7893
diff changeset
638
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
639 if (NILP (proc))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
640 return proc;
7937
bf963799d8be (Fprocess_status): Return nil for process name that has no process.
Richard M. Stallman <rms@gnu.org>
parents: 7893
diff changeset
641
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
642 p = XPROCESS (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
643 if (!NILP (p->raw_status_low))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
644 update_status (p);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
645 status = p->status;
9115
59bc2d010b5f (decode_status, Fprocessp, Fget_process, Fget_buffer_process, Fprocess_status,
Karl Heuer <kwzh@gnu.org>
parents: 9034
diff changeset
646 if (CONSP (status))
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
647 status = XCONS (status)->car;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
648 if (NETCONN_P (proc))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
649 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
650 if (EQ (status, Qrun))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
651 status = Qopen;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
652 else if (EQ (status, Qexit))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
653 status = Qclosed;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
654 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
655 return status;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
656 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
657
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
658 DEFUN ("process-exit-status", Fprocess_exit_status, Sprocess_exit_status,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
659 1, 1, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
660 "Return the exit status of PROCESS or the signal number that killed it.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
661 If PROCESS has not yet exited or died, return 0.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
662 (proc)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
663 register Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
664 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
665 CHECK_PROCESS (proc, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
666 if (!NILP (XPROCESS (proc)->raw_status_low))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
667 update_status (XPROCESS (proc));
9115
59bc2d010b5f (decode_status, Fprocessp, Fget_process, Fget_buffer_process, Fprocess_status,
Karl Heuer <kwzh@gnu.org>
parents: 9034
diff changeset
668 if (CONSP (XPROCESS (proc)->status))
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
669 return XCONS (XCONS (XPROCESS (proc)->status)->cdr)->car;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
670 return make_number (0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
671 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
672
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
673 DEFUN ("process-id", Fprocess_id, Sprocess_id, 1, 1, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
674 "Return the process id of PROCESS.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
675 This is the pid of the Unix process which PROCESS uses or talks to.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
676 For a network connection, this value is nil.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
677 (proc)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
678 register Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
679 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
680 CHECK_PROCESS (proc, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
681 return XPROCESS (proc)->pid;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
682 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
683
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
684 DEFUN ("process-name", Fprocess_name, Sprocess_name, 1, 1, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
685 "Return the name of PROCESS, as a string.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
686 This is the name of the program invoked in PROCESS,\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
687 possibly modified to make it unique among process names.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
688 (proc)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
689 register Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
690 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
691 CHECK_PROCESS (proc, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
692 return XPROCESS (proc)->name;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
693 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
694
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
695 DEFUN ("process-command", Fprocess_command, Sprocess_command, 1, 1, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
696 "Return the command that was executed to start PROCESS.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
697 This is a list of strings, the first string being the program executed\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
698 and the rest of the strings being the arguments given to it.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
699 For a non-child channel, this is nil.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
700 (proc)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
701 register Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
702 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
703 CHECK_PROCESS (proc, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
704 return XPROCESS (proc)->command;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
705 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
706
9030
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
707 DEFUN ("process-tty-name", Fprocess_tty_name, Sprocess_tty_name, 1, 1, 0,
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
708 "Return the name of the terminal PROCESS uses, or nil if none.\n\
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
709 This is the terminal that the process itself reads and writes on,\n\
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
710 not the name of the pty that Emacs uses to talk with that terminal.")
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
711 (proc)
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
712 register Lisp_Object proc;
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
713 {
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
714 CHECK_PROCESS (proc, 0);
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
715 return XPROCESS (proc)->tty_name;
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
716 }
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
717
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
718 DEFUN ("set-process-buffer", Fset_process_buffer, Sset_process_buffer,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
719 2, 2, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
720 "Set buffer associated with PROCESS to BUFFER (a buffer, or nil).")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
721 (proc, buffer)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
722 register Lisp_Object proc, buffer;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
723 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
724 CHECK_PROCESS (proc, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
725 if (!NILP (buffer))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
726 CHECK_BUFFER (buffer, 1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
727 XPROCESS (proc)->buffer = buffer;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
728 return buffer;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
729 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
730
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
731 DEFUN ("process-buffer", Fprocess_buffer, Sprocess_buffer,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
732 1, 1, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
733 "Return the buffer PROCESS is associated with.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
734 Output from PROCESS is inserted in this buffer\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
735 unless PROCESS has a filter.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
736 (proc)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
737 register Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
738 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
739 CHECK_PROCESS (proc, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
740 return XPROCESS (proc)->buffer;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
741 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
742
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
743 DEFUN ("process-mark", Fprocess_mark, Sprocess_mark,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
744 1, 1, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
745 "Return the marker for the end of the last output from PROCESS.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
746 (proc)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
747 register Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
748 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
749 CHECK_PROCESS (proc, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
750 return XPROCESS (proc)->mark;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
751 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
752
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
753 DEFUN ("set-process-filter", Fset_process_filter, Sset_process_filter,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
754 2, 2, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
755 "Give PROCESS the filter function FILTER; nil means no filter.\n\
4870
c53deda13fa9 (status_notify): Don't read from process if filter is t.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
756 t means stop accepting output from the process.\n\
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
757 When a process has a filter, each time it does output\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
758 the entire string of output is passed to the filter.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
759 The filter gets two arguments: the process and the string of output.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
760 If the process has a filter, its buffer is not used for output.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
761 (proc, filter)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
762 register Lisp_Object proc, filter;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
763 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
764 CHECK_PROCESS (proc, 0);
4870
c53deda13fa9 (status_notify): Don't read from process if filter is t.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
765 if (EQ (filter, Qt))
9686
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
766 {
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
767 FD_CLR (XINT (XPROCESS (proc)->infd), &input_wait_mask);
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
768 FD_CLR (XINT (XPROCESS (proc)->infd), &non_keyboard_wait_mask);
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
769 }
4870
c53deda13fa9 (status_notify): Don't read from process if filter is t.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
770 else if (EQ (XPROCESS (proc)->filter, Qt))
9686
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
771 {
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
772 FD_SET (XINT (XPROCESS (proc)->infd), &input_wait_mask);
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
773 FD_SET (XINT (XPROCESS (proc)->infd), &non_keyboard_wait_mask);
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
774 }
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
775 XPROCESS (proc)->filter = filter;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
776 return filter;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
777 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
778
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
779 DEFUN ("process-filter", Fprocess_filter, Sprocess_filter,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
780 1, 1, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
781 "Returns the filter function of PROCESS; nil if none.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
782 See `set-process-filter' for more info on filter functions.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
783 (proc)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
784 register Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
785 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
786 CHECK_PROCESS (proc, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
787 return XPROCESS (proc)->filter;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
788 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
789
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
790 DEFUN ("set-process-sentinel", Fset_process_sentinel, Sset_process_sentinel,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
791 2, 2, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
792 "Give PROCESS the sentinel SENTINEL; nil for none.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
793 The sentinel is called as a function when the process changes state.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
794 It gets two arguments: the process, and a string describing the change.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
795 (proc, sentinel)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
796 register Lisp_Object proc, sentinel;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
797 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
798 CHECK_PROCESS (proc, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
799 XPROCESS (proc)->sentinel = sentinel;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
800 return sentinel;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
801 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
802
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
803 DEFUN ("process-sentinel", Fprocess_sentinel, Sprocess_sentinel,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
804 1, 1, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
805 "Return the sentinel of PROCESS; nil if none.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
806 See `set-process-sentinel' for more info on sentinels.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
807 (proc)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
808 register Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
809 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
810 CHECK_PROCESS (proc, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
811 return XPROCESS (proc)->sentinel;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
812 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
813
6830
bcaddbe53068 (Fset_process_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6823
diff changeset
814 DEFUN ("set-process-window-size", Fset_process_window_size,
bcaddbe53068 (Fset_process_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6823
diff changeset
815 Sset_process_window_size, 3, 3, 0,
bcaddbe53068 (Fset_process_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6823
diff changeset
816 "Tell PROCESS that it has logical window size HEIGHT and WIDTH.")
bcaddbe53068 (Fset_process_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6823
diff changeset
817 (proc, height, width)
bcaddbe53068 (Fset_process_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6823
diff changeset
818 register Lisp_Object proc, height, width;
bcaddbe53068 (Fset_process_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6823
diff changeset
819 {
bcaddbe53068 (Fset_process_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6823
diff changeset
820 CHECK_PROCESS (proc, 0);
bcaddbe53068 (Fset_process_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6823
diff changeset
821 CHECK_NATNUM (height, 0);
bcaddbe53068 (Fset_process_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6823
diff changeset
822 CHECK_NATNUM (width, 0);
bcaddbe53068 (Fset_process_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6823
diff changeset
823 if (set_window_size (XINT (XPROCESS (proc)->infd),
bcaddbe53068 (Fset_process_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6823
diff changeset
824 XINT (height), XINT(width)) <= 0)
bcaddbe53068 (Fset_process_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6823
diff changeset
825 return Qnil;
bcaddbe53068 (Fset_process_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6823
diff changeset
826 else
bcaddbe53068 (Fset_process_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6823
diff changeset
827 return Qt;
bcaddbe53068 (Fset_process_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6823
diff changeset
828 }
bcaddbe53068 (Fset_process_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6823
diff changeset
829
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
830 DEFUN ("process-kill-without-query", Fprocess_kill_without_query,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
831 Sprocess_kill_without_query, 1, 2, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
832 "Say no query needed if PROCESS is running when Emacs is exited.\n\
5846
1322c4daeda2 (Fprocess_kill_without_query): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 5579
diff changeset
833 Optional second argument if non-nil says to require a query.\n\
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
834 Value is t if a query was formerly required.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
835 (proc, value)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
836 register Lisp_Object proc, value;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
837 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
838 Lisp_Object tem;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
839
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
840 CHECK_PROCESS (proc, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
841 tem = XPROCESS (proc)->kill_without_query;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
842 XPROCESS (proc)->kill_without_query = Fnull (value);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
843
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
844 return Fnull (tem);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
845 }
4231
91a883c56382 (Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents: 4057
diff changeset
846
91a883c56382 (Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents: 4057
diff changeset
847 #if 0 /* Turned off because we don't currently record this info
91a883c56382 (Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents: 4057
diff changeset
848 in the process. Perhaps add it. */
91a883c56382 (Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents: 4057
diff changeset
849 DEFUN ("process-connection", Fprocess_connection, Sprocess_connection, 1, 1, 0,
91a883c56382 (Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents: 4057
diff changeset
850 "Return the connection type of `PROCESS'.\n\
91a883c56382 (Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents: 4057
diff changeset
851 The value is `nil' for a pipe,\n\
91a883c56382 (Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents: 4057
diff changeset
852 `t' or `pty' for a pty, or `stream' for a socket connection.")
91a883c56382 (Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents: 4057
diff changeset
853 (process)
91a883c56382 (Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents: 4057
diff changeset
854 Lisp_Object process;
91a883c56382 (Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents: 4057
diff changeset
855 {
91a883c56382 (Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents: 4057
diff changeset
856 return XPROCESS (process)->type;
91a883c56382 (Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents: 4057
diff changeset
857 }
91a883c56382 (Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents: 4057
diff changeset
858 #endif
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
859
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
860 Lisp_Object
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
861 list_processes_1 ()
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
862 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
863 register Lisp_Object tail, tem;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
864 Lisp_Object proc, minspace, tem1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
865 register struct buffer *old = current_buffer;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
866 register struct Lisp_Process *p;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
867 register int state;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
868 char tembuf[80];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
869
9318
a14cc1712337 (make_process, list_processes_1, create_process, Faccept_process_output,
Karl Heuer <kwzh@gnu.org>
parents: 9277
diff changeset
870 XSETFASTINT (minspace, 1);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
871
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
872 set_buffer_internal (XBUFFER (Vstandard_output));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
873 Fbuffer_disable_undo (Vstandard_output);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
874
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
875 current_buffer->truncate_lines = Qt;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
876
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
877 write_string ("\
9697
328b8bc31f73 (list_processes_1): Print tty name.
Karl Heuer <kwzh@gnu.org>
parents: 9686
diff changeset
878 Proc Status Buffer Tty Command\n\
328b8bc31f73 (list_processes_1): Print tty name.
Karl Heuer <kwzh@gnu.org>
parents: 9686
diff changeset
879 ---- ------ ------ --- -------\n", -1);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
880
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
881 for (tail = Vprocess_alist; !NILP (tail); tail = Fcdr (tail))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
882 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
883 Lisp_Object symbol;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
884
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
885 proc = Fcdr (Fcar (tail));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
886 p = XPROCESS (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
887 if (NILP (p->childp))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
888 continue;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
889
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
890 Finsert (1, &p->name);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
891 Findent_to (make_number (13), minspace);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
892
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
893 if (!NILP (p->raw_status_low))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
894 update_status (p);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
895 symbol = p->status;
9115
59bc2d010b5f (decode_status, Fprocessp, Fget_process, Fget_buffer_process, Fprocess_status,
Karl Heuer <kwzh@gnu.org>
parents: 9034
diff changeset
896 if (CONSP (p->status))
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
897 symbol = XCONS (p->status)->car;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
898
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
899
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
900 if (EQ (symbol, Qsignal))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
901 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
902 Lisp_Object tem;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
903 tem = Fcar (Fcdr (p->status));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
904 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
905 if (XINT (tem) < NSIG)
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
906 write_string (sys_errlist [XINT (tem)], -1);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
907 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
908 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
909 Fprinc (symbol, Qnil);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
910 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
911 else if (NETCONN_P (proc))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
912 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
913 if (EQ (symbol, Qrun))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
914 write_string ("open", -1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
915 else if (EQ (symbol, Qexit))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
916 write_string ("closed", -1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
917 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
918 Fprinc (symbol, Qnil);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
919 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
920 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
921 Fprinc (symbol, Qnil);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
922
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
923 if (EQ (symbol, Qexit))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
924 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
925 Lisp_Object tem;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
926 tem = Fcar (Fcdr (p->status));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
927 if (XFASTINT (tem))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
928 {
11695
0f9b9c375416 (list_processes_1): Cast XFASTINT for passing to sprintf.
Richard M. Stallman <rms@gnu.org>
parents: 11609
diff changeset
929 sprintf (tembuf, " %d", (int) XFASTINT (tem));
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
930 write_string (tembuf, -1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
931 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
932 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
933
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
934 if (EQ (symbol, Qsignal) || EQ (symbol, Qexit))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
935 remove_process (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
936
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
937 Findent_to (make_number (22), minspace);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
938 if (NILP (p->buffer))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
939 insert_string ("(none)");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
940 else if (NILP (XBUFFER (p->buffer)->name))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
941 insert_string ("(Killed)");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
942 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
943 Finsert (1, &XBUFFER (p->buffer)->name);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
944
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
945 Findent_to (make_number (37), minspace);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
946
9697
328b8bc31f73 (list_processes_1): Print tty name.
Karl Heuer <kwzh@gnu.org>
parents: 9686
diff changeset
947 if (STRINGP (p->tty_name))
328b8bc31f73 (list_processes_1): Print tty name.
Karl Heuer <kwzh@gnu.org>
parents: 9686
diff changeset
948 Finsert (1, &p->tty_name);
328b8bc31f73 (list_processes_1): Print tty name.
Karl Heuer <kwzh@gnu.org>
parents: 9686
diff changeset
949 else
328b8bc31f73 (list_processes_1): Print tty name.
Karl Heuer <kwzh@gnu.org>
parents: 9686
diff changeset
950 insert_string ("(none)");
328b8bc31f73 (list_processes_1): Print tty name.
Karl Heuer <kwzh@gnu.org>
parents: 9686
diff changeset
951
328b8bc31f73 (list_processes_1): Print tty name.
Karl Heuer <kwzh@gnu.org>
parents: 9686
diff changeset
952 Findent_to (make_number (49), minspace);
328b8bc31f73 (list_processes_1): Print tty name.
Karl Heuer <kwzh@gnu.org>
parents: 9686
diff changeset
953
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
954 if (NETCONN_P (proc))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
955 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
956 sprintf (tembuf, "(network stream connection to %s)\n",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
957 XSTRING (p->childp)->data);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
958 insert_string (tembuf);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
959 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
960 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
961 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
962 tem = p->command;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
963 while (1)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
964 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
965 tem1 = Fcar (tem);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
966 Finsert (1, &tem1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
967 tem = Fcdr (tem);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
968 if (NILP (tem))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
969 break;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
970 insert_string (" ");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
971 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
972 insert_string ("\n");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
973 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
974 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
975 return Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
976 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
977
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
978 DEFUN ("list-processes", Flist_processes, Slist_processes, 0, 0, "",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
979 "Display a list of all processes.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
980 \(Any processes listed as Exited or Signaled are actually eliminated\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
981 after the listing is made.)")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
982 ()
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
983 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
984 internal_with_output_to_temp_buffer ("*Process List*",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
985 list_processes_1, Qnil);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
986 return Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
987 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
988
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
989 DEFUN ("process-list", Fprocess_list, Sprocess_list, 0, 0, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
990 "Return a list of all processes.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
991 ()
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
992 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
993 return Fmapcar (Qcdr, Vprocess_alist);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
994 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
995
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
996 /* Starting asynchronous inferior processes. */
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
997
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
998 static Lisp_Object start_process_unwind ();
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
999
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1000 DEFUN ("start-process", Fstart_process, Sstart_process, 3, MANY, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1001 "Start a program in a subprocess. Return the process object for it.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1002 Args are NAME BUFFER PROGRAM &rest PROGRAM-ARGS\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1003 NAME is name for process. It is modified if necessary to make it unique.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1004 BUFFER is the buffer or (buffer-name) to associate with the process.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1005 Process output goes at end of that buffer, unless you specify\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1006 an output stream or filter function to handle the output.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1007 BUFFER may be also nil, meaning that this process is not associated\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1008 with any buffer\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1009 Third arg is program file name. It is searched for as in the shell.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1010 Remaining arguments are strings to give program as arguments.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1011 (nargs, args)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1012 int nargs;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1013 register Lisp_Object *args;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1014 {
1683
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1015 Lisp_Object buffer, name, program, proc, current_dir, tem;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1016 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1017 register unsigned char *new_argv;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1018 int len;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1019 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1020 register unsigned char **new_argv;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1021 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1022 register int i;
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1023 int count = specpdl_ptr - specpdl;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1024
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1025 buffer = args[1];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1026 if (!NILP (buffer))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1027 buffer = Fget_buffer_create (buffer);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1028
1683
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1029 /* Make sure that the child will be able to chdir to the current
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1030 buffer's current directory, or its unhandled equivalent. We
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1031 can't just have the child check for an error when it does the
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1032 chdir, since it's in a vfork.
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1033
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1034 We have to GCPRO around this because Fexpand_file_name and
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1035 Funhandled_file_name_directory might call a file name handling
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1036 function. The argument list is protected by the caller, so all
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1037 we really have to worry about is buffer. */
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1038 {
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1039 struct gcpro gcpro1, gcpro2;
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1040
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1041 current_dir = current_buffer->directory;
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1042
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1043 GCPRO2 (buffer, current_dir);
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1044
10744
54a76e0b97ec (Fstart_process): Make process marker point into proc buf.
Richard M. Stallman <rms@gnu.org>
parents: 10548
diff changeset
1045 current_dir
54a76e0b97ec (Fstart_process): Make process marker point into proc buf.
Richard M. Stallman <rms@gnu.org>
parents: 10548
diff changeset
1046 = expand_and_dir_to_file (Funhandled_file_name_directory (current_dir),
54a76e0b97ec (Fstart_process): Make process marker point into proc buf.
Richard M. Stallman <rms@gnu.org>
parents: 10548
diff changeset
1047 Qnil);
1683
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1048 if (NILP (Ffile_accessible_directory_p (current_dir)))
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1049 report_file_error ("Setting current directory",
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1050 Fcons (current_buffer->directory, Qnil));
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1051
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1052 UNGCPRO;
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1053 }
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1054
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1055 name = args[0];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1056 CHECK_STRING (name, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1057
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1058 program = args[2];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1059
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1060 CHECK_STRING (program, 2);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1061
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1062 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1063 /* Make a one member argv with all args concatenated
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1064 together separated by a blank. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1065 len = XSTRING (program)->size + 2;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1066 for (i = 3; i < nargs; i++)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1067 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1068 tem = args[i];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1069 CHECK_STRING (tem, i);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1070 len += XSTRING (tem)->size + 1; /* count the blank */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1071 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1072 new_argv = (unsigned char *) alloca (len);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1073 strcpy (new_argv, XSTRING (program)->data);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1074 for (i = 3; i < nargs; i++)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1075 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1076 tem = args[i];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1077 CHECK_STRING (tem, i);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1078 strcat (new_argv, " ");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1079 strcat (new_argv, XSTRING (tem)->data);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1080 }
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1081 /* Need to add code here to check for program existence on VMS */
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1082
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1083 #else /* not VMS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1084 new_argv = (unsigned char **) alloca ((nargs - 1) * sizeof (char *));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1085
6390
9f8ce71435de (Fstart_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6345
diff changeset
1086 /* If program file name is not absolute, search our path for it */
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1087 if (!IS_DIRECTORY_SEP (XSTRING (program)->data[0])
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1088 && !(XSTRING (program)->size > 1
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1089 && IS_DEVICE_SEP (XSTRING (program)->data[1])))
6390
9f8ce71435de (Fstart_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6345
diff changeset
1090 {
9f8ce71435de (Fstart_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6345
diff changeset
1091 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
9f8ce71435de (Fstart_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6345
diff changeset
1092
9f8ce71435de (Fstart_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6345
diff changeset
1093 tem = Qnil;
9f8ce71435de (Fstart_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6345
diff changeset
1094 GCPRO4 (name, program, buffer, current_dir);
9f8ce71435de (Fstart_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6345
diff changeset
1095 openp (Vexec_path, program, EXEC_SUFFIXES, &tem, 1);
9f8ce71435de (Fstart_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6345
diff changeset
1096 UNGCPRO;
9f8ce71435de (Fstart_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6345
diff changeset
1097 if (NILP (tem))
9f8ce71435de (Fstart_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6345
diff changeset
1098 report_file_error ("Searching for program", Fcons (program, Qnil));
12648
98aba238cf62 (Fstart_process): Don't expand the file name before trying openp.
Richard M. Stallman <rms@gnu.org>
parents: 12541
diff changeset
1099 tem = Fexpand_file_name (tem, Qnil);
6390
9f8ce71435de (Fstart_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6345
diff changeset
1100 new_argv[0] = XSTRING (tem)->data;
9f8ce71435de (Fstart_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6345
diff changeset
1101 }
9f8ce71435de (Fstart_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6345
diff changeset
1102 else
12491
4ad7be34ece1 (Fstart_process): Expand PROGRAM.
Richard M. Stallman <rms@gnu.org>
parents: 12378
diff changeset
1103 {
4ad7be34ece1 (Fstart_process): Expand PROGRAM.
Richard M. Stallman <rms@gnu.org>
parents: 12378
diff changeset
1104 if (!NILP (Ffile_directory_p (program)))
4ad7be34ece1 (Fstart_process): Expand PROGRAM.
Richard M. Stallman <rms@gnu.org>
parents: 12378
diff changeset
1105 error ("Specified program for new process is a directory");
4ad7be34ece1 (Fstart_process): Expand PROGRAM.
Richard M. Stallman <rms@gnu.org>
parents: 12378
diff changeset
1106
4ad7be34ece1 (Fstart_process): Expand PROGRAM.
Richard M. Stallman <rms@gnu.org>
parents: 12378
diff changeset
1107 new_argv[0] = XSTRING (program)->data;
4ad7be34ece1 (Fstart_process): Expand PROGRAM.
Richard M. Stallman <rms@gnu.org>
parents: 12378
diff changeset
1108 }
6390
9f8ce71435de (Fstart_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6345
diff changeset
1109
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1110 for (i = 3; i < nargs; i++)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1111 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1112 tem = args[i];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1113 CHECK_STRING (tem, i);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1114 new_argv[i - 2] = XSTRING (tem)->data;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1115 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1116 new_argv[i - 2] = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1117 #endif /* not VMS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1118
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1119 proc = make_process (name);
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1120 /* If an error occurs and we can't start the process, we want to
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1121 remove it from the process list. This means that each error
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1122 check in create_process doesn't need to call remove_process
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1123 itself; it's all taken care of here. */
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1124 record_unwind_protect (start_process_unwind, proc);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1125
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1126 XPROCESS (proc)->childp = Qt;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1127 XPROCESS (proc)->command_channel_p = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1128 XPROCESS (proc)->buffer = buffer;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1129 XPROCESS (proc)->sentinel = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1130 XPROCESS (proc)->filter = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1131 XPROCESS (proc)->command = Flist (nargs - 2, args + 2);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1132
10744
54a76e0b97ec (Fstart_process): Make process marker point into proc buf.
Richard M. Stallman <rms@gnu.org>
parents: 10548
diff changeset
1133 /* Make the process marker point into the process buffer (if any). */
54a76e0b97ec (Fstart_process): Make process marker point into proc buf.
Richard M. Stallman <rms@gnu.org>
parents: 10548
diff changeset
1134 if (!NILP (buffer))
54a76e0b97ec (Fstart_process): Make process marker point into proc buf.
Richard M. Stallman <rms@gnu.org>
parents: 10548
diff changeset
1135 Fset_marker (XPROCESS (proc)->mark,
54a76e0b97ec (Fstart_process): Make process marker point into proc buf.
Richard M. Stallman <rms@gnu.org>
parents: 10548
diff changeset
1136 make_number (BUF_ZV (XBUFFER (buffer))), buffer);
54a76e0b97ec (Fstart_process): Make process marker point into proc buf.
Richard M. Stallman <rms@gnu.org>
parents: 10548
diff changeset
1137
1683
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1138 create_process (proc, new_argv, current_dir);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1139
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1140 return unbind_to (count, proc);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1141 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1142
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1143 /* This function is the unwind_protect form for Fstart_process. If
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1144 PROC doesn't have its pid set, then we know someone has signalled
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1145 an error and the process wasn't started successfully, so we should
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1146 remove it from the process list. */
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1147 static Lisp_Object
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1148 start_process_unwind (proc)
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1149 Lisp_Object proc;
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1150 {
9115
59bc2d010b5f (decode_status, Fprocessp, Fget_process, Fget_buffer_process, Fprocess_status,
Karl Heuer <kwzh@gnu.org>
parents: 9034
diff changeset
1151 if (!PROCESSP (proc))
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1152 abort ();
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1153
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1154 /* Was PROC started successfully? */
3685
47d7fda8a609 (start_process_unwind): Use XINT.
Richard M. Stallman <rms@gnu.org>
parents: 3666
diff changeset
1155 if (XINT (XPROCESS (proc)->pid) <= 0)
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1156 remove_process (proc);
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1157
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1158 return Qnil;
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1159 }
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1160
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1161
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1162 SIGTYPE
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1163 create_process_1 (signo)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1164 int signo;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1165 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1166 #ifdef USG
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1167 /* USG systems forget handlers when they are used;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1168 must reestablish each time */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1169 signal (signo, create_process_1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1170 #endif /* USG */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1171 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1172
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1173 #if 0 /* This doesn't work; see the note before sigchld_handler. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1174 #ifdef USG
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1175 #ifdef SIGCHLD
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1176 /* Mimic blocking of signals on system V, which doesn't really have it. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1177
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1178 /* Nonzero means we got a SIGCHLD when it was supposed to be blocked. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1179 int sigchld_deferred;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1180
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1181 SIGTYPE
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1182 create_process_sigchld ()
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1183 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1184 signal (SIGCHLD, create_process_sigchld);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1185
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1186 sigchld_deferred = 1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1187 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1188 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1189 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1190 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1191
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1192 #ifndef VMS /* VMS version of this function is in vmsproc.c. */
1683
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1193 create_process (process, new_argv, current_dir)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1194 Lisp_Object process;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1195 char **new_argv;
1683
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1196 Lisp_Object current_dir;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1197 {
11926
40d7e6f04ebe (create_process, send_process): Add volatile qualifiers.
Karl Heuer <kwzh@gnu.org>
parents: 11845
diff changeset
1198 int pid, inchannel, outchannel;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1199 int sv[2];
13709
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1200 #ifdef POSIX_SIGNALS
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1201 sigset_t procmask;
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1202 sigset_t blocked;
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1203 struct sigaction sigint_action;
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1204 struct sigaction sigquit_action;
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1205 #ifdef AIX
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1206 struct sigaction sighup_action;
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1207 #endif
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1208 #else /* !POSIX_SIGNALS */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1209 #ifdef SIGCHLD
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1210 SIGTYPE (*sigchld)();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1211 #endif
13709
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1212 #endif /* !POSIX_SIGNALS */
11926
40d7e6f04ebe (create_process, send_process): Add volatile qualifiers.
Karl Heuer <kwzh@gnu.org>
parents: 11845
diff changeset
1213 /* Use volatile to protect variables from being clobbered by longjmp. */
40d7e6f04ebe (create_process, send_process): Add volatile qualifiers.
Karl Heuer <kwzh@gnu.org>
parents: 11845
diff changeset
1214 volatile int forkin, forkout;
40d7e6f04ebe (create_process, send_process): Add volatile qualifiers.
Karl Heuer <kwzh@gnu.org>
parents: 11845
diff changeset
1215 volatile int pty_flag = 0;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1216 extern char **environ;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1217
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1218 inchannel = outchannel = -1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1219
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1220 #ifdef HAVE_PTYS
7748
9a9c8372af80 (create_process): Get a pty for any non-nil Vprocess_connection_type value.
Richard M. Stallman <rms@gnu.org>
parents: 7605
diff changeset
1221 if (!NILP (Vprocess_connection_type))
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1222 outchannel = inchannel = allocate_pty ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1223
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1224 if (inchannel >= 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1225 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1226 #ifndef USG
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1227 /* On USG systems it does not work to open the pty's tty here
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1228 and then close and reopen it in the child. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1229 #ifdef O_NOCTTY
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1230 /* Don't let this terminal become our controlling terminal
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1231 (in case we don't have one). */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1232 forkout = forkin = open (pty_name, O_RDWR | O_NOCTTY, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1233 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1234 forkout = forkin = open (pty_name, O_RDWR, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1235 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1236 if (forkin < 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1237 report_file_error ("Opening pty", Qnil);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1238 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1239 forkin = forkout = -1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1240 #endif /* not USG */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1241 pty_flag = 1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1242 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1243 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1244 #endif /* HAVE_PTYS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1245 #ifdef SKTPAIR
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1246 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1247 if (socketpair (AF_UNIX, SOCK_STREAM, 0, sv) < 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1248 report_file_error ("Opening socketpair", Qnil);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1249 outchannel = inchannel = sv[0];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1250 forkout = forkin = sv[1];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1251 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1252 #else /* not SKTPAIR */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1253 {
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1254 #ifdef WINDOWSNT
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1255 pipe_with_inherited_out (sv);
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1256 inchannel = sv[0];
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1257 forkout = sv[1];
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1258
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1259 pipe_with_inherited_in (sv);
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1260 forkin = sv[0];
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1261 outchannel = sv[1];
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1262 #else /* not WINDOWSNT */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1263 pipe (sv);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1264 inchannel = sv[0];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1265 forkout = sv[1];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1266 pipe (sv);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1267 outchannel = sv[1];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1268 forkin = sv[0];
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1269 #endif /* not WINDOWSNT */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1270 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1271 #endif /* not SKTPAIR */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1272
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1273 #if 0
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1274 /* Replaced by close_process_descs */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1275 set_exclusive_use (inchannel);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1276 set_exclusive_use (outchannel);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1277 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1278
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1279 /* Stride people say it's a mystery why this is needed
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1280 as well as the O_NDELAY, but that it fails without this. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1281 #if defined (STRIDE) || (defined (pfa) && defined (HAVE_PTYS))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1282 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1283 int one = 1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1284 ioctl (inchannel, FIONBIO, &one);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1285 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1286 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1287
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1288 #ifdef O_NONBLOCK
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1289 fcntl (inchannel, F_SETFL, O_NONBLOCK);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1290 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1291 #ifdef O_NDELAY
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1292 fcntl (inchannel, F_SETFL, O_NDELAY);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1293 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1294 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1295
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1296 /* Record this as an active process, with its channels.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1297 As a result, child_setup will close Emacs's side of the pipes. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1298 chan_process[inchannel] = process;
9277
21f6120be5ba (make_process, create_process, Fopen_network_stream, deactivate_process,
Karl Heuer <kwzh@gnu.org>
parents: 9115
diff changeset
1299 XSETINT (XPROCESS (process)->infd, inchannel);
21f6120be5ba (make_process, create_process, Fopen_network_stream, deactivate_process,
Karl Heuer <kwzh@gnu.org>
parents: 9115
diff changeset
1300 XSETINT (XPROCESS (process)->outfd, outchannel);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1301 /* Record the tty descriptor used in the subprocess. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1302 if (forkin < 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1303 XPROCESS (process)->subtty = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1304 else
9318
a14cc1712337 (make_process, list_processes_1, create_process, Faccept_process_output,
Karl Heuer <kwzh@gnu.org>
parents: 9277
diff changeset
1305 XSETFASTINT (XPROCESS (process)->subtty, forkin);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1306 XPROCESS (process)->pty_flag = (pty_flag ? Qt : Qnil);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1307 XPROCESS (process)->status = Qrun;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1308
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1309 /* Delay interrupts until we have a chance to store
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1310 the new fork's pid in its process structure */
13709
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1311 #ifdef POSIX_SIGNALS
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1312 sigemptyset (&blocked);
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1313 #ifdef SIGCHLD
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1314 sigaddset (&blocked, SIGCHLD);
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1315 #endif
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1316 #ifdef HAVE_VFORK
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1317 /* On many hosts (e.g. Solaris 2.4), if a vforked child calls `signal',
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1318 this sets the parent's signal handlers as well as the child's.
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1319 So delay all interrupts whose handlers the child might munge,
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1320 and record the current handlers so they can be restored later. */
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1321 sigaddset (&blocked, SIGINT ); sigaction (SIGINT , 0, &sigint_action );
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1322 sigaddset (&blocked, SIGQUIT); sigaction (SIGQUIT, 0, &sigquit_action);
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1323 #ifdef AIX
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1324 sigaddset (&blocked, SIGHUP ); sigaction (SIGHUP , 0, &sighup_action );
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1325 #endif
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1326 #endif /* HAVE_VFORK */
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1327 sigprocmask (SIG_BLOCK, &blocked, &procmask);
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1328 #else /* !POSIX_SIGNALS */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1329 #ifdef SIGCHLD
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1330 #ifdef BSD4_1
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1331 sighold (SIGCHLD);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1332 #else /* not BSD4_1 */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1333 #if defined (BSD) || defined (UNIPLUS) || defined (HPUX)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1334 sigsetmask (sigmask (SIGCHLD));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1335 #else /* ordinary USG */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1336 #if 0
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1337 sigchld_deferred = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1338 sigchld = signal (SIGCHLD, create_process_sigchld);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1339 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1340 #endif /* ordinary USG */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1341 #endif /* not BSD4_1 */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1342 #endif /* SIGCHLD */
13709
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1343 #endif /* !POSIX_SIGNALS */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1344
7893
e54617027a47 (create_process): Set input_wait_mask before forking.
Karl Heuer <kwzh@gnu.org>
parents: 7884
diff changeset
1345 FD_SET (inchannel, &input_wait_mask);
9686
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
1346 FD_SET (inchannel, &non_keyboard_wait_mask);
7893
e54617027a47 (create_process): Set input_wait_mask before forking.
Karl Heuer <kwzh@gnu.org>
parents: 7884
diff changeset
1347 if (inchannel > max_process_desc)
e54617027a47 (create_process): Set input_wait_mask before forking.
Karl Heuer <kwzh@gnu.org>
parents: 7884
diff changeset
1348 max_process_desc = inchannel;
e54617027a47 (create_process): Set input_wait_mask before forking.
Karl Heuer <kwzh@gnu.org>
parents: 7884
diff changeset
1349
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1350 /* Until we store the proper pid, enable sigchld_handler
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1351 to recognize an unknown pid as standing for this process.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1352 It is very important not to let this `marker' value stay
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1353 in the table after this function has returned; if it does
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1354 it might cause call-process to hang and subsequent asynchronous
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1355 processes to get their return values scrambled. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1356 XSETINT (XPROCESS (process)->pid, -1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1357
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1358 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1359 /* child_setup must clobber environ on systems with true vfork.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1360 Protect it from permanent change. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1361 char **save_environ = environ;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1362
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1363 #ifndef WINDOWSNT
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1364 pid = vfork ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1365 if (pid == 0)
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1366 #endif /* not WINDOWSNT */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1367 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1368 int xforkin = forkin;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1369 int xforkout = forkout;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1370
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1371 #if 0 /* This was probably a mistake--it duplicates code later on,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1372 but fails to handle all the cases. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1373 /* Make sure SIGCHLD is not blocked in the child. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1374 sigsetmask (SIGEMPTYMASK);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1375 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1376
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1377 /* Make the pty be the controlling terminal of the process. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1378 #ifdef HAVE_PTYS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1379 /* First, disconnect its current controlling terminal. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1380 #ifdef HAVE_SETSID
7266
f87808bd90e9 (create_process): Undo April 19 setsid change.
Richard M. Stallman <rms@gnu.org>
parents: 7238
diff changeset
1381 /* We tried doing setsid only if pty_flag, but it caused
f87808bd90e9 (create_process): Undo April 19 setsid change.
Richard M. Stallman <rms@gnu.org>
parents: 7238
diff changeset
1382 process_set_signal to fail on SGI when using a pipe. */
f87808bd90e9 (create_process): Undo April 19 setsid change.
Richard M. Stallman <rms@gnu.org>
parents: 7238
diff changeset
1383 setsid ();
1030
9934251d8219 (WCOREDUMP): Define only if not defined.
Richard M. Stallman <rms@gnu.org>
parents: 1012
diff changeset
1384 /* Make the pty's terminal the controlling terminal. */
3023
cfd999700613 (create_process): Ignore retval from TIOCSTTY.
Richard M. Stallman <rms@gnu.org>
parents: 2961
diff changeset
1385 if (pty_flag)
6975
b7411e378b65 (create_process): Call setsid only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents: 6947
diff changeset
1386 {
b7411e378b65 (create_process): Call setsid only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents: 6947
diff changeset
1387 #ifdef TIOCSCTTY
b7411e378b65 (create_process): Call setsid only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents: 6947
diff changeset
1388 /* We ignore the return value
b7411e378b65 (create_process): Call setsid only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents: 6947
diff changeset
1389 because faith@cs.unc.edu says that is necessary on Linux. */
b7411e378b65 (create_process): Call setsid only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents: 6947
diff changeset
1390 ioctl (xforkin, TIOCSCTTY, 0);
1030
9934251d8219 (WCOREDUMP): Define only if not defined.
Richard M. Stallman <rms@gnu.org>
parents: 1012
diff changeset
1391 #endif
6975
b7411e378b65 (create_process): Call setsid only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents: 6947
diff changeset
1392 }
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1393 #else /* not HAVE_SETSID */
5181
31874690939f (create_process): Do setpgrp for USG regardless of IRIX.
Richard M. Stallman <rms@gnu.org>
parents: 5161
diff changeset
1394 #ifdef USG
5347
21bffe027a7d (create_process) [NTTYDISC]: Set the tty line discipline.
Richard M. Stallman <rms@gnu.org>
parents: 5332
diff changeset
1395 /* It's very important to call setpgrp here and no time
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1396 afterwards. Otherwise, we lose our controlling tty which
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1397 is set when we open the pty. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1398 setpgrp ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1399 #endif /* USG */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1400 #endif /* not HAVE_SETSID */
7116
d35b11eed89f (create_process) [HAVE_TERMIOS && LDISC1]: Use tcsetattr.
Karl Heuer <kwzh@gnu.org>
parents: 7059
diff changeset
1401 #if defined (HAVE_TERMIOS) && defined (LDISC1)
d35b11eed89f (create_process) [HAVE_TERMIOS && LDISC1]: Use tcsetattr.
Karl Heuer <kwzh@gnu.org>
parents: 7059
diff changeset
1402 if (pty_flag && xforkin >= 0)
d35b11eed89f (create_process) [HAVE_TERMIOS && LDISC1]: Use tcsetattr.
Karl Heuer <kwzh@gnu.org>
parents: 7059
diff changeset
1403 {
d35b11eed89f (create_process) [HAVE_TERMIOS && LDISC1]: Use tcsetattr.
Karl Heuer <kwzh@gnu.org>
parents: 7059
diff changeset
1404 struct termios t;
d35b11eed89f (create_process) [HAVE_TERMIOS && LDISC1]: Use tcsetattr.
Karl Heuer <kwzh@gnu.org>
parents: 7059
diff changeset
1405 tcgetattr (xforkin, &t);
d35b11eed89f (create_process) [HAVE_TERMIOS && LDISC1]: Use tcsetattr.
Karl Heuer <kwzh@gnu.org>
parents: 7059
diff changeset
1406 t.c_lflag = LDISC1;
d35b11eed89f (create_process) [HAVE_TERMIOS && LDISC1]: Use tcsetattr.
Karl Heuer <kwzh@gnu.org>
parents: 7059
diff changeset
1407 if (tcsetattr (xforkin, TCSANOW, &t) < 0)
d35b11eed89f (create_process) [HAVE_TERMIOS && LDISC1]: Use tcsetattr.
Karl Heuer <kwzh@gnu.org>
parents: 7059
diff changeset
1408 write (1, "create_process/tcsetattr LDISC1 failed\n", 39);
d35b11eed89f (create_process) [HAVE_TERMIOS && LDISC1]: Use tcsetattr.
Karl Heuer <kwzh@gnu.org>
parents: 7059
diff changeset
1409 }
d35b11eed89f (create_process) [HAVE_TERMIOS && LDISC1]: Use tcsetattr.
Karl Heuer <kwzh@gnu.org>
parents: 7059
diff changeset
1410 #else
6947
c5f990fad6bb (create_process): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 6928
diff changeset
1411 #if defined (NTTYDISC) && defined (TIOCSETD)
6393
7de1d288460e (create_process): Skip the ioctl if fd is -1.
Karl Heuer <kwzh@gnu.org>
parents: 6390
diff changeset
1412 if (pty_flag && xforkin >= 0)
5548
36d2fd17f833 (create_process): Set line discipline only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents: 5543
diff changeset
1413 {
36d2fd17f833 (create_process): Set line discipline only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents: 5543
diff changeset
1414 /* Use new line discipline. */
36d2fd17f833 (create_process): Set line discipline only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents: 5543
diff changeset
1415 int ldisc = NTTYDISC;
7605
53186c2698e5 (create_process): Don't complain about error from TIOCSETD.
Richard M. Stallman <rms@gnu.org>
parents: 7486
diff changeset
1416 ioctl (xforkin, TIOCSETD, &ldisc);
5548
36d2fd17f833 (create_process): Set line discipline only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents: 5543
diff changeset
1417 }
5347
21bffe027a7d (create_process) [NTTYDISC]: Set the tty line discipline.
Richard M. Stallman <rms@gnu.org>
parents: 5332
diff changeset
1418 #endif
7116
d35b11eed89f (create_process) [HAVE_TERMIOS && LDISC1]: Use tcsetattr.
Karl Heuer <kwzh@gnu.org>
parents: 7059
diff changeset
1419 #endif
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1420 #ifdef TIOCNOTTY
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1421 /* In 4.3BSD, the TIOCSPGRP bug has been fixed, and now you
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1422 can do TIOCSPGRP only to the process's controlling tty. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1423 if (pty_flag)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1424 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1425 /* I wonder: would just ioctl (0, TIOCNOTTY, 0) work here?
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1426 I can't test it since I don't have 4.3. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1427 int j = open ("/dev/tty", O_RDWR, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1428 ioctl (j, TIOCNOTTY, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1429 close (j);
3826
647bef18618f Changes for Irix 4.0, tested this time:
Jim Blandy <jimb@redhat.com>
parents: 3810
diff changeset
1430 #ifndef USG
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1431 /* In order to get a controlling terminal on some versions
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1432 of BSD, it is necessary to put the process in pgrp 0
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1433 before it opens the terminal. */
9882
ccc5562a7194 (create_process) [OSF1]: Use setpgid, not setpgrp.
Richard M. Stallman <rms@gnu.org>
parents: 9793
diff changeset
1434 #ifdef OSF1
ccc5562a7194 (create_process) [OSF1]: Use setpgid, not setpgrp.
Richard M. Stallman <rms@gnu.org>
parents: 9793
diff changeset
1435 setpgid (0, 0);
ccc5562a7194 (create_process) [OSF1]: Use setpgid, not setpgrp.
Richard M. Stallman <rms@gnu.org>
parents: 9793
diff changeset
1436 #else
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1437 setpgrp (0, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1438 #endif
9882
ccc5562a7194 (create_process) [OSF1]: Use setpgid, not setpgrp.
Richard M. Stallman <rms@gnu.org>
parents: 9793
diff changeset
1439 #endif
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1440 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1441 #endif /* TIOCNOTTY */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1442
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1443 #if !defined (RTU) && !defined (UNIPLUS)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1444 /*** There is a suggestion that this ought to be a
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1445 conditional on TIOCSPGRP. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1446 /* Now close the pty (if we had it open) and reopen it.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1447 This makes the pty the controlling terminal of the subprocess. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1448 if (pty_flag)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1449 {
5240
eed870591987 (Fprocess_status): Use get_process, not Fget_process.
Richard M. Stallman <rms@gnu.org>
parents: 5239
diff changeset
1450 #ifdef SET_CHILD_PTY_PGRP
eed870591987 (Fprocess_status): Use get_process, not Fget_process.
Richard M. Stallman <rms@gnu.org>
parents: 5239
diff changeset
1451 int pgrp = getpid ();
eed870591987 (Fprocess_status): Use get_process, not Fget_process.
Richard M. Stallman <rms@gnu.org>
parents: 5239
diff changeset
1452 #endif
eed870591987 (Fprocess_status): Use get_process, not Fget_process.
Richard M. Stallman <rms@gnu.org>
parents: 5239
diff changeset
1453
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1454 /* I wonder if close (open (pty_name, ...)) would work? */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1455 if (xforkin >= 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1456 close (xforkin);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1457 xforkout = xforkin = open (pty_name, O_RDWR, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1458
11514
321726163a65 (create_process): Don't abort if can't reopen
Richard M. Stallman <rms@gnu.org>
parents: 11376
diff changeset
1459 if (xforkin < 0)
321726163a65 (create_process): Don't abort if can't reopen
Richard M. Stallman <rms@gnu.org>
parents: 11376
diff changeset
1460 {
321726163a65 (create_process): Don't abort if can't reopen
Richard M. Stallman <rms@gnu.org>
parents: 11376
diff changeset
1461 write (1, "Couldn't open the pty terminal ", 31);
321726163a65 (create_process): Don't abort if can't reopen
Richard M. Stallman <rms@gnu.org>
parents: 11376
diff changeset
1462 write (1, pty_name, strlen (pty_name));
321726163a65 (create_process): Don't abort if can't reopen
Richard M. Stallman <rms@gnu.org>
parents: 11376
diff changeset
1463 write (1, "\n", 1);
321726163a65 (create_process): Don't abort if can't reopen
Richard M. Stallman <rms@gnu.org>
parents: 11376
diff changeset
1464 _exit (1);
321726163a65 (create_process): Don't abort if can't reopen
Richard M. Stallman <rms@gnu.org>
parents: 11376
diff changeset
1465 }
321726163a65 (create_process): Don't abort if can't reopen
Richard M. Stallman <rms@gnu.org>
parents: 11376
diff changeset
1466
5240
eed870591987 (Fprocess_status): Use get_process, not Fget_process.
Richard M. Stallman <rms@gnu.org>
parents: 5239
diff changeset
1467 #ifdef SET_CHILD_PTY_PGRP
eed870591987 (Fprocess_status): Use get_process, not Fget_process.
Richard M. Stallman <rms@gnu.org>
parents: 5239
diff changeset
1468 ioctl (xforkin, TIOCSPGRP, &pgrp);
eed870591987 (Fprocess_status): Use get_process, not Fget_process.
Richard M. Stallman <rms@gnu.org>
parents: 5239
diff changeset
1469 ioctl (xforkout, TIOCSPGRP, &pgrp);
eed870591987 (Fprocess_status): Use get_process, not Fget_process.
Richard M. Stallman <rms@gnu.org>
parents: 5239
diff changeset
1470 #endif
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1471 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1472 #endif /* not UNIPLUS and not RTU */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1473 #ifdef SETUP_SLAVE_PTY
7058
1855e568a9b8 (create_process): Use SETUP_SLAVE_PTY only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents: 7044
diff changeset
1474 if (pty_flag)
1855e568a9b8 (create_process): Use SETUP_SLAVE_PTY only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents: 7044
diff changeset
1475 {
1855e568a9b8 (create_process): Use SETUP_SLAVE_PTY only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents: 7044
diff changeset
1476 SETUP_SLAVE_PTY;
1855e568a9b8 (create_process): Use SETUP_SLAVE_PTY only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents: 7044
diff changeset
1477 }
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1478 #endif /* SETUP_SLAVE_PTY */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1479 #ifdef AIX
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1480 /* On AIX, we've disabled SIGHUP above once we start a child on a pty.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1481 Now reenable it in the child, so it will die when we want it to. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1482 if (pty_flag)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1483 signal (SIGHUP, SIG_DFL);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1484 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1485 #endif /* HAVE_PTYS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1486
13709
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1487 signal (SIGINT, SIG_DFL);
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1488 signal (SIGQUIT, SIG_DFL);
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1489
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1490 /* Stop blocking signals in the child. */
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1491 #ifdef POSIX_SIGNALS
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1492 sigprocmask (SIG_SETMASK, &procmask, 0);
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1493 #else /* !POSIX_SIGNALS */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1494 #ifdef SIGCHLD
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1495 #ifdef BSD4_1
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1496 sigrelse (SIGCHLD);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1497 #else /* not BSD4_1 */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1498 #if defined (BSD) || defined (UNIPLUS) || defined (HPUX)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1499 sigsetmask (SIGEMPTYMASK);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1500 #else /* ordinary USG */
1207
af619d68a576 * process.c [SIGCHLD && !BSD && !UNIPLUS && !HPUX]
Jim Blandy <jimb@redhat.com>
parents: 1180
diff changeset
1501 #if 0
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1502 signal (SIGCHLD, sigchld);
1207
af619d68a576 * process.c [SIGCHLD && !BSD && !UNIPLUS && !HPUX]
Jim Blandy <jimb@redhat.com>
parents: 1180
diff changeset
1503 #endif
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1504 #endif /* ordinary USG */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1505 #endif /* not BSD4_1 */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1506 #endif /* SIGCHLD */
13709
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1507 #endif /* !POSIX_SIGNALS */
8390
ee13e8728666 (create_process): Set default handling for SIGINT, etc.
Richard M. Stallman <rms@gnu.org>
parents: 8354
diff changeset
1508
7059
6a55de48ade5 (create_process): Use child_setup_tty only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents: 7058
diff changeset
1509 if (pty_flag)
6a55de48ade5 (create_process): Use child_setup_tty only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents: 7058
diff changeset
1510 child_setup_tty (xforkout);
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1511 #ifdef WINDOWSNT
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1512 pid = child_setup (xforkin, xforkout, xforkout,
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1513 new_argv, 1, current_dir);
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1514 #else /* not WINDOWSNT */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1515 child_setup (xforkin, xforkout, xforkout,
638
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 624
diff changeset
1516 new_argv, 1, current_dir);
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1517 #endif /* not WINDOWSNT */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1518 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1519 environ = save_environ;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1520 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1521
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1522 if (pid < 0)
7157
3f4fc9d682b4 (create_process): If vfork fails, close forkin and forkout.
Richard M. Stallman <rms@gnu.org>
parents: 7116
diff changeset
1523 {
3f4fc9d682b4 (create_process): If vfork fails, close forkin and forkout.
Richard M. Stallman <rms@gnu.org>
parents: 7116
diff changeset
1524 if (forkin >= 0)
3f4fc9d682b4 (create_process): If vfork fails, close forkin and forkout.
Richard M. Stallman <rms@gnu.org>
parents: 7116
diff changeset
1525 close (forkin);
3f4fc9d682b4 (create_process): If vfork fails, close forkin and forkout.
Richard M. Stallman <rms@gnu.org>
parents: 7116
diff changeset
1526 if (forkin != forkout && forkout >= 0)
3f4fc9d682b4 (create_process): If vfork fails, close forkin and forkout.
Richard M. Stallman <rms@gnu.org>
parents: 7116
diff changeset
1527 close (forkout);
3f4fc9d682b4 (create_process): If vfork fails, close forkin and forkout.
Richard M. Stallman <rms@gnu.org>
parents: 7116
diff changeset
1528 report_file_error ("Doing vfork", Qnil);
3f4fc9d682b4 (create_process): If vfork fails, close forkin and forkout.
Richard M. Stallman <rms@gnu.org>
parents: 7116
diff changeset
1529 }
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1530
9318
a14cc1712337 (make_process, list_processes_1, create_process, Faccept_process_output,
Karl Heuer <kwzh@gnu.org>
parents: 9277
diff changeset
1531 XSETFASTINT (XPROCESS (process)->pid, pid);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1532
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1533 #ifdef WINDOWSNT
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1534 register_child (pid, inchannel);
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1535 #endif /* WINDOWSNT */
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1536
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1537 /* If the subfork execv fails, and it exits,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1538 this close hangs. I don't know why.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1539 So have an interrupt jar it loose. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1540 stop_polling ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1541 signal (SIGALRM, create_process_1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1542 alarm (1);
5240
eed870591987 (Fprocess_status): Use get_process, not Fget_process.
Richard M. Stallman <rms@gnu.org>
parents: 5239
diff changeset
1543 XPROCESS (process)->subtty = Qnil;
eed870591987 (Fprocess_status): Use get_process, not Fget_process.
Richard M. Stallman <rms@gnu.org>
parents: 5239
diff changeset
1544 if (forkin >= 0)
eed870591987 (Fprocess_status): Use get_process, not Fget_process.
Richard M. Stallman <rms@gnu.org>
parents: 5239
diff changeset
1545 close (forkin);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1546 alarm (0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1547 start_polling ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1548 if (forkin != forkout && forkout >= 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1549 close (forkout);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1550
11609
3b2dacb1bfe9 (create_process): Don't reference pty_name if !HAVE_PTYS.
Karl Heuer <kwzh@gnu.org>
parents: 11514
diff changeset
1551 #ifdef HAVE_PTYS
3b2dacb1bfe9 (create_process): Don't reference pty_name if !HAVE_PTYS.
Karl Heuer <kwzh@gnu.org>
parents: 11514
diff changeset
1552 if (pty_flag)
3b2dacb1bfe9 (create_process): Don't reference pty_name if !HAVE_PTYS.
Karl Heuer <kwzh@gnu.org>
parents: 11514
diff changeset
1553 XPROCESS (process)->tty_name = build_string (pty_name);
3b2dacb1bfe9 (create_process): Don't reference pty_name if !HAVE_PTYS.
Karl Heuer <kwzh@gnu.org>
parents: 11514
diff changeset
1554 else
3b2dacb1bfe9 (create_process): Don't reference pty_name if !HAVE_PTYS.
Karl Heuer <kwzh@gnu.org>
parents: 11514
diff changeset
1555 #endif
3b2dacb1bfe9 (create_process): Don't reference pty_name if !HAVE_PTYS.
Karl Heuer <kwzh@gnu.org>
parents: 11514
diff changeset
1556 XPROCESS (process)->tty_name = Qnil;
9030
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
1557
13709
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1558 #ifdef POSIX_SIGNALS
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1559 #ifdef HAVE_VFORK
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1560 /* Restore the parent's signal handlers. */
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1561 sigaction (SIGINT, &sigint_action, 0);
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1562 sigaction (SIGQUIT, &sigquit_action, 0);
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1563 #ifdef AIX
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1564 sigaction (SIGHUP, &sighup_action, 0);
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1565 #endif
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1566 #endif /* HAVE_VFORK */
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1567 /* Stop blocking signals in the parent. */
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1568 sigprocmask (SIG_SETMASK, &procmask, 0);
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1569 #else /* !POSIX_SIGNALS */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1570 #ifdef SIGCHLD
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1571 #ifdef BSD4_1
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1572 sigrelse (SIGCHLD);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1573 #else /* not BSD4_1 */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1574 #if defined (BSD) || defined (UNIPLUS) || defined (HPUX)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1575 sigsetmask (SIGEMPTYMASK);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1576 #else /* ordinary USG */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1577 #if 0
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1578 signal (SIGCHLD, sigchld);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1579 /* Now really handle any of these signals
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1580 that came in during this function. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1581 if (sigchld_deferred)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1582 kill (getpid (), SIGCHLD);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1583 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1584 #endif /* ordinary USG */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1585 #endif /* not BSD4_1 */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1586 #endif /* SIGCHLD */
13709
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1587 #endif /* !POSIX_SIGNALS */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1588 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1589 #endif /* not VMS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1590
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1591 #ifdef HAVE_SOCKETS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1592
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1593 /* open a TCP network connection to a given HOST/SERVICE. Treated
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1594 exactly like a normal process when reading and writing. Only
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1595 differences are in status display and process deletion. A network
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1596 connection has no PID; you cannot signal it. All you can do is
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1597 deactivate and close it via delete-process */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1598
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1599 DEFUN ("open-network-stream", Fopen_network_stream, Sopen_network_stream,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1600 4, 4, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1601 "Open a TCP connection for a service to a host.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1602 Returns a subprocess-object to represent the connection.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1603 Input and output work as for subprocesses; `delete-process' closes it.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1604 Args are NAME BUFFER HOST SERVICE.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1605 NAME is name for process. It is modified if necessary to make it unique.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1606 BUFFER is the buffer (or buffer-name) to associate with the process.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1607 Process output goes at end of that buffer, unless you specify\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1608 an output stream or filter function to handle the output.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1609 BUFFER may be also nil, meaning that this process is not associated\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1610 with any buffer\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1611 Third arg is name of the host to connect to, or its IP address.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1612 Fourth arg SERVICE is name of the service desired, or an integer\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1613 specifying a port number to connect to.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1614 (name, buffer, host, service)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1615 Lisp_Object name, buffer, host, service;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1616 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1617 Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1618 register int i;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1619 struct sockaddr_in address;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1620 struct servent *svc_info;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1621 struct hostent *host_info_ptr, host_info;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1622 char *(addr_list[2]);
4998
3cd3a39f98f4 (IN_ADDR, NUMERIC_ADDR_ERROR): New macros (two versions).
Richard M. Stallman <rms@gnu.org>
parents: 4994
diff changeset
1623 IN_ADDR numeric_addr;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1624 int s, outch, inch;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1625 char errstring[80];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1626 int port;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1627 struct hostent host_info_fixed;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1628 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
7220
a33eb16cab9d (Fopen_network_stream): Retry the connect if EADDRINUSE. Ignore EISCONN.
Richard M. Stallman <rms@gnu.org>
parents: 7157
diff changeset
1629 int retry = 0;
7486
cfe4840ffde9 (Fopen_network_stream): Call bind_polling_period; later unbind the binding.
Richard M. Stallman <rms@gnu.org>
parents: 7454
diff changeset
1630 int count = specpdl_ptr - specpdl;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1631
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1632 GCPRO4 (name, buffer, host, service);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1633 CHECK_STRING (name, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1634 CHECK_STRING (host, 0);
9115
59bc2d010b5f (decode_status, Fprocessp, Fget_process, Fget_buffer_process, Fprocess_status,
Karl Heuer <kwzh@gnu.org>
parents: 9034
diff changeset
1635 if (INTEGERP (service))
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1636 port = htons ((unsigned short) XINT (service));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1637 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1638 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1639 CHECK_STRING (service, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1640 svc_info = getservbyname (XSTRING (service)->data, "tcp");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1641 if (svc_info == 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1642 error ("Unknown service \"%s\"", XSTRING (service)->data);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1643 port = svc_info->s_port;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1644 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1645
4914
56bc426b1eb4 [TERM]: Include client.h.
Richard M. Stallman <rms@gnu.org>
parents: 4883
diff changeset
1646 #ifndef TERM
8287
97c2535b7f37 (Fopen_network_stream): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents: 8231
diff changeset
1647 while (1)
97c2535b7f37 (Fopen_network_stream): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents: 8231
diff changeset
1648 {
8331
14ddb4c66461 [!HAVE_H_ERRNO]: Declare h_errno.
Richard M. Stallman <rms@gnu.org>
parents: 8287
diff changeset
1649 #ifdef TRY_AGAIN
14ddb4c66461 [!HAVE_H_ERRNO]: Declare h_errno.
Richard M. Stallman <rms@gnu.org>
parents: 8287
diff changeset
1650 h_errno = 0;
14ddb4c66461 [!HAVE_H_ERRNO]: Declare h_errno.
Richard M. Stallman <rms@gnu.org>
parents: 8287
diff changeset
1651 #endif
8287
97c2535b7f37 (Fopen_network_stream): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents: 8231
diff changeset
1652 host_info_ptr = gethostbyname (XSTRING (host)->data);
97c2535b7f37 (Fopen_network_stream): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents: 8231
diff changeset
1653 #ifdef TRY_AGAIN
97c2535b7f37 (Fopen_network_stream): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents: 8231
diff changeset
1654 if (! (host_info_ptr == 0 && h_errno == TRY_AGAIN))
97c2535b7f37 (Fopen_network_stream): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents: 8231
diff changeset
1655 #endif
97c2535b7f37 (Fopen_network_stream): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents: 8231
diff changeset
1656 break;
97c2535b7f37 (Fopen_network_stream): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents: 8231
diff changeset
1657 Fsleep_for (make_number (1), Qnil);
97c2535b7f37 (Fopen_network_stream): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents: 8231
diff changeset
1658 }
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1659 if (host_info_ptr == 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1660 /* Attempt to interpret host as numeric inet address */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1661 {
4883
a806d71f58f6 (Fopen_netwrok_stream): Cast arg to inet_addr to (char *).
Brian Fox <bfox@gnu.org>
parents: 4870
diff changeset
1662 numeric_addr = inet_addr ((char *) XSTRING (host)->data);
4998
3cd3a39f98f4 (IN_ADDR, NUMERIC_ADDR_ERROR): New macros (two versions).
Richard M. Stallman <rms@gnu.org>
parents: 4994
diff changeset
1663 if (NUMERIC_ADDR_ERROR)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1664 error ("Unknown host \"%s\"", XSTRING (host)->data);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1665
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1666 host_info_ptr = &host_info;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1667 host_info.h_name = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1668 host_info.h_aliases = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1669 host_info.h_addrtype = AF_INET;
2944
f66a150d3fb9 * process.c (Fopen_network_stream): Deal with older systems, which
Jim Blandy <jimb@redhat.com>
parents: 2917
diff changeset
1670 #ifdef h_addr
f66a150d3fb9 * process.c (Fopen_network_stream): Deal with older systems, which
Jim Blandy <jimb@redhat.com>
parents: 2917
diff changeset
1671 /* Older machines have only one address slot called h_addr.
f66a150d3fb9 * process.c (Fopen_network_stream): Deal with older systems, which
Jim Blandy <jimb@redhat.com>
parents: 2917
diff changeset
1672 Newer machines have h_addr_list, but #define h_addr to
f66a150d3fb9 * process.c (Fopen_network_stream): Deal with older systems, which
Jim Blandy <jimb@redhat.com>
parents: 2917
diff changeset
1673 be its first element. */
f66a150d3fb9 * process.c (Fopen_network_stream): Deal with older systems, which
Jim Blandy <jimb@redhat.com>
parents: 2917
diff changeset
1674 host_info.h_addr_list = &(addr_list[0]);
f66a150d3fb9 * process.c (Fopen_network_stream): Deal with older systems, which
Jim Blandy <jimb@redhat.com>
parents: 2917
diff changeset
1675 #endif
f66a150d3fb9 * process.c (Fopen_network_stream): Deal with older systems, which
Jim Blandy <jimb@redhat.com>
parents: 2917
diff changeset
1676 host_info.h_addr = (char*)(&numeric_addr);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1677 addr_list[1] = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1678 host_info.h_length = strlen (addr_list[0]);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1679 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1680
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1681 bzero (&address, sizeof address);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1682 bcopy (host_info_ptr->h_addr, (char *) &address.sin_addr,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1683 host_info_ptr->h_length);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1684 address.sin_family = host_info_ptr->h_addrtype;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1685 address.sin_port = port;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1686
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1687 s = socket (host_info_ptr->h_addrtype, SOCK_STREAM, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1688 if (s < 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1689 report_file_error ("error creating socket", Fcons (name, Qnil));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1690
5332
c559b3d1b9e4 (Fopen_network_stream): Turn off SIGIO while connecting.
Richard M. Stallman <rms@gnu.org>
parents: 5240
diff changeset
1691 /* Kernel bugs (on Ultrix at least) cause lossage (not just EINTR)
c559b3d1b9e4 (Fopen_network_stream): Turn off SIGIO while connecting.
Richard M. Stallman <rms@gnu.org>
parents: 5240
diff changeset
1692 when connect is interrupted. So let's not let it get interrupted.
c559b3d1b9e4 (Fopen_network_stream): Turn off SIGIO while connecting.
Richard M. Stallman <rms@gnu.org>
parents: 5240
diff changeset
1693 Note we do not turn off polling, because polling is only used
c559b3d1b9e4 (Fopen_network_stream): Turn off SIGIO while connecting.
Richard M. Stallman <rms@gnu.org>
parents: 5240
diff changeset
1694 when not interrupt_input, and thus not normally used on the systems
c559b3d1b9e4 (Fopen_network_stream): Turn off SIGIO while connecting.
Richard M. Stallman <rms@gnu.org>
parents: 5240
diff changeset
1695 which have this bug. On systems which use polling, there's no way
c559b3d1b9e4 (Fopen_network_stream): Turn off SIGIO while connecting.
Richard M. Stallman <rms@gnu.org>
parents: 5240
diff changeset
1696 to quit if polling is turned off. */
c559b3d1b9e4 (Fopen_network_stream): Turn off SIGIO while connecting.
Richard M. Stallman <rms@gnu.org>
parents: 5240
diff changeset
1697 if (interrupt_input)
c559b3d1b9e4 (Fopen_network_stream): Turn off SIGIO while connecting.
Richard M. Stallman <rms@gnu.org>
parents: 5240
diff changeset
1698 unrequest_sigio ();
c559b3d1b9e4 (Fopen_network_stream): Turn off SIGIO while connecting.
Richard M. Stallman <rms@gnu.org>
parents: 5240
diff changeset
1699
7486
cfe4840ffde9 (Fopen_network_stream): Call bind_polling_period; later unbind the binding.
Richard M. Stallman <rms@gnu.org>
parents: 7454
diff changeset
1700 /* Slow down polling to every ten seconds.
cfe4840ffde9 (Fopen_network_stream): Call bind_polling_period; later unbind the binding.
Richard M. Stallman <rms@gnu.org>
parents: 7454
diff changeset
1701 Some kernels have a bug which causes retrying connect to fail
cfe4840ffde9 (Fopen_network_stream): Call bind_polling_period; later unbind the binding.
Richard M. Stallman <rms@gnu.org>
parents: 7454
diff changeset
1702 after a connect. */
cfe4840ffde9 (Fopen_network_stream): Call bind_polling_period; later unbind the binding.
Richard M. Stallman <rms@gnu.org>
parents: 7454
diff changeset
1703 #ifdef POLL_FOR_INPUT
cfe4840ffde9 (Fopen_network_stream): Call bind_polling_period; later unbind the binding.
Richard M. Stallman <rms@gnu.org>
parents: 7454
diff changeset
1704 bind_polling_period (10);
cfe4840ffde9 (Fopen_network_stream): Call bind_polling_period; later unbind the binding.
Richard M. Stallman <rms@gnu.org>
parents: 7454
diff changeset
1705 #endif
cfe4840ffde9 (Fopen_network_stream): Call bind_polling_period; later unbind the binding.
Richard M. Stallman <rms@gnu.org>
parents: 7454
diff changeset
1706
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1707 loop:
7220
a33eb16cab9d (Fopen_network_stream): Retry the connect if EADDRINUSE. Ignore EISCONN.
Richard M. Stallman <rms@gnu.org>
parents: 7157
diff changeset
1708 if (connect (s, (struct sockaddr *) &address, sizeof address) == -1
a33eb16cab9d (Fopen_network_stream): Retry the connect if EADDRINUSE. Ignore EISCONN.
Richard M. Stallman <rms@gnu.org>
parents: 7157
diff changeset
1709 && errno != EISCONN)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1710 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1711 int xerrno = errno;
7220
a33eb16cab9d (Fopen_network_stream): Retry the connect if EADDRINUSE. Ignore EISCONN.
Richard M. Stallman <rms@gnu.org>
parents: 7157
diff changeset
1712
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1713 if (errno == EINTR)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1714 goto loop;
7220
a33eb16cab9d (Fopen_network_stream): Retry the connect if EADDRINUSE. Ignore EISCONN.
Richard M. Stallman <rms@gnu.org>
parents: 7157
diff changeset
1715 if (errno == EADDRINUSE && retry < 20)
a33eb16cab9d (Fopen_network_stream): Retry the connect if EADDRINUSE. Ignore EISCONN.
Richard M. Stallman <rms@gnu.org>
parents: 7157
diff changeset
1716 {
12378
3171d5da8a86 (Fopen_network_stream): Sleep 1 sec before connect retry.
Richard M. Stallman <rms@gnu.org>
parents: 12324
diff changeset
1717 /* A delay here is needed on some FreeBSD systems,
3171d5da8a86 (Fopen_network_stream): Sleep 1 sec before connect retry.
Richard M. Stallman <rms@gnu.org>
parents: 12324
diff changeset
1718 and it is harmless, since this retrying takes time anyway
3171d5da8a86 (Fopen_network_stream): Sleep 1 sec before connect retry.
Richard M. Stallman <rms@gnu.org>
parents: 12324
diff changeset
1719 and should be infrequent. */
3171d5da8a86 (Fopen_network_stream): Sleep 1 sec before connect retry.
Richard M. Stallman <rms@gnu.org>
parents: 12324
diff changeset
1720 Fsleep_for (make_number (1), Qnil);
7220
a33eb16cab9d (Fopen_network_stream): Retry the connect if EADDRINUSE. Ignore EISCONN.
Richard M. Stallman <rms@gnu.org>
parents: 7157
diff changeset
1721 retry++;
a33eb16cab9d (Fopen_network_stream): Retry the connect if EADDRINUSE. Ignore EISCONN.
Richard M. Stallman <rms@gnu.org>
parents: 7157
diff changeset
1722 goto loop;
a33eb16cab9d (Fopen_network_stream): Retry the connect if EADDRINUSE. Ignore EISCONN.
Richard M. Stallman <rms@gnu.org>
parents: 7157
diff changeset
1723 }
a33eb16cab9d (Fopen_network_stream): Retry the connect if EADDRINUSE. Ignore EISCONN.
Richard M. Stallman <rms@gnu.org>
parents: 7157
diff changeset
1724
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1725 close (s);
5332
c559b3d1b9e4 (Fopen_network_stream): Turn off SIGIO while connecting.
Richard M. Stallman <rms@gnu.org>
parents: 5240
diff changeset
1726
c559b3d1b9e4 (Fopen_network_stream): Turn off SIGIO while connecting.
Richard M. Stallman <rms@gnu.org>
parents: 5240
diff changeset
1727 if (interrupt_input)
c559b3d1b9e4 (Fopen_network_stream): Turn off SIGIO while connecting.
Richard M. Stallman <rms@gnu.org>
parents: 5240
diff changeset
1728 request_sigio ();
c559b3d1b9e4 (Fopen_network_stream): Turn off SIGIO while connecting.
Richard M. Stallman <rms@gnu.org>
parents: 5240
diff changeset
1729
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1730 errno = xerrno;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1731 report_file_error ("connection failed",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1732 Fcons (host, Fcons (name, Qnil)));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1733 }
5332
c559b3d1b9e4 (Fopen_network_stream): Turn off SIGIO while connecting.
Richard M. Stallman <rms@gnu.org>
parents: 5240
diff changeset
1734
7486
cfe4840ffde9 (Fopen_network_stream): Call bind_polling_period; later unbind the binding.
Richard M. Stallman <rms@gnu.org>
parents: 7454
diff changeset
1735 #ifdef POLL_FOR_INPUT
cfe4840ffde9 (Fopen_network_stream): Call bind_polling_period; later unbind the binding.
Richard M. Stallman <rms@gnu.org>
parents: 7454
diff changeset
1736 unbind_to (count, Qnil);
cfe4840ffde9 (Fopen_network_stream): Call bind_polling_period; later unbind the binding.
Richard M. Stallman <rms@gnu.org>
parents: 7454
diff changeset
1737 #endif
cfe4840ffde9 (Fopen_network_stream): Call bind_polling_period; later unbind the binding.
Richard M. Stallman <rms@gnu.org>
parents: 7454
diff changeset
1738
5332
c559b3d1b9e4 (Fopen_network_stream): Turn off SIGIO while connecting.
Richard M. Stallman <rms@gnu.org>
parents: 5240
diff changeset
1739 if (interrupt_input)
c559b3d1b9e4 (Fopen_network_stream): Turn off SIGIO while connecting.
Richard M. Stallman <rms@gnu.org>
parents: 5240
diff changeset
1740 request_sigio ();
c559b3d1b9e4 (Fopen_network_stream): Turn off SIGIO while connecting.
Richard M. Stallman <rms@gnu.org>
parents: 5240
diff changeset
1741
4914
56bc426b1eb4 [TERM]: Include client.h.
Richard M. Stallman <rms@gnu.org>
parents: 4883
diff changeset
1742 #else /* TERM */
56bc426b1eb4 [TERM]: Include client.h.
Richard M. Stallman <rms@gnu.org>
parents: 4883
diff changeset
1743 s = connect_server (0);
56bc426b1eb4 [TERM]: Include client.h.
Richard M. Stallman <rms@gnu.org>
parents: 4883
diff changeset
1744 if (s < 0)
56bc426b1eb4 [TERM]: Include client.h.
Richard M. Stallman <rms@gnu.org>
parents: 4883
diff changeset
1745 report_file_error ("error creating socket", Fcons (name, Qnil));
56bc426b1eb4 [TERM]: Include client.h.
Richard M. Stallman <rms@gnu.org>
parents: 4883
diff changeset
1746 send_command (s, C_PORT, 0, "%s:%d", XSTRING (host)->data, ntohs (port));
56bc426b1eb4 [TERM]: Include client.h.
Richard M. Stallman <rms@gnu.org>
parents: 4883
diff changeset
1747 send_command (s, C_DUMB, 1, 0);
56bc426b1eb4 [TERM]: Include client.h.
Richard M. Stallman <rms@gnu.org>
parents: 4883
diff changeset
1748 #endif /* TERM */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1749
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1750 inch = s;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1751 outch = dup (s);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1752 if (outch < 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1753 report_file_error ("error duplicating socket", Fcons (name, Qnil));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1754
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1755 if (!NILP (buffer))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1756 buffer = Fget_buffer_create (buffer);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1757 proc = make_process (name);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1758
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1759 chan_process[inch] = proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1760
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1761 #ifdef O_NONBLOCK
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1762 fcntl (inch, F_SETFL, O_NONBLOCK);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1763 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1764 #ifdef O_NDELAY
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1765 fcntl (inch, F_SETFL, O_NDELAY);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1766 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1767 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1768
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1769 XPROCESS (proc)->childp = host;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1770 XPROCESS (proc)->command_channel_p = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1771 XPROCESS (proc)->buffer = buffer;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1772 XPROCESS (proc)->sentinel = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1773 XPROCESS (proc)->filter = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1774 XPROCESS (proc)->command = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1775 XPROCESS (proc)->pid = Qnil;
9277
21f6120be5ba (make_process, create_process, Fopen_network_stream, deactivate_process,
Karl Heuer <kwzh@gnu.org>
parents: 9115
diff changeset
1776 XSETINT (XPROCESS (proc)->infd, s);
21f6120be5ba (make_process, create_process, Fopen_network_stream, deactivate_process,
Karl Heuer <kwzh@gnu.org>
parents: 9115
diff changeset
1777 XSETINT (XPROCESS (proc)->outfd, outch);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1778 XPROCESS (proc)->status = Qrun;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1779 FD_SET (inch, &input_wait_mask);
9686
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
1780 FD_SET (inch, &non_keyboard_wait_mask);
7044
7032d07f5ad9 (max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7013
diff changeset
1781 if (inch > max_process_desc)
7032d07f5ad9 (max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7013
diff changeset
1782 max_process_desc = inch;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1783
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1784 UNGCPRO;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1785 return proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1786 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1787 #endif /* HAVE_SOCKETS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1788
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1789 deactivate_process (proc)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1790 Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1791 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1792 register int inchannel, outchannel;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1793 register struct Lisp_Process *p = XPROCESS (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1794
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
1795 inchannel = XINT (p->infd);
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
1796 outchannel = XINT (p->outfd);
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
1797
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
1798 if (inchannel >= 0)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1799 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1800 /* Beware SIGCHLD hereabouts. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1801 flush_pending_output (inchannel);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1802 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1803 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1804 VMS_PROC_STUFF *get_vms_process_pointer (), *vs;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1805 sys$dassgn (outchannel);
2357
9faa3a02ea97 * process.c [VMS] (DCL_PROMPT): Remove hack.
Jim Blandy <jimb@redhat.com>
parents: 2290
diff changeset
1806 vs = get_vms_process_pointer (p->pid);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1807 if (vs)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1808 give_back_vms_process_stuff (vs);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1809 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1810 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1811 close (inchannel);
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
1812 if (outchannel >= 0 && outchannel != inchannel)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1813 close (outchannel);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1814 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1815
9277
21f6120be5ba (make_process, create_process, Fopen_network_stream, deactivate_process,
Karl Heuer <kwzh@gnu.org>
parents: 9115
diff changeset
1816 XSETINT (p->infd, -1);
21f6120be5ba (make_process, create_process, Fopen_network_stream, deactivate_process,
Karl Heuer <kwzh@gnu.org>
parents: 9115
diff changeset
1817 XSETINT (p->outfd, -1);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1818 chan_process[inchannel] = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1819 FD_CLR (inchannel, &input_wait_mask);
9686
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
1820 FD_CLR (inchannel, &non_keyboard_wait_mask);
7044
7032d07f5ad9 (max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7013
diff changeset
1821 if (inchannel == max_process_desc)
7032d07f5ad9 (max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7013
diff changeset
1822 {
7032d07f5ad9 (max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7013
diff changeset
1823 int i;
7032d07f5ad9 (max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7013
diff changeset
1824 /* We just closed the highest-numbered process input descriptor,
7032d07f5ad9 (max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7013
diff changeset
1825 so recompute the highest-numbered one now. */
7032d07f5ad9 (max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7013
diff changeset
1826 max_process_desc = 0;
7032d07f5ad9 (max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7013
diff changeset
1827 for (i = 0; i < MAXDESC; i++)
7032d07f5ad9 (max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7013
diff changeset
1828 if (!NILP (chan_process[i]))
7032d07f5ad9 (max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7013
diff changeset
1829 max_process_desc = i;
7032d07f5ad9 (max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7013
diff changeset
1830 }
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1831 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1832 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1833
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1834 /* Close all descriptors currently in use for communication
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1835 with subprocess. This is used in a newly-forked subprocess
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1836 to get rid of irrelevant descriptors. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1837
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1838 close_process_descs ()
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1839 {
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1840 #ifndef WINDOWSNT
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1841 int i;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1842 for (i = 0; i < MAXDESC; i++)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1843 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1844 Lisp_Object process;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1845 process = chan_process[i];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1846 if (!NILP (process))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1847 {
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
1848 int in = XINT (XPROCESS (process)->infd);
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
1849 int out = XINT (XPROCESS (process)->outfd);
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
1850 if (in >= 0)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1851 close (in);
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
1852 if (out >= 0 && in != out)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1853 close (out);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1854 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1855 }
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1856 #endif
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1857 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1858
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1859 DEFUN ("accept-process-output", Faccept_process_output, Saccept_process_output,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1860 0, 3, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1861 "Allow any pending output from subprocesses to be read by Emacs.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1862 It is read into the process' buffers or given to their filter functions.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1863 Non-nil arg PROCESS means do not return until some output has been received\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1864 from PROCESS.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1865 Non-nil second arg TIMEOUT and third arg TIMEOUT-MSECS are number of\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1866 seconds and microseconds to wait; return after that much time whether\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1867 or not there is input.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1868 Return non-nil iff we received any output before the timeout expired.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1869 (proc, timeout, timeout_msecs)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1870 register Lisp_Object proc, timeout, timeout_msecs;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1871 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1872 int seconds;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1873 int useconds;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1874
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1875 if (! NILP (timeout_msecs))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1876 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1877 CHECK_NUMBER (timeout_msecs, 2);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1878 useconds = XINT (timeout_msecs);
9115
59bc2d010b5f (decode_status, Fprocessp, Fget_process, Fget_buffer_process, Fprocess_status,
Karl Heuer <kwzh@gnu.org>
parents: 9034
diff changeset
1879 if (!INTEGERP (timeout))
9277
21f6120be5ba (make_process, create_process, Fopen_network_stream, deactivate_process,
Karl Heuer <kwzh@gnu.org>
parents: 9115
diff changeset
1880 XSETINT (timeout, 0);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1881
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1882 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1883 int carry = useconds / 1000000;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1884
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1885 XSETINT (timeout, XINT (timeout) + carry);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1886 useconds -= carry * 1000000;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1887
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1888 /* I think this clause is necessary because C doesn't
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1889 guarantee a particular rounding direction for negative
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1890 integers. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1891 if (useconds < 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1892 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1893 XSETINT (timeout, XINT (timeout) - 1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1894 useconds += 1000000;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1895 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1896 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1897 }
1180
9bf82484415d (Faccept_process_output): Initialize useconds.
Richard M. Stallman <rms@gnu.org>
parents: 1047
diff changeset
1898 else
9bf82484415d (Faccept_process_output): Initialize useconds.
Richard M. Stallman <rms@gnu.org>
parents: 1047
diff changeset
1899 useconds = 0;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1900
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1901 if (! NILP (timeout))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1902 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1903 CHECK_NUMBER (timeout, 1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1904 seconds = XINT (timeout);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1905 if (seconds <= 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1906 seconds = -1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1907 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1908 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1909 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1910 if (NILP (proc))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1911 seconds = -1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1912 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1913 seconds = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1914 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1915
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1916 if (NILP (proc))
9318
a14cc1712337 (make_process, list_processes_1, create_process, Faccept_process_output,
Karl Heuer <kwzh@gnu.org>
parents: 9277
diff changeset
1917 XSETFASTINT (proc, 0);
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1918
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1919 return
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1920 (wait_reading_process_input (seconds, useconds, proc, 0)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1921 ? Qt : Qnil);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1922 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1923
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1924 /* This variable is different from waiting_for_input in keyboard.c.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1925 It is used to communicate to a lisp process-filter/sentinel (via the
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1926 function Fwaiting_for_user_input_p below) whether emacs was waiting
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1927 for user-input when that process-filter was called.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1928 waiting_for_input cannot be used as that is by definition 0 when
8570
dd3dfde8f973 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 8390
diff changeset
1929 lisp code is being evalled.
dd3dfde8f973 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 8390
diff changeset
1930 This is also used in record_asynch_buffer_change.
dd3dfde8f973 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 8390
diff changeset
1931 For that purpose, this must be 0
dd3dfde8f973 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 8390
diff changeset
1932 when not inside wait_reading_process_input. */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1933 static int waiting_for_user_input_p;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1934
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1935 /* Read and dispose of subprocess output while waiting for timeout to
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1936 elapse and/or keyboard input to be available.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1937
3953
d0c23febc08c (wait_reading_process_input): Do include the keyboard
Richard M. Stallman <rms@gnu.org>
parents: 3915
diff changeset
1938 TIME_LIMIT is:
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1939 timeout in seconds, or
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1940 zero for no limit, or
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1941 -1 means gobble data immediately available but don't wait for any.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1942
3953
d0c23febc08c (wait_reading_process_input): Do include the keyboard
Richard M. Stallman <rms@gnu.org>
parents: 3915
diff changeset
1943 MICROSECS is:
d0c23febc08c (wait_reading_process_input): Do include the keyboard
Richard M. Stallman <rms@gnu.org>
parents: 3915
diff changeset
1944 an additional duration to wait, measured in microseconds.
d0c23febc08c (wait_reading_process_input): Do include the keyboard
Richard M. Stallman <rms@gnu.org>
parents: 3915
diff changeset
1945 If this is nonzero and time_limit is 0, then the timeout
d0c23febc08c (wait_reading_process_input): Do include the keyboard
Richard M. Stallman <rms@gnu.org>
parents: 3915
diff changeset
1946 consists of MICROSECS only.
d0c23febc08c (wait_reading_process_input): Do include the keyboard
Richard M. Stallman <rms@gnu.org>
parents: 3915
diff changeset
1947
d0c23febc08c (wait_reading_process_input): Do include the keyboard
Richard M. Stallman <rms@gnu.org>
parents: 3915
diff changeset
1948 READ_KBD is a lisp value:
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1949 0 to ignore keyboard input, or
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1950 1 to return when input is available, or
2200
5e58643bb169 (wait_reading_process_input): New option to wait
Richard M. Stallman <rms@gnu.org>
parents: 2120
diff changeset
1951 -1 meaning caller will actually read the input, so don't throw to
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1952 the quit handler, or
6569
9cde1228e2fa Fix typos in comments.
Karl Heuer <kwzh@gnu.org>
parents: 6515
diff changeset
1953 a cons cell, meaning wait until its car is non-nil
3953
d0c23febc08c (wait_reading_process_input): Do include the keyboard
Richard M. Stallman <rms@gnu.org>
parents: 3915
diff changeset
1954 (and gobble terminal input into the buffer if any arrives), or
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1955 a process object, meaning wait until something arrives from that
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1956 process. The return value is true iff we read some input from
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1957 that process.
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1958
3953
d0c23febc08c (wait_reading_process_input): Do include the keyboard
Richard M. Stallman <rms@gnu.org>
parents: 3915
diff changeset
1959 DO_DISPLAY != 0 means redisplay should be done to show subprocess
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1960 output that arrives.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1961
3953
d0c23febc08c (wait_reading_process_input): Do include the keyboard
Richard M. Stallman <rms@gnu.org>
parents: 3915
diff changeset
1962 If READ_KBD is a pointer to a struct Lisp_Process, then the
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1963 function returns true iff we received input from that process
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1964 before the timeout elapsed.
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 3510
diff changeset
1965 Otherwise, return true iff we received input from any process. */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1966
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1967 wait_reading_process_input (time_limit, microsecs, read_kbd, do_display)
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1968 int time_limit, microsecs;
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1969 Lisp_Object read_kbd;
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1970 int do_display;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1971 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1972 register int channel, nfds, m;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1973 static SELECT_TYPE Available;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1974 int xerrno;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1975 Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1976 EMACS_TIME timeout, end_time, garbage;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1977 SELECT_TYPE Atemp;
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
1978 int wait_channel = -1;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1979 struct Lisp_Process *wait_proc = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1980 int got_some_input = 0;
2200
5e58643bb169 (wait_reading_process_input): New option to wait
Richard M. Stallman <rms@gnu.org>
parents: 2120
diff changeset
1981 Lisp_Object *wait_for_cell = 0;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1982
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1983 FD_ZERO (&Available);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1984
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1985 /* If read_kbd is a process to watch, set wait_proc and wait_channel
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1986 accordingly. */
9115
59bc2d010b5f (decode_status, Fprocessp, Fget_process, Fget_buffer_process, Fprocess_status,
Karl Heuer <kwzh@gnu.org>
parents: 9034
diff changeset
1987 if (PROCESSP (read_kbd))
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1988 {
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1989 wait_proc = XPROCESS (read_kbd);
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
1990 wait_channel = XINT (wait_proc->infd);
9318
a14cc1712337 (make_process, list_processes_1, create_process, Faccept_process_output,
Karl Heuer <kwzh@gnu.org>
parents: 9277
diff changeset
1991 XSETFASTINT (read_kbd, 0);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1992 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1993
2200
5e58643bb169 (wait_reading_process_input): New option to wait
Richard M. Stallman <rms@gnu.org>
parents: 2120
diff changeset
1994 /* If waiting for non-nil in a cell, record where. */
9115
59bc2d010b5f (decode_status, Fprocessp, Fget_process, Fget_buffer_process, Fprocess_status,
Karl Heuer <kwzh@gnu.org>
parents: 9034
diff changeset
1995 if (CONSP (read_kbd))
2200
5e58643bb169 (wait_reading_process_input): New option to wait
Richard M. Stallman <rms@gnu.org>
parents: 2120
diff changeset
1996 {
5e58643bb169 (wait_reading_process_input): New option to wait
Richard M. Stallman <rms@gnu.org>
parents: 2120
diff changeset
1997 wait_for_cell = &XCONS (read_kbd)->car;
9318
a14cc1712337 (make_process, list_processes_1, create_process, Faccept_process_output,
Karl Heuer <kwzh@gnu.org>
parents: 9277
diff changeset
1998 XSETFASTINT (read_kbd, 0);
2200
5e58643bb169 (wait_reading_process_input): New option to wait
Richard M. Stallman <rms@gnu.org>
parents: 2120
diff changeset
1999 }
5e58643bb169 (wait_reading_process_input): New option to wait
Richard M. Stallman <rms@gnu.org>
parents: 2120
diff changeset
2000
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
2001 waiting_for_user_input_p = XINT (read_kbd);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2002
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2003 /* Since we may need to wait several times,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2004 compute the absolute time to return at. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2005 if (time_limit || microsecs)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2006 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2007 EMACS_GET_TIME (end_time);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2008 EMACS_SET_SECS_USECS (timeout, time_limit, microsecs);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2009 EMACS_ADD_TIME (end_time, end_time, timeout);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2010 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2011
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2012 while (1)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2013 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2014 /* If calling from keyboard input, do not quit
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2015 since we want to return C-g as an input character.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2016 Otherwise, do pending quit if requested. */
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
2017 if (XINT (read_kbd) >= 0)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2018 QUIT;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2019
4639
76f242eb1fa8 Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 4320
diff changeset
2020 /* Exit now if the cell we're waiting for became non-nil. */
76f242eb1fa8 Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 4320
diff changeset
2021 if (wait_for_cell && ! NILP (*wait_for_cell))
76f242eb1fa8 Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 4320
diff changeset
2022 break;
76f242eb1fa8 Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 4320
diff changeset
2023
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2024 /* Compute time from now till when time limit is up */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2025 /* Exit if already run out */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2026 if (time_limit == -1)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2027 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2028 /* -1 specified for timeout means
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2029 gobble output available now
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2030 but don't wait at all. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2031
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2032 EMACS_SET_SECS_USECS (timeout, 0, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2033 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2034 else if (time_limit || microsecs)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2035 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2036 EMACS_GET_TIME (timeout);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2037 EMACS_SUB_TIME (timeout, end_time, timeout);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2038 if (EMACS_TIME_NEG_P (timeout))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2039 break;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2040 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2041 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2042 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2043 EMACS_SET_SECS_USECS (timeout, 100000, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2044 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2045
2894
646c5beae647 * process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents: 2893
diff changeset
2046 /* Cause C-g and alarm signals to take immediate action,
646c5beae647 * process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents: 2893
diff changeset
2047 and cause input available signals to zero out timeout.
646c5beae647 * process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents: 2893
diff changeset
2048
646c5beae647 * process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents: 2893
diff changeset
2049 It is important that we do this before checking for process
646c5beae647 * process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents: 2893
diff changeset
2050 activity. If we get a SIGCHLD after the explicit checks for
646c5beae647 * process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents: 2893
diff changeset
2051 process activity, timeout is the only way we will know. */
646c5beae647 * process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents: 2893
diff changeset
2052 if (XINT (read_kbd) < 0)
646c5beae647 * process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents: 2893
diff changeset
2053 set_waiting_for_input (&timeout);
646c5beae647 * process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents: 2893
diff changeset
2054
1925
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2055 /* If status of something has changed, and no input is
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2056 available, notify the user of the change right away. After
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2057 this explicit check, we'll let the SIGCHLD handler zap
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2058 timeout to get our attention. */
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2059 if (update_tick != process_tick && do_display)
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2060 {
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2061 Atemp = input_wait_mask;
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2062 EMACS_SET_SECS_USECS (timeout, 0, 0);
11926
40d7e6f04ebe (create_process, send_process): Add volatile qualifiers.
Karl Heuer <kwzh@gnu.org>
parents: 11845
diff changeset
2063 if ((select (MAXDESC, &Atemp, (SELECT_TYPE *)0, (SELECT_TYPE *)0,
40d7e6f04ebe (create_process, send_process): Add volatile qualifiers.
Karl Heuer <kwzh@gnu.org>
parents: 11845
diff changeset
2064 &timeout)
40d7e6f04ebe (create_process, send_process): Add volatile qualifiers.
Karl Heuer <kwzh@gnu.org>
parents: 11845
diff changeset
2065 <= 0))
2894
646c5beae647 * process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents: 2893
diff changeset
2066 {
646c5beae647 * process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents: 2893
diff changeset
2067 /* It's okay for us to do this and then continue with
5534
7a0de0f56c86 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 5404
diff changeset
2068 the loop, since timeout has already been zeroed out. */
2894
646c5beae647 * process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents: 2893
diff changeset
2069 clear_waiting_for_input ();
646c5beae647 * process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents: 2893
diff changeset
2070 status_notify ();
646c5beae647 * process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents: 2893
diff changeset
2071 }
1925
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2072 }
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2073
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2074 /* Don't wait for output from a non-running process. */
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2075 if (wait_proc != 0 && !NILP (wait_proc->raw_status_low))
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2076 update_status (wait_proc);
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2077 if (wait_proc != 0
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2078 && ! EQ (wait_proc->status, Qrun))
2893
4df57953d5d0 * process.c (wait_reading_process_input): Don't forget to call
Jim Blandy <jimb@redhat.com>
parents: 2887
diff changeset
2079 {
4df57953d5d0 * process.c (wait_reading_process_input): Don't forget to call
Jim Blandy <jimb@redhat.com>
parents: 2887
diff changeset
2080 clear_waiting_for_input ();
4df57953d5d0 * process.c (wait_reading_process_input): Don't forget to call
Jim Blandy <jimb@redhat.com>
parents: 2887
diff changeset
2081 break;
4df57953d5d0 * process.c (wait_reading_process_input): Don't forget to call
Jim Blandy <jimb@redhat.com>
parents: 2887
diff changeset
2082 }
1925
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2083
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2084 /* Wait till there is something to do */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2085
8390
ee13e8728666 (create_process): Set default handling for SIGINT, etc.
Richard M. Stallman <rms@gnu.org>
parents: 8354
diff changeset
2086 if (! XINT (read_kbd) && wait_for_cell == 0)
9686
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
2087 Available = non_keyboard_wait_mask;
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
2088 else
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
2089 Available = input_wait_mask;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2090
765
e4093444f9f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 692
diff changeset
2091 /* If frame size has changed or the window is newly mapped,
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2092 redisplay now, before we start to wait. There is a race
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2093 condition here; if a SIGIO arrives between now and the select
1655
05e84e6c7d04 Tue Dec 1 23:42:25 1992 Jim Blandy (jimb@totoro.cs.oberlin.edu)
Jim Blandy <jimb@redhat.com>
parents: 1594
diff changeset
2094 and indicates that a frame is trashed, the select may block
05e84e6c7d04 Tue Dec 1 23:42:25 1992 Jim Blandy (jimb@totoro.cs.oberlin.edu)
Jim Blandy <jimb@redhat.com>
parents: 1594
diff changeset
2095 displaying a trashed screen. */
6429
1dbe24a029fd (wait_reading_process_input, both versions): Don't call
Richard M. Stallman <rms@gnu.org>
parents: 6393
diff changeset
2096 if (frame_garbaged && do_display)
11728
affed1766d34 (wait_reading_process_input): Don't call prepare_menu_bars.
Richard M. Stallman <rms@gnu.org>
parents: 11695
diff changeset
2097 {
affed1766d34 (wait_reading_process_input): Don't call prepare_menu_bars.
Richard M. Stallman <rms@gnu.org>
parents: 11695
diff changeset
2098 clear_waiting_for_input ();
affed1766d34 (wait_reading_process_input): Don't call prepare_menu_bars.
Richard M. Stallman <rms@gnu.org>
parents: 11695
diff changeset
2099 redisplay_preserve_echo_area ();
affed1766d34 (wait_reading_process_input): Don't call prepare_menu_bars.
Richard M. Stallman <rms@gnu.org>
parents: 11695
diff changeset
2100 if (XINT (read_kbd) < 0)
11744
52a2c8e81bb7 (wait_reading_process_input): Pass arg in new call to set_waiting_for_input.
Richard M. Stallman <rms@gnu.org>
parents: 11728
diff changeset
2101 set_waiting_for_input (&timeout);
11728
affed1766d34 (wait_reading_process_input): Don't call prepare_menu_bars.
Richard M. Stallman <rms@gnu.org>
parents: 11695
diff changeset
2102 }
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2103
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
2104 if (XINT (read_kbd) && detect_input_pending ())
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
2105 {
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
2106 nfds = 0;
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
2107 FD_ZERO (&Available);
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
2108 }
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2109 else
11926
40d7e6f04ebe (create_process, send_process): Add volatile qualifiers.
Karl Heuer <kwzh@gnu.org>
parents: 11845
diff changeset
2110 nfds = select (MAXDESC, &Available, (SELECT_TYPE *)0, (SELECT_TYPE *)0,
40d7e6f04ebe (create_process, send_process): Add volatile qualifiers.
Karl Heuer <kwzh@gnu.org>
parents: 11845
diff changeset
2111 &timeout);
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
2112
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2113 xerrno = errno;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2114
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2115 /* Make C-g and alarm signals set flags again */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2116 clear_waiting_for_input ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2117
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2118 /* If we woke up due to SIGWINCH, actually change size now. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2119 do_pending_window_change ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2120
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2121 if (time_limit && nfds == 0) /* timeout elapsed */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2122 break;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2123 if (nfds < 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2124 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2125 if (xerrno == EINTR)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2126 FD_ZERO (&Available);
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2127 #ifdef ultrix
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2128 /* Ultrix select seems to return ENOMEM when it is
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2129 interrupted. Treat it just like EINTR. Bleah. Note
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2130 that we want to test for the "ultrix" CPP symbol, not
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2131 "__ultrix__"; the latter is only defined under GCC, but
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2132 not by DEC's bundled CC. -JimB */
1323
25b5b55a3916 * process.c (wait_reading_process_input): If the select returns
Jim Blandy <jimb@redhat.com>
parents: 1207
diff changeset
2133 else if (xerrno == ENOMEM)
25b5b55a3916 * process.c (wait_reading_process_input): If the select returns
Jim Blandy <jimb@redhat.com>
parents: 1207
diff changeset
2134 FD_ZERO (&Available);
25b5b55a3916 * process.c (wait_reading_process_input): If the select returns
Jim Blandy <jimb@redhat.com>
parents: 1207
diff changeset
2135 #endif
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2136 #ifdef ALLIANT
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2137 /* This happens for no known reason on ALLIANT.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2138 I am guessing that this is the right response. -- RMS. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2139 else if (xerrno == EFAULT)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2140 FD_ZERO (&Available);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2141 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2142 else if (xerrno == EBADF)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2143 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2144 #ifdef AIX
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2145 /* AIX doesn't handle PTY closure the same way BSD does. On AIX,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2146 the child's closure of the pts gives the parent a SIGHUP, and
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2147 the ptc file descriptor is automatically closed,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2148 yielding EBADF here or at select() call above.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2149 So, SIGHUP is ignored (see def of PTY_TTY_NAME_SPRINTF
5534
7a0de0f56c86 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 5404
diff changeset
2150 in m/ibmrt-aix.h), and here we just ignore the select error.
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2151 Cleanup occurs c/o status_notify after SIGCLD. */
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2152 FD_ZERO (&Available); /* Cannot depend on values returned */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2153 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2154 abort ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2155 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2156 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2157 else
5543
dbc1d920ef5c Don't declare sys_nerr.
Roland McGrath <roland@gnu.org>
parents: 5534
diff changeset
2158 error("select error: %s", strerror (xerrno));
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2159 }
2815
60f122cfe785 * process.c (wait_reading_process_input): If we're running
Jim Blandy <jimb@redhat.com>
parents: 2610
diff changeset
2160 #if defined(sun) && !defined(USG5_4)
9686
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
2161 else if (nfds > 0 && keyboard_bit_set (&Available)
4682
c4d471244116 (keyboard_descriptor): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4639
diff changeset
2162 && interrupt_input)
2830
006c7fbdeab7 Document sun change.
Jim Blandy <jimb@redhat.com>
parents: 2815
diff changeset
2163 /* System sometimes fails to deliver SIGIO.
006c7fbdeab7 Document sun change.
Jim Blandy <jimb@redhat.com>
parents: 2815
diff changeset
2164
006c7fbdeab7 Document sun change.
Jim Blandy <jimb@redhat.com>
parents: 2815
diff changeset
2165 David J. Mackenzie says that Emacs doesn't compile under
006c7fbdeab7 Document sun change.
Jim Blandy <jimb@redhat.com>
parents: 2815
diff changeset
2166 Solaris if this code is enabled, thus the USG5_4 in the CPP
006c7fbdeab7 Document sun change.
Jim Blandy <jimb@redhat.com>
parents: 2815
diff changeset
2167 conditional. "I haven't noticed any ill effects so far.
006c7fbdeab7 Document sun change.
Jim Blandy <jimb@redhat.com>
parents: 2815
diff changeset
2168 If you find a Solaris expert somewhere, they might know
006c7fbdeab7 Document sun change.
Jim Blandy <jimb@redhat.com>
parents: 2815
diff changeset
2169 better." */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2170 kill (getpid (), SIGIO);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2171 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2172
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2173 /* Check for keyboard input */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2174 /* If there is any, return immediately
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2175 to give it higher priority than subprocesses */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2176
6569
9cde1228e2fa Fix typos in comments.
Karl Heuer <kwzh@gnu.org>
parents: 6515
diff changeset
2177 /* We used to do this if wait_for_cell,
4320
4055472194b5 (wait_reading_process_input): Undo last two changes:
Richard M. Stallman <rms@gnu.org>
parents: 4257
diff changeset
2178 but that caused infinite recursion in selection request events. */
8390
ee13e8728666 (create_process): Set default handling for SIGINT, etc.
Richard M. Stallman <rms@gnu.org>
parents: 8354
diff changeset
2179 if ((XINT (read_kbd) || wait_for_cell)
4057
2fe1488b503c (wait_reading_process_input): If wait_for_cell, do call
Richard M. Stallman <rms@gnu.org>
parents: 3953
diff changeset
2180 && detect_input_pending ())
3103
98505a819898 (wait_reading_process_input): Call swallow_events.
Richard M. Stallman <rms@gnu.org>
parents: 3023
diff changeset
2181 {
98505a819898 (wait_reading_process_input): Call swallow_events.
Richard M. Stallman <rms@gnu.org>
parents: 3023
diff changeset
2182 swallow_events ();
98505a819898 (wait_reading_process_input): Call swallow_events.
Richard M. Stallman <rms@gnu.org>
parents: 3023
diff changeset
2183 if (detect_input_pending ())
98505a819898 (wait_reading_process_input): Call swallow_events.
Richard M. Stallman <rms@gnu.org>
parents: 3023
diff changeset
2184 break;
98505a819898 (wait_reading_process_input): Call swallow_events.
Richard M. Stallman <rms@gnu.org>
parents: 3023
diff changeset
2185 }
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2186
2200
5e58643bb169 (wait_reading_process_input): New option to wait
Richard M. Stallman <rms@gnu.org>
parents: 2120
diff changeset
2187 /* Exit now if the cell we're waiting for became non-nil. */
5e58643bb169 (wait_reading_process_input): New option to wait
Richard M. Stallman <rms@gnu.org>
parents: 2120
diff changeset
2188 if (wait_for_cell && ! NILP (*wait_for_cell))
5e58643bb169 (wait_reading_process_input): New option to wait
Richard M. Stallman <rms@gnu.org>
parents: 2120
diff changeset
2189 break;
5e58643bb169 (wait_reading_process_input): New option to wait
Richard M. Stallman <rms@gnu.org>
parents: 2120
diff changeset
2190
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
2191 #ifdef SIGIO
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2192 /* If we think we have keyboard input waiting, but didn't get SIGIO
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2193 go read it. This can happen with X on BSD after logging out.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2194 In that case, there really is no input and no SIGIO,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2195 but select says there is input. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2196
4682
c4d471244116 (keyboard_descriptor): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4639
diff changeset
2197 if (XINT (read_kbd) && interrupt_input
9686
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
2198 && (keyboard_bit_set (&Available)))
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2199 kill (0, SIGIO);
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
2200 #endif
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2201
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2202 if (! wait_proc)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2203 got_some_input |= nfds > 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2204
624
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
2205 /* If checking input just got us a size-change event from X,
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
2206 obey it now if we should. */
4057
2fe1488b503c (wait_reading_process_input): If wait_for_cell, do call
Richard M. Stallman <rms@gnu.org>
parents: 3953
diff changeset
2207 if (XINT (read_kbd) || wait_for_cell)
624
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
2208 do_pending_window_change ();
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
2209
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
2210 /* Check for data from a process. */
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
2211 /* Really FIRST_PROC_DESC should be 0 on Unix,
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
2212 but this is safer in the short run. */
9686
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
2213 for (channel = 0; channel <= max_process_desc; channel++)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2214 {
9686
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
2215 if (FD_ISSET (channel, &Available)
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
2216 && FD_ISSET (channel, &non_keyboard_wait_mask))
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2217 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2218 int nread;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2219
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2220 /* If waiting for this channel, arrange to return as
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2221 soon as no more input to be processed. No more
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2222 waiting. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2223 if (wait_channel == channel)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2224 {
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
2225 wait_channel = -1;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2226 time_limit = -1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2227 got_some_input = 1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2228 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2229 proc = chan_process[channel];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2230 if (NILP (proc))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2231 continue;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2232
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2233 /* Read data from the process, starting with our
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2234 buffered-ahead character if we have one. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2235
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2236 nread = read_process_output (proc, channel);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2237 if (nread > 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2238 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2239 /* Since read_process_output can run a filter,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2240 which can call accept-process-output,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2241 don't try to read from any other processes
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2242 before doing the select again. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2243 FD_ZERO (&Available);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2244
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2245 if (do_display)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2246 redisplay_preserve_echo_area ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2247 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2248 #ifdef EWOULDBLOCK
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2249 else if (nread == -1 && errno == EWOULDBLOCK)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2250 ;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2251 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2252 #ifdef O_NONBLOCK
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2253 else if (nread == -1 && errno == EAGAIN)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2254 ;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2255 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2256 #ifdef O_NDELAY
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2257 else if (nread == -1 && errno == EAGAIN)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2258 ;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2259 /* Note that we cannot distinguish between no input
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2260 available now and a closed pipe.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2261 With luck, a closed pipe will be accompanied by
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2262 subprocess termination and SIGCHLD. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2263 else if (nread == 0 && !NETCONN_P (proc))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2264 ;
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2265 #endif /* O_NDELAY */
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2266 #endif /* O_NONBLOCK */
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2267 #endif /* EWOULDBLOCK */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2268 #ifdef HAVE_PTYS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2269 /* On some OSs with ptys, when the process on one end of
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2270 a pty exits, the other end gets an error reading with
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2271 errno = EIO instead of getting an EOF (0 bytes read).
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2272 Therefore, if we get an error reading and errno =
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2273 EIO, just continue, because the child process has
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2274 exited and should clean itself up soon (e.g. when we
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2275 get a SIGCHLD). */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2276 else if (nread == -1 && errno == EIO)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2277 ;
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2278 #endif /* HAVE_PTYS */
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2279 /* If we can detect process termination, don't consider the process
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2280 gone just because its pipe is closed. */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2281 #ifdef SIGCHLD
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2282 else if (nread == 0 && !NETCONN_P (proc))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2283 ;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2284 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2285 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2286 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2287 /* Preserve status of processes already terminated. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2288 XSETINT (XPROCESS (proc)->tick, ++process_tick);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2289 deactivate_process (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2290 if (!NILP (XPROCESS (proc)->raw_status_low))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2291 update_status (XPROCESS (proc));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2292 if (EQ (XPROCESS (proc)->status, Qrun))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2293 XPROCESS (proc)->status
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2294 = Fcons (Qexit, Fcons (make_number (256), Qnil));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2295 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2296 }
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2297 } /* end for each file descriptor */
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2298 } /* end while exit conditions not met */
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2299
8570
dd3dfde8f973 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 8390
diff changeset
2300 waiting_for_user_input_p = 0;
dd3dfde8f973 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 8390
diff changeset
2301
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2302 /* If calling from keyboard input, do not quit
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2303 since we want to return C-g as an input character.
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2304 Otherwise, do pending quit if requested. */
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
2305 if (XINT (read_kbd) >= 0)
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2306 {
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2307 /* Prevent input_pending from remaining set if we quit. */
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2308 clear_input_pending ();
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2309 QUIT;
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2310 }
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2311
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2312 return got_some_input;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2313 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2314
9030
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2315 /* Given a list (FUNCTION ARGS...), apply FUNCTION to the ARGS. */
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2316
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2317 static Lisp_Object
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2318 read_process_output_call (fun_and_args)
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2319 Lisp_Object fun_and_args;
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2320 {
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2321 return apply1 (XCONS (fun_and_args)->car, XCONS (fun_and_args)->cdr);
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2322 }
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2323
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2324 static Lisp_Object
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2325 read_process_output_error_handler (error)
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2326 Lisp_Object error;
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2327 {
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2328 cmd_error_internal (error, "error in process filter: ");
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2329 Vinhibit_quit = Qt;
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2330 update_echo_area ();
11277
d4547e4b0aab (read_process_output_error_handler)
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2331 Fsleep_for (make_number (2), Qnil);
9030
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2332 }
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2333
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2334 /* Read pending output from the process channel,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2335 starting with our buffered-ahead character if we have one.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2336 Yield number of characters read.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2337
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2338 This function reads at most 1024 characters.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2339 If you want to read all available subprocess output,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2340 you must call it repeatedly until it returns zero. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2341
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2342 read_process_output (proc, channel)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2343 Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2344 register int channel;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2345 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2346 register int nchars;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2347 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2348 char *chars;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2349 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2350 char chars[1024];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2351 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2352 register Lisp_Object outstream;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2353 register struct buffer *old = current_buffer;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2354 register struct Lisp_Process *p = XPROCESS (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2355 register int opoint;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2356
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2357 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2358 VMS_PROC_STUFF *vs, *get_vms_process_pointer();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2359
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2360 vs = get_vms_process_pointer (p->pid);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2361 if (vs)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2362 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2363 if (!vs->iosb[0])
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2364 return(0); /* Really weird if it does this */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2365 if (!(vs->iosb[0] & 1))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2366 return -1; /* I/O error */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2367 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2368 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2369 error ("Could not get VMS process pointer");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2370 chars = vs->inputBuffer;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2371 nchars = clean_vms_buffer (chars, vs->iosb[1]);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2372 if (nchars <= 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2373 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2374 start_vms_process_read (vs); /* Crank up the next read on the process */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2375 return 1; /* Nothing worth printing, say we got 1 */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2376 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2377 #else /* not VMS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2378
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2379 if (proc_buffered_char[channel] < 0)
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
2380 #ifdef WINDOWSNT
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
2381 nchars = read_child_output (channel, chars, sizeof (chars));
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
2382 #else
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2383 nchars = read (channel, chars, sizeof chars);
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
2384 #endif
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2385 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2386 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2387 chars[0] = proc_buffered_char[channel];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2388 proc_buffered_char[channel] = -1;
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
2389 #ifdef WINDOWSNT
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
2390 nchars = read_child_output (channel, chars + 1, sizeof (chars) - 1);
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
2391 #else
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2392 nchars = read (channel, chars + 1, sizeof chars - 1);
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
2393 #endif
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2394 if (nchars < 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2395 nchars = 1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2396 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2397 nchars = nchars + 1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2398 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2399 #endif /* not VMS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2400
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2401 if (nchars <= 0) return nchars;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2402
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2403 outstream = p->filter;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2404 if (!NILP (outstream))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2405 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2406 /* We inhibit quit here instead of just catching it so that
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2407 hitting ^G when a filter happens to be running won't screw
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2408 it up. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2409 int count = specpdl_ptr - specpdl;
3510
b4a552ca4e99 (read_process_output): Deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents: 3238
diff changeset
2410 Lisp_Object odeactivate;
10914
413d44c0bd41 (exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents: 10744
diff changeset
2411 Lisp_Object obuffer, okeymap;
413d44c0bd41 (exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents: 10744
diff changeset
2412
413d44c0bd41 (exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents: 10744
diff changeset
2413 /* No need to gcpro these, because all we do with them later
413d44c0bd41 (exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents: 10744
diff changeset
2414 is test them for EQness, and none of them should be a string. */
3510
b4a552ca4e99 (read_process_output): Deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents: 3238
diff changeset
2415 odeactivate = Vdeactivate_mark;
10914
413d44c0bd41 (exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents: 10744
diff changeset
2416 XSETBUFFER (obuffer, current_buffer);
413d44c0bd41 (exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents: 10744
diff changeset
2417 okeymap = current_buffer->keymap;
3510
b4a552ca4e99 (read_process_output): Deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents: 3238
diff changeset
2418
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2419 specbind (Qinhibit_quit, Qt);
8231
5226ed89c1a6 (Qlast_nonmenu_event): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8063
diff changeset
2420 specbind (Qlast_nonmenu_event, Qt);
9030
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2421
10032
f689803caa92 Added code for automatically saving and restoring the match data
Francesco Potortì <pot@gnu.org>
parents: 9969
diff changeset
2422 running_asynch_code = 1;
9030
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2423 internal_condition_case_1 (read_process_output_call,
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2424 Fcons (outstream,
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2425 Fcons (proc,
10032
f689803caa92 Added code for automatically saving and restoring the match data
Francesco Potortì <pot@gnu.org>
parents: 9969
diff changeset
2426 Fcons (make_string (chars,
f689803caa92 Added code for automatically saving and restoring the match data
Francesco Potortì <pot@gnu.org>
parents: 9969
diff changeset
2427 nchars),
9030
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2428 Qnil))),
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2429 !NILP (Vdebug_on_error) ? Qnil : Qerror,
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2430 read_process_output_error_handler);
10032
f689803caa92 Added code for automatically saving and restoring the match data
Francesco Potortì <pot@gnu.org>
parents: 9969
diff changeset
2431 running_asynch_code = 0;
f689803caa92 Added code for automatically saving and restoring the match data
Francesco Potortì <pot@gnu.org>
parents: 9969
diff changeset
2432 restore_match_data ();
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2433
3666
c7ff787b096f (read_process_output): Don't deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents: 3608
diff changeset
2434 /* Handling the process output should not deactivate the mark. */
3510
b4a552ca4e99 (read_process_output): Deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents: 3238
diff changeset
2435 Vdeactivate_mark = odeactivate;
b4a552ca4e99 (read_process_output): Deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents: 3238
diff changeset
2436
12808
4db1f387e85f (read_process_output, exec_sentinel): Call
Richard M. Stallman <rms@gnu.org>
parents: 12749
diff changeset
2437 #if 0 /* Call record_asynch_buffer_change unconditionally,
4db1f387e85f (read_process_output, exec_sentinel): Call
Richard M. Stallman <rms@gnu.org>
parents: 12749
diff changeset
2438 because we might have changed minor modes or other things
4db1f387e85f (read_process_output, exec_sentinel): Call
Richard M. Stallman <rms@gnu.org>
parents: 12749
diff changeset
2439 that affect key bindings. */
10914
413d44c0bd41 (exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents: 10744
diff changeset
2440 if (! EQ (Fcurrent_buffer (), obuffer)
413d44c0bd41 (exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents: 10744
diff changeset
2441 || ! EQ (current_buffer->keymap, okeymap))
12808
4db1f387e85f (read_process_output, exec_sentinel): Call
Richard M. Stallman <rms@gnu.org>
parents: 12749
diff changeset
2442 #endif
13159
2af96ac471bc (exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents: 12808
diff changeset
2443 /* But do it only if the caller is actually going to read events.
2af96ac471bc (exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents: 12808
diff changeset
2444 Otherwise there's no need to make him wake up, and it could
2af96ac471bc (exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents: 12808
diff changeset
2445 cause trouble (for example it would make Fsit_for return). */
2af96ac471bc (exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents: 12808
diff changeset
2446 if (waiting_for_user_input_p == -1)
2af96ac471bc (exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents: 12808
diff changeset
2447 record_asynch_buffer_change ();
6748
b1cde622fa65 (read_process_output): If buffer changes, record that fact.
Karl Heuer <kwzh@gnu.org>
parents: 6569
diff changeset
2448
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2449 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2450 start_vms_process_read (vs);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2451 #endif
5561
fd7524d61a8d (read_process_output): Supply second arg to unbind_to.
Richard M. Stallman <rms@gnu.org>
parents: 5548
diff changeset
2452 unbind_to (count, Qnil);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2453 return nchars;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2454 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2455
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2456 /* If no filter, write into buffer if it isn't dead. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2457 if (!NILP (p->buffer) && !NILP (XBUFFER (p->buffer)->name))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2458 {
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2459 Lisp_Object old_read_only;
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2460 Lisp_Object old_begv, old_zv;
3510
b4a552ca4e99 (read_process_output): Deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents: 3238
diff changeset
2461 Lisp_Object odeactivate;
b4a552ca4e99 (read_process_output): Deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents: 3238
diff changeset
2462
b4a552ca4e99 (read_process_output): Deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents: 3238
diff changeset
2463 odeactivate = Vdeactivate_mark;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2464
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2465 Fset_buffer (p->buffer);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2466 opoint = point;
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2467 old_read_only = current_buffer->read_only;
9318
a14cc1712337 (make_process, list_processes_1, create_process, Faccept_process_output,
Karl Heuer <kwzh@gnu.org>
parents: 9277
diff changeset
2468 XSETFASTINT (old_begv, BEGV);
a14cc1712337 (make_process, list_processes_1, create_process, Faccept_process_output,
Karl Heuer <kwzh@gnu.org>
parents: 9277
diff changeset
2469 XSETFASTINT (old_zv, ZV);
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2470
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2471 current_buffer->read_only = Qnil;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2472
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2473 /* Insert new output into buffer
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2474 at the current end-of-output marker,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2475 thus preserving logical ordering of input and output. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2476 if (XMARKER (p->mark)->buffer)
5404
a609e717764d (read_process_output): Use clip_to_bounds when moving
Richard M. Stallman <rms@gnu.org>
parents: 5347
diff changeset
2477 SET_PT (clip_to_bounds (BEGV, marker_position (p->mark), ZV));
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2478 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2479 SET_PT (ZV);
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2480
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2481 /* If the output marker is outside of the visible region, save
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2482 the restriction and widen. */
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2483 if (! (BEGV <= point && point <= ZV))
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2484 Fwiden ();
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2485
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2486 /* Make sure opoint floats ahead of any new text, just as point
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2487 would. */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2488 if (point <= opoint)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2489 opoint += nchars;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2490
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2491 /* Insert after old_begv, but before old_zv. */
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2492 if (point < XFASTINT (old_begv))
9334
d949b1150e25 (read_process_output): Don't use XFASTINT as an lvalue.
Karl Heuer <kwzh@gnu.org>
parents: 9318
diff changeset
2493 XSETFASTINT (old_begv, XFASTINT (old_begv) + nchars);
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2494 if (point <= XFASTINT (old_zv))
9334
d949b1150e25 (read_process_output): Don't use XFASTINT as an lvalue.
Karl Heuer <kwzh@gnu.org>
parents: 9318
diff changeset
2495 XSETFASTINT (old_zv, XFASTINT (old_zv) + nchars);
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2496
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2497 /* Insert before markers in case we are inserting where
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2498 the buffer's mark is, and the user's next command is Meta-y. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2499 insert_before_markers (chars, nchars);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2500 Fset_marker (p->mark, make_number (point), p->buffer);
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2501
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2502 update_mode_lines++;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2503
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2504 /* If the restriction isn't what it should be, set it. */
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2505 if (XFASTINT (old_begv) != BEGV || XFASTINT (old_zv) != ZV)
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2506 Fnarrow_to_region (old_begv, old_zv);
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2507
3666
c7ff787b096f (read_process_output): Don't deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents: 3608
diff changeset
2508 /* Handling the process output should not deactivate the mark. */
3510
b4a552ca4e99 (read_process_output): Deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents: 3238
diff changeset
2509 Vdeactivate_mark = odeactivate;
b4a552ca4e99 (read_process_output): Deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents: 3238
diff changeset
2510
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2511 current_buffer->read_only = old_read_only;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2512 SET_PT (opoint);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2513 set_buffer_internal (old);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2514 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2515 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2516 start_vms_process_read (vs);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2517 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2518 return nchars;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2519 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2520
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2521 DEFUN ("waiting-for-user-input-p", Fwaiting_for_user_input_p, Swaiting_for_user_input_p,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2522 0, 0, 0,
7352
ef89b78c1a92 (wait_reading_process_input): Don't call prepare_menu_bars
Richard M. Stallman <rms@gnu.org>
parents: 7266
diff changeset
2523 "Returns non-nil if emacs is waiting for input from the user.\n\
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2524 This is intended for use by asynchronous process output filters and sentinels.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2525 ()
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2526 {
7352
ef89b78c1a92 (wait_reading_process_input): Don't call prepare_menu_bars
Richard M. Stallman <rms@gnu.org>
parents: 7266
diff changeset
2527 return (waiting_for_user_input_p ? Qt : Qnil);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2528 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2529
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2530 /* Sending data to subprocess */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2531
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2532 jmp_buf send_process_frame;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2533
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2534 SIGTYPE
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2535 send_process_trap ()
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2536 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2537 #ifdef BSD4_1
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2538 sigrelse (SIGPIPE);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2539 sigrelse (SIGALRM);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2540 #endif /* BSD4_1 */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2541 longjmp (send_process_frame, 1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2542 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2543
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2544 /* Send some data to process PROC.
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2545 BUF is the beginning of the data; LEN is the number of characters.
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2546 OBJECT is the Lisp object that the data comes from. */
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2547
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2548 send_process (proc, buf, len, object)
11926
40d7e6f04ebe (create_process, send_process): Add volatile qualifiers.
Karl Heuer <kwzh@gnu.org>
parents: 11845
diff changeset
2549 volatile Lisp_Object proc;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2550 char *buf;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2551 int len;
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2552 Lisp_Object object;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2553 {
11926
40d7e6f04ebe (create_process, send_process): Add volatile qualifiers.
Karl Heuer <kwzh@gnu.org>
parents: 11845
diff changeset
2554 /* Use volatile to protect variables from being clobbered by longjmp. */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2555 int rv;
11926
40d7e6f04ebe (create_process, send_process): Add volatile qualifiers.
Karl Heuer <kwzh@gnu.org>
parents: 11845
diff changeset
2556 volatile unsigned char *procname = XSTRING (XPROCESS (proc)->name)->data;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2557
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2558 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2559 struct Lisp_Process *p = XPROCESS (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2560 VMS_PROC_STUFF *vs, *get_vms_process_pointer();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2561 #endif /* VMS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2562
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2563 if (! NILP (XPROCESS (proc)->raw_status_low))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2564 update_status (XPROCESS (proc));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2565 if (! EQ (XPROCESS (proc)->status, Qrun))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2566 error ("Process %s not running", procname);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2567
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2568 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2569 vs = get_vms_process_pointer (p->pid);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2570 if (vs == 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2571 error ("Could not find this process: %x", p->pid);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2572 else if (write_to_vms_process (vs, buf, len))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2573 ;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2574 #else
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2575
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2576 if (pty_max_bytes == 0)
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2577 {
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2578 #if defined (HAVE_FPATHCONF) && defined (_PC_MAX_CANON)
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2579 pty_max_bytes = fpathconf (XFASTINT (XPROCESS (proc)->outfd),
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2580 _PC_MAX_CANON);
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2581 if (pty_max_bytes < 0)
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2582 pty_max_bytes = 250;
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2583 #else
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2584 pty_max_bytes = 250;
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2585 #endif
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2586 /* Deduct one, to leave space for the eof. */
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2587 pty_max_bytes--;
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2588 }
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2589
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2590 if (!setjmp (send_process_frame))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2591 while (len > 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2592 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2593 int this = len;
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
2594 SIGTYPE (*old_sigpipe)();
6158
6b81b2575071 Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 5891
diff changeset
2595 int flush_pty = 0;
6b81b2575071 Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 5891
diff changeset
2596
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2597 /* Decide how much data we can send in one batch.
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2598 Long lines need to be split into multiple batches. */
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2599 if (!NILP (XPROCESS (proc)->pty_flag))
6158
6b81b2575071 Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 5891
diff changeset
2600 {
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2601 /* Starting this at zero is always correct when not the first iteration
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2602 because the previous iteration ended by sending C-d.
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2603 It may not be correct for the first iteration
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2604 if a partial line was sent in a separate send_process call.
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2605 If that proves worth handling, we need to save linepos
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2606 in the process object. */
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2607 int linepos = 0;
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2608 char *ptr = buf;
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2609 char *end = buf + len;
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2610
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2611 /* Scan through this text for a line that is too long. */
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2612 while (ptr != end && linepos < pty_max_bytes)
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2613 {
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2614 if (*ptr == '\n')
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2615 linepos = 0;
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2616 else
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2617 linepos++;
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2618 ptr++;
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2619 }
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2620 /* If we found one, break the line there
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2621 and put in a C-d to force the buffer through. */
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2622 this = ptr - buf;
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2623 }
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2624
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2625 /* Send this batch, using one or more write calls. */
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2626 while (this > 0)
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2627 {
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2628 old_sigpipe = (SIGTYPE (*) ()) signal (SIGPIPE, send_process_trap);
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2629 rv = write (XINT (XPROCESS (proc)->outfd), buf, this);
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2630 signal (SIGPIPE, old_sigpipe);
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2631
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2632 if (rv < 0)
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2633 {
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2634 if (0
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2635 #ifdef EWOULDBLOCK
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2636 || errno == EWOULDBLOCK
6158
6b81b2575071 Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 5891
diff changeset
2637 #endif
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2638 #ifdef EAGAIN
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2639 || errno == EAGAIN
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2640 #endif
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2641 )
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2642 /* Buffer is full. Wait, accepting input;
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2643 that may allow the program
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2644 to finish doing output and read more. */
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2645 {
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2646 Lisp_Object zero;
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2647 int offset;
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2648
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2649 /* Running filters might relocate buffers or strings.
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2650 Arrange to relocate BUF. */
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2651 if (BUFFERP (object))
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2652 offset = BUF_PTR_CHAR_POS (XBUFFER (object),
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2653 (unsigned char *) buf);
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2654 else if (STRINGP (object))
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2655 offset = buf - (char *) XSTRING (object)->data;
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2656
9318
a14cc1712337 (make_process, list_processes_1, create_process, Faccept_process_output,
Karl Heuer <kwzh@gnu.org>
parents: 9277
diff changeset
2657 XSETFASTINT (zero, 0);
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2658 wait_reading_process_input (1, 0, zero, 0);
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2659
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2660 if (BUFFERP (object))
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2661 buf = (char *) BUF_CHAR_ADDRESS (XBUFFER (object), offset);
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2662 else if (STRINGP (object))
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2663 buf = offset + (char *) XSTRING (object)->data;
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2664
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2665 rv = 0;
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2666 }
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2667 else
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2668 /* This is a real error. */
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2669 report_file_error ("writing to process", Fcons (proc, Qnil));
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2670 }
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2671 buf += rv;
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2672 len -= rv;
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2673 this -= rv;
6158
6b81b2575071 Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 5891
diff changeset
2674 }
6b81b2575071 Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 5891
diff changeset
2675
6b81b2575071 Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 5891
diff changeset
2676 /* If we sent just part of the string, put in an EOF
6b81b2575071 Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 5891
diff changeset
2677 to force it through, before we send the rest. */
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2678 if (len > 0)
6158
6b81b2575071 Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 5891
diff changeset
2679 Fprocess_send_eof (proc);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2680 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2681 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2682 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2683 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2684 XPROCESS (proc)->raw_status_low = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2685 XPROCESS (proc)->raw_status_high = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2686 XPROCESS (proc)->status = Fcons (Qexit, Fcons (make_number (256), Qnil));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2687 XSETINT (XPROCESS (proc)->tick, ++process_tick);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2688 deactivate_process (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2689 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2690 error ("Error writing to process %s; closed it", procname);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2691 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2692 error ("SIGPIPE raised on process %s; closed it", procname);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2693 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2694 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2695 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2696
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2697 DEFUN ("process-send-region", Fprocess_send_region, Sprocess_send_region,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2698 3, 3, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2699 "Send current contents of region as input to PROCESS.\n\
808
707866b2a190 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 765
diff changeset
2700 PROCESS may be a process, a buffer, the name of a process or buffer, or\n\
707866b2a190 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 765
diff changeset
2701 nil, indicating the current buffer's process.\n\
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2702 Called from program, takes three arguments, PROCESS, START and END.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2703 If the region is more than 500 characters long,\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2704 it is sent in several bunches. This may happen even for shorter regions.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2705 Output from processes can arrive in between bunches.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2706 (process, start, end)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2707 Lisp_Object process, start, end;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2708 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2709 Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2710 int start1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2711
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2712 proc = get_process (process);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2713 validate_region (&start, &end);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2714
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2715 if (XINT (start) < GPT && XINT (end) > GPT)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2716 move_gap (start);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2717
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2718 start1 = XINT (start);
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2719 send_process (proc, &FETCH_CHAR (start1), XINT (end) - XINT (start),
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2720 Fcurrent_buffer ());
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2721
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2722 return Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2723 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2724
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2725 DEFUN ("process-send-string", Fprocess_send_string, Sprocess_send_string,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2726 2, 2, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2727 "Send PROCESS the contents of STRING as input.\n\
808
707866b2a190 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 765
diff changeset
2728 PROCESS may be a process, a buffer, the name of a process or buffer, or\n\
707866b2a190 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 765
diff changeset
2729 nil, indicating the current buffer's process.\n\
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2730 If STRING is more than 500 characters long,\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2731 it is sent in several bunches. This may happen even for shorter strings.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2732 Output from processes can arrive in between bunches.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2733 (process, string)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2734 Lisp_Object process, string;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2735 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2736 Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2737 CHECK_STRING (string, 1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2738 proc = get_process (process);
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2739 send_process (proc, XSTRING (string)->data, XSTRING (string)->size, string);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2740 return Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2741 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2742
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2743 /* send a signal number SIGNO to PROCESS.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2744 CURRENT_GROUP means send to the process group that currently owns
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2745 the terminal being used to communicate with PROCESS.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2746 This is used for various commands in shell mode.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2747 If NOMSG is zero, insert signal-announcements into process's buffers
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2748 right away.
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2749
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2750 If we can, we try to signal PROCESS by sending control characters
7220
a33eb16cab9d (Fopen_network_stream): Retry the connect if EADDRINUSE. Ignore EISCONN.
Richard M. Stallman <rms@gnu.org>
parents: 7157
diff changeset
2751 down the pty. This allows us to signal inferiors who have changed
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2752 their uid, for which killpg would return an EPERM error. */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2753
1522
19ccf004b172 * process.c: (status_convert): Declare this to return a
Jim Blandy <jimb@redhat.com>
parents: 1323
diff changeset
2754 static void
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2755 process_send_signal (process, signo, current_group, nomsg)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2756 Lisp_Object process;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2757 int signo;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2758 Lisp_Object current_group;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2759 int nomsg;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2760 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2761 Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2762 register struct Lisp_Process *p;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2763 int gid;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2764 int no_pgrp = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2765
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2766 proc = get_process (process);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2767 p = XPROCESS (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2768
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2769 if (!EQ (p->childp, Qt))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2770 error ("Process %s is not a subprocess",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2771 XSTRING (p->name)->data);
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
2772 if (XINT (p->infd) < 0)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2773 error ("Process %s is not active",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2774 XSTRING (p->name)->data);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2775
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2776 if (NILP (p->pty_flag))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2777 current_group = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2778
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2779 /* If we are using pgrps, get a pgrp number and make it negative. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2780 if (!NILP (current_group))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2781 {
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2782 #ifdef SIGNALS_VIA_CHARACTERS
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2783 /* If possible, send signals to the entire pgrp
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2784 by sending an input character to it. */
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2785
1925
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2786 /* TERMIOS is the latest and bestest, and seems most likely to
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2787 work. If the system has it, use it. */
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2788 #ifdef HAVE_TERMIOS
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2789 struct termios t;
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2790
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2791 switch (signo)
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2792 {
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2793 case SIGINT:
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
2794 tcgetattr (XINT (p->infd), &t);
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2795 send_process (proc, &t.c_cc[VINTR], 1, Qnil);
2120
fc3cdca22f8d * process.c (process_send_signal): In the TERMIOS code for sending
Jim Blandy <jimb@redhat.com>
parents: 1925
diff changeset
2796 return;
1925
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2797
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2798 case SIGQUIT:
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
2799 tcgetattr (XINT (p->infd), &t);
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2800 send_process (proc, &t.c_cc[VQUIT], 1, Qnil);
2120
fc3cdca22f8d * process.c (process_send_signal): In the TERMIOS code for sending
Jim Blandy <jimb@redhat.com>
parents: 1925
diff changeset
2801 return;
1925
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2802
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2803 case SIGTSTP:
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
2804 tcgetattr (XINT (p->infd), &t);
7414
33e5afbb62bf (process_send_signal): If PREFER_VSUSP, use VSUSP instead of VSWTCH.
Richard M. Stallman <rms@gnu.org>
parents: 7352
diff changeset
2805 #if defined (VSWTCH) && !defined (PREFER_VSUSP)
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2806 send_process (proc, &t.c_cc[VSWTCH], 1, Qnil);
1925
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2807 #else
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2808 send_process (proc, &t.c_cc[VSUSP], 1, Qnil);
1925
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2809 #endif
2120
fc3cdca22f8d * process.c (process_send_signal): In the TERMIOS code for sending
Jim Blandy <jimb@redhat.com>
parents: 1925
diff changeset
2810 return;
1925
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2811 }
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2812
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2813 #else /* ! HAVE_TERMIOS */
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2814
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2815 /* On Berkeley descendants, the following IOCTL's retrieve the
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2816 current control characters. */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2817 #if defined (TIOCGLTC) && defined (TIOCGETC)
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2818
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2819 struct tchars c;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2820 struct ltchars lc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2821
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2822 switch (signo)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2823 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2824 case SIGINT:
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
2825 ioctl (XINT (p->infd), TIOCGETC, &c);
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2826 send_process (proc, &c.t_intrc, 1, Qnil);
1522
19ccf004b172 * process.c: (status_convert): Declare this to return a
Jim Blandy <jimb@redhat.com>
parents: 1323
diff changeset
2827 return;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2828 case SIGQUIT:
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
2829 ioctl (XINT (p->infd), TIOCGETC, &c);
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2830 send_process (proc, &c.t_quitc, 1, Qnil);
1522
19ccf004b172 * process.c: (status_convert): Declare this to return a
Jim Blandy <jimb@redhat.com>
parents: 1323
diff changeset
2831 return;
1012
a48ed1d416dd * process.c (process_send_signal): Don't send SIGTSTP if the
Jim Blandy <jimb@redhat.com>
parents: 849
diff changeset
2832 #ifdef SIGTSTP
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2833 case SIGTSTP:
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
2834 ioctl (XINT (p->infd), TIOCGLTC, &lc);
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2835 send_process (proc, &lc.t_suspc, 1, Qnil);
1522
19ccf004b172 * process.c: (status_convert): Declare this to return a
Jim Blandy <jimb@redhat.com>
parents: 1323
diff changeset
2836 return;
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2837 #endif /* ! defined (SIGTSTP) */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2838 }
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2839
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2840 #else /* ! defined (TIOCGLTC) && defined (TIOCGETC) */
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2841
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2842 /* On SYSV descendants, the TCGETA ioctl retrieves the current control
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2843 characters. */
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2844 #ifdef TCGETA
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2845 struct termio t;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2846 switch (signo)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2847 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2848 case SIGINT:
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
2849 ioctl (XINT (p->infd), TCGETA, &t);
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2850 send_process (proc, &t.c_cc[VINTR], 1, Qnil);
1522
19ccf004b172 * process.c: (status_convert): Declare this to return a
Jim Blandy <jimb@redhat.com>
parents: 1323
diff changeset
2851 return;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2852 case SIGQUIT:
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
2853 ioctl (XINT (p->infd), TCGETA, &t);
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2854 send_process (proc, &t.c_cc[VQUIT], 1, Qnil);
1522
19ccf004b172 * process.c: (status_convert): Declare this to return a
Jim Blandy <jimb@redhat.com>
parents: 1323
diff changeset
2855 return;
1569
52a69b6a8f96 * process.c [SYSV]: Don't include <termios.h>, <termio.h>, or
Jim Blandy <jimb@redhat.com>
parents: 1522
diff changeset
2856 #ifdef SIGTSTP
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2857 case SIGTSTP:
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
2858 ioctl (XINT (p->infd), TCGETA, &t);
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2859 send_process (proc, &t.c_cc[VSWTCH], 1, Qnil);
1522
19ccf004b172 * process.c: (status_convert): Declare this to return a
Jim Blandy <jimb@redhat.com>
parents: 1323
diff changeset
2860 return;
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2861 #endif /* ! defined (SIGTSTP) */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2862 }
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2863 #else /* ! defined (TCGETA) */
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2864 Your configuration files are messed up.
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2865 /* If your system configuration files define SIGNALS_VIA_CHARACTERS,
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2866 you'd better be using one of the alternatives above! */
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2867 #endif /* ! defined (TCGETA) */
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2868 #endif /* ! defined (TIOCGLTC) && defined (TIOCGETC) */
1925
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2869 #endif /* ! defined HAVE_TERMIOS */
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2870 #endif /* ! defined (SIGNALS_VIA_CHARACTERS) */
849
c7b49118e101 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 822
diff changeset
2871
c7b49118e101 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 822
diff changeset
2872 #ifdef TIOCGPGRP
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2873 /* Get the pgrp using the tty itself, if we have that.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2874 Otherwise, use the pty to get the pgrp.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2875 On pfa systems, saka@pfu.fujitsu.co.JP writes:
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2876 "TIOCGPGRP symbol defined in sys/ioctl.h at E50.
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2877 But, TIOCGPGRP does not work on E50 ;-P works fine on E60"
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2878 His patch indicates that if TIOCGPGRP returns an error, then
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2879 we should just assume that p->pid is also the process group id. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2880 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2881 int err;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2882
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2883 if (!NILP (p->subtty))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2884 err = ioctl (XFASTINT (p->subtty), TIOCGPGRP, &gid);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2885 else
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
2886 err = ioctl (XINT (p->infd), TIOCGPGRP, &gid);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2887
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2888 #ifdef pfa
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2889 if (err == -1)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2890 gid = - XFASTINT (p->pid);
849
c7b49118e101 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 822
diff changeset
2891 #endif /* ! defined (pfa) */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2892 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2893 if (gid == -1)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2894 no_pgrp = 1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2895 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2896 gid = - gid;
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2897 #else /* ! defined (TIOCGPGRP ) */
849
c7b49118e101 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 822
diff changeset
2898 /* Can't select pgrps on this system, so we know that
c7b49118e101 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 822
diff changeset
2899 the child itself heads the pgrp. */
c7b49118e101 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 822
diff changeset
2900 gid = - XFASTINT (p->pid);
c7b49118e101 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 822
diff changeset
2901 #endif /* ! defined (TIOCGPGRP ) */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2902 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2903 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2904 gid = - XFASTINT (p->pid);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2905
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2906 switch (signo)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2907 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2908 #ifdef SIGCONT
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2909 case SIGCONT:
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2910 p->raw_status_low = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2911 p->raw_status_high = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2912 p->status = Qrun;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2913 XSETINT (p->tick, ++process_tick);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2914 if (!nomsg)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2915 status_notify ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2916 break;
849
c7b49118e101 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 822
diff changeset
2917 #endif /* ! defined (SIGCONT) */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2918 case SIGINT:
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2919 #ifdef VMS
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2920 send_process (proc, "\003", 1, Qnil); /* ^C */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2921 goto whoosh;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2922 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2923 case SIGQUIT:
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2924 #ifdef VMS
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2925 send_process (proc, "\031", 1, Qnil); /* ^Y */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2926 goto whoosh;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2927 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2928 case SIGKILL:
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2929 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2930 sys$forcex (&(XFASTINT (p->pid)), 0, 1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2931 whoosh:
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2932 #endif
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
2933 flush_pending_output (XINT (p->infd));
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2934 break;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2935 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2936
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2937 /* If we don't have process groups, send the signal to the immediate
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2938 subprocess. That isn't really right, but it's better than any
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2939 obvious alternative. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2940 if (no_pgrp)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2941 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2942 kill (XFASTINT (p->pid), signo);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2943 return;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2944 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2945
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2946 /* gid may be a pid, or minus a pgrp's number */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2947 #ifdef TIOCSIGSEND
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2948 if (!NILP (current_group))
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
2949 ioctl (XINT (p->infd), TIOCSIGSEND, signo);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2950 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2951 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2952 gid = - XFASTINT (p->pid);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2953 kill (gid, signo);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2954 }
849
c7b49118e101 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 822
diff changeset
2955 #else /* ! defined (TIOCSIGSEND) */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2956 EMACS_KILLPG (-gid, signo);
849
c7b49118e101 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 822
diff changeset
2957 #endif /* ! defined (TIOCSIGSEND) */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2958 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2959
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2960 DEFUN ("interrupt-process", Finterrupt_process, Sinterrupt_process, 0, 2, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2961 "Interrupt process PROCESS. May be process or name of one.\n\
808
707866b2a190 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 765
diff changeset
2962 PROCESS may be a process, a buffer, or the name of a process or buffer.\n\
7220
a33eb16cab9d (Fopen_network_stream): Retry the connect if EADDRINUSE. Ignore EISCONN.
Richard M. Stallman <rms@gnu.org>
parents: 7157
diff changeset
2963 nil or no arg means current buffer's process.\n\
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2964 Second arg CURRENT-GROUP non-nil means send signal to\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2965 the current process-group of the process's controlling terminal\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2966 rather than to the process's own process group.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2967 If the process is a shell, this means interrupt current subjob\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2968 rather than the shell.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2969 (process, current_group)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2970 Lisp_Object process, current_group;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2971 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2972 process_send_signal (process, SIGINT, current_group, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2973 return process;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2974 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2975
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2976 DEFUN ("kill-process", Fkill_process, Skill_process, 0, 2, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2977 "Kill process PROCESS. May be process or name of one.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2978 See function `interrupt-process' for more details on usage.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2979 (process, current_group)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2980 Lisp_Object process, current_group;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2981 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2982 process_send_signal (process, SIGKILL, current_group, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2983 return process;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2984 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2985
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2986 DEFUN ("quit-process", Fquit_process, Squit_process, 0, 2, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2987 "Send QUIT signal to process PROCESS. May be process or name of one.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2988 See function `interrupt-process' for more details on usage.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2989 (process, current_group)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2990 Lisp_Object process, current_group;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2991 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2992 process_send_signal (process, SIGQUIT, current_group, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2993 return process;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2994 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2995
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2996 DEFUN ("stop-process", Fstop_process, Sstop_process, 0, 2, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2997 "Stop process PROCESS. May be process or name of one.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2998 See function `interrupt-process' for more details on usage.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2999 (process, current_group)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3000 Lisp_Object process, current_group;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3001 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3002 #ifndef SIGTSTP
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3003 error ("no SIGTSTP support");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3004 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3005 process_send_signal (process, SIGTSTP, current_group, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3006 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3007 return process;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3008 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3009
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3010 DEFUN ("continue-process", Fcontinue_process, Scontinue_process, 0, 2, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3011 "Continue process PROCESS. May be process or name of one.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3012 See function `interrupt-process' for more details on usage.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3013 (process, current_group)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3014 Lisp_Object process, current_group;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3015 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3016 #ifdef SIGCONT
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3017 process_send_signal (process, SIGCONT, current_group, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3018 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3019 error ("no SIGCONT support");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3020 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3021 return process;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3022 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3023
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3024 DEFUN ("signal-process", Fsignal_process, Ssignal_process,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3025 2, 2, "nProcess number: \nnSignal code: ",
11144
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3026 "Send the process with process id PID the signal with code SIGCODE.\n\
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3027 PID must be an integer. The process need not be a child of this Emacs.\n\
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3028 SIGCODE may be an integer, or a symbol whose name is a signal name.")
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3029 (pid, sigcode)
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3030 Lisp_Object pid, sigcode;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3031 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3032 CHECK_NUMBER (pid, 0);
11144
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3033
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3034 #define handle_signal(NAME, VALUE) \
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3035 else if (!strcmp (name, NAME)) \
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3036 XSETINT (sigcode, VALUE)
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3037
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3038 if (INTEGERP (sigcode))
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3039 ;
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3040 else
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3041 {
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3042 unsigned char *name;
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3043
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3044 CHECK_SYMBOL (sigcode, 1);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3045 name = XSYMBOL (sigcode)->name->data;
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3046
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3047 if (0)
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3048 ;
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3049 #ifdef SIGHUP
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3050 handle_signal ("SIGHUP", SIGHUP);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3051 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3052 #ifdef SIGINT
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3053 handle_signal ("SIGINT", SIGINT);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3054 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3055 #ifdef SIGQUIT
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3056 handle_signal ("SIGQUIT", SIGQUIT);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3057 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3058 #ifdef SIGILL
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3059 handle_signal ("SIGILL", SIGILL);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3060 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3061 #ifdef SIGABRT
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3062 handle_signal ("SIGABRT", SIGABRT);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3063 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3064 #ifdef SIGEMT
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3065 handle_signal ("SIGEMT", SIGEMT);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3066 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3067 #ifdef SIGKILL
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3068 handle_signal ("SIGKILL", SIGKILL);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3069 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3070 #ifdef SIGFPE
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3071 handle_signal ("SIGFPE", SIGFPE);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3072 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3073 #ifdef SIGBUS
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3074 handle_signal ("SIGBUS", SIGBUS);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3075 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3076 #ifdef SIGSEGV
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3077 handle_signal ("SIGSEGV", SIGSEGV);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3078 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3079 #ifdef SIGSYS
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3080 handle_signal ("SIGSYS", SIGSYS);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3081 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3082 #ifdef SIGPIPE
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3083 handle_signal ("SIGPIPE", SIGPIPE);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3084 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3085 #ifdef SIGALRM
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3086 handle_signal ("SIGALRM", SIGALRM);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3087 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3088 #ifdef SIGTERM
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3089 handle_signal ("SIGTERM", SIGTERM);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3090 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3091 #ifdef SIGURG
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3092 handle_signal ("SIGURG", SIGURG);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3093 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3094 #ifdef SIGSTOP
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3095 handle_signal ("SIGSTOP", SIGSTOP);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3096 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3097 #ifdef SIGTSTP
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3098 handle_signal ("SIGTSTP", SIGTSTP);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3099 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3100 #ifdef SIGCONT
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3101 handle_signal ("SIGCONT", SIGCONT);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3102 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3103 #ifdef SIGCHLD
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3104 handle_signal ("SIGCHLD", SIGCHLD);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3105 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3106 #ifdef SIGTTIN
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3107 handle_signal ("SIGTTIN", SIGTTIN);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3108 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3109 #ifdef SIGTTOU
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3110 handle_signal ("SIGTTOU", SIGTTOU);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3111 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3112 #ifdef SIGIO
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3113 handle_signal ("SIGIO", SIGIO);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3114 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3115 #ifdef SIGXCPU
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3116 handle_signal ("SIGXCPU", SIGXCPU);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3117 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3118 #ifdef SIGXFSZ
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3119 handle_signal ("SIGXFSZ", SIGXFSZ);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3120 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3121 #ifdef SIGVTALRM
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3122 handle_signal ("SIGVTALRM", SIGVTALRM);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3123 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3124 #ifdef SIGPROF
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3125 handle_signal ("SIGPROF", SIGPROF);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3126 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3127 #ifdef SIGWINCH
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3128 handle_signal ("SIGWINCH", SIGWINCH);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3129 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3130 #ifdef SIGINFO
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3131 handle_signal ("SIGINFO", SIGINFO);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3132 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3133 #ifdef SIGUSR1
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3134 handle_signal ("SIGUSR1", SIGUSR1);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3135 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3136 #ifdef SIGUSR2
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3137 handle_signal ("SIGUSR2", SIGUSR2);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3138 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3139 else
11148
117b32676686 (Fsignal_process): SIGCODE is a symbol, not a string.
Karl Heuer <kwzh@gnu.org>
parents: 11144
diff changeset
3140 error ("Undefined signal name %s", name);
11144
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3141 }
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3142
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3143 #undef handle_signal
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3144
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
3145 #ifdef WINDOWSNT
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
3146 /* Only works for kill-type signals */
11144
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3147 return make_number (win32_kill_process (XINT (pid), XINT (sigcode)));
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
3148 #else
11144
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3149 return make_number (kill (XINT (pid), XINT (sigcode)));
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
3150 #endif
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3151 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3152
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3153 DEFUN ("process-send-eof", Fprocess_send_eof, Sprocess_send_eof, 0, 1, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3154 "Make PROCESS see end-of-file in its input.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3155 Eof comes after any text already sent to it.\n\
808
707866b2a190 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 765
diff changeset
3156 PROCESS may be a process, a buffer, the name of a process or buffer, or\n\
7884
066a06dd3bd3 (Fprocess_send_eof): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 7764
diff changeset
3157 nil, indicating the current buffer's process.\n\
066a06dd3bd3 (Fprocess_send_eof): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 7764
diff changeset
3158 If PROCESS is a network connection, or is a process communicating\n\
066a06dd3bd3 (Fprocess_send_eof): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 7764
diff changeset
3159 through a pipe (as opposed to a pty), then you cannot send any more\n\
066a06dd3bd3 (Fprocess_send_eof): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 7764
diff changeset
3160 text to PROCESS after you call this function.")
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3161 (process)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3162 Lisp_Object process;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3163 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3164 Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3165
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3166 proc = get_process (process);
2221
7edc78402205 (Fprocess_send_eof): Make sure proc is running.
Richard M. Stallman <rms@gnu.org>
parents: 2200
diff changeset
3167
7edc78402205 (Fprocess_send_eof): Make sure proc is running.
Richard M. Stallman <rms@gnu.org>
parents: 2200
diff changeset
3168 /* Make sure the process is really alive. */
7edc78402205 (Fprocess_send_eof): Make sure proc is running.
Richard M. Stallman <rms@gnu.org>
parents: 2200
diff changeset
3169 if (! NILP (XPROCESS (proc)->raw_status_low))
7edc78402205 (Fprocess_send_eof): Make sure proc is running.
Richard M. Stallman <rms@gnu.org>
parents: 2200
diff changeset
3170 update_status (XPROCESS (proc));
7edc78402205 (Fprocess_send_eof): Make sure proc is running.
Richard M. Stallman <rms@gnu.org>
parents: 2200
diff changeset
3171 if (! EQ (XPROCESS (proc)->status, Qrun))
2222
d81c60c5f9ce Fix typo in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 2221
diff changeset
3172 error ("Process %s not running", XSTRING (XPROCESS (proc)->name)->data);
2221
7edc78402205 (Fprocess_send_eof): Make sure proc is running.
Richard M. Stallman <rms@gnu.org>
parents: 2200
diff changeset
3173
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3174 #ifdef VMS
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3175 send_process (proc, "\032", 1, Qnil); /* ^z */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3176 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3177 if (!NILP (XPROCESS (proc)->pty_flag))
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3178 send_process (proc, "\004", 1, Qnil);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3179 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3180 {
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
3181 close (XINT (XPROCESS (proc)->outfd));
9277
21f6120be5ba (make_process, create_process, Fopen_network_stream, deactivate_process,
Karl Heuer <kwzh@gnu.org>
parents: 9115
diff changeset
3182 XSETINT (XPROCESS (proc)->outfd, open (NULL_DEVICE, O_WRONLY));
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3183 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3184 #endif /* VMS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3185 return process;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3186 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3187
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3188 /* Kill all processes associated with `buffer'.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3189 If `buffer' is nil, kill all processes */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3190
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3191 kill_buffer_processes (buffer)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3192 Lisp_Object buffer;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3193 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3194 Lisp_Object tail, proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3195
9952
9daedd94a204 (NETCONN_P, kill_buffer_processes): Use the new type-test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9882
diff changeset
3196 for (tail = Vprocess_alist; GC_CONSP (tail); tail = XCONS (tail)->cdr)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3197 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3198 proc = XCONS (XCONS (tail)->car)->cdr;
9952
9daedd94a204 (NETCONN_P, kill_buffer_processes): Use the new type-test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9882
diff changeset
3199 if (GC_PROCESSP (proc)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3200 && (NILP (buffer) || EQ (XPROCESS (proc)->buffer, buffer)))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3201 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3202 if (NETCONN_P (proc))
7764
fad00b057e50 (kill_buffer_processes): For net conn, use Fdelete_process.
Richard M. Stallman <rms@gnu.org>
parents: 7748
diff changeset
3203 Fdelete_process (proc);
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
3204 else if (XINT (XPROCESS (proc)->infd) >= 0)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3205 process_send_signal (proc, SIGHUP, Qnil, 1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3206 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3207 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3208 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3209
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3210 /* On receipt of a signal that a child status has changed,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3211 loop asking about children with changed statuses until
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3212 the system says there are no more.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3213 All we do is change the status;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3214 we do not run sentinels or print notifications.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3215 That is saved for the next time keyboard input is done,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3216 in order to avoid timing errors. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3217
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3218 /** WARNING: this can be called during garbage collection.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3219 Therefore, it must not be fooled by the presence of mark bits in
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3220 Lisp objects. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3221
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3222 /** USG WARNING: Although it is not obvious from the documentation
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3223 in signal(2), on a USG system the SIGCLD handler MUST NOT call
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3224 signal() before executing at least one wait(), otherwise the handler
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3225 will be called again, resulting in an infinite loop. The relevant
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3226 portion of the documentation reads "SIGCLD signals will be queued
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3227 and the signal-catching function will be continually reentered until
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3228 the queue is empty". Invoking signal() causes the kernel to reexamine
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3229 the SIGCLD queue. Fred Fish, UniSoft Systems Inc. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3230
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3231 SIGTYPE
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3232 sigchld_handler (signo)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3233 int signo;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3234 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3235 int old_errno = errno;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3236 Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3237 register struct Lisp_Process *p;
1925
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
3238 extern EMACS_TIME *input_available_clear_time;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3239
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3240 #ifdef BSD4_1
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3241 extern int sigheld;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3242 sigheld |= sigbit (SIGCHLD);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3243 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3244
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3245 while (1)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3246 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3247 register int pid;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3248 WAITTYPE w;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3249 Lisp_Object tail;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3250
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3251 #ifdef WNOHANG
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3252 #ifndef WUNTRACED
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3253 #define WUNTRACED 0
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3254 #endif /* no WUNTRACED */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3255 /* Keep trying to get a status until we get a definitive result. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3256 do
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3257 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3258 errno = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3259 pid = wait3 (&w, WNOHANG | WUNTRACED, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3260 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3261 while (pid <= 0 && errno == EINTR);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3262
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3263 if (pid <= 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3264 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3265 /* A real failure. We have done all our job, so return. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3266
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3267 /* USG systems forget handlers when they are used;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3268 must reestablish each time */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3269 #ifdef USG
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3270 signal (signo, sigchld_handler); /* WARNING - must come after wait3() */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3271 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3272 #ifdef BSD4_1
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3273 sigheld &= ~sigbit (SIGCHLD);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3274 sigrelse (SIGCHLD);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3275 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3276 errno = old_errno;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3277 return;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3278 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3279 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3280 pid = wait (&w);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3281 #endif /* no WNOHANG */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3282
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3283 /* Find the process that signaled us, and record its status. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3284
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3285 p = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3286 for (tail = Vprocess_alist; XSYMBOL (tail) != XSYMBOL (Qnil); tail = XCONS (tail)->cdr)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3287 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3288 proc = XCONS (XCONS (tail)->car)->cdr;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3289 p = XPROCESS (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3290 if (EQ (p->childp, Qt) && XFASTINT (p->pid) == pid)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3291 break;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3292 p = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3293 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3294
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3295 /* Look for an asynchronous process whose pid hasn't been filled
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3296 in yet. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3297 if (p == 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3298 for (tail = Vprocess_alist; XSYMBOL (tail) != XSYMBOL (Qnil); tail = XCONS (tail)->cdr)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3299 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3300 proc = XCONS (XCONS (tail)->car)->cdr;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3301 p = XPROCESS (proc);
9115
59bc2d010b5f (decode_status, Fprocessp, Fget_process, Fget_buffer_process, Fprocess_status,
Karl Heuer <kwzh@gnu.org>
parents: 9034
diff changeset
3302 if (INTEGERP (p->pid) && XINT (p->pid) == -1)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3303 break;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3304 p = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3305 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3306
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3307 /* Change the status of the process that was found. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3308 if (p != 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3309 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3310 union { int i; WAITTYPE wt; } u;
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
3311 int clear_desc_flag = 0;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3312
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3313 XSETINT (p->tick, ++process_tick);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3314 u.wt = w;
12324
41bd44279127 (sigchld_handler): Change XSETFASTINT to XSETINT.
Richard M. Stallman <rms@gnu.org>
parents: 12215
diff changeset
3315 XSETINT (p->raw_status_low, u.i & 0xffff);
41bd44279127 (sigchld_handler): Change XSETFASTINT to XSETINT.
Richard M. Stallman <rms@gnu.org>
parents: 12215
diff changeset
3316 XSETINT (p->raw_status_high, u.i >> 16);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3317
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3318 /* If process has terminated, stop waiting for its output. */
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
3319 if ((WIFSIGNALED (w) || WIFEXITED (w))
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
3320 && XINT (p->infd) >= 0)
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
3321 clear_desc_flag = 1;
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
3322
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
3323 /* We use clear_desc_flag to avoid a compiler bug in Microsoft C. */
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
3324 if (clear_desc_flag)
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
3325 {
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
3326 FD_CLR (XINT (p->infd), &input_wait_mask);
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
3327 FD_CLR (XINT (p->infd), &non_keyboard_wait_mask);
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
3328 }
1925
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
3329
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
3330 /* Tell wait_reading_process_input that it needs to wake up and
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
3331 look around. */
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
3332 if (input_available_clear_time)
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
3333 EMACS_SET_SECS_USECS (*input_available_clear_time, 0, 0);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3334 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3335
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3336 /* There was no asynchronous process found for that id. Check
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3337 if we have a synchronous process. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3338 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3339 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3340 synch_process_alive = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3341
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3342 /* Report the status of the synchronous process. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3343 if (WIFEXITED (w))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3344 synch_process_retcode = WRETCODE (w);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3345 else if (WIFSIGNALED (w))
5579
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
3346 {
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
3347 int code = WTERMSIG (w);
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
3348 char *signame = 0;
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
3349
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
3350 if (code < NSIG)
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
3351 {
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
3352 #ifndef VMS
9705
f7535deb913a (status_message): Add a cast.
Richard M. Stallman <rms@gnu.org>
parents: 9697
diff changeset
3353 /* Suppress warning if the table has const char *. */
f7535deb913a (status_message): Add a cast.
Richard M. Stallman <rms@gnu.org>
parents: 9697
diff changeset
3354 signame = (char *) sys_siglist[code];
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
3355 #else
5579
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
3356 signame = sys_errlist[code];
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
3357 #endif
5579
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
3358 }
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
3359 if (signame == 0)
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
3360 signame = "unknown";
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
3361
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
3362 synch_process_death = signame;
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
3363 }
1925
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
3364
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
3365 /* Tell wait_reading_process_input that it needs to wake up and
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
3366 look around. */
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
3367 if (input_available_clear_time)
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
3368 EMACS_SET_SECS_USECS (*input_available_clear_time, 0, 0);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3369 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3370
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3371 /* On some systems, we must return right away.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3372 If any more processes want to signal us, we will
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3373 get another signal.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3374 Otherwise (on systems that have WNOHANG), loop around
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3375 to use up all the processes that have something to tell us. */
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
3376 #if defined (USG) && ! (defined (HPUX) && defined (WNOHANG)) || defined (WINDOWSNT)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3377 #ifdef USG
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3378 signal (signo, sigchld_handler);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3379 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3380 errno = old_errno;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3381 return;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3382 #endif /* USG, but not HPUX with WNOHANG */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3383 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3384 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3385
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3386
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3387 static Lisp_Object
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3388 exec_sentinel_unwind (data)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3389 Lisp_Object data;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3390 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3391 XPROCESS (XCONS (data)->car)->sentinel = XCONS (data)->cdr;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3392 return Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3393 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3394
9030
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
3395 static Lisp_Object
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
3396 exec_sentinel_error_handler (error)
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
3397 Lisp_Object error;
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
3398 {
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
3399 cmd_error_internal (error, "error in process sentinel: ");
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
3400 Vinhibit_quit = Qt;
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
3401 update_echo_area ();
11277
d4547e4b0aab (read_process_output_error_handler)
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
3402 Fsleep_for (make_number (2), Qnil);
9030
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
3403 }
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
3404
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3405 static void
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3406 exec_sentinel (proc, reason)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3407 Lisp_Object proc, reason;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3408 {
10914
413d44c0bd41 (exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents: 10744
diff changeset
3409 Lisp_Object sentinel, obuffer, odeactivate, okeymap;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3410 register struct Lisp_Process *p = XPROCESS (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3411 int count = specpdl_ptr - specpdl;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3412
10914
413d44c0bd41 (exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents: 10744
diff changeset
3413 /* No need to gcpro these, because all we do with them later
413d44c0bd41 (exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents: 10744
diff changeset
3414 is test them for EQness, and none of them should be a string. */
7454
8d9e41a175fa (exec_sentinel): Don't deactivate the mark. Check for asynch buffer switch.
Karl Heuer <kwzh@gnu.org>
parents: 7414
diff changeset
3415 odeactivate = Vdeactivate_mark;
10914
413d44c0bd41 (exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents: 10744
diff changeset
3416 XSETBUFFER (obuffer, current_buffer);
413d44c0bd41 (exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents: 10744
diff changeset
3417 okeymap = current_buffer->keymap;
413d44c0bd41 (exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents: 10744
diff changeset
3418
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3419 sentinel = p->sentinel;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3420 if (NILP (sentinel))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3421 return;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3422
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3423 /* Zilch the sentinel while it's running, to avoid recursive invocations;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3424 assure that it gets restored no matter how the sentinel exits. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3425 p->sentinel = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3426 record_unwind_protect (exec_sentinel_unwind, Fcons (proc, sentinel));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3427 /* Inhibit quit so that random quits don't screw up a running filter. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3428 specbind (Qinhibit_quit, Qt);
8231
5226ed89c1a6 (Qlast_nonmenu_event): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8063
diff changeset
3429 specbind (Qlast_nonmenu_event, Qt);
9030
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
3430
10032
f689803caa92 Added code for automatically saving and restoring the match data
Francesco Potortì <pot@gnu.org>
parents: 9969
diff changeset
3431 running_asynch_code = 1;
9030
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
3432 internal_condition_case_1 (read_process_output_call,
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
3433 Fcons (sentinel,
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
3434 Fcons (proc, Fcons (reason, Qnil))),
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
3435 !NILP (Vdebug_on_error) ? Qnil : Qerror,
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
3436 exec_sentinel_error_handler);
10032
f689803caa92 Added code for automatically saving and restoring the match data
Francesco Potortì <pot@gnu.org>
parents: 9969
diff changeset
3437 running_asynch_code = 0;
f689803caa92 Added code for automatically saving and restoring the match data
Francesco Potortì <pot@gnu.org>
parents: 9969
diff changeset
3438 restore_match_data ();
7454
8d9e41a175fa (exec_sentinel): Don't deactivate the mark. Check for asynch buffer switch.
Karl Heuer <kwzh@gnu.org>
parents: 7414
diff changeset
3439
8d9e41a175fa (exec_sentinel): Don't deactivate the mark. Check for asynch buffer switch.
Karl Heuer <kwzh@gnu.org>
parents: 7414
diff changeset
3440 Vdeactivate_mark = odeactivate;
12808
4db1f387e85f (read_process_output, exec_sentinel): Call
Richard M. Stallman <rms@gnu.org>
parents: 12749
diff changeset
3441 #if 0
10914
413d44c0bd41 (exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents: 10744
diff changeset
3442 if (! EQ (Fcurrent_buffer (), obuffer)
413d44c0bd41 (exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents: 10744
diff changeset
3443 || ! EQ (current_buffer->keymap, okeymap))
12808
4db1f387e85f (read_process_output, exec_sentinel): Call
Richard M. Stallman <rms@gnu.org>
parents: 12749
diff changeset
3444 #endif
13159
2af96ac471bc (exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents: 12808
diff changeset
3445 /* But do it only if the caller is actually going to read events.
2af96ac471bc (exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents: 12808
diff changeset
3446 Otherwise there's no need to make him wake up, and it could
2af96ac471bc (exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents: 12808
diff changeset
3447 cause trouble (for example it would make Fsit_for return). */
2af96ac471bc (exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents: 12808
diff changeset
3448 if (waiting_for_user_input_p == -1)
2af96ac471bc (exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents: 12808
diff changeset
3449 record_asynch_buffer_change ();
7454
8d9e41a175fa (exec_sentinel): Don't deactivate the mark. Check for asynch buffer switch.
Karl Heuer <kwzh@gnu.org>
parents: 7414
diff changeset
3450
5561
fd7524d61a8d (read_process_output): Supply second arg to unbind_to.
Richard M. Stallman <rms@gnu.org>
parents: 5548
diff changeset
3451 unbind_to (count, Qnil);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3452 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3453
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3454 /* Report all recent events of a change in process status
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3455 (either run the sentinel or output a message).
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3456 This is done while Emacs is waiting for keyboard input. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3457
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3458 status_notify ()
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3459 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3460 register Lisp_Object proc, buffer;
6515
df7438605e1e (status_notify): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents: 6429
diff changeset
3461 Lisp_Object tail, msg;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3462 struct gcpro gcpro1, gcpro2;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3463
6515
df7438605e1e (status_notify): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents: 6429
diff changeset
3464 tail = Qnil;
df7438605e1e (status_notify): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents: 6429
diff changeset
3465 msg = Qnil;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3466 /* We need to gcpro tail; if read_process_output calls a filter
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3467 which deletes a process and removes the cons to which tail points
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3468 from Vprocess_alist, and then causes a GC, tail is an unprotected
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3469 reference. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3470 GCPRO2 (tail, msg);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3471
12215
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3472 /* Set this now, so that if new processes are created by sentinels
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3473 that we run, we get called again to handle their status changes. */
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3474 update_tick = process_tick;
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3475
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3476 for (tail = Vprocess_alist; !NILP (tail); tail = Fcdr (tail))
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3477 {
12215
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3478 Lisp_Object symbol;
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3479 register struct Lisp_Process *p;
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3480
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3481 proc = Fcdr (Fcar (tail));
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3482 p = XPROCESS (proc);
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3483
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3484 if (XINT (p->tick) != XINT (p->update_tick))
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3485 {
12215
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3486 XSETINT (p->update_tick, XINT (p->tick));
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3487
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3488 /* If process is still active, read any output that remains. */
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3489 if (XINT (p->infd) >= 0)
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3490 while (! EQ (p->filter, Qt)
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3491 && read_process_output (proc, XINT (p->infd)) > 0);
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3492
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3493 buffer = p->buffer;
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3494
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3495 /* Get the text to use for the message. */
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3496 if (!NILP (p->raw_status_low))
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3497 update_status (p);
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3498 msg = status_message (p->status);
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3499
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3500 /* If process is terminated, deactivate it or delete it. */
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3501 symbol = p->status;
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3502 if (CONSP (p->status))
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3503 symbol = XCONS (p->status)->car;
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3504
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3505 if (EQ (symbol, Qsignal) || EQ (symbol, Qexit)
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3506 || EQ (symbol, Qclosed))
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3507 {
12215
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3508 if (delete_exited_processes)
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3509 remove_process (proc);
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3510 else
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3511 deactivate_process (proc);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3512 }
12215
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3513
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3514 /* Now output the message suitably. */
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3515 if (!NILP (p->sentinel))
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3516 exec_sentinel (proc, msg);
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3517 /* Don't bother with a message in the buffer
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3518 when a process becomes runnable. */
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3519 else if (!EQ (symbol, Qrun) && !NILP (buffer))
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3520 {
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3521 Lisp_Object ro, tem;
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3522 struct buffer *old = current_buffer;
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3523 int opoint;
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3524
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3525 ro = XBUFFER (buffer)->read_only;
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3526
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3527 /* Avoid error if buffer is deleted
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3528 (probably that's why the process is dead, too) */
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3529 if (NILP (XBUFFER (buffer)->name))
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3530 continue;
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3531 Fset_buffer (buffer);
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3532 opoint = point;
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3533 /* Insert new output into buffer
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3534 at the current end-of-output marker,
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3535 thus preserving logical ordering of input and output. */
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3536 if (XMARKER (p->mark)->buffer)
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3537 SET_PT (marker_position (p->mark));
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3538 else
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3539 SET_PT (ZV);
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3540 if (point <= opoint)
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3541 opoint += XSTRING (msg)->size + XSTRING (p->name)->size + 10;
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3542
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3543 tem = current_buffer->read_only;
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3544 current_buffer->read_only = Qnil;
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3545 insert_string ("\nProcess ");
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3546 Finsert (1, &p->name);
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3547 insert_string (" ");
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3548 Finsert (1, &msg);
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3549 current_buffer->read_only = tem;
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3550 Fset_marker (p->mark, make_number (point), p->buffer);
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3551
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3552 SET_PT (opoint);
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3553 set_buffer_internal (old);
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3554 }
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3555 }
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3556 } /* end for */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3557
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3558 update_mode_lines++; /* in case buffers use %s in mode-line-format */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3559 redisplay_preserve_echo_area ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3560
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3561 UNGCPRO;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3562 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3563
9686
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3564 /* The first time this is called, assume keyboard input comes from DESC
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3565 instead of from where we used to expect it.
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3566 Subsequent calls mean assume input keyboard can come from DESC
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3567 in addition to other places. */
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3568
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3569 static int add_keyboard_wait_descriptor_called_flag;
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3570
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3571 void
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3572 add_keyboard_wait_descriptor (desc)
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3573 int desc;
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3574 {
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3575 if (! add_keyboard_wait_descriptor_called_flag)
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3576 FD_CLR (0, &input_wait_mask);
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3577 add_keyboard_wait_descriptor_called_flag = 1;
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3578 FD_SET (desc, &input_wait_mask);
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3579 if (desc > max_keyboard_desc)
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3580 max_keyboard_desc = desc;
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3581 }
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3582
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3583 /* From now on, do not expect DESC to give keyboard input. */
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3584
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3585 void
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3586 delete_keyboard_wait_descriptor (desc)
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3587 int desc;
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3588 {
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3589 int fd;
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3590 int lim = max_keyboard_desc;
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3591
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3592 FD_CLR (desc, &input_wait_mask);
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3593
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3594 if (desc == max_keyboard_desc)
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3595 for (fd = 0; fd < lim; fd++)
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3596 if (FD_ISSET (fd, &input_wait_mask)
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3597 && !FD_ISSET (fd, &non_keyboard_wait_mask))
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3598 max_keyboard_desc = fd;
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3599 }
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3600
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3601 /* Return nonzero if *MASK has a bit set
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3602 that corresponds to one of the keyboard input descriptors. */
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3603
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3604 int
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3605 keyboard_bit_set (mask)
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3606 SELECT_TYPE *mask;
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3607 {
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3608 int fd;
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3609
12541
33a4586124e9 (keyboard_bit_set): Fix one-off in loop end.
Karl Heuer <kwzh@gnu.org>
parents: 12491
diff changeset
3610 for (fd = 0; fd <= max_keyboard_desc; fd++)
9686
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3611 if (FD_ISSET (fd, mask) && FD_ISSET (fd, &input_wait_mask)
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3612 && !FD_ISSET (fd, &non_keyboard_wait_mask))
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3613 return 1;
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3614
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3615 return 0;
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3616 }
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3617
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3618 init_process ()
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3619 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3620 register int i;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3621
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3622 #ifdef SIGCHLD
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3623 #ifndef CANNOT_DUMP
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3624 if (! noninteractive || initialized)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3625 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3626 signal (SIGCHLD, sigchld_handler);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3627 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3628
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3629 FD_ZERO (&input_wait_mask);
9686
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3630 FD_ZERO (&non_keyboard_wait_mask);
7044
7032d07f5ad9 (max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7013
diff changeset
3631 max_process_desc = 0;
4682
c4d471244116 (keyboard_descriptor): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4639
diff changeset
3632
9686
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
3633 FD_SET (0, &input_wait_mask);
4682
c4d471244116 (keyboard_descriptor): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4639
diff changeset
3634
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3635 Vprocess_alist = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3636 for (i = 0; i < MAXDESC; i++)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3637 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3638 chan_process[i] = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3639 proc_buffered_char[i] = -1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3640 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3641 }
4231
91a883c56382 (Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents: 4057
diff changeset
3642
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3643 syms_of_process ()
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3644 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3645 #ifdef HAVE_SOCKETS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3646 stream_process = intern ("stream");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3647 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3648 Qprocessp = intern ("processp");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3649 staticpro (&Qprocessp);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3650 Qrun = intern ("run");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3651 staticpro (&Qrun);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3652 Qstop = intern ("stop");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3653 staticpro (&Qstop);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3654 Qsignal = intern ("signal");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3655 staticpro (&Qsignal);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3656
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3657 /* Qexit is already staticpro'd by syms_of_eval; don't staticpro it
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3658 here again.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3659
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3660 Qexit = intern ("exit");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3661 staticpro (&Qexit); */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3662
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3663 Qopen = intern ("open");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3664 staticpro (&Qopen);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3665 Qclosed = intern ("closed");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3666 staticpro (&Qclosed);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3667
8231
5226ed89c1a6 (Qlast_nonmenu_event): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8063
diff changeset
3668 Qlast_nonmenu_event = intern ("last-nonmenu-event");
5226ed89c1a6 (Qlast_nonmenu_event): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8063
diff changeset
3669 staticpro (&Qlast_nonmenu_event);
5226ed89c1a6 (Qlast_nonmenu_event): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8063
diff changeset
3670
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3671 staticpro (&Vprocess_alist);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3672
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3673 DEFVAR_BOOL ("delete-exited-processes", &delete_exited_processes,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3674 "*Non-nil means delete processes immediately when they exit.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3675 nil means don't delete them until `list-processes' is run.");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3676
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3677 delete_exited_processes = 1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3678
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3679 DEFVAR_LISP ("process-connection-type", &Vprocess_connection_type,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3680 "Control type of device used to communicate with subprocesses.\n\
7220
a33eb16cab9d (Fopen_network_stream): Retry the connect if EADDRINUSE. Ignore EISCONN.
Richard M. Stallman <rms@gnu.org>
parents: 7157
diff changeset
3681 Values are nil to use a pipe, or t or `pty' to use a pty.\n\
a33eb16cab9d (Fopen_network_stream): Retry the connect if EADDRINUSE. Ignore EISCONN.
Richard M. Stallman <rms@gnu.org>
parents: 7157
diff changeset
3682 The value has no effect if the system has no ptys or if all ptys are busy:\n\
a33eb16cab9d (Fopen_network_stream): Retry the connect if EADDRINUSE. Ignore EISCONN.
Richard M. Stallman <rms@gnu.org>
parents: 7157
diff changeset
3683 then a pipe is used in any case.\n\
a33eb16cab9d (Fopen_network_stream): Retry the connect if EADDRINUSE. Ignore EISCONN.
Richard M. Stallman <rms@gnu.org>
parents: 7157
diff changeset
3684 The value takes effect when `start-process' is called.");
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3685 Vprocess_connection_type = Qt;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3686
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3687 defsubr (&Sprocessp);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3688 defsubr (&Sget_process);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3689 defsubr (&Sget_buffer_process);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3690 defsubr (&Sdelete_process);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3691 defsubr (&Sprocess_status);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3692 defsubr (&Sprocess_exit_status);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3693 defsubr (&Sprocess_id);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3694 defsubr (&Sprocess_name);
9030
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
3695 defsubr (&Sprocess_tty_name);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3696 defsubr (&Sprocess_command);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3697 defsubr (&Sset_process_buffer);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3698 defsubr (&Sprocess_buffer);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3699 defsubr (&Sprocess_mark);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3700 defsubr (&Sset_process_filter);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3701 defsubr (&Sprocess_filter);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3702 defsubr (&Sset_process_sentinel);
6830
bcaddbe53068 (Fset_process_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6823
diff changeset
3703 defsubr (&Sset_process_window_size);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3704 defsubr (&Sprocess_sentinel);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3705 defsubr (&Sprocess_kill_without_query);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3706 defsubr (&Slist_processes);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3707 defsubr (&Sprocess_list);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3708 defsubr (&Sstart_process);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3709 #ifdef HAVE_SOCKETS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3710 defsubr (&Sopen_network_stream);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3711 #endif /* HAVE_SOCKETS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3712 defsubr (&Saccept_process_output);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3713 defsubr (&Sprocess_send_region);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3714 defsubr (&Sprocess_send_string);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3715 defsubr (&Sinterrupt_process);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3716 defsubr (&Skill_process);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3717 defsubr (&Squit_process);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3718 defsubr (&Sstop_process);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3719 defsubr (&Scontinue_process);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3720 defsubr (&Sprocess_send_eof);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3721 defsubr (&Ssignal_process);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3722 defsubr (&Swaiting_for_user_input_p);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3723 /* defsubr (&Sprocess_connection); */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3724 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3725
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3726
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3727 #else /* not subprocesses */
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3728
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3729 #include <sys/types.h>
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3730 #include <errno.h>
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3731
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3732 #include "lisp.h"
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3733 #include "systime.h"
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3734 #include "termopts.h"
12132
017f32786ed3 [!subprocesses]: Include sysselect.h.
Karl Heuer <kwzh@gnu.org>
parents: 11926
diff changeset
3735 #include "sysselect.h"
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3736
765
e4093444f9f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 692
diff changeset
3737 extern int frame_garbaged;
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3738
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3739
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3740 /* As described above, except assuming that there are no subprocesses:
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3741
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3742 Wait for timeout to elapse and/or keyboard input to be available.
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3743
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3744 time_limit is:
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3745 timeout in seconds, or
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3746 zero for no limit, or
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3747 -1 means gobble data immediately available but don't wait for any.
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3748
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
3749 read_kbd is a Lisp_Object:
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3750 0 to ignore keyboard input, or
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3751 1 to return when input is available, or
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3752 -1 means caller will actually read the input, so don't throw to
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3753 the quit handler.
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3754 We know that read_kbd will never be a Lisp_Process, since
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3755 `subprocesses' isn't defined.
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3756
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3757 do_display != 0 means redisplay should be done to show subprocess
6429
1dbe24a029fd (wait_reading_process_input, both versions): Don't call
Richard M. Stallman <rms@gnu.org>
parents: 6393
diff changeset
3758 output that arrives.
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3759
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 3510
diff changeset
3760 Return true iff we received input from any process. */
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3761
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3762 int
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3763 wait_reading_process_input (time_limit, microsecs, read_kbd, do_display)
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
3764 int time_limit, microsecs;
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
3765 Lisp_Object read_kbd;
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
3766 int do_display;
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3767 {
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3768 EMACS_TIME end_time, timeout, *timeout_p;
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3769 int waitchannels;
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3770
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3771 /* What does time_limit really mean? */
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3772 if (time_limit || microsecs)
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3773 {
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3774 /* It's not infinite. */
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3775 timeout_p = &timeout;
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3776
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3777 if (time_limit == -1)
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3778 /* In fact, it's zero. */
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3779 EMACS_SET_SECS_USECS (timeout, 0, 0);
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3780 else
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3781 EMACS_SET_SECS_USECS (timeout, time_limit, microsecs);
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3782
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3783 /* How far in the future is that? */
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3784 EMACS_GET_TIME (end_time);
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3785 EMACS_ADD_TIME (end_time, end_time, timeout);
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3786 }
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3787 else
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3788 /* It's infinite. */
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3789 timeout_p = 0;
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3790
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3791 /* Turn off periodic alarms (in case they are in use)
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3792 because the select emulator uses alarms. */
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3793 stop_polling ();
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3794
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3795 for (;;)
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3796 {
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3797 int nfds;
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3798
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
3799 waitchannels = XINT (read_kbd) ? 1 : 0;
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3800
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3801 /* If calling from keyboard input, do not quit
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3802 since we want to return C-g as an input character.
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3803 Otherwise, do pending quit if requested. */
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
3804 if (XINT (read_kbd) >= 0)
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3805 QUIT;
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3806
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3807 if (timeout_p)
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3808 {
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3809 EMACS_GET_TIME (*timeout_p);
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3810 EMACS_SUB_TIME (*timeout_p, end_time, *timeout_p);
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3811 if (EMACS_TIME_NEG_P (*timeout_p))
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3812 break;
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3813 }
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3814
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3815 /* Cause C-g and alarm signals to take immediate action,
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3816 and cause input available signals to zero out timeout. */
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
3817 if (XINT (read_kbd) < 0)
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3818 set_waiting_for_input (&timeout);
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3819
765
e4093444f9f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 692
diff changeset
3820 /* If a frame has been newly mapped and needs updating,
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3821 reprocess its display stuff. */
6429
1dbe24a029fd (wait_reading_process_input, both versions): Don't call
Richard M. Stallman <rms@gnu.org>
parents: 6393
diff changeset
3822 if (frame_garbaged && do_display)
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3823 redisplay_preserve_echo_area ();
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3824
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
3825 if (XINT (read_kbd) && detect_input_pending ())
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3826 nfds = 0;
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3827 else
11926
40d7e6f04ebe (create_process, send_process): Add volatile qualifiers.
Karl Heuer <kwzh@gnu.org>
parents: 11845
diff changeset
3828 nfds = select (1, &waitchannels, (SELECT_TYPE *)0, (SELECT_TYPE *)0,
40d7e6f04ebe (create_process, send_process): Add volatile qualifiers.
Karl Heuer <kwzh@gnu.org>
parents: 11845
diff changeset
3829 timeout_p);
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3830
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3831 /* Make C-g and alarm signals set flags again */
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3832 clear_waiting_for_input ();
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3833
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3834 /* If we woke up due to SIGWINCH, actually change size now. */
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3835 do_pending_window_change ();
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3836
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3837 if (nfds == -1)
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3838 {
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3839 /* If the system call was interrupted, then go around the
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3840 loop again. */
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3841 if (errno == EINTR)
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3842 waitchannels = 0;
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3843 }
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3844 #ifdef sun
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3845 else if (nfds > 0 && (waitchannels & 1) && interrupt_input)
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3846 /* System sometimes fails to deliver SIGIO. */
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3847 kill (getpid (), SIGIO);
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3848 #endif
3915
55ed7a65746e (wait_reading_process_input): Use SIGIO only if defined.
Richard M. Stallman <rms@gnu.org>
parents: 3826
diff changeset
3849 #ifdef SIGIO
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
3850 if (XINT (read_kbd) && interrupt_input && (waitchannels & 1))
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3851 kill (0, SIGIO);
3915
55ed7a65746e (wait_reading_process_input): Use SIGIO only if defined.
Richard M. Stallman <rms@gnu.org>
parents: 3826
diff changeset
3852 #endif
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3853
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3854 /* If we have timed out (nfds == 0) or found some input (nfds > 0),
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3855 we should exit. */
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3856 if (nfds >= 0)
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3857 break;
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3858 }
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3859
2120
fc3cdca22f8d * process.c (process_send_signal): In the TERMIOS code for sending
Jim Blandy <jimb@redhat.com>
parents: 1925
diff changeset
3860 start_polling ();
fc3cdca22f8d * process.c (process_send_signal): In the TERMIOS code for sending
Jim Blandy <jimb@redhat.com>
parents: 1925
diff changeset
3861
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3862 return 0;
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3863 }
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3864
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3865
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3866 DEFUN ("get-buffer-process", Fget_buffer_process, Sget_buffer_process, 1, 1, 0,
6345
862304c3b015 (Fget_buffer_process): Fix typo in comment.
Karl Heuer <kwzh@gnu.org>
parents: 6313
diff changeset
3867 /* Don't confuse make-docfile by having two doc strings for this function.
4231
91a883c56382 (Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents: 4057
diff changeset
3868 make-docfile does not pay attention to #if, for good reason! */
91a883c56382 (Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents: 4057
diff changeset
3869 0)
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3870 (name)
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3871 register Lisp_Object name;
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3872 {
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3873 return Qnil;
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3874 }
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3875
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3876 /* Kill all processes associated with `buffer'.
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3877 If `buffer' is nil, kill all processes.
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3878 Since we have no subprocesses, this does nothing. */
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3879
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3880 kill_buffer_processes (buffer)
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3881 Lisp_Object buffer;
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3882 {
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3883 }
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3884
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3885 init_process ()
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3886 {
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3887 }
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3888
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3889 syms_of_process ()
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3890 {
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3891 defsubr (&Sget_buffer_process);
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3892 }
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3893
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3894
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3895 #endif /* not subprocesses */