int curses_start_color(void) { //TODO: this should be reviewed in the future. colorpairs = new pairs[100]; windowsPalette = new RGBQUAD[16]; //Load the console colors from colors.json std::ifstream colorfile(FILENAMES["colors"].c_str(), std::ifstream::in | std::ifstream::binary); try{ JsonIn jsin(colorfile); char ch; // Manually load the colordef object because the json handler isn't loaded yet. jsin.eat_whitespace(); ch = jsin.peek(); if( ch == '[' ) { jsin.start_array(); // find type and dispatch each object until array close while (!jsin.end_array()) { jsin.eat_whitespace(); char ch = jsin.peek(); if (ch != '{') { jsin.error( string_format( "expected array of objects but found '%c', not '{'", ch ) ); } JsonObject jo = jsin.get_object(); load_colors(jo); jo.finish(); } } else { // not an array? jsin.error( string_format( "expected object or array, but found '%c'", ch ) ); } } catch( const JsonError &err ){ throw std::runtime_error( FILENAMES["colors"] + ": " + err.what() ); } if(consolecolors.empty())return SetDIBColorTable(backbuffer, 0, 16, windowsPalette); windowsPalette[0] = BGR(ccolor("BLACK")); windowsPalette[1] = BGR(ccolor("RED")); windowsPalette[2] = BGR(ccolor("GREEN")); windowsPalette[3] = BGR(ccolor("BROWN")); windowsPalette[4] = BGR(ccolor("BLUE")); windowsPalette[5] = BGR(ccolor("MAGENTA")); windowsPalette[6] = BGR(ccolor("CYAN")); windowsPalette[7] = BGR(ccolor("GRAY")); windowsPalette[8] = BGR(ccolor("DGRAY")); windowsPalette[9] = BGR(ccolor("LRED")); windowsPalette[10] = BGR(ccolor("LGREEN")); windowsPalette[11] = BGR(ccolor("YELLOW")); windowsPalette[12] = BGR(ccolor("LBLUE")); windowsPalette[13] = BGR(ccolor("LMAGENTA")); windowsPalette[14] = BGR(ccolor("LCYAN")); windowsPalette[15] = BGR(ccolor("WHITE")); return SetDIBColorTable(backbuffer, 0, 16, windowsPalette); }
int curses_start_color(void) { colorpairs = new pairs[100]; //Load the console colors from colors.json std::ifstream colorfile("data/raw/colors.json", std::ifstream::in | std::ifstream::binary); try{ JsonIn jsin(colorfile); char ch; // Manually load the colordef object because the json handler isn't loaded yet. jsin.eat_whitespace(); ch = jsin.peek(); if( ch == '[' ) { jsin.start_array(); // find type and dispatch each object until array close while (!jsin.end_array()) { jsin.eat_whitespace(); char ch = jsin.peek(); if (ch != '{') { std::stringstream err; err << jsin.line_number() << ": "; err << "expected array of objects but found '"; err << ch << "', not '{'"; throw err.str(); } JsonObject jo = jsin.get_object(); load_colors(jo); jo.finish(); } } else { // not an array? std::stringstream err; err << jsin.line_number() << ": "; err << "expected object or array, but found '" << ch << "'"; throw err.str(); } } catch(std::string e){ throw "data/raw/colors.json: " + e; } if(consolecolors.empty())return 0; windowsPalette[0] = BGR(ccolor("BLACK")); windowsPalette[1] = BGR(ccolor("RED")); windowsPalette[2] = BGR(ccolor("GREEN")); windowsPalette[3] = BGR(ccolor("BROWN")); windowsPalette[4] = BGR(ccolor("BLUE")); windowsPalette[5] = BGR(ccolor("MAGENTA")); windowsPalette[6] = BGR(ccolor("CYAN")); windowsPalette[7] = BGR(ccolor("GRAY")); windowsPalette[8] = BGR(ccolor("DGRAY")); windowsPalette[9] = BGR(ccolor("LRED")); windowsPalette[10] = BGR(ccolor("LGREEN")); windowsPalette[11] = BGR(ccolor("YELLOW")); windowsPalette[12] = BGR(ccolor("LBLUE")); windowsPalette[13] = BGR(ccolor("LMAGENTA")); windowsPalette[14] = BGR(ccolor("LCYAN")); windowsPalette[15] = BGR(ccolor("WHITE")); return 0; }
void cfprintf(FILE *f, const char *fo, ...) { char *in = new char[MAX_STRLEN]; char *out = new char[MAX_STRLEN]; int ao = 0; memset(in, 0, MAX_STRLEN); memset(out, 0, MAX_STRLEN); va_list args; va_start(args, fo); vsprintf(in, fo, args); va_end(args); for (char *at = in; *at != '\0'; at++) { if (*at == '^') { at++; #ifdef __linux__ switch (*at) { case '0': ao += ccolor(&out[ao]); break; case 'd': ao += scolor(&out[ao], DIM, BLACK); break; case 'r': ao += scolor(&out[ao], DIM, RED); break; case 'g': ao += scolor(&out[ao], DIM, GREEN); break; case 'b': ao += scolor(&out[ao], DIM, BLUE); break; case 'y': ao += scolor(&out[ao], DIM, YELLOW); break; case 'm': ao += scolor(&out[ao], DIM, MAGENTA); break; case 'c': ao += scolor(&out[ao], DIM, CYAN); break; case 'w': ao += scolor(&out[ao], DIM, WHITE); break; } #endif } else { out[ao++] = *at; } } fprintf(f, "%s", out); delete [] in; delete [] out; }