2 * (c) 2008-2009 Technische Universität Dresden
3 * This file is part of TUD:OS and distributed under the terms of the
4 * GNU General Public License 2.
5 * Please see the COPYING-GPL-2 file for details.
8 #include <l4/re/log-sys.h>
9 #include <l4/re/protocols>
10 #include <l4/sys/kdebug.h>
11 #include <l4/cxx/minmax>
20 static Ldr::Log *last_log = 0;
22 static void my_outnstring(char const *s, unsigned long len)
27 static void mycpy(char **buf, int *rem, char const *s, int l)
29 int o = cxx::min(*rem, l);
35 static char msgbuf[4096];
38 Ldr::Log::dispatch(l4_umword_t, L4::Ipc_iostream &ios)
43 if (tag.label() != L4_PROTO_LOG)
48 // get opcode out of the message stream
51 // we only have one opcode
52 if (op != L4Re::Log_::Print)
55 char *msg = Glbl::log_buffer;
56 unsigned long len_msg = sizeof(Glbl::log_buffer);
58 ios >> L4::ipc_buf_cp_in(msg, len_msg);
60 int rem = sizeof(msgbuf);
61 while (len_msg > 0 && msg[0])
67 int n = snprintf(obuf, rem, "\033[%s3%dm",
68 (color() & 8) ? "01;" : "", (color() & 7));
73 mycpy(&obuf, &rem, "\033[0m", 4);
78 my_outnstring("\n", 1);
80 mycpy(&obuf, &rem, _tag, cxx::min<unsigned long>(_l, Max_tag));
82 mycpy(&obuf, &rem, " ", Max_tag-_l);
85 mycpy(&obuf, &rem, ": ", 2);
87 mycpy(&obuf, &rem, "| ", 2);
91 for (i = 0; i < len_msg; ++i)
92 if (msg[i] == '\n' || msg[i] == 0)
95 mycpy(&obuf, &rem, msg, i);
97 if (i <len_msg && msg[i] == '\n')
100 mycpy(&obuf, &rem, "\033[0m", 4);
101 mycpy(&obuf, &rem, "\n", 1);
111 my_outnstring(msgbuf, obuf-msgbuf);
117 if (_in_line && color())
118 my_outnstring("\033[0m", 4);
126 Ldr::Log::color_value(cxx::String const &col)
128 int c = 0, bright = 0;
135 case 'N': bright = 1; case 'n': c = 0; break;
136 case 'R': bright = 1; case 'r': c = 1; break;
137 case 'G': bright = 1; case 'g': c = 2; break;
138 case 'Y': bright = 1; case 'y': c = 3; break;
139 case 'B': bright = 1; case 'b': c = 4; break;
140 case 'M': bright = 1; case 'm': c = 5; break;
141 case 'C': bright = 1; case 'c': c = 6; break;
142 case 'W': bright = 1; case 'w': c = 7; break;
146 return (bright << 3) | c;