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