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.
This commit is contained in:
Jim Blandy 1993-04-10 08:05:07 +00:00
parent 6904bdcd08
commit 51cf3e317c
3 changed files with 31 additions and 30 deletions

View file

@ -1425,6 +1425,35 @@ DEFUN ("zerop", Fzerop, Szerop, 1, 1, 0, "T if NUMBER is zero.")
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\

View file

@ -985,6 +985,8 @@ extern Lisp_Object Flsh (), Fash ();
extern Lisp_Object Fadd1 (), Fsub1 ();
extern Lisp_Object make_number ();
extern Lisp_Object long_to_cons ();
extern unsigned long cons_to_long ();
extern void args_out_of_range ();
extern void args_out_of_range_3 ();
extern Lisp_Object wrong_type_argument ();

View file

@ -234,36 +234,6 @@ x_atom_to_symbol (display, atom)
return val;
}
/* Convert between full word time values (last modification times, etc)
and their Lisp representation as a cons cell (HIGH . LOW). */
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));
}
/* Do protocol to assert ourself as a selection owner.
Update the Vselection_alist so that we can reply to later requests for
our selection. */