copyleft: gplv3 added and set repo to public
[calu.git] / 3b_sim / ccolor.h
1 /*   `Deep Thought', a softcore CPU implemented on a FPGA
2
3     Copyright (C) 2010 Markus Hofstaetter <markus.manrow@gmx.at>
4     Copyright (C) 2010 Martin Perner <e0725782@student.tuwien.ac.at>
5     Copyright (C) 2010 Stefan Rebernig <stefan.rebernig@gmail.com>
6     Copyright (C) 2010 Manfred Schwarz <e0725898@student.tuwien.ac.at>
7     Copyright (C) 2010 Bernhard Urban <lewurm@gmail.com>
8
9     This program is free software: you can redistribute it and/or modify
10     it under the terms of the GNU General Public License as published by
11     the Free Software Foundation, either version 3 of the License, or
12     (at your option) any later version.
13
14     This program is distributed in the hope that it will be useful,
15     but WITHOUT ANY WARRANTY; without even the implied warranty of
16     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17     GNU General Public License for more details.
18
19     You should have received a copy of the GNU General Public License
20     along with this program.  If not, see <http://www.gnu.org/licenses/>. */
21
22 #ifndef COLOR_H
23 #define COLOR_H
24
25 //
26 //taken from
27 //http://www.velocityreviews.com/forums/t279115-design-question-a-little-c-header-for-colorizing-text-in-linux-comments-ideas.html
28
29 #include <iostream>
30 using namespace std;
31
32 enum ColorName
33 {
34         black,
35         red,
36         green,
37         brown,
38         blue,
39         magenta,
40         cyan,
41         gray,
42
43         darkgray,
44         lightred,
45         lightgreen,
46         yellow,
47         lightblue,
48         lightmagenta,
49         lightcyan,
50         white
51 };
52
53
54 struct color
55 {
56         color(ColorName f = white, ColorName b = black) : fore(f), back(b) {}
57
58         ColorName fore;
59         ColorName back;
60 };
61
62
63 inline ostream& operator<<(ostream& o, const color& c)
64 {
65         //reset, just to be sure
66         o << "\033[0m";
67
68         o << "\033[";
69
70         if(c.back != black) {
71                 o << "4" << c.back << ";";
72         }
73         else {
74                 o << "0;";
75         }
76
77         if(c.fore > gray) {
78                 // bold color
79                 o << "1;3" << c.fore - gray - 1;
80         }
81         else {
82                 o << "0;3" << c.fore ;
83         }
84
85         return o << "m";
86
87 }
88
89 #endif