1e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include <newt.h>
2e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include <signal.h>
3e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include <stdbool.h>
4e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
5e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "../cache.h"
6e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "../debug.h"
7e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "browser.h"
8e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "helpline.h"
9e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "ui.h"
10e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
11e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengpthread_mutex_t ui__lock = PTHREAD_MUTEX_INITIALIZER;
12e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
13e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengstatic void newt_suspend(void *d __used)
14e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
15e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	newtSuspend();
16e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	raise(SIGTSTP);
17e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	newtResume();
18e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
19e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
20e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid setup_browser(bool fallback_to_pager)
21e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
22e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	if (!isatty(1) || !use_browser || dump_trace) {
23e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		use_browser = 0;
24e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		if (fallback_to_pager)
25e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			setup_pager();
26e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		return;
27e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	}
28e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
29e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	use_browser = 1;
30e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	newtInit();
31e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	newtCls();
32e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	newtSetSuspendCallback(newt_suspend, NULL);
33e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	ui_helpline__init();
34e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	ui_browser__init();
35e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
36e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
37e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengvoid exit_browser(bool wait_for_ok)
38e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
39e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	if (use_browser > 0) {
40e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		if (wait_for_ok) {
41e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			char title[] = "Fatal Error", ok[] = "Ok";
42e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			newtWinMessage(title, ok, ui_helpline__last_msg);
43e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		}
44e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		newtFinished();
45e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	}
46e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
47