diff options
author | Namhyung Kim <namhyung@kernel.org> | 2012-08-16 04:14:50 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2012-08-16 13:17:01 -0400 |
commit | e6e9046879493d8bf8f44ac1f2718c4a5628aa52 (patch) | |
tree | d625ac31d84bd77e9678e887729eac574ac9b773 /tools/perf/ui/tui | |
parent | c883122acc0d97648d8b8f4726709017674e4420 (diff) |
perf ui: Introduce struct ui_helpline
Add struct ui_helpline in order to provide flexible implementation of
helpline APIs. And convert existing TUI implementation to use it.
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1345104894-14205-1-git-send-email-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/ui/tui')
-rw-r--r-- | tools/perf/ui/tui/helpline.c | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/tools/perf/ui/tui/helpline.c b/tools/perf/ui/tui/helpline.c new file mode 100644 index 000000000000..2884d2f41e33 --- /dev/null +++ b/tools/perf/ui/tui/helpline.c | |||
@@ -0,0 +1,57 @@ | |||
1 | #include <stdio.h> | ||
2 | #include <stdlib.h> | ||
3 | #include <string.h> | ||
4 | #include <pthread.h> | ||
5 | |||
6 | #include "../../util/debug.h" | ||
7 | #include "../helpline.h" | ||
8 | #include "../ui.h" | ||
9 | #include "../libslang.h" | ||
10 | |||
11 | static void tui_helpline__pop(void) | ||
12 | { | ||
13 | } | ||
14 | |||
15 | static void tui_helpline__push(const char *msg) | ||
16 | { | ||
17 | const size_t sz = sizeof(ui_helpline__current); | ||
18 | |||
19 | SLsmg_gotorc(SLtt_Screen_Rows - 1, 0); | ||
20 | SLsmg_set_color(0); | ||
21 | SLsmg_write_nstring((char *)msg, SLtt_Screen_Cols); | ||
22 | SLsmg_refresh(); | ||
23 | strncpy(ui_helpline__current, msg, sz)[sz - 1] = '\0'; | ||
24 | } | ||
25 | |||
26 | struct ui_helpline tui_helpline_fns = { | ||
27 | .pop = tui_helpline__pop, | ||
28 | .push = tui_helpline__push, | ||
29 | }; | ||
30 | |||
31 | void ui_helpline__init(void) | ||
32 | { | ||
33 | helpline_fns = &tui_helpline_fns; | ||
34 | ui_helpline__puts(" "); | ||
35 | } | ||
36 | |||
37 | char ui_helpline__last_msg[1024]; | ||
38 | |||
39 | int ui_helpline__show_help(const char *format, va_list ap) | ||
40 | { | ||
41 | int ret; | ||
42 | static int backlog; | ||
43 | |||
44 | pthread_mutex_lock(&ui__lock); | ||
45 | ret = vscnprintf(ui_helpline__last_msg + backlog, | ||
46 | sizeof(ui_helpline__last_msg) - backlog, format, ap); | ||
47 | backlog += ret; | ||
48 | |||
49 | if (ui_helpline__last_msg[backlog - 1] == '\n') { | ||
50 | ui_helpline__puts(ui_helpline__last_msg); | ||
51 | SLsmg_refresh(); | ||
52 | backlog = 0; | ||
53 | } | ||
54 | pthread_mutex_unlock(&ui__lock); | ||
55 | |||
56 | return ret; | ||
57 | } | ||