/* Do not remove the headers from this file! see /USAGE for more info. */ /* %^RESET%^ gets used early in the login sequence by tell() */ private nosave mapping translations = (["RESET" : ""]); private mapping colours; void save_me(); object query_shell_ob(); int screen_width; void set_screen_width( int width ) { screen_width = width; this_user()->save_me(); } int query_screen_width() { return screen_width ? screen_width : 79; } void update_translations() { /* handle new people, old save files, or save files for which this * option was disabled */ if (!colours) colours = ([]); /* defaults; we take advantage of the fact that mapping addition * chooses the second when there is an overlap. */ colours = ANSI_D->defaults() + colours; if (query_shell_ob()->get_variable("ansi")) translations = ANSI_D->query_translations()[0]; else translations = ANSI_D->query_translations()[1]; translations = copy(translations); foreach (string code, string value in colours) { string array parts = map(explode(value, ","), (: upper_case :)); string val = ""; foreach (string item in parts) { if (translations[item]) val += translations[item]; } translations[code] = val; } } void set_colour(string which, string what) { colours[upper_case(which)] = what; update_translations(); save_me(); } void query_colour(string which) { return colours[which]; } array query_colours() { return keys(colours); } void remove_colour(string which) { map_delete(colours, upper_case(which)); /* just in case */ map_delete(colours, lower_case(which)); map_delete(colours, which); update_translations(); save_me(); } void do_receive(string msg, int msg_type) { if (msg_type & NO_ANSI) { if (msg_type & NO_WRAP) receive(msg); else receive(wrap(msg, query_screen_width())); } else { int indent = (msg_type & MSG_INDENT) ? 4 : 0; int wrap = (msg_type & NO_WRAP) ? 0 : query_screen_width(); receive(terminal_colour(msg + "%^RESET%^", translations, wrap, indent)); } } void receive_inside_msg(string msg, object * exclude, int message_type, mixed other) { do_receive(msg, message_type); } void receive_outside_msg(string msg, object * exclude, int message_type, mixed other) { do_receive(msg, message_type); } void receive_remote_msg(string msg, object * exclude, int message_type, mixed other) { do_receive(msg, message_type); } void receive_private_msg(string msg, int message_type, mixed other) { do_receive(msg, message_type); }