aboutsummaryrefslogtreecommitdiff
path: root/utils/adlmidi-2
diff options
context:
space:
mode:
Diffstat (limited to 'utils/adlmidi-2')
-rw-r--r--utils/adlmidi-2/input.hpp1
-rw-r--r--utils/adlmidi-2/midiplay.cc73
2 files changed, 45 insertions, 29 deletions
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;
}