aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt8
-rwxr-xr-xcmake/djgpp/djgpp-cmake.sh31
-rw-r--r--cmake/djgpp/toolchain-djgpp.cmake27
-rw-r--r--utils/adlmidi-2/input.hpp1
-rw-r--r--utils/adlmidi-2/midiplay.cc73
5 files changed, 108 insertions, 32 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index d1ae802..266d0fa 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -27,7 +27,7 @@ if(MSVC)
ENDIF()
# -fPIC thing
-IF(NOT WIN32)
+IF(NOT WIN32 AND NOT DJGPP)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
ENDIF()
@@ -196,13 +196,13 @@ if(WITH_MIDIPLAY)
endif()
if(WITH_ADLMIDI2)
- if(NOT WIN32)
+ if(NOT WIN32 AND NOT DJGPP)
find_library(SDL2_LIBRARY SDL2 REQUIRED)
include_directories(${SDL2_INCLUDE_DIR})
message("Found ${SDL2_LIBRARY}")
endif()
- if(NOT WIN32)
+ if(NOT WIN32 AND NOT DJGPP)
set(ADLMIDI2_HAS_PUZZLE_GAME "TRUE")
set(ADLMIDI2_VIDEO_OUT_SUPPORT "TRUE")
endif()
@@ -228,6 +228,8 @@ if(WITH_ADLMIDI2)
if(WIN32)
target_link_libraries(adlmidi2 ADLMIDI winmm)
+ elseif(DJGPP)
+ target_link_libraries(adlmidi2 ADLMIDI)
else()
target_link_libraries(adlmidi2 ADLMIDI ${SDL2_LIBRARY} pthread dl m stdc++)
endif()
diff --git a/cmake/djgpp/djgpp-cmake.sh b/cmake/djgpp/djgpp-cmake.sh
new file mode 100755
index 0000000..7b4fab6
--- /dev/null
+++ b/cmake/djgpp/djgpp-cmake.sh
@@ -0,0 +1,31 @@
+#!/bin/bash
+djgpp_prefix=/usr/local/djgpp
+
+# export PKG_CONFIG_LIBDIR="${djgpp_prefix}/lib/pkgconfig"
+
+# djgpp_c_flags="-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions --param=ssp-buffer-size=4"
+# export CFLAGS="$djgpp_c_flags"
+# export CXXFLAGS="$djgpp_c_flags"
+
+CUSTOM_PATH=/home/vitaly/_git_repos/libADLMIDI/cmake/djgpp:${djgpp_prefix}/bin:/usr/local/djgpp/libexec/gcc/i586-pc-msdosdjgpp/7.2.0:$PATH
+
+if [[ "$1" != '--build' ]]; then
+ echo "KEK [${CUSTOM_PATH}]"
+
+ PATH=${CUSTOM_PATH} cmake \
+ -DCMAKE_INSTALL_PREFIX:PATH=${djgpp_prefix} \
+ -DCMAKE_INSTALL_LIBDIR:PATH=${djgpp_prefix}/lib \
+ -DINCLUDE_INSTALL_DIR:PATH=${djgpp_prefix}/include \
+ -DLIB_INSTALL_DIR:PATH=${djgpp_prefix}/lib \
+ -DSYSCONF_INSTALL_DIR:PATH=${djgpp_prefix}/etc \
+ -DSHARE_INSTALL_DIR:PATH=${djgpp_prefix}/share \
+ -DBUILD_SHARED_LIBS:BOOL=OFF \
+ -DCMAKE_TOOLCHAIN_FILE=/home/vitaly/_git_repos/libADLMIDI/cmake/djgpp/toolchain-djgpp.cmake \
+ "$@"
+
+else
+ PATH=${CUSTOM_PATH} cmake "$@"
+fi
+
+#-DCMAKE_CROSSCOMPILING_EMULATOR=/usr/bin/i686-pc-msdosdjgpp-wine
+
diff --git a/cmake/djgpp/toolchain-djgpp.cmake b/cmake/djgpp/toolchain-djgpp.cmake
new file mode 100644
index 0000000..3186b4f
--- /dev/null
+++ b/cmake/djgpp/toolchain-djgpp.cmake
@@ -0,0 +1,27 @@
+set (CMAKE_SYSTEM_NAME linux-djgpp)
+
+set (DJGPP TRUE)
+
+# specify the cross compiler
+set (CMAKE_C_COMPILER /usr/local/djgpp/bin/i586-pc-msdosdjgpp-gcc)
+set (CMAKE_CXX_COMPILER /usr/local/djgpp/bin/i586-pc-msdosdjgpp-g++)
+
+# where is the target environment
+set (CMAKE_FIND_ROOT_PATH /usr/local/djgpp)
+
+# search for programs in the build host directories
+set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+# for libraries and headers in the target directories
+set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+set (CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
+
+# Make sure Qt can be detected by CMake
+set (QT_BINARY_DIR /usr/local/djgpp/bin /usr/bin)
+set (QT_INCLUDE_DIRS_NO_SYSTEM ON)
+
+# These are needed for compiling lapack (RHBZ #753906)
+set (CMAKE_Fortran_COMPILER /usr/local/djgpp/bin/i586-pc-msdosdjgpp-gfortran)
+set (CMAKE_AR:FILEPATH /usr/local/djgpp/bin/i586-pc-msdosdjgpp-ar)
+set (CMAKE_RANLIB:FILEPATH /usr/local/djgpp/bin/i586-pc-msdosdjgpp-ranlib)
+
diff --git a/utils/adlmidi-2/input.hpp b/utils/adlmidi-2/input.hpp
index dba4229..59f7f8c 100644
--- a/utils/adlmidi-2/input.hpp
+++ b/utils/adlmidi-2/input.hpp
@@ -17,6 +17,7 @@
#include <dpmi.h>
#include <go32.h>
#include <sys/farptr.h>
+#include <sys/exceptn.h>
#include <dos.h>
#include <stdlib.h>
#define BIOStimer _farpeekl(_dos_ds, 0x46C)
diff --git a/utils/adlmidi-2/midiplay.cc b/utils/adlmidi-2/midiplay.cc
index f3b4cde..843f4d7 100644
--- a/utils/adlmidi-2/midiplay.cc
+++ b/utils/adlmidi-2/midiplay.cc
@@ -207,6 +207,22 @@ public:
bool cursor_visible;
char stderr_buffer[256];
public:
+#ifdef __DJGPP__
+# define RawPrn cprintf
+#else
+ static void RawPrn(const char *fmt, ...) ATTRIBUTE_FORMAT_PRINTF(1, 2)
+ {
+ // Note: should essentially match PutC, except without updates to x
+ va_list ap;
+ va_start(ap, fmt);
+ vfprintf(stderr, fmt, ap);
+ va_end(ap);
+ #ifdef _WIN32
+ fflush(stderr);
+ #endif
+ }
+#endif
+
UserInterface():
#ifdef SUPPORT_PUZZLE_GAME
player(2),
@@ -387,22 +403,6 @@ public:
++x; // One letter drawn. Update cursor position.
}
-#ifdef __DJGPP__
-# define RawPrn cprintf
-#else
- static void RawPrn(const char *fmt, ...) ATTRIBUTE_FORMAT_PRINTF(1, 2)
- {
- // Note: should essentially match PutC, except without updates to x
- va_list ap;
- va_start(ap, fmt);
- vfprintf(stderr, fmt, ap);
- va_end(ap);
- #ifdef _WIN32
- fflush(stderr);
- #endif
- }
-#endif
-
int Print(unsigned beginx, unsigned color, bool ln, const char *fmt, va_list ap)
{
char Line[1024];
@@ -1411,7 +1411,11 @@ static void SendStereoAudio(unsigned long count, short *samples)
static void TidyupAndExit(int sig)
{
- if(sig == SIGINT)
+ if((sig == SIGINT)
+ #ifdef __DJGPP__
+ || (sig == SIGQUIT)
+ #endif
+ )
{
UI.ShowCursor();
UI.Color(7);
@@ -1574,6 +1578,7 @@ int main(int argc, char **argv)
std::fflush(stderr);
signal(SIGINT, TidyupAndExit);
+ __djgpp_set_ctrl_c(1);
if(argc < 2 || std::string(argv[1]) == "--help" || std::string(argv[1]) == "-h")
{
@@ -1855,7 +1860,9 @@ int main(int argc, char **argv)
AdlInstrumentTester InstrumentTester(myDevice);
//static std::vector<int> sample_buf;
- //double delay = 0.0;
+ #ifdef __DJGPP__
+ double tick_delay = 0.0;
+ #endif
//sample_buf.resize(1024);
short buff[1024];
@@ -1961,9 +1968,17 @@ int main(int argc, char **argv)
QuitFlag = true;
#ifdef __DJGPP__
else
- delay = adl_tickEvents(myDevice, eat_delay, mindelay);
+ tick_delay = adl_tickEvents(myDevice, eat_delay, mindelay);
#endif
}
+ #ifdef __DJGPP__
+ else
+ {
+ tick_delay = adl_tickEvents(myDevice, eat_delay, mindelay);
+ if(adl_atEnd(myDevice) && tick_delay <= 0)
+ QuitFlag = true;
+ }
+ #endif
//: player.Tick(eat_delay, mindelay);
UI.GotoXY(0, 0);
@@ -1973,11 +1988,10 @@ int main(int argc, char **argv)
* TODO: Implement the public "tick()" function for the Hardware OPL3 chip support on DJGPP
*/
- //delay = nextdelay;
+ //tick_delay = nextdelay;
}
#ifdef __DJGPP__
-
// Fix the skewed clock and reset BIOS tick rate
_farpokel(_dos_ds, 0x46C, BIOStimer_begin +
(BIOStimer - BIOStimer_begin)
@@ -1988,8 +2002,10 @@ int main(int argc, char **argv)
outportb(0x40, 0);
//enable();
+ UI.Color(7);
+ clrscr();
+ std::printf("Bye!\n");
#else
-
#ifdef _WIN32
WindowsAudio::Close();
#else
@@ -2002,13 +2018,12 @@ int main(int argc, char **argv)
if(FakeDOSshell)
{
- fprintf(stderr,
- "Going TSR. Type 'EXIT' to return to ADLMIDI.\n"
- "\n"
- /*"Megasoft(R) Orifices 98\n"
- " (C)Copyright Megasoft Corp 1981 - 1999.\n"*/
- ""
- );
+ std::fprintf(stderr,
+ "Going TSR. Type 'EXIT' to return to ADLMIDI.\n"
+ "\n"
+ /*"Megasoft(R) Orifices 98\n"
+ " (C)Copyright Megasoft Corp 1981 - 1999.\n"*/
+ "");
}
return 0;
}