Colored text serial output
mbprt.h@0:b93a4ecad2ab, 2018-03-31 (annotated)
- Committer:
- graffou
- Date:
- Sat Mar 31 11:56:23 2018 +0000
- Revision:
- 0:b93a4ecad2ab
draft
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
graffou | 0:b93a4ecad2ab | 1 | #include <stdio.h> |
graffou | 0:b93a4ecad2ab | 2 | #include <string> |
graffou | 0:b93a4ecad2ab | 3 | using std::string; |
graffou | 0:b93a4ecad2ab | 4 | |
graffou | 0:b93a4ecad2ab | 5 | #define MSG(a) //std::cerr << a << "\n"; |
graffou | 0:b93a4ecad2ab | 6 | |
graffou | 0:b93a4ecad2ab | 7 | struct color |
graffou | 0:b93a4ecad2ab | 8 | { |
graffou | 0:b93a4ecad2ab | 9 | int v; |
graffou | 0:b93a4ecad2ab | 10 | |
graffou | 0:b93a4ecad2ab | 11 | color(const int x) |
graffou | 0:b93a4ecad2ab | 12 | { |
graffou | 0:b93a4ecad2ab | 13 | //v = x > 31 ? 31 : x; |
graffou | 0:b93a4ecad2ab | 14 | //v = 31 + (x&7) + 6*((x&4) != 0) + 256*((x&8) != 0) + 16*((x&16) != 0); |
graffou | 0:b93a4ecad2ab | 15 | v = x > 63 ? 63 : x; |
graffou | 0:b93a4ecad2ab | 16 | v = x > 19 ? (x + 267) : x + 31; |
graffou | 0:b93a4ecad2ab | 17 | v = x == 63 ? 0 : v; |
graffou | 0:b93a4ecad2ab | 18 | v = x == 62 ? 257 : v; |
graffou | 0:b93a4ecad2ab | 19 | } |
graffou | 0:b93a4ecad2ab | 20 | |
graffou | 0:b93a4ecad2ab | 21 | }; |
graffou | 0:b93a4ecad2ab | 22 | |
graffou | 0:b93a4ecad2ab | 23 | template <class T> |
graffou | 0:b93a4ecad2ab | 24 | int color_code(T supto) |
graffou | 0:b93a4ecad2ab | 25 | { |
graffou | 0:b93a4ecad2ab | 26 | //std::cerr << " ! " << supto << " ! "; |
graffou | 0:b93a4ecad2ab | 27 | int code = 1024; |
graffou | 0:b93a4ecad2ab | 28 | if (supto == 'r') |
graffou | 0:b93a4ecad2ab | 29 | code = 0; |
graffou | 0:b93a4ecad2ab | 30 | if (supto == 'g') |
graffou | 0:b93a4ecad2ab | 31 | code = 1; |
graffou | 0:b93a4ecad2ab | 32 | if (supto == 'y') |
graffou | 0:b93a4ecad2ab | 33 | code = 2; |
graffou | 0:b93a4ecad2ab | 34 | if (supto == 'b') |
graffou | 0:b93a4ecad2ab | 35 | code = 3; |
graffou | 0:b93a4ecad2ab | 36 | if (supto == 'm') |
graffou | 0:b93a4ecad2ab | 37 | code = 4; |
graffou | 0:b93a4ecad2ab | 38 | if (supto == 'c') |
graffou | 0:b93a4ecad2ab | 39 | code = 5; |
graffou | 0:b93a4ecad2ab | 40 | if (supto == 'k') |
graffou | 0:b93a4ecad2ab | 41 | code = 63; |
graffou | 0:b93a4ecad2ab | 42 | |
graffou | 0:b93a4ecad2ab | 43 | if (supto == 'R') |
graffou | 0:b93a4ecad2ab | 44 | code = 20; |
graffou | 0:b93a4ecad2ab | 45 | if (supto == 'G') |
graffou | 0:b93a4ecad2ab | 46 | code = 21; |
graffou | 0:b93a4ecad2ab | 47 | if (supto == 'Y') |
graffou | 0:b93a4ecad2ab | 48 | code = 22; |
graffou | 0:b93a4ecad2ab | 49 | if (supto == 'B') |
graffou | 0:b93a4ecad2ab | 50 | code = 23; |
graffou | 0:b93a4ecad2ab | 51 | if (supto == 'M') |
graffou | 0:b93a4ecad2ab | 52 | code = 24; |
graffou | 0:b93a4ecad2ab | 53 | if (supto == 'C') |
graffou | 0:b93a4ecad2ab | 54 | code = 25; |
graffou | 0:b93a4ecad2ab | 55 | if (supto == 'K') |
graffou | 0:b93a4ecad2ab | 56 | code = 62; |
graffou | 0:b93a4ecad2ab | 57 | if (supto == 'T') |
graffou | 0:b93a4ecad2ab | 58 | code = (15<<8)+22; |
graffou | 0:b93a4ecad2ab | 59 | if (supto == 'U') |
graffou | 0:b93a4ecad2ab | 60 | code = (14<<8)+21; |
graffou | 0:b93a4ecad2ab | 61 | if (supto == 'V') |
graffou | 0:b93a4ecad2ab | 62 | code = (13<<8)+20; |
graffou | 0:b93a4ecad2ab | 63 | if (supto == 'W') |
graffou | 0:b93a4ecad2ab | 64 | code = (12<<8)+24; |
graffou | 0:b93a4ecad2ab | 65 | //std::cerr << " !! " << code << " !! "; |
graffou | 0:b93a4ecad2ab | 66 | return code; |
graffou | 0:b93a4ecad2ab | 67 | } |
graffou | 0:b93a4ecad2ab | 68 | |
graffou | 0:b93a4ecad2ab | 69 | |
graffou | 0:b93a4ecad2ab | 70 | template <class T> |
graffou | 0:b93a4ecad2ab | 71 | string to_string(const T& x) |
graffou | 0:b93a4ecad2ab | 72 | { |
graffou | 0:b93a4ecad2ab | 73 | return static_cast<string>(x); |
graffou | 0:b93a4ecad2ab | 74 | } |
graffou | 0:b93a4ecad2ab | 75 | |
graffou | 0:b93a4ecad2ab | 76 | |
graffou | 0:b93a4ecad2ab | 77 | template<> |
graffou | 0:b93a4ecad2ab | 78 | string to_string(const int& x) |
graffou | 0:b93a4ecad2ab | 79 | { |
graffou | 0:b93a4ecad2ab | 80 | char buf[12]; |
graffou | 0:b93a4ecad2ab | 81 | sprintf(buf, "%d", x); |
graffou | 0:b93a4ecad2ab | 82 | return string(buf); |
graffou | 0:b93a4ecad2ab | 83 | } |
graffou | 0:b93a4ecad2ab | 84 | |
graffou | 0:b93a4ecad2ab | 85 | template<> |
graffou | 0:b93a4ecad2ab | 86 | string to_string(const color& x) |
graffou | 0:b93a4ecad2ab | 87 | { |
graffou | 0:b93a4ecad2ab | 88 | string os; |
graffou | 0:b93a4ecad2ab | 89 | if (x.v & 256) |
graffou | 0:b93a4ecad2ab | 90 | { |
graffou | 0:b93a4ecad2ab | 91 | os += "\033[1;"; |
graffou | 0:b93a4ecad2ab | 92 | } |
graffou | 0:b93a4ecad2ab | 93 | else |
graffou | 0:b93a4ecad2ab | 94 | { |
graffou | 0:b93a4ecad2ab | 95 | os += "\033[0;"; |
graffou | 0:b93a4ecad2ab | 96 | } |
graffou | 0:b93a4ecad2ab | 97 | |
graffou | 0:b93a4ecad2ab | 98 | os += to_string(x.v&255); |
graffou | 0:b93a4ecad2ab | 99 | os += "m"; |
graffou | 0:b93a4ecad2ab | 100 | return os; |
graffou | 0:b93a4ecad2ab | 101 | } |
graffou | 0:b93a4ecad2ab | 102 | |
graffou | 0:b93a4ecad2ab | 103 | struct gstring : public string |
graffou | 0:b93a4ecad2ab | 104 | { |
graffou | 0:b93a4ecad2ab | 105 | //using string::size; |
graffou | 0:b93a4ecad2ab | 106 | bool color_change; |
graffou | 0:b93a4ecad2ab | 107 | bool no_color_change; |
graffou | 0:b93a4ecad2ab | 108 | int base_color; |
graffou | 0:b93a4ecad2ab | 109 | int rcnt; |
graffou | 0:b93a4ecad2ab | 110 | |
graffou | 0:b93a4ecad2ab | 111 | gstring() |
graffou | 0:b93a4ecad2ab | 112 | { |
graffou | 0:b93a4ecad2ab | 113 | base_color = 1024; |
graffou | 0:b93a4ecad2ab | 114 | rcnt = 0; |
graffou | 0:b93a4ecad2ab | 115 | } |
graffou | 0:b93a4ecad2ab | 116 | |
graffou | 0:b93a4ecad2ab | 117 | template <class T> |
graffou | 0:b93a4ecad2ab | 118 | gstring(T x) : string(x) |
graffou | 0:b93a4ecad2ab | 119 | { |
graffou | 0:b93a4ecad2ab | 120 | base_color = 1024; |
graffou | 0:b93a4ecad2ab | 121 | rcnt = 0; |
graffou | 0:b93a4ecad2ab | 122 | } |
graffou | 0:b93a4ecad2ab | 123 | |
graffou | 0:b93a4ecad2ab | 124 | bool set_color(gstring& os, int code) |
graffou | 0:b93a4ecad2ab | 125 | { |
graffou | 0:b93a4ecad2ab | 126 | //std::cerr << ":" << code<<":"; |
graffou | 0:b93a4ecad2ab | 127 | if (code != 1024) |
graffou | 0:b93a4ecad2ab | 128 | { |
graffou | 0:b93a4ecad2ab | 129 | if (code < 256) |
graffou | 0:b93a4ecad2ab | 130 | { |
graffou | 0:b93a4ecad2ab | 131 | os += to_string(color(code)); |
graffou | 0:b93a4ecad2ab | 132 | } |
graffou | 0:b93a4ecad2ab | 133 | else |
graffou | 0:b93a4ecad2ab | 134 | { |
graffou | 0:b93a4ecad2ab | 135 | os += to_string(color(code >> 8)); |
graffou | 0:b93a4ecad2ab | 136 | os += to_string(color(code & 0xff)); |
graffou | 0:b93a4ecad2ab | 137 | } |
graffou | 0:b93a4ecad2ab | 138 | return true; |
graffou | 0:b93a4ecad2ab | 139 | } |
graffou | 0:b93a4ecad2ab | 140 | |
graffou | 0:b93a4ecad2ab | 141 | return false; |
graffou | 0:b93a4ecad2ab | 142 | } |
graffou | 0:b93a4ecad2ab | 143 | |
graffou | 0:b93a4ecad2ab | 144 | char get_char(int init = 0) |
graffou | 0:b93a4ecad2ab | 145 | { |
graffou | 0:b93a4ecad2ab | 146 | //std::cerr << "#" << rcnt << " " << size() << "\n"; |
graffou | 0:b93a4ecad2ab | 147 | char c; |
graffou | 0:b93a4ecad2ab | 148 | if (init == 1) |
graffou | 0:b93a4ecad2ab | 149 | {rcnt = 0; return ' ';} |
graffou | 0:b93a4ecad2ab | 150 | else |
graffou | 0:b93a4ecad2ab | 151 | { |
graffou | 0:b93a4ecad2ab | 152 | c = string::operator[](rcnt); |
graffou | 0:b93a4ecad2ab | 153 | if (!init) |
graffou | 0:b93a4ecad2ab | 154 | rcnt++; |
graffou | 0:b93a4ecad2ab | 155 | return c; |
graffou | 0:b93a4ecad2ab | 156 | } |
graffou | 0:b93a4ecad2ab | 157 | |
graffou | 0:b93a4ecad2ab | 158 | } |
graffou | 0:b93a4ecad2ab | 159 | |
graffou | 0:b93a4ecad2ab | 160 | |
graffou | 0:b93a4ecad2ab | 161 | // Find a character |
graffou | 0:b93a4ecad2ab | 162 | bool upto_char(gstring& os, char x) |
graffou | 0:b93a4ecad2ab | 163 | { |
graffou | 0:b93a4ecad2ab | 164 | //std::cerr << "&" << rcnt; |
graffou | 0:b93a4ecad2ab | 165 | char c; |
graffou | 0:b93a4ecad2ab | 166 | int code = 1024; |
graffou | 0:b93a4ecad2ab | 167 | while (rcnt < size()) |
graffou | 0:b93a4ecad2ab | 168 | { |
graffou | 0:b93a4ecad2ab | 169 | c = this->get_char(); |
graffou | 0:b93a4ecad2ab | 170 | //std::cerr << c << rcnt; |
graffou | 0:b93a4ecad2ab | 171 | |
graffou | 0:b93a4ecad2ab | 172 | |
graffou | 0:b93a4ecad2ab | 173 | if (rcnt == 1) |
graffou | 0:b93a4ecad2ab | 174 | { |
graffou | 0:b93a4ecad2ab | 175 | if (c == '#'||c == '@') |
graffou | 0:b93a4ecad2ab | 176 | { |
graffou | 0:b93a4ecad2ab | 177 | if (c == '@') |
graffou | 0:b93a4ecad2ab | 178 | no_color_change = 1; |
graffou | 0:b93a4ecad2ab | 179 | else |
graffou | 0:b93a4ecad2ab | 180 | no_color_change = 0; |
graffou | 0:b93a4ecad2ab | 181 | |
graffou | 0:b93a4ecad2ab | 182 | c = this->get_char(); |
graffou | 0:b93a4ecad2ab | 183 | code = color_code(c); |
graffou | 0:b93a4ecad2ab | 184 | base_color = code; |
graffou | 0:b93a4ecad2ab | 185 | |
graffou | 0:b93a4ecad2ab | 186 | if (code != 1024) |
graffou | 0:b93a4ecad2ab | 187 | { |
graffou | 0:b93a4ecad2ab | 188 | set_color(os, base_color); |
graffou | 0:b93a4ecad2ab | 189 | color_change = 1; |
graffou | 0:b93a4ecad2ab | 190 | } |
graffou | 0:b93a4ecad2ab | 191 | |
graffou | 0:b93a4ecad2ab | 192 | |
graffou | 0:b93a4ecad2ab | 193 | c = this->get_char(); |
graffou | 0:b93a4ecad2ab | 194 | } |
graffou | 0:b93a4ecad2ab | 195 | else |
graffou | 0:b93a4ecad2ab | 196 | { |
graffou | 0:b93a4ecad2ab | 197 | base_color = 1024; |
graffou | 0:b93a4ecad2ab | 198 | color_change = 0; |
graffou | 0:b93a4ecad2ab | 199 | no_color_change = 0; |
graffou | 0:b93a4ecad2ab | 200 | } |
graffou | 0:b93a4ecad2ab | 201 | //std::cerr << " " << base_color << " "; |
graffou | 0:b93a4ecad2ab | 202 | } |
graffou | 0:b93a4ecad2ab | 203 | |
graffou | 0:b93a4ecad2ab | 204 | if (c == x){//std::cerr << "]"; |
graffou | 0:b93a4ecad2ab | 205 | return true;} |
graffou | 0:b93a4ecad2ab | 206 | os += c; |
graffou | 0:b93a4ecad2ab | 207 | } |
graffou | 0:b93a4ecad2ab | 208 | return false; |
graffou | 0:b93a4ecad2ab | 209 | } |
graffou | 0:b93a4ecad2ab | 210 | |
graffou | 0:b93a4ecad2ab | 211 | |
graffou | 0:b93a4ecad2ab | 212 | // returns a string from start up to next % sign. next_start is the next pos to scan from |
graffou | 0:b93a4ecad2ab | 213 | void till_percent(gstring& os, int start, int& next_start) |
graffou | 0:b93a4ecad2ab | 214 | { |
graffou | 0:b93a4ecad2ab | 215 | //std::cerr << " " << base_color << " "; |
graffou | 0:b93a4ecad2ab | 216 | //res = ""; |
graffou | 0:b93a4ecad2ab | 217 | //int upto; |
graffou | 0:b93a4ecad2ab | 218 | |
graffou | 0:b93a4ecad2ab | 219 | //bool found = this->find_char('%',start, upto); |
graffou | 0:b93a4ecad2ab | 220 | if (base_color != 1024) |
graffou | 0:b93a4ecad2ab | 221 | set_color(os, base_color); |
graffou | 0:b93a4ecad2ab | 222 | |
graffou | 0:b93a4ecad2ab | 223 | bool found = this->upto_char(os, '%'); |
graffou | 0:b93a4ecad2ab | 224 | |
graffou | 0:b93a4ecad2ab | 225 | |
graffou | 0:b93a4ecad2ab | 226 | next_start = start; // PG 0514, not used anymore but avoid warnings |
graffou | 0:b93a4ecad2ab | 227 | |
graffou | 0:b93a4ecad2ab | 228 | |
graffou | 0:b93a4ecad2ab | 229 | if (!found || rcnt == size()) |
graffou | 0:b93a4ecad2ab | 230 | { |
graffou | 0:b93a4ecad2ab | 231 | next_start = size(); |
graffou | 0:b93a4ecad2ab | 232 | } |
graffou | 0:b93a4ecad2ab | 233 | else |
graffou | 0:b93a4ecad2ab | 234 | { |
graffou | 0:b93a4ecad2ab | 235 | char supto = this->get_char(4);//s[upto+1]; |
graffou | 0:b93a4ecad2ab | 236 | //std::cerr << ':' << supto << ':'; |
graffou | 0:b93a4ecad2ab | 237 | if (supto == ' ' || supto == '\n' || supto == '%' || |
graffou | 0:b93a4ecad2ab | 238 | supto == ',' || supto == '.' ||supto == ';'||supto == ')' ||supto == ']' ) |
graffou | 0:b93a4ecad2ab | 239 | { |
graffou | 0:b93a4ecad2ab | 240 | MSG("CZ"); |
graffou | 0:b93a4ecad2ab | 241 | |
graffou | 0:b93a4ecad2ab | 242 | } |
graffou | 0:b93a4ecad2ab | 243 | else |
graffou | 0:b93a4ecad2ab | 244 | { |
graffou | 0:b93a4ecad2ab | 245 | MSG("CC"); |
graffou | 0:b93a4ecad2ab | 246 | color_change |= set_color(os, color_code(this->get_char())); |
graffou | 0:b93a4ecad2ab | 247 | } |
graffou | 0:b93a4ecad2ab | 248 | } |
graffou | 0:b93a4ecad2ab | 249 | |
graffou | 0:b93a4ecad2ab | 250 | //this->clone(res, start, upto - start); |
graffou | 0:b93a4ecad2ab | 251 | //os << res; |
graffou | 0:b93a4ecad2ab | 252 | // std::cerr << "//TP"; |
graffou | 0:b93a4ecad2ab | 253 | //return res; |
graffou | 0:b93a4ecad2ab | 254 | |
graffou | 0:b93a4ecad2ab | 255 | } |
graffou | 0:b93a4ecad2ab | 256 | |
graffou | 0:b93a4ecad2ab | 257 | // display string from position start till ther next % sign. start is updated w/ the next pos to scan from |
graffou | 0:b93a4ecad2ab | 258 | void display_till_percent(gstring& os, int& start) |
graffou | 0:b93a4ecad2ab | 259 | { |
graffou | 0:b93a4ecad2ab | 260 | //std::cerr << "DTP"; |
graffou | 0:b93a4ecad2ab | 261 | //gstring lala; |
graffou | 0:b93a4ecad2ab | 262 | int next_start = 0; //PG 0515, not used trying to avoid warnings |
graffou | 0:b93a4ecad2ab | 263 | |
graffou | 0:b93a4ecad2ab | 264 | if (size() > rcnt) |
graffou | 0:b93a4ecad2ab | 265 | { |
graffou | 0:b93a4ecad2ab | 266 | |
graffou | 0:b93a4ecad2ab | 267 | this->till_percent(os, start, next_start); |
graffou | 0:b93a4ecad2ab | 268 | //os << lala; |
graffou | 0:b93a4ecad2ab | 269 | start = next_start; |
graffou | 0:b93a4ecad2ab | 270 | } |
graffou | 0:b93a4ecad2ab | 271 | //std::cerr << "//DTE" << rcnt << " " << size(); |
graffou | 0:b93a4ecad2ab | 272 | //std::cerr << "//DTP"; |
graffou | 0:b93a4ecad2ab | 273 | } |
graffou | 0:b93a4ecad2ab | 274 | |
graffou | 0:b93a4ecad2ab | 275 | |
graffou | 0:b93a4ecad2ab | 276 | // Display the string from start til the end |
graffou | 0:b93a4ecad2ab | 277 | void display_till_end(gstring& os, int& start) |
graffou | 0:b93a4ecad2ab | 278 | { |
graffou | 0:b93a4ecad2ab | 279 | //std::cerr << "DTE" << rcnt << " " << size(); |
graffou | 0:b93a4ecad2ab | 280 | //int next_start; -- !!!!!! |
graffou | 0:b93a4ecad2ab | 281 | if (size() > rcnt) |
graffou | 0:b93a4ecad2ab | 282 | { |
graffou | 0:b93a4ecad2ab | 283 | this->upto_char(os, '%'); |
graffou | 0:b93a4ecad2ab | 284 | //std::cerr << "(" << rcnt << ")"; |
graffou | 0:b93a4ecad2ab | 285 | //this->clone(lala, start, size() - start);// - 1); |
graffou | 0:b93a4ecad2ab | 286 | //os << lala; |
graffou | 0:b93a4ecad2ab | 287 | //start = next_start;-- !!!!!! |
graffou | 0:b93a4ecad2ab | 288 | } |
graffou | 0:b93a4ecad2ab | 289 | |
graffou | 0:b93a4ecad2ab | 290 | if (color_change && !no_color_change) |
graffou | 0:b93a4ecad2ab | 291 | { |
graffou | 0:b93a4ecad2ab | 292 | #ifndef NO_COLOR |
graffou | 0:b93a4ecad2ab | 293 | os += "\033[0m\n"; |
graffou | 0:b93a4ecad2ab | 294 | //os += std::endl; |
graffou | 0:b93a4ecad2ab | 295 | #else |
graffou | 0:b93a4ecad2ab | 296 | os += "\n";//std::endl; |
graffou | 0:b93a4ecad2ab | 297 | #endif |
graffou | 0:b93a4ecad2ab | 298 | |
graffou | 0:b93a4ecad2ab | 299 | } |
graffou | 0:b93a4ecad2ab | 300 | printf(os.c_str()); |
graffou | 0:b93a4ecad2ab | 301 | //std::cerr << "//DTE"; |
graffou | 0:b93a4ecad2ab | 302 | |
graffou | 0:b93a4ecad2ab | 303 | } |
graffou | 0:b93a4ecad2ab | 304 | |
graffou | 0:b93a4ecad2ab | 305 | template <class T> |
graffou | 0:b93a4ecad2ab | 306 | void to_stream(gstring& os, T& x) |
graffou | 0:b93a4ecad2ab | 307 | { |
graffou | 0:b93a4ecad2ab | 308 | os += to_string(x); |
graffou | 0:b93a4ecad2ab | 309 | //std::cerr << "//TS"; |
graffou | 0:b93a4ecad2ab | 310 | } |
graffou | 0:b93a4ecad2ab | 311 | |
graffou | 0:b93a4ecad2ab | 312 | |
graffou | 0:b93a4ecad2ab | 313 | |
graffou | 0:b93a4ecad2ab | 314 | }; |
graffou | 0:b93a4ecad2ab | 315 | |
graffou | 0:b93a4ecad2ab | 316 | |
graffou | 0:b93a4ecad2ab | 317 | |
graffou | 0:b93a4ecad2ab | 318 | |
graffou | 0:b93a4ecad2ab | 319 | //template <class T, class T0> |
graffou | 0:b93a4ecad2ab | 320 | template <class T0> |
graffou | 0:b93a4ecad2ab | 321 | //void gprintf(T& os, T0 x) |
graffou | 0:b93a4ecad2ab | 322 | void gprintf(T0& x) |
graffou | 0:b93a4ecad2ab | 323 | { |
graffou | 0:b93a4ecad2ab | 324 | gstring os; |
graffou | 0:b93a4ecad2ab | 325 | os = to_string(x); |
graffou | 0:b93a4ecad2ab | 326 | printf(os.c_str()); |
graffou | 0:b93a4ecad2ab | 327 | } |
graffou | 0:b93a4ecad2ab | 328 | |
graffou | 0:b93a4ecad2ab | 329 | |
graffou | 0:b93a4ecad2ab | 330 | //template <class T> |
graffou | 0:b93a4ecad2ab | 331 | //void gprintf(T& os, const char* format) |
graffou | 0:b93a4ecad2ab | 332 | static void gprintf(const char* format) |
graffou | 0:b93a4ecad2ab | 333 | { |
graffou | 0:b93a4ecad2ab | 334 | int start=0; |
graffou | 0:b93a4ecad2ab | 335 | gstring os; |
graffou | 0:b93a4ecad2ab | 336 | gstring toto = format; toto.get_char(true); |
graffou | 0:b93a4ecad2ab | 337 | toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 338 | toto.display_till_end(os, start); |
graffou | 0:b93a4ecad2ab | 339 | } |
graffou | 0:b93a4ecad2ab | 340 | |
graffou | 0:b93a4ecad2ab | 341 | |
graffou | 0:b93a4ecad2ab | 342 | // gprintf templates for nargs = 1...10 |
graffou | 0:b93a4ecad2ab | 343 | template <class T0> |
graffou | 0:b93a4ecad2ab | 344 | void gprintf(const char* format, const T0& x0) |
graffou | 0:b93a4ecad2ab | 345 | { |
graffou | 0:b93a4ecad2ab | 346 | gstring os; |
graffou | 0:b93a4ecad2ab | 347 | gstring toto = format; toto.get_char(true); |
graffou | 0:b93a4ecad2ab | 348 | MSG(1); |
graffou | 0:b93a4ecad2ab | 349 | int start=0; |
graffou | 0:b93a4ecad2ab | 350 | |
graffou | 0:b93a4ecad2ab | 351 | // before 1st % |
graffou | 0:b93a4ecad2ab | 352 | toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 353 | MSG(2); |
graffou | 0:b93a4ecad2ab | 354 | toto.to_stream(os, x0); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 355 | MSG(3) |
graffou | 0:b93a4ecad2ab | 356 | // after last % |
graffou | 0:b93a4ecad2ab | 357 | toto.display_till_end(os, start); |
graffou | 0:b93a4ecad2ab | 358 | } |
graffou | 0:b93a4ecad2ab | 359 | |
graffou | 0:b93a4ecad2ab | 360 | template <class T0, class T1> |
graffou | 0:b93a4ecad2ab | 361 | void gprintf(const char* format, const T0& x0,const T1& x1) |
graffou | 0:b93a4ecad2ab | 362 | { |
graffou | 0:b93a4ecad2ab | 363 | gstring toto = format; toto.get_char(true); |
graffou | 0:b93a4ecad2ab | 364 | |
graffou | 0:b93a4ecad2ab | 365 | gstring os; |
graffou | 0:b93a4ecad2ab | 366 | int start=0; |
graffou | 0:b93a4ecad2ab | 367 | |
graffou | 0:b93a4ecad2ab | 368 | // before 1st % |
graffou | 0:b93a4ecad2ab | 369 | toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 370 | |
graffou | 0:b93a4ecad2ab | 371 | toto.to_stream(os, x0); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 372 | toto.to_stream(os, x1); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 373 | |
graffou | 0:b93a4ecad2ab | 374 | // after last % |
graffou | 0:b93a4ecad2ab | 375 | toto.display_till_end(os, start); |
graffou | 0:b93a4ecad2ab | 376 | } |
graffou | 0:b93a4ecad2ab | 377 | |
graffou | 0:b93a4ecad2ab | 378 | template <class T0, class T1, class T2, class T3> |
graffou | 0:b93a4ecad2ab | 379 | void gprintf(const char* format, const T0& x0, const T1& x1, const T2& x2, const T3& x3) |
graffou | 0:b93a4ecad2ab | 380 | { |
graffou | 0:b93a4ecad2ab | 381 | gstring toto = format; toto.get_char(true); |
graffou | 0:b93a4ecad2ab | 382 | gstring os; |
graffou | 0:b93a4ecad2ab | 383 | |
graffou | 0:b93a4ecad2ab | 384 | int start=0; |
graffou | 0:b93a4ecad2ab | 385 | |
graffou | 0:b93a4ecad2ab | 386 | // before 1st % |
graffou | 0:b93a4ecad2ab | 387 | toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 388 | |
graffou | 0:b93a4ecad2ab | 389 | toto.to_stream(os, x0); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 390 | toto.to_stream(os, x1); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 391 | toto.to_stream(os, x2); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 392 | toto.to_stream(os, x3); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 393 | |
graffou | 0:b93a4ecad2ab | 394 | // after last % |
graffou | 0:b93a4ecad2ab | 395 | toto.display_till_end(os, start); |
graffou | 0:b93a4ecad2ab | 396 | } |
graffou | 0:b93a4ecad2ab | 397 | |
graffou | 0:b93a4ecad2ab | 398 | template <class T0, class T1, class T2> |
graffou | 0:b93a4ecad2ab | 399 | void gprintf(const char* format, const T0& x0, const T1& x1, const T2& x2) |
graffou | 0:b93a4ecad2ab | 400 | { |
graffou | 0:b93a4ecad2ab | 401 | gstring toto = format; toto.get_char(true); |
graffou | 0:b93a4ecad2ab | 402 | gstring os; |
graffou | 0:b93a4ecad2ab | 403 | |
graffou | 0:b93a4ecad2ab | 404 | int start=0; |
graffou | 0:b93a4ecad2ab | 405 | |
graffou | 0:b93a4ecad2ab | 406 | // before 1st % |
graffou | 0:b93a4ecad2ab | 407 | toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 408 | |
graffou | 0:b93a4ecad2ab | 409 | toto.to_stream(os, x0); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 410 | toto.to_stream(os, x1); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 411 | toto.to_stream(os, x2); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 412 | |
graffou | 0:b93a4ecad2ab | 413 | // after last % |
graffou | 0:b93a4ecad2ab | 414 | toto.display_till_end(os, start); |
graffou | 0:b93a4ecad2ab | 415 | } |
graffou | 0:b93a4ecad2ab | 416 | |
graffou | 0:b93a4ecad2ab | 417 | |
graffou | 0:b93a4ecad2ab | 418 | template <class T0, class T1, class T2, class T3, class T4> |
graffou | 0:b93a4ecad2ab | 419 | void gprintf(const char* format, const T0& x0, const T1& x1, const T2& x2, const T3& x3, const T4& x4) |
graffou | 0:b93a4ecad2ab | 420 | { |
graffou | 0:b93a4ecad2ab | 421 | gstring toto = format; toto.get_char(true); |
graffou | 0:b93a4ecad2ab | 422 | gstring os; |
graffou | 0:b93a4ecad2ab | 423 | |
graffou | 0:b93a4ecad2ab | 424 | int start=0; |
graffou | 0:b93a4ecad2ab | 425 | |
graffou | 0:b93a4ecad2ab | 426 | // before 1st % |
graffou | 0:b93a4ecad2ab | 427 | toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 428 | |
graffou | 0:b93a4ecad2ab | 429 | toto.to_stream(os, x0); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 430 | toto.to_stream(os, x1); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 431 | toto.to_stream(os, x2); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 432 | toto.to_stream(os, x3); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 433 | toto.to_stream(os, x4); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 434 | |
graffou | 0:b93a4ecad2ab | 435 | // after last % |
graffou | 0:b93a4ecad2ab | 436 | toto.display_till_end(os, start); |
graffou | 0:b93a4ecad2ab | 437 | } |
graffou | 0:b93a4ecad2ab | 438 | |
graffou | 0:b93a4ecad2ab | 439 | template <class T0, class T1, class T2, class T3, class T4, class T5> |
graffou | 0:b93a4ecad2ab | 440 | void gprintf(const char* format, const T0& x0, const T1& x1, const T2& x2, const T3& x3, const T4& x4, const T5& x5) |
graffou | 0:b93a4ecad2ab | 441 | { |
graffou | 0:b93a4ecad2ab | 442 | gstring toto = format; toto.get_char(true); |
graffou | 0:b93a4ecad2ab | 443 | gstring os; |
graffou | 0:b93a4ecad2ab | 444 | |
graffou | 0:b93a4ecad2ab | 445 | int start=0; |
graffou | 0:b93a4ecad2ab | 446 | |
graffou | 0:b93a4ecad2ab | 447 | // before 1st % |
graffou | 0:b93a4ecad2ab | 448 | toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 449 | |
graffou | 0:b93a4ecad2ab | 450 | toto.to_stream(os, x0); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 451 | toto.to_stream(os, x1); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 452 | toto.to_stream(os, x2); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 453 | toto.to_stream(os, x3); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 454 | toto.to_stream(os, x4); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 455 | toto.to_stream(os, x5); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 456 | |
graffou | 0:b93a4ecad2ab | 457 | // after last % |
graffou | 0:b93a4ecad2ab | 458 | toto.display_till_end(os, start); |
graffou | 0:b93a4ecad2ab | 459 | } |
graffou | 0:b93a4ecad2ab | 460 | |
graffou | 0:b93a4ecad2ab | 461 | template <class T0, class T1, class T2, class T3, class T4, class T5, class T6> |
graffou | 0:b93a4ecad2ab | 462 | void gprintf(const char* format, const T0& x0, const T1& x1, const T2& x2, const T3& x3, const T4& x4, const T5& x5, const T6& x6) |
graffou | 0:b93a4ecad2ab | 463 | { |
graffou | 0:b93a4ecad2ab | 464 | gstring toto = format; toto.get_char(true); |
graffou | 0:b93a4ecad2ab | 465 | gstring os; |
graffou | 0:b93a4ecad2ab | 466 | |
graffou | 0:b93a4ecad2ab | 467 | int start=0; |
graffou | 0:b93a4ecad2ab | 468 | |
graffou | 0:b93a4ecad2ab | 469 | // before 1st % |
graffou | 0:b93a4ecad2ab | 470 | toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 471 | |
graffou | 0:b93a4ecad2ab | 472 | toto.to_stream(os, x0); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 473 | toto.to_stream(os, x1); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 474 | toto.to_stream(os, x2); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 475 | toto.to_stream(os, x3); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 476 | toto.to_stream(os, x4); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 477 | toto.to_stream(os, x5); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 478 | toto.to_stream(os, x6); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 479 | |
graffou | 0:b93a4ecad2ab | 480 | // after last % |
graffou | 0:b93a4ecad2ab | 481 | toto.display_till_end(os, start); |
graffou | 0:b93a4ecad2ab | 482 | } |
graffou | 0:b93a4ecad2ab | 483 | |
graffou | 0:b93a4ecad2ab | 484 | template <class T0, class T1, class T2, class T3, class T4, class T5, class T6, class T7> |
graffou | 0:b93a4ecad2ab | 485 | void gprintf(const char* format, const T0& x0, const T1& x1, const T2& x2, const T3& x3, const T4& x4, const T5& x5, const T6& x6, const T7& x7) |
graffou | 0:b93a4ecad2ab | 486 | { |
graffou | 0:b93a4ecad2ab | 487 | gstring toto = format; toto.get_char(true); |
graffou | 0:b93a4ecad2ab | 488 | gstring os; |
graffou | 0:b93a4ecad2ab | 489 | |
graffou | 0:b93a4ecad2ab | 490 | int start=0; |
graffou | 0:b93a4ecad2ab | 491 | |
graffou | 0:b93a4ecad2ab | 492 | // before 1st % |
graffou | 0:b93a4ecad2ab | 493 | toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 494 | |
graffou | 0:b93a4ecad2ab | 495 | toto.to_stream(os, x0); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 496 | toto.to_stream(os, x1); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 497 | toto.to_stream(os, x2); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 498 | toto.to_stream(os, x3); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 499 | toto.to_stream(os, x4); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 500 | toto.to_stream(os, x5); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 501 | toto.to_stream(os, x6); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 502 | toto.to_stream(os, x7); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 503 | |
graffou | 0:b93a4ecad2ab | 504 | // after last % |
graffou | 0:b93a4ecad2ab | 505 | toto.display_till_end(os, start); |
graffou | 0:b93a4ecad2ab | 506 | } |
graffou | 0:b93a4ecad2ab | 507 | |
graffou | 0:b93a4ecad2ab | 508 | template <class T0, class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8> |
graffou | 0:b93a4ecad2ab | 509 | void gprintf(const char* format, const T0& x0, const T1& x1, const T2& x2, const T3& x3, const T4& x4, const T5& x5, const T6& x6, const T7& x7, const T8& x8) |
graffou | 0:b93a4ecad2ab | 510 | { |
graffou | 0:b93a4ecad2ab | 511 | gstring toto = format; toto.get_char(true); |
graffou | 0:b93a4ecad2ab | 512 | gstring os; |
graffou | 0:b93a4ecad2ab | 513 | |
graffou | 0:b93a4ecad2ab | 514 | int start=0; |
graffou | 0:b93a4ecad2ab | 515 | |
graffou | 0:b93a4ecad2ab | 516 | // before 1st % |
graffou | 0:b93a4ecad2ab | 517 | toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 518 | |
graffou | 0:b93a4ecad2ab | 519 | toto.to_stream(os, x0); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 520 | toto.to_stream(os, x1); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 521 | toto.to_stream(os, x2); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 522 | toto.to_stream(os, x3); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 523 | toto.to_stream(os, x4); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 524 | toto.to_stream(os, x5); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 525 | toto.to_stream(os, x6); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 526 | toto.to_stream(os, x7); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 527 | toto.to_stream(os, x8); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 528 | |
graffou | 0:b93a4ecad2ab | 529 | // after last % |
graffou | 0:b93a4ecad2ab | 530 | toto.display_till_end(os, start); |
graffou | 0:b93a4ecad2ab | 531 | } |
graffou | 0:b93a4ecad2ab | 532 | template <class T0, class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9> |
graffou | 0:b93a4ecad2ab | 533 | void gprintf(const char* format, const T0& x0, const T1& x1, const T2& x2, const T3& x3, const T4& x4, const T5& x5, const T6& x6, const T7& x7, const T8& x8, const T9& x9) |
graffou | 0:b93a4ecad2ab | 534 | { |
graffou | 0:b93a4ecad2ab | 535 | gstring toto = format; toto.get_char(true); |
graffou | 0:b93a4ecad2ab | 536 | gstring os; |
graffou | 0:b93a4ecad2ab | 537 | |
graffou | 0:b93a4ecad2ab | 538 | int start=0; |
graffou | 0:b93a4ecad2ab | 539 | |
graffou | 0:b93a4ecad2ab | 540 | // before 1st % |
graffou | 0:b93a4ecad2ab | 541 | toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 542 | |
graffou | 0:b93a4ecad2ab | 543 | toto.to_stream(os, x0); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 544 | toto.to_stream(os, x1); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 545 | toto.to_stream(os, x2); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 546 | toto.to_stream(os, x3); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 547 | toto.to_stream(os, x4); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 548 | toto.to_stream(os, x5); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 549 | toto.to_stream(os, x6); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 550 | toto.to_stream(os, x7); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 551 | toto.to_stream(os, x8); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 552 | toto.to_stream(os, x9); toto.display_till_percent(os, start); |
graffou | 0:b93a4ecad2ab | 553 | |
graffou | 0:b93a4ecad2ab | 554 | // after last % |
graffou | 0:b93a4ecad2ab | 555 | toto.display_till_end(os, start); |
graffou | 0:b93a4ecad2ab | 556 | } |