/** * This object handles all the terminal related stuff. Figuring out to * display each colour and verifying that the colours are correct. * The terminal handler. This has all sorts of utterly useless junk on it * Share and enjoy. * Thrown up by Pinkfish. Modified by Godot to add the xterm terminal. (10/16/92) Added vt100 Chrisy 15 may 93 Definitions: <colour> foreground colour B_<colour> background colour BOLD bold or bright letters ENDTERM unknown FLASH flashing or blinking letters INITTERM unknown RESET return to the normal font -- not a terminal reset. STATUS unknown WINDOW unknown REVERSE reverse video mode UNDERLINE underline mode */ #define ANSI(p) sprintf("%c["+(p)+"m", 27) #define ESC(p) sprintf("%c"+(p), 27) #define CHAR(p) sprintf("%c", (p)) #define TERMINAL_DUMB "dumb" private nosave mapping aliases, terms; void create() { aliases = ([ "xterm-debian" : "xterm", "zmud" : "vt220", "amiga" : "vt220", "linux" : "vt220", "xterm-color" : "xterm", "vt102" : "vt100", "dec-vt100" : "vt100", "vt300" : "vt220", "vt100a" : "vt100", "vt100-ansi" : "vt100", "dec-vt220" : "vt220", "vt400" : "vt220", "vs100" : "xterm", "sun-cmd" : "vt220-nc", "unknown" : TERMINAL_DUMB, "ibm" : TERMINAL_DUMB, "iris-ansi-net" : "vt220", "network" : TERMINAL_DUMB, "vt320" : "vt220", "dtterm" : "vt220", "screen" : "vt220", "dec-vt320" : "vt220", "dec-vt100i" : "vt100", "ansii" : "ansi", "vt100i" : "vt100", "vt200-80" : "vt220", "ibm-3279-2-e" : TERMINAL_DUMB, "ibm-3279-2" : TERMINAL_DUMB, "vt200" : "vt220", "dec-vt200" : "vt220", "hft" : "vt220", "mac" : "vt220-nc", "vt340" : "vt220", "vt340-am" : "vt220", "ibm-3278-2" : TERMINAL_DUMB, "ibm-3278-2-e" : TERMINAL_DUMB, "kterm" : "xterm", "sun" : "vt220-nc", "sun1" : "vt220-nc", "xterms" : "xterm", "vs100s" : "xterm", "vt52" : TERMINAL_DUMB, "vt420" : "vt220", "dec-vt420" : "vt220", "aixterm-m" : "aixterm", "ibm-3151" : "ibm3151", "ibm-3278-5" : TERMINAL_DUMB, "du" : TERMINAL_DUMB, "dialup" : TERMINAL_DUMB, "dec-vt52" : TERMINAL_DUMB, "vt100-pro" : "vt100", ]); terms = ([ TERMINAL_DUMB : ([ "RESET" : "", "BOLD" : "", "FLASH" : "", "BLACK" : "", "RED" : "", "BLUE" : "", "CYAN" : "", "MAGENTA" : "", "ORANGE" : "", "YELLOW" : "", "GREEN" : "", "WHITE" : "", "BLACK" : "", "B_RED" : "", "B_ORANGE" : "", "B_YELLOW" : "", "B_BLACK" : "", "B_CYAN" : "", "B_WHITE" : "", "B_GREEN" : "", "B_MAGENTA" : "", "STATUS": "", "WINDOW": "", "INITTERM": "", "ENDTERM": "", "REVERSE": "", "UNDERLINE": "", ]), "ansi" : ([ "RESET" : ANSI("39;49")+ANSI("0;10"), "BOLD" : ANSI(1), "FLASH" : "", "BLACK" : ANSI(30), "RED" : ANSI(31), "GREEN" : ANSI(32), "ORANGE" : ANSI(33), "YELLOW" : ANSI("1;33"), "BLUE" : ANSI(34), "CYAN" : ANSI(36), "MAGENTA" : ANSI(35), "BLACK" : ANSI(30), "WHITE" : ANSI(37), "B_RED" : ANSI(41), "B_GREEN" : ANSI(42), "B_ORANGE" : ANSI(43), "B_YELLOW" : ANSI("1;43"), "B_BLUE" : ANSI(44), "B_CYAN" : ANSI(46), "B_BLACK" : ANSI(40), "B_WHITE" : ANSI(47), /* 47? */ "B_MAGENTA" : ANSI(45), "STATUS": "", "WINDOW": "", "INITTERM": "", "ENDTERM": "", "REVERSE" : ANSI(7), "UNDERLINE" : ANSI(4), ]), "freedom" : ([ "RESET" : ESC("G0"), "BOLD" : ESC("G@"), "FLASH" : "", "BLACK" : "", "RED" : "", "GREEN" : "", "ORANGE" : "", "YELLOW" : "", "BLUE" : "", "CYAN" : "", "MAGENTA" : "", "BLACK" : "", "WHITE" : "", "B_RED" : ESC("GD"), "B_GREEN" : ESC("GD"), "B_ORANGE" : ESC("G4"), "B_YELLOW" : ESC("G4"), "B_BLUE" : ESC("G4"), "B_CYAN" : ESC("GD"), "B_BLACK" : ESC("GD"), "B_WHITE" : ESC("G4"), /* 47? */ "B_MAGENTA" : ESC("G4"), "STATUS": "", "WINDOW": "", "INITTERM": "", "ENDTERM": "", "REVERSE" : ESC("G4"), "UNDERLINE" : ESC("G8"), ]), "ansi-status": ([ "RESET" : ANSI("39;49")+ANSI("0;10"), "BOLD" : ANSI(1), "FLASH" : "", "BLACK" : ANSI(30), "RED" : ANSI(31), "GREEN" : ANSI(32), "ORANGE" : ANSI(33), "YELLOW" : ANSI("1;33"), "BLUE" : ANSI(34), "CYAN" : ANSI(36), "MAGENTA" : ANSI(35), "BLACK" : ANSI(30), "WHITE" : ANSI(37), "B_RED" : ANSI(41), "B_GREEN" : ANSI(42), "B_ORANGE" : ANSI(43), "B_YELLOW" : ANSI("1;43"), "B_BLUE" : ANSI(44), "B_CYAN" : ANSI(46), "B_BLACK" : ANSI(40), "B_WHITE" : ANSI(47), /* 47? */ "B_MAGENTA" : ANSI(45), "STATUS" : ESC("[23;24r") + ESC(8), "WINDOW" : ESC(7)+ESC("[0;22r")+ESC("[22H\n"), "INITTERM" : ESC("[H")+ESC("[J")+ ESC("[23;24r")+ESC("23H\n"), "ENDTERM" : ESC("[0r")+ESC("[H")+ESC("[J"), "REVERSE" : ANSI(7), "UNDERLINE" : ANSI(4), ]), "xterm": ([ "RESET" : ANSI("39;49")+ESC("[m"), "BOLD" : ANSI(1), "FLASH" : "", "BLACK" : ANSI(30), "RED" : ANSI(31), "GREEN" : ANSI(32), "ORANGE" : ANSI(33), /* Can't do brown */ "YELLOW" : ANSI("1;33"), "BLUE" : ANSI(34), "CYAN" : ANSI(36), "MAGENTA" : ANSI(35), "BLACK" : ANSI(30), "WHITE" : ANSI(37), "B_RED" : ANSI(41), "B_GREEN" : ANSI(42), "B_ORANGE" : ANSI(43), /* Can't do brown */ "B_YELLOW" : ANSI("1;43"), "B_BLUE" : ANSI(44), "B_CYAN" : ANSI(46), "B_BLACK" : ANSI(40), "B_WHITE" : ANSI(47), /* 47? */ "B_MAGENTA" : ANSI(45), "WINDOW" : "", "INITTERM" : "", "ENDTERM" : "", "REVERSE" : ANSI(7), "UNDERLINE" : ANSI(4), ]), "vt100" : (["RESET" : ANSI("39;49")+ESC("[m")+CHAR(15), "BOLD" : ANSI(1), "FLASH" : "", "BLACK" : ANSI(30), "RED" : ANSI(31), "GREEN" : ANSI(32), "ORANGE" : ANSI(33), "YELLOW" : ANSI("1;33"), "BLUE" : ANSI(34), "CYAN" : ANSI(36), "MAGENTA" : ANSI(35), "WHITE" : ANSI(37), "B_RED" : ANSI(41), "B_GREEN" : ANSI(42), "B_ORANGE" : ANSI(43), "B_YELLOW" : ANSI("1;43"), "B_BLUE" : ANSI(44), "B_CYAN" : ANSI(46), "B_BLACK" : ANSI(40), "B_WHITE" : ANSI(47), /* 47? */ "B_MAGENTA" : ANSI(45), "STATUS": "", "WINDOW": "", "INITTERM": "", "ENDTERM": "", "REVERSE" : ANSI(7), "UNDERLINE" : ANSI(4), ]), "hpterm" : (["RESET" : ESC("&v0S")+ESC("&d@"), "BOLD" : ESC("&dB"), "FLASH" : "", "BLACK" : "", "RED" : ESC("&dB"), "GREEN" : ESC("&dD"), "ORANGE" : "", "YELLOW" : ESC("&dB"), "BLUE" : "", "CYAN" : "", "MAGENTA" : "", "WHITE" : "", "B_RED" : "", "B_GREEN" : "", "B_ORANGE" : "", "B_YELLOW" : "", "B_BLUE" : "", "B_CYAN" : "", "B_BLACK" : "", "B_WHITE" : "", "B_MAGENTA" : "", "STATUS": "", "WINDOW": "", "INITTERM": "", "ENDTERM": "", "REVERSE" : ESC("&dB"), "UNDERLINE" : ESC("&dD"), ]), "aixterm" : ([ "RESET" : ANSI("0;10")+ESC("(B"), "BOLD" : ANSI(1), "FLASH" : "", "BLACK" : "", "RED" : ANSI(1), "BLUE" : "", "CYAN" : "", "MAGENTA" : "", "ORANGE" : "", "YELLOW" : ESC('p'), "GREEN" : ESC('W'), "WHITE" : "", "BLACK" : "", "B_RED" : "", "B_ORANGE" : "", "B_YELLOW" : "", "B_BLACK" : "", "B_CYAN" : "", "B_WHITE" : "", "B_GREEN" : "", "B_MAGENTA" : "", "STATUS": "", "WINDOW": "", "INITTERM": "", "ENDTERM": "", "REVERSE": ESC('p'), "UNDERLINE": ESC('W'), ]), "ibm3151" : ([ "RESET" : ESC("4@"), "BOLD" : ESC("4H"), "FLASH" : "", "BLACK" : "", "RED" : ESC("4H"), "BLUE" : "", "CYAN" : "", "MAGENTA" : "", "ORANGE" : "", "YELLOW" : ESC("4A"), "GREEN" : ESC("4B"), "WHITE" : "", "BLACK" : "", "B_RED" : "", "B_ORANGE" : "", "B_YELLOW" : "", "B_BLACK" : "", "B_CYAN" : "", "B_WHITE" : "", "B_GREEN" : "", "B_MAGENTA" : "", "STATUS": "", "WINDOW": "", "INITTERM": "", "ENDTERM": "", "REVERSE": ESC("4A"), "UNDERLINE": ESC("4B"), ]), "vt220": ([ "RESET" : ANSI("39;49")+ESC("[m"), "BOLD" : ANSI(1), "FLASH" : "", "BLACK" : ANSI(30), "RED" : ANSI(31), "GREEN" : ANSI(32), "ORANGE" : ANSI(33), /* Can't do brown */ "YELLOW" : ANSI("1;33"), "BLUE" : ANSI(34), "CYAN" : ANSI(36), "MAGENTA" : ANSI(35), "BLACK" : ANSI(30), "WHITE" : ANSI(37), "B_RED" : ANSI(41), "B_GREEN" : ANSI(42), "B_ORANGE" : ANSI(43), /* Can't do brown */ "B_YELLOW" : ANSI("1;43"), "B_BLUE" : ANSI(44), "B_CYAN" : ANSI(46), "B_BLACK" : ANSI(40), "B_WHITE" : ANSI(47), "B_MAGENTA" : ANSI(45), "WINDOW" : "", "INITTERM" : "", "ENDTERM" : "", "REVERSE" : ANSI(7), "UNDERLINE" : ANSI(4), ]), "zmud": ([ "RESET" : ANSI("39;49")+ESC("[m"), "BOLD" : ANSI(1), "FLASH" : "", "BLACK" : ANSI(30), "RED" : ANSI(31), "GREEN" : ANSI(32), "ORANGE" : ANSI(33), /* Can't do brown */ "YELLOW" : ANSI("1;33"), "BLUE" : ANSI(34), "CYAN" : ANSI(36), "MAGENTA" : ANSI(35), "BLACK" : ANSI(30), "WHITE" : ANSI(37), "B_RED" : ANSI(41), "B_GREEN" : ANSI(42), "B_ORANGE" : ANSI(43), /* Can't do brown */ "B_YELLOW" : ANSI("1;43"), "B_BLUE" : ANSI(44), "B_CYAN" : ANSI(46), "B_BLACK" : ANSI(40), "B_WHITE" : ANSI(47), "B_MAGENTA" : ANSI(45), "WINDOW" : "", "INITTERM" : "", "ENDTERM" : "", "REVERSE" : ANSI(7), "UNDERLINE" : ANSI(4), ]), "vt100-nc" : ([ "RESET" : ESC("[m")+CHAR(15), "BOLD" : ANSI(1), "FLASH" : "", "BLACK" : ANSI(30), "RED" : ANSI("37;7"), "GREEN" : ANSI(1), "ORANGE" : ANSI(37), "YELLOW" : ANSI("1;4"), "BLUE" : ANSI(37), "CYAN" : ANSI(4), "MAGENTA" : ANSI(37), "WHITE" : ANSI(37), "B_RED" : ANSI(41), "B_GREEN" : ANSI(42), "B_ORANGE" : ANSI(43), "B_YELLOW" : ANSI("1;43"), "B_BLUE" : ANSI(44), "B_CYAN" : ANSI(46), "B_BLACK" : ANSI(40), "B_WHITE" : ANSI(47), "B_MAGENTA" : ANSI(45), "STATUS": "", "WINDOW": "", "INITTERM": "", "ENDTERM": "", "REVERSE" : ANSI(7), "UNDERLINE" : ANSI(4), ]), "vt220-nc" : ([ "RESET" : ESC("[m"), "BOLD" : ANSI(1), "FLASH" : "", "BLACK" : ANSI(30), "RED" : ANSI("37;7"), "GREEN" : ANSI(1), "ORANGE" : ANSI(37), "YELLOW" : ANSI("1;4"), "BLUE" : ANSI(37), "CYAN" : ANSI(4), "MAGENTA" : ANSI("7;4"), "WHITE" : ANSI(37), "B_RED" : ANSI(41), "B_GREEN" : ANSI(42), "B_ORANGE" : ANSI(43), "B_YELLOW" : ANSI("1;43"), "B_BLUE" : ANSI(44), "B_CYAN" : ANSI(46), "B_BLACK" : ANSI(40), "B_WHITE" : ANSI(47), "B_MAGENTA" : ANSI(45), "STATUS": "", "WINDOW": "", "INITTERM": "", "ENDTERM": "", "REVERSE" : ANSI(7), "UNDERLINE" : ANSI(4), ]), ]); } /** * This returns the mapping of colours based on the terminal type * entered in here. * @param str the terminal type * @return mapping of colours to escape codes */ mixed set_network_term_type(string str) { string type; str = lower_case(str); if (!terms[str] && !(type = aliases[str])) { #ifdef DEBUG log_file("TERMTYPES", "No entry for \"%s\" (%s).\n", str, this_player()->query_name()); #endif return 0; } if (type) { return terms[type]; } return terms[str]; } /* set_network_term_type() */ /** * This returns the mapping of colours based on the terminal type * entered in here. * @param str the terminal type * @return mapping of colours to escape codes */ mapping set_term_type(string str) { if (!terms[str] && !(str = aliases[str])) { tell_object(this_player(), "No entry for "+str+", using dumb.\n"); str = TERMINAL_DUMB; } return terms[str]; } /* set_term_type() */ /** * This method returns all the currently available types of terminals. * @return the array of terminal types */ string *query_term_types() { return m_indices(terms); } /* query_term_types() */ string *query_term_aliases() { return m_indices(aliases); } /* query_term_types() */ /** * This method returns the array of usable colours. * @return the array of usable colours */ string *query_colour_codes() { return keys(terms[TERMINAL_DUMB]); } /* query_colour_codes() */