(Qforeground_color, Qbackground_color): Declare.
[bpt/emacs.git] / src / process.c
CommitLineData
d0d6b7c5 1/* Asynchronous subprocess control for GNU Emacs.
4a2f9c6a 2 Copyright (C) 1985, 86, 87, 88, 93, 94, 95, 96, 1998
03832893 3 Free Software Foundation, Inc.
d0d6b7c5
JB
4
5This file is part of GNU Emacs.
6
7GNU Emacs is free software; you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
1dc77cc3 9the Free Software Foundation; either version 2, or (at your option)
d0d6b7c5
JB
10any later version.
11
12GNU Emacs is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with GNU Emacs; see the file COPYING. If not, write to
3b7ad313
EN
19the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20Boston, MA 02111-1307, USA. */
d0d6b7c5
JB
21
22
23#include <signal.h>
24
18160b98 25#include <config.h>
d0d6b7c5 26
6720a7fb
JB
27/* This file is split into two parts by the following preprocessor
28 conditional. The 'then' clause contains all of the support for
29 asynchronous subprocesses. The 'else' clause contains stub
30 versions of some of the asynchronous subprocess routines that are
31 often called elsewhere in Emacs, so we don't have to #ifdef the
32 sections that call them. */
33
34\f
d0d6b7c5 35#ifdef subprocesses
d0d6b7c5
JB
36
37#include <stdio.h>
38#include <errno.h>
39#include <setjmp.h>
40#include <sys/types.h> /* some typedefs are used in sys/file.h */
41#include <sys/file.h>
42#include <sys/stat.h>
93b4f699
RS
43#ifdef HAVE_UNISTD_H
44#include <unistd.h>
45#endif
d0d6b7c5 46
e98d950b
RS
47#ifdef WINDOWSNT
48#include <stdlib.h>
49#include <fcntl.h>
50#endif /* not WINDOWSNT */
51
d0d6b7c5
JB
52#ifdef HAVE_SOCKETS /* TCP connection support, if kernel can do it */
53#include <sys/socket.h>
54#include <netdb.h>
55#include <netinet/in.h>
56#include <arpa/inet.h>
f2cfa9a6
RS
57#ifdef NEED_NET_ERRNO_H
58#include <net/errno.h>
59#endif /* NEED_NET_ERRNO_H */
d0d6b7c5
JB
60#endif /* HAVE_SOCKETS */
61
1d2c16fa
RS
62/* TERM is a poor-man's SLIP, used on Linux. */
63#ifdef TERM
64#include <client.h>
65#endif
66
cf32fea0
PR
67/* On some systems, e.g. DGUX, inet_addr returns a 'struct in_addr'. */
68#ifdef HAVE_BROKEN_INET_ADDR
79967d5e
RS
69#define IN_ADDR struct in_addr
70#define NUMERIC_ADDR_ERROR (numeric_addr.s_addr == -1)
71#else
72#define IN_ADDR unsigned long
73#define NUMERIC_ADDR_ERROR (numeric_addr == -1)
74#endif
75
6df54671 76#if defined(BSD_SYSTEM) || defined(STRIDE)
d0d6b7c5 77#include <sys/ioctl.h>
0ad77c54 78#if !defined (O_NDELAY) && defined (HAVE_PTYS) && !defined(USG5)
d0d6b7c5
JB
79#include <fcntl.h>
80#endif /* HAVE_PTYS and no O_NDELAY */
6df54671 81#endif /* BSD_SYSTEM || STRIDE */
d0d6b7c5 82
99e3d726
RS
83#ifdef BROKEN_O_NONBLOCK
84#undef O_NONBLOCK
85#endif /* BROKEN_O_NONBLOCK */
86
d0d6b7c5
JB
87#ifdef NEED_BSDTTY
88#include <bsdtty.h>
89#endif
90
d0d6b7c5
JB
91#ifdef IRIS
92#include <sys/sysmacros.h> /* for "minor" */
93#endif /* not IRIS */
94
95#include "systime.h"
36ebaafa 96#include "systty.h"
d0d6b7c5
JB
97
98#include "lisp.h"
99#include "window.h"
100#include "buffer.h"
0fa1789e
KH
101#include "charset.h"
102#include "coding.h"
d0d6b7c5
JB
103#include "process.h"
104#include "termhooks.h"
105#include "termopts.h"
106#include "commands.h"
1dc77cc3 107#include "frame.h"
ececcbec 108#include "blockinput.h"
dfcf069d
AS
109#include "keyboard.h"
110#include "dispextern.h"
d0d6b7c5 111
0c9960e9
RS
112#define max(a, b) ((a) > (b) ? (a) : (b))
113
dd2281ae 114Lisp_Object Qprocessp;
d0d6b7c5 115Lisp_Object Qrun, Qstop, Qsignal, Qopen, Qclosed;
6545aada 116Lisp_Object Qlast_nonmenu_event;
d0d6b7c5
JB
117/* Qexit is declared and initialized in eval.c. */
118
119/* a process object is a network connection when its childp field is neither
de282a05 120 Qt nor Qnil but is instead a cons cell (HOSTNAME PORTNUM). */
d0d6b7c5
JB
121
122#ifdef HAVE_SOCKETS
de282a05 123#define NETCONN_P(p) (GC_CONSP (XPROCESS (p)->childp))
d0d6b7c5
JB
124#else
125#define NETCONN_P(p) 0
126#endif /* HAVE_SOCKETS */
127
128/* Define first descriptor number available for subprocesses. */
129#ifdef VMS
130#define FIRST_PROC_DESC 1
131#else /* Not VMS */
132#define FIRST_PROC_DESC 3
133#endif
134
135/* Define SIGCHLD as an alias for SIGCLD. There are many conditionals
136 testing SIGCHLD. */
137
138#if !defined (SIGCHLD) && defined (SIGCLD)
139#define SIGCHLD SIGCLD
140#endif /* SIGCLD */
141
142#include "syssignal.h"
143
889255b4 144#include "syswait.h"
d0d6b7c5 145
b062d1fe
RM
146extern int errno;
147extern char *strerror ();
148#ifdef VMS
d0d6b7c5 149extern char *sys_errlist[];
b062d1fe 150#endif
d0d6b7c5 151
5f0929a7
RS
152#ifndef HAVE_H_ERRNO
153extern int h_errno;
154#endif
155
a86928f7 156#ifndef SYS_SIGLIST_DECLARED
d0d6b7c5
JB
157#ifndef VMS
158#ifndef BSD4_1
e98d950b 159#ifndef WINDOWSNT
084fd64a 160#ifndef LINUX
d0d6b7c5 161extern char *sys_siglist[];
a0e4d3f3
RS
162#endif /* not LINUX */
163#else /* BSD4_1 */
d0d6b7c5
JB
164char *sys_siglist[] =
165 {
166 "bum signal!!",
167 "hangup",
168 "interrupt",
169 "quit",
170 "illegal instruction",
171 "trace trap",
172 "iot instruction",
173 "emt instruction",
174 "floating point exception",
175 "kill",
176 "bus error",
177 "segmentation violation",
178 "bad argument to system call",
179 "write on a pipe with no one to read it",
180 "alarm clock",
181 "software termination signal from kill",
182 "status signal",
183 "sendable stop signal not from tty",
184 "stop signal from tty",
185 "continue a stopped process",
186 "child status has changed",
187 "background read attempted from control tty",
188 "background write attempted from control tty",
189 "input record available at control tty",
190 "exceeded CPU time limit",
191 "exceeded file size limit"
192 };
e98d950b 193#endif /* not WINDOWSNT */
d0d6b7c5
JB
194#endif
195#endif /* VMS */
a86928f7 196#endif /* ! SYS_SIGLIST_DECLARED */
d0d6b7c5 197
d0d6b7c5
JB
198/* t means use pty, nil means use a pipe,
199 maybe other values to come. */
dd2281ae 200static Lisp_Object Vprocess_connection_type;
d0d6b7c5
JB
201
202#ifdef SKTPAIR
203#ifndef HAVE_SOCKETS
204#include <sys/socket.h>
205#endif
206#endif /* SKTPAIR */
207
17d02632
KH
208/* These next two vars are non-static since sysdep.c uses them in the
209 emulation of `select'. */
d0d6b7c5 210/* Number of events of change of status of a process. */
17d02632 211int process_tick;
d0d6b7c5 212/* Number of events for which the user or sentinel has been notified. */
17d02632 213int update_tick;
d0d6b7c5 214
5886acf9 215#include "sysselect.h"
d0d6b7c5 216
583dcae4 217/* If we support a window system, turn on the code to poll periodically
44ade2e9 218 to detect C-g. It isn't actually used when doing interrupt input. */
583dcae4 219#ifdef HAVE_WINDOW_SYSTEM
44ade2e9
RS
220#define POLL_FOR_INPUT
221#endif
222
a69281ff 223/* Mask of bits indicating the descriptors that we wait for input on. */
d0d6b7c5 224
dd2281ae
RS
225static SELECT_TYPE input_wait_mask;
226
a69281ff
RS
227/* Mask that excludes keyboard input descriptor (s). */
228
229static SELECT_TYPE non_keyboard_wait_mask;
230
b5dc1c83
RS
231/* Mask that excludes process input descriptor (s). */
232
233static SELECT_TYPE non_process_wait_mask;
234
7d0e672e
RS
235/* The largest descriptor currently in use for a process object. */
236static int max_process_desc;
237
a69281ff
RS
238/* The largest descriptor currently in use for keyboard input. */
239static int max_keyboard_desc;
d0d6b7c5 240
dd2281ae
RS
241/* Nonzero means delete a process right away if it exits. */
242static int delete_exited_processes;
d0d6b7c5
JB
243
244/* Indexed by descriptor, gives the process (if any) for that descriptor */
41f3aa98 245Lisp_Object chan_process[MAXDESC];
d0d6b7c5
JB
246
247/* Alist of elements (NAME . PROCESS) */
41f3aa98 248Lisp_Object Vprocess_alist;
d0d6b7c5
JB
249
250/* Buffered-ahead input char from process, indexed by channel.
251 -1 means empty (no char is buffered).
252 Used on sys V where the only way to tell if there is any
253 output from the process is to read at least one char.
254 Always -1 on systems that support FIONREAD. */
255
e98d950b
RS
256/* Don't make static; need to access externally. */
257int proc_buffered_char[MAXDESC];
dd2281ae 258
0fa1789e 259/* Table of `struct coding-system' for each process. */
c7580538
KH
260static struct coding_system *proc_decode_coding_system[MAXDESC];
261static struct coding_system *proc_encode_coding_system[MAXDESC];
0fa1789e 262
dd2281ae 263static Lisp_Object get_process ();
93b4f699 264
fb4c3627 265extern EMACS_TIME timer_check ();
5de50bfb 266extern int timers_run;
fb4c3627 267
93b4f699
RS
268/* Maximum number of bytes to send to a pty without an eof. */
269static int pty_max_bytes;
3b9a3dfa 270
14dc6093 271extern Lisp_Object Vfile_name_coding_system, Vdefault_file_name_coding_system;
a932f187 272
875e6b94
KH
273#ifdef HAVE_PTYS
274/* The file name of the pty opened by allocate_pty. */
3b9a3dfa
RS
275
276static char pty_name[24];
875e6b94 277#endif
d0d6b7c5
JB
278\f
279/* Compute the Lisp form of the process status, p->status, from
280 the numeric status that was returned by `wait'. */
281
f9738840
JB
282Lisp_Object status_convert ();
283
dfcf069d 284void
d0d6b7c5
JB
285update_status (p)
286 struct Lisp_Process *p;
287{
288 union { int i; WAITTYPE wt; } u;
289 u.i = XFASTINT (p->raw_status_low) + (XFASTINT (p->raw_status_high) << 16);
290 p->status = status_convert (u.wt);
291 p->raw_status_low = Qnil;
292 p->raw_status_high = Qnil;
293}
294
91d10fa8 295/* Convert a process status word in Unix format to
d0d6b7c5
JB
296 the list that we use internally. */
297
298Lisp_Object
299status_convert (w)
300 WAITTYPE w;
301{
302 if (WIFSTOPPED (w))
303 return Fcons (Qstop, Fcons (make_number (WSTOPSIG (w)), Qnil));
304 else if (WIFEXITED (w))
305 return Fcons (Qexit, Fcons (make_number (WRETCODE (w)),
306 WCOREDUMP (w) ? Qt : Qnil));
307 else if (WIFSIGNALED (w))
308 return Fcons (Qsignal, Fcons (make_number (WTERMSIG (w)),
309 WCOREDUMP (w) ? Qt : Qnil));
310 else
311 return Qrun;
312}
313
314/* Given a status-list, extract the three pieces of information
315 and store them individually through the three pointers. */
316
317void
318decode_status (l, symbol, code, coredump)
319 Lisp_Object l;
320 Lisp_Object *symbol;
321 int *code;
322 int *coredump;
323{
324 Lisp_Object tem;
325
bcd69aea 326 if (SYMBOLP (l))
d0d6b7c5
JB
327 {
328 *symbol = l;
329 *code = 0;
330 *coredump = 0;
331 }
332 else
333 {
334 *symbol = XCONS (l)->car;
335 tem = XCONS (l)->cdr;
336 *code = XFASTINT (XCONS (tem)->car);
f9738840 337 tem = XCONS (tem)->cdr;
d0d6b7c5
JB
338 *coredump = !NILP (tem);
339 }
340}
341
342/* Return a string describing a process status list. */
343
344Lisp_Object
345status_message (status)
346 Lisp_Object status;
347{
348 Lisp_Object symbol;
349 int code, coredump;
350 Lisp_Object string, string2;
351
352 decode_status (status, &symbol, &code, &coredump);
353
354 if (EQ (symbol, Qsignal) || EQ (symbol, Qstop))
355 {
b97ad9ea
RS
356 char *signame = 0;
357 if (code < NSIG)
358 {
b0310da4 359#ifndef VMS
ed0cae05
RS
360 /* Cast to suppress warning if the table has const char *. */
361 signame = (char *) sys_siglist[code];
b0310da4 362#else
b97ad9ea 363 signame = sys_errlist[code];
b0310da4 364#endif
b97ad9ea
RS
365 }
366 if (signame == 0)
367 signame = "unknown";
368 string = build_string (signame);
d0d6b7c5
JB
369 string2 = build_string (coredump ? " (core dumped)\n" : "\n");
370 XSTRING (string)->data[0] = DOWNCASE (XSTRING (string)->data[0]);
371 return concat2 (string, string2);
372 }
373 else if (EQ (symbol, Qexit))
374 {
375 if (code == 0)
376 return build_string ("finished\n");
f2980264 377 string = Fnumber_to_string (make_number (code));
d0d6b7c5
JB
378 string2 = build_string (coredump ? " (core dumped)\n" : "\n");
379 return concat2 (build_string ("exited abnormally with code "),
380 concat2 (string, string2));
381 }
382 else
383 return Fcopy_sequence (Fsymbol_name (symbol));
384}
385\f
386#ifdef HAVE_PTYS
d0d6b7c5 387
875e6b94
KH
388/* Open an available pty, returning a file descriptor.
389 Return -1 on failure.
390 The file name of the terminal corresponding to the pty
391 is left in the variable pty_name. */
392
d0d6b7c5
JB
393int
394allocate_pty ()
395{
396 struct stat stb;
dfcf069d 397 register int c, i;
d0d6b7c5
JB
398 int fd;
399
32676c08
JB
400 /* Some systems name their pseudoterminals so that there are gaps in
401 the usual sequence - for example, on HP9000/S700 systems, there
402 are no pseudoterminals with names ending in 'f'. So we wait for
403 three failures in a row before deciding that we've reached the
404 end of the ptys. */
405 int failed_count = 0;
406
d0d6b7c5
JB
407#ifdef PTY_ITERATION
408 PTY_ITERATION
409#else
410 for (c = FIRST_PTY_LETTER; c <= 'z'; c++)
411 for (i = 0; i < 16; i++)
412#endif
413 {
414#ifdef PTY_NAME_SPRINTF
415 PTY_NAME_SPRINTF
d0d6b7c5
JB
416#else
417 sprintf (pty_name, "/dev/pty%c%x", c, i);
d0d6b7c5
JB
418#endif /* no PTY_NAME_SPRINTF */
419
4d7c105e
RS
420#ifdef PTY_OPEN
421 PTY_OPEN;
422#else /* no PTY_OPEN */
32676c08
JB
423#ifdef IRIS
424 /* Unusual IRIS code */
425 *ptyv = open ("/dev/ptc", O_RDWR | O_NDELAY, 0);
426 if (fd < 0)
427 return -1;
428 if (fstat (fd, &stb) < 0)
d0d6b7c5 429 return -1;
4d7c105e 430#else /* not IRIS */
32676c08
JB
431 if (stat (pty_name, &stb) < 0)
432 {
433 failed_count++;
434 if (failed_count >= 3)
435 return -1;
436 }
437 else
438 failed_count = 0;
d0d6b7c5
JB
439#ifdef O_NONBLOCK
440 fd = open (pty_name, O_RDWR | O_NONBLOCK, 0);
441#else
442 fd = open (pty_name, O_RDWR | O_NDELAY, 0);
443#endif
4d7c105e
RS
444#endif /* not IRIS */
445#endif /* no PTY_OPEN */
d0d6b7c5
JB
446
447 if (fd >= 0)
448 {
449 /* check to make certain that both sides are available
450 this avoids a nasty yet stupid bug in rlogins */
451#ifdef PTY_TTY_NAME_SPRINTF
452 PTY_TTY_NAME_SPRINTF
d0d6b7c5
JB
453#else
454 sprintf (pty_name, "/dev/tty%c%x", c, i);
d0d6b7c5
JB
455#endif /* no PTY_TTY_NAME_SPRINTF */
456#ifndef UNIPLUS
457 if (access (pty_name, 6) != 0)
458 {
459 close (fd);
fad97cbe 460#if !defined(IRIS) && !defined(__sgi)
d0d6b7c5
JB
461 continue;
462#else
463 return -1;
464#endif /* IRIS */
465 }
466#endif /* not UNIPLUS */
467 setup_pty (fd);
468 return fd;
469 }
470 }
471 return -1;
472}
473#endif /* HAVE_PTYS */
474\f
475Lisp_Object
476make_process (name)
477 Lisp_Object name;
478{
23d6bb9c 479 struct Lisp_Vector *vec;
d0d6b7c5
JB
480 register Lisp_Object val, tem, name1;
481 register struct Lisp_Process *p;
482 char suffix[10];
483 register int i;
484
23d6bb9c
KH
485 vec = allocate_vectorlike ((EMACS_INT) VECSIZE (struct Lisp_Process));
486 for (i = 0; i < VECSIZE (struct Lisp_Process); i++)
487 vec->contents[i] = Qnil;
488 vec->size = VECSIZE (struct Lisp_Process);
489 p = (struct Lisp_Process *)vec;
490
1d056e64
KH
491 XSETINT (p->infd, -1);
492 XSETINT (p->outfd, -1);
22719df2
KH
493 XSETFASTINT (p->pid, 0);
494 XSETFASTINT (p->tick, 0);
495 XSETFASTINT (p->update_tick, 0);
d0d6b7c5
JB
496 p->raw_status_low = Qnil;
497 p->raw_status_high = Qnil;
498 p->status = Qrun;
499 p->mark = Fmake_marker ();
500
501 /* If name is already in use, modify it until it is unused. */
502
503 name1 = name;
504 for (i = 1; ; i++)
505 {
506 tem = Fget_process (name1);
507 if (NILP (tem)) break;
508 sprintf (suffix, "<%d>", i);
509 name1 = concat2 (name, build_string (suffix));
510 }
511 name = name1;
512 p->name = name;
23d6bb9c 513 XSETPROCESS (val, p);
d0d6b7c5
JB
514 Vprocess_alist = Fcons (Fcons (name, val), Vprocess_alist);
515 return val;
516}
517
dfcf069d 518void
d0d6b7c5
JB
519remove_process (proc)
520 register Lisp_Object proc;
521{
522 register Lisp_Object pair;
523
524 pair = Frassq (proc, Vprocess_alist);
525 Vprocess_alist = Fdelq (pair, Vprocess_alist);
d0d6b7c5
JB
526
527 deactivate_process (proc);
528}
529\f
530DEFUN ("processp", Fprocessp, Sprocessp, 1, 1, 0,
531 "Return t if OBJECT is a process.")
4ee3e309
EN
532 (object)
533 Lisp_Object object;
d0d6b7c5 534{
4ee3e309 535 return PROCESSP (object) ? Qt : Qnil;
d0d6b7c5
JB
536}
537
538DEFUN ("get-process", Fget_process, Sget_process, 1, 1, 0,
539 "Return the process named NAME, or nil if there is none.")
540 (name)
541 register Lisp_Object name;
542{
bcd69aea 543 if (PROCESSP (name))
d0d6b7c5
JB
544 return name;
545 CHECK_STRING (name, 0);
546 return Fcdr (Fassoc (name, Vprocess_alist));
547}
548
549DEFUN ("get-buffer-process", Fget_buffer_process, Sget_buffer_process, 1, 1, 0,
550 "Return the (or, a) process associated with BUFFER.\n\
551BUFFER may be a buffer or the name of one.")
4ee3e309
EN
552 (buffer)
553 register Lisp_Object buffer;
d0d6b7c5
JB
554{
555 register Lisp_Object buf, tail, proc;
556
4ee3e309
EN
557 if (NILP (buffer)) return Qnil;
558 buf = Fget_buffer (buffer);
d0d6b7c5
JB
559 if (NILP (buf)) return Qnil;
560
561 for (tail = Vprocess_alist; !NILP (tail); tail = Fcdr (tail))
562 {
563 proc = Fcdr (Fcar (tail));
bcd69aea 564 if (PROCESSP (proc) && EQ (XPROCESS (proc)->buffer, buf))
d0d6b7c5
JB
565 return proc;
566 }
567 return Qnil;
568}
569
ebb9e16f
JB
570/* This is how commands for the user decode process arguments. It
571 accepts a process, a process name, a buffer, a buffer name, or nil.
572 Buffers denote the first process in the buffer, and nil denotes the
573 current buffer. */
d0d6b7c5 574
77b221b1 575static Lisp_Object
d0d6b7c5
JB
576get_process (name)
577 register Lisp_Object name;
578{
1619761d
KH
579 register Lisp_Object proc, obj;
580 if (STRINGP (name))
581 {
582 obj = Fget_process (name);
583 if (NILP (obj))
584 obj = Fget_buffer (name);
585 if (NILP (obj))
586 error ("Process %s does not exist", XSTRING (name)->data);
587 }
588 else if (NILP (name))
589 obj = Fcurrent_buffer ();
d0d6b7c5 590 else
1619761d
KH
591 obj = name;
592
593 /* Now obj should be either a buffer object or a process object.
594 */
595 if (BUFFERP (obj))
d0d6b7c5 596 {
1619761d 597 proc = Fget_buffer_process (obj);
d0d6b7c5 598 if (NILP (proc))
1619761d 599 error ("Buffer %s has no process", XSTRING (XBUFFER (obj)->name)->data);
d0d6b7c5 600 }
d0d6b7c5 601 else
1619761d
KH
602 {
603 CHECK_PROCESS (obj, 0);
604 proc = obj;
605 }
606 return proc;
d0d6b7c5
JB
607}
608
609DEFUN ("delete-process", Fdelete_process, Sdelete_process, 1, 1, 0,
610 "Delete PROCESS: kill it and forget about it immediately.\n\
ebb9e16f
JB
611PROCESS may be a process, a buffer, the name of a process or buffer, or\n\
612nil, indicating the current buffer's process.")
4ee3e309
EN
613 (process)
614 register Lisp_Object process;
d0d6b7c5 615{
4ee3e309
EN
616 process = get_process (process);
617 XPROCESS (process)->raw_status_low = Qnil;
618 XPROCESS (process)->raw_status_high = Qnil;
619 if (NETCONN_P (process))
d0d6b7c5 620 {
4ee3e309
EN
621 XPROCESS (process)->status = Fcons (Qexit, Fcons (make_number (0), Qnil));
622 XSETINT (XPROCESS (process)->tick, ++process_tick);
d0d6b7c5 623 }
4ee3e309 624 else if (XINT (XPROCESS (process)->infd) >= 0)
d0d6b7c5 625 {
4ee3e309 626 Fkill_process (process, Qnil);
d0d6b7c5 627 /* Do this now, since remove_process will make sigchld_handler do nothing. */
4ee3e309 628 XPROCESS (process)->status
d0d6b7c5 629 = Fcons (Qsignal, Fcons (make_number (SIGKILL), Qnil));
4ee3e309 630 XSETINT (XPROCESS (process)->tick, ++process_tick);
d0d6b7c5
JB
631 status_notify ();
632 }
4ee3e309 633 remove_process (process);
d0d6b7c5
JB
634 return Qnil;
635}
636\f
637DEFUN ("process-status", Fprocess_status, Sprocess_status, 1, 1, 0,
638 "Return the status of PROCESS: a symbol, one of these:\n\
639run -- for a process that is running.\n\
640stop -- for a process stopped but continuable.\n\
641exit -- for a process that has exited.\n\
642signal -- for a process that has got a fatal signal.\n\
643open -- for a network stream connection that is open.\n\
644closed -- for a network stream connection that is closed.\n\
ebb9e16f
JB
645nil -- if arg is a process name and no such process exists.\n\
646PROCESS may be a process, a buffer, the name of a process or buffer, or\n\
647nil, indicating the current buffer's process.")
4ee3e309
EN
648 (process)
649 register Lisp_Object process;
d0d6b7c5
JB
650{
651 register struct Lisp_Process *p;
652 register Lisp_Object status;
343f4114 653
4ee3e309
EN
654 if (STRINGP (process))
655 process = Fget_process (process);
343f4114 656 else
4ee3e309 657 process = get_process (process);
343f4114 658
4ee3e309
EN
659 if (NILP (process))
660 return process;
343f4114 661
4ee3e309 662 p = XPROCESS (process);
d0d6b7c5
JB
663 if (!NILP (p->raw_status_low))
664 update_status (p);
665 status = p->status;
bcd69aea 666 if (CONSP (status))
d0d6b7c5 667 status = XCONS (status)->car;
4ee3e309 668 if (NETCONN_P (process))
d0d6b7c5
JB
669 {
670 if (EQ (status, Qrun))
671 status = Qopen;
672 else if (EQ (status, Qexit))
673 status = Qclosed;
674 }
675 return status;
676}
677
678DEFUN ("process-exit-status", Fprocess_exit_status, Sprocess_exit_status,
679 1, 1, 0,
680 "Return the exit status of PROCESS or the signal number that killed it.\n\
681If PROCESS has not yet exited or died, return 0.")
4ee3e309
EN
682 (process)
683 register Lisp_Object process;
d0d6b7c5 684{
4ee3e309
EN
685 CHECK_PROCESS (process, 0);
686 if (!NILP (XPROCESS (process)->raw_status_low))
687 update_status (XPROCESS (process));
688 if (CONSP (XPROCESS (process)->status))
689 return XCONS (XCONS (XPROCESS (process)->status)->cdr)->car;
d0d6b7c5
JB
690 return make_number (0);
691}
692
693DEFUN ("process-id", Fprocess_id, Sprocess_id, 1, 1, 0,
694 "Return the process id of PROCESS.\n\
695This is the pid of the Unix process which PROCESS uses or talks to.\n\
696For a network connection, this value is nil.")
4ee3e309
EN
697 (process)
698 register Lisp_Object process;
d0d6b7c5 699{
4ee3e309
EN
700 CHECK_PROCESS (process, 0);
701 return XPROCESS (process)->pid;
d0d6b7c5
JB
702}
703
704DEFUN ("process-name", Fprocess_name, Sprocess_name, 1, 1, 0,
705 "Return the name of PROCESS, as a string.\n\
706This is the name of the program invoked in PROCESS,\n\
707possibly modified to make it unique among process names.")
4ee3e309
EN
708 (process)
709 register Lisp_Object process;
d0d6b7c5 710{
4ee3e309
EN
711 CHECK_PROCESS (process, 0);
712 return XPROCESS (process)->name;
d0d6b7c5
JB
713}
714
715DEFUN ("process-command", Fprocess_command, Sprocess_command, 1, 1, 0,
716 "Return the command that was executed to start PROCESS.\n\
717This is a list of strings, the first string being the program executed\n\
718and the rest of the strings being the arguments given to it.\n\
719For a non-child channel, this is nil.")
4ee3e309
EN
720 (process)
721 register Lisp_Object process;
d0d6b7c5 722{
4ee3e309
EN
723 CHECK_PROCESS (process, 0);
724 return XPROCESS (process)->command;
d0d6b7c5
JB
725}
726
3b9a3dfa
RS
727DEFUN ("process-tty-name", Fprocess_tty_name, Sprocess_tty_name, 1, 1, 0,
728 "Return the name of the terminal PROCESS uses, or nil if none.\n\
729This is the terminal that the process itself reads and writes on,\n\
730not the name of the pty that Emacs uses to talk with that terminal.")
4ee3e309
EN
731 (process)
732 register Lisp_Object process;
3b9a3dfa 733{
4ee3e309
EN
734 CHECK_PROCESS (process, 0);
735 return XPROCESS (process)->tty_name;
3b9a3dfa
RS
736}
737
d0d6b7c5
JB
738DEFUN ("set-process-buffer", Fset_process_buffer, Sset_process_buffer,
739 2, 2, 0,
740 "Set buffer associated with PROCESS to BUFFER (a buffer, or nil).")
4ee3e309
EN
741 (process, buffer)
742 register Lisp_Object process, buffer;
d0d6b7c5 743{
4ee3e309 744 CHECK_PROCESS (process, 0);
d0d6b7c5
JB
745 if (!NILP (buffer))
746 CHECK_BUFFER (buffer, 1);
4ee3e309 747 XPROCESS (process)->buffer = buffer;
d0d6b7c5
JB
748 return buffer;
749}
750
751DEFUN ("process-buffer", Fprocess_buffer, Sprocess_buffer,
752 1, 1, 0,
753 "Return the buffer PROCESS is associated with.\n\
754Output from PROCESS is inserted in this buffer\n\
755unless PROCESS has a filter.")
4ee3e309
EN
756 (process)
757 register Lisp_Object process;
d0d6b7c5 758{
4ee3e309
EN
759 CHECK_PROCESS (process, 0);
760 return XPROCESS (process)->buffer;
d0d6b7c5
JB
761}
762
763DEFUN ("process-mark", Fprocess_mark, Sprocess_mark,
764 1, 1, 0,
765 "Return the marker for the end of the last output from PROCESS.")
4ee3e309
EN
766 (process)
767 register Lisp_Object process;
d0d6b7c5 768{
4ee3e309
EN
769 CHECK_PROCESS (process, 0);
770 return XPROCESS (process)->mark;
d0d6b7c5
JB
771}
772
773DEFUN ("set-process-filter", Fset_process_filter, Sset_process_filter,
774 2, 2, 0,
775 "Give PROCESS the filter function FILTER; nil means no filter.\n\
20ddfff7 776t means stop accepting output from the process.\n\
d0d6b7c5
JB
777When a process has a filter, each time it does output\n\
778the entire string of output is passed to the filter.\n\
779The filter gets two arguments: the process and the string of output.\n\
780If the process has a filter, its buffer is not used for output.")
4ee3e309
EN
781 (process, filter)
782 register Lisp_Object process, filter;
d0d6b7c5 783{
4ee3e309 784 CHECK_PROCESS (process, 0);
20ddfff7 785 if (EQ (filter, Qt))
a69281ff 786 {
4ee3e309
EN
787 FD_CLR (XINT (XPROCESS (process)->infd), &input_wait_mask);
788 FD_CLR (XINT (XPROCESS (process)->infd), &non_keyboard_wait_mask);
a69281ff 789 }
4ee3e309 790 else if (EQ (XPROCESS (process)->filter, Qt))
a69281ff 791 {
4ee3e309
EN
792 FD_SET (XINT (XPROCESS (process)->infd), &input_wait_mask);
793 FD_SET (XINT (XPROCESS (process)->infd), &non_keyboard_wait_mask);
a69281ff 794 }
4ee3e309 795 XPROCESS (process)->filter = filter;
d0d6b7c5
JB
796 return filter;
797}
798
799DEFUN ("process-filter", Fprocess_filter, Sprocess_filter,
800 1, 1, 0,
801 "Returns the filter function of PROCESS; nil if none.\n\
802See `set-process-filter' for more info on filter functions.")
4ee3e309
EN
803 (process)
804 register Lisp_Object process;
d0d6b7c5 805{
4ee3e309
EN
806 CHECK_PROCESS (process, 0);
807 return XPROCESS (process)->filter;
d0d6b7c5
JB
808}
809
810DEFUN ("set-process-sentinel", Fset_process_sentinel, Sset_process_sentinel,
811 2, 2, 0,
812 "Give PROCESS the sentinel SENTINEL; nil for none.\n\
813The sentinel is called as a function when the process changes state.\n\
814It gets two arguments: the process, and a string describing the change.")
4ee3e309
EN
815 (process, sentinel)
816 register Lisp_Object process, sentinel;
d0d6b7c5 817{
4ee3e309
EN
818 CHECK_PROCESS (process, 0);
819 XPROCESS (process)->sentinel = sentinel;
d0d6b7c5
JB
820 return sentinel;
821}
822
823DEFUN ("process-sentinel", Fprocess_sentinel, Sprocess_sentinel,
824 1, 1, 0,
825 "Return the sentinel of PROCESS; nil if none.\n\
826See `set-process-sentinel' for more info on sentinels.")
4ee3e309
EN
827 (process)
828 register Lisp_Object process;
d0d6b7c5 829{
4ee3e309
EN
830 CHECK_PROCESS (process, 0);
831 return XPROCESS (process)->sentinel;
d0d6b7c5
JB
832}
833
396df322
RS
834DEFUN ("set-process-window-size", Fset_process_window_size,
835 Sset_process_window_size, 3, 3, 0,
836 "Tell PROCESS that it has logical window size HEIGHT and WIDTH.")
4ee3e309
EN
837 (process, height, width)
838 register Lisp_Object process, height, width;
396df322 839{
4ee3e309 840 CHECK_PROCESS (process, 0);
396df322
RS
841 CHECK_NATNUM (height, 0);
842 CHECK_NATNUM (width, 0);
4ee3e309 843 if (set_window_size (XINT (XPROCESS (process)->infd),
396df322
RS
844 XINT (height), XINT(width)) <= 0)
845 return Qnil;
846 else
847 return Qt;
848}
849
d0d6b7c5
JB
850DEFUN ("process-kill-without-query", Fprocess_kill_without_query,
851 Sprocess_kill_without_query, 1, 2, 0,
852 "Say no query needed if PROCESS is running when Emacs is exited.\n\
f2d2dbfe 853Optional second argument if non-nil says to require a query.\n\
d0d6b7c5 854Value is t if a query was formerly required.")
4ee3e309
EN
855 (process, value)
856 register Lisp_Object process, value;
d0d6b7c5
JB
857{
858 Lisp_Object tem;
859
4ee3e309
EN
860 CHECK_PROCESS (process, 0);
861 tem = XPROCESS (process)->kill_without_query;
862 XPROCESS (process)->kill_without_query = Fnull (value);
d0d6b7c5
JB
863
864 return Fnull (tem);
865}
312c9964 866
de282a05
RS
867DEFUN ("process-contact", Fprocess_contact, Sprocess_contact,
868 1, 1, 0,
869 "Return the contact info of PROCESS; t for a real child.\n\
870For a net connection, the value is a cons cell of the form (HOST SERVICE).")
871 (process)
872 register Lisp_Object process;
873{
874 CHECK_PROCESS (process, 0);
875 return XPROCESS (process)->childp;
876}
877
312c9964
RS
878#if 0 /* Turned off because we don't currently record this info
879 in the process. Perhaps add it. */
880DEFUN ("process-connection", Fprocess_connection, Sprocess_connection, 1, 1, 0,
881 "Return the connection type of `PROCESS'.\n\
882The value is `nil' for a pipe,\n\
883`t' or `pty' for a pty, or `stream' for a socket connection.")
884 (process)
885 Lisp_Object process;
886{
887 return XPROCESS (process)->type;
888}
889#endif
d0d6b7c5
JB
890\f
891Lisp_Object
892list_processes_1 ()
893{
894 register Lisp_Object tail, tem;
895 Lisp_Object proc, minspace, tem1;
896 register struct buffer *old = current_buffer;
897 register struct Lisp_Process *p;
898 register int state;
899 char tembuf[80];
900
22719df2 901 XSETFASTINT (minspace, 1);
d0d6b7c5
JB
902
903 set_buffer_internal (XBUFFER (Vstandard_output));
904 Fbuffer_disable_undo (Vstandard_output);
905
906 current_buffer->truncate_lines = Qt;
907
908 write_string ("\
a9fde32e
KH
909Proc Status Buffer Tty Command\n\
910---- ------ ------ --- -------\n", -1);
d0d6b7c5
JB
911
912 for (tail = Vprocess_alist; !NILP (tail); tail = Fcdr (tail))
913 {
914 Lisp_Object symbol;
915
916 proc = Fcdr (Fcar (tail));
917 p = XPROCESS (proc);
918 if (NILP (p->childp))
919 continue;
920
921 Finsert (1, &p->name);
922 Findent_to (make_number (13), minspace);
923
924 if (!NILP (p->raw_status_low))
925 update_status (p);
926 symbol = p->status;
bcd69aea 927 if (CONSP (p->status))
d0d6b7c5
JB
928 symbol = XCONS (p->status)->car;
929
930
931 if (EQ (symbol, Qsignal))
932 {
933 Lisp_Object tem;
934 tem = Fcar (Fcdr (p->status));
935#ifdef VMS
936 if (XINT (tem) < NSIG)
b0310da4 937 write_string (sys_errlist [XINT (tem)], -1);
d0d6b7c5
JB
938 else
939#endif
940 Fprinc (symbol, Qnil);
941 }
942 else if (NETCONN_P (proc))
943 {
944 if (EQ (symbol, Qrun))
945 write_string ("open", -1);
946 else if (EQ (symbol, Qexit))
947 write_string ("closed", -1);
948 else
949 Fprinc (symbol, Qnil);
950 }
951 else
952 Fprinc (symbol, Qnil);
953
954 if (EQ (symbol, Qexit))
955 {
956 Lisp_Object tem;
957 tem = Fcar (Fcdr (p->status));
958 if (XFASTINT (tem))
959 {
3162bafa 960 sprintf (tembuf, " %d", (int) XFASTINT (tem));
d0d6b7c5
JB
961 write_string (tembuf, -1);
962 }
963 }
964
965 if (EQ (symbol, Qsignal) || EQ (symbol, Qexit))
966 remove_process (proc);
967
968 Findent_to (make_number (22), minspace);
969 if (NILP (p->buffer))
970 insert_string ("(none)");
971 else if (NILP (XBUFFER (p->buffer)->name))
972 insert_string ("(Killed)");
973 else
974 Finsert (1, &XBUFFER (p->buffer)->name);
975
976 Findent_to (make_number (37), minspace);
977
a9fde32e
KH
978 if (STRINGP (p->tty_name))
979 Finsert (1, &p->tty_name);
980 else
981 insert_string ("(none)");
982
983 Findent_to (make_number (49), minspace);
984
d0d6b7c5
JB
985 if (NETCONN_P (proc))
986 {
987 sprintf (tembuf, "(network stream connection to %s)\n",
de282a05 988 XSTRING (XCONS (p->childp)->car)->data);
d0d6b7c5
JB
989 insert_string (tembuf);
990 }
991 else
992 {
993 tem = p->command;
994 while (1)
995 {
996 tem1 = Fcar (tem);
997 Finsert (1, &tem1);
998 tem = Fcdr (tem);
999 if (NILP (tem))
1000 break;
1001 insert_string (" ");
1002 }
1003 insert_string ("\n");
1004 }
1005 }
1006 return Qnil;
1007}
1008
1009DEFUN ("list-processes", Flist_processes, Slist_processes, 0, 0, "",
1010 "Display a list of all processes.\n\
1011\(Any processes listed as Exited or Signaled are actually eliminated\n\
1012after the listing is made.)")
1013 ()
1014{
1015 internal_with_output_to_temp_buffer ("*Process List*",
1016 list_processes_1, Qnil);
1017 return Qnil;
1018}
1019
1020DEFUN ("process-list", Fprocess_list, Sprocess_list, 0, 0, 0,
1021 "Return a list of all processes.")
1022 ()
1023{
1024 return Fmapcar (Qcdr, Vprocess_alist);
1025}
1026\f
b0310da4
JB
1027/* Starting asynchronous inferior processes. */
1028
1029static Lisp_Object start_process_unwind ();
1030
d0d6b7c5
JB
1031DEFUN ("start-process", Fstart_process, Sstart_process, 3, MANY, 0,
1032 "Start a program in a subprocess. Return the process object for it.\n\
1033Args are NAME BUFFER PROGRAM &rest PROGRAM-ARGS\n\
1034NAME is name for process. It is modified if necessary to make it unique.\n\
1035BUFFER is the buffer or (buffer-name) to associate with the process.\n\
1036 Process output goes at end of that buffer, unless you specify\n\
1037 an output stream or filter function to handle the output.\n\
1038 BUFFER may be also nil, meaning that this process is not associated\n\
0fa1789e 1039 with any buffer.\n\
8f1ecd05 1040Third arg is program file name. It is searched for in PATH.\n\
d0d6b7c5
JB
1041Remaining arguments are strings to give program as arguments.")
1042 (nargs, args)
1043 int nargs;
1044 register Lisp_Object *args;
1045{
1e30af70 1046 Lisp_Object buffer, name, program, proc, current_dir, tem;
d0d6b7c5
JB
1047#ifdef VMS
1048 register unsigned char *new_argv;
1049 int len;
1050#else
1051 register unsigned char **new_argv;
1052#endif
1053 register int i;
b0310da4 1054 int count = specpdl_ptr - specpdl;
d0d6b7c5
JB
1055
1056 buffer = args[1];
1057 if (!NILP (buffer))
1058 buffer = Fget_buffer_create (buffer);
1059
1e30af70
JB
1060 /* Make sure that the child will be able to chdir to the current
1061 buffer's current directory, or its unhandled equivalent. We
1062 can't just have the child check for an error when it does the
1063 chdir, since it's in a vfork.
1064
1065 We have to GCPRO around this because Fexpand_file_name and
1066 Funhandled_file_name_directory might call a file name handling
1067 function. The argument list is protected by the caller, so all
1068 we really have to worry about is buffer. */
1069 {
1070 struct gcpro gcpro1, gcpro2;
1071
1072 current_dir = current_buffer->directory;
1073
1074 GCPRO2 (buffer, current_dir);
1075
7af71e17
RS
1076 current_dir
1077 = expand_and_dir_to_file (Funhandled_file_name_directory (current_dir),
1078 Qnil);
1e30af70
JB
1079 if (NILP (Ffile_accessible_directory_p (current_dir)))
1080 report_file_error ("Setting current directory",
1081 Fcons (current_buffer->directory, Qnil));
1082
1083 UNGCPRO;
1084 }
1085
d0d6b7c5
JB
1086 name = args[0];
1087 CHECK_STRING (name, 0);
1088
1089 program = args[2];
1090
1091 CHECK_STRING (program, 2);
1092
1093#ifdef VMS
1094 /* Make a one member argv with all args concatenated
1095 together separated by a blank. */
fc932ac6 1096 len = STRING_BYTES (XSTRING (program)) + 2;
d0d6b7c5
JB
1097 for (i = 3; i < nargs; i++)
1098 {
1099 tem = args[i];
1100 CHECK_STRING (tem, i);
fc932ac6 1101 len += STRING_BYTES (XSTRING (tem)) + 1; /* count the blank */
d0d6b7c5
JB
1102 }
1103 new_argv = (unsigned char *) alloca (len);
1104 strcpy (new_argv, XSTRING (program)->data);
1105 for (i = 3; i < nargs; i++)
1106 {
1107 tem = args[i];
1108 CHECK_STRING (tem, i);
1109 strcat (new_argv, " ");
1110 strcat (new_argv, XSTRING (tem)->data);
1111 }
b0310da4
JB
1112 /* Need to add code here to check for program existence on VMS */
1113
d0d6b7c5
JB
1114#else /* not VMS */
1115 new_argv = (unsigned char **) alloca ((nargs - 1) * sizeof (char *));
1116
d0d6b7c5 1117 /* If program file name is not absolute, search our path for it */
e98d950b
RS
1118 if (!IS_DIRECTORY_SEP (XSTRING (program)->data[0])
1119 && !(XSTRING (program)->size > 1
1120 && IS_DEVICE_SEP (XSTRING (program)->data[1])))
d0d6b7c5 1121 {
3b639868
KH
1122 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
1123
d0d6b7c5 1124 tem = Qnil;
3b639868 1125 GCPRO4 (name, program, buffer, current_dir);
5437e9f9 1126 openp (Vexec_path, program, EXEC_SUFFIXES, &tem, 1);
3b639868 1127 UNGCPRO;
d0d6b7c5
JB
1128 if (NILP (tem))
1129 report_file_error ("Searching for program", Fcons (program, Qnil));
f8a87498 1130 tem = Fexpand_file_name (tem, Qnil);
d0d6b7c5
JB
1131 new_argv[0] = XSTRING (tem)->data;
1132 }
3b639868 1133 else
13373f4e
RS
1134 {
1135 if (!NILP (Ffile_directory_p (program)))
1136 error ("Specified program for new process is a directory");
1137
1138 new_argv[0] = XSTRING (program)->data;
1139 }
3b639868
KH
1140
1141 for (i = 3; i < nargs; i++)
1142 {
1143 tem = args[i];
1144 CHECK_STRING (tem, i);
1145 new_argv[i - 2] = XSTRING (tem)->data;
1146 }
1147 new_argv[i - 2] = 0;
d0d6b7c5
JB
1148#endif /* not VMS */
1149
1150 proc = make_process (name);
b0310da4
JB
1151 /* If an error occurs and we can't start the process, we want to
1152 remove it from the process list. This means that each error
1153 check in create_process doesn't need to call remove_process
1154 itself; it's all taken care of here. */
1155 record_unwind_protect (start_process_unwind, proc);
d0d6b7c5
JB
1156
1157 XPROCESS (proc)->childp = Qt;
1158 XPROCESS (proc)->command_channel_p = Qnil;
1159 XPROCESS (proc)->buffer = buffer;
1160 XPROCESS (proc)->sentinel = Qnil;
1161 XPROCESS (proc)->filter = Qnil;
1162 XPROCESS (proc)->command = Flist (nargs - 2, args + 2);
1163
7af71e17
RS
1164 /* Make the process marker point into the process buffer (if any). */
1165 if (!NILP (buffer))
d8a2934e
RS
1166 set_marker_both (XPROCESS (proc)->mark, buffer,
1167 BUF_ZV (XBUFFER (buffer)),
1168 BUF_ZV_BYTE (XBUFFER (buffer)));
7af71e17 1169
c7580538
KH
1170 if (!NILP (buffer) && NILP (XBUFFER (buffer)->enable_multibyte_characters)
1171 || NILP (buffer) && NILP (buffer_defaults.enable_multibyte_characters))
1172 {
1173 XPROCESS (proc)->decode_coding_system = Qnil;
1174 XPROCESS (proc)->encode_coding_system = Qnil;
1175 }
1176 else
1177 {
1178 /* Setup coding systems for communicating with the process. */
715f7577 1179 /* Qt denotes we have not yet called Ffind_operation_coding_system. */
c7580538
KH
1180 Lisp_Object coding_systems = Qt;
1181 Lisp_Object val, *args2;
1182 struct gcpro gcpro1;
0fa1789e 1183
11f84d7d
KH
1184 if (!NILP (Vcoding_system_for_read))
1185 val = Vcoding_system_for_read;
1186 else if (NILP (current_buffer->enable_multibyte_characters))
e7fbaa65 1187 val = Qraw_text;
11f84d7d 1188 else
c7580538
KH
1189 {
1190 args2 = (Lisp_Object *) alloca ((nargs + 1) * sizeof *args2);
1191 args2[0] = Qstart_process;
1192 for (i = 0; i < nargs; i++) args2[i + 1] = args[i];
1193 GCPRO1 (proc);
715f7577 1194 coding_systems = Ffind_operation_coding_system (nargs + 1, args2);
c7580538
KH
1195 UNGCPRO;
1196 if (CONSP (coding_systems))
1197 val = XCONS (coding_systems)->car;
83502605
KH
1198 else if (CONSP (Vdefault_process_coding_system))
1199 val = XCONS (Vdefault_process_coding_system)->car;
11f84d7d
KH
1200 else
1201 val = Qnil;
c7580538
KH
1202 }
1203 XPROCESS (proc)->decode_coding_system = val;
0fa1789e 1204
11f84d7d
KH
1205 if (!NILP (Vcoding_system_for_write))
1206 val = Vcoding_system_for_write;
1207 else if (NILP (current_buffer->enable_multibyte_characters))
1208 val = Qnil;
1209 else
c7580538
KH
1210 {
1211 if (EQ (coding_systems, Qt))
1212 {
1213 args2 = (Lisp_Object *) alloca ((nargs + 1) * sizeof args2);
1214 args2[0] = Qstart_process;
1215 for (i = 0; i < nargs; i++) args2[i + 1] = args[i];
1216 GCPRO1 (proc);
715f7577
KH
1217 coding_systems =
1218 Ffind_operation_coding_system (nargs + 1, args2);
c7580538
KH
1219 UNGCPRO;
1220 }
1221 if (CONSP (coding_systems))
1222 val = XCONS (coding_systems)->cdr;
83502605
KH
1223 else if (CONSP (Vdefault_process_coding_system))
1224 val = XCONS (Vdefault_process_coding_system)->cdr;
11f84d7d
KH
1225 else
1226 val = Qnil;
c7580538
KH
1227 }
1228 XPROCESS (proc)->encode_coding_system = val;
1229 }
0fa1789e
KH
1230
1231 XPROCESS (proc)->decoding_buf = make_uninit_string (0);
e7fbaa65 1232 XPROCESS (proc)->decoding_carryover = make_number (0);
0fa1789e 1233 XPROCESS (proc)->encoding_buf = make_uninit_string (0);
e7fbaa65 1234 XPROCESS (proc)->encoding_carryover = make_number (0);
0fa1789e 1235
6b53bb85 1236 create_process (proc, (char **) new_argv, current_dir);
d0d6b7c5 1237
b0310da4 1238 return unbind_to (count, proc);
d0d6b7c5
JB
1239}
1240
b0310da4 1241/* This function is the unwind_protect form for Fstart_process. If
8e6208c5 1242 PROC doesn't have its pid set, then we know someone has signaled
b0310da4
JB
1243 an error and the process wasn't started successfully, so we should
1244 remove it from the process list. */
1245static Lisp_Object
1246start_process_unwind (proc)
1247 Lisp_Object proc;
1248{
bcd69aea 1249 if (!PROCESSP (proc))
b0310da4
JB
1250 abort ();
1251
1252 /* Was PROC started successfully? */
188d6c4e 1253 if (XINT (XPROCESS (proc)->pid) <= 0)
b0310da4
JB
1254 remove_process (proc);
1255
1256 return Qnil;
1257}
1258
1259
d0d6b7c5
JB
1260SIGTYPE
1261create_process_1 (signo)
1262 int signo;
1263{
3c0ee47b 1264#if defined (USG) && !defined (POSIX_SIGNALS)
d0d6b7c5
JB
1265 /* USG systems forget handlers when they are used;
1266 must reestablish each time */
1267 signal (signo, create_process_1);
1268#endif /* USG */
1269}
1270
1271#if 0 /* This doesn't work; see the note before sigchld_handler. */
1272#ifdef USG
1273#ifdef SIGCHLD
1274/* Mimic blocking of signals on system V, which doesn't really have it. */
1275
1276/* Nonzero means we got a SIGCHLD when it was supposed to be blocked. */
1277int sigchld_deferred;
1278
1279SIGTYPE
1280create_process_sigchld ()
1281{
1282 signal (SIGCHLD, create_process_sigchld);
1283
1284 sigchld_deferred = 1;
1285}
1286#endif
1287#endif
1288#endif
1289
1290#ifndef VMS /* VMS version of this function is in vmsproc.c. */
6b53bb85 1291void
1e30af70 1292create_process (process, new_argv, current_dir)
d0d6b7c5
JB
1293 Lisp_Object process;
1294 char **new_argv;
1e30af70 1295 Lisp_Object current_dir;
d0d6b7c5 1296{
ecd1f654 1297 int pid, inchannel, outchannel;
d0d6b7c5 1298 int sv[2];
0dc70c33
KH
1299#ifdef POSIX_SIGNALS
1300 sigset_t procmask;
1301 sigset_t blocked;
1302 struct sigaction sigint_action;
1303 struct sigaction sigquit_action;
1304#ifdef AIX
1305 struct sigaction sighup_action;
1306#endif
1307#else /* !POSIX_SIGNALS */
d0d6b7c5
JB
1308#ifdef SIGCHLD
1309 SIGTYPE (*sigchld)();
1310#endif
0dc70c33 1311#endif /* !POSIX_SIGNALS */
ecd1f654
KH
1312 /* Use volatile to protect variables from being clobbered by longjmp. */
1313 volatile int forkin, forkout;
1314 volatile int pty_flag = 0;
d0d6b7c5
JB
1315 extern char **environ;
1316
d0d6b7c5
JB
1317 inchannel = outchannel = -1;
1318
1319#ifdef HAVE_PTYS
fe45da4e 1320 if (!NILP (Vprocess_connection_type))
d0d6b7c5
JB
1321 outchannel = inchannel = allocate_pty ();
1322
d0d6b7c5
JB
1323 if (inchannel >= 0)
1324 {
1325#ifndef USG
1326 /* On USG systems it does not work to open the pty's tty here
1327 and then close and reopen it in the child. */
1328#ifdef O_NOCTTY
1329 /* Don't let this terminal become our controlling terminal
1330 (in case we don't have one). */
1331 forkout = forkin = open (pty_name, O_RDWR | O_NOCTTY, 0);
1332#else
1333 forkout = forkin = open (pty_name, O_RDWR, 0);
1334#endif
1335 if (forkin < 0)
1336 report_file_error ("Opening pty", Qnil);
1337#else
1338 forkin = forkout = -1;
1339#endif /* not USG */
1340 pty_flag = 1;
1341 }
1342 else
1343#endif /* HAVE_PTYS */
1344#ifdef SKTPAIR
1345 {
1346 if (socketpair (AF_UNIX, SOCK_STREAM, 0, sv) < 0)
1347 report_file_error ("Opening socketpair", Qnil);
1348 outchannel = inchannel = sv[0];
1349 forkout = forkin = sv[1];
1350 }
1351#else /* not SKTPAIR */
1352 {
1353 pipe (sv);
1354 inchannel = sv[0];
1355 forkout = sv[1];
1356 pipe (sv);
1357 outchannel = sv[1];
1358 forkin = sv[0];
1359 }
1360#endif /* not SKTPAIR */
1361
1362#if 0
1363 /* Replaced by close_process_descs */
1364 set_exclusive_use (inchannel);
1365 set_exclusive_use (outchannel);
1366#endif
1367
1368/* Stride people say it's a mystery why this is needed
1369 as well as the O_NDELAY, but that it fails without this. */
1370#if defined (STRIDE) || (defined (pfa) && defined (HAVE_PTYS))
1371 {
1372 int one = 1;
1373 ioctl (inchannel, FIONBIO, &one);
1374 }
1375#endif
1376
1377#ifdef O_NONBLOCK
1378 fcntl (inchannel, F_SETFL, O_NONBLOCK);
03832893 1379 fcntl (outchannel, F_SETFL, O_NONBLOCK);
d0d6b7c5
JB
1380#else
1381#ifdef O_NDELAY
1382 fcntl (inchannel, F_SETFL, O_NDELAY);
03832893 1383 fcntl (outchannel, F_SETFL, O_NDELAY);
d0d6b7c5
JB
1384#endif
1385#endif
1386
1387 /* Record this as an active process, with its channels.
1388 As a result, child_setup will close Emacs's side of the pipes. */
1389 chan_process[inchannel] = process;
1d056e64
KH
1390 XSETINT (XPROCESS (process)->infd, inchannel);
1391 XSETINT (XPROCESS (process)->outfd, outchannel);
d0d6b7c5
JB
1392 /* Record the tty descriptor used in the subprocess. */
1393 if (forkin < 0)
1394 XPROCESS (process)->subtty = Qnil;
1395 else
22719df2 1396 XSETFASTINT (XPROCESS (process)->subtty, forkin);
d0d6b7c5
JB
1397 XPROCESS (process)->pty_flag = (pty_flag ? Qt : Qnil);
1398 XPROCESS (process)->status = Qrun;
c7580538
KH
1399 if (!proc_decode_coding_system[inchannel])
1400 proc_decode_coding_system[inchannel]
1401 = (struct coding_system *) xmalloc (sizeof (struct coding_system));
0fa1789e 1402 setup_coding_system (XPROCESS (process)->decode_coding_system,
c7580538
KH
1403 proc_decode_coding_system[inchannel]);
1404 if (!proc_encode_coding_system[outchannel])
1405 proc_encode_coding_system[outchannel]
1406 = (struct coding_system *) xmalloc (sizeof (struct coding_system));
0fa1789e 1407 setup_coding_system (XPROCESS (process)->encode_coding_system,
c7580538 1408 proc_encode_coding_system[outchannel]);
d0d6b7c5 1409
1a283a4c
KH
1410 if (CODING_REQUIRE_ENCODING (proc_encode_coding_system[outchannel]))
1411 {
1412 /* Here we encode arguments by the coding system used for
1413 sending data to the process. We don't support using
1414 different coding systems for encoding arguments and for
1415 encoding data sent to the process. */
1416 struct gcpro gcpro1;
1417 int i = 1;
1418 struct coding_system *coding = proc_encode_coding_system[outchannel];
1419
e7fbaa65 1420 coding->mode |= CODING_MODE_LAST_BLOCK;
1a283a4c
KH
1421 GCPRO1 (process);
1422 while (new_argv[i] != 0)
1423 {
1424 int len = strlen (new_argv[i]);
1425 int size = encoding_buffer_size (coding, len);
1426 unsigned char *buf = (unsigned char *) alloca (size);
1a283a4c 1427
e7fbaa65
KH
1428 encode_coding (coding, new_argv[i], buf, len, size);
1429 buf[coding->produced] = 0;
1a283a4c
KH
1430 /* We don't have to free new_argv[i] because it points to a
1431 Lisp string given as an argument to `start-process'. */
1432 new_argv[i++] = buf;
1433 }
1434 UNGCPRO;
e7fbaa65 1435 coding->mode &= ~CODING_MODE_LAST_BLOCK;
1a283a4c
KH
1436 }
1437
d0d6b7c5
JB
1438 /* Delay interrupts until we have a chance to store
1439 the new fork's pid in its process structure */
0dc70c33
KH
1440#ifdef POSIX_SIGNALS
1441 sigemptyset (&blocked);
1442#ifdef SIGCHLD
1443 sigaddset (&blocked, SIGCHLD);
1444#endif
1445#ifdef HAVE_VFORK
1446 /* On many hosts (e.g. Solaris 2.4), if a vforked child calls `signal',
1447 this sets the parent's signal handlers as well as the child's.
1448 So delay all interrupts whose handlers the child might munge,
1449 and record the current handlers so they can be restored later. */
1450 sigaddset (&blocked, SIGINT ); sigaction (SIGINT , 0, &sigint_action );
1451 sigaddset (&blocked, SIGQUIT); sigaction (SIGQUIT, 0, &sigquit_action);
1452#ifdef AIX
1453 sigaddset (&blocked, SIGHUP ); sigaction (SIGHUP , 0, &sighup_action );
1454#endif
1455#endif /* HAVE_VFORK */
1456 sigprocmask (SIG_BLOCK, &blocked, &procmask);
1457#else /* !POSIX_SIGNALS */
d0d6b7c5
JB
1458#ifdef SIGCHLD
1459#ifdef BSD4_1
1460 sighold (SIGCHLD);
1461#else /* not BSD4_1 */
6df54671 1462#if defined (BSD_SYSTEM) || defined (UNIPLUS) || defined (HPUX)
d0d6b7c5
JB
1463 sigsetmask (sigmask (SIGCHLD));
1464#else /* ordinary USG */
1465#if 0
1466 sigchld_deferred = 0;
1467 sigchld = signal (SIGCHLD, create_process_sigchld);
1468#endif
1469#endif /* ordinary USG */
1470#endif /* not BSD4_1 */
1471#endif /* SIGCHLD */
0dc70c33 1472#endif /* !POSIX_SIGNALS */
d0d6b7c5 1473
3081bf8d 1474 FD_SET (inchannel, &input_wait_mask);
a69281ff 1475 FD_SET (inchannel, &non_keyboard_wait_mask);
3081bf8d
KH
1476 if (inchannel > max_process_desc)
1477 max_process_desc = inchannel;
1478
d0d6b7c5
JB
1479 /* Until we store the proper pid, enable sigchld_handler
1480 to recognize an unknown pid as standing for this process.
1481 It is very important not to let this `marker' value stay
1482 in the table after this function has returned; if it does
1483 it might cause call-process to hang and subsequent asynchronous
1484 processes to get their return values scrambled. */
1485 XSETINT (XPROCESS (process)->pid, -1);
1486
ececcbec
RS
1487 BLOCK_INPUT;
1488
d0d6b7c5
JB
1489 {
1490 /* child_setup must clobber environ on systems with true vfork.
1491 Protect it from permanent change. */
1492 char **save_environ = environ;
1493
14dc6093 1494 current_dir = ENCODE_FILE (current_dir);
a932f187 1495
e98d950b 1496#ifndef WINDOWSNT
d0d6b7c5
JB
1497 pid = vfork ();
1498 if (pid == 0)
e98d950b 1499#endif /* not WINDOWSNT */
d0d6b7c5
JB
1500 {
1501 int xforkin = forkin;
1502 int xforkout = forkout;
1503
1504#if 0 /* This was probably a mistake--it duplicates code later on,
1505 but fails to handle all the cases. */
1506 /* Make sure SIGCHLD is not blocked in the child. */
1507 sigsetmask (SIGEMPTYMASK);
1508#endif
1509
1510 /* Make the pty be the controlling terminal of the process. */
1511#ifdef HAVE_PTYS
1512 /* First, disconnect its current controlling terminal. */
1513#ifdef HAVE_SETSID
7ce48618
RS
1514 /* We tried doing setsid only if pty_flag, but it caused
1515 process_set_signal to fail on SGI when using a pipe. */
1516 setsid ();
ce4c9c90 1517 /* Make the pty's terminal the controlling terminal. */
084fd64a 1518 if (pty_flag)
39e9ebcd 1519 {
39e9ebcd
RS
1520#ifdef TIOCSCTTY
1521 /* We ignore the return value
1522 because faith@cs.unc.edu says that is necessary on Linux. */
1523 ioctl (xforkin, TIOCSCTTY, 0);
ce4c9c90 1524#endif
39e9ebcd 1525 }
d0d6b7c5 1526#else /* not HAVE_SETSID */
c14e53a4 1527#ifdef USG
000ab717 1528 /* It's very important to call setpgrp here and no time
d0d6b7c5
JB
1529 afterwards. Otherwise, we lose our controlling tty which
1530 is set when we open the pty. */
1531 setpgrp ();
1532#endif /* USG */
1533#endif /* not HAVE_SETSID */
9bcf8ec6
KH
1534#if defined (HAVE_TERMIOS) && defined (LDISC1)
1535 if (pty_flag && xforkin >= 0)
1536 {
1537 struct termios t;
1538 tcgetattr (xforkin, &t);
1539 t.c_lflag = LDISC1;
1540 if (tcsetattr (xforkin, TCSANOW, &t) < 0)
1541 write (1, "create_process/tcsetattr LDISC1 failed\n", 39);
1542 }
1543#else
aafadd9f 1544#if defined (NTTYDISC) && defined (TIOCSETD)
ff773a4e 1545 if (pty_flag && xforkin >= 0)
afc549fd
RS
1546 {
1547 /* Use new line discipline. */
1548 int ldisc = NTTYDISC;
4458f555 1549 ioctl (xforkin, TIOCSETD, &ldisc);
afc549fd 1550 }
000ab717 1551#endif
9bcf8ec6 1552#endif
d0d6b7c5
JB
1553#ifdef TIOCNOTTY
1554 /* In 4.3BSD, the TIOCSPGRP bug has been fixed, and now you
1555 can do TIOCSPGRP only to the process's controlling tty. */
1556 if (pty_flag)
1557 {
1558 /* I wonder: would just ioctl (0, TIOCNOTTY, 0) work here?
1559 I can't test it since I don't have 4.3. */
1560 int j = open ("/dev/tty", O_RDWR, 0);
1561 ioctl (j, TIOCNOTTY, 0);
1562 close (j);
5a570e37 1563#ifndef USG
d0d6b7c5
JB
1564 /* In order to get a controlling terminal on some versions
1565 of BSD, it is necessary to put the process in pgrp 0
1566 before it opens the terminal. */
99c1aeca 1567#ifdef HAVE_SETPGID
3ea1d291
RS
1568 setpgid (0, 0);
1569#else
d0d6b7c5 1570 setpgrp (0, 0);
3ea1d291 1571#endif
d0d6b7c5
JB
1572#endif
1573 }
1574#endif /* TIOCNOTTY */
1575
99153b9e 1576#if !defined (RTU) && !defined (UNIPLUS) && !defined (DONT_REOPEN_PTY)
d0d6b7c5 1577/*** There is a suggestion that this ought to be a
99153b9e
RS
1578 conditional on TIOCSPGRP,
1579 or !(defined (HAVE_SETSID) && defined (TIOCSCTTY)).
1580 Trying the latter gave the wrong results on Debian GNU/Linux 1.1;
1581 that system does seem to need this code, even though
1582 both HAVE_SETSID and TIOCSCTTY are defined. */
d0d6b7c5
JB
1583 /* Now close the pty (if we had it open) and reopen it.
1584 This makes the pty the controlling terminal of the subprocess. */
1585 if (pty_flag)
1586 {
99e3d726
RS
1587#ifdef SET_CHILD_PTY_PGRP
1588 int pgrp = getpid ();
1589#endif
1590
d0d6b7c5
JB
1591 /* I wonder if close (open (pty_name, ...)) would work? */
1592 if (xforkin >= 0)
1593 close (xforkin);
1594 xforkout = xforkin = open (pty_name, O_RDWR, 0);
1595
4aa54ba8
RS
1596 if (xforkin < 0)
1597 {
1598 write (1, "Couldn't open the pty terminal ", 31);
1599 write (1, pty_name, strlen (pty_name));
1600 write (1, "\n", 1);
1601 _exit (1);
1602 }
1603
99e3d726
RS
1604#ifdef SET_CHILD_PTY_PGRP
1605 ioctl (xforkin, TIOCSPGRP, &pgrp);
1606 ioctl (xforkout, TIOCSPGRP, &pgrp);
1607#endif
d0d6b7c5 1608 }
99153b9e 1609#endif /* not UNIPLUS and not RTU and not DONT_REOPEN_PTY */
e9bf058b 1610
d0d6b7c5 1611#ifdef SETUP_SLAVE_PTY
13a72104
RS
1612 if (pty_flag)
1613 {
1614 SETUP_SLAVE_PTY;
1615 }
d0d6b7c5
JB
1616#endif /* SETUP_SLAVE_PTY */
1617#ifdef AIX
1618 /* On AIX, we've disabled SIGHUP above once we start a child on a pty.
1619 Now reenable it in the child, so it will die when we want it to. */
1620 if (pty_flag)
1621 signal (SIGHUP, SIG_DFL);
1622#endif
1623#endif /* HAVE_PTYS */
1624
0dc70c33
KH
1625 signal (SIGINT, SIG_DFL);
1626 signal (SIGQUIT, SIG_DFL);
1627
1628 /* Stop blocking signals in the child. */
1629#ifdef POSIX_SIGNALS
1630 sigprocmask (SIG_SETMASK, &procmask, 0);
1631#else /* !POSIX_SIGNALS */
d0d6b7c5
JB
1632#ifdef SIGCHLD
1633#ifdef BSD4_1
1634 sigrelse (SIGCHLD);
1635#else /* not BSD4_1 */
6df54671 1636#if defined (BSD_SYSTEM) || defined (UNIPLUS) || defined (HPUX)
d0d6b7c5
JB
1637 sigsetmask (SIGEMPTYMASK);
1638#else /* ordinary USG */
63528b78 1639#if 0
d0d6b7c5 1640 signal (SIGCHLD, sigchld);
63528b78 1641#endif
d0d6b7c5
JB
1642#endif /* ordinary USG */
1643#endif /* not BSD4_1 */
1644#endif /* SIGCHLD */
0dc70c33 1645#endif /* !POSIX_SIGNALS */
5e7e1da2 1646
ab01d0a8
RS
1647 if (pty_flag)
1648 child_setup_tty (xforkout);
e98d950b
RS
1649#ifdef WINDOWSNT
1650 pid = child_setup (xforkin, xforkout, xforkout,
1651 new_argv, 1, current_dir);
1652#else /* not WINDOWSNT */
d0d6b7c5 1653 child_setup (xforkin, xforkout, xforkout,
e065a56e 1654 new_argv, 1, current_dir);
e98d950b 1655#endif /* not WINDOWSNT */
d0d6b7c5
JB
1656 }
1657 environ = save_environ;
1658 }
1659
ececcbec
RS
1660 UNBLOCK_INPUT;
1661
4a127b3b 1662 /* This runs in the Emacs process. */
d0d6b7c5 1663 if (pid < 0)
6311cf58
RS
1664 {
1665 if (forkin >= 0)
1666 close (forkin);
1667 if (forkin != forkout && forkout >= 0)
1668 close (forkout);
6311cf58 1669 }
4a127b3b
KH
1670 else
1671 {
1672 /* vfork succeeded. */
1673 XSETFASTINT (XPROCESS (process)->pid, pid);
d0d6b7c5 1674
e98d950b 1675#ifdef WINDOWSNT
4a127b3b 1676 register_child (pid, inchannel);
e98d950b
RS
1677#endif /* WINDOWSNT */
1678
4a127b3b
KH
1679 /* If the subfork execv fails, and it exits,
1680 this close hangs. I don't know why.
1681 So have an interrupt jar it loose. */
1682 stop_polling ();
1683 signal (SIGALRM, create_process_1);
1684 alarm (1);
1685 XPROCESS (process)->subtty = Qnil;
1686 if (forkin >= 0)
1687 close (forkin);
1688 alarm (0);
1689 start_polling ();
1690 if (forkin != forkout && forkout >= 0)
1691 close (forkout);
d0d6b7c5 1692
875e6b94 1693#ifdef HAVE_PTYS
4a127b3b
KH
1694 if (pty_flag)
1695 XPROCESS (process)->tty_name = build_string (pty_name);
1696 else
875e6b94 1697#endif
4a127b3b
KH
1698 XPROCESS (process)->tty_name = Qnil;
1699 }
3b9a3dfa 1700
4a127b3b
KH
1701 /* Restore the signal state whether vfork succeeded or not.
1702 (We will signal an error, below, if it failed.) */
0dc70c33
KH
1703#ifdef POSIX_SIGNALS
1704#ifdef HAVE_VFORK
1705 /* Restore the parent's signal handlers. */
1706 sigaction (SIGINT, &sigint_action, 0);
1707 sigaction (SIGQUIT, &sigquit_action, 0);
1708#ifdef AIX
1709 sigaction (SIGHUP, &sighup_action, 0);
1710#endif
1711#endif /* HAVE_VFORK */
1712 /* Stop blocking signals in the parent. */
1713 sigprocmask (SIG_SETMASK, &procmask, 0);
1714#else /* !POSIX_SIGNALS */
d0d6b7c5
JB
1715#ifdef SIGCHLD
1716#ifdef BSD4_1
1717 sigrelse (SIGCHLD);
1718#else /* not BSD4_1 */
6df54671 1719#if defined (BSD_SYSTEM) || defined (UNIPLUS) || defined (HPUX)
d0d6b7c5
JB
1720 sigsetmask (SIGEMPTYMASK);
1721#else /* ordinary USG */
1722#if 0
1723 signal (SIGCHLD, sigchld);
1724 /* Now really handle any of these signals
1725 that came in during this function. */
1726 if (sigchld_deferred)
1727 kill (getpid (), SIGCHLD);
1728#endif
1729#endif /* ordinary USG */
1730#endif /* not BSD4_1 */
1731#endif /* SIGCHLD */
0dc70c33 1732#endif /* !POSIX_SIGNALS */
4a127b3b
KH
1733
1734 /* Now generate the error if vfork failed. */
1735 if (pid < 0)
1736 report_file_error ("Doing vfork", Qnil);
d0d6b7c5
JB
1737}
1738#endif /* not VMS */
1739
1740#ifdef HAVE_SOCKETS
1741
1742/* open a TCP network connection to a given HOST/SERVICE. Treated
1743 exactly like a normal process when reading and writing. Only
1744 differences are in status display and process deletion. A network
1745 connection has no PID; you cannot signal it. All you can do is
1746 deactivate and close it via delete-process */
1747
1748DEFUN ("open-network-stream", Fopen_network_stream, Sopen_network_stream,
1749 4, 4, 0,
1750 "Open a TCP connection for a service to a host.\n\
1751Returns a subprocess-object to represent the connection.\n\
1752Input and output work as for subprocesses; `delete-process' closes it.\n\
1753Args are NAME BUFFER HOST SERVICE.\n\
1754NAME is name for process. It is modified if necessary to make it unique.\n\
1755BUFFER is the buffer (or buffer-name) to associate with the process.\n\
1756 Process output goes at end of that buffer, unless you specify\n\
1757 an output stream or filter function to handle the output.\n\
1758 BUFFER may be also nil, meaning that this process is not associated\n\
1759 with any buffer\n\
1760Third arg is name of the host to connect to, or its IP address.\n\
1761Fourth arg SERVICE is name of the service desired, or an integer\n\
1762 specifying a port number to connect to.")
1763 (name, buffer, host, service)
1764 Lisp_Object name, buffer, host, service;
1765{
1766 Lisp_Object proc;
1767 register int i;
1768 struct sockaddr_in address;
1769 struct servent *svc_info;
1770 struct hostent *host_info_ptr, host_info;
1771 char *(addr_list[2]);
79967d5e 1772 IN_ADDR numeric_addr;
d0d6b7c5
JB
1773 int s, outch, inch;
1774 char errstring[80];
1775 int port;
1776 struct hostent host_info_fixed;
1777 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
e333e864 1778 int retry = 0;
44ade2e9 1779 int count = specpdl_ptr - specpdl;
d0d6b7c5 1780
bff3ed0a
RS
1781#ifdef WINDOWSNT
1782 /* Ensure socket support is loaded if available. */
1783 init_winsock (TRUE);
1784#endif
1785
d0d6b7c5
JB
1786 GCPRO4 (name, buffer, host, service);
1787 CHECK_STRING (name, 0);
1788 CHECK_STRING (host, 0);
bcd69aea 1789 if (INTEGERP (service))
d0d6b7c5
JB
1790 port = htons ((unsigned short) XINT (service));
1791 else
1792 {
1793 CHECK_STRING (service, 0);
1794 svc_info = getservbyname (XSTRING (service)->data, "tcp");
1795 if (svc_info == 0)
1796 error ("Unknown service \"%s\"", XSTRING (service)->data);
1797 port = svc_info->s_port;
1798 }
1799
798b64bb
KH
1800 /* Slow down polling to every ten seconds.
1801 Some kernels have a bug which causes retrying connect to fail
1802 after a connect. Polling can interfere with gethostbyname too. */
1803#ifdef POLL_FOR_INPUT
1804 bind_polling_period (10);
1805#endif
1806
1d2c16fa 1807#ifndef TERM
616da37c
RS
1808 while (1)
1809 {
5f0929a7
RS
1810#ifdef TRY_AGAIN
1811 h_errno = 0;
1812#endif
5d6c2aa3
RS
1813 immediate_quit = 1;
1814 QUIT;
616da37c 1815 host_info_ptr = gethostbyname (XSTRING (host)->data);
5d6c2aa3 1816 immediate_quit = 0;
616da37c
RS
1817#ifdef TRY_AGAIN
1818 if (! (host_info_ptr == 0 && h_errno == TRY_AGAIN))
1819#endif
1820 break;
1821 Fsleep_for (make_number (1), Qnil);
1822 }
d0d6b7c5
JB
1823 if (host_info_ptr == 0)
1824 /* Attempt to interpret host as numeric inet address */
1825 {
393a9679 1826 numeric_addr = inet_addr ((char *) XSTRING (host)->data);
79967d5e 1827 if (NUMERIC_ADDR_ERROR)
d0d6b7c5
JB
1828 error ("Unknown host \"%s\"", XSTRING (host)->data);
1829
1830 host_info_ptr = &host_info;
1831 host_info.h_name = 0;
1832 host_info.h_aliases = 0;
1833 host_info.h_addrtype = AF_INET;
39a21be6
JB
1834#ifdef h_addr
1835 /* Older machines have only one address slot called h_addr.
1836 Newer machines have h_addr_list, but #define h_addr to
1837 be its first element. */
1838 host_info.h_addr_list = &(addr_list[0]);
1839#endif
1840 host_info.h_addr = (char*)(&numeric_addr);
d0d6b7c5 1841 addr_list[1] = 0;
8777fbe2
RS
1842 /* numeric_addr isn't null-terminated; it has fixed length. */
1843 host_info.h_length = sizeof (numeric_addr);
d0d6b7c5
JB
1844 }
1845
1846 bzero (&address, sizeof address);
1847 bcopy (host_info_ptr->h_addr, (char *) &address.sin_addr,
1848 host_info_ptr->h_length);
1849 address.sin_family = host_info_ptr->h_addrtype;
1850 address.sin_port = port;
1851
1852 s = socket (host_info_ptr->h_addrtype, SOCK_STREAM, 0);
1853 if (s < 0)
1854 report_file_error ("error creating socket", Fcons (name, Qnil));
1855
457a9bee
RS
1856 /* Kernel bugs (on Ultrix at least) cause lossage (not just EINTR)
1857 when connect is interrupted. So let's not let it get interrupted.
1858 Note we do not turn off polling, because polling is only used
1859 when not interrupt_input, and thus not normally used on the systems
1860 which have this bug. On systems which use polling, there's no way
1861 to quit if polling is turned off. */
1862 if (interrupt_input)
1863 unrequest_sigio ();
1864
d0d6b7c5 1865 loop:
0f2ee0c1
RS
1866
1867 immediate_quit = 1;
1868 QUIT;
1869
e333e864
RS
1870 if (connect (s, (struct sockaddr *) &address, sizeof address) == -1
1871 && errno != EISCONN)
d0d6b7c5
JB
1872 {
1873 int xerrno = errno;
e333e864 1874
0f2ee0c1
RS
1875 immediate_quit = 0;
1876
d0d6b7c5
JB
1877 if (errno == EINTR)
1878 goto loop;
e333e864
RS
1879 if (errno == EADDRINUSE && retry < 20)
1880 {
4590788a
RS
1881 /* A delay here is needed on some FreeBSD systems,
1882 and it is harmless, since this retrying takes time anyway
1883 and should be infrequent. */
1884 Fsleep_for (make_number (1), Qnil);
e333e864
RS
1885 retry++;
1886 goto loop;
1887 }
1888
d0d6b7c5 1889 close (s);
457a9bee
RS
1890
1891 if (interrupt_input)
1892 request_sigio ();
1893
d0d6b7c5
JB
1894 errno = xerrno;
1895 report_file_error ("connection failed",
1896 Fcons (host, Fcons (name, Qnil)));
1897 }
457a9bee 1898
0f2ee0c1
RS
1899 immediate_quit = 0;
1900
44ade2e9
RS
1901#ifdef POLL_FOR_INPUT
1902 unbind_to (count, Qnil);
1903#endif
1904
457a9bee
RS
1905 if (interrupt_input)
1906 request_sigio ();
1907
1d2c16fa
RS
1908#else /* TERM */
1909 s = connect_server (0);
1910 if (s < 0)
1911 report_file_error ("error creating socket", Fcons (name, Qnil));
1912 send_command (s, C_PORT, 0, "%s:%d", XSTRING (host)->data, ntohs (port));
1913 send_command (s, C_DUMB, 1, 0);
1914#endif /* TERM */
d0d6b7c5
JB
1915
1916 inch = s;
59f23005 1917 outch = s;
d0d6b7c5
JB
1918
1919 if (!NILP (buffer))
1920 buffer = Fget_buffer_create (buffer);
1921 proc = make_process (name);
1922
1923 chan_process[inch] = proc;
1924
1925#ifdef O_NONBLOCK
1926 fcntl (inch, F_SETFL, O_NONBLOCK);
1927#else
1928#ifdef O_NDELAY
1929 fcntl (inch, F_SETFL, O_NDELAY);
1930#endif
1931#endif
1932
de282a05 1933 XPROCESS (proc)->childp = Fcons (host, Fcons (service, Qnil));
d0d6b7c5
JB
1934 XPROCESS (proc)->command_channel_p = Qnil;
1935 XPROCESS (proc)->buffer = buffer;
1936 XPROCESS (proc)->sentinel = Qnil;
1937 XPROCESS (proc)->filter = Qnil;
1938 XPROCESS (proc)->command = Qnil;
1939 XPROCESS (proc)->pid = Qnil;
7795ff9b 1940 XSETINT (XPROCESS (proc)->infd, inch);
1d056e64 1941 XSETINT (XPROCESS (proc)->outfd, outch);
d0d6b7c5
JB
1942 XPROCESS (proc)->status = Qrun;
1943 FD_SET (inch, &input_wait_mask);
a69281ff 1944 FD_SET (inch, &non_keyboard_wait_mask);
7d0e672e
RS
1945 if (inch > max_process_desc)
1946 max_process_desc = inch;
d0d6b7c5 1947
c7580538
KH
1948 if (!NILP (buffer) && NILP (XBUFFER (buffer)->enable_multibyte_characters)
1949 || NILP (buffer) && NILP (buffer_defaults.enable_multibyte_characters))
1950 {
1951 XPROCESS (proc)->decode_coding_system = Qnil;
1952 XPROCESS (proc)->encode_coding_system = Qnil;
1953 }
1954 else
1955 {
1956 /* Setup coding systems for communicating with the network stream. */
1957 struct gcpro gcpro1;
715f7577 1958 /* Qt denotes we have not yet called Ffind_operation_coding_system. */
c7580538
KH
1959 Lisp_Object coding_systems = Qt;
1960 Lisp_Object args[5], val;
0fa1789e 1961
11f84d7d
KH
1962 if (!NILP (Vcoding_system_for_read))
1963 val = Vcoding_system_for_read;
1964 else if (NILP (current_buffer->enable_multibyte_characters))
1965 /* We dare not decode end-of-line format by setting VAL to
e7fbaa65 1966 Qraw_text, because the existing Emacs Lisp libraries
11f84d7d
KH
1967 assume that they receive bare code including a sequene of
1968 CR LF. */
1969 val = Qnil;
1970 else
c7580538
KH
1971 {
1972 args[0] = Qopen_network_stream, args[1] = name,
1973 args[2] = buffer, args[3] = host, args[4] = service;
1974 GCPRO1 (proc);
715f7577 1975 coding_systems = Ffind_operation_coding_system (5, args);
c7580538 1976 UNGCPRO;
83502605
KH
1977 if (CONSP (coding_systems))
1978 val = XCONS (coding_systems)->car;
1979 else if (CONSP (Vdefault_process_coding_system))
1980 val = XCONS (Vdefault_process_coding_system)->car;
11f84d7d
KH
1981 else
1982 val = Qnil;
c7580538
KH
1983 }
1984 XPROCESS (proc)->decode_coding_system = val;
0fa1789e 1985
11f84d7d
KH
1986 if (!NILP (Vcoding_system_for_write))
1987 val = Vcoding_system_for_write;
1988 else if (NILP (current_buffer->enable_multibyte_characters))
1989 val = Qnil;
1990 else
c7580538
KH
1991 {
1992 if (EQ (coding_systems, Qt))
1993 {
1994 args[0] = Qopen_network_stream, args[1] = name,
1995 args[2] = buffer, args[3] = host, args[4] = service;
1996 GCPRO1 (proc);
715f7577 1997 coding_systems = Ffind_operation_coding_system (5, args);
c7580538
KH
1998 UNGCPRO;
1999 }
83502605
KH
2000 if (CONSP (coding_systems))
2001 val = XCONS (coding_systems)->cdr;
2002 else if (CONSP (Vdefault_process_coding_system))
2003 val = XCONS (Vdefault_process_coding_system)->cdr;
11f84d7d
KH
2004 else
2005 val = Qnil;
c7580538
KH
2006 }
2007 XPROCESS (proc)->encode_coding_system = val;
2008 }
0fa1789e 2009
c7580538
KH
2010 if (!proc_decode_coding_system[inch])
2011 proc_decode_coding_system[inch]
2012 = (struct coding_system *) xmalloc (sizeof (struct coding_system));
0fa1789e 2013 setup_coding_system (XPROCESS (proc)->decode_coding_system,
c7580538
KH
2014 proc_decode_coding_system[inch]);
2015 if (!proc_encode_coding_system[outch])
2016 proc_encode_coding_system[outch]
2017 = (struct coding_system *) xmalloc (sizeof (struct coding_system));
0fa1789e 2018 setup_coding_system (XPROCESS (proc)->encode_coding_system,
c7580538 2019 proc_encode_coding_system[outch]);
0fa1789e
KH
2020
2021 XPROCESS (proc)->decoding_buf = make_uninit_string (0);
e7fbaa65 2022 XPROCESS (proc)->decoding_carryover = make_number (0);
0fa1789e 2023 XPROCESS (proc)->encoding_buf = make_uninit_string (0);
e7fbaa65 2024 XPROCESS (proc)->encoding_carryover = make_number (0);
0fa1789e 2025
d0d6b7c5
JB
2026 UNGCPRO;
2027 return proc;
2028}
2029#endif /* HAVE_SOCKETS */
2030
6b53bb85 2031void
d0d6b7c5
JB
2032deactivate_process (proc)
2033 Lisp_Object proc;
2034{
2035 register int inchannel, outchannel;
2036 register struct Lisp_Process *p = XPROCESS (proc);
2037
a9f2c884
RS
2038 inchannel = XINT (p->infd);
2039 outchannel = XINT (p->outfd);
d0d6b7c5 2040
a9f2c884 2041 if (inchannel >= 0)
d0d6b7c5
JB
2042 {
2043 /* Beware SIGCHLD hereabouts. */
2044 flush_pending_output (inchannel);
2045#ifdef VMS
2046 {
2047 VMS_PROC_STUFF *get_vms_process_pointer (), *vs;
2048 sys$dassgn (outchannel);
c6c6865d 2049 vs = get_vms_process_pointer (p->pid);
d0d6b7c5
JB
2050 if (vs)
2051 give_back_vms_process_stuff (vs);
2052 }
2053#else
2054 close (inchannel);
a9f2c884 2055 if (outchannel >= 0 && outchannel != inchannel)
d0d6b7c5
JB
2056 close (outchannel);
2057#endif
2058
1d056e64
KH
2059 XSETINT (p->infd, -1);
2060 XSETINT (p->outfd, -1);
d0d6b7c5
JB
2061 chan_process[inchannel] = Qnil;
2062 FD_CLR (inchannel, &input_wait_mask);
a69281ff 2063 FD_CLR (inchannel, &non_keyboard_wait_mask);
7d0e672e
RS
2064 if (inchannel == max_process_desc)
2065 {
2066 int i;
2067 /* We just closed the highest-numbered process input descriptor,
2068 so recompute the highest-numbered one now. */
2069 max_process_desc = 0;
2070 for (i = 0; i < MAXDESC; i++)
2071 if (!NILP (chan_process[i]))
2072 max_process_desc = i;
2073 }
d0d6b7c5
JB
2074 }
2075}
2076
2077/* Close all descriptors currently in use for communication
2078 with subprocess. This is used in a newly-forked subprocess
2079 to get rid of irrelevant descriptors. */
2080
6b53bb85 2081void
d0d6b7c5
JB
2082close_process_descs ()
2083{
e98d950b 2084#ifndef WINDOWSNT
d0d6b7c5
JB
2085 int i;
2086 for (i = 0; i < MAXDESC; i++)
2087 {
2088 Lisp_Object process;
2089 process = chan_process[i];
2090 if (!NILP (process))
2091 {
a9f2c884
RS
2092 int in = XINT (XPROCESS (process)->infd);
2093 int out = XINT (XPROCESS (process)->outfd);
2094 if (in >= 0)
d0d6b7c5 2095 close (in);
a9f2c884 2096 if (out >= 0 && in != out)
d0d6b7c5
JB
2097 close (out);
2098 }
2099 }
e98d950b 2100#endif
d0d6b7c5
JB
2101}
2102\f
2103DEFUN ("accept-process-output", Faccept_process_output, Saccept_process_output,
2104 0, 3, 0,
2105 "Allow any pending output from subprocesses to be read by Emacs.\n\
2106It is read into the process' buffers or given to their filter functions.\n\
2107Non-nil arg PROCESS means do not return until some output has been received\n\
2108from PROCESS.\n\
2109Non-nil second arg TIMEOUT and third arg TIMEOUT-MSECS are number of\n\
2110seconds and microseconds to wait; return after that much time whether\n\
2111or not there is input.\n\
2112Return non-nil iff we received any output before the timeout expired.")
4ee3e309
EN
2113 (process, timeout, timeout_msecs)
2114 register Lisp_Object process, timeout, timeout_msecs;
d0d6b7c5
JB
2115{
2116 int seconds;
2117 int useconds;
2118
2119 if (! NILP (timeout_msecs))
2120 {
2121 CHECK_NUMBER (timeout_msecs, 2);
2122 useconds = XINT (timeout_msecs);
bcd69aea 2123 if (!INTEGERP (timeout))
1d056e64 2124 XSETINT (timeout, 0);
d0d6b7c5
JB
2125
2126 {
2127 int carry = useconds / 1000000;
2128
2129 XSETINT (timeout, XINT (timeout) + carry);
2130 useconds -= carry * 1000000;
2131
2132 /* I think this clause is necessary because C doesn't
2133 guarantee a particular rounding direction for negative
2134 integers. */
2135 if (useconds < 0)
2136 {
2137 XSETINT (timeout, XINT (timeout) - 1);
2138 useconds += 1000000;
2139 }
2140 }
2141 }
de946e5a
RS
2142 else
2143 useconds = 0;
d0d6b7c5
JB
2144
2145 if (! NILP (timeout))
2146 {
2147 CHECK_NUMBER (timeout, 1);
2148 seconds = XINT (timeout);
ada9a4fd 2149 if (seconds < 0 || (seconds == 0 && useconds == 0))
d0d6b7c5
JB
2150 seconds = -1;
2151 }
2152 else
2153 {
4ee3e309 2154 if (NILP (process))
d0d6b7c5
JB
2155 seconds = -1;
2156 else
2157 seconds = 0;
2158 }
2159
4ee3e309
EN
2160 if (NILP (process))
2161 XSETFASTINT (process, 0);
f76475ad 2162
d0d6b7c5 2163 return
4ee3e309 2164 (wait_reading_process_input (seconds, useconds, process, 0)
d0d6b7c5
JB
2165 ? Qt : Qnil);
2166}
2167
2168/* This variable is different from waiting_for_input in keyboard.c.
2169 It is used to communicate to a lisp process-filter/sentinel (via the
2170 function Fwaiting_for_user_input_p below) whether emacs was waiting
2171 for user-input when that process-filter was called.
2172 waiting_for_input cannot be used as that is by definition 0 when
d430ee71
RS
2173 lisp code is being evalled.
2174 This is also used in record_asynch_buffer_change.
2175 For that purpose, this must be 0
2176 when not inside wait_reading_process_input. */
d0d6b7c5
JB
2177static int waiting_for_user_input_p;
2178
c573ae8e 2179/* This is here so breakpoints can be put on it. */
dfcf069d 2180static void
c573ae8e
RS
2181wait_reading_process_input_1 ()
2182{
2183}
2184
d0d6b7c5
JB
2185/* Read and dispose of subprocess output while waiting for timeout to
2186 elapse and/or keyboard input to be available.
2187
de6fd4b9 2188 TIME_LIMIT is:
d0d6b7c5
JB
2189 timeout in seconds, or
2190 zero for no limit, or
2191 -1 means gobble data immediately available but don't wait for any.
2192
de6fd4b9
RS
2193 MICROSECS is:
2194 an additional duration to wait, measured in microseconds.
2195 If this is nonzero and time_limit is 0, then the timeout
2196 consists of MICROSECS only.
6e4f3667 2197
de6fd4b9 2198 READ_KBD is a lisp value:
d0d6b7c5
JB
2199 0 to ignore keyboard input, or
2200 1 to return when input is available, or
84aa3ace 2201 -1 meaning caller will actually read the input, so don't throw to
d0d6b7c5 2202 the quit handler, or
e6194ffc 2203 a cons cell, meaning wait until its car is non-nil
de6fd4b9 2204 (and gobble terminal input into the buffer if any arrives), or
f76475ad
JB
2205 a process object, meaning wait until something arrives from that
2206 process. The return value is true iff we read some input from
2207 that process.
d0d6b7c5 2208
de6fd4b9 2209 DO_DISPLAY != 0 means redisplay should be done to show subprocess
d0d6b7c5
JB
2210 output that arrives.
2211
de6fd4b9 2212 If READ_KBD is a pointer to a struct Lisp_Process, then the
d0d6b7c5
JB
2213 function returns true iff we received input from that process
2214 before the timeout elapsed.
eb8c3be9 2215 Otherwise, return true iff we received input from any process. */
d0d6b7c5 2216
dfcf069d 2217int
d0d6b7c5 2218wait_reading_process_input (time_limit, microsecs, read_kbd, do_display)
f76475ad
JB
2219 int time_limit, microsecs;
2220 Lisp_Object read_kbd;
2221 int do_display;
d0d6b7c5
JB
2222{
2223 register int channel, nfds, m;
2224 static SELECT_TYPE Available;
2225 int xerrno;
2226 Lisp_Object proc;
2227 EMACS_TIME timeout, end_time, garbage;
2228 SELECT_TYPE Atemp;
a9f2c884 2229 int wait_channel = -1;
d0d6b7c5
JB
2230 struct Lisp_Process *wait_proc = 0;
2231 int got_some_input = 0;
84aa3ace 2232 Lisp_Object *wait_for_cell = 0;
d0d6b7c5
JB
2233
2234 FD_ZERO (&Available);
2235
f76475ad
JB
2236 /* If read_kbd is a process to watch, set wait_proc and wait_channel
2237 accordingly. */
bcd69aea 2238 if (PROCESSP (read_kbd))
d0d6b7c5 2239 {
f76475ad 2240 wait_proc = XPROCESS (read_kbd);
a9f2c884 2241 wait_channel = XINT (wait_proc->infd);
22719df2 2242 XSETFASTINT (read_kbd, 0);
d0d6b7c5
JB
2243 }
2244
84aa3ace 2245 /* If waiting for non-nil in a cell, record where. */
bcd69aea 2246 if (CONSP (read_kbd))
84aa3ace
RS
2247 {
2248 wait_for_cell = &XCONS (read_kbd)->car;
22719df2 2249 XSETFASTINT (read_kbd, 0);
84aa3ace
RS
2250 }
2251
f76475ad 2252 waiting_for_user_input_p = XINT (read_kbd);
d0d6b7c5
JB
2253
2254 /* Since we may need to wait several times,
2255 compute the absolute time to return at. */
2256 if (time_limit || microsecs)
2257 {
2258 EMACS_GET_TIME (end_time);
2259 EMACS_SET_SECS_USECS (timeout, time_limit, microsecs);
2260 EMACS_ADD_TIME (end_time, end_time, timeout);
2261 }
e07d5449
KH
2262#ifdef hpux
2263 /* AlainF 5-Jul-1996
2264 HP-UX 10.10 seem to have problems with signals coming in
2265 Causes "poll: interrupted system call" messages when Emacs is run
2266 in an X window
2267 Turn off periodic alarms (in case they are in use) */
2268 stop_polling ();
2269#endif
d0d6b7c5 2270
d0d6b7c5
JB
2271 while (1)
2272 {
c0239a0b
RS
2273 int timeout_reduced_for_timers = 0;
2274
d0d6b7c5
JB
2275 /* If calling from keyboard input, do not quit
2276 since we want to return C-g as an input character.
2277 Otherwise, do pending quit if requested. */
f76475ad 2278 if (XINT (read_kbd) >= 0)
d0d6b7c5
JB
2279 QUIT;
2280
889255b4
RS
2281 /* Exit now if the cell we're waiting for became non-nil. */
2282 if (wait_for_cell && ! NILP (*wait_for_cell))
2283 break;
2284
d0d6b7c5
JB
2285 /* Compute time from now till when time limit is up */
2286 /* Exit if already run out */
2287 if (time_limit == -1)
2288 {
2289 /* -1 specified for timeout means
2290 gobble output available now
2291 but don't wait at all. */
2292
2293 EMACS_SET_SECS_USECS (timeout, 0, 0);
2294 }
2295 else if (time_limit || microsecs)
2296 {
2297 EMACS_GET_TIME (timeout);
2298 EMACS_SUB_TIME (timeout, end_time, timeout);
2299 if (EMACS_TIME_NEG_P (timeout))
2300 break;
2301 }
2302 else
2303 {
2304 EMACS_SET_SECS_USECS (timeout, 100000, 0);
2305 }
2306
f854a00b
RS
2307 /* Normally we run timers here.
2308 But not if wait_for_cell; in those cases,
2309 the wait is supposed to be short,
2310 and those callers cannot handle running arbitrary Lisp code here. */
2311 if (! wait_for_cell)
fb4c3627 2312 {
c0239a0b 2313 EMACS_TIME timer_delay;
c573ae8e
RS
2314 int old_timers_run;
2315
2316 retry:
2317 old_timers_run = timers_run;
c0239a0b 2318 timer_delay = timer_check (1);
5de50bfb 2319 if (timers_run != old_timers_run && do_display)
c573ae8e
RS
2320 {
2321 redisplay_preserve_echo_area ();
2322 /* We must retry, since a timer may have requeued itself
2323 and that could alter the time_delay. */
2324 goto retry;
2325 }
2326
69645afc
RS
2327 /* If there is unread keyboard input, also return. */
2328 if (XINT (read_kbd) != 0
2329 && requeued_events_pending_p ())
2330 break;
2331
c0239a0b 2332 if (! EMACS_TIME_NEG_P (timer_delay) && time_limit != -1)
fb4c3627
RS
2333 {
2334 EMACS_TIME difference;
2335 EMACS_SUB_TIME (difference, timer_delay, timeout);
2336 if (EMACS_TIME_NEG_P (difference))
c0239a0b
RS
2337 {
2338 timeout = timer_delay;
2339 timeout_reduced_for_timers = 1;
2340 }
fb4c3627 2341 }
4abca5e7
RS
2342 /* If time_limit is -1, we are not going to wait at all. */
2343 else if (time_limit != -1)
c573ae8e
RS
2344 {
2345 /* This is so a breakpoint can be put here. */
2346 wait_reading_process_input_1 ();
2347 }
fb4c3627
RS
2348 }
2349
90ab1a81
JB
2350 /* Cause C-g and alarm signals to take immediate action,
2351 and cause input available signals to zero out timeout.
2352
2353 It is important that we do this before checking for process
2354 activity. If we get a SIGCHLD after the explicit checks for
2355 process activity, timeout is the only way we will know. */
2356 if (XINT (read_kbd) < 0)
2357 set_waiting_for_input (&timeout);
2358
6be429b1
JB
2359 /* If status of something has changed, and no input is
2360 available, notify the user of the change right away. After
2361 this explicit check, we'll let the SIGCHLD handler zap
2362 timeout to get our attention. */
2363 if (update_tick != process_tick && do_display)
2364 {
2365 Atemp = input_wait_mask;
2366 EMACS_SET_SECS_USECS (timeout, 0, 0);
0c9960e9
RS
2367 if ((select (max (max_process_desc, max_keyboard_desc) + 1,
2368 &Atemp, (SELECT_TYPE *)0, (SELECT_TYPE *)0,
ecd1f654
KH
2369 &timeout)
2370 <= 0))
90ab1a81
JB
2371 {
2372 /* It's okay for us to do this and then continue with
a0e4d3f3 2373 the loop, since timeout has already been zeroed out. */
90ab1a81
JB
2374 clear_waiting_for_input ();
2375 status_notify ();
2376 }
6be429b1
JB
2377 }
2378
2379 /* Don't wait for output from a non-running process. */
2380 if (wait_proc != 0 && !NILP (wait_proc->raw_status_low))
2381 update_status (wait_proc);
2382 if (wait_proc != 0
2383 && ! EQ (wait_proc->status, Qrun))
9aa2a7f4 2384 {
215b45e9 2385 int nread, total_nread = 0;
7ce63188 2386
9aa2a7f4 2387 clear_waiting_for_input ();
7ce63188
RS
2388 XSETPROCESS (proc, wait_proc);
2389
2390 /* Read data from the process, until we exhaust it. */
1c0707fd 2391 while (XINT (wait_proc->infd) >= 0
97a084c1
RS
2392 && (nread
2393 = read_process_output (proc, XINT (wait_proc->infd))))
215b45e9
RS
2394 {
2395 if (0 < nread)
2396 total_nread += nread;
2397#ifdef EIO
2398 else if (nread == -1 && EIO == errno)
2399 break;
2400#endif
2401 }
7ce63188
RS
2402 if (total_nread > 0 && do_display)
2403 redisplay_preserve_echo_area ();
2404
9aa2a7f4
JB
2405 break;
2406 }
6be429b1 2407
d0d6b7c5
JB
2408 /* Wait till there is something to do */
2409
b5dc1c83
RS
2410 if (wait_for_cell)
2411 Available = non_process_wait_mask;
2412 else if (! XINT (read_kbd))
a69281ff
RS
2413 Available = non_keyboard_wait_mask;
2414 else
2415 Available = input_wait_mask;
d0d6b7c5 2416
ff11dfa1 2417 /* If frame size has changed or the window is newly mapped,
ffd56f97
JB
2418 redisplay now, before we start to wait. There is a race
2419 condition here; if a SIGIO arrives between now and the select
016899c0
JB
2420 and indicates that a frame is trashed, the select may block
2421 displaying a trashed screen. */
5164ee8e 2422 if (frame_garbaged && do_display)
7286affd
RS
2423 {
2424 clear_waiting_for_input ();
2425 redisplay_preserve_echo_area ();
2426 if (XINT (read_kbd) < 0)
7efe788e 2427 set_waiting_for_input (&timeout);
7286affd 2428 }
ffd56f97 2429
0a65b032
RS
2430 if (XINT (read_kbd) && detect_input_pending ())
2431 {
2432 nfds = 0;
2433 FD_ZERO (&Available);
2434 }
2435 else
0c9960e9
RS
2436 nfds = select (max (max_process_desc, max_keyboard_desc) + 1,
2437 &Available, (SELECT_TYPE *)0, (SELECT_TYPE *)0,
0a65b032 2438 &timeout);
6720a7fb 2439
d0d6b7c5
JB
2440 xerrno = errno;
2441
2442 /* Make C-g and alarm signals set flags again */
2443 clear_waiting_for_input ();
2444
2445 /* If we woke up due to SIGWINCH, actually change size now. */
2446 do_pending_window_change ();
2447
c0239a0b
RS
2448 if (time_limit && nfds == 0 && ! timeout_reduced_for_timers)
2449 /* We wanted the full specified time, so return now. */
d0d6b7c5
JB
2450 break;
2451 if (nfds < 0)
2452 {
2453 if (xerrno == EINTR)
2454 FD_ZERO (&Available);
b0310da4
JB
2455#ifdef ultrix
2456 /* Ultrix select seems to return ENOMEM when it is
2457 interrupted. Treat it just like EINTR. Bleah. Note
2458 that we want to test for the "ultrix" CPP symbol, not
2459 "__ultrix__"; the latter is only defined under GCC, but
2460 not by DEC's bundled CC. -JimB */
8058415c
JB
2461 else if (xerrno == ENOMEM)
2462 FD_ZERO (&Available);
2463#endif
d0d6b7c5
JB
2464#ifdef ALLIANT
2465 /* This happens for no known reason on ALLIANT.
2466 I am guessing that this is the right response. -- RMS. */
2467 else if (xerrno == EFAULT)
2468 FD_ZERO (&Available);
2469#endif
2470 else if (xerrno == EBADF)
2471 {
2472#ifdef AIX
2473 /* AIX doesn't handle PTY closure the same way BSD does. On AIX,
2474 the child's closure of the pts gives the parent a SIGHUP, and
2475 the ptc file descriptor is automatically closed,
2476 yielding EBADF here or at select() call above.
2477 So, SIGHUP is ignored (see def of PTY_TTY_NAME_SPRINTF
a0e4d3f3 2478 in m/ibmrt-aix.h), and here we just ignore the select error.
d0d6b7c5 2479 Cleanup occurs c/o status_notify after SIGCLD. */
ffd56f97 2480 FD_ZERO (&Available); /* Cannot depend on values returned */
d0d6b7c5
JB
2481#else
2482 abort ();
2483#endif
2484 }
2485 else
6ed6233b 2486 error ("select error: %s", strerror (xerrno));
d0d6b7c5 2487 }
26ec91de 2488#if defined(sun) && !defined(USG5_4)
a69281ff 2489 else if (nfds > 0 && keyboard_bit_set (&Available)
dd2281ae 2490 && interrupt_input)
e0109153
JB
2491 /* System sometimes fails to deliver SIGIO.
2492
2493 David J. Mackenzie says that Emacs doesn't compile under
2494 Solaris if this code is enabled, thus the USG5_4 in the CPP
2495 conditional. "I haven't noticed any ill effects so far.
2496 If you find a Solaris expert somewhere, they might know
2497 better." */
d0d6b7c5
JB
2498 kill (getpid (), SIGIO);
2499#endif
2500
5d5beb62
RS
2501#if 0 /* When polling is used, interrupt_input is 0,
2502 so get_input_pending should read the input.
2503 So this should not be needed. */
2504 /* If we are using polling for input,
2505 and we see input available, make it get read now.
2506 Otherwise it might not actually get read for a second.
2507 And on hpux, since we turn off polling in wait_reading_process_input,
2508 it might never get read at all if we don't spend much time
2509 outside of wait_reading_process_input. */
2510 if (XINT (read_kbd) && interrupt_input
2511 && keyboard_bit_set (&Available)
2512 && input_polling_used ())
2513 kill (getpid (), SIGALRM);
2514#endif
2515
d0d6b7c5
JB
2516 /* Check for keyboard input */
2517 /* If there is any, return immediately
2518 to give it higher priority than subprocesses */
2519
77e1b3d4 2520 if (XINT (read_kbd) != 0
5d6c2aa3 2521 && detect_input_pending_run_timers (do_display))
6ed6233b
KH
2522 {
2523 swallow_events (do_display);
5d6c2aa3 2524 if (detect_input_pending_run_timers (do_display))
6ed6233b
KH
2525 break;
2526 }
2527
69645afc
RS
2528 /* If there is unread keyboard input, also return. */
2529 if (XINT (read_kbd) != 0
2530 && requeued_events_pending_p ())
2531 break;
2532
77e1b3d4
RS
2533 /* If we are not checking for keyboard input now,
2534 do process events (but don't run any timers).
2535 This is so that X events will be processed.
0c9960e9 2536 Otherwise they may have to wait until polling takes place.
77e1b3d4
RS
2537 That would causes delays in pasting selections, for example.
2538
2539 (We used to do this only if wait_for_cell.) */
2540 if (XINT (read_kbd) == 0 && detect_input_pending ())
f854a00b
RS
2541 {
2542 swallow_events (do_display);
0c9960e9 2543#if 0 /* Exiting when read_kbd doesn't request that seems wrong, though. */
f854a00b
RS
2544 if (detect_input_pending ())
2545 break;
5d5beb62 2546#endif
0c9960e9 2547 }
f854a00b 2548
84aa3ace
RS
2549 /* Exit now if the cell we're waiting for became non-nil. */
2550 if (wait_for_cell && ! NILP (*wait_for_cell))
2551 break;
2552
4746118a 2553#ifdef SIGIO
5d5beb62 2554 /* If we think we have keyboard input waiting, but didn't get SIGIO,
d0d6b7c5
JB
2555 go read it. This can happen with X on BSD after logging out.
2556 In that case, there really is no input and no SIGIO,
2557 but select says there is input. */
2558
dd2281ae 2559 if (XINT (read_kbd) && interrupt_input
5d5beb62 2560 && keyboard_bit_set (&Available))
e643c5be 2561 kill (getpid (), SIGIO);
4746118a 2562#endif
d0d6b7c5 2563
d0d6b7c5
JB
2564 if (! wait_proc)
2565 got_some_input |= nfds > 0;
2566
32676c08
JB
2567 /* If checking input just got us a size-change event from X,
2568 obey it now if we should. */
97f3b3d6 2569 if (XINT (read_kbd) || wait_for_cell)
32676c08
JB
2570 do_pending_window_change ();
2571
a9f2c884
RS
2572 /* Check for data from a process. */
2573 /* Really FIRST_PROC_DESC should be 0 on Unix,
2574 but this is safer in the short run. */
a69281ff 2575 for (channel = 0; channel <= max_process_desc; channel++)
d0d6b7c5 2576 {
a69281ff
RS
2577 if (FD_ISSET (channel, &Available)
2578 && FD_ISSET (channel, &non_keyboard_wait_mask))
d0d6b7c5
JB
2579 {
2580 int nread;
2581
2582 /* If waiting for this channel, arrange to return as
2583 soon as no more input to be processed. No more
2584 waiting. */
2585 if (wait_channel == channel)
2586 {
a9f2c884 2587 wait_channel = -1;
d0d6b7c5
JB
2588 time_limit = -1;
2589 got_some_input = 1;
2590 }
2591 proc = chan_process[channel];
2592 if (NILP (proc))
2593 continue;
2594
d0d6b7c5
JB
2595 /* Read data from the process, starting with our
2596 buffered-ahead character if we have one. */
2597
2598 nread = read_process_output (proc, channel);
2599 if (nread > 0)
2600 {
2601 /* Since read_process_output can run a filter,
2602 which can call accept-process-output,
2603 don't try to read from any other processes
2604 before doing the select again. */
2605 FD_ZERO (&Available);
2606
2607 if (do_display)
2608 redisplay_preserve_echo_area ();
2609 }
2610#ifdef EWOULDBLOCK
2611 else if (nread == -1 && errno == EWOULDBLOCK)
2612 ;
0b75e9a4 2613#endif
89d7280d
RS
2614 /* ISC 4.1 defines both EWOULDBLOCK and O_NONBLOCK,
2615 and Emacs uses O_NONBLOCK, so what we get is EAGAIN. */
d0d6b7c5
JB
2616#ifdef O_NONBLOCK
2617 else if (nread == -1 && errno == EAGAIN)
2618 ;
2619#else
2620#ifdef O_NDELAY
2621 else if (nread == -1 && errno == EAGAIN)
2622 ;
2623 /* Note that we cannot distinguish between no input
2624 available now and a closed pipe.
2625 With luck, a closed pipe will be accompanied by
2626 subprocess termination and SIGCHLD. */
2627 else if (nread == 0 && !NETCONN_P (proc))
2628 ;
ffd56f97
JB
2629#endif /* O_NDELAY */
2630#endif /* O_NONBLOCK */
d0d6b7c5
JB
2631#ifdef HAVE_PTYS
2632 /* On some OSs with ptys, when the process on one end of
2633 a pty exits, the other end gets an error reading with
2634 errno = EIO instead of getting an EOF (0 bytes read).
2635 Therefore, if we get an error reading and errno =
2636 EIO, just continue, because the child process has
2637 exited and should clean itself up soon (e.g. when we
2638 get a SIGCHLD). */
2639 else if (nread == -1 && errno == EIO)
2640 ;
ffd56f97
JB
2641#endif /* HAVE_PTYS */
2642 /* If we can detect process termination, don't consider the process
2643 gone just because its pipe is closed. */
d0d6b7c5
JB
2644#ifdef SIGCHLD
2645 else if (nread == 0 && !NETCONN_P (proc))
2646 ;
2647#endif
2648 else
2649 {
2650 /* Preserve status of processes already terminated. */
2651 XSETINT (XPROCESS (proc)->tick, ++process_tick);
2652 deactivate_process (proc);
2653 if (!NILP (XPROCESS (proc)->raw_status_low))
2654 update_status (XPROCESS (proc));
2655 if (EQ (XPROCESS (proc)->status, Qrun))
2656 XPROCESS (proc)->status
2657 = Fcons (Qexit, Fcons (make_number (256), Qnil));
2658 }
2659 }
ffd56f97
JB
2660 } /* end for each file descriptor */
2661 } /* end while exit conditions not met */
d0d6b7c5 2662
d430ee71
RS
2663 waiting_for_user_input_p = 0;
2664
ffd56f97
JB
2665 /* If calling from keyboard input, do not quit
2666 since we want to return C-g as an input character.
2667 Otherwise, do pending quit if requested. */
f76475ad 2668 if (XINT (read_kbd) >= 0)
ffd56f97
JB
2669 {
2670 /* Prevent input_pending from remaining set if we quit. */
2671 clear_input_pending ();
2672 QUIT;
2673 }
e07d5449
KH
2674#ifdef hpux
2675 /* AlainF 5-Jul-1996
2676 HP-UX 10.10 seems to have problems with signals coming in
2677 Causes "poll: interrupted system call" messages when Emacs is run
2678 in an X window
2679 Turn periodic alarms back on */
5d5beb62 2680 start_polling ();
e07d5449
KH
2681#endif
2682
d0d6b7c5
JB
2683 return got_some_input;
2684}
2685\f
3b9a3dfa
RS
2686/* Given a list (FUNCTION ARGS...), apply FUNCTION to the ARGS. */
2687
2688static Lisp_Object
2689read_process_output_call (fun_and_args)
2690 Lisp_Object fun_and_args;
2691{
2692 return apply1 (XCONS (fun_and_args)->car, XCONS (fun_and_args)->cdr);
2693}
2694
2695static Lisp_Object
2696read_process_output_error_handler (error)
2697 Lisp_Object error;
2698{
2699 cmd_error_internal (error, "error in process filter: ");
2700 Vinhibit_quit = Qt;
2701 update_echo_area ();
833ba342 2702 Fsleep_for (make_number (2), Qnil);
3b9a3dfa
RS
2703}
2704
d0d6b7c5
JB
2705/* Read pending output from the process channel,
2706 starting with our buffered-ahead character if we have one.
0fa1789e 2707 Yield number of decoded characters read.
d0d6b7c5
JB
2708
2709 This function reads at most 1024 characters.
2710 If you want to read all available subprocess output,
0fa1789e
KH
2711 you must call it repeatedly until it returns zero.
2712
2713 The characters read are decoded according to PROC's coding-system
2714 for decoding. */
d0d6b7c5 2715
dfcf069d 2716int
d0d6b7c5
JB
2717read_process_output (proc, channel)
2718 Lisp_Object proc;
2719 register int channel;
2720{
1d2fc612 2721 register int nchars, nbytes;
d0d6b7c5 2722 char *chars;
0fa1789e
KH
2723#ifdef VMS
2724 int chars_allocated = 0; /* If 1, `chars' should be freed later. */
d0d6b7c5 2725#else
0fa1789e 2726 char buf[1024];
d0d6b7c5
JB
2727#endif
2728 register Lisp_Object outstream;
2729 register struct buffer *old = current_buffer;
2730 register struct Lisp_Process *p = XPROCESS (proc);
2731 register int opoint;
c7580538 2732 struct coding_system *coding = proc_decode_coding_system[channel];
0fa1789e
KH
2733 int chars_in_decoding_buf = 0; /* If 1, `chars' points
2734 XSTRING (p->decoding_buf)->data. */
e7fbaa65 2735 int carryover = XINT (p->decoding_carryover);
d0d6b7c5
JB
2736
2737#ifdef VMS
2738 VMS_PROC_STUFF *vs, *get_vms_process_pointer();
2739
2740 vs = get_vms_process_pointer (p->pid);
2741 if (vs)
2742 {
2743 if (!vs->iosb[0])
2744 return(0); /* Really weird if it does this */
2745 if (!(vs->iosb[0] & 1))
2746 return -1; /* I/O error */
2747 }
2748 else
2749 error ("Could not get VMS process pointer");
2750 chars = vs->inputBuffer;
1d2fc612
RS
2751 nbytes = clean_vms_buffer (chars, vs->iosb[1]);
2752 if (nbytes <= 0)
d0d6b7c5
JB
2753 {
2754 start_vms_process_read (vs); /* Crank up the next read on the process */
2755 return 1; /* Nothing worth printing, say we got 1 */
2756 }
e7fbaa65 2757 if (carryover > 0)
0fa1789e 2758 {
e7fbaa65
KH
2759 /* The data carried over in the previous decoding (which are at
2760 the tail of decoding buffer) should be prepended to the new
2761 data read to decode all together. */
2762 char *buf = (char *) xmalloc (nbytes + carryover);
2763
2764 bcopy (XSTRING (p->decoding_buf)->data
fc932ac6 2765 + STRING_BYTES (XSTRING (p->decoding_buf)) - carryover,
e7fbaa65
KH
2766 buf, carryover);
2767 bcopy (chars, buf + carryover, nbytes);
0fa1789e
KH
2768 chars = buf;
2769 chars_allocated = 1;
2770 }
d0d6b7c5
JB
2771#else /* not VMS */
2772
e7fbaa65
KH
2773 if (carryover)
2774 /* See the comment above. */
2775 bcopy (XSTRING (p->decoding_buf)->data
fc932ac6 2776 + STRING_BYTES (XSTRING (p->decoding_buf)) - carryover,
e7fbaa65 2777 buf, carryover);
0fa1789e 2778
d0d6b7c5 2779 if (proc_buffered_char[channel] < 0)
e7fbaa65 2780 nbytes = read (channel, buf + carryover, (sizeof buf) - carryover);
d0d6b7c5
JB
2781 else
2782 {
e7fbaa65 2783 buf[carryover] = proc_buffered_char[channel];
d0d6b7c5 2784 proc_buffered_char[channel] = -1;
e7fbaa65
KH
2785 nbytes = read (channel, buf + carryover + 1,
2786 (sizeof buf) - carryover - 1);
1d2fc612
RS
2787 if (nbytes < 0)
2788 nbytes = 1;
d0d6b7c5 2789 else
1d2fc612 2790 nbytes = nbytes + 1;
d0d6b7c5 2791 }
0fa1789e 2792 chars = buf;
d0d6b7c5
JB
2793#endif /* not VMS */
2794
1d2fc612 2795 /* At this point, NBYTES holds number of characters just received
0fa1789e 2796 (including the one in proc_buffered_char[channel]). */
1d2fc612 2797 if (nbytes <= 0) return nbytes;
d0d6b7c5 2798
1d2fc612 2799 /* Now set NBYTES how many bytes we must decode. */
e7fbaa65
KH
2800 nbytes += carryover;
2801 nchars = nbytes;
0fa1789e 2802
e7fbaa65 2803 if (CODING_MAY_REQUIRE_DECODING (coding))
0fa1789e 2804 {
1d2fc612 2805 int require = decoding_buffer_size (coding, nbytes);
e7fbaa65 2806 int result;
0fa1789e 2807
fc932ac6 2808 if (STRING_BYTES (XSTRING (p->decoding_buf)) < require)
0fa1789e 2809 p->decoding_buf = make_uninit_string (require);
e7fbaa65 2810 result = decode_coding (coding, chars, XSTRING (p->decoding_buf)->data,
fc932ac6 2811 nbytes, STRING_BYTES (XSTRING (p->decoding_buf)));
e7fbaa65 2812 carryover = nbytes - coding->consumed;
0fa1789e 2813
e7fbaa65 2814 /* A new coding system might be found by `decode_coding'. */
0fa1789e
KH
2815 if (!EQ (p->decode_coding_system, coding->symbol))
2816 {
2817 p->decode_coding_system = coding->symbol;
77e1b3d4
RS
2818
2819 /* Don't call setup_coding_system for
2820 proc_decode_coding_system[channel] here. It is done in
2821 detect_coding called via decode_coding above. */
2822
e7fbaa65 2823 /* If a coding system for encoding is not yet decided, we set
486b111b
KH
2824 it as the same as coding-system for decoding.
2825
2826 But, before doing that we must check if
2827 proc_encode_coding_system[p->outfd] surely points to a
2828 valid memory because p->outfd will be changed once EOF is
2829 sent to the process. */
2830 if (NILP (p->encode_coding_system)
e6d6dff2 2831 && proc_encode_coding_system[XINT (p->outfd)])
0fa1789e
KH
2832 {
2833 p->encode_coding_system = coding->symbol;
2834 setup_coding_system (coding->symbol,
e6d6dff2 2835 proc_encode_coding_system[XINT (p->outfd)]);
0fa1789e
KH
2836 }
2837 }
1d2fc612 2838
0fa1789e
KH
2839#ifdef VMS
2840 /* Now we don't need the contents of `chars'. */
2841 if (chars_allocated)
2842 free (chars);
2843#endif
e7fbaa65 2844 if (coding->produced == 0)
0fa1789e 2845 return 0;
d7223684 2846 chars = (char *) XSTRING (p->decoding_buf)->data;
e7fbaa65 2847 nbytes = coding->produced;
0d023da1
KH
2848 nchars = (coding->fake_multibyte
2849 ? multibyte_chars_in_text (chars, nbytes)
2850 : coding->produced_char);
0fa1789e
KH
2851 chars_in_decoding_buf = 1;
2852 }
2853#ifdef VMS
2854 else if (chars_allocated)
2855 {
2856 /* Although we don't have to decode the received data, we must
2857 move it to an area which we don't have to free. */
2858 if (! STRINGP (p->decoding_buf)
0d023da1 2859 || STRING_BYTES (XSTRING (p->decoding_buf)) < nbytes)
1d2fc612
RS
2860 p->decoding_buf = make_uninit_string (nbytes);
2861 bcopy (chars, XSTRING (p->decoding_buf)->data, nbytes);
0fa1789e
KH
2862 free (chars);
2863 chars = XSTRING (p->decoding_buf)->data;
0d023da1 2864 nchars = multibyte_chars_in_text (chars, nbytes);
0fa1789e 2865 chars_in_decoding_buf = 1;
e7fbaa65 2866 carryover = 0;
0fa1789e
KH
2867 }
2868#endif
2869
e7fbaa65 2870 XSETINT (p->decoding_carryover, carryover);
486b111b
KH
2871 Vlast_coding_system_used = coding->symbol;
2872
1d2fc612 2873 /* Read and dispose of the process output. */
d0d6b7c5
JB
2874 outstream = p->filter;
2875 if (!NILP (outstream))
2876 {
2877 /* We inhibit quit here instead of just catching it so that
2878 hitting ^G when a filter happens to be running won't screw
2879 it up. */
2880 int count = specpdl_ptr - specpdl;
30c78175 2881 Lisp_Object odeactivate;
dfc21838 2882 Lisp_Object obuffer, okeymap;
1d2fc612 2883 Lisp_Object text;
4da2f5be 2884 int outer_running_asynch_code = running_asynch_code;
30c78175 2885
dfc21838
RS
2886 /* No need to gcpro these, because all we do with them later
2887 is test them for EQness, and none of them should be a string. */
30c78175 2888 odeactivate = Vdeactivate_mark;
dfc21838
RS
2889 XSETBUFFER (obuffer, current_buffer);
2890 okeymap = current_buffer->keymap;
30c78175 2891
d0d6b7c5 2892 specbind (Qinhibit_quit, Qt);
6545aada 2893 specbind (Qlast_nonmenu_event, Qt);
3b9a3dfa 2894
4da2f5be
RS
2895 /* In case we get recursively called,
2896 and we already saved the match data nonrecursively,
2897 save the same match data in safely recursive fashion. */
2898 if (outer_running_asynch_code)
2899 {
2900 Lisp_Object tem;
2901 /* Don't clobber the CURRENT match data, either! */
dd130227 2902 tem = Fmatch_data (Qnil, Qnil);
4da2f5be 2903 restore_match_data ();
8f1ecd05
RS
2904 record_unwind_protect (Fset_match_data, Fmatch_data (Qnil, Qnil));
2905 Fset_match_data (tem);
4da2f5be
RS
2906 }
2907
2908 /* For speed, if a search happens within this code,
2909 save the match data in a special nonrecursive fashion. */
7074fde6 2910 running_asynch_code = 1;
4da2f5be 2911
e6e5ac68 2912 text = make_string_from_bytes (chars, nchars, nbytes);
3b9a3dfa
RS
2913 internal_condition_case_1 (read_process_output_call,
2914 Fcons (outstream,
1d2fc612 2915 Fcons (proc, Fcons (text, Qnil))),
3b9a3dfa
RS
2916 !NILP (Vdebug_on_error) ? Qnil : Qerror,
2917 read_process_output_error_handler);
4da2f5be
RS
2918
2919 /* If we saved the match data nonrecursively, restore it now. */
7074fde6 2920 restore_match_data ();
4da2f5be 2921 running_asynch_code = outer_running_asynch_code;
d0d6b7c5 2922
592ce97f 2923 /* Handling the process output should not deactivate the mark. */
30c78175
RS
2924 Vdeactivate_mark = odeactivate;
2925
7973cfa8
RS
2926#if 0 /* Call record_asynch_buffer_change unconditionally,
2927 because we might have changed minor modes or other things
2928 that affect key bindings. */
dfc21838
RS
2929 if (! EQ (Fcurrent_buffer (), obuffer)
2930 || ! EQ (current_buffer->keymap, okeymap))
7973cfa8 2931#endif
927e08be
RS
2932 /* But do it only if the caller is actually going to read events.
2933 Otherwise there's no need to make him wake up, and it could
2934 cause trouble (for example it would make Fsit_for return). */
2935 if (waiting_for_user_input_p == -1)
2936 record_asynch_buffer_change ();
d72534ba 2937
d0d6b7c5
JB
2938#ifdef VMS
2939 start_vms_process_read (vs);
2940#endif
2ea6d561 2941 unbind_to (count, Qnil);
d0d6b7c5
JB
2942 return nchars;
2943 }
2944
2945 /* If no filter, write into buffer if it isn't dead. */
2946 if (!NILP (p->buffer) && !NILP (XBUFFER (p->buffer)->name))
2947 {
b0310da4 2948 Lisp_Object old_read_only;
12ca5cdf 2949 int old_begv, old_zv;
d8a2934e 2950 int old_begv_byte, old_zv_byte;
30c78175 2951 Lisp_Object odeactivate;
d8a2934e
RS
2952 int before, before_byte;
2953 int opoint_byte;
30c78175
RS
2954
2955 odeactivate = Vdeactivate_mark;
d0d6b7c5
JB
2956
2957 Fset_buffer (p->buffer);
6ec8bbd2 2958 opoint = PT;
d8a2934e 2959 opoint_byte = PT_BYTE;
b0310da4 2960 old_read_only = current_buffer->read_only;
12ca5cdf
RS
2961 old_begv = BEGV;
2962 old_zv = ZV;
d8a2934e
RS
2963 old_begv_byte = BEGV_BYTE;
2964 old_zv_byte = ZV_BYTE;
b0310da4
JB
2965
2966 current_buffer->read_only = Qnil;
d0d6b7c5
JB
2967
2968 /* Insert new output into buffer
2969 at the current end-of-output marker,
2970 thus preserving logical ordering of input and output. */
2971 if (XMARKER (p->mark)->buffer)
d8a2934e
RS
2972 SET_PT_BOTH (clip_to_bounds (BEGV, marker_position (p->mark), ZV),
2973 clip_to_bounds (BEGV_BYTE, marker_byte_position (p->mark),
2974 ZV_BYTE));
d0d6b7c5 2975 else
d8a2934e 2976 SET_PT_BOTH (ZV, ZV_BYTE);
12ca5cdf 2977 before = PT;
d8a2934e 2978 before_byte = PT_BYTE;
b0310da4
JB
2979
2980 /* If the output marker is outside of the visible region, save
2981 the restriction and widen. */
6ec8bbd2 2982 if (! (BEGV <= PT && PT <= ZV))
b0310da4
JB
2983 Fwiden ();
2984
d0d6b7c5
JB
2985 /* Insert before markers in case we are inserting where
2986 the buffer's mark is, and the user's next command is Meta-y. */
0fa1789e 2987 if (chars_in_decoding_buf)
0d023da1
KH
2988 {
2989 /* Since multibyteness of p->docoding_buf is corrupted, we
2990 can't use insert_from_string_before_markers. */
2991 char *temp_buf;
2992
2993 temp_buf = (char *) alloca (nbytes);
2994 bcopy (XSTRING (p->decoding_buf)->data, temp_buf, nbytes);
2995 insert_before_markers (temp_buf, nbytes);
2996 }
0fa1789e 2997 else
1d2fc612 2998 insert_1_both (chars, nchars, nbytes, 0, 1, 1);
d8a2934e 2999 set_marker_both (p->mark, p->buffer, PT, PT_BYTE);
b0310da4 3000
d0d6b7c5
JB
3001 update_mode_lines++;
3002
12ca5cdf
RS
3003 /* Make sure opoint and the old restrictions
3004 float ahead of any new text just as point would. */
3005 if (opoint >= before)
d8a2934e
RS
3006 {
3007 opoint += PT - before;
3008 opoint_byte += PT_BYTE - before_byte;
3009 }
12ca5cdf 3010 if (old_begv > before)
d8a2934e
RS
3011 {
3012 old_begv += PT - before;
3013 old_begv_byte += PT_BYTE - before_byte;
3014 }
12ca5cdf 3015 if (old_zv >= before)
d8a2934e
RS
3016 {
3017 old_zv += PT - before;
3018 old_zv_byte += PT_BYTE - before_byte;
3019 }
12ca5cdf 3020
b0310da4 3021 /* If the restriction isn't what it should be, set it. */
12ca5cdf
RS
3022 if (old_begv != BEGV || old_zv != ZV)
3023 Fnarrow_to_region (make_number (old_begv), make_number (old_zv));
b0310da4 3024
592ce97f 3025 /* Handling the process output should not deactivate the mark. */
30c78175
RS
3026 Vdeactivate_mark = odeactivate;
3027
b0310da4 3028 current_buffer->read_only = old_read_only;
d8a2934e 3029 SET_PT_BOTH (opoint, opoint_byte);
d0d6b7c5
JB
3030 set_buffer_internal (old);
3031 }
3032#ifdef VMS
3033 start_vms_process_read (vs);
3034#endif
1d2fc612 3035 return nbytes;
d0d6b7c5
JB
3036}
3037
3038DEFUN ("waiting-for-user-input-p", Fwaiting_for_user_input_p, Swaiting_for_user_input_p,
3039 0, 0, 0,
8b4d685f 3040 "Returns non-nil if emacs is waiting for input from the user.\n\
d0d6b7c5
JB
3041This is intended for use by asynchronous process output filters and sentinels.")
3042 ()
3043{
8b4d685f 3044 return (waiting_for_user_input_p ? Qt : Qnil);
d0d6b7c5
JB
3045}
3046\f
3047/* Sending data to subprocess */
3048
3049jmp_buf send_process_frame;
3050
3051SIGTYPE
3052send_process_trap ()
3053{
3054#ifdef BSD4_1
3055 sigrelse (SIGPIPE);
3056 sigrelse (SIGALRM);
3057#endif /* BSD4_1 */
3058 longjmp (send_process_frame, 1);
3059}
3060
4556b700
RS
3061/* Send some data to process PROC.
3062 BUF is the beginning of the data; LEN is the number of characters.
0fa1789e
KH
3063 OBJECT is the Lisp object that the data comes from.
3064
3065 The data is encoded by PROC's coding-system for encoding before it
3066 is sent. But if the data ends at the middle of multi-byte
3067 representation, that incomplete sequence of bytes are sent without
3068 being encoded. Should we store them in a buffer to prepend them to
3069 the data send later? */
4556b700 3070
dfcf069d 3071void
4556b700 3072send_process (proc, buf, len, object)
ecd1f654 3073 volatile Lisp_Object proc;
b684d043 3074 unsigned char *buf;
d0d6b7c5 3075 int len;
4556b700 3076 Lisp_Object object;
d0d6b7c5 3077{
ecd1f654 3078 /* Use volatile to protect variables from being clobbered by longjmp. */
d0d6b7c5 3079 int rv;
ecd1f654 3080 volatile unsigned char *procname = XSTRING (XPROCESS (proc)->name)->data;
0fa1789e 3081 struct coding_system *coding;
6044e593 3082 struct gcpro gcpro1;
e7fbaa65 3083 int carryover = XINT (XPROCESS (proc)->encoding_carryover);
6044e593
RS
3084
3085 GCPRO1 (object);
d0d6b7c5 3086
d0d6b7c5
JB
3087#ifdef VMS
3088 struct Lisp_Process *p = XPROCESS (proc);
3089 VMS_PROC_STUFF *vs, *get_vms_process_pointer();
3090#endif /* VMS */
3091
3092 if (! NILP (XPROCESS (proc)->raw_status_low))
3093 update_status (XPROCESS (proc));
3094 if (! EQ (XPROCESS (proc)->status, Qrun))
3095 error ("Process %s not running", procname);
0fa1789e
KH
3096 if (XINT (XPROCESS (proc)->outfd) < 0)
3097 error ("Output file descriptor of %s is closed", procname);
3098
c7580538 3099 coding = proc_encode_coding_system[XINT (XPROCESS (proc)->outfd)];
486b111b
KH
3100 Vlast_coding_system_used = coding->symbol;
3101
1a283a4c 3102 if (CODING_REQUIRE_ENCODING (coding))
0fa1789e
KH
3103 {
3104 int require = encoding_buffer_size (coding, len);
3105 int offset, dummy;
b684d043 3106 unsigned char *temp_buf = NULL;
0fa1789e
KH
3107
3108 /* Remember the offset of data because a string or a buffer may
3109 be relocated. Setting OFFSET to -1 means we don't have to
3110 care relocation. */
3111 offset = (BUFFERP (object)
d8a2934e 3112 ? BUF_PTR_BYTE_POS (XBUFFER (object), buf)
0fa1789e 3113 : (STRINGP (object)
b684d043 3114 ? offset = buf - XSTRING (object)->data
0fa1789e
KH
3115 : -1));
3116
e7fbaa65 3117 if (carryover > 0)
0fa1789e 3118 {
e7fbaa65 3119 temp_buf = (unsigned char *) xmalloc (len + carryover);
0fa1789e
KH
3120
3121 if (offset >= 0)
3122 {
3123 if (BUFFERP (object))
d8a2934e 3124 buf = BUF_BYTE_ADDRESS (XBUFFER (object), offset);
0fa1789e 3125 else if (STRINGP (object))
b684d043 3126 buf = offset + XSTRING (object)->data;
0fa1789e
KH
3127 /* Now we don't have to care relocation. */
3128 offset = -1;
3129 }
e7fbaa65 3130 bcopy ((XSTRING (XPROCESS (proc)->encoding_buf)->data
fc932ac6 3131 + STRING_BYTES (XSTRING (XPROCESS (proc)->encoding_buf))
e7fbaa65
KH
3132 - carryover),
3133 temp_buf,
3134 carryover);
3135 bcopy (buf, temp_buf + carryover, len);
0fa1789e
KH
3136 buf = temp_buf;
3137 }
3138
fc932ac6 3139 if (STRING_BYTES (XSTRING (XPROCESS (proc)->encoding_buf)) < require)
0fa1789e
KH
3140 {
3141 XPROCESS (proc)->encoding_buf = make_uninit_string (require);
3142
3143 if (offset >= 0)
3144 {
3145 if (BUFFERP (object))
d8a2934e 3146 buf = BUF_BYTE_ADDRESS (XBUFFER (object), offset);
0fa1789e 3147 else if (STRINGP (object))
b684d043 3148 buf = offset + XSTRING (object)->data;
0fa1789e
KH
3149 }
3150 }
3151 object = XPROCESS (proc)->encoding_buf;
e7fbaa65 3152 encode_coding (coding, buf, XSTRING (object)->data,
fc932ac6 3153 len, STRING_BYTES (XSTRING (object)));
e7fbaa65 3154 len = coding->produced;
0fa1789e
KH
3155 buf = XSTRING (object)->data;
3156 if (temp_buf)
3157 xfree (temp_buf);
3158 }
d0d6b7c5
JB
3159
3160#ifdef VMS
3161 vs = get_vms_process_pointer (p->pid);
3162 if (vs == 0)
3163 error ("Could not find this process: %x", p->pid);
3164 else if (write_to_vms_process (vs, buf, len))
3165 ;
3166#else
4556b700
RS
3167
3168 if (pty_max_bytes == 0)
3169 {
3170#if defined (HAVE_FPATHCONF) && defined (_PC_MAX_CANON)
3171 pty_max_bytes = fpathconf (XFASTINT (XPROCESS (proc)->outfd),
3172 _PC_MAX_CANON);
3173 if (pty_max_bytes < 0)
3174 pty_max_bytes = 250;
3175#else
3176 pty_max_bytes = 250;
3177#endif
3178 /* Deduct one, to leave space for the eof. */
3179 pty_max_bytes--;
3180 }
3181
d0d6b7c5
JB
3182 if (!setjmp (send_process_frame))
3183 while (len > 0)
3184 {
3185 int this = len;
4746118a 3186 SIGTYPE (*old_sigpipe)();
93b4f699
RS
3187 int flush_pty = 0;
3188
4556b700
RS
3189 /* Decide how much data we can send in one batch.
3190 Long lines need to be split into multiple batches. */
3191 if (!NILP (XPROCESS (proc)->pty_flag))
93b4f699 3192 {
4556b700
RS
3193 /* Starting this at zero is always correct when not the first iteration
3194 because the previous iteration ended by sending C-d.
3195 It may not be correct for the first iteration
3196 if a partial line was sent in a separate send_process call.
3197 If that proves worth handling, we need to save linepos
3198 in the process object. */
3199 int linepos = 0;
b684d043
RS
3200 unsigned char *ptr = buf;
3201 unsigned char *end = buf + len;
4556b700
RS
3202
3203 /* Scan through this text for a line that is too long. */
3204 while (ptr != end && linepos < pty_max_bytes)
3205 {
3206 if (*ptr == '\n')
3207 linepos = 0;
3208 else
3209 linepos++;
3210 ptr++;
3211 }
3212 /* If we found one, break the line there
3213 and put in a C-d to force the buffer through. */
3214 this = ptr - buf;
93b4f699
RS
3215 }
3216
4556b700
RS
3217 /* Send this batch, using one or more write calls. */
3218 while (this > 0)
d0d6b7c5 3219 {
4556b700
RS
3220 old_sigpipe = (SIGTYPE (*) ()) signal (SIGPIPE, send_process_trap);
3221 rv = write (XINT (XPROCESS (proc)->outfd), buf, this);
3222 signal (SIGPIPE, old_sigpipe);
3223
3224 if (rv < 0)
3225 {
3226 if (0
d0d6b7c5 3227#ifdef EWOULDBLOCK
4556b700 3228 || errno == EWOULDBLOCK
d0d6b7c5
JB
3229#endif
3230#ifdef EAGAIN
4556b700 3231 || errno == EAGAIN
d0d6b7c5 3232#endif
4556b700
RS
3233 )
3234 /* Buffer is full. Wait, accepting input;
3235 that may allow the program
3236 to finish doing output and read more. */
3237 {
3238 Lisp_Object zero;
3239 int offset;
3240
3241 /* Running filters might relocate buffers or strings.
3242 Arrange to relocate BUF. */
3243 if (BUFFERP (object))
d8a2934e 3244 offset = BUF_PTR_BYTE_POS (XBUFFER (object), buf);
4556b700 3245 else if (STRINGP (object))
b684d043 3246 offset = buf - XSTRING (object)->data;
4556b700 3247
22719df2 3248 XSETFASTINT (zero, 0);
f3e6605c
RS
3249#ifdef EMACS_HAS_USECS
3250 wait_reading_process_input (0, 20000, zero, 0);
3251#else
4556b700 3252 wait_reading_process_input (1, 0, zero, 0);
f3e6605c 3253#endif
4556b700
RS
3254
3255 if (BUFFERP (object))
d8a2934e 3256 buf = BUF_BYTE_ADDRESS (XBUFFER (object), offset);
4556b700 3257 else if (STRINGP (object))
b684d043 3258 buf = offset + XSTRING (object)->data;
4556b700
RS
3259
3260 rv = 0;
3261 }
3262 else
3263 /* This is a real error. */
3264 report_file_error ("writing to process", Fcons (proc, Qnil));
d0d6b7c5 3265 }
4556b700
RS
3266 buf += rv;
3267 len -= rv;
3268 this -= rv;
d0d6b7c5 3269 }
f76475ad 3270
4556b700
RS
3271 /* If we sent just part of the string, put in an EOF
3272 to force it through, before we send the rest. */
3273 if (len > 0)
3274 Fprocess_send_eof (proc);
d0d6b7c5
JB
3275 }
3276#endif
3277 else
3278 {
3279 XPROCESS (proc)->raw_status_low = Qnil;
3280 XPROCESS (proc)->raw_status_high = Qnil;
3281 XPROCESS (proc)->status = Fcons (Qexit, Fcons (make_number (256), Qnil));
3282 XSETINT (XPROCESS (proc)->tick, ++process_tick);
3283 deactivate_process (proc);
3284#ifdef VMS
3285 error ("Error writing to process %s; closed it", procname);
3286#else
3287 error ("SIGPIPE raised on process %s; closed it", procname);
3288#endif
3289 }
6044e593
RS
3290
3291 UNGCPRO;
d0d6b7c5
JB
3292}
3293
3294DEFUN ("process-send-region", Fprocess_send_region, Sprocess_send_region,
3295 3, 3, 0,
3296 "Send current contents of region as input to PROCESS.\n\
ebb9e16f
JB
3297PROCESS may be a process, a buffer, the name of a process or buffer, or\n\
3298nil, indicating the current buffer's process.\n\
d0d6b7c5
JB
3299Called from program, takes three arguments, PROCESS, START and END.\n\
3300If the region is more than 500 characters long,\n\
3301it is sent in several bunches. This may happen even for shorter regions.\n\
3302Output from processes can arrive in between bunches.")
3303 (process, start, end)
3304 Lisp_Object process, start, end;
3305{
3306 Lisp_Object proc;
d8a2934e 3307 int start1, end1;
d0d6b7c5
JB
3308
3309 proc = get_process (process);
3310 validate_region (&start, &end);
3311
3312 if (XINT (start) < GPT && XINT (end) > GPT)
4da6dec8 3313 move_gap (XINT (start));
d0d6b7c5 3314
d8a2934e
RS
3315 start1 = CHAR_TO_BYTE (XINT (start));
3316 end1 = CHAR_TO_BYTE (XINT (end));
3317 send_process (proc, BYTE_POS_ADDR (start1), end1 - start1,
4556b700 3318 Fcurrent_buffer ());
d0d6b7c5
JB
3319
3320 return Qnil;
3321}
3322
3323DEFUN ("process-send-string", Fprocess_send_string, Sprocess_send_string,
3324 2, 2, 0,
3325 "Send PROCESS the contents of STRING as input.\n\
ebb9e16f
JB
3326PROCESS may be a process, a buffer, the name of a process or buffer, or\n\
3327nil, indicating the current buffer's process.\n\
d0d6b7c5
JB
3328If STRING is more than 500 characters long,\n\
3329it is sent in several bunches. This may happen even for shorter strings.\n\
3330Output from processes can arrive in between bunches.")
3331 (process, string)
3332 Lisp_Object process, string;
3333{
3334 Lisp_Object proc;
3335 CHECK_STRING (string, 1);
3336 proc = get_process (process);
1d2fc612 3337 send_process (proc, XSTRING (string)->data,
fc932ac6 3338 STRING_BYTES (XSTRING (string)), string);
d0d6b7c5
JB
3339 return Qnil;
3340}
3341\f
3342/* send a signal number SIGNO to PROCESS.
3343 CURRENT_GROUP means send to the process group that currently owns
3344 the terminal being used to communicate with PROCESS.
3345 This is used for various commands in shell mode.
3346 If NOMSG is zero, insert signal-announcements into process's buffers
b0310da4
JB
3347 right away.
3348
3349 If we can, we try to signal PROCESS by sending control characters
e333e864 3350 down the pty. This allows us to signal inferiors who have changed
b0310da4 3351 their uid, for which killpg would return an EPERM error. */
d0d6b7c5 3352
f9738840 3353static void
d0d6b7c5
JB
3354process_send_signal (process, signo, current_group, nomsg)
3355 Lisp_Object process;
3356 int signo;
3357 Lisp_Object current_group;
3358 int nomsg;
3359{
3360 Lisp_Object proc;
3361 register struct Lisp_Process *p;
3362 int gid;
3363 int no_pgrp = 0;
3364
3365 proc = get_process (process);
3366 p = XPROCESS (proc);
3367
3368 if (!EQ (p->childp, Qt))
3369 error ("Process %s is not a subprocess",
3370 XSTRING (p->name)->data);
a9f2c884 3371 if (XINT (p->infd) < 0)
d0d6b7c5
JB
3372 error ("Process %s is not active",
3373 XSTRING (p->name)->data);
3374
3375 if (NILP (p->pty_flag))
3376 current_group = Qnil;
3377
d0d6b7c5
JB
3378 /* If we are using pgrps, get a pgrp number and make it negative. */
3379 if (!NILP (current_group))
3380 {
b0310da4 3381#ifdef SIGNALS_VIA_CHARACTERS
d0d6b7c5
JB
3382 /* If possible, send signals to the entire pgrp
3383 by sending an input character to it. */
b0310da4 3384
6be429b1
JB
3385 /* TERMIOS is the latest and bestest, and seems most likely to
3386 work. If the system has it, use it. */
3387#ifdef HAVE_TERMIOS
3388 struct termios t;
3389
3390 switch (signo)
3391 {
3392 case SIGINT:
a9f2c884 3393 tcgetattr (XINT (p->infd), &t);
4556b700 3394 send_process (proc, &t.c_cc[VINTR], 1, Qnil);
a87b802f 3395 return;
6be429b1
JB
3396
3397 case SIGQUIT:
a9f2c884 3398 tcgetattr (XINT (p->infd), &t);
4556b700 3399 send_process (proc, &t.c_cc[VQUIT], 1, Qnil);
a87b802f 3400 return;
6be429b1
JB
3401
3402 case SIGTSTP:
a9f2c884 3403 tcgetattr (XINT (p->infd), &t);
d0adf46f 3404#if defined (VSWTCH) && !defined (PREFER_VSUSP)
4556b700 3405 send_process (proc, &t.c_cc[VSWTCH], 1, Qnil);
6be429b1 3406#else
4556b700 3407 send_process (proc, &t.c_cc[VSUSP], 1, Qnil);
6be429b1 3408#endif
a87b802f 3409 return;
6be429b1
JB
3410 }
3411
3412#else /* ! HAVE_TERMIOS */
3413
b0310da4
JB
3414 /* On Berkeley descendants, the following IOCTL's retrieve the
3415 current control characters. */
d0d6b7c5 3416#if defined (TIOCGLTC) && defined (TIOCGETC)
b0310da4 3417
d0d6b7c5
JB
3418 struct tchars c;
3419 struct ltchars lc;
3420
3421 switch (signo)
3422 {
3423 case SIGINT:
a9f2c884 3424 ioctl (XINT (p->infd), TIOCGETC, &c);
4556b700 3425 send_process (proc, &c.t_intrc, 1, Qnil);
f9738840 3426 return;
d0d6b7c5 3427 case SIGQUIT:
a9f2c884 3428 ioctl (XINT (p->infd), TIOCGETC, &c);
4556b700 3429 send_process (proc, &c.t_quitc, 1, Qnil);
f9738840 3430 return;
0ad77c54 3431#ifdef SIGTSTP
d0d6b7c5 3432 case SIGTSTP:
a9f2c884 3433 ioctl (XINT (p->infd), TIOCGLTC, &lc);
4556b700 3434 send_process (proc, &lc.t_suspc, 1, Qnil);
f9738840 3435 return;
b0310da4 3436#endif /* ! defined (SIGTSTP) */
d0d6b7c5 3437 }
b0310da4
JB
3438
3439#else /* ! defined (TIOCGLTC) && defined (TIOCGETC) */
3440
3441 /* On SYSV descendants, the TCGETA ioctl retrieves the current control
3442 characters. */
3443#ifdef TCGETA
d0d6b7c5
JB
3444 struct termio t;
3445 switch (signo)
3446 {
3447 case SIGINT:
a9f2c884 3448 ioctl (XINT (p->infd), TCGETA, &t);
4556b700 3449 send_process (proc, &t.c_cc[VINTR], 1, Qnil);
f9738840 3450 return;
d0d6b7c5 3451 case SIGQUIT:
a9f2c884 3452 ioctl (XINT (p->infd), TCGETA, &t);
4556b700 3453 send_process (proc, &t.c_cc[VQUIT], 1, Qnil);
f9738840 3454 return;
7d79e3b4 3455#ifdef SIGTSTP
d0d6b7c5 3456 case SIGTSTP:
a9f2c884 3457 ioctl (XINT (p->infd), TCGETA, &t);
4556b700 3458 send_process (proc, &t.c_cc[VSWTCH], 1, Qnil);
f9738840 3459 return;
b0310da4 3460#endif /* ! defined (SIGTSTP) */
d0d6b7c5 3461 }
b0310da4
JB
3462#else /* ! defined (TCGETA) */
3463 Your configuration files are messed up.
3464 /* If your system configuration files define SIGNALS_VIA_CHARACTERS,
3465 you'd better be using one of the alternatives above! */
3466#endif /* ! defined (TCGETA) */
3467#endif /* ! defined (TIOCGLTC) && defined (TIOCGETC) */
6be429b1 3468#endif /* ! defined HAVE_TERMIOS */
b0310da4 3469#endif /* ! defined (SIGNALS_VIA_CHARACTERS) */
d0d6b7c5 3470
301c3fe4 3471#ifdef TIOCGPGRP
d0d6b7c5
JB
3472 /* Get the pgrp using the tty itself, if we have that.
3473 Otherwise, use the pty to get the pgrp.
3474 On pfa systems, saka@pfu.fujitsu.co.JP writes:
b0310da4
JB
3475 "TIOCGPGRP symbol defined in sys/ioctl.h at E50.
3476 But, TIOCGPGRP does not work on E50 ;-P works fine on E60"
d0d6b7c5
JB
3477 His patch indicates that if TIOCGPGRP returns an error, then
3478 we should just assume that p->pid is also the process group id. */
3479 {
3480 int err;
3481
3482 if (!NILP (p->subtty))
3483 err = ioctl (XFASTINT (p->subtty), TIOCGPGRP, &gid);
3484 else
a9f2c884 3485 err = ioctl (XINT (p->infd), TIOCGPGRP, &gid);
d0d6b7c5
JB
3486
3487#ifdef pfa
3488 if (err == -1)
3489 gid = - XFASTINT (p->pid);
301c3fe4 3490#endif /* ! defined (pfa) */
d0d6b7c5
JB
3491 }
3492 if (gid == -1)
3493 no_pgrp = 1;
3494 else
3495 gid = - gid;
b0310da4 3496#else /* ! defined (TIOCGPGRP ) */
301c3fe4
JB
3497 /* Can't select pgrps on this system, so we know that
3498 the child itself heads the pgrp. */
3499 gid = - XFASTINT (p->pid);
3500#endif /* ! defined (TIOCGPGRP ) */
d0d6b7c5
JB
3501 }
3502 else
3503 gid = - XFASTINT (p->pid);
d0d6b7c5
JB
3504
3505 switch (signo)
3506 {
3507#ifdef SIGCONT
3508 case SIGCONT:
3509 p->raw_status_low = Qnil;
3510 p->raw_status_high = Qnil;
3511 p->status = Qrun;
3512 XSETINT (p->tick, ++process_tick);
3513 if (!nomsg)
3514 status_notify ();
3515 break;
301c3fe4 3516#endif /* ! defined (SIGCONT) */
d0d6b7c5
JB
3517 case SIGINT:
3518#ifdef VMS
4556b700 3519 send_process (proc, "\003", 1, Qnil); /* ^C */
d0d6b7c5
JB
3520 goto whoosh;
3521#endif
3522 case SIGQUIT:
3523#ifdef VMS
4556b700 3524 send_process (proc, "\031", 1, Qnil); /* ^Y */
d0d6b7c5
JB
3525 goto whoosh;
3526#endif
3527 case SIGKILL:
3528#ifdef VMS
3529 sys$forcex (&(XFASTINT (p->pid)), 0, 1);
3530 whoosh:
3531#endif
a9f2c884 3532 flush_pending_output (XINT (p->infd));
d0d6b7c5
JB
3533 break;
3534 }
3535
3536 /* If we don't have process groups, send the signal to the immediate
3537 subprocess. That isn't really right, but it's better than any
3538 obvious alternative. */
3539 if (no_pgrp)
3540 {
3541 kill (XFASTINT (p->pid), signo);
3542 return;
3543 }
3544
3545 /* gid may be a pid, or minus a pgrp's number */
3546#ifdef TIOCSIGSEND
3547 if (!NILP (current_group))
a9f2c884 3548 ioctl (XINT (p->infd), TIOCSIGSEND, signo);
d0d6b7c5
JB
3549 else
3550 {
3551 gid = - XFASTINT (p->pid);
3552 kill (gid, signo);
3553 }
301c3fe4 3554#else /* ! defined (TIOCSIGSEND) */
d0d6b7c5 3555 EMACS_KILLPG (-gid, signo);
301c3fe4 3556#endif /* ! defined (TIOCSIGSEND) */
d0d6b7c5
JB
3557}
3558
3559DEFUN ("interrupt-process", Finterrupt_process, Sinterrupt_process, 0, 2, 0,
3560 "Interrupt process PROCESS. May be process or name of one.\n\
ebb9e16f 3561PROCESS may be a process, a buffer, or the name of a process or buffer.\n\
e333e864 3562nil or no arg means current buffer's process.\n\
d0d6b7c5
JB
3563Second arg CURRENT-GROUP non-nil means send signal to\n\
3564the current process-group of the process's controlling terminal\n\
3565rather than to the process's own process group.\n\
3566If the process is a shell, this means interrupt current subjob\n\
3567rather than the shell.")
3568 (process, current_group)
3569 Lisp_Object process, current_group;
3570{
3571 process_send_signal (process, SIGINT, current_group, 0);
3572 return process;
3573}
3574
3575DEFUN ("kill-process", Fkill_process, Skill_process, 0, 2, 0,
3576 "Kill process PROCESS. May be process or name of one.\n\
3577See function `interrupt-process' for more details on usage.")
3578 (process, current_group)
3579 Lisp_Object process, current_group;
3580{
3581 process_send_signal (process, SIGKILL, current_group, 0);
3582 return process;
3583}
3584
3585DEFUN ("quit-process", Fquit_process, Squit_process, 0, 2, 0,
3586 "Send QUIT signal to process PROCESS. May be process or name of one.\n\
3587See function `interrupt-process' for more details on usage.")
3588 (process, current_group)
3589 Lisp_Object process, current_group;
3590{
3591 process_send_signal (process, SIGQUIT, current_group, 0);
3592 return process;
3593}
3594
3595DEFUN ("stop-process", Fstop_process, Sstop_process, 0, 2, 0,
3596 "Stop process PROCESS. May be process or name of one.\n\
3597See function `interrupt-process' for more details on usage.")
3598 (process, current_group)
3599 Lisp_Object process, current_group;
3600{
3601#ifndef SIGTSTP
3602 error ("no SIGTSTP support");
3603#else
3604 process_send_signal (process, SIGTSTP, current_group, 0);
3605#endif
3606 return process;
3607}
3608
3609DEFUN ("continue-process", Fcontinue_process, Scontinue_process, 0, 2, 0,
3610 "Continue process PROCESS. May be process or name of one.\n\
3611See function `interrupt-process' for more details on usage.")
3612 (process, current_group)
3613 Lisp_Object process, current_group;
3614{
3615#ifdef SIGCONT
3616 process_send_signal (process, SIGCONT, current_group, 0);
3617#else
3618 error ("no SIGCONT support");
3619#endif
3620 return process;
3621}
3622
3623DEFUN ("signal-process", Fsignal_process, Ssignal_process,
3624 2, 2, "nProcess number: \nnSignal code: ",
4766242d
RS
3625 "Send the process with process id PID the signal with code SIGCODE.\n\
3626PID must be an integer. The process need not be a child of this Emacs.\n\
3627SIGCODE may be an integer, or a symbol whose name is a signal name.")
3628 (pid, sigcode)
3629 Lisp_Object pid, sigcode;
d0d6b7c5
JB
3630{
3631 CHECK_NUMBER (pid, 0);
4766242d
RS
3632
3633#define handle_signal(NAME, VALUE) \
3634 else if (!strcmp (name, NAME)) \
3635 XSETINT (sigcode, VALUE)
3636
3637 if (INTEGERP (sigcode))
3638 ;
3639 else
3640 {
3641 unsigned char *name;
3642
3643 CHECK_SYMBOL (sigcode, 1);
3644 name = XSYMBOL (sigcode)->name->data;
3645
3646 if (0)
3647 ;
3648#ifdef SIGHUP
3649 handle_signal ("SIGHUP", SIGHUP);
3650#endif
3651#ifdef SIGINT
3652 handle_signal ("SIGINT", SIGINT);
3653#endif
3654#ifdef SIGQUIT
3655 handle_signal ("SIGQUIT", SIGQUIT);
3656#endif
3657#ifdef SIGILL
3658 handle_signal ("SIGILL", SIGILL);
3659#endif
3660#ifdef SIGABRT
3661 handle_signal ("SIGABRT", SIGABRT);
3662#endif
3663#ifdef SIGEMT
3664 handle_signal ("SIGEMT", SIGEMT);
3665#endif
3666#ifdef SIGKILL
3667 handle_signal ("SIGKILL", SIGKILL);
3668#endif
3669#ifdef SIGFPE
3670 handle_signal ("SIGFPE", SIGFPE);
3671#endif
3672#ifdef SIGBUS
3673 handle_signal ("SIGBUS", SIGBUS);
3674#endif
3675#ifdef SIGSEGV
3676 handle_signal ("SIGSEGV", SIGSEGV);
3677#endif
3678#ifdef SIGSYS
3679 handle_signal ("SIGSYS", SIGSYS);
3680#endif
3681#ifdef SIGPIPE
3682 handle_signal ("SIGPIPE", SIGPIPE);
3683#endif
3684#ifdef SIGALRM
3685 handle_signal ("SIGALRM", SIGALRM);
3686#endif
3687#ifdef SIGTERM
3688 handle_signal ("SIGTERM", SIGTERM);
3689#endif
3690#ifdef SIGURG
3691 handle_signal ("SIGURG", SIGURG);
3692#endif
3693#ifdef SIGSTOP
3694 handle_signal ("SIGSTOP", SIGSTOP);
3695#endif
3696#ifdef SIGTSTP
3697 handle_signal ("SIGTSTP", SIGTSTP);
3698#endif
3699#ifdef SIGCONT
3700 handle_signal ("SIGCONT", SIGCONT);
3701#endif
3702#ifdef SIGCHLD
3703 handle_signal ("SIGCHLD", SIGCHLD);
3704#endif
3705#ifdef SIGTTIN
3706 handle_signal ("SIGTTIN", SIGTTIN);
3707#endif
3708#ifdef SIGTTOU
3709 handle_signal ("SIGTTOU", SIGTTOU);
3710#endif
3711#ifdef SIGIO
3712 handle_signal ("SIGIO", SIGIO);
3713#endif
3714#ifdef SIGXCPU
3715 handle_signal ("SIGXCPU", SIGXCPU);
3716#endif
3717#ifdef SIGXFSZ
3718 handle_signal ("SIGXFSZ", SIGXFSZ);
3719#endif
3720#ifdef SIGVTALRM
3721 handle_signal ("SIGVTALRM", SIGVTALRM);
3722#endif
3723#ifdef SIGPROF
3724 handle_signal ("SIGPROF", SIGPROF);
3725#endif
3726#ifdef SIGWINCH
3727 handle_signal ("SIGWINCH", SIGWINCH);
3728#endif
3729#ifdef SIGINFO
3730 handle_signal ("SIGINFO", SIGINFO);
3731#endif
3732#ifdef SIGUSR1
3733 handle_signal ("SIGUSR1", SIGUSR1);
3734#endif
3735#ifdef SIGUSR2
3736 handle_signal ("SIGUSR2", SIGUSR2);
3737#endif
3738 else
9fa195a2 3739 error ("Undefined signal name %s", name);
4766242d
RS
3740 }
3741
3742#undef handle_signal
3743
4766242d 3744 return make_number (kill (XINT (pid), XINT (sigcode)));
d0d6b7c5
JB
3745}
3746
3747DEFUN ("process-send-eof", Fprocess_send_eof, Sprocess_send_eof, 0, 1, 0,
3748 "Make PROCESS see end-of-file in its input.\n\
3749Eof comes after any text already sent to it.\n\
ebb9e16f 3750PROCESS may be a process, a buffer, the name of a process or buffer, or\n\
d33a00f2
RS
3751nil, indicating the current buffer's process.\n\
3752If PROCESS is a network connection, or is a process communicating\n\
3753through a pipe (as opposed to a pty), then you cannot send any more\n\
3754text to PROCESS after you call this function.")
d0d6b7c5
JB
3755 (process)
3756 Lisp_Object process;
3757{
3758 Lisp_Object proc;
3759
3760 proc = get_process (process);
577d03d5
RS
3761
3762 /* Make sure the process is really alive. */
3763 if (! NILP (XPROCESS (proc)->raw_status_low))
3764 update_status (XPROCESS (proc));
3765 if (! EQ (XPROCESS (proc)->status, Qrun))
dcf970e6 3766 error ("Process %s not running", XSTRING (XPROCESS (proc)->name)->data);
577d03d5 3767
d0d6b7c5 3768#ifdef VMS
4556b700 3769 send_process (proc, "\032", 1, Qnil); /* ^z */
d0d6b7c5
JB
3770#else
3771 if (!NILP (XPROCESS (proc)->pty_flag))
4556b700 3772 send_process (proc, "\004", 1, Qnil);
d0d6b7c5
JB
3773 else
3774 {
93853f3d 3775#ifdef HAVE_SHUTDOWN
02f55c4b
RS
3776 /* If this is a network connection, or socketpair is used
3777 for communication with the subprocess, call shutdown to cause EOF.
3778 (In some old system, shutdown to socketpair doesn't work.
3779 Then we just can't win.) */
3780 if (NILP (XPROCESS (proc)->pid)
3781 || XINT (XPROCESS (proc)->outfd) == XINT (XPROCESS (proc)->infd))
3782 shutdown (XINT (XPROCESS (proc)->outfd), 1);
3783 /* In case of socketpair, outfd == infd, so don't close it. */
3784 if (XINT (XPROCESS (proc)->outfd) != XINT (XPROCESS (proc)->infd))
3785 close (XINT (XPROCESS (proc)->outfd));
93853f3d
RS
3786#else /* not HAVE_SHUTDOWN */
3787 close (XINT (XPROCESS (proc)->outfd));
3788#endif /* not HAVE_SHUTDOWN */
1d056e64 3789 XSETINT (XPROCESS (proc)->outfd, open (NULL_DEVICE, O_WRONLY));
d0d6b7c5
JB
3790 }
3791#endif /* VMS */
d0d6b7c5
JB
3792 return process;
3793}
3794
3795/* Kill all processes associated with `buffer'.
3796 If `buffer' is nil, kill all processes */
3797
6b53bb85 3798void
d0d6b7c5
JB
3799kill_buffer_processes (buffer)
3800 Lisp_Object buffer;
3801{
3802 Lisp_Object tail, proc;
3803
b5b502d6 3804 for (tail = Vprocess_alist; GC_CONSP (tail); tail = XCONS (tail)->cdr)
d0d6b7c5
JB
3805 {
3806 proc = XCONS (XCONS (tail)->car)->cdr;
b5b502d6 3807 if (GC_PROCESSP (proc)
d0d6b7c5
JB
3808 && (NILP (buffer) || EQ (XPROCESS (proc)->buffer, buffer)))
3809 {
3810 if (NETCONN_P (proc))
e1ab4959 3811 Fdelete_process (proc);
a9f2c884 3812 else if (XINT (XPROCESS (proc)->infd) >= 0)
d0d6b7c5
JB
3813 process_send_signal (proc, SIGHUP, Qnil, 1);
3814 }
3815 }
3816}
3817\f
3818/* On receipt of a signal that a child status has changed,
3819 loop asking about children with changed statuses until
3820 the system says there are no more.
3821 All we do is change the status;
3822 we do not run sentinels or print notifications.
3823 That is saved for the next time keyboard input is done,
3824 in order to avoid timing errors. */
3825
3826/** WARNING: this can be called during garbage collection.
3827 Therefore, it must not be fooled by the presence of mark bits in
3828 Lisp objects. */
3829
3830/** USG WARNING: Although it is not obvious from the documentation
3831 in signal(2), on a USG system the SIGCLD handler MUST NOT call
3832 signal() before executing at least one wait(), otherwise the handler
3833 will be called again, resulting in an infinite loop. The relevant
3834 portion of the documentation reads "SIGCLD signals will be queued
3835 and the signal-catching function will be continually reentered until
3836 the queue is empty". Invoking signal() causes the kernel to reexamine
3837 the SIGCLD queue. Fred Fish, UniSoft Systems Inc. */
3838
3839SIGTYPE
3840sigchld_handler (signo)
3841 int signo;
3842{
3843 int old_errno = errno;
3844 Lisp_Object proc;
3845 register struct Lisp_Process *p;
6be429b1 3846 extern EMACS_TIME *input_available_clear_time;
d0d6b7c5
JB
3847
3848#ifdef BSD4_1
3849 extern int sigheld;
3850 sigheld |= sigbit (SIGCHLD);
3851#endif
3852
3853 while (1)
3854 {
3855 register int pid;
3856 WAITTYPE w;
3857 Lisp_Object tail;
3858
3859#ifdef WNOHANG
3860#ifndef WUNTRACED
3861#define WUNTRACED 0
3862#endif /* no WUNTRACED */
3863 /* Keep trying to get a status until we get a definitive result. */
3864 do
3865 {
3866 errno = 0;
3867 pid = wait3 (&w, WNOHANG | WUNTRACED, 0);
3868 }
3869 while (pid <= 0 && errno == EINTR);
3870
3871 if (pid <= 0)
3872 {
3873 /* A real failure. We have done all our job, so return. */
3874
3875 /* USG systems forget handlers when they are used;
3876 must reestablish each time */
3c0ee47b 3877#if defined (USG) && !defined (POSIX_SIGNALS)
d0d6b7c5
JB
3878 signal (signo, sigchld_handler); /* WARNING - must come after wait3() */
3879#endif
3880#ifdef BSD4_1
3881 sigheld &= ~sigbit (SIGCHLD);
3882 sigrelse (SIGCHLD);
3883#endif
3884 errno = old_errno;
3885 return;
3886 }
3887#else
3888 pid = wait (&w);
3889#endif /* no WNOHANG */
3890
3891 /* Find the process that signaled us, and record its status. */
3892
3893 p = 0;
7968cc2d 3894 for (tail = Vprocess_alist; CONSP (tail); tail = XCONS (tail)->cdr)
d0d6b7c5
JB
3895 {
3896 proc = XCONS (XCONS (tail)->car)->cdr;
3897 p = XPROCESS (proc);
3898 if (EQ (p->childp, Qt) && XFASTINT (p->pid) == pid)
3899 break;
3900 p = 0;
3901 }
3902
3903 /* Look for an asynchronous process whose pid hasn't been filled
3904 in yet. */
3905 if (p == 0)
7968cc2d 3906 for (tail = Vprocess_alist; CONSP (tail); tail = XCONS (tail)->cdr)
d0d6b7c5
JB
3907 {
3908 proc = XCONS (XCONS (tail)->car)->cdr;
3909 p = XPROCESS (proc);
bcd69aea 3910 if (INTEGERP (p->pid) && XINT (p->pid) == -1)
d0d6b7c5
JB
3911 break;
3912 p = 0;
3913 }
3914
3915 /* Change the status of the process that was found. */
3916 if (p != 0)
3917 {
3918 union { int i; WAITTYPE wt; } u;
e98d950b 3919 int clear_desc_flag = 0;
d0d6b7c5
JB
3920
3921 XSETINT (p->tick, ++process_tick);
3922 u.wt = w;
5fc0154c
RS
3923 XSETINT (p->raw_status_low, u.i & 0xffff);
3924 XSETINT (p->raw_status_high, u.i >> 16);
d0d6b7c5
JB
3925
3926 /* If process has terminated, stop waiting for its output. */
e98d950b
RS
3927 if ((WIFSIGNALED (w) || WIFEXITED (w))
3928 && XINT (p->infd) >= 0)
3929 clear_desc_flag = 1;
3930
3931 /* We use clear_desc_flag to avoid a compiler bug in Microsoft C. */
3932 if (clear_desc_flag)
3933 {
3934 FD_CLR (XINT (p->infd), &input_wait_mask);
3935 FD_CLR (XINT (p->infd), &non_keyboard_wait_mask);
3936 }
6be429b1
JB
3937
3938 /* Tell wait_reading_process_input that it needs to wake up and
3939 look around. */
3940 if (input_available_clear_time)
3941 EMACS_SET_SECS_USECS (*input_available_clear_time, 0, 0);
d0d6b7c5
JB
3942 }
3943
3944 /* There was no asynchronous process found for that id. Check
3945 if we have a synchronous process. */
3946 else
3947 {
3948 synch_process_alive = 0;
3949
3950 /* Report the status of the synchronous process. */
3951 if (WIFEXITED (w))
3952 synch_process_retcode = WRETCODE (w);
3953 else if (WIFSIGNALED (w))
b97ad9ea
RS
3954 {
3955 int code = WTERMSIG (w);
3956 char *signame = 0;
3957
3958 if (code < NSIG)
3959 {
b0310da4 3960#ifndef VMS
ed0cae05
RS
3961 /* Suppress warning if the table has const char *. */
3962 signame = (char *) sys_siglist[code];
b0310da4 3963#else
b97ad9ea 3964 signame = sys_errlist[code];
b0310da4 3965#endif
b97ad9ea
RS
3966 }
3967 if (signame == 0)
3968 signame = "unknown";
3969
3970 synch_process_death = signame;
3971 }
6be429b1
JB
3972
3973 /* Tell wait_reading_process_input that it needs to wake up and
3974 look around. */
3975 if (input_available_clear_time)
3976 EMACS_SET_SECS_USECS (*input_available_clear_time, 0, 0);
d0d6b7c5
JB
3977 }
3978
3979 /* On some systems, we must return right away.
3980 If any more processes want to signal us, we will
3981 get another signal.
3982 Otherwise (on systems that have WNOHANG), loop around
3983 to use up all the processes that have something to tell us. */
e98d950b 3984#if defined (USG) && ! (defined (HPUX) && defined (WNOHANG)) || defined (WINDOWSNT)
3c0ee47b 3985#if defined (USG) && ! defined (POSIX_SIGNALS)
d0d6b7c5
JB
3986 signal (signo, sigchld_handler);
3987#endif
3988 errno = old_errno;
3989 return;
3990#endif /* USG, but not HPUX with WNOHANG */
3991 }
3992}
3993\f
3994
3995static Lisp_Object
3996exec_sentinel_unwind (data)
3997 Lisp_Object data;
3998{
3999 XPROCESS (XCONS (data)->car)->sentinel = XCONS (data)->cdr;
4000 return Qnil;
4001}
4002
3b9a3dfa
RS
4003static Lisp_Object
4004exec_sentinel_error_handler (error)
4005 Lisp_Object error;
4006{
4007 cmd_error_internal (error, "error in process sentinel: ");
4008 Vinhibit_quit = Qt;
4009 update_echo_area ();
833ba342 4010 Fsleep_for (make_number (2), Qnil);
3b9a3dfa
RS
4011}
4012
d0d6b7c5
JB
4013static void
4014exec_sentinel (proc, reason)
4015 Lisp_Object proc, reason;
4016{
dfc21838 4017 Lisp_Object sentinel, obuffer, odeactivate, okeymap;
d0d6b7c5
JB
4018 register struct Lisp_Process *p = XPROCESS (proc);
4019 int count = specpdl_ptr - specpdl;
4da2f5be 4020 int outer_running_asynch_code = running_asynch_code;
d0d6b7c5 4021
dfc21838
RS
4022 /* No need to gcpro these, because all we do with them later
4023 is test them for EQness, and none of them should be a string. */
8fb3cf64 4024 odeactivate = Vdeactivate_mark;
dfc21838
RS
4025 XSETBUFFER (obuffer, current_buffer);
4026 okeymap = current_buffer->keymap;
4027
d0d6b7c5
JB
4028 sentinel = p->sentinel;
4029 if (NILP (sentinel))
4030 return;
4031
4032 /* Zilch the sentinel while it's running, to avoid recursive invocations;
4033 assure that it gets restored no matter how the sentinel exits. */
4034 p->sentinel = Qnil;
4035 record_unwind_protect (exec_sentinel_unwind, Fcons (proc, sentinel));
4036 /* Inhibit quit so that random quits don't screw up a running filter. */
4037 specbind (Qinhibit_quit, Qt);
6545aada 4038 specbind (Qlast_nonmenu_event, Qt);
3b9a3dfa 4039
4da2f5be
RS
4040 /* In case we get recursively called,
4041 and we already saved the match data nonrecursively,
4042 save the same match data in safely recursive fashion. */
4043 if (outer_running_asynch_code)
4044 {
4045 Lisp_Object tem;
dd130227 4046 tem = Fmatch_data (Qnil, Qnil);
4da2f5be 4047 restore_match_data ();
8f1ecd05
RS
4048 record_unwind_protect (Fset_match_data, Fmatch_data (Qnil, Qnil));
4049 Fset_match_data (tem);
4da2f5be
RS
4050 }
4051
4052 /* For speed, if a search happens within this code,
4053 save the match data in a special nonrecursive fashion. */
7074fde6 4054 running_asynch_code = 1;
4da2f5be 4055
3b9a3dfa
RS
4056 internal_condition_case_1 (read_process_output_call,
4057 Fcons (sentinel,
4058 Fcons (proc, Fcons (reason, Qnil))),
4059 !NILP (Vdebug_on_error) ? Qnil : Qerror,
4060 exec_sentinel_error_handler);
4da2f5be
RS
4061
4062 /* If we saved the match data nonrecursively, restore it now. */
7074fde6 4063 restore_match_data ();
4da2f5be 4064 running_asynch_code = outer_running_asynch_code;
8fb3cf64
KH
4065
4066 Vdeactivate_mark = odeactivate;
7973cfa8 4067#if 0
dfc21838
RS
4068 if (! EQ (Fcurrent_buffer (), obuffer)
4069 || ! EQ (current_buffer->keymap, okeymap))
7973cfa8 4070#endif
927e08be
RS
4071 /* But do it only if the caller is actually going to read events.
4072 Otherwise there's no need to make him wake up, and it could
4073 cause trouble (for example it would make Fsit_for return). */
4074 if (waiting_for_user_input_p == -1)
4075 record_asynch_buffer_change ();
8fb3cf64 4076
2ea6d561 4077 unbind_to (count, Qnil);
d0d6b7c5
JB
4078}
4079
4080/* Report all recent events of a change in process status
4081 (either run the sentinel or output a message).
4082 This is done while Emacs is waiting for keyboard input. */
4083
6b53bb85 4084void
d0d6b7c5
JB
4085status_notify ()
4086{
4087 register Lisp_Object proc, buffer;
2e4149a8 4088 Lisp_Object tail, msg;
d0d6b7c5
JB
4089 struct gcpro gcpro1, gcpro2;
4090
2e4149a8
KH
4091 tail = Qnil;
4092 msg = Qnil;
d0d6b7c5
JB
4093 /* We need to gcpro tail; if read_process_output calls a filter
4094 which deletes a process and removes the cons to which tail points
4095 from Vprocess_alist, and then causes a GC, tail is an unprotected
4096 reference. */
4097 GCPRO2 (tail, msg);
4098
30623085
RS
4099 /* Set this now, so that if new processes are created by sentinels
4100 that we run, we get called again to handle their status changes. */
4101 update_tick = process_tick;
4102
4103 for (tail = Vprocess_alist; !NILP (tail); tail = Fcdr (tail))
d0d6b7c5 4104 {
30623085
RS
4105 Lisp_Object symbol;
4106 register struct Lisp_Process *p;
4107
4108 proc = Fcdr (Fcar (tail));
4109 p = XPROCESS (proc);
4110
4111 if (XINT (p->tick) != XINT (p->update_tick))
d0d6b7c5 4112 {
30623085 4113 XSETINT (p->update_tick, XINT (p->tick));
d0d6b7c5 4114
30623085 4115 /* If process is still active, read any output that remains. */
4da2f5be
RS
4116 while (! EQ (p->filter, Qt)
4117 && XINT (p->infd) >= 0
4118 && read_process_output (proc, XINT (p->infd)) > 0);
d0d6b7c5 4119
30623085 4120 buffer = p->buffer;
d0d6b7c5 4121
30623085
RS
4122 /* Get the text to use for the message. */
4123 if (!NILP (p->raw_status_low))
4124 update_status (p);
4125 msg = status_message (p->status);
d0d6b7c5 4126
30623085
RS
4127 /* If process is terminated, deactivate it or delete it. */
4128 symbol = p->status;
4129 if (CONSP (p->status))
4130 symbol = XCONS (p->status)->car;
d0d6b7c5 4131
30623085
RS
4132 if (EQ (symbol, Qsignal) || EQ (symbol, Qexit)
4133 || EQ (symbol, Qclosed))
4134 {
4135 if (delete_exited_processes)
4136 remove_process (proc);
4137 else
4138 deactivate_process (proc);
4139 }
d0d6b7c5 4140
0ad61fe7
RS
4141 /* The actions above may have further incremented p->tick.
4142 So set p->update_tick again
4143 so that an error in the sentinel will not cause
4144 this code to be run again. */
4145 XSETINT (p->update_tick, XINT (p->tick));
30623085
RS
4146 /* Now output the message suitably. */
4147 if (!NILP (p->sentinel))
4148 exec_sentinel (proc, msg);
4149 /* Don't bother with a message in the buffer
4150 when a process becomes runnable. */
4151 else if (!EQ (symbol, Qrun) && !NILP (buffer))
4152 {
4153 Lisp_Object ro, tem;
4154 struct buffer *old = current_buffer;
d8a2934e
RS
4155 int opoint, opoint_byte;
4156 int before, before_byte;
2e4149a8 4157
30623085 4158 ro = XBUFFER (buffer)->read_only;
d0d6b7c5 4159
30623085
RS
4160 /* Avoid error if buffer is deleted
4161 (probably that's why the process is dead, too) */
4162 if (NILP (XBUFFER (buffer)->name))
4163 continue;
4164 Fset_buffer (buffer);
12ca5cdf 4165
6ec8bbd2 4166 opoint = PT;
d8a2934e 4167 opoint_byte = PT_BYTE;
30623085
RS
4168 /* Insert new output into buffer
4169 at the current end-of-output marker,
4170 thus preserving logical ordering of input and output. */
4171 if (XMARKER (p->mark)->buffer)
d8a2934e 4172 Fgoto_char (p->mark);
30623085 4173 else
d8a2934e 4174 SET_PT_BOTH (ZV, ZV_BYTE);
12ca5cdf
RS
4175
4176 before = PT;
d8a2934e 4177 before_byte = PT_BYTE;
30623085
RS
4178
4179 tem = current_buffer->read_only;
4180 current_buffer->read_only = Qnil;
4181 insert_string ("\nProcess ");
4182 Finsert (1, &p->name);
4183 insert_string (" ");
4184 Finsert (1, &msg);
4185 current_buffer->read_only = tem;
d8a2934e 4186 set_marker_both (p->mark, p->buffer, PT, PT_BYTE);
30623085 4187
12ca5cdf 4188 if (opoint >= before)
d8a2934e
RS
4189 SET_PT_BOTH (opoint + (PT - before),
4190 opoint_byte + (PT_BYTE - before_byte));
12ca5cdf 4191 else
d8a2934e 4192 SET_PT_BOTH (opoint, opoint_byte);
12ca5cdf 4193
30623085 4194 set_buffer_internal (old);
d0d6b7c5 4195 }
30623085
RS
4196 }
4197 } /* end for */
d0d6b7c5
JB
4198
4199 update_mode_lines++; /* in case buffers use %s in mode-line-format */
4200 redisplay_preserve_echo_area ();
4201
d0d6b7c5
JB
4202 UNGCPRO;
4203}
0fa1789e
KH
4204
4205\f
4206DEFUN ("set-process-coding-system", Fset_process_coding_system,
4207 Sset_process_coding_system, 1, 3, 0,
a95c35f6 4208 "Set coding systems of PROCESS to DECODING (input from the process) and\n\
0fa1789e
KH
4209ENCODING (output to the process).")
4210 (proc, decoding, encoding)
4211 register Lisp_Object proc, decoding, encoding;
4212{
4213 register struct Lisp_Process *p;
4214
4215 CHECK_PROCESS (proc, 0);
4216 p = XPROCESS (proc);
4217 if (XINT (p->infd) < 0)
4218 error ("Input file descriptor of %s closed", XSTRING (p->name)->data);
4219 if (XINT (p->outfd) < 0)
4220 error ("Output file descriptor of %s closed", XSTRING (p->name)->data);
4221
4222 p->decode_coding_system = Fcheck_coding_system (decoding);
4223 p->encode_coding_system = Fcheck_coding_system (encoding);
4224 setup_coding_system (decoding,
c7580538 4225 proc_decode_coding_system[XINT (p->infd)]);
0fa1789e 4226 setup_coding_system (encoding,
c7580538 4227 proc_encode_coding_system[XINT (p->outfd)]);
0fa1789e
KH
4228
4229 return Qnil;
4230}
4231
4232DEFUN ("process-coding-system",
4233 Fprocess_coding_system, Sprocess_coding_system, 1, 1, 0,
a95c35f6 4234 "Return a cons of coding systems for decoding and encoding of PROCESS.")
0fa1789e
KH
4235 (proc)
4236 register Lisp_Object proc;
4237{
4238 CHECK_PROCESS (proc, 0);
4239 return Fcons (XPROCESS (proc)->decode_coding_system,
4240 XPROCESS (proc)->encode_coding_system);
4241}
d0d6b7c5 4242\f
a69281ff
RS
4243/* The first time this is called, assume keyboard input comes from DESC
4244 instead of from where we used to expect it.
4245 Subsequent calls mean assume input keyboard can come from DESC
4246 in addition to other places. */
4247
4248static int add_keyboard_wait_descriptor_called_flag;
4249
4250void
4251add_keyboard_wait_descriptor (desc)
4252 int desc;
4253{
4254 if (! add_keyboard_wait_descriptor_called_flag)
4255 FD_CLR (0, &input_wait_mask);
4256 add_keyboard_wait_descriptor_called_flag = 1;
4257 FD_SET (desc, &input_wait_mask);
b5dc1c83 4258 FD_SET (desc, &non_process_wait_mask);
a69281ff
RS
4259 if (desc > max_keyboard_desc)
4260 max_keyboard_desc = desc;
4261}
4262
4263/* From now on, do not expect DESC to give keyboard input. */
4264
4265void
4266delete_keyboard_wait_descriptor (desc)
4267 int desc;
4268{
4269 int fd;
4270 int lim = max_keyboard_desc;
4271
4272 FD_CLR (desc, &input_wait_mask);
b5dc1c83 4273 FD_CLR (desc, &non_process_wait_mask);
a69281ff
RS
4274
4275 if (desc == max_keyboard_desc)
4276 for (fd = 0; fd < lim; fd++)
4277 if (FD_ISSET (fd, &input_wait_mask)
4278 && !FD_ISSET (fd, &non_keyboard_wait_mask))
4279 max_keyboard_desc = fd;
4280}
4281
4282/* Return nonzero if *MASK has a bit set
4283 that corresponds to one of the keyboard input descriptors. */
4284
4285int
4286keyboard_bit_set (mask)
4287 SELECT_TYPE *mask;
4288{
4289 int fd;
4290
ee8e09af 4291 for (fd = 0; fd <= max_keyboard_desc; fd++)
a69281ff
RS
4292 if (FD_ISSET (fd, mask) && FD_ISSET (fd, &input_wait_mask)
4293 && !FD_ISSET (fd, &non_keyboard_wait_mask))
4294 return 1;
4295
4296 return 0;
4297}
4298\f
dfcf069d 4299void
d0d6b7c5
JB
4300init_process ()
4301{
4302 register int i;
4303
4304#ifdef SIGCHLD
4305#ifndef CANNOT_DUMP
4306 if (! noninteractive || initialized)
4307#endif
4308 signal (SIGCHLD, sigchld_handler);
4309#endif
4310
4311 FD_ZERO (&input_wait_mask);
a69281ff 4312 FD_ZERO (&non_keyboard_wait_mask);
b5dc1c83 4313 FD_ZERO (&non_process_wait_mask);
7d0e672e 4314 max_process_desc = 0;
dd2281ae 4315
a69281ff 4316 FD_SET (0, &input_wait_mask);
dd2281ae 4317
d0d6b7c5
JB
4318 Vprocess_alist = Qnil;
4319 for (i = 0; i < MAXDESC; i++)
4320 {
4321 chan_process[i] = Qnil;
4322 proc_buffered_char[i] = -1;
4323 }
c7580538
KH
4324 bzero (proc_decode_coding_system, sizeof proc_decode_coding_system);
4325 bzero (proc_encode_coding_system, sizeof proc_encode_coding_system);
d0d6b7c5 4326}
312c9964 4327
dfcf069d 4328void
d0d6b7c5
JB
4329syms_of_process ()
4330{
d0d6b7c5
JB
4331 Qprocessp = intern ("processp");
4332 staticpro (&Qprocessp);
4333 Qrun = intern ("run");
4334 staticpro (&Qrun);
4335 Qstop = intern ("stop");
4336 staticpro (&Qstop);
4337 Qsignal = intern ("signal");
4338 staticpro (&Qsignal);
4339
4340 /* Qexit is already staticpro'd by syms_of_eval; don't staticpro it
4341 here again.
4342
4343 Qexit = intern ("exit");
4344 staticpro (&Qexit); */
4345
4346 Qopen = intern ("open");
4347 staticpro (&Qopen);
4348 Qclosed = intern ("closed");
4349 staticpro (&Qclosed);
4350
6545aada
RS
4351 Qlast_nonmenu_event = intern ("last-nonmenu-event");
4352 staticpro (&Qlast_nonmenu_event);
4353
d0d6b7c5
JB
4354 staticpro (&Vprocess_alist);
4355
4356 DEFVAR_BOOL ("delete-exited-processes", &delete_exited_processes,
4357 "*Non-nil means delete processes immediately when they exit.\n\
4358nil means don't delete them until `list-processes' is run.");
4359
4360 delete_exited_processes = 1;
4361
4362 DEFVAR_LISP ("process-connection-type", &Vprocess_connection_type,
4363 "Control type of device used to communicate with subprocesses.\n\
e333e864
RS
4364Values are nil to use a pipe, or t or `pty' to use a pty.\n\
4365The value has no effect if the system has no ptys or if all ptys are busy:\n\
4366then a pipe is used in any case.\n\
4367The value takes effect when `start-process' is called.");
d0d6b7c5
JB
4368 Vprocess_connection_type = Qt;
4369
4370 defsubr (&Sprocessp);
4371 defsubr (&Sget_process);
4372 defsubr (&Sget_buffer_process);
4373 defsubr (&Sdelete_process);
4374 defsubr (&Sprocess_status);
4375 defsubr (&Sprocess_exit_status);
4376 defsubr (&Sprocess_id);
4377 defsubr (&Sprocess_name);
3b9a3dfa 4378 defsubr (&Sprocess_tty_name);
d0d6b7c5
JB
4379 defsubr (&Sprocess_command);
4380 defsubr (&Sset_process_buffer);
4381 defsubr (&Sprocess_buffer);
4382 defsubr (&Sprocess_mark);
4383 defsubr (&Sset_process_filter);
4384 defsubr (&Sprocess_filter);
4385 defsubr (&Sset_process_sentinel);
4386 defsubr (&Sprocess_sentinel);
de282a05 4387 defsubr (&Sset_process_window_size);
d0d6b7c5 4388 defsubr (&Sprocess_kill_without_query);
de282a05 4389 defsubr (&Sprocess_contact);
d0d6b7c5
JB
4390 defsubr (&Slist_processes);
4391 defsubr (&Sprocess_list);
4392 defsubr (&Sstart_process);
4393#ifdef HAVE_SOCKETS
4394 defsubr (&Sopen_network_stream);
4395#endif /* HAVE_SOCKETS */
4396 defsubr (&Saccept_process_output);
4397 defsubr (&Sprocess_send_region);
4398 defsubr (&Sprocess_send_string);
4399 defsubr (&Sinterrupt_process);
4400 defsubr (&Skill_process);
4401 defsubr (&Squit_process);
4402 defsubr (&Sstop_process);
4403 defsubr (&Scontinue_process);
4404 defsubr (&Sprocess_send_eof);
4405 defsubr (&Ssignal_process);
4406 defsubr (&Swaiting_for_user_input_p);
4407/* defsubr (&Sprocess_connection); */
0fa1789e
KH
4408 defsubr (&Sset_process_coding_system);
4409 defsubr (&Sprocess_coding_system);
d0d6b7c5
JB
4410}
4411
6720a7fb
JB
4412\f
4413#else /* not subprocesses */
4414
4415#include <sys/types.h>
4416#include <errno.h>
4417
4418#include "lisp.h"
4419#include "systime.h"
4420#include "termopts.h"
81afb6d1 4421#include "sysselect.h"
6720a7fb 4422
ff11dfa1 4423extern int frame_garbaged;
6720a7fb 4424
f694e5d2
KH
4425extern EMACS_TIME timer_check ();
4426extern int timers_run;
6720a7fb
JB
4427
4428/* As described above, except assuming that there are no subprocesses:
4429
4430 Wait for timeout to elapse and/or keyboard input to be available.
4431
4432 time_limit is:
4433 timeout in seconds, or
4434 zero for no limit, or
4435 -1 means gobble data immediately available but don't wait for any.
4436
f76475ad 4437 read_kbd is a Lisp_Object:
6720a7fb
JB
4438 0 to ignore keyboard input, or
4439 1 to return when input is available, or
4440 -1 means caller will actually read the input, so don't throw to
4441 the quit handler.
0a65b032
RS
4442 a cons cell, meaning wait until its car is non-nil
4443 (and gobble terminal input into the buffer if any arrives), or
6720a7fb
JB
4444 We know that read_kbd will never be a Lisp_Process, since
4445 `subprocesses' isn't defined.
4446
4447 do_display != 0 means redisplay should be done to show subprocess
5164ee8e 4448 output that arrives.
6720a7fb 4449
eb8c3be9 4450 Return true iff we received input from any process. */
6720a7fb
JB
4451
4452int
4453wait_reading_process_input (time_limit, microsecs, read_kbd, do_display)
f76475ad
JB
4454 int time_limit, microsecs;
4455 Lisp_Object read_kbd;
4456 int do_display;
6720a7fb 4457{
f694e5d2 4458 EMACS_TIME end_time, timeout;
8db121c4 4459 SELECT_TYPE waitchannels;
f694e5d2 4460 int xerrno;
0a65b032
RS
4461 Lisp_Object *wait_for_cell = 0;
4462
4463 /* If waiting for non-nil in a cell, record where. */
4464 if (CONSP (read_kbd))
4465 {
4466 wait_for_cell = &XCONS (read_kbd)->car;
4467 XSETFASTINT (read_kbd, 0);
4468 }
6720a7fb
JB
4469
4470 /* What does time_limit really mean? */
4471 if (time_limit || microsecs)
4472 {
6720a7fb
JB
4473 if (time_limit == -1)
4474 /* In fact, it's zero. */
4475 EMACS_SET_SECS_USECS (timeout, 0, 0);
4476 else
4477 EMACS_SET_SECS_USECS (timeout, time_limit, microsecs);
4478
4479 /* How far in the future is that? */
4480 EMACS_GET_TIME (end_time);
4481 EMACS_ADD_TIME (end_time, end_time, timeout);
4482 }
4483 else
4484 /* It's infinite. */
f694e5d2 4485 EMACS_SET_SECS_USECS (timeout, 100000, 0);
6720a7fb
JB
4486
4487 /* Turn off periodic alarms (in case they are in use)
4488 because the select emulator uses alarms. */
4489 stop_polling ();
4490
4491 for (;;)
4492 {
4493 int nfds;
bae8d137 4494 int timeout_reduced_for_timers = 0;
6720a7fb 4495
6720a7fb
JB
4496 /* If calling from keyboard input, do not quit
4497 since we want to return C-g as an input character.
4498 Otherwise, do pending quit if requested. */
f76475ad 4499 if (XINT (read_kbd) >= 0)
6720a7fb
JB
4500 QUIT;
4501
0a65b032
RS
4502 /* Exit now if the cell we're waiting for became non-nil. */
4503 if (wait_for_cell && ! NILP (*wait_for_cell))
4504 break;
4505
bae8d137
RS
4506 /* Compute time from now till when time limit is up */
4507 /* Exit if already run out */
f694e5d2 4508 if (time_limit > 0 || microsecs)
6720a7fb 4509 {
f694e5d2
KH
4510 EMACS_GET_TIME (timeout);
4511 EMACS_SUB_TIME (timeout, end_time, timeout);
4512 if (EMACS_TIME_NEG_P (timeout))
6720a7fb
JB
4513 break;
4514 }
4515
bae8d137
RS
4516 /* If our caller will not immediately handle keyboard events,
4517 run timer events directly.
4518 (Callers that will immediately read keyboard events
4519 call timer_delay on their own.) */
f854a00b 4520 if (! wait_for_cell)
bae8d137
RS
4521 {
4522 EMACS_TIME timer_delay;
0a65b032
RS
4523 int old_timers_run;
4524
4525 retry:
4526 old_timers_run = timers_run;
bae8d137
RS
4527 timer_delay = timer_check (1);
4528 if (timers_run != old_timers_run && do_display)
0a65b032
RS
4529 {
4530 redisplay_preserve_echo_area ();
4531 /* We must retry, since a timer may have requeued itself
4532 and that could alter the time delay. */
4533 goto retry;
4534 }
4535
f694e5d2 4536 if (! EMACS_TIME_NEG_P (timer_delay) && time_limit != -1)
bae8d137
RS
4537 {
4538 EMACS_TIME difference;
f694e5d2 4539 EMACS_SUB_TIME (difference, timer_delay, timeout);
bae8d137
RS
4540 if (EMACS_TIME_NEG_P (difference))
4541 {
f694e5d2 4542 timeout = timer_delay;
bae8d137
RS
4543 timeout_reduced_for_timers = 1;
4544 }
4545 }
4546 }
4547
6720a7fb
JB
4548 /* Cause C-g and alarm signals to take immediate action,
4549 and cause input available signals to zero out timeout. */
f76475ad 4550 if (XINT (read_kbd) < 0)
6720a7fb
JB
4551 set_waiting_for_input (&timeout);
4552
0a65b032
RS
4553 /* Wait till there is something to do. */
4554
4555 if (! XINT (read_kbd) && wait_for_cell == 0)
4556 FD_ZERO (&waitchannels);
4557 else
4558 FD_SET (0, &waitchannels);
4559
ff11dfa1 4560 /* If a frame has been newly mapped and needs updating,
6720a7fb 4561 reprocess its display stuff. */
5164ee8e 4562 if (frame_garbaged && do_display)
0a65b032
RS
4563 {
4564 clear_waiting_for_input ();
4565 redisplay_preserve_echo_area ();
4566 if (XINT (read_kbd) < 0)
4567 set_waiting_for_input (&timeout);
4568 }
6720a7fb 4569
1861b214
RS
4570 if (XINT (read_kbd) && detect_input_pending ())
4571 {
4572 nfds = 0;
4573 FD_ZERO (&waitchannels);
4574 }
4575 else
4576 nfds = select (1, &waitchannels, (SELECT_TYPE *)0, (SELECT_TYPE *)0,
4577 &timeout);
f694e5d2
KH
4578
4579 xerrno = errno;
6720a7fb
JB
4580
4581 /* Make C-g and alarm signals set flags again */
4582 clear_waiting_for_input ();
4583
4584 /* If we woke up due to SIGWINCH, actually change size now. */
4585 do_pending_window_change ();
4586
f694e5d2
KH
4587 if (time_limit && nfds == 0 && ! timeout_reduced_for_timers)
4588 /* We waited the full specified time, so return now. */
4589 break;
4590
6720a7fb
JB
4591 if (nfds == -1)
4592 {
4593 /* If the system call was interrupted, then go around the
4594 loop again. */
f694e5d2 4595 if (xerrno == EINTR)
8db121c4 4596 FD_ZERO (&waitchannels);
f694e5d2
KH
4597 else
4598 error ("select error: %s", strerror (xerrno));
6720a7fb
JB
4599 }
4600#ifdef sun
4601 else if (nfds > 0 && (waitchannels & 1) && interrupt_input)
4602 /* System sometimes fails to deliver SIGIO. */
4603 kill (getpid (), SIGIO);
4604#endif
7324d660 4605#ifdef SIGIO
f76475ad 4606 if (XINT (read_kbd) && interrupt_input && (waitchannels & 1))
e643c5be 4607 kill (getpid (), SIGIO);
7324d660 4608#endif
6720a7fb 4609
f694e5d2
KH
4610 /* Check for keyboard input */
4611
f854a00b 4612 if ((XINT (read_kbd) != 0)
f694e5d2
KH
4613 && detect_input_pending_run_timers (do_display))
4614 {
4615 swallow_events (do_display);
4616 if (detect_input_pending_run_timers (do_display))
4617 break;
4618 }
0a65b032 4619
f854a00b
RS
4620 /* If wait_for_cell. check for keyboard input
4621 but don't run any timers.
4622 ??? (It seems wrong to me to check for keyboard
4623 input at all when wait_for_cell, but the code
4624 has been this way since July 1994.
4625 Try changing this after version 19.31.) */
4626 if (wait_for_cell
4627 && detect_input_pending ())
4628 {
4629 swallow_events (do_display);
4630 if (detect_input_pending ())
4631 break;
4632 }
4633
0a65b032
RS
4634 /* Exit now if the cell we're waiting for became non-nil. */
4635 if (wait_for_cell && ! NILP (*wait_for_cell))
4636 break;
6720a7fb
JB
4637 }
4638
a87b802f
JB
4639 start_polling ();
4640
6720a7fb
JB
4641 return 0;
4642}
4643
4644
4645DEFUN ("get-buffer-process", Fget_buffer_process, Sget_buffer_process, 1, 1, 0,
51ab806a 4646 /* Don't confuse make-docfile by having two doc strings for this function.
312c9964
RS
4647 make-docfile does not pay attention to #if, for good reason! */
4648 0)
6720a7fb
JB
4649 (name)
4650 register Lisp_Object name;
4651{
4652 return Qnil;
4653}
4654
4655/* Kill all processes associated with `buffer'.
4656 If `buffer' is nil, kill all processes.
4657 Since we have no subprocesses, this does nothing. */
4658
d9bb0c32 4659void
6720a7fb
JB
4660kill_buffer_processes (buffer)
4661 Lisp_Object buffer;
4662{
4663}
4664
4665init_process ()
4666{
4667}
4668
4669syms_of_process ()
4670{
4671 defsubr (&Sget_buffer_process);
4672}
4673
4674\f
4675#endif /* not subprocesses */