Mercurial > projects > dynamin
diff dynamin/core/unix_console.d @ 0:aa4efef0f0b1
Initial commit of code.
author | Jordan Miner <jminer7@gmail.com> |
---|---|
date | Mon, 15 Jun 2009 22:10:48 -0500 |
parents | |
children | c9a4850926d9 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dynamin/core/unix_console.d Mon Jun 15 22:10:48 2009 -0500 @@ -0,0 +1,127 @@ +// Written in the D programming language +// www.digitalmars.com/d/ + +/* + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is the Dynamin library. + * + * The Initial Developer of the Original Code is Jordan Miner. + * Portions created by the Initial Developer are Copyright (C) 2007-2009 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Jordan Miner <jminer7@gmail.com> + * + */ + +module dynamin.core.unix_console; + +public import tango.stdc.stdlib; +//public import tango.stdc.string; +public import dynamin.core.string; + +/* +Can get width of console with $COLUMNS +Can get height of console with $LINES +*/ +template ConsoleBackend() { + static colorsUsed = false; + static ~this() { + if(colorsUsed) + backend_resetColors(); + } + bool buffered = false; + void backend_buffered(bool b) { + buffered = b; + } + void backend_write(string s) { + /*fwrite(s.ptr, 1, s.length, stdout); + if(!buffered) + fflush(stdout);*/ + } + string backend_readLineRaw() { + /*uint size; + char* line; + auto numRead = getline(&line, &size, stdin); + scope(exit) free(line); + string str = new char[numRead]; + str[] = line[0..numRead]; + return str;*/ + return null; + } + string backend_read() { + return null; + } + // TODO: use this + //termios ts; + //tcgetattr(filedes, &ts); + //ts.c_lflag |= ICANON; // turns on waiting for a whole lines + //ts.c_lflag |= ECHO; // turns on echoing + //tcsetattr(filedes, TCSAFLUSH, &ts); + string backend_readLineHidden() { + system("stty -echo"); + auto line = readLine(); + system("stty echo"); + return line; + } + string backend_readHidden() { + return null; + } + void backend_clear() { + system("clear"); + } + string backend_getColorStr(ConsoleColor c, bool fore) { + switch(c) { + case c.Black: return fore ? "\x1b[30m" : "\x1b[40m"; + case c.Silver: return fore ? "\x1b[37m" : "\x1b[47m"; + case c.Maroon: return fore ? "\x1b[31m" : "\x1b[41m"; + case c.DarkBlue: return fore ? "\x1b[34m" : "\x1b[44m"; + case c.Green: return fore ? "\x1b[32m" : "\x1b[42m"; + case c.Purple: return fore ? "\x1b[35m" : "\x1b[45m"; + case c.DarkYellow: return fore ? "\x1b[33m" : "\x1b[43m"; + case c.Teal: return fore ? "\x1b[36m" : "\x1b[46m"; + case c.Gray: return fore ? "\x1b[90m" : "\x1b[100m"; + case c.White: return fore ? "\x1b[97m" : "\x1b[107m"; + case c.Red: return fore ? "\x1b[91m" : "\x1b[101m"; + case c.Blue: return fore ? "\x1b[94m" : "\x1b[104m"; + case c.LightGreen: return fore ? "\x1b[92m" : "\x1b[102m"; + case c.Pink: return fore ? "\x1b[95m" : "\x1b[105m"; + case c.Yellow: return fore ? "\x1b[93m" : "\x1b[103m"; + case c.Cyan: return fore ? "\x1b[96m" : "\x1b[106m"; + default: assert(0); + } + } + void backend_foreColor(ConsoleColor color) { + colorsUsed = true; + backend_write(backend_getColorStr(color, true)); + } + void backend_backColor(ConsoleColor color) { + colorsUsed = true; + backend_write(backend_getColorStr(color, false)); + } + void backend_resetColors() { + backend_write("\x1b[39;49m"); + } + void backend_bold(bool b) { + backend_write(b ? "\x1b[1m" : "\x1b[22m"); + } + void backend_italic(bool b) { + backend_write(b ? "\x1b[3m" : "\x1b[23m"); + } + void backend_underline(bool b) { + backend_write(b ? "\x1b[4m" : "\x1b[24m"); + } + void backend_strikethrough(bool b) { + backend_write(b ? "\x1b[9m" : "\x1b[29m"); + } +} +