Mercurial > emacs
diff src/process.c @ 650:39f0e62a8511
*** empty log message ***
author | Jim Blandy <jimb@redhat.com> |
---|---|
date | Tue, 19 May 1992 05:22:52 +0000 |
parents | 70b112526394 |
children | 681c352bbf30 |
line wrap: on
line diff
--- a/src/process.c Tue May 19 02:05:47 1992 +0000 +++ b/src/process.c Tue May 19 05:22:52 1992 +0000 @@ -1587,10 +1587,11 @@ seconds = 0; } + if (NILP (proc)) + XFASTINT (proc) = 0; + return - (wait_reading_process_input (seconds, useconds, - (NILP (proc) - ? XPROCESS (get_process (proc)) : 0), 0) + (wait_reading_process_input (seconds, useconds, proc, 0) ? Qt : Qnil); } @@ -1610,14 +1611,14 @@ zero for no limit, or -1 means gobble data immediately available but don't wait for any. - read_kbd is: + read_kbd is a lisp value: 0 to ignore keyboard input, or 1 to return when input is available, or -1 means caller will actually read the input, so don't throw to the quit handler, or - a pointer to a struct Lisp_Process, meaning wait until something - arrives from that process. The return value is true iff we read - some input from that process. + a process object, meaning wait until something arrives from that + process. The return value is true iff we read some input from + that process. do_display != 0 means redisplay should be done to show subprocess output that arrives. @@ -1628,7 +1629,9 @@ Otherwise, return true iff we recieved input from any process. */ wait_reading_process_input (time_limit, microsecs, read_kbd, do_display) - int time_limit, microsecs, read_kbd, do_display; + int time_limit, microsecs; + Lisp_Object read_kbd; + int do_display; { register int channel, nfds, m; static SELECT_TYPE Available; @@ -1642,15 +1645,16 @@ FD_ZERO (&Available); - /* Detect when read_kbd is really the address of a Lisp_Process. */ - if (read_kbd > 10 || read_kbd < -1) + /* If read_kbd is a process to watch, set wait_proc and wait_channel + accordingly. */ + if (XTYPE (read_kbd) == Lisp_Process) { - wait_proc = (struct Lisp_Process *) read_kbd; + wait_proc = XPROCESS (read_kbd); wait_channel = XFASTINT (wait_proc->infd); - read_kbd = 0; + XFASTINT (read_kbd) = 0; } - waiting_for_user_input_p = read_kbd; + waiting_for_user_input_p = XINT (read_kbd); /* Since we may need to wait several times, compute the absolute time to return at. */ @@ -1666,7 +1670,7 @@ /* If calling from keyboard input, do not quit since we want to return C-g as an input character. Otherwise, do pending quit if requested. */ - if (read_kbd >= 0) + if (XINT (read_kbd) >= 0) QUIT; /* If status of something has changed, and no input is available, @@ -1710,13 +1714,13 @@ /* Cause C-g and alarm signals to take immediate action, and cause input available signals to zero out timeout */ - if (read_kbd < 0) + if (XINT (read_kbd) < 0) set_waiting_for_input (&timeout); /* Wait till there is something to do */ Available = input_wait_mask; - if (!read_kbd) + if (! XINT (read_kbd)) FD_CLR (0, &Available); /* If screen size has changed or the window is newly mapped, @@ -1726,7 +1730,7 @@ if (screen_garbaged) redisplay_preserve_echo_area (); - if (read_kbd && detect_input_pending ()) + if (XINT (read_kbd) && detect_input_pending ()) nfds = 0; else nfds = select (MAXDESC, &Available, 0, 0, &timeout); @@ -1779,7 +1783,7 @@ /* If there is any, return immediately to give it higher priority than subprocesses */ - if (read_kbd && detect_input_pending ()) + if (XINT (read_kbd) && detect_input_pending ()) break; #ifdef SIGIO @@ -1789,9 +1793,9 @@ but select says there is input. */ /* - if (read_kbd && interrupt_input && (Available & fileno (stdin))) + if (XINT (read_kbd) && interrupt_input && (Available & fileno (stdin))) */ - if (read_kbd && interrupt_input && (FD_ISSET (fileno (stdin), &Available))) + if (XINT (read_kbd) && interrupt_input && (FD_ISSET (fileno (stdin), &Available))) kill (0, SIGIO); #endif @@ -1810,7 +1814,7 @@ /* If checking input just got us a size-change event from X, obey it now if we should. */ - if (read_kbd) + if (XINT (read_kbd)) do_pending_window_change (); /* Check for data from a process or a command channel */ @@ -1921,7 +1925,7 @@ /* If calling from keyboard input, do not quit since we want to return C-g as an input character. Otherwise, do pending quit if requested. */ - if (read_kbd >= 0) + if (XINT (read_kbd) >= 0) { /* Prevent input_pending from remaining set if we quit. */ clear_input_pending (); @@ -2134,7 +2138,12 @@ /* Allow input from processes between bursts of sending. Otherwise things may get stopped up. */ if (len > 0) - wait_reading_process_input (-1, 0, 0, 0); + { + Lisp_Object zero; + + XFASTINT (zero) = 0; + wait_reading_process_input (-1, 0, zero, 0); + } } #endif else @@ -2901,7 +2910,7 @@ zero for no limit, or -1 means gobble data immediately available but don't wait for any. - read_kbd is: + read_kbd is a Lisp_Object: 0 to ignore keyboard input, or 1 to return when input is available, or -1 means caller will actually read the input, so don't throw to @@ -2912,14 +2921,13 @@ do_display != 0 means redisplay should be done to show subprocess output that arrives. This version of the function ignores it. - If read_kbd is a pointer to a struct Lisp_Process, then the - function returns true iff we received input from that process - before the timeout elapsed. - Otherwise, return true iff we recieved input from any process. */ + Return true iff we recieved input from any process. */ int wait_reading_process_input (time_limit, microsecs, read_kbd, do_display) - int time_limit, microsecs, read_kbd, do_display; + int time_limit, microsecs; + Lisp_Object read_kbd; + int do_display; { EMACS_TIME end_time, timeout, *timeout_p; int waitchannels; @@ -2952,12 +2960,12 @@ { int nfds; - waitchannels = read_kbd ? 1 : 0; + waitchannels = XINT (read_kbd) ? 1 : 0; /* If calling from keyboard input, do not quit since we want to return C-g as an input character. Otherwise, do pending quit if requested. */ - if (read_kbd >= 0) + if (XINT (read_kbd) >= 0) QUIT; if (timeout_p) @@ -2970,7 +2978,7 @@ /* Cause C-g and alarm signals to take immediate action, and cause input available signals to zero out timeout. */ - if (read_kbd < 0) + if (XINT (read_kbd) < 0) set_waiting_for_input (&timeout); /* If a screen has been newly mapped and needs updating, @@ -2978,7 +2986,7 @@ if (screen_garbaged) redisplay_preserve_echo_area (); - if (read_kbd && detect_input_pending ()) + if (XINT (read_kbd) && detect_input_pending ()) nfds = 0; else nfds = select (1, &waitchannels, 0, 0, timeout_p); @@ -3001,7 +3009,7 @@ /* System sometimes fails to deliver SIGIO. */ kill (getpid (), SIGIO); #endif - if (read_kbd && interrupt_input && (waitchannels & 1)) + if (XINT (read_kbd) && interrupt_input && (waitchannels & 1)) kill (0, SIGIO); /* If we have timed out (nfds == 0) or found some input (nfds > 0),