tmi2/
tmi2/bin/
tmi2/etc/
tmi2/lib/
tmi2/lib/adm/
tmi2/lib/adm/daemons/languages/
tmi2/lib/adm/daemons/network/I3/
tmi2/lib/adm/daemons/virtual/template/
tmi2/lib/adm/obj/master/
tmi2/lib/adm/priv/
tmi2/lib/adm/shell/
tmi2/lib/adm/tmp/
tmi2/lib/cmds/
tmi2/lib/d/
tmi2/lib/d/Conf/
tmi2/lib/d/Conf/adm/
tmi2/lib/d/Conf/boards/
tmi2/lib/d/Conf/cmds/
tmi2/lib/d/Conf/data/
tmi2/lib/d/Conf/logs/
tmi2/lib/d/Conf/obj/
tmi2/lib/d/Conf/text/help/
tmi2/lib/d/Fooland/adm/
tmi2/lib/d/Fooland/data/
tmi2/lib/d/Fooland/data/attic/
tmi2/lib/d/Fooland/items/
tmi2/lib/d/TMI/
tmi2/lib/d/TMI/adm/
tmi2/lib/d/TMI/boards/
tmi2/lib/d/TMI/data/
tmi2/lib/d/TMI/rooms/
tmi2/lib/d/grid/
tmi2/lib/d/grid/adm/
tmi2/lib/d/grid/data/
tmi2/lib/d/std/
tmi2/lib/d/std/adm/
tmi2/lib/data/adm/
tmi2/lib/data/adm/daemons/
tmi2/lib/data/adm/daemons/doc_d/
tmi2/lib/data/adm/daemons/emoted/
tmi2/lib/data/adm/daemons/network/http/
tmi2/lib/data/adm/daemons/network/services/mail_q/
tmi2/lib/data/adm/daemons/network/smtp/
tmi2/lib/data/adm/daemons/news/archives/
tmi2/lib/data/attic/connection/
tmi2/lib/data/attic/user/
tmi2/lib/data/std/connection/b/
tmi2/lib/data/std/connection/l/
tmi2/lib/data/std/user/a/
tmi2/lib/data/std/user/b/
tmi2/lib/data/std/user/d/
tmi2/lib/data/std/user/f/
tmi2/lib/data/std/user/l/
tmi2/lib/data/std/user/x/
tmi2/lib/data/u/d/dm/working/doc_d/
tmi2/lib/data/u/l/leto/doc_d/
tmi2/lib/data/u/l/leto/smtp/
tmi2/lib/doc/
tmi2/lib/doc/driverdoc/applies/
tmi2/lib/doc/driverdoc/concepts/
tmi2/lib/doc/driverdoc/driver/
tmi2/lib/doc/driverdoc/efuns/arrays/
tmi2/lib/doc/driverdoc/efuns/buffers/
tmi2/lib/doc/driverdoc/efuns/compile/
tmi2/lib/doc/driverdoc/efuns/ed/
tmi2/lib/doc/driverdoc/efuns/floats/
tmi2/lib/doc/driverdoc/efuns/functions/
tmi2/lib/doc/driverdoc/efuns/general/
tmi2/lib/doc/driverdoc/efuns/numbers/
tmi2/lib/doc/driverdoc/efuns/parsing/
tmi2/lib/doc/driverdoc/lpc/constructs/
tmi2/lib/doc/driverdoc/lpc/preprocessor/
tmi2/lib/doc/driverdoc/lpc/types/
tmi2/lib/doc/driverdoc/platforms/
tmi2/lib/doc/mudlib/
tmi2/lib/ftp/
tmi2/lib/log/
tmi2/lib/obj/net/
tmi2/lib/obj/shells/
tmi2/lib/std/board/
tmi2/lib/std/body/
tmi2/lib/std/fun/
tmi2/lib/std/living/
tmi2/lib/std/object/
tmi2/lib/std/shop/
tmi2/lib/std/socket/
tmi2/lib/std/virtual/
tmi2/lib/student/
tmi2/lib/student/kalypso/
tmi2/lib/student/kalypso/armor/
tmi2/lib/student/kalypso/rooms/
tmi2/lib/student/kalypso/weapons/
tmi2/lib/u/l/leto/
tmi2/lib/u/l/leto/cmds/
tmi2/lib/www/errors/
tmi2/lib/www/gateways/
tmi2/lib/www/images/
tmi2/old/
tmi2/v21.7a10/
tmi2/v21.7a10/ChangeLog.old/
tmi2/v21.7a10/compat/simuls/
tmi2/v21.7a10/include/
tmi2/v21.7a10/testsuite/
tmi2/v21.7a10/testsuite/clone/
tmi2/v21.7a10/testsuite/command/
tmi2/v21.7a10/testsuite/data/
tmi2/v21.7a10/testsuite/etc/
tmi2/v21.7a10/testsuite/include/
tmi2/v21.7a10/testsuite/inherit/
tmi2/v21.7a10/testsuite/inherit/master/
tmi2/v21.7a10/testsuite/log/
tmi2/v21.7a10/testsuite/u/
tmi2/v21.7a10/tmp/
#ifdef LATTICE
#include "/lpc_incl.h"
#else
#include "../lpc_incl.h"
#endif

#ifdef F_CAT
void
f_cat PROT((void))
{
    svalue_t *arg;
    int i, start = 0, len = 0;

    arg = sp - st_num_arg + 1;
    if (st_num_arg > 1){
	start = arg[1].u.number;
	if (st_num_arg == 3)
	{	
	    if (sp->type != T_NUMBER)
		bad_arg(2, F_CAT);
	    len = (sp--)->u.number;
	}
	sp--;
    }
    i = print_file(arg[0].u.string, start, len);
    free_string_svalue(sp);
    put_number(i);
}
#endif

#ifdef F_LOG_FILE
void
f_log_file PROT((void))
{
    log_file((sp-1)->u.string, sp->u.string);
    free_string_svalue(sp--);
    free_string_svalue(sp--);
}
#endif

#ifdef F_EXTRACT
void
f_extract PROT((void))
{
  int len, from, to;
  svalue_t *arg;
  char *res;

  arg = sp - st_num_arg + 1;
  len = SVALUE_STRLEN(arg);
  if (st_num_arg == 1)
    return;
  from = arg[1].u.number;
  if (from < 0)
    from = len + from;
  if (from >= len)
    {
      pop_n_elems(st_num_arg);
      push_string("", STRING_CONSTANT);
      return;
    }
  if (st_num_arg == 2)
    {
      res = string_copy(arg->u.string + from);
      pop_2_elems();
      push_malloced_string(res);
      return;
    }
  if (arg[2].type != T_NUMBER)
    error("Bad third argument to extract\n");
  to = arg[2].u.number;
  if (to < 0)
    to = len + to;
  if (to < from)
    {
      pop_3_elems();
      push_string("", STRING_CONSTANT);
      return;
    }
  if (to >= len)
    to = len - 1;
  if (to == len -1)
    {
      res = string_copy(arg->u.string + from);
      pop_3_elems();
      push_malloced_string(res);
      return;
    }
  res = DXALLOC(to - from + 2, 30, "f_extract: res");
  strncpy(res, arg[0].u.string + from, to - from + 1);
  res[to - from + 1] = '\0';
  pop_3_elems();
  push_malloced_string(res);
}
#endif

#ifdef F_NEXT_LIVING
void
f_next_living PROT((void))
{
    ob = sp->u.ob->next_hashed_living;
    free_object(sp->u.ob, "f_next_living");
    if (!ob) *sp = const0;
    else {
      add_ref(ob, "next_living(ob)");
      sp->u.ob = ob;
    }
}
#endif