#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;
}
