]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/mag/server/src/session.cc
update
[l4.git] / l4 / pkg / mag / server / src / session.cc
1
2 #include <l4/mag/server/session>
3
4 #include <algorithm>
5 #include <cstring>
6
7 void
8 Mag_server::Session::set_label_prop(Session *s, Property_handler const *, cxx::String const &v)
9 {
10   if (s->_label)
11     delete [] s->_label;
12
13   if (v.empty())
14     {
15       s->_label = 0;
16       return;
17     }
18
19   // limit label length to 256 letters
20   unsigned l = std::min(v.len(), 256);
21   s->_label = new char[l + 1];
22   memcpy(s->_label, v.start(), l);
23   s->_label[l] = 0;
24 }
25
26 void
27 Mag_server::Session::set_color_prop(Session *s, Property_handler const *, cxx::String const &v)
28 {
29   typedef Mag_gfx::Rgb32::Color Color;
30
31   if (v.empty())
32     return;
33
34   l4_uint32_t cval;
35   if (v.eof(v.start() + v.from_hex(&cval)))
36     {
37       s->_color = Color((cval >> 16) & 0xff, (cval >> 8) & 0xff, cval & 0xff);
38       return;
39     }
40
41   switch (v[0])
42     {
43     case 'r': s->_color = Color(130, 0, 0); break;
44     case 'g': s->_color = Color(0, 130, 0); break;
45     case 'b': s->_color = Color(0, 0, 130); break;
46     case 'w': s->_color = Color(130, 130, 130); break;
47     case 'y': s->_color = Color(130, 130, 0); break;
48     case 'v': s->_color = Color(130, 0, 130); break;
49     case 'R': s->_color = Color(255, 0, 0); break;
50     case 'G': s->_color = Color(0, 255, 0); break;
51     case 'B': s->_color = Color(0, 0, 255); break;
52     case 'W': s->_color = Color(255, 255, 255); break;
53     case 'Y': s->_color = Color(255, 255, 0); break;
54     case 'V': s->_color = Color(255, 0, 255); break;
55     default: s->_color = Color(20, 20, 20); break;
56     // case 'b': _color = Color(20, 20, 20); break;
57     }
58 }
59
60 Mag_server::Session::~Session()
61 {
62   if (_label)
63     delete [] _label;
64
65   l_remove();
66   if (_ntfy)
67     _ntfy->notify();
68 }
69