#ifdef HAVE_PUTENV
int
set_envvar(int f GCC_UNUSED, int n GCC_UNUSED)
{
  static TBUFF *var, *val;

  char *both;
  int rc;

  if ((rc = mlreply2("Environment variable: ", &var)) == ABORT)
    {
      /* EMPTY */ ;
    }
  else if ((rc = mlreply2("Value: ", &val)) == ABORT)
    {
      /* EMPTY */ ;
    }
  else if ((both = typeallocn(char, tb_length(var) + tb_length(val))) == 0)
    {
      rc = no_memory("set_envvar");
    }
  else
    {
      lsprintf(both, "%s=%s", tb_values(var), tb_values(val));
      putenv(both);		/* this will leak.  i think it has to. */
    }

  return rc;
}
#endif

static LINEPTR
alloc_LINE(BUFFER * bp)
{
  LINEPTR lp;

  if ((lp = bp->b_freeLINEs) != NULL)
    {
      bp->b_freeLINEs = lp->l_nxtundo;
    }
  else if ((lp = typealloc(LINE)) == NULL)
    {
      (void)no_memory("LINE");
    }
  return lp;
}

static Boolean
SaveConvertedLength(XtPointer * target, unsigned long source)
{
  Boolean result = False;

  *target = XtMalloc(4);
  if (*target != 0)
    {
      result = True;
      if (sizeof(unsigned long) == 4)
	{
	  *(unsigned long *)*target = source;
	}
      else if (sizeof(unsigned) == 4)
	{
	  *(unsigned *)*target = (unsigned)source;
	}
      else if (sizeof(unsigned short) == 4)
	{
	  *(unsigned short *)*target = (unsigned short)source;
	}
      else
	{
	  /* FIXME - does this depend on byte-order? */
	  unsigned long temp = source;

	  memcpy((char *)*target,
		 ((char *)&temp) + sizeof(temp) - 4,
		 (size_t)4);
	}
    }
  return result;
}
