# HG changeset patch # User Jim Blandy # Date 706252972 0 # Node ID 39f0e62a85116d4dc4b9bcda6f739ff47dcb74bb # Parent 61deba7b73b61b40a2b8e364a3e905e3cffdc03e *** empty log message *** diff -r 61deba7b73b6 -r 39f0e62a8511 lib-src/make-docfile.c --- a/lib-src/make-docfile.c Tue May 19 02:05:47 1992 +0000 +++ b/lib-src/make-docfile.c Tue May 19 05:22:52 1992 +0000 @@ -170,7 +170,7 @@ /* Print the C arguments as they would appear in Elisp; print underscores as hyphens. */ if (c == '_') - putc ('-'); + putc ('-', out); else putc (c, out); } diff -r 61deba7b73b6 -r 39f0e62a8511 lisp/startup.el --- a/lisp/startup.el Tue May 19 02:05:47 1992 +0000 +++ b/lisp/startup.el Tue May 19 05:22:52 1992 +0000 @@ -118,7 +118,7 @@ (if (not (eq system-type 'vax-vms)) (mapcar (function (lambda (var) - (let ((value (getev var))) + (let ((value (getenv var))) (if (and value (< (length value) (length default-directory)) (equal (file-attributes default-directory) diff -r 61deba7b73b6 -r 39f0e62a8511 src/dispnew.c --- a/src/dispnew.c Tue May 19 02:05:47 1992 +0000 +++ b/src/dispnew.c Tue May 19 05:22:52 1992 +0000 @@ -1780,14 +1780,14 @@ "Pause, without updating display, for ARG seconds.\n\ Optional second arg non-nil means ARG is measured in milliseconds.\n\ \(Not all operating systems support milliseconds.)") - (n, millisec) - Lisp_Object n, millisec; + (arg, millisec) + Lisp_Object arg, millisec; { int usec = 0; int sec; - CHECK_NUMBER (n, 0); - sec = XINT (n); + CHECK_NUMBER (arg, 0); + sec = XINT (arg); if (sec <= 0) return Qnil; @@ -1801,7 +1801,12 @@ #endif } - wait_reading_process_input (sec, usec, 0, 0); + { + Lisp_Object zero; + + XFASTINT (zero) = 0; + wait_reading_process_input (sec, usec, zero, 0); + } #if 0 /* No wait_reading_process_input */ immediate_quit = 1; @@ -1837,45 +1842,31 @@ return Qnil; } -DEFUN ("sit-for", Fsit_for, Ssit_for, 1, 3, 0, - "Perform redisplay, then wait for ARG seconds or until input is available.\n\ -Optional second arg non-nil means ARG counts in milliseconds.\n\ -Optional third arg non-nil means don't redisplay, just wait for input.\n\ -Redisplay is preempted as always if input arrives, and does not happen\n\ -if input is available before it starts.\n\ -Value is t if waited the full time with no input arriving.") - (n, millisec, nodisp) - Lisp_Object n, millisec, nodisp; +/* This is just like wait_reading_process_input, except that + it does the redisplay. + + It's also just like Fsit_for, except that it can be used for + waiting for input as well. */ + +Lisp_Object +sit_for (sec, usec, reading, display) + int sec, usec, reading, display; { - int usec = 0; - int sec; - - CHECK_NUMBER (n, 0); + Lisp_Object read_kbd; if (detect_input_pending ()) return Qnil; - - if (EQ (nodisp, Qnil)) + + if (display) redisplay_preserve_echo_area (); - sec = XINT (n); - if (sec <= 0) - return Qt; - - if (!NILP (millisec)) - { -#ifndef EMACS_HAS_USECS - error ("millisecond sleep-for not supported on %s", SYSTEM_TYPE); -#else - usec = sec % 1000 * 1000; - sec /= 1000; -#endif - } - #ifdef SIGIO gobble_input (); -#endif /* SIGIO */ - wait_reading_process_input (sec, usec, 1, 1); +#endif + + XSET (read_kbd, Lisp_Int, reading ? -1 : 1); + wait_reading_process_input (sec, usec, read_kbd, display); + #if 0 /* No wait_reading_process_input available. */ immediate_quit = 1; @@ -1883,7 +1874,7 @@ waitchannels = 1; #ifdef VMS - input_wait_timeout (XINT (n)); + input_wait_timeout (XINT (arg)); #else /* not VMS */ #ifndef HAVE_TIMEVAL timeout_sec = sec; @@ -1901,18 +1892,54 @@ return detect_input_pending () ? Qnil : Qt; } +DEFUN ("sit-for", Fsit_for, Ssit_for, 1, 3, 0, + "Perform redisplay, then wait for ARG seconds or until input is available.\n\ +Optional second arg non-nil means ARG counts in milliseconds.\n\ +Optional third arg non-nil means don't redisplay, just wait for input.\n\ +Redisplay is preempted as always if input arrives, and does not happen\n\ +if input is available before it starts.\n\ +Value is t if waited the full time with no input arriving.") + (arg, millisec, nodisp) + Lisp_Object arg, millisec, nodisp; +{ + int usec = 0; + int sec = 0; + + CHECK_NUMBER (arg, 0); + + sec = XINT (arg); + if (sec <= 0) + return Qt; + + if (!NILP (millisec)) + { +#ifndef EMACS_HAS_USECS + error ("millisecond sit-for not supported on %s", SYSTEM_TYPE); +#else + usec = (sec % 1000) * 1000; + sec /= 1000; +#endif + } + + return sit_for (sec, usec, 0, NILP (nodisp)); +} + DEFUN ("sleep-for-millisecs", Fsleep_for_millisecs, Ssleep_for_millisecs, 1, 1, 0, "Pause, without updating display, for ARG milliseconds.") - (n) - Lisp_Object n; + (arg) + Lisp_Object arg; { + Lisp_Object zero; + #ifndef EMACS_HAS_USECS error ("sleep-for-millisecs not supported on %s", SYSTEM_TYPE); #else - CHECK_NUMBER (n, 0); - wait_reading_process_input (XINT (n) / 1000, XINT (n) % 1000 * 1000, - 0, 0); + CHECK_NUMBER (arg, 0); + + XFASTINT (zero) = 0; + wait_reading_process_input (XINT (arg) / 1000, XINT (arg) % 1000 * 1000, + zero, 0); return Qnil; #endif /* EMACS_HAS_USECS */ } diff -r 61deba7b73b6 -r 39f0e62a8511 src/keyboard.c --- a/src/keyboard.c Tue May 19 02:05:47 1992 +0000 +++ b/src/keyboard.c Tue May 19 05:22:52 1992 +0000 @@ -1148,7 +1148,7 @@ } /* Save outer setjmp data, in case called recursively. */ - bcopy (getcjmp, save_jump, sizeof getcjmp); + save_getcjmp (save_jump); stop_polling (); @@ -1162,8 +1162,6 @@ XSET (Vlast_event_screen, Lisp_Screen, selected_screen); #endif - clear_waiting_for_input (); - goto non_reread; } @@ -1182,7 +1180,7 @@ { Lisp_Object tem0; - tem0 = Fsit_for (make_number (echo_keystrokes), Qnil, Qt); + tem0 = sit_for (echo_keystrokes, 0, 1, 1); if (EQ (tem0, Qt)) echo (); } @@ -1223,7 +1221,7 @@ { Lisp_Object tem0; int delay = delay_level * XFASTINT (Vauto_save_timeout) / 4; - tem0 = Fsit_for (make_number (delay), Qnil, Qt); + tem0 = sit_for (delay, 0, 1, 1); if (EQ (tem0, Qt)) { jmp_buf temp; @@ -1263,7 +1261,7 @@ non_reread: - bcopy (save_jump, getcjmp, sizeof getcjmp); + restore_getcjmp (save_jump); start_polling (); @@ -1590,7 +1588,10 @@ #endif /* SIGIO */ if (EVENT_QUEUES_EMPTY) { - wait_reading_process_input (0, 0, -1, 1); + Lisp_Object minus_one; + + XSET (minus_one, Lisp_Int, -1); + wait_reading_process_input (0, 0, minus_one, 1); if (!interrupt_input && EVENT_QUEUES_EMPTY) { @@ -3330,7 +3331,7 @@ quit_error_check (); sigfree (); /* Prevent another signal from doing this before we finish. */ - waiting_for_input = 0; + clear_waiting_for_input (); input_pending = 0; #if 0 diff -r 61deba7b73b6 -r 39f0e62a8511 src/process.c --- 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),