lpmoo-1.2/etc/
lpmoo-1.2/mudlib/
lpmoo-1.2/mudlib/etc/
lpmoo-1.2/mudlib/include/
lpmoo-1.2/mudlib/include/moo/
lpmoo-1.2/mudlib/lpc/
lpmoo-1.2/mudlib/std/auto/
lpmoo-1.2/mudlib/std/bfuns/
inherit "/std/math";

/*
 * NAME:	$string_utils:space()
 * DESCRIPTION:	return a string consisting of copies of a string
 */
varargs
string space(mixed len, string fill)
{
  int n, m, f;

  if (stringp(len))
    n = strlen(len);
  else
    n = len;

  if (n > 100000)
    error("Argument too large");

  if (! fill)
    fill = " ";
  else if (fill != " ")
    {
      fill = fill + fill;
      fill = fill + fill;
      fill = fill + fill;
    }
  else if ((n = abs(n)) < 70)
    return ("                                   " +
            "                                   ")[.. n - 1];
  else
    fill = "                                   " +
           "                                   ";

  m = (n - 1) / strlen(fill);

  while (m)
    {
      fill = fill + fill;
      m = m / 2;
    }

  return n > 0 ? fill[.. n - 1] : fill[(f = strlen(fill)) + n .. f];
}

/*
 * NAME:	$string_utils:left
 * DESCRIPTION:	left-align a string
 */
varargs
string left(string text, int len, string fill)
{
  int abslen;
  string out;

  if (! fill)
    fill = " ";

  abslen = abs(len);
  out    = text;

  if (strlen(out) < abslen)
    return out + space(strlen(out) - abslen, fill);
  else
    return len > 0 ? out : out[.. abslen - 1];
}

/*
 * NAME:	$string_utils:right
 * DESCRIPTION:	right-align a string
 */
varargs
string right(string text, int len, string fill)
{
  int abslen;
  string out;

  if (! fill)
    fill = " ";

  abslen = abs(len);
  out    = text;

  if (strlen(out) < abslen)
    return space(abslen - strlen(out), fill) + out;
  else
    return len > 0 ? out : out[.. abslen - 1];
}