static int global_init(void) { int r; // TODO check all retcodes setlocale(LC_ALL, ""); initscr(); init_dialog(stdin, stdout); dialog_vars.item_help = 0; start_color(); init_my_colors(); noecho(); cbreak(); scrollok(stdscr, FALSE); keypad(stdscr, TRUE); clear_body(); // init libdevcheck r = dc_init(); assert(!r); RENDERER_REGISTER(sliding_window); RENDERER_REGISTER(whole_space); dc_log_set_callback(log_cb, NULL); r = atexit(global_fini); assert(r == 0); return 0; }
int dc_init(void) { int r; DC_Ctx *ctx = calloc(1, sizeof(*ctx)); if (!ctx) return 1; dc_ctx_global = ctx; dc_log_set_callback(dc_log_default_func, NULL); dc_log_set_level(DC_LOG_INFO); struct timespec dummy; #ifdef CLOCK_MONOTONIC_RAW /* determine best available clock */ DC_BEST_CLOCK = CLOCK_MONOTONIC_RAW; r = clock_gettime(DC_BEST_CLOCK, &dummy); if (r) { dc_log(DC_LOG_WARNING, "CLOCK_MONOTONIC_RAW unavailable, using CLOCK_MONOTONIC\n"); DC_BEST_CLOCK = CLOCK_MONOTONIC; } #else DC_BEST_CLOCK = CLOCK_MONOTONIC; #endif r = clock_gettime(DC_BEST_CLOCK, &dummy); if (r) { dc_log(DC_LOG_ERROR, "Monotonic POSIX clock unavailable\n"); return 1; } dc_realtime_scheduling_enable_with_prio(0); #define PROCEDURE_REGISTER(x) { \ extern DC_Procedure x; \ dc_procedure_register(&x); } PROCEDURE_REGISTER(hpa_set); PROCEDURE_REGISTER(posix_write_zeros); PROCEDURE_REGISTER(copy); PROCEDURE_REGISTER(read_test); PROCEDURE_REGISTER(smart_show); #undef PROCEDURE_REGISTER return 0; }