concepts/
efun/
SYNOPSIS
	mixed *insert_alist(mixed key, mixed da,ta ... , mixed *alist)

DESCRIPTION
	Inserts an entry into an alist, or shows the place where this
	is to be done.

	When called with the last argument being an alist:
	  The first argument is a key to be inserted, the second and
	  all the following but the last are data to associate it
	  with. The last has to be an array with as much elements as
	  key and data arguments are given, the matching key and data
	  arrays; this should be already an alist, or the return value
	  will neither be an alist. Return value is the enlarged assoc
	  list ( array of two arrays ). If the key is already in the
	  list, the data is simply replaced in the returned list.

	When called with the last argument beinig a list of non-lists:
	  The call has to be done with exactly two arguments.
	  The first argument is a key to be inserted in the presorted
	  key list ( first element of an array that is an alist ) that
	  has to be given as second argument. Return value is the
	  index where the key has to be inserted to preserve the
	  structure of a presorted alist, or the index where the key
	  has been found.
	  Return value is an int.
	  CEVEATS: when called with certain string keys, the correct
	  place might change after another call to insert_alist in
	  this	mode, so use the index while it is fresh...

	Complexity O( lg(n) + a*n )
	Where n is the number of keys and s is a very small constant (
	for block move ).

SEE ALSO
	alists (LPC), order_alist(E), assoc(E)