X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fexec.c;h=286079a87917faac8d8f22adacaa29e5e3cdb01b;hb=04fd11b631494e3985d6911dd5876c1860948ba3;hp=4e1f9ba2962f6203e1389161d36c82aa3d248a8c;hpb=22251dca516e738c38ceee391bda26b9f8207932;p=monky diff --git a/src/exec.c b/src/exec.c index 4e1f9ba..286079a 100644 --- a/src/exec.c +++ b/src/exec.c @@ -10,7 +10,7 @@ * Please see COPYING for details * * Copyright (c) 2004, Hannu Saransaari and Lauri Hakkarainen - * Copyright (c) 2005-2009 Brenden Matthews, Philip Kovacs, et. al. + * Copyright (c) 2005-2010 Brenden Matthews, Philip Kovacs, et. al. * (see AUTHORS) * All rights reserved. * @@ -33,9 +33,11 @@ #include "logging.h" #include "specials.h" #include "text_object.h" +#include "timed_thread.h" #include #include #include +#include struct execi_data { double last_update; @@ -44,6 +46,7 @@ struct execi_data { char *buffer; double data; timed_thread *p_timed_thread; + float barnum; }; /* FIXME: this will probably not work, since the variable is being reused @@ -234,6 +237,25 @@ void scan_execi_arg(struct text_object *obj, const char *arg) obj->data.opaque = ed; } +#ifdef X11 +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) { + NORM_ERR("missing command argument to execgraph object"); + return; + } + ed->cmd = buf; + obj->data.opaque = ed; +} +#endif /* X11 */ + void print_exec(struct text_object *obj, char *p, int p_max_size) { read_exec(obj->data.s, p, p_max_size); @@ -244,15 +266,20 @@ void print_execp(struct text_object *obj, char *p, int p_max_size) { struct information *tmp_info; struct text_object subroot; + char *buf; - read_exec(obj->data.s, p, p_max_size); + buf = malloc(text_buffer_size); + memset(buf, 0, text_buffer_size); + + read_exec(obj->data.s, buf, text_buffer_size); tmp_info = malloc(sizeof(struct information)); memcpy(tmp_info, &info, sizeof(struct information)); - parse_conky_vars(&subroot, p, p, tmp_info); + parse_conky_vars(&subroot, buf, p, p_max_size, tmp_info); free_text_objects(&subroot, 1); free(tmp_info); + free(buf); } void print_execi(struct text_object *obj, char *p, int p_max_size) @@ -271,7 +298,7 @@ void print_execi(struct text_object *obj, char *p, int p_max_size) snprintf(p, p_max_size, "%s", ed->buffer); } -void print_execpi(struct text_object *obj, char *p) +void print_execpi(struct text_object *obj, char *p, int p_max_size) { struct execi_data *ed = obj->data.opaque; struct text_object subroot; @@ -283,9 +310,7 @@ void print_execpi(struct text_object *obj, char *p) tmp_info = malloc(sizeof(struct information)); memcpy(tmp_info, &info, sizeof(struct information)); - if (!time_to_update(ed)) { - parse_conky_vars(&subroot, ed->buffer, p, tmp_info); - } else { + if (time_to_update(ed)) { char *output; int length; FILE *fp = pid_popen(ed->cmd, "r", &childpid); @@ -302,9 +327,9 @@ void print_execpi(struct text_object *obj, char *p) output[length - 1] = '\0'; } - parse_conky_vars(&subroot, ed->buffer, p, tmp_info); ed->last_update = current_update_time; } + parse_conky_vars(&subroot, ed->buffer, p, p_max_size, tmp_info); free_text_objects(&subroot, 1); free(tmp_info); } @@ -336,7 +361,6 @@ void print_texeci(struct text_object *obj, char *p, int p_max_size) } } -#ifdef X11 void print_execgauge(struct text_object *obj, char *p, int p_max_size) { double barnum; @@ -346,37 +370,24 @@ void print_execgauge(struct text_object *obj, char *p, int p_max_size) if (barnum >= 0.0) { barnum /= 100; - new_gauge(p, obj->a, obj->b, round_to_int(barnum * 255.0)); + new_gauge(obj, p, p_max_size, round_to_int(barnum * 255.0)); } } +#ifdef X11 void print_execgraph(struct text_object *obj, char *p, int p_max_size) { - char showaslog = FALSE; - char tempgrad = FALSE; double barnum; struct execi_data *ed = obj->data.opaque; - char *cmd; if (!ed) return; - cmd = ed->cmd; - - if (strstr(cmd, " "TEMPGRAD) && strlen(cmd) > strlen(" "TEMPGRAD)) { - tempgrad = TRUE; - cmd += strlen(" "TEMPGRAD); - } - if (strstr(cmd, " "LOGGRAPH) && strlen(cmd) > strlen(" "LOGGRAPH)) { - showaslog = TRUE; - cmd += strlen(" "LOGGRAPH); - } - read_exec(cmd, p, p_max_size); + read_exec(ed->cmd, p, p_max_size); barnum = get_barnum(p); if (barnum > 0) { - new_graph(p, obj->a, obj->b, obj->c, obj->d, round_to_int(barnum), - 100, 1, showaslog, tempgrad); + new_graph(obj, p, p_max_size, round_to_int(barnum)); } } @@ -389,30 +400,18 @@ void print_execigraph(struct text_object *obj, char *p, int p_max_size) if (time_to_update(ed)) { double barnum; - char showaslog = FALSE; - char tempgrad = FALSE; - char *cmd = ed->cmd; - if (strstr(cmd, " "TEMPGRAD) && strlen(cmd) > strlen(" "TEMPGRAD)) { - tempgrad = TRUE; - cmd += strlen(" "TEMPGRAD); - } - if (strstr(cmd, " "LOGGRAPH) && strlen(cmd) > strlen(" "LOGGRAPH)) { - showaslog = TRUE; - cmd += strlen(" "LOGGRAPH); - } - obj->char_a = showaslog; - obj->char_b = tempgrad; - read_exec(cmd, p, p_max_size); + read_exec(ed->cmd, p, p_max_size); barnum = get_barnum(p); if (barnum >= 0.0) { - obj->f = barnum; + ed->barnum = barnum; } ed->last_update = current_update_time; } - new_graph(p, obj->a, obj->b, obj->c, obj->d, (int) (obj->f), 100, 1, obj->char_a, obj->char_b); + new_graph(obj, p, p_max_size, (int) (ed->barnum)); } +#endif /* X11 */ void print_execigauge(struct text_object *obj, char *p, int p_max_size) { @@ -428,13 +427,12 @@ void print_execigauge(struct text_object *obj, char *p, int p_max_size) barnum = get_barnum(p); if (barnum >= 0.0) { - obj->f = 255 * barnum / 100.0; + ed->barnum = 255 * barnum / 100.0; } ed->last_update = current_update_time; } - new_gauge(p, obj->a, obj->b, round_to_int(obj->f)); + new_gauge(obj, p, p_max_size, round_to_int(ed->barnum)); } -#endif /* X11 */ void print_execbar(struct text_object *obj, char *p, int p_max_size) { @@ -443,13 +441,8 @@ void print_execbar(struct text_object *obj, char *p, int p_max_size) barnum = get_barnum(p); if (barnum >= 0.0) { -#ifdef X11 - if(output_methods & TO_X) { - barnum /= 100; - new_bar(obj, p, round_to_int(barnum * 255.0)); - }else -#endif /* X11 */ - new_bar_in_shell(obj, p, p_max_size, barnum); + barnum /= 100; + new_bar(obj, p, p_max_size, round_to_int(barnum * 255.0)); } } @@ -466,16 +459,11 @@ void print_execibar(struct text_object *obj, char *p, int p_max_size) barnum = get_barnum(p); if (barnum >= 0.0) { - obj->f = barnum; + ed->barnum = barnum; } ed->last_update = current_update_time; } -#ifdef X11 - if(output_methods & TO_X) { - new_bar(obj, p, round_to_int(obj->f * 2.55)); - } else -#endif /* X11 */ - new_bar_in_shell(obj, p, p_max_size, round_to_int(obj->f)); + new_bar(obj, p, p_max_size, round_to_int(ed->barnum * 2.55)); } void free_exec(struct text_object *obj)