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/
/*
 * _help.c
 * description: user help command
 * authors: wayfarer, mr.x
 * last modified: 2/14/92
 * BUGS: change special case below to use mappings
 * Pallando made a few updates 930109
 * Watcher updated the help search pattern 930415
 * Pretty much rewritten by Blue from October 94 onwards.
 */

// If this command gives unexpected problems, use ohelp instead
#include <uid.h>
#include <help.h>
#include <config.h>
#include <daemons.h>
#include <mudlib.h>

#define STD_HELP "/doc/help/help_screen"

inherit DAEMON;


void display_doc(string docfile);


void write_banner(string group, string topic) {
    printf("---------------------------------------------------\nHelp for %s (%s)\n----------------------------------------------------\n", topic, group);
//  write ("---------------------------------------------------\n");
//  write ("Help for "+topic+" ("+group+")\n");
//  write ("---------------------------------------------------\n");
}


int cmd_help(string topic) {
  string *search_path;
  string *list;
  string arg,name ;
  int i, ii;
  object ob, act_ob;
  string bin, bintopic ;
  
  act_ob = this_player();
  
  if(!topic || topic == "") {
      this_player()->more(STD_HELP, 0 ,1);
      return 1;
    }
 
  topic = lower_case (topic);
 
  switch(topic) {

	case "properties" :	write("[Property document files]\n\n");
				this_player()->force_me("ls " + PROPH_DIR);
				return 1;
				break;
	case "efun"	:
	case "efuns"	:	write("[Efun document files]\n\n");
				this_player()->force_me("ls " + EFUN_DIR);
				return 1;
				break;
	case "lfun"	:
	case "lfuns"	: 	write("[Lfun document files]\n\n");
				this_player()->force_me("ls " + LFUN_DIR);
				return 1; 
				break;
	case "wizhelp"	:	write("[Wizhelp document files]\n\n");
				this_player()->force_me("ls " + WIZH_DIR);
				return 1;
				break;
	case "simul_efuns" :	
	case "simul_efun"  :	write("[Simul_efun document files]\n\n");
				this_player()->force_me("ls " + SE_DIR);
				return 1;
				break;
	case "applies"	:	write("[Applies document files]\n\n");
				this_player()->force_me("ls " + APPLY_DIR);
				return 1; 
				break;
	case "lpc" 	:	write("[LPC document files]\n\n");
				this_player()->force_me("ls " + LPCH_DIR);
				return 1;
				break;
	case "concepts"	:	write("[Concepts document files]\n\n");
				this_player()->force_me("ls " + CONCEPT_DIR);
				return 1;
				break;

   }


    list = DOC_D->get_docs_on(topic, explode((string)this_player()->query("PATH"), ":"));
    if (sizeof(list)) {
        if (sizeof(list)==2) {
            printf("%s: %s\n", list[1], list[0]);
            display_doc(list[1]);
            return 1;
        }
        for (ii=0;ii<sizeof(list);ii+=2) {
            printf("[%d] %s: %s", ii/2+1, list[ii+1], list[ii]);
        }
        printf("Which doc [1-%d,q]? ", sizeof(list)/2);
        input_to("which_doc", 0, list);
        return 1;
    }
  
  if ((ob = present(topic,act_ob)) ||
      (environment(act_ob) && (ob = present(topic,environment(act_ob)))))
    {
      if(function_exists("help",ob))
	{
	  write ("---------------------------------------------------\n");
	  write ("Help for "+topic+" (Object Help)\n");
	  write ("---------------------------------------------------\n");
	  ob->help();
	  return 1;
	}
    }
  write("There is no help available on that topic.\n");
  return 1;
}

void which_doc(string instr, string *list) {
int wd;

    if (!instr || !stringp(instr)) {
        printf("Which doc [1-%d,q]? ", sizeof(list)/2);
        input_to("which_doc", 0, list);
        return;
    }
    if ((instr[0] | 32) == 'q') {
        printf("Thank you for using Blue-Help(tm)!  Please come again.\n");
        return;
    }
    if (((wd = to_int(instr))) < 1 || (wd > sizeof(list)/2)) {
        printf("A number in the range 1 to %d, please.\nWhich doc [1-%d,q]? ", sizeof(list)/2, sizeof(list)/2);
        input_to("which_doc", 0, list);
        return;
    }
    display_doc(list[wd*2-1]);
}


void display_doc(string docfile) {
    object tmp_ob;

    if (file_exists(sprintf("%s.c", docfile))) {
        if ((tmp_ob = find_object(docfile)) || (tmp_ob = load_object(docfile))) {
            if (function_exists("help", tmp_ob)) {
                tmp_ob->help();
            }
            else {
                printf("A command %s exists, but it has no help.\n", docfile);
            }
        }
    }
    this_player()->more(docfile);
}


void see_alsos(string docfile) {
    string contents, tmp;
    string *see_alsos;

    contents = read_file(docfile);
    if (!sscanf(contents, "%*sSEE ALSO%s", tmp)) {
        return;
    }
    sscanf(tmp, "%s\n\n%*s", tmp);
    printf("See also: %s\n", tmp);
}


int help() {
	write ("Usage: help topic\n\n"+
"The help command can give you help on a number of things in the mudlib\n"+
"Typing \"help\" will get you a general overview. \"help start\" will show\n"+
"you some information for new players. \"help topics\" will give you list\n"+
"of things you might want to read help on.\n"
"If there is more than one help topic matching the one\n"
"you choose, you will be offered a menu to pick from.\n");
	return 1 ;
}