#define NAMEX 0
#define C_NAMEX 1
#define STRING 2
#define GENDERX 3
#define IP_NUMBER 4
#define IP_NAMEX 5
#define TYPE 6
#define AGE 7
#define GUILD 8
#define RACE 9
#define LEVELX 10
#define TERMINAL 11
#define ROWS 12
#define COLS 13
#define ROOM 14
#define EUID 15
#define UID 16
#define CFILE 17
#define CUR_DIR 18
#define GUILDOB 19
#define ALIGNMENT 20
#define PLAYERSETALIGNMENT 21
#define CENTER 128
#define RIGHT 64
#define MASK (RIGHT+CENTER)
#define ABBREV ({ \
"n", \
"N", \
"", \
"G", \
"#", \
"I", \
"T", \
"A", \
"g", \
"R", \
"L", \
"t", \
"r", \
"c", \
"O", \
"E", \
"U", \
"F", \
"U", \
"o", \
"K", \
"/", \
})
#define DE_NAMEXS ({ \
"Name", \
"Name", \
"", \
"Gender", \
"IP Number", \
"IP Name", \
"Type", \
"Age", \
"Guild", \
"Race", \
"Level", \
"Terminal type", \
"Rows", \
"Cols", \
"Room", \
"Euid", \
"Uid", \
"Creator file", \
"Current dir", \
"Guild object", \
"GameAlignment",\
"PSetAlignment",\
})
/* This is the default people listing thingy. */
#define P_DEFAULT ({ \
NAMEX, 12, \
TYPE|CENTER, 4, \
STRING, " ", \
GENDERX|CENTER, 6, \
STRING, " ", \
GUILD|CENTER, 10, \
STRING, " ", \
RACE|CENTER, 10, \
LEVELX|RIGHT, 5, \
STRING, " ", \
ALIGNMENT, 10, \
PLAYERSETALIGNMENT, 10, \
AGE, 4, \
})
#define QP_DEFAULT ({ \
AGE|RIGHT, 4, \
STRING, " ", \
NAMEX, 25, \
RACE, 10, \
GUILDOB, 35, \
})
#define T_DEFAULT ({ \
NAMEX, 12, \
ROWS|CENTER, 5, \
STRING, " ", \
COLS|CENTER, 5, \
STRING, " ", \
TERMINAL|CENTER, 20, \
})
#define N_DEFAULT ({ \
NAMEX, 12, \
STRING, " ", \
IP_NUMBER, 16, \
STRING, " ", \
IP_NAMEX, 30, \
})
#define D_DEFAULT ({ \
NAMEX, 12, \
STRING, " ", \
CUR_DIR, 25, \
STRING, " ", \
ROOM, 40, \
})
string *de_names,
*abbrev,
*var_names;
void create() {
de_names = DE_NAMEXS;
abbrev = ABBREV;
var_names = ({
"dirs",
"netstat",
"people",
"qpeople",
"terms",
});
} /* create() */
object *get_people(string str)
{
object *ob;
int i, cr, god;
string s1;
ob = users();
cr = (int)this_player()->query_creator();
god = (int)this_player()->query_god();
for (i=0; i < sizeof(ob); i++)
{
/* Removed... Radix
users() doesn't return invis 2 obs if this_player != lord
and below allowed thieves to hide completely
July 1996
if ((ob[i]->query_hidden() && !god) || (ob[i]->query_invis() && !cr)
|| (((int)ob[i]->query_invis() > 1) && !god))
{
ob = delete(ob, i--, 1);
continue;
}
*/
if (str)
if(sscanf(ob[i]->query_name(),str+"%s", s1) != 1)
ob = delete(ob, i--, 1);
}
return ob;
} /* get_people() */
string create_title(mixed *bits)
{
int i, pos;
string str;
str = "";
for (i=0;i<sizeof(bits);i+=2) {
if ((pos = (bits[i]&~MASK)) == STRING)
str += bits[i+1];
else
if (strlen(de_names[pos]) > bits[i+1])
str += sprintf("%"+bits[i+1]+"."+bits[i+1]+"-s",de_names[pos][0..(bits[i+1]-2)]);
else {
switch (bits[i]&MASK) {
case CENTER :
str += sprintf("%"+bits[i+1]+"."+bits[i+1]+"|s", de_names[pos]);
break;
case RIGHT :
str += sprintf("%"+bits[i+1]+"."+bits[i+1]+"s", de_names[pos]);
break;
default :
str += sprintf("%"+bits[i+1]+"."+bits[i+1]+"-s", de_names[pos]);
break;
}
}
}
return str;
} /* create_title() */
string review_thingy(mixed *bing) {
int i;
string str;
str = "";
for (i=0;i<sizeof(bing);i+=2) {
if (bing[i] == STRING) {
str += bing[i+1];
} else {
switch (bing[i]&MASK) {
case CENTER :
str += "%|"+bing[i+1]+abbrev[bing[i]&~MASK];
break;
case RIGHT :
str += "%-"+bing[i+1]+abbrev[bing[i]&~MASK];
break;
default :
str += "%-"+bing[i+1]+abbrev[bing[i]&~MASK];
break;
}
}
}
return str;
} /* review_thingy() */
/*
* Ok, the method for doing the format is...
* ({ type, width, ... })
* With strings the width is the string...
*/
void print_entrys(object *obs, mixed *format) {
int i, age, j;
string form, str;
string ret;
ret = "";
for (i=0;i<sizeof(obs);i++) {
str = "";
for (j=0;j<sizeof(format);j+=2) {
switch (format[j]&MASK) {
case RIGHT :
form = "%"+format[j+1]+"."+format[j+1];
break;
case CENTER :
form = "%|"+format[j+1]+"."+format[j+1];
break;
default :
form = "%-"+format[j+1]+"."+format[j+1];
break;
}
switch (format[j]&~MASK) {
case STRING :
/* Ignore width for this one... */
str += format[j+1];
break;
case C_NAMEX :
str += sprintf(form+"s",
obs[i]->query_cap_name());
break;
case GENDERX :
str += sprintf(form+"s",
obs[i]->query_gender_string());
break;
case NAMEX :
str += sprintf(form+"s",
(obs[i]->query_in_editor()?"*":"")+
obs[i]->query_name());
break;
case GUILD :
if(obs[i]->query_guild_ob()) {
if( (file_size(obs[i]->query_guild_ob()) > 0) || (file_size(obs[i]->query_guild_ob()+".c") >0) )
str += sprintf(form+"s",obs[i]->query_guild_ob()->query_name());
else
str += sprintf(form+"s","Unknown");
}
else
str += sprintf(form+"s","No guild");
break;
case RACE :
str += sprintf(form+"s",
obs[i]->query_race());
break;
case LEVELX :
str += sprintf(form+"d",
obs[i]->query_level());
break;
case ROWS :
str += sprintf(form+"d",
obs[i]->query_rows());
break;
case COLS :
str += sprintf(form+"d",
obs[i]->query_cols());
break;
case TERMINAL :
str += sprintf(form+"s",
obs[i]->query_term_name());
break;
case IP_NUMBER :
str += sprintf(form+"s",
query_ip_number(obs[i]));
break;
case IP_NAMEX :
str += sprintf(form+"s",
query_ip_name(obs[i]));
break;
case TYPE :
str += sprintf(form+"s",
obs[i]->query_object_type());
break;
case AGE :
age = (int)obs[i]->query_time_on();
if (age < -86400)
str += sprintf(form+"s",
(age/-86400)+"D");
else if (age < -3600)
str += sprintf(form+"s",
(age/-3600)+"h");
else if (age < -60)
str += sprintf(form+"s",
(age/-60)+"m");
else
str += sprintf(form+"s",
age+"s");
break;
case ROOM :
str += sprintf(form+"s",
(environment(obs[i])?
virtual_file_name(environment(obs[i]))
:"No environment"));
break;
case EUID :
str += sprintf(form+"s",
(environment(obs[i])?geteuid(environment(obs[i]))
:"No environment"));
break;
case UID :
str += sprintf(form+"s",
(environment(obs[i])?getuid(environment(obs[i]))
:"No environment"));
break;
case CFILE :
str += sprintf(form+"s",
(environment(obs[i])?"/secure/master"->creator_file(
environment(obs[i]))
:"No environment"));
break;
case CUR_DIR :
str += sprintf(form+"s", (obs[i]->query_current_path()?
obs[i]->query_current_path():"No dir"));
break;
case GUILDOB :
str += sprintf(form+"s", (obs[i]->query_guild_ob())?
obs[i]->query_guild_ob():"None");
break;
case ALIGNMENT :
str += sprintf(form+"s", (obs[i]->query_align_name()));
break;
case PLAYERSETALIGNMENT :
str += sprintf(form+"s", (obs[i]->query_playerset_alname()));
break;
}
} /* for j... */
ret += sprintf("%s\n", str);
} /* i */
ret = implode(sort_array(explode(ret, "\n"), 1), "\n");
ret = ret = sprintf("%s\n", create_title(format)) + ret;
this_player()->more_string(ret);
}
/* Print_enrtys() */
int do_people(string str)
{
mixed *bing;
object *obs;
bing = (mixed *)this_player()->query_property("people list");
if (!bing)
bing = P_DEFAULT;
obs = get_people(str);
if (!sizeof(obs))
{
notify_fail("Nobody seems to start with "+str+", sorry.\n");
return 0;
}
print_entrys(obs, bing);
return 1;
} /* do_people() */
int do_terms(string str) {
mixed *bing;
object *obs;
bing = (mixed *)this_player()->query_property("term list");
if (!bing)
bing = T_DEFAULT;
obs = get_people(str);
if (!sizeof(obs)) {
notify_fail("Nobody seems to start with "+str+", sorry.\n");
return 0;
}
print_entrys(obs, bing);
return 1;
} /* do_terms() */
int do_dirs(string str) {
mixed *bing;
object *obs;
bing = (mixed *)this_player()->query_property("dir list");
if (!bing)
bing = D_DEFAULT;
obs = get_people(str);
if (!sizeof(obs)) {
notify_fail("Nobody seems to start with "+str+", sorry.\n");
return 0;
}
print_entrys(obs, bing);
return 1;
} /* do_dirs() */
int do_netstat(string str) {
mixed *bing;
object *obs;
bing = (mixed *)this_player()->query_property("netstat list");
if (!bing)
bing = N_DEFAULT;
obs = get_people(str);
if (!sizeof(obs)) {
notify_fail("Nobody seems to start with "+str+", sorry.\n");
return 0;
}
print_entrys(obs, bing);
return 1;
} /* do_dirs() */
int do_qpeople(string str) {
mixed *bing;
object *obs;
bing = (mixed *)this_player()->query_property("qpeople list");
if (!bing)
bing = QP_DEFAULT;
obs = get_people(str);
if (!sizeof(obs)) {
notify_fail("Nobody seems to start with "+str+", sorry.\n");
return 0;
}
print_entrys(obs, bing);
return 1;
} /* do_qpeople() */
int review() {
mixed *bing;
bing = (mixed *)this_player()->query_property("people list");
if (!bing)
bing = P_DEFAULT;
write("People : "+review_thingy(bing)+"\n");
bing = (mixed *)this_player()->query_property("qpeople list");
if (!bing)
bing = QP_DEFAULT;
write("Qpeople: "+review_thingy(bing)+"\n");
bing = (mixed *)this_player()->query_property("netstat list");
if (!bing)
bing = N_DEFAULT;
write("Netstat: "+review_thingy(bing)+"\n");
bing = (mixed *)this_player()->query_property("term list");
if (!bing)
bing = T_DEFAULT;
write("Terms : "+review_thingy(bing)+"\n");
bing = (mixed *)this_player()->query_property("dir list");
if (!bing)
bing = D_DEFAULT;
write("Dirs : "+review_thingy(bing)+"\n");
} /* review() */
mixed *create_review(string str) {
string *bits, rest;
int i, bing, width, tmp;
mixed *ret;
bits = explode("$"+str, "%");
bits[0] = bits[0][1..1000];
if (!strlen(bits[0]))
ret = ({ });
else
ret = ({ STRING, bits[0] });
for (i=1;i<sizeof(bits);i++) {
bing = RIGHT;
rest = bits[i];
if (rest[0] == '|') {
bing = CENTER;
rest = rest[1..1000];
} else if (rest[0] == '-') {
bing = 0;
rest = rest[1..1000];
}
if (sscanf(rest, "%d%s", width, rest) == 2) {
tmp = member_array(rest[0..0], abbrev);
if (tmp == -1) {
write("Unknown thingy '"+rest[0..0]+"'\n");
return 0;
}
ret += ({ tmp+bing, width });
rest = rest[1..1000];
if (strlen(rest))
ret += ({ STRING, rest });
} else {
ret += ({ STRING, bits[i] });
}
}
return ret;
} /* create_review() */
void list_matches() {
int i;
for (i=0;i<sizeof(de_names);i++) {
if (i == STRING) continue;
write(abbrev[i]+": "+de_names[i]+"\n");
}
} /* list_matches() */
int set_var(string str) {
string name, type;
mixed *bing;
if (sscanf(str, "%s %s", name, type) != 2) {
notify_fail("Syntax: "+query_verb()+" <var_name> <value>\n"+
" "+query_verb()+" help\n");
return 0;
}
if (str == "help") {
write("The non helpful help.\nThis is the list of things that go after "+
"the %'s in the value.\n");
list_matches();
return 1;
}
if (member_array(name, var_names) == -1) {
notify_fail("You cannot set the var "+name+" has to be one of "+
implode(var_names, ", ")+".\n");
return 0;
}
bing = create_review(type);
if (!bing)
return 1;
this_player()->add_property(name+" list", bing);
write("Ok, set var "+name+" to "+type+".\n");
return 1;
} /* set_var() */