/* /daemon/terminal.c * from the Dead Souls Object Library * daemon storing terminal information * created by Pinkfish@Discworld * rewritten for Dead Souls by Descartes of Borg 930903 * Version: @(#) terminal.c 1.5@(#) * Last modified: 96/11/11 */ #include inherit LIB_DAEMON; #define ANSI(p) sprintf("%c["+(p)+"m", 27) #define ESC(p) sprintf("%c"+(p), 27) static mapping term_info; void create() { mapping nohtml; daemon::create(); SetNoClean(1); nohtml = ([ "BR": "", "P" : "", "/P" : "", "HREF" : "", ">" : "", "NAME" : "", "/A" : "", "I" : "", "/I" : "", "PRE" : "", "/PRE" : "", "STRONG" : "", "/STRONG" : "", "TABLE" : "", "/TABLE" : "", "TR" : "", "/TR" : "", "TD" : "", "/TD" : ""]); term_info = ([ ]); term_info["unknown"] = ([ "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":""]) + nohtml; term_info["ansi"] = ([ "RESET":ANSI("0"), "BOLD":ANSI(1), "FLASH":ANSI(5), "BLACK":ANSI(30), "RED":ANSI(31), "GREEN":ANSI(32), "ORANGE":ANSI(33), "YELLOW":ANSI(1)+ANSI(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)+ANSI(43), "B_BLUE":ANSI(44), "B_CYAN":ANSI(46), "B_BLACK":ANSI(40), "B_WHITE": ANSI(47), "CLEARLINE":ESC("[L")+ESC("[G"), "B_MAGENTA":ANSI(45), "STATUS":"", "WINDOW":"", "INITTERM":ESC("[H")+ESC("[2J"), "ENDTERM":"" ]) + nohtml; term_info["freedom"] = ([ "RESET": ESC("G0"), "BOLD":ESC("G@"), "FLASH":ESC("G2"), "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"), "B_MAGENTA":("G4"), "STATUS":"", "WINDOW":"", "CLEARLINE":CARRIAGE_RETURN, "INITTERM":"", "ENDTERM":"" ]) + nohtml; term_info["ansi-status"] = ([ "RESET": ANSI("0;37;40"), "BOLD":ANSI(1), "FLASH":ANSI(5), "BLACK":ANSI(30), "RED":ANSI(31), "GREEN":ANSI(32), "ORANGE":ANSI(33), "YELLOW":ANSI(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)+ANSI(43), "B_BLUE":ANSI(44), "B_CYAN": ANSI(46), "B_BLACK":ANSI(40), "B_WHITE":ANSI(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"), "CLEARLINE":CARRIAGE_RETURN, "ENDTERM":ESC("[0r")+ESC("[H")+ESC("[J") ]) +nohtml; term_info["xterm"] = ([ "RESET":ANSI("0"), "BOLD":ANSI(1), "FLASH":ANSI(5), "BLACK":ANSI(30), "RED":ANSI(31), "GREEN":ANSI(32), "ORANGE":ANSI(33), "YELLOW":ANSI(1)+ANSI(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)+ANSI(43), "B_BLUE":ANSI(44), "B_CYAN":ANSI(46), "B_BLACK":ANSI(40), "B_WHITE": ANSI(47), "CLEARLINE":ESC("[L")+ESC("[G"), "B_MAGENTA":ANSI(45), "STATUS":"", "WINDOW":"", "INITTERM":ESC("[H")+ESC("[2J"), "ENDTERM":"" ]) + nohtml; term_info["html"] = term_info["unknown"] + ([ "RED" : "", "GREEN" : "", "BLUE" : "", "YELLOW" : "", "CYAN" : "", "MAGENTA" : "", "YELLOW" : "", "RESET": "", "BR" : "
", "P" : "

", "/P" : "

", ">" : ">", "HREF" : "", "I" : "", "/I" : "", "PRE" : "", "/PRE" : "", "STRONG" : "", "/STRONG" : "", "TABLE" : "", "/TABLE" : "
", "TR" : "", "/TR" : "", "TD" : "" , "/TD" : "" ]); } mapping query_term_info(string type) { return (term_info[type] ? term_info[type] : term_info["unknown"]); } string *query_terms() { return keys(term_info); } int query_term_support(string str) { return (term_info[str] ? 1 : 0); } string no_colours(string str) { return terminal_colour(str, term_info["unknown"]); } string no_colors(string str){ return no_colours(str); } string GetHTML(string str) { int i, tot, fcount = 0, ncount = 0; string tmp; str = terminal_colour(str, term_info["html"]); tmp = str; while( (i = strsrch(tmp, " 0 ) { while( tot-- ) { str += "
"; } } return str; } #ifdef __DSLIB__ int GetCharmode(object ob){ return query_charmode(ob); } #endif