int main() { int i,j ,k; //char *str = "\x1b[38;5;231mpop\x1b[0m"; //char *str ="\x1b]4;%d;rgb:30/20/24pop\x1b[0m"; char *str ="\x1b\\pop\x1b[0m"; i=j=k =0; r_cons_new (); // r_cons_rgb_init (); printf ("3 == %d\n", r_str_ansi_len (str)); for (i=0;i<255;i+=40) { for (j=0;j<255;j+=40) { for (k=0;k<255;k+=40) { r_cons_rgb (i, j, k, 0); r_cons_rgb (i, j, k, 1); r_cons_print ("__"); r_cons_reset_colors (); r_cons_rgb (i, j, k, 0); // r_cons_rgb (155, 200, 200, 1); r_cons_printf (" RGB %d %d %d", i, j, k); r_cons_reset_colors (); r_cons_newline (); } }} r_cons_flush (); return 0; }
static int real_strlen(const char *ptr, int len) { int utf8len = r_str_len_utf8 (ptr); int ansilen = r_str_ansi_len (ptr); int diff = len-utf8len; if (diff) diff--; return ansilen - diff; }
R_API void r_cons_visual_write (char *buffer) { char white[1024]; int cols = I.columns; int alen, lines = I.rows; const char *endptr; char *nl, *ptr = buffer; memset (&white, ' ', sizeof (white)); while ((nl = strchr (ptr, '\n'))) { int len = ((int)(size_t)(nl-ptr))+1; *nl = 0; //alen = r_str_ansi_len (ptr); // handle ansi chars { int utf8len = r_str_len_utf8 (ptr); int ansilen = r_str_ansi_len (ptr); int diff = len-utf8len; if (diff) diff--; alen = ansilen - diff; } *nl = '\n'; if (alen>cols) { endptr = r_str_ansi_chrn (ptr, cols); endptr++; len = (endptr-ptr); if (lines>0) { r_cons_write (ptr, len); } } else { if (lines>0) { int w = cols-alen; if (ptr>buffer) r_cons_write (ptr-1, len); else r_cons_write (ptr, len-1); if (I.blankline && w>0) { if (w>sizeof (white)-1) w = sizeof (white)-1; r_cons_write (white, w); } } // TRICK to empty columns.. maybe buggy in w32 if (r_mem_mem ((const ut8*)ptr, len, (const ut8*)"\x1b[0;0H", 6)) { lines = I.rows; r_cons_write (ptr, len); } } lines--; // do not use last line ptr = nl+1; } /* fill the rest of screen */ if (lines>0) { if (cols>sizeof (white)) cols = sizeof (white); while (lines-->0) r_cons_write (white, cols); } }
R_API int r_cons_get_column() { char *line = strrchr (I.buffer, '\n'); if (!line) { line = I.buffer; } I.buffer[I.buffer_len] = 0; return r_str_ansi_len (line); }