Colored text serial output

Committer:
graffou
Date:
Sat Mar 31 11:56:23 2018 +0000
Revision:
0:b93a4ecad2ab
draft

Who changed what in which revision?

UserRevisionLine numberNew 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 }