aboutsummaryrefslogtreecommitdiff
path: root/utils/adlmidi-2
diff options
context:
space:
mode:
authorWohlstand <admin@wohlnet.ru>2021-01-07 13:17:37 +0300
committerWohlstand <admin@wohlnet.ru>2021-01-07 13:17:37 +0300
commit57485b48ca9ce31e6b94b1ce5f1d892ff0b786bf (patch)
tree6efc3ff09f4cde2d9d0a7233518031b071d456af /utils/adlmidi-2
parent2712113e3895988a0f712e8bd1c0e109e6d6f139 (diff)
downloadlibADLMIDI-57485b48ca9ce31e6b94b1ce5f1d892ff0b786bf.tar.gz
libADLMIDI-57485b48ca9ce31e6b94b1ce5f1d892ff0b786bf.tar.bz2
libADLMIDI-57485b48ca9ce31e6b94b1ce5f1d892ff0b786bf.zip
adlmidi2: Add the test check for termio and termios type
#241
Diffstat (limited to 'utils/adlmidi-2')
-rw-r--r--utils/adlmidi-2/CMakeLists.txt15
-rw-r--r--utils/adlmidi-2/cmake/check-termio.c7
-rw-r--r--utils/adlmidi-2/cmake/check-termios.c7
-rw-r--r--utils/adlmidi-2/input.cc5
-rw-r--r--utils/adlmidi-2/input.hpp19
5 files changed, 47 insertions, 6 deletions
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 <sys/ioctl.h>
+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 <sys/ioctl.h>
+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 <csignal>
#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();