5111f1ae0447955a93cb589ef47ee7084b33e32f
[pandora-kernel.git] / tools / perf / util / ui / setup.c
1 #include <newt.h>
2 #include <signal.h>
3 #include <stdbool.h>
4
5 #include "../cache.h"
6 #include "../debug.h"
7 #include "browser.h"
8 #include "helpline.h"
9 #include "ui.h"
10 #include "libslang.h"
11
12 pthread_mutex_t ui__lock = PTHREAD_MUTEX_INITIALIZER;
13
14 static void newt_suspend(void *d __used)
15 {
16         newtSuspend();
17         raise(SIGTSTP);
18         newtResume();
19 }
20
21 static void ui__exit(void)
22 {
23         SLtt_set_cursor_visibility(1);
24         SLsmg_refresh();
25         SLsmg_reset_smg();
26         SLang_reset_tty();
27 }
28
29 static void ui__signal(int sig)
30 {
31         ui__exit();
32         psignal(sig, "perf");
33         exit(0);
34 }
35
36 void setup_browser(bool fallback_to_pager)
37 {
38         if (!isatty(1) || !use_browser || dump_trace) {
39                 use_browser = 0;
40                 if (fallback_to_pager)
41                         setup_pager();
42                 return;
43         }
44
45         use_browser = 1;
46         newtInit();
47         newtSetSuspendCallback(newt_suspend, NULL);
48         ui_helpline__init();
49         ui_browser__init();
50
51         signal(SIGSEGV, ui__signal);
52         signal(SIGFPE, ui__signal);
53         signal(SIGINT, ui__signal);
54         signal(SIGQUIT, ui__signal);
55         signal(SIGTERM, ui__signal);
56 }
57
58 void exit_browser(bool wait_for_ok)
59 {
60         if (use_browser > 0) {
61                 if (wait_for_ok) {
62                         char title[] = "Fatal Error", ok[] = "Ok";
63                         newtWinMessage(title, ok, ui_helpline__last_msg);
64                 }
65                 ui__exit();
66         }
67 }