Mercurial > emacs
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\
