nightmare4_fluffos_v1/
nightmare4_fluffos_v1/bin/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/ChangeLog.old/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/Win32/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/compat/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/compat/simuls/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/include/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/clone/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/command/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/data/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/etc/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/include/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/inherit/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/inherit/master/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/log/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/single/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/single/tests/compiler/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/single/tests/efuns/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/single/tests/operators/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/u/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/tmp/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/windows/
nightmare4_fluffos_v1/lib/cfg/
nightmare4_fluffos_v1/lib/cmds/admins/
nightmare4_fluffos_v1/lib/cmds/common/
nightmare4_fluffos_v1/lib/cmds/creators/include/
nightmare4_fluffos_v1/lib/cmds/creators/include/SCCS/
nightmare4_fluffos_v1/lib/cmds/hm/
nightmare4_fluffos_v1/lib/daemon/services/
nightmare4_fluffos_v1/lib/doc/
nightmare4_fluffos_v1/lib/doc/faq/
nightmare4_fluffos_v1/lib/doc/help/classes/
nightmare4_fluffos_v1/lib/doc/help/creators/
nightmare4_fluffos_v1/lib/doc/help/hm/
nightmare4_fluffos_v1/lib/doc/help/players/
nightmare4_fluffos_v1/lib/doc/help/races/
nightmare4_fluffos_v1/lib/doc/help/religion/
nightmare4_fluffos_v1/lib/doc/mudlib/
nightmare4_fluffos_v1/lib/doc/mudlib/cfg/
nightmare4_fluffos_v1/lib/domains/Ylsrim/
nightmare4_fluffos_v1/lib/domains/Ylsrim/adm/
nightmare4_fluffos_v1/lib/domains/Ylsrim/armour/
nightmare4_fluffos_v1/lib/domains/Ylsrim/fish/
nightmare4_fluffos_v1/lib/domains/Ylsrim/meal/
nightmare4_fluffos_v1/lib/domains/Ylsrim/npc/
nightmare4_fluffos_v1/lib/domains/Ylsrim/virtual/
nightmare4_fluffos_v1/lib/domains/Ylsrim/weapon/
nightmare4_fluffos_v1/lib/domains/Ylsrim/xtra/
nightmare4_fluffos_v1/lib/lib/comp/
nightmare4_fluffos_v1/lib/lib/lvs/
nightmare4_fluffos_v1/lib/lib/std/
nightmare4_fluffos_v1/lib/lib/user/
nightmare4_fluffos_v1/lib/news/
nightmare4_fluffos_v1/lib/obj/
nightmare4_fluffos_v1/lib/obj/include/
nightmare4_fluffos_v1/lib/save/
nightmare4_fluffos_v1/lib/save/kills/a/
nightmare4_fluffos_v1/lib/save/kills/b/
nightmare4_fluffos_v1/lib/save/kills/f/
nightmare4_fluffos_v1/lib/save/kills/m/
nightmare4_fluffos_v1/lib/save/kills/q/
nightmare4_fluffos_v1/lib/save/kills/r/
nightmare4_fluffos_v1/lib/secure/cfg/
nightmare4_fluffos_v1/lib/secure/cfg/classes/
nightmare4_fluffos_v1/lib/secure/cfg/races/SCCS/
nightmare4_fluffos_v1/lib/secure/cmds/creators/include/
nightmare4_fluffos_v1/lib/secure/cmds/players/
nightmare4_fluffos_v1/lib/secure/cmds/players/include/
nightmare4_fluffos_v1/lib/secure/daemon/include/
nightmare4_fluffos_v1/lib/secure/lib/
nightmare4_fluffos_v1/lib/secure/lib/include/
nightmare4_fluffos_v1/lib/secure/lib/net/
nightmare4_fluffos_v1/lib/secure/lib/std/
nightmare4_fluffos_v1/lib/secure/obj/
nightmare4_fluffos_v1/lib/secure/obj/include/
nightmare4_fluffos_v1/lib/secure/save/
nightmare4_fluffos_v1/lib/secure/save/boards/
nightmare4_fluffos_v1/lib/secure/save/votes/
nightmare4_fluffos_v1/lib/spells/
nightmare4_fluffos_v1/lib/verbs/admins/include/
nightmare4_fluffos_v1/lib/verbs/common/
nightmare4_fluffos_v1/lib/verbs/common/include/
nightmare4_fluffos_v1/lib/verbs/creators/
nightmare4_fluffos_v1/lib/verbs/creators/include/
nightmare4_fluffos_v1/lib/verbs/players/include/SCCS/
nightmare4_fluffos_v1/lib/verbs/rooms/
nightmare4_fluffos_v1/lib/verbs/rooms/include/
nightmare4_fluffos_v1/lib/www/
nightmare4_fluffos_v1/old/
nightmare4_fluffos_v1/old/tools/
nightmare4_fluffos_v1/win32/
/*    /cmds/common/help.c
 *    from the Nightmare IV Object Library
 *    created by Descartes of Borg 951021
 *    Version: @(#) help.c 1.3@(#)
 *    Last Modified: 96/12/13
 */

#include <lib.h>
#include <daemons.h>
#include <message_class.h>

inherit LIB_DAEMON;

varargs void HelpMenu(string index);

mixed cmd(string arg) {
    object who = previous_object();
    int array screen = (who->GetScreen() || ({ 80, 24 }));
    string help;
    
    if( !arg ) {
	help = center("Nightmare IV System Help", screen[0]);
	help += wrap(HELP_D->GetHelp(0), screen[0]);
	who->eventPage(explode(help, "\n"), MSG_HELP, function() {
	    this_player()->eventPrint("Hit the <return> key to get a list of indices,"
			       "'q' to quit help: ", MSG_PROMPT);
	    input_to(function(string str) {
		if( str == "q" ) return;
		HelpMenu(); });
	});
	return 1;
    }
    if( arg == "index" || HELP_D->GetTopics(arg) ) {
	if( arg == "index" ) {
	    HelpMenu();
	    return 1;
	}
	HelpMenu(arg);
	return 1;
    }
    if( !(help = HELP_D->GetHelp(arg)) ) {
	return HELP_D->GetLastError();
    }
    help = center("Nightmare IV System Help", screen[0]) + help;
    help = wrap(help, screen[0]);
    who->eventPage(explode(help, "\n"), MSG_HELP);
    return 1;
}

static int CanAccess(object who, string index) {
    return HELP_D->CanAccess(who, index);
}

varargs void HelpMenu(string index) {
    function f;
    string tmp;
    string array indices;
    int array scr;
    int y = 0;
    
    scr = this_player()->GetScreen() || ({ 80, 25 });
    tmp = center("Nightmare IV System Help", scr[0]);
    if( !index ) {
	tmp += "Index: %^GREEN%^main index%^RESET%^\n\n";
	indices = filter(HELP_D->GetIndices(),
			 (: CanAccess(this_player(), $1) :));
	foreach(string yuck in indices) {
	    int z = strlen(yuck) + 6;
	    
	    if( z > y ) {
		y = z;
	    }
	}
	tmp += format_page(map(indices, function(string str, string array ind) {
	    int num = member_array(str, ind) + 1;
	    return ("[%^CYAN%^"+(num)+"%^RESET%^] " + str);
	}, indices), scr[0]/(y+2));
    }
    else if( !HELP_D->CanAccess(this_player(), index) ) {
	message("help", "Invalid index choice.", this_player());
	message("prompt", "Hit <return>: ", this_player());
	input_to(function(string str) { HelpMenu(0); });
	return;
    }
    else {
	string array topics = HELP_D->GetTopics(index);
	string array bing = allocate(sizeof(topics));
	int i = 0;

	tmp += "Index: %^GREEN%^" + index + "%^RESET%^\n\n";
	foreach(string topic in topics) {
	    int z = strlen(topic) + 6;
	    
	    if( z > y ) {
		y = z;
	    }
	    bing[i++] = "[%^CYAN%^" + (i+1) + "%^RESET%^] " + topic;
	}
	tmp += format_page(bing, scr[0]/(y+2));
    }
    f = function(string ind) {
	if( !ind )
	    message("prompt", "\n\nEnter a index or 'q' to quit help: ",
		    this_player());
	else
	    message("prompt", "\n\nEnter a topic, 'q' to quit help, or "
		    "<return> for main menu: ", this_player());
	input_to(function(string str, string ind) {
	    string ret;
	    int ind_num;
	    int *scr;
	    
	    if( str == "q" ) {
		message("system", "Exiting help.", this_player());
		return;
	    }
	    if( !str || str == "" ) {
		HelpMenu(0);
		return;
	    }
	    scr = (int *)this_player()->GetScreen() || ({ 80 });
	    if( ind_num = to_int(str) ) {
		string array tmp2;
		if( !ind ) tmp2 = filter(HELP_D->GetIndices(),
					 (: CanAccess(this_player(), $1) :));
		else tmp2 = HELP_D->GetTopics(ind);    
		if( ind_num < 1 || ind_num > sizeof(tmp2) ) {
		    str = 0;
		    HELP_D->SetError("Index number out of range.");
		}
		else str = tmp2[ind_num - 1];
	    }
	    if( !ind && !HELP_D->GetTopics(str) ) {
		message("help", "Invalid index choice.", this_player());
		message("prompt", "Hit <return>: ", this_player());
		input_to(function(string str) { HelpMenu(); });
		return;
	    }
	    else if( !ind ) {
		HelpMenu(str);
		return;
	    }
	    if( !(ret = HELP_D->GetHelpByIndex(ind, str)) ) {
		message("help", HELP_D->GetLastError(), this_player());
		message("prompt", "\nHit <return>: ", this_player());
		input_to(function(string str) { HelpMenu(); });
		return;
	    }
	    ret = center("Nightmare IV System Help", scr[0])+wrap(ret, scr[0]);
	    this_player()->eventPage(explode(ret, "\n"), "help",
				     function(string ind) {
		message("prompt", "\n\nHit <return>: ",
                        this_player());
		input_to(function(string str, string ind) {
                    HelpMenu(ind); }, ind);
		return;
	    }, ind);
	}, ind);
    };
    this_player()->eventPage(explode(tmp, "\n"), "help", f, index);
}