// The "groups" command - will show all the groups defined in /adm/etc/groups
// and list all members; those that are logged on are marked with '*'
// Note: in the case of the 'admin' group, which includes the root group,
// the root members will be filtered out so only non-root admins are shown.
// Written by Publius@TMI-2 - 8-05-93
// Modified a little by Artagel Aug 12 1993. Grendel suggested that sprintf
// might handle the indenting better, and I thought that multiple write
// statements meant multiple calls to receive_message() in this_player()
// which seemed like a waste of CPU to me.
// Small problem fixed by Publius on 8-24-93 - command did not respect
// invisibility to other wizards, so a non-admin wizard could find you
// with this command.
//
// Added -s option, since it was confusing . Leto 941111
#include <mudlib.h>
inherit DAEMON;
mapping groups;
void fix(string str, int grouplen);
int cmd_groups(string str)
{
string output;
string line, *group, *names, name;
int counter, counter2, invis;
object who;
groups=master()->query_groups();
// groups["admin"]=filter_array(groups["admin"], "filter_root",
// this_object());
group=sort_array(keys(groups), "do_alpha", this_object());
output = sprintf("Groups and their members on %s:\n",
capitalize(MUD_NAME));
for(counter=0; counter<sizeof(group); counter++)
{
if( (str=="-s") && ( sizeof( groups[ group[counter] ] ) < 2 ) ) continue;
groups[group[counter]]=sort_array(groups[group[counter]],
"do_alpha", this_object());
line="";
for(counter2=0; counter2<sizeof(groups[group[counter]]); counter2++)
{
name=groups[group[counter]][counter2];
who=find_player(name);
if(who && visible(who, this_player()))
line+="*";
line+=capitalize(name)+" ";
}
output += sprintf("%s: %-=65s\n", group[counter], line);
}
write(output + "(\"*\" = currently logged on)\n");
return 1;
}
int do_alpha(string str1, string str2)
{
return strcmp(str1, str2);
}
int filter_root(string who)
{
if(member_array(who, groups["root"])>-1)
return 0;
return 1;
}
int help()
{
write("Usage: groups [-s]\n\n"+
"This command will list all groups recognized by the master\n"+
"object and the members of those groups. Those who are currently\n"+
"logged in are marked with \"*\"\n"+
"NB1: Members of the \"root\" group are filtered out of the\n"+
" \"admin\" group to show the distinction.\n"+
"NB2: Groups with a single member are not shown when\n"+
" using the -s option, suce they usually refer to domains.\n");
return 1;
}