From 57485b48ca9ce31e6b94b1ce5f1d892ff0b786bf Mon Sep 17 00:00:00 2001 From: Wohlstand Date: Thu, 7 Jan 2021 13:17:37 +0300 Subject: adlmidi2: Add the test check for termio and termios type #241 --- utils/adlmidi-2/CMakeLists.txt | 15 +++++++++++++++ utils/adlmidi-2/cmake/check-termio.c | 7 +++++++ utils/adlmidi-2/cmake/check-termios.c | 7 +++++++ utils/adlmidi-2/input.cc | 5 ++++- utils/adlmidi-2/input.hpp | 19 ++++++++++++++----- 5 files changed, 47 insertions(+), 6 deletions(-) create mode 100644 utils/adlmidi-2/cmake/check-termio.c create mode 100644 utils/adlmidi-2/cmake/check-termios.c (limited to 'utils/adlmidi-2') diff --git a/utils/adlmidi-2/CMakeLists.txt b/utils/adlmidi-2/CMakeLists.txt index 6be0332..71dfbb7 100644 --- a/utils/adlmidi-2/CMakeLists.txt +++ b/utils/adlmidi-2/CMakeLists.txt @@ -13,6 +13,9 @@ if(NOT ADLMIDI_DOS) option(ADLMIDI2_VIDEO_OUT_SUPPORT "Allow video recording with using of FFMPEG" ON) endif() +try_compile(HAS_TERMIO ${CMAKE_BINARY_DIR}/compile_tests "${CMAKE_CURRENT_SOURCE_DIR}/cmake/check-termio.c") +try_compile(HAS_TERMIOS ${CMAKE_BINARY_DIR}/compile_tests "${CMAKE_CURRENT_SOURCE_DIR}/cmake/check-termios.c") + set(adlmidi2_src) list(APPEND adlmidi2_src midiplay.cc @@ -33,6 +36,18 @@ endif() set_nopie(adlmidi2) +if(HAS_TERMIO) + target_compile_definitions(adlmidi2 PRIVATE -DHAS_TERMIO) +endif() + +if(HAS_TERMIOS) + target_compile_definitions(adlmidi2 PRIVATE -DHAS_TERMIOS) +endif() + +if(NOT HAS_TERMIO AND NOT HAS_TERMIOS) + message(FATAL_ERROR "Failed to recognize the termio or termios terminal I/O type") +endif() + if(ADLMIDI2_HAS_PUZZLE_GAME) target_compile_definitions(adlmidi2 PUBLIC SUPPORT_PUZZLE_GAME) endif() diff --git a/utils/adlmidi-2/cmake/check-termio.c b/utils/adlmidi-2/cmake/check-termio.c new file mode 100644 index 0000000..8fc3099 --- /dev/null +++ b/utils/adlmidi-2/cmake/check-termio.c @@ -0,0 +1,7 @@ +#include +static struct termio dummy; +int main() +{ + (void)dummy; + return 0; +} diff --git a/utils/adlmidi-2/cmake/check-termios.c b/utils/adlmidi-2/cmake/check-termios.c new file mode 100644 index 0000000..b0eddac --- /dev/null +++ b/utils/adlmidi-2/cmake/check-termios.c @@ -0,0 +1,7 @@ +#include +static struct termios dummy; +int main() +{ + (void)dummy; + return 0; +} diff --git a/utils/adlmidi-2/input.cc b/utils/adlmidi-2/input.cc index bb276cb..80aba57 100644 --- a/utils/adlmidi-2/input.cc +++ b/utils/adlmidi-2/input.cc @@ -7,7 +7,7 @@ xInput::xInput() #endif #if (!defined(_WIN32) || defined(__CYGWIN__)) && !defined(__DJGPP__) && !defined(__APPLE__) ioctl(0, TCGETA, &back); - struct termio term = back; + InputTermio_t term = back; term.c_lflag &= ~(ICANON | ECHO); term.c_cc[VMIN] = 0; // 0=no block, 1=do block if(ioctl(0, TCSETA, &term) < 0) @@ -32,6 +32,7 @@ char xInput::PeekInput() return c ? c : getch(); } #endif + #ifdef _WIN32 DWORD nread = 0; INPUT_RECORD inbuf[1]; @@ -48,9 +49,11 @@ char xInput::PeekInput() } } #endif + #if (!defined(_WIN32) || defined(__CYGWIN__)) && !defined(__DJGPP__) char c = 0; if(read(0, &c, 1) == 1) return c; #endif + return '\0'; } diff --git a/utils/adlmidi-2/input.hpp b/utils/adlmidi-2/input.hpp index 0cafd51..6d0a796 100644 --- a/utils/adlmidi-2/input.hpp +++ b/utils/adlmidi-2/input.hpp @@ -29,14 +29,23 @@ static const unsigned NewTimerFreq = 209; # include #endif +#if defined(HAS_TERMIO) +typedef struct termio InputTermio_t; +#elif defined(HAS_TERMIOS) +typedef struct termios InputTermio_t; +#else +# error Undefined type for termio; +#endif + class xInput { - #ifdef _WIN32 +#ifdef _WIN32 void *inhandle; - #endif - #if (!defined(_WIN32) || defined(__CYGWIN__)) && !defined(__DJGPP__) && !defined(__APPLE__) - struct termio back; - #endif +#endif +#if (!defined(_WIN32) || defined(__CYGWIN__)) && !defined(__DJGPP__) && !defined(__APPLE__) + InputTermio_t back; +#endif + public: xInput(); ~xInput(); -- cgit v1.2.3