lima-1.0b5/
lima-1.0b5/driver/
lima-1.0b5/driver/ChangeLog.old/
lima-1.0b5/driver/Win32/
lima-1.0b5/driver/compat/
lima-1.0b5/driver/include/
lima-1.0b5/driver/testsuite/
lima-1.0b5/driver/testsuite/clone/
lima-1.0b5/driver/testsuite/command/
lima-1.0b5/driver/testsuite/data/
lima-1.0b5/driver/testsuite/etc/
lima-1.0b5/driver/testsuite/include/
lima-1.0b5/driver/testsuite/inherit/
lima-1.0b5/driver/testsuite/inherit/master/
lima-1.0b5/driver/testsuite/log/
lima-1.0b5/driver/testsuite/single/
lima-1.0b5/driver/testsuite/single/tests/compiler/
lima-1.0b5/driver/testsuite/single/tests/efuns/
lima-1.0b5/driver/testsuite/single/tests/operators/
lima-1.0b5/driver/testsuite/u/
lima-1.0b5/driver/tmp/
lima-1.0b5/etc/
lima-1.0b5/lib/WWW/help/
lima-1.0b5/lib/cmds/
lima-1.0b5/lib/cmds/create/
lima-1.0b5/lib/cmds/player/attic/
lima-1.0b5/lib/contrib/bboard/
lima-1.0b5/lib/contrib/boards/
lima-1.0b5/lib/contrib/marriage/
lima-1.0b5/lib/contrib/roommaker/
lima-1.0b5/lib/contrib/transient_effect/
lima-1.0b5/lib/daemons/channel/
lima-1.0b5/lib/daemons/imud/
lima-1.0b5/lib/data/
lima-1.0b5/lib/data/config/
lima-1.0b5/lib/data/links/
lima-1.0b5/lib/data/news/
lima-1.0b5/lib/data/players/
lima-1.0b5/lib/data/secure/
lima-1.0b5/lib/domains/
lima-1.0b5/lib/domains/std/2.4.5/maze1/
lima-1.0b5/lib/domains/std/2.4.5/npc/
lima-1.0b5/lib/domains/std/2.4.5/post_dir/
lima-1.0b5/lib/domains/std/2.4.5/sub/
lima-1.0b5/lib/domains/std/camera/
lima-1.0b5/lib/domains/std/config/
lima-1.0b5/lib/domains/std/cult/
lima-1.0b5/lib/domains/std/effects/
lima-1.0b5/lib/domains/std/misc/
lima-1.0b5/lib/domains/std/monsters/
lima-1.0b5/lib/domains/std/recorder/
lima-1.0b5/lib/domains/std/rooms/
lima-1.0b5/lib/domains/std/rooms/beach/
lima-1.0b5/lib/domains/std/rooms/labyrinth/
lima-1.0b5/lib/domains/std/school/
lima-1.0b5/lib/domains/std/school/O/
lima-1.0b5/lib/domains/std/spells/
lima-1.0b5/lib/domains/std/spells/stock-mage/
lima-1.0b5/lib/domains/std/spells/stock-priest/
lima-1.0b5/lib/help/
lima-1.0b5/lib/help/admin/
lima-1.0b5/lib/help/hints/General_Questions/
lima-1.0b5/lib/help/hints/Pirate_Quest/
lima-1.0b5/lib/help/player/
lima-1.0b5/lib/help/player/bin/
lima-1.0b5/lib/help/player/quests/
lima-1.0b5/lib/help/wizard/
lima-1.0b5/lib/help/wizard/coding/guilds/
lima-1.0b5/lib/help/wizard/coding/rooms/
lima-1.0b5/lib/help/wizard/lib/daemons/
lima-1.0b5/lib/help/wizard/lib/lfun/
lima-1.0b5/lib/help/wizard/lib/std/
lima-1.0b5/lib/help/wizard/mudos_doc/
lima-1.0b5/lib/help/wizard/mudos_doc/applies/
lima-1.0b5/lib/help/wizard/mudos_doc/applies/interactive/
lima-1.0b5/lib/help/wizard/mudos_doc/applies/parsing/
lima-1.0b5/lib/help/wizard/mudos_doc/concepts/
lima-1.0b5/lib/help/wizard/mudos_doc/driver/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/arrays/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/buffers/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/compile/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/filesystem/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/floats/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/functions/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/general/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/mappings/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/mixed/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/numbers/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/parsing/
lima-1.0b5/lib/help/wizard/mudos_doc/lpc/constructs/
lima-1.0b5/lib/help/wizard/mudos_doc/lpc/types/
lima-1.0b5/lib/include/driver/
lima-1.0b5/lib/log/
lima-1.0b5/lib/obj/admtool/
lima-1.0b5/lib/obj/admtool/internal/
lima-1.0b5/lib/obj/admtool/mudinfo/
lima-1.0b5/lib/obj/admtool/secure/
lima-1.0b5/lib/obj/secure/
lima-1.0b5/lib/obj/secure/cmd/
lima-1.0b5/lib/obj/secure/mailers/
lima-1.0b5/lib/obj/secure/shell/
lima-1.0b5/lib/obj/secure/shell/classes/
lima-1.0b5/lib/obj/tasktool/
lima-1.0b5/lib/obj/tasktool/internal/
lima-1.0b5/lib/open/
lima-1.0b5/lib/secure/
lima-1.0b5/lib/secure/cgi/
lima-1.0b5/lib/secure/modules/
lima-1.0b5/lib/secure/simul_efun/
lima-1.0b5/lib/std/adversary/
lima-1.0b5/lib/std/adversary/advancement/
lima-1.0b5/lib/std/adversary/armor/
lima-1.0b5/lib/std/adversary/blows/
lima-1.0b5/lib/std/adversary/death/
lima-1.0b5/lib/std/adversary/formula/
lima-1.0b5/lib/std/adversary/health/
lima-1.0b5/lib/std/adversary/pulse/
lima-1.0b5/lib/std/adversary/wield/
lima-1.0b5/lib/std/classes/event_info/
lima-1.0b5/lib/std/container/
lima-1.0b5/lib/std/living/
lima-1.0b5/lib/std/modules/contrib/
lima-1.0b5/lib/std/patterns/
lima-1.0b5/lib/std/race/
lima-1.0b5/lib/std/race/restricted/
lima-1.0b5/lib/std/room/
lima-1.0b5/lib/tmp/
lima-1.0b5/lib/trans/
lima-1.0b5/lib/trans/admincmds/
lima-1.0b5/lib/trans/obj/
lima-1.0b5/lib/wiz/
#include <commands.h>
#include <security.h>
#include <daemons.h>

inherit __DIR__ "internal/base";

class command_info array module_commands(string);

string our_task;
class command_info array our_defaults;


string module_name() {
    return "main";
}


void finish_add_task(string title, string desc) {
    string t_id = TASK_D->add_task(our_task, title, desc, 
				   this_user()->query_userid());
    
    if (!t_id) {
	write("** Error: Unable to add '"+title+"' below "+our_task+".\n");
	return;
    }

    write("Added " + t_id + "(" + title + ").\n");
    do_help();
}

nomask private void my_add_task(string title) {
    input_one_arg("Description: ",(: finish_add_task, title :) );
}


nomask private void my_complete_task(string task_id) {
    int result;
    
    if (our_task != 0)
      task_id = our_task + "." + task_id;

    result = TASK_D->complete_task(task_id);
    
    if (!result) {
	write("** Error: Unable to complete task " + task_id + "\n");
	return;
    }
    
    if (stringp(result)) {
	write("** Error: " + result + "\n");
	return;
    }
    
    write("Done.\n");
    do_help();
}


nomask private void my_remove_task(string task_id) {
    if (our_task != 0)
      task_id = our_task + "." + task_id;
    
    if (!TASK_D->remove_task(task_id)) {
	write("** Error: No such task: " + task_id + "\n");
	return;
    }
    
    write("Done.\n");
    do_help();
}


class command_info array module_commands() {
    class command_info array ret = ({ });
    int n = 1;

    if (our_task != 0) {
	array t = TASK_D->query_task(our_task);
	
	ret += ({
	    new(class command_info, desc : t[1] )
	});
    }
    
    foreach (array task in TASK_D->query_tasks(our_task)) {
	string key, name, status;
	
	key = sprintf("%d", n);
	
	if (key) {
	    string file = base_name();
	    string task_id = key;
	    
	    if (our_task != 0)
	      task_id = our_task + "." + task_id;
	    
	    name   = TASK_D->query_title(task_id);
	    status = TASK_D->query_status(task_id);
	    status = repeat_string(".", 12 - sizeof(status)) + status;
	    status = "[" + status + "]";
	    
	    ret += ({ 
		new(class command_info, key : key, desc : name,
		    action : (: clone_object, file, task_id :),
		    status : status)
	    });
	}
	
	n++;
    }

    ret += ({
	new(class command_info),
	
	new(class command_info,
	    key : "a",
	    proto : "[title]",
	    args : ({ "Title: " }),
	    action : (: my_add_task :),
	    desc : "add task"),
	    
	new(class command_info,
	    key : "c",
	    proto : "[id]",
	    args : ({ "Task ID: " }),
	    action : (: my_complete_task :),
	    desc : "complete task"),
	    
	new(class command_info,
	    key : "r",
	    proto : "[id]",
	    args : ({ "Task ID: " }),
	    action : (: my_remove_task :),
	    desc : "remove task"),
    });
    
    return ret;
}

protected void heading() {
    string task_str = "Task Tool";
    
    if (our_task) {
	task_str = "["+our_task+"] " + TASK_D->query_title(our_task);
    }
    
    write("\n%^TASK_HEADING%^"
	  "--- " + task_str + " ---\n"
	  "%^RESET%^\n");
}

protected class command_info array defaults() {
    return  our_defaults;
}


void create(string task_id)
{
    if ( clonep() )
    {
	our_task = task_id;
	
	our_defaults = ({
	    new(class command_info), // blank line
	});
	
	/* Only set up "previous menu" option if not top-level. */
	if (our_task != 0) {
	    our_defaults += ({
		new(class command_info, key : "m", desc : "previous menu", 
		    action : (: do_main_menu :)),
	    });
	}

	our_defaults += ({ 
	    new(class command_info, key : "q", desc : "quit", 
		action : (: do_quit :)),
	    new(class command_info, key : "?", desc : "help", 
		action : (: do_help :))
	});

	
        if ( file_name(previous_object()) != CMD_OB_TASKTOOL &&
	     base_name(previous_object()) != TASKTOOL )
	{
	    write("Illegal attempt to clone TASKTOOL\n");
            destruct(this_object());
            return;
        }

	::create();
    }
}