tmi2_fluffos_v2/
tmi2_fluffos_v2/bin/
tmi2_fluffos_v2/etc/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/ChangeLog.old/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/Win32/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/compat/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/compat/simuls/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/include/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/clone/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/command/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/data/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/etc/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/include/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/inherit/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/inherit/master/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/log/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/tests/compiler/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/tests/efuns/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/tests/operators/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/u/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/tmp/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/windows/
tmi2_fluffos_v2/lib/
tmi2_fluffos_v2/lib/adm/
tmi2_fluffos_v2/lib/adm/daemons/languages/
tmi2_fluffos_v2/lib/adm/daemons/network/I3/
tmi2_fluffos_v2/lib/adm/daemons/virtual/
tmi2_fluffos_v2/lib/adm/daemons/virtual/template/
tmi2_fluffos_v2/lib/adm/news/
tmi2_fluffos_v2/lib/adm/obj/
tmi2_fluffos_v2/lib/adm/obj/master/
tmi2_fluffos_v2/lib/adm/priv/
tmi2_fluffos_v2/lib/adm/shell/
tmi2_fluffos_v2/lib/adm/tmp/
tmi2_fluffos_v2/lib/cmds/
tmi2_fluffos_v2/lib/d/
tmi2_fluffos_v2/lib/d/Conf/
tmi2_fluffos_v2/lib/d/Conf/adm/
tmi2_fluffos_v2/lib/d/Conf/boards/
tmi2_fluffos_v2/lib/d/Conf/cmds/
tmi2_fluffos_v2/lib/d/Conf/data/
tmi2_fluffos_v2/lib/d/Conf/logs/
tmi2_fluffos_v2/lib/d/Conf/obj/
tmi2_fluffos_v2/lib/d/Conf/text/help/
tmi2_fluffos_v2/lib/d/Fooland/adm/
tmi2_fluffos_v2/lib/d/Fooland/data/
tmi2_fluffos_v2/lib/d/Fooland/data/attic/
tmi2_fluffos_v2/lib/d/Fooland/items/
tmi2_fluffos_v2/lib/d/TMI/
tmi2_fluffos_v2/lib/d/TMI/adm/
tmi2_fluffos_v2/lib/d/TMI/boards/
tmi2_fluffos_v2/lib/d/TMI/data/
tmi2_fluffos_v2/lib/d/TMI/rooms/
tmi2_fluffos_v2/lib/d/grid/
tmi2_fluffos_v2/lib/d/grid/adm/
tmi2_fluffos_v2/lib/d/grid/data/
tmi2_fluffos_v2/lib/d/std/
tmi2_fluffos_v2/lib/d/std/adm/
tmi2_fluffos_v2/lib/data/adm/
tmi2_fluffos_v2/lib/data/adm/daemons/
tmi2_fluffos_v2/lib/data/adm/daemons/doc_d/
tmi2_fluffos_v2/lib/data/adm/daemons/emoted/
tmi2_fluffos_v2/lib/data/adm/daemons/network/http/
tmi2_fluffos_v2/lib/data/adm/daemons/network/services/mail_q/
tmi2_fluffos_v2/lib/data/adm/daemons/network/smtp/
tmi2_fluffos_v2/lib/data/adm/daemons/news/archives/
tmi2_fluffos_v2/lib/data/attic/connection/
tmi2_fluffos_v2/lib/data/attic/user/
tmi2_fluffos_v2/lib/data/std/connection/b/
tmi2_fluffos_v2/lib/data/std/connection/l/
tmi2_fluffos_v2/lib/data/std/user/a/
tmi2_fluffos_v2/lib/data/std/user/b/
tmi2_fluffos_v2/lib/data/std/user/d/
tmi2_fluffos_v2/lib/data/std/user/f/
tmi2_fluffos_v2/lib/data/std/user/l/
tmi2_fluffos_v2/lib/data/std/user/x/
tmi2_fluffos_v2/lib/data/u/d/dm/working/doc_d/
tmi2_fluffos_v2/lib/data/u/l/leto/doc_d/
tmi2_fluffos_v2/lib/data/u/l/leto/smtp/
tmi2_fluffos_v2/lib/doc/
tmi2_fluffos_v2/lib/doc/driverdoc/applies/
tmi2_fluffos_v2/lib/doc/driverdoc/applies/interactive/
tmi2_fluffos_v2/lib/doc/driverdoc/concepts/
tmi2_fluffos_v2/lib/doc/driverdoc/driver/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/arrays/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/buffers/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/compile/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/ed/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/filesystem/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/floats/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/functions/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/general/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/mappings/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/numbers/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/parsing/
tmi2_fluffos_v2/lib/doc/driverdoc/lpc/constructs/
tmi2_fluffos_v2/lib/doc/driverdoc/lpc/preprocessor/
tmi2_fluffos_v2/lib/doc/driverdoc/lpc/types/
tmi2_fluffos_v2/lib/doc/driverdoc/platforms/
tmi2_fluffos_v2/lib/doc/mudlib/
tmi2_fluffos_v2/lib/ftp/
tmi2_fluffos_v2/lib/include/driver/
tmi2_fluffos_v2/lib/log/
tmi2_fluffos_v2/lib/log/driver/
tmi2_fluffos_v2/lib/obj/net/
tmi2_fluffos_v2/lib/obj/shells/
tmi2_fluffos_v2/lib/obj/tools/
tmi2_fluffos_v2/lib/std/adt/
tmi2_fluffos_v2/lib/std/board/
tmi2_fluffos_v2/lib/std/body/
tmi2_fluffos_v2/lib/std/fun/
tmi2_fluffos_v2/lib/std/living/
tmi2_fluffos_v2/lib/std/object/
tmi2_fluffos_v2/lib/std/shop/
tmi2_fluffos_v2/lib/std/socket/
tmi2_fluffos_v2/lib/std/user/
tmi2_fluffos_v2/lib/std/virtual/
tmi2_fluffos_v2/lib/student/
tmi2_fluffos_v2/lib/student/kalypso/
tmi2_fluffos_v2/lib/student/kalypso/armor/
tmi2_fluffos_v2/lib/student/kalypso/rooms/
tmi2_fluffos_v2/lib/student/kalypso/weapons/
tmi2_fluffos_v2/lib/u/l/leto/
tmi2_fluffos_v2/lib/u/l/leto/cmds/
tmi2_fluffos_v2/lib/www/errors/
tmi2_fluffos_v2/lib/www/gateways/
tmi2_fluffos_v2/lib/www/images/
tmi2_fluffos_v2/old/
tmi2_fluffos_v2/win32/
// file:   obj/webster.c
// author: Truilkan@Basis
// date:   1992/10/29
// mudlib: Basis

// if you choose to use this code in your mud, please retain the above
// header.  if you write a help screen for this object, please give credit
// to the original authors (Truilkan and Jacques)

// This object obeys part of the RFC for dictionary lookups.  It provides
// an LPC object frontend (in the form of a dictionary object) to an online
// dictionary server.

// todo: parse the first line returned in order to be smart about
// interpreting results of a query (successful, failed, etc).

// Truilkan brought a copy over to the MudOS 0.9 mudlib development site,
// and converted it to our mudlib.
// Mobydick added the help call, 11-9-92

#include <mudlib.h>
#include <net/socket.h>
inherit OBJECT;

#define DISCONNECTED "a dictionary (closed)"
#define CONNECTED "a dictionary (open)"

// webster.cs.indiana.edu
//#define WEBSTER_SERVER "129.79.254.195"
// webster.acc.virginia.edu
#define WEBSTER_SERVER "128.143.22.17"

inherit "/std/socket/telnet";

void
create()
{
   telnet::create();
   set("id", ({"dictionary", "book", "webster"}) );
   set("short", DISCONNECTED);
   set("long", "Its a fine dictionary with faded gold embossing.\n"
   + "You could probably do all manner of things with it such as defining,\n"
   + "completing, and spelling words.\n");
   set_verbosity(0);
}

void
handler(string event)
{
   switch (event) {
      case "open" :
      set("short", CONNECTED);
      tell_object(environment(this_object()),
         "The dictionary creaks open.\n");
      break;
      case "close" :
      tell_object(environment(this_object()),
         "The dictionary slams shut!\n");
      set("short", DISCONNECTED);
      break;
      default:
      break;
   }
}

int
dlookup(string arg)
{
   int result;

   if (!query_connected()) {
      notify_fail("The dictionary isn't open!\n");
      return 0;
   }
   say((string)this_player()->query("cap_name") + " looks up a word.\n");
   telnet::send("DEFINE " + arg + "\n");
   return 1;
}

int
dopen(string arg)
{
   if (query_connected()) {
      notify_fail("It's already open!\n");
      return 0;
   }
   say((string)this_player()->query("cap_name") + " opens "
      + possessive(this_player()->query("gender")) + " dictionary.\n");
    return telnet::connect( (( arg = this_player()->query_env("WEBSTER") )
	  ? arg : WEBSTER_SERVER ) + " 2627");
}

int
dclose(string arg)
{
   if (!query_connected()) {
      notify_fail("It's already closed!\n");
      return 0;
   }
   say((string)this_player()->query("cap_name") + " closes "
      + possessive(this_player()->query("gender")) + " dictionary.\n");
   return telnet::disconnect(arg);
}

int
dskim(string arg)
{
   int result;

   if (!query_connected()) {
      notify_fail("The dictionary isn't open!\n");
      return 0;
   }
   say((string)this_player()->query("cap_name") + " skims the dictionary.\n");
   telnet::send("ENDINGS " + arg + "\n");
   return 1;
}

int
dspell(string arg)
{
   int result;

   if (!query_connected()) {
      notify_fail("The dictionary isn't open!\n");
      return 0;
   }
   say((string)this_player()->query("cap_name") + " searches for a word.\n");
   telnet::send("SPELL " + arg + "\n");
   return 1;
}

int
dcomplete(string arg)
{
   int result;

   if (!query_connected()) {
      notify_fail("The dictionary isn't open!\n");
      return 0;
   }
   say((string)this_player()->query("cap_name") + " searches for a word.\n");
   telnet::send("COMPLETE " + arg + "\n");
   return 1;
}

void
init()
{
   add_action("dlookup", "define");
   add_action("dskim", "endings");
   add_action("dopen", "open");
   add_action("dclose", "close");
   add_action("dspell", "spell");
   add_action("dcomplete", "complete");
   add_action ("help", "help") ;
}

int help (string str) {
	if (str!="dictionary" && str != "webster" && str !="book") return 0 ;
	write (
"The dictionary will let you look up words, get the spellings correct, and\n"+
"find their meanings. Handy commands are:\n\n"+
"   open book : Connect the dictionary to the word server.\n"+
"   close book : Close the connection.\n"+
"   spell <word> : If the word is spelled correctly, the dictionary returns\n"+
"	'SPELLING 1'. If the word is not found, a list of similar words is\n"+
"       printed, hopefully including the correct spelling of the word you\n"+
"	want.\n"+
"   define <word> : Give the definition of the word.\n"+
"   endings <part of word> : Give a list of words that begin with a part\n"+
"	of a word. For example, if you weren't sure if the word 'potato'\n"+
"	had an 'e' on the end, you could type 'endings potat' and get a\n"+
"	list of all words beginning with 'potat'.\n"+
"\nDictionary by Truilkan@Portals and Jacques@Portals.\n") ;
	return 1 ;
}