From 12f70e6ce9d5b59772bd7a2ffeb18b1c8f22c784 Mon Sep 17 00:00:00 2001 From: Andrew Pamment Date: Sun, 1 Dec 2019 16:28:14 +1000 Subject: [PATCH] Fixes for windows --- MD_Getc.c | 8 ++++++++ MD_Init.c | 20 ++++++++++++++++---- MD_Printf.c | 4 ++++ buildwin.sh | 9 +++++++++ 4 files changed, 37 insertions(+), 4 deletions(-) create mode 100755 buildwin.sh diff --git a/MD_Getc.c b/MD_Getc.c index c0715c7..dc18fbb 100644 --- a/MD_Getc.c +++ b/MD_Getc.c @@ -1,6 +1,10 @@ #include #include +#if defined(_MSC_VER) || defined(WIN32) +#include +#else #include +#endif #include #include "MagiDoor.h" @@ -16,7 +20,11 @@ char md_getc() { if (ret == 0) { md_exit(0); } +#if defined(_MSC_VER) || defined(WIN32) + if (ret == SOCKET_ERROR && WSAGetLastError() == WSAEWOULDBLOCK) { +#else if (ret == -1 && (errno == EAGAIN || errno == EWOULDBLOCK)) { +#endif usleep(1); continue; } diff --git a/MD_Init.c b/MD_Init.c index 1b523a1..3529f68 100644 --- a/MD_Init.c +++ b/MD_Init.c @@ -1,5 +1,9 @@ #include +#if defined(WIN32) || defined(_MSC_VER) +#include +#else #include +#endif #include #include #include @@ -15,7 +19,10 @@ MDDoorControl_t mdcontrol; +#if defined(WIN32) || defined(_MSC_VER) +#else struct termios ttysave; +#endif static void md_cfg_read_line(char *buffer, int len, FILE *fptr) { fgets(buffer, len, fptr); @@ -171,18 +178,20 @@ int read_doorsys(const char *dropfile) { void md_exit(int exitcode) { if (mdcontrol.socket == -1) { +#if !defined(WIN32) && !defined(_MSC_VER) tcsetattr(STDIN_FILENO, TCSANOW, &ttysave); - } else { -#if defined(WIN32) || defined (_MSC_VER) - WSACleanup(); #endif + } else { + // nothing } exit(exitcode); } int md_init(const char *dropfile) { char *filename = strrchr(dropfile, PATH_SEP); +#if !defined(WIN32) && !defined(_MSC_VER) struct termios ttystate; +#endif int ret; if (filename == NULL) { @@ -198,6 +207,8 @@ int md_init(const char *dropfile) { } if (mdcontrol.socket == -1) { +#if defined(WIN32) || defined(_MSC_VER) +#else tcgetattr(STDIN_FILENO, &ttystate); ttysave = ttystate; @@ -207,7 +218,8 @@ int md_init(const char *dropfile) { ttystate.c_cc[VMIN] = 1; ttystate.c_cc[VTIME] = 0; - tcsetattr(STDIN_FILENO, TCSANOW, &ttystate); + tcsetattr(STDIN_FILENO, TCSANOW, &ttystate); +#endif } return ret; diff --git a/MD_Printf.c b/MD_Printf.c index 28cfa35..bd4591b 100644 --- a/MD_Printf.c +++ b/MD_Printf.c @@ -2,7 +2,11 @@ #include #include #include +#if defined(_MSC_VER) || defined(WIN32) +#include +#else #include +#endif #include "MagiDoor.h" void md_putchar(char c) { diff --git a/buildwin.sh b/buildwin.sh new file mode 100755 index 0000000..f2b71e8 --- /dev/null +++ b/buildwin.sh @@ -0,0 +1,9 @@ +#!/bin/bash +i686-w64-mingw32-gcc -c MD_Init.c +i686-w64-mingw32-gcc -c MD_Printf.c +i686-w64-mingw32-gcc -c MD_Getc.c +i686-w64-mingw32-gcc -c MD_Sendfile.c + +i686-w64-mingw32-gcc -shared -o mdoor.dll *.o -lws2_32 -Wl,--out-implib,libmdoor.a + +rm *.o