2015-01-19 22:06:43 +00:00
|
|
|
/* radare - LGPL - Copyright 2013-2015 - pancake */
|
2013-08-25 22:51:36 +00:00
|
|
|
|
|
|
|
#include <r_cons.h>
|
|
|
|
|
2014-04-29 01:53:48 +00:00
|
|
|
#define W(y) r_cons_canvas_write(c,y)
|
|
|
|
#define G(x,y) r_cons_canvas_gotoxy(c,x,y)
|
|
|
|
|
2013-08-25 22:51:36 +00:00
|
|
|
R_API void r_cons_canvas_free (RConsCanvas *c) {
|
|
|
|
free (c->b);
|
Initial support for colors in RConsCanvas
started on cons_canvas color support. Still a bit buggy, working out the kinks.
Yanked my old line drawing algo from ward, still working on colors.
Still incomplete, Changed the way that attributes work, still lots of strange behavior, It appears that most attributes aren't where they belong.
still not finished. Ok now the lines and colors are working, but the colors are overwriting other sections. Working on preventing that.
colors are now working, but they are _so. slow._
woops, removed the debugging printf
Figured out the big evil function that has to be optimized, attr_at takes aprox 91% of the cpu, so he needs to be fixed
Signed-off-by: r0nk <r00nk@simplecpu.com>
Signed-off-by: r0nk <r00nk@simplecpu.com>
2015-02-10 22:06:27 +00:00
|
|
|
free (c->attrs);
|
2013-08-25 22:51:36 +00:00
|
|
|
free (c);
|
|
|
|
}
|
|
|
|
|
|
|
|
R_API void r_cons_canvas_clear (RConsCanvas *c) {
|
|
|
|
int y;
|
2014-09-24 01:17:43 +00:00
|
|
|
if (c && c->b) {
|
2014-09-08 15:10:53 +00:00
|
|
|
memset (c->b, '\n', c->blen);
|
|
|
|
c->b[c->blen] = 0;
|
|
|
|
for (y = 0; y<c->h; y++)
|
|
|
|
c->b[ y * c->w ] = '\n';
|
Initial support for colors in RConsCanvas
started on cons_canvas color support. Still a bit buggy, working out the kinks.
Yanked my old line drawing algo from ward, still working on colors.
Still incomplete, Changed the way that attributes work, still lots of strange behavior, It appears that most attributes aren't where they belong.
still not finished. Ok now the lines and colors are working, but the colors are overwriting other sections. Working on preventing that.
colors are now working, but they are _so. slow._
woops, removed the debugging printf
Figured out the big evil function that has to be optimized, attr_at takes aprox 91% of the cpu, so he needs to be fixed
Signed-off-by: r0nk <r00nk@simplecpu.com>
Signed-off-by: r0nk <r00nk@simplecpu.com>
2015-02-10 22:06:27 +00:00
|
|
|
if(c->attrs){
|
|
|
|
c->attrslen=0;
|
2015-02-15 20:34:12 +00:00
|
|
|
memset (c->attrs, 0, sizeof (*c->attrs)*c->blen);
|
Initial support for colors in RConsCanvas
started on cons_canvas color support. Still a bit buggy, working out the kinks.
Yanked my old line drawing algo from ward, still working on colors.
Still incomplete, Changed the way that attributes work, still lots of strange behavior, It appears that most attributes aren't where they belong.
still not finished. Ok now the lines and colors are working, but the colors are overwriting other sections. Working on preventing that.
colors are now working, but they are _so. slow._
woops, removed the debugging printf
Figured out the big evil function that has to be optimized, attr_at takes aprox 91% of the cpu, so he needs to be fixed
Signed-off-by: r0nk <r00nk@simplecpu.com>
Signed-off-by: r0nk <r00nk@simplecpu.com>
2015-02-10 22:06:27 +00:00
|
|
|
}
|
2014-09-08 15:10:53 +00:00
|
|
|
}
|
2013-08-25 22:51:36 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
R_API RConsCanvas* r_cons_canvas_new (int w, int h) {
|
|
|
|
RConsCanvas *c;
|
|
|
|
if (w<1||h<1)
|
|
|
|
return NULL;
|
|
|
|
c = R_NEW0 (RConsCanvas);
|
|
|
|
if (!c) return NULL;
|
2015-02-14 03:50:29 +00:00
|
|
|
c->color = 0;
|
2014-05-05 01:15:28 +00:00
|
|
|
c->sx = 0;
|
|
|
|
c->sy = 0;
|
2013-08-25 22:51:36 +00:00
|
|
|
c->blen = (w+1)*h;
|
|
|
|
c->b = malloc (c->blen+1);
|
|
|
|
if (!c->b) {
|
|
|
|
free (c);
|
|
|
|
return NULL;
|
|
|
|
}
|
Initial support for colors in RConsCanvas
started on cons_canvas color support. Still a bit buggy, working out the kinks.
Yanked my old line drawing algo from ward, still working on colors.
Still incomplete, Changed the way that attributes work, still lots of strange behavior, It appears that most attributes aren't where they belong.
still not finished. Ok now the lines and colors are working, but the colors are overwriting other sections. Working on preventing that.
colors are now working, but they are _so. slow._
woops, removed the debugging printf
Figured out the big evil function that has to be optimized, attr_at takes aprox 91% of the cpu, so he needs to be fixed
Signed-off-by: r0nk <r00nk@simplecpu.com>
Signed-off-by: r0nk <r00nk@simplecpu.com>
2015-02-10 22:06:27 +00:00
|
|
|
c->attrslen = 0;
|
|
|
|
c->attrs = calloc(sizeof(*c->attrs),c->blen+1);
|
|
|
|
if (!c->attrs) {
|
|
|
|
free (c->b);
|
|
|
|
free (c);
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
c->attr=Color_RESET;
|
2013-08-25 22:51:36 +00:00
|
|
|
c->w = w;
|
|
|
|
c->h = h;
|
|
|
|
c->x = c->y = 0;
|
|
|
|
r_cons_canvas_clear (c);
|
|
|
|
return c;
|
|
|
|
}
|
|
|
|
|
2014-05-05 01:15:28 +00:00
|
|
|
R_API int r_cons_canvas_gotoxy(RConsCanvas *c, int x, int y) {
|
|
|
|
int ret = R_TRUE;
|
2014-09-24 01:17:43 +00:00
|
|
|
if (!c) return 0;
|
2014-05-05 01:15:28 +00:00
|
|
|
x += c->sx;
|
|
|
|
y += c->sy;
|
2014-07-31 22:54:04 +00:00
|
|
|
if (x >= c->w) {
|
2014-05-05 01:15:28 +00:00
|
|
|
c->x = c->w;
|
|
|
|
ret = R_FALSE;
|
|
|
|
}
|
2014-07-31 22:54:04 +00:00
|
|
|
if (y >= c->h) {
|
2014-05-05 01:15:28 +00:00
|
|
|
c->y = c->h;
|
|
|
|
ret = R_FALSE;
|
|
|
|
}
|
2014-07-31 22:54:04 +00:00
|
|
|
if (x <0) {
|
2015-01-11 01:28:59 +00:00
|
|
|
//c->x = 0;
|
2014-05-05 01:15:28 +00:00
|
|
|
ret = R_FALSE;
|
|
|
|
}
|
2014-07-31 22:54:04 +00:00
|
|
|
if (y <0) {
|
2014-05-08 00:26:42 +00:00
|
|
|
c->y = 0;
|
2014-05-05 01:15:28 +00:00
|
|
|
ret = R_FALSE;
|
|
|
|
}
|
|
|
|
if (x<c->w && x>=0) c->x = x;
|
|
|
|
if (y<c->h && y>=0) c->y = y;
|
|
|
|
return ret;
|
2013-08-25 22:51:36 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
static char *getptr(RConsCanvas *c, int *left) {
|
|
|
|
if (left) *left = c->w - c->x;
|
|
|
|
return c->b + (c->y * c->w) + c->x;
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
static char *getrow (char *p, char **n) {
|
2015-01-11 01:54:27 +00:00
|
|
|
char *q;
|
|
|
|
if (!p) return NULL;
|
|
|
|
q = strchr (p, '\n');
|
2013-08-25 22:51:36 +00:00
|
|
|
if (n) *n = NULL;
|
|
|
|
if (q) {
|
|
|
|
*q = 0;
|
|
|
|
if (n) *n = q+1;
|
|
|
|
}
|
|
|
|
return p;
|
|
|
|
}
|
|
|
|
|
|
|
|
static char *prefixline(RConsCanvas *c, int *left) {
|
|
|
|
int x;
|
2014-09-24 01:17:43 +00:00
|
|
|
char *p;
|
|
|
|
if (!c)
|
|
|
|
return NULL;
|
|
|
|
p = c->b + (c->y * c->w);
|
2013-08-25 22:51:36 +00:00
|
|
|
for (x = 0; x<c->x; x++) {
|
|
|
|
if (p[x] == '\n')
|
|
|
|
p[x] = ' ';
|
|
|
|
}
|
|
|
|
if (left) *left = c->w - c->x;
|
|
|
|
return p+x;
|
|
|
|
}
|
|
|
|
|
2015-02-15 20:48:46 +00:00
|
|
|
static const char ** attr_at(RConsCanvas *c,int loc){
|
|
|
|
int i, j;
|
|
|
|
if (!c->color || c->attrslen==0)
|
2015-02-14 03:50:29 +00:00
|
|
|
return NULL;
|
2015-02-15 20:48:46 +00:00
|
|
|
j = c->attrslen / 2;
|
|
|
|
for (i=0; i<(c->attrslen); i++){
|
|
|
|
if (c->attrs[j].loc == loc)
|
2015-02-15 02:21:32 +00:00
|
|
|
return &c->attrs[j].a;
|
2015-02-15 20:48:46 +00:00
|
|
|
if(c->attrs[j].loc < loc) {
|
2015-02-15 02:21:32 +00:00
|
|
|
j++;
|
|
|
|
/*
|
|
|
|
k=c->attrslen/(2+(i*i));
|
|
|
|
if(k==0)
|
|
|
|
j++;
|
|
|
|
else
|
|
|
|
j+=k;
|
|
|
|
*/
|
|
|
|
if(j>=c->attrslen)
|
|
|
|
break;
|
|
|
|
if(c->attrs[j].loc > loc)
|
|
|
|
break;
|
2015-02-15 20:48:46 +00:00
|
|
|
} else if(c->attrs[j].loc > loc) {
|
2015-02-15 02:21:32 +00:00
|
|
|
j--;
|
|
|
|
/*
|
|
|
|
k=c->attrslen/(2+(i*i));
|
|
|
|
if(k==0)
|
|
|
|
j--;
|
|
|
|
else
|
|
|
|
j+=k;
|
|
|
|
*/
|
|
|
|
if(j<=0)
|
|
|
|
break;
|
|
|
|
if(c->attrs[j].loc < loc)
|
|
|
|
break;
|
|
|
|
}
|
Initial support for colors in RConsCanvas
started on cons_canvas color support. Still a bit buggy, working out the kinks.
Yanked my old line drawing algo from ward, still working on colors.
Still incomplete, Changed the way that attributes work, still lots of strange behavior, It appears that most attributes aren't where they belong.
still not finished. Ok now the lines and colors are working, but the colors are overwriting other sections. Working on preventing that.
colors are now working, but they are _so. slow._
woops, removed the debugging printf
Figured out the big evil function that has to be optimized, attr_at takes aprox 91% of the cpu, so he needs to be fixed
Signed-off-by: r0nk <r00nk@simplecpu.com>
Signed-off-by: r0nk <r00nk@simplecpu.com>
2015-02-10 22:06:27 +00:00
|
|
|
}
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
2015-02-15 20:48:46 +00:00
|
|
|
static void sort_attrs(RConsCanvas *c) {
|
Initial support for colors in RConsCanvas
started on cons_canvas color support. Still a bit buggy, working out the kinks.
Yanked my old line drawing algo from ward, still working on colors.
Still incomplete, Changed the way that attributes work, still lots of strange behavior, It appears that most attributes aren't where they belong.
still not finished. Ok now the lines and colors are working, but the colors are overwriting other sections. Working on preventing that.
colors are now working, but they are _so. slow._
woops, removed the debugging printf
Figured out the big evil function that has to be optimized, attr_at takes aprox 91% of the cpu, so he needs to be fixed
Signed-off-by: r0nk <r00nk@simplecpu.com>
Signed-off-by: r0nk <r00nk@simplecpu.com>
2015-02-10 22:06:27 +00:00
|
|
|
int i,j;
|
|
|
|
RConsCanvasAttr value;
|
2015-02-17 16:01:00 +00:00
|
|
|
for (i = 1; i < c->attrslen; i++) {
|
Initial support for colors in RConsCanvas
started on cons_canvas color support. Still a bit buggy, working out the kinks.
Yanked my old line drawing algo from ward, still working on colors.
Still incomplete, Changed the way that attributes work, still lots of strange behavior, It appears that most attributes aren't where they belong.
still not finished. Ok now the lines and colors are working, but the colors are overwriting other sections. Working on preventing that.
colors are now working, but they are _so. slow._
woops, removed the debugging printf
Figured out the big evil function that has to be optimized, attr_at takes aprox 91% of the cpu, so he needs to be fixed
Signed-off-by: r0nk <r00nk@simplecpu.com>
Signed-off-by: r0nk <r00nk@simplecpu.com>
2015-02-10 22:06:27 +00:00
|
|
|
value = c->attrs[i];
|
2015-02-15 20:48:46 +00:00
|
|
|
for (j = i-1; j>=0 && c->attrs[j].loc>value.loc; j--) {
|
Initial support for colors in RConsCanvas
started on cons_canvas color support. Still a bit buggy, working out the kinks.
Yanked my old line drawing algo from ward, still working on colors.
Still incomplete, Changed the way that attributes work, still lots of strange behavior, It appears that most attributes aren't where they belong.
still not finished. Ok now the lines and colors are working, but the colors are overwriting other sections. Working on preventing that.
colors are now working, but they are _so. slow._
woops, removed the debugging printf
Figured out the big evil function that has to be optimized, attr_at takes aprox 91% of the cpu, so he needs to be fixed
Signed-off-by: r0nk <r00nk@simplecpu.com>
Signed-off-by: r0nk <r00nk@simplecpu.com>
2015-02-10 22:06:27 +00:00
|
|
|
c->attrs[j+1] = c->attrs[j];
|
|
|
|
}
|
|
|
|
c->attrs[j+1] = value;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void stamp_attr(RConsCanvas *c,int length){
|
|
|
|
int i;
|
2015-02-15 20:48:46 +00:00
|
|
|
const char ** s;
|
2015-02-17 16:01:00 +00:00
|
|
|
const int loc = c->x + (c->y * c->w);
|
|
|
|
s = attr_at(c, loc);
|
Initial support for colors in RConsCanvas
started on cons_canvas color support. Still a bit buggy, working out the kinks.
Yanked my old line drawing algo from ward, still working on colors.
Still incomplete, Changed the way that attributes work, still lots of strange behavior, It appears that most attributes aren't where they belong.
still not finished. Ok now the lines and colors are working, but the colors are overwriting other sections. Working on preventing that.
colors are now working, but they are _so. slow._
woops, removed the debugging printf
Figured out the big evil function that has to be optimized, attr_at takes aprox 91% of the cpu, so he needs to be fixed
Signed-off-by: r0nk <r00nk@simplecpu.com>
Signed-off-by: r0nk <r00nk@simplecpu.com>
2015-02-10 22:06:27 +00:00
|
|
|
|
2015-02-17 16:01:00 +00:00
|
|
|
if (s) {
|
Initial support for colors in RConsCanvas
started on cons_canvas color support. Still a bit buggy, working out the kinks.
Yanked my old line drawing algo from ward, still working on colors.
Still incomplete, Changed the way that attributes work, still lots of strange behavior, It appears that most attributes aren't where they belong.
still not finished. Ok now the lines and colors are working, but the colors are overwriting other sections. Working on preventing that.
colors are now working, but they are _so. slow._
woops, removed the debugging printf
Figured out the big evil function that has to be optimized, attr_at takes aprox 91% of the cpu, so he needs to be fixed
Signed-off-by: r0nk <r00nk@simplecpu.com>
Signed-off-by: r0nk <r00nk@simplecpu.com>
2015-02-10 22:06:27 +00:00
|
|
|
//If theres already an attr there, just replace it.
|
|
|
|
*s = c->attr;
|
2015-02-17 16:01:00 +00:00
|
|
|
} else {
|
Initial support for colors in RConsCanvas
started on cons_canvas color support. Still a bit buggy, working out the kinks.
Yanked my old line drawing algo from ward, still working on colors.
Still incomplete, Changed the way that attributes work, still lots of strange behavior, It appears that most attributes aren't where they belong.
still not finished. Ok now the lines and colors are working, but the colors are overwriting other sections. Working on preventing that.
colors are now working, but they are _so. slow._
woops, removed the debugging printf
Figured out the big evil function that has to be optimized, attr_at takes aprox 91% of the cpu, so he needs to be fixed
Signed-off-by: r0nk <r00nk@simplecpu.com>
Signed-off-by: r0nk <r00nk@simplecpu.com>
2015-02-10 22:06:27 +00:00
|
|
|
c->attrs[c->attrslen].loc = loc;
|
|
|
|
c->attrs[c->attrslen].a = c->attr;
|
|
|
|
c->attrslen++;
|
|
|
|
sort_attrs(c);
|
|
|
|
}
|
|
|
|
|
|
|
|
for(i=0;i<length;i++){
|
|
|
|
s = attr_at(c,loc+i);
|
|
|
|
if(s)
|
|
|
|
*s = c->attr;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-08-25 22:51:36 +00:00
|
|
|
R_API void r_cons_canvas_write(RConsCanvas *c, const char *_s) {
|
2015-01-11 01:28:59 +00:00
|
|
|
int left, slen, i, linenum = 0;
|
2013-08-25 22:51:36 +00:00
|
|
|
char *p, *s, *str;
|
2014-05-16 12:34:36 +00:00
|
|
|
char *line, *n;
|
2015-01-19 22:06:43 +00:00
|
|
|
int x, delta;
|
2014-05-16 12:34:36 +00:00
|
|
|
|
2015-01-11 01:34:28 +00:00
|
|
|
if (!c || !_s || !*_s)
|
2014-09-08 15:10:53 +00:00
|
|
|
return;
|
2013-08-25 22:51:36 +00:00
|
|
|
str = s = strdup (_s);
|
2014-07-31 23:09:05 +00:00
|
|
|
for (i=0; ; i++) {
|
2013-08-25 22:51:36 +00:00
|
|
|
line = getrow (s, &n);
|
2015-01-11 01:54:27 +00:00
|
|
|
if (!line)
|
|
|
|
break;
|
2013-08-25 22:51:36 +00:00
|
|
|
p = prefixline (c, &left);
|
2015-01-10 03:21:10 +00:00
|
|
|
slen = R_MIN (left-1, strlen (line));
|
2015-01-11 01:28:59 +00:00
|
|
|
if (slen<1) {
|
2014-07-31 23:09:05 +00:00
|
|
|
break;
|
2015-01-11 01:28:59 +00:00
|
|
|
}
|
2014-05-09 01:06:05 +00:00
|
|
|
if (!G (c->x-c->sx+slen, c->y-c->sy)) {
|
|
|
|
// TODO : chop slen
|
|
|
|
slen = (c->w - (c->x-c->sx));
|
2014-07-31 23:09:05 +00:00
|
|
|
if (slen<1)
|
|
|
|
break;
|
2015-01-19 22:06:43 +00:00
|
|
|
s = n;
|
2014-05-16 12:34:36 +00:00
|
|
|
continue;
|
2014-05-09 01:06:05 +00:00
|
|
|
}
|
2015-01-19 22:06:43 +00:00
|
|
|
delta = 0;
|
|
|
|
x = c->x - c->sx - slen;
|
|
|
|
// if (x<0) x = 0;
|
|
|
|
if (!G (x, c->y - c->sy))
|
2014-05-16 12:34:36 +00:00
|
|
|
continue;
|
Initial support for colors in RConsCanvas
started on cons_canvas color support. Still a bit buggy, working out the kinks.
Yanked my old line drawing algo from ward, still working on colors.
Still incomplete, Changed the way that attributes work, still lots of strange behavior, It appears that most attributes aren't where they belong.
still not finished. Ok now the lines and colors are working, but the colors are overwriting other sections. Working on preventing that.
colors are now working, but they are _so. slow._
woops, removed the debugging printf
Figured out the big evil function that has to be optimized, attr_at takes aprox 91% of the cpu, so he needs to be fixed
Signed-off-by: r0nk <r00nk@simplecpu.com>
Signed-off-by: r0nk <r00nk@simplecpu.com>
2015-02-10 22:06:27 +00:00
|
|
|
stamp_attr(c,slen);
|
2015-01-11 01:28:59 +00:00
|
|
|
memcpy (p, line+delta, slen-delta);
|
2013-08-25 22:51:36 +00:00
|
|
|
if (!n) break;
|
|
|
|
s = n;
|
Initial support for colors in RConsCanvas
started on cons_canvas color support. Still a bit buggy, working out the kinks.
Yanked my old line drawing algo from ward, still working on colors.
Still incomplete, Changed the way that attributes work, still lots of strange behavior, It appears that most attributes aren't where they belong.
still not finished. Ok now the lines and colors are working, but the colors are overwriting other sections. Working on preventing that.
colors are now working, but they are _so. slow._
woops, removed the debugging printf
Figured out the big evil function that has to be optimized, attr_at takes aprox 91% of the cpu, so he needs to be fixed
Signed-off-by: r0nk <r00nk@simplecpu.com>
Signed-off-by: r0nk <r00nk@simplecpu.com>
2015-02-10 22:06:27 +00:00
|
|
|
if (!G (c->x-c->sx, c->y+1 - c->sy))
|
2014-05-05 01:15:28 +00:00
|
|
|
break;
|
2015-01-11 01:28:59 +00:00
|
|
|
linenum ++;
|
2013-08-25 22:51:36 +00:00
|
|
|
}
|
|
|
|
free (str);
|
|
|
|
}
|
|
|
|
|
|
|
|
R_API char *r_cons_canvas_to_string(RConsCanvas *c) {
|
|
|
|
int x, y, olen = 0;
|
2015-02-17 16:01:00 +00:00
|
|
|
char *o;
|
|
|
|
const char* b;
|
2015-02-15 20:48:46 +00:00
|
|
|
const char**atr;
|
2014-09-24 01:17:43 +00:00
|
|
|
if (!c) return NULL;
|
|
|
|
b = c->b;
|
Initial support for colors in RConsCanvas
started on cons_canvas color support. Still a bit buggy, working out the kinks.
Yanked my old line drawing algo from ward, still working on colors.
Still incomplete, Changed the way that attributes work, still lots of strange behavior, It appears that most attributes aren't where they belong.
still not finished. Ok now the lines and colors are working, but the colors are overwriting other sections. Working on preventing that.
colors are now working, but they are _so. slow._
woops, removed the debugging printf
Figured out the big evil function that has to be optimized, attr_at takes aprox 91% of the cpu, so he needs to be fixed
Signed-off-by: r0nk <r00nk@simplecpu.com>
Signed-off-by: r0nk <r00nk@simplecpu.com>
2015-02-10 22:06:27 +00:00
|
|
|
o = calloc (sizeof(char),
|
2015-02-17 16:01:00 +00:00
|
|
|
(c->w * (c->h + 1)) * (CONS_MAX_ATTR_SZ));
|
2014-09-24 01:17:43 +00:00
|
|
|
if (!o) return NULL;
|
2015-02-17 16:01:00 +00:00
|
|
|
for (y = 0; y < c->h; y++) {
|
2013-08-25 22:51:36 +00:00
|
|
|
for (x = 0; x<c->w; x++) {
|
2015-02-17 16:01:00 +00:00
|
|
|
const int p = x + (y * c->w);
|
|
|
|
atr = attr_at (c,p);
|
Initial support for colors in RConsCanvas
started on cons_canvas color support. Still a bit buggy, working out the kinks.
Yanked my old line drawing algo from ward, still working on colors.
Still incomplete, Changed the way that attributes work, still lots of strange behavior, It appears that most attributes aren't where they belong.
still not finished. Ok now the lines and colors are working, but the colors are overwriting other sections. Working on preventing that.
colors are now working, but they are _so. slow._
woops, removed the debugging printf
Figured out the big evil function that has to be optimized, attr_at takes aprox 91% of the cpu, so he needs to be fixed
Signed-off-by: r0nk <r00nk@simplecpu.com>
Signed-off-by: r0nk <r00nk@simplecpu.com>
2015-02-10 22:06:27 +00:00
|
|
|
if(atr) {
|
2015-02-17 16:01:00 +00:00
|
|
|
strcat (o, *atr);
|
|
|
|
olen += strlen (*atr);
|
Initial support for colors in RConsCanvas
started on cons_canvas color support. Still a bit buggy, working out the kinks.
Yanked my old line drawing algo from ward, still working on colors.
Still incomplete, Changed the way that attributes work, still lots of strange behavior, It appears that most attributes aren't where they belong.
still not finished. Ok now the lines and colors are working, but the colors are overwriting other sections. Working on preventing that.
colors are now working, but they are _so. slow._
woops, removed the debugging printf
Figured out the big evil function that has to be optimized, attr_at takes aprox 91% of the cpu, so he needs to be fixed
Signed-off-by: r0nk <r00nk@simplecpu.com>
Signed-off-by: r0nk <r00nk@simplecpu.com>
2015-02-10 22:06:27 +00:00
|
|
|
}
|
2013-08-25 22:51:36 +00:00
|
|
|
if (!b[p] || b[p]=='\n')
|
|
|
|
break;
|
|
|
|
o[olen++] = b[p];
|
|
|
|
}
|
|
|
|
o[olen++] = '\n';
|
|
|
|
}
|
Initial support for colors in RConsCanvas
started on cons_canvas color support. Still a bit buggy, working out the kinks.
Yanked my old line drawing algo from ward, still working on colors.
Still incomplete, Changed the way that attributes work, still lots of strange behavior, It appears that most attributes aren't where they belong.
still not finished. Ok now the lines and colors are working, but the colors are overwriting other sections. Working on preventing that.
colors are now working, but they are _so. slow._
woops, removed the debugging printf
Figured out the big evil function that has to be optimized, attr_at takes aprox 91% of the cpu, so he needs to be fixed
Signed-off-by: r0nk <r00nk@simplecpu.com>
Signed-off-by: r0nk <r00nk@simplecpu.com>
2015-02-10 22:06:27 +00:00
|
|
|
o[olen] = '\0';
|
2013-08-25 22:51:36 +00:00
|
|
|
return o;
|
|
|
|
}
|
|
|
|
|
|
|
|
R_API void r_cons_canvas_print(RConsCanvas *c) {
|
|
|
|
char *o = r_cons_canvas_to_string (c);
|
2014-09-08 15:10:53 +00:00
|
|
|
if (o) {
|
|
|
|
r_cons_strcat (o);
|
|
|
|
free (o);
|
|
|
|
}
|
2013-08-25 22:51:36 +00:00
|
|
|
}
|
2014-04-28 23:55:10 +00:00
|
|
|
|
2014-05-05 01:15:28 +00:00
|
|
|
R_API int r_cons_canvas_resize(RConsCanvas *c, int w, int h) {
|
2015-02-17 16:01:00 +00:00
|
|
|
const int blen = (w+1) * h;
|
2014-05-05 21:28:57 +00:00
|
|
|
char *b = NULL;
|
2014-09-24 01:17:43 +00:00
|
|
|
if (!c || w < 0) return R_FALSE;
|
2014-09-08 15:10:53 +00:00
|
|
|
b = realloc (c->b, blen+1);
|
2014-05-05 01:15:28 +00:00
|
|
|
if (!b) return R_FALSE;
|
Initial support for colors in RConsCanvas
started on cons_canvas color support. Still a bit buggy, working out the kinks.
Yanked my old line drawing algo from ward, still working on colors.
Still incomplete, Changed the way that attributes work, still lots of strange behavior, It appears that most attributes aren't where they belong.
still not finished. Ok now the lines and colors are working, but the colors are overwriting other sections. Working on preventing that.
colors are now working, but they are _so. slow._
woops, removed the debugging printf
Figured out the big evil function that has to be optimized, attr_at takes aprox 91% of the cpu, so he needs to be fixed
Signed-off-by: r0nk <r00nk@simplecpu.com>
Signed-off-by: r0nk <r00nk@simplecpu.com>
2015-02-10 22:06:27 +00:00
|
|
|
c->attrs = realloc(c->attrs,sizeof(*c->attrs)*blen+1);
|
|
|
|
if (!c->attrs) return R_FALSE;
|
2014-09-08 15:10:53 +00:00
|
|
|
c->blen = blen;
|
2014-05-05 01:15:28 +00:00
|
|
|
c->b = b;
|
|
|
|
c->w = w;
|
|
|
|
c->h = h;
|
|
|
|
c->x = 0;
|
|
|
|
c->y = 0;
|
|
|
|
r_cons_canvas_clear (c);
|
|
|
|
return R_TRUE;
|
2014-04-28 23:55:10 +00:00
|
|
|
}
|
|
|
|
|
2015-02-15 20:48:46 +00:00
|
|
|
R_API void r_cons_canvas_box(RConsCanvas *c, int x, int y, int w, int h, const char *color) {
|
2014-04-28 23:55:10 +00:00
|
|
|
int i;
|
2014-04-29 01:53:48 +00:00
|
|
|
int roundcorners = 0;
|
2014-05-05 21:28:57 +00:00
|
|
|
char *row = NULL;
|
2014-04-29 01:53:48 +00:00
|
|
|
char corner = '=';
|
|
|
|
|
2014-05-05 21:28:57 +00:00
|
|
|
if (w < 0) return;
|
|
|
|
|
2015-02-15 20:48:46 +00:00
|
|
|
if (color)
|
|
|
|
c->attr = color;
|
2014-05-05 21:28:57 +00:00
|
|
|
row = malloc (w+1);
|
2014-04-29 01:53:48 +00:00
|
|
|
row[0] = roundcorners?'.':corner;
|
2014-04-28 23:55:10 +00:00
|
|
|
memset (row+1, '-', w-2);
|
2014-04-29 01:53:48 +00:00
|
|
|
row[w-1] = roundcorners?'.':corner;
|
2014-04-28 23:55:10 +00:00
|
|
|
row[w] = 0;
|
Initial support for colors in RConsCanvas
started on cons_canvas color support. Still a bit buggy, working out the kinks.
Yanked my old line drawing algo from ward, still working on colors.
Still incomplete, Changed the way that attributes work, still lots of strange behavior, It appears that most attributes aren't where they belong.
still not finished. Ok now the lines and colors are working, but the colors are overwriting other sections. Working on preventing that.
colors are now working, but they are _so. slow._
woops, removed the debugging printf
Figured out the big evil function that has to be optimized, attr_at takes aprox 91% of the cpu, so he needs to be fixed
Signed-off-by: r0nk <r00nk@simplecpu.com>
Signed-off-by: r0nk <r00nk@simplecpu.com>
2015-02-10 22:06:27 +00:00
|
|
|
if (G(x, y)) {
|
|
|
|
W(row);
|
|
|
|
}
|
2014-05-05 01:15:28 +00:00
|
|
|
if (G(x, y+h-1)) {
|
|
|
|
row[0] = roundcorners?'\'':corner;
|
|
|
|
row[w-1] = roundcorners?'\'':corner;
|
|
|
|
W(row);
|
|
|
|
}
|
2014-04-28 23:55:10 +00:00
|
|
|
|
|
|
|
for (i=1;i<h-1;i++) {
|
2014-05-05 01:15:28 +00:00
|
|
|
if (G(x, y+i)) W("|");
|
|
|
|
if (G(x+w-1, y+i)) W("|");
|
2014-04-28 23:55:10 +00:00
|
|
|
}
|
2014-05-05 21:28:57 +00:00
|
|
|
free (row);
|
2015-02-15 20:48:46 +00:00
|
|
|
if (color)
|
|
|
|
c->attr = Color_RESET;
|
2014-04-28 23:55:10 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
R_API void r_cons_canvas_fill(RConsCanvas *c, int x, int y, int w, int h, char ch, int replace) {
|
|
|
|
int i;
|
2014-05-05 21:28:57 +00:00
|
|
|
char *row = NULL;
|
|
|
|
|
|
|
|
if (w < 0) return;
|
|
|
|
|
|
|
|
row = malloc (w+1);
|
2014-04-29 01:53:48 +00:00
|
|
|
memset (row, ch, w);
|
2014-04-28 23:55:10 +00:00
|
|
|
row[w] = 0;
|
|
|
|
|
2014-04-29 01:53:48 +00:00
|
|
|
for (i=0;i<h;i++) {
|
2014-05-05 01:15:28 +00:00
|
|
|
if (G(x, y+i))
|
|
|
|
W(row);
|
2014-04-28 23:55:10 +00:00
|
|
|
}
|
2014-05-05 21:28:57 +00:00
|
|
|
free (row);
|
2014-04-28 23:55:10 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
R_API void r_cons_canvas_line (RConsCanvas *c, int x, int y, int x2, int y2, int style) {
|
2015-02-15 20:34:12 +00:00
|
|
|
if (c->linemode) {
|
|
|
|
r_cons_canvas_line_square (c, x, y, x2, y2, style);
|
|
|
|
return;
|
|
|
|
} else {
|
|
|
|
r_cons_canvas_line_diagonal (c, x, y, x2, y2, style);
|
Initial support for colors in RConsCanvas
started on cons_canvas color support. Still a bit buggy, working out the kinks.
Yanked my old line drawing algo from ward, still working on colors.
Still incomplete, Changed the way that attributes work, still lots of strange behavior, It appears that most attributes aren't where they belong.
still not finished. Ok now the lines and colors are working, but the colors are overwriting other sections. Working on preventing that.
colors are now working, but they are _so. slow._
woops, removed the debugging printf
Figured out the big evil function that has to be optimized, attr_at takes aprox 91% of the cpu, so he needs to be fixed
Signed-off-by: r0nk <r00nk@simplecpu.com>
Signed-off-by: r0nk <r00nk@simplecpu.com>
2015-02-10 22:06:27 +00:00
|
|
|
}
|
2014-04-28 23:55:10 +00:00
|
|
|
}
|