aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKaroly Lorentey2006-03-12 04:51:49 +0000
committerKaroly Lorentey2006-03-12 04:51:49 +0000
commita6b6d0863c1b96e14ba3a2d1b9c941fbbcc8adf2 (patch)
treeab087c9b03ec98c1648cb02b4ee49096a1052e44 /src
parent33780b9521e3a416283b46dcd7e3ebb84bbffd67 (diff)
parent8cf1c5a44266bbd0f9919e854deee1d7361facd1 (diff)
downloademacs-a6b6d0863c1b96e14ba3a2d1b9c941fbbcc8adf2.tar.gz
emacs-a6b6d0863c1b96e14ba3a2d1b9c941fbbcc8adf2.zip
Merged from emacs@sv.gnu.org
Patches applied: * emacs@sv.gnu.org/emacs--devo--0--patch-144 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-145 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-146 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-147 Merge from gnus--rel--5.10 * emacs@sv.gnu.org/emacs--devo--0--patch-148 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-149 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-150 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-151 Merge from gnus--rel--5.10 * emacs@sv.gnu.org/emacs--devo--0--patch-152 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-56 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-57 Copy/update icons from Gnus trunk git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-530
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog107
-rw-r--r--src/alloc.c12
-rw-r--r--src/coding.c2
-rw-r--r--src/eval.c26
-rw-r--r--src/keymap.c2
-rw-r--r--src/lisp.h8
-rw-r--r--src/macterm.c14
-rw-r--r--src/mem-limits.h86
-rw-r--r--src/process.c2
-rw-r--r--src/vm-limit.c208
-rw-r--r--src/w32fns.c5
-rw-r--r--src/w32term.c2
-rw-r--r--src/window.c23
-rw-r--r--src/xdisp.c2
-rw-r--r--src/xfns.c1
-rw-r--r--src/xterm.c19
16 files changed, 333 insertions, 186 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index db10f46024b..389538b1617 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,9 +1,95 @@
12006-03-11 Luc Teirlinck <teirllm@auburn.edu>
2
3 * window.c: Rename preserve_y to window_scroll_pixel_based_preserve_y.
4 (window_scroll_pixel_based, syms_of_window): Adapt to above change.
5
62006-03-11 Eli Zaretskii <eliz@gnu.org>
7
8 * w32fns.c (w32_wnd_proc): Ignore middle and extra button events
9 if a menu is already active (the menubar_active flag is on).
10
112006-03-11 David Ponce <david@dponce.com>
12
13 * xfns.c (x_create_tip_frame): Preserve received parms by copying
14 them.
15
162006-03-11 Eli Zaretskii <eliz@gnu.org>
17
18 * w32term.c: Add x_fully_uncatch_errors and x_catching_errors to
19 the list of unused display error handling functions.
20
21 * eval.c (unwind_to_catch): Call x_fully_uncatch_errors only if
22 HAVE_X_WINDOWS.
23 (internal_condition_case, internal_condition_case_1)
24 (internal_condition_case_2): Call x_catching_errors only if
25 HAVE_X_WINDOWS.
26
27 * vm-limit.c [HAVE_GETRLIMIT]: Don't define unconditionally.
28 Don't include sys/resource.h unless defined.
29
302006-03-11 Richard Stallman <rms@gnu.org>
31
32 * keymap.c (describe_map): Shorten string to indicate shadowed binding.
33
34 * vm-limit.c (get_lim_data, lim_data, data_space_start):
35 Moved from mem-limits.h.
36 (enum warnlevel): New data type.
37 (check_memory_limits): Rewrite the logic about warnings.
38 Use standard `struct rlimit'. Check return values for nonsense.
39 (memory_warnings): Always clear lim_data.
40
41 * mem-limits.h (get_lim_data, lim_data, data_space_start):
42 Moved to vm-limit.c.
43
44 * xterm.c (x_fully_uncatch_errors, x_catching_errors): New functions.
45
46 * eval.c (unwind_to_catch): Call x_fully_uncatch_errors.
47 (internal_condition_case_1, internal_condition_case_2):
48 Abort if within unclosed x_catch_errors.
49
502006-03-11 Romain Francoise <romain@orebokech.com>
51
52 * process.c (Vprocess_adaptive_read_buffering): Doc fix.
53
542006-03-11 Giorgos Keramidas <keramida@ceid.upatras.gr> (tiny change)
55
56 * lisp.h: Remove duplicate prototypes. Make the prototype of
57 getloadavg be conditioned on HAVE_GETLOADAVG being undefined.
58
592006-03-11 Eli Zaretskii <eliz@gnu.org>
60
61 * xterm.c (x_draw_hollow_cursor): Subtract 1 from the last
62 argument of XDrawRectangle.
63
64 * xdisp.c (get_phys_cursor_geometry): Don't decrease height by 1.
65
66 * macterm.c (mac_draw_rectangle): Don't add 1 to width and height.
67 (x_draw_glyph_string_foreground)
68 (x_draw_composite_glyph_string_foreground)
69 (x_draw_image_foreground): Don't subtract 1 from width and height
70 arguments to mac_draw_rectangle.
71 (x_draw_hollow_cursor): Add 1 to w->phys_cursor_width.
72
732006-03-10 Kim F. Storm <storm@cua.dk>
74
75 * alloc.c (USE_POSIX_MEMALIGN): Fix last change.
76
772006-03-09 Stefan Monnier <monnier@iro.umontreal.ca>
78
79 * alloc.c (USE_POSIX_MEMALIGN): New macro.
80 (ABLOCKS_BASE, lisp_align_malloc, lisp_align_free): Use it.
81
822006-03-09 Kenichi Handa <handa@m17n.org>
83
84 * coding.c (DECODE_EMACS_MULE_COMPOSITION_CHAR): Fix decoding
85 ASCII component of a composition.
86
12006-03-08 Luc Teirlinck <teirllm@auburn.edu> 872006-03-08 Luc Teirlinck <teirllm@auburn.edu>
2 88
3 * window.c: Declare preserve_y as a static global variable. 89 * window.c: Declare preserve_y as a static global variable.
4 (window_scroll_pixel_based): No longer declare preserve_y; 90 (window_scroll_pixel_based): No longer declare preserve_y;
5 it is global now. 91 it is global now.
6 (syms_of_window): set preserve_y to -1. 92 (syms_of_window): Set preserve_y to -1.
7 93
82006-03-08 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> 942006-03-08 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
9 95
@@ -23,10 +109,10 @@
23 (MAC_AQUA_SMALL_VERTICAL_SCROLL_BAR_WIDTH): New defines. 109 (MAC_AQUA_SMALL_VERTICAL_SCROLL_BAR_WIDTH): New defines.
24 110
25 * macfns.c (x_default_scroll_bar_color_parameter) 111 * macfns.c (x_default_scroll_bar_color_parameter)
26 (x_set_scroll_bar_foreground, x_set_scroll_bar_background): Remove 112 (x_set_scroll_bar_foreground, x_set_scroll_bar_background):
27 unnecessary prototypes. 113 Remove unnecessary prototypes.
28 (x_set_scroll_bar_default_width): Use 114 (x_set_scroll_bar_default_width):
29 MAC_AQUA_VERTICAL_SCROLL_BAR_WIDTH. 115 Use MAC_AQUA_VERTICAL_SCROLL_BAR_WIDTH.
30 (mac_set_scroll_bar_width): New function. 116 (mac_set_scroll_bar_width): New function.
31 (mac_frame_parm_handlers): Set it as handler for scroll-bar-width. 117 (mac_frame_parm_handlers): Set it as handler for scroll-bar-width.
32 118
@@ -38,7 +124,7 @@
38 (mac_handle_command_event, mac_handle_window_event) 124 (mac_handle_command_event, mac_handle_window_event)
39 (mac_handle_mouse_event): Check error code of GetEventParameter. 125 (mac_handle_mouse_event): Check error code of GetEventParameter.
40 (convert_fn_keycode) [MAC_OSX]: Likewise. 126 (convert_fn_keycode) [MAC_OSX]: Likewise.
41 127
422006-03-05 Andreas Schwab <schwab@suse.de> 1282006-03-05 Andreas Schwab <schwab@suse.de>
43 129
44 * xselect.c (x_catch_errors_unwind): Fix missing return value. 130 * xselect.c (x_catch_errors_unwind): Fix missing return value.
@@ -52,9 +138,9 @@
52 lines, by distributing the rows evenly over the tool-bar screen area. 138 lines, by distributing the rows evenly over the tool-bar screen area.
53 (Vtool_bar_border): New variable. 139 (Vtool_bar_border): New variable.
54 (syms_of_xdisp): DEFVAR_LISP it. 140 (syms_of_xdisp): DEFVAR_LISP it.
55 (display_tool_bar_line): Add HEIGHT arg for desired row height. Make 141 (display_tool_bar_line): Add HEIGHT arg for desired row height.
56 tool-bar row the desired height. Use default face for border below 142 Make tool-bar row the desired height. Use default face for border
57 tool-bar. 143 below tool-bar.
58 (tool_bar_lines_needed): Add N_ROWS arg. Use it to return number of 144 (tool_bar_lines_needed): Add N_ROWS arg. Use it to return number of
59 actual tool-bar rows. 145 actual tool-bar rows.
60 (redisplay_tool_bar): Calculate f->n_tool_bar_rows initially. 146 (redisplay_tool_bar): Calculate f->n_tool_bar_rows initially.
@@ -81,8 +167,7 @@
81 167
822006-02-26 Chong Yidong <cyd@stupidchicken.com> 1682006-02-26 Chong Yidong <cyd@stupidchicken.com>
83 169
84 * xterm.h, xterm.c (x_uncatch_errors): Delete unneccessary 170 * xterm.h, xterm.c (x_uncatch_errors): Delete unneccessary argument.
85 argument.
86 171
87 * xterm.c: (x_load_font, x_term_init, XTmouse_position) 172 * xterm.c: (x_load_font, x_term_init, XTmouse_position)
88 (handle_one_xevent, x_connection_closed, x_list_fonts): No arg for 173 (handle_one_xevent, x_connection_closed, x_list_fonts): No arg for
diff --git a/src/alloc.c b/src/alloc.c
index 74c3c66173a..259143ffad8 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -885,6 +885,12 @@ lisp_free (block)
885/* The entry point is lisp_align_malloc which returns blocks of at most */ 885/* The entry point is lisp_align_malloc which returns blocks of at most */
886/* BLOCK_BYTES and guarantees they are aligned on a BLOCK_ALIGN boundary. */ 886/* BLOCK_BYTES and guarantees they are aligned on a BLOCK_ALIGN boundary. */
887 887
888/* Use posix_memalloc if the system has it and we're using the system's
889 malloc (because our gmalloc.c routines don't have posix_memalign although
890 its memalloc could be used). */
891#if defined (HAVE_POSIX_MEMALIGN) && defined (SYSTEM_MALLOC)
892#define USE_POSIX_MEMALIGN 1
893#endif
888 894
889/* BLOCK_ALIGN has to be a power of 2. */ 895/* BLOCK_ALIGN has to be a power of 2. */
890#define BLOCK_ALIGN (1 << 10) 896#define BLOCK_ALIGN (1 << 10)
@@ -950,7 +956,7 @@ struct ablocks
950#define ABLOCKS_BUSY(abase) ((abase)->blocks[0].abase) 956#define ABLOCKS_BUSY(abase) ((abase)->blocks[0].abase)
951 957
952/* Pointer to the (not necessarily aligned) malloc block. */ 958/* Pointer to the (not necessarily aligned) malloc block. */
953#ifdef HAVE_POSIX_MEMALIGN 959#ifdef USE_POSIX_MEMALIGN
954#define ABLOCKS_BASE(abase) (abase) 960#define ABLOCKS_BASE(abase) (abase)
955#else 961#else
956#define ABLOCKS_BASE(abase) \ 962#define ABLOCKS_BASE(abase) \
@@ -991,7 +997,7 @@ lisp_align_malloc (nbytes, type)
991 mallopt (M_MMAP_MAX, 0); 997 mallopt (M_MMAP_MAX, 0);
992#endif 998#endif
993 999
994#ifdef HAVE_POSIX_MEMALIGN 1000#ifdef USE_POSIX_MEMALIGN
995 { 1001 {
996 int err = posix_memalign (&base, BLOCK_ALIGN, ABLOCKS_BYTES); 1002 int err = posix_memalign (&base, BLOCK_ALIGN, ABLOCKS_BYTES);
997 if (err) 1003 if (err)
@@ -1107,7 +1113,7 @@ lisp_align_free (block)
1107 } 1113 }
1108 eassert ((aligned & 1) == aligned); 1114 eassert ((aligned & 1) == aligned);
1109 eassert (i == (aligned ? ABLOCKS_SIZE : ABLOCKS_SIZE - 1)); 1115 eassert (i == (aligned ? ABLOCKS_SIZE : ABLOCKS_SIZE - 1));
1110#ifdef HAVE_POSIX_MEMALIGN 1116#ifdef USE_POSIX_MEMALIGN
1111 eassert ((unsigned long)ABLOCKS_BASE (abase) % BLOCK_ALIGN == 0); 1117 eassert ((unsigned long)ABLOCKS_BASE (abase) % BLOCK_ALIGN == 0);
1112#endif 1118#endif
1113 free (ABLOCKS_BASE (abase)); 1119 free (ABLOCKS_BASE (abase));
diff --git a/src/coding.c b/src/coding.c
index 2d5618649d1..26d47da9317 100644
--- a/src/coding.c
+++ b/src/coding.c
@@ -731,7 +731,7 @@ detect_coding_emacs_mule (src, src_end, multibytep)
731 c = -1; \ 731 c = -1; \
732 else \ 732 else \
733 { \ 733 { \
734 c -= 0xA0; \ 734 c -= 0x80; \
735 *p++ = c; \ 735 *p++ = c; \
736 } \ 736 } \
737 } \ 737 } \
diff --git a/src/eval.c b/src/eval.c
index a84948981f4..86ee384896c 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -1259,6 +1259,12 @@ unwind_to_catch (catch, value)
1259 } 1259 }
1260 while (! last_time); 1260 while (! last_time);
1261 1261
1262#if HAVE_X_WINDOWS
1263 /* If x_catch_errors was done, turn it off now.
1264 (First we give unbind_to a chance to do that.) */
1265 x_fully_uncatch_errors ();
1266#endif
1267
1262 byte_stack_list = catch->byte_stack; 1268 byte_stack_list = catch->byte_stack;
1263 gcprolist = catch->gcpro; 1269 gcprolist = catch->gcpro;
1264#ifdef DEBUG_GCPRO 1270#ifdef DEBUG_GCPRO
@@ -1435,8 +1441,10 @@ internal_condition_case (bfun, handlers, hfun)
1435 struct catchtag c; 1441 struct catchtag c;
1436 struct handler h; 1442 struct handler h;
1437 1443
1438#if 0 /* We now handle interrupt_input_blocked properly. 1444 /* Since Fsignal will close off all calls to x_catch_errors,
1439 What we still do not handle is exiting a signal handler. */ 1445 we will get the wrong results if some are not closed now. */
1446#if HAVE_X_WINDOWS
1447 if (x_catching_errors ())
1440 abort (); 1448 abort ();
1441#endif 1449#endif
1442 1450
@@ -1481,6 +1489,13 @@ internal_condition_case_1 (bfun, arg, handlers, hfun)
1481 struct catchtag c; 1489 struct catchtag c;
1482 struct handler h; 1490 struct handler h;
1483 1491
1492 /* Since Fsignal will close off all calls to x_catch_errors,
1493 we will get the wrong results if some are not closed now. */
1494#if HAVE_X_WINDOWS
1495 if (x_catching_errors ())
1496 abort ();
1497#endif
1498
1484 c.tag = Qnil; 1499 c.tag = Qnil;
1485 c.val = Qnil; 1500 c.val = Qnil;
1486 c.backlist = backtrace_list; 1501 c.backlist = backtrace_list;
@@ -1525,6 +1540,13 @@ internal_condition_case_2 (bfun, nargs, args, handlers, hfun)
1525 struct catchtag c; 1540 struct catchtag c;
1526 struct handler h; 1541 struct handler h;
1527 1542
1543 /* Since Fsignal will close off all calls to x_catch_errors,
1544 we will get the wrong results if some are not closed now. */
1545#if HAVE_X_WINDOWS
1546 if (x_catching_errors ())
1547 abort ();
1548#endif
1549
1528 c.tag = Qnil; 1550 c.tag = Qnil;
1529 c.val = Qnil; 1551 c.val = Qnil;
1530 c.backlist = backtrace_list; 1552 c.backlist = backtrace_list;
diff --git a/src/keymap.c b/src/keymap.c
index ca8edab122b..fc7b23f6302 100644
--- a/src/keymap.c
+++ b/src/keymap.c
@@ -3364,7 +3364,7 @@ describe_map (map, prefix, elt_describer, partial, shadow,
3364 if (vect[i].shadowed) 3364 if (vect[i].shadowed)
3365 { 3365 {
3366 SET_PT (PT - 1); 3366 SET_PT (PT - 1);
3367 insert_string (" (binding currently shadowed)"); 3367 insert_string (" (shadowed)");
3368 SET_PT (PT + 1); 3368 SET_PT (PT + 1);
3369 } 3369 }
3370 } 3370 }
diff --git a/src/lisp.h b/src/lisp.h
index 4cca3a60cad..efc8a8f19de 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -2732,7 +2732,6 @@ EXFUN (Fbobp, 0);
2732EXFUN (Fformat, MANY); 2732EXFUN (Fformat, MANY);
2733EXFUN (Fmessage, MANY); 2733EXFUN (Fmessage, MANY);
2734extern Lisp_Object format2 P_ ((char *, Lisp_Object, Lisp_Object)); 2734extern Lisp_Object format2 P_ ((char *, Lisp_Object, Lisp_Object));
2735extern Lisp_Object make_buffer_string P_ ((int, int, int));
2736EXFUN (Fbuffer_substring, 2); 2735EXFUN (Fbuffer_substring, 2);
2737EXFUN (Fbuffer_string, 0); 2736EXFUN (Fbuffer_string, 0);
2738extern Lisp_Object save_excursion_save P_ ((void)); 2737extern Lisp_Object save_excursion_save P_ ((void));
@@ -2751,7 +2750,6 @@ extern Lisp_Object make_buffer_string P_ ((int, int, int));
2751extern Lisp_Object make_buffer_string_both P_ ((int, int, int, int, int)); 2750extern Lisp_Object make_buffer_string_both P_ ((int, int, int, int, int));
2752extern void init_editfns P_ ((void)); 2751extern void init_editfns P_ ((void));
2753extern void syms_of_editfns P_ ((void)); 2752extern void syms_of_editfns P_ ((void));
2754EXFUN (Fcurrent_message, 0);
2755extern Lisp_Object Vinhibit_field_text_motion; 2753extern Lisp_Object Vinhibit_field_text_motion;
2756EXFUN (Fconstrain_to_field, 5); 2754EXFUN (Fconstrain_to_field, 5);
2757EXFUN (Ffield_string, 1); 2755EXFUN (Ffield_string, 1);
@@ -2849,7 +2847,6 @@ extern Lisp_Object close_file_unwind P_ ((Lisp_Object));
2849extern void report_file_error P_ ((const char *, Lisp_Object)); 2847extern void report_file_error P_ ((const char *, Lisp_Object));
2850extern int internal_delete_file P_ ((Lisp_Object)); 2848extern int internal_delete_file P_ ((Lisp_Object));
2851extern void syms_of_fileio P_ ((void)); 2849extern void syms_of_fileio P_ ((void));
2852EXFUN (Fmake_temp_name, 1);
2853extern void init_fileio_once P_ ((void)); 2850extern void init_fileio_once P_ ((void));
2854extern Lisp_Object make_temp_name P_ ((Lisp_Object, int)); 2851extern Lisp_Object make_temp_name P_ ((Lisp_Object, int));
2855EXFUN (Fmake_symbolic_link, 3); 2852EXFUN (Fmake_symbolic_link, 3);
@@ -3202,8 +3199,10 @@ EXFUN (Fset_fontset_font, 4);
3202/* Defined in xfaces.c */ 3199/* Defined in xfaces.c */
3203extern void syms_of_xfaces P_ ((void)); 3200extern void syms_of_xfaces P_ ((void));
3204 3201
3202#ifndef HAVE_GETLOADAVG
3205/* Defined in getloadavg.c */ 3203/* Defined in getloadavg.c */
3206extern int getloadavg P_ ((double *, int)); 3204extern int getloadavg P_ ((double *, int));
3205#endif
3207 3206
3208#ifdef HAVE_X_WINDOWS 3207#ifdef HAVE_X_WINDOWS
3209/* Defined in xfns.c */ 3208/* Defined in xfns.c */
@@ -3224,9 +3223,6 @@ extern void syms_of_xselect P_ ((void));
3224/* Defined in xterm.c */ 3223/* Defined in xterm.c */
3225extern void syms_of_xterm P_ ((void)); 3224extern void syms_of_xterm P_ ((void));
3226 3225
3227/* Defined in getloadavg.c */
3228extern int getloadavg P_ ((double [], int));
3229
3230#ifdef MSDOS 3226#ifdef MSDOS
3231/* Defined in msdos.c */ 3227/* Defined in msdos.c */
3232EXFUN (Fmsdos_downcase_filename, 1); 3228EXFUN (Fmsdos_downcase_filename, 1);
diff --git a/src/macterm.c b/src/macterm.c
index 7f682515f43..9252d3bd914 100644
--- a/src/macterm.c
+++ b/src/macterm.c
@@ -598,7 +598,7 @@ mac_draw_rectangle (f, gc, x, y, width, height)
598 SetPortWindowPort (FRAME_MAC_WINDOW (f)); 598 SetPortWindowPort (FRAME_MAC_WINDOW (f));
599 599
600 RGBForeColor (GC_FORE_COLOR (gc)); 600 RGBForeColor (GC_FORE_COLOR (gc));
601 SetRect (&r, x, y, x + width + 1, y + height + 1); 601 SetRect (&r, x, y, x + width, y + height);
602 602
603 mac_begin_clip (gc); 603 mac_begin_clip (gc);
604 FrameRect (&r); /* using foreground color of gc */ 604 FrameRect (&r); /* using foreground color of gc */
@@ -2436,7 +2436,7 @@ x_draw_glyph_string_foreground (s)
2436 { 2436 {
2437 struct glyph *g = s->first_glyph + i; 2437 struct glyph *g = s->first_glyph + i;
2438 mac_draw_rectangle (s->f, s->gc, x, s->y, 2438 mac_draw_rectangle (s->f, s->gc, x, s->y,
2439 g->pixel_width - 1, s->height - 1); 2439 g->pixel_width, s->height);
2440 x += g->pixel_width; 2440 x += g->pixel_width;
2441 } 2441 }
2442 } 2442 }
@@ -2515,7 +2515,7 @@ x_draw_composite_glyph_string_foreground (s)
2515 { 2515 {
2516 if (s->gidx == 0) 2516 if (s->gidx == 0)
2517 mac_draw_rectangle (s->f, s->gc, x, s->y, 2517 mac_draw_rectangle (s->f, s->gc, x, s->y,
2518 s->width - 1, s->height - 1); 2518 s->width, s->height);
2519 } 2519 }
2520 else 2520 else
2521 { 2521 {
@@ -3068,15 +3068,15 @@ x_draw_image_foreground (s)
3068 int r = s->img->relief; 3068 int r = s->img->relief;
3069 if (r < 0) r = -r; 3069 if (r < 0) r = -r;
3070 mac_draw_rectangle (s->f, s->gc, x - r, y - r, 3070 mac_draw_rectangle (s->f, s->gc, x - r, y - r,
3071 s->slice.width + r*2 - 1, 3071 s->slice.width + r*2,
3072 s->slice.height + r*2 - 1); 3072 s->slice.height + r*2);
3073 } 3073 }
3074 } 3074 }
3075 } 3075 }
3076 else 3076 else
3077 /* Draw a rectangle if image could not be loaded. */ 3077 /* Draw a rectangle if image could not be loaded. */
3078 mac_draw_rectangle (s->f, s->gc, x, y, 3078 mac_draw_rectangle (s->f, s->gc, x, y,
3079 s->slice.width - 1, s->slice.height - 1); 3079 s->slice.width, s->slice.height);
3080} 3080}
3081 3081
3082 3082
@@ -5245,7 +5245,7 @@ x_draw_hollow_cursor (w, row)
5245 /* Compute frame-relative coordinates for phys cursor. */ 5245 /* Compute frame-relative coordinates for phys cursor. */
5246 x = WINDOW_TEXT_TO_FRAME_PIXEL_X (w, w->phys_cursor.x); 5246 x = WINDOW_TEXT_TO_FRAME_PIXEL_X (w, w->phys_cursor.x);
5247 y = get_phys_cursor_geometry (w, row, cursor_glyph, &h); 5247 y = get_phys_cursor_geometry (w, row, cursor_glyph, &h);
5248 wd = w->phys_cursor_width; 5248 wd = w->phys_cursor_width + 1;
5249 5249
5250 /* The foreground of cursor_gc is typically the same as the normal 5250 /* The foreground of cursor_gc is typically the same as the normal
5251 background color, which can cause the cursor box to be invisible. */ 5251 background color, which can cause the cursor box to be invisible. */
diff --git a/src/mem-limits.h b/src/mem-limits.h
index 292293b2f98..45dabca3ac5 100644
--- a/src/mem-limits.h
+++ b/src/mem-limits.h
@@ -112,91 +112,5 @@ extern char etext;
112#endif /* not _LIBC */ 112#endif /* not _LIBC */
113 113
114 114
115/* start of data space; can be changed by calling malloc_init */
116static POINTER data_space_start;
117
118/* Number of bytes of writable memory we can expect to be able to get */
119static unsigned long lim_data;
120
121#ifdef NO_LIM_DATA
122static void
123get_lim_data ()
124{
125 lim_data = -1;
126}
127#else /* not NO_LIM_DATA */
128
129#ifdef USG
130
131static void
132get_lim_data ()
133{
134 extern long ulimit ();
135
136 lim_data = -1;
137
138 /* Use the ulimit call, if we seem to have it. */
139#if !defined (ULIMIT_BREAK_VALUE) || defined (GNU_LINUX)
140 lim_data = ulimit (3, 0);
141#endif
142
143 /* If that didn't work, just use the macro's value. */
144#ifdef ULIMIT_BREAK_VALUE
145 if (lim_data == -1)
146 lim_data = ULIMIT_BREAK_VALUE;
147#endif
148
149 lim_data -= (long) data_space_start;
150}
151
152#else /* not USG */
153#ifdef WINDOWSNT
154
155static void
156get_lim_data ()
157{
158 extern unsigned long reserved_heap_size;
159 lim_data = reserved_heap_size;
160}
161
162#else
163#if !defined (BSD4_2) && !defined (__osf__)
164
165#ifdef MSDOS
166void
167get_lim_data ()
168{
169 _go32_dpmi_meminfo info;
170
171 _go32_dpmi_get_free_memory_information (&info);
172 lim_data = info.available_memory;
173}
174#else /* not MSDOS */
175static void
176get_lim_data ()
177{
178 lim_data = vlimit (LIM_DATA, -1);
179}
180#endif /* not MSDOS */
181
182#else /* BSD4_2 */
183
184static void
185get_lim_data ()
186{
187 struct rlimit XXrlimit;
188
189 getrlimit (RLIMIT_DATA, &XXrlimit);
190#ifdef RLIM_INFINITY
191 lim_data = XXrlimit.rlim_cur & RLIM_INFINITY; /* soft limit */
192#else
193 lim_data = XXrlimit.rlim_cur; /* soft limit */
194#endif
195}
196#endif /* BSD4_2 */
197#endif /* not WINDOWSNT */
198#endif /* not USG */
199#endif /* not NO_LIM_DATA */
200
201/* arch-tag: fe39244e-e54f-4208-b7aa-02556f7841c5 115/* arch-tag: fe39244e-e54f-4208-b7aa-02556f7841c5
202 (do not change this comment) */ 116 (do not change this comment) */
diff --git a/src/process.c b/src/process.c
index 99f27733918..a82932ba57b 100644
--- a/src/process.c
+++ b/src/process.c
@@ -6983,7 +6983,7 @@ On some systems, when Emacs reads the output from a subprocess, the output data
6983is read in very small blocks, potentially resulting in very poor performance. 6983is read in very small blocks, potentially resulting in very poor performance.
6984This behavior can be remedied to some extent by setting this variable to a 6984This behavior can be remedied to some extent by setting this variable to a
6985non-nil value, as it will automatically delay reading from such processes, to 6985non-nil value, as it will automatically delay reading from such processes, to
6986allowing them to produce more output before Emacs tries to read it. 6986allow them to produce more output before Emacs tries to read it.
6987If the value is t, the delay is reset after each write to the process; any other 6987If the value is t, the delay is reset after each write to the process; any other
6988non-nil value means that the delay is not reset on write. 6988non-nil value means that the delay is not reset on write.
6989The variable takes effect when `start-process' is called. */); 6989The variable takes effect when `start-process' is called. */);
diff --git a/src/vm-limit.c b/src/vm-limit.c
index 48d13c323ae..cadfb4cc95a 100644
--- a/src/vm-limit.c
+++ b/src/vm-limit.c
@@ -44,13 +44,102 @@ typedef void *POINTER;
44 2 -- 85% warning already issued. 44 2 -- 85% warning already issued.
45 3 -- 95% warning issued; keep warning frequently. 45 3 -- 95% warning issued; keep warning frequently.
46*/ 46*/
47static int warnlevel; 47enum warnlevel { not_warned, warned_75, warned_85, warned_95 };
48
49static enum warnlevel warnlevel;
48 50
49/* Function to call to issue a warning; 51/* Function to call to issue a warning;
50 0 means don't issue them. */ 52 0 means don't issue them. */
51static void (*warn_function) (); 53static void (*warn_function) ();
52 54
53/* Get more memory space, complaining if we're near the end. */ 55/* Start of data space; can be changed by calling malloc_init. */
56static POINTER data_space_start;
57
58/* Number of bytes of writable memory we can expect to be able to get. */
59static unsigned long lim_data;
60
61
62#ifdef NO_LIM_DATA
63static void
64get_lim_data ()
65{
66 lim_data = -1;
67}
68#else /* not NO_LIM_DATA */
69
70#ifdef USG
71
72static void
73get_lim_data ()
74{
75 extern long ulimit ();
76
77 lim_data = -1;
78
79 /* Use the ulimit call, if we seem to have it. */
80#if !defined (ULIMIT_BREAK_VALUE) || defined (GNU_LINUX)
81 lim_data = ulimit (3, 0);
82#endif
83
84 /* If that didn't work, just use the macro's value. */
85#ifdef ULIMIT_BREAK_VALUE
86 if (lim_data == -1)
87 lim_data = ULIMIT_BREAK_VALUE;
88#endif
89
90 lim_data -= (long) data_space_start;
91}
92
93#else /* not USG */
94#ifdef WINDOWSNT
95
96static void
97get_lim_data ()
98{
99 extern unsigned long reserved_heap_size;
100 lim_data = reserved_heap_size;
101}
102
103#else
104#if !defined (BSD4_2) && !defined (__osf__)
105
106#ifdef MSDOS
107void
108get_lim_data ()
109{
110 _go32_dpmi_meminfo info;
111
112 _go32_dpmi_get_free_memory_information (&info);
113 lim_data = info.available_memory;
114}
115#else /* not MSDOS */
116static void
117get_lim_data ()
118{
119 lim_data = vlimit (LIM_DATA, -1);
120}
121#endif /* not MSDOS */
122
123#else /* BSD4_2 */
124
125static void
126get_lim_data ()
127{
128 struct rlimit XXrlimit;
129
130 getrlimit (RLIMIT_DATA, &XXrlimit);
131#ifdef RLIM_INFINITY
132 lim_data = XXrlimit.rlim_cur & RLIM_INFINITY; /* soft limit */
133#else
134 lim_data = XXrlimit.rlim_cur; /* soft limit */
135#endif
136}
137#endif /* BSD4_2 */
138#endif /* not WINDOWSNT */
139#endif /* not USG */
140#endif /* not NO_LIM_DATA */
141
142/* Verify amount of memory available, complaining if we're near the end. */
54 143
55static void 144static void
56check_memory_limits () 145check_memory_limits ()
@@ -64,14 +153,19 @@ check_memory_limits ()
64 register POINTER cp; 153 register POINTER cp;
65 unsigned long five_percent; 154 unsigned long five_percent;
66 unsigned long data_size; 155 unsigned long data_size;
156 enum warnlevel new_warnlevel;
67 157
68#ifdef HAVE_GETRLIMIT 158#ifdef HAVE_GETRLIMIT
69 struct rlimit { 159 struct rlimit rlimit;
70 rlim_t rlim_cur;
71 rlim_t rlim_max;
72 } rlimit;
73 160
74 getrlimit (RLIMIT_DATA, &rlimit); 161 getrlimit (RLIMIT_AS, &rlimit);
162
163 if (RLIM_INFINITY == rlimit.rlim_max)
164 return;
165
166 /* This is a nonsensical case, but it happens -- rms. */
167 if (rlimit.rlim_cur > rlimit.rlim_max)
168 return;
75 169
76 five_percent = rlimit.rlim_max / 20; 170 five_percent = rlimit.rlim_max / 20;
77 data_size = rlimit.rlim_cur; 171 data_size = rlimit.rlim_cur;
@@ -93,57 +187,61 @@ check_memory_limits ()
93 187
94#endif /* not HAVE_GETRLIMIT */ 188#endif /* not HAVE_GETRLIMIT */
95 189
96 if (warn_function) 190 if (!warn_function)
97 switch (warnlevel) 191 return;
98 { 192
99 case 0: 193 /* What level of warning does current memory usage demand? */
100 if (data_size > five_percent * 15) 194 if (data_size > five_percent * 19)
101 { 195 new_warnlevel = warned_95;
102 warnlevel++; 196 else if (data_size > five_percent * 17)
103 (*warn_function) ("Warning: past 75% of memory limit"); 197 new_warnlevel = warned_85;
104 } 198 else if (data_size > five_percent * 15)
105 break; 199 new_warnlevel = warned_75;
106 200 else
107 case 1: 201 new_warnlevel = not_warned;
108 if (data_size > five_percent * 17) 202
109 { 203 /* If we have gone up a level, give the appropriate warning. */
110 warnlevel++; 204 if (new_warnlevel > warnlevel || new_warnlevel == warned_95)
111 (*warn_function) ("Warning: past 85% of memory limit"); 205 {
112 } 206 warnlevel = new_warnlevel;
113 break; 207 switch (warnlevel)
114 208 {
115 case 2: 209 case warned_75:
116 if (data_size > five_percent * 19) 210 (*warn_function) ("Warning: past 75% of memory limit");
117 { 211 break;
118 warnlevel++; 212
119 (*warn_function) ("Warning: past 95% of memory limit"); 213 case warned_85:
120 } 214 (*warn_function) ("Warning: past 85% of memory limit");
121 break; 215 break;
122 216
123 default: 217 case warned_95:
124 (*warn_function) ("Warning: past acceptable memory limits"); 218 (*warn_function) ("Warning: past 95% of memory limit");
125 break; 219 }
126 } 220 }
127 221 /* Handle going down in usage levels, with some hysteresis. */
128 /* If we go down below 70% full, issue another 75% warning 222 else
129 when we go up again. */ 223 {
130 if (data_size < five_percent * 14) 224 /* If we go down below 70% full, issue another 75% warning
131 warnlevel = 0; 225 when we go up again. */
132 /* If we go down below 80% full, issue another 85% warning 226 if (data_size < five_percent * 14)
133 when we go up again. */ 227 warnlevel = not_warned;
134 else if (warnlevel > 1 && data_size < five_percent * 16) 228 /* If we go down below 80% full, issue another 85% warning
135 warnlevel = 1; 229 when we go up again. */
136 /* If we go down below 90% full, issue another 95% warning 230 else if (warnlevel > warned_75 && data_size < five_percent * 16)
137 when we go up again. */ 231 warnlevel = warned_75;
138 else if (warnlevel > 2 && data_size < five_percent * 18) 232 /* If we go down below 90% full, issue another 95% warning
139 warnlevel = 2; 233 when we go up again. */
234 else if (warnlevel > warned_85 && data_size < five_percent * 18)
235 warnlevel = warned_85;
236 }
140 237
141 if (EXCEEDS_LISP_PTR (cp)) 238 if (EXCEEDS_LISP_PTR (cp))
142 (*warn_function) ("Warning: memory in use exceeds lisp pointer size"); 239 (*warn_function) ("Warning: memory in use exceeds lisp pointer size");
143} 240}
144 241
145/* Cause reinitialization based on job parameters; 242/* Enable memory usage warnings.
146 also declare where the end of pure storage is. */ 243 START says where the end of pure storage is.
244 WARNFUN specifies the function to call to issue a warning. */
147 245
148void 246void
149memory_warnings (start, warnfun) 247memory_warnings (start, warnfun)
@@ -160,10 +258,8 @@ memory_warnings (start, warnfun)
160 warn_function = warnfun; 258 warn_function = warnfun;
161 __after_morecore_hook = check_memory_limits; 259 __after_morecore_hook = check_memory_limits;
162 260
163#ifdef WINDOWSNT
164 /* Force data limit to be recalculated on each run. */ 261 /* Force data limit to be recalculated on each run. */
165 lim_data = 0; 262 lim_data = 0;
166#endif
167} 263}
168 264
169/* arch-tag: eab04eda-1f69-447a-8d9f-95f0a3983ca5 265/* arch-tag: eab04eda-1f69-447a-8d9f-95f0a3983ca5
diff --git a/src/w32fns.c b/src/w32fns.c
index 34450fd5219..c116c51603b 100644
--- a/src/w32fns.c
+++ b/src/w32fns.c
@@ -3250,6 +3250,11 @@ w32_wnd_proc (hwnd, msg, wParam, lParam)
3250 BOOL up; 3250 BOOL up;
3251 int button; 3251 int button;
3252 3252
3253 /* Ignore middle and extra buttons as long as the menu is active. */
3254 f = x_window_to_frame (dpyinfo, hwnd);
3255 if (f && f->output_data.w32->menubar_active)
3256 return 0;
3257
3253 if (parse_button (msg, HIWORD (wParam), &button, &up)) 3258 if (parse_button (msg, HIWORD (wParam), &button, &up))
3254 { 3259 {
3255 if (up) ReleaseCapture (); 3260 if (up) ReleaseCapture ();
diff --git a/src/w32term.c b/src/w32term.c
index 0017d2a5c86..bd04f0cb4b5 100644
--- a/src/w32term.c
+++ b/src/w32term.c
@@ -5236,6 +5236,8 @@ x_error_catcher (display, error)
5236x_catch_errors (dpy) 5236x_catch_errors (dpy)
5237x_catch_errors_unwind (old_val) 5237x_catch_errors_unwind (old_val)
5238x_check_errors (dpy, format) 5238x_check_errors (dpy, format)
5239x_fully_uncatch_errors ()
5240x_catching_errors ()
5239x_had_errors_p (dpy) 5241x_had_errors_p (dpy)
5240x_clear_errors (dpy) 5242x_clear_errors (dpy)
5241x_uncatch_errors (dpy, count) 5243x_uncatch_errors (dpy, count)
diff --git a/src/window.c b/src/window.c
index bc9a956994a..23a4eb98e4b 100644
--- a/src/window.c
+++ b/src/window.c
@@ -219,7 +219,7 @@ int window_deletion_count;
219 219
220/* Used by the function window_scroll_pixel_based */ 220/* Used by the function window_scroll_pixel_based */
221 221
222static int preserve_y; 222static int window_scroll_pixel_based_preserve_y;
223 223
224#if 0 /* This isn't used anywhere. */ 224#if 0 /* This isn't used anywhere. */
225/* Nonzero means we can split a frame even if it is "unsplittable". */ 225/* Nonzero means we can split a frame even if it is "unsplittable". */
@@ -4797,17 +4797,17 @@ window_scroll_pixel_based (window, n, whole, noerror)
4797 calls to scroll-up or scroll-down. This avoids the 4797 calls to scroll-up or scroll-down. This avoids the
4798 possibility of point becoming "stuck" on a tall line when 4798 possibility of point becoming "stuck" on a tall line when
4799 scrolling by one line. */ 4799 scrolling by one line. */
4800 if (preserve_y < 0 4800 if (window_scroll_pixel_based_preserve_y < 0
4801 || (current_kboard->Vlast_command != Qscroll_up 4801 || (current_kboard->Vlast_command != Qscroll_up
4802 && current_kboard->Vlast_command != Qscroll_down)) 4802 && current_kboard->Vlast_command != Qscroll_down))
4803 { 4803 {
4804 start_display (&it, w, start); 4804 start_display (&it, w, start);
4805 move_it_to (&it, PT, -1, -1, -1, MOVE_TO_POS); 4805 move_it_to (&it, PT, -1, -1, -1, MOVE_TO_POS);
4806 preserve_y = it.current_y; 4806 window_scroll_pixel_based_preserve_y = it.current_y;
4807 } 4807 }
4808 } 4808 }
4809 else 4809 else
4810 preserve_y = -1; 4810 window_scroll_pixel_based_preserve_y = -1;
4811 4811
4812 /* Move iterator it from start the specified distance forward or 4812 /* Move iterator it from start the specified distance forward or
4813 backward. The result is the new window start. */ 4813 backward. The result is the new window start. */
@@ -4937,12 +4937,13 @@ window_scroll_pixel_based (window, n, whole, noerror)
4937 || EQ (Vscroll_preserve_screen_position, Qt))) 4937 || EQ (Vscroll_preserve_screen_position, Qt)))
4938 /* We found PT at a legitimate height. Leave it alone. */ 4938 /* We found PT at a legitimate height. Leave it alone. */
4939 ; 4939 ;
4940 else if (preserve_y >= 0) 4940 else if (window_scroll_pixel_based_preserve_y >= 0)
4941 { 4941 {
4942 /* If we have a header line, take account of it. 4942 /* If we have a header line, take account of it.
4943 This is necessary because we set it.current_y to 0, above. */ 4943 This is necessary because we set it.current_y to 0, above. */
4944 move_it_to (&it, -1, -1, 4944 move_it_to (&it, -1, -1,
4945 preserve_y - (WINDOW_WANTS_HEADER_LINE_P (w) ? 1 : 0 ), 4945 window_scroll_pixel_based_preserve_y
4946 - (WINDOW_WANTS_HEADER_LINE_P (w) ? 1 : 0 ),
4946 -1, MOVE_TO_Y); 4947 -1, MOVE_TO_Y);
4947 SET_PT_BOTH (IT_CHARPOS (it), IT_BYTEPOS (it)); 4948 SET_PT_BOTH (IT_CHARPOS (it), IT_BYTEPOS (it));
4948 } 4949 }
@@ -4963,7 +4964,8 @@ window_scroll_pixel_based (window, n, whole, noerror)
4963 int charpos, bytepos; 4964 int charpos, bytepos;
4964 int partial_p; 4965 int partial_p;
4965 4966
4966 /* Save our position, for the preserve_y case. */ 4967 /* Save our position, for the
4968 window_scroll_pixel_based_preserve_y case. */
4967 charpos = IT_CHARPOS (it); 4969 charpos = IT_CHARPOS (it);
4968 bytepos = IT_BYTEPOS (it); 4970 bytepos = IT_BYTEPOS (it);
4969 4971
@@ -4993,14 +4995,15 @@ window_scroll_pixel_based (window, n, whole, noerror)
4993 || EQ (Vscroll_preserve_screen_position, Qt))) 4995 || EQ (Vscroll_preserve_screen_position, Qt)))
4994 /* We found PT before we found the display margin, so PT is ok. */ 4996 /* We found PT before we found the display margin, so PT is ok. */
4995 ; 4997 ;
4996 else if (preserve_y >= 0) 4998 else if (window_scroll_pixel_based_preserve_y >= 0)
4997 { 4999 {
4998 SET_TEXT_POS_FROM_MARKER (start, w->start); 5000 SET_TEXT_POS_FROM_MARKER (start, w->start);
4999 start_display (&it, w, start); 5001 start_display (&it, w, start);
5000 /* It would be wrong to subtract CURRENT_HEADER_LINE_HEIGHT 5002 /* It would be wrong to subtract CURRENT_HEADER_LINE_HEIGHT
5001 here because we called start_display again and did not 5003 here because we called start_display again and did not
5002 alter it.current_y this time. */ 5004 alter it.current_y this time. */
5003 move_it_to (&it, -1, -1, preserve_y, -1, MOVE_TO_Y); 5005 move_it_to (&it, -1, -1, window_scroll_pixel_based_preserve_y, -1,
5006 MOVE_TO_Y);
5004 SET_PT_BOTH (IT_CHARPOS (it), IT_BYTEPOS (it)); 5007 SET_PT_BOTH (IT_CHARPOS (it), IT_BYTEPOS (it));
5005 } 5008 }
5006 else 5009 else
@@ -7027,7 +7030,7 @@ syms_of_window ()
7027 minibuf_selected_window = Qnil; 7030 minibuf_selected_window = Qnil;
7028 staticpro (&minibuf_selected_window); 7031 staticpro (&minibuf_selected_window);
7029 7032
7030 preserve_y = -1; 7033 window_scroll_pixel_based_preserve_y = -1;
7031 7034
7032 DEFVAR_LISP ("temp-buffer-show-function", &Vtemp_buffer_show_function, 7035 DEFVAR_LISP ("temp-buffer-show-function", &Vtemp_buffer_show_function,
7033 doc: /* Non-nil means call as function to display a help buffer. 7036 doc: /* Non-nil means call as function to display a help buffer.
diff --git a/src/xdisp.c b/src/xdisp.c
index a645efd38a2..7bdda29fb0f 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -2020,7 +2020,7 @@ get_phys_cursor_geometry (w, row, glyph, heightp)
2020 } 2020 }
2021 } 2021 }
2022 2022
2023 *heightp = h - 1; 2023 *heightp = h;
2024 return WINDOW_TO_FRAME_PIXEL_Y (w, y); 2024 return WINDOW_TO_FRAME_PIXEL_Y (w, y);
2025} 2025}
2026 2026
diff --git a/src/xfns.c b/src/xfns.c
index d3067e00fe8..f2d5530a39c 100644
--- a/src/xfns.c
+++ b/src/xfns.c
@@ -4610,6 +4610,7 @@ unwind_create_tip_frame (frame)
4610 return deleted; 4610 return deleted;
4611} 4611}
4612 4612
4613 parms = Fcopy_alist (parms);
4613 4614
4614/* Create a frame for a tooltip on the display described by DPYINFO. 4615/* Create a frame for a tooltip on the display described by DPYINFO.
4615 PARMS is a list of frame parameters. TEXT is the string to 4616 PARMS is a list of frame parameters. TEXT is the string to
diff --git a/src/xterm.c b/src/xterm.c
index 0d19cf029b5..80b8c914f5b 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -7193,7 +7193,7 @@ x_draw_hollow_cursor (w, row)
7193 7193
7194 /* Set clipping, draw the rectangle, and reset clipping again. */ 7194 /* Set clipping, draw the rectangle, and reset clipping again. */
7195 x_clip_to_row (w, row, TEXT_AREA, gc); 7195 x_clip_to_row (w, row, TEXT_AREA, gc);
7196 XDrawRectangle (dpy, FRAME_X_WINDOW (f), gc, x, y, wd, h); 7196 XDrawRectangle (dpy, FRAME_X_WINDOW (f), gc, x, y, wd, h - 1);
7197 XSetClipMask (dpy, gc, None); 7197 XSetClipMask (dpy, gc, None);
7198} 7198}
7199 7199
@@ -7604,6 +7604,23 @@ x_clear_errors (dpy)
7604 x_error_message->string[0] = 0; 7604 x_error_message->string[0] = 0;
7605} 7605}
7606 7606
7607/* Close off all unclosed x_catch_errors calls. */
7608
7609void
7610x_fully_uncatch_errors ()
7611{
7612 while (x_error_message)
7613 x_uncatch_errors ();
7614}
7615
7616/* Nonzero if x_catch_errors has been done and not yet canceled. */
7617
7618int
7619x_catching_errors ()
7620{
7621 return x_error_message != 0;
7622}
7623
7607#if 0 7624#if 0
7608static unsigned int x_wire_count; 7625static unsigned int x_wire_count;
7609x_trace_wire () 7626x_trace_wire ()