comparison src/marker.c @ 800:a5954632b187

[xemacs-hg @ 2002-03-31 08:27:14 by ben] more fixes, first crack at finishing behavior implementation TODO.ben-mule-21-5: Update. configure.in: Fix for new error-checking types. make-mswin-unicode.pl: Don't be fucked up by CRLF. Output code to force errors when nonintercepted Windows calls issued. behavior.el, dumped-lisp.el, menubar-items.el: Add support for saving using custom. Load into a dumped XEmacs. Correct :title to :short-doc in accordance with behavior-defs.el. Add a submenu under Options for turning on/off behaviors. cl-macs.el: Properly document `loop'. Fix a minor bug in keymap iteration and add support for bit-vector iteration. lisp-mode.el: Rearrange and add items for macro expanding. menubar-items.el: Document connection between these two functions. window.el: Port stuff from GNU 21.1. config.inc.samp, xemacs.mak: Separate out and add new variable for controlling error-checking. s/windowsnt.h: Use new ERROR_CHECK_ALL; not related to DEBUG_XEMACS. alloc.c, backtrace.h, buffer.c, buffer.h, bytecode.c, callproc.c, casetab.c, charset.h, chartab.c, cmdloop.c, config.h.in, console-msw.c, console-stream.c, console-tty.c, console.c, console.h, data.c, device-msw.c, device.c, device.h, dired-msw.c, dired.c, dumper.c, editfns.c, eldap.c, elhash.c, emacs.c, eval.c, event-Xt.c, event-gtk.c, event-msw.c, event-stream.c, events.c, extents.c, faces.c, file-coding.c, file-coding.h, fileio.c, frame-msw.c, frame.c, frame.h, glyphs-gtk.c, glyphs-msw.c, glyphs-shared.c, glyphs-widget.c, glyphs-x.c, glyphs.c, glyphs.h, insdel.c, intl-auto-encap-win32.c, intl-auto-encap-win32.h, intl-encap-win32.c, intl-win32.c, keymap.c, lisp-union.h, lisp.h, lread.c, lrecord.h, lstream.c, lstream.h, macros.c, marker.c, md5.c, menubar-x.c, menubar.c, mule-coding.c, ntproc.c, objects-gtk.c, objects-msw.c, objects-x.c, objects.c, opaque.c, print.c, process-nt.c, process-unix.c, process.c, rangetab.c, redisplay-msw.c, redisplay-output.c, redisplay.c, regex.c, scrollbar-msw.c, select-msw.c, signal.c, specifier.c, specifier.h, symbols.c, sysdep.c, syswindows.h, text.c, text.h, toolbar-msw.c, tooltalk.c, ui-gtk.c, unicode.c, window.c: Redo error-checking macros: ERROR_CHECK_TYPECHECK -> ERROR_CHECK_TYPES, ERROR_CHECK_CHARBPOS -> ERROR_CHECK_TEXT, add ERROR_CHECK_DISPLAY, ERROR_CHECK_STRUCTURES. Document these in config.h.in. Fix code to follow docs. Fix *_checking_assert() in accordance with new names. Attempt to fix periodic redisplay crash freeing display line structures. Add first implementation of sledgehammer redisplay check. Redo print_*() to use write_fmt_string(), write_fmt_string_lisp(). Fix bug in md5 handling. Rename character-to-unicode to char-to-unicode; same for unicode-to-char{acter}. Move chartab documentation to `make-char-table'. Some header cleanup. Clean up remaining places where nonintercepted Windows calls are being used. automated/mule-tests.el: Fix for new Unicode support.
author ben
date Sun, 31 Mar 2002 08:30:17 +0000
parents e38acbeb1cae
children 6728e641994e
comparison
equal deleted inserted replaced
799:03d9f9084848 800:a5954632b187
1 /* Markers: examining, setting and killing. 1 /* Markers: examining, setting and killing.
2 Copyright (C) 1985, 1992, 1993, 1994, 1995 Free Software Foundation, Inc. 2 Copyright (C) 1985, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
3 Copyright (C) 2002 Ben Wing.
3 4
4 This file is part of XEmacs. 5 This file is part of XEmacs.
5 6
6 XEmacs is free software; you can redistribute it and/or modify it 7 XEmacs is free software; you can redistribute it and/or modify it
7 under the terms of the GNU General Public License as published by the 8 under the terms of the GNU General Public License as published by the
54 55
55 static void 56 static void
56 print_marker (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag) 57 print_marker (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag)
57 { 58 {
58 Lisp_Marker *marker = XMARKER (obj); 59 Lisp_Marker *marker = XMARKER (obj);
59 char buf[200];
60 60
61 if (print_readably) 61 if (print_readably)
62 printing_unreadable_object ("#<marker 0x%lx>", (long) marker); 62 printing_unreadable_object ("#<marker 0x%lx>", (long) marker);
63 63
64 write_c_string (GETTEXT ("#<marker "), printcharfun); 64 write_c_string (GETTEXT ("#<marker "), printcharfun);
65 if (!marker->buffer) 65 if (!marker->buffer)
66 write_c_string (GETTEXT ("in no buffer"), printcharfun); 66 write_c_string (GETTEXT ("in no buffer"), printcharfun);
67 else 67 else
68 { 68 {
69 sprintf (buf, "at %ld in ", (long) marker_position (obj)); 69 write_fmt_string (printcharfun, "at %ld in ", (long) marker_position (obj));
70 write_c_string (buf, printcharfun);
71 print_internal (marker->buffer->name, printcharfun, 0); 70 print_internal (marker->buffer->name, printcharfun, 0);
72 } 71 }
73 sprintf (buf, " 0x%lx>", (long) marker); 72 write_fmt_string (printcharfun, " 0x%lx>", (long) marker);
74 write_c_string (buf, printcharfun);
75 } 73 }
76 74
77 static int 75 static int
78 marker_equal (Lisp_Object obj1, Lisp_Object obj2, int depth) 76 marker_equal (Lisp_Object obj1, Lisp_Object obj2, int depth)
79 { 77 {
297 struct buffer *b = marker->buffer; 295 struct buffer *b = marker->buffer;
298 296
299 if (b == 0) 297 if (b == 0)
300 return; 298 return;
301 299
302 #ifdef ERROR_CHECK_GC 300 #ifdef ERROR_CHECK_STRUCTURES
303 assert (BUFFER_LIVE_P (b)); 301 assert (BUFFER_LIVE_P (b));
304 #endif 302 #endif
305 303
306 if (marker_next (marker)) 304 if (marker_next (marker))
307 marker_prev (marker_next (marker)) = marker_prev (marker); 305 marker_prev (marker_next (marker)) = marker_prev (marker);
308 if (marker_prev (marker)) 306 if (marker_prev (marker))
309 marker_next (marker_prev (marker)) = marker_next (marker); 307 marker_next (marker_prev (marker)) = marker_next (marker);
310 else 308 else
311 BUF_MARKERS (b) = marker_next (marker); 309 BUF_MARKERS (b) = marker_next (marker);
312 310
313 #ifdef ERROR_CHECK_GC 311 #ifdef ERROR_CHECK_STRUCTURES
314 assert (marker != XMARKER (b->point_marker)); 312 assert (marker != XMARKER (b->point_marker));
315 #endif 313 #endif
316 314
317 marker->buffer = 0; 315 marker->buffer = 0;
318 } 316 }
333 shit, I don't think this can happen. In any case, the following 331 shit, I don't think this can happen. In any case, the following
334 macro has an assert() in it that will catch these denormalized 332 macro has an assert() in it that will catch these denormalized
335 positions. */ 333 positions. */
336 pos = membpos_to_bytebpos (buf, m->membpos); 334 pos = membpos_to_bytebpos (buf, m->membpos);
337 335
338 #ifdef ERROR_CHECK_CHARBPOS 336 #ifdef ERROR_CHECK_TEXT
339 if (pos < BI_BUF_BEG (buf) || pos > BI_BUF_Z (buf)) 337 if (pos < BI_BUF_BEG (buf) || pos > BI_BUF_Z (buf))
340 abort (); 338 abort ();
341 #endif 339 #endif
342 340
343 return pos; 341 return pos;
361 struct buffer *buf = m->buffer; 359 struct buffer *buf = m->buffer;
362 360
363 if (!buf) 361 if (!buf)
364 invalid_argument ("Marker does not point anywhere", Qunbound); 362 invalid_argument ("Marker does not point anywhere", Qunbound);
365 363
366 #ifdef ERROR_CHECK_CHARBPOS 364 #ifdef ERROR_CHECK_TEXT
367 if (pos < BI_BUF_BEG (buf) || pos > BI_BUF_Z (buf)) 365 if (pos < BI_BUF_BEG (buf) || pos > BI_BUF_Z (buf))
368 abort (); 366 abort ();
369 #endif 367 #endif
370 368
371 m->membpos = bytebpos_to_membpos (buf, pos); 369 m->membpos = bytebpos_to_membpos (buf, pos);