X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fmarker.c;h=c8b8663dc473fae1c736aaa7155f024ac85f01bf;hb=c84990d1037000e9487a437491a853975b356e5a;hp=0a68b4464386be112c9b0ab748c13b09af79d970;hpb=a71e0987b7080176e0046b0b0ed72a9a70e2571d;p=chise%2Fxemacs-chise.git.1 diff --git a/src/marker.c b/src/marker.c index 0a68b44..c8b8663 100644 --- a/src/marker.c +++ b/src/marker.c @@ -32,14 +32,13 @@ Boston, MA 02111-1307, USA. */ #include #include "lisp.h" -#include #include "buffer.h" static Lisp_Object -mark_marker (Lisp_Object obj, void (*markobj) (Lisp_Object)) +mark_marker (Lisp_Object obj) { - struct Lisp_Marker *marker = XMARKER (obj); + Lisp_Marker *marker = XMARKER (obj); Lisp_Object buf; /* DO NOT mark through the marker's chain. The buffer's markers chain does not preserve markers from gc; @@ -56,7 +55,7 @@ mark_marker (Lisp_Object obj, void (*markobj) (Lisp_Object)) static void print_marker (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag) { - struct Lisp_Marker *marker = XMARKER (obj); + Lisp_Marker *marker = XMARKER (obj); char buf[200]; if (print_readably) @@ -67,7 +66,7 @@ print_marker (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag) write_c_string (GETTEXT ("in no buffer"), printcharfun); else { - sprintf (buf, "at %d in ", marker_position (obj)); + sprintf (buf, "at %ld in ", (long) marker_position (obj)); write_c_string (buf, printcharfun); print_internal (marker->buffer->name, printcharfun, 0); } @@ -78,8 +77,8 @@ print_marker (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag) static int marker_equal (Lisp_Object obj1, Lisp_Object obj2, int depth) { - struct Lisp_Marker *marker1 = XMARKER (obj1); - struct Lisp_Marker *marker2 = XMARKER (obj2); + Lisp_Marker *marker1 = XMARKER (obj1); + Lisp_Marker *marker2 = XMARKER (obj2); return ((marker1->buffer == marker2->buffer) && (marker1->memind == marker2->memind || @@ -97,14 +96,16 @@ marker_hash (Lisp_Object obj, int depth) } static const struct lrecord_description marker_description[] = { - { XD_LISP_OBJECT, offsetof(struct Lisp_Marker, next), 3 }, + { XD_LISP_OBJECT, offsetof (Lisp_Marker, next) }, + { XD_LISP_OBJECT, offsetof (Lisp_Marker, prev) }, + { XD_LISP_OBJECT, offsetof (Lisp_Marker, buffer) }, { XD_END } }; DEFINE_BASIC_LRECORD_IMPLEMENTATION ("marker", marker, mark_marker, print_marker, 0, marker_equal, marker_hash, marker_description, - struct Lisp_Marker); + Lisp_Marker); /* Operations on markers. */ @@ -141,7 +142,7 @@ Return `nil' if marker doesn't point anywhere. static void check_marker_circularities (struct buffer *buf) { - struct Lisp_Marker *tortoise, *hare; + Lisp_Marker *tortoise, *hare; tortoise = BUF_MARKERS (buf); hare = tortoise; @@ -167,12 +168,12 @@ check_marker_circularities (struct buffer *buf) #endif static Lisp_Object -set_marker_internal (Lisp_Object marker, Lisp_Object pos, Lisp_Object buffer, - int restricted_p) +set_marker_internal (Lisp_Object marker, Lisp_Object position, + Lisp_Object buffer, int restricted_p) { Bufpos charno; struct buffer *b; - struct Lisp_Marker *m; + Lisp_Marker *m; int point_p; CHECK_MARKER (marker); @@ -181,8 +182,8 @@ set_marker_internal (Lisp_Object marker, Lisp_Object pos, Lisp_Object buffer, /* If position is nil or a marker that points nowhere, make this marker point nowhere. */ - if (NILP (pos) || - (MARKERP (pos) && !XMARKER (pos)->buffer)) + if (NILP (position) || + (MARKERP (position) && !XMARKER (position)->buffer)) { if (point_p) signal_simple_error ("Can't make point-marker point nowhere", @@ -192,7 +193,7 @@ set_marker_internal (Lisp_Object marker, Lisp_Object pos, Lisp_Object buffer, return marker; } - CHECK_INT_COERCE_MARKER (pos); + CHECK_INT_COERCE_MARKER (position); if (NILP (buffer)) b = current_buffer; else @@ -211,7 +212,7 @@ set_marker_internal (Lisp_Object marker, Lisp_Object pos, Lisp_Object buffer, } } - charno = XINT (pos); + charno = XINT (position); m = XMARKER (marker); if (restricted_p) @@ -258,26 +259,32 @@ set_marker_internal (Lisp_Object marker, Lisp_Object pos, Lisp_Object buffer, DEFUN ("set-marker", Fset_marker, 2, 3, 0, /* -Position MARKER before character number NUMBER in BUFFER. +Move MARKER to position POSITION in BUFFER. +POSITION can be a marker, an integer or nil. If POSITION is an +integer, make MARKER point before the POSITIONth character in BUFFER. +If POSITION is nil, makes MARKER point nowhere. Then it no longer +slows down editing in any buffer. If POSITION is less than 1, move +MARKER to the beginning of BUFFER. If POSITION is greater than the +size of BUFFER, move MARKER to the end of BUFFER. BUFFER defaults to the current buffer. -If NUMBER is nil, makes marker point nowhere. -Then it no longer slows down editing in any buffer. -If this marker was returned by (point-marker t), then changing its position -moves point. You cannot change its buffer or make it point nowhere. -Returns MARKER. +If this marker was returned by (point-marker t), then changing its +position moves point. You cannot change its buffer or make it point +nowhere. +The return value is MARKER. */ - (marker, number, buffer)) + (marker, position, buffer)) { - return set_marker_internal (marker, number, buffer, 0); + return set_marker_internal (marker, position, buffer, 0); } /* This version of Fset_marker won't let the position be outside the visible part. */ Lisp_Object -set_marker_restricted (Lisp_Object marker, Lisp_Object pos, Lisp_Object buffer) +set_marker_restricted (Lisp_Object marker, Lisp_Object position, + Lisp_Object buffer) { - return set_marker_internal (marker, pos, buffer, 1); + return set_marker_internal (marker, position, buffer, 1); } @@ -288,7 +295,7 @@ set_marker_restricted (Lisp_Object marker, Lisp_Object pos, Lisp_Object buffer) void unchain_marker (Lisp_Object m) { - struct Lisp_Marker *marker = XMARKER (m); + Lisp_Marker *marker = XMARKER (m); struct buffer *b = marker->buffer; if (b == 0) @@ -315,7 +322,7 @@ unchain_marker (Lisp_Object m) Bytind bi_marker_position (Lisp_Object marker) { - struct Lisp_Marker *m = XMARKER (marker); + Lisp_Marker *m = XMARKER (marker); struct buffer *buf = m->buffer; Bytind pos; @@ -332,7 +339,7 @@ bi_marker_position (Lisp_Object marker) #ifdef ERROR_CHECK_BUFPOS if (pos < BI_BUF_BEG (buf) || pos > BI_BUF_Z (buf)) - abort (); + ABORT (); #endif return pos; @@ -352,7 +359,7 @@ marker_position (Lisp_Object marker) void set_bi_marker_position (Lisp_Object marker, Bytind pos) { - struct Lisp_Marker *m = XMARKER (marker); + Lisp_Marker *m = XMARKER (marker); struct buffer *buf = m->buffer; if (!buf) @@ -360,7 +367,7 @@ set_bi_marker_position (Lisp_Object marker, Bytind pos) #ifdef ERROR_CHECK_BUFPOS if (pos < BI_BUF_BEG (buf) || pos > BI_BUF_Z (buf)) - abort (); + ABORT (); #endif m->memind = bytind_to_memind (buf, pos); @@ -403,21 +410,21 @@ copy_marker_1 (Lisp_Object marker, Lisp_Object type, int noseeum) } DEFUN ("copy-marker", Fcopy_marker, 1, 2, 0, /* -Return a new marker pointing at the same place as MARKER. -If argument is a number, makes a new marker pointing +Return a new marker pointing at the same place as MARKER-OR-INTEGER. +If MARKER-OR-INTEGER is an integer, return a new marker pointing at that position in the current buffer. -The optional argument TYPE specifies the insertion type of the new marker; -see `marker-insertion-type'. +Optional argument MARKER-TYPE specifies the insertion type of the new +marker; see `marker-insertion-type'. */ - (marker, type)) + (marker_or_integer, marker_type)) { - return copy_marker_1 (marker, type, 0); + return copy_marker_1 (marker_or_integer, marker_type, 0); } Lisp_Object -noseeum_copy_marker (Lisp_Object marker, Lisp_Object type) +noseeum_copy_marker (Lisp_Object marker, Lisp_Object marker_type) { - return copy_marker_1 (marker, type, 1); + return copy_marker_1 (marker, marker_type, 1); } DEFUN ("marker-insertion-type", Fmarker_insertion_type, 1, 1, 0, /* @@ -459,7 +466,7 @@ Return t if there are markers pointing at POSITION in the current buffer. */ (position)) { - struct Lisp_Marker *marker; + Lisp_Marker *marker; Memind pos; /* A small optimization trick: convert POS to memind now, rather @@ -488,12 +495,12 @@ Return t if there are markers pointing at POSITION in the current buffer. int compute_buffer_marker_usage (struct buffer *b, struct overhead_stats *ovstats) { - struct Lisp_Marker *m; + Lisp_Marker *m; int total = 0; int overhead; for (m = BUF_MARKERS (b); m; m = m->next) - total += sizeof (struct Lisp_Marker); + total += sizeof (Lisp_Marker); ovstats->was_requested += total; overhead = fixed_type_block_overhead (total); /* #### claiming this is all malloc overhead is not really right, @@ -508,6 +515,8 @@ compute_buffer_marker_usage (struct buffer *b, struct overhead_stats *ovstats) void syms_of_marker (void) { + INIT_LRECORD_IMPLEMENTATION (marker); + DEFSUBR (Fmarker_position); DEFSUBR (Fmarker_buffer); DEFSUBR (Fset_marker); @@ -539,7 +548,7 @@ uninit_buffer_markers (struct buffer *b) { /* Unchain all markers of this buffer and leave them pointing nowhere. */ - REGISTER struct Lisp_Marker *m, *next; + REGISTER Lisp_Marker *m, *next; for (m = BUF_MARKERS (b); m; m = next) { m->buffer = 0;