/* Do not remove the headers from this file! see /USAGE for more info. */
/* This file optimizes prompt displaying.*/
#define P_HISTORY 1
#define P_ROOM 2
#define P_PWD 3
#define P_DATE 4
#define P_DAY 5
#define P_NAME 6
#define P_TIME 7
private nosave int* replacements;
private nosave string prompt;
int get_command_number();
mixed get_variable(string);
protected void set_prompt(string s)
{
string* bits;
int i;
s = replace_string(s,"%_","\n");
s = replace_string(s,"%m", mud_name());
s = replace_string(s,"%N", this_user()->query_userid());
if(s[0] == '"' && s[<1] == '"')
s = s[1..<2];
prompt = s;
replacements = ({});
bits = explode("%"+s,"%");
if(!sizeof(bits))
return;
for(i=1;i<sizeof(bits);i++)
{
if(bits[i] == "")
{
i++;
continue;
}
switch(bits[i][0])
{
case 'h':
replacements += ({P_HISTORY});
break;
case 'r':
replacements += ({P_ROOM});
break;
case 'p':
replacements += ({P_PWD});
break;
case 'd':
replacements += ({P_DATE});
break;
case 'D':
replacements += ({P_DAY});
break;
case 'n':
replacements += ({P_NAME});
break;
case 't':
replacements += ({P_TIME});
break;
}
}
replacements = clean_array(replacements);
}
protected string get_prompt()
{
string s;
int rep;
int i;
if(!prompt)
{
set_prompt(get_variable("PROMPT") || "? for shell help> ");
}
s = prompt;
foreach(rep in replacements)
{
switch(rep)
{
case P_PWD:
s = replace_string(s,"%p", get_variable("pwd") || "(no pwd!)");
continue;
case P_TIME:
s = replace_string(s,"%t", ctime(time())[11..15]);
continue;
case P_HISTORY:
s = replace_string(s,"%h", sprintf("%d", get_command_number()));
continue;
case P_ROOM:
if (environment(this_body()))
s = replace_string(s,"%r", file_name(environment(this_body())));
else
s = replace_string(s, "%r", "<nowhere>");
continue;
case P_DATE:
s = replace_string(s,"%d", ctime(time())[4..9]);
continue;
case P_DAY:
s = replace_string(s,"%D", ctime(time())[0..2]);
continue;
case P_NAME:
s = replace_string(s,"%n", capitalize(this_body()->query_name()));
continue;
}
}
return s;
}
protected void create()
{
this_object()->add_variable_hook("PROMPT", (:set_prompt:));
}