/* Do not remove the headers from this file! see /USAGE for more info. */

//:PLAYERCOMMAND
//$$ see: adverbs, random, semote
//
//USAGE: feelings <pattern>
//
//With a pattern, feelings will show you all souls matching the given pattern.
//Without an argument, feelings will list all available soul commands.
//
//Examples:
//
//	feelings  			-- show all souls
//	feelings s			-- show all souls beginning with an s
//	feelings s*e			-- show all souls beginning with an s,
//					   having anything in the middle, and
//					   ending with an e.

inherit CMD;
inherit M_GLOB;

#define HEADER  "--------------------------------<  Feelings  >-------------------------------\n"
#define TRAILER "------------------------<  Found %4d/%4d  (%3d%%)  >------------------------\n"
#define TOO_DAMN_LONG 15

private void main(string arg)
{
    string * list;
    int count;
    string * too_damn_long;
    string * not_too_long;

    list = sort_array(SOUL_D->list_emotes(), 1);
    count = sizeof(list);

    if (count == 0) {
	out("There are no feelings.");
	return;
    }

    if ( !arg || arg == "" )
	arg = "*";
    else if ( !has_magic(arg) )
	arg = arg + "*";
    arg = "^"+translate(arg)+"$";
    list = regexp(list, arg);
    if ( !list )
    {
	printf("No feelings matched '%s'.\n", arg);
	return;
    }
    too_damn_long = filter(list, (: sizeof($1) >= TOO_DAMN_LONG :));
    not_too_long = filter(list, (: sizeof($1) < TOO_DAMN_LONG :));

    if(end_of_pipeline())
	out(HEADER + sprintf("%-#79s\n", implode(not_too_long, "\n")));
    else
	outf("%s\n", implode(not_too_long, "\n"));
    if ( sizeof(too_damn_long) )
    {
	if(end_of_pipeline())
	    out("\nSouls that are too damn long:\n");
	out(implode(too_damn_long, "\n") + "\n");
    }
    outf(TRAILER, sizeof(list), count, sizeof(list) * 100 / count);
}

void player_menu_entry(string str)
{
    bare_init();
    main(str);
    done_outputing();
}
