From xemacs-m  Thu Jul 10 03:00:13 1997
Received: from jagor.srce.hr (hniksic@jagor.srce.hr [161.53.2.130])
	by xemacs.org (8.8.5/8.8.5) with ESMTP id DAA28567
	for <xemacs-beta@xemacs.org>; Thu, 10 Jul 1997 03:00:11 -0500 (CDT)
Received: (from hniksic@localhost)
	by jagor.srce.hr (8.8.6/8.8.6) id KAA17250;
	Thu, 10 Jul 1997 10:00:10 +0200 (MET DST)
To: XEmacs Developers <xemacs-beta@xemacs.org>
Subject: [PATCH] Correct printing of extents
X-Attribution: Hrv
X-Face: Mie8:rOV<\c/~z{s.X4A{!?vY7{drJ([U]0O=W/<W*SMo/Mv:58:*_y~ki>xDi&N7XG
        KV^$k0m3Oe/)'e%3=$PCR&3ITUXH,cK>]bci&<qQ>Ff%x_>1`T(+M2Gg/fgndU%k*ft
        [(7._6e0n-V%|%'[c|q:;}td$#INd+;?!-V=c8Pqf}3J
From: Hrvoje Niksic <hniksic@srce.hr>
Date: 10 Jul 1997 10:00:09 +0200
Message-ID: <kigvi2jz69i.fsf@jagor.srce.hr>
Lines: 122
X-Mailer: Gnus v5.4.59/XEmacs 20.3(beta12) - "Helsinki"

This will correctly print the extent, even with non-symbol plist
keys.  The silent limitation of printed representation to 256 bytes is 
removed.

1997-07-10  Hrvoje Niksic  <hniksic@srce.hr>

	* extents.c (print_extent): Print correctly.

--- src/extents.c.orig	Thu Jul 10 08:45:37 1997
+++ src/extents.c	Thu Jul 10 09:55:52 1997
@@ -2940,12 +2940,12 @@
 }
 
 static char *
-print_extent_1 (char *buf, Lisp_Object extent_obj)
+print_extent_1 (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag)
 {
-  EXTENT ext = XEXTENT (extent_obj);
+  EXTENT ext = XEXTENT (obj);
   EXTENT anc = extent_ancestor (ext);
-  char *bp = buf;
   Lisp_Object tail;
+  char buf[64], *bp = buf;
 
   /* Retrieve the ancestor and use it, for faster retrieval of properties */
 
@@ -2955,8 +2955,8 @@
     sprintf (bp, "detached");
   else
     {
-      Bufpos from = XINT (Fextent_start_position (extent_obj));
-      Bufpos to = XINT (Fextent_end_position (extent_obj));
+      Bufpos from = XINT (Fextent_start_position (obj));
+      Bufpos to = XINT (Fextent_end_position (obj));
       sprintf (bp, "%d, %d", from, to);
     }
   bp += strlen (bp);
@@ -2974,39 +2974,26 @@
       extent_unique_p (anc) ||
       extent_duplicable_p (anc) || !NILP (extent_invisible (anc)))
     *bp++ = ' ';
+  *bp = '\0';
+  write_c_string (buf, printcharfun);
 
   tail = extent_plist_slot (anc);
 
   for (; !NILP (tail); tail = Fcdr (Fcdr (tail)))
     {
-      struct Lisp_String *k;
       Lisp_Object v = XCAR (XCDR (tail));
       if (NILP (v)) continue;
-      if (!SYMBOLP (XCAR (tail)))
-	{
-	  /* ### Fix this! */
-	  strcpy (bp, "non-symbol ");
-	  bp += 11;
-	  continue;
-	}
-      k = XSYMBOL (XCAR (tail))->name;
-      memcpy (bp, (char *) string_data (k), string_length (k));
-      bp += string_length (k);
-      *bp++ = ' ';
+      print_internal (XCAR (tail), printcharfun, escapeflag);
+      write_c_string (" ", printcharfun);
     }
 
-  sprintf (bp, "0x%lx", (long) ext);
-  bp += strlen (bp);
-
-  *bp++ = 0;
-  return buf;
+  sprintf (buf, "0x%lx", (long) ext);
+  write_c_string (buf, printcharfun);
 }
 
 static void
 print_extent (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag)
 {
-  char buf2[256];
-
   if (escapeflag)
     {
       CONST char *title = "";
@@ -3047,23 +3034,21 @@
 	  if (!EXTENT_LIVE_P (XEXTENT (obj)))
 	    error ("printing unreadable object #<destroyed extent>");
 	  else
-	    error ("printing unreadable object #<extent %s>",
-		   print_extent_1 (buf2, obj));
+	    error ("printing unreadable object #<extent 0x%lx>",
+		   (long)XEXTENT (obj));
 	}
       
       if (!EXTENT_LIVE_P (XEXTENT (obj)))
 	write_c_string ("#<destroyed extent", printcharfun);
       else
 	{
-	  char buf[256];
+	  char *buf = alloca (strlen (title) + strlen (name)
+			      + strlen (posttitle));
 	  write_c_string ("#<extent ", printcharfun);
-	  if (extent_detached_p (XEXTENT (obj)))
-	    sprintf (buf, "%s from %s%s%s",
-		     print_extent_1 (buf2, obj), title, name, posttitle);
-	  else
-	    sprintf (buf, "%s in %s%s%s",
-		     print_extent_1 (buf2, obj),
-		     title, name, posttitle);
+	  print_extent_1 (obj, printcharfun, escapeflag);
+	  write_c_string (extent_detached_p (XEXTENT (obj))
+			  ? " from " : " in ", printcharfun);
+	  sprintf (buf, "%s%s%s", title, name, posttitle);
 	  write_c_string (buf, printcharfun);
 	}
     }


-- 
Hrvoje Niksic <hniksic@srce.hr> | Student at FER Zagreb, Croatia
--------------------------------+--------------------------------
Contrary to popular belief, Unix is user friendly.  
It just happens to be selective about who it makes friends with.

