diff --git a/CMakeLists.txt b/CMakeLists.txt index 9dd3c29fd..3deceadac 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -283,6 +283,7 @@ set(BIN_TARGET devilutionx) if(SWITCH) list(APPEND devilutionx_SRCS + SourceX/platform/switch/network.cpp SourceX/platform/switch/keyboard.cpp SourceX/platform/switch/docking.cpp) set(BIN_TARGET devilutionx.elf) diff --git a/SourceX/main.cpp b/SourceX/main.cpp index 10893eb89..bed3cdbb3 100644 --- a/SourceX/main.cpp +++ b/SourceX/main.cpp @@ -1,5 +1,8 @@ #include #include +#ifdef __SWITCH__ +#include "platform/switch/network.h" +#endif #include "devilution.h" @@ -25,5 +28,10 @@ static std::string build_cmdline(int argc, char **argv) int main(int argc, char **argv) { auto cmdline = build_cmdline(argc, argv); + +#ifdef __SWITCH__ + switch_enable_network(); +#endif + return dvl::WinMain(NULL, NULL, (char *)cmdline.c_str(), 0); } diff --git a/SourceX/platform/switch/network.cpp b/SourceX/platform/switch/network.cpp new file mode 100644 index 000000000..e9520014b --- /dev/null +++ b/SourceX/platform/switch/network.cpp @@ -0,0 +1,23 @@ +#include +#include +#include +#include "platform/switch/network.h" + +static int nxlink_sock = -1; // for stdio on Switch + +void switch_enable_network() +{ + // enable network and stdio on Switch + socketInitializeDefault(); + // enable error messages via nxlink on Switch + nxlink_sock = nxlinkStdio(); + atexit(switch_disable_network); +} + +void switch_disable_network() +{ + // disable network and stdio on Switch + if (nxlink_sock != -1) + close(nxlink_sock); + socketExit(); +} diff --git a/SourceX/platform/switch/network.h b/SourceX/platform/switch/network.h new file mode 100644 index 000000000..7b849eee8 --- /dev/null +++ b/SourceX/platform/switch/network.h @@ -0,0 +1,4 @@ +#pragma once + +void switch_enable_network(); +void switch_disable_network();