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