diff src/data.c @ 2515:c0cdd6a80391

long_to_cons and cons_to_long are generally useful things; they're needed whether or not X is defined. * xselect.c (long_to_cons, cons_to_long): Moved from here... * data.c (long_to_cons, cons_to_long): ... to here. * lisp.h (long_to_cons, cons_to_long): Add extern declaration.
author Jim Blandy <jimb@redhat.com>
date Sat, 10 Apr 1993 08:05:07 +0000
parents 96b55f2f19cd
children b66eeded6afc
line wrap: on
line diff
--- a/src/data.c	Sat Apr 10 08:04:27 1993 +0000
+++ b/src/data.c	Sat Apr 10 08:05:07 1993 +0000
@@ -1425,6 +1425,35 @@
   return Qnil;
 }
 
+/* Convert between 32-bit values and pairs of lispy 24-bit values.  */
+
+Lisp_Object
+long_to_cons (i)
+     unsigned long i;
+{
+  unsigned int top = i >> 16;
+  unsigned int bot = i & 0xFFFF;
+  if (top == 0)
+    return make_number (bot);
+  if (top == 0xFFFF)
+    return Fcons (make_number (-1), make_number (bot));
+  return Fcons (make_number (top), make_number (bot));
+}
+
+unsigned long
+cons_to_long (c)
+     Lisp_Object c;
+{
+  int top, bot;
+  if (INTEGERP (c))
+    return XINT (c);
+  top = XCONS (c)->car;
+  bot = XCONS (c)->cdr;
+  if (CONSP (bot))
+    bot = XCONS (bot)->car;
+  return ((XINT (top) << 16) | XINT (bot));
+}
+
 DEFUN ("number-to-string", Fnumber_to_string, Snumber_to_string, 1, 1, 0,
   "Convert NUM to a string by printing it in decimal.\n\
 Uses a minus sign if negative.\n\