Mercurial > projects > dynamin
annotate dynamin/core/unix_console.d @ 103:73060bc3f004
Change license to Boost 1.0 and MPL 2.0.
author | Jordan Miner <jminer7@gmail.com> |
---|---|
date | Tue, 15 May 2012 22:06:02 -0500 |
parents | c9a4850926d9 |
children | acdbb30fee7e |
rev | line source |
---|---|
0 | 1 |
2 /* | |
103
73060bc3f004
Change license to Boost 1.0 and MPL 2.0.
Jordan Miner <jminer7@gmail.com>
parents:
77
diff
changeset
|
3 * Copyright Jordan Miner |
0 | 4 * |
103
73060bc3f004
Change license to Boost 1.0 and MPL 2.0.
Jordan Miner <jminer7@gmail.com>
parents:
77
diff
changeset
|
5 * Distributed under the Boost Software License, Version 1.0. |
73060bc3f004
Change license to Boost 1.0 and MPL 2.0.
Jordan Miner <jminer7@gmail.com>
parents:
77
diff
changeset
|
6 * (See accompanying file BOOST_LICENSE.txt or copy at |
73060bc3f004
Change license to Boost 1.0 and MPL 2.0.
Jordan Miner <jminer7@gmail.com>
parents:
77
diff
changeset
|
7 * http://www.boost.org/LICENSE_1_0.txt) |
0 | 8 * |
9 */ | |
10 | |
11 module dynamin.core.unix_console; | |
12 | |
13 public import tango.stdc.stdlib; | |
14 //public import tango.stdc.string; | |
15 public import dynamin.core.string; | |
16 | |
17 /* | |
18 Can get width of console with $COLUMNS | |
19 Can get height of console with $LINES | |
20 */ | |
77
c9a4850926d9
Remove a couple not helpful comments (because moving memory does not save it) and add a helpful one.
Jordan Miner <jminer7@gmail.com>
parents:
0
diff
changeset
|
21 // The control codes are defined in ECMA-48. |
0 | 22 template ConsoleBackend() { |
23 static colorsUsed = false; | |
24 static ~this() { | |
25 if(colorsUsed) | |
26 backend_resetColors(); | |
27 } | |
28 bool buffered = false; | |
29 void backend_buffered(bool b) { | |
30 buffered = b; | |
31 } | |
32 void backend_write(string s) { | |
33 /*fwrite(s.ptr, 1, s.length, stdout); | |
34 if(!buffered) | |
35 fflush(stdout);*/ | |
36 } | |
37 string backend_readLineRaw() { | |
38 /*uint size; | |
39 char* line; | |
40 auto numRead = getline(&line, &size, stdin); | |
41 scope(exit) free(line); | |
42 string str = new char[numRead]; | |
43 str[] = line[0..numRead]; | |
44 return str;*/ | |
45 return null; | |
46 } | |
47 string backend_read() { | |
48 return null; | |
49 } | |
50 // TODO: use this | |
51 //termios ts; | |
52 //tcgetattr(filedes, &ts); | |
53 //ts.c_lflag |= ICANON; // turns on waiting for a whole lines | |
54 //ts.c_lflag |= ECHO; // turns on echoing | |
55 //tcsetattr(filedes, TCSAFLUSH, &ts); | |
56 string backend_readLineHidden() { | |
57 system("stty -echo"); | |
58 auto line = readLine(); | |
59 system("stty echo"); | |
60 return line; | |
61 } | |
62 string backend_readHidden() { | |
63 return null; | |
64 } | |
65 void backend_clear() { | |
66 system("clear"); | |
67 } | |
68 string backend_getColorStr(ConsoleColor c, bool fore) { | |
69 switch(c) { | |
70 case c.Black: return fore ? "\x1b[30m" : "\x1b[40m"; | |
71 case c.Silver: return fore ? "\x1b[37m" : "\x1b[47m"; | |
72 case c.Maroon: return fore ? "\x1b[31m" : "\x1b[41m"; | |
73 case c.DarkBlue: return fore ? "\x1b[34m" : "\x1b[44m"; | |
74 case c.Green: return fore ? "\x1b[32m" : "\x1b[42m"; | |
75 case c.Purple: return fore ? "\x1b[35m" : "\x1b[45m"; | |
76 case c.DarkYellow: return fore ? "\x1b[33m" : "\x1b[43m"; | |
77 case c.Teal: return fore ? "\x1b[36m" : "\x1b[46m"; | |
78 case c.Gray: return fore ? "\x1b[90m" : "\x1b[100m"; | |
79 case c.White: return fore ? "\x1b[97m" : "\x1b[107m"; | |
80 case c.Red: return fore ? "\x1b[91m" : "\x1b[101m"; | |
81 case c.Blue: return fore ? "\x1b[94m" : "\x1b[104m"; | |
82 case c.LightGreen: return fore ? "\x1b[92m" : "\x1b[102m"; | |
83 case c.Pink: return fore ? "\x1b[95m" : "\x1b[105m"; | |
84 case c.Yellow: return fore ? "\x1b[93m" : "\x1b[103m"; | |
85 case c.Cyan: return fore ? "\x1b[96m" : "\x1b[106m"; | |
86 default: assert(0); | |
87 } | |
88 } | |
89 void backend_foreColor(ConsoleColor color) { | |
90 colorsUsed = true; | |
91 backend_write(backend_getColorStr(color, true)); | |
92 } | |
93 void backend_backColor(ConsoleColor color) { | |
94 colorsUsed = true; | |
95 backend_write(backend_getColorStr(color, false)); | |
96 } | |
97 void backend_resetColors() { | |
98 backend_write("\x1b[39;49m"); | |
99 } | |
100 void backend_bold(bool b) { | |
101 backend_write(b ? "\x1b[1m" : "\x1b[22m"); | |
102 } | |
103 void backend_italic(bool b) { | |
104 backend_write(b ? "\x1b[3m" : "\x1b[23m"); | |
105 } | |
106 void backend_underline(bool b) { | |
107 backend_write(b ? "\x1b[4m" : "\x1b[24m"); | |
108 } | |
109 void backend_strikethrough(bool b) { | |
110 backend_write(b ? "\x1b[9m" : "\x1b[29m"); | |
111 } | |
112 } | |
113 |