/* 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:)); }