dsI/bin/
dsI/extra/creremote/
dsI/extra/mingw/
dsI/extra/wolfpaw/
dsI/fluffos-2.7-ds2.018/
dsI/fluffos-2.7-ds2.018/ChangeLog.old/
dsI/fluffos-2.7-ds2.018/Win32/
dsI/fluffos-2.7-ds2.018/compat/
dsI/fluffos-2.7-ds2.018/compat/simuls/
dsI/fluffos-2.7-ds2.018/testsuite/
dsI/fluffos-2.7-ds2.018/testsuite/clone/
dsI/fluffos-2.7-ds2.018/testsuite/command/
dsI/fluffos-2.7-ds2.018/testsuite/data/
dsI/fluffos-2.7-ds2.018/testsuite/etc/
dsI/fluffos-2.7-ds2.018/testsuite/include/
dsI/fluffos-2.7-ds2.018/testsuite/inherit/
dsI/fluffos-2.7-ds2.018/testsuite/inherit/master/
dsI/fluffos-2.7-ds2.018/testsuite/log/
dsI/fluffos-2.7-ds2.018/testsuite/single/
dsI/fluffos-2.7-ds2.018/testsuite/single/tests/compiler/
dsI/fluffos-2.7-ds2.018/testsuite/single/tests/efuns/
dsI/fluffos-2.7-ds2.018/testsuite/single/tests/operators/
dsI/fluffos-2.7-ds2.018/testsuite/u/
dsI/fluffos-2.7-ds2.018/tmp/
dsI/lib/cfg/
dsI/lib/cmds/common/
dsI/lib/cmds/creators/include/
dsI/lib/cmds/creators/include/SCCS/
dsI/lib/daemon/services/
dsI/lib/doc/
dsI/lib/domains/Ylsrim/
dsI/lib/domains/Ylsrim/adm/
dsI/lib/domains/Ylsrim/armour/
dsI/lib/domains/Ylsrim/broken/
dsI/lib/domains/Ylsrim/fish/
dsI/lib/domains/Ylsrim/meal/
dsI/lib/domains/Ylsrim/npc/
dsI/lib/domains/Ylsrim/virtual/
dsI/lib/domains/Ylsrim/weapon/
dsI/lib/domains/default/creator/
dsI/lib/domains/default/etc/
dsI/lib/domains/default/room/
dsI/lib/lib/comp/
dsI/lib/lib/lvs/
dsI/lib/lib/user/
dsI/lib/lib/virtual/
dsI/lib/obj/
dsI/lib/obj/include/
dsI/lib/realms/
dsI/lib/save/kills/a/
dsI/lib/save/kills/b/
dsI/lib/save/kills/f/
dsI/lib/save/kills/m/
dsI/lib/save/kills/q/
dsI/lib/save/kills/r/
dsI/lib/secure/cfg/
dsI/lib/secure/cfg/classes/
dsI/lib/secure/cfg/races/SCCS/
dsI/lib/secure/cmds/creators/include/
dsI/lib/secure/cmds/players/
dsI/lib/secure/cmds/players/include/
dsI/lib/secure/daemon/include/
dsI/lib/secure/lib/
dsI/lib/secure/lib/include/
dsI/lib/secure/lib/net/
dsI/lib/secure/lib/net/include/
dsI/lib/secure/lib/std/
dsI/lib/secure/obj/
dsI/lib/secure/obj/include/
dsI/lib/secure/save/
dsI/lib/spells/
dsI/lib/verbs/admins/include/
dsI/lib/verbs/common/
dsI/lib/verbs/common/include/
dsI/lib/verbs/creators/
dsI/lib/verbs/creators/include/
dsI/lib/verbs/players/include/SCCS/
dsI/lib/verbs/rooms/
dsI/lib/verbs/rooms/include/
dsI/lib/www/
dsI/v22.2b14/
dsI/win32/
/*    /cmds/player/title.c
 *    from the Dead Souls LPC Library
 *    allows someone to set their titles
 *    created by Descartes of Borg 950716
 */

#include <lib.h>

inherit LIB_DAEMON;

static void eventOrderTitles(string *titles, int maxi);
static void GetTitle(string which, string *titles, int maxi);
static void GetDest(string which, string *titles, int i, int maxi);

mixed cmd(string args) {
    string *titles;
    int i, maxi;

  if( creatorp(this_player()) || avatarp(this_player()) ) {
	if( !args || args == "" ) return "Change your title to what?";
	else args = (string)this_player()->SetShort(args);
	message("system", "Title changed to: " + args, this_player());
	return 1;
    }
    if( !(maxi = sizeof(titles = (string *)this_player()->GetTitles())) ) 
      return "You are totally unaccomplished.";
    if( args == "1" || args == "2" ) {
        this_player()->SetTitleLength(to_int(args));
        this_player()->SetShort("foo");
        this_player()->eventPrint("Number of titles in your descriptions changed to " + args + ".");
        return 1;
    }
    if( maxi == 1 ) {
	message("system", "You have only one title: " + titles[0], 
		this_player());
	return 1;
    }
    else if( maxi == 2 ) {
	function f;

	f = function(string yn, string *titles) {
	    yn = (yn || "n");
	    if( yn != "y" ) {
		message("system", "Titles remain unchanged.", this_player());
		return;
	    }
	    this_player()->SetTitles( ({ titles[1], titles[0] }) );
	    message("system", "Titles reversed.", this_player());
	};
	message("system", "You have the following titles:\n\t" +
		titles[0] + "\n\t" + titles[1], this_player());
	message("prompt", "Do you wish to reverse them? [n] ", this_player());
	input_to(f, titles);
	return 1;
    }
    else eventOrderTitles(titles, maxi);
    return 1;
}

static void eventOrderTitles(string *titles, int maxi) {
    int i;

    message("system", "You have the following titles:", this_player());
    for(i=0; i<maxi; i++)
      message("system", "\t" + (i+1) + " " + titles[i], this_player());
    message("prompt", "Move which (q to quit)? [" + (maxi) + "] ", 
	    this_player());
    input_to((: GetTitle :), titles, maxi);
}

static void GetTitle(string which, string *titles, int maxi) {
    int x;

    if( which == "q" ) {
	this_player()->SetTitles(titles);
	message("system", "Done.", this_player());
	return;
    }
    else if( which == "" || !which ) which = "" + maxi;
    x = to_int(which);
    if( x < 1 || x > maxi ) {
	message("system", "Illegal title number.", this_player());
	eventOrderTitles(titles, maxi);
	return;
    }
    x--;
    message("prompt", "Move \"" + titles[x] + "\" to position? [1] ",
	    this_player());
    input_to( (: GetDest :), titles, x, maxi );
}

static void GetDest(string which, string *titles, int i, int maxi) {
    string *tmp;
    int j, maxj, x;

    if( which == "q" ) {
	this_player()->SetTitles(titles);
	message("system", "Done.", this_player());
	return;
    }
    else if( which == "" || !which ) which = "1";
    x = to_int(which);
    if( x < 1 || x > maxi || x == i+1 ) {
	message("system", "Illegal title number.", this_player());
	eventOrderTitles(titles, maxi);
	return;
    }
    x--;
    tmp = allocate(maxj = sizeof(titles));
    for(j=0; j<maxj; j++) {
	if( j == x ) tmp[j] = titles[i];
	else if( (j < x && j < i) || (j > x && j > i) ) tmp[j] = titles[j];
	else if( j > x && j <= i ) tmp[j] = titles[j-1];
	else tmp[j] = titles[j+1];
    }
    eventOrderTitles(tmp, maxi);
}

void help() {
    if( creatorp(this_player()) ) {
	message("help", "Syntax: <title [title]>\n\n"
		"Allows you to change your title.  You must include the "
		"token $N in your title, which will be replaced with your "
		"name as appropriate.  For example:\n"
		"\ttitle We are $N of Borg\n"
		"would make my short appear as:\n"
		"\tWe are Descartes of Borg.\n\n", this_player());
    }
    else {
	message("help", "Syntax: <title>\n\n"
		"Allows you to reorder your titles.  Your first two titles "
		"appear in your short description.  This command is "
		"interactive, meaning it prompts you for what to do.  "
		"hit 'q' at any point to save your changes and exit out of "
                "this command.\nYou can also type (title 1) or (title 2) "
                "to change how many titles appear in your description.",
                this_player() );
    }
}