1
0
mirror of https://github.com/Llewellynvdm/conky.git synced 2025-01-13 11:15:27 +00:00

Make execgraph working again (sf.net #3185428)

ps: the graph parsing code is a mess and in desperate need of a rewrite, that's why i'm not
pushing this code to master, as it's only a stop-gap measure
This commit is contained in:
Pavel Labath 2011-10-18 19:48:49 +02:00
parent b751e93291
commit d6aab26cfa
3 changed files with 46 additions and 20 deletions

View File

@ -243,18 +243,17 @@ void scan_execi_arg(struct text_object *obj, const char *arg)
void scan_execgraph_arg(struct text_object *obj, const char *arg)
{
struct execi_data *ed;
char *buf;
ed = malloc(sizeof(struct execi_data));
memset(ed, 0, sizeof(struct execi_data));
buf = scan_graph(obj, arg, 100);
if (!buf) {
ed->cmd = scan_execgraph(obj, arg);
obj->data.opaque = ed;
if(! ed->cmd) {
NORM_ERR("missing command argument to execgraph object");
return;
}
ed->cmd = buf;
obj->data.opaque = ed;
}
#endif /* X11 */
@ -388,7 +387,7 @@ void print_execgraph(struct text_object *obj, char *p, int p_max_size)
read_exec(ed->cmd, p, p_max_size, 1);
barnum = get_barnum(p);
if (barnum > 0) {
if (barnum >= 0) {
new_graph(obj, p, p_max_size, round_to_int(barnum));
}
}

View File

@ -35,6 +35,7 @@
#include "logging.h"
#include "specials.h"
#include <math.h>
#include <ctype.h>
/* maximum number of special things, e.g. fonts, offsets, aligns, etc. */
int max_specials = MAX_SPECIALS_DEFAULT;
@ -215,20 +216,6 @@ char *scan_graph(struct text_object *obj, const char *args, int defscale)
sscanf(args, "%1023s %d,%d", buf, &g->height, &g->width);
}
/* escape quotes at end in case of execgraph */
if (*buf == '"') {
char *_ptr;
size_t _size;
if (_ptr = strrchr(args, '"')) {
_size = _ptr - args - 1;
}
_size = _size < 1024 ? _size : 1023;
strncpy(buf, args + 1, _size);
buf[_size] = 0;
}
#undef g
return strndup(buf, text_buffer_size);
}
@ -238,6 +225,45 @@ char *scan_graph(struct text_object *obj, const char *args, int defscale)
return strndup(buf, text_buffer_size);
}
}
// scan_graph is a mess and it does not work for execgraph, so i'll just rewrite it for this case
char *scan_execgraph(struct text_object *obj, const char *arg)
{
struct graph *g;
g = malloc(sizeof(struct graph));
memset(g, 0, sizeof(struct graph));
obj->special_data = g;
/* zero width means all space that is available */
g->width = default_graph_width;
g->height = default_graph_height;
g->first_colour = 0;
g->last_colour = 0;
g->scale = 100;
g->tempgrad = FALSE;
g->showaslog = FALSE;
while(arg && *arg) {
while(isspace(*arg)) ++arg;
if(strncmp(arg, TEMPGRAD, strlen(TEMPGRAD)) == 0 && !isalnum(arg[strlen(TEMPGRAD)])) {
g->tempgrad = TRUE;
arg += strlen(TEMPGRAD);
continue;
}
if(strncmp(arg, LOGGRAPH, strlen(LOGGRAPH)) == 0 && !isalnum(arg[strlen(LOGGRAPH)])) {
g->showaslog = TRUE;
arg += strlen(LOGGRAPH);
continue;
}
return strdup(arg);
}
return NULL;
}
#endif /* X11 */
/*

View File

@ -99,6 +99,7 @@ const char *scan_gauge(struct text_object *, const char *);
#ifdef X11
char *scan_font(const char *);
char *scan_graph(struct text_object *, const char *, int);
char *scan_execgraph(struct text_object *obj, const char *arg);
void scan_tab(struct text_object *, const char *);
void scan_stippled_hr(struct text_object *, const char*);