/
bin/95/
docs/DM/
docs/creatures/
docs/objects/
docs/rooms/
docs/utils/
help/
log/
objmon/ddesc/
player/
post/
rooms/
util/
util/fing/
util/italk/
util/lev-reset/
util/lib/
util/list/
util/msg/
util/tdel/
util/vote/
util/wtfix/
//eliza.hpp
//chris busch (c) copyright 1995 all rights reserved
#ifdef NULL
#undef NULL
#endif
#define NULL 0

#ifndef ELIZA_HPP
#define ELIZA_HPP

#include <string.h>
#include "chatmain.hpp"
#include "allkeys.hpp"

//if set eliza will use more of an exhaustive search to find a name.
// if looking for 'Bobby Jo' this will look for 'Bobby Jo' then
// Bobby and finally Jo.
#define USE_EX_SEARCH	
		

class eliza
{
public:
  enum {maxdbases=100,maxnames=200,defaultdbase=0};
  enum { repsize=150}; //reply size

  struct nametype {
    char* name;
    int dbase;

    char* set(char* n,int d) { name=strdup(n); dbase=d; return name; }
    nametype() { name=NULL; dbase=0; }
    ~nametype() { if(name) free(name); }
  };
  static char* trim(char str[]);
protected:
  int numdbases,numnames;
  allkeys thekeys[maxdbases];
  nametype thenames[maxnames];


  int doop(char op,int a,int b);
  int lowcase(char ch);
  int strpos(char *s,char *sub);
  int match(char s[],char m[],int& in,int&);

  bool addname(char*,int);  //add one name and number
  bool addbunch(char*, int); //add more then one name to some number
  void sortnames();
  int getname(char*);     //only tries once to find a name
  int getanyname(char*);  //more exhaustive search to find name

public:
  void reducespaces(char *);
  void eliza::addrest(char* replied, char* talker,
		       char* rep, char* target,char* rest);
public:


  bool loaddata(char*,char recurflag=0);
  char* processdbase(char* talker,char* message,char* target,int dbase);
  char* process(char* talker,char* message,char* target)    {
#ifdef USE_EX_SEARCH	
    return processdbase(talker,message,target,getanyname(talker));
#else
    return processdbase(talker,message,target,getname(talker));
#endif
  }

  eliza() { numdbases=0; numnames=0; addname("default",0); }

};

#endif