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