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