annotate src/process.c @ 18989:6253a99afd95

(rmail-pop-password-error): New variable. (rmail-insert-inbox-text): If there's an error getting mail from the POP server, and the error matches rmail-pop-password-error or we prompted for the POP password, assume that the password is incorrect and erase it so that the user will be prompted again the next time he gets mail.
author Richard M. Stallman <rms@gnu.org>
date Fri, 25 Jul 1997 22:08:24 +0000
parents ded7c036e1ca
children 7b5642657857
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.
14405
4aa693528ee3 (create_process): Set outchannel to be non-blocking.
Richard M. Stallman <rms@gnu.org>
parents: 14404
diff changeset
2 Copyright (C) 1985, 86, 87, 88, 93, 94, 95, 1996
4aa693528ee3 (create_process): Set outchannel to be non-blocking.
Richard M. Stallman <rms@gnu.org>
parents: 14404
diff changeset
3 Free Software Foundation, Inc.
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5 This file is part of GNU Emacs.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7 GNU Emacs is free software; you can redistribute it and/or modify
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8 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
9 the Free Software Foundation; either version 2, or (at your option)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10 any later version.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 GNU Emacs is distributed in the hope that it will be useful,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15 GNU General Public License for more details.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18 along with GNU Emacs; see the file COPYING. If not, write to
14186
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 14131
diff changeset
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 14131
diff changeset
20 Boston, MA 02111-1307, USA. */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
21
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 <signal.h>
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
24
4696
1fc792473491 Include <config.h> instead of "config.h".
Roland McGrath <roland@gnu.org>
parents: 4682
diff changeset
25 #include <config.h>
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
26
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
27 /* This file is split into two parts by the following preprocessor
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
28 conditional. The 'then' clause contains all of the support for
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
29 asynchronous subprocesses. The 'else' clause contains stub
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
30 versions of some of the asynchronous subprocess routines that are
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
31 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
32 sections that call them. */
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
33
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
34
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
35 #ifdef subprocesses
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
36
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
37 #include <stdio.h>
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
38 #include <errno.h>
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
39 #include <setjmp.h>
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
40 #include <sys/types.h> /* some typedefs are used in sys/file.h */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
41 #include <sys/file.h>
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
42 #include <sys/stat.h>
6158
6b81b2575071 Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 5891
diff changeset
43 #ifdef HAVE_UNISTD_H
6b81b2575071 Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 5891
diff changeset
44 #include <unistd.h>
6b81b2575071 Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 5891
diff changeset
45 #endif
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
46
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
47 #ifdef WINDOWSNT
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
48 #include <stdlib.h>
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
49 #include <fcntl.h>
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
50 #endif /* not WINDOWSNT */
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
51
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
52 #ifdef HAVE_SOCKETS /* TCP connection support, if kernel can do it */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
53 #include <sys/socket.h>
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
54 #include <netdb.h>
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
55 #include <netinet/in.h>
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
56 #include <arpa/inet.h>
12749
ce48ec025b0a Maybe include net/errno.h.
Richard M. Stallman <rms@gnu.org>
parents: 12648
diff changeset
57 #ifdef NEED_NET_ERRNO_H
ce48ec025b0a Maybe include net/errno.h.
Richard M. Stallman <rms@gnu.org>
parents: 12648
diff changeset
58 #include <net/errno.h>
ce48ec025b0a Maybe include net/errno.h.
Richard M. Stallman <rms@gnu.org>
parents: 12648
diff changeset
59 #endif /* NEED_NET_ERRNO_H */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
60 #endif /* HAVE_SOCKETS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
61
4914
56bc426b1eb4 [TERM]: Include client.h.
Richard M. Stallman <rms@gnu.org>
parents: 4883
diff changeset
62 /* TERM is a poor-man's SLIP, used on Linux. */
56bc426b1eb4 [TERM]: Include client.h.
Richard M. Stallman <rms@gnu.org>
parents: 4883
diff changeset
63 #ifdef TERM
56bc426b1eb4 [TERM]: Include client.h.
Richard M. Stallman <rms@gnu.org>
parents: 4883
diff changeset
64 #include <client.h>
56bc426b1eb4 [TERM]: Include client.h.
Richard M. Stallman <rms@gnu.org>
parents: 4883
diff changeset
65 #endif
56bc426b1eb4 [TERM]: Include client.h.
Richard M. Stallman <rms@gnu.org>
parents: 4883
diff changeset
66
7238
c9598edda1a2 (IN_ADDR, NUMERIC_ADDR_ERROR): Made conditional on HAVE_BROKEN_INET_ADDR.
Paul Reilly <pmr@pajato.com>
parents: 7220
diff changeset
67 /* On some systems, e.g. DGUX, inet_addr returns a 'struct in_addr'. */
c9598edda1a2 (IN_ADDR, NUMERIC_ADDR_ERROR): Made conditional on HAVE_BROKEN_INET_ADDR.
Paul Reilly <pmr@pajato.com>
parents: 7220
diff changeset
68 #ifdef HAVE_BROKEN_INET_ADDR
4998
3cd3a39f98f4 (IN_ADDR, NUMERIC_ADDR_ERROR): New macros (two versions).
Richard M. Stallman <rms@gnu.org>
parents: 4994
diff changeset
69 #define IN_ADDR struct in_addr
3cd3a39f98f4 (IN_ADDR, NUMERIC_ADDR_ERROR): New macros (two versions).
Richard M. Stallman <rms@gnu.org>
parents: 4994
diff changeset
70 #define NUMERIC_ADDR_ERROR (numeric_addr.s_addr == -1)
3cd3a39f98f4 (IN_ADDR, NUMERIC_ADDR_ERROR): New macros (two versions).
Richard M. Stallman <rms@gnu.org>
parents: 4994
diff changeset
71 #else
3cd3a39f98f4 (IN_ADDR, NUMERIC_ADDR_ERROR): New macros (two versions).
Richard M. Stallman <rms@gnu.org>
parents: 4994
diff changeset
72 #define IN_ADDR unsigned long
3cd3a39f98f4 (IN_ADDR, NUMERIC_ADDR_ERROR): New macros (two versions).
Richard M. Stallman <rms@gnu.org>
parents: 4994
diff changeset
73 #define NUMERIC_ADDR_ERROR (numeric_addr == -1)
3cd3a39f98f4 (IN_ADDR, NUMERIC_ADDR_ERROR): New macros (two versions).
Richard M. Stallman <rms@gnu.org>
parents: 4994
diff changeset
74 #endif
3cd3a39f98f4 (IN_ADDR, NUMERIC_ADDR_ERROR): New macros (two versions).
Richard M. Stallman <rms@gnu.org>
parents: 4994
diff changeset
75
16220
02044b05d8e0 Replaced symbol BSD with BSD_SYSTEM.
Karl Heuer <kwzh@gnu.org>
parents: 16206
diff changeset
76 #if defined(BSD_SYSTEM) || defined(STRIDE)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
77 #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
78 #if !defined (O_NDELAY) && defined (HAVE_PTYS) && !defined(USG5)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
79 #include <fcntl.h>
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
80 #endif /* HAVE_PTYS and no O_NDELAY */
16220
02044b05d8e0 Replaced symbol BSD with BSD_SYSTEM.
Karl Heuer <kwzh@gnu.org>
parents: 16206
diff changeset
81 #endif /* BSD_SYSTEM || STRIDE */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
82
5240
eed870591987 (Fprocess_status): Use get_process, not Fget_process.
Richard M. Stallman <rms@gnu.org>
parents: 5239
diff changeset
83 #ifdef BROKEN_O_NONBLOCK
eed870591987 (Fprocess_status): Use get_process, not Fget_process.
Richard M. Stallman <rms@gnu.org>
parents: 5239
diff changeset
84 #undef O_NONBLOCK
eed870591987 (Fprocess_status): Use get_process, not Fget_process.
Richard M. Stallman <rms@gnu.org>
parents: 5239
diff changeset
85 #endif /* BROKEN_O_NONBLOCK */
eed870591987 (Fprocess_status): Use get_process, not Fget_process.
Richard M. Stallman <rms@gnu.org>
parents: 5239
diff changeset
86
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
87 #ifdef NEED_BSDTTY
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
88 #include <bsdtty.h>
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
89 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
90
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
91 #ifdef IRIS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
92 #include <sys/sysmacros.h> /* for "minor" */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
93 #endif /* not IRIS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
94
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
95 #include "systime.h"
1047
1ab1ed32e82a * process.c: Include "systty.h", not "systerm.h".
Jim Blandy <jimb@redhat.com>
parents: 1030
diff changeset
96 #include "systty.h"
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
97
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
98 #include "lisp.h"
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
99 #include "window.h"
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
100 #include "buffer.h"
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
101 #include "charset.h"
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
102 #include "coding.h"
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
103 #include "process.h"
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
104 #include "termhooks.h"
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
105 #include "termopts.h"
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
106 #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
107 #include "frame.h"
16780
e9dc2569cb12 Include blockinput.h.
Richard M. Stallman <rms@gnu.org>
parents: 16728
diff changeset
108 #include "blockinput.h"
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
109
18492
668304de6f92 (wait_reading_process_input): If wait_for_cell,
Richard M. Stallman <rms@gnu.org>
parents: 18378
diff changeset
110 #define max(a, b) ((a) > (b) ? (a) : (b))
668304de6f92 (wait_reading_process_input): If wait_for_cell,
Richard M. Stallman <rms@gnu.org>
parents: 18378
diff changeset
111
4682
c4d471244116 (keyboard_descriptor): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4639
diff changeset
112 Lisp_Object Qprocessp;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
113 Lisp_Object Qrun, Qstop, Qsignal, Qopen, Qclosed;
8231
5226ed89c1a6 (Qlast_nonmenu_event): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8063
diff changeset
114 Lisp_Object Qlast_nonmenu_event;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
115 /* Qexit is declared and initialized in eval.c. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
116
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
117 /* a process object is a network connection when its childp field is neither
16058
924aeb9ed7c3 (Fprocess_contact): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16053
diff changeset
118 Qt nor Qnil but is instead a cons cell (HOSTNAME PORTNUM). */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
119
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
120 #ifdef HAVE_SOCKETS
16058
924aeb9ed7c3 (Fprocess_contact): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16053
diff changeset
121 #define NETCONN_P(p) (GC_CONSP (XPROCESS (p)->childp))
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
122 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
123 #define NETCONN_P(p) 0
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
124 #endif /* HAVE_SOCKETS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
125
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
126 /* Define first descriptor number available for subprocesses. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
127 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
128 #define FIRST_PROC_DESC 1
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
129 #else /* Not VMS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
130 #define FIRST_PROC_DESC 3
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
131 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
132
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
133 /* Define SIGCHLD as an alias for SIGCLD. There are many conditionals
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
134 testing SIGCHLD. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
135
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
136 #if !defined (SIGCHLD) && defined (SIGCLD)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
137 #define SIGCHLD SIGCLD
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
138 #endif /* SIGCLD */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
139
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
140 #include "syssignal.h"
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
141
4639
76f242eb1fa8 Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 4320
diff changeset
142 #include "syswait.h"
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
143
5543
dbc1d920ef5c Don't declare sys_nerr.
Roland McGrath <roland@gnu.org>
parents: 5534
diff changeset
144 extern int errno;
dbc1d920ef5c Don't declare sys_nerr.
Roland McGrath <roland@gnu.org>
parents: 5534
diff changeset
145 extern char *strerror ();
dbc1d920ef5c Don't declare sys_nerr.
Roland McGrath <roland@gnu.org>
parents: 5534
diff changeset
146 #ifdef VMS
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
147 extern char *sys_errlist[];
5543
dbc1d920ef5c Don't declare sys_nerr.
Roland McGrath <roland@gnu.org>
parents: 5534
diff changeset
148 #endif
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
149
8331
14ddb4c66461 [!HAVE_H_ERRNO]: Declare h_errno.
Richard M. Stallman <rms@gnu.org>
parents: 8287
diff changeset
150 #ifndef HAVE_H_ERRNO
14ddb4c66461 [!HAVE_H_ERRNO]: Declare h_errno.
Richard M. Stallman <rms@gnu.org>
parents: 8287
diff changeset
151 extern int h_errno;
14ddb4c66461 [!HAVE_H_ERRNO]: Declare h_errno.
Richard M. Stallman <rms@gnu.org>
parents: 8287
diff changeset
152 #endif
14ddb4c66461 [!HAVE_H_ERRNO]: Declare h_errno.
Richard M. Stallman <rms@gnu.org>
parents: 8287
diff changeset
153
5891
ffe51baf2728 (sys_siglist): Protect decl with #ifndef SYS_SIGLIST_DECLARED.
Roland McGrath <roland@gnu.org>
parents: 5846
diff changeset
154 #ifndef SYS_SIGLIST_DECLARED
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
155 #ifndef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
156 #ifndef BSD4_1
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
157 #ifndef WINDOWSNT
3023
cfd999700613 (create_process): Ignore retval from TIOCSTTY.
Richard M. Stallman <rms@gnu.org>
parents: 2961
diff changeset
158 #ifndef LINUX
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
159 extern char *sys_siglist[];
5534
7a0de0f56c86 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 5404
diff changeset
160 #endif /* not LINUX */
7a0de0f56c86 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 5404
diff changeset
161 #else /* BSD4_1 */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
162 char *sys_siglist[] =
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
163 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
164 "bum signal!!",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
165 "hangup",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
166 "interrupt",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
167 "quit",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
168 "illegal instruction",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
169 "trace trap",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
170 "iot instruction",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
171 "emt instruction",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
172 "floating point exception",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
173 "kill",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
174 "bus error",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
175 "segmentation violation",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
176 "bad argument to system call",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
177 "write on a pipe with no one to read it",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
178 "alarm clock",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
179 "software termination signal from kill",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
180 "status signal",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
181 "sendable stop signal not from tty",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
182 "stop signal from tty",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
183 "continue a stopped process",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
184 "child status has changed",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
185 "background read attempted from control tty",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
186 "background write attempted from control tty",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
187 "input record available at control tty",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
188 "exceeded CPU time limit",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
189 "exceeded file size limit"
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
190 };
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
191 #endif /* not WINDOWSNT */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
192 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
193 #endif /* VMS */
5891
ffe51baf2728 (sys_siglist): Protect decl with #ifndef SYS_SIGLIST_DECLARED.
Roland McGrath <roland@gnu.org>
parents: 5846
diff changeset
194 #endif /* ! SYS_SIGLIST_DECLARED */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
195
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
196 /* t means use pty, nil means use a pipe,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
197 maybe other values to come. */
4682
c4d471244116 (keyboard_descriptor): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4639
diff changeset
198 static Lisp_Object Vprocess_connection_type;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
199
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
200 #ifdef SKTPAIR
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
201 #ifndef HAVE_SOCKETS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
202 #include <sys/socket.h>
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
203 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
204 #endif /* SKTPAIR */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
205
10548
dcae4394587d (process_tick, update_tick): Make non-static.
Karl Heuer <kwzh@gnu.org>
parents: 10527
diff changeset
206 /* These next two vars are non-static since sysdep.c uses them in the
dcae4394587d (process_tick, update_tick): Make non-static.
Karl Heuer <kwzh@gnu.org>
parents: 10527
diff changeset
207 emulation of `select'. */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
208 /* Number of events of change of status of a process. */
10548
dcae4394587d (process_tick, update_tick): Make non-static.
Karl Heuer <kwzh@gnu.org>
parents: 10527
diff changeset
209 int process_tick;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
210 /* Number of events for which the user or sentinel has been notified. */
10548
dcae4394587d (process_tick, update_tick): Make non-static.
Karl Heuer <kwzh@gnu.org>
parents: 10527
diff changeset
211 int update_tick;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
212
10527
68b8191091a7 #include sysselect.h instead of defining things by hand.
Karl Heuer <kwzh@gnu.org>
parents: 10032
diff changeset
213 #include "sysselect.h"
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
214
13414
b035c6e41457 [HAVE_NTGUI] (POLL_FOR_INPUT): Define macro.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13159
diff changeset
215 /* If we support a window system, turn on the code to poll periodically
7486
cfe4840ffde9 (Fopen_network_stream): Call bind_polling_period; later unbind the binding.
Richard M. Stallman <rms@gnu.org>
parents: 7454
diff changeset
216 to detect C-g. It isn't actually used when doing interrupt input. */
13414
b035c6e41457 [HAVE_NTGUI] (POLL_FOR_INPUT): Define macro.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13159
diff changeset
217 #ifdef HAVE_WINDOW_SYSTEM
7486
cfe4840ffde9 (Fopen_network_stream): Call bind_polling_period; later unbind the binding.
Richard M. Stallman <rms@gnu.org>
parents: 7454
diff changeset
218 #define POLL_FOR_INPUT
cfe4840ffde9 (Fopen_network_stream): Call bind_polling_period; later unbind the binding.
Richard M. Stallman <rms@gnu.org>
parents: 7454
diff changeset
219 #endif
cfe4840ffde9 (Fopen_network_stream): Call bind_polling_period; later unbind the binding.
Richard M. Stallman <rms@gnu.org>
parents: 7454
diff changeset
220
9686
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
221 /* Mask of bits indicating the descriptors that we wait for input on. */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
222
4682
c4d471244116 (keyboard_descriptor): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4639
diff changeset
223 static SELECT_TYPE input_wait_mask;
c4d471244116 (keyboard_descriptor): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4639
diff changeset
224
9686
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
225 /* Mask that excludes keyboard input descriptor (s). */
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
226
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
227 static SELECT_TYPE non_keyboard_wait_mask;
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
228
17224
dd2545e79add (wait_reading_process_input): If wait_for_cell,
Richard M. Stallman <rms@gnu.org>
parents: 17110
diff changeset
229 /* Mask that excludes process input descriptor (s). */
dd2545e79add (wait_reading_process_input): If wait_for_cell,
Richard M. Stallman <rms@gnu.org>
parents: 17110
diff changeset
230
dd2545e79add (wait_reading_process_input): If wait_for_cell,
Richard M. Stallman <rms@gnu.org>
parents: 17110
diff changeset
231 static SELECT_TYPE non_process_wait_mask;
dd2545e79add (wait_reading_process_input): If wait_for_cell,
Richard M. Stallman <rms@gnu.org>
parents: 17110
diff changeset
232
7044
7032d07f5ad9 (max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7013
diff changeset
233 /* The largest descriptor currently in use for a process object. */
7032d07f5ad9 (max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7013
diff changeset
234 static int max_process_desc;
7032d07f5ad9 (max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7013
diff changeset
235
9686
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
236 /* The largest descriptor currently in use for keyboard input. */
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
237 static int max_keyboard_desc;
4682
c4d471244116 (keyboard_descriptor): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4639
diff changeset
238
c4d471244116 (keyboard_descriptor): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4639
diff changeset
239 /* Nonzero means delete a process right away if it exits. */
c4d471244116 (keyboard_descriptor): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4639
diff changeset
240 static int delete_exited_processes;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
241
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
242 /* Indexed by descriptor, gives the process (if any) for that descriptor */
6164
d047d5a48e0e (chan_process, Vprocess_alist): No longer static.
Richard M. Stallman <rms@gnu.org>
parents: 6158
diff changeset
243 Lisp_Object chan_process[MAXDESC];
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
244
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
245 /* Alist of elements (NAME . PROCESS) */
6164
d047d5a48e0e (chan_process, Vprocess_alist): No longer static.
Richard M. Stallman <rms@gnu.org>
parents: 6158
diff changeset
246 Lisp_Object Vprocess_alist;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
247
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
248 /* Buffered-ahead input char from process, indexed by channel.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
249 -1 means empty (no char is buffered).
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
250 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
251 output from the process is to read at least one char.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
252 Always -1 on systems that support FIONREAD. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
253
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
254 /* Don't make static; need to access externally. */
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
255 int proc_buffered_char[MAXDESC];
4682
c4d471244116 (keyboard_descriptor): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4639
diff changeset
256
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
257 /* Table of `struct coding-system' for each process. */
17110
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
258 static struct coding_system *proc_decode_coding_system[MAXDESC];
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
259 static struct coding_system *proc_encode_coding_system[MAXDESC];
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
260
4682
c4d471244116 (keyboard_descriptor): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4639
diff changeset
261 static Lisp_Object get_process ();
6158
6b81b2575071 Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 5891
diff changeset
262
14404
cba05f90ee57 (wait_reading_process_input): Call timer_check
Richard M. Stallman <rms@gnu.org>
parents: 14278
diff changeset
263 extern EMACS_TIME timer_check ();
14785
e4a9806c1e83 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 14758
diff changeset
264 extern int timers_run;
14404
cba05f90ee57 (wait_reading_process_input): Call timer_check
Richard M. Stallman <rms@gnu.org>
parents: 14278
diff changeset
265
6158
6b81b2575071 Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 5891
diff changeset
266 /* Maximum number of bytes to send to a pty without an eof. */
6b81b2575071 Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 5891
diff changeset
267 static int pty_max_bytes;
9030
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
268
11609
3b2dacb1bfe9 (create_process): Don't reference pty_name if !HAVE_PTYS.
Karl Heuer <kwzh@gnu.org>
parents: 11514
diff changeset
269 #ifdef HAVE_PTYS
3b2dacb1bfe9 (create_process): Don't reference pty_name if !HAVE_PTYS.
Karl Heuer <kwzh@gnu.org>
parents: 11514
diff changeset
270 /* The file name of the pty opened by allocate_pty. */
9030
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
271
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
272 static char pty_name[24];
11609
3b2dacb1bfe9 (create_process): Don't reference pty_name if !HAVE_PTYS.
Karl Heuer <kwzh@gnu.org>
parents: 11514
diff changeset
273 #endif
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
274
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
275 /* Compute the Lisp form of the process status, p->status, from
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
276 the numeric status that was returned by `wait'. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
277
1522
19ccf004b172 * process.c: (status_convert): Declare this to return a
Jim Blandy <jimb@redhat.com>
parents: 1323
diff changeset
278 Lisp_Object status_convert ();
19ccf004b172 * process.c: (status_convert): Declare this to return a
Jim Blandy <jimb@redhat.com>
parents: 1323
diff changeset
279
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
280 update_status (p)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
281 struct Lisp_Process *p;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
282 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
283 union { int i; WAITTYPE wt; } u;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
284 u.i = XFASTINT (p->raw_status_low) + (XFASTINT (p->raw_status_high) << 16);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
285 p->status = status_convert (u.wt);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
286 p->raw_status_low = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
287 p->raw_status_high = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
288 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
289
3608
Jim Blandy <jimb@redhat.com>
parents: 3593
diff changeset
290 /* Convert a process status word in Unix format to
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
291 the list that we use internally. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
292
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
293 Lisp_Object
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
294 status_convert (w)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
295 WAITTYPE w;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
296 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
297 if (WIFSTOPPED (w))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
298 return Fcons (Qstop, Fcons (make_number (WSTOPSIG (w)), Qnil));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
299 else if (WIFEXITED (w))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
300 return Fcons (Qexit, Fcons (make_number (WRETCODE (w)),
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
301 WCOREDUMP (w) ? Qt : Qnil));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
302 else if (WIFSIGNALED (w))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
303 return Fcons (Qsignal, Fcons (make_number (WTERMSIG (w)),
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
304 WCOREDUMP (w) ? Qt : Qnil));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
305 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
306 return Qrun;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
307 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
308
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
309 /* Given a status-list, extract the three pieces of information
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
310 and store them individually through the three pointers. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
311
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
312 void
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
313 decode_status (l, symbol, code, coredump)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
314 Lisp_Object l;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
315 Lisp_Object *symbol;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
316 int *code;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
317 int *coredump;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
318 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
319 Lisp_Object tem;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
320
9115
59bc2d010b5f (decode_status, Fprocessp, Fget_process, Fget_buffer_process, Fprocess_status,
Karl Heuer <kwzh@gnu.org>
parents: 9034
diff changeset
321 if (SYMBOLP (l))
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
322 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
323 *symbol = l;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
324 *code = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
325 *coredump = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
326 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
327 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
328 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
329 *symbol = XCONS (l)->car;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
330 tem = XCONS (l)->cdr;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
331 *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
332 tem = XCONS (tem)->cdr;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
333 *coredump = !NILP (tem);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
334 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
335 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
336
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
337 /* Return a string describing a process status list. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
338
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
339 Lisp_Object
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
340 status_message (status)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
341 Lisp_Object status;
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 symbol;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
344 int code, coredump;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
345 Lisp_Object string, string2;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
346
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
347 decode_status (status, &symbol, &code, &coredump);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
348
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
349 if (EQ (symbol, Qsignal) || EQ (symbol, Qstop))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
350 {
5579
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
351 char *signame = 0;
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
352 if (code < NSIG)
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
353 {
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
354 #ifndef VMS
9705
f7535deb913a (status_message): Add a cast.
Richard M. Stallman <rms@gnu.org>
parents: 9697
diff changeset
355 /* Cast to suppress warning if the table has const char *. */
f7535deb913a (status_message): Add a cast.
Richard M. Stallman <rms@gnu.org>
parents: 9697
diff changeset
356 signame = (char *) sys_siglist[code];
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
357 #else
5579
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
358 signame = sys_errlist[code];
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
359 #endif
5579
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
360 }
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
361 if (signame == 0)
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
362 signame = "unknown";
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
363 string = build_string (signame);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
364 string2 = build_string (coredump ? " (core dumped)\n" : "\n");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
365 XSTRING (string)->data[0] = DOWNCASE (XSTRING (string)->data[0]);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
366 return concat2 (string, string2);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
367 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
368 else if (EQ (symbol, Qexit))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
369 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
370 if (code == 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
371 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
372 string = Fnumber_to_string (make_number (code));
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
373 string2 = build_string (coredump ? " (core dumped)\n" : "\n");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
374 return concat2 (build_string ("exited abnormally with code "),
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
375 concat2 (string, string2));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
376 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
377 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
378 return Fcopy_sequence (Fsymbol_name (symbol));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
379 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
380
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
381 #ifdef HAVE_PTYS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
382
11609
3b2dacb1bfe9 (create_process): Don't reference pty_name if !HAVE_PTYS.
Karl Heuer <kwzh@gnu.org>
parents: 11514
diff changeset
383 /* Open an available pty, returning a file descriptor.
3b2dacb1bfe9 (create_process): Don't reference pty_name if !HAVE_PTYS.
Karl Heuer <kwzh@gnu.org>
parents: 11514
diff changeset
384 Return -1 on failure.
3b2dacb1bfe9 (create_process): Don't reference pty_name if !HAVE_PTYS.
Karl Heuer <kwzh@gnu.org>
parents: 11514
diff changeset
385 The file name of the terminal corresponding to the pty
3b2dacb1bfe9 (create_process): Don't reference pty_name if !HAVE_PTYS.
Karl Heuer <kwzh@gnu.org>
parents: 11514
diff changeset
386 is left in the variable pty_name. */
3b2dacb1bfe9 (create_process): Don't reference pty_name if !HAVE_PTYS.
Karl Heuer <kwzh@gnu.org>
parents: 11514
diff changeset
387
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
388 int
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
389 allocate_pty ()
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
390 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
391 struct stat stb;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
392 register c, i;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
393 int fd;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
394
624
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
395 /* Some systems name their pseudoterminals so that there are gaps in
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
396 the usual sequence - for example, on HP9000/S700 systems, there
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
397 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
398 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
399 end of the ptys. */
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
400 int failed_count = 0;
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
401
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
402 #ifdef PTY_ITERATION
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
403 PTY_ITERATION
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
404 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
405 for (c = FIRST_PTY_LETTER; c <= 'z'; c++)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
406 for (i = 0; i < 16; i++)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
407 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
408 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
409 #ifdef PTY_NAME_SPRINTF
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
410 PTY_NAME_SPRINTF
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
411 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
412 sprintf (pty_name, "/dev/pty%c%x", c, i);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
413 #endif /* no PTY_NAME_SPRINTF */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
414
822
c6e94e13926c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 808
diff changeset
415 #ifdef PTY_OPEN
c6e94e13926c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 808
diff changeset
416 PTY_OPEN;
c6e94e13926c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 808
diff changeset
417 #else /* no PTY_OPEN */
624
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
418 #ifdef IRIS
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
419 /* Unusual IRIS code */
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
420 *ptyv = open ("/dev/ptc", O_RDWR | O_NDELAY, 0);
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
421 if (fd < 0)
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
422 return -1;
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
423 if (fstat (fd, &stb) < 0)
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
424 return -1;
822
c6e94e13926c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 808
diff changeset
425 #else /* not IRIS */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
426 if (stat (pty_name, &stb) < 0)
624
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
427 {
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
428 failed_count++;
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
429 if (failed_count >= 3)
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
430 return -1;
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
431 }
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
432 else
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
433 failed_count = 0;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
434 #ifdef O_NONBLOCK
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
435 fd = open (pty_name, O_RDWR | O_NONBLOCK, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
436 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
437 fd = open (pty_name, O_RDWR | O_NDELAY, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
438 #endif
822
c6e94e13926c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 808
diff changeset
439 #endif /* not IRIS */
c6e94e13926c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 808
diff changeset
440 #endif /* no PTY_OPEN */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
441
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
442 if (fd >= 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
443 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
444 /* check to make certain that both sides are available
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
445 this avoids a nasty yet stupid bug in rlogins */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
446 #ifdef PTY_TTY_NAME_SPRINTF
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
447 PTY_TTY_NAME_SPRINTF
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
448 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
449 sprintf (pty_name, "/dev/tty%c%x", c, i);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
450 #endif /* no PTY_TTY_NAME_SPRINTF */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
451 #ifndef UNIPLUS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
452 if (access (pty_name, 6) != 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
453 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
454 close (fd);
2887
0554478bfa71 * process.c [__sgi] (allocate_pty): Give up immediately if pty is
Jim Blandy <jimb@redhat.com>
parents: 2830
diff changeset
455 #if !defined(IRIS) && !defined(__sgi)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
456 continue;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
457 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
458 return -1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
459 #endif /* IRIS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
460 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
461 #endif /* not UNIPLUS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
462 setup_pty (fd);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
463 return fd;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
464 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
465 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
466 return -1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
467 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
468 #endif /* HAVE_PTYS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
469
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
470 Lisp_Object
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
471 make_process (name)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
472 Lisp_Object name;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
473 {
9969
007d93b04e1f (make_process): Use allocate_vectorlike and VECSIZE.
Karl Heuer <kwzh@gnu.org>
parents: 9952
diff changeset
474 struct Lisp_Vector *vec;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
475 register Lisp_Object val, tem, name1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
476 register struct Lisp_Process *p;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
477 char suffix[10];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
478 register int i;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
479
9969
007d93b04e1f (make_process): Use allocate_vectorlike and VECSIZE.
Karl Heuer <kwzh@gnu.org>
parents: 9952
diff changeset
480 vec = allocate_vectorlike ((EMACS_INT) VECSIZE (struct Lisp_Process));
007d93b04e1f (make_process): Use allocate_vectorlike and VECSIZE.
Karl Heuer <kwzh@gnu.org>
parents: 9952
diff changeset
481 for (i = 0; i < VECSIZE (struct Lisp_Process); i++)
007d93b04e1f (make_process): Use allocate_vectorlike and VECSIZE.
Karl Heuer <kwzh@gnu.org>
parents: 9952
diff changeset
482 vec->contents[i] = Qnil;
007d93b04e1f (make_process): Use allocate_vectorlike and VECSIZE.
Karl Heuer <kwzh@gnu.org>
parents: 9952
diff changeset
483 vec->size = VECSIZE (struct Lisp_Process);
007d93b04e1f (make_process): Use allocate_vectorlike and VECSIZE.
Karl Heuer <kwzh@gnu.org>
parents: 9952
diff changeset
484 p = (struct Lisp_Process *)vec;
007d93b04e1f (make_process): Use allocate_vectorlike and VECSIZE.
Karl Heuer <kwzh@gnu.org>
parents: 9952
diff changeset
485
9277
21f6120be5ba (make_process, create_process, Fopen_network_stream, deactivate_process,
Karl Heuer <kwzh@gnu.org>
parents: 9115
diff changeset
486 XSETINT (p->infd, -1);
21f6120be5ba (make_process, create_process, Fopen_network_stream, deactivate_process,
Karl Heuer <kwzh@gnu.org>
parents: 9115
diff changeset
487 XSETINT (p->outfd, -1);
9318
a14cc1712337 (make_process, list_processes_1, create_process, Faccept_process_output,
Karl Heuer <kwzh@gnu.org>
parents: 9277
diff changeset
488 XSETFASTINT (p->pid, 0);
a14cc1712337 (make_process, list_processes_1, create_process, Faccept_process_output,
Karl Heuer <kwzh@gnu.org>
parents: 9277
diff changeset
489 XSETFASTINT (p->tick, 0);
a14cc1712337 (make_process, list_processes_1, create_process, Faccept_process_output,
Karl Heuer <kwzh@gnu.org>
parents: 9277
diff changeset
490 XSETFASTINT (p->update_tick, 0);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
491 p->raw_status_low = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
492 p->raw_status_high = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
493 p->status = Qrun;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
494 p->mark = Fmake_marker ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
495
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
496 /* If name is already in use, modify it until it is unused. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
497
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
498 name1 = name;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
499 for (i = 1; ; i++)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
500 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
501 tem = Fget_process (name1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
502 if (NILP (tem)) break;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
503 sprintf (suffix, "<%d>", i);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
504 name1 = concat2 (name, build_string (suffix));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
505 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
506 name = name1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
507 p->name = name;
9969
007d93b04e1f (make_process): Use allocate_vectorlike and VECSIZE.
Karl Heuer <kwzh@gnu.org>
parents: 9952
diff changeset
508 XSETPROCESS (val, p);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
509 Vprocess_alist = Fcons (Fcons (name, val), Vprocess_alist);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
510 return val;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
511 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
512
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
513 remove_process (proc)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
514 register Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
515 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
516 register Lisp_Object pair;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
517
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
518 pair = Frassq (proc, Vprocess_alist);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
519 Vprocess_alist = Fdelq (pair, Vprocess_alist);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
520
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
521 deactivate_process (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
522 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
523
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
524 DEFUN ("processp", Fprocessp, Sprocessp, 1, 1, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
525 "Return t if OBJECT is a process.")
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
526 (object)
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
527 Lisp_Object object;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
528 {
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
529 return PROCESSP (object) ? Qt : Qnil;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
530 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
531
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
532 DEFUN ("get-process", Fget_process, Sget_process, 1, 1, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
533 "Return the process named NAME, or nil if there is none.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
534 (name)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
535 register Lisp_Object name;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
536 {
9115
59bc2d010b5f (decode_status, Fprocessp, Fget_process, Fget_buffer_process, Fprocess_status,
Karl Heuer <kwzh@gnu.org>
parents: 9034
diff changeset
537 if (PROCESSP (name))
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
538 return name;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
539 CHECK_STRING (name, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
540 return Fcdr (Fassoc (name, Vprocess_alist));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
541 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
542
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
543 DEFUN ("get-buffer-process", Fget_buffer_process, Sget_buffer_process, 1, 1, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
544 "Return the (or, a) process associated with BUFFER.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
545 BUFFER may be a buffer or the name of one.")
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
546 (buffer)
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
547 register Lisp_Object buffer;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
548 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
549 register Lisp_Object buf, tail, proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
550
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
551 if (NILP (buffer)) return Qnil;
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
552 buf = Fget_buffer (buffer);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
553 if (NILP (buf)) return Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
554
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
555 for (tail = Vprocess_alist; !NILP (tail); tail = Fcdr (tail))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
556 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
557 proc = Fcdr (Fcar (tail));
9115
59bc2d010b5f (decode_status, Fprocessp, Fget_process, Fget_buffer_process, Fprocess_status,
Karl Heuer <kwzh@gnu.org>
parents: 9034
diff changeset
558 if (PROCESSP (proc) && EQ (XPROCESS (proc)->buffer, buf))
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
559 return proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
560 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
561 return Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
562 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
563
808
707866b2a190 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 765
diff changeset
564 /* This is how commands for the user decode process arguments. It
707866b2a190 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 765
diff changeset
565 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
566 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
567 current buffer. */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
568
4994
4146a65b9f02 (get_process): Add `static' to definition.
Richard M. Stallman <rms@gnu.org>
parents: 4914
diff changeset
569 static Lisp_Object
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
570 get_process (name)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
571 register Lisp_Object name;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
572 {
6313
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
573 register Lisp_Object proc, obj;
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
574 if (STRINGP (name))
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
575 {
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
576 obj = Fget_process (name);
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
577 if (NILP (obj))
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
578 obj = Fget_buffer (name);
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
579 if (NILP (obj))
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
580 error ("Process %s does not exist", XSTRING (name)->data);
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
581 }
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
582 else if (NILP (name))
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
583 obj = Fcurrent_buffer ();
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
584 else
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
585 obj = name;
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
586
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
587 /* Now obj should be either a buffer object or a process object.
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
588 */
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
589 if (BUFFERP (obj))
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
590 {
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
591 proc = Fget_buffer_process (obj);
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
592 if (NILP (proc))
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
593 error ("Buffer %s has no process", XSTRING (XBUFFER (obj)->name)->data);
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
594 }
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
595 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
596 {
6313
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
597 CHECK_PROCESS (obj, 0);
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
598 proc = obj;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
599 }
6313
9a6531e6de5d (get_process): Allow arg to be a buffer object.
Karl Heuer <kwzh@gnu.org>
parents: 6253
diff changeset
600 return proc;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
601 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
602
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
603 DEFUN ("delete-process", Fdelete_process, Sdelete_process, 1, 1, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
604 "Delete PROCESS: kill it and forget about it immediately.\n\
808
707866b2a190 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 765
diff changeset
605 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
606 nil, indicating the current buffer's process.")
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
607 (process)
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
608 register Lisp_Object process;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
609 {
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
610 process = get_process (process);
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
611 XPROCESS (process)->raw_status_low = Qnil;
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
612 XPROCESS (process)->raw_status_high = Qnil;
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
613 if (NETCONN_P (process))
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
614 {
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
615 XPROCESS (process)->status = Fcons (Qexit, Fcons (make_number (0), Qnil));
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
616 XSETINT (XPROCESS (process)->tick, ++process_tick);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
617 }
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
618 else if (XINT (XPROCESS (process)->infd) >= 0)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
619 {
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
620 Fkill_process (process, Qnil);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
621 /* Do this now, since remove_process will make sigchld_handler do nothing. */
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
622 XPROCESS (process)->status
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
623 = Fcons (Qsignal, Fcons (make_number (SIGKILL), Qnil));
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
624 XSETINT (XPROCESS (process)->tick, ++process_tick);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
625 status_notify ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
626 }
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
627 remove_process (process);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
628 return Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
629 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
630
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
631 DEFUN ("process-status", Fprocess_status, Sprocess_status, 1, 1, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
632 "Return the status of PROCESS: a symbol, one of these:\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
633 run -- for a process that is running.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
634 stop -- for a process stopped but continuable.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
635 exit -- for a process that has exited.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
636 signal -- for a process that has got a fatal signal.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
637 open -- for a network stream connection that is open.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
638 closed -- for a network stream connection that is closed.\n\
808
707866b2a190 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 765
diff changeset
639 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
640 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
641 nil, indicating the current buffer's process.")
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
642 (process)
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
643 register Lisp_Object process;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
644 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
645 register struct Lisp_Process *p;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
646 register Lisp_Object status;
7937
bf963799d8be (Fprocess_status): Return nil for process name that has no process.
Richard M. Stallman <rms@gnu.org>
parents: 7893
diff changeset
647
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
648 if (STRINGP (process))
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
649 process = Fget_process (process);
7937
bf963799d8be (Fprocess_status): Return nil for process name that has no process.
Richard M. Stallman <rms@gnu.org>
parents: 7893
diff changeset
650 else
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
651 process = get_process (process);
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
652
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
653 if (NILP (process))
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
654 return process;
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
655
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
656 p = XPROCESS (process);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
657 if (!NILP (p->raw_status_low))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
658 update_status (p);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
659 status = p->status;
9115
59bc2d010b5f (decode_status, Fprocessp, Fget_process, Fget_buffer_process, Fprocess_status,
Karl Heuer <kwzh@gnu.org>
parents: 9034
diff changeset
660 if (CONSP (status))
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
661 status = XCONS (status)->car;
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
662 if (NETCONN_P (process))
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
663 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
664 if (EQ (status, Qrun))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
665 status = Qopen;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
666 else if (EQ (status, Qexit))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
667 status = Qclosed;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
668 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
669 return status;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
670 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
671
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
672 DEFUN ("process-exit-status", Fprocess_exit_status, Sprocess_exit_status,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
673 1, 1, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
674 "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
675 If PROCESS has not yet exited or died, return 0.")
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
676 (process)
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
677 register Lisp_Object process;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
678 {
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
679 CHECK_PROCESS (process, 0);
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
680 if (!NILP (XPROCESS (process)->raw_status_low))
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
681 update_status (XPROCESS (process));
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
682 if (CONSP (XPROCESS (process)->status))
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
683 return XCONS (XCONS (XPROCESS (process)->status)->cdr)->car;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
684 return make_number (0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
685 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
686
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
687 DEFUN ("process-id", Fprocess_id, Sprocess_id, 1, 1, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
688 "Return the process id of PROCESS.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
689 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
690 For a network connection, this value is nil.")
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
691 (process)
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
692 register Lisp_Object process;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
693 {
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
694 CHECK_PROCESS (process, 0);
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
695 return XPROCESS (process)->pid;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
696 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
697
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
698 DEFUN ("process-name", Fprocess_name, Sprocess_name, 1, 1, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
699 "Return the name of PROCESS, as a string.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
700 This is the name of the program invoked in PROCESS,\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
701 possibly modified to make it unique among process names.")
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
702 (process)
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
703 register Lisp_Object process;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
704 {
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
705 CHECK_PROCESS (process, 0);
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
706 return XPROCESS (process)->name;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
707 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
708
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
709 DEFUN ("process-command", Fprocess_command, Sprocess_command, 1, 1, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
710 "Return the command that was executed to start PROCESS.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
711 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
712 and the rest of the strings being the arguments given to it.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
713 For a non-child channel, this is nil.")
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
714 (process)
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
715 register Lisp_Object process;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
716 {
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
717 CHECK_PROCESS (process, 0);
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
718 return XPROCESS (process)->command;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
719 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
720
9030
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
721 DEFUN ("process-tty-name", Fprocess_tty_name, Sprocess_tty_name, 1, 1, 0,
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
722 "Return the name of the terminal PROCESS uses, or nil if none.\n\
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
723 This is the terminal that the process itself reads and writes on,\n\
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
724 not the name of the pty that Emacs uses to talk with that terminal.")
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
725 (process)
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
726 register Lisp_Object process;
9030
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
727 {
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
728 CHECK_PROCESS (process, 0);
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
729 return XPROCESS (process)->tty_name;
9030
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
730 }
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
731
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
732 DEFUN ("set-process-buffer", Fset_process_buffer, Sset_process_buffer,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
733 2, 2, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
734 "Set buffer associated with PROCESS to BUFFER (a buffer, or nil).")
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
735 (process, buffer)
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
736 register Lisp_Object process, buffer;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
737 {
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
738 CHECK_PROCESS (process, 0);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
739 if (!NILP (buffer))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
740 CHECK_BUFFER (buffer, 1);
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
741 XPROCESS (process)->buffer = buffer;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
742 return buffer;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
743 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
744
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
745 DEFUN ("process-buffer", Fprocess_buffer, Sprocess_buffer,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
746 1, 1, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
747 "Return the buffer PROCESS is associated with.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
748 Output from PROCESS is inserted in this buffer\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
749 unless PROCESS has a filter.")
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
750 (process)
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
751 register Lisp_Object process;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
752 {
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
753 CHECK_PROCESS (process, 0);
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
754 return XPROCESS (process)->buffer;
578
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-mark", Fprocess_mark, Sprocess_mark,
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 "Return the marker for the end of the last output from PROCESS.")
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
760 (process)
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
761 register Lisp_Object process;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
762 {
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
763 CHECK_PROCESS (process, 0);
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
764 return XPROCESS (process)->mark;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
765 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
766
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
767 DEFUN ("set-process-filter", Fset_process_filter, Sset_process_filter,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
768 2, 2, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
769 "Give PROCESS the filter function FILTER; nil means no filter.\n\
4870
c53deda13fa9 (status_notify): Don't read from process if filter is t.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
770 t means stop accepting output from the process.\n\
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
771 When a process has a filter, each time it does output\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
772 the entire string of output is passed to the filter.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
773 The filter gets two arguments: the process and the string of output.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
774 If the process has a filter, its buffer is not used for output.")
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
775 (process, filter)
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
776 register Lisp_Object process, filter;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
777 {
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
778 CHECK_PROCESS (process, 0);
4870
c53deda13fa9 (status_notify): Don't read from process if filter is t.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
779 if (EQ (filter, Qt))
9686
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
780 {
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
781 FD_CLR (XINT (XPROCESS (process)->infd), &input_wait_mask);
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
782 FD_CLR (XINT (XPROCESS (process)->infd), &non_keyboard_wait_mask);
9686
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
783 }
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
784 else if (EQ (XPROCESS (process)->filter, Qt))
9686
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
785 {
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
786 FD_SET (XINT (XPROCESS (process)->infd), &input_wait_mask);
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
787 FD_SET (XINT (XPROCESS (process)->infd), &non_keyboard_wait_mask);
9686
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
788 }
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
789 XPROCESS (process)->filter = filter;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
790 return filter;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
791 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
792
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
793 DEFUN ("process-filter", Fprocess_filter, Sprocess_filter,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
794 1, 1, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
795 "Returns the filter function of PROCESS; nil if none.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
796 See `set-process-filter' for more info on filter functions.")
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
797 (process)
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
798 register Lisp_Object process;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
799 {
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
800 CHECK_PROCESS (process, 0);
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
801 return XPROCESS (process)->filter;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
802 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
803
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
804 DEFUN ("set-process-sentinel", Fset_process_sentinel, Sset_process_sentinel,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
805 2, 2, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
806 "Give PROCESS the sentinel SENTINEL; nil for none.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
807 The sentinel is called as a function when the process changes state.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
808 It gets two arguments: the process, and a string describing the change.")
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
809 (process, sentinel)
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
810 register Lisp_Object process, sentinel;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
811 {
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
812 CHECK_PROCESS (process, 0);
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
813 XPROCESS (process)->sentinel = sentinel;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
814 return sentinel;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
815 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
816
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
817 DEFUN ("process-sentinel", Fprocess_sentinel, Sprocess_sentinel,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
818 1, 1, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
819 "Return the sentinel of PROCESS; nil if none.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
820 See `set-process-sentinel' for more info on sentinels.")
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
821 (process)
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
822 register Lisp_Object process;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
823 {
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
824 CHECK_PROCESS (process, 0);
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
825 return XPROCESS (process)->sentinel;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
826 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
827
6830
bcaddbe53068 (Fset_process_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6823
diff changeset
828 DEFUN ("set-process-window-size", Fset_process_window_size,
bcaddbe53068 (Fset_process_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6823
diff changeset
829 Sset_process_window_size, 3, 3, 0,
bcaddbe53068 (Fset_process_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6823
diff changeset
830 "Tell PROCESS that it has logical window size HEIGHT and WIDTH.")
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
831 (process, height, width)
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
832 register Lisp_Object process, height, width;
6830
bcaddbe53068 (Fset_process_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6823
diff changeset
833 {
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
834 CHECK_PROCESS (process, 0);
6830
bcaddbe53068 (Fset_process_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6823
diff changeset
835 CHECK_NATNUM (height, 0);
bcaddbe53068 (Fset_process_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6823
diff changeset
836 CHECK_NATNUM (width, 0);
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
837 if (set_window_size (XINT (XPROCESS (process)->infd),
6830
bcaddbe53068 (Fset_process_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6823
diff changeset
838 XINT (height), XINT(width)) <= 0)
bcaddbe53068 (Fset_process_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6823
diff changeset
839 return Qnil;
bcaddbe53068 (Fset_process_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6823
diff changeset
840 else
bcaddbe53068 (Fset_process_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6823
diff changeset
841 return Qt;
bcaddbe53068 (Fset_process_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6823
diff changeset
842 }
bcaddbe53068 (Fset_process_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6823
diff changeset
843
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
844 DEFUN ("process-kill-without-query", Fprocess_kill_without_query,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
845 Sprocess_kill_without_query, 1, 2, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
846 "Say no query needed if PROCESS is running when Emacs is exited.\n\
5846
1322c4daeda2 (Fprocess_kill_without_query): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 5579
diff changeset
847 Optional second argument if non-nil says to require a query.\n\
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
848 Value is t if a query was formerly required.")
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
849 (process, value)
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
850 register Lisp_Object process, value;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
851 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
852 Lisp_Object tem;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
853
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
854 CHECK_PROCESS (process, 0);
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
855 tem = XPROCESS (process)->kill_without_query;
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
856 XPROCESS (process)->kill_without_query = Fnull (value);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
857
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
858 return Fnull (tem);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
859 }
4231
91a883c56382 (Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents: 4057
diff changeset
860
16058
924aeb9ed7c3 (Fprocess_contact): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16053
diff changeset
861 DEFUN ("process-contact", Fprocess_contact, Sprocess_contact,
924aeb9ed7c3 (Fprocess_contact): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16053
diff changeset
862 1, 1, 0,
924aeb9ed7c3 (Fprocess_contact): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16053
diff changeset
863 "Return the contact info of PROCESS; t for a real child.\n\
924aeb9ed7c3 (Fprocess_contact): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16053
diff changeset
864 For a net connection, the value is a cons cell of the form (HOST SERVICE).")
924aeb9ed7c3 (Fprocess_contact): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16053
diff changeset
865 (process)
924aeb9ed7c3 (Fprocess_contact): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16053
diff changeset
866 register Lisp_Object process;
924aeb9ed7c3 (Fprocess_contact): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16053
diff changeset
867 {
924aeb9ed7c3 (Fprocess_contact): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16053
diff changeset
868 CHECK_PROCESS (process, 0);
924aeb9ed7c3 (Fprocess_contact): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16053
diff changeset
869 return XPROCESS (process)->childp;
924aeb9ed7c3 (Fprocess_contact): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16053
diff changeset
870 }
924aeb9ed7c3 (Fprocess_contact): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16053
diff changeset
871
4231
91a883c56382 (Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents: 4057
diff changeset
872 #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
873 in the process. Perhaps add it. */
91a883c56382 (Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents: 4057
diff changeset
874 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
875 "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
876 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
877 `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
878 (process)
91a883c56382 (Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents: 4057
diff changeset
879 Lisp_Object process;
91a883c56382 (Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents: 4057
diff changeset
880 {
91a883c56382 (Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents: 4057
diff changeset
881 return XPROCESS (process)->type;
91a883c56382 (Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents: 4057
diff changeset
882 }
91a883c56382 (Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents: 4057
diff changeset
883 #endif
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
884
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
885 Lisp_Object
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
886 list_processes_1 ()
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
887 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
888 register Lisp_Object tail, tem;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
889 Lisp_Object proc, minspace, tem1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
890 register struct buffer *old = current_buffer;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
891 register struct Lisp_Process *p;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
892 register int state;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
893 char tembuf[80];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
894
9318
a14cc1712337 (make_process, list_processes_1, create_process, Faccept_process_output,
Karl Heuer <kwzh@gnu.org>
parents: 9277
diff changeset
895 XSETFASTINT (minspace, 1);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
896
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
897 set_buffer_internal (XBUFFER (Vstandard_output));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
898 Fbuffer_disable_undo (Vstandard_output);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
899
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
900 current_buffer->truncate_lines = Qt;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
901
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
902 write_string ("\
9697
328b8bc31f73 (list_processes_1): Print tty name.
Karl Heuer <kwzh@gnu.org>
parents: 9686
diff changeset
903 Proc Status Buffer Tty Command\n\
328b8bc31f73 (list_processes_1): Print tty name.
Karl Heuer <kwzh@gnu.org>
parents: 9686
diff changeset
904 ---- ------ ------ --- -------\n", -1);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
905
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
906 for (tail = Vprocess_alist; !NILP (tail); tail = Fcdr (tail))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
907 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
908 Lisp_Object symbol;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
909
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
910 proc = Fcdr (Fcar (tail));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
911 p = XPROCESS (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
912 if (NILP (p->childp))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
913 continue;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
914
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
915 Finsert (1, &p->name);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
916 Findent_to (make_number (13), minspace);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
917
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
918 if (!NILP (p->raw_status_low))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
919 update_status (p);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
920 symbol = p->status;
9115
59bc2d010b5f (decode_status, Fprocessp, Fget_process, Fget_buffer_process, Fprocess_status,
Karl Heuer <kwzh@gnu.org>
parents: 9034
diff changeset
921 if (CONSP (p->status))
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
922 symbol = XCONS (p->status)->car;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
923
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
924
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
925 if (EQ (symbol, Qsignal))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
926 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
927 Lisp_Object tem;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
928 tem = Fcar (Fcdr (p->status));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
929 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
930 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
931 write_string (sys_errlist [XINT (tem)], -1);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
932 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
933 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
934 Fprinc (symbol, Qnil);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
935 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
936 else if (NETCONN_P (proc))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
937 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
938 if (EQ (symbol, Qrun))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
939 write_string ("open", -1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
940 else if (EQ (symbol, Qexit))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
941 write_string ("closed", -1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
942 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
943 Fprinc (symbol, Qnil);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
944 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
945 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
946 Fprinc (symbol, Qnil);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
947
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
948 if (EQ (symbol, Qexit))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
949 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
950 Lisp_Object tem;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
951 tem = Fcar (Fcdr (p->status));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
952 if (XFASTINT (tem))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
953 {
11695
0f9b9c375416 (list_processes_1): Cast XFASTINT for passing to sprintf.
Richard M. Stallman <rms@gnu.org>
parents: 11609
diff changeset
954 sprintf (tembuf, " %d", (int) XFASTINT (tem));
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
955 write_string (tembuf, -1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
956 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
957 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
958
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
959 if (EQ (symbol, Qsignal) || EQ (symbol, Qexit))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
960 remove_process (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
961
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
962 Findent_to (make_number (22), minspace);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
963 if (NILP (p->buffer))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
964 insert_string ("(none)");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
965 else if (NILP (XBUFFER (p->buffer)->name))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
966 insert_string ("(Killed)");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
967 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
968 Finsert (1, &XBUFFER (p->buffer)->name);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
969
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
970 Findent_to (make_number (37), minspace);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
971
9697
328b8bc31f73 (list_processes_1): Print tty name.
Karl Heuer <kwzh@gnu.org>
parents: 9686
diff changeset
972 if (STRINGP (p->tty_name))
328b8bc31f73 (list_processes_1): Print tty name.
Karl Heuer <kwzh@gnu.org>
parents: 9686
diff changeset
973 Finsert (1, &p->tty_name);
328b8bc31f73 (list_processes_1): Print tty name.
Karl Heuer <kwzh@gnu.org>
parents: 9686
diff changeset
974 else
328b8bc31f73 (list_processes_1): Print tty name.
Karl Heuer <kwzh@gnu.org>
parents: 9686
diff changeset
975 insert_string ("(none)");
328b8bc31f73 (list_processes_1): Print tty name.
Karl Heuer <kwzh@gnu.org>
parents: 9686
diff changeset
976
328b8bc31f73 (list_processes_1): Print tty name.
Karl Heuer <kwzh@gnu.org>
parents: 9686
diff changeset
977 Findent_to (make_number (49), minspace);
328b8bc31f73 (list_processes_1): Print tty name.
Karl Heuer <kwzh@gnu.org>
parents: 9686
diff changeset
978
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
979 if (NETCONN_P (proc))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
980 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
981 sprintf (tembuf, "(network stream connection to %s)\n",
16058
924aeb9ed7c3 (Fprocess_contact): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16053
diff changeset
982 XSTRING (XCONS (p->childp)->car)->data);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
983 insert_string (tembuf);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
984 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
985 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
986 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
987 tem = p->command;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
988 while (1)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
989 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
990 tem1 = Fcar (tem);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
991 Finsert (1, &tem1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
992 tem = Fcdr (tem);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
993 if (NILP (tem))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
994 break;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
995 insert_string (" ");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
996 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
997 insert_string ("\n");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
998 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
999 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1000 return Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1001 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1002
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1003 DEFUN ("list-processes", Flist_processes, Slist_processes, 0, 0, "",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1004 "Display a list of all processes.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1005 \(Any processes listed as Exited or Signaled are actually eliminated\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1006 after the listing is made.)")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1007 ()
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1008 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1009 internal_with_output_to_temp_buffer ("*Process List*",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1010 list_processes_1, Qnil);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1011 return Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1012 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1013
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1014 DEFUN ("process-list", Fprocess_list, Sprocess_list, 0, 0, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1015 "Return a list of all processes.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1016 ()
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1017 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1018 return Fmapcar (Qcdr, Vprocess_alist);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1019 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1020
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1021 /* 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
1022
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1023 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
1024
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1025 DEFUN ("start-process", Fstart_process, Sstart_process, 3, MANY, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1026 "Start a program in a subprocess. Return the process object for it.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1027 Args are NAME BUFFER PROGRAM &rest PROGRAM-ARGS\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1028 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
1029 BUFFER is the buffer or (buffer-name) to associate with the process.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1030 Process output goes at end of that buffer, unless you specify\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1031 an output stream or filter function to handle the output.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1032 BUFFER may be also nil, meaning that this process is not associated\n\
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
1033 with any buffer.\n\
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1034 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
1035 Remaining arguments are strings to give program as arguments.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1036 (nargs, args)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1037 int nargs;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1038 register Lisp_Object *args;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1039 {
1683
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1040 Lisp_Object buffer, name, program, proc, current_dir, tem;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1041 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1042 register unsigned char *new_argv;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1043 int len;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1044 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1045 register unsigned char **new_argv;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1046 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1047 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
1048 int count = specpdl_ptr - specpdl;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1049
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1050 buffer = args[1];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1051 if (!NILP (buffer))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1052 buffer = Fget_buffer_create (buffer);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1053
1683
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1054 /* 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
1055 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
1056 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
1057 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
1058
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1059 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
1060 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
1061 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
1062 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
1063 {
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1064 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
1065
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1066 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
1067
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1068 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
1069
10744
54a76e0b97ec (Fstart_process): Make process marker point into proc buf.
Richard M. Stallman <rms@gnu.org>
parents: 10548
diff changeset
1070 current_dir
54a76e0b97ec (Fstart_process): Make process marker point into proc buf.
Richard M. Stallman <rms@gnu.org>
parents: 10548
diff changeset
1071 = expand_and_dir_to_file (Funhandled_file_name_directory (current_dir),
54a76e0b97ec (Fstart_process): Make process marker point into proc buf.
Richard M. Stallman <rms@gnu.org>
parents: 10548
diff changeset
1072 Qnil);
1683
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1073 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
1074 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
1075 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
1076
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1077 UNGCPRO;
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1078 }
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1079
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1080 name = args[0];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1081 CHECK_STRING (name, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1082
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1083 program = args[2];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1084
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1085 CHECK_STRING (program, 2);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1086
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1087 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1088 /* Make a one member argv with all args concatenated
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1089 together separated by a blank. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1090 len = XSTRING (program)->size + 2;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1091 for (i = 3; i < nargs; i++)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1092 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1093 tem = args[i];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1094 CHECK_STRING (tem, i);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1095 len += XSTRING (tem)->size + 1; /* count the blank */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1096 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1097 new_argv = (unsigned char *) alloca (len);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1098 strcpy (new_argv, XSTRING (program)->data);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1099 for (i = 3; i < nargs; i++)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1100 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1101 tem = args[i];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1102 CHECK_STRING (tem, i);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1103 strcat (new_argv, " ");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1104 strcat (new_argv, XSTRING (tem)->data);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1105 }
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1106 /* 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
1107
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1108 #else /* not VMS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1109 new_argv = (unsigned char **) alloca ((nargs - 1) * sizeof (char *));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1110
6390
9f8ce71435de (Fstart_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6345
diff changeset
1111 /* If program file name is not absolute, search our path for it */
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1112 if (!IS_DIRECTORY_SEP (XSTRING (program)->data[0])
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1113 && !(XSTRING (program)->size > 1
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1114 && IS_DEVICE_SEP (XSTRING (program)->data[1])))
6390
9f8ce71435de (Fstart_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6345
diff changeset
1115 {
9f8ce71435de (Fstart_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6345
diff changeset
1116 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
9f8ce71435de (Fstart_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6345
diff changeset
1117
9f8ce71435de (Fstart_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6345
diff changeset
1118 tem = Qnil;
9f8ce71435de (Fstart_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6345
diff changeset
1119 GCPRO4 (name, program, buffer, current_dir);
9f8ce71435de (Fstart_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6345
diff changeset
1120 openp (Vexec_path, program, EXEC_SUFFIXES, &tem, 1);
9f8ce71435de (Fstart_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6345
diff changeset
1121 UNGCPRO;
9f8ce71435de (Fstart_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6345
diff changeset
1122 if (NILP (tem))
9f8ce71435de (Fstart_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6345
diff changeset
1123 report_file_error ("Searching for program", Fcons (program, Qnil));
12648
98aba238cf62 (Fstart_process): Don't expand the file name before trying openp.
Richard M. Stallman <rms@gnu.org>
parents: 12541
diff changeset
1124 tem = Fexpand_file_name (tem, Qnil);
6390
9f8ce71435de (Fstart_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6345
diff changeset
1125 new_argv[0] = XSTRING (tem)->data;
9f8ce71435de (Fstart_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6345
diff changeset
1126 }
9f8ce71435de (Fstart_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6345
diff changeset
1127 else
12491
4ad7be34ece1 (Fstart_process): Expand PROGRAM.
Richard M. Stallman <rms@gnu.org>
parents: 12378
diff changeset
1128 {
4ad7be34ece1 (Fstart_process): Expand PROGRAM.
Richard M. Stallman <rms@gnu.org>
parents: 12378
diff changeset
1129 if (!NILP (Ffile_directory_p (program)))
4ad7be34ece1 (Fstart_process): Expand PROGRAM.
Richard M. Stallman <rms@gnu.org>
parents: 12378
diff changeset
1130 error ("Specified program for new process is a directory");
4ad7be34ece1 (Fstart_process): Expand PROGRAM.
Richard M. Stallman <rms@gnu.org>
parents: 12378
diff changeset
1131
4ad7be34ece1 (Fstart_process): Expand PROGRAM.
Richard M. Stallman <rms@gnu.org>
parents: 12378
diff changeset
1132 new_argv[0] = XSTRING (program)->data;
4ad7be34ece1 (Fstart_process): Expand PROGRAM.
Richard M. Stallman <rms@gnu.org>
parents: 12378
diff changeset
1133 }
6390
9f8ce71435de (Fstart_process): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6345
diff changeset
1134
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1135 for (i = 3; i < nargs; i++)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1136 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1137 tem = args[i];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1138 CHECK_STRING (tem, i);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1139 new_argv[i - 2] = XSTRING (tem)->data;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1140 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1141 new_argv[i - 2] = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1142 #endif /* not VMS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1143
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1144 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
1145 /* 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
1146 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
1147 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
1148 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
1149 record_unwind_protect (start_process_unwind, proc);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1150
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1151 XPROCESS (proc)->childp = Qt;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1152 XPROCESS (proc)->command_channel_p = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1153 XPROCESS (proc)->buffer = buffer;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1154 XPROCESS (proc)->sentinel = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1155 XPROCESS (proc)->filter = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1156 XPROCESS (proc)->command = Flist (nargs - 2, args + 2);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1157
10744
54a76e0b97ec (Fstart_process): Make process marker point into proc buf.
Richard M. Stallman <rms@gnu.org>
parents: 10548
diff changeset
1158 /* Make the process marker point into the process buffer (if any). */
54a76e0b97ec (Fstart_process): Make process marker point into proc buf.
Richard M. Stallman <rms@gnu.org>
parents: 10548
diff changeset
1159 if (!NILP (buffer))
54a76e0b97ec (Fstart_process): Make process marker point into proc buf.
Richard M. Stallman <rms@gnu.org>
parents: 10548
diff changeset
1160 Fset_marker (XPROCESS (proc)->mark,
54a76e0b97ec (Fstart_process): Make process marker point into proc buf.
Richard M. Stallman <rms@gnu.org>
parents: 10548
diff changeset
1161 make_number (BUF_ZV (XBUFFER (buffer))), buffer);
54a76e0b97ec (Fstart_process): Make process marker point into proc buf.
Richard M. Stallman <rms@gnu.org>
parents: 10548
diff changeset
1162
17110
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1163 if (!NILP (buffer) && NILP (XBUFFER (buffer)->enable_multibyte_characters)
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1164 || NILP (buffer) && NILP (buffer_defaults.enable_multibyte_characters))
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1165 {
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1166 XPROCESS (proc)->decode_coding_system = Qnil;
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1167 XPROCESS (proc)->encode_coding_system = Qnil;
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1168 }
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1169 else
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1170 {
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1171 /* Setup coding systems for communicating with the process. */
18540
c9470cd6de93 (Fstart_process): Call Ffind_operation_coding_system.
Kenichi Handa <handa@m17n.org>
parents: 18512
diff changeset
1172 /* Qt denotes we have not yet called Ffind_operation_coding_system. */
17110
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1173 Lisp_Object coding_systems = Qt;
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1174 Lisp_Object val, *args2;
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1175 struct gcpro gcpro1;
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1176
18648
5deb269b970f (Fstart_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18585
diff changeset
1177 if (!NILP (Vcoding_system_for_read))
5deb269b970f (Fstart_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18585
diff changeset
1178 val = Vcoding_system_for_read;
5deb269b970f (Fstart_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18585
diff changeset
1179 else if (NILP (current_buffer->enable_multibyte_characters))
5deb269b970f (Fstart_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18585
diff changeset
1180 val = Qemacs_mule;
5deb269b970f (Fstart_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18585
diff changeset
1181 else
17110
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1182 {
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1183 args2 = (Lisp_Object *) alloca ((nargs + 1) * sizeof *args2);
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1184 args2[0] = Qstart_process;
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1185 for (i = 0; i < nargs; i++) args2[i + 1] = args[i];
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1186 GCPRO1 (proc);
18540
c9470cd6de93 (Fstart_process): Call Ffind_operation_coding_system.
Kenichi Handa <handa@m17n.org>
parents: 18512
diff changeset
1187 coding_systems = Ffind_operation_coding_system (nargs + 1, args2);
17110
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1188 UNGCPRO;
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1189 if (CONSP (coding_systems))
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1190 val = XCONS (coding_systems)->car;
18183
dc9d056f204f (Fstart_process):Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 17604
diff changeset
1191 else if (CONSP (Vdefault_process_coding_system))
dc9d056f204f (Fstart_process):Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 17604
diff changeset
1192 val = XCONS (Vdefault_process_coding_system)->car;
18648
5deb269b970f (Fstart_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18585
diff changeset
1193 else
5deb269b970f (Fstart_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18585
diff changeset
1194 val = Qnil;
17110
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1195 }
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1196 XPROCESS (proc)->decode_coding_system = val;
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1197
18648
5deb269b970f (Fstart_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18585
diff changeset
1198 if (!NILP (Vcoding_system_for_write))
5deb269b970f (Fstart_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18585
diff changeset
1199 val = Vcoding_system_for_write;
5deb269b970f (Fstart_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18585
diff changeset
1200 else if (NILP (current_buffer->enable_multibyte_characters))
5deb269b970f (Fstart_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18585
diff changeset
1201 val = Qnil;
5deb269b970f (Fstart_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18585
diff changeset
1202 else
17110
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1203 {
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1204 if (EQ (coding_systems, Qt))
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1205 {
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1206 args2 = (Lisp_Object *) alloca ((nargs + 1) * sizeof args2);
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1207 args2[0] = Qstart_process;
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1208 for (i = 0; i < nargs; i++) args2[i + 1] = args[i];
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1209 GCPRO1 (proc);
18540
c9470cd6de93 (Fstart_process): Call Ffind_operation_coding_system.
Kenichi Handa <handa@m17n.org>
parents: 18512
diff changeset
1210 coding_systems =
c9470cd6de93 (Fstart_process): Call Ffind_operation_coding_system.
Kenichi Handa <handa@m17n.org>
parents: 18512
diff changeset
1211 Ffind_operation_coding_system (nargs + 1, args2);
17110
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1212 UNGCPRO;
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1213 }
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1214 if (CONSP (coding_systems))
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1215 val = XCONS (coding_systems)->cdr;
18183
dc9d056f204f (Fstart_process):Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 17604
diff changeset
1216 else if (CONSP (Vdefault_process_coding_system))
dc9d056f204f (Fstart_process):Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 17604
diff changeset
1217 val = XCONS (Vdefault_process_coding_system)->cdr;
18648
5deb269b970f (Fstart_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18585
diff changeset
1218 else
5deb269b970f (Fstart_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18585
diff changeset
1219 val = Qnil;
17110
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1220 }
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1221 XPROCESS (proc)->encode_coding_system = val;
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1222 }
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
1223
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
1224 XPROCESS (proc)->decoding_buf = make_uninit_string (0);
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
1225 XPROCESS (proc)->encoding_buf = make_uninit_string (0);
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
1226
1683
a0a41de51400 Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents: 1655
diff changeset
1227 create_process (proc, new_argv, current_dir);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1228
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1229 return unbind_to (count, proc);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1230 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1231
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1232 /* This function is the unwind_protect form for Fstart_process. If
14036
621a575db6f7 Comment fixes.
Karl Heuer <kwzh@gnu.org>
parents: 13777
diff changeset
1233 PROC doesn't have its pid set, then we know someone has signaled
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1234 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
1235 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
1236 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
1237 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
1238 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
1239 {
9115
59bc2d010b5f (decode_status, Fprocessp, Fget_process, Fget_buffer_process, Fprocess_status,
Karl Heuer <kwzh@gnu.org>
parents: 9034
diff changeset
1240 if (!PROCESSP (proc))
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1241 abort ();
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1242
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1243 /* Was PROC started successfully? */
3685
47d7fda8a609 (start_process_unwind): Use XINT.
Richard M. Stallman <rms@gnu.org>
parents: 3666
diff changeset
1244 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
1245 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
1246
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1247 return Qnil;
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1248 }
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1249
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
1250
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1251 SIGTYPE
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1252 create_process_1 (signo)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1253 int signo;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1254 {
16116
80a67b8f39e9 (create_process_1, sigchld_handler) [POSIX_SIGNALS]:
Richard M. Stallman <rms@gnu.org>
parents: 16076
diff changeset
1255 #if defined (USG) && !defined (POSIX_SIGNALS)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1256 /* USG systems forget handlers when they are used;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1257 must reestablish each time */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1258 signal (signo, create_process_1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1259 #endif /* USG */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1260 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1261
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1262 #if 0 /* This doesn't work; see the note before sigchld_handler. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1263 #ifdef USG
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1264 #ifdef SIGCHLD
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1265 /* Mimic blocking of signals on system V, which doesn't really have it. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1266
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1267 /* Nonzero means we got a SIGCHLD when it was supposed to be blocked. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1268 int sigchld_deferred;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1269
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1270 SIGTYPE
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1271 create_process_sigchld ()
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1272 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1273 signal (SIGCHLD, create_process_sigchld);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1274
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1275 sigchld_deferred = 1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1276 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1277 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1278 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1279 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1280
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1281 #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
1282 create_process (process, new_argv, current_dir)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1283 Lisp_Object process;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1284 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
1285 Lisp_Object current_dir;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1286 {
11926
40d7e6f04ebe (create_process, send_process): Add volatile qualifiers.
Karl Heuer <kwzh@gnu.org>
parents: 11845
diff changeset
1287 int pid, inchannel, outchannel;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1288 int sv[2];
13709
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1289 #ifdef POSIX_SIGNALS
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1290 sigset_t procmask;
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1291 sigset_t blocked;
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1292 struct sigaction sigint_action;
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1293 struct sigaction sigquit_action;
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1294 #ifdef AIX
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1295 struct sigaction sighup_action;
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1296 #endif
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1297 #else /* !POSIX_SIGNALS */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1298 #ifdef SIGCHLD
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1299 SIGTYPE (*sigchld)();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1300 #endif
13709
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1301 #endif /* !POSIX_SIGNALS */
11926
40d7e6f04ebe (create_process, send_process): Add volatile qualifiers.
Karl Heuer <kwzh@gnu.org>
parents: 11845
diff changeset
1302 /* Use volatile to protect variables from being clobbered by longjmp. */
40d7e6f04ebe (create_process, send_process): Add volatile qualifiers.
Karl Heuer <kwzh@gnu.org>
parents: 11845
diff changeset
1303 volatile int forkin, forkout;
40d7e6f04ebe (create_process, send_process): Add volatile qualifiers.
Karl Heuer <kwzh@gnu.org>
parents: 11845
diff changeset
1304 volatile int pty_flag = 0;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1305 extern char **environ;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1306
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1307 inchannel = outchannel = -1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1308
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1309 #ifdef HAVE_PTYS
7748
9a9c8372af80 (create_process): Get a pty for any non-nil Vprocess_connection_type value.
Richard M. Stallman <rms@gnu.org>
parents: 7605
diff changeset
1310 if (!NILP (Vprocess_connection_type))
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1311 outchannel = inchannel = allocate_pty ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1312
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1313 if (inchannel >= 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1314 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1315 #ifndef USG
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1316 /* 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
1317 and then close and reopen it in the child. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1318 #ifdef O_NOCTTY
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1319 /* Don't let this terminal become our controlling terminal
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1320 (in case we don't have one). */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1321 forkout = forkin = open (pty_name, O_RDWR | O_NOCTTY, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1322 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1323 forkout = forkin = open (pty_name, O_RDWR, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1324 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1325 if (forkin < 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1326 report_file_error ("Opening pty", Qnil);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1327 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1328 forkin = forkout = -1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1329 #endif /* not USG */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1330 pty_flag = 1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1331 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1332 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1333 #endif /* HAVE_PTYS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1334 #ifdef SKTPAIR
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1335 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1336 if (socketpair (AF_UNIX, SOCK_STREAM, 0, sv) < 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1337 report_file_error ("Opening socketpair", Qnil);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1338 outchannel = inchannel = sv[0];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1339 forkout = forkin = sv[1];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1340 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1341 #else /* not SKTPAIR */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1342 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1343 pipe (sv);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1344 inchannel = sv[0];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1345 forkout = sv[1];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1346 pipe (sv);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1347 outchannel = sv[1];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1348 forkin = sv[0];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1349 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1350 #endif /* not SKTPAIR */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1351
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1352 #if 0
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1353 /* Replaced by close_process_descs */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1354 set_exclusive_use (inchannel);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1355 set_exclusive_use (outchannel);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1356 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1357
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1358 /* Stride people say it's a mystery why this is needed
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1359 as well as the O_NDELAY, but that it fails without this. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1360 #if defined (STRIDE) || (defined (pfa) && defined (HAVE_PTYS))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1361 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1362 int one = 1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1363 ioctl (inchannel, FIONBIO, &one);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1364 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1365 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1366
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1367 #ifdef O_NONBLOCK
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1368 fcntl (inchannel, F_SETFL, O_NONBLOCK);
14405
4aa693528ee3 (create_process): Set outchannel to be non-blocking.
Richard M. Stallman <rms@gnu.org>
parents: 14404
diff changeset
1369 fcntl (outchannel, F_SETFL, O_NONBLOCK);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1370 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1371 #ifdef O_NDELAY
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1372 fcntl (inchannel, F_SETFL, O_NDELAY);
14405
4aa693528ee3 (create_process): Set outchannel to be non-blocking.
Richard M. Stallman <rms@gnu.org>
parents: 14404
diff changeset
1373 fcntl (outchannel, F_SETFL, O_NDELAY);
578
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 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1376
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1377 /* Record this as an active process, with its channels.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1378 As a result, child_setup will close Emacs's side of the pipes. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1379 chan_process[inchannel] = process;
9277
21f6120be5ba (make_process, create_process, Fopen_network_stream, deactivate_process,
Karl Heuer <kwzh@gnu.org>
parents: 9115
diff changeset
1380 XSETINT (XPROCESS (process)->infd, inchannel);
21f6120be5ba (make_process, create_process, Fopen_network_stream, deactivate_process,
Karl Heuer <kwzh@gnu.org>
parents: 9115
diff changeset
1381 XSETINT (XPROCESS (process)->outfd, outchannel);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1382 /* Record the tty descriptor used in the subprocess. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1383 if (forkin < 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1384 XPROCESS (process)->subtty = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1385 else
9318
a14cc1712337 (make_process, list_processes_1, create_process, Faccept_process_output,
Karl Heuer <kwzh@gnu.org>
parents: 9277
diff changeset
1386 XSETFASTINT (XPROCESS (process)->subtty, forkin);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1387 XPROCESS (process)->pty_flag = (pty_flag ? Qt : Qnil);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1388 XPROCESS (process)->status = Qrun;
17110
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1389 if (!proc_decode_coding_system[inchannel])
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1390 proc_decode_coding_system[inchannel]
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1391 = (struct coding_system *) xmalloc (sizeof (struct coding_system));
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
1392 setup_coding_system (XPROCESS (process)->decode_coding_system,
17110
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1393 proc_decode_coding_system[inchannel]);
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1394 if (!proc_encode_coding_system[outchannel])
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1395 proc_encode_coding_system[outchannel]
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1396 = (struct coding_system *) xmalloc (sizeof (struct coding_system));
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
1397 setup_coding_system (XPROCESS (process)->encode_coding_system,
17110
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1398 proc_encode_coding_system[outchannel]);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1399
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1400 /* Delay interrupts until we have a chance to store
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1401 the new fork's pid in its process structure */
13709
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1402 #ifdef POSIX_SIGNALS
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1403 sigemptyset (&blocked);
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1404 #ifdef SIGCHLD
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1405 sigaddset (&blocked, SIGCHLD);
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1406 #endif
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1407 #ifdef HAVE_VFORK
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1408 /* On many hosts (e.g. Solaris 2.4), if a vforked child calls `signal',
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1409 this sets the parent's signal handlers as well as the child's.
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1410 So delay all interrupts whose handlers the child might munge,
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1411 and record the current handlers so they can be restored later. */
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1412 sigaddset (&blocked, SIGINT ); sigaction (SIGINT , 0, &sigint_action );
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1413 sigaddset (&blocked, SIGQUIT); sigaction (SIGQUIT, 0, &sigquit_action);
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1414 #ifdef AIX
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1415 sigaddset (&blocked, SIGHUP ); sigaction (SIGHUP , 0, &sighup_action );
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1416 #endif
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1417 #endif /* HAVE_VFORK */
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1418 sigprocmask (SIG_BLOCK, &blocked, &procmask);
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1419 #else /* !POSIX_SIGNALS */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1420 #ifdef SIGCHLD
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1421 #ifdef BSD4_1
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1422 sighold (SIGCHLD);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1423 #else /* not BSD4_1 */
16220
02044b05d8e0 Replaced symbol BSD with BSD_SYSTEM.
Karl Heuer <kwzh@gnu.org>
parents: 16206
diff changeset
1424 #if defined (BSD_SYSTEM) || defined (UNIPLUS) || defined (HPUX)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1425 sigsetmask (sigmask (SIGCHLD));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1426 #else /* ordinary USG */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1427 #if 0
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1428 sigchld_deferred = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1429 sigchld = signal (SIGCHLD, create_process_sigchld);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1430 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1431 #endif /* ordinary USG */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1432 #endif /* not BSD4_1 */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1433 #endif /* SIGCHLD */
13709
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1434 #endif /* !POSIX_SIGNALS */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1435
7893
e54617027a47 (create_process): Set input_wait_mask before forking.
Karl Heuer <kwzh@gnu.org>
parents: 7884
diff changeset
1436 FD_SET (inchannel, &input_wait_mask);
9686
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
1437 FD_SET (inchannel, &non_keyboard_wait_mask);
7893
e54617027a47 (create_process): Set input_wait_mask before forking.
Karl Heuer <kwzh@gnu.org>
parents: 7884
diff changeset
1438 if (inchannel > max_process_desc)
e54617027a47 (create_process): Set input_wait_mask before forking.
Karl Heuer <kwzh@gnu.org>
parents: 7884
diff changeset
1439 max_process_desc = inchannel;
e54617027a47 (create_process): Set input_wait_mask before forking.
Karl Heuer <kwzh@gnu.org>
parents: 7884
diff changeset
1440
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1441 /* Until we store the proper pid, enable sigchld_handler
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1442 to recognize an unknown pid as standing for this process.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1443 It is very important not to let this `marker' value stay
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1444 in the table after this function has returned; if it does
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1445 it might cause call-process to hang and subsequent asynchronous
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1446 processes to get their return values scrambled. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1447 XSETINT (XPROCESS (process)->pid, -1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1448
16780
e9dc2569cb12 Include blockinput.h.
Richard M. Stallman <rms@gnu.org>
parents: 16728
diff changeset
1449 BLOCK_INPUT;
e9dc2569cb12 Include blockinput.h.
Richard M. Stallman <rms@gnu.org>
parents: 16728
diff changeset
1450
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1451 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1452 /* child_setup must clobber environ on systems with true vfork.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1453 Protect it from permanent change. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1454 char **save_environ = environ;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1455
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1456 #ifndef WINDOWSNT
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1457 pid = vfork ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1458 if (pid == 0)
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1459 #endif /* not WINDOWSNT */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1460 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1461 int xforkin = forkin;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1462 int xforkout = forkout;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1463
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1464 #if 0 /* This was probably a mistake--it duplicates code later on,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1465 but fails to handle all the cases. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1466 /* Make sure SIGCHLD is not blocked in the child. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1467 sigsetmask (SIGEMPTYMASK);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1468 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1469
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1470 /* Make the pty be the controlling terminal of the process. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1471 #ifdef HAVE_PTYS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1472 /* First, disconnect its current controlling terminal. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1473 #ifdef HAVE_SETSID
7266
f87808bd90e9 (create_process): Undo April 19 setsid change.
Richard M. Stallman <rms@gnu.org>
parents: 7238
diff changeset
1474 /* We tried doing setsid only if pty_flag, but it caused
f87808bd90e9 (create_process): Undo April 19 setsid change.
Richard M. Stallman <rms@gnu.org>
parents: 7238
diff changeset
1475 process_set_signal to fail on SGI when using a pipe. */
f87808bd90e9 (create_process): Undo April 19 setsid change.
Richard M. Stallman <rms@gnu.org>
parents: 7238
diff changeset
1476 setsid ();
1030
9934251d8219 (WCOREDUMP): Define only if not defined.
Richard M. Stallman <rms@gnu.org>
parents: 1012
diff changeset
1477 /* 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
1478 if (pty_flag)
6975
b7411e378b65 (create_process): Call setsid only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents: 6947
diff changeset
1479 {
b7411e378b65 (create_process): Call setsid only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents: 6947
diff changeset
1480 #ifdef TIOCSCTTY
b7411e378b65 (create_process): Call setsid only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents: 6947
diff changeset
1481 /* We ignore the return value
b7411e378b65 (create_process): Call setsid only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents: 6947
diff changeset
1482 because faith@cs.unc.edu says that is necessary on Linux. */
b7411e378b65 (create_process): Call setsid only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents: 6947
diff changeset
1483 ioctl (xforkin, TIOCSCTTY, 0);
1030
9934251d8219 (WCOREDUMP): Define only if not defined.
Richard M. Stallman <rms@gnu.org>
parents: 1012
diff changeset
1484 #endif
6975
b7411e378b65 (create_process): Call setsid only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents: 6947
diff changeset
1485 }
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1486 #else /* not HAVE_SETSID */
5181
31874690939f (create_process): Do setpgrp for USG regardless of IRIX.
Richard M. Stallman <rms@gnu.org>
parents: 5161
diff changeset
1487 #ifdef USG
5347
21bffe027a7d (create_process) [NTTYDISC]: Set the tty line discipline.
Richard M. Stallman <rms@gnu.org>
parents: 5332
diff changeset
1488 /* It's very important to call setpgrp here and no time
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1489 afterwards. Otherwise, we lose our controlling tty which
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1490 is set when we open the pty. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1491 setpgrp ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1492 #endif /* USG */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1493 #endif /* not HAVE_SETSID */
7116
d35b11eed89f (create_process) [HAVE_TERMIOS && LDISC1]: Use tcsetattr.
Karl Heuer <kwzh@gnu.org>
parents: 7059
diff changeset
1494 #if defined (HAVE_TERMIOS) && defined (LDISC1)
d35b11eed89f (create_process) [HAVE_TERMIOS && LDISC1]: Use tcsetattr.
Karl Heuer <kwzh@gnu.org>
parents: 7059
diff changeset
1495 if (pty_flag && xforkin >= 0)
d35b11eed89f (create_process) [HAVE_TERMIOS && LDISC1]: Use tcsetattr.
Karl Heuer <kwzh@gnu.org>
parents: 7059
diff changeset
1496 {
d35b11eed89f (create_process) [HAVE_TERMIOS && LDISC1]: Use tcsetattr.
Karl Heuer <kwzh@gnu.org>
parents: 7059
diff changeset
1497 struct termios t;
d35b11eed89f (create_process) [HAVE_TERMIOS && LDISC1]: Use tcsetattr.
Karl Heuer <kwzh@gnu.org>
parents: 7059
diff changeset
1498 tcgetattr (xforkin, &t);
d35b11eed89f (create_process) [HAVE_TERMIOS && LDISC1]: Use tcsetattr.
Karl Heuer <kwzh@gnu.org>
parents: 7059
diff changeset
1499 t.c_lflag = LDISC1;
d35b11eed89f (create_process) [HAVE_TERMIOS && LDISC1]: Use tcsetattr.
Karl Heuer <kwzh@gnu.org>
parents: 7059
diff changeset
1500 if (tcsetattr (xforkin, TCSANOW, &t) < 0)
d35b11eed89f (create_process) [HAVE_TERMIOS && LDISC1]: Use tcsetattr.
Karl Heuer <kwzh@gnu.org>
parents: 7059
diff changeset
1501 write (1, "create_process/tcsetattr LDISC1 failed\n", 39);
d35b11eed89f (create_process) [HAVE_TERMIOS && LDISC1]: Use tcsetattr.
Karl Heuer <kwzh@gnu.org>
parents: 7059
diff changeset
1502 }
d35b11eed89f (create_process) [HAVE_TERMIOS && LDISC1]: Use tcsetattr.
Karl Heuer <kwzh@gnu.org>
parents: 7059
diff changeset
1503 #else
6947
c5f990fad6bb (create_process): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 6928
diff changeset
1504 #if defined (NTTYDISC) && defined (TIOCSETD)
6393
7de1d288460e (create_process): Skip the ioctl if fd is -1.
Karl Heuer <kwzh@gnu.org>
parents: 6390
diff changeset
1505 if (pty_flag && xforkin >= 0)
5548
36d2fd17f833 (create_process): Set line discipline only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents: 5543
diff changeset
1506 {
36d2fd17f833 (create_process): Set line discipline only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents: 5543
diff changeset
1507 /* Use new line discipline. */
36d2fd17f833 (create_process): Set line discipline only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents: 5543
diff changeset
1508 int ldisc = NTTYDISC;
7605
53186c2698e5 (create_process): Don't complain about error from TIOCSETD.
Richard M. Stallman <rms@gnu.org>
parents: 7486
diff changeset
1509 ioctl (xforkin, TIOCSETD, &ldisc);
5548
36d2fd17f833 (create_process): Set line discipline only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents: 5543
diff changeset
1510 }
5347
21bffe027a7d (create_process) [NTTYDISC]: Set the tty line discipline.
Richard M. Stallman <rms@gnu.org>
parents: 5332
diff changeset
1511 #endif
7116
d35b11eed89f (create_process) [HAVE_TERMIOS && LDISC1]: Use tcsetattr.
Karl Heuer <kwzh@gnu.org>
parents: 7059
diff changeset
1512 #endif
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1513 #ifdef TIOCNOTTY
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1514 /* In 4.3BSD, the TIOCSPGRP bug has been fixed, and now you
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1515 can do TIOCSPGRP only to the process's controlling tty. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1516 if (pty_flag)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1517 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1518 /* I wonder: would just ioctl (0, TIOCNOTTY, 0) work here?
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1519 I can't test it since I don't have 4.3. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1520 int j = open ("/dev/tty", O_RDWR, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1521 ioctl (j, TIOCNOTTY, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1522 close (j);
3826
647bef18618f Changes for Irix 4.0, tested this time:
Jim Blandy <jimb@redhat.com>
parents: 3810
diff changeset
1523 #ifndef USG
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1524 /* In order to get a controlling terminal on some versions
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1525 of BSD, it is necessary to put the process in pgrp 0
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1526 before it opens the terminal. */
16127
8d6d35b486c0 (create_process): Test HAVE_SETPGID for using setpgid.
Richard M. Stallman <rms@gnu.org>
parents: 16116
diff changeset
1527 #ifdef HAVE_SETPGID
9882
ccc5562a7194 (create_process) [OSF1]: Use setpgid, not setpgrp.
Richard M. Stallman <rms@gnu.org>
parents: 9793
diff changeset
1528 setpgid (0, 0);
ccc5562a7194 (create_process) [OSF1]: Use setpgid, not setpgrp.
Richard M. Stallman <rms@gnu.org>
parents: 9793
diff changeset
1529 #else
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1530 setpgrp (0, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1531 #endif
9882
ccc5562a7194 (create_process) [OSF1]: Use setpgid, not setpgrp.
Richard M. Stallman <rms@gnu.org>
parents: 9793
diff changeset
1532 #endif
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1533 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1534 #endif /* TIOCNOTTY */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1535
16076
5d1e0290bbd0 (create_process): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 16058
diff changeset
1536 #if !defined (RTU) && !defined (UNIPLUS) && !defined (DONT_REOPEN_PTY)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1537 /*** There is a suggestion that this ought to be a
16076
5d1e0290bbd0 (create_process): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 16058
diff changeset
1538 conditional on TIOCSPGRP,
5d1e0290bbd0 (create_process): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 16058
diff changeset
1539 or !(defined (HAVE_SETSID) && defined (TIOCSCTTY)).
5d1e0290bbd0 (create_process): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 16058
diff changeset
1540 Trying the latter gave the wrong results on Debian GNU/Linux 1.1;
5d1e0290bbd0 (create_process): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 16058
diff changeset
1541 that system does seem to need this code, even though
5d1e0290bbd0 (create_process): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 16058
diff changeset
1542 both HAVE_SETSID and TIOCSCTTY are defined. */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1543 /* Now close the pty (if we had it open) and reopen it.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1544 This makes the pty the controlling terminal of the subprocess. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1545 if (pty_flag)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1546 {
5240
eed870591987 (Fprocess_status): Use get_process, not Fget_process.
Richard M. Stallman <rms@gnu.org>
parents: 5239
diff changeset
1547 #ifdef SET_CHILD_PTY_PGRP
eed870591987 (Fprocess_status): Use get_process, not Fget_process.
Richard M. Stallman <rms@gnu.org>
parents: 5239
diff changeset
1548 int pgrp = getpid ();
eed870591987 (Fprocess_status): Use get_process, not Fget_process.
Richard M. Stallman <rms@gnu.org>
parents: 5239
diff changeset
1549 #endif
eed870591987 (Fprocess_status): Use get_process, not Fget_process.
Richard M. Stallman <rms@gnu.org>
parents: 5239
diff changeset
1550
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1551 /* I wonder if close (open (pty_name, ...)) would work? */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1552 if (xforkin >= 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1553 close (xforkin);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1554 xforkout = xforkin = open (pty_name, O_RDWR, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1555
11514
321726163a65 (create_process): Don't abort if can't reopen
Richard M. Stallman <rms@gnu.org>
parents: 11376
diff changeset
1556 if (xforkin < 0)
321726163a65 (create_process): Don't abort if can't reopen
Richard M. Stallman <rms@gnu.org>
parents: 11376
diff changeset
1557 {
321726163a65 (create_process): Don't abort if can't reopen
Richard M. Stallman <rms@gnu.org>
parents: 11376
diff changeset
1558 write (1, "Couldn't open the pty terminal ", 31);
321726163a65 (create_process): Don't abort if can't reopen
Richard M. Stallman <rms@gnu.org>
parents: 11376
diff changeset
1559 write (1, pty_name, strlen (pty_name));
321726163a65 (create_process): Don't abort if can't reopen
Richard M. Stallman <rms@gnu.org>
parents: 11376
diff changeset
1560 write (1, "\n", 1);
321726163a65 (create_process): Don't abort if can't reopen
Richard M. Stallman <rms@gnu.org>
parents: 11376
diff changeset
1561 _exit (1);
321726163a65 (create_process): Don't abort if can't reopen
Richard M. Stallman <rms@gnu.org>
parents: 11376
diff changeset
1562 }
321726163a65 (create_process): Don't abort if can't reopen
Richard M. Stallman <rms@gnu.org>
parents: 11376
diff changeset
1563
5240
eed870591987 (Fprocess_status): Use get_process, not Fget_process.
Richard M. Stallman <rms@gnu.org>
parents: 5239
diff changeset
1564 #ifdef SET_CHILD_PTY_PGRP
eed870591987 (Fprocess_status): Use get_process, not Fget_process.
Richard M. Stallman <rms@gnu.org>
parents: 5239
diff changeset
1565 ioctl (xforkin, TIOCSPGRP, &pgrp);
eed870591987 (Fprocess_status): Use get_process, not Fget_process.
Richard M. Stallman <rms@gnu.org>
parents: 5239
diff changeset
1566 ioctl (xforkout, TIOCSPGRP, &pgrp);
eed870591987 (Fprocess_status): Use get_process, not Fget_process.
Richard M. Stallman <rms@gnu.org>
parents: 5239
diff changeset
1567 #endif
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1568 }
16076
5d1e0290bbd0 (create_process): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 16058
diff changeset
1569 #endif /* not UNIPLUS and not RTU and not DONT_REOPEN_PTY */
15368
6229fb866493 (create_process): Add DONT_OPEN_PTY conditional.
Richard M. Stallman <rms@gnu.org>
parents: 15355
diff changeset
1570
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1571 #ifdef SETUP_SLAVE_PTY
7058
1855e568a9b8 (create_process): Use SETUP_SLAVE_PTY only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents: 7044
diff changeset
1572 if (pty_flag)
1855e568a9b8 (create_process): Use SETUP_SLAVE_PTY only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents: 7044
diff changeset
1573 {
1855e568a9b8 (create_process): Use SETUP_SLAVE_PTY only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents: 7044
diff changeset
1574 SETUP_SLAVE_PTY;
1855e568a9b8 (create_process): Use SETUP_SLAVE_PTY only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents: 7044
diff changeset
1575 }
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1576 #endif /* SETUP_SLAVE_PTY */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1577 #ifdef AIX
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1578 /* 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
1579 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
1580 if (pty_flag)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1581 signal (SIGHUP, SIG_DFL);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1582 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1583 #endif /* HAVE_PTYS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1584
13709
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1585 signal (SIGINT, SIG_DFL);
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1586 signal (SIGQUIT, SIG_DFL);
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1587
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1588 /* Stop blocking signals in the child. */
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1589 #ifdef POSIX_SIGNALS
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1590 sigprocmask (SIG_SETMASK, &procmask, 0);
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1591 #else /* !POSIX_SIGNALS */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1592 #ifdef SIGCHLD
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1593 #ifdef BSD4_1
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1594 sigrelse (SIGCHLD);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1595 #else /* not BSD4_1 */
16220
02044b05d8e0 Replaced symbol BSD with BSD_SYSTEM.
Karl Heuer <kwzh@gnu.org>
parents: 16206
diff changeset
1596 #if defined (BSD_SYSTEM) || defined (UNIPLUS) || defined (HPUX)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1597 sigsetmask (SIGEMPTYMASK);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1598 #else /* ordinary USG */
1207
af619d68a576 * process.c [SIGCHLD && !BSD && !UNIPLUS && !HPUX]
Jim Blandy <jimb@redhat.com>
parents: 1180
diff changeset
1599 #if 0
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1600 signal (SIGCHLD, sigchld);
1207
af619d68a576 * process.c [SIGCHLD && !BSD && !UNIPLUS && !HPUX]
Jim Blandy <jimb@redhat.com>
parents: 1180
diff changeset
1601 #endif
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1602 #endif /* ordinary USG */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1603 #endif /* not BSD4_1 */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1604 #endif /* SIGCHLD */
13709
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1605 #endif /* !POSIX_SIGNALS */
8390
ee13e8728666 (create_process): Set default handling for SIGINT, etc.
Richard M. Stallman <rms@gnu.org>
parents: 8354
diff changeset
1606
7059
6a55de48ade5 (create_process): Use child_setup_tty only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents: 7058
diff changeset
1607 if (pty_flag)
6a55de48ade5 (create_process): Use child_setup_tty only if pty_flag.
Richard M. Stallman <rms@gnu.org>
parents: 7058
diff changeset
1608 child_setup_tty (xforkout);
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1609 #ifdef WINDOWSNT
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1610 pid = child_setup (xforkin, xforkout, xforkout,
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1611 new_argv, 1, current_dir);
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1612 #else /* not WINDOWSNT */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1613 child_setup (xforkin, xforkout, xforkout,
638
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 624
diff changeset
1614 new_argv, 1, current_dir);
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1615 #endif /* not WINDOWSNT */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1616 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1617 environ = save_environ;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1618 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1619
16780
e9dc2569cb12 Include blockinput.h.
Richard M. Stallman <rms@gnu.org>
parents: 16728
diff changeset
1620 UNBLOCK_INPUT;
e9dc2569cb12 Include blockinput.h.
Richard M. Stallman <rms@gnu.org>
parents: 16728
diff changeset
1621
14131
7717b68abd2e (create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents: 14085
diff changeset
1622 /* This runs in the Emacs process. */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1623 if (pid < 0)
7157
3f4fc9d682b4 (create_process): If vfork fails, close forkin and forkout.
Richard M. Stallman <rms@gnu.org>
parents: 7116
diff changeset
1624 {
3f4fc9d682b4 (create_process): If vfork fails, close forkin and forkout.
Richard M. Stallman <rms@gnu.org>
parents: 7116
diff changeset
1625 if (forkin >= 0)
3f4fc9d682b4 (create_process): If vfork fails, close forkin and forkout.
Richard M. Stallman <rms@gnu.org>
parents: 7116
diff changeset
1626 close (forkin);
3f4fc9d682b4 (create_process): If vfork fails, close forkin and forkout.
Richard M. Stallman <rms@gnu.org>
parents: 7116
diff changeset
1627 if (forkin != forkout && forkout >= 0)
3f4fc9d682b4 (create_process): If vfork fails, close forkin and forkout.
Richard M. Stallman <rms@gnu.org>
parents: 7116
diff changeset
1628 close (forkout);
3f4fc9d682b4 (create_process): If vfork fails, close forkin and forkout.
Richard M. Stallman <rms@gnu.org>
parents: 7116
diff changeset
1629 }
14131
7717b68abd2e (create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents: 14085
diff changeset
1630 else
7717b68abd2e (create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents: 14085
diff changeset
1631 {
7717b68abd2e (create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents: 14085
diff changeset
1632 /* vfork succeeded. */
7717b68abd2e (create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents: 14085
diff changeset
1633 XSETFASTINT (XPROCESS (process)->pid, pid);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1634
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1635 #ifdef WINDOWSNT
14131
7717b68abd2e (create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents: 14085
diff changeset
1636 register_child (pid, inchannel);
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1637 #endif /* WINDOWSNT */
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
1638
14131
7717b68abd2e (create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents: 14085
diff changeset
1639 /* If the subfork execv fails, and it exits,
7717b68abd2e (create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents: 14085
diff changeset
1640 this close hangs. I don't know why.
7717b68abd2e (create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents: 14085
diff changeset
1641 So have an interrupt jar it loose. */
7717b68abd2e (create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents: 14085
diff changeset
1642 stop_polling ();
7717b68abd2e (create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents: 14085
diff changeset
1643 signal (SIGALRM, create_process_1);
7717b68abd2e (create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents: 14085
diff changeset
1644 alarm (1);
7717b68abd2e (create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents: 14085
diff changeset
1645 XPROCESS (process)->subtty = Qnil;
7717b68abd2e (create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents: 14085
diff changeset
1646 if (forkin >= 0)
7717b68abd2e (create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents: 14085
diff changeset
1647 close (forkin);
7717b68abd2e (create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents: 14085
diff changeset
1648 alarm (0);
7717b68abd2e (create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents: 14085
diff changeset
1649 start_polling ();
7717b68abd2e (create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents: 14085
diff changeset
1650 if (forkin != forkout && forkout >= 0)
7717b68abd2e (create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents: 14085
diff changeset
1651 close (forkout);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1652
11609
3b2dacb1bfe9 (create_process): Don't reference pty_name if !HAVE_PTYS.
Karl Heuer <kwzh@gnu.org>
parents: 11514
diff changeset
1653 #ifdef HAVE_PTYS
14131
7717b68abd2e (create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents: 14085
diff changeset
1654 if (pty_flag)
7717b68abd2e (create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents: 14085
diff changeset
1655 XPROCESS (process)->tty_name = build_string (pty_name);
7717b68abd2e (create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents: 14085
diff changeset
1656 else
11609
3b2dacb1bfe9 (create_process): Don't reference pty_name if !HAVE_PTYS.
Karl Heuer <kwzh@gnu.org>
parents: 11514
diff changeset
1657 #endif
14131
7717b68abd2e (create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents: 14085
diff changeset
1658 XPROCESS (process)->tty_name = Qnil;
7717b68abd2e (create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents: 14085
diff changeset
1659 }
7717b68abd2e (create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents: 14085
diff changeset
1660
7717b68abd2e (create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents: 14085
diff changeset
1661 /* Restore the signal state whether vfork succeeded or not.
7717b68abd2e (create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents: 14085
diff changeset
1662 (We will signal an error, below, if it failed.) */
13709
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1663 #ifdef POSIX_SIGNALS
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1664 #ifdef HAVE_VFORK
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1665 /* Restore the parent's signal handlers. */
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1666 sigaction (SIGINT, &sigint_action, 0);
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1667 sigaction (SIGQUIT, &sigquit_action, 0);
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1668 #ifdef AIX
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1669 sigaction (SIGHUP, &sighup_action, 0);
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1670 #endif
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1671 #endif /* HAVE_VFORK */
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1672 /* Stop blocking signals in the parent. */
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1673 sigprocmask (SIG_SETMASK, &procmask, 0);
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1674 #else /* !POSIX_SIGNALS */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1675 #ifdef SIGCHLD
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1676 #ifdef BSD4_1
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1677 sigrelse (SIGCHLD);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1678 #else /* not BSD4_1 */
16220
02044b05d8e0 Replaced symbol BSD with BSD_SYSTEM.
Karl Heuer <kwzh@gnu.org>
parents: 16206
diff changeset
1679 #if defined (BSD_SYSTEM) || defined (UNIPLUS) || defined (HPUX)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1680 sigsetmask (SIGEMPTYMASK);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1681 #else /* ordinary USG */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1682 #if 0
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1683 signal (SIGCHLD, sigchld);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1684 /* Now really handle any of these signals
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1685 that came in during this function. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1686 if (sigchld_deferred)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1687 kill (getpid (), SIGCHLD);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1688 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1689 #endif /* ordinary USG */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1690 #endif /* not BSD4_1 */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1691 #endif /* SIGCHLD */
13709
d16f31ae8adf (create_process): Use Posix signal handling to
Karl Heuer <kwzh@gnu.org>
parents: 13414
diff changeset
1692 #endif /* !POSIX_SIGNALS */
14131
7717b68abd2e (create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents: 14085
diff changeset
1693
7717b68abd2e (create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents: 14085
diff changeset
1694 /* Now generate the error if vfork failed. */
7717b68abd2e (create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents: 14085
diff changeset
1695 if (pid < 0)
7717b68abd2e (create_process): Restore the signal state
Karl Heuer <kwzh@gnu.org>
parents: 14085
diff changeset
1696 report_file_error ("Doing vfork", Qnil);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1697 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1698 #endif /* not VMS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1699
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1700 #ifdef HAVE_SOCKETS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1701
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1702 /* open a TCP network connection to a given HOST/SERVICE. Treated
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1703 exactly like a normal process when reading and writing. Only
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1704 differences are in status display and process deletion. A network
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1705 connection has no PID; you cannot signal it. All you can do is
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1706 deactivate and close it via delete-process */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1707
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1708 DEFUN ("open-network-stream", Fopen_network_stream, Sopen_network_stream,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1709 4, 4, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1710 "Open a TCP connection for a service to a host.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1711 Returns a subprocess-object to represent the connection.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1712 Input and output work as for subprocesses; `delete-process' closes it.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1713 Args are NAME BUFFER HOST SERVICE.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1714 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
1715 BUFFER is the buffer (or buffer-name) to associate with the process.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1716 Process output goes at end of that buffer, unless you specify\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1717 an output stream or filter function to handle the output.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1718 BUFFER may be also nil, meaning that this process is not associated\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1719 with any buffer\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1720 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
1721 Fourth arg SERVICE is name of the service desired, or an integer\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1722 specifying a port number to connect to.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1723 (name, buffer, host, service)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1724 Lisp_Object name, buffer, host, service;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1725 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1726 Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1727 register int i;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1728 struct sockaddr_in address;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1729 struct servent *svc_info;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1730 struct hostent *host_info_ptr, host_info;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1731 char *(addr_list[2]);
4998
3cd3a39f98f4 (IN_ADDR, NUMERIC_ADDR_ERROR): New macros (two versions).
Richard M. Stallman <rms@gnu.org>
parents: 4994
diff changeset
1732 IN_ADDR numeric_addr;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1733 int s, outch, inch;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1734 char errstring[80];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1735 int port;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1736 struct hostent host_info_fixed;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1737 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
7220
a33eb16cab9d (Fopen_network_stream): Retry the connect if EADDRINUSE. Ignore EISCONN.
Richard M. Stallman <rms@gnu.org>
parents: 7157
diff changeset
1738 int retry = 0;
7486
cfe4840ffde9 (Fopen_network_stream): Call bind_polling_period; later unbind the binding.
Richard M. Stallman <rms@gnu.org>
parents: 7454
diff changeset
1739 int count = specpdl_ptr - specpdl;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1740
15355
6bb377ef707f (Fopen_network_stream)[WINDOWSNT]: Ensure Windows
Richard M. Stallman <rms@gnu.org>
parents: 15092
diff changeset
1741 #ifdef WINDOWSNT
6bb377ef707f (Fopen_network_stream)[WINDOWSNT]: Ensure Windows
Richard M. Stallman <rms@gnu.org>
parents: 15092
diff changeset
1742 /* Ensure socket support is loaded if available. */
6bb377ef707f (Fopen_network_stream)[WINDOWSNT]: Ensure Windows
Richard M. Stallman <rms@gnu.org>
parents: 15092
diff changeset
1743 init_winsock (TRUE);
6bb377ef707f (Fopen_network_stream)[WINDOWSNT]: Ensure Windows
Richard M. Stallman <rms@gnu.org>
parents: 15092
diff changeset
1744 #endif
6bb377ef707f (Fopen_network_stream)[WINDOWSNT]: Ensure Windows
Richard M. Stallman <rms@gnu.org>
parents: 15092
diff changeset
1745
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1746 GCPRO4 (name, buffer, host, service);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1747 CHECK_STRING (name, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1748 CHECK_STRING (host, 0);
9115
59bc2d010b5f (decode_status, Fprocessp, Fget_process, Fget_buffer_process, Fprocess_status,
Karl Heuer <kwzh@gnu.org>
parents: 9034
diff changeset
1749 if (INTEGERP (service))
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1750 port = htons ((unsigned short) XINT (service));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1751 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1752 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1753 CHECK_STRING (service, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1754 svc_info = getservbyname (XSTRING (service)->data, "tcp");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1755 if (svc_info == 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1756 error ("Unknown service \"%s\"", XSTRING (service)->data);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1757 port = svc_info->s_port;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1758 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1759
13777
5e0cbd5fcb46 (Fopen_network_stream): Call bind_polling_period earlier.
Karl Heuer <kwzh@gnu.org>
parents: 13709
diff changeset
1760 /* Slow down polling to every ten seconds.
5e0cbd5fcb46 (Fopen_network_stream): Call bind_polling_period earlier.
Karl Heuer <kwzh@gnu.org>
parents: 13709
diff changeset
1761 Some kernels have a bug which causes retrying connect to fail
5e0cbd5fcb46 (Fopen_network_stream): Call bind_polling_period earlier.
Karl Heuer <kwzh@gnu.org>
parents: 13709
diff changeset
1762 after a connect. Polling can interfere with gethostbyname too. */
5e0cbd5fcb46 (Fopen_network_stream): Call bind_polling_period earlier.
Karl Heuer <kwzh@gnu.org>
parents: 13709
diff changeset
1763 #ifdef POLL_FOR_INPUT
5e0cbd5fcb46 (Fopen_network_stream): Call bind_polling_period earlier.
Karl Heuer <kwzh@gnu.org>
parents: 13709
diff changeset
1764 bind_polling_period (10);
5e0cbd5fcb46 (Fopen_network_stream): Call bind_polling_period earlier.
Karl Heuer <kwzh@gnu.org>
parents: 13709
diff changeset
1765 #endif
5e0cbd5fcb46 (Fopen_network_stream): Call bind_polling_period earlier.
Karl Heuer <kwzh@gnu.org>
parents: 13709
diff changeset
1766
4914
56bc426b1eb4 [TERM]: Include client.h.
Richard M. Stallman <rms@gnu.org>
parents: 4883
diff changeset
1767 #ifndef TERM
8287
97c2535b7f37 (Fopen_network_stream): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents: 8231
diff changeset
1768 while (1)
97c2535b7f37 (Fopen_network_stream): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents: 8231
diff changeset
1769 {
8331
14ddb4c66461 [!HAVE_H_ERRNO]: Declare h_errno.
Richard M. Stallman <rms@gnu.org>
parents: 8287
diff changeset
1770 #ifdef TRY_AGAIN
14ddb4c66461 [!HAVE_H_ERRNO]: Declare h_errno.
Richard M. Stallman <rms@gnu.org>
parents: 8287
diff changeset
1771 h_errno = 0;
14ddb4c66461 [!HAVE_H_ERRNO]: Declare h_errno.
Richard M. Stallman <rms@gnu.org>
parents: 8287
diff changeset
1772 #endif
14758
849458c13c0c (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 14736
diff changeset
1773 immediate_quit = 1;
849458c13c0c (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 14736
diff changeset
1774 QUIT;
8287
97c2535b7f37 (Fopen_network_stream): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents: 8231
diff changeset
1775 host_info_ptr = gethostbyname (XSTRING (host)->data);
14758
849458c13c0c (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 14736
diff changeset
1776 immediate_quit = 0;
8287
97c2535b7f37 (Fopen_network_stream): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents: 8231
diff changeset
1777 #ifdef TRY_AGAIN
97c2535b7f37 (Fopen_network_stream): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents: 8231
diff changeset
1778 if (! (host_info_ptr == 0 && h_errno == TRY_AGAIN))
97c2535b7f37 (Fopen_network_stream): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents: 8231
diff changeset
1779 #endif
97c2535b7f37 (Fopen_network_stream): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents: 8231
diff changeset
1780 break;
97c2535b7f37 (Fopen_network_stream): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents: 8231
diff changeset
1781 Fsleep_for (make_number (1), Qnil);
97c2535b7f37 (Fopen_network_stream): Retry gethostbyname after TRY_AGAIN failure.
Richard M. Stallman <rms@gnu.org>
parents: 8231
diff changeset
1782 }
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1783 if (host_info_ptr == 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1784 /* Attempt to interpret host as numeric inet address */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1785 {
4883
a806d71f58f6 (Fopen_netwrok_stream): Cast arg to inet_addr to (char *).
Brian Fox <bfox@gnu.org>
parents: 4870
diff changeset
1786 numeric_addr = inet_addr ((char *) XSTRING (host)->data);
4998
3cd3a39f98f4 (IN_ADDR, NUMERIC_ADDR_ERROR): New macros (two versions).
Richard M. Stallman <rms@gnu.org>
parents: 4994
diff changeset
1787 if (NUMERIC_ADDR_ERROR)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1788 error ("Unknown host \"%s\"", XSTRING (host)->data);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1789
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1790 host_info_ptr = &host_info;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1791 host_info.h_name = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1792 host_info.h_aliases = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1793 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
1794 #ifdef h_addr
f66a150d3fb9 * process.c (Fopen_network_stream): Deal with older systems, which
Jim Blandy <jimb@redhat.com>
parents: 2917
diff changeset
1795 /* 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
1796 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
1797 be its first element. */
f66a150d3fb9 * process.c (Fopen_network_stream): Deal with older systems, which
Jim Blandy <jimb@redhat.com>
parents: 2917
diff changeset
1798 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
1799 #endif
f66a150d3fb9 * process.c (Fopen_network_stream): Deal with older systems, which
Jim Blandy <jimb@redhat.com>
parents: 2917
diff changeset
1800 host_info.h_addr = (char*)(&numeric_addr);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1801 addr_list[1] = 0;
14544
ef07b51330af (Fopen_network_stream): Use sizeof, not strlen, for numeric_addr.
Richard M. Stallman <rms@gnu.org>
parents: 14513
diff changeset
1802 /* numeric_addr isn't null-terminated; it has fixed length. */
ef07b51330af (Fopen_network_stream): Use sizeof, not strlen, for numeric_addr.
Richard M. Stallman <rms@gnu.org>
parents: 14513
diff changeset
1803 host_info.h_length = sizeof (numeric_addr);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1804 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1805
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1806 bzero (&address, sizeof address);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1807 bcopy (host_info_ptr->h_addr, (char *) &address.sin_addr,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1808 host_info_ptr->h_length);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1809 address.sin_family = host_info_ptr->h_addrtype;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1810 address.sin_port = port;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1811
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1812 s = socket (host_info_ptr->h_addrtype, SOCK_STREAM, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1813 if (s < 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1814 report_file_error ("error creating socket", Fcons (name, Qnil));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1815
5332
c559b3d1b9e4 (Fopen_network_stream): Turn off SIGIO while connecting.
Richard M. Stallman <rms@gnu.org>
parents: 5240
diff changeset
1816 /* Kernel bugs (on Ultrix at least) cause lossage (not just EINTR)
c559b3d1b9e4 (Fopen_network_stream): Turn off SIGIO while connecting.
Richard M. Stallman <rms@gnu.org>
parents: 5240
diff changeset
1817 when connect is interrupted. So let's not let it get interrupted.
c559b3d1b9e4 (Fopen_network_stream): Turn off SIGIO while connecting.
Richard M. Stallman <rms@gnu.org>
parents: 5240
diff changeset
1818 Note we do not turn off polling, because polling is only used
c559b3d1b9e4 (Fopen_network_stream): Turn off SIGIO while connecting.
Richard M. Stallman <rms@gnu.org>
parents: 5240
diff changeset
1819 when not interrupt_input, and thus not normally used on the systems
c559b3d1b9e4 (Fopen_network_stream): Turn off SIGIO while connecting.
Richard M. Stallman <rms@gnu.org>
parents: 5240
diff changeset
1820 which have this bug. On systems which use polling, there's no way
c559b3d1b9e4 (Fopen_network_stream): Turn off SIGIO while connecting.
Richard M. Stallman <rms@gnu.org>
parents: 5240
diff changeset
1821 to quit if polling is turned off. */
c559b3d1b9e4 (Fopen_network_stream): Turn off SIGIO while connecting.
Richard M. Stallman <rms@gnu.org>
parents: 5240
diff changeset
1822 if (interrupt_input)
c559b3d1b9e4 (Fopen_network_stream): Turn off SIGIO while connecting.
Richard M. Stallman <rms@gnu.org>
parents: 5240
diff changeset
1823 unrequest_sigio ();
c559b3d1b9e4 (Fopen_network_stream): Turn off SIGIO while connecting.
Richard M. Stallman <rms@gnu.org>
parents: 5240
diff changeset
1824
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1825 loop:
14671
0493e857a13b (Fopen_network_stream): Set immediate_quit for the connect.
Richard M. Stallman <rms@gnu.org>
parents: 14613
diff changeset
1826
0493e857a13b (Fopen_network_stream): Set immediate_quit for the connect.
Richard M. Stallman <rms@gnu.org>
parents: 14613
diff changeset
1827 immediate_quit = 1;
0493e857a13b (Fopen_network_stream): Set immediate_quit for the connect.
Richard M. Stallman <rms@gnu.org>
parents: 14613
diff changeset
1828 QUIT;
0493e857a13b (Fopen_network_stream): Set immediate_quit for the connect.
Richard M. Stallman <rms@gnu.org>
parents: 14613
diff changeset
1829
7220
a33eb16cab9d (Fopen_network_stream): Retry the connect if EADDRINUSE. Ignore EISCONN.
Richard M. Stallman <rms@gnu.org>
parents: 7157
diff changeset
1830 if (connect (s, (struct sockaddr *) &address, sizeof address) == -1
a33eb16cab9d (Fopen_network_stream): Retry the connect if EADDRINUSE. Ignore EISCONN.
Richard M. Stallman <rms@gnu.org>
parents: 7157
diff changeset
1831 && errno != EISCONN)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1832 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1833 int xerrno = errno;
7220
a33eb16cab9d (Fopen_network_stream): Retry the connect if EADDRINUSE. Ignore EISCONN.
Richard M. Stallman <rms@gnu.org>
parents: 7157
diff changeset
1834
14671
0493e857a13b (Fopen_network_stream): Set immediate_quit for the connect.
Richard M. Stallman <rms@gnu.org>
parents: 14613
diff changeset
1835 immediate_quit = 0;
0493e857a13b (Fopen_network_stream): Set immediate_quit for the connect.
Richard M. Stallman <rms@gnu.org>
parents: 14613
diff changeset
1836
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1837 if (errno == EINTR)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1838 goto loop;
7220
a33eb16cab9d (Fopen_network_stream): Retry the connect if EADDRINUSE. Ignore EISCONN.
Richard M. Stallman <rms@gnu.org>
parents: 7157
diff changeset
1839 if (errno == EADDRINUSE && retry < 20)
a33eb16cab9d (Fopen_network_stream): Retry the connect if EADDRINUSE. Ignore EISCONN.
Richard M. Stallman <rms@gnu.org>
parents: 7157
diff changeset
1840 {
12378
3171d5da8a86 (Fopen_network_stream): Sleep 1 sec before connect retry.
Richard M. Stallman <rms@gnu.org>
parents: 12324
diff changeset
1841 /* A delay here is needed on some FreeBSD systems,
3171d5da8a86 (Fopen_network_stream): Sleep 1 sec before connect retry.
Richard M. Stallman <rms@gnu.org>
parents: 12324
diff changeset
1842 and it is harmless, since this retrying takes time anyway
3171d5da8a86 (Fopen_network_stream): Sleep 1 sec before connect retry.
Richard M. Stallman <rms@gnu.org>
parents: 12324
diff changeset
1843 and should be infrequent. */
3171d5da8a86 (Fopen_network_stream): Sleep 1 sec before connect retry.
Richard M. Stallman <rms@gnu.org>
parents: 12324
diff changeset
1844 Fsleep_for (make_number (1), Qnil);
7220
a33eb16cab9d (Fopen_network_stream): Retry the connect if EADDRINUSE. Ignore EISCONN.
Richard M. Stallman <rms@gnu.org>
parents: 7157
diff changeset
1845 retry++;
a33eb16cab9d (Fopen_network_stream): Retry the connect if EADDRINUSE. Ignore EISCONN.
Richard M. Stallman <rms@gnu.org>
parents: 7157
diff changeset
1846 goto loop;
a33eb16cab9d (Fopen_network_stream): Retry the connect if EADDRINUSE. Ignore EISCONN.
Richard M. Stallman <rms@gnu.org>
parents: 7157
diff changeset
1847 }
a33eb16cab9d (Fopen_network_stream): Retry the connect if EADDRINUSE. Ignore EISCONN.
Richard M. Stallman <rms@gnu.org>
parents: 7157
diff changeset
1848
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1849 close (s);
5332
c559b3d1b9e4 (Fopen_network_stream): Turn off SIGIO while connecting.
Richard M. Stallman <rms@gnu.org>
parents: 5240
diff changeset
1850
c559b3d1b9e4 (Fopen_network_stream): Turn off SIGIO while connecting.
Richard M. Stallman <rms@gnu.org>
parents: 5240
diff changeset
1851 if (interrupt_input)
c559b3d1b9e4 (Fopen_network_stream): Turn off SIGIO while connecting.
Richard M. Stallman <rms@gnu.org>
parents: 5240
diff changeset
1852 request_sigio ();
c559b3d1b9e4 (Fopen_network_stream): Turn off SIGIO while connecting.
Richard M. Stallman <rms@gnu.org>
parents: 5240
diff changeset
1853
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1854 errno = xerrno;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1855 report_file_error ("connection failed",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1856 Fcons (host, Fcons (name, Qnil)));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1857 }
5332
c559b3d1b9e4 (Fopen_network_stream): Turn off SIGIO while connecting.
Richard M. Stallman <rms@gnu.org>
parents: 5240
diff changeset
1858
14671
0493e857a13b (Fopen_network_stream): Set immediate_quit for the connect.
Richard M. Stallman <rms@gnu.org>
parents: 14613
diff changeset
1859 immediate_quit = 0;
0493e857a13b (Fopen_network_stream): Set immediate_quit for the connect.
Richard M. Stallman <rms@gnu.org>
parents: 14613
diff changeset
1860
7486
cfe4840ffde9 (Fopen_network_stream): Call bind_polling_period; later unbind the binding.
Richard M. Stallman <rms@gnu.org>
parents: 7454
diff changeset
1861 #ifdef POLL_FOR_INPUT
cfe4840ffde9 (Fopen_network_stream): Call bind_polling_period; later unbind the binding.
Richard M. Stallman <rms@gnu.org>
parents: 7454
diff changeset
1862 unbind_to (count, Qnil);
cfe4840ffde9 (Fopen_network_stream): Call bind_polling_period; later unbind the binding.
Richard M. Stallman <rms@gnu.org>
parents: 7454
diff changeset
1863 #endif
cfe4840ffde9 (Fopen_network_stream): Call bind_polling_period; later unbind the binding.
Richard M. Stallman <rms@gnu.org>
parents: 7454
diff changeset
1864
5332
c559b3d1b9e4 (Fopen_network_stream): Turn off SIGIO while connecting.
Richard M. Stallman <rms@gnu.org>
parents: 5240
diff changeset
1865 if (interrupt_input)
c559b3d1b9e4 (Fopen_network_stream): Turn off SIGIO while connecting.
Richard M. Stallman <rms@gnu.org>
parents: 5240
diff changeset
1866 request_sigio ();
c559b3d1b9e4 (Fopen_network_stream): Turn off SIGIO while connecting.
Richard M. Stallman <rms@gnu.org>
parents: 5240
diff changeset
1867
4914
56bc426b1eb4 [TERM]: Include client.h.
Richard M. Stallman <rms@gnu.org>
parents: 4883
diff changeset
1868 #else /* TERM */
56bc426b1eb4 [TERM]: Include client.h.
Richard M. Stallman <rms@gnu.org>
parents: 4883
diff changeset
1869 s = connect_server (0);
56bc426b1eb4 [TERM]: Include client.h.
Richard M. Stallman <rms@gnu.org>
parents: 4883
diff changeset
1870 if (s < 0)
56bc426b1eb4 [TERM]: Include client.h.
Richard M. Stallman <rms@gnu.org>
parents: 4883
diff changeset
1871 report_file_error ("error creating socket", Fcons (name, Qnil));
56bc426b1eb4 [TERM]: Include client.h.
Richard M. Stallman <rms@gnu.org>
parents: 4883
diff changeset
1872 send_command (s, C_PORT, 0, "%s:%d", XSTRING (host)->data, ntohs (port));
56bc426b1eb4 [TERM]: Include client.h.
Richard M. Stallman <rms@gnu.org>
parents: 4883
diff changeset
1873 send_command (s, C_DUMB, 1, 0);
56bc426b1eb4 [TERM]: Include client.h.
Richard M. Stallman <rms@gnu.org>
parents: 4883
diff changeset
1874 #endif /* TERM */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1875
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1876 inch = s;
17247
351006378b51 (Fopen_network_stream): Use same socket for in and out.
Richard M. Stallman <rms@gnu.org>
parents: 17224
diff changeset
1877 outch = s;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1878
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1879 if (!NILP (buffer))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1880 buffer = Fget_buffer_create (buffer);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1881 proc = make_process (name);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1882
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1883 chan_process[inch] = proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1884
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1885 #ifdef O_NONBLOCK
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1886 fcntl (inch, F_SETFL, O_NONBLOCK);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1887 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1888 #ifdef O_NDELAY
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1889 fcntl (inch, F_SETFL, O_NDELAY);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1890 #endif
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
16058
924aeb9ed7c3 (Fprocess_contact): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16053
diff changeset
1893 XPROCESS (proc)->childp = Fcons (host, Fcons (service, Qnil));
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1894 XPROCESS (proc)->command_channel_p = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1895 XPROCESS (proc)->buffer = buffer;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1896 XPROCESS (proc)->sentinel = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1897 XPROCESS (proc)->filter = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1898 XPROCESS (proc)->command = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1899 XPROCESS (proc)->pid = Qnil;
15092
5372670fbe59 (Fopen_network_stream): Set process infd to inch.
Richard M. Stallman <rms@gnu.org>
parents: 15064
diff changeset
1900 XSETINT (XPROCESS (proc)->infd, inch);
9277
21f6120be5ba (make_process, create_process, Fopen_network_stream, deactivate_process,
Karl Heuer <kwzh@gnu.org>
parents: 9115
diff changeset
1901 XSETINT (XPROCESS (proc)->outfd, outch);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1902 XPROCESS (proc)->status = Qrun;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1903 FD_SET (inch, &input_wait_mask);
9686
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
1904 FD_SET (inch, &non_keyboard_wait_mask);
7044
7032d07f5ad9 (max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7013
diff changeset
1905 if (inch > max_process_desc)
7032d07f5ad9 (max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7013
diff changeset
1906 max_process_desc = inch;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1907
17110
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1908 if (!NILP (buffer) && NILP (XBUFFER (buffer)->enable_multibyte_characters)
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1909 || NILP (buffer) && NILP (buffer_defaults.enable_multibyte_characters))
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1910 {
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1911 XPROCESS (proc)->decode_coding_system = Qnil;
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1912 XPROCESS (proc)->encode_coding_system = Qnil;
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1913 }
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1914 else
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1915 {
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1916 /* Setup coding systems for communicating with the network stream. */
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1917 struct gcpro gcpro1;
18540
c9470cd6de93 (Fstart_process): Call Ffind_operation_coding_system.
Kenichi Handa <handa@m17n.org>
parents: 18512
diff changeset
1918 /* Qt denotes we have not yet called Ffind_operation_coding_system. */
17110
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1919 Lisp_Object coding_systems = Qt;
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1920 Lisp_Object args[5], val;
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1921
18648
5deb269b970f (Fstart_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18585
diff changeset
1922 if (!NILP (Vcoding_system_for_read))
5deb269b970f (Fstart_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18585
diff changeset
1923 val = Vcoding_system_for_read;
5deb269b970f (Fstart_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18585
diff changeset
1924 else if (NILP (current_buffer->enable_multibyte_characters))
5deb269b970f (Fstart_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18585
diff changeset
1925 /* We dare not decode end-of-line format by setting VAL to
5deb269b970f (Fstart_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18585
diff changeset
1926 Qemacs_mule, because the existing Emacs Lisp libraries
5deb269b970f (Fstart_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18585
diff changeset
1927 assume that they receive bare code including a sequene of
5deb269b970f (Fstart_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18585
diff changeset
1928 CR LF. */
5deb269b970f (Fstart_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18585
diff changeset
1929 val = Qnil;
5deb269b970f (Fstart_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18585
diff changeset
1930 else
17110
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1931 {
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1932 args[0] = Qopen_network_stream, args[1] = name,
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1933 args[2] = buffer, args[3] = host, args[4] = service;
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1934 GCPRO1 (proc);
18540
c9470cd6de93 (Fstart_process): Call Ffind_operation_coding_system.
Kenichi Handa <handa@m17n.org>
parents: 18512
diff changeset
1935 coding_systems = Ffind_operation_coding_system (5, args);
17110
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1936 UNGCPRO;
18183
dc9d056f204f (Fstart_process):Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 17604
diff changeset
1937 if (CONSP (coding_systems))
dc9d056f204f (Fstart_process):Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 17604
diff changeset
1938 val = XCONS (coding_systems)->car;
dc9d056f204f (Fstart_process):Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 17604
diff changeset
1939 else if (CONSP (Vdefault_process_coding_system))
dc9d056f204f (Fstart_process):Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 17604
diff changeset
1940 val = XCONS (Vdefault_process_coding_system)->car;
18648
5deb269b970f (Fstart_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18585
diff changeset
1941 else
5deb269b970f (Fstart_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18585
diff changeset
1942 val = Qnil;
17110
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1943 }
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1944 XPROCESS (proc)->decode_coding_system = val;
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1945
18648
5deb269b970f (Fstart_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18585
diff changeset
1946 if (!NILP (Vcoding_system_for_write))
5deb269b970f (Fstart_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18585
diff changeset
1947 val = Vcoding_system_for_write;
5deb269b970f (Fstart_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18585
diff changeset
1948 else if (NILP (current_buffer->enable_multibyte_characters))
5deb269b970f (Fstart_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18585
diff changeset
1949 val = Qnil;
5deb269b970f (Fstart_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18585
diff changeset
1950 else
17110
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1951 {
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1952 if (EQ (coding_systems, Qt))
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1953 {
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1954 args[0] = Qopen_network_stream, args[1] = name,
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1955 args[2] = buffer, args[3] = host, args[4] = service;
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1956 GCPRO1 (proc);
18540
c9470cd6de93 (Fstart_process): Call Ffind_operation_coding_system.
Kenichi Handa <handa@m17n.org>
parents: 18512
diff changeset
1957 coding_systems = Ffind_operation_coding_system (5, args);
17110
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1958 UNGCPRO;
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1959 }
18183
dc9d056f204f (Fstart_process):Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 17604
diff changeset
1960 if (CONSP (coding_systems))
dc9d056f204f (Fstart_process):Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 17604
diff changeset
1961 val = XCONS (coding_systems)->cdr;
dc9d056f204f (Fstart_process):Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 17604
diff changeset
1962 else if (CONSP (Vdefault_process_coding_system))
dc9d056f204f (Fstart_process):Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 17604
diff changeset
1963 val = XCONS (Vdefault_process_coding_system)->cdr;
18648
5deb269b970f (Fstart_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18585
diff changeset
1964 else
5deb269b970f (Fstart_process): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 18585
diff changeset
1965 val = Qnil;
17110
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1966 }
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1967 XPROCESS (proc)->encode_coding_system = val;
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1968 }
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1969
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1970 if (!proc_decode_coding_system[inch])
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1971 proc_decode_coding_system[inch]
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1972 = (struct coding_system *) xmalloc (sizeof (struct coding_system));
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
1973 setup_coding_system (XPROCESS (proc)->decode_coding_system,
17110
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1974 proc_decode_coding_system[inch]);
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1975 if (!proc_encode_coding_system[outch])
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1976 proc_encode_coding_system[outch]
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1977 = (struct coding_system *) xmalloc (sizeof (struct coding_system));
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
1978 setup_coding_system (XPROCESS (proc)->encode_coding_system,
17110
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
1979 proc_encode_coding_system[outch]);
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
1980
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
1981 XPROCESS (proc)->decoding_buf = make_uninit_string (0);
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
1982 XPROCESS (proc)->encoding_buf = make_uninit_string (0);
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
1983
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1984 UNGCPRO;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1985 return proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1986 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1987 #endif /* HAVE_SOCKETS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1988
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1989 deactivate_process (proc)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1990 Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1991 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1992 register int inchannel, outchannel;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1993 register struct Lisp_Process *p = XPROCESS (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1994
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
1995 inchannel = XINT (p->infd);
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
1996 outchannel = XINT (p->outfd);
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
1997
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
1998 if (inchannel >= 0)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1999 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2000 /* Beware SIGCHLD hereabouts. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2001 flush_pending_output (inchannel);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2002 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2003 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2004 VMS_PROC_STUFF *get_vms_process_pointer (), *vs;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2005 sys$dassgn (outchannel);
2357
9faa3a02ea97 * process.c [VMS] (DCL_PROMPT): Remove hack.
Jim Blandy <jimb@redhat.com>
parents: 2290
diff changeset
2006 vs = get_vms_process_pointer (p->pid);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2007 if (vs)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2008 give_back_vms_process_stuff (vs);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2009 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2010 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2011 close (inchannel);
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
2012 if (outchannel >= 0 && outchannel != inchannel)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2013 close (outchannel);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2014 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2015
9277
21f6120be5ba (make_process, create_process, Fopen_network_stream, deactivate_process,
Karl Heuer <kwzh@gnu.org>
parents: 9115
diff changeset
2016 XSETINT (p->infd, -1);
21f6120be5ba (make_process, create_process, Fopen_network_stream, deactivate_process,
Karl Heuer <kwzh@gnu.org>
parents: 9115
diff changeset
2017 XSETINT (p->outfd, -1);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2018 chan_process[inchannel] = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2019 FD_CLR (inchannel, &input_wait_mask);
9686
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
2020 FD_CLR (inchannel, &non_keyboard_wait_mask);
7044
7032d07f5ad9 (max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7013
diff changeset
2021 if (inchannel == max_process_desc)
7032d07f5ad9 (max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7013
diff changeset
2022 {
7032d07f5ad9 (max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7013
diff changeset
2023 int i;
7032d07f5ad9 (max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7013
diff changeset
2024 /* We just closed the highest-numbered process input descriptor,
7032d07f5ad9 (max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7013
diff changeset
2025 so recompute the highest-numbered one now. */
7032d07f5ad9 (max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7013
diff changeset
2026 max_process_desc = 0;
7032d07f5ad9 (max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7013
diff changeset
2027 for (i = 0; i < MAXDESC; i++)
7032d07f5ad9 (max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7013
diff changeset
2028 if (!NILP (chan_process[i]))
7032d07f5ad9 (max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7013
diff changeset
2029 max_process_desc = i;
7032d07f5ad9 (max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7013
diff changeset
2030 }
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2031 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2032 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2033
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2034 /* Close all descriptors currently in use for communication
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2035 with subprocess. This is used in a newly-forked subprocess
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2036 to get rid of irrelevant descriptors. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2037
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2038 close_process_descs ()
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2039 {
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
2040 #ifndef WINDOWSNT
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2041 int i;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2042 for (i = 0; i < MAXDESC; i++)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2043 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2044 Lisp_Object process;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2045 process = chan_process[i];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2046 if (!NILP (process))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2047 {
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
2048 int in = XINT (XPROCESS (process)->infd);
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
2049 int out = XINT (XPROCESS (process)->outfd);
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
2050 if (in >= 0)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2051 close (in);
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
2052 if (out >= 0 && in != out)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2053 close (out);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2054 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2055 }
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
2056 #endif
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2057 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2058
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2059 DEFUN ("accept-process-output", Faccept_process_output, Saccept_process_output,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2060 0, 3, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2061 "Allow any pending output from subprocesses to be read by Emacs.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2062 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
2063 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
2064 from PROCESS.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2065 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
2066 seconds and microseconds to wait; return after that much time whether\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2067 or not there is input.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2068 Return non-nil iff we received any output before the timeout expired.")
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
2069 (process, timeout, timeout_msecs)
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
2070 register Lisp_Object process, timeout, timeout_msecs;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2071 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2072 int seconds;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2073 int useconds;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2074
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2075 if (! NILP (timeout_msecs))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2076 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2077 CHECK_NUMBER (timeout_msecs, 2);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2078 useconds = XINT (timeout_msecs);
9115
59bc2d010b5f (decode_status, Fprocessp, Fget_process, Fget_buffer_process, Fprocess_status,
Karl Heuer <kwzh@gnu.org>
parents: 9034
diff changeset
2079 if (!INTEGERP (timeout))
9277
21f6120be5ba (make_process, create_process, Fopen_network_stream, deactivate_process,
Karl Heuer <kwzh@gnu.org>
parents: 9115
diff changeset
2080 XSETINT (timeout, 0);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2081
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2082 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2083 int carry = useconds / 1000000;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2084
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2085 XSETINT (timeout, XINT (timeout) + carry);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2086 useconds -= carry * 1000000;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2087
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2088 /* I think this clause is necessary because C doesn't
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2089 guarantee a particular rounding direction for negative
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2090 integers. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2091 if (useconds < 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2092 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2093 XSETINT (timeout, XINT (timeout) - 1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2094 useconds += 1000000;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2095 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2096 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2097 }
1180
9bf82484415d (Faccept_process_output): Initialize useconds.
Richard M. Stallman <rms@gnu.org>
parents: 1047
diff changeset
2098 else
9bf82484415d (Faccept_process_output): Initialize useconds.
Richard M. Stallman <rms@gnu.org>
parents: 1047
diff changeset
2099 useconds = 0;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2100
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2101 if (! NILP (timeout))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2102 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2103 CHECK_NUMBER (timeout, 1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2104 seconds = XINT (timeout);
14605
80196bfd8b94 (Faccept_process_output): Accept sub-second timeouts.
Erik Naggum <erik@naggum.no>
parents: 14544
diff changeset
2105 if (seconds < 0 || (seconds == 0 && useconds == 0))
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2106 seconds = -1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2107 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2108 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2109 {
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
2110 if (NILP (process))
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2111 seconds = -1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2112 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2113 seconds = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2114 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2115
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
2116 if (NILP (process))
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
2117 XSETFASTINT (process, 0);
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
2118
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2119 return
14085
85ce7bab31dc (Fprocessp, Fget_buffer_process, Fdelete_process, Fprocess_status,
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
2120 (wait_reading_process_input (seconds, useconds, process, 0)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2121 ? Qt : Qnil);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2122 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2123
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2124 /* This variable is different from waiting_for_input in keyboard.c.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2125 It is used to communicate to a lisp process-filter/sentinel (via the
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2126 function Fwaiting_for_user_input_p below) whether emacs was waiting
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2127 for user-input when that process-filter was called.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2128 waiting_for_input cannot be used as that is by definition 0 when
8570
dd3dfde8f973 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 8390
diff changeset
2129 lisp code is being evalled.
dd3dfde8f973 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 8390
diff changeset
2130 This is also used in record_asynch_buffer_change.
dd3dfde8f973 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 8390
diff changeset
2131 For that purpose, this must be 0
dd3dfde8f973 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 8390
diff changeset
2132 when not inside wait_reading_process_input. */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2133 static int waiting_for_user_input_p;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2134
14890
71c2cf461805 (wait_reading_process_input_1): New (empty) function.
Richard M. Stallman <rms@gnu.org>
parents: 14863
diff changeset
2135 /* This is here so breakpoints can be put on it. */
71c2cf461805 (wait_reading_process_input_1): New (empty) function.
Richard M. Stallman <rms@gnu.org>
parents: 14863
diff changeset
2136 static
71c2cf461805 (wait_reading_process_input_1): New (empty) function.
Richard M. Stallman <rms@gnu.org>
parents: 14863
diff changeset
2137 wait_reading_process_input_1 ()
71c2cf461805 (wait_reading_process_input_1): New (empty) function.
Richard M. Stallman <rms@gnu.org>
parents: 14863
diff changeset
2138 {
71c2cf461805 (wait_reading_process_input_1): New (empty) function.
Richard M. Stallman <rms@gnu.org>
parents: 14863
diff changeset
2139 }
71c2cf461805 (wait_reading_process_input_1): New (empty) function.
Richard M. Stallman <rms@gnu.org>
parents: 14863
diff changeset
2140
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2141 /* Read and dispose of subprocess output while waiting for timeout to
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2142 elapse and/or keyboard input to be available.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2143
3953
d0c23febc08c (wait_reading_process_input): Do include the keyboard
Richard M. Stallman <rms@gnu.org>
parents: 3915
diff changeset
2144 TIME_LIMIT is:
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2145 timeout in seconds, or
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2146 zero for no limit, or
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2147 -1 means gobble data immediately available but don't wait for any.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2148
3953
d0c23febc08c (wait_reading_process_input): Do include the keyboard
Richard M. Stallman <rms@gnu.org>
parents: 3915
diff changeset
2149 MICROSECS is:
d0c23febc08c (wait_reading_process_input): Do include the keyboard
Richard M. Stallman <rms@gnu.org>
parents: 3915
diff changeset
2150 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
2151 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
2152 consists of MICROSECS only.
d0c23febc08c (wait_reading_process_input): Do include the keyboard
Richard M. Stallman <rms@gnu.org>
parents: 3915
diff changeset
2153
d0c23febc08c (wait_reading_process_input): Do include the keyboard
Richard M. Stallman <rms@gnu.org>
parents: 3915
diff changeset
2154 READ_KBD is a lisp value:
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2155 0 to ignore keyboard input, or
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2156 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
2157 -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
2158 the quit handler, or
6569
9cde1228e2fa Fix typos in comments.
Karl Heuer <kwzh@gnu.org>
parents: 6515
diff changeset
2159 a cons cell, meaning wait until its car is non-nil
3953
d0c23febc08c (wait_reading_process_input): Do include the keyboard
Richard M. Stallman <rms@gnu.org>
parents: 3915
diff changeset
2160 (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
2161 a process object, meaning wait until something arrives from that
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
2162 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
2163 that process.
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2164
3953
d0c23febc08c (wait_reading_process_input): Do include the keyboard
Richard M. Stallman <rms@gnu.org>
parents: 3915
diff changeset
2165 DO_DISPLAY != 0 means redisplay should be done to show subprocess
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2166 output that arrives.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2167
3953
d0c23febc08c (wait_reading_process_input): Do include the keyboard
Richard M. Stallman <rms@gnu.org>
parents: 3915
diff changeset
2168 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
2169 function returns true iff we received input from that process
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2170 before the timeout elapsed.
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 3510
diff changeset
2171 Otherwise, return true iff we received input from any process. */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2172
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2173 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
2174 int time_limit, microsecs;
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
2175 Lisp_Object read_kbd;
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
2176 int do_display;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2177 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2178 register int channel, nfds, m;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2179 static SELECT_TYPE Available;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2180 int xerrno;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2181 Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2182 EMACS_TIME timeout, end_time, garbage;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2183 SELECT_TYPE Atemp;
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
2184 int wait_channel = -1;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2185 struct Lisp_Process *wait_proc = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2186 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
2187 Lisp_Object *wait_for_cell = 0;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2188
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2189 FD_ZERO (&Available);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2190
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
2191 /* 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
2192 accordingly. */
9115
59bc2d010b5f (decode_status, Fprocessp, Fget_process, Fget_buffer_process, Fprocess_status,
Karl Heuer <kwzh@gnu.org>
parents: 9034
diff changeset
2193 if (PROCESSP (read_kbd))
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2194 {
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
2195 wait_proc = XPROCESS (read_kbd);
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
2196 wait_channel = XINT (wait_proc->infd);
9318
a14cc1712337 (make_process, list_processes_1, create_process, Faccept_process_output,
Karl Heuer <kwzh@gnu.org>
parents: 9277
diff changeset
2197 XSETFASTINT (read_kbd, 0);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2198 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2199
2200
5e58643bb169 (wait_reading_process_input): New option to wait
Richard M. Stallman <rms@gnu.org>
parents: 2120
diff changeset
2200 /* If waiting for non-nil in a cell, record where. */
9115
59bc2d010b5f (decode_status, Fprocessp, Fget_process, Fget_buffer_process, Fprocess_status,
Karl Heuer <kwzh@gnu.org>
parents: 9034
diff changeset
2201 if (CONSP (read_kbd))
2200
5e58643bb169 (wait_reading_process_input): New option to wait
Richard M. Stallman <rms@gnu.org>
parents: 2120
diff changeset
2202 {
5e58643bb169 (wait_reading_process_input): New option to wait
Richard M. Stallman <rms@gnu.org>
parents: 2120
diff changeset
2203 wait_for_cell = &XCONS (read_kbd)->car;
9318
a14cc1712337 (make_process, list_processes_1, create_process, Faccept_process_output,
Karl Heuer <kwzh@gnu.org>
parents: 9277
diff changeset
2204 XSETFASTINT (read_kbd, 0);
2200
5e58643bb169 (wait_reading_process_input): New option to wait
Richard M. Stallman <rms@gnu.org>
parents: 2120
diff changeset
2205 }
5e58643bb169 (wait_reading_process_input): New option to wait
Richard M. Stallman <rms@gnu.org>
parents: 2120
diff changeset
2206
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
2207 waiting_for_user_input_p = XINT (read_kbd);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2208
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2209 /* Since we may need to wait several times,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2210 compute the absolute time to return at. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2211 if (time_limit || microsecs)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2212 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2213 EMACS_GET_TIME (end_time);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2214 EMACS_SET_SECS_USECS (timeout, time_limit, microsecs);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2215 EMACS_ADD_TIME (end_time, end_time, timeout);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2216 }
15661
96debed5fb36 (wait_reading_process_input) [hpux]: Workaround for
Karl Heuer <kwzh@gnu.org>
parents: 15406
diff changeset
2217 #ifdef hpux
96debed5fb36 (wait_reading_process_input) [hpux]: Workaround for
Karl Heuer <kwzh@gnu.org>
parents: 15406
diff changeset
2218 /* AlainF 5-Jul-1996
96debed5fb36 (wait_reading_process_input) [hpux]: Workaround for
Karl Heuer <kwzh@gnu.org>
parents: 15406
diff changeset
2219 HP-UX 10.10 seem to have problems with signals coming in
96debed5fb36 (wait_reading_process_input) [hpux]: Workaround for
Karl Heuer <kwzh@gnu.org>
parents: 15406
diff changeset
2220 Causes "poll: interrupted system call" messages when Emacs is run
96debed5fb36 (wait_reading_process_input) [hpux]: Workaround for
Karl Heuer <kwzh@gnu.org>
parents: 15406
diff changeset
2221 in an X window
96debed5fb36 (wait_reading_process_input) [hpux]: Workaround for
Karl Heuer <kwzh@gnu.org>
parents: 15406
diff changeset
2222 Turn off periodic alarms (in case they are in use) */
96debed5fb36 (wait_reading_process_input) [hpux]: Workaround for
Karl Heuer <kwzh@gnu.org>
parents: 15406
diff changeset
2223 stop_polling ();
96debed5fb36 (wait_reading_process_input) [hpux]: Workaround for
Karl Heuer <kwzh@gnu.org>
parents: 15406
diff changeset
2224 #endif
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2225
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2226 while (1)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2227 {
14458
2bb4652305c1 (wait_reading_process_input): If select times out,
Richard M. Stallman <rms@gnu.org>
parents: 14405
diff changeset
2228 int timeout_reduced_for_timers = 0;
2bb4652305c1 (wait_reading_process_input): If select times out,
Richard M. Stallman <rms@gnu.org>
parents: 14405
diff changeset
2229
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2230 /* If calling from keyboard input, do not quit
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2231 since we want to return C-g as an input character.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2232 Otherwise, do pending quit if requested. */
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
2233 if (XINT (read_kbd) >= 0)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2234 QUIT;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2235
4639
76f242eb1fa8 Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 4320
diff changeset
2236 /* Exit now if the cell we're waiting for became non-nil. */
76f242eb1fa8 Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 4320
diff changeset
2237 if (wait_for_cell && ! NILP (*wait_for_cell))
76f242eb1fa8 Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 4320
diff changeset
2238 break;
76f242eb1fa8 Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 4320
diff changeset
2239
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2240 /* Compute time from now till when time limit is up */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2241 /* Exit if already run out */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2242 if (time_limit == -1)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2243 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2244 /* -1 specified for timeout means
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2245 gobble output available now
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2246 but don't wait at all. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2247
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2248 EMACS_SET_SECS_USECS (timeout, 0, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2249 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2250 else if (time_limit || microsecs)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2251 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2252 EMACS_GET_TIME (timeout);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2253 EMACS_SUB_TIME (timeout, end_time, timeout);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2254 if (EMACS_TIME_NEG_P (timeout))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2255 break;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2256 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2257 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2258 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2259 EMACS_SET_SECS_USECS (timeout, 100000, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2260 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2261
15064
fb0f2804c34a (wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents: 15025
diff changeset
2262 /* Normally we run timers here.
fb0f2804c34a (wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents: 15025
diff changeset
2263 But not if wait_for_cell; in those cases,
fb0f2804c34a (wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents: 15025
diff changeset
2264 the wait is supposed to be short,
fb0f2804c34a (wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents: 15025
diff changeset
2265 and those callers cannot handle running arbitrary Lisp code here. */
fb0f2804c34a (wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents: 15025
diff changeset
2266 if (! wait_for_cell)
14404
cba05f90ee57 (wait_reading_process_input): Call timer_check
Richard M. Stallman <rms@gnu.org>
parents: 14278
diff changeset
2267 {
14458
2bb4652305c1 (wait_reading_process_input): If select times out,
Richard M. Stallman <rms@gnu.org>
parents: 14405
diff changeset
2268 EMACS_TIME timer_delay;
14890
71c2cf461805 (wait_reading_process_input_1): New (empty) function.
Richard M. Stallman <rms@gnu.org>
parents: 14863
diff changeset
2269 int old_timers_run;
71c2cf461805 (wait_reading_process_input_1): New (empty) function.
Richard M. Stallman <rms@gnu.org>
parents: 14863
diff changeset
2270
71c2cf461805 (wait_reading_process_input_1): New (empty) function.
Richard M. Stallman <rms@gnu.org>
parents: 14863
diff changeset
2271 retry:
71c2cf461805 (wait_reading_process_input_1): New (empty) function.
Richard M. Stallman <rms@gnu.org>
parents: 14863
diff changeset
2272 old_timers_run = timers_run;
14458
2bb4652305c1 (wait_reading_process_input): If select times out,
Richard M. Stallman <rms@gnu.org>
parents: 14405
diff changeset
2273 timer_delay = timer_check (1);
14785
e4a9806c1e83 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 14758
diff changeset
2274 if (timers_run != old_timers_run && do_display)
14890
71c2cf461805 (wait_reading_process_input_1): New (empty) function.
Richard M. Stallman <rms@gnu.org>
parents: 14863
diff changeset
2275 {
71c2cf461805 (wait_reading_process_input_1): New (empty) function.
Richard M. Stallman <rms@gnu.org>
parents: 14863
diff changeset
2276 redisplay_preserve_echo_area ();
71c2cf461805 (wait_reading_process_input_1): New (empty) function.
Richard M. Stallman <rms@gnu.org>
parents: 14863
diff changeset
2277 /* We must retry, since a timer may have requeued itself
71c2cf461805 (wait_reading_process_input_1): New (empty) function.
Richard M. Stallman <rms@gnu.org>
parents: 14863
diff changeset
2278 and that could alter the time_delay. */
71c2cf461805 (wait_reading_process_input_1): New (empty) function.
Richard M. Stallman <rms@gnu.org>
parents: 14863
diff changeset
2279 goto retry;
71c2cf461805 (wait_reading_process_input_1): New (empty) function.
Richard M. Stallman <rms@gnu.org>
parents: 14863
diff changeset
2280 }
71c2cf461805 (wait_reading_process_input_1): New (empty) function.
Richard M. Stallman <rms@gnu.org>
parents: 14863
diff changeset
2281
18230
2f1f942f25ca (wait_reading_process_input): Return if unread events appear.
Richard M. Stallman <rms@gnu.org>
parents: 18183
diff changeset
2282 /* If there is unread keyboard input, also return. */
2f1f942f25ca (wait_reading_process_input): Return if unread events appear.
Richard M. Stallman <rms@gnu.org>
parents: 18183
diff changeset
2283 if (XINT (read_kbd) != 0
2f1f942f25ca (wait_reading_process_input): Return if unread events appear.
Richard M. Stallman <rms@gnu.org>
parents: 18183
diff changeset
2284 && requeued_events_pending_p ())
2f1f942f25ca (wait_reading_process_input): Return if unread events appear.
Richard M. Stallman <rms@gnu.org>
parents: 18183
diff changeset
2285 break;
2f1f942f25ca (wait_reading_process_input): Return if unread events appear.
Richard M. Stallman <rms@gnu.org>
parents: 18183
diff changeset
2286
14458
2bb4652305c1 (wait_reading_process_input): If select times out,
Richard M. Stallman <rms@gnu.org>
parents: 14405
diff changeset
2287 if (! EMACS_TIME_NEG_P (timer_delay) && time_limit != -1)
14404
cba05f90ee57 (wait_reading_process_input): Call timer_check
Richard M. Stallman <rms@gnu.org>
parents: 14278
diff changeset
2288 {
cba05f90ee57 (wait_reading_process_input): Call timer_check
Richard M. Stallman <rms@gnu.org>
parents: 14278
diff changeset
2289 EMACS_TIME difference;
cba05f90ee57 (wait_reading_process_input): Call timer_check
Richard M. Stallman <rms@gnu.org>
parents: 14278
diff changeset
2290 EMACS_SUB_TIME (difference, timer_delay, timeout);
cba05f90ee57 (wait_reading_process_input): Call timer_check
Richard M. Stallman <rms@gnu.org>
parents: 14278
diff changeset
2291 if (EMACS_TIME_NEG_P (difference))
14458
2bb4652305c1 (wait_reading_process_input): If select times out,
Richard M. Stallman <rms@gnu.org>
parents: 14405
diff changeset
2292 {
2bb4652305c1 (wait_reading_process_input): If select times out,
Richard M. Stallman <rms@gnu.org>
parents: 14405
diff changeset
2293 timeout = timer_delay;
2bb4652305c1 (wait_reading_process_input): If select times out,
Richard M. Stallman <rms@gnu.org>
parents: 14405
diff changeset
2294 timeout_reduced_for_timers = 1;
2bb4652305c1 (wait_reading_process_input): If select times out,
Richard M. Stallman <rms@gnu.org>
parents: 14405
diff changeset
2295 }
14404
cba05f90ee57 (wait_reading_process_input): Call timer_check
Richard M. Stallman <rms@gnu.org>
parents: 14278
diff changeset
2296 }
14935
3e0dc64a5cb8 (wait_reading_process_input): Don't call
Richard M. Stallman <rms@gnu.org>
parents: 14890
diff changeset
2297 /* If time_limit is -1, we are not going to wait at all. */
3e0dc64a5cb8 (wait_reading_process_input): Don't call
Richard M. Stallman <rms@gnu.org>
parents: 14890
diff changeset
2298 else if (time_limit != -1)
14890
71c2cf461805 (wait_reading_process_input_1): New (empty) function.
Richard M. Stallman <rms@gnu.org>
parents: 14863
diff changeset
2299 {
71c2cf461805 (wait_reading_process_input_1): New (empty) function.
Richard M. Stallman <rms@gnu.org>
parents: 14863
diff changeset
2300 /* This is so a breakpoint can be put here. */
71c2cf461805 (wait_reading_process_input_1): New (empty) function.
Richard M. Stallman <rms@gnu.org>
parents: 14863
diff changeset
2301 wait_reading_process_input_1 ();
71c2cf461805 (wait_reading_process_input_1): New (empty) function.
Richard M. Stallman <rms@gnu.org>
parents: 14863
diff changeset
2302 }
14404
cba05f90ee57 (wait_reading_process_input): Call timer_check
Richard M. Stallman <rms@gnu.org>
parents: 14278
diff changeset
2303 }
cba05f90ee57 (wait_reading_process_input): Call timer_check
Richard M. Stallman <rms@gnu.org>
parents: 14278
diff changeset
2304
2894
646c5beae647 * process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents: 2893
diff changeset
2305 /* 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
2306 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
2307
646c5beae647 * process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents: 2893
diff changeset
2308 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
2309 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
2310 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
2311 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
2312 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
2313
1925
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2314 /* 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
2315 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
2316 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
2317 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
2318 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
2319 {
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2320 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
2321 EMACS_SET_SECS_USECS (timeout, 0, 0);
18492
668304de6f92 (wait_reading_process_input): If wait_for_cell,
Richard M. Stallman <rms@gnu.org>
parents: 18378
diff changeset
2322 if ((select (max (max_process_desc, max_keyboard_desc) + 1,
668304de6f92 (wait_reading_process_input): If wait_for_cell,
Richard M. Stallman <rms@gnu.org>
parents: 18378
diff changeset
2323 &Atemp, (SELECT_TYPE *)0, (SELECT_TYPE *)0,
11926
40d7e6f04ebe (create_process, send_process): Add volatile qualifiers.
Karl Heuer <kwzh@gnu.org>
parents: 11845
diff changeset
2324 &timeout)
40d7e6f04ebe (create_process, send_process): Add volatile qualifiers.
Karl Heuer <kwzh@gnu.org>
parents: 11845
diff changeset
2325 <= 0))
2894
646c5beae647 * process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents: 2893
diff changeset
2326 {
646c5beae647 * process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents: 2893
diff changeset
2327 /* It's okay for us to do this and then continue with
5534
7a0de0f56c86 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 5404
diff changeset
2328 the loop, since timeout has already been zeroed out. */
2894
646c5beae647 * process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents: 2893
diff changeset
2329 clear_waiting_for_input ();
646c5beae647 * process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents: 2893
diff changeset
2330 status_notify ();
646c5beae647 * process.c (wait_reading_process_input): Undo change of April
Jim Blandy <jimb@redhat.com>
parents: 2893
diff changeset
2331 }
1925
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2332 }
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2333
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2334 /* 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
2335 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
2336 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
2337 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
2338 && ! 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
2339 {
18946
84b78d90cd45 (wait_reading_process_input): Initialize total_read.
Richard M. Stallman <rms@gnu.org>
parents: 18739
diff changeset
2340 int nread, total_nread = 0;
18267
29c37882ee1f (wait_reading_process_input): When exiting because
Richard M. Stallman <rms@gnu.org>
parents: 18230
diff changeset
2341
2893
4df57953d5d0 * process.c (wait_reading_process_input): Don't forget to call
Jim Blandy <jimb@redhat.com>
parents: 2887
diff changeset
2342 clear_waiting_for_input ();
18267
29c37882ee1f (wait_reading_process_input): When exiting because
Richard M. Stallman <rms@gnu.org>
parents: 18230
diff changeset
2343 XSETPROCESS (proc, wait_proc);
29c37882ee1f (wait_reading_process_input): When exiting because
Richard M. Stallman <rms@gnu.org>
parents: 18230
diff changeset
2344
29c37882ee1f (wait_reading_process_input): When exiting because
Richard M. Stallman <rms@gnu.org>
parents: 18230
diff changeset
2345 /* Read data from the process, until we exhaust it. */
18276
3835d79f8978 (wait_reading_process_input): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 18267
diff changeset
2346 while (XINT (wait_proc->infd) >= 0
18292
3a85989b7e2c Further fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 18276
diff changeset
2347 && (nread
3a85989b7e2c Further fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 18276
diff changeset
2348 = read_process_output (proc, XINT (wait_proc->infd))))
18946
84b78d90cd45 (wait_reading_process_input): Initialize total_read.
Richard M. Stallman <rms@gnu.org>
parents: 18739
diff changeset
2349 {
84b78d90cd45 (wait_reading_process_input): Initialize total_read.
Richard M. Stallman <rms@gnu.org>
parents: 18739
diff changeset
2350 if (0 < nread)
84b78d90cd45 (wait_reading_process_input): Initialize total_read.
Richard M. Stallman <rms@gnu.org>
parents: 18739
diff changeset
2351 total_nread += nread;
84b78d90cd45 (wait_reading_process_input): Initialize total_read.
Richard M. Stallman <rms@gnu.org>
parents: 18739
diff changeset
2352 #ifdef EIO
84b78d90cd45 (wait_reading_process_input): Initialize total_read.
Richard M. Stallman <rms@gnu.org>
parents: 18739
diff changeset
2353 else if (nread == -1 && EIO == errno)
84b78d90cd45 (wait_reading_process_input): Initialize total_read.
Richard M. Stallman <rms@gnu.org>
parents: 18739
diff changeset
2354 break;
84b78d90cd45 (wait_reading_process_input): Initialize total_read.
Richard M. Stallman <rms@gnu.org>
parents: 18739
diff changeset
2355 #endif
84b78d90cd45 (wait_reading_process_input): Initialize total_read.
Richard M. Stallman <rms@gnu.org>
parents: 18739
diff changeset
2356 }
18267
29c37882ee1f (wait_reading_process_input): When exiting because
Richard M. Stallman <rms@gnu.org>
parents: 18230
diff changeset
2357 if (total_nread > 0 && do_display)
29c37882ee1f (wait_reading_process_input): When exiting because
Richard M. Stallman <rms@gnu.org>
parents: 18230
diff changeset
2358 redisplay_preserve_echo_area ();
29c37882ee1f (wait_reading_process_input): When exiting because
Richard M. Stallman <rms@gnu.org>
parents: 18230
diff changeset
2359
2893
4df57953d5d0 * process.c (wait_reading_process_input): Don't forget to call
Jim Blandy <jimb@redhat.com>
parents: 2887
diff changeset
2360 break;
4df57953d5d0 * process.c (wait_reading_process_input): Don't forget to call
Jim Blandy <jimb@redhat.com>
parents: 2887
diff changeset
2361 }
1925
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
2362
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2363 /* Wait till there is something to do */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2364
17224
dd2545e79add (wait_reading_process_input): If wait_for_cell,
Richard M. Stallman <rms@gnu.org>
parents: 17110
diff changeset
2365 if (wait_for_cell)
dd2545e79add (wait_reading_process_input): If wait_for_cell,
Richard M. Stallman <rms@gnu.org>
parents: 17110
diff changeset
2366 Available = non_process_wait_mask;
dd2545e79add (wait_reading_process_input): If wait_for_cell,
Richard M. Stallman <rms@gnu.org>
parents: 17110
diff changeset
2367 else if (! XINT (read_kbd))
9686
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
2368 Available = non_keyboard_wait_mask;
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
2369 else
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
2370 Available = input_wait_mask;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2371
765
e4093444f9f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 692
diff changeset
2372 /* 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
2373 redisplay now, before we start to wait. There is a race
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2374 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
2375 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
2376 displaying a trashed screen. */
6429
1dbe24a029fd (wait_reading_process_input, both versions): Don't call
Richard M. Stallman <rms@gnu.org>
parents: 6393
diff changeset
2377 if (frame_garbaged && do_display)
11728
affed1766d34 (wait_reading_process_input): Don't call prepare_menu_bars.
Richard M. Stallman <rms@gnu.org>
parents: 11695
diff changeset
2378 {
affed1766d34 (wait_reading_process_input): Don't call prepare_menu_bars.
Richard M. Stallman <rms@gnu.org>
parents: 11695
diff changeset
2379 clear_waiting_for_input ();
affed1766d34 (wait_reading_process_input): Don't call prepare_menu_bars.
Richard M. Stallman <rms@gnu.org>
parents: 11695
diff changeset
2380 redisplay_preserve_echo_area ();
affed1766d34 (wait_reading_process_input): Don't call prepare_menu_bars.
Richard M. Stallman <rms@gnu.org>
parents: 11695
diff changeset
2381 if (XINT (read_kbd) < 0)
11744
52a2c8e81bb7 (wait_reading_process_input): Pass arg in new call to set_waiting_for_input.
Richard M. Stallman <rms@gnu.org>
parents: 11728
diff changeset
2382 set_waiting_for_input (&timeout);
11728
affed1766d34 (wait_reading_process_input): Don't call prepare_menu_bars.
Richard M. Stallman <rms@gnu.org>
parents: 11695
diff changeset
2383 }
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2384
15021
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
2385 if (XINT (read_kbd) && detect_input_pending ())
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
2386 {
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
2387 nfds = 0;
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
2388 FD_ZERO (&Available);
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
2389 }
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
2390 else
18492
668304de6f92 (wait_reading_process_input): If wait_for_cell,
Richard M. Stallman <rms@gnu.org>
parents: 18378
diff changeset
2391 nfds = select (max (max_process_desc, max_keyboard_desc) + 1,
668304de6f92 (wait_reading_process_input): If wait_for_cell,
Richard M. Stallman <rms@gnu.org>
parents: 18378
diff changeset
2392 &Available, (SELECT_TYPE *)0, (SELECT_TYPE *)0,
15021
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
2393 &timeout);
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
2394
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2395 xerrno = errno;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2396
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2397 /* Make C-g and alarm signals set flags again */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2398 clear_waiting_for_input ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2399
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2400 /* If we woke up due to SIGWINCH, actually change size now. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2401 do_pending_window_change ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2402
14458
2bb4652305c1 (wait_reading_process_input): If select times out,
Richard M. Stallman <rms@gnu.org>
parents: 14405
diff changeset
2403 if (time_limit && nfds == 0 && ! timeout_reduced_for_timers)
2bb4652305c1 (wait_reading_process_input): If select times out,
Richard M. Stallman <rms@gnu.org>
parents: 14405
diff changeset
2404 /* We wanted the full specified time, so return now. */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2405 break;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2406 if (nfds < 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2407 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2408 if (xerrno == EINTR)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2409 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
2410 #ifdef ultrix
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2411 /* 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
2412 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
2413 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
2414 "__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
2415 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
2416 else if (xerrno == ENOMEM)
25b5b55a3916 * process.c (wait_reading_process_input): If the select returns
Jim Blandy <jimb@redhat.com>
parents: 1207
diff changeset
2417 FD_ZERO (&Available);
25b5b55a3916 * process.c (wait_reading_process_input): If the select returns
Jim Blandy <jimb@redhat.com>
parents: 1207
diff changeset
2418 #endif
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2419 #ifdef ALLIANT
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2420 /* This happens for no known reason on ALLIANT.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2421 I am guessing that this is the right response. -- RMS. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2422 else if (xerrno == EFAULT)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2423 FD_ZERO (&Available);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2424 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2425 else if (xerrno == EBADF)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2426 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2427 #ifdef AIX
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2428 /* AIX doesn't handle PTY closure the same way BSD does. On AIX,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2429 the child's closure of the pts gives the parent a SIGHUP, and
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2430 the ptc file descriptor is automatically closed,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2431 yielding EBADF here or at select() call above.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2432 So, SIGHUP is ignored (see def of PTY_TTY_NAME_SPRINTF
5534
7a0de0f56c86 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 5404
diff changeset
2433 in m/ibmrt-aix.h), and here we just ignore the select error.
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2434 Cleanup occurs c/o status_notify after SIGCLD. */
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2435 FD_ZERO (&Available); /* Cannot depend on values returned */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2436 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2437 abort ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2438 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2439 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2440 else
14613
386831bc4a4e (wait_reading_process_input):
Karl Heuer <kwzh@gnu.org>
parents: 14605
diff changeset
2441 error ("select error: %s", strerror (xerrno));
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2442 }
2815
60f122cfe785 * process.c (wait_reading_process_input): If we're running
Jim Blandy <jimb@redhat.com>
parents: 2610
diff changeset
2443 #if defined(sun) && !defined(USG5_4)
9686
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
2444 else if (nfds > 0 && keyboard_bit_set (&Available)
4682
c4d471244116 (keyboard_descriptor): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4639
diff changeset
2445 && interrupt_input)
2830
006c7fbdeab7 Document sun change.
Jim Blandy <jimb@redhat.com>
parents: 2815
diff changeset
2446 /* System sometimes fails to deliver SIGIO.
006c7fbdeab7 Document sun change.
Jim Blandy <jimb@redhat.com>
parents: 2815
diff changeset
2447
006c7fbdeab7 Document sun change.
Jim Blandy <jimb@redhat.com>
parents: 2815
diff changeset
2448 David J. Mackenzie says that Emacs doesn't compile under
006c7fbdeab7 Document sun change.
Jim Blandy <jimb@redhat.com>
parents: 2815
diff changeset
2449 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
2450 conditional. "I haven't noticed any ill effects so far.
006c7fbdeab7 Document sun change.
Jim Blandy <jimb@redhat.com>
parents: 2815
diff changeset
2451 If you find a Solaris expert somewhere, they might know
006c7fbdeab7 Document sun change.
Jim Blandy <jimb@redhat.com>
parents: 2815
diff changeset
2452 better." */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2453 kill (getpid (), SIGIO);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2454 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2455
18378
22cd8d7dd5aa (wait_reading_process_input): Don't check for
Richard M. Stallman <rms@gnu.org>
parents: 18329
diff changeset
2456 #if 0 /* When polling is used, interrupt_input is 0,
22cd8d7dd5aa (wait_reading_process_input): Don't check for
Richard M. Stallman <rms@gnu.org>
parents: 18329
diff changeset
2457 so get_input_pending should read the input.
22cd8d7dd5aa (wait_reading_process_input): Don't check for
Richard M. Stallman <rms@gnu.org>
parents: 18329
diff changeset
2458 So this should not be needed. */
22cd8d7dd5aa (wait_reading_process_input): Don't check for
Richard M. Stallman <rms@gnu.org>
parents: 18329
diff changeset
2459 /* If we are using polling for input,
22cd8d7dd5aa (wait_reading_process_input): Don't check for
Richard M. Stallman <rms@gnu.org>
parents: 18329
diff changeset
2460 and we see input available, make it get read now.
22cd8d7dd5aa (wait_reading_process_input): Don't check for
Richard M. Stallman <rms@gnu.org>
parents: 18329
diff changeset
2461 Otherwise it might not actually get read for a second.
22cd8d7dd5aa (wait_reading_process_input): Don't check for
Richard M. Stallman <rms@gnu.org>
parents: 18329
diff changeset
2462 And on hpux, since we turn off polling in wait_reading_process_input,
22cd8d7dd5aa (wait_reading_process_input): Don't check for
Richard M. Stallman <rms@gnu.org>
parents: 18329
diff changeset
2463 it might never get read at all if we don't spend much time
22cd8d7dd5aa (wait_reading_process_input): Don't check for
Richard M. Stallman <rms@gnu.org>
parents: 18329
diff changeset
2464 outside of wait_reading_process_input. */
22cd8d7dd5aa (wait_reading_process_input): Don't check for
Richard M. Stallman <rms@gnu.org>
parents: 18329
diff changeset
2465 if (XINT (read_kbd) && interrupt_input
22cd8d7dd5aa (wait_reading_process_input): Don't check for
Richard M. Stallman <rms@gnu.org>
parents: 18329
diff changeset
2466 && keyboard_bit_set (&Available)
22cd8d7dd5aa (wait_reading_process_input): Don't check for
Richard M. Stallman <rms@gnu.org>
parents: 18329
diff changeset
2467 && input_polling_used ())
22cd8d7dd5aa (wait_reading_process_input): Don't check for
Richard M. Stallman <rms@gnu.org>
parents: 18329
diff changeset
2468 kill (getpid (), SIGALRM);
22cd8d7dd5aa (wait_reading_process_input): Don't check for
Richard M. Stallman <rms@gnu.org>
parents: 18329
diff changeset
2469 #endif
22cd8d7dd5aa (wait_reading_process_input): Don't check for
Richard M. Stallman <rms@gnu.org>
parents: 18329
diff changeset
2470
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2471 /* Check for keyboard input */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2472 /* If there is any, return immediately
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2473 to give it higher priority than subprocesses */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2474
15064
fb0f2804c34a (wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents: 15025
diff changeset
2475 if ((XINT (read_kbd) != 0)
14758
849458c13c0c (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 14736
diff changeset
2476 && detect_input_pending_run_timers (do_display))
14613
386831bc4a4e (wait_reading_process_input):
Karl Heuer <kwzh@gnu.org>
parents: 14605
diff changeset
2477 {
386831bc4a4e (wait_reading_process_input):
Karl Heuer <kwzh@gnu.org>
parents: 14605
diff changeset
2478 swallow_events (do_display);
14758
849458c13c0c (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 14736
diff changeset
2479 if (detect_input_pending_run_timers (do_display))
14613
386831bc4a4e (wait_reading_process_input):
Karl Heuer <kwzh@gnu.org>
parents: 14605
diff changeset
2480 break;
386831bc4a4e (wait_reading_process_input):
Karl Heuer <kwzh@gnu.org>
parents: 14605
diff changeset
2481 }
386831bc4a4e (wait_reading_process_input):
Karl Heuer <kwzh@gnu.org>
parents: 14605
diff changeset
2482
18230
2f1f942f25ca (wait_reading_process_input): Return if unread events appear.
Richard M. Stallman <rms@gnu.org>
parents: 18183
diff changeset
2483 /* If there is unread keyboard input, also return. */
2f1f942f25ca (wait_reading_process_input): Return if unread events appear.
Richard M. Stallman <rms@gnu.org>
parents: 18183
diff changeset
2484 if (XINT (read_kbd) != 0
2f1f942f25ca (wait_reading_process_input): Return if unread events appear.
Richard M. Stallman <rms@gnu.org>
parents: 18183
diff changeset
2485 && requeued_events_pending_p ())
2f1f942f25ca (wait_reading_process_input): Return if unread events appear.
Richard M. Stallman <rms@gnu.org>
parents: 18183
diff changeset
2486 break;
2f1f942f25ca (wait_reading_process_input): Return if unread events appear.
Richard M. Stallman <rms@gnu.org>
parents: 18183
diff changeset
2487
15064
fb0f2804c34a (wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents: 15025
diff changeset
2488 /* If wait_for_cell. check for keyboard input
fb0f2804c34a (wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents: 15025
diff changeset
2489 but don't run any timers.
18492
668304de6f92 (wait_reading_process_input): If wait_for_cell,
Richard M. Stallman <rms@gnu.org>
parents: 18378
diff changeset
2490 The reason for this is so that X events will be processed.
668304de6f92 (wait_reading_process_input): If wait_for_cell,
Richard M. Stallman <rms@gnu.org>
parents: 18378
diff changeset
2491 Otherwise they may have to wait until polling takes place.
668304de6f92 (wait_reading_process_input): If wait_for_cell,
Richard M. Stallman <rms@gnu.org>
parents: 18378
diff changeset
2492 That would causes delays in pasting selections, for example. */
15064
fb0f2804c34a (wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents: 15025
diff changeset
2493 if (wait_for_cell
fb0f2804c34a (wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents: 15025
diff changeset
2494 && detect_input_pending ())
fb0f2804c34a (wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents: 15025
diff changeset
2495 {
fb0f2804c34a (wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents: 15025
diff changeset
2496 swallow_events (do_display);
18492
668304de6f92 (wait_reading_process_input): If wait_for_cell,
Richard M. Stallman <rms@gnu.org>
parents: 18378
diff changeset
2497 #if 0 /* Exiting when read_kbd doesn't request that seems wrong, though. */
15064
fb0f2804c34a (wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents: 15025
diff changeset
2498 if (detect_input_pending ())
fb0f2804c34a (wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents: 15025
diff changeset
2499 break;
18492
668304de6f92 (wait_reading_process_input): If wait_for_cell,
Richard M. Stallman <rms@gnu.org>
parents: 18378
diff changeset
2500 #endif
15064
fb0f2804c34a (wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents: 15025
diff changeset
2501 }
fb0f2804c34a (wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents: 15025
diff changeset
2502
2200
5e58643bb169 (wait_reading_process_input): New option to wait
Richard M. Stallman <rms@gnu.org>
parents: 2120
diff changeset
2503 /* 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
2504 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
2505 break;
5e58643bb169 (wait_reading_process_input): New option to wait
Richard M. Stallman <rms@gnu.org>
parents: 2120
diff changeset
2506
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
2507 #ifdef SIGIO
18378
22cd8d7dd5aa (wait_reading_process_input): Don't check for
Richard M. Stallman <rms@gnu.org>
parents: 18329
diff changeset
2508 /* If we think we have keyboard input waiting, but didn't get SIGIO,
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2509 go read it. This can happen with X on BSD after logging out.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2510 In that case, there really is no input and no SIGIO,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2511 but select says there is input. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2512
4682
c4d471244116 (keyboard_descriptor): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4639
diff changeset
2513 if (XINT (read_kbd) && interrupt_input
18378
22cd8d7dd5aa (wait_reading_process_input): Don't check for
Richard M. Stallman <rms@gnu.org>
parents: 18329
diff changeset
2514 && keyboard_bit_set (&Available))
14736
b17ec81a6294 (wait_reading_process_input): Use getpid when generating SIGIO.
Richard M. Stallman <rms@gnu.org>
parents: 14671
diff changeset
2515 kill (getpid (), SIGIO);
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
2516 #endif
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2517
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2518 if (! wait_proc)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2519 got_some_input |= nfds > 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2520
624
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
2521 /* 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
2522 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
2523 if (XINT (read_kbd) || wait_for_cell)
624
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
2524 do_pending_window_change ();
2bb7f23b7ea5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
2525
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
2526 /* Check for data from a process. */
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
2527 /* Really FIRST_PROC_DESC should be 0 on Unix,
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
2528 but this is safer in the short run. */
9686
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
2529 for (channel = 0; channel <= max_process_desc; channel++)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2530 {
9686
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
2531 if (FD_ISSET (channel, &Available)
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
2532 && FD_ISSET (channel, &non_keyboard_wait_mask))
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2533 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2534 int nread;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2535
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2536 /* If waiting for this channel, arrange to return as
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2537 soon as no more input to be processed. No more
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2538 waiting. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2539 if (wait_channel == channel)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2540 {
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
2541 wait_channel = -1;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2542 time_limit = -1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2543 got_some_input = 1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2544 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2545 proc = chan_process[channel];
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2546 if (NILP (proc))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2547 continue;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2548
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2549 /* Read data from the process, starting with our
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2550 buffered-ahead character if we have one. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2551
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2552 nread = read_process_output (proc, channel);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2553 if (nread > 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2554 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2555 /* Since read_process_output can run a filter,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2556 which can call accept-process-output,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2557 don't try to read from any other processes
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2558 before doing the select again. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2559 FD_ZERO (&Available);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2560
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2561 if (do_display)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2562 redisplay_preserve_echo_area ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2563 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2564 #ifdef EWOULDBLOCK
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2565 else if (nread == -1 && errno == EWOULDBLOCK)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2566 ;
15405
c27bb6e69e2d (wait_reading_process_input): Move the O_NONBLOCK and
Richard M. Stallman <rms@gnu.org>
parents: 15368
diff changeset
2567 #endif
15406
7c205bc80624 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 15405
diff changeset
2568 /* ISC 4.1 defines both EWOULDBLOCK and O_NONBLOCK,
7c205bc80624 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 15405
diff changeset
2569 and Emacs uses O_NONBLOCK, so what we get is EAGAIN. */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2570 #ifdef O_NONBLOCK
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2571 else if (nread == -1 && errno == EAGAIN)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2572 ;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2573 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2574 #ifdef O_NDELAY
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2575 else if (nread == -1 && errno == EAGAIN)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2576 ;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2577 /* Note that we cannot distinguish between no input
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2578 available now and a closed pipe.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2579 With luck, a closed pipe will be accompanied by
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2580 subprocess termination and SIGCHLD. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2581 else if (nread == 0 && !NETCONN_P (proc))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2582 ;
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2583 #endif /* O_NDELAY */
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2584 #endif /* O_NONBLOCK */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2585 #ifdef HAVE_PTYS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2586 /* On some OSs with ptys, when the process on one end of
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2587 a pty exits, the other end gets an error reading with
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2588 errno = EIO instead of getting an EOF (0 bytes read).
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2589 Therefore, if we get an error reading and errno =
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2590 EIO, just continue, because the child process has
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2591 exited and should clean itself up soon (e.g. when we
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2592 get a SIGCHLD). */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2593 else if (nread == -1 && errno == EIO)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2594 ;
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2595 #endif /* HAVE_PTYS */
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2596 /* If we can detect process termination, don't consider the process
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2597 gone just because its pipe is closed. */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2598 #ifdef SIGCHLD
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2599 else if (nread == 0 && !NETCONN_P (proc))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2600 ;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2601 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2602 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2603 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2604 /* Preserve status of processes already terminated. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2605 XSETINT (XPROCESS (proc)->tick, ++process_tick);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2606 deactivate_process (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2607 if (!NILP (XPROCESS (proc)->raw_status_low))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2608 update_status (XPROCESS (proc));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2609 if (EQ (XPROCESS (proc)->status, Qrun))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2610 XPROCESS (proc)->status
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2611 = Fcons (Qexit, Fcons (make_number (256), Qnil));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2612 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2613 }
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2614 } /* end for each file descriptor */
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2615 } /* end while exit conditions not met */
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2616
8570
dd3dfde8f973 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 8390
diff changeset
2617 waiting_for_user_input_p = 0;
dd3dfde8f973 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 8390
diff changeset
2618
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2619 /* If calling from keyboard input, do not quit
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2620 since we want to return C-g as an input character.
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2621 Otherwise, do pending quit if requested. */
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
2622 if (XINT (read_kbd) >= 0)
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2623 {
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2624 /* Prevent input_pending from remaining set if we quit. */
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2625 clear_input_pending ();
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2626 QUIT;
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 638
diff changeset
2627 }
15661
96debed5fb36 (wait_reading_process_input) [hpux]: Workaround for
Karl Heuer <kwzh@gnu.org>
parents: 15406
diff changeset
2628 #ifdef hpux
96debed5fb36 (wait_reading_process_input) [hpux]: Workaround for
Karl Heuer <kwzh@gnu.org>
parents: 15406
diff changeset
2629 /* AlainF 5-Jul-1996
96debed5fb36 (wait_reading_process_input) [hpux]: Workaround for
Karl Heuer <kwzh@gnu.org>
parents: 15406
diff changeset
2630 HP-UX 10.10 seems to have problems with signals coming in
96debed5fb36 (wait_reading_process_input) [hpux]: Workaround for
Karl Heuer <kwzh@gnu.org>
parents: 15406
diff changeset
2631 Causes "poll: interrupted system call" messages when Emacs is run
96debed5fb36 (wait_reading_process_input) [hpux]: Workaround for
Karl Heuer <kwzh@gnu.org>
parents: 15406
diff changeset
2632 in an X window
96debed5fb36 (wait_reading_process_input) [hpux]: Workaround for
Karl Heuer <kwzh@gnu.org>
parents: 15406
diff changeset
2633 Turn periodic alarms back on */
18378
22cd8d7dd5aa (wait_reading_process_input): Don't check for
Richard M. Stallman <rms@gnu.org>
parents: 18329
diff changeset
2634 start_polling ();
15661
96debed5fb36 (wait_reading_process_input) [hpux]: Workaround for
Karl Heuer <kwzh@gnu.org>
parents: 15406
diff changeset
2635 #endif
96debed5fb36 (wait_reading_process_input) [hpux]: Workaround for
Karl Heuer <kwzh@gnu.org>
parents: 15406
diff changeset
2636
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2637 return got_some_input;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2638 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2639
9030
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2640 /* Given a list (FUNCTION ARGS...), apply FUNCTION to the ARGS. */
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2641
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2642 static Lisp_Object
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2643 read_process_output_call (fun_and_args)
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2644 Lisp_Object fun_and_args;
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2645 {
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2646 return apply1 (XCONS (fun_and_args)->car, XCONS (fun_and_args)->cdr);
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2647 }
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2648
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2649 static Lisp_Object
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2650 read_process_output_error_handler (error)
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2651 Lisp_Object error;
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2652 {
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2653 cmd_error_internal (error, "error in process filter: ");
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2654 Vinhibit_quit = Qt;
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2655 update_echo_area ();
11277
d4547e4b0aab (read_process_output_error_handler)
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2656 Fsleep_for (make_number (2), Qnil);
9030
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2657 }
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2658
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2659 /* Read pending output from the process channel,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2660 starting with our buffered-ahead character if we have one.
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2661 Yield number of decoded characters read.
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2662
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2663 This function reads at most 1024 characters.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2664 If you want to read all available subprocess output,
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2665 you must call it repeatedly until it returns zero.
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2666
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2667 The characters read are decoded according to PROC's coding-system
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2668 for decoding. */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2669
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2670 read_process_output (proc, channel)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2671 Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2672 register int channel;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2673 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2674 register int nchars;
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2675 char *chars;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2676 #ifdef VMS
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2677 int chars_allocated = 0; /* If 1, `chars' should be freed later. */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2678 #else
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2679 char buf[1024];
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2680 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2681 register Lisp_Object outstream;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2682 register struct buffer *old = current_buffer;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2683 register struct Lisp_Process *p = XPROCESS (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2684 register int opoint;
17110
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
2685 struct coding_system *coding = proc_decode_coding_system[channel];
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2686 int chars_in_decoding_buf = 0; /* If 1, `chars' points
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2687 XSTRING (p->decoding_buf)->data. */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2688
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2689 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2690 VMS_PROC_STUFF *vs, *get_vms_process_pointer();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2691
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2692 vs = get_vms_process_pointer (p->pid);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2693 if (vs)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2694 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2695 if (!vs->iosb[0])
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2696 return(0); /* Really weird if it does this */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2697 if (!(vs->iosb[0] & 1))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2698 return -1; /* I/O error */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2699 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2700 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2701 error ("Could not get VMS process pointer");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2702 chars = vs->inputBuffer;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2703 nchars = clean_vms_buffer (chars, vs->iosb[1]);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2704 if (nchars <= 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2705 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2706 start_vms_process_read (vs); /* Crank up the next read on the process */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2707 return 1; /* Nothing worth printing, say we got 1 */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2708 }
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2709 if (coding->carryover_size)
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2710 {
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2711 /* The data carried over in the previous decoding should be
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2712 prepended to the new data read to decode all together. */
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2713 char *buf = (char *) xmalloc (nchars + coding->carryover_size);
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2714
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2715 bcopy (coding->carryover, buf, coding->carryover_size);
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2716 bcopy (chars, buf + coding->carryover_size, nchars);
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2717 chars = buf;
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2718 chars_allocated = 1;
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2719 }
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2720 #else /* not VMS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2721
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2722 if (coding->carryover_size)
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2723 /* The data carried over in the previous decoding should be
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2724 prepended to the new data read to decode all together. */
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2725 bcopy (coding->carryover, buf, coding->carryover_size);
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2726
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2727 if (proc_buffered_char[channel] < 0)
18512
6f986049dff1 (READ_CHILD_OUTPUT): Macro deleted.
Richard M. Stallman <rms@gnu.org>
parents: 18492
diff changeset
2728 nchars = read (channel, buf + coding->carryover_size,
6f986049dff1 (READ_CHILD_OUTPUT): Macro deleted.
Richard M. Stallman <rms@gnu.org>
parents: 18492
diff changeset
2729 (sizeof buf) - coding->carryover_size);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2730 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2731 {
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2732 buf[coding->carryover_size] = proc_buffered_char[channel];
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2733 proc_buffered_char[channel] = -1;
18512
6f986049dff1 (READ_CHILD_OUTPUT): Macro deleted.
Richard M. Stallman <rms@gnu.org>
parents: 18492
diff changeset
2734 nchars = read (channel, buf + coding->carryover_size + 1,
6f986049dff1 (READ_CHILD_OUTPUT): Macro deleted.
Richard M. Stallman <rms@gnu.org>
parents: 18492
diff changeset
2735 (sizeof buf) - coding->carryover_size - 1);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2736 if (nchars < 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2737 nchars = 1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2738 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2739 nchars = nchars + 1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2740 }
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2741 chars = buf;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2742 #endif /* not VMS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2743
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2744 /* At this point, NCHARS holds number of characters just received
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2745 (including the one in proc_buffered_char[channel]). */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2746 if (nchars <= 0) return nchars;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2747
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2748 /* Now set NCHARS how many bytes we must decode. */
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2749 nchars += coding->carryover_size;
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2750
18974
ded7c036e1ca (read_process_output): Use new macro
Kenichi Handa <handa@m17n.org>
parents: 18946
diff changeset
2751 if (! CODING_REQUIRE_NO_CONVERSION (coding))
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2752 {
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2753 int require = decoding_buffer_size (coding, nchars);
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2754 int consumed, produced;
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2755
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2756 if (XSTRING (p->decoding_buf)->size < require)
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2757 p->decoding_buf = make_uninit_string (require);
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2758 produced = decode_coding (coding, chars, XSTRING (p->decoding_buf)->data,
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2759 nchars, XSTRING (p->decoding_buf)->size,
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2760 &consumed);
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2761
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2762 /* New coding-system might be found by `decode_coding'. */
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2763 if (!EQ (p->decode_coding_system, coding->symbol))
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2764 {
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2765 p->decode_coding_system = coding->symbol;
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2766 setup_coding_system (coding->symbol,
17110
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
2767 proc_decode_coding_system[channel]);
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2768 /* If coding-system for encoding is not yet decided, we set it
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2769 as the same as coding-system for decoding. */
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2770 if (NILP (p->encode_coding_system))
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2771 {
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2772 p->encode_coding_system = coding->symbol;
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2773 setup_coding_system (coding->symbol,
17110
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
2774 proc_encode_coding_system[channel]);
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2775 }
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2776 }
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2777 #ifdef VMS
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2778 /* Now we don't need the contents of `chars'. */
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2779 if (chars_allocated)
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2780 free (chars);
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2781 #endif
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2782 if (produced == 0)
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2783 return 0;
18708
965c5ee65d86 (read_process_output): Add cast.
Richard M. Stallman <rms@gnu.org>
parents: 18648
diff changeset
2784 chars = (char *) XSTRING (p->decoding_buf)->data;
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2785 nchars = produced;
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2786 chars_in_decoding_buf = 1;
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2787 }
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2788 #ifdef VMS
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2789 else if (chars_allocated)
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2790 {
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2791 /* Although we don't have to decode the received data, we must
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2792 move it to an area which we don't have to free. */
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2793 if (! STRINGP (p->decoding_buf)
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2794 || XSTRING (p->decoding_buf)->size < nchars)
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2795 p->decoding_buf = make_uninit_string (nchars);
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2796 bcopy (chars, XSTRING (p->decoding_buf)->data, nchars);
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2797 free (chars);
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2798 chars = XSTRING (p->decoding_buf)->data;
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2799 chars_in_decoding_buf = 1;
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2800 }
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2801 #endif
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2802
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2803 outstream = p->filter;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2804 if (!NILP (outstream))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2805 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2806 /* We inhibit quit here instead of just catching it so that
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2807 hitting ^G when a filter happens to be running won't screw
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2808 it up. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2809 int count = specpdl_ptr - specpdl;
3510
b4a552ca4e99 (read_process_output): Deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents: 3238
diff changeset
2810 Lisp_Object odeactivate;
10914
413d44c0bd41 (exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents: 10744
diff changeset
2811 Lisp_Object obuffer, okeymap;
16644
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
2812 int outer_running_asynch_code = running_asynch_code;
10914
413d44c0bd41 (exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents: 10744
diff changeset
2813
413d44c0bd41 (exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents: 10744
diff changeset
2814 /* No need to gcpro these, because all we do with them later
413d44c0bd41 (exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents: 10744
diff changeset
2815 is test them for EQness, and none of them should be a string. */
3510
b4a552ca4e99 (read_process_output): Deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents: 3238
diff changeset
2816 odeactivate = Vdeactivate_mark;
10914
413d44c0bd41 (exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents: 10744
diff changeset
2817 XSETBUFFER (obuffer, current_buffer);
413d44c0bd41 (exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents: 10744
diff changeset
2818 okeymap = current_buffer->keymap;
3510
b4a552ca4e99 (read_process_output): Deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents: 3238
diff changeset
2819
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2820 specbind (Qinhibit_quit, Qt);
8231
5226ed89c1a6 (Qlast_nonmenu_event): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8063
diff changeset
2821 specbind (Qlast_nonmenu_event, Qt);
9030
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2822
16644
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
2823 /* In case we get recursively called,
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
2824 and we already saved the match data nonrecursively,
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
2825 save the same match data in safely recursive fashion. */
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
2826 if (outer_running_asynch_code)
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
2827 {
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
2828 Lisp_Object tem;
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
2829 /* Don't clobber the CURRENT match data, either! */
16728
309a750fd5c0 (read_process_output, exec_sentinel):
Richard M. Stallman <rms@gnu.org>
parents: 16718
diff changeset
2830 tem = Fmatch_data (Qnil, Qnil);
16644
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
2831 restore_match_data ();
16728
309a750fd5c0 (read_process_output, exec_sentinel):
Richard M. Stallman <rms@gnu.org>
parents: 16718
diff changeset
2832 record_unwind_protect (Fstore_match_data, Fmatch_data (Qnil, Qnil));
16644
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
2833 Fstore_match_data (tem);
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
2834 }
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
2835
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
2836 /* For speed, if a search happens within this code,
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
2837 save the match data in a special nonrecursive fashion. */
10032
f689803caa92 Added code for automatically saving and restoring the match data
Francesco Potortì <pot@gnu.org>
parents: 9969
diff changeset
2838 running_asynch_code = 1;
16644
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
2839
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
2840 /* Read and dispose of the process output. */
9030
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2841 internal_condition_case_1 (read_process_output_call,
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2842 Fcons (outstream,
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2843 Fcons (proc,
10032
f689803caa92 Added code for automatically saving and restoring the match data
Francesco Potortì <pot@gnu.org>
parents: 9969
diff changeset
2844 Fcons (make_string (chars,
f689803caa92 Added code for automatically saving and restoring the match data
Francesco Potortì <pot@gnu.org>
parents: 9969
diff changeset
2845 nchars),
9030
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2846 Qnil))),
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2847 !NILP (Vdebug_on_error) ? Qnil : Qerror,
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
2848 read_process_output_error_handler);
16644
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
2849
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
2850 /* If we saved the match data nonrecursively, restore it now. */
10032
f689803caa92 Added code for automatically saving and restoring the match data
Francesco Potortì <pot@gnu.org>
parents: 9969
diff changeset
2851 restore_match_data ();
16644
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
2852 running_asynch_code = outer_running_asynch_code;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2853
3666
c7ff787b096f (read_process_output): Don't deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents: 3608
diff changeset
2854 /* 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
2855 Vdeactivate_mark = odeactivate;
b4a552ca4e99 (read_process_output): Deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents: 3238
diff changeset
2856
12808
4db1f387e85f (read_process_output, exec_sentinel): Call
Richard M. Stallman <rms@gnu.org>
parents: 12749
diff changeset
2857 #if 0 /* Call record_asynch_buffer_change unconditionally,
4db1f387e85f (read_process_output, exec_sentinel): Call
Richard M. Stallman <rms@gnu.org>
parents: 12749
diff changeset
2858 because we might have changed minor modes or other things
4db1f387e85f (read_process_output, exec_sentinel): Call
Richard M. Stallman <rms@gnu.org>
parents: 12749
diff changeset
2859 that affect key bindings. */
10914
413d44c0bd41 (exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents: 10744
diff changeset
2860 if (! EQ (Fcurrent_buffer (), obuffer)
413d44c0bd41 (exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents: 10744
diff changeset
2861 || ! EQ (current_buffer->keymap, okeymap))
12808
4db1f387e85f (read_process_output, exec_sentinel): Call
Richard M. Stallman <rms@gnu.org>
parents: 12749
diff changeset
2862 #endif
13159
2af96ac471bc (exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents: 12808
diff changeset
2863 /* But do it only if the caller is actually going to read events.
2af96ac471bc (exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents: 12808
diff changeset
2864 Otherwise there's no need to make him wake up, and it could
2af96ac471bc (exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents: 12808
diff changeset
2865 cause trouble (for example it would make Fsit_for return). */
2af96ac471bc (exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents: 12808
diff changeset
2866 if (waiting_for_user_input_p == -1)
2af96ac471bc (exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents: 12808
diff changeset
2867 record_asynch_buffer_change ();
6748
b1cde622fa65 (read_process_output): If buffer changes, record that fact.
Karl Heuer <kwzh@gnu.org>
parents: 6569
diff changeset
2868
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2869 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2870 start_vms_process_read (vs);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2871 #endif
5561
fd7524d61a8d (read_process_output): Supply second arg to unbind_to.
Richard M. Stallman <rms@gnu.org>
parents: 5548
diff changeset
2872 unbind_to (count, Qnil);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2873 return nchars;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2874 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2875
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2876 /* If no filter, write into buffer if it isn't dead. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2877 if (!NILP (p->buffer) && !NILP (XBUFFER (p->buffer)->name))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2878 {
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2879 Lisp_Object old_read_only;
17604
77b137e2d9a7 (read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents: 17247
diff changeset
2880 int old_begv, old_zv;
3510
b4a552ca4e99 (read_process_output): Deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents: 3238
diff changeset
2881 Lisp_Object odeactivate;
17604
77b137e2d9a7 (read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents: 17247
diff changeset
2882 int before;
3510
b4a552ca4e99 (read_process_output): Deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents: 3238
diff changeset
2883
b4a552ca4e99 (read_process_output): Deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents: 3238
diff changeset
2884 odeactivate = Vdeactivate_mark;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2885
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2886 Fset_buffer (p->buffer);
16039
855c8d8ba0f0 Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents: 15895
diff changeset
2887 opoint = PT;
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2888 old_read_only = current_buffer->read_only;
17604
77b137e2d9a7 (read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents: 17247
diff changeset
2889 old_begv = BEGV;
77b137e2d9a7 (read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents: 17247
diff changeset
2890 old_zv = ZV;
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2891
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2892 current_buffer->read_only = Qnil;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2893
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2894 /* Insert new output into buffer
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2895 at the current end-of-output marker,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2896 thus preserving logical ordering of input and output. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2897 if (XMARKER (p->mark)->buffer)
5404
a609e717764d (read_process_output): Use clip_to_bounds when moving
Richard M. Stallman <rms@gnu.org>
parents: 5347
diff changeset
2898 SET_PT (clip_to_bounds (BEGV, marker_position (p->mark), ZV));
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2899 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2900 SET_PT (ZV);
17604
77b137e2d9a7 (read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents: 17247
diff changeset
2901 before = PT;
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2902
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2903 /* 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
2904 the restriction and widen. */
16039
855c8d8ba0f0 Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents: 15895
diff changeset
2905 if (! (BEGV <= PT && 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
2906 Fwiden ();
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2907
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2908 /* Insert before markers in case we are inserting where
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2909 the buffer's mark is, and the user's next command is Meta-y. */
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2910 if (chars_in_decoding_buf)
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2911 insert_from_string_before_markers (p->decoding_buf, 0, nchars, 0);
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2912 else
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2913 insert_before_markers (chars, nchars);
16039
855c8d8ba0f0 Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents: 15895
diff changeset
2914 Fset_marker (p->mark, make_number (PT), 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
2915
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2916 update_mode_lines++;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2917
17604
77b137e2d9a7 (read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents: 17247
diff changeset
2918 /* Make sure opoint and the old restrictions
77b137e2d9a7 (read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents: 17247
diff changeset
2919 float ahead of any new text just as point would. */
77b137e2d9a7 (read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents: 17247
diff changeset
2920 if (opoint >= before)
77b137e2d9a7 (read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents: 17247
diff changeset
2921 opoint += PT - before;
77b137e2d9a7 (read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents: 17247
diff changeset
2922 if (old_begv > before)
77b137e2d9a7 (read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents: 17247
diff changeset
2923 old_begv += PT - before;
77b137e2d9a7 (read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents: 17247
diff changeset
2924 if (old_zv >= before)
77b137e2d9a7 (read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents: 17247
diff changeset
2925 old_zv += PT - before;
77b137e2d9a7 (read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents: 17247
diff changeset
2926
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2927 /* If the restriction isn't what it should be, set it. */
17604
77b137e2d9a7 (read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents: 17247
diff changeset
2928 if (old_begv != BEGV || old_zv != ZV)
77b137e2d9a7 (read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents: 17247
diff changeset
2929 Fnarrow_to_region (make_number (old_begv), make_number (old_zv));
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2930
3666
c7ff787b096f (read_process_output): Don't deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents: 3608
diff changeset
2931 /* 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
2932 Vdeactivate_mark = odeactivate;
b4a552ca4e99 (read_process_output): Deactivate the mark.
Richard M. Stallman <rms@gnu.org>
parents: 3238
diff changeset
2933
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
2934 current_buffer->read_only = old_read_only;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2935 SET_PT (opoint);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2936 set_buffer_internal (old);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2937 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2938 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2939 start_vms_process_read (vs);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2940 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2941 return nchars;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2942 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2943
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2944 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
2945 0, 0, 0,
7352
ef89b78c1a92 (wait_reading_process_input): Don't call prepare_menu_bars
Richard M. Stallman <rms@gnu.org>
parents: 7266
diff changeset
2946 "Returns non-nil if emacs is waiting for input from the user.\n\
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2947 This is intended for use by asynchronous process output filters and sentinels.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2948 ()
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2949 {
7352
ef89b78c1a92 (wait_reading_process_input): Don't call prepare_menu_bars
Richard M. Stallman <rms@gnu.org>
parents: 7266
diff changeset
2950 return (waiting_for_user_input_p ? Qt : Qnil);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2951 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2952
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2953 /* Sending data to subprocess */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2954
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2955 jmp_buf send_process_frame;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2956
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2957 SIGTYPE
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2958 send_process_trap ()
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2959 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2960 #ifdef BSD4_1
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2961 sigrelse (SIGPIPE);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2962 sigrelse (SIGALRM);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2963 #endif /* BSD4_1 */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2964 longjmp (send_process_frame, 1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2965 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2966
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2967 /* Send some data to process PROC.
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2968 BUF is the beginning of the data; LEN is the number of characters.
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2969 OBJECT is the Lisp object that the data comes from.
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2970
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2971 The data is encoded by PROC's coding-system for encoding before it
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2972 is sent. But if the data ends at the middle of multi-byte
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2973 representation, that incomplete sequence of bytes are sent without
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2974 being encoded. Should we store them in a buffer to prepend them to
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2975 the data send later? */
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2976
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2977 send_process (proc, buf, len, object)
11926
40d7e6f04ebe (create_process, send_process): Add volatile qualifiers.
Karl Heuer <kwzh@gnu.org>
parents: 11845
diff changeset
2978 volatile Lisp_Object proc;
18585
64184009811b (send_process): Make buf and temp_buf `unsigned char *'.
Richard M. Stallman <rms@gnu.org>
parents: 18540
diff changeset
2979 unsigned char *buf;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2980 int len;
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
2981 Lisp_Object object;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2982 {
11926
40d7e6f04ebe (create_process, send_process): Add volatile qualifiers.
Karl Heuer <kwzh@gnu.org>
parents: 11845
diff changeset
2983 /* Use volatile to protect variables from being clobbered by longjmp. */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2984 int rv;
11926
40d7e6f04ebe (create_process, send_process): Add volatile qualifiers.
Karl Heuer <kwzh@gnu.org>
parents: 11845
diff changeset
2985 volatile unsigned char *procname = XSTRING (XPROCESS (proc)->name)->data;
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
2986 struct coding_system *coding;
15895
85112cca0b22 (send_process): GCPRO object.
Richard M. Stallman <rms@gnu.org>
parents: 15717
diff changeset
2987 struct gcpro gcpro1;
85112cca0b22 (send_process): GCPRO object.
Richard M. Stallman <rms@gnu.org>
parents: 15717
diff changeset
2988
85112cca0b22 (send_process): GCPRO object.
Richard M. Stallman <rms@gnu.org>
parents: 15717
diff changeset
2989 GCPRO1 (object);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2990
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2991 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2992 struct Lisp_Process *p = XPROCESS (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2993 VMS_PROC_STUFF *vs, *get_vms_process_pointer();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2994 #endif /* VMS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2995
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2996 if (! NILP (XPROCESS (proc)->raw_status_low))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2997 update_status (XPROCESS (proc));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2998 if (! EQ (XPROCESS (proc)->status, Qrun))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2999 error ("Process %s not running", procname);
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3000 if (XINT (XPROCESS (proc)->outfd) < 0)
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3001 error ("Output file descriptor of %s is closed", procname);
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3002
17110
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
3003 coding = proc_encode_coding_system[XINT (XPROCESS (proc)->outfd)];
18974
ded7c036e1ca (read_process_output): Use new macro
Kenichi Handa <handa@m17n.org>
parents: 18946
diff changeset
3004 if (! CODING_MAY_REQUIRE_NO_CONVERSION (coding))
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3005 {
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3006 int require = encoding_buffer_size (coding, len);
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3007 int offset, dummy;
18585
64184009811b (send_process): Make buf and temp_buf `unsigned char *'.
Richard M. Stallman <rms@gnu.org>
parents: 18540
diff changeset
3008 unsigned char *temp_buf = NULL;
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3009
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3010 /* Remember the offset of data because a string or a buffer may
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3011 be relocated. Setting OFFSET to -1 means we don't have to
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3012 care relocation. */
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3013 offset = (BUFFERP (object)
18585
64184009811b (send_process): Make buf and temp_buf `unsigned char *'.
Richard M. Stallman <rms@gnu.org>
parents: 18540
diff changeset
3014 ? BUF_PTR_CHAR_POS (XBUFFER (object), buf)
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3015 : (STRINGP (object)
18585
64184009811b (send_process): Make buf and temp_buf `unsigned char *'.
Richard M. Stallman <rms@gnu.org>
parents: 18540
diff changeset
3016 ? offset = buf - XSTRING (object)->data
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3017 : -1));
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3018
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3019 if (coding->carryover_size > 0)
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3020 {
18585
64184009811b (send_process): Make buf and temp_buf `unsigned char *'.
Richard M. Stallman <rms@gnu.org>
parents: 18540
diff changeset
3021 temp_buf = (unsigned char *) xmalloc (len + coding->carryover_size);
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3022
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3023 if (offset >= 0)
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3024 {
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3025 if (BUFFERP (object))
18585
64184009811b (send_process): Make buf and temp_buf `unsigned char *'.
Richard M. Stallman <rms@gnu.org>
parents: 18540
diff changeset
3026 buf = BUF_CHAR_ADDRESS (XBUFFER (object), offset);
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3027 else if (STRINGP (object))
18585
64184009811b (send_process): Make buf and temp_buf `unsigned char *'.
Richard M. Stallman <rms@gnu.org>
parents: 18540
diff changeset
3028 buf = offset + XSTRING (object)->data;
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3029 /* Now we don't have to care relocation. */
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3030 offset = -1;
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3031 }
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3032 bcopy (coding->carryover, temp_buf, coding->carryover_size);
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3033 bcopy (buf, temp_buf + coding->carryover_size, len);
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3034 buf = temp_buf;
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3035 }
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3036
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3037 if (XSTRING (XPROCESS (proc)->encoding_buf)->size < require)
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3038 {
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3039 XPROCESS (proc)->encoding_buf = make_uninit_string (require);
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3040
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3041 if (offset >= 0)
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3042 {
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3043 if (BUFFERP (object))
18585
64184009811b (send_process): Make buf and temp_buf `unsigned char *'.
Richard M. Stallman <rms@gnu.org>
parents: 18540
diff changeset
3044 buf = BUF_CHAR_ADDRESS (XBUFFER (object), offset);
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3045 else if (STRINGP (object))
18585
64184009811b (send_process): Make buf and temp_buf `unsigned char *'.
Richard M. Stallman <rms@gnu.org>
parents: 18540
diff changeset
3046 buf = offset + XSTRING (object)->data;
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3047 }
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3048 }
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3049 object = XPROCESS (proc)->encoding_buf;
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3050 len = encode_coding (coding, buf, XSTRING (object)->data,
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3051 len, XSTRING (object)->size, &dummy);
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3052 buf = XSTRING (object)->data;
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3053 if (temp_buf)
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3054 xfree (temp_buf);
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3055 }
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3056
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3057 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3058 vs = get_vms_process_pointer (p->pid);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3059 if (vs == 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3060 error ("Could not find this process: %x", p->pid);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3061 else if (write_to_vms_process (vs, buf, len))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3062 ;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3063 #else
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3064
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3065 if (pty_max_bytes == 0)
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3066 {
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3067 #if defined (HAVE_FPATHCONF) && defined (_PC_MAX_CANON)
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3068 pty_max_bytes = fpathconf (XFASTINT (XPROCESS (proc)->outfd),
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3069 _PC_MAX_CANON);
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3070 if (pty_max_bytes < 0)
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3071 pty_max_bytes = 250;
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3072 #else
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3073 pty_max_bytes = 250;
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3074 #endif
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3075 /* Deduct one, to leave space for the eof. */
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3076 pty_max_bytes--;
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3077 }
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3078
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3079 if (!setjmp (send_process_frame))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3080 while (len > 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3081 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3082 int this = len;
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
3083 SIGTYPE (*old_sigpipe)();
6158
6b81b2575071 Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 5891
diff changeset
3084 int flush_pty = 0;
6b81b2575071 Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 5891
diff changeset
3085
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3086 /* Decide how much data we can send in one batch.
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3087 Long lines need to be split into multiple batches. */
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3088 if (!NILP (XPROCESS (proc)->pty_flag))
6158
6b81b2575071 Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 5891
diff changeset
3089 {
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3090 /* Starting this at zero is always correct when not the first iteration
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3091 because the previous iteration ended by sending C-d.
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3092 It may not be correct for the first iteration
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3093 if a partial line was sent in a separate send_process call.
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3094 If that proves worth handling, we need to save linepos
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3095 in the process object. */
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3096 int linepos = 0;
18585
64184009811b (send_process): Make buf and temp_buf `unsigned char *'.
Richard M. Stallman <rms@gnu.org>
parents: 18540
diff changeset
3097 unsigned char *ptr = buf;
64184009811b (send_process): Make buf and temp_buf `unsigned char *'.
Richard M. Stallman <rms@gnu.org>
parents: 18540
diff changeset
3098 unsigned char *end = buf + len;
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3099
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3100 /* Scan through this text for a line that is too long. */
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3101 while (ptr != end && linepos < pty_max_bytes)
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3102 {
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3103 if (*ptr == '\n')
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3104 linepos = 0;
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3105 else
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3106 linepos++;
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3107 ptr++;
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3108 }
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3109 /* If we found one, break the line there
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3110 and put in a C-d to force the buffer through. */
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3111 this = ptr - buf;
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3112 }
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3113
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3114 /* Send this batch, using one or more write calls. */
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3115 while (this > 0)
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3116 {
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3117 old_sigpipe = (SIGTYPE (*) ()) signal (SIGPIPE, send_process_trap);
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3118 rv = write (XINT (XPROCESS (proc)->outfd), buf, this);
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3119 signal (SIGPIPE, old_sigpipe);
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3120
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3121 if (rv < 0)
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3122 {
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3123 if (0
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3124 #ifdef EWOULDBLOCK
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3125 || errno == EWOULDBLOCK
6158
6b81b2575071 Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 5891
diff changeset
3126 #endif
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3127 #ifdef EAGAIN
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3128 || errno == EAGAIN
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3129 #endif
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3130 )
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3131 /* Buffer is full. Wait, accepting input;
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3132 that may allow the program
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3133 to finish doing output and read more. */
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3134 {
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3135 Lisp_Object zero;
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3136 int offset;
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3137
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3138 /* Running filters might relocate buffers or strings.
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3139 Arrange to relocate BUF. */
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3140 if (BUFFERP (object))
18585
64184009811b (send_process): Make buf and temp_buf `unsigned char *'.
Richard M. Stallman <rms@gnu.org>
parents: 18540
diff changeset
3141 offset = BUF_PTR_CHAR_POS (XBUFFER (object), buf);
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3142 else if (STRINGP (object))
18585
64184009811b (send_process): Make buf and temp_buf `unsigned char *'.
Richard M. Stallman <rms@gnu.org>
parents: 18540
diff changeset
3143 offset = buf - XSTRING (object)->data;
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3144
9318
a14cc1712337 (make_process, list_processes_1, create_process, Faccept_process_output,
Karl Heuer <kwzh@gnu.org>
parents: 9277
diff changeset
3145 XSETFASTINT (zero, 0);
16718
ea26040865cb (send_process) [EMACS_HAS_USECS]:
Richard M. Stallman <rms@gnu.org>
parents: 16644
diff changeset
3146 #ifdef EMACS_HAS_USECS
ea26040865cb (send_process) [EMACS_HAS_USECS]:
Richard M. Stallman <rms@gnu.org>
parents: 16644
diff changeset
3147 wait_reading_process_input (0, 20000, zero, 0);
ea26040865cb (send_process) [EMACS_HAS_USECS]:
Richard M. Stallman <rms@gnu.org>
parents: 16644
diff changeset
3148 #else
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3149 wait_reading_process_input (1, 0, zero, 0);
16718
ea26040865cb (send_process) [EMACS_HAS_USECS]:
Richard M. Stallman <rms@gnu.org>
parents: 16644
diff changeset
3150 #endif
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3151
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3152 if (BUFFERP (object))
18585
64184009811b (send_process): Make buf and temp_buf `unsigned char *'.
Richard M. Stallman <rms@gnu.org>
parents: 18540
diff changeset
3153 buf = BUF_CHAR_ADDRESS (XBUFFER (object), offset);
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3154 else if (STRINGP (object))
18585
64184009811b (send_process): Make buf and temp_buf `unsigned char *'.
Richard M. Stallman <rms@gnu.org>
parents: 18540
diff changeset
3155 buf = offset + XSTRING (object)->data;
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3156
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3157 rv = 0;
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3158 }
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3159 else
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3160 /* This is a real error. */
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3161 report_file_error ("writing to process", Fcons (proc, Qnil));
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3162 }
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3163 buf += rv;
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3164 len -= rv;
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3165 this -= rv;
6158
6b81b2575071 Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 5891
diff changeset
3166 }
6b81b2575071 Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 5891
diff changeset
3167
6b81b2575071 Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 5891
diff changeset
3168 /* If we sent just part of the string, put in an EOF
6b81b2575071 Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 5891
diff changeset
3169 to force it through, before we send the rest. */
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3170 if (len > 0)
6158
6b81b2575071 Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 5891
diff changeset
3171 Fprocess_send_eof (proc);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3172 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3173 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3174 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3175 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3176 XPROCESS (proc)->raw_status_low = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3177 XPROCESS (proc)->raw_status_high = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3178 XPROCESS (proc)->status = Fcons (Qexit, Fcons (make_number (256), Qnil));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3179 XSETINT (XPROCESS (proc)->tick, ++process_tick);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3180 deactivate_process (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3181 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3182 error ("Error writing to process %s; closed it", procname);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3183 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3184 error ("SIGPIPE raised on process %s; closed it", procname);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3185 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3186 }
15895
85112cca0b22 (send_process): GCPRO object.
Richard M. Stallman <rms@gnu.org>
parents: 15717
diff changeset
3187
85112cca0b22 (send_process): GCPRO object.
Richard M. Stallman <rms@gnu.org>
parents: 15717
diff changeset
3188 UNGCPRO;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3189 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3190
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3191 DEFUN ("process-send-region", Fprocess_send_region, Sprocess_send_region,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3192 3, 3, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3193 "Send current contents of region as input to PROCESS.\n\
808
707866b2a190 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 765
diff changeset
3194 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
3195 nil, indicating the current buffer's process.\n\
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3196 Called from program, takes three arguments, PROCESS, START and END.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3197 If the region is more than 500 characters long,\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3198 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
3199 Output from processes can arrive in between bunches.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3200 (process, start, end)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3201 Lisp_Object process, start, end;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3202 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3203 Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3204 int start1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3205
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3206 proc = get_process (process);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3207 validate_region (&start, &end);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3208
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3209 if (XINT (start) < GPT && XINT (end) > GPT)
18739
60f002497be1 (Fprocess_send_region): Convert move_gap argument to int.
Richard M. Stallman <rms@gnu.org>
parents: 18708
diff changeset
3210 move_gap (XINT (start));
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3211
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3212 start1 = XINT (start);
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
3213 send_process (proc, POS_ADDR (start1), XINT (end) - XINT (start),
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3214 Fcurrent_buffer ());
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3215
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3216 return Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3217 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3218
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3219 DEFUN ("process-send-string", Fprocess_send_string, Sprocess_send_string,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3220 2, 2, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3221 "Send PROCESS the contents of STRING as input.\n\
808
707866b2a190 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 765
diff changeset
3222 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
3223 nil, indicating the current buffer's process.\n\
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3224 If STRING is more than 500 characters long,\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3225 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
3226 Output from processes can arrive in between bunches.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3227 (process, string)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3228 Lisp_Object process, string;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3229 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3230 Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3231 CHECK_STRING (string, 1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3232 proc = get_process (process);
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3233 send_process (proc, XSTRING (string)->data, XSTRING (string)->size, string);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3234 return Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3235 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3236
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3237 /* send a signal number SIGNO to PROCESS.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3238 CURRENT_GROUP means send to the process group that currently owns
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3239 the terminal being used to communicate with PROCESS.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3240 This is used for various commands in shell mode.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3241 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
3242 right away.
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
3243
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
3244 If we can, we try to signal PROCESS by sending control characters
7220
a33eb16cab9d (Fopen_network_stream): Retry the connect if EADDRINUSE. Ignore EISCONN.
Richard M. Stallman <rms@gnu.org>
parents: 7157
diff changeset
3245 down the pty. This allows us to signal inferiors who have changed
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
3246 their uid, for which killpg would return an EPERM error. */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3247
1522
19ccf004b172 * process.c: (status_convert): Declare this to return a
Jim Blandy <jimb@redhat.com>
parents: 1323
diff changeset
3248 static void
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3249 process_send_signal (process, signo, current_group, nomsg)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3250 Lisp_Object process;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3251 int signo;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3252 Lisp_Object current_group;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3253 int nomsg;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3254 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3255 Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3256 register struct Lisp_Process *p;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3257 int gid;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3258 int no_pgrp = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3259
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3260 proc = get_process (process);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3261 p = XPROCESS (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3262
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3263 if (!EQ (p->childp, Qt))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3264 error ("Process %s is not a subprocess",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3265 XSTRING (p->name)->data);
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
3266 if (XINT (p->infd) < 0)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3267 error ("Process %s is not active",
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3268 XSTRING (p->name)->data);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3269
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3270 if (NILP (p->pty_flag))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3271 current_group = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3272
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3273 /* If we are using pgrps, get a pgrp number and make it negative. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3274 if (!NILP (current_group))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3275 {
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
3276 #ifdef SIGNALS_VIA_CHARACTERS
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3277 /* If possible, send signals to the entire pgrp
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3278 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
3279
1925
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
3280 /* 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
3281 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
3282 #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
3283 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
3284
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
3285 switch (signo)
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
3286 {
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
3287 case SIGINT:
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
3288 tcgetattr (XINT (p->infd), &t);
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3289 send_process (proc, &t.c_cc[VINTR], 1, Qnil);
2120
fc3cdca22f8d * process.c (process_send_signal): In the TERMIOS code for sending
Jim Blandy <jimb@redhat.com>
parents: 1925
diff changeset
3290 return;
1925
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
3291
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
3292 case SIGQUIT:
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
3293 tcgetattr (XINT (p->infd), &t);
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3294 send_process (proc, &t.c_cc[VQUIT], 1, Qnil);
2120
fc3cdca22f8d * process.c (process_send_signal): In the TERMIOS code for sending
Jim Blandy <jimb@redhat.com>
parents: 1925
diff changeset
3295 return;
1925
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
3296
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
3297 case SIGTSTP:
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
3298 tcgetattr (XINT (p->infd), &t);
7414
33e5afbb62bf (process_send_signal): If PREFER_VSUSP, use VSUSP instead of VSWTCH.
Richard M. Stallman <rms@gnu.org>
parents: 7352
diff changeset
3299 #if defined (VSWTCH) && !defined (PREFER_VSUSP)
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3300 send_process (proc, &t.c_cc[VSWTCH], 1, Qnil);
1925
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
3301 #else
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3302 send_process (proc, &t.c_cc[VSUSP], 1, Qnil);
1925
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
3303 #endif
2120
fc3cdca22f8d * process.c (process_send_signal): In the TERMIOS code for sending
Jim Blandy <jimb@redhat.com>
parents: 1925
diff changeset
3304 return;
1925
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
3305 }
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
3306
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
3307 #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
3308
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
3309 /* 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
3310 current control characters. */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3311 #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
3312
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3313 struct tchars c;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3314 struct ltchars lc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3315
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3316 switch (signo)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3317 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3318 case SIGINT:
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
3319 ioctl (XINT (p->infd), TIOCGETC, &c);
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3320 send_process (proc, &c.t_intrc, 1, Qnil);
1522
19ccf004b172 * process.c: (status_convert): Declare this to return a
Jim Blandy <jimb@redhat.com>
parents: 1323
diff changeset
3321 return;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3322 case SIGQUIT:
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
3323 ioctl (XINT (p->infd), TIOCGETC, &c);
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3324 send_process (proc, &c.t_quitc, 1, Qnil);
1522
19ccf004b172 * process.c: (status_convert): Declare this to return a
Jim Blandy <jimb@redhat.com>
parents: 1323
diff changeset
3325 return;
1012
a48ed1d416dd * process.c (process_send_signal): Don't send SIGTSTP if the
Jim Blandy <jimb@redhat.com>
parents: 849
diff changeset
3326 #ifdef SIGTSTP
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3327 case SIGTSTP:
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
3328 ioctl (XINT (p->infd), TIOCGLTC, &lc);
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3329 send_process (proc, &lc.t_suspc, 1, Qnil);
1522
19ccf004b172 * process.c: (status_convert): Declare this to return a
Jim Blandy <jimb@redhat.com>
parents: 1323
diff changeset
3330 return;
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
3331 #endif /* ! defined (SIGTSTP) */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3332 }
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
3333
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
3334 #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
3335
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
3336 /* 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
3337 characters. */
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
3338 #ifdef TCGETA
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3339 struct termio t;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3340 switch (signo)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3341 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3342 case SIGINT:
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
3343 ioctl (XINT (p->infd), TCGETA, &t);
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3344 send_process (proc, &t.c_cc[VINTR], 1, Qnil);
1522
19ccf004b172 * process.c: (status_convert): Declare this to return a
Jim Blandy <jimb@redhat.com>
parents: 1323
diff changeset
3345 return;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3346 case SIGQUIT:
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
3347 ioctl (XINT (p->infd), TCGETA, &t);
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3348 send_process (proc, &t.c_cc[VQUIT], 1, Qnil);
1522
19ccf004b172 * process.c: (status_convert): Declare this to return a
Jim Blandy <jimb@redhat.com>
parents: 1323
diff changeset
3349 return;
1569
52a69b6a8f96 * process.c [SYSV]: Don't include <termios.h>, <termio.h>, or
Jim Blandy <jimb@redhat.com>
parents: 1522
diff changeset
3350 #ifdef SIGTSTP
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3351 case SIGTSTP:
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
3352 ioctl (XINT (p->infd), TCGETA, &t);
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3353 send_process (proc, &t.c_cc[VSWTCH], 1, Qnil);
1522
19ccf004b172 * process.c: (status_convert): Declare this to return a
Jim Blandy <jimb@redhat.com>
parents: 1323
diff changeset
3354 return;
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
3355 #endif /* ! defined (SIGTSTP) */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3356 }
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
3357 #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
3358 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
3359 /* 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
3360 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
3361 #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
3362 #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
3363 #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
3364 #endif /* ! defined (SIGNALS_VIA_CHARACTERS) */
849
c7b49118e101 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 822
diff changeset
3365
c7b49118e101 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 822
diff changeset
3366 #ifdef TIOCGPGRP
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3367 /* Get the pgrp using the tty itself, if we have that.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3368 Otherwise, use the pty to get the pgrp.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3369 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
3370 "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
3371 But, TIOCGPGRP does not work on E50 ;-P works fine on E60"
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3372 His patch indicates that if TIOCGPGRP returns an error, then
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3373 we should just assume that p->pid is also the process group id. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3374 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3375 int err;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3376
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3377 if (!NILP (p->subtty))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3378 err = ioctl (XFASTINT (p->subtty), TIOCGPGRP, &gid);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3379 else
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
3380 err = ioctl (XINT (p->infd), TIOCGPGRP, &gid);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3381
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3382 #ifdef pfa
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3383 if (err == -1)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3384 gid = - XFASTINT (p->pid);
849
c7b49118e101 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 822
diff changeset
3385 #endif /* ! defined (pfa) */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3386 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3387 if (gid == -1)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3388 no_pgrp = 1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3389 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3390 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
3391 #else /* ! defined (TIOCGPGRP ) */
849
c7b49118e101 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 822
diff changeset
3392 /* Can't select pgrps on this system, so we know that
c7b49118e101 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 822
diff changeset
3393 the child itself heads the pgrp. */
c7b49118e101 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 822
diff changeset
3394 gid = - XFASTINT (p->pid);
c7b49118e101 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 822
diff changeset
3395 #endif /* ! defined (TIOCGPGRP ) */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3396 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3397 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3398 gid = - XFASTINT (p->pid);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3399
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3400 switch (signo)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3401 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3402 #ifdef SIGCONT
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3403 case SIGCONT:
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3404 p->raw_status_low = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3405 p->raw_status_high = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3406 p->status = Qrun;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3407 XSETINT (p->tick, ++process_tick);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3408 if (!nomsg)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3409 status_notify ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3410 break;
849
c7b49118e101 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 822
diff changeset
3411 #endif /* ! defined (SIGCONT) */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3412 case SIGINT:
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3413 #ifdef VMS
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3414 send_process (proc, "\003", 1, Qnil); /* ^C */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3415 goto whoosh;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3416 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3417 case SIGQUIT:
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3418 #ifdef VMS
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3419 send_process (proc, "\031", 1, Qnil); /* ^Y */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3420 goto whoosh;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3421 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3422 case SIGKILL:
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3423 #ifdef VMS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3424 sys$forcex (&(XFASTINT (p->pid)), 0, 1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3425 whoosh:
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3426 #endif
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
3427 flush_pending_output (XINT (p->infd));
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3428 break;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3429 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3430
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3431 /* If we don't have process groups, send the signal to the immediate
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3432 subprocess. That isn't really right, but it's better than any
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3433 obvious alternative. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3434 if (no_pgrp)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3435 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3436 kill (XFASTINT (p->pid), signo);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3437 return;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3438 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3439
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3440 /* gid may be a pid, or minus a pgrp's number */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3441 #ifdef TIOCSIGSEND
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3442 if (!NILP (current_group))
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
3443 ioctl (XINT (p->infd), TIOCSIGSEND, signo);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3444 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3445 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3446 gid = - XFASTINT (p->pid);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3447 kill (gid, signo);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3448 }
849
c7b49118e101 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 822
diff changeset
3449 #else /* ! defined (TIOCSIGSEND) */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3450 EMACS_KILLPG (-gid, signo);
849
c7b49118e101 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 822
diff changeset
3451 #endif /* ! defined (TIOCSIGSEND) */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3452 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3453
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3454 DEFUN ("interrupt-process", Finterrupt_process, Sinterrupt_process, 0, 2, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3455 "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
3456 PROCESS may be a process, a buffer, or the name of a process or buffer.\n\
7220
a33eb16cab9d (Fopen_network_stream): Retry the connect if EADDRINUSE. Ignore EISCONN.
Richard M. Stallman <rms@gnu.org>
parents: 7157
diff changeset
3457 nil or no arg means current buffer's process.\n\
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3458 Second arg CURRENT-GROUP non-nil means send signal to\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3459 the current process-group of the process's controlling terminal\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3460 rather than to the process's own process group.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3461 If the process is a shell, this means interrupt current subjob\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3462 rather than the shell.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3463 (process, current_group)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3464 Lisp_Object process, current_group;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3465 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3466 process_send_signal (process, SIGINT, current_group, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3467 return process;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3468 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3469
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3470 DEFUN ("kill-process", Fkill_process, Skill_process, 0, 2, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3471 "Kill process PROCESS. May be process or name of one.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3472 See function `interrupt-process' for more details on usage.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3473 (process, current_group)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3474 Lisp_Object process, current_group;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3475 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3476 process_send_signal (process, SIGKILL, current_group, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3477 return process;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3478 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3479
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3480 DEFUN ("quit-process", Fquit_process, Squit_process, 0, 2, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3481 "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
3482 See function `interrupt-process' for more details on usage.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3483 (process, current_group)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3484 Lisp_Object process, current_group;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3485 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3486 process_send_signal (process, SIGQUIT, current_group, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3487 return process;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3488 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3489
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3490 DEFUN ("stop-process", Fstop_process, Sstop_process, 0, 2, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3491 "Stop process PROCESS. May be process or name of one.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3492 See function `interrupt-process' for more details on usage.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3493 (process, current_group)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3494 Lisp_Object process, current_group;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3495 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3496 #ifndef SIGTSTP
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3497 error ("no SIGTSTP support");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3498 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3499 process_send_signal (process, SIGTSTP, current_group, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3500 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3501 return process;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3502 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3503
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3504 DEFUN ("continue-process", Fcontinue_process, Scontinue_process, 0, 2, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3505 "Continue process PROCESS. May be process or name of one.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3506 See function `interrupt-process' for more details on usage.")
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3507 (process, current_group)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3508 Lisp_Object process, current_group;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3509 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3510 #ifdef SIGCONT
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3511 process_send_signal (process, SIGCONT, current_group, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3512 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3513 error ("no SIGCONT support");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3514 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3515 return process;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3516 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3517
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3518 DEFUN ("signal-process", Fsignal_process, Ssignal_process,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3519 2, 2, "nProcess number: \nnSignal code: ",
11144
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3520 "Send the process with process id PID the signal with code SIGCODE.\n\
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3521 PID must be an integer. The process need not be a child of this Emacs.\n\
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3522 SIGCODE may be an integer, or a symbol whose name is a signal name.")
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3523 (pid, sigcode)
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3524 Lisp_Object pid, sigcode;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3525 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3526 CHECK_NUMBER (pid, 0);
11144
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3527
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3528 #define handle_signal(NAME, VALUE) \
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3529 else if (!strcmp (name, NAME)) \
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3530 XSETINT (sigcode, VALUE)
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3531
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3532 if (INTEGERP (sigcode))
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3533 ;
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3534 else
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3535 {
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3536 unsigned char *name;
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3537
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3538 CHECK_SYMBOL (sigcode, 1);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3539 name = XSYMBOL (sigcode)->name->data;
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3540
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3541 if (0)
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3542 ;
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3543 #ifdef SIGHUP
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3544 handle_signal ("SIGHUP", SIGHUP);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3545 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3546 #ifdef SIGINT
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3547 handle_signal ("SIGINT", SIGINT);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3548 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3549 #ifdef SIGQUIT
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3550 handle_signal ("SIGQUIT", SIGQUIT);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3551 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3552 #ifdef SIGILL
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3553 handle_signal ("SIGILL", SIGILL);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3554 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3555 #ifdef SIGABRT
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3556 handle_signal ("SIGABRT", SIGABRT);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3557 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3558 #ifdef SIGEMT
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3559 handle_signal ("SIGEMT", SIGEMT);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3560 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3561 #ifdef SIGKILL
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3562 handle_signal ("SIGKILL", SIGKILL);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3563 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3564 #ifdef SIGFPE
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3565 handle_signal ("SIGFPE", SIGFPE);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3566 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3567 #ifdef SIGBUS
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3568 handle_signal ("SIGBUS", SIGBUS);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3569 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3570 #ifdef SIGSEGV
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3571 handle_signal ("SIGSEGV", SIGSEGV);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3572 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3573 #ifdef SIGSYS
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3574 handle_signal ("SIGSYS", SIGSYS);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3575 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3576 #ifdef SIGPIPE
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3577 handle_signal ("SIGPIPE", SIGPIPE);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3578 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3579 #ifdef SIGALRM
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3580 handle_signal ("SIGALRM", SIGALRM);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3581 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3582 #ifdef SIGTERM
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3583 handle_signal ("SIGTERM", SIGTERM);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3584 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3585 #ifdef SIGURG
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3586 handle_signal ("SIGURG", SIGURG);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3587 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3588 #ifdef SIGSTOP
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3589 handle_signal ("SIGSTOP", SIGSTOP);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3590 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3591 #ifdef SIGTSTP
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3592 handle_signal ("SIGTSTP", SIGTSTP);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3593 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3594 #ifdef SIGCONT
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3595 handle_signal ("SIGCONT", SIGCONT);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3596 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3597 #ifdef SIGCHLD
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3598 handle_signal ("SIGCHLD", SIGCHLD);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3599 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3600 #ifdef SIGTTIN
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3601 handle_signal ("SIGTTIN", SIGTTIN);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3602 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3603 #ifdef SIGTTOU
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3604 handle_signal ("SIGTTOU", SIGTTOU);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3605 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3606 #ifdef SIGIO
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3607 handle_signal ("SIGIO", SIGIO);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3608 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3609 #ifdef SIGXCPU
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3610 handle_signal ("SIGXCPU", SIGXCPU);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3611 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3612 #ifdef SIGXFSZ
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3613 handle_signal ("SIGXFSZ", SIGXFSZ);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3614 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3615 #ifdef SIGVTALRM
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3616 handle_signal ("SIGVTALRM", SIGVTALRM);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3617 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3618 #ifdef SIGPROF
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3619 handle_signal ("SIGPROF", SIGPROF);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3620 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3621 #ifdef SIGWINCH
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3622 handle_signal ("SIGWINCH", SIGWINCH);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3623 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3624 #ifdef SIGINFO
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3625 handle_signal ("SIGINFO", SIGINFO);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3626 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3627 #ifdef SIGUSR1
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3628 handle_signal ("SIGUSR1", SIGUSR1);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3629 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3630 #ifdef SIGUSR2
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3631 handle_signal ("SIGUSR2", SIGUSR2);
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3632 #endif
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3633 else
11148
117b32676686 (Fsignal_process): SIGCODE is a symbol, not a string.
Karl Heuer <kwzh@gnu.org>
parents: 11144
diff changeset
3634 error ("Undefined signal name %s", name);
11144
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3635 }
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3636
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3637 #undef handle_signal
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3638
c2b689aeb934 (Fsignal_process): Allow signal names as well as numbers.
Richard M. Stallman <rms@gnu.org>
parents: 10914
diff changeset
3639 return make_number (kill (XINT (pid), XINT (sigcode)));
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3640 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3641
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3642 DEFUN ("process-send-eof", Fprocess_send_eof, Sprocess_send_eof, 0, 1, 0,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3643 "Make PROCESS see end-of-file in its input.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3644 Eof comes after any text already sent to it.\n\
808
707866b2a190 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 765
diff changeset
3645 PROCESS may be a process, a buffer, the name of a process or buffer, or\n\
7884
066a06dd3bd3 (Fprocess_send_eof): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 7764
diff changeset
3646 nil, indicating the current buffer's process.\n\
066a06dd3bd3 (Fprocess_send_eof): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 7764
diff changeset
3647 If PROCESS is a network connection, or is a process communicating\n\
066a06dd3bd3 (Fprocess_send_eof): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 7764
diff changeset
3648 through a pipe (as opposed to a pty), then you cannot send any more\n\
066a06dd3bd3 (Fprocess_send_eof): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 7764
diff changeset
3649 text to PROCESS after you call this function.")
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3650 (process)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3651 Lisp_Object process;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3652 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3653 Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3654
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3655 proc = get_process (process);
2221
7edc78402205 (Fprocess_send_eof): Make sure proc is running.
Richard M. Stallman <rms@gnu.org>
parents: 2200
diff changeset
3656
7edc78402205 (Fprocess_send_eof): Make sure proc is running.
Richard M. Stallman <rms@gnu.org>
parents: 2200
diff changeset
3657 /* 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
3658 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
3659 update_status (XPROCESS (proc));
7edc78402205 (Fprocess_send_eof): Make sure proc is running.
Richard M. Stallman <rms@gnu.org>
parents: 2200
diff changeset
3660 if (! EQ (XPROCESS (proc)->status, Qrun))
2222
d81c60c5f9ce Fix typo in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 2221
diff changeset
3661 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
3662
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3663 #ifdef VMS
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3664 send_process (proc, "\032", 1, Qnil); /* ^z */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3665 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3666 if (!NILP (XPROCESS (proc)->pty_flag))
8063
30861f2f4f84 (send_process): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 7937
diff changeset
3667 send_process (proc, "\004", 1, Qnil);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3668 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3669 {
18329
ddaafa596bf5 (Fprocess_send_eof): Prooperly conditionalize prev. change.
Richard M. Stallman <rms@gnu.org>
parents: 18328
diff changeset
3670 #ifdef HAVE_SHUTDOWN
18328
0295bbed3c39 (Fprocess_send_eof): Use shutdown, if it's a socket.
Richard M. Stallman <rms@gnu.org>
parents: 18292
diff changeset
3671 /* If this is a network connection, or socketpair is used
0295bbed3c39 (Fprocess_send_eof): Use shutdown, if it's a socket.
Richard M. Stallman <rms@gnu.org>
parents: 18292
diff changeset
3672 for communication with the subprocess, call shutdown to cause EOF.
0295bbed3c39 (Fprocess_send_eof): Use shutdown, if it's a socket.
Richard M. Stallman <rms@gnu.org>
parents: 18292
diff changeset
3673 (In some old system, shutdown to socketpair doesn't work.
0295bbed3c39 (Fprocess_send_eof): Use shutdown, if it's a socket.
Richard M. Stallman <rms@gnu.org>
parents: 18292
diff changeset
3674 Then we just can't win.) */
0295bbed3c39 (Fprocess_send_eof): Use shutdown, if it's a socket.
Richard M. Stallman <rms@gnu.org>
parents: 18292
diff changeset
3675 if (NILP (XPROCESS (proc)->pid)
0295bbed3c39 (Fprocess_send_eof): Use shutdown, if it's a socket.
Richard M. Stallman <rms@gnu.org>
parents: 18292
diff changeset
3676 || XINT (XPROCESS (proc)->outfd) == XINT (XPROCESS (proc)->infd))
0295bbed3c39 (Fprocess_send_eof): Use shutdown, if it's a socket.
Richard M. Stallman <rms@gnu.org>
parents: 18292
diff changeset
3677 shutdown (XINT (XPROCESS (proc)->outfd), 1);
0295bbed3c39 (Fprocess_send_eof): Use shutdown, if it's a socket.
Richard M. Stallman <rms@gnu.org>
parents: 18292
diff changeset
3678 /* In case of socketpair, outfd == infd, so don't close it. */
0295bbed3c39 (Fprocess_send_eof): Use shutdown, if it's a socket.
Richard M. Stallman <rms@gnu.org>
parents: 18292
diff changeset
3679 if (XINT (XPROCESS (proc)->outfd) != XINT (XPROCESS (proc)->infd))
0295bbed3c39 (Fprocess_send_eof): Use shutdown, if it's a socket.
Richard M. Stallman <rms@gnu.org>
parents: 18292
diff changeset
3680 close (XINT (XPROCESS (proc)->outfd));
18329
ddaafa596bf5 (Fprocess_send_eof): Prooperly conditionalize prev. change.
Richard M. Stallman <rms@gnu.org>
parents: 18328
diff changeset
3681 #else /* not HAVE_SHUTDOWN */
ddaafa596bf5 (Fprocess_send_eof): Prooperly conditionalize prev. change.
Richard M. Stallman <rms@gnu.org>
parents: 18328
diff changeset
3682 close (XINT (XPROCESS (proc)->outfd));
ddaafa596bf5 (Fprocess_send_eof): Prooperly conditionalize prev. change.
Richard M. Stallman <rms@gnu.org>
parents: 18328
diff changeset
3683 #endif /* not HAVE_SHUTDOWN */
9277
21f6120be5ba (make_process, create_process, Fopen_network_stream, deactivate_process,
Karl Heuer <kwzh@gnu.org>
parents: 9115
diff changeset
3684 XSETINT (XPROCESS (proc)->outfd, open (NULL_DEVICE, O_WRONLY));
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3685 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3686 #endif /* VMS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3687 return process;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3688 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3689
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3690 /* Kill all processes associated with `buffer'.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3691 If `buffer' is nil, kill all processes */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3692
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3693 kill_buffer_processes (buffer)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3694 Lisp_Object buffer;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3695 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3696 Lisp_Object tail, proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3697
9952
9daedd94a204 (NETCONN_P, kill_buffer_processes): Use the new type-test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9882
diff changeset
3698 for (tail = Vprocess_alist; GC_CONSP (tail); tail = XCONS (tail)->cdr)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3699 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3700 proc = XCONS (XCONS (tail)->car)->cdr;
9952
9daedd94a204 (NETCONN_P, kill_buffer_processes): Use the new type-test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9882
diff changeset
3701 if (GC_PROCESSP (proc)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3702 && (NILP (buffer) || EQ (XPROCESS (proc)->buffer, buffer)))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3703 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3704 if (NETCONN_P (proc))
7764
fad00b057e50 (kill_buffer_processes): For net conn, use Fdelete_process.
Richard M. Stallman <rms@gnu.org>
parents: 7748
diff changeset
3705 Fdelete_process (proc);
5134
0a4e46e15304 (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 4998
diff changeset
3706 else if (XINT (XPROCESS (proc)->infd) >= 0)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3707 process_send_signal (proc, SIGHUP, Qnil, 1);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3708 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3709 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3710 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3711
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3712 /* On receipt of a signal that a child status has changed,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3713 loop asking about children with changed statuses until
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3714 the system says there are no more.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3715 All we do is change the status;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3716 we do not run sentinels or print notifications.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3717 That is saved for the next time keyboard input is done,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3718 in order to avoid timing errors. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3719
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3720 /** WARNING: this can be called during garbage collection.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3721 Therefore, it must not be fooled by the presence of mark bits in
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3722 Lisp objects. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3723
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3724 /** USG WARNING: Although it is not obvious from the documentation
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3725 in signal(2), on a USG system the SIGCLD handler MUST NOT call
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3726 signal() before executing at least one wait(), otherwise the handler
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3727 will be called again, resulting in an infinite loop. The relevant
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3728 portion of the documentation reads "SIGCLD signals will be queued
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3729 and the signal-catching function will be continually reentered until
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3730 the queue is empty". Invoking signal() causes the kernel to reexamine
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3731 the SIGCLD queue. Fred Fish, UniSoft Systems Inc. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3732
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3733 SIGTYPE
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3734 sigchld_handler (signo)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3735 int signo;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3736 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3737 int old_errno = errno;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3738 Lisp_Object proc;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3739 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
3740 extern EMACS_TIME *input_available_clear_time;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3741
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3742 #ifdef BSD4_1
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3743 extern int sigheld;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3744 sigheld |= sigbit (SIGCHLD);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3745 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3746
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3747 while (1)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3748 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3749 register int pid;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3750 WAITTYPE w;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3751 Lisp_Object tail;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3752
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3753 #ifdef WNOHANG
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3754 #ifndef WUNTRACED
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3755 #define WUNTRACED 0
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3756 #endif /* no WUNTRACED */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3757 /* Keep trying to get a status until we get a definitive result. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3758 do
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3759 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3760 errno = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3761 pid = wait3 (&w, WNOHANG | WUNTRACED, 0);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3762 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3763 while (pid <= 0 && errno == EINTR);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3764
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3765 if (pid <= 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3766 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3767 /* A real failure. We have done all our job, so return. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3768
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3769 /* USG systems forget handlers when they are used;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3770 must reestablish each time */
16116
80a67b8f39e9 (create_process_1, sigchld_handler) [POSIX_SIGNALS]:
Richard M. Stallman <rms@gnu.org>
parents: 16076
diff changeset
3771 #if defined (USG) && !defined (POSIX_SIGNALS)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3772 signal (signo, sigchld_handler); /* WARNING - must come after wait3() */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3773 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3774 #ifdef BSD4_1
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3775 sigheld &= ~sigbit (SIGCHLD);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3776 sigrelse (SIGCHLD);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3777 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3778 errno = old_errno;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3779 return;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3780 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3781 #else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3782 pid = wait (&w);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3783 #endif /* no WNOHANG */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3784
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3785 /* Find the process that signaled us, and record its status. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3786
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3787 p = 0;
14496
beca72fdb420 (sigchld_handler): Use cleaner end-of-list test.
Karl Heuer <kwzh@gnu.org>
parents: 14458
diff changeset
3788 for (tail = Vprocess_alist; CONSP (tail); tail = XCONS (tail)->cdr)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3789 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3790 proc = XCONS (XCONS (tail)->car)->cdr;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3791 p = XPROCESS (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3792 if (EQ (p->childp, Qt) && XFASTINT (p->pid) == pid)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3793 break;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3794 p = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3795 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3796
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3797 /* Look for an asynchronous process whose pid hasn't been filled
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3798 in yet. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3799 if (p == 0)
14496
beca72fdb420 (sigchld_handler): Use cleaner end-of-list test.
Karl Heuer <kwzh@gnu.org>
parents: 14458
diff changeset
3800 for (tail = Vprocess_alist; CONSP (tail); tail = XCONS (tail)->cdr)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3801 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3802 proc = XCONS (XCONS (tail)->car)->cdr;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3803 p = XPROCESS (proc);
9115
59bc2d010b5f (decode_status, Fprocessp, Fget_process, Fget_buffer_process, Fprocess_status,
Karl Heuer <kwzh@gnu.org>
parents: 9034
diff changeset
3804 if (INTEGERP (p->pid) && XINT (p->pid) == -1)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3805 break;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3806 p = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3807 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3808
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3809 /* Change the status of the process that was found. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3810 if (p != 0)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3811 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3812 union { int i; WAITTYPE wt; } u;
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
3813 int clear_desc_flag = 0;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3814
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3815 XSETINT (p->tick, ++process_tick);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3816 u.wt = w;
12324
41bd44279127 (sigchld_handler): Change XSETFASTINT to XSETINT.
Richard M. Stallman <rms@gnu.org>
parents: 12215
diff changeset
3817 XSETINT (p->raw_status_low, u.i & 0xffff);
41bd44279127 (sigchld_handler): Change XSETFASTINT to XSETINT.
Richard M. Stallman <rms@gnu.org>
parents: 12215
diff changeset
3818 XSETINT (p->raw_status_high, u.i >> 16);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3819
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3820 /* If process has terminated, stop waiting for its output. */
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
3821 if ((WIFSIGNALED (w) || WIFEXITED (w))
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
3822 && XINT (p->infd) >= 0)
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
3823 clear_desc_flag = 1;
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
3824
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
3825 /* We use clear_desc_flag to avoid a compiler bug in Microsoft C. */
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
3826 if (clear_desc_flag)
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
3827 {
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
3828 FD_CLR (XINT (p->infd), &input_wait_mask);
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
3829 FD_CLR (XINT (p->infd), &non_keyboard_wait_mask);
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
3830 }
1925
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
3831
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
3832 /* 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
3833 look around. */
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
3834 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
3835 EMACS_SET_SECS_USECS (*input_available_clear_time, 0, 0);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3836 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3837
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3838 /* There was no asynchronous process found for that id. Check
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3839 if we have a synchronous process. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3840 else
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3841 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3842 synch_process_alive = 0;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3843
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3844 /* Report the status of the synchronous process. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3845 if (WIFEXITED (w))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3846 synch_process_retcode = WRETCODE (w);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3847 else if (WIFSIGNALED (w))
5579
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
3848 {
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
3849 int code = WTERMSIG (w);
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
3850 char *signame = 0;
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
3851
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
3852 if (code < NSIG)
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
3853 {
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
3854 #ifndef VMS
9705
f7535deb913a (status_message): Add a cast.
Richard M. Stallman <rms@gnu.org>
parents: 9697
diff changeset
3855 /* Suppress warning if the table has const char *. */
f7535deb913a (status_message): Add a cast.
Richard M. Stallman <rms@gnu.org>
parents: 9697
diff changeset
3856 signame = (char *) sys_siglist[code];
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
3857 #else
5579
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
3858 signame = sys_errlist[code];
1594
b476a97ad17e * systty.h, process.c, buffer.h, callproc.c, sysdep.c, dired.c:
Jim Blandy <jimb@redhat.com>
parents: 1569
diff changeset
3859 #endif
5579
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
3860 }
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
3861 if (signame == 0)
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
3862 signame = "unknown";
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
3863
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
3864 synch_process_death = signame;
466bc8ef8e21 (sigchld_handler, status_message): Handle a NULL in sys_siglist.
Richard M. Stallman <rms@gnu.org>
parents: 5561
diff changeset
3865 }
1925
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
3866
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
3867 /* 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
3868 look around. */
3ddb163a9201 * process.c: Make sure we don't miss processes exiting, by having
Jim Blandy <jimb@redhat.com>
parents: 1886
diff changeset
3869 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
3870 EMACS_SET_SECS_USECS (*input_available_clear_time, 0, 0);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3871 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3872
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3873 /* On some systems, we must return right away.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3874 If any more processes want to signal us, we will
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3875 get another signal.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3876 Otherwise (on systems that have WNOHANG), loop around
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3877 to use up all the processes that have something to tell us. */
9793
28267fcc61be Use macros IS_ANY_SEP, IS_DIRECTORY_SEP,
Richard M. Stallman <rms@gnu.org>
parents: 9705
diff changeset
3878 #if defined (USG) && ! (defined (HPUX) && defined (WNOHANG)) || defined (WINDOWSNT)
16116
80a67b8f39e9 (create_process_1, sigchld_handler) [POSIX_SIGNALS]:
Richard M. Stallman <rms@gnu.org>
parents: 16076
diff changeset
3879 #if defined (USG) && ! defined (POSIX_SIGNALS)
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3880 signal (signo, sigchld_handler);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3881 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3882 errno = old_errno;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3883 return;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3884 #endif /* USG, but not HPUX with WNOHANG */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3885 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3886 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3887
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3888
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3889 static Lisp_Object
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3890 exec_sentinel_unwind (data)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3891 Lisp_Object data;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3892 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3893 XPROCESS (XCONS (data)->car)->sentinel = XCONS (data)->cdr;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3894 return Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3895 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3896
9030
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
3897 static Lisp_Object
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
3898 exec_sentinel_error_handler (error)
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
3899 Lisp_Object error;
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
3900 {
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
3901 cmd_error_internal (error, "error in process sentinel: ");
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
3902 Vinhibit_quit = Qt;
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
3903 update_echo_area ();
11277
d4547e4b0aab (read_process_output_error_handler)
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
3904 Fsleep_for (make_number (2), Qnil);
9030
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
3905 }
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
3906
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3907 static void
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3908 exec_sentinel (proc, reason)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3909 Lisp_Object proc, reason;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3910 {
10914
413d44c0bd41 (exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents: 10744
diff changeset
3911 Lisp_Object sentinel, obuffer, odeactivate, okeymap;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3912 register struct Lisp_Process *p = XPROCESS (proc);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3913 int count = specpdl_ptr - specpdl;
16644
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
3914 int outer_running_asynch_code = running_asynch_code;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3915
10914
413d44c0bd41 (exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents: 10744
diff changeset
3916 /* No need to gcpro these, because all we do with them later
413d44c0bd41 (exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents: 10744
diff changeset
3917 is test them for EQness, and none of them should be a string. */
7454
8d9e41a175fa (exec_sentinel): Don't deactivate the mark. Check for asynch buffer switch.
Karl Heuer <kwzh@gnu.org>
parents: 7414
diff changeset
3918 odeactivate = Vdeactivate_mark;
10914
413d44c0bd41 (exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents: 10744
diff changeset
3919 XSETBUFFER (obuffer, current_buffer);
413d44c0bd41 (exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents: 10744
diff changeset
3920 okeymap = current_buffer->keymap;
413d44c0bd41 (exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents: 10744
diff changeset
3921
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3922 sentinel = p->sentinel;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3923 if (NILP (sentinel))
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3924 return;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3925
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3926 /* Zilch the sentinel while it's running, to avoid recursive invocations;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3927 assure that it gets restored no matter how the sentinel exits. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3928 p->sentinel = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3929 record_unwind_protect (exec_sentinel_unwind, Fcons (proc, sentinel));
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3930 /* Inhibit quit so that random quits don't screw up a running filter. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3931 specbind (Qinhibit_quit, Qt);
8231
5226ed89c1a6 (Qlast_nonmenu_event): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8063
diff changeset
3932 specbind (Qlast_nonmenu_event, Qt);
9030
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
3933
16644
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
3934 /* In case we get recursively called,
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
3935 and we already saved the match data nonrecursively,
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
3936 save the same match data in safely recursive fashion. */
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
3937 if (outer_running_asynch_code)
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
3938 {
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
3939 Lisp_Object tem;
16728
309a750fd5c0 (read_process_output, exec_sentinel):
Richard M. Stallman <rms@gnu.org>
parents: 16718
diff changeset
3940 tem = Fmatch_data (Qnil, Qnil);
16644
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
3941 restore_match_data ();
16728
309a750fd5c0 (read_process_output, exec_sentinel):
Richard M. Stallman <rms@gnu.org>
parents: 16718
diff changeset
3942 record_unwind_protect (Fstore_match_data, Fmatch_data (Qnil, Qnil));
16644
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
3943 Fstore_match_data (tem);
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
3944 }
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
3945
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
3946 /* For speed, if a search happens within this code,
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
3947 save the match data in a special nonrecursive fashion. */
10032
f689803caa92 Added code for automatically saving and restoring the match data
Francesco Potortì <pot@gnu.org>
parents: 9969
diff changeset
3948 running_asynch_code = 1;
16644
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
3949
9030
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
3950 internal_condition_case_1 (read_process_output_call,
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
3951 Fcons (sentinel,
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
3952 Fcons (proc, Fcons (reason, Qnil))),
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
3953 !NILP (Vdebug_on_error) ? Qnil : Qerror,
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
3954 exec_sentinel_error_handler);
16644
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
3955
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
3956 /* If we saved the match data nonrecursively, restore it now. */
10032
f689803caa92 Added code for automatically saving and restoring the match data
Francesco Potortì <pot@gnu.org>
parents: 9969
diff changeset
3957 restore_match_data ();
16644
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
3958 running_asynch_code = outer_running_asynch_code;
7454
8d9e41a175fa (exec_sentinel): Don't deactivate the mark. Check for asynch buffer switch.
Karl Heuer <kwzh@gnu.org>
parents: 7414
diff changeset
3959
8d9e41a175fa (exec_sentinel): Don't deactivate the mark. Check for asynch buffer switch.
Karl Heuer <kwzh@gnu.org>
parents: 7414
diff changeset
3960 Vdeactivate_mark = odeactivate;
12808
4db1f387e85f (read_process_output, exec_sentinel): Call
Richard M. Stallman <rms@gnu.org>
parents: 12749
diff changeset
3961 #if 0
10914
413d44c0bd41 (exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents: 10744
diff changeset
3962 if (! EQ (Fcurrent_buffer (), obuffer)
413d44c0bd41 (exec_sentinel, read_process_output): If running filter
Richard M. Stallman <rms@gnu.org>
parents: 10744
diff changeset
3963 || ! EQ (current_buffer->keymap, okeymap))
12808
4db1f387e85f (read_process_output, exec_sentinel): Call
Richard M. Stallman <rms@gnu.org>
parents: 12749
diff changeset
3964 #endif
13159
2af96ac471bc (exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents: 12808
diff changeset
3965 /* But do it only if the caller is actually going to read events.
2af96ac471bc (exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents: 12808
diff changeset
3966 Otherwise there's no need to make him wake up, and it could
2af96ac471bc (exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents: 12808
diff changeset
3967 cause trouble (for example it would make Fsit_for return). */
2af96ac471bc (exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents: 12808
diff changeset
3968 if (waiting_for_user_input_p == -1)
2af96ac471bc (exec_sentinel, read_process_output):
Richard M. Stallman <rms@gnu.org>
parents: 12808
diff changeset
3969 record_asynch_buffer_change ();
7454
8d9e41a175fa (exec_sentinel): Don't deactivate the mark. Check for asynch buffer switch.
Karl Heuer <kwzh@gnu.org>
parents: 7414
diff changeset
3970
5561
fd7524d61a8d (read_process_output): Supply second arg to unbind_to.
Richard M. Stallman <rms@gnu.org>
parents: 5548
diff changeset
3971 unbind_to (count, Qnil);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3972 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3973
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3974 /* Report all recent events of a change in process status
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3975 (either run the sentinel or output a message).
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3976 This is done while Emacs is waiting for keyboard input. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3977
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3978 status_notify ()
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3979 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3980 register Lisp_Object proc, buffer;
6515
df7438605e1e (status_notify): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents: 6429
diff changeset
3981 Lisp_Object tail, msg;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3982 struct gcpro gcpro1, gcpro2;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3983
6515
df7438605e1e (status_notify): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents: 6429
diff changeset
3984 tail = Qnil;
df7438605e1e (status_notify): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents: 6429
diff changeset
3985 msg = Qnil;
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3986 /* We need to gcpro tail; if read_process_output calls a filter
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3987 which deletes a process and removes the cons to which tail points
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3988 from Vprocess_alist, and then causes a GC, tail is an unprotected
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3989 reference. */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3990 GCPRO2 (tail, msg);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3991
12215
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3992 /* Set this now, so that if new processes are created by sentinels
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3993 that we run, we get called again to handle their status changes. */
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3994 update_tick = process_tick;
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3995
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3996 for (tail = Vprocess_alist; !NILP (tail); tail = Fcdr (tail))
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3997 {
12215
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3998 Lisp_Object symbol;
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
3999 register struct Lisp_Process *p;
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4000
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4001 proc = Fcdr (Fcar (tail));
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4002 p = XPROCESS (proc);
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4003
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4004 if (XINT (p->tick) != XINT (p->update_tick))
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4005 {
12215
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4006 XSETINT (p->update_tick, XINT (p->tick));
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4007
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4008 /* If process is still active, read any output that remains. */
16644
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
4009 while (! EQ (p->filter, Qt)
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
4010 && XINT (p->infd) >= 0
3a93437adce1 (status_notify): Test p->infd > 0
Richard M. Stallman <rms@gnu.org>
parents: 16464
diff changeset
4011 && read_process_output (proc, XINT (p->infd)) > 0);
12215
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4012
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4013 buffer = p->buffer;
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4014
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4015 /* Get the text to use for the message. */
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4016 if (!NILP (p->raw_status_low))
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4017 update_status (p);
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4018 msg = status_message (p->status);
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4019
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4020 /* If process is terminated, deactivate it or delete it. */
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4021 symbol = p->status;
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4022 if (CONSP (p->status))
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4023 symbol = XCONS (p->status)->car;
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4024
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4025 if (EQ (symbol, Qsignal) || EQ (symbol, Qexit)
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4026 || EQ (symbol, Qclosed))
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4027 {
12215
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4028 if (delete_exited_processes)
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4029 remove_process (proc);
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4030 else
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4031 deactivate_process (proc);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4032 }
12215
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4033
16464
c1f19d8e5b80 (status_notify): Update p->tick again
Richard M. Stallman <rms@gnu.org>
parents: 16220
diff changeset
4034 /* The actions above may have further incremented p->tick.
c1f19d8e5b80 (status_notify): Update p->tick again
Richard M. Stallman <rms@gnu.org>
parents: 16220
diff changeset
4035 So set p->update_tick again
c1f19d8e5b80 (status_notify): Update p->tick again
Richard M. Stallman <rms@gnu.org>
parents: 16220
diff changeset
4036 so that an error in the sentinel will not cause
c1f19d8e5b80 (status_notify): Update p->tick again
Richard M. Stallman <rms@gnu.org>
parents: 16220
diff changeset
4037 this code to be run again. */
c1f19d8e5b80 (status_notify): Update p->tick again
Richard M. Stallman <rms@gnu.org>
parents: 16220
diff changeset
4038 XSETINT (p->update_tick, XINT (p->tick));
12215
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4039 /* Now output the message suitably. */
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4040 if (!NILP (p->sentinel))
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4041 exec_sentinel (proc, msg);
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4042 /* Don't bother with a message in the buffer
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4043 when a process becomes runnable. */
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4044 else if (!EQ (symbol, Qrun) && !NILP (buffer))
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4045 {
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4046 Lisp_Object ro, tem;
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4047 struct buffer *old = current_buffer;
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4048 int opoint;
17604
77b137e2d9a7 (read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents: 17247
diff changeset
4049 int before;
12215
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4050
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4051 ro = XBUFFER (buffer)->read_only;
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4052
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4053 /* Avoid error if buffer is deleted
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4054 (probably that's why the process is dead, too) */
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4055 if (NILP (XBUFFER (buffer)->name))
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4056 continue;
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4057 Fset_buffer (buffer);
17604
77b137e2d9a7 (read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents: 17247
diff changeset
4058
16039
855c8d8ba0f0 Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents: 15895
diff changeset
4059 opoint = PT;
12215
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4060 /* Insert new output into buffer
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4061 at the current end-of-output marker,
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4062 thus preserving logical ordering of input and output. */
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4063 if (XMARKER (p->mark)->buffer)
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4064 SET_PT (marker_position (p->mark));
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4065 else
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4066 SET_PT (ZV);
17604
77b137e2d9a7 (read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents: 17247
diff changeset
4067
77b137e2d9a7 (read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents: 17247
diff changeset
4068 before = PT;
12215
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4069
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4070 tem = current_buffer->read_only;
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4071 current_buffer->read_only = Qnil;
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4072 insert_string ("\nProcess ");
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4073 Finsert (1, &p->name);
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4074 insert_string (" ");
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4075 Finsert (1, &msg);
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4076 current_buffer->read_only = tem;
16039
855c8d8ba0f0 Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents: 15895
diff changeset
4077 Fset_marker (p->mark, make_number (PT), p->buffer);
12215
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4078
17604
77b137e2d9a7 (read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents: 17247
diff changeset
4079 if (opoint >= before)
77b137e2d9a7 (read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents: 17247
diff changeset
4080 SET_PT (opoint + (PT - before));
77b137e2d9a7 (read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents: 17247
diff changeset
4081 else
77b137e2d9a7 (read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents: 17247
diff changeset
4082 SET_PT (opoint);
77b137e2d9a7 (read_process_output): Update opoint, old_begv and old_zv
Richard M. Stallman <rms@gnu.org>
parents: 17247
diff changeset
4083
12215
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4084 set_buffer_internal (old);
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4085 }
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4086 }
2f1f03964f08 (status_notify): Undo May 18 change.
Richard M. Stallman <rms@gnu.org>
parents: 12132
diff changeset
4087 } /* end for */
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4088
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4089 update_mode_lines++; /* in case buffers use %s in mode-line-format */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4090 redisplay_preserve_echo_area ();
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4091
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4092 UNGCPRO;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4093 }
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
4094
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
4095
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
4096 DEFUN ("set-process-coding-system", Fset_process_coding_system,
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
4097 Sset_process_coding_system, 1, 3, 0,
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
4098 "Set coding-systems of PROCESS to DECODING (input from the process) and\n\
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
4099 ENCODING (output to the process).")
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
4100 (proc, decoding, encoding)
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
4101 register Lisp_Object proc, decoding, encoding;
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
4102 {
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
4103 register struct Lisp_Process *p;
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
4104
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
4105 CHECK_PROCESS (proc, 0);
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
4106 p = XPROCESS (proc);
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
4107 if (XINT (p->infd) < 0)
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
4108 error ("Input file descriptor of %s closed", XSTRING (p->name)->data);
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
4109 if (XINT (p->outfd) < 0)
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
4110 error ("Output file descriptor of %s closed", XSTRING (p->name)->data);
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
4111
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
4112 p->decode_coding_system = Fcheck_coding_system (decoding);
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
4113 p->encode_coding_system = Fcheck_coding_system (encoding);
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
4114 setup_coding_system (decoding,
17110
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
4115 proc_decode_coding_system[XINT (p->infd)]);
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
4116 setup_coding_system (encoding,
17110
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
4117 proc_encode_coding_system[XINT (p->outfd)]);
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
4118
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
4119 return Qnil;
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
4120 }
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
4121
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
4122 DEFUN ("process-coding-system",
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
4123 Fprocess_coding_system, Sprocess_coding_system, 1, 1, 0,
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
4124 "Return a cons of coding-system for decoding and encoding of PROCESS.")
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
4125 (proc)
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
4126 register Lisp_Object proc;
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
4127 {
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
4128 CHECK_PROCESS (proc, 0);
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
4129 return Fcons (XPROCESS (proc)->decode_coding_system,
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
4130 XPROCESS (proc)->encode_coding_system);
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
4131 }
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4132
9686
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4133 /* The first time this is called, assume keyboard input comes from DESC
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4134 instead of from where we used to expect it.
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4135 Subsequent calls mean assume input keyboard can come from DESC
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4136 in addition to other places. */
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4137
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4138 static int add_keyboard_wait_descriptor_called_flag;
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4139
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4140 void
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4141 add_keyboard_wait_descriptor (desc)
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4142 int desc;
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4143 {
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4144 if (! add_keyboard_wait_descriptor_called_flag)
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4145 FD_CLR (0, &input_wait_mask);
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4146 add_keyboard_wait_descriptor_called_flag = 1;
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4147 FD_SET (desc, &input_wait_mask);
17224
dd2545e79add (wait_reading_process_input): If wait_for_cell,
Richard M. Stallman <rms@gnu.org>
parents: 17110
diff changeset
4148 FD_SET (desc, &non_process_wait_mask);
9686
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4149 if (desc > max_keyboard_desc)
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4150 max_keyboard_desc = desc;
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4151 }
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4152
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4153 /* From now on, do not expect DESC to give keyboard input. */
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4154
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4155 void
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4156 delete_keyboard_wait_descriptor (desc)
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4157 int desc;
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4158 {
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4159 int fd;
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4160 int lim = max_keyboard_desc;
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4161
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4162 FD_CLR (desc, &input_wait_mask);
17224
dd2545e79add (wait_reading_process_input): If wait_for_cell,
Richard M. Stallman <rms@gnu.org>
parents: 17110
diff changeset
4163 FD_CLR (desc, &non_process_wait_mask);
9686
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4164
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4165 if (desc == max_keyboard_desc)
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4166 for (fd = 0; fd < lim; fd++)
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4167 if (FD_ISSET (fd, &input_wait_mask)
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4168 && !FD_ISSET (fd, &non_keyboard_wait_mask))
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4169 max_keyboard_desc = fd;
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4170 }
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4171
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4172 /* Return nonzero if *MASK has a bit set
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4173 that corresponds to one of the keyboard input descriptors. */
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4174
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4175 int
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4176 keyboard_bit_set (mask)
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4177 SELECT_TYPE *mask;
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4178 {
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4179 int fd;
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4180
12541
33a4586124e9 (keyboard_bit_set): Fix one-off in loop end.
Karl Heuer <kwzh@gnu.org>
parents: 12491
diff changeset
4181 for (fd = 0; fd <= max_keyboard_desc; fd++)
9686
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4182 if (FD_ISSET (fd, mask) && FD_ISSET (fd, &input_wait_mask)
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4183 && !FD_ISSET (fd, &non_keyboard_wait_mask))
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4184 return 1;
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4185
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4186 return 0;
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4187 }
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4188
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4189 init_process ()
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4190 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4191 register int i;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4192
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4193 #ifdef SIGCHLD
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4194 #ifndef CANNOT_DUMP
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4195 if (! noninteractive || initialized)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4196 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4197 signal (SIGCHLD, sigchld_handler);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4198 #endif
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4199
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4200 FD_ZERO (&input_wait_mask);
9686
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4201 FD_ZERO (&non_keyboard_wait_mask);
17224
dd2545e79add (wait_reading_process_input): If wait_for_cell,
Richard M. Stallman <rms@gnu.org>
parents: 17110
diff changeset
4202 FD_ZERO (&non_process_wait_mask);
7044
7032d07f5ad9 (max_process_desc): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7013
diff changeset
4203 max_process_desc = 0;
4682
c4d471244116 (keyboard_descriptor): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4639
diff changeset
4204
9686
cd788aa8cb2a Handle multiple keyboard input descriptors.
Richard M. Stallman <rms@gnu.org>
parents: 9334
diff changeset
4205 FD_SET (0, &input_wait_mask);
4682
c4d471244116 (keyboard_descriptor): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 4639
diff changeset
4206
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4207 Vprocess_alist = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4208 for (i = 0; i < MAXDESC; i++)
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4209 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4210 chan_process[i] = Qnil;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4211 proc_buffered_char[i] = -1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4212 }
17110
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
4213 bzero (proc_decode_coding_system, sizeof proc_decode_coding_system);
3a348cbb354f (Fstart_process, Fopen_network_stream): Do not perform
Kenichi Handa <handa@m17n.org>
parents: 17041
diff changeset
4214 bzero (proc_encode_coding_system, sizeof proc_encode_coding_system);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4215 }
4231
91a883c56382 (Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents: 4057
diff changeset
4216
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4217 syms_of_process ()
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4218 {
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4219 Qprocessp = intern ("processp");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4220 staticpro (&Qprocessp);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4221 Qrun = intern ("run");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4222 staticpro (&Qrun);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4223 Qstop = intern ("stop");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4224 staticpro (&Qstop);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4225 Qsignal = intern ("signal");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4226 staticpro (&Qsignal);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4227
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4228 /* Qexit is already staticpro'd by syms_of_eval; don't staticpro it
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4229 here again.
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4230
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4231 Qexit = intern ("exit");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4232 staticpro (&Qexit); */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4233
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4234 Qopen = intern ("open");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4235 staticpro (&Qopen);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4236 Qclosed = intern ("closed");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4237 staticpro (&Qclosed);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4238
8231
5226ed89c1a6 (Qlast_nonmenu_event): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8063
diff changeset
4239 Qlast_nonmenu_event = intern ("last-nonmenu-event");
5226ed89c1a6 (Qlast_nonmenu_event): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8063
diff changeset
4240 staticpro (&Qlast_nonmenu_event);
5226ed89c1a6 (Qlast_nonmenu_event): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8063
diff changeset
4241
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4242 staticpro (&Vprocess_alist);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4243
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4244 DEFVAR_BOOL ("delete-exited-processes", &delete_exited_processes,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4245 "*Non-nil means delete processes immediately when they exit.\n\
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4246 nil means don't delete them until `list-processes' is run.");
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4247
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4248 delete_exited_processes = 1;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4249
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4250 DEFVAR_LISP ("process-connection-type", &Vprocess_connection_type,
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4251 "Control type of device used to communicate with subprocesses.\n\
7220
a33eb16cab9d (Fopen_network_stream): Retry the connect if EADDRINUSE. Ignore EISCONN.
Richard M. Stallman <rms@gnu.org>
parents: 7157
diff changeset
4252 Values are nil to use a pipe, or t or `pty' to use a pty.\n\
a33eb16cab9d (Fopen_network_stream): Retry the connect if EADDRINUSE. Ignore EISCONN.
Richard M. Stallman <rms@gnu.org>
parents: 7157
diff changeset
4253 The value has no effect if the system has no ptys or if all ptys are busy:\n\
a33eb16cab9d (Fopen_network_stream): Retry the connect if EADDRINUSE. Ignore EISCONN.
Richard M. Stallman <rms@gnu.org>
parents: 7157
diff changeset
4254 then a pipe is used in any case.\n\
a33eb16cab9d (Fopen_network_stream): Retry the connect if EADDRINUSE. Ignore EISCONN.
Richard M. Stallman <rms@gnu.org>
parents: 7157
diff changeset
4255 The value takes effect when `start-process' is called.");
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4256 Vprocess_connection_type = Qt;
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4257
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4258 defsubr (&Sprocessp);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4259 defsubr (&Sget_process);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4260 defsubr (&Sget_buffer_process);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4261 defsubr (&Sdelete_process);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4262 defsubr (&Sprocess_status);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4263 defsubr (&Sprocess_exit_status);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4264 defsubr (&Sprocess_id);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4265 defsubr (&Sprocess_name);
9030
b14532c71632 (exec_sentinel_error_handler): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8570
diff changeset
4266 defsubr (&Sprocess_tty_name);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4267 defsubr (&Sprocess_command);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4268 defsubr (&Sset_process_buffer);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4269 defsubr (&Sprocess_buffer);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4270 defsubr (&Sprocess_mark);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4271 defsubr (&Sset_process_filter);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4272 defsubr (&Sprocess_filter);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4273 defsubr (&Sset_process_sentinel);
16058
924aeb9ed7c3 (Fprocess_contact): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16053
diff changeset
4274 defsubr (&Sprocess_sentinel);
6830
bcaddbe53068 (Fset_process_window_size): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6823
diff changeset
4275 defsubr (&Sset_process_window_size);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4276 defsubr (&Sprocess_kill_without_query);
16058
924aeb9ed7c3 (Fprocess_contact): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16053
diff changeset
4277 defsubr (&Sprocess_contact);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4278 defsubr (&Slist_processes);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4279 defsubr (&Sprocess_list);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4280 defsubr (&Sstart_process);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4281 #ifdef HAVE_SOCKETS
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4282 defsubr (&Sopen_network_stream);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4283 #endif /* HAVE_SOCKETS */
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4284 defsubr (&Saccept_process_output);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4285 defsubr (&Sprocess_send_region);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4286 defsubr (&Sprocess_send_string);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4287 defsubr (&Sinterrupt_process);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4288 defsubr (&Skill_process);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4289 defsubr (&Squit_process);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4290 defsubr (&Sstop_process);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4291 defsubr (&Scontinue_process);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4292 defsubr (&Sprocess_send_eof);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4293 defsubr (&Ssignal_process);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4294 defsubr (&Swaiting_for_user_input_p);
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4295 /* defsubr (&Sprocess_connection); */
17041
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
4296 defsubr (&Sset_process_coding_system);
b61cbe595be5 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16780
diff changeset
4297 defsubr (&Sprocess_coding_system);
578
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4298 }
a4591b4d5435 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4299
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4300
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4301 #else /* not subprocesses */
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4302
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4303 #include <sys/types.h>
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4304 #include <errno.h>
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4305
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4306 #include "lisp.h"
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4307 #include "systime.h"
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4308 #include "termopts.h"
12132
017f32786ed3 [!subprocesses]: Include sysselect.h.
Karl Heuer <kwzh@gnu.org>
parents: 11926
diff changeset
4309 #include "sysselect.h"
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4310
765
e4093444f9f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 692
diff changeset
4311 extern int frame_garbaged;
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4312
14806
232b90ad50e8 (wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents: 14802
diff changeset
4313 extern EMACS_TIME timer_check ();
232b90ad50e8 (wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents: 14802
diff changeset
4314 extern int timers_run;
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4315
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4316 /* As described above, except assuming that there are no subprocesses:
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4317
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4318 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
4319
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4320 time_limit is:
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4321 timeout in seconds, or
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4322 zero for no limit, or
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4323 -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
4324
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
4325 read_kbd is a Lisp_Object:
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4326 0 to ignore keyboard input, or
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4327 1 to return when input is available, or
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4328 -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
4329 the quit handler.
15021
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4330 a cons cell, meaning wait until its car is non-nil
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4331 (and gobble terminal input into the buffer if any arrives), or
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4332 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
4333 `subprocesses' isn't defined.
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4334
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4335 do_display != 0 means redisplay should be done to show subprocess
6429
1dbe24a029fd (wait_reading_process_input, both versions): Don't call
Richard M. Stallman <rms@gnu.org>
parents: 6393
diff changeset
4336 output that arrives.
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4337
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 3510
diff changeset
4338 Return true iff we received input from any process. */
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4339
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4340 int
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4341 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
4342 int time_limit, microsecs;
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
4343 Lisp_Object read_kbd;
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
4344 int do_display;
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4345 {
14806
232b90ad50e8 (wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents: 14802
diff changeset
4346 EMACS_TIME end_time, timeout;
14278
3562c5f43780 (wait_reading_process_input) [not subprocesses]: Do
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
4347 SELECT_TYPE waitchannels;
14806
232b90ad50e8 (wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents: 14802
diff changeset
4348 int xerrno;
15021
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4349 Lisp_Object *wait_for_cell = 0;
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4350
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4351 /* If waiting for non-nil in a cell, record where. */
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4352 if (CONSP (read_kbd))
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4353 {
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4354 wait_for_cell = &XCONS (read_kbd)->car;
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4355 XSETFASTINT (read_kbd, 0);
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4356 }
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4357
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4358 /* What does time_limit really mean? */
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4359 if (time_limit || microsecs)
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4360 {
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4361 if (time_limit == -1)
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4362 /* In fact, it's zero. */
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4363 EMACS_SET_SECS_USECS (timeout, 0, 0);
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4364 else
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4365 EMACS_SET_SECS_USECS (timeout, time_limit, microsecs);
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4366
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4367 /* How far in the future is that? */
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4368 EMACS_GET_TIME (end_time);
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4369 EMACS_ADD_TIME (end_time, end_time, timeout);
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4370 }
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4371 else
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4372 /* It's infinite. */
14806
232b90ad50e8 (wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents: 14802
diff changeset
4373 EMACS_SET_SECS_USECS (timeout, 100000, 0);
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4374
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4375 /* Turn off periodic alarms (in case they are in use)
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4376 because the select emulator uses alarms. */
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4377 stop_polling ();
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4378
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4379 for (;;)
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4380 {
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4381 int nfds;
14802
45827a5afe4d [!subprocesses] (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 14785
diff changeset
4382 int timeout_reduced_for_timers = 0;
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4383
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4384 /* If calling from keyboard input, do not quit
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4385 since we want to return C-g as an input character.
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4386 Otherwise, do pending quit if requested. */
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
4387 if (XINT (read_kbd) >= 0)
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4388 QUIT;
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4389
15021
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4390 /* Exit now if the cell we're waiting for became non-nil. */
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4391 if (wait_for_cell && ! NILP (*wait_for_cell))
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4392 break;
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4393
14802
45827a5afe4d [!subprocesses] (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 14785
diff changeset
4394 /* Compute time from now till when time limit is up */
45827a5afe4d [!subprocesses] (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 14785
diff changeset
4395 /* Exit if already run out */
14806
232b90ad50e8 (wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents: 14802
diff changeset
4396 if (time_limit > 0 || microsecs)
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4397 {
14806
232b90ad50e8 (wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents: 14802
diff changeset
4398 EMACS_GET_TIME (timeout);
232b90ad50e8 (wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents: 14802
diff changeset
4399 EMACS_SUB_TIME (timeout, end_time, timeout);
232b90ad50e8 (wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents: 14802
diff changeset
4400 if (EMACS_TIME_NEG_P (timeout))
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4401 break;
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4402 }
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4403
14802
45827a5afe4d [!subprocesses] (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 14785
diff changeset
4404 /* If our caller will not immediately handle keyboard events,
45827a5afe4d [!subprocesses] (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 14785
diff changeset
4405 run timer events directly.
45827a5afe4d [!subprocesses] (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 14785
diff changeset
4406 (Callers that will immediately read keyboard events
45827a5afe4d [!subprocesses] (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 14785
diff changeset
4407 call timer_delay on their own.) */
15064
fb0f2804c34a (wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents: 15025
diff changeset
4408 if (! wait_for_cell)
14802
45827a5afe4d [!subprocesses] (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 14785
diff changeset
4409 {
45827a5afe4d [!subprocesses] (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 14785
diff changeset
4410 EMACS_TIME timer_delay;
15021
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4411 int old_timers_run;
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4412
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4413 retry:
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4414 old_timers_run = timers_run;
14802
45827a5afe4d [!subprocesses] (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 14785
diff changeset
4415 timer_delay = timer_check (1);
45827a5afe4d [!subprocesses] (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 14785
diff changeset
4416 if (timers_run != old_timers_run && do_display)
15021
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4417 {
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4418 redisplay_preserve_echo_area ();
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4419 /* We must retry, since a timer may have requeued itself
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4420 and that could alter the time delay. */
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4421 goto retry;
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4422 }
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4423
14806
232b90ad50e8 (wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents: 14802
diff changeset
4424 if (! EMACS_TIME_NEG_P (timer_delay) && time_limit != -1)
14802
45827a5afe4d [!subprocesses] (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 14785
diff changeset
4425 {
45827a5afe4d [!subprocesses] (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 14785
diff changeset
4426 EMACS_TIME difference;
14806
232b90ad50e8 (wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents: 14802
diff changeset
4427 EMACS_SUB_TIME (difference, timer_delay, timeout);
14802
45827a5afe4d [!subprocesses] (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 14785
diff changeset
4428 if (EMACS_TIME_NEG_P (difference))
45827a5afe4d [!subprocesses] (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 14785
diff changeset
4429 {
14806
232b90ad50e8 (wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents: 14802
diff changeset
4430 timeout = timer_delay;
14802
45827a5afe4d [!subprocesses] (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 14785
diff changeset
4431 timeout_reduced_for_timers = 1;
45827a5afe4d [!subprocesses] (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 14785
diff changeset
4432 }
45827a5afe4d [!subprocesses] (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 14785
diff changeset
4433 }
45827a5afe4d [!subprocesses] (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 14785
diff changeset
4434 }
45827a5afe4d [!subprocesses] (wait_reading_process_input):
Richard M. Stallman <rms@gnu.org>
parents: 14785
diff changeset
4435
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4436 /* Cause C-g and alarm signals to take immediate action,
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4437 and cause input available signals to zero out timeout. */
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
4438 if (XINT (read_kbd) < 0)
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4439 set_waiting_for_input (&timeout);
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4440
15021
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4441 /* Wait till there is something to do. */
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4442
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4443 if (! XINT (read_kbd) && wait_for_cell == 0)
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4444 FD_ZERO (&waitchannels);
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4445 else
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4446 FD_SET (0, &waitchannels);
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4447
765
e4093444f9f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 692
diff changeset
4448 /* If a frame has been newly mapped and needs updating,
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4449 reprocess its display stuff. */
6429
1dbe24a029fd (wait_reading_process_input, both versions): Don't call
Richard M. Stallman <rms@gnu.org>
parents: 6393
diff changeset
4450 if (frame_garbaged && do_display)
15021
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4451 {
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4452 clear_waiting_for_input ();
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4453 redisplay_preserve_echo_area ();
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4454 if (XINT (read_kbd) < 0)
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4455 set_waiting_for_input (&timeout);
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4456 }
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4457
15025
e5f54fd1c352 (wait_reading_process_input) [!subprocesses]:
Richard M. Stallman <rms@gnu.org>
parents: 15021
diff changeset
4458 if (XINT (read_kbd) && detect_input_pending ())
e5f54fd1c352 (wait_reading_process_input) [!subprocesses]:
Richard M. Stallman <rms@gnu.org>
parents: 15021
diff changeset
4459 {
e5f54fd1c352 (wait_reading_process_input) [!subprocesses]:
Richard M. Stallman <rms@gnu.org>
parents: 15021
diff changeset
4460 nfds = 0;
e5f54fd1c352 (wait_reading_process_input) [!subprocesses]:
Richard M. Stallman <rms@gnu.org>
parents: 15021
diff changeset
4461 FD_ZERO (&waitchannels);
e5f54fd1c352 (wait_reading_process_input) [!subprocesses]:
Richard M. Stallman <rms@gnu.org>
parents: 15021
diff changeset
4462 }
e5f54fd1c352 (wait_reading_process_input) [!subprocesses]:
Richard M. Stallman <rms@gnu.org>
parents: 15021
diff changeset
4463 else
e5f54fd1c352 (wait_reading_process_input) [!subprocesses]:
Richard M. Stallman <rms@gnu.org>
parents: 15021
diff changeset
4464 nfds = select (1, &waitchannels, (SELECT_TYPE *)0, (SELECT_TYPE *)0,
e5f54fd1c352 (wait_reading_process_input) [!subprocesses]:
Richard M. Stallman <rms@gnu.org>
parents: 15021
diff changeset
4465 &timeout);
14806
232b90ad50e8 (wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents: 14802
diff changeset
4466
232b90ad50e8 (wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents: 14802
diff changeset
4467 xerrno = errno;
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4468
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4469 /* Make C-g and alarm signals set flags again */
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4470 clear_waiting_for_input ();
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4471
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4472 /* If we woke up due to SIGWINCH, actually change size now. */
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4473 do_pending_window_change ();
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4474
14806
232b90ad50e8 (wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents: 14802
diff changeset
4475 if (time_limit && nfds == 0 && ! timeout_reduced_for_timers)
232b90ad50e8 (wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents: 14802
diff changeset
4476 /* We waited the full specified time, so return now. */
232b90ad50e8 (wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents: 14802
diff changeset
4477 break;
232b90ad50e8 (wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents: 14802
diff changeset
4478
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4479 if (nfds == -1)
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4480 {
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4481 /* If the system call was interrupted, then go around the
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4482 loop again. */
14806
232b90ad50e8 (wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents: 14802
diff changeset
4483 if (xerrno == EINTR)
14278
3562c5f43780 (wait_reading_process_input) [not subprocesses]: Do
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
4484 FD_ZERO (&waitchannels);
14806
232b90ad50e8 (wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents: 14802
diff changeset
4485 else
232b90ad50e8 (wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents: 14802
diff changeset
4486 error ("select error: %s", strerror (xerrno));
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4487 }
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4488 #ifdef sun
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4489 else if (nfds > 0 && (waitchannels & 1) && interrupt_input)
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4490 /* System sometimes fails to deliver SIGIO. */
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4491 kill (getpid (), SIGIO);
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4492 #endif
3915
55ed7a65746e (wait_reading_process_input): Use SIGIO only if defined.
Richard M. Stallman <rms@gnu.org>
parents: 3826
diff changeset
4493 #ifdef SIGIO
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 648
diff changeset
4494 if (XINT (read_kbd) && interrupt_input && (waitchannels & 1))
14736
b17ec81a6294 (wait_reading_process_input): Use getpid when generating SIGIO.
Richard M. Stallman <rms@gnu.org>
parents: 14671
diff changeset
4495 kill (getpid (), SIGIO);
3915
55ed7a65746e (wait_reading_process_input): Use SIGIO only if defined.
Richard M. Stallman <rms@gnu.org>
parents: 3826
diff changeset
4496 #endif
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4497
14806
232b90ad50e8 (wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents: 14802
diff changeset
4498 /* Check for keyboard input */
232b90ad50e8 (wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents: 14802
diff changeset
4499
15064
fb0f2804c34a (wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents: 15025
diff changeset
4500 if ((XINT (read_kbd) != 0)
14806
232b90ad50e8 (wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents: 14802
diff changeset
4501 && detect_input_pending_run_timers (do_display))
232b90ad50e8 (wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents: 14802
diff changeset
4502 {
232b90ad50e8 (wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents: 14802
diff changeset
4503 swallow_events (do_display);
232b90ad50e8 (wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents: 14802
diff changeset
4504 if (detect_input_pending_run_timers (do_display))
232b90ad50e8 (wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents: 14802
diff changeset
4505 break;
232b90ad50e8 (wait_reading_process_input) [! subprocesses]: Run
Karl Heuer <kwzh@gnu.org>
parents: 14802
diff changeset
4506 }
15021
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4507
15064
fb0f2804c34a (wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents: 15025
diff changeset
4508 /* If wait_for_cell. check for keyboard input
fb0f2804c34a (wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents: 15025
diff changeset
4509 but don't run any timers.
fb0f2804c34a (wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents: 15025
diff changeset
4510 ??? (It seems wrong to me to check for keyboard
fb0f2804c34a (wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents: 15025
diff changeset
4511 input at all when wait_for_cell, but the code
fb0f2804c34a (wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents: 15025
diff changeset
4512 has been this way since July 1994.
fb0f2804c34a (wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents: 15025
diff changeset
4513 Try changing this after version 19.31.) */
fb0f2804c34a (wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents: 15025
diff changeset
4514 if (wait_for_cell
fb0f2804c34a (wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents: 15025
diff changeset
4515 && detect_input_pending ())
fb0f2804c34a (wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents: 15025
diff changeset
4516 {
fb0f2804c34a (wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents: 15025
diff changeset
4517 swallow_events (do_display);
fb0f2804c34a (wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents: 15025
diff changeset
4518 if (detect_input_pending ())
fb0f2804c34a (wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents: 15025
diff changeset
4519 break;
fb0f2804c34a (wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents: 15025
diff changeset
4520 }
fb0f2804c34a (wait_reading_process_input, both definitions):
Richard M. Stallman <rms@gnu.org>
parents: 15025
diff changeset
4521
15021
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4522 /* Exit now if the cell we're waiting for became non-nil. */
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4523 if (wait_for_cell && ! NILP (*wait_for_cell))
af36df262fc5 (wait_reading_process_input) [!subprocesses]: Handle
Richard M. Stallman <rms@gnu.org>
parents: 14998
diff changeset
4524 break;
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4525 }
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4526
2120
fc3cdca22f8d * process.c (process_send_signal): In the TERMIOS code for sending
Jim Blandy <jimb@redhat.com>
parents: 1925
diff changeset
4527 start_polling ();
fc3cdca22f8d * process.c (process_send_signal): In the TERMIOS code for sending
Jim Blandy <jimb@redhat.com>
parents: 1925
diff changeset
4528
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4529 return 0;
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4530 }
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4531
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4532
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4533 DEFUN ("get-buffer-process", Fget_buffer_process, Sget_buffer_process, 1, 1, 0,
6345
862304c3b015 (Fget_buffer_process): Fix typo in comment.
Karl Heuer <kwzh@gnu.org>
parents: 6313
diff changeset
4534 /* Don't confuse make-docfile by having two doc strings for this function.
4231
91a883c56382 (Fget_buffer_process): Delete doc string from
Richard M. Stallman <rms@gnu.org>
parents: 4057
diff changeset
4535 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
4536 0)
588
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4537 (name)
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4538 register Lisp_Object name;
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4539 {
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4540 return Qnil;
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4541 }
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4542
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4543 /* Kill all processes associated with `buffer'.
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4544 If `buffer' is nil, kill all processes.
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4545 Since we have no subprocesses, this does nothing. */
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4546
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4547 kill_buffer_processes (buffer)
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4548 Lisp_Object buffer;
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4549 {
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4550 }
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4551
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4552 init_process ()
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4553 {
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4554 }
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4555
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4556 syms_of_process ()
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4557 {
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4558 defsubr (&Sget_buffer_process);
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4559 }
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4560
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4561
f284b1a71fb3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 578
diff changeset
4562 #endif /* not subprocesses */