1 /* Asynchronous subprocess control for XEmacs.
2 Copyright (C) 1985, 1986, 1987, 1988, 1992, 1993, 1994, 1995
3 Free Software Foundation, Inc.
4 Copyright (C) 1995 Sun Microsystems, Inc.
5 Copyright (C) 1995, 1996 Ben Wing.
7 This file is part of XEmacs.
9 XEmacs is free software; you can redistribute it and/or modify it
10 under the terms of the GNU General Public License as published by the
11 Free Software Foundation; either version 2, or (at your option) any
14 XEmacs is distributed in the hope that it will be useful, but WITHOUT
15 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
16 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
19 You should have received a copy of the GNU General Public License
20 along with XEmacs; see the file COPYING. If not, write to
21 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
22 Boston, MA 02111-1307, USA. */
24 /* This file has been Mule-ized except for `start-process-internal',
25 `open-network-stream-internal' and `open-multicast-group-internal'. */
27 /* This file has been split into process.c and process-unix.c by
28 Kirill M. Katsnelson <kkm@kis.ru>, so please bash him and not
29 the original author(s) */
33 #if !defined (NO_SUBPROCESSES)
35 /* The entire file is within this conditional */
51 #include "file-coding.h"
57 #include "syssignal.h" /* Always include before systty.h */
61 Lisp_Object Qprocessp;
64 struct process_methods the_process_methods;
66 /* a process object is a network connection when its pid field a cons
67 (name of name of port we are connected to . foreign host name) */
69 /* Valid values of process->status_symbol */
70 Lisp_Object Qrun, Qstop;
71 /* Qrun => Qopen, Qexit => Qclosed for "network connection" processes */
72 Lisp_Object Qopen, Qclosed;
73 /* Protocol families */
74 Lisp_Object Qtcp, Qudp;
77 Lisp_Object Qmulticast; /* Will be used for occasional warnings */
80 /* t means use pty, nil means use a pipe,
81 maybe other values to come. */
82 Lisp_Object Vprocess_connection_type;
84 /* Read comments to DEFVAR of this */
85 int windowed_process_io;
87 #ifdef PROCESS_IO_BLOCKING
88 /* List of port numbers or port names to set a blocking I/O mode.
89 Nil means set a non-blocking I/O mode [default]. */
90 Lisp_Object network_stream_blocking_port_list;
91 #endif /* PROCESS_IO_BLOCKING */
93 /* Number of events of change of status of a process. */
94 volatile int process_tick;
96 /* Number of events for which the user or sentinel has been notified. */
97 static int update_tick;
99 /* Nonzero means delete a process right away if it exits. */
100 int delete_exited_processes;
102 /* Hash table which maps USIDs as returned by create_stream_pair_cb to
103 process objects. Processes are not GC-protected through this! */
104 struct hash_table *usid_to_process;
106 /* List of process objects. */
107 Lisp_Object Vprocess_list;
109 extern Lisp_Object Vlisp_EXEC_SUFFIXES;
114 mark_process (Lisp_Object obj)
116 struct Lisp_Process *proc = XPROCESS (obj);
117 MAYBE_PROCMETH (mark_process_data, (proc));
118 mark_object (proc->name);
119 mark_object (proc->command);
120 mark_object (proc->filter);
121 mark_object (proc->sentinel);
122 mark_object (proc->buffer);
123 mark_object (proc->mark);
124 mark_object (proc->pid);
125 mark_object (proc->pipe_instream);
126 mark_object (proc->pipe_outstream);
128 mark_object (proc->coding_instream);
129 mark_object (proc->coding_outstream);
131 return proc->status_symbol;
135 print_process (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag)
137 struct Lisp_Process *proc = XPROCESS (obj);
140 error ("printing unreadable object #<process %s>",
141 XSTRING_DATA (proc->name));
145 print_internal (proc->name, printcharfun, 0);
149 int netp = network_connection_p (obj);
150 write_c_string (((netp) ? GETTEXT ("#<network connection ") :
151 GETTEXT ("#<process ")), printcharfun);
152 print_internal (proc->name, printcharfun, 1);
153 write_c_string (((netp) ? " " : " pid "), printcharfun);
154 print_internal (proc->pid, printcharfun, 1);
155 write_c_string (" state:", printcharfun);
156 print_internal (proc->status_symbol, printcharfun, 1);
157 MAYBE_PROCMETH (print_process_data, (proc, printcharfun));
158 write_c_string (">", printcharfun);
162 #ifdef HAVE_WINDOW_SYSTEM
163 extern void debug_process_finalization (struct Lisp_Process *p);
164 #endif /* HAVE_WINDOW_SYSTEM */
167 finalize_process (void *header, int for_disksave)
169 /* #### this probably needs to be tied into the tty event loop */
170 /* #### when there is one */
171 struct Lisp_Process *p = (struct Lisp_Process *) header;
172 #ifdef HAVE_WINDOW_SYSTEM
175 debug_process_finalization (p);
177 #endif /* HAVE_WINDOW_SYSTEM */
181 MAYBE_PROCMETH (finalize_process_data, (p, for_disksave));
183 xfree (p->process_data);
187 DEFINE_LRECORD_IMPLEMENTATION ("process", process,
188 mark_process, print_process, finalize_process,
189 0, 0, 0, struct Lisp_Process);
191 /************************************************************************/
192 /* basic process accessors */
193 /************************************************************************/
195 /* Under FILE_CODING, this function returns low-level streams, connected
196 directly to the child process, rather than en/decoding FILE_CODING
199 get_process_streams (struct Lisp_Process *p,
200 Lisp_Object *instr, Lisp_Object *outstr)
203 assert (NILP (p->pipe_instream) || LSTREAMP(p->pipe_instream));
204 assert (NILP (p->pipe_outstream) || LSTREAMP(p->pipe_outstream));
205 *instr = p->pipe_instream;
206 *outstr = p->pipe_outstream;
209 struct Lisp_Process *
210 get_process_from_usid (USID usid)
214 assert (usid != USID_ERROR && usid != USID_DONTHASH);
216 if (gethash ((CONST void*)usid, usid_to_process, &vval))
219 CVOID_TO_LISP (proc, vval);
220 return XPROCESS (proc);
227 get_process_selected_p (struct Lisp_Process *p)
233 set_process_selected_p (struct Lisp_Process *p, int selected_p)
235 p->selected = !!selected_p;
239 connected_via_filedesc_p (struct Lisp_Process *p)
241 return MAYBE_INT_PROCMETH (tooltalk_connection_p, (p));
246 network_connection_p (Lisp_Object process)
248 return CONSP (XPROCESS (process)->pid);
252 DEFUN ("processp", Fprocessp, 1, 1, 0, /*
253 Return t if OBJECT is a process.
257 return PROCESSP (obj) ? Qt : Qnil;
260 DEFUN ("process-list", Fprocess_list, 0, 0, 0, /*
261 Return a list of all processes.
265 return Fcopy_sequence (Vprocess_list);
268 DEFUN ("get-process", Fget_process, 1, 1, 0, /*
269 Return the process named NAME, or nil if there is none.
279 /* this only gets called during GC when emacs is going away as a result
280 of a signal or crash. */
283 for (tail = Vprocess_list; CONSP (tail); tail = XCDR (tail))
285 Lisp_Object proc = XCAR (tail);
287 if (internal_equal (name, XPROCESS (proc)->name, 0))
293 DEFUN ("get-buffer-process", Fget_buffer_process, 1, 1, 0, /*
294 Return the (or, a) process associated with BUFFER.
295 BUFFER may be a buffer or the name of one.
299 Lisp_Object buf, tail, proc;
301 if (NILP (name)) return Qnil;
302 buf = Fget_buffer (name);
303 if (NILP (buf)) return Qnil;
305 for (tail = Vprocess_list; CONSP (tail); tail = XCDR (tail))
307 /* jwz: do not quit here - it isn't necessary, as there is no way for
308 Vprocess_list to get circular or overwhelmingly long, and this
309 function is called from layout_mode_element under redisplay. */
312 if (PROCESSP (proc) && EQ (XPROCESS (proc)->buffer, buf))
318 /* This is how commands for the user decode process arguments. It
319 accepts a process, a process name, a buffer, a buffer name, or nil.
320 Buffers denote the first process in the buffer, and nil denotes the
324 get_process (Lisp_Object name)
326 Lisp_Object proc, obj;
329 /* #### Look more closely into translating process names. */
332 /* This may be called during a GC from process_send_signal() from
333 kill_buffer_processes() if emacs decides to abort(). */
339 obj = Fget_process (name);
341 obj = Fget_buffer (name);
343 error ("Process %s does not exist", XSTRING_DATA (name));
345 else if (NILP (name))
346 obj = Fcurrent_buffer ();
350 /* Now obj should be either a buffer object or a process object.
354 proc = Fget_buffer_process (obj);
356 error ("Buffer %s has no process", XSTRING_DATA (XBUFFER(obj)->name));
360 /* #### This was commented out. Although, simple
361 (kill-process 7 "qqq") resulted in a fatal error. - kkm */
368 DEFUN ("process-id", Fprocess_id, 1, 1, 0, /*
369 Return the process id of PROCESS.
370 This is the pid of the Unix process which PROCESS uses or talks to.
371 For a network connection, this value is a cons of
372 (foreign-network-port . foreign-host-name).
377 CHECK_PROCESS (proc);
379 pid = XPROCESS (proc)->pid;
380 if (network_connection_p (proc))
382 return Fcons (Fcar (pid), Fcdr (pid));
387 DEFUN ("process-name", Fprocess_name, 1, 1, 0, /*
388 Return the name of PROCESS, as a string.
389 This is the name of the program invoked in PROCESS,
390 possibly modified to make it unique among process names.
394 CHECK_PROCESS (proc);
395 return XPROCESS (proc)->name;
398 DEFUN ("process-command", Fprocess_command, 1, 1, 0, /*
399 Return the command that was executed to start PROCESS.
400 This is a list of strings, the first string being the program executed
401 and the rest of the strings being the arguments given to it.
405 CHECK_PROCESS (proc);
406 return XPROCESS (proc)->command;
410 /************************************************************************/
411 /* creating a process */
412 /************************************************************************/
415 make_process_internal (Lisp_Object name)
417 Lisp_Object val, name1;
419 struct Lisp_Process *p =
420 alloc_lcrecord_type (struct Lisp_Process, &lrecord_process);
422 /* If name is already in use, modify it until it is unused. */
427 Lisp_Object tem = Fget_process (name1);
430 sprintf (suffix, "<%d>", i);
431 name1 = concat2 (name, build_string (suffix));
440 p->mark = Fmake_marker ();
442 p->status_symbol = Qrun;
445 p->filter_does_read = 0;
446 p->kill_without_query = 0;
450 p->pipe_instream = Qnil;
451 p->pipe_outstream = Qnil;
453 p->coding_instream = Qnil;
454 p->coding_outstream = Qnil;
458 MAYBE_PROCMETH (alloc_process_data, (p));
460 XSETPROCESS (val, p);
462 Vprocess_list = Fcons (val, Vprocess_list);
467 init_process_io_handles (struct Lisp_Process *p, void* in, void* out, int flags)
469 USID usid = event_stream_create_stream_pair (in, out,
470 &p->pipe_instream, &p->pipe_outstream,
473 if (usid == USID_ERROR)
474 report_file_error ("Setting up communication with subprocess", Qnil);
476 if (usid != USID_DONTHASH)
478 Lisp_Object proc = Qnil;
479 XSETPROCESS (proc, p);
480 puthash ((CONST void*)usid, LISP_TO_VOID (proc), usid_to_process);
483 MAYBE_PROCMETH (init_process_io_handles, (p, in, out, flags));
486 p->coding_instream = make_decoding_input_stream
487 (XLSTREAM (p->pipe_instream),
488 Fget_coding_system (Vcoding_system_for_read));
489 Lstream_set_character_mode (XLSTREAM (p->coding_instream));
490 p->coding_outstream = make_encoding_output_stream
491 (XLSTREAM (p->pipe_outstream),
492 Fget_coding_system (Vcoding_system_for_write));
493 /* CODE_CNTL (&out_state[outchannel]) |= CC_END; !!####
494 What's going on here? */
495 #endif /* FILE_CODING */
499 create_process (Lisp_Object process, Lisp_Object *argv, int nargv,
500 Lisp_Object program, Lisp_Object cur_dir)
502 struct Lisp_Process *p = XPROCESS (process);
505 /* *_create_process may change status_symbol, if the process
506 is a kind of "fire-and-forget" (no I/O, unwaitable) */
507 p->status_symbol = Qrun;
510 pid = PROCMETH (create_process, (p, argv, nargv, program, cur_dir));
512 p->pid = make_int (pid);
513 if (!NILP(p->pipe_instream))
514 event_stream_select_process (p);
517 /* This function is the unwind_protect form for Fstart_process_internal. If
518 PROC doesn't have its pid set, then we know someone has signalled
519 an error and the process wasn't started successfully, so we should
520 remove it from the process list. */
521 static void remove_process (Lisp_Object proc);
523 start_process_unwind (Lisp_Object proc)
525 /* Was PROC started successfully? */
526 if (EQ (XPROCESS (proc)->pid, Qnil))
527 remove_process (proc);
531 DEFUN ("start-process-internal", Fstart_process_internal, 3, MANY, 0, /*
532 Start a program in a subprocess. Return the process object for it.
533 Args are NAME BUFFER PROGRAM &rest PROGRAM-ARGS
534 NAME is name for process. It is modified if necessary to make it unique.
535 BUFFER is the buffer or (buffer-name) to associate with the process.
536 Process output goes at end of that buffer, unless you specify
537 an output stream or filter function to handle the output.
538 BUFFER may be also nil, meaning that this process is not associated
540 Third arg is program file name. It is searched for as in the shell.
541 Remaining arguments are strings to give program as arguments.
542 INCODE and OUTCODE specify the coding-system objects used in input/output
545 (int nargs, Lisp_Object *args))
547 /* This function can call lisp */
548 /* !!#### This function has not been Mule-ized */
549 Lisp_Object buffer, name, program, proc, current_dir;
551 int speccount = specpdl_depth ();
552 struct gcpro gcpro1, gcpro2, gcpro3;
559 /* Protect against various file handlers doing GCs below. */
560 GCPRO3 (buffer, program, current_dir);
563 buffer = Fget_buffer_create (buffer);
566 CHECK_STRING (program);
568 /* Make sure that the child will be able to chdir to the current
569 buffer's current directory, or its unhandled equivalent. We
570 can't just have the child check for an error when it does the
571 chdir, since it's in a vfork.
573 Note: these assignments and calls are like this in order to insure
574 "caller protects args" GC semantics. */
575 current_dir = current_buffer->directory;
576 current_dir = Funhandled_file_name_directory (current_dir);
577 current_dir = expand_and_dir_to_file (current_dir, Qnil);
579 #if 0 /* This loser breaks ange-ftp */
580 /* dmoore - if you re-enable this code, you have to gcprotect
581 current_buffer through the above calls. */
582 if (NILP (Ffile_accessible_directory_p (current_dir)))
583 report_file_error ("Setting current directory",
584 list1 (current_buffer->directory));
587 /* If program file name is not absolute, search our path for it */
588 if (!IS_DIRECTORY_SEP (XSTRING_BYTE (program, 0))
589 && !(XSTRING_LENGTH (program) > 1
590 && IS_DEVICE_SEP (XSTRING_BYTE (program, 1))))
592 struct gcpro ngcpro1;
596 locate_file (Vexec_path, program, Vlisp_EXEC_SUFFIXES, &tem, X_OK);
598 report_file_error ("Searching for program", list1 (program));
599 program = Fexpand_file_name (tem, Qnil);
604 if (!NILP (Ffile_directory_p (program)))
605 error ("Specified program for new process is a directory");
608 proc = make_process_internal (name);
610 XPROCESS (proc)->buffer = buffer;
611 XPROCESS (proc)->command = Flist (nargs - 2,
614 /* Make the process marker point into the process buffer (if any). */
616 Fset_marker (XPROCESS (proc)->mark,
617 make_int (BUF_ZV (XBUFFER (buffer))), buffer);
619 /* If an error occurs and we can't start the process, we want to
620 remove it from the process list. This means that each error
621 check in create_process doesn't need to call remove_process
622 itself; it's all taken care of here. */
623 record_unwind_protect (start_process_unwind, proc);
625 create_process (proc, args + 3, nargs - 3, program, current_dir);
628 return unbind_to (speccount, proc);
635 /* #### The network support is fairly synthetical. What we actually
636 need is a single function, which supports all datagram, stream and
637 packet stream connections, arbitrary protocol families should they
638 be supported by the target system, multicast groups, in both data
639 and control rooted/nonrooted flavors, service quality etc whatever
640 is supported by the underlying network.
642 It must accept a property list describing the connection. The current
643 functions must then go to lisp and provide a suitable list for the
644 generalized connection function.
646 Both UNIX and Win32 support BSD sockets, and there are many extensions
647 available (Sockets 2 spec).
649 A todo is define a consistent set of properties abstracting a
650 network connection. -kkm
654 /* open a TCP network connection to a given HOST/SERVICE. Treated
655 exactly like a normal process when reading and writing. Only
656 differences are in status display and process deletion. A network
657 connection has no PID; you cannot signal it. All you can do is
658 deactivate and close it via delete-process */
660 DEFUN ("open-network-stream-internal", Fopen_network_stream_internal, 4, 5, 0, /*
661 Open a TCP connection for a service to a host.
662 Return a subprocess-object to represent the connection.
663 Input and output work as for subprocesses; `delete-process' closes it.
665 NAME is name for process. It is modified if necessary to make it unique.
666 BUFFER is the buffer (or buffer-name) to associate with the process.
667 Process output goes at end of that buffer, unless you specify
668 an output stream or filter function to handle the output.
669 BUFFER may also be nil, meaning that this process is not associated
671 Third arg is name of the host to connect to, or its IP address.
672 Fourth arg SERVICE is name of the service desired, or an integer
673 specifying a port number to connect to.
674 Fifth argument PROTOCOL is a network protocol. Currently 'tcp
675 (Transmission Control Protocol) and 'udp (User Datagram Protocol) are
676 supported. When omitted, 'tcp is assumed.
678 Ouput via `process-send-string' and input via buffer or filter (see
679 `set-process-filter') are stream-oriented. That means UDP datagrams are
680 not guaranteed to be sent and received in discrete packets. (But small
681 datagrams around 500 bytes that are not truncated by `process-send-string'
682 are usually fine.) Note further that UDP protocol does not guard against
685 (name, buffer, host, service, protocol))
687 /* !!#### This function has not been Mule-ized */
688 /* This function can GC */
689 Lisp_Object proc = Qnil;
690 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5, ngcpro1;
693 GCPRO5 (name, buffer, host, service, protocol);
699 CHECK_SYMBOL (protocol);
701 /* Since this code is inside HAVE_SOCKETS, existence of
702 open_network_stream is mandatory */
703 PROCMETH (open_network_stream, (name, host, service, protocol,
707 buffer = Fget_buffer_create (buffer);
708 proc = make_process_internal (name);
711 XPROCESS (proc)->pid = Fcons (service, host);
712 XPROCESS (proc)->buffer = buffer;
713 init_process_io_handles (XPROCESS (proc), (void*)inch, (void*)outch,
714 STREAM_NETWORK_CONNECTION);
716 event_stream_select_process (XPROCESS (proc));
723 #ifdef HAVE_MULTICAST
725 DEFUN ("open-multicast-group-internal", Fopen_multicast_group_internal, 5, 5, 0, /*
726 Open a multicast connection on the specified dest/port/ttl.
727 Return a subprocess-object to represent the connection.
728 Input and output work as for subprocesses; `delete-process' closes it.
730 NAME is name for process. It is modified if necessary to make it unique.
731 BUFFER is the buffer (or buffer-name) to associate with the process.
732 Process output goes at end of that buffer, unless you specify
733 an output stream or filter function to handle the output.
734 BUFFER may also be nil, meaning that this process is not associated
736 Third, fourth and fifth args are the multicast destination group, port and ttl.
737 dest must be an internet address between 224.0.0.0 and 239.255.255.255
738 port is a communication port like in traditional unicast
739 ttl is the time-to-live (15 for site, 63 for region and 127 for world)
741 (name, buffer, dest, port, ttl))
743 /* !!#### This function has not been Mule-ized */
744 /* This function can GC */
745 Lisp_Object proc = Qnil;
751 /* Since this code is inside HAVE_MULTICAST, existence of
752 open_network_stream is mandatory */
753 PROCMETH (open_multicast_group, (name, dest, port, ttl,
757 buffer = Fget_buffer_create (buffer);
759 proc = make_process_internal (name);
762 XPROCESS (proc)->pid = Fcons (port, dest);
763 XPROCESS (proc)->buffer = buffer;
764 init_process_io_handles (XPROCESS (proc), (void*)inch, (void*)outch,
765 STREAM_NETWORK_CONNECTION);
767 event_stream_select_process (XPROCESS (proc));
772 #endif /* HAVE_MULTICAST */
774 #endif /* HAVE_SOCKETS */
777 canonicalize_host_name (Lisp_Object host)
779 return PROCMETH_OR_GIVEN (canonicalize_host_name, (host), host);
783 DEFUN ("set-process-window-size", Fset_process_window_size, 3, 3, 0, /*
784 Tell PROCESS that it has logical window size HEIGHT and WIDTH.
786 (proc, height, width))
788 CHECK_PROCESS (proc);
789 CHECK_NATNUM (height);
790 CHECK_NATNUM (width);
792 MAYBE_INT_PROCMETH (set_window_size, (XPROCESS (proc), XINT (height), XINT (width))) <= 0
797 /************************************************************************/
799 /************************************************************************/
801 /* Read pending output from the process channel,
802 starting with our buffered-ahead character if we have one.
803 Yield number of characters read.
805 This function reads at most 1024 bytes.
806 If you want to read all available subprocess output,
807 you must call it repeatedly until it returns zero. */
810 read_process_output (Lisp_Object proc)
812 /* This function can GC */
813 Bytecount nbytes, nchars;
815 Lisp_Object outstream;
816 struct Lisp_Process *p = XPROCESS (proc);
818 /* If there is a lot of output from the subprocess, the loop in
819 execute_internal_event() might call read_process_output() more
820 than once. If the filter that was executed from one of these
821 calls set the filter to t, we have to stop now. Return -1 rather
822 than 0 so execute_internal_event() doesn't close the process.
823 Really, the loop in execute_internal_event() should check itself
824 for a process-filter change, like in status_notify(); but the
825 struct Lisp_Process is not exported outside of this file. */
826 if (NILP(p->pipe_instream))
827 return -1; /* already closed */
829 if (!NILP (p->filter) && (p->filter_does_read))
831 Lisp_Object filter_result;
833 /* Some weird FSFmacs crap here with
834 Vdeactivate_mark and current_buffer->keymap */
835 running_asynch_code = 1;
836 filter_result = call2_trapping_errors ("Error in process filter",
837 p->filter, proc, Qnil);
838 running_asynch_code = 0;
839 restore_match_data ();
840 CHECK_INT (filter_result);
841 return XINT (filter_result);
844 nbytes = Lstream_read (XLSTREAM (DATA_INSTREAM(p)), chars, sizeof (chars));
845 if (nbytes <= 0) return nbytes;
847 nchars = bytecount_to_charcount (chars, nbytes);
848 outstream = p->filter;
849 if (!NILP (outstream))
851 /* We used to bind inhibit-quit to t here, but
852 call2_trapping_errors() does that for us. */
853 running_asynch_code = 1;
854 call2_trapping_errors ("Error in process filter",
855 outstream, proc, make_string (chars, nbytes));
856 running_asynch_code = 0;
857 restore_match_data ();
861 /* If no filter, write into buffer if it isn't dead. */
862 if (!NILP (p->buffer) && BUFFER_LIVE_P (XBUFFER (p->buffer)))
864 Lisp_Object old_read_only = Qnil;
868 int old_zmacs_region_stays = zmacs_region_stays;
869 struct gcpro gcpro1, gcpro2;
870 struct buffer *buf = XBUFFER (p->buffer);
872 GCPRO2 (proc, old_read_only);
874 old_point = BUF_PT (buf);
875 old_begv = BUF_BEGV (buf);
876 old_zv = BUF_ZV (buf);
877 old_read_only = buf->read_only;
878 buf->read_only = Qnil;
880 /* Insert new output into buffer
881 at the current end-of-output marker,
882 thus preserving logical ordering of input and output. */
883 if (XMARKER (p->mark)->buffer)
885 bufpos_clip_to_bounds (old_begv, marker_position (p->mark),
888 BUF_SET_PT (buf, old_zv);
890 /* If the output marker is outside of the visible region, save
891 the restriction and widen. */
892 if (! (BUF_BEGV (buf) <= BUF_PT (buf) &&
893 BUF_PT (buf) <= BUF_ZV (buf)))
896 /* Make sure opoint floats ahead of any new text, just as point
898 if (BUF_PT (buf) <= old_point)
901 /* Insert after old_begv, but before old_zv. */
902 if (BUF_PT (buf) < old_begv)
904 if (BUF_PT (buf) <= old_zv)
908 /* This screws up initial display of the window. jla */
910 /* Insert before markers in case we are inserting where
911 the buffer's mark is, and the user's next command is Meta-y. */
912 buffer_insert_raw_string_1 (buf, -1, chars,
913 nbytes, INSDEL_BEFORE_MARKERS);
915 buffer_insert_raw_string (buf, chars, nbytes);
918 Fset_marker (p->mark, make_int (BUF_PT (buf)), p->buffer);
920 MARK_MODELINE_CHANGED;
922 /* If the restriction isn't what it should be, set it. */
923 if (old_begv != BUF_BEGV (buf) || old_zv != BUF_ZV (buf))
926 old_begv = bufpos_clip_to_bounds (BUF_BEG (buf),
929 old_zv = bufpos_clip_to_bounds (BUF_BEG (buf),
932 Fnarrow_to_region (make_int (old_begv), make_int (old_zv),
936 /* Handling the process output should not deactivate the mark. */
937 zmacs_region_stays = old_zmacs_region_stays;
938 buf->read_only = old_read_only;
939 old_point = bufpos_clip_to_bounds (BUF_BEGV (buf),
942 BUF_SET_PT (buf, old_point);
949 /* Sending data to subprocess */
951 /* send some data to process PROC. If NONRELOCATABLE is non-NULL, it
952 specifies the address of the data. Otherwise, the data comes from the
953 object RELOCATABLE (either a string or a buffer). START and LEN
954 specify the offset and length of the data to send.
956 Note that START and LEN are in Bufpos's if RELOCATABLE is a buffer,
957 and in Bytecounts otherwise. */
960 send_process (Lisp_Object proc,
961 Lisp_Object relocatable, CONST Bufbyte *nonrelocatable,
964 /* This function can GC */
965 struct gcpro gcpro1, gcpro2;
966 Lisp_Object lstream = Qnil;
968 GCPRO2 (proc, lstream);
970 if (NILP (DATA_OUTSTREAM (XPROCESS (proc))))
971 signal_simple_error ("Process not open for writing", proc);
975 make_fixed_buffer_input_stream (nonrelocatable + start, len);
976 else if (BUFFERP (relocatable))
977 lstream = make_lisp_buffer_input_stream (XBUFFER (relocatable),
978 start, start + len, 0);
980 lstream = make_lisp_string_input_stream (relocatable, start, len);
982 PROCMETH (send_process, (proc, XLSTREAM (lstream)));
985 Lstream_delete (XLSTREAM (lstream));
988 DEFUN ("process-tty-name", Fprocess_tty_name, 1, 1, 0, /*
989 Return the name of the terminal PROCESS uses, or nil if none.
990 This is the terminal that the process itself reads and writes on,
991 not the name of the pty that Emacs uses to talk with that terminal.
995 CHECK_PROCESS (proc);
996 return MAYBE_LISP_PROCMETH (get_tty_name, (XPROCESS (proc)));
999 DEFUN ("set-process-buffer", Fset_process_buffer, 2, 2, 0, /*
1000 Set buffer associated with PROCESS to BUFFER (a buffer, or nil).
1004 CHECK_PROCESS (proc);
1006 CHECK_BUFFER (buffer);
1007 XPROCESS (proc)->buffer = buffer;
1011 DEFUN ("process-buffer", Fprocess_buffer, 1, 1, 0, /*
1012 Return the buffer PROCESS is associated with.
1013 Output from PROCESS is inserted in this buffer
1014 unless PROCESS has a filter.
1018 CHECK_PROCESS (proc);
1019 return XPROCESS (proc)->buffer;
1022 DEFUN ("process-mark", Fprocess_mark, 1, 1, 0, /*
1023 Return the marker for the end of the last output from PROCESS.
1027 CHECK_PROCESS (proc);
1028 return XPROCESS (proc)->mark;
1032 set_process_filter (Lisp_Object proc, Lisp_Object filter, int filter_does_read)
1034 CHECK_PROCESS (proc);
1035 if (PROCESS_LIVE_P (proc)) {
1036 if (EQ (filter, Qt))
1037 event_stream_unselect_process (XPROCESS (proc));
1039 event_stream_select_process (XPROCESS (proc));
1042 XPROCESS (proc)->filter = filter;
1043 XPROCESS (proc)->filter_does_read = filter_does_read;
1046 DEFUN ("set-process-filter", Fset_process_filter, 2, 2, 0, /*
1047 Give PROCESS the filter function FILTER; nil means no filter.
1048 t means stop accepting output from the process.
1049 When a process has a filter, each time it does output
1050 the entire string of output is passed to the filter.
1051 The filter gets two arguments: the process and the string of output.
1052 If the process has a filter, its buffer is not used for output.
1056 set_process_filter (proc, filter, 0);
1060 DEFUN ("process-filter", Fprocess_filter, 1, 1, 0, /*
1061 Return the filter function of PROCESS; nil if none.
1062 See `set-process-filter' for more info on filter functions.
1066 CHECK_PROCESS (proc);
1067 return XPROCESS (proc)->filter;
1070 DEFUN ("process-send-region", Fprocess_send_region, 3, 3, 0, /*
1071 Send current contents of region as input to PROCESS.
1072 PROCESS may be a process name or an actual process.
1073 Called from program, takes three arguments, PROCESS, START and END.
1074 If the region is more than 500 or so characters long,
1075 it is sent in several bunches. This may happen even for shorter regions.
1076 Output from processes can arrive in between bunches.
1078 (process, start, end))
1080 /* This function can GC */
1081 Lisp_Object proc = get_process (process);
1084 get_buffer_range_char (current_buffer, start, end, &st, &en, 0);
1086 send_process (proc, Fcurrent_buffer (), 0,
1091 DEFUN ("process-send-string", Fprocess_send_string, 2, 4, 0, /*
1092 Send PROCESS the contents of STRING as input.
1093 PROCESS may be a process name or an actual process.
1094 Optional arguments FROM and TO specify part of STRING, see `substring'.
1095 If STRING is more than 500 or so characters long,
1096 it is sent in several bunches. This may happen even for shorter strings.
1097 Output from processes can arrive in between bunches.
1099 (process, string, from, to))
1101 /* This function can GC */
1106 proc = get_process (process);
1107 CHECK_STRING (string);
1108 get_string_range_byte (string, from, to, &bfr, &bto,
1109 GB_HISTORICAL_STRING_BEHAVIOR);
1112 send_process (proc, string, 0, bfr, len);
1118 DEFUN ("process-input-coding-system", Fprocess_input_coding_system, 1, 1, 0, /*
1119 Return PROCESS's input coding system.
1123 process = get_process (process);
1124 return decoding_stream_coding_system (XLSTREAM (XPROCESS (process)->coding_instream) );
1127 DEFUN ("process-output-coding-system", Fprocess_output_coding_system, 1, 1, 0, /*
1128 Return PROCESS's output coding system.
1132 process = get_process (process);
1133 return encoding_stream_coding_system (XLSTREAM (XPROCESS (process)->coding_outstream));
1136 DEFUN ("process-coding-system", Fprocess_coding_system, 1, 1, 0, /*
1137 Return a pair of coding-system for decoding and encoding of PROCESS.
1141 process = get_process (process);
1142 return Fcons (decoding_stream_coding_system
1143 (XLSTREAM (XPROCESS (process)->coding_instream)),
1144 encoding_stream_coding_system
1145 (XLSTREAM (XPROCESS (process)->coding_outstream)));
1148 DEFUN ("set-process-input-coding-system", Fset_process_input_coding_system,
1150 Set PROCESS's input coding system to CODESYS.
1154 codesys = Fget_coding_system (codesys);
1155 process = get_process (process);
1156 set_decoding_stream_coding_system
1157 (XLSTREAM (XPROCESS (process)->coding_instream), codesys);
1161 DEFUN ("set-process-output-coding-system", Fset_process_output_coding_system,
1163 Set PROCESS's output coding system to CODESYS.
1167 codesys = Fget_coding_system (codesys);
1168 process = get_process (process);
1169 set_encoding_stream_coding_system
1170 (XLSTREAM (XPROCESS (process)->coding_outstream), codesys);
1174 DEFUN ("set-process-coding-system", Fset_process_coding_system,
1176 Set coding-systems of PROCESS to DECODING and ENCODING.
1178 (process, decoding, encoding))
1180 if (!NILP (decoding))
1181 Fset_process_input_coding_system (process, decoding);
1183 if (!NILP (encoding))
1184 Fset_process_output_coding_system (process, encoding);
1189 #endif /* FILE_CODING */
1191 /************************************************************************/
1192 /* process status */
1193 /************************************************************************/
1196 exec_sentinel_unwind (Lisp_Object datum)
1198 struct Lisp_Cons *d = XCONS (datum);
1199 XPROCESS (d->car)->sentinel = d->cdr;
1205 exec_sentinel (Lisp_Object proc, Lisp_Object reason)
1207 /* This function can GC */
1208 int speccount = specpdl_depth ();
1209 struct Lisp_Process *p = XPROCESS (proc);
1210 Lisp_Object sentinel = p->sentinel;
1212 if (NILP (sentinel))
1215 /* Some weird FSFmacs crap here with
1216 Vdeactivate_mark and current_buffer->keymap */
1218 /* Zilch the sentinel while it's running, to avoid recursive invocations;
1219 assure that it gets restored no matter how the sentinel exits. */
1221 record_unwind_protect (exec_sentinel_unwind, noseeum_cons (proc, sentinel));
1222 /* We used to bind inhibit-quit to t here, but call2_trapping_errors()
1223 does that for us. */
1224 running_asynch_code = 1;
1225 call2_trapping_errors ("Error in process sentinel", sentinel, proc, reason);
1226 running_asynch_code = 0;
1227 restore_match_data ();
1228 unbind_to (speccount, Qnil);
1231 DEFUN ("set-process-sentinel", Fset_process_sentinel, 2, 2, 0, /*
1232 Give PROCESS the sentinel SENTINEL; nil for none.
1233 The sentinel is called as a function when the process changes state.
1234 It gets two arguments: the process, and a string describing the change.
1238 CHECK_PROCESS (proc);
1239 XPROCESS (proc)->sentinel = sentinel;
1243 DEFUN ("process-sentinel", Fprocess_sentinel, 1, 1, 0, /*
1244 Return the sentinel of PROCESS; nil if none.
1245 See `set-process-sentinel' for more info on sentinels.
1249 CHECK_PROCESS (proc);
1250 return XPROCESS (proc)->sentinel;
1255 signal_name (int signum)
1257 if (signum >= 0 && signum < NSIG)
1258 return (CONST char *) sys_siglist[signum];
1260 return (CONST char *) GETTEXT ("unknown signal");
1264 update_process_status (Lisp_Object p,
1265 Lisp_Object status_symbol,
1269 XPROCESS (p)->tick++;
1271 XPROCESS (p)->status_symbol = status_symbol;
1272 XPROCESS (p)->exit_code = exit_code;
1273 XPROCESS (p)->core_dumped = core_dumped;
1276 /* Return a string describing a process status list. */
1279 status_message (struct Lisp_Process *p)
1281 Lisp_Object symbol = p->status_symbol;
1282 int code = p->exit_code;
1283 int coredump = p->core_dumped;
1284 Lisp_Object string, string2;
1286 if (EQ (symbol, Qsignal) || EQ (symbol, Qstop))
1288 string = build_string (signal_name (code));
1290 string2 = build_translated_string (" (core dumped)\n");
1292 string2 = build_string ("\n");
1293 set_string_char (XSTRING (string), 0,
1294 DOWNCASE (current_buffer,
1295 string_char (XSTRING (string), 0)));
1296 return concat2 (string, string2);
1298 else if (EQ (symbol, Qexit))
1301 return build_translated_string ("finished\n");
1302 string = Fnumber_to_string (make_int (code));
1304 string2 = build_translated_string (" (core dumped)\n");
1306 string2 = build_string ("\n");
1307 return concat2 (build_translated_string ("exited abnormally with code "),
1308 concat2 (string, string2));
1311 return Fcopy_sequence (Fsymbol_name (symbol));
1314 /* Tell status_notify() to check for terminated processes. We do this
1315 because on some systems we sometimes miss SIGCHLD calls. (Not sure
1319 kick_status_notify (void)
1325 /* Report all recent events of a change in process status
1326 (either run the sentinel or output a message).
1327 This is done while Emacs is waiting for keyboard input. */
1330 status_notify (void)
1332 /* This function can GC */
1333 Lisp_Object tail = Qnil;
1334 Lisp_Object symbol = Qnil;
1335 Lisp_Object msg = Qnil;
1336 struct gcpro gcpro1, gcpro2, gcpro3;
1337 /* process_tick is volatile, so we have to remember it now.
1338 Otherwise, we get a race condition is SIGCHLD happens during
1341 (Actually, this is not the case anymore. The code to
1342 update the process structures has been moved out of the
1343 SIGCHLD handler. But for the moment I'm leaving this
1344 stuff in -- it can't hurt.) */
1345 int temp_process_tick;
1347 MAYBE_PROCMETH (reap_exited_processes, ());
1349 temp_process_tick = process_tick;
1351 if (update_tick == temp_process_tick)
1354 /* We need to gcpro tail; if read_process_output calls a filter
1355 which deletes a process and removes the cons to which tail points
1356 from Vprocess_alist, and then causes a GC, tail is an unprotected
1358 GCPRO3 (tail, symbol, msg);
1360 for (tail = Vprocess_list; CONSP (tail); tail = XCDR (tail))
1362 Lisp_Object proc = XCAR (tail);
1363 struct Lisp_Process *p = XPROCESS (proc);
1364 /* p->tick is also volatile. Same thing as above applies. */
1365 int this_process_tick;
1367 /* #### extra check for terminated processes, in case a SIGCHLD
1368 got missed (this seems to happen sometimes, I'm not sure why).
1371 MAYBE_PROCMETH (update_status_if_terminated, (p));
1373 this_process_tick = p->tick;
1374 if (this_process_tick != p->update_tick)
1376 p->update_tick = this_process_tick;
1378 /* If process is still active, read any output that remains. */
1379 while (!EQ (p->filter, Qt)
1380 && read_process_output (proc) > 0)
1383 /* Get the text to use for the message. */
1384 msg = status_message (p);
1386 /* If process is terminated, deactivate it or delete it. */
1387 symbol = p->status_symbol;
1389 if (EQ (symbol, Qsignal)
1390 || EQ (symbol, Qexit))
1392 if (delete_exited_processes)
1393 remove_process (proc);
1395 deactivate_process (proc);
1398 /* Now output the message suitably. */
1399 if (!NILP (p->sentinel))
1400 exec_sentinel (proc, msg);
1401 /* Don't bother with a message in the buffer
1402 when a process becomes runnable. */
1403 else if (!EQ (symbol, Qrun) && !NILP (p->buffer))
1405 Lisp_Object old_read_only = Qnil;
1406 Lisp_Object old = Fcurrent_buffer ();
1408 struct gcpro ngcpro1, ngcpro2;
1410 /* Avoid error if buffer is deleted
1411 (probably that's why the process is dead, too) */
1412 if (!BUFFER_LIVE_P (XBUFFER (p->buffer)))
1415 NGCPRO2 (old, old_read_only);
1416 Fset_buffer (p->buffer);
1417 opoint = BUF_PT (current_buffer);
1418 /* Insert new output into buffer
1419 at the current end-of-output marker,
1420 thus preserving logical ordering of input and output. */
1421 if (XMARKER (p->mark)->buffer)
1422 BUF_SET_PT (current_buffer, marker_position (p->mark));
1424 BUF_SET_PT (current_buffer, BUF_ZV (current_buffer));
1425 if (BUF_PT (current_buffer) <= opoint)
1426 opoint += (string_char_length (XSTRING (msg))
1427 + string_char_length (XSTRING (p->name))
1430 old_read_only = current_buffer->read_only;
1431 current_buffer->read_only = Qnil;
1432 buffer_insert_c_string (current_buffer, "\nProcess ");
1433 Finsert (1, &p->name);
1434 buffer_insert_c_string (current_buffer, " ");
1436 current_buffer->read_only = old_read_only;
1437 Fset_marker (p->mark, make_int (BUF_PT (current_buffer)),
1440 opoint = bufpos_clip_to_bounds(BUF_BEGV (XBUFFER (p->buffer)),
1442 BUF_ZV (XBUFFER (p->buffer)));
1443 BUF_SET_PT (current_buffer, opoint);
1450 /* in case buffers use %s in modeline-format */
1451 MARK_MODELINE_CHANGED;
1454 update_tick = temp_process_tick;
1459 DEFUN ("process-status", Fprocess_status, 1, 1, 0, /*
1460 Return the status of PROCESS.
1461 This is a symbol, one of these:
1463 run -- for a process that is running.
1464 stop -- for a process stopped but continuable.
1465 exit -- for a process that has exited.
1466 signal -- for a process that has got a fatal signal.
1467 open -- for a network stream connection that is open.
1468 closed -- for a network stream connection that is closed.
1469 nil -- if arg is a process name and no such process exists.
1471 PROCESS may be a process, a buffer, the name of a process or buffer, or
1472 nil, indicating the current buffer's process.
1476 Lisp_Object status_symbol;
1479 proc = Fget_process (proc);
1481 proc = get_process (proc);
1486 status_symbol = XPROCESS (proc)->status_symbol;
1487 if (network_connection_p (proc))
1489 if (EQ (status_symbol, Qrun))
1490 status_symbol = Qopen;
1491 else if (EQ (status_symbol, Qexit))
1492 status_symbol = Qclosed;
1494 return status_symbol;
1497 DEFUN ("process-exit-status", Fprocess_exit_status, 1, 1, 0, /*
1498 Return the exit status of PROCESS or the signal number that killed it.
1499 If PROCESS has not yet exited or died, return 0.
1503 CHECK_PROCESS (proc);
1504 return make_int (XPROCESS (proc)->exit_code);
1509 /* send a signal number SIGNO to PROCESS.
1510 CURRENT_GROUP means send to the process group that currently owns
1511 the terminal being used to communicate with PROCESS.
1512 This is used for various commands in shell mode.
1513 If NOMSG is zero, insert signal-announcements into process's buffers
1516 If we can, we try to signal PROCESS by sending control characters
1517 down the pty. This allows us to signal inferiors who have changed
1518 their uid, for which killpg would return an EPERM error. */
1521 process_send_signal (Lisp_Object process, int signo,
1522 int current_group, int nomsg)
1524 /* This function can GC */
1525 Lisp_Object proc = get_process (process);
1527 if (network_connection_p (proc))
1528 error ("Network connection %s is not a subprocess",
1529 XSTRING_DATA (XPROCESS(proc)->name));
1530 if (!PROCESS_LIVE_P (proc))
1531 error ("Process %s is not active",
1532 XSTRING_DATA (XPROCESS(proc)->name));
1534 MAYBE_PROCMETH (kill_child_process, (proc, signo, current_group, nomsg));
1537 DEFUN ("interrupt-process", Finterrupt_process, 0, 2, 0, /*
1538 Interrupt process PROCESS. May be process or name of one.
1539 Nil or no arg means current buffer's process.
1540 Second arg CURRENT-GROUP non-nil means send signal to
1541 the current process-group of the process's controlling terminal
1542 rather than to the process's own process group.
1543 If the process is a shell, this means interrupt current subjob
1544 rather than the shell.
1546 (process, current_group))
1548 /* This function can GC */
1549 process_send_signal (process, SIGINT, !NILP (current_group), 0);
1553 DEFUN ("kill-process", Fkill_process, 0, 2, 0, /*
1554 Kill process PROCESS. May be process or name of one.
1555 See function `interrupt-process' for more details on usage.
1557 (process, current_group))
1559 /* This function can GC */
1561 process_send_signal (process, SIGKILL, !NILP (current_group), 0);
1563 error ("kill-process: Not supported on this system");
1568 DEFUN ("quit-process", Fquit_process, 0, 2, 0, /*
1569 Send QUIT signal to process PROCESS. May be process or name of one.
1570 See function `interrupt-process' for more details on usage.
1572 (process, current_group))
1574 /* This function can GC */
1576 process_send_signal (process, SIGQUIT, !NILP (current_group), 0);
1578 error ("quit-process: Not supported on this system");
1583 DEFUN ("stop-process", Fstop_process, 0, 2, 0, /*
1584 Stop process PROCESS. May be process or name of one.
1585 See function `interrupt-process' for more details on usage.
1587 (process, current_group))
1589 /* This function can GC */
1591 process_send_signal (process, SIGTSTP, !NILP (current_group), 0);
1593 error ("stop-process: Not supported on this system");
1598 DEFUN ("continue-process", Fcontinue_process, 0, 2, 0, /*
1599 Continue process PROCESS. May be process or name of one.
1600 See function `interrupt-process' for more details on usage.
1602 (process, current_group))
1604 /* This function can GC */
1606 process_send_signal (process, SIGCONT, !NILP (current_group), 0);
1608 error ("continue-process: Not supported on this system");
1613 DEFUN ("signal-process", Fsignal_process, 2, 2,
1614 "nProcess number: \nnSignal code: ", /*
1615 Send the process with process id PID the signal with code SIGCODE.
1616 PID must be an integer. The process need not be a child of this Emacs.
1617 SIGCODE may be an integer, or a symbol whose name is a signal name.
1629 CHECK_SYMBOL (sigcode);
1630 name = string_data (XSYMBOL (sigcode)->name);
1632 #define handle_signal(signal) \
1633 else if (!strcmp ((CONST char *) name, #signal)) \
1634 XSETINT (sigcode, signal)
1638 handle_signal (SIGINT); /* ANSI */
1639 handle_signal (SIGILL); /* ANSI */
1640 handle_signal (SIGABRT); /* ANSI */
1641 handle_signal (SIGFPE); /* ANSI */
1642 handle_signal (SIGSEGV); /* ANSI */
1643 handle_signal (SIGTERM); /* ANSI */
1646 handle_signal (SIGHUP); /* POSIX */
1649 handle_signal (SIGQUIT); /* POSIX */
1652 handle_signal (SIGTRAP); /* POSIX */
1655 handle_signal (SIGKILL); /* POSIX */
1658 handle_signal (SIGUSR1); /* POSIX */
1661 handle_signal (SIGUSR2); /* POSIX */
1664 handle_signal (SIGPIPE); /* POSIX */
1667 handle_signal (SIGALRM); /* POSIX */
1670 handle_signal (SIGCHLD); /* POSIX */
1673 handle_signal (SIGCONT); /* POSIX */
1676 handle_signal (SIGSTOP); /* POSIX */
1679 handle_signal (SIGTSTP); /* POSIX */
1682 handle_signal (SIGTTIN); /* POSIX */
1685 handle_signal (SIGTTOU); /* POSIX */
1689 handle_signal (SIGBUS); /* XPG5 */
1692 handle_signal (SIGPOLL); /* XPG5 */
1695 handle_signal (SIGPROF); /* XPG5 */
1698 handle_signal (SIGSYS); /* XPG5 */
1701 handle_signal (SIGURG); /* XPG5 */
1704 handle_signal (SIGXCPU); /* XPG5 */
1707 handle_signal (SIGXFSZ); /* XPG5 */
1710 handle_signal (SIGVTALRM); /* XPG5 */
1714 handle_signal (SIGIO); /* BSD 4.2 */
1717 handle_signal (SIGWINCH); /* BSD 4.3 */
1721 handle_signal (SIGEMT);
1724 handle_signal (SIGINFO);
1727 handle_signal (SIGHWE);
1730 handle_signal (SIGPRE);
1733 handle_signal (SIGUME);
1736 handle_signal (SIGDLK);
1739 handle_signal (SIGCPULIM);
1742 handle_signal (SIGIOT);
1745 handle_signal (SIGLOST);
1748 handle_signal (SIGSTKFLT);
1751 handle_signal (SIGUNUSED);
1754 handle_signal (SIGDANGER); /* AIX */
1757 handle_signal (SIGMSG);
1760 handle_signal (SIGSOUND);
1763 handle_signal (SIGRETRACT);
1766 handle_signal (SIGGRANT);
1769 handle_signal (SIGPWR);
1772 error ("Undefined signal name %s", name);
1775 #undef handle_signal
1777 return make_int (PROCMETH_OR_GIVEN (kill_process_by_pid,
1778 (XINT (pid), XINT (sigcode)), -1));
1781 DEFUN ("process-send-eof", Fprocess_send_eof, 0, 1, 0, /*
1782 Make PROCESS see end-of-file in its input.
1783 PROCESS may be a process, a buffer, the name of a process or buffer, or
1784 nil, indicating the current buffer's process.
1785 If PROCESS is a network connection, or is a process communicating
1786 through a pipe (as opposed to a pty), then you cannot send any more
1787 text to PROCESS after you call this function.
1791 /* This function can GC */
1792 Lisp_Object proc = get_process (process);
1794 /* Make sure the process is really alive. */
1795 if (! EQ (XPROCESS (proc)->status_symbol, Qrun))
1796 error ("Process %s not running", XSTRING_DATA (XPROCESS (proc)->name));
1798 if (!MAYBE_INT_PROCMETH (process_send_eof, (proc)))
1800 if (!NILP (DATA_OUTSTREAM (XPROCESS (proc))))
1802 Lstream_close (XLSTREAM (DATA_OUTSTREAM (XPROCESS (proc))));
1803 event_stream_delete_stream_pair (Qnil, XPROCESS (proc)->pipe_outstream);
1804 XPROCESS (proc)->pipe_outstream = Qnil;
1806 XPROCESS (proc)->coding_outstream = Qnil;
1815 /************************************************************************/
1816 /* deleting a process */
1817 /************************************************************************/
1820 deactivate_process (Lisp_Object proc)
1822 struct Lisp_Process *p = XPROCESS (proc);
1825 /* It's possible that we got as far in the process-creation
1826 process as creating the descriptors but didn't get so
1827 far as selecting the process for input. In this
1828 case, p->pid is nil: p->pid is set at the same time that
1829 the process is selected for input. */
1830 /* #### The comment does not look correct. event_stream_unselect_process
1831 is guarded by process->selected, so this is not a problem. - kkm*/
1832 /* Must call this before setting the streams to nil */
1833 event_stream_unselect_process (p);
1835 if (!NILP (DATA_OUTSTREAM (p)))
1836 Lstream_close (XLSTREAM (DATA_OUTSTREAM (p)));
1837 if (!NILP (DATA_INSTREAM (p)))
1838 Lstream_close (XLSTREAM (DATA_INSTREAM (p)));
1840 /* Provide minimal implementation for deactivate_process
1841 if there's no process-specific one */
1842 if (HAS_PROCMETH_P (deactivate_process))
1843 usid = PROCMETH (deactivate_process, (p));
1845 usid = event_stream_delete_stream_pair (p->pipe_instream,
1848 if (usid != USID_DONTHASH)
1849 remhash ((CONST void*)usid, usid_to_process);
1851 p->pipe_instream = Qnil;
1852 p->pipe_outstream = Qnil;
1854 p->coding_instream = Qnil;
1855 p->coding_outstream = Qnil;
1860 remove_process (Lisp_Object proc)
1862 Vprocess_list = delq_no_quit (proc, Vprocess_list);
1863 Fset_marker (XPROCESS (proc)->mark, Qnil, Qnil);
1865 deactivate_process (proc);
1868 DEFUN ("delete-process", Fdelete_process, 1, 1, 0, /*
1869 Delete PROCESS: kill it and forget about it immediately.
1870 PROCESS may be a process or the name of one, or a buffer name.
1874 /* This function can GC */
1875 struct Lisp_Process *p;
1876 proc = get_process (proc);
1877 p = XPROCESS (proc);
1878 if (network_connection_p (proc))
1880 p->status_symbol = Qexit;
1886 else if (!NILP(p->pipe_instream))
1888 Fkill_process (proc, Qnil);
1889 /* Do this now, since remove_process will make sigchld_handler do nothing. */
1890 p->status_symbol = Qsignal;
1891 p->exit_code = SIGKILL;
1897 remove_process (proc);
1901 /* Kill all processes associated with `buffer'.
1902 If `buffer' is nil, kill all processes */
1905 kill_buffer_processes (Lisp_Object buffer)
1909 for (tail = Vprocess_list; CONSP (tail);
1912 Lisp_Object proc = XCAR (tail);
1914 && (NILP (buffer) || EQ (XPROCESS (proc)->buffer, buffer)))
1916 if (network_connection_p (proc))
1917 Fdelete_process (proc);
1918 else if (!NILP (XPROCESS (proc)->pipe_instream))
1919 process_send_signal (proc, SIGHUP, 0, 1);
1924 DEFUN ("process-kill-without-query", Fprocess_kill_without_query, 1, 2, 0, /*
1925 Say no query needed if PROCESS is running when Emacs is exited.
1926 Optional second argument if non-nil says to require a query.
1927 Value is t if a query was formerly required.
1929 (proc, require_query_p))
1933 CHECK_PROCESS (proc);
1934 tem = XPROCESS (proc)->kill_without_query;
1935 XPROCESS (proc)->kill_without_query = NILP (require_query_p);
1937 return tem ? Qnil : Qt;
1940 DEFUN ("process-kill-without-query-p", Fprocess_kill_without_query_p, 1, 1, 0, /*
1941 Whether PROC will be killed without query if running when emacs is exited.
1945 CHECK_PROCESS (proc);
1946 return XPROCESS (proc)->kill_without_query ? Qt : Qnil;
1950 /* This is not named init_process in order to avoid a conflict with NS 3.3 */
1952 init_xemacs_process (void)
1954 MAYBE_PROCMETH (init_process, ());
1956 Vprocess_list = Qnil;
1958 if (usid_to_process)
1959 clrhash (usid_to_process);
1961 usid_to_process = make_hash_table (32);
1966 xxDEFUN ("process-connection", Fprocess_connection, 0, 1, 0, /*
1967 Return the connection type of `PROCESS'. This can be nil (pipe),
1968 t or pty (pty) or stream (socket connection).
1972 return XPROCESS (process)->type;
1978 syms_of_process (void)
1980 defsymbol (&Qprocessp, "processp");
1981 defsymbol (&Qrun, "run");
1982 defsymbol (&Qstop, "stop");
1983 defsymbol (&Qopen, "open");
1984 defsymbol (&Qclosed, "closed");
1986 defsymbol (&Qtcp, "tcp");
1987 defsymbol (&Qudp, "udp");
1989 #ifdef HAVE_MULTICAST
1990 defsymbol(&Qmulticast, "multicast"); /* Used for occasional warnings */
1993 DEFSUBR (Fprocessp);
1994 DEFSUBR (Fget_process);
1995 DEFSUBR (Fget_buffer_process);
1996 DEFSUBR (Fdelete_process);
1997 DEFSUBR (Fprocess_status);
1998 DEFSUBR (Fprocess_exit_status);
1999 DEFSUBR (Fprocess_id);
2000 DEFSUBR (Fprocess_name);
2001 DEFSUBR (Fprocess_tty_name);
2002 DEFSUBR (Fprocess_command);
2003 DEFSUBR (Fset_process_buffer);
2004 DEFSUBR (Fprocess_buffer);
2005 DEFSUBR (Fprocess_mark);
2006 DEFSUBR (Fset_process_filter);
2007 DEFSUBR (Fprocess_filter);
2008 DEFSUBR (Fset_process_window_size);
2009 DEFSUBR (Fset_process_sentinel);
2010 DEFSUBR (Fprocess_sentinel);
2011 DEFSUBR (Fprocess_kill_without_query);
2012 DEFSUBR (Fprocess_kill_without_query_p);
2013 DEFSUBR (Fprocess_list);
2014 DEFSUBR (Fstart_process_internal);
2016 DEFSUBR (Fopen_network_stream_internal);
2017 #ifdef HAVE_MULTICAST
2018 DEFSUBR (Fopen_multicast_group_internal);
2019 #endif /* HAVE_MULTICAST */
2020 #endif /* HAVE_SOCKETS */
2021 DEFSUBR (Fprocess_send_region);
2022 DEFSUBR (Fprocess_send_string);
2023 DEFSUBR (Finterrupt_process);
2024 DEFSUBR (Fkill_process);
2025 DEFSUBR (Fquit_process);
2026 DEFSUBR (Fstop_process);
2027 DEFSUBR (Fcontinue_process);
2028 DEFSUBR (Fprocess_send_eof);
2029 DEFSUBR (Fsignal_process);
2030 /* DEFSUBR (Fprocess_connection); */
2032 DEFSUBR (Fprocess_input_coding_system);
2033 DEFSUBR (Fprocess_output_coding_system);
2034 DEFSUBR (Fset_process_input_coding_system);
2035 DEFSUBR (Fset_process_output_coding_system);
2036 DEFSUBR (Fprocess_coding_system);
2037 DEFSUBR (Fset_process_coding_system);
2038 #endif /* FILE_CODING */
2042 vars_of_process (void)
2044 Fprovide (intern ("subprocesses"));
2046 Fprovide (intern ("network-streams"));
2047 #ifdef HAVE_MULTICAST
2048 Fprovide (intern ("multicast"));
2049 #endif /* HAVE_MULTICAST */
2050 #endif /* HAVE_SOCKETS */
2051 staticpro (&Vprocess_list);
2053 DEFVAR_BOOL ("delete-exited-processes", &delete_exited_processes /*
2054 *Non-nil means delete processes immediately when they exit.
2055 nil means don't delete them until `list-processes' is run.
2058 delete_exited_processes = 1;
2060 DEFVAR_LISP ("process-connection-type", &Vprocess_connection_type /*
2061 Control type of device used to communicate with subprocesses.
2062 Values are nil to use a pipe, or t or `pty' to use a pty.
2063 The value has no effect if the system has no ptys or if all ptys are busy:
2064 then a pipe is used in any case.
2065 The value takes effect when `start-process' is called.
2067 Vprocess_connection_type = Qt;
2069 DEFVAR_BOOL ("windowed-process-io", &windowed_process_io /*
2070 Enables input/output on standard handles of a windowed process.
2071 When this variable is nil (the default), XEmacs does not attempt to read
2072 standard output handle of a windowed process. Instead, the process is
2073 immediately marked as exited immediately upon successful launching. This is
2074 done because normal windowed processes do not use standard I/O, as they are
2075 not connected to any console.
2077 When launching a specially crafted windowed process, which expects to be
2078 launched by XEmacs, or by other program which pipes its standard input and
2079 output, this variable must be set to non-nil, in which case XEmacs will
2080 treat this process just like a console process.
2082 NOTE: You should never set this variable, only bind it.
2084 Only Windows processes can be "windowed" or "console". This variable has no
2085 effect on UNIX processes, because all UNIX processes are "console".
2087 windowed_process_io = 0;
2089 #ifdef PROCESS_IO_BLOCKING
2090 DEFVAR_LISP ("network-stream-blocking-port-list", &network_stream_blocking_port_list /*
2091 List of port numbers or port names to set a blocking I/O mode with connection.
2092 Nil value means to set a default(non-blocking) I/O mode.
2093 The value takes effect when `open-network-stream-internal' is called.
2095 network_stream_blocking_port_list = Qnil;
2096 #endif /* PROCESS_IO_BLOCKING */
2099 #endif /* not NO_SUBPROCESSES */