static void *linuxraw_input_init(void) { struct sigaction sa = {{0}}; linuxraw_input_t *linuxraw = NULL; settings_t *settings = config_get_ptr(); /* Only work on terminals. */ if (!isatty(0)) return NULL; if (linux_terminal_grab_stdin(NULL)) { RARCH_WARN("stdin is already used for content loading. Cannot use stdin for input.\n"); return NULL; } linuxraw = (linuxraw_input_t*)calloc(1, sizeof(*linuxraw)); if (!linuxraw) return NULL; if (!linux_terminal_disable_input()) { linux_terminal_restore_input(); free(linuxraw); return NULL; } linuxraw->joypad = input_joypad_init_driver( settings->input.joypad_driver, linuxraw); input_keymaps_init_keyboard_lut(rarch_key_map_linux); linux_terminal_claim_stdin(); return linuxraw; }
static void linuxraw_input_free(void *data) { linuxraw_input_t *linuxraw = (linuxraw_input_t*)data; if (!linuxraw) return; if (linuxraw->joypad) linuxraw->joypad->destroy(); linux_terminal_restore_input(); free(data); }
static void linux_terminal_restore_signal(int sig) { linux_terminal_restore_input(); kill(getpid(), sig); }