annotate src/process.c @ 4413:5a00cec8e9b0

(fill-region-as-paragraph): When we take one word after the fill column, don't stop at period with just one space. When checking whether at beginning of line, if no fill prefix, ignore intervening whitespace.
author Richard M. Stallman <rms@gnu.org>
date Mon, 02 Aug 1993 05:55:56 +0000
parents 4055472194b5
children 76f242eb1fa8
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.
2961
e94a593c3952 Updated copyright years.
Jim Blandy <jimb@redhat.com>
parents: 2944
diff changeset
2 Copyright (C) 1985, 1986, 1987, 1988, 1993 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
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
23 #include "config.h"
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>
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
41
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
42 #ifdef HAVE_SOCKETS /* TCP connection support, if kernel can do it */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
43 #include <sys/socket.h>
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
44 #include <netdb.h>
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
45 #include <netinet/in.h>
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
46 #include <arpa/inet.h>
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
47 #endif /* HAVE_SOCKETS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
48
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
49 #if defined(BSD) || defined(STRIDE)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
50 #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
51 #if !defined (O_NDELAY) && defined (HAVE_PTYS) && !defined(USG5)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
52 #include <fcntl.h>
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
53 #endif /* HAVE_PTYS and no O_NDELAY */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
54 #endif /* BSD or STRIDE */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
55
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
56 #ifdef NEED_BSDTTY
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
57 #include <bsdtty.h>
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
58 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
59
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
60 #ifdef IRIS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
61 #include <sys/sysmacros.h> /* for "minor" */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
62 #endif /* not IRIS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
63
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
64 #include "systime.h"
1047
1ab1ed32e82a * process.c: Include "systty.h", not "systerm.h".
Jim Blandy <jimb@redhat.com>
parents: 1030
diff changeset
65 #include "systty.h"
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
66
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
67 #include "lisp.h"
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
68 #include "window.h"
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
69 #include "buffer.h"
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
70 #include "process.h"
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
71 #include "termhooks.h"
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
72 #include "termopts.h"
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
73 #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
74 #include "frame.h"
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
75
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
76 Lisp_Object Qrun, Qstop, Qsignal, Qopen, Qclosed;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
77 /* Qexit is declared and initialized in eval.c. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
78
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
79 /* a process object is a network connection when its childp field is neither
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
80 Qt nor Qnil but is instead a string (name of foreign host we
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
81 are connected to + name of port we are connected to) */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
82
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
83 #ifdef HAVE_SOCKETS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
84 static Lisp_Object stream_process;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
85
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
86 #define NETCONN_P(p) (XGCTYPE (XPROCESS (p)->childp) == Lisp_String)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
87 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
88 #define NETCONN_P(p) 0
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
89 #endif /* HAVE_SOCKETS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
90
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
91 /* Define first descriptor number available for subprocesses. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
92 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
93 #define FIRST_PROC_DESC 1
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
94 #else /* Not VMS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
95 #define FIRST_PROC_DESC 3
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
96 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
97
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
98 /* Define SIGCHLD as an alias for SIGCLD. There are many conditionals
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
99 testing SIGCHLD. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
100
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
101 #if !defined (SIGCHLD) && defined (SIGCLD)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
102 #define SIGCHLD SIGCLD
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
103 #endif /* SIGCLD */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
104
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
105 #include "syssignal.h"
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
106
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
107 /* Define the structure that the wait system call stores.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
108 On many systems, there is a structure defined for this.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
109 But on vanilla-ish USG systems there is not. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
110
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
111 #ifndef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
112 #ifndef WAITTYPE
2917
725698689fbd Some more changes from Michael K. Johnson for Linux.
Jim Blandy <jimb@redhat.com>
parents: 2894
diff changeset
113 #if (!defined (BSD) && !defined (UNIPLUS) && !defined (STRIDE) && !(defined (HPUX) && !defined (NOMULTIPLEJOBS)) && !defined (HAVE_WAIT_HEADER)) || defined (LINUX)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
114 #define WAITTYPE int
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
115 #define WIFSTOPPED(w) ((w&0377) == 0177)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
116 #define WIFSIGNALED(w) ((w&0377) != 0177 && (w&~0377) == 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
117 #define WIFEXITED(w) ((w&0377) == 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
118 #define WRETCODE(w) (w >> 8)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
119 #define WSTOPSIG(w) (w >> 8)
1030
9934251d8219 (WCOREDUMP): Define only if not defined.
Richard M. Stallman <rms@gnu.org>
parents: 1012
diff changeset
120 #define WTERMSIG(w) (w & 0377)
9934251d8219 (WCOREDUMP): Define only if not defined.
Richard M. Stallman <rms@gnu.org>
parents: 1012
diff changeset
121 #ifndef WCOREDUMP
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
122 #define WCOREDUMP(w) ((w&0200) != 0)
1030
9934251d8219 (WCOREDUMP): Define only if not defined.
Richard M. Stallman <rms@gnu.org>
parents: 1012
diff changeset
123 #endif
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
124 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
125 #ifdef BSD4_1
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
126 #include <wait.h>
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
127 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
128 #include <sys/wait.h>
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
129 #endif /* not BSD 4.1 */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
130
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
131 #define WAITTYPE union wait
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
132 #define WRETCODE(w) w.w_retcode
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
133 #define WCOREDUMP(w) w.w_coredump
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
134
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
135 #ifdef HPUX
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
136 /* HPUX version 7 has broken definitions of these. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
137 #undef WTERMSIG
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
138 #undef WSTOPSIG
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
139 #undef WIFSTOPPED
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
140 #undef WIFSIGNALED
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
141 #undef WIFEXITED
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
142 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
143
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
144 #ifndef WTERMSIG
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
145 #define WTERMSIG(w) w.w_termsig
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
146 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
147 #ifndef WSTOPSIG
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
148 #define WSTOPSIG(w) w.w_stopsig
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
149 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
150 #ifndef WIFSTOPPED
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
151 #define WIFSTOPPED(w) (WTERMSIG (w) == 0177)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
152 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
153 #ifndef WIFSIGNALED
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
154 #define WIFSIGNALED(w) (WTERMSIG (w) != 0177 && (WSTOPSIG (w)) == 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
155 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
156 #ifndef WIFEXITED
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
157 #define WIFEXITED(w) (WTERMSIG (w) == 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
158 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
159 #endif /* BSD or UNIPLUS or STRIDE */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
160 #endif /* no WAITTYPE */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
161 #else /* VMS */
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
162 #define WAITTYPE int
2357
9faa3a02ea97 * process.c [VMS] (DCL_PROMPT): Remove hack.
Jim Blandy <jimb@redhat.com>
parents: 2290
diff changeset
163 #define WIFSTOPPED(w) 0
9faa3a02ea97 * process.c [VMS] (DCL_PROMPT): Remove hack.
Jim Blandy <jimb@redhat.com>
parents: 2290
diff changeset
164 #define WIFSIGNALED(w) 0
9faa3a02ea97 * process.c [VMS] (DCL_PROMPT): Remove hack.
Jim Blandy <jimb@redhat.com>
parents: 2290
diff changeset
165 #define WIFEXITED(w) ((w) != -1)
9faa3a02ea97 * process.c [VMS] (DCL_PROMPT): Remove hack.
Jim Blandy <jimb@redhat.com>
parents: 2290
diff changeset
166 #define WRETCODE(w) (w)
9faa3a02ea97 * process.c [VMS] (DCL_PROMPT): Remove hack.
Jim Blandy <jimb@redhat.com>
parents: 2290
diff changeset
167 #define WSTOPSIG(w) (w)
9faa3a02ea97 * process.c [VMS] (DCL_PROMPT): Remove hack.
Jim Blandy <jimb@redhat.com>
parents: 2290
diff changeset
168 #define WCOREDUMP(w) 0
9faa3a02ea97 * process.c [VMS] (DCL_PROMPT): Remove hack.
Jim Blandy <jimb@redhat.com>
parents: 2290
diff changeset
169 #define WTERMSIG(w) (w)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
170 #include <ssdef.h>
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
171 #include <iodef.h>
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
172 #include <clidef.h>
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
173 #include "vmsproc.h"
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
174 #endif /* VMS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
175
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
176 extern errno;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
177 extern sys_nerr;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
178 extern char *sys_errlist[];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
179
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
180 #ifndef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
181 #ifndef BSD4_1
3023
cfd999700613 (create_process): Ignore retval from TIOCSTTY.
Richard M. Stallman <rms@gnu.org>
parents: 2961
diff changeset
182 #ifndef LINUX
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
183 extern char *sys_siglist[];
3023
cfd999700613 (create_process): Ignore retval from TIOCSTTY.
Richard M. Stallman <rms@gnu.org>
parents: 2961
diff changeset
184 #endif
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
185 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
186 char *sys_siglist[] =
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
187 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
188 "bum signal!!",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
189 "hangup",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
190 "interrupt",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
191 "quit",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
192 "illegal instruction",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
193 "trace trap",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
194 "iot instruction",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
195 "emt instruction",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
196 "floating point exception",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
197 "kill",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
198 "bus error",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
199 "segmentation violation",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
200 "bad argument to system call",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
201 "write on a pipe with no one to read it",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
202 "alarm clock",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
203 "software termination signal from kill",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
204 "status signal",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
205 "sendable stop signal not from tty",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
206 "stop signal from tty",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
207 "continue a stopped process",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
208 "child status has changed",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
209 "background read attempted from control tty",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
210 "background write attempted from control tty",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
211 "input record available at control tty",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
212 "exceeded CPU time limit",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
213 "exceeded file size limit"
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
214 };
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
215 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
216 #endif /* VMS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
217
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
218 /* t means use pty, nil means use a pipe,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
219 maybe other values to come. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
220 Lisp_Object Vprocess_connection_type;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
221
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
222 #ifdef SKTPAIR
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
223 #ifndef HAVE_SOCKETS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
224 #include <sys/socket.h>
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
225 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
226 #endif /* SKTPAIR */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
227
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
228 /* Number of events of change of status of a process. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
229 int process_tick;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
230
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
231 /* Number of events for which the user or sentinel has been notified. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
232 int update_tick;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
233
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
234 #ifdef FD_SET
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
235 /* We could get this from param.h, but better not to depend on finding that.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
236 And better not to risk that it might define other symbols used in this
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
237 file. */
3238
0f0d9e9c33f2 (MAXDESC): Get it from FD_SETSIZE if that exists.
Richard M. Stallman <rms@gnu.org>
parents: 3103
diff changeset
238 #ifdef FD_SETSIZE
0f0d9e9c33f2 (MAXDESC): Get it from FD_SETSIZE if that exists.
Richard M. Stallman <rms@gnu.org>
parents: 3103
diff changeset
239 #define MAXDESC FD_SETSIZE
0f0d9e9c33f2 (MAXDESC): Get it from FD_SETSIZE if that exists.
Richard M. Stallman <rms@gnu.org>
parents: 3103
diff changeset
240 #else
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
241 #define MAXDESC 64
3238
0f0d9e9c33f2 (MAXDESC): Get it from FD_SETSIZE if that exists.
Richard M. Stallman <rms@gnu.org>
parents: 3103
diff changeset
242 #endif
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
243 #define SELECT_TYPE fd_set
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
244 #else /* no FD_SET */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
245 #define MAXDESC 32
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
246 #define SELECT_TYPE int
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
247
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
248 /* Define the macros to access a single-int bitmap of descriptors. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
249 #define FD_SET(n, p) (*(p) |= (1 << (n)))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
250 #define FD_CLR(n, p) (*(p) &= ~(1 << (n)))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
251 #define FD_ISSET(n, p) (*(p) & (1 << (n)))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
252 #define FD_ZERO(p) (*(p) = 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
253 #endif /* no FD_SET */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
254
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
255 /* Mask of bits indicating the descriptors that we wait for input on */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
256
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
257 SELECT_TYPE input_wait_mask;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
258
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
259 int delete_exited_processes;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
260
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
261 /* Indexed by descriptor, gives the process (if any) for that descriptor */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
262 Lisp_Object chan_process[MAXDESC];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
263
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
264 /* Alist of elements (NAME . PROCESS) */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
265 Lisp_Object Vprocess_alist;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
266
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
267 Lisp_Object Qprocessp;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
268
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
269 Lisp_Object get_process ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
270
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
271 /* Buffered-ahead input char from process, indexed by channel.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
272 -1 means empty (no char is buffered).
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
273 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
274 output from the process is to read at least one char.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
275 Always -1 on systems that support FIONREAD. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
276
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
277 int proc_buffered_char[MAXDESC];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
278
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
279 /* Compute the Lisp form of the process status, p->status, from
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
280 the numeric status that was returned by `wait'. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
281
1522
19ccf004b172 * process.c: (status_convert): Declare this to return a
Jim Blandy <jimb@redhat.com>
parents: 1323
diff changeset
282 Lisp_Object status_convert ();
19ccf004b172 * process.c: (status_convert): Declare this to return a
Jim Blandy <jimb@redhat.com>
parents: 1323
diff changeset
283
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
284 update_status (p)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
285 struct Lisp_Process *p;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
286 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
287 union { int i; WAITTYPE wt; } u;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
288 u.i = XFASTINT (p->raw_status_low) + (XFASTINT (p->raw_status_high) << 16);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
289 p->status = status_convert (u.wt);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
290 p->raw_status_low = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
291 p->raw_status_high = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
292 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
293
3608
Jim Blandy <jimb@redhat.com>
parents: 3593
diff changeset
294 /* Convert a process status word in Unix format to
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
295 the list that we use internally. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
296
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
297 Lisp_Object
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
298 status_convert (w)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
299 WAITTYPE w;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
300 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
301 if (WIFSTOPPED (w))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
302 return Fcons (Qstop, Fcons (make_number (WSTOPSIG (w)), Qnil));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
303 else if (WIFEXITED (w))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
304 return Fcons (Qexit, Fcons (make_number (WRETCODE (w)),
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
305 WCOREDUMP (w) ? Qt : Qnil));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
306 else if (WIFSIGNALED (w))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
307 return Fcons (Qsignal, Fcons (make_number (WTERMSIG (w)),
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
308 WCOREDUMP (w) ? Qt : Qnil));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
309 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
310 return Qrun;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
311 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
312
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
313 /* Given a status-list, extract the three pieces of information
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
314 and store them individually through the three pointers. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
315
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
316 void
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
317 decode_status (l, symbol, code, coredump)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
318 Lisp_Object l;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
319 Lisp_Object *symbol;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
320 int *code;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
321 int *coredump;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
322 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
323 Lisp_Object tem;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
324
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
325 if (XTYPE (l) == Lisp_Symbol)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
326 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
327 *symbol = l;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
328 *code = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
329 *coredump = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
330 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
331 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
332 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
333 *symbol = XCONS (l)->car;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
334 tem = XCONS (l)->cdr;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
335 *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
336 tem = XCONS (tem)->cdr;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
337 *coredump = !NILP (tem);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
338 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
339 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
340
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
341 /* Return a string describing a process status list. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
342
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
343 Lisp_Object
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
344 status_message (status)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
345 Lisp_Object status;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
346 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
347 Lisp_Object symbol;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
348 int code, coredump;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
349 Lisp_Object string, string2;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
350
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
351 decode_status (status, &symbol, &code, &coredump);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
352
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
353 if (EQ (symbol, Qsignal) || EQ (symbol, Qstop))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
354 {
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
355 #ifndef VMS
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
356 string = build_string (code < NSIG ? sys_siglist[code] : "unknown");
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
357 #else
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
358 string = build_string (code < NSIG ? sys_errlist[code] : "unknown");
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
359 #endif
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
360 string2 = build_string (coredump ? " (core dumped)\n" : "\n");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
361 XSTRING (string)->data[0] = DOWNCASE (XSTRING (string)->data[0]);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
362 return concat2 (string, string2);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
363 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
364 else if (EQ (symbol, Qexit))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
365 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
366 if (code == 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
367 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
368 string = Fnumber_to_string (make_number (code));
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
369 string2 = build_string (coredump ? " (core dumped)\n" : "\n");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
370 return concat2 (build_string ("exited abnormally with code "),
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
371 concat2 (string, string2));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
372 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
373 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
374 return Fcopy_sequence (Fsymbol_name (symbol));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
375 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
376
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
377 #ifdef HAVE_PTYS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
378
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
379 /* Open an available pty, returning a file descriptor.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
380 Return -1 on failure.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
381 The file name of the terminal corresponding to the pty
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
382 is left in the variable pty_name. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
383
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
384 char pty_name[24];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
385
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
386 int
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
387 allocate_pty ()
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
388 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
389 struct stat stb;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
390 register c, i;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
391 int fd;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
392
624
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
393 /* Some systems name their pseudoterminals so that there are gaps in
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
394 the usual sequence - for example, on HP9000/S700 systems, there
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
395 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
396 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
397 end of the ptys. */
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
398 int failed_count = 0;
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
399
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
400 #ifdef PTY_ITERATION
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
401 PTY_ITERATION
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
402 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
403 for (c = FIRST_PTY_LETTER; c <= 'z'; c++)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
404 for (i = 0; i < 16; i++)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
405 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
406 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
407 #ifdef PTY_NAME_SPRINTF
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
408 PTY_NAME_SPRINTF
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
409 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
410 sprintf (pty_name, "/dev/pty%c%x", c, i);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
411 #endif /* no PTY_NAME_SPRINTF */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
412
822
c6e94e13926c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 808
diff changeset
413 #ifdef PTY_OPEN
c6e94e13926c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 808
diff changeset
414 PTY_OPEN;
c6e94e13926c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 808
diff changeset
415 #else /* no PTY_OPEN */
624
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
416 #ifdef IRIS
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
417 /* Unusual IRIS code */
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
418 *ptyv = open ("/dev/ptc", O_RDWR | O_NDELAY, 0);
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
419 if (fd < 0)
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
420 return -1;
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
421 if (fstat (fd, &stb) < 0)
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
422 return -1;
822
c6e94e13926c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 808
diff changeset
423 #else /* not IRIS */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
424 if (stat (pty_name, &stb) < 0)
624
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
425 {
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
426 failed_count++;
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
427 if (failed_count >= 3)
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
428 return -1;
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
429 }
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
430 else
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
431 failed_count = 0;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
432 #ifdef O_NONBLOCK
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
433 fd = open (pty_name, O_RDWR | O_NONBLOCK, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
434 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
435 fd = open (pty_name, O_RDWR | O_NDELAY, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
436 #endif
822
c6e94e13926c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 808
diff changeset
437 #endif /* not IRIS */
c6e94e13926c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 808
diff changeset
438 #endif /* no PTY_OPEN */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
439
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
440 if (fd >= 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
441 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
442 /* check to make certain that both sides are available
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
443 this avoids a nasty yet stupid bug in rlogins */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
444 #ifdef PTY_TTY_NAME_SPRINTF
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
445 PTY_TTY_NAME_SPRINTF
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
446 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
447 sprintf (pty_name, "/dev/tty%c%x", c, i);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
448 #endif /* no PTY_TTY_NAME_SPRINTF */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
449 #ifndef UNIPLUS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
450 if (access (pty_name, 6) != 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
451 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
452 close (fd);
2887
0554478bfa71 * process.c [__sgi] (allocate_pty): Give up immediately if pty is
Jim Blandy <jimb@redhat.com>
parents: 2830
diff changeset
453 #if !defined(IRIS) && !defined(__sgi)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
454 continue;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
455 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
456 return -1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
457 #endif /* IRIS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
458 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
459 #endif /* not UNIPLUS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
460 setup_pty (fd);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
461 return fd;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
462 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
463 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
464 return -1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
465 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
466 #endif /* HAVE_PTYS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
467
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
468 Lisp_Object
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
469 make_process (name)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
470 Lisp_Object name;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
471 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
472 register Lisp_Object val, tem, name1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
473 register struct Lisp_Process *p;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
474 char suffix[10];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
475 register int i;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
476
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
477 /* size of process structure includes the vector header,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
478 so deduct for that. But struct Lisp_Vector includes the first
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
479 element, thus deducts too much, so add it back. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
480 val = Fmake_vector (make_number ((sizeof (struct Lisp_Process)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
481 - sizeof (struct Lisp_Vector)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
482 + sizeof (Lisp_Object))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
483 / sizeof (Lisp_Object)),
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
484 Qnil);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
485 XSETTYPE (val, Lisp_Process);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
486
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
487 p = XPROCESS (val);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
488 XFASTINT (p->infd) = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
489 XFASTINT (p->outfd) = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
490 XFASTINT (p->pid) = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
491 XFASTINT (p->tick) = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
492 XFASTINT (p->update_tick) = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
493 p->raw_status_low = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
494 p->raw_status_high = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
495 p->status = Qrun;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
496 p->mark = Fmake_marker ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
497
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
498 /* If name is already in use, modify it until it is unused. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
499
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
500 name1 = name;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
501 for (i = 1; ; i++)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
502 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
503 tem = Fget_process (name1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
504 if (NILP (tem)) break;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
505 sprintf (suffix, "<%d>", i);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
506 name1 = concat2 (name, build_string (suffix));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
507 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
508 name = name1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
509 p->name = name;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
510 Vprocess_alist = Fcons (Fcons (name, val), Vprocess_alist);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
511 return val;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
512 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
513
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
514 remove_process (proc)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
515 register Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
516 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
517 register Lisp_Object pair;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
518
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
519 pair = Frassq (proc, Vprocess_alist);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
520 Vprocess_alist = Fdelq (pair, Vprocess_alist);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
521 Fset_marker (XPROCESS (proc)->mark, Qnil, Qnil);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
522
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
523 deactivate_process (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
524 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
525
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
526 DEFUN ("processp", Fprocessp, Sprocessp, 1, 1, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
527 "Return t if OBJECT is a process.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
528 (obj)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
529 Lisp_Object obj;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
530 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
531 return XTYPE (obj) == Lisp_Process ? Qt : Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
532 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
533
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
534 DEFUN ("get-process", Fget_process, Sget_process, 1, 1, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
535 "Return the process named NAME, or nil if there is none.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
536 (name)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
537 register Lisp_Object name;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
538 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
539 if (XTYPE (name) == Lisp_Process)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
540 return name;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
541 CHECK_STRING (name, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
542 return Fcdr (Fassoc (name, Vprocess_alist));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
543 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
544
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
545 DEFUN ("get-buffer-process", Fget_buffer_process, Sget_buffer_process, 1, 1, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
546 "Return the (or, a) process associated with BUFFER.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
547 BUFFER may be a buffer or the name of one.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
548 (name)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
549 register Lisp_Object name;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
550 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
551 register Lisp_Object buf, tail, proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
552
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
553 if (NILP (name)) return Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
554 buf = Fget_buffer (name);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
555 if (NILP (buf)) return Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
556
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
557 for (tail = Vprocess_alist; !NILP (tail); tail = Fcdr (tail))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
558 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
559 proc = Fcdr (Fcar (tail));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
560 if (XTYPE (proc) == Lisp_Process && EQ (XPROCESS (proc)->buffer, buf))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
561 return proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
562 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
563 return Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
564 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
565
808
707866b2a190 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 765
diff changeset
566 /* This is how commands for the user decode process arguments. It
707866b2a190 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 765
diff changeset
567 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
568 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
569 current buffer. */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
570
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
571 Lisp_Object
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
572 get_process (name)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
573 register Lisp_Object name;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
574 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
575 register Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
576 if (NILP (name))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
577 proc = Fget_buffer_process (Fcurrent_buffer ());
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
578 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
579 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
580 proc = Fget_process (name);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
581 if (NILP (proc))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
582 proc = Fget_buffer_process (Fget_buffer (name));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
583 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
584
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
585 if (!NILP (proc))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
586 return proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
587
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
588 if (NILP (name))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
589 error ("Current buffer has no process");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
590 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
591 error ("Process %s does not exist", XSTRING (name)->data);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
592 /* NOTREACHED */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
593 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
594
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
595 DEFUN ("delete-process", Fdelete_process, Sdelete_process, 1, 1, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
596 "Delete PROCESS: kill it and forget about it immediately.\n\
808
707866b2a190 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 765
diff changeset
597 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
598 nil, indicating the current buffer's process.")
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
599 (proc)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
600 register Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
601 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
602 proc = get_process (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
603 XPROCESS (proc)->raw_status_low = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
604 XPROCESS (proc)->raw_status_high = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
605 if (NETCONN_P (proc))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
606 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
607 XPROCESS (proc)->status = Fcons (Qexit, Fcons (make_number (0), Qnil));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
608 XSETINT (XPROCESS (proc)->tick, ++process_tick);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
609 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
610 else if (XFASTINT (XPROCESS (proc)->infd))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
611 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
612 Fkill_process (proc, Qnil);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
613 /* Do this now, since remove_process will make sigchld_handler do nothing. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
614 XPROCESS (proc)->status
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
615 = Fcons (Qsignal, Fcons (make_number (SIGKILL), Qnil));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
616 XSETINT (XPROCESS (proc)->tick, ++process_tick);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
617 status_notify ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
618 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
619 remove_process (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
620 return Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
621 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
622
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
623 DEFUN ("process-status", Fprocess_status, Sprocess_status, 1, 1, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
624 "Return the status of PROCESS: a symbol, one of these:\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
625 run -- for a process that is running.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
626 stop -- for a process stopped but continuable.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
627 exit -- for a process that has exited.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
628 signal -- for a process that has got a fatal signal.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
629 open -- for a network stream connection that is open.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
630 closed -- for a network stream connection that is closed.\n\
808
707866b2a190 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 765
diff changeset
631 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
632 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
633 nil, indicating the current buffer's process.")
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
634 (proc)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
635 register Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
636 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
637 register struct Lisp_Process *p;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
638 register Lisp_Object status;
4257
f8b1ea675224 (Fprocess_status): Use Fget_process, to avoid error
Richard M. Stallman <rms@gnu.org>
parents: 4231
diff changeset
639 proc = Fget_process (proc);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
640 if (NILP (proc))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
641 return proc;
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;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
646 if (XTYPE (status) == Lisp_Cons)
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));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
668 if (XTYPE (XPROCESS (proc)->status) == Lisp_Cons)
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
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
707 DEFUN ("set-process-buffer", Fset_process_buffer, Sset_process_buffer,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
708 2, 2, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
709 "Set buffer associated with PROCESS to BUFFER (a buffer, or nil).")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
710 (proc, buffer)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
711 register Lisp_Object proc, buffer;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
712 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
713 CHECK_PROCESS (proc, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
714 if (!NILP (buffer))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
715 CHECK_BUFFER (buffer, 1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
716 XPROCESS (proc)->buffer = buffer;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
717 return buffer;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
718 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
719
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
720 DEFUN ("process-buffer", Fprocess_buffer, Sprocess_buffer,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
721 1, 1, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
722 "Return the buffer PROCESS is associated with.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
723 Output from PROCESS is inserted in this buffer\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
724 unless PROCESS has a filter.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
725 (proc)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
726 register Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
727 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
728 CHECK_PROCESS (proc, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
729 return XPROCESS (proc)->buffer;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
730 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
731
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
732 DEFUN ("process-mark", Fprocess_mark, Sprocess_mark,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
733 1, 1, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
734 "Return the marker for the end of the last output from PROCESS.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
735 (proc)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
736 register Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
737 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
738 CHECK_PROCESS (proc, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
739 return XPROCESS (proc)->mark;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
740 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
741
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
742 DEFUN ("set-process-filter", Fset_process_filter, Sset_process_filter,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
743 2, 2, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
744 "Give PROCESS the filter function FILTER; nil means no filter.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
745 When a process has a filter, each time it does output\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
746 the entire string of output is passed to the filter.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
747 The filter gets two arguments: the process and the string of output.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
748 If the process has a filter, its buffer is not used for output.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
749 (proc, filter)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
750 register Lisp_Object proc, filter;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
751 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
752 CHECK_PROCESS (proc, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
753 XPROCESS (proc)->filter = filter;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
754 return filter;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
755 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
756
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
757 DEFUN ("process-filter", Fprocess_filter, Sprocess_filter,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
758 1, 1, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
759 "Returns the filter function of PROCESS; nil if none.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
760 See `set-process-filter' for more info on filter functions.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
761 (proc)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
762 register Lisp_Object proc;
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);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
765 return XPROCESS (proc)->filter;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
766 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
767
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
768 DEFUN ("set-process-sentinel", Fset_process_sentinel, Sset_process_sentinel,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
769 2, 2, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
770 "Give PROCESS the sentinel SENTINEL; nil for none.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
771 The sentinel is called as a function when the process changes state.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
772 It gets two arguments: the process, and a string describing the change.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
773 (proc, sentinel)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
774 register Lisp_Object proc, sentinel;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
775 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
776 CHECK_PROCESS (proc, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
777 XPROCESS (proc)->sentinel = sentinel;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
778 return sentinel;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
779 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
780
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
781 DEFUN ("process-sentinel", Fprocess_sentinel, Sprocess_sentinel,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
782 1, 1, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
783 "Return the sentinel of PROCESS; nil if none.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
784 See `set-process-sentinel' for more info on sentinels.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
785 (proc)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
786 register Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
787 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
788 CHECK_PROCESS (proc, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
789 return XPROCESS (proc)->sentinel;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
790 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
791
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
792 DEFUN ("process-kill-without-query", Fprocess_kill_without_query,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
793 Sprocess_kill_without_query, 1, 2, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
794 "Say no query needed if PROCESS is running when Emacs is exited.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
795 Optional second argument if non-nill says to require a query.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
796 Value is t if a query was formerly required.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
797 (proc, value)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
798 register Lisp_Object proc, value;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
799 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
800 Lisp_Object tem;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
801
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
802 CHECK_PROCESS (proc, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
803 tem = XPROCESS (proc)->kill_without_query;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
804 XPROCESS (proc)->kill_without_query = Fnull (value);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
805
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
806 return Fnull (tem);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
807 }
4231
91a883c56382 (Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents: 4057
diff changeset
808
91a883c56382 (Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents: 4057
diff changeset
809 #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
810 in the process. Perhaps add it. */
91a883c56382 (Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents: 4057
diff changeset
811 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
812 "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
813 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
814 `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
815 (process)
91a883c56382 (Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents: 4057
diff changeset
816 Lisp_Object process;
91a883c56382 (Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents: 4057
diff changeset
817 {
91a883c56382 (Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents: 4057
diff changeset
818 return XPROCESS (process)->type;
91a883c56382 (Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents: 4057
diff changeset
819 }
91a883c56382 (Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents: 4057
diff changeset
820 #endif
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
821
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
822 Lisp_Object
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
823 list_processes_1 ()
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
824 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
825 register Lisp_Object tail, tem;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
826 Lisp_Object proc, minspace, tem1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
827 register struct buffer *old = current_buffer;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
828 register struct Lisp_Process *p;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
829 register int state;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
830 char tembuf[80];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
831
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
832 XFASTINT (minspace) = 1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
833
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
834 set_buffer_internal (XBUFFER (Vstandard_output));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
835 Fbuffer_disable_undo (Vstandard_output);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
836
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
837 current_buffer->truncate_lines = Qt;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
838
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
839 write_string ("\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
840 Proc Status Buffer Command\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
841 ---- ------ ------ -------\n", -1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
842
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
843 for (tail = Vprocess_alist; !NILP (tail); tail = Fcdr (tail))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
844 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
845 Lisp_Object symbol;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
846
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
847 proc = Fcdr (Fcar (tail));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
848 p = XPROCESS (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
849 if (NILP (p->childp))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
850 continue;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
851
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
852 Finsert (1, &p->name);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
853 Findent_to (make_number (13), minspace);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
854
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
855 if (!NILP (p->raw_status_low))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
856 update_status (p);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
857 symbol = p->status;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
858 if (XTYPE (p->status) == Lisp_Cons)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
859 symbol = XCONS (p->status)->car;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
860
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
861
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
862 if (EQ (symbol, Qsignal))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
863 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
864 Lisp_Object tem;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
865 tem = Fcar (Fcdr (p->status));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
866 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
867 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
868 write_string (sys_errlist [XINT (tem)], -1);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
869 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
870 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
871 Fprinc (symbol, Qnil);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
872 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
873 else if (NETCONN_P (proc))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
874 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
875 if (EQ (symbol, Qrun))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
876 write_string ("open", -1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
877 else if (EQ (symbol, Qexit))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
878 write_string ("closed", -1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
879 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
880 Fprinc (symbol, Qnil);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
881 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
882 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
883 Fprinc (symbol, Qnil);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
884
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
885 if (EQ (symbol, Qexit))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
886 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
887 Lisp_Object tem;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
888 tem = Fcar (Fcdr (p->status));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
889 if (XFASTINT (tem))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
890 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
891 sprintf (tembuf, " %d", XFASTINT (tem));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
892 write_string (tembuf, -1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
893 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
894 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
895
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
896 if (EQ (symbol, Qsignal) || EQ (symbol, Qexit))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
897 remove_process (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
898
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
899 Findent_to (make_number (22), minspace);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
900 if (NILP (p->buffer))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
901 insert_string ("(none)");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
902 else if (NILP (XBUFFER (p->buffer)->name))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
903 insert_string ("(Killed)");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
904 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
905 Finsert (1, &XBUFFER (p->buffer)->name);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
906
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
907 Findent_to (make_number (37), minspace);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
908
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
909 if (NETCONN_P (proc))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
910 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
911 sprintf (tembuf, "(network stream connection to %s)\n",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
912 XSTRING (p->childp)->data);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
913 insert_string (tembuf);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
914 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
915 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
916 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
917 tem = p->command;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
918 while (1)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
919 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
920 tem1 = Fcar (tem);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
921 Finsert (1, &tem1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
922 tem = Fcdr (tem);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
923 if (NILP (tem))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
924 break;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
925 insert_string (" ");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
926 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
927 insert_string ("\n");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
928 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
929 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
930 return Qnil;
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 DEFUN ("list-processes", Flist_processes, Slist_processes, 0, 0, "",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
934 "Display a list of all processes.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
935 \(Any processes listed as Exited or Signaled are actually eliminated\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
936 after the listing is made.)")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
937 ()
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
938 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
939 internal_with_output_to_temp_buffer ("*Process List*",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
940 list_processes_1, Qnil);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
941 return Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
942 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
943
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
944 DEFUN ("process-list", Fprocess_list, Sprocess_list, 0, 0, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
945 "Return a list of all processes.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
946 ()
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
947 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
948 return Fmapcar (Qcdr, Vprocess_alist);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
949 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
950
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
951 /* 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
952
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
953 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
954
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
955 DEFUN ("start-process", Fstart_process, Sstart_process, 3, MANY, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
956 "Start a program in a subprocess. Return the process object for it.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
957 Args are NAME BUFFER PROGRAM &rest PROGRAM-ARGS\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
958 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
959 BUFFER is the buffer or (buffer-name) to associate with the process.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
960 Process output goes at end of that buffer, unless you specify\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
961 an output stream or filter function to handle the output.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
962 BUFFER may be also nil, meaning that this process is not associated\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
963 with any buffer\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
964 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
965 Remaining arguments are strings to give program as arguments.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
966 (nargs, args)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
967 int nargs;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
968 register Lisp_Object *args;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
969 {
1683
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
970 Lisp_Object buffer, name, program, proc, current_dir, tem;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
971 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
972 register unsigned char *new_argv;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
973 int len;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
974 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
975 register unsigned char **new_argv;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
976 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
977 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
978 int count = specpdl_ptr - specpdl;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
979
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
980 buffer = args[1];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
981 if (!NILP (buffer))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
982 buffer = Fget_buffer_create (buffer);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
983
1683
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
984 /* 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
985 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
986 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
987 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
988
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
989 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
990 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
991 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
992 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
993 {
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
994 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
995
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
996 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
997
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
998 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
999
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1000 current_dir =
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1001 expand_and_dir_to_file
1886
dd2e31cbf205 * process.c (Fstart_process): Jimb's change of December 11
Michael I. Bushnell <mib@gnu.org>
parents: 1780
diff changeset
1002 (Funhandled_file_name_directory (current_dir), Qnil);
1683
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1003 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
1004 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
1005 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
1006
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1007 UNGCPRO;
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1008 }
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1009
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1010 name = args[0];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1011 CHECK_STRING (name, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1012
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1013 program = args[2];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1014
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1015 CHECK_STRING (program, 2);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1016
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1017 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1018 /* Make a one member argv with all args concatenated
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1019 together separated by a blank. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1020 len = XSTRING (program)->size + 2;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1021 for (i = 3; i < nargs; i++)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1022 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1023 tem = args[i];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1024 CHECK_STRING (tem, i);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1025 len += XSTRING (tem)->size + 1; /* count the blank */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1026 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1027 new_argv = (unsigned char *) alloca (len);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1028 strcpy (new_argv, XSTRING (program)->data);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1029 for (i = 3; i < nargs; i++)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1030 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1031 tem = args[i];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1032 CHECK_STRING (tem, i);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1033 strcat (new_argv, " ");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1034 strcat (new_argv, XSTRING (tem)->data);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1035 }
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1036 /* 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
1037
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1038 #else /* not VMS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1039 new_argv = (unsigned char **) alloca ((nargs - 1) * sizeof (char *));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1040
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1041 for (i = 3; i < nargs; i++)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1042 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1043 tem = args[i];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1044 CHECK_STRING (tem, i);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1045 new_argv[i - 2] = XSTRING (tem)->data;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1046 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1047 new_argv[i - 2] = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1048 new_argv[0] = XSTRING (program)->data;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1049
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1050 /* If program file name is not absolute, search our path for it */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1051 if (new_argv[0][0] != '/')
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1052 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1053 tem = Qnil;
2432
17a84e60603b New macros NULL_DEVICE and EXEC_SUFFIXES, to give the name of the
Jim Blandy <jimb@redhat.com>
parents: 2429
diff changeset
1054 openp (Vexec_path, program, EXEC_SUFFIXES, &tem, 1);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1055 if (NILP (tem))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1056 report_file_error ("Searching for program", Fcons (program, Qnil));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1057 new_argv[0] = XSTRING (tem)->data;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1058 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1059 #endif /* not VMS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1060
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1061 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
1062 /* 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
1063 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
1064 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
1065 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
1066 record_unwind_protect (start_process_unwind, proc);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1067
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1068 XPROCESS (proc)->childp = Qt;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1069 XPROCESS (proc)->command_channel_p = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1070 XPROCESS (proc)->buffer = buffer;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1071 XPROCESS (proc)->sentinel = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1072 XPROCESS (proc)->filter = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1073 XPROCESS (proc)->command = Flist (nargs - 2, args + 2);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1074
1683
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1075 create_process (proc, new_argv, current_dir);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1076
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1077 return unbind_to (count, proc);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1078 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1079
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1080 /* 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
1081 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
1082 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
1083 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
1084 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
1085 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
1086 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
1087 {
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1088 if (XTYPE (proc) != Lisp_Process)
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1089 abort ();
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1090
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1091 /* Was PROC started successfully? */
3685
47d7fda8a609 (start_process_unwind): Use XINT.
Richard M. Stallman <rms@gnu.org>
parents: 3666
diff changeset
1092 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
1093 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
1094
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1095 return Qnil;
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1096 }
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1097
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1098
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1099 SIGTYPE
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1100 create_process_1 (signo)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1101 int signo;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1102 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1103 #ifdef USG
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1104 /* USG systems forget handlers when they are used;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1105 must reestablish each time */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1106 signal (signo, create_process_1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1107 #endif /* USG */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1108 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1109
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1110 #if 0 /* This doesn't work; see the note before sigchld_handler. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1111 #ifdef USG
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1112 #ifdef SIGCHLD
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1113 /* Mimic blocking of signals on system V, which doesn't really have it. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1114
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1115 /* Nonzero means we got a SIGCHLD when it was supposed to be blocked. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1116 int sigchld_deferred;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1117
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1118 SIGTYPE
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1119 create_process_sigchld ()
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1120 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1121 signal (SIGCHLD, create_process_sigchld);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1122
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1123 sigchld_deferred = 1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1124 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1125 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1126 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1127 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1128
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1129 #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
1130 create_process (process, new_argv, current_dir)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1131 Lisp_Object process;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1132 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
1133 Lisp_Object current_dir;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1134 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1135 int pid, inchannel, outchannel, forkin, forkout;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1136 int sv[2];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1137 #ifdef SIGCHLD
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1138 SIGTYPE (*sigchld)();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1139 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1140 int pty_flag = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1141 extern char **environ;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1142
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1143 inchannel = outchannel = -1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1144
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1145 #ifdef HAVE_PTYS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1146 if (EQ (Vprocess_connection_type, Qt))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1147 outchannel = inchannel = allocate_pty ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1148
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1149 if (inchannel >= 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1150 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1151 #ifndef USG
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1152 /* 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
1153 and then close and reopen it in the child. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1154 #ifdef O_NOCTTY
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1155 /* Don't let this terminal become our controlling terminal
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1156 (in case we don't have one). */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1157 forkout = forkin = open (pty_name, O_RDWR | O_NOCTTY, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1158 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1159 forkout = forkin = open (pty_name, O_RDWR, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1160 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1161 if (forkin < 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1162 report_file_error ("Opening pty", Qnil);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1163 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1164 forkin = forkout = -1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1165 #endif /* not USG */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1166 pty_flag = 1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1167 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1168 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1169 #endif /* HAVE_PTYS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1170 #ifdef SKTPAIR
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1171 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1172 if (socketpair (AF_UNIX, SOCK_STREAM, 0, sv) < 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1173 report_file_error ("Opening socketpair", Qnil);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1174 outchannel = inchannel = sv[0];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1175 forkout = forkin = sv[1];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1176 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1177 #else /* not SKTPAIR */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1178 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1179 pipe (sv);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1180 inchannel = sv[0];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1181 forkout = sv[1];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1182 pipe (sv);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1183 outchannel = sv[1];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1184 forkin = sv[0];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1185 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1186 #endif /* not SKTPAIR */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1187
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1188 #if 0
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1189 /* Replaced by close_process_descs */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1190 set_exclusive_use (inchannel);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1191 set_exclusive_use (outchannel);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1192 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1193
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1194 /* Stride people say it's a mystery why this is needed
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1195 as well as the O_NDELAY, but that it fails without this. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1196 #if defined (STRIDE) || (defined (pfa) && defined (HAVE_PTYS))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1197 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1198 int one = 1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1199 ioctl (inchannel, FIONBIO, &one);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1200 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1201 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1202
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1203 #ifdef O_NONBLOCK
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1204 fcntl (inchannel, F_SETFL, O_NONBLOCK);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1205 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1206 #ifdef O_NDELAY
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1207 fcntl (inchannel, F_SETFL, O_NDELAY);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1208 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1209 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1210
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1211 /* Record this as an active process, with its channels.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1212 As a result, child_setup will close Emacs's side of the pipes. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1213 chan_process[inchannel] = process;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1214 XFASTINT (XPROCESS (process)->infd) = inchannel;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1215 XFASTINT (XPROCESS (process)->outfd) = outchannel;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1216 /* Record the tty descriptor used in the subprocess. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1217 if (forkin < 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1218 XPROCESS (process)->subtty = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1219 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1220 XFASTINT (XPROCESS (process)->subtty) = forkin;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1221 XPROCESS (process)->pty_flag = (pty_flag ? Qt : Qnil);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1222 XPROCESS (process)->status = Qrun;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1223
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1224 /* Delay interrupts until we have a chance to store
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1225 the new fork's pid in its process structure */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1226 #ifdef SIGCHLD
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1227 #ifdef BSD4_1
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1228 sighold (SIGCHLD);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1229 #else /* not BSD4_1 */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1230 #if defined (BSD) || defined (UNIPLUS) || defined (HPUX)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1231 sigsetmask (sigmask (SIGCHLD));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1232 #else /* ordinary USG */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1233 #if 0
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1234 sigchld_deferred = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1235 sigchld = signal (SIGCHLD, create_process_sigchld);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1236 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1237 #endif /* ordinary USG */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1238 #endif /* not BSD4_1 */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1239 #endif /* SIGCHLD */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1240
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1241 /* Until we store the proper pid, enable sigchld_handler
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1242 to recognize an unknown pid as standing for this process.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1243 It is very important not to let this `marker' value stay
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1244 in the table after this function has returned; if it does
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1245 it might cause call-process to hang and subsequent asynchronous
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1246 processes to get their return values scrambled. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1247 XSETINT (XPROCESS (process)->pid, -1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1248
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1249 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1250 /* child_setup must clobber environ on systems with true vfork.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1251 Protect it from permanent change. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1252 char **save_environ = environ;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1253
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1254 pid = vfork ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1255 if (pid == 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1256 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1257 int xforkin = forkin;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1258 int xforkout = forkout;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1259
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1260 #if 0 /* This was probably a mistake--it duplicates code later on,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1261 but fails to handle all the cases. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1262 /* Make sure SIGCHLD is not blocked in the child. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1263 sigsetmask (SIGEMPTYMASK);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1264 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1265
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1266 /* Make the pty be the controlling terminal of the process. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1267 #ifdef HAVE_PTYS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1268 /* First, disconnect its current controlling terminal. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1269 #ifdef HAVE_SETSID
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1270 setsid ();
1030
9934251d8219 (WCOREDUMP): Define only if not defined.
Richard M. Stallman <rms@gnu.org>
parents: 1012
diff changeset
1271 #ifdef TIOCSCTTY
9934251d8219 (WCOREDUMP): Define only if not defined.
Richard M. Stallman <rms@gnu.org>
parents: 1012
diff changeset
1272 /* 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
1273 if (pty_flag)
cfd999700613 (create_process): Ignore retval from TIOCSTTY.
Richard M. Stallman <rms@gnu.org>
parents: 2961
diff changeset
1274 /* We ignore the return value
cfd999700613 (create_process): Ignore retval from TIOCSTTY.
Richard M. Stallman <rms@gnu.org>
parents: 2961
diff changeset
1275 because faith@cs.unc.edu says that is necessary on Linux. */
cfd999700613 (create_process): Ignore retval from TIOCSTTY.
Richard M. Stallman <rms@gnu.org>
parents: 2961
diff changeset
1276 ioctl (xforkin, TIOCSCTTY, 0);
1030
9934251d8219 (WCOREDUMP): Define only if not defined.
Richard M. Stallman <rms@gnu.org>
parents: 1012
diff changeset
1277 #endif
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1278 #else /* not HAVE_SETSID */
3810
87d9ef5f831b * callproc.c (Fcall_process, child_setup): If IRIX is #defined,
Jim Blandy <jimb@redhat.com>
parents: 3685
diff changeset
1279 #if defined (USG) && !defined (IRIX)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1280 /* It's very important to call setpgrp() here and no time
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1281 afterwards. Otherwise, we lose our controlling tty which
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1282 is set when we open the pty. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1283 setpgrp ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1284 #endif /* USG */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1285 #endif /* not HAVE_SETSID */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1286 #ifdef TIOCNOTTY
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1287 /* In 4.3BSD, the TIOCSPGRP bug has been fixed, and now you
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1288 can do TIOCSPGRP only to the process's controlling tty. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1289 if (pty_flag)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1290 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1291 /* I wonder: would just ioctl (0, TIOCNOTTY, 0) work here?
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1292 I can't test it since I don't have 4.3. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1293 int j = open ("/dev/tty", O_RDWR, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1294 ioctl (j, TIOCNOTTY, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1295 close (j);
3826
647bef18618f Changes for Irix 4.0, tested this time:
Jim Blandy <jimb@redhat.com>
parents: 3810
diff changeset
1296 #ifndef USG
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1297 /* In order to get a controlling terminal on some versions
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1298 of BSD, it is necessary to put the process in pgrp 0
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1299 before it opens the terminal. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1300 setpgrp (0, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1301 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1302 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1303 #endif /* TIOCNOTTY */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1304
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1305 #if !defined (RTU) && !defined (UNIPLUS)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1306 /*** There is a suggestion that this ought to be a
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1307 conditional on TIOCSPGRP. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1308 /* Now close the pty (if we had it open) and reopen it.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1309 This makes the pty the controlling terminal of the subprocess. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1310 if (pty_flag)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1311 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1312 /* I wonder if close (open (pty_name, ...)) would work? */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1313 if (xforkin >= 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1314 close (xforkin);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1315 xforkout = xforkin = open (pty_name, O_RDWR, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1316
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1317 if (xforkin < 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1318 abort ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1319 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1320 #endif /* not UNIPLUS and not RTU */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1321 #ifdef SETUP_SLAVE_PTY
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1322 SETUP_SLAVE_PTY;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1323 #endif /* SETUP_SLAVE_PTY */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1324 #ifdef AIX
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1325 /* 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
1326 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
1327 if (pty_flag)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1328 signal (SIGHUP, SIG_DFL);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1329 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1330 #endif /* HAVE_PTYS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1331
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1332 #ifdef SIGCHLD
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1333 #ifdef BSD4_1
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1334 sigrelse (SIGCHLD);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1335 #else /* not BSD4_1 */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1336 #if defined (BSD) || defined (UNIPLUS) || defined (HPUX)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1337 sigsetmask (SIGEMPTYMASK);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1338 #else /* ordinary USG */
1207
af619d68a576 * process.c [SIGCHLD && !BSD && !UNIPLUS && !HPUX]
Jim Blandy <jimb@redhat.com>
parents: 1180
diff changeset
1339 #if 0
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1340 signal (SIGCHLD, sigchld);
1207
af619d68a576 * process.c [SIGCHLD && !BSD && !UNIPLUS && !HPUX]
Jim Blandy <jimb@redhat.com>
parents: 1180
diff changeset
1341 #endif
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1342 #endif /* ordinary USG */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1343 #endif /* not BSD4_1 */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1344 #endif /* SIGCHLD */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1345
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1346 child_setup_tty (xforkout);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1347 child_setup (xforkin, xforkout, xforkout,
638
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 624
diff changeset
1348 new_argv, 1, current_dir);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1349 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1350 environ = save_environ;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1351 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1352
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1353 if (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
1354 report_file_error ("Doing vfork", Qnil);
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1355
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1356 XFASTINT (XPROCESS (process)->pid) = pid;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1357
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1358 FD_SET (inchannel, &input_wait_mask);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1359
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1360 /* If the subfork execv fails, and it exits,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1361 this close hangs. I don't know why.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1362 So have an interrupt jar it loose. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1363 stop_polling ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1364 signal (SIGALRM, create_process_1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1365 alarm (1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1366 #ifdef SYSV4_PTYS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1367 /* OK to close only if it's not a pty. Otherwise we need to leave
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1368 it open for ioctl to get pgrp when signals are sent, or to send
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1369 the interrupt characters through if that's how we're signalling
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1370 subprocesses. Alternately if you are concerned about running out
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1371 of file descriptors, you could just save the tty name and open
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1372 just to do the ioctl. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1373 if (NILP (XFASTINT (XPROCESS (process)->pty_flag)))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1374 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1375 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1376 XPROCESS (process)->subtty = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1377 if (forkin >= 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1378 close (forkin);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1379 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1380 alarm (0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1381 start_polling ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1382 if (forkin != forkout && forkout >= 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1383 close (forkout);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1384
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1385 #ifdef SIGCHLD
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1386 #ifdef BSD4_1
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1387 sigrelse (SIGCHLD);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1388 #else /* not BSD4_1 */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1389 #if defined (BSD) || defined (UNIPLUS) || defined (HPUX)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1390 sigsetmask (SIGEMPTYMASK);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1391 #else /* ordinary USG */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1392 #if 0
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1393 signal (SIGCHLD, sigchld);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1394 /* Now really handle any of these signals
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1395 that came in during this function. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1396 if (sigchld_deferred)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1397 kill (getpid (), SIGCHLD);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1398 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1399 #endif /* ordinary USG */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1400 #endif /* not BSD4_1 */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1401 #endif /* SIGCHLD */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1402 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1403 #endif /* not VMS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1404
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1405 #ifdef HAVE_SOCKETS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1406
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1407 /* open a TCP network connection to a given HOST/SERVICE. Treated
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1408 exactly like a normal process when reading and writing. Only
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1409 differences are in status display and process deletion. A network
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1410 connection has no PID; you cannot signal it. All you can do is
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1411 deactivate and close it via delete-process */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1412
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1413 DEFUN ("open-network-stream", Fopen_network_stream, Sopen_network_stream,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1414 4, 4, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1415 "Open a TCP connection for a service to a host.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1416 Returns a subprocess-object to represent the connection.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1417 Input and output work as for subprocesses; `delete-process' closes it.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1418 Args are NAME BUFFER HOST SERVICE.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1419 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
1420 BUFFER is the buffer (or buffer-name) to associate with the process.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1421 Process output goes at end of that buffer, unless you specify\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1422 an output stream or filter function to handle the output.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1423 BUFFER may be also nil, meaning that this process is not associated\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1424 with any buffer\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1425 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
1426 Fourth arg SERVICE is name of the service desired, or an integer\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1427 specifying a port number to connect to.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1428 (name, buffer, host, service)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1429 Lisp_Object name, buffer, host, service;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1430 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1431 Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1432 register int i;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1433 struct sockaddr_in address;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1434 struct servent *svc_info;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1435 struct hostent *host_info_ptr, host_info;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1436 char *(addr_list[2]);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1437 unsigned long numeric_addr;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1438 int s, outch, inch;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1439 char errstring[80];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1440 int port;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1441 struct hostent host_info_fixed;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1442 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1443
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1444 GCPRO4 (name, buffer, host, service);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1445 CHECK_STRING (name, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1446 CHECK_STRING (host, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1447 if (XTYPE(service) == Lisp_Int)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1448 port = htons ((unsigned short) XINT (service));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1449 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1450 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1451 CHECK_STRING (service, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1452 svc_info = getservbyname (XSTRING (service)->data, "tcp");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1453 if (svc_info == 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1454 error ("Unknown service \"%s\"", XSTRING (service)->data);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1455 port = svc_info->s_port;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1456 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1457
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1458 host_info_ptr = gethostbyname (XSTRING (host)->data);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1459 if (host_info_ptr == 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1460 /* Attempt to interpret host as numeric inet address */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1461 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1462 numeric_addr = inet_addr (XSTRING (host)->data);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1463 if (numeric_addr == -1)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1464 error ("Unknown host \"%s\"", XSTRING (host)->data);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1465
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1466 host_info_ptr = &host_info;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1467 host_info.h_name = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1468 host_info.h_aliases = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1469 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
1470 #ifdef h_addr
f66a150d3fb9 * process.c (Fopen_network_stream): Deal with older systems, which
Jim Blandy <jimb@redhat.com>
parents: 2917
diff changeset
1471 /* 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
1472 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
1473 be its first element. */
f66a150d3fb9 * process.c (Fopen_network_stream): Deal with older systems, which
Jim Blandy <jimb@redhat.com>
parents: 2917
diff changeset
1474 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
1475 #endif
f66a150d3fb9 * process.c (Fopen_network_stream): Deal with older systems, which
Jim Blandy <jimb@redhat.com>
parents: 2917
diff changeset
1476 host_info.h_addr = (char*)(&numeric_addr);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1477 addr_list[1] = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1478 host_info.h_length = strlen (addr_list[0]);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1479 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1480
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1481 bzero (&address, sizeof address);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1482 bcopy (host_info_ptr->h_addr, (char *) &address.sin_addr,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1483 host_info_ptr->h_length);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1484 address.sin_family = host_info_ptr->h_addrtype;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1485 address.sin_port = port;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1486
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1487 s = socket (host_info_ptr->h_addrtype, SOCK_STREAM, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1488 if (s < 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1489 report_file_error ("error creating socket", Fcons (name, Qnil));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1490
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1491 loop:
3593
e425c3048283 * process.c (sigchld_handler): Add cast, to avoid warnings on Linux.
Jim Blandy <jimb@redhat.com>
parents: 3592
diff changeset
1492 if (connect (s, (struct sockaddr *) &address, sizeof address) == -1)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1493 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1494 int xerrno = errno;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1495 if (errno == EINTR)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1496 goto loop;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1497 close (s);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1498 errno = xerrno;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1499 report_file_error ("connection failed",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1500 Fcons (host, Fcons (name, Qnil)));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1501 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1502
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1503 inch = s;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1504 outch = dup (s);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1505 if (outch < 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1506 report_file_error ("error duplicating socket", Fcons (name, Qnil));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1507
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1508 if (!NILP (buffer))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1509 buffer = Fget_buffer_create (buffer);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1510 proc = make_process (name);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1511
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1512 chan_process[inch] = proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1513
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1514 #ifdef O_NONBLOCK
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1515 fcntl (inch, F_SETFL, O_NONBLOCK);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1516 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1517 #ifdef O_NDELAY
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1518 fcntl (inch, F_SETFL, O_NDELAY);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1519 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1520 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1521
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1522 XPROCESS (proc)->childp = host;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1523 XPROCESS (proc)->command_channel_p = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1524 XPROCESS (proc)->buffer = buffer;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1525 XPROCESS (proc)->sentinel = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1526 XPROCESS (proc)->filter = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1527 XPROCESS (proc)->command = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1528 XPROCESS (proc)->pid = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1529 XFASTINT (XPROCESS (proc)->infd) = s;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1530 XFASTINT (XPROCESS (proc)->outfd) = outch;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1531 XPROCESS (proc)->status = Qrun;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1532 FD_SET (inch, &input_wait_mask);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1533
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1534 UNGCPRO;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1535 return proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1536 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1537 #endif /* HAVE_SOCKETS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1538
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1539 deactivate_process (proc)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1540 Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1541 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1542 register int inchannel, outchannel;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1543 register struct Lisp_Process *p = XPROCESS (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1544
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1545 inchannel = XFASTINT (p->infd);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1546 outchannel = XFASTINT (p->outfd);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1547
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1548 if (inchannel)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1549 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1550 /* Beware SIGCHLD hereabouts. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1551 flush_pending_output (inchannel);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1552 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1553 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1554 VMS_PROC_STUFF *get_vms_process_pointer (), *vs;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1555 sys$dassgn (outchannel);
2357
9faa3a02ea97 * process.c [VMS] (DCL_PROMPT): Remove hack.
Jim Blandy <jimb@redhat.com>
parents: 2290
diff changeset
1556 vs = get_vms_process_pointer (p->pid);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1557 if (vs)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1558 give_back_vms_process_stuff (vs);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1559 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1560 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1561 close (inchannel);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1562 if (outchannel && outchannel != inchannel)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1563 close (outchannel);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1564 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1565
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1566 XFASTINT (p->infd) = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1567 XFASTINT (p->outfd) = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1568 chan_process[inchannel] = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1569 FD_CLR (inchannel, &input_wait_mask);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1570 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1571 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1572
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1573 /* Close all descriptors currently in use for communication
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1574 with subprocess. This is used in a newly-forked subprocess
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1575 to get rid of irrelevant descriptors. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1576
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1577 close_process_descs ()
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1578 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1579 int i;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1580 for (i = 0; i < MAXDESC; i++)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1581 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1582 Lisp_Object process;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1583 process = chan_process[i];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1584 if (!NILP (process))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1585 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1586 int in = XFASTINT (XPROCESS (process)->infd);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1587 int out = XFASTINT (XPROCESS (process)->outfd);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1588 if (in)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1589 close (in);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1590 if (out && in != out)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1591 close (out);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1592 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1593 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1594 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1595
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1596 DEFUN ("accept-process-output", Faccept_process_output, Saccept_process_output,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1597 0, 3, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1598 "Allow any pending output from subprocesses to be read by Emacs.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1599 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
1600 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
1601 from PROCESS.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1602 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
1603 seconds and microseconds to wait; return after that much time whether\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1604 or not there is input.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1605 Return non-nil iff we received any output before the timeout expired.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1606 (proc, timeout, timeout_msecs)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1607 register Lisp_Object proc, timeout, timeout_msecs;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1608 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1609 int seconds;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1610 int useconds;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1611
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1612 if (! NILP (timeout_msecs))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1613 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1614 CHECK_NUMBER (timeout_msecs, 2);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1615 useconds = XINT (timeout_msecs);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1616 if (XTYPE (timeout) != Lisp_Int)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1617 XSET (timeout, Lisp_Int, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1618
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1619 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1620 int carry = useconds / 1000000;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1621
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1622 XSETINT (timeout, XINT (timeout) + carry);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1623 useconds -= carry * 1000000;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1624
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1625 /* I think this clause is necessary because C doesn't
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1626 guarantee a particular rounding direction for negative
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1627 integers. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1628 if (useconds < 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1629 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1630 XSETINT (timeout, XINT (timeout) - 1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1631 useconds += 1000000;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1632 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1633 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1634 }
1180
9bf82484415d (Faccept_process_output): Initialize useconds.
Richard M. Stallman <rms@gnu.org>
parents: 1047
diff changeset
1635 else
9bf82484415d (Faccept_process_output): Initialize useconds.
Richard M. Stallman <rms@gnu.org>
parents: 1047
diff changeset
1636 useconds = 0;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1637
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1638 if (! NILP (timeout))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1639 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1640 CHECK_NUMBER (timeout, 1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1641 seconds = XINT (timeout);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1642 if (seconds <= 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1643 seconds = -1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1644 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1645 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1646 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1647 if (NILP (proc))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1648 seconds = -1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1649 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1650 seconds = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1651 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1652
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1653 if (NILP (proc))
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1654 XFASTINT (proc) = 0;
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1655
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1656 return
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1657 (wait_reading_process_input (seconds, useconds, proc, 0)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1658 ? Qt : Qnil);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1659 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1660
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1661 /* This variable is different from waiting_for_input in keyboard.c.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1662 It is used to communicate to a lisp process-filter/sentinel (via the
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1663 function Fwaiting_for_user_input_p below) whether emacs was waiting
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1664 for user-input when that process-filter was called.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1665 waiting_for_input cannot be used as that is by definition 0 when
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1666 lisp code is being evalled */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1667 static int waiting_for_user_input_p;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1668
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1669 /* Read and dispose of subprocess output while waiting for timeout to
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1670 elapse and/or keyboard input to be available.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1671
3953
d0c23febc08c (wait_reading_process_input): Do include the keyboard
Richard M. Stallman <rms@gnu.org>
parents: 3915
diff changeset
1672 TIME_LIMIT is:
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1673 timeout in seconds, or
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1674 zero for no limit, or
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1675 -1 means gobble data immediately available but don't wait for any.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1676
3953
d0c23febc08c (wait_reading_process_input): Do include the keyboard
Richard M. Stallman <rms@gnu.org>
parents: 3915
diff changeset
1677 MICROSECS is:
d0c23febc08c (wait_reading_process_input): Do include the keyboard
Richard M. Stallman <rms@gnu.org>
parents: 3915
diff changeset
1678 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
1679 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
1680 consists of MICROSECS only.
d0c23febc08c (wait_reading_process_input): Do include the keyboard
Richard M. Stallman <rms@gnu.org>
parents: 3915
diff changeset
1681
d0c23febc08c (wait_reading_process_input): Do include the keyboard
Richard M. Stallman <rms@gnu.org>
parents: 3915
diff changeset
1682 READ_KBD is a lisp value:
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1683 0 to ignore keyboard input, or
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1684 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
1685 -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
1686 the quit handler, or
3953
d0c23febc08c (wait_reading_process_input): Do include the keyboard
Richard M. Stallman <rms@gnu.org>
parents: 3915
diff changeset
1687 a cons cell, meaning wait wait until its car is non-nil
d0c23febc08c (wait_reading_process_input): Do include the keyboard
Richard M. Stallman <rms@gnu.org>
parents: 3915
diff changeset
1688 (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
1689 a process object, meaning wait until something arrives from that
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1690 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
1691 that process.
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1692
3953
d0c23febc08c (wait_reading_process_input): Do include the keyboard
Richard M. Stallman <rms@gnu.org>
parents: 3915
diff changeset
1693 DO_DISPLAY != 0 means redisplay should be done to show subprocess
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1694 output that arrives.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1695
3953
d0c23febc08c (wait_reading_process_input): Do include the keyboard
Richard M. Stallman <rms@gnu.org>
parents: 3915
diff changeset
1696 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
1697 function returns true iff we received input from that process
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1698 before the timeout elapsed.
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 3510
diff changeset
1699 Otherwise, return true iff we received input from any process. */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1700
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1701 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
1702 int time_limit, microsecs;
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1703 Lisp_Object read_kbd;
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1704 int do_display;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1705 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1706 register int channel, nfds, m;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1707 static SELECT_TYPE Available;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1708 int xerrno;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1709 Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1710 EMACS_TIME timeout, end_time, garbage;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1711 SELECT_TYPE Atemp;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1712 int wait_channel = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1713 struct Lisp_Process *wait_proc = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1714 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
1715 Lisp_Object *wait_for_cell = 0;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1716
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1717 FD_ZERO (&Available);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1718
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1719 /* 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
1720 accordingly. */
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1721 if (XTYPE (read_kbd) == Lisp_Process)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1722 {
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1723 wait_proc = XPROCESS (read_kbd);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1724 wait_channel = XFASTINT (wait_proc->infd);
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1725 XFASTINT (read_kbd) = 0;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1726 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1727
2200
5e58643bb169 (wait_reading_process_input): New option to wait
Richard M. Stallman <rms@gnu.org>
parents: 2120
diff changeset
1728 /* If waiting for non-nil in a cell, record where. */
5e58643bb169 (wait_reading_process_input): New option to wait
Richard M. Stallman <rms@gnu.org>
parents: 2120
diff changeset
1729 if (XTYPE (read_kbd) == Lisp_Cons)
5e58643bb169 (wait_reading_process_input): New option to wait
Richard M. Stallman <rms@gnu.org>
parents: 2120
diff changeset
1730 {
5e58643bb169 (wait_reading_process_input): New option to wait
Richard M. Stallman <rms@gnu.org>
parents: 2120
diff changeset
1731 wait_for_cell = &XCONS (read_kbd)->car;
5e58643bb169 (wait_reading_process_input): New option to wait
Richard M. Stallman <rms@gnu.org>
parents: 2120
diff changeset
1732 XFASTINT (read_kbd) = 0;
5e58643bb169 (wait_reading_process_input): New option to wait
Richard M. Stallman <rms@gnu.org>
parents: 2120
diff changeset
1733 }
5e58643bb169 (wait_reading_process_input): New option to wait
Richard M. Stallman <rms@gnu.org>
parents: 2120
diff changeset
1734
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1735 waiting_for_user_input_p = XINT (read_kbd);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1736
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1737 /* Since we may need to wait several times,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1738 compute the absolute time to return at. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1739 if (time_limit || microsecs)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1740 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1741 EMACS_GET_TIME (end_time);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1742 EMACS_SET_SECS_USECS (timeout, time_limit, microsecs);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1743 EMACS_ADD_TIME (end_time, end_time, timeout);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1744 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1745
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1746 while (1)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1747 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1748 /* If calling from keyboard input, do not quit
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1749 since we want to return C-g as an input character.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1750 Otherwise, do pending quit if requested. */
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1751 if (XINT (read_kbd) >= 0)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1752 QUIT;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1753
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1754 /* Compute time from now till when time limit is up */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1755 /* Exit if already run out */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1756 if (time_limit == -1)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1757 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1758 /* -1 specified for timeout means
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1759 gobble output available now
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1760 but don't wait at all. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1761
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1762 EMACS_SET_SECS_USECS (timeout, 0, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1763 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1764 else if (time_limit || microsecs)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1765 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1766 EMACS_GET_TIME (timeout);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1767 EMACS_SUB_TIME (timeout, end_time, timeout);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1768 if (EMACS_TIME_NEG_P (timeout))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1769 break;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1770 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1771 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1772 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1773 EMACS_SET_SECS_USECS (timeout, 100000, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1774 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1775
2894
646c5beae647 * process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents: 2893
diff changeset
1776 /* 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
1777 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
1778
646c5beae647 * process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents: 2893
diff changeset
1779 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
1780 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
1781 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
1782 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
1783 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
1784
1925
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
1785 /* 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
1786 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
1787 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
1788 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
1789 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
1790 {
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
1791 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
1792 EMACS_SET_SECS_USECS (timeout, 0, 0);
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
1793 if (select (MAXDESC, &Atemp, 0, 0, &timeout) <= 0)
2894
646c5beae647 * process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents: 2893
diff changeset
1794 {
646c5beae647 * process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents: 2893
diff changeset
1795 /* It's okay for us to do this and then continue with
646c5beae647 * process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents: 2893
diff changeset
1796 the loop, since timeout has already been zeroed out. */
646c5beae647 * process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents: 2893
diff changeset
1797 clear_waiting_for_input ();
646c5beae647 * process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents: 2893
diff changeset
1798 status_notify ();
646c5beae647 * process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents: 2893
diff changeset
1799 }
1925
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
1800 }
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
1801
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
1802 /* 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
1803 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
1804 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
1805 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
1806 && ! 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
1807 {
4df57953d5d0 * process.c (wait_reading_process_input): Don't forget to call
Jim Blandy <jimb@redhat.com>
parents: 2887
diff changeset
1808 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
1809 break;
4df57953d5d0 * process.c (wait_reading_process_input): Don't forget to call
Jim Blandy <jimb@redhat.com>
parents: 2887
diff changeset
1810 }
1925
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
1811
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1812 /* Wait till there is something to do */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1813
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1814 Available = input_wait_mask;
4320
4055472194b5 (wait_reading_process_input): Undo last two changes:
Richard M. Stallman <rms@gnu.org>
parents: 4257
diff changeset
1815 /* We used to have && wait_for_cell == 0
4055472194b5 (wait_reading_process_input): Undo last two changes:
Richard M. Stallman <rms@gnu.org>
parents: 4257
diff changeset
1816 but that led to lossage handling selection_request events:
4055472194b5 (wait_reading_process_input): Undo last two changes:
Richard M. Stallman <rms@gnu.org>
parents: 4257
diff changeset
1817 within one, we would start to handle another. */
4055472194b5 (wait_reading_process_input): Undo last two changes:
Richard M. Stallman <rms@gnu.org>
parents: 4257
diff changeset
1818 if (! XINT (read_kbd))
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1819 FD_CLR (0, &Available);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1820
765
e4093444f9f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 692
diff changeset
1821 /* 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
1822 redisplay now, before we start to wait. There is a race
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
1823 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
1824 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
1825 displaying a trashed screen. */
765
e4093444f9f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 692
diff changeset
1826 if (frame_garbaged)
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
1827 redisplay_preserve_echo_area ();
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
1828
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1829 if (XINT (read_kbd) && detect_input_pending ())
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1830 nfds = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1831 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1832 nfds = select (MAXDESC, &Available, 0, 0, &timeout);
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
1833
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1834 xerrno = errno;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1835
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1836 /* Make C-g and alarm signals set flags again */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1837 clear_waiting_for_input ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1838
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1839 /* If we woke up due to SIGWINCH, actually change size now. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1840 do_pending_window_change ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1841
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
1842 if (time_limit && nfds == 0) /* timeout elapsed */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1843 break;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1844 if (nfds < 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1845 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1846 if (xerrno == EINTR)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1847 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
1848 #ifdef ultrix
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1849 /* 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
1850 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
1851 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
1852 "__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
1853 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
1854 else if (xerrno == ENOMEM)
25b5b55a3916 * process.c (wait_reading_process_input): If the select returns
Jim Blandy <jimb@redhat.com>
parents: 1207
diff changeset
1855 FD_ZERO (&Available);
25b5b55a3916 * process.c (wait_reading_process_input): If the select returns
Jim Blandy <jimb@redhat.com>
parents: 1207
diff changeset
1856 #endif
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1857 #ifdef ALLIANT
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1858 /* This happens for no known reason on ALLIANT.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1859 I am guessing that this is the right response. -- RMS. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1860 else if (xerrno == EFAULT)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1861 FD_ZERO (&Available);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1862 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1863 else if (xerrno == EBADF)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1864 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1865 #ifdef AIX
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1866 /* AIX doesn't handle PTY closure the same way BSD does. On AIX,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1867 the child's closure of the pts gives the parent a SIGHUP, and
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1868 the ptc file descriptor is automatically closed,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1869 yielding EBADF here or at select() call above.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1870 So, SIGHUP is ignored (see def of PTY_TTY_NAME_SPRINTF
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1871 in m-ibmrt-aix.h), and here we just ignore the select error.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1872 Cleanup occurs c/o status_notify after SIGCLD. */
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
1873 FD_ZERO (&Available); /* Cannot depend on values returned */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1874 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1875 abort ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1876 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1877 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1878 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1879 error("select error: %s", sys_errlist[xerrno]);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1880 }
2815
60f122cfe785 * process.c (wait_reading_process_input): If we're running
Jim Blandy <jimb@redhat.com>
parents: 2610
diff changeset
1881 #if defined(sun) && !defined(USG5_4)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1882 else if (nfds > 0 && FD_ISSET (0, &Available) && interrupt_input)
2830
006c7fbdeab7 Document sun change.
Jim Blandy <jimb@redhat.com>
parents: 2815
diff changeset
1883 /* System sometimes fails to deliver SIGIO.
006c7fbdeab7 Document sun change.
Jim Blandy <jimb@redhat.com>
parents: 2815
diff changeset
1884
006c7fbdeab7 Document sun change.
Jim Blandy <jimb@redhat.com>
parents: 2815
diff changeset
1885 David J. Mackenzie says that Emacs doesn't compile under
006c7fbdeab7 Document sun change.
Jim Blandy <jimb@redhat.com>
parents: 2815
diff changeset
1886 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
1887 conditional. "I haven't noticed any ill effects so far.
006c7fbdeab7 Document sun change.
Jim Blandy <jimb@redhat.com>
parents: 2815
diff changeset
1888 If you find a Solaris expert somewhere, they might know
006c7fbdeab7 Document sun change.
Jim Blandy <jimb@redhat.com>
parents: 2815
diff changeset
1889 better." */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1890 kill (getpid (), SIGIO);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1891 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1892
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1893 /* Check for keyboard input */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1894 /* If there is any, return immediately
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1895 to give it higher priority than subprocesses */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1896
4320
4055472194b5 (wait_reading_process_input): Undo last two changes:
Richard M. Stallman <rms@gnu.org>
parents: 4257
diff changeset
1897 /* We used to do his if wait_for_cell,
4055472194b5 (wait_reading_process_input): Undo last two changes:
Richard M. Stallman <rms@gnu.org>
parents: 4257
diff changeset
1898 but that caused infinite recursion in selection request events. */
4055472194b5 (wait_reading_process_input): Undo last two changes:
Richard M. Stallman <rms@gnu.org>
parents: 4257
diff changeset
1899 if ((XINT (read_kbd))
4057
2fe1488b503c (wait_reading_process_input): If wait_for_cell, do call
Richard M. Stallman <rms@gnu.org>
parents: 3953
diff changeset
1900 && detect_input_pending ())
3103
98505a819898 (wait_reading_process_input): Call swallow_events.
Richard M. Stallman <rms@gnu.org>
parents: 3023
diff changeset
1901 {
98505a819898 (wait_reading_process_input): Call swallow_events.
Richard M. Stallman <rms@gnu.org>
parents: 3023
diff changeset
1902 swallow_events ();
98505a819898 (wait_reading_process_input): Call swallow_events.
Richard M. Stallman <rms@gnu.org>
parents: 3023
diff changeset
1903 if (detect_input_pending ())
98505a819898 (wait_reading_process_input): Call swallow_events.
Richard M. Stallman <rms@gnu.org>
parents: 3023
diff changeset
1904 break;
98505a819898 (wait_reading_process_input): Call swallow_events.
Richard M. Stallman <rms@gnu.org>
parents: 3023
diff changeset
1905 }
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1906
2200
5e58643bb169 (wait_reading_process_input): New option to wait
Richard M. Stallman <rms@gnu.org>
parents: 2120
diff changeset
1907 /* 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
1908 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
1909 break;
5e58643bb169 (wait_reading_process_input): New option to wait
Richard M. Stallman <rms@gnu.org>
parents: 2120
diff changeset
1910
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1911 #ifdef SIGIO
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1912 /* If we think we have keyboard input waiting, but didn't get SIGIO
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1913 go read it. This can happen with X on BSD after logging out.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1914 In that case, there really is no input and no SIGIO,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1915 but select says there is input. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1916
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
1917 if (XINT (read_kbd) && interrupt_input && (FD_ISSET (fileno (stdin), &Available)))
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1918 kill (0, SIGIO);
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
1919 #endif
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1920
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1921 if (! wait_proc)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1922 got_some_input |= nfds > 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1923
624
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
1924 /* 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
1925 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
1926 if (XINT (read_kbd) || wait_for_cell)
624
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
1927 do_pending_window_change ();
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
1928
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1929 /* Check for data from a process or a command channel */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1930 for (channel = FIRST_PROC_DESC; channel < MAXDESC; channel++)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1931 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1932 if (FD_ISSET (channel, &Available))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1933 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1934 int nread;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1935
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1936 /* If waiting for this channel, arrange to return as
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1937 soon as no more input to be processed. No more
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1938 waiting. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1939 if (wait_channel == channel)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1940 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1941 wait_channel = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1942 time_limit = -1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1943 got_some_input = 1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1944 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1945 proc = chan_process[channel];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1946 if (NILP (proc))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1947 continue;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1948
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1949 /* Read data from the process, starting with our
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1950 buffered-ahead character if we have one. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1951
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1952 nread = read_process_output (proc, channel);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1953 if (nread > 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1954 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1955 /* Since read_process_output can run a filter,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1956 which can call accept-process-output,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1957 don't try to read from any other processes
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1958 before doing the select again. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1959 FD_ZERO (&Available);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1960
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1961 if (do_display)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1962 redisplay_preserve_echo_area ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1963 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1964 #ifdef EWOULDBLOCK
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1965 else if (nread == -1 && errno == EWOULDBLOCK)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1966 ;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1967 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1968 #ifdef O_NONBLOCK
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1969 else if (nread == -1 && errno == EAGAIN)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1970 ;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1971 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1972 #ifdef O_NDELAY
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1973 else if (nread == -1 && errno == EAGAIN)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1974 ;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1975 /* Note that we cannot distinguish between no input
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1976 available now and a closed pipe.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1977 With luck, a closed pipe will be accompanied by
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1978 subprocess termination and SIGCHLD. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1979 else if (nread == 0 && !NETCONN_P (proc))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1980 ;
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
1981 #endif /* O_NDELAY */
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
1982 #endif /* O_NONBLOCK */
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
1983 #endif /* EWOULDBLOCK */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1984 #ifdef HAVE_PTYS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1985 /* On some OSs with ptys, when the process on one end of
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1986 a pty exits, the other end gets an error reading with
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1987 errno = EIO instead of getting an EOF (0 bytes read).
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1988 Therefore, if we get an error reading and errno =
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1989 EIO, just continue, because the child process has
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1990 exited and should clean itself up soon (e.g. when we
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1991 get a SIGCHLD). */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1992 else if (nread == -1 && errno == EIO)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1993 ;
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
1994 #endif /* HAVE_PTYS */
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
1995 /* If we can detect process termination, don't consider the process
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
1996 gone just because its pipe is closed. */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1997 #ifdef SIGCHLD
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1998 else if (nread == 0 && !NETCONN_P (proc))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1999 ;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2000 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2001 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2002 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2003 /* Preserve status of processes already terminated. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2004 XSETINT (XPROCESS (proc)->tick, ++process_tick);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2005 deactivate_process (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2006 if (!NILP (XPROCESS (proc)->raw_status_low))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2007 update_status (XPROCESS (proc));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2008 if (EQ (XPROCESS (proc)->status, Qrun))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2009 XPROCESS (proc)->status
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2010 = Fcons (Qexit, Fcons (make_number (256), Qnil));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2011 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2012 }
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2013 } /* end for each file descriptor */
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2014 } /* end while exit conditions not met */
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2015
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2016 /* If calling from keyboard input, do not quit
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2017 since we want to return C-g as an input character.
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2018 Otherwise, do pending quit if requested. */
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
2019 if (XINT (read_kbd) >= 0)
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2020 {
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2021 /* Prevent input_pending from remaining set if we quit. */
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2022 clear_input_pending ();
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2023 QUIT;
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2024 }
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2025
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2026 return got_some_input;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2027 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2028
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2029 /* Read pending output from the process channel,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2030 starting with our buffered-ahead character if we have one.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2031 Yield number of characters read.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2032
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2033 This function reads at most 1024 characters.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2034 If you want to read all available subprocess output,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2035 you must call it repeatedly until it returns zero. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2036
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2037 read_process_output (proc, channel)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2038 Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2039 register int channel;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2040 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2041 register int nchars;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2042 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2043 char *chars;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2044 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2045 char chars[1024];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2046 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2047 register Lisp_Object outstream;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2048 register struct buffer *old = current_buffer;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2049 register struct Lisp_Process *p = XPROCESS (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2050 register int opoint;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2051
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2052 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2053 VMS_PROC_STUFF *vs, *get_vms_process_pointer();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2054
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2055 vs = get_vms_process_pointer (p->pid);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2056 if (vs)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2057 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2058 if (!vs->iosb[0])
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2059 return(0); /* Really weird if it does this */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2060 if (!(vs->iosb[0] & 1))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2061 return -1; /* I/O error */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2062 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2063 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2064 error ("Could not get VMS process pointer");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2065 chars = vs->inputBuffer;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2066 nchars = clean_vms_buffer (chars, vs->iosb[1]);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2067 if (nchars <= 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2068 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2069 start_vms_process_read (vs); /* Crank up the next read on the process */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2070 return 1; /* Nothing worth printing, say we got 1 */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2071 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2072 #else /* not VMS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2073
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2074 if (proc_buffered_char[channel] < 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2075 nchars = read (channel, chars, sizeof chars);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2076 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2077 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2078 chars[0] = proc_buffered_char[channel];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2079 proc_buffered_char[channel] = -1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2080 nchars = read (channel, chars + 1, sizeof chars - 1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2081 if (nchars < 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2082 nchars = 1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2083 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2084 nchars = nchars + 1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2085 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2086 #endif /* not VMS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2087
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2088 if (nchars <= 0) return nchars;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2089
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2090 outstream = p->filter;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2091 if (!NILP (outstream))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2092 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2093 /* We inhibit quit here instead of just catching it so that
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2094 hitting ^G when a filter happens to be running won't screw
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2095 it up. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2096 int count = specpdl_ptr - specpdl;
3510
b4a552ca4e99 (read_process_output): Deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents: 3238
diff changeset
2097 Lisp_Object odeactivate;
b4a552ca4e99 (read_process_output): Deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents: 3238
diff changeset
2098
b4a552ca4e99 (read_process_output): Deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents: 3238
diff changeset
2099 odeactivate = Vdeactivate_mark;
b4a552ca4e99 (read_process_output): Deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents: 3238
diff changeset
2100
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2101 specbind (Qinhibit_quit, Qt);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2102 call2 (outstream, proc, make_string (chars, nchars));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2103
3666
c7ff787b096f (read_process_output): Don't deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents: 3608
diff changeset
2104 /* 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
2105 Vdeactivate_mark = odeactivate;
b4a552ca4e99 (read_process_output): Deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents: 3238
diff changeset
2106
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2107 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2108 start_vms_process_read (vs);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2109 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2110 unbind_to (count);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2111 return nchars;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2112 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2113
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2114 /* If no filter, write into buffer if it isn't dead. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2115 if (!NILP (p->buffer) && !NILP (XBUFFER (p->buffer)->name))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2116 {
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2117 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
2118 Lisp_Object old_begv, old_zv;
3510
b4a552ca4e99 (read_process_output): Deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents: 3238
diff changeset
2119 Lisp_Object odeactivate;
b4a552ca4e99 (read_process_output): Deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents: 3238
diff changeset
2120
b4a552ca4e99 (read_process_output): Deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents: 3238
diff changeset
2121 odeactivate = Vdeactivate_mark;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2122
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2123 Fset_buffer (p->buffer);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2124 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
2125 old_read_only = current_buffer->read_only;
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2126 XFASTINT (old_begv) = BEGV;
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2127 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
2128
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2129 current_buffer->read_only = Qnil;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2130
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2131 /* Insert new output into buffer
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2132 at the current end-of-output marker,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2133 thus preserving logical ordering of input and output. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2134 if (XMARKER (p->mark)->buffer)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2135 SET_PT (marker_position (p->mark));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2136 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2137 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
2138
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2139 /* 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
2140 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
2141 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
2142 Fwiden ();
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2143
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2144 /* 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
2145 would. */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2146 if (point <= opoint)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2147 opoint += nchars;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2148
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2149 /* 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
2150 if (point < XFASTINT (old_begv))
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2151 XFASTINT (old_begv) += nchars;
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2152 if (point <= XFASTINT (old_zv))
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2153 XFASTINT (old_zv) += nchars;
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2154
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2155 /* Insert before markers in case we are inserting where
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2156 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
2157 insert_before_markers (chars, nchars);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2158 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
2159
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2160 update_mode_lines++;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2161
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2162 /* 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
2163 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
2164 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
2165
3666
c7ff787b096f (read_process_output): Don't deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents: 3608
diff changeset
2166 /* 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
2167 Vdeactivate_mark = odeactivate;
b4a552ca4e99 (read_process_output): Deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents: 3238
diff changeset
2168
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2169 current_buffer->read_only = old_read_only;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2170 SET_PT (opoint);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2171 set_buffer_internal (old);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2172 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2173 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2174 start_vms_process_read (vs);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2175 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2176 return nchars;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2177 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2178
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2179 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
2180 0, 0, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2181 "Returns non-NIL if emacs is waiting for input from the user.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2182 This is intended for use by asynchronous process output filters and sentinels.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2183 ()
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2184 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2185 return ((waiting_for_user_input_p) ? Qt : Qnil);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2186 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2187
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2188 /* Sending data to subprocess */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2189
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2190 jmp_buf send_process_frame;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2191
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2192 SIGTYPE
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2193 send_process_trap ()
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2194 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2195 #ifdef BSD4_1
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2196 sigrelse (SIGPIPE);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2197 sigrelse (SIGALRM);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2198 #endif /* BSD4_1 */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2199 longjmp (send_process_frame, 1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2200 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2201
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2202 send_process (proc, buf, len)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2203 Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2204 char *buf;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2205 int len;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2206 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2207 /* Don't use register vars; longjmp can lose them. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2208 int rv;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2209 unsigned char *procname = XSTRING (XPROCESS (proc)->name)->data;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2210
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2211
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2212 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2213 struct Lisp_Process *p = XPROCESS (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2214 VMS_PROC_STUFF *vs, *get_vms_process_pointer();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2215 #endif /* VMS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2216
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2217 if (! NILP (XPROCESS (proc)->raw_status_low))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2218 update_status (XPROCESS (proc));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2219 if (! EQ (XPROCESS (proc)->status, Qrun))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2220 error ("Process %s not running", procname);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2221
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2222 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2223 vs = get_vms_process_pointer (p->pid);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2224 if (vs == 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2225 error ("Could not find this process: %x", p->pid);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2226 else if (write_to_vms_process (vs, buf, len))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2227 ;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2228 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2229 if (!setjmp (send_process_frame))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2230 while (len > 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2231 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2232 int this = len;
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
2233 SIGTYPE (*old_sigpipe)();
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
2234
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2235 /* Don't send more than 500 bytes at a time. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2236 if (this > 500)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2237 this = 500;
692
681c352bbf30 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 650
diff changeset
2238 old_sigpipe = (SIGTYPE (*) ()) signal (SIGPIPE, send_process_trap);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2239 rv = write (XFASTINT (XPROCESS (proc)->outfd), buf, this);
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
2240 signal (SIGPIPE, old_sigpipe);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2241 if (rv < 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2242 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2243 if (0
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2244 #ifdef EWOULDBLOCK
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2245 || errno == EWOULDBLOCK
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2246 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2247 #ifdef EAGAIN
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2248 || errno == EAGAIN
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2249 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2250 )
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2251 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2252 /* It would be nice to accept process output here,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2253 but that is difficult. For example, it could
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2254 garbage what we are sending if that is from a buffer. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2255 immediate_quit = 1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2256 QUIT;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2257 sleep (1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2258 immediate_quit = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2259 continue;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2260 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2261 report_file_error ("writing to process", Fcons (proc, Qnil));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2262 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2263 buf += rv;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2264 len -= rv;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2265 /* Allow input from processes between bursts of sending.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2266 Otherwise things may get stopped up. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2267 if (len > 0)
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
2268 {
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
2269 Lisp_Object zero;
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
2270
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
2271 XFASTINT (zero) = 0;
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
2272 wait_reading_process_input (-1, 0, zero, 0);
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
2273 }
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2274 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2275 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2276 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2277 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2278 XPROCESS (proc)->raw_status_low = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2279 XPROCESS (proc)->raw_status_high = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2280 XPROCESS (proc)->status = Fcons (Qexit, Fcons (make_number (256), Qnil));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2281 XSETINT (XPROCESS (proc)->tick, ++process_tick);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2282 deactivate_process (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2283 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2284 error ("Error writing to process %s; closed it", procname);
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 error ("SIGPIPE raised on process %s; closed it", procname);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2287 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2288 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2289 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2290
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2291 DEFUN ("process-send-region", Fprocess_send_region, Sprocess_send_region,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2292 3, 3, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2293 "Send current contents of region as input to PROCESS.\n\
808
707866b2a190 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 765
diff changeset
2294 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
2295 nil, indicating the current buffer's process.\n\
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2296 Called from program, takes three arguments, PROCESS, START and END.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2297 If the region is more than 500 characters long,\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2298 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
2299 Output from processes can arrive in between bunches.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2300 (process, start, end)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2301 Lisp_Object process, start, end;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2302 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2303 Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2304 int start1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2305
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2306 proc = get_process (process);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2307 validate_region (&start, &end);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2308
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2309 if (XINT (start) < GPT && XINT (end) > GPT)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2310 move_gap (start);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2311
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2312 start1 = XINT (start);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2313 send_process (proc, &FETCH_CHAR (start1), XINT (end) - XINT (start));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2314
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2315 return Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2316 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2317
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2318 DEFUN ("process-send-string", Fprocess_send_string, Sprocess_send_string,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2319 2, 2, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2320 "Send PROCESS the contents of STRING as input.\n\
808
707866b2a190 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 765
diff changeset
2321 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
2322 nil, indicating the current buffer's process.\n\
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2323 If STRING is more than 500 characters long,\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2324 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
2325 Output from processes can arrive in between bunches.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2326 (process, string)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2327 Lisp_Object process, string;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2328 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2329 Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2330 CHECK_STRING (string, 1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2331 proc = get_process (process);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2332 send_process (proc, XSTRING (string)->data, XSTRING (string)->size);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2333 return Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2334 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2335
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2336 /* send a signal number SIGNO to PROCESS.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2337 CURRENT_GROUP means send to the process group that currently owns
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2338 the terminal being used to communicate with PROCESS.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2339 This is used for various commands in shell mode.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2340 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
2341 right away.
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2342
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2343 If we can, we try to signal PROCESS by sending control characters
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2344 down the pipe. This allows us to signal inferiors who have changed
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2345 their uid, for which killpg would return an EPERM error. */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2346
1522
19ccf004b172 * process.c: (status_convert): Declare this to return a
Jim Blandy <jimb@redhat.com>
parents: 1323
diff changeset
2347 static void
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2348 process_send_signal (process, signo, current_group, nomsg)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2349 Lisp_Object process;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2350 int signo;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2351 Lisp_Object current_group;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2352 int nomsg;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2353 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2354 Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2355 register struct Lisp_Process *p;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2356 int gid;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2357 int no_pgrp = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2358
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2359 proc = get_process (process);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2360 p = XPROCESS (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2361
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2362 if (!EQ (p->childp, Qt))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2363 error ("Process %s is not a subprocess",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2364 XSTRING (p->name)->data);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2365 if (!XFASTINT (p->infd))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2366 error ("Process %s is not active",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2367 XSTRING (p->name)->data);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2368
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2369 if (NILP (p->pty_flag))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2370 current_group = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2371
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2372 /* If we are using pgrps, get a pgrp number and make it negative. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2373 if (!NILP (current_group))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2374 {
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2375 #ifdef SIGNALS_VIA_CHARACTERS
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2376 /* If possible, send signals to the entire pgrp
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2377 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
2378
1925
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2379 /* 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
2380 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
2381 #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
2382 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
2383
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2384 switch (signo)
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2385 {
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2386 case SIGINT:
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2387 tcgetattr (XFASTINT (p->infd), &t);
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2388 send_process (proc, &t.c_cc[VINTR], 1);
2120
fc3cdca22f8d * process.c (process_send_signal): In the TERMIOS code for sending
Jim Blandy <jimb@redhat.com>
parents: 1925
diff changeset
2389 return;
1925
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2390
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2391 case SIGQUIT:
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2392 tcgetattr (XFASTINT (p->infd), &t);
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2393 send_process (proc, &t.c_cc[VQUIT], 1);
2120
fc3cdca22f8d * process.c (process_send_signal): In the TERMIOS code for sending
Jim Blandy <jimb@redhat.com>
parents: 1925
diff changeset
2394 return;
1925
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2395
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2396 case SIGTSTP:
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2397 tcgetattr (XFASTINT (p->infd), &t);
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2398 #ifdef VSWTCH
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2399 send_process (proc, &t.c_cc[VSWTCH], 1);
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2400 #else
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2401 send_process (proc, &t.c_cc[VSUSP], 1);
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2402 #endif
2120
fc3cdca22f8d * process.c (process_send_signal): In the TERMIOS code for sending
Jim Blandy <jimb@redhat.com>
parents: 1925
diff changeset
2403 return;
1925
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2404 }
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2405
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2406 #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
2407
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2408 /* 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
2409 current control characters. */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2410 #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
2411
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2412 struct tchars c;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2413 struct ltchars lc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2414
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2415 switch (signo)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2416 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2417 case SIGINT:
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2418 ioctl (XFASTINT (p->infd), TIOCGETC, &c);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2419 send_process (proc, &c.t_intrc, 1);
1522
19ccf004b172 * process.c: (status_convert): Declare this to return a
Jim Blandy <jimb@redhat.com>
parents: 1323
diff changeset
2420 return;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2421 case SIGQUIT:
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2422 ioctl (XFASTINT (p->infd), TIOCGETC, &c);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2423 send_process (proc, &c.t_quitc, 1);
1522
19ccf004b172 * process.c: (status_convert): Declare this to return a
Jim Blandy <jimb@redhat.com>
parents: 1323
diff changeset
2424 return;
1012
a48ed1d416dd * process.c (process_send_signal): Don't send SIGTSTP if the
Jim Blandy <jimb@redhat.com>
parents: 849
diff changeset
2425 #ifdef SIGTSTP
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2426 case SIGTSTP:
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2427 ioctl (XFASTINT (p->infd), TIOCGLTC, &lc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2428 send_process (proc, &lc.t_suspc, 1);
1522
19ccf004b172 * process.c: (status_convert): Declare this to return a
Jim Blandy <jimb@redhat.com>
parents: 1323
diff changeset
2429 return;
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2430 #endif /* ! defined (SIGTSTP) */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2431 }
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2432
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2433 #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
2434
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2435 /* 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
2436 characters. */
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2437 #ifdef TCGETA
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2438 struct termio t;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2439 switch (signo)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2440 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2441 case SIGINT:
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2442 ioctl (XFASTINT (p->infd), TCGETA, &t);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2443 send_process (proc, &t.c_cc[VINTR], 1);
1522
19ccf004b172 * process.c: (status_convert): Declare this to return a
Jim Blandy <jimb@redhat.com>
parents: 1323
diff changeset
2444 return;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2445 case SIGQUIT:
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2446 ioctl (XFASTINT (p->infd), TCGETA, &t);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2447 send_process (proc, &t.c_cc[VQUIT], 1);
1522
19ccf004b172 * process.c: (status_convert): Declare this to return a
Jim Blandy <jimb@redhat.com>
parents: 1323
diff changeset
2448 return;
1569
52a69b6a8f96 * process.c [SYSV]: Don't include <termios.h>, <termio.h>, or
Jim Blandy <jimb@redhat.com>
parents: 1522
diff changeset
2449 #ifdef SIGTSTP
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2450 case SIGTSTP:
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2451 ioctl (XFASTINT (p->infd), TCGETA, &t);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2452 send_process (proc, &t.c_cc[VSWTCH], 1);
1522
19ccf004b172 * process.c: (status_convert): Declare this to return a
Jim Blandy <jimb@redhat.com>
parents: 1323
diff changeset
2453 return;
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2454 #endif /* ! defined (SIGTSTP) */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2455 }
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2456 #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
2457 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
2458 /* 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
2459 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
2460 #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
2461 #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
2462 #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
2463 #endif /* ! defined (SIGNALS_VIA_CHARACTERS) */
849
c7b49118e101 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 822
diff changeset
2464
c7b49118e101 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 822
diff changeset
2465 #ifdef TIOCGPGRP
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2466 /* Get the pgrp using the tty itself, if we have that.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2467 Otherwise, use the pty to get the pgrp.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2468 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
2469 "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
2470 But, TIOCGPGRP does not work on E50 ;-P works fine on E60"
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2471 His patch indicates that if TIOCGPGRP returns an error, then
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2472 we should just assume that p->pid is also the process group id. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2473 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2474 int err;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2475
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2476 if (!NILP (p->subtty))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2477 err = ioctl (XFASTINT (p->subtty), TIOCGPGRP, &gid);
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 err = ioctl (XFASTINT (p->infd), TIOCGPGRP, &gid);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2480
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2481 #ifdef pfa
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2482 if (err == -1)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2483 gid = - XFASTINT (p->pid);
849
c7b49118e101 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 822
diff changeset
2484 #endif /* ! defined (pfa) */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2485 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2486 if (gid == -1)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2487 no_pgrp = 1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2488 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2489 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
2490 #else /* ! defined (TIOCGPGRP ) */
849
c7b49118e101 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 822
diff changeset
2491 /* Can't select pgrps on this system, so we know that
c7b49118e101 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 822
diff changeset
2492 the child itself heads the pgrp. */
c7b49118e101 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 822
diff changeset
2493 gid = - XFASTINT (p->pid);
c7b49118e101 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 822
diff changeset
2494 #endif /* ! defined (TIOCGPGRP ) */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2495 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2496 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2497 gid = - XFASTINT (p->pid);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2498
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2499 switch (signo)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2500 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2501 #ifdef SIGCONT
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2502 case SIGCONT:
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2503 p->raw_status_low = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2504 p->raw_status_high = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2505 p->status = Qrun;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2506 XSETINT (p->tick, ++process_tick);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2507 if (!nomsg)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2508 status_notify ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2509 break;
849
c7b49118e101 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 822
diff changeset
2510 #endif /* ! defined (SIGCONT) */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2511 case SIGINT:
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2512 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2513 send_process (proc, "\003", 1); /* ^C */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2514 goto whoosh;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2515 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2516 case SIGQUIT:
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2517 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2518 send_process (proc, "\031", 1); /* ^Y */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2519 goto whoosh;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2520 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2521 case SIGKILL:
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2522 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2523 sys$forcex (&(XFASTINT (p->pid)), 0, 1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2524 whoosh:
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2525 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2526 flush_pending_output (XFASTINT (p->infd));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2527 break;
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 /* If we don't have process groups, send the signal to the immediate
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2531 subprocess. That isn't really right, but it's better than any
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2532 obvious alternative. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2533 if (no_pgrp)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2534 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2535 kill (XFASTINT (p->pid), signo);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2536 return;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2537 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2538
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2539 /* gid may be a pid, or minus a pgrp's number */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2540 #ifdef TIOCSIGSEND
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2541 if (!NILP (current_group))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2542 ioctl (XFASTINT (p->infd), TIOCSIGSEND, signo);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2543 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2544 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2545 gid = - XFASTINT (p->pid);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2546 kill (gid, signo);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2547 }
849
c7b49118e101 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 822
diff changeset
2548 #else /* ! defined (TIOCSIGSEND) */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2549 EMACS_KILLPG (-gid, signo);
849
c7b49118e101 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 822
diff changeset
2550 #endif /* ! defined (TIOCSIGSEND) */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2551 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2552
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2553 DEFUN ("interrupt-process", Finterrupt_process, Sinterrupt_process, 0, 2, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2554 "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
2555 PROCESS may be a process, a buffer, or the name of a process or buffer.\n\
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2556 Nil or no arg means current buffer's process.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2557 Second arg CURRENT-GROUP non-nil means send signal to\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2558 the current process-group of the process's controlling terminal\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2559 rather than to the process's own process group.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2560 If the process is a shell, this means interrupt current subjob\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2561 rather than the shell.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2562 (process, current_group)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2563 Lisp_Object process, current_group;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2564 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2565 process_send_signal (process, SIGINT, current_group, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2566 return process;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2567 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2568
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2569 DEFUN ("kill-process", Fkill_process, Skill_process, 0, 2, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2570 "Kill process PROCESS. May be process or name of one.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2571 See function `interrupt-process' for more details on usage.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2572 (process, current_group)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2573 Lisp_Object process, current_group;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2574 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2575 process_send_signal (process, SIGKILL, current_group, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2576 return process;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2577 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2579 DEFUN ("quit-process", Fquit_process, Squit_process, 0, 2, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2580 "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
2581 See function `interrupt-process' for more details on usage.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2582 (process, current_group)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2583 Lisp_Object process, current_group;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2584 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2585 process_send_signal (process, SIGQUIT, current_group, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2586 return process;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2587 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2588
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2589 DEFUN ("stop-process", Fstop_process, Sstop_process, 0, 2, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2590 "Stop process PROCESS. May be process or name of one.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2591 See function `interrupt-process' for more details on usage.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2592 (process, current_group)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2593 Lisp_Object process, current_group;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2594 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2595 #ifndef SIGTSTP
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2596 error ("no SIGTSTP support");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2597 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2598 process_send_signal (process, SIGTSTP, current_group, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2599 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2600 return process;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2601 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2602
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2603 DEFUN ("continue-process", Fcontinue_process, Scontinue_process, 0, 2, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2604 "Continue process PROCESS. May be process or name of one.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2605 See function `interrupt-process' for more details on usage.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2606 (process, current_group)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2607 Lisp_Object process, current_group;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2608 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2609 #ifdef SIGCONT
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2610 process_send_signal (process, SIGCONT, current_group, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2611 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2612 error ("no SIGCONT support");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2613 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2614 return process;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2615 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2616
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2617 DEFUN ("signal-process", Fsignal_process, Ssignal_process,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2618 2, 2, "nProcess number: \nnSignal code: ",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2619 "Send the process with number PID the signal with code CODE.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2620 Both PID and CODE are integers.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2621 (pid, sig)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2622 Lisp_Object pid, sig;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2623 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2624 CHECK_NUMBER (pid, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2625 CHECK_NUMBER (sig, 1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2626 return make_number (kill (XINT (pid), XINT (sig)));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2627 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2628
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2629 DEFUN ("process-send-eof", Fprocess_send_eof, Sprocess_send_eof, 0, 1, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2630 "Make PROCESS see end-of-file in its input.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2631 Eof comes after any text already sent to it.\n\
808
707866b2a190 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 765
diff changeset
2632 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
2633 nil, indicating the current buffer's process.")
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2634 (process)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2635 Lisp_Object process;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2636 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2637 Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2638
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2639 proc = get_process (process);
2221
7edc78402205 (Fprocess_send_eof): Make sure proc is running.
Richard M. Stallman <rms@gnu.org>
parents: 2200
diff changeset
2640
7edc78402205 (Fprocess_send_eof): Make sure proc is running.
Richard M. Stallman <rms@gnu.org>
parents: 2200
diff changeset
2641 /* 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
2642 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
2643 update_status (XPROCESS (proc));
7edc78402205 (Fprocess_send_eof): Make sure proc is running.
Richard M. Stallman <rms@gnu.org>
parents: 2200
diff changeset
2644 if (! EQ (XPROCESS (proc)->status, Qrun))
2222
d81c60c5f9ce Fix typo in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 2221
diff changeset
2645 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
2646
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2647 /* Sending a zero-length record is supposed to mean eof
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2648 when TIOCREMOTE is turned on. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2649 #ifdef DID_REMOTE
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2650 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2651 char buf[1];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2652 write (XFASTINT (XPROCESS (proc)->outfd), buf, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2653 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2654 #else /* did not do TOICREMOTE */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2655 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2656 send_process (proc, "\032", 1); /* ^z */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2657 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2658 if (!NILP (XPROCESS (proc)->pty_flag))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2659 send_process (proc, "\004", 1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2660 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2661 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2662 close (XPROCESS (proc)->outfd);
2432
17a84e60603b New macros NULL_DEVICE and EXEC_SUFFIXES, to give the name of the
Jim Blandy <jimb@redhat.com>
parents: 2429
diff changeset
2663 XFASTINT (XPROCESS (proc)->outfd) = open (NULL_DEVICE, O_WRONLY);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2664 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2665 #endif /* VMS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2666 #endif /* did not do TOICREMOTE */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2667 return process;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2668 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2669
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2670 /* Kill all processes associated with `buffer'.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2671 If `buffer' is nil, kill all processes */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2672
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2673 kill_buffer_processes (buffer)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2674 Lisp_Object buffer;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2675 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2676 Lisp_Object tail, proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2677
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2678 for (tail = Vprocess_alist; XGCTYPE (tail) == Lisp_Cons;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2679 tail = XCONS (tail)->cdr)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2680 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2681 proc = XCONS (XCONS (tail)->car)->cdr;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2682 if (XGCTYPE (proc) == Lisp_Process
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2683 && (NILP (buffer) || EQ (XPROCESS (proc)->buffer, buffer)))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2684 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2685 if (NETCONN_P (proc))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2686 deactivate_process (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2687 else if (XFASTINT (XPROCESS (proc)->infd))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2688 process_send_signal (proc, SIGHUP, Qnil, 1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2689 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2690 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2691 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2692
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2693 /* On receipt of a signal that a child status has changed,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2694 loop asking about children with changed statuses until
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2695 the system says there are no more.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2696 All we do is change the status;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2697 we do not run sentinels or print notifications.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2698 That is saved for the next time keyboard input is done,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2699 in order to avoid timing errors. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2700
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2701 /** WARNING: this can be called during garbage collection.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2702 Therefore, it must not be fooled by the presence of mark bits in
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2703 Lisp objects. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2704
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2705 /** USG WARNING: Although it is not obvious from the documentation
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2706 in signal(2), on a USG system the SIGCLD handler MUST NOT call
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2707 signal() before executing at least one wait(), otherwise the handler
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2708 will be called again, resulting in an infinite loop. The relevant
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2709 portion of the documentation reads "SIGCLD signals will be queued
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2710 and the signal-catching function will be continually reentered until
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2711 the queue is empty". Invoking signal() causes the kernel to reexamine
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2712 the SIGCLD queue. Fred Fish, UniSoft Systems Inc. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2713
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2714 SIGTYPE
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2715 sigchld_handler (signo)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2716 int signo;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2717 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2718 int old_errno = errno;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2719 Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2720 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
2721 extern EMACS_TIME *input_available_clear_time;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2722
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2723 #ifdef BSD4_1
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2724 extern int sigheld;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2725 sigheld |= sigbit (SIGCHLD);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2726 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2727
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2728 while (1)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2729 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2730 register int pid;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2731 WAITTYPE w;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2732 Lisp_Object tail;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2733
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2734 #ifdef WNOHANG
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2735 #ifndef WUNTRACED
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2736 #define WUNTRACED 0
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2737 #endif /* no WUNTRACED */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2738 /* Keep trying to get a status until we get a definitive result. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2739 do
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2740 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2741 errno = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2742 pid = wait3 (&w, WNOHANG | WUNTRACED, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2743 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2744 while (pid <= 0 && errno == EINTR);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2745
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2746 if (pid <= 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2747 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2748 /* A real failure. We have done all our job, so return. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2749
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2750 /* USG systems forget handlers when they are used;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2751 must reestablish each time */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2752 #ifdef USG
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2753 signal (signo, sigchld_handler); /* WARNING - must come after wait3() */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2754 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2755 #ifdef BSD4_1
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2756 sigheld &= ~sigbit (SIGCHLD);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2757 sigrelse (SIGCHLD);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2758 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2759 errno = old_errno;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2760 return;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2761 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2762 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2763 pid = wait (&w);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2764 #endif /* no WNOHANG */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2765
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2766 /* Find the process that signaled us, and record its status. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2767
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2768 p = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2769 for (tail = Vprocess_alist; XSYMBOL (tail) != XSYMBOL (Qnil); tail = XCONS (tail)->cdr)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2770 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2771 proc = XCONS (XCONS (tail)->car)->cdr;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2772 p = XPROCESS (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2773 if (EQ (p->childp, Qt) && XFASTINT (p->pid) == pid)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2774 break;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2775 p = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2776 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2777
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2778 /* Look for an asynchronous process whose pid hasn't been filled
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2779 in yet. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2780 if (p == 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2781 for (tail = Vprocess_alist; XSYMBOL (tail) != XSYMBOL (Qnil); tail = XCONS (tail)->cdr)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2782 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2783 proc = XCONS (XCONS (tail)->car)->cdr;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2784 p = XPROCESS (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2785 if (XTYPE (p->pid) == Lisp_Int && XINT (p->pid) == -1)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2786 break;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2787 p = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2788 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2789
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2790 /* Change the status of the process that was found. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2791 if (p != 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2792 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2793 union { int i; WAITTYPE wt; } u;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2794
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2795 XSETINT (p->tick, ++process_tick);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2796 u.wt = w;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2797 XFASTINT (p->raw_status_low) = u.i & 0xffff;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2798 XFASTINT (p->raw_status_high) = u.i >> 16;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2799
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2800 /* If process has terminated, stop waiting for its output. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2801 if (WIFSIGNALED (w) || WIFEXITED (w))
1522
19ccf004b172 * process.c: (status_convert): Declare this to return a
Jim Blandy <jimb@redhat.com>
parents: 1323
diff changeset
2802 if (XFASTINT (p->infd))
19ccf004b172 * process.c: (status_convert): Declare this to return a
Jim Blandy <jimb@redhat.com>
parents: 1323
diff changeset
2803 FD_CLR (XFASTINT (p->infd), &input_wait_mask);
1925
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2804
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2805 /* 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
2806 look around. */
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2807 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
2808 EMACS_SET_SECS_USECS (*input_available_clear_time, 0, 0);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2809 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2810
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2811 /* There was no asynchronous process found for that id. Check
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2812 if we have a synchronous process. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2813 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2814 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2815 synch_process_alive = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2816
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2817 /* Report the status of the synchronous process. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2818 if (WIFEXITED (w))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2819 synch_process_retcode = WRETCODE (w);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2820 else if (WIFSIGNALED (w))
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2821 #ifndef VMS
3592
7ce5a10ed6d9 * process.c (sigchld_handler): Add cast, to avoid warnings on Linux.
Jim Blandy <jimb@redhat.com>
parents: 3591
diff changeset
2822 synch_process_death = (char *) sys_siglist[WTERMSIG (w)];
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2823 #else
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2824 synch_process_death = sys_errlist[WTERMSIG (w)];
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2825 #endif
1925
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2826
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2827 /* 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
2828 look around. */
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2829 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
2830 EMACS_SET_SECS_USECS (*input_available_clear_time, 0, 0);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2831 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2832
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2833 /* On some systems, we must return right away.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2834 If any more processes want to signal us, we will
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2835 get another signal.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2836 Otherwise (on systems that have WNOHANG), loop around
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2837 to use up all the processes that have something to tell us. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2838 #if defined (USG) && ! (defined (HPUX) && defined (WNOHANG))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2839 #ifdef USG
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2840 signal (signo, sigchld_handler);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2841 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2842 errno = old_errno;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2843 return;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2844 #endif /* USG, but not HPUX with WNOHANG */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2845 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2846 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2847
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2848
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2849 static Lisp_Object
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2850 exec_sentinel_unwind (data)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2851 Lisp_Object data;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2852 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2853 XPROCESS (XCONS (data)->car)->sentinel = XCONS (data)->cdr;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2854 return Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2855 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2856
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2857 static void
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2858 exec_sentinel (proc, reason)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2859 Lisp_Object proc, reason;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2860 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2861 Lisp_Object sentinel;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2862 register struct Lisp_Process *p = XPROCESS (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2863 int count = specpdl_ptr - specpdl;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2864
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2865 sentinel = p->sentinel;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2866 if (NILP (sentinel))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2867 return;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2868
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2869 /* Zilch the sentinel while it's running, to avoid recursive invocations;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2870 assure that it gets restored no matter how the sentinel exits. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2871 p->sentinel = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2872 record_unwind_protect (exec_sentinel_unwind, Fcons (proc, sentinel));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2873 /* Inhibit quit so that random quits don't screw up a running filter. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2874 specbind (Qinhibit_quit, Qt);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2875 call2 (sentinel, proc, reason);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2876 unbind_to (count);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2877 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2878
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2879 /* Report all recent events of a change in process status
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2880 (either run the sentinel or output a message).
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2881 This is done while Emacs is waiting for keyboard input. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2882
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2883 status_notify ()
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2884 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2885 register Lisp_Object proc, buffer;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2886 Lisp_Object tail = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2887 Lisp_Object msg = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2888 struct gcpro gcpro1, gcpro2;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2889
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2890 /* We need to gcpro tail; if read_process_output calls a filter
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2891 which deletes a process and removes the cons to which tail points
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2892 from Vprocess_alist, and then causes a GC, tail is an unprotected
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2893 reference. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2894 GCPRO2 (tail, msg);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2895
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2896 for (tail = Vprocess_alist; !NILP (tail); tail = Fcdr (tail))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2897 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2898 Lisp_Object symbol;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2899 register struct Lisp_Process *p;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2900
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2901 proc = Fcdr (Fcar (tail));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2902 p = XPROCESS (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2903
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2904 if (XINT (p->tick) != XINT (p->update_tick))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2905 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2906 XSETINT (p->update_tick, XINT (p->tick));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2907
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2908 /* If process is still active, read any output that remains. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2909 if (XFASTINT (p->infd))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2910 while (read_process_output (proc, XFASTINT (p->infd)) > 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2911
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2912 buffer = p->buffer;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2913
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2914 /* Get the text to use for the message. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2915 if (!NILP (p->raw_status_low))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2916 update_status (p);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2917 msg = status_message (p->status);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2918
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2919 /* If process is terminated, deactivate it or delete it. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2920 symbol = p->status;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2921 if (XTYPE (p->status) == Lisp_Cons)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2922 symbol = XCONS (p->status)->car;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2923
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2924 if (EQ (symbol, Qsignal) || EQ (symbol, Qexit)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2925 || EQ (symbol, Qclosed))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2926 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2927 if (delete_exited_processes)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2928 remove_process (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2929 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2930 deactivate_process (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2931 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2932
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2933 /* Now output the message suitably. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2934 if (!NILP (p->sentinel))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2935 exec_sentinel (proc, msg);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2936 /* Don't bother with a message in the buffer
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2937 when a process becomes runnable. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2938 else if (!EQ (symbol, Qrun) && !NILP (buffer))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2939 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2940 Lisp_Object ro = XBUFFER (buffer)->read_only;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2941 Lisp_Object tem;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2942 struct buffer *old = current_buffer;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2943 int opoint;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2944
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2945 /* Avoid error if buffer is deleted
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2946 (probably that's why the process is dead, too) */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2947 if (NILP (XBUFFER (buffer)->name))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2948 continue;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2949 Fset_buffer (buffer);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2950 opoint = point;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2951 /* Insert new output into buffer
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2952 at the current end-of-output marker,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2953 thus preserving logical ordering of input and output. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2954 if (XMARKER (p->mark)->buffer)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2955 SET_PT (marker_position (p->mark));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2956 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2957 SET_PT (ZV);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2958 if (point <= opoint)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2959 opoint += XSTRING (msg)->size + XSTRING (p->name)->size + 10;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2960
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2961 tem = current_buffer->read_only;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2962 current_buffer->read_only = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2963 insert_string ("\nProcess ");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2964 Finsert (1, &p->name);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2965 insert_string (" ");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2966 Finsert (1, &msg);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2967 current_buffer->read_only = tem;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2968 Fset_marker (p->mark, make_number (point), p->buffer);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2969
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2970 SET_PT (opoint);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2971 set_buffer_internal (old);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2972 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2973 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2974 } /* end for */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2975
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2976 update_mode_lines++; /* in case buffers use %s in mode-line-format */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2977 redisplay_preserve_echo_area ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2978
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2979 update_tick = process_tick;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2980
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2981 UNGCPRO;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2982 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2983
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2984 init_process ()
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2985 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2986 register int i;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2987
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2988 #ifdef SIGCHLD
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2989 #ifndef CANNOT_DUMP
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2990 if (! noninteractive || initialized)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2991 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2992 signal (SIGCHLD, sigchld_handler);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2993 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2994
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2995 FD_ZERO (&input_wait_mask);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2996 FD_SET (0, &input_wait_mask);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2997 Vprocess_alist = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2998 for (i = 0; i < MAXDESC; i++)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2999 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3000 chan_process[i] = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3001 proc_buffered_char[i] = -1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3002 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3003 }
4231
91a883c56382 (Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents: 4057
diff changeset
3004
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3005 syms_of_process ()
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3006 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3007 #ifdef HAVE_SOCKETS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3008 stream_process = intern ("stream");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3009 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3010 Qprocessp = intern ("processp");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3011 staticpro (&Qprocessp);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3012 Qrun = intern ("run");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3013 staticpro (&Qrun);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3014 Qstop = intern ("stop");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3015 staticpro (&Qstop);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3016 Qsignal = intern ("signal");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3017 staticpro (&Qsignal);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3018
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3019 /* Qexit is already staticpro'd by syms_of_eval; don't staticpro it
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3020 here again.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3021
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3022 Qexit = intern ("exit");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3023 staticpro (&Qexit); */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3024
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3025 Qopen = intern ("open");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3026 staticpro (&Qopen);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3027 Qclosed = intern ("closed");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3028 staticpro (&Qclosed);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3029
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3030 staticpro (&Vprocess_alist);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3031
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3032 DEFVAR_BOOL ("delete-exited-processes", &delete_exited_processes,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3033 "*Non-nil means delete processes immediately when they exit.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3034 nil means don't delete them until `list-processes' is run.");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3035
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3036 delete_exited_processes = 1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3037
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3038 DEFVAR_LISP ("process-connection-type", &Vprocess_connection_type,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3039 "Control type of device used to communicate with subprocesses.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3040 Values are nil to use a pipe, and t or 'pty for a pty. Note that if\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3041 pty's are not available, this variable will be ignored. The value takes\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3042 effect when `start-process' is called.");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3043 Vprocess_connection_type = Qt;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3044
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3045 defsubr (&Sprocessp);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3046 defsubr (&Sget_process);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3047 defsubr (&Sget_buffer_process);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3048 defsubr (&Sdelete_process);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3049 defsubr (&Sprocess_status);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3050 defsubr (&Sprocess_exit_status);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3051 defsubr (&Sprocess_id);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3052 defsubr (&Sprocess_name);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3053 defsubr (&Sprocess_command);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3054 defsubr (&Sset_process_buffer);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3055 defsubr (&Sprocess_buffer);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3056 defsubr (&Sprocess_mark);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3057 defsubr (&Sset_process_filter);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3058 defsubr (&Sprocess_filter);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3059 defsubr (&Sset_process_sentinel);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3060 defsubr (&Sprocess_sentinel);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3061 defsubr (&Sprocess_kill_without_query);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3062 defsubr (&Slist_processes);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3063 defsubr (&Sprocess_list);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3064 defsubr (&Sstart_process);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3065 #ifdef HAVE_SOCKETS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3066 defsubr (&Sopen_network_stream);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3067 #endif /* HAVE_SOCKETS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3068 defsubr (&Saccept_process_output);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3069 defsubr (&Sprocess_send_region);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3070 defsubr (&Sprocess_send_string);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3071 defsubr (&Sinterrupt_process);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3072 defsubr (&Skill_process);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3073 defsubr (&Squit_process);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3074 defsubr (&Sstop_process);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3075 defsubr (&Scontinue_process);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3076 defsubr (&Sprocess_send_eof);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3077 defsubr (&Ssignal_process);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3078 defsubr (&Swaiting_for_user_input_p);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3079 /* defsubr (&Sprocess_connection); */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3080 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3081
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3082
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3083 #else /* not subprocesses */
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3084
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3085 #include <sys/types.h>
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3086 #include <errno.h>
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3087
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3088 #include "lisp.h"
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3089 #include "systime.h"
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3090 #include "termopts.h"
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3091
765
e4093444f9f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 692
diff changeset
3092 extern int frame_garbaged;
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3093
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3094
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3095 /* As described above, except assuming that there are no subprocesses:
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3096
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3097 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
3098
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3099 time_limit is:
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3100 timeout in seconds, or
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3101 zero for no limit, or
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3102 -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
3103
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
3104 read_kbd is a Lisp_Object:
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3105 0 to ignore keyboard input, or
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3106 1 to return when input is available, or
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3107 -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
3108 the quit handler.
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3109 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
3110 `subprocesses' isn't defined.
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3111
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3112 do_display != 0 means redisplay should be done to show subprocess
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3113 output that arrives. This version of the function ignores it.
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3114
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 3510
diff changeset
3115 Return true iff we received input from any process. */
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3116
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3117 int
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3118 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
3119 int time_limit, microsecs;
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
3120 Lisp_Object read_kbd;
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
3121 int do_display;
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3122 {
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3123 EMACS_TIME end_time, timeout, *timeout_p;
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3124 int waitchannels;
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3125
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3126 /* What does time_limit really mean? */
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3127 if (time_limit || microsecs)
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3128 {
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3129 /* It's not infinite. */
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3130 timeout_p = &timeout;
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3131
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3132 if (time_limit == -1)
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3133 /* In fact, it's zero. */
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3134 EMACS_SET_SECS_USECS (timeout, 0, 0);
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3135 else
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3136 EMACS_SET_SECS_USECS (timeout, time_limit, microsecs);
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3137
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3138 /* How far in the future is that? */
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3139 EMACS_GET_TIME (end_time);
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3140 EMACS_ADD_TIME (end_time, end_time, timeout);
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3141 }
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3142 else
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3143 /* It's infinite. */
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3144 timeout_p = 0;
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3145
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3146 /* Turn off periodic alarms (in case they are in use)
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3147 because the select emulator uses alarms. */
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3148 stop_polling ();
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3149
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3150 for (;;)
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3151 {
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3152 int nfds;
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3153
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
3154 waitchannels = XINT (read_kbd) ? 1 : 0;
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3155
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3156 /* If calling from keyboard input, do not quit
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3157 since we want to return C-g as an input character.
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3158 Otherwise, do pending quit if requested. */
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
3159 if (XINT (read_kbd) >= 0)
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3160 QUIT;
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3161
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3162 if (timeout_p)
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3163 {
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3164 EMACS_GET_TIME (*timeout_p);
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3165 EMACS_SUB_TIME (*timeout_p, end_time, *timeout_p);
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3166 if (EMACS_TIME_NEG_P (*timeout_p))
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3167 break;
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3168 }
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3169
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3170 /* Cause C-g and alarm signals to take immediate action,
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3171 and cause input available signals to zero out timeout. */
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
3172 if (XINT (read_kbd) < 0)
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3173 set_waiting_for_input (&timeout);
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3174
765
e4093444f9f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 692
diff changeset
3175 /* If a frame has been newly mapped and needs updating,
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3176 reprocess its display stuff. */
765
e4093444f9f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 692
diff changeset
3177 if (frame_garbaged)
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3178 redisplay_preserve_echo_area ();
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3179
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
3180 if (XINT (read_kbd) && detect_input_pending ())
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3181 nfds = 0;
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3182 else
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3183 nfds = select (1, &waitchannels, 0, 0, timeout_p);
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3184
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3185 /* Make C-g and alarm signals set flags again */
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3186 clear_waiting_for_input ();
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3187
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3188 /* If we woke up due to SIGWINCH, actually change size now. */
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3189 do_pending_window_change ();
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3190
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3191 if (nfds == -1)
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3192 {
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3193 /* If the system call was interrupted, then go around the
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3194 loop again. */
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3195 if (errno == EINTR)
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3196 waitchannels = 0;
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3197 }
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3198 #ifdef sun
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3199 else if (nfds > 0 && (waitchannels & 1) && interrupt_input)
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3200 /* System sometimes fails to deliver SIGIO. */
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3201 kill (getpid (), SIGIO);
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3202 #endif
3915
55ed7a65746e (wait_reading_process_input): Use SIGIO only if defined.
Richard M. Stallman <rms@gnu.org>
parents: 3826
diff changeset
3203 #ifdef SIGIO
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
3204 if (XINT (read_kbd) && interrupt_input && (waitchannels & 1))
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3205 kill (0, SIGIO);
3915
55ed7a65746e (wait_reading_process_input): Use SIGIO only if defined.
Richard M. Stallman <rms@gnu.org>
parents: 3826
diff changeset
3206 #endif
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3207
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3208 /* 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
3209 we should exit. */
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3210 if (nfds >= 0)
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3211 break;
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3212 }
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3213
2120
fc3cdca22f8d * process.c (process_send_signal): In the TERMIOS code for sending
Jim Blandy <jimb@redhat.com>
parents: 1925
diff changeset
3214 start_polling ();
fc3cdca22f8d * process.c (process_send_signal): In the TERMIOS code for sending
Jim Blandy <jimb@redhat.com>
parents: 1925
diff changeset
3215
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3216 return 0;
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3217 }
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3218
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3219
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3220 DEFUN ("get-buffer-process", Fget_buffer_process, Sget_buffer_process, 1, 1, 0,
4231
91a883c56382 (Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents: 4057
diff changeset
3221 /* Don't confused make-docfile by having two doc strings for this function.
91a883c56382 (Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents: 4057
diff changeset
3222 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
3223 0)
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3224 (name)
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3225 register Lisp_Object name;
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3226 {
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3227 return Qnil;
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3228 }
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3229
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3230 /* Kill all processes associated with `buffer'.
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3231 If `buffer' is nil, kill all processes.
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3232 Since we have no subprocesses, this does nothing. */
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3233
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3234 kill_buffer_processes (buffer)
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3235 Lisp_Object buffer;
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3236 {
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3237 }
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3238
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3239 init_process ()
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3240 {
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3241 }
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3242
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3243 syms_of_process ()
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3244 {
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3245 defsubr (&Sget_buffer_process);
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3246 }
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3247
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3248
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
3249 #endif /* not subprocesses */