int repeater_run(struct repeater_config *config) { int status; char key; struct repeater repeater; status = term_init(); if (status != 0) { return 1; } status = init(&repeater, config); if (status == 0) { /* Start tasks and wait for a key press to shut down */ status = start_tasks(&repeater); if (status < 0) { fprintf(stderr, "Failed to start tasks.\r\n"); } else { repeater_help(); do { key = get_key(); repeater_handle_key(&repeater, key); } while (key != KEY_QUIT); } /* Stop tasks */ stop_tasks(&repeater); deinit(&repeater); } return term_deinit(); }
static void textui_deinit(void) { signal(SIGINT, SIG_DFL); term_refresh_freeze(); while (modules != NULL) module_unload(modules->data); #ifdef HAVE_STATIC_PERL perl_core_deinit(); fe_perl_deinit(); #endif #ifdef HAVE_STATIC_OTR otr_core_deinit(); #endif dirty_check(); /* one last time to print any quit messages */ signal_remove("settings userinfo changed", (SIGNAL_FUNC) sig_settings_userinfo_changed); signal_remove("gui exit", (SIGNAL_FUNC) sig_exit); lastlog_deinit(); statusbar_deinit(); gui_entry_deinit(); gui_printtext_deinit(); gui_readline_deinit(); gui_windows_deinit(); mainwindows_layout_deinit(); mainwindow_activity_deinit(); mainwindows_deinit(); gui_expandos_deinit(); textbuffer_commands_deinit(); textbuffer_view_deinit(); textbuffer_deinit(); term_refresh_thaw(); term_deinit(); theme_unregister(); fe_common_irc_deinit(); fe_common_core_deinit(); irc_deinit(); core_deinit(); }