comparison src/process.c @ 89943:4c90ffeb71c5

Revision: miles@gnu.org--gnu-2004/emacs--unicode--0--patch-15 Merge from emacs--cvs-trunk--0 Patches applied: * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-218 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-220 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-221 Restore deleted tagline in etc/TUTORIAL.ru * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-222 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-228 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-229 Remove TeX output files from the archive * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-230 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-247 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-248 src/lisp.h (CYCLE_CHECK): Macro moved from xfaces.c * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-249 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-256 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-258 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-263 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-264 Update from CVS: lispref/display.texi: emacs -> Emacs. * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-265 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-274 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-275 Update from CVS: man/makefile.w32-in: Revert last change * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-276 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-295 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-296 Allow restarting an existing debugger session that's exited * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-297 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-299 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-300 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-327 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-328 Update from CVS: src/.gdbinit (xsymbol): Fix last change. * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-329 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-344 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-345 Tweak source regexps so that building in place won't cause problems * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-346 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-351 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-352 Update from CVS: lisp/flymake.el: New file. * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-353 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-361 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-362 Support " [...]" style defaults in minibuffer-electric-default-mode * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-363 (read-number): Use canonical format for default in prompt. * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-364 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-367 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-368 Improve display-supports-face-attributes-p on non-ttys * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-369 Rewrite face-differs-from-default-p * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-370 Move `display-supports-face-attributes-p' entirely into C code * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-371 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-372 Simplify face-differs-from-default-p; don't consider :stipple. * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-373 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-374 (tty_supports_face_attributes_p): Ensure attributes differ from default * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-375 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-376 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-377 (Fdisplay_supports_face_attributes_p): Work around bootstrapping problem * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-378 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-380 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-381 Face merging cleanups * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-382 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-384 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-385 src/xfaces.c (push_named_merge_point): Return 0 if a cycle is detected * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-386 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-395 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-396 Tweak arch tagging to make build/install-in-place less annoying * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-397 Work around vc-arch problems when building eshell * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-398 Tweak permissions * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-399 Tweak directory permissions * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-400 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-401 More build-in-place tweaking of arch tagging * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-402 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-403 Yet more build-in-place tweaking of arch tagging * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-404 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-409 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-410 Make sure image types are initialized for lookup too * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-411 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-416 Update from CVS
author Miles Bader <miles@gnu.org>
date Mon, 28 Jun 2004 07:56:49 +0000
parents ab6b6e8cffe6 5839db7619ca
children b9eee0a7bef5
comparison
equal deleted inserted replaced
89942:9cb747ae49af 89943:4c90ffeb71c5
443 } 443 }
444 } 444 }
445 445
446 /* Return a string describing a process status list. */ 446 /* Return a string describing a process status list. */
447 447
448 Lisp_Object 448 static Lisp_Object
449 status_message (status) 449 status_message (p)
450 Lisp_Object status; 450 struct Lisp_Process *p;
451 { 451 {
452 Lisp_Object status = p->status;
452 Lisp_Object symbol; 453 Lisp_Object symbol;
453 int code, coredump; 454 int code, coredump;
454 Lisp_Object string, string2; 455 Lisp_Object string, string2;
455 456
456 decode_status (status, &symbol, &code, &coredump); 457 decode_status (status, &symbol, &code, &coredump);
467 SSET (string, 0, DOWNCASE (SREF (string, 0))); 468 SSET (string, 0, DOWNCASE (SREF (string, 0)));
468 return concat2 (string, string2); 469 return concat2 (string, string2);
469 } 470 }
470 else if (EQ (symbol, Qexit)) 471 else if (EQ (symbol, Qexit))
471 { 472 {
473 if (NETCONN1_P (p))
474 return build_string (code == 0 ? "deleted\n" : "connection broken by remote peer\n");
472 if (code == 0) 475 if (code == 0)
473 return build_string ("finished\n"); 476 return build_string ("finished\n");
474 string = Fnumber_to_string (make_number (code)); 477 string = Fnumber_to_string (make_number (code));
475 string2 = build_string (coredump ? " (core dumped)\n" : "\n"); 478 string2 = build_string (coredump ? " (core dumped)\n" : "\n");
476 return concat3 (build_string ("exited abnormally with code "), 479 return concat3 (build_string ("exited abnormally with code "),
530 the usual sequence - for example, on HP9000/S700 systems, there 533 the usual sequence - for example, on HP9000/S700 systems, there
531 are no pseudoterminals with names ending in 'f'. So we wait for 534 are no pseudoterminals with names ending in 'f'. So we wait for
532 three failures in a row before deciding that we've reached the 535 three failures in a row before deciding that we've reached the
533 end of the ptys. */ 536 end of the ptys. */
534 int failed_count = 0; 537 int failed_count = 0;
535 538
536 if (stat (pty_name, &stb) < 0) 539 if (stat (pty_name, &stb) < 0)
537 { 540 {
538 failed_count++; 541 failed_count++;
539 if (failed_count >= 3) 542 if (failed_count >= 3)
540 return -1; 543 return -1;
763 XPROCESS (process)->raw_status_high = Qnil; 766 XPROCESS (process)->raw_status_high = Qnil;
764 if (NETCONN_P (process)) 767 if (NETCONN_P (process))
765 { 768 {
766 XPROCESS (process)->status = Fcons (Qexit, Fcons (make_number (0), Qnil)); 769 XPROCESS (process)->status = Fcons (Qexit, Fcons (make_number (0), Qnil));
767 XSETINT (XPROCESS (process)->tick, ++process_tick); 770 XSETINT (XPROCESS (process)->tick, ++process_tick);
771 status_notify ();
768 } 772 }
769 else if (XINT (XPROCESS (process)->infd) >= 0) 773 else if (XINT (XPROCESS (process)->infd) >= 0)
770 { 774 {
771 Fkill_process (process, Qnil); 775 Fkill_process (process, Qnil);
772 /* Do this now, since remove_process will make sigchld_handler do nothing. */ 776 /* Do this now, since remove_process will make sigchld_handler do nothing. */
841 return make_number (0); 845 return make_number (0);
842 } 846 }
843 847
844 DEFUN ("process-id", Fprocess_id, Sprocess_id, 1, 1, 0, 848 DEFUN ("process-id", Fprocess_id, Sprocess_id, 1, 1, 0,
845 doc: /* Return the process id of PROCESS. 849 doc: /* Return the process id of PROCESS.
846 This is the pid of the Unix process which PROCESS uses or talks to. 850 This is the pid of the external process which PROCESS uses or talks to.
847 For a network connection, this value is nil. */) 851 For a network connection, this value is nil. */)
848 (process) 852 (process)
849 register Lisp_Object process; 853 register Lisp_Object process;
850 { 854 {
851 CHECK_PROCESS (process); 855 CHECK_PROCESS (process);
1080 1084
1081 DEFUN ("set-process-query-on-exit-flag", 1085 DEFUN ("set-process-query-on-exit-flag",
1082 Fset_process_query_on_exit_flag, Sset_process_query_on_exit_flag, 1086 Fset_process_query_on_exit_flag, Sset_process_query_on_exit_flag,
1083 2, 2, 0, 1087 2, 2, 0,
1084 doc: /* Specify if query is needed for PROCESS when Emacs is exited. 1088 doc: /* Specify if query is needed for PROCESS when Emacs is exited.
1085 If the second argument FLAG is non-nil, emacs will query the user before 1089 If the second argument FLAG is non-nil, Emacs will query the user before
1086 exiting if PROCESS is running. */) 1090 exiting if PROCESS is running. */)
1087 (process, flag) 1091 (process, flag)
1088 register Lisp_Object process, flag; 1092 register Lisp_Object process, flag;
1089 { 1093 {
1090 CHECK_PROCESS (process); 1094 CHECK_PROCESS (process);
1093 } 1097 }
1094 1098
1095 DEFUN ("process-query-on-exit-flag", 1099 DEFUN ("process-query-on-exit-flag",
1096 Fprocess_query_on_exit_flag, Sprocess_query_on_exit_flag, 1100 Fprocess_query_on_exit_flag, Sprocess_query_on_exit_flag,
1097 1, 1, 0, 1101 1, 1, 0,
1098 doc: /* Return the current value of query on exit flag for PROCESS. */) 1102 doc: /* Return the current value of query-on-exit flag for PROCESS. */)
1099 (process) 1103 (process)
1100 register Lisp_Object process; 1104 register Lisp_Object process;
1101 { 1105 {
1102 CHECK_PROCESS (process); 1106 CHECK_PROCESS (process);
1103 return Fnull (XPROCESS (process)->kill_without_query); 1107 return Fnull (XPROCESS (process)->kill_without_query);
1456 static Lisp_Object start_process_unwind (); 1460 static Lisp_Object start_process_unwind ();
1457 1461
1458 DEFUN ("start-process", Fstart_process, Sstart_process, 3, MANY, 0, 1462 DEFUN ("start-process", Fstart_process, Sstart_process, 3, MANY, 0,
1459 doc: /* Start a program in a subprocess. Return the process object for it. 1463 doc: /* Start a program in a subprocess. Return the process object for it.
1460 NAME is name for process. It is modified if necessary to make it unique. 1464 NAME is name for process. It is modified if necessary to make it unique.
1461 BUFFER is the buffer or (buffer-name) to associate with the process. 1465 BUFFER is the buffer (or buffer name) to associate with the process.
1462 Process output goes at end of that buffer, unless you specify 1466 Process output goes at end of that buffer, unless you specify
1463 an output stream or filter function to handle the output. 1467 an output stream or filter function to handle the output.
1464 BUFFER may be also nil, meaning that this process is not associated 1468 BUFFER may be also nil, meaning that this process is not associated
1465 with any buffer. 1469 with any buffer.
1466 Third arg is program file name. It is searched for in PATH. 1470 PROGRAM is the program file name. It is searched for in PATH.
1467 Remaining arguments are strings to give program as arguments. 1471 Remaining arguments are strings to give program as arguments.
1468 1472
1469 usage: (start-process NAME BUFFER PROGRAM &rest PROGRAM-ARGS) */) 1473 usage: (start-process NAME BUFFER PROGRAM &rest PROGRAM-ARGS) */)
1470 (nargs, args) 1474 (nargs, args)
1471 int nargs; 1475 int nargs;
2607 sentinel function will be called with second arg matching "open" (if 2611 sentinel function will be called with second arg matching "open" (if
2608 successful) or "failed" when the connect completes. Default is to use 2612 successful) or "failed" when the connect completes. Default is to use
2609 a blocking connect (i.e. wait) for stream type connections. 2613 a blocking connect (i.e. wait) for stream type connections.
2610 2614
2611 :noquery BOOL -- Query the user unless BOOL is non-nil, and process is 2615 :noquery BOOL -- Query the user unless BOOL is non-nil, and process is
2612 running when emacs is exited. 2616 running when Emacs is exited.
2613 2617
2614 :stop BOOL -- Start process in the `stopped' state if BOOL non-nil. 2618 :stop BOOL -- Start process in the `stopped' state if BOOL non-nil.
2615 In the stopped state, a server process does not accept new 2619 In the stopped state, a server process does not accept new
2616 connections, and a client process does not handle incoming traffic. 2620 connections, and a client process does not handle incoming traffic.
2617 The stopped state is cleared by `continue-process' and set by 2621 The stopped state is cleared by `continue-process' and set by
2953 if (!NILP (host)) 2957 if (!NILP (host))
2954 { 2958 {
2955 struct hostent *host_info_ptr; 2959 struct hostent *host_info_ptr;
2956 2960
2957 /* gethostbyname may fail with TRY_AGAIN, but we don't honour that, 2961 /* gethostbyname may fail with TRY_AGAIN, but we don't honour that,
2958 as it may `hang' emacs for a very long time. */ 2962 as it may `hang' Emacs for a very long time. */
2959 immediate_quit = 1; 2963 immediate_quit = 1;
2960 QUIT; 2964 QUIT;
2961 host_info_ptr = gethostbyname (SDATA (host)); 2965 host_info_ptr = gethostbyname (SDATA (host));
2962 immediate_quit = 0; 2966 immediate_quit = 0;
2963 2967
3614 return any ? res : Qnil; 3618 return any ? res : Qnil;
3615 } 3619 }
3616 #endif 3620 #endif
3617 #endif /* HAVE_SOCKETS */ 3621 #endif /* HAVE_SOCKETS */
3618 3622
3623 /* Turn off input and output for process PROC. */
3624
3619 void 3625 void
3620 deactivate_process (proc) 3626 deactivate_process (proc)
3621 Lisp_Object proc; 3627 Lisp_Object proc;
3622 { 3628 {
3623 register int inchannel, outchannel; 3629 register int inchannel, outchannel;
3633 process_output_delay_count = 0; 3639 process_output_delay_count = 0;
3634 XSETINT (p->read_output_delay, 0); 3640 XSETINT (p->read_output_delay, 0);
3635 p->read_output_skip = Qnil; 3641 p->read_output_skip = Qnil;
3636 } 3642 }
3637 #endif 3643 #endif
3638 3644
3639 if (inchannel >= 0) 3645 if (inchannel >= 0)
3640 { 3646 {
3641 /* Beware SIGCHLD hereabouts. */ 3647 /* Beware SIGCHLD hereabouts. */
3642 flush_pending_output (inchannel); 3648 flush_pending_output (inchannel);
3643 #ifdef VMS 3649 #ifdef VMS
3963 build_string ("\n"))); 3969 build_string ("\n")));
3964 } 3970 }
3965 3971
3966 /* This variable is different from waiting_for_input in keyboard.c. 3972 /* This variable is different from waiting_for_input in keyboard.c.
3967 It is used to communicate to a lisp process-filter/sentinel (via the 3973 It is used to communicate to a lisp process-filter/sentinel (via the
3968 function Fwaiting_for_user_input_p below) whether emacs was waiting 3974 function Fwaiting_for_user_input_p below) whether Emacs was waiting
3969 for user-input when that process-filter was called. 3975 for user-input when that process-filter was called.
3970 waiting_for_input cannot be used as that is by definition 0 when 3976 waiting_for_input cannot be used as that is by definition 0 when
3971 lisp code is being evalled. 3977 lisp code is being evalled.
3972 This is also used in record_asynch_buffer_change. 3978 This is also used in record_asynch_buffer_change.
3973 For that purpose, this must be 0 3979 For that purpose, this must be 0
4017 int time_limit, microsecs; 4023 int time_limit, microsecs;
4018 Lisp_Object read_kbd; 4024 Lisp_Object read_kbd;
4019 int do_display; 4025 int do_display;
4020 { 4026 {
4021 register int channel, nfds; 4027 register int channel, nfds;
4022 static SELECT_TYPE Available; 4028 SELECT_TYPE Available;
4023 static SELECT_TYPE Connecting; 4029 SELECT_TYPE Connecting;
4024 int check_connect, check_delay, no_avail; 4030 int check_connect, check_delay, no_avail;
4025 int xerrno; 4031 int xerrno;
4026 Lisp_Object proc; 4032 Lisp_Object proc;
4027 EMACS_TIME timeout, end_time; 4033 EMACS_TIME timeout, end_time;
4028 int wait_channel = -1; 4034 int wait_channel = -1;
4029 struct Lisp_Process *wait_proc = 0; 4035 struct Lisp_Process *wait_proc = 0;
4030 int got_some_input = 0; 4036 int got_some_input = 0;
4031 /* Either nil or a cons cell, the car of which is of interest and 4037 /* Either nil or a cons cell, the car of which is of interest and
4032 may be changed outside of this routine. */ 4038 may be changed outside of this routine. */
4033 Lisp_Object wait_for_cell = Qnil; 4039 Lisp_Object wait_for_cell = Qnil;
4040 int saved_waiting_for_user_input_p = waiting_for_user_input_p;
4034 4041
4035 FD_ZERO (&Available); 4042 FD_ZERO (&Available);
4036 FD_ZERO (&Connecting); 4043 FD_ZERO (&Connecting);
4037 4044
4038 /* If read_kbd is a process to watch, set wait_proc and wait_channel 4045 /* If read_kbd is a process to watch, set wait_proc and wait_channel
4579 XPROCESS (proc)->status 4586 XPROCESS (proc)->status
4580 = Fcons (Qexit, Fcons (make_number (256), Qnil)); 4587 = Fcons (Qexit, Fcons (make_number (256), Qnil));
4581 } 4588 }
4582 } 4589 }
4583 #ifdef NON_BLOCKING_CONNECT 4590 #ifdef NON_BLOCKING_CONNECT
4584 if (check_connect && FD_ISSET (channel, &Connecting)) 4591 if (check_connect && FD_ISSET (channel, &Connecting)
4592 && FD_ISSET (channel, &connect_wait_mask))
4585 { 4593 {
4586 struct Lisp_Process *p; 4594 struct Lisp_Process *p;
4587 4595
4588 FD_CLR (channel, &connect_wait_mask); 4596 FD_CLR (channel, &connect_wait_mask);
4589 if (--num_pending_connects < 0) 4597 if (--num_pending_connects < 0)
4642 } 4650 }
4643 #endif /* NON_BLOCKING_CONNECT */ 4651 #endif /* NON_BLOCKING_CONNECT */
4644 } /* end for each file descriptor */ 4652 } /* end for each file descriptor */
4645 } /* end while exit conditions not met */ 4653 } /* end while exit conditions not met */
4646 4654
4647 waiting_for_user_input_p = 0; 4655 waiting_for_user_input_p = saved_waiting_for_user_input_p;
4648 4656
4649 /* If calling from keyboard input, do not quit 4657 /* If calling from keyboard input, do not quit
4650 since we want to return C-g as an input character. 4658 since we want to return C-g as an input character.
4651 Otherwise, do pending quit if requested. */ 4659 Otherwise, do pending quit if requested. */
4652 if (XINT (read_kbd) >= 0) 4660 if (XINT (read_kbd) >= 0)
4689 4697
4690 /* Read pending output from the process channel, 4698 /* Read pending output from the process channel,
4691 starting with our buffered-ahead character if we have one. 4699 starting with our buffered-ahead character if we have one.
4692 Yield number of decoded characters read. 4700 Yield number of decoded characters read.
4693 4701
4694 This function reads at most 1024 characters. 4702 This function reads at most 4096 characters.
4695 If you want to read all available subprocess output, 4703 If you want to read all available subprocess output,
4696 you must call it repeatedly until it returns zero. 4704 you must call it repeatedly until it returns zero.
4697 4705
4698 The characters read are decoded according to PROC's coding-system 4706 The characters read are decoded according to PROC's coding-system
4699 for decoding. */ 4707 for decoding. */
4709 register struct buffer *old = current_buffer; 4717 register struct buffer *old = current_buffer;
4710 register struct Lisp_Process *p = XPROCESS (proc); 4718 register struct Lisp_Process *p = XPROCESS (proc);
4711 register int opoint; 4719 register int opoint;
4712 struct coding_system *coding = proc_decode_coding_system[channel]; 4720 struct coding_system *coding = proc_decode_coding_system[channel];
4713 int carryover = XINT (p->decoding_carryover); 4721 int carryover = XINT (p->decoding_carryover);
4714 int readmax = 1024; 4722 int readmax = 4096;
4715 4723
4716 #ifdef VMS 4724 #ifdef VMS
4717 VMS_PROC_STUFF *vs, *get_vms_process_pointer(); 4725 VMS_PROC_STUFF *vs, *get_vms_process_pointer();
4718 4726
4719 vs = get_vms_process_pointer (p->pid); 4727 vs = get_vms_process_pointer (p->pid);
4741 chars = (char *) alloca (nbytes + carryover); 4749 chars = (char *) alloca (nbytes + carryover);
4742 bcopy (SDATA (p->decoding_buf), buf, carryover); 4750 bcopy (SDATA (p->decoding_buf), buf, carryover);
4743 bcopy (vs->inputBuffer, chars + carryover, nbytes); 4751 bcopy (vs->inputBuffer, chars + carryover, nbytes);
4744 } 4752 }
4745 #else /* not VMS */ 4753 #else /* not VMS */
4746
4747 #ifdef DATAGRAM_SOCKETS
4748 /* A datagram is one packet; allow at least 1500+ bytes of data
4749 corresponding to the typical Ethernet frame size. */
4750 if (DATAGRAM_CHAN_P (channel))
4751 {
4752 /* carryover = 0; */ /* Does carryover make sense for datagrams? */
4753 readmax += 1024;
4754 }
4755 #endif
4756 4754
4757 chars = (char *) alloca (carryover + readmax); 4755 chars = (char *) alloca (carryover + readmax);
4758 if (carryover) 4756 if (carryover)
4759 /* See the comment above. */ 4757 /* See the comment above. */
4760 bcopy (SDATA (p->decoding_buf), chars, carryover); 4758 bcopy (SDATA (p->decoding_buf), chars, carryover);
5067 return nbytes; 5065 return nbytes;
5068 } 5066 }
5069 5067
5070 DEFUN ("waiting-for-user-input-p", Fwaiting_for_user_input_p, Swaiting_for_user_input_p, 5068 DEFUN ("waiting-for-user-input-p", Fwaiting_for_user_input_p, Swaiting_for_user_input_p,
5071 0, 0, 0, 5069 0, 0, 0,
5072 doc: /* Returns non-nil if emacs is waiting for input from the user. 5070 doc: /* Returns non-nil if Emacs is waiting for input from the user.
5073 This is intended for use by asynchronous process output filters and sentinels. */) 5071 This is intended for use by asynchronous process output filters and sentinels. */)
5074 () 5072 ()
5075 { 5073 {
5076 return (waiting_for_user_input_p ? Qt : Qnil); 5074 return (waiting_for_user_input_p ? Qt : Qnil);
5077 } 5075 }
5444 emacs_get_tty_pgrp (p) 5442 emacs_get_tty_pgrp (p)
5445 struct Lisp_Process *p; 5443 struct Lisp_Process *p;
5446 { 5444 {
5447 int gid = -1; 5445 int gid = -1;
5448 5446
5449 #ifdef TIOCGPGRP 5447 #ifdef TIOCGPGRP
5450 if (ioctl (XINT (p->infd), TIOCGPGRP, &gid) == -1 && ! NILP (p->tty_name)) 5448 if (ioctl (XINT (p->infd), TIOCGPGRP, &gid) == -1 && ! NILP (p->tty_name))
5451 { 5449 {
5452 int fd; 5450 int fd;
5453 /* Some OS:es (Solaris 8/9) does not allow TIOCGPGRP from the 5451 /* Some OS:es (Solaris 8/9) does not allow TIOCGPGRP from the
5454 master side. Try the slave side. */ 5452 master side. Try the slave side. */
5641 But, TIOCGPGRP does not work on E50 ;-P works fine on E60" 5639 But, TIOCGPGRP does not work on E50 ;-P works fine on E60"
5642 His patch indicates that if TIOCGPGRP returns an error, then 5640 His patch indicates that if TIOCGPGRP returns an error, then
5643 we should just assume that p->pid is also the process group id. */ 5641 we should just assume that p->pid is also the process group id. */
5644 5642
5645 gid = emacs_get_tty_pgrp (p); 5643 gid = emacs_get_tty_pgrp (p);
5646 5644
5647 if (gid == -1) 5645 if (gid == -1)
5648 /* If we can't get the information, assume 5646 /* If we can't get the information, assume
5649 the shell owns the tty. */ 5647 the shell owns the tty. */
5650 gid = XFASTINT (p->pid); 5648 gid = XFASTINT (p->pid);
5651 5649
5724 } 5722 }
5725 5723
5726 DEFUN ("interrupt-process", Finterrupt_process, Sinterrupt_process, 0, 2, 0, 5724 DEFUN ("interrupt-process", Finterrupt_process, Sinterrupt_process, 0, 2, 0,
5727 doc: /* Interrupt process PROCESS. 5725 doc: /* Interrupt process PROCESS.
5728 PROCESS may be a process, a buffer, or the name of a process or buffer. 5726 PROCESS may be a process, a buffer, or the name of a process or buffer.
5729 nil or no arg means current buffer's process. 5727 No arg or nil means current buffer's process.
5730 Second arg CURRENT-GROUP non-nil means send signal to 5728 Second arg CURRENT-GROUP non-nil means send signal to
5731 the current process-group of the process's controlling terminal 5729 the current process-group of the process's controlling terminal
5732 rather than to the process's own process group. 5730 rather than to the process's own process group.
5733 If the process is a shell, this means interrupt current subjob 5731 If the process is a shell, this means interrupt current subjob
5734 rather than the shell. 5732 rather than the shell.
6383 buffer = p->buffer; 6381 buffer = p->buffer;
6384 6382
6385 /* Get the text to use for the message. */ 6383 /* Get the text to use for the message. */
6386 if (!NILP (p->raw_status_low)) 6384 if (!NILP (p->raw_status_low))
6387 update_status (p); 6385 update_status (p);
6388 msg = status_message (p->status); 6386 msg = status_message (p);
6389 6387
6390 /* If process is terminated, deactivate it or delete it. */ 6388 /* If process is terminated, deactivate it or delete it. */
6391 symbol = p->status; 6389 symbol = p->status;
6392 if (CONSP (p->status)) 6390 if (CONSP (p->status))
6393 symbol = XCAR (p->status); 6391 symbol = XCAR (p->status);
6469 DEFUN ("set-process-coding-system", Fset_process_coding_system, 6467 DEFUN ("set-process-coding-system", Fset_process_coding_system,
6470 Sset_process_coding_system, 1, 3, 0, 6468 Sset_process_coding_system, 1, 3, 0,
6471 doc: /* Set coding systems of PROCESS to DECODING and ENCODING. 6469 doc: /* Set coding systems of PROCESS to DECODING and ENCODING.
6472 DECODING will be used to decode subprocess output and ENCODING to 6470 DECODING will be used to decode subprocess output and ENCODING to
6473 encode subprocess input. */) 6471 encode subprocess input. */)
6474 (proc, decoding, encoding) 6472 (process, decoding, encoding)
6475 register Lisp_Object proc, decoding, encoding; 6473 register Lisp_Object process, decoding, encoding;
6476 { 6474 {
6477 register struct Lisp_Process *p; 6475 register struct Lisp_Process *p;
6478 6476
6479 CHECK_PROCESS (proc); 6477 CHECK_PROCESS (process);
6480 p = XPROCESS (proc); 6478 p = XPROCESS (process);
6481 if (XINT (p->infd) < 0) 6479 if (XINT (p->infd) < 0)
6482 error ("Input file descriptor of %s closed", SDATA (p->name)); 6480 error ("Input file descriptor of %s closed", SDATA (p->name));
6483 if (XINT (p->outfd) < 0) 6481 if (XINT (p->outfd) < 0)
6484 error ("Output file descriptor of %s closed", SDATA (p->name)); 6482 error ("Output file descriptor of %s closed", SDATA (p->name));
6485 Fcheck_coding_system (decoding); 6483 Fcheck_coding_system (decoding);
6486 Fcheck_coding_system (encoding); 6484 Fcheck_coding_system (encoding);
6487 6485
6488 p->decode_coding_system = decoding; 6486 p->decode_coding_system = decoding;
6489 p->encode_coding_system = encoding; 6487 p->encode_coding_system = encoding;
6490 setup_process_coding_systems (proc); 6488 setup_process_coding_systems (process);
6491 6489
6492 return Qnil; 6490 return Qnil;
6493 } 6491 }
6494 6492
6495 DEFUN ("process-coding-system", 6493 DEFUN ("process-coding-system",
6496 Fprocess_coding_system, Sprocess_coding_system, 1, 1, 0, 6494 Fprocess_coding_system, Sprocess_coding_system, 1, 1, 0,
6497 doc: /* Return a cons of coding systems for decoding and encoding of PROCESS. */) 6495 doc: /* Return a cons of coding systems for decoding and encoding of PROCESS. */)
6498 (proc) 6496 (process)
6499 register Lisp_Object proc; 6497 register Lisp_Object process;
6500 { 6498 {
6501 CHECK_PROCESS (proc); 6499 CHECK_PROCESS (process);
6502 return Fcons (XPROCESS (proc)->decode_coding_system, 6500 return Fcons (XPROCESS (process)->decode_coding_system,
6503 XPROCESS (proc)->encode_coding_system); 6501 XPROCESS (process)->encode_coding_system);
6504 } 6502 }
6505 6503
6506 DEFUN ("set-process-filter-multibyte", Fset_process_filter_multibyte, 6504 DEFUN ("set-process-filter-multibyte", Fset_process_filter_multibyte,
6507 Sset_process_filter_multibyte, 2, 2, 0, 6505 Sset_process_filter_multibyte, 2, 2, 0,
6508 doc: /* Set multibyteness of the strings given to PROCESS's filter. 6506 doc: /* Set multibyteness of the strings given to PROCESS's filter.
6509 If FLAG is non-nil, the filter is given multibyte strings. 6507 If FLAG is non-nil, the filter is given multibyte strings.
6510 If FLAG is nil, the filter is given unibyte strings. In this case, 6508 If FLAG is nil, the filter is given unibyte strings. In this case,
6511 all character code conversion except for end-of-line conversion is 6509 all character code conversion except for end-of-line conversion is
6512 suppressed. */) 6510 suppressed. */)
6513 (proc, flag) 6511 (process, flag)
6514 Lisp_Object proc, flag; 6512 Lisp_Object process, flag;
6515 { 6513 {
6516 register struct Lisp_Process *p; 6514 register struct Lisp_Process *p;
6517 6515
6518 CHECK_PROCESS (proc); 6516 CHECK_PROCESS (process);
6519 p = XPROCESS (proc); 6517 p = XPROCESS (process);
6520 p->filter_multibyte = flag; 6518 p->filter_multibyte = flag;
6521 setup_process_coding_systems (proc); 6519 setup_process_coding_systems (process);
6522 6520
6523 return Qnil; 6521 return Qnil;
6524 } 6522 }
6525 6523
6526 DEFUN ("process-filter-multibyte-p", Fprocess_filter_multibyte_p, 6524 DEFUN ("process-filter-multibyte-p", Fprocess_filter_multibyte_p,
6527 Sprocess_filter_multibyte_p, 1, 1, 0, 6525 Sprocess_filter_multibyte_p, 1, 1, 0,
6528 doc: /* Return t if a multibyte string is given to PROCESS's filter.*/) 6526 doc: /* Return t if a multibyte string is given to PROCESS's filter.*/)
6529 (proc) 6527 (process)
6530 Lisp_Object proc; 6528 Lisp_Object process;
6531 { 6529 {
6532 register struct Lisp_Process *p; 6530 register struct Lisp_Process *p;
6533 6531
6534 CHECK_PROCESS (proc); 6532 CHECK_PROCESS (process);
6535 p = XPROCESS (proc); 6533 p = XPROCESS (process);
6536 6534
6537 return (NILP (p->filter_multibyte) ? Qnil : Qt); 6535 return (NILP (p->filter_multibyte) ? Qnil : Qt);
6538 } 6536 }
6539 6537
6540 6538
6751 Vprocess_connection_type = Qt; 6749 Vprocess_connection_type = Qt;
6752 6750
6753 #ifdef ADAPTIVE_READ_BUFFERING 6751 #ifdef ADAPTIVE_READ_BUFFERING
6754 DEFVAR_LISP ("process-adaptive-read-buffering", &Vprocess_adaptive_read_buffering, 6752 DEFVAR_LISP ("process-adaptive-read-buffering", &Vprocess_adaptive_read_buffering,
6755 doc: /* If non-nil, improve receive buffering by delaying after short reads. 6753 doc: /* If non-nil, improve receive buffering by delaying after short reads.
6756 On some systems, when emacs reads the output from a subprocess, the output data 6754 On some systems, when Emacs reads the output from a subprocess, the output data
6757 is read in very small blocks, potentially resulting in very poor performance. 6755 is read in very small blocks, potentially resulting in very poor performance.
6758 This behaviour can be remedied to some extent by setting this variable to a 6756 This behaviour can be remedied to some extent by setting this variable to a
6759 non-nil value, as it will automatically delay reading from such processes, to 6757 non-nil value, as it will automatically delay reading from such processes, to
6760 allowing them to produce more output before emacs tries to read it. 6758 allowing them to produce more output before Emacs tries to read it.
6761 If the value is t, the delay is reset after each write to the process; any other 6759 If the value is t, the delay is reset after each write to the process; any other
6762 non-nil value means that the delay is not reset on write. 6760 non-nil value means that the delay is not reset on write.
6763 The variable takes effect when `start-process' is called. */); 6761 The variable takes effect when `start-process' is called. */);
6764 Vprocess_adaptive_read_buffering = Qt; 6762 Vprocess_adaptive_read_buffering = Qt;
6765 #endif 6763 #endif