diff --git a/README.md b/README.md
index 6f86b5ae3f..374df8f7f4 100644
--- a/README.md
+++ b/README.md
@@ -174,9 +174,6 @@ See `src/3rdparty/squirrel/COPYRIGHT` for the complete license text.
The md5 implementation in `src/3rdparty/md5` is licensed under the Zlib license.
See the comments in the source files in `src/3rdparty/md5` for the complete license text.
-The implementations of Posix `getaddrinfo` and `getnameinfo` for OS/2 in `src/3rdparty/os2` are distributed partly under the GNU Lesser General Public License 2.1, and partly under the (3-clause) BSD license.
-The exact licensing terms can be found in `src/3rdparty/os2/getaddrinfo.c` resp. `src/3rdparty/os2/getnameinfo.c`.
-
The fmt implementation in `src/3rdparty/fmt` is licensed under the MIT license.
See `src/3rdparty/fmt/LICENSE.rst` for the complete license text.
diff --git a/os/os2/build_lang.cmd b/os/os2/build_lang.cmd
deleted file mode 100644
index 57d3e9943c..0000000000
--- a/os/os2/build_lang.cmd
+++ /dev/null
@@ -1,8 +0,0 @@
-rem
-rem Building language files...
-rem
-cd ..
-strgen\strgen
-for %%f in (lang\*.txt) do strgen\strgen %%f
-cd strgen
-
diff --git a/os/os2/dedicated.cmd b/os/os2/dedicated.cmd
deleted file mode 100644
index f4eb524995..0000000000
--- a/os/os2/dedicated.cmd
+++ /dev/null
@@ -1 +0,0 @@
-start /n /win openttd.exe -D %1 %2 %3 %4 %5 %6 %7 %8 %9
diff --git a/os/os2/installer/download_nosound.cmd b/os/os2/installer/download_nosound.cmd
deleted file mode 100644
index 39e9843a92..0000000000
--- a/os/os2/installer/download_nosound.cmd
+++ /dev/null
@@ -1,21 +0,0 @@
-@echo off
-if "%1" == "" goto err
-if "%2" == "" goto err
-
-echo Downloading NoSound...
-
-%1\wget http://binaries.openttd.org/installer/nosound-NOSOUND_VERSION.7z -O %2/baseset/nosound.7z
-
-echo Extracting NoSound...
-
-%1\7za x -y -O%2/baseset %2/baseset/nosound.7z
-del %1\baseset\nosound.7z /n
-
-echo NoSound has been installed.
-goto end
-
-:err
-echo This batch file is only intended for use by the OpenTTD installer.
-echo Please visit www.openttd.org for details on downloading NoSound.
-
-:end
\ No newline at end of file
diff --git a/os/os2/installer/download_opengfx.cmd b/os/os2/installer/download_opengfx.cmd
deleted file mode 100644
index c2686b456f..0000000000
--- a/os/os2/installer/download_opengfx.cmd
+++ /dev/null
@@ -1,21 +0,0 @@
-@echo off
-if "%1" == "" goto err
-if "%2" == "" goto err
-
-echo Downloading OpenGFX...
-
-%1\wget http://binaries.openttd.org/installer/opengfx-OPENGFX_VERSION.7z -O %2/baseset/opengfx.7z
-
-echo Extracting OpenGFX...
-
-%1\7za x -y -O%2/baseset %2/baseset/opengfx.7z
-del %1\baseset\opengfx.7z /n
-
-echo OpenGFX has been installed.
-goto end
-
-:err
-echo This batch file is only intended for use by the OpenTTD installer.
-echo Please visit www.openttd.org for details on downloading OpenGFX.
-
-:end
diff --git a/os/os2/installer/download_opensfx.cmd b/os/os2/installer/download_opensfx.cmd
deleted file mode 100644
index 0a46dea42a..0000000000
--- a/os/os2/installer/download_opensfx.cmd
+++ /dev/null
@@ -1,21 +0,0 @@
-@echo off
-if "%1" == "" goto err
-if "%2" == "" goto err
-
-echo Downloading OpenSFX...
-
-%1\wget http://binaries.openttd.org/installer/opensfx-OPENSFX_VERSION.7z -O %2/baseset/opensfx.7z
-
-echo Extracting OpenSFX...
-
-%1\7za x -y -O%2/baseset %2/baseset/opensfx.7z
-del %1\baseset\opensfx.7z /n
-
-echo OpenSFX has been installed.
-goto end
-
-:err
-echo This batch file is only intended for use by the OpenTTD installer.
-echo Please visit www.openttd.org for details on downloading OpenSFX.
-
-:end
diff --git a/os/os2/installer/make_installer.cmd b/os/os2/installer/make_installer.cmd
deleted file mode 100644
index 885b2dc623..0000000000
--- a/os/os2/installer/make_installer.cmd
+++ /dev/null
@@ -1,85 +0,0 @@
-@echo off
-
-set OPENTTD_VERSION=1.11.0
-set OPENSFX_VERSION=0.8.0
-set NOSOUND_VERSION=0.8.0
-set OPENGFX_VERSION=1.2.0
-
-echo To make the installer, you must have the WarpIN compiler (wic) installed and in
-echo your path, as well as wget and unzip. This file will download the various DLLs
-echo to be distributed with the installer. If you do not want to continue, please
-echo press CTRL-C now.
-echo.
-pause
-
-cd ..\..\..\bundle
-
-if not exist SDL12.dll goto getsdl
-if not exist FSLib.dll goto getsdl
-goto libc
-
-:getsdl
-
-wget http://www.os2site.com/sw/dev/sdl/sdl-1.2.10-bin-20080804.zip -O dl.zip
-unzip -j dl.zip SDL/FSLib.dll SDL/SDL12.dll
-del dl.zip
-
-:libc
-
-if exist libc063.dll goto gcc
-
-wget ftp://ftp.netlabs.org/pub/gcc/libc-0.6.3-csd3.zip -O dl.zip
-unzip -j dl.zip libc063.dll
-del dl.zip
-
-:gcc
-
-if exist gcc442.dll goto tools
-
-wget http://www.owenrudge.net/various/gcc442.zip -O dl.zip
-unzip -j dl.zip gcc442.dll
-del dl.zip
-
-:tools
-
-cd ..\os\os2\installer
-if exist tools goto opengfx
-
-mkdir tools
-cd tools
-
-wget http://download.smedley.info/wget-1.11.4-os2-20090315.zip -O dl.zip
-unzip -j dl.zip wget/bin/wget.exe
-del dl.zip
-
-wget ftp://ftp.os4.su/moveton/p7zip-9.04-bin-os2.zip -O dl.zip
-unzip -j dl.zip bin/7za.exe dll/ilibca.dll
-del dl.zip
-
-cd ..
-
-:opengfx
-
-if exist opengfx goto opensfx
-
-mkdir opengfx
-sed s/OPENGFX_VERSION/%OPENGFX_VERSION%/ < download_opengfx.cmd > opengfx\download_opengfx.cmd
-copy remove_opengfx.cmd opengfx
-
-:opensfx
-if exist opensfx goto nosound
-
-mkdir opensfx
-sed s/OPENSFX_VERSION/%OPENSFX_VERSION%/ < download_opensfx.cmd > opensfx\download_opensfx.cmd
-copy remove_opensfx.cmd opensfx
-
-:nosound
-
-mkdir nosound
-sed s/NOSOUND_VERSION/%NOSOUND_VERSION%/ < download_nosound.cmd > nosound\download_nosound.cmd
-copy remove_nosound.cmd nosound
-
-:end
-
-if exist openttd-%OPENTTD_VERSION%-os2.exe del openttd-%OPENTTD_VERSION%-os2.exe
-wic -a openttd-%OPENTTD_VERSION%-os2.exe 1 -c../../../bundle -r * 2 -ctools -r * 3 -copengfx -r * 4 -copensfx -r * 5 -cnosound -r * -U -s openttd.wis
diff --git a/os/os2/installer/openttd.wis b/os/os2/installer/openttd.wis
deleted file mode 100644
index 4b761ed83c..0000000000
--- a/os/os2/installer/openttd.wis
+++ /dev/null
@@ -1,106 +0,0 @@
-
-
-OpenTTD
-
-
-
-OpenTTD is an open source transport simulation game
-
-Tools required for downloading the OpenGFX/SFX packs
-
-Downloads the OpenGFX graphics pack for OpenTTD
-
-Downloads the OpenSFX sound effects pack for OpenTTD
-
-Downloads the NoSound pack for OpenTTD, to disable sound effects
-
-
-
-
-
-
-~Next
-README.md
-Welcome to the OpenTTD installer. This program will install OpenTTD 1.0 on your system. Before we begin the installation process, please take a moment to read the following document.
-
-Select "Next" to continue, or "Cancel" to abort installation.
-
-
-
-
-~Next
-COPYING.md
-OpenTTD is licenced under the GNU General Public License. The text of the licence is below.
-
-Select "Next" if you agree to this licence.
-Select "Cancel" to abort installation.
-
-
-
-
-~Next
-On this page, you may choose which components to install. If you don't own Transport Tycoon Deluxe, you will need to download OpenGFX (3MiB) and OpenSFX (10MiB).
-
-
-
-
-
-I~nstall
-
-Press "Install" to begin installing OpenTTD.
-
-
-
diff --git a/os/os2/installer/remove_nosound.cmd b/os/os2/installer/remove_nosound.cmd
deleted file mode 100644
index 21c11e80d9..0000000000
--- a/os/os2/installer/remove_nosound.cmd
+++ /dev/null
@@ -1,15 +0,0 @@
-@echo off
-if "%1" == "" goto err
-
-echo Removing NoSound...
-
-del %1\baseset\nosound\*.* /n
-rmdir %1\baseset\nosound
-
-echo NoSound has been removed.
-goto end
-
-:err
-echo This batch file is only intended for use by the OpenTTD installer.
-
-:end
diff --git a/os/os2/installer/remove_opengfx.cmd b/os/os2/installer/remove_opengfx.cmd
deleted file mode 100644
index 71465d1677..0000000000
--- a/os/os2/installer/remove_opengfx.cmd
+++ /dev/null
@@ -1,15 +0,0 @@
-@echo off
-if "%1" == "" goto err
-
-echo Removing OpenGFX...
-
-del %1\baseset\opengfx\*.* /n
-rmdir %1\baseset\opengfx
-
-echo OpenGFX has been removed.
-goto end
-
-:err
-echo This batch file is only intended for use by the OpenTTD installer.
-
-:end
diff --git a/os/os2/installer/remove_opensfx.cmd b/os/os2/installer/remove_opensfx.cmd
deleted file mode 100644
index 361a870e33..0000000000
--- a/os/os2/installer/remove_opensfx.cmd
+++ /dev/null
@@ -1,15 +0,0 @@
-@echo off
-if "%1" == "" goto err
-
-echo Removing OpenSFX...
-
-del %1\baseset\opensfx\*.* /n
-rmdir %1\baseset\opensfx
-
-echo OpenSFX has been removed.
-goto end
-
-:err
-echo This batch file is only intended for use by the OpenTTD installer.
-
-:end
diff --git a/os/os2/openttd.wpj b/os/os2/openttd.wpj
deleted file mode 100644
index 61b2caa553..0000000000
--- a/os/os2/openttd.wpj
+++ /dev/null
@@ -1,64 +0,0 @@
-40
-projectIdent
-0
-VpeMain
-1
-WRect
-0
-0
-10304
-10020
-2
-MProject
-3
-MCommand
-15
-svn_version.cmd
-4
-MCommand
-0
-2
-5
-WFileName
-17
-..\..\openttd.tgt
-6
-WFileName
-23
-..\..\strgen\strgen.tgt
-7
-WVList
-2
-8
-VComponent
-9
-WRect
-0
-0
-5696
-4240
-0
-0
-10
-WFileName
-17
-..\..\openttd.tgt
-0
-0
-11
-VComponent
-12
-WRect
-688
-680
-5696
-4240
-0
-0
-13
-WFileName
-23
-..\..\strgen\strgen.tgt
-0
-1
-8
diff --git a/os/os2/svn_version.cmd b/os/os2/svn_version.cmd
deleted file mode 100644
index cc8836fc0b..0000000000
--- a/os/os2/svn_version.cmd
+++ /dev/null
@@ -1,30 +0,0 @@
-@echo off
-echo Running SVN version detection script...
-rem
-rem Requires subversion (`svnversion') to be installed
-rem
-cd ..\..
-if not "%RELEASE%"=="" goto forcerelease
-if not exist .svn goto nosvn
-svnversion -n . > os\os2\svnver.tmp
-if not "%ERRORLEVEL%"=="0" goto nosvn
-
-copy os\os2\svnver1.c+os\os2\svnver.tmp+os\os2\svnver2.c rev.c /a /y > nul 2> nul
-goto end
-
-:forcerelease
-echo Forcing release string "%RELEASE%"...
-echo const char _openttd_revision[] = "%RELEASE%"; > rev.c
-echo const int _revision_number = 0; >> rev.c
-goto end
-
-:nosvn
-echo Error executing `svnversion' or no SVN data detected
-echo const char _openttd_revision[] = "norev000"; > rev.c
-echo const int _revision_number = 0; >> rev.c
-goto end
-
-:end
-cd os\os2
-del svnver.tmp > nul 2> nul
-rem end
diff --git a/os/os2/svnver1.c b/os/os2/svnver1.c
deleted file mode 100644
index 56d3572c50..0000000000
--- a/os/os2/svnver1.c
+++ /dev/null
@@ -1,3 +0,0 @@
-/* rev.c part #1 for OS/2 - ensure no newline at end of file! */
-
-const char _openttd_revision[] = "r
\ No newline at end of file
diff --git a/os/os2/svnver2.c b/os/os2/svnver2.c
deleted file mode 100644
index 02d87603c5..0000000000
--- a/os/os2/svnver2.c
+++ /dev/null
@@ -1,4 +0,0 @@
-";
-const int _revision_number = 0;
-
-/* rev.c part 2 for OS/2 - ensure no newline at start of file! */
\ No newline at end of file
diff --git a/src/3rdparty/CMakeLists.txt b/src/3rdparty/CMakeLists.txt
index 051ec193ba..e2b72c4bd1 100644
--- a/src/3rdparty/CMakeLists.txt
+++ b/src/3rdparty/CMakeLists.txt
@@ -4,4 +4,3 @@ add_subdirectory(icu)
add_subdirectory(md5)
add_subdirectory(squirrel)
add_subdirectory(opengl)
-add_subdirectory(os2)
diff --git a/src/3rdparty/os2/CMakeLists.txt b/src/3rdparty/os2/CMakeLists.txt
deleted file mode 100644
index 8edc63479e..0000000000
--- a/src/3rdparty/os2/CMakeLists.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-add_files(
- getaddrinfo.c
- getaddrinfo.h
- getnameinfo.c
- getnameinfo.h
- CONDITION OPTION_OS2
-)
diff --git a/src/3rdparty/os2/getaddrinfo.c b/src/3rdparty/os2/getaddrinfo.c
deleted file mode 100644
index 3cdda21f1b..0000000000
--- a/src/3rdparty/os2/getaddrinfo.c
+++ /dev/null
@@ -1,299 +0,0 @@
-/*
- * This file is part of libESMTP, a library for submission of RFC 2822
- * formatted electronic mail messages using the SMTP protocol described
- * in RFC 2821.
- *
- * Copyright (C) 2001,2002 Brian Stafford
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-/* An emulation of the RFC 2553 / Posix getaddrinfo resolver interface.
- */
-
-#if !HAVE_GETADDRINFO
-
-/* Need to turn off Posix features in glibc to build this */
-#undef _POSIX_C_SOURCE
-#undef _XOPEN_SOURCE
-
-#include "getaddrinfo.h"
-//#include "compat/inet_pton.h"
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-static struct addrinfo *
-dup_addrinfo (struct addrinfo *info, void *addr, size_t addrlen) {
- struct addrinfo *ret;
-
- ret = malloc (sizeof (struct addrinfo));
- if (ret == NULL)
- return NULL;
- memcpy (ret, info, sizeof (struct addrinfo));
- ret->ai_addr = malloc (addrlen);
- if (ret->ai_addr == NULL) {
- free (ret);
- return NULL;
- }
- memcpy (ret->ai_addr, addr, addrlen);
- ret->ai_addrlen = addrlen;
- return ret;
-}
-
-int
-getaddrinfo (const char *nodename, const char *servname,
- const struct addrinfo *hints, struct addrinfo **res)
-{
- struct hostent *hp;
- struct servent *servent;
- const char *socktype;
- int port;
- struct addrinfo hint, result;
- struct addrinfo *ai, *sai, *eai;
- char **addrs;
-
- if (servname == NULL && nodename == NULL)
- return EAI_NONAME;
-
- memset (&result, 0, sizeof result);
-
- /* default for hints */
- if (hints == NULL) {
- memset (&hint, 0, sizeof hint);
- hint.ai_family = PF_UNSPEC;
- hints = &hint;
- }
-
- if (servname == NULL)
- port = 0;
- else {
- /* check for tcp or udp sockets only */
- if (hints->ai_socktype == SOCK_STREAM)
- socktype = "tcp";
- else if (hints->ai_socktype == SOCK_DGRAM)
- socktype = "udp";
- else
- return EAI_SERVICE;
- result.ai_socktype = hints->ai_socktype;
-
- /* Note: maintain port in host byte order to make debugging easier */
- if (isdigit (*servname))
- port = strtol (servname, NULL, 10);
- else if ((servent = getservbyname (servname, socktype)) != NULL)
- port = ntohs (servent->s_port);
- else
- return EAI_NONAME;
- }
-
- /* if nodename == NULL refer to the local host for a client or any
- for a server */
- if (nodename == NULL) {
- struct sockaddr_in sin;
-
- /* check protocol family is PF_UNSPEC or PF_INET - could try harder
- for IPv6 but that's more code than I'm prepared to write */
- if (hints->ai_family == PF_UNSPEC || hints->ai_family == PF_INET)
- result.ai_family = AF_INET;
- else
- return EAI_FAMILY;
-
- sin.sin_family = result.ai_family;
- sin.sin_port = htons (port);
- if (hints->ai_flags & AI_PASSIVE)
- sin.sin_addr.s_addr = htonl (INADDR_ANY);
- else
- sin.sin_addr.s_addr = htonl (INADDR_LOOPBACK);
- /* Duplicate result and addr and return */
- *res = dup_addrinfo (&result, &sin, sizeof sin);
- return (*res == NULL) ? EAI_MEMORY : 0;
- }
-
- /* If AI_NUMERIC is specified, use inet_pton to translate numbers and
- dots notation. */
- if (hints->ai_flags & AI_NUMERICHOST) {
- struct sockaddr_in sin;
-
- /* check protocol family is PF_UNSPEC or PF_INET */
- if (hints->ai_family == PF_UNSPEC || hints->ai_family == PF_INET)
- result.ai_family = AF_INET;
- else
- return EAI_FAMILY;
-
- sin.sin_family = result.ai_family;
- sin.sin_port = htons (port);
- if (inet_pton(result.ai_family, nodename, &sin.sin_addr)==0)
- return EAI_NONAME;
- sin.sin_addr.s_addr = inet_addr (nodename);
- /* Duplicate result and addr and return */
- *res = dup_addrinfo (&result, &sin, sizeof sin);
- return (*res == NULL) ? EAI_MEMORY : 0;
- }
-
-#if HAVE_H_ERRNO
- h_errno = 0;
-#endif
- errno = 0;
- hp = gethostbyname(nodename);
- if (hp == NULL) {
-#ifdef EAI_SYSTEM
- if (errno != 0) {
- return EAI_SYSTEM;
- }
-#endif
- switch (h_errno) {
- case HOST_NOT_FOUND:
- return EAI_NODATA;
- case NO_DATA:
- return EAI_NODATA;
-#if defined(NO_ADDRESS) && NO_ADDRESS != NO_DATA
- case NO_ADDRESS:
- return EAI_NODATA;
-#endif
- case NO_RECOVERY:
- return EAI_FAIL;
- case TRY_AGAIN:
- return EAI_AGAIN;
- default:
- return EAI_FAIL;
- }
- return EAI_FAIL;
- }
-
- /* Check that the address family is acceptable.
- */
- switch (hp->h_addrtype) {
- case AF_INET:
- if (!(hints->ai_family == PF_UNSPEC || hints->ai_family == PF_INET))
- return EAI_FAMILY;
- break;
-#ifndef __OS2__
- case AF_INET6:
- if (!(hints->ai_family == PF_UNSPEC || hints->ai_family == PF_INET6))
- return EAI_FAMILY;
- break;
-#endif
- default:
- return EAI_FAMILY;
- }
-
- /* For each element pointed to by hp, create an element in the
- result linked list. */
- sai = eai = NULL;
- for (addrs = hp->h_addr_list; *addrs != NULL; addrs++) {
- struct sockaddr sa;
- size_t addrlen;
-
- if (hp->h_length < 1)
- continue;
- sa.sa_family = hp->h_addrtype;
- switch (hp->h_addrtype) {
- case AF_INET:
- ((struct sockaddr_in *) &sa)->sin_port = htons (port);
- memcpy (&((struct sockaddr_in *) &sa)->sin_addr,
- *addrs, hp->h_length);
- addrlen = sizeof (struct sockaddr_in);
- break;
-#ifndef __OS2__
- case AF_INET6:
-#if SIN6_LEN
- ((struct sockaddr_in6 *) &sa)->sin6_len = hp->h_length;
-#endif
- ((struct sockaddr_in6 *) &sa)->sin6_port = htons (port);
- memcpy (&((struct sockaddr_in6 *) &sa)->sin6_addr,
- *addrs, hp->h_length);
- addrlen = sizeof (struct sockaddr_in6);
- break;
-#endif
- default:
- continue;
- }
-
- result.ai_family = hp->h_addrtype;
- ai = dup_addrinfo (&result, &sa, addrlen);
- if (ai == NULL) {
- freeaddrinfo (sai);
- return EAI_MEMORY;
- }
- if (sai == NULL)
- sai = ai;
- else
- eai->ai_next = ai;
- eai = ai;
- }
-
- if (sai == NULL) {
- return EAI_NODATA;
- }
-
- if (hints->ai_flags & AI_CANONNAME) {
- sai->ai_canonname = malloc (strlen (hp->h_name) + 1);
- if (sai->ai_canonname == NULL) {
- freeaddrinfo (sai);
- return EAI_MEMORY;
- }
- strcpy (sai->ai_canonname, hp->h_name);
- }
-
- *res = sai;
- return 0;
-}
-
-void
-freeaddrinfo (struct addrinfo *ai)
-{
- struct addrinfo *next;
-
- while (ai != NULL) {
- next = ai->ai_next;
- if (ai->ai_canonname != NULL)
- free (ai->ai_canonname);
- if (ai->ai_addr != NULL)
- free (ai->ai_addr);
- free (ai);
- ai = next;
- }
-}
-
-const char *
-gai_strerror (int ecode)
-{
- static const char *eai_descr[] = {
- "no error",
- "address family for nodename not supported", /* EAI_ADDRFAMILY */
- "temporary failure in name resolution", /* EAI_AGAIN */
- "invalid value for ai_flags", /* EAI_BADFLAGS */
- "non-recoverable failure in name resolution", /* EAI_FAIL */
- "ai_family not supported", /* EAI_FAMILY */
- "memory allocation failure", /* EAI_MEMORY */
- "no address associated with nodename", /* EAI_NODATA */
- "nodename nor servname provided, or not known", /* EAI_NONAME */
- "servname not supported for ai_socktype", /* EAI_SERVICE */
- "ai_socktype not supported", /* EAI_SOCKTYPE */
- "system error returned in errno", /* EAI_SYSTEM */
- "argument buffer overflow", /* EAI_OVERFLOW */
- };
-
- if (ecode < 0 || ecode > (int) (sizeof eai_descr/ sizeof eai_descr[0]))
- return "unknown error";
- return eai_descr[ecode];
-}
-
-#endif /* HAVE_GETADDRINFO */
diff --git a/src/3rdparty/os2/getaddrinfo.h b/src/3rdparty/os2/getaddrinfo.h
deleted file mode 100644
index 0a588a40a2..0000000000
--- a/src/3rdparty/os2/getaddrinfo.h
+++ /dev/null
@@ -1,101 +0,0 @@
-#ifndef _getaddrinfo_h
-#define _getaddrinfo_h
-
-/*
- * Shamelessly duplicated from the fetchmail public sources
- * for use by the Squid Project under GNU Public License.
- *
- * Update/Maintenance History:
- *
- * 15-Aug-2007 : Copied from fetchmail 6.3.8
- * - added protection around libray headers
- *
- * 16-Aug-2007 : Altered configure checks
- * Un-hacked slightly to use system gethostbyname()
- *
- * Original License and code follows.
- */
-
-/*
- * This file is part of libESMTP, a library for submission of RFC 2822
- * formatted electronic mail messages using the SMTP protocol described
- * in RFC 2821.
- *
- * Copyright (C) 2001,2002 Brian Stafford
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-/* Structure and prototypes taken from RFC 2553 */
-
-/* SG 23/09/2007:
-On Windows the following definitions are already available, may be that
-this could be needed on some other platform */
-typedef int socklen_t;
-
-struct addrinfo {
- int ai_flags; /* AI_PASSIVE, AI_CANONNAME, AI_NUMERICHOST */
- int ai_family; /* PF_xxx */
- int ai_socktype; /* SOCK_xxx */
- int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */
- socklen_t ai_addrlen; /* length of ai_addr */
- char *ai_canonname; /* canonical name for nodename */
- struct sockaddr *ai_addr; /* binary address */
- struct addrinfo *ai_next; /* next structure in linked list */
-};
-
-/* Supposed to be defined in */
-#define AI_ADDRCONFIG 0
-#define AI_PASSIVE 1 /* Socket address is intended for `bind'. */
-#define AI_CANONNAME 2 /* Request for canonical name. */
-#define AI_NUMERICHOST 4 /* Don't use name resolution. */
-
-/* Supposed to be defined in */
-#define EAI_ADDRFAMILY 1 /* address family for nodename not supported */
-#define EAI_AGAIN 2 /* temporary failure in name resolution */
-#define EAI_BADFLAGS 3 /* invalid value for ai_flags */
-#define EAI_FAIL 4 /* non-recoverable failure in name resolution */
-#define EAI_FAMILY 5 /* ai_family not supported */
-#define EAI_MEMORY 6 /* memory allocation failure */
-#define EAI_NODATA 7 /* no address associated with nodename */
-#define EAI_NONAME 8 /* nodename nor servname provided, or not known */
-#define EAI_SERVICE 9 /* servname not supported for ai_socktype */
-#define EAI_SOCKTYPE 10 /* ai_socktype not supported */
-
-#ifndef EAI_SYSTEM
-/* Not defined on mingw32. */
-#define EAI_SYSTEM 11 /* System error returned in `errno'. */
-#endif
-#ifndef EAI_OVERFLOW
-/* Not defined on mingw32. */
-#define EAI_OVERFLOW 12 /* Argument buffer overflow. */
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-/* RFC 2553 / Posix resolver */
-int getaddrinfo (const char *nodename, const char *servname,
- const struct addrinfo *hints, struct addrinfo **res);
-/* Free addrinfo structure and associated storage */
-void freeaddrinfo (struct addrinfo *ai);
-
-/* Convert error return from getaddrinfo() to string */
-const char *gai_strerror (int code);
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _getaddrinfo_h */
diff --git a/src/3rdparty/os2/getnameinfo.c b/src/3rdparty/os2/getnameinfo.c
deleted file mode 100644
index 14fd89ef15..0000000000
--- a/src/3rdparty/os2/getnameinfo.c
+++ /dev/null
@@ -1,367 +0,0 @@
-/*
- * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the project nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Issues to be discussed:
- * - RFC2553 says that we should raise error on short buffer. X/Open says
- * we need to truncate the result. We obey RFC2553 (and X/Open should be
- * modified). ipngwg rough consensus seems to follow RFC2553. RFC3493 says
- * nothing about it, but defines a new error code EAI_OVERFLOW which seems
- * to be intended the code for this case.
- * - What is "local" in NI_NOFQDN? (see comments in the code)
- * - NI_NAMEREQD and NI_NUMERICHOST conflict with each other.
- * - (KAME extension) always attach textual scopeid (fe80::1%lo0), if
- * sin6_scope_id is filled - standardization status?
- * - what should we do if we should do getservbyport("sctp")?
- */
-
-/*
- * Considerations about thread-safeness
- * The code in this file is thread-safe, and so the thread-safeness of
- * getnameinfo() depends on the property of backend functions.
- * - getservbyport() is not thread safe for most systems we are targeting.
- * - getipnodebyaddr() is thread safe. However, many resolver libraries
- * used in the function are not thread safe.
- * - gethostbyaddr() is usually not thread safe.
- */
-
-#if !HAVE_GETNAMEINFO
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include "getaddrinfo.h"
-#include "getnameinfo.h"
-
-static const struct afd {
- int a_af;
- int a_addrlen;
- int a_socklen;
- int a_off;
- int a_portoff;
-} afdl [] = {
-#if INET6
- {PF_INET6, sizeof(struct in6_addr), sizeof(struct sockaddr_in6),
- offsetof(struct sockaddr_in6, sin6_addr),
- offsetof(struct sockaddr_in6, sin6_port)},
-#endif
- {PF_INET, sizeof(struct in_addr), sizeof(struct sockaddr_in),
- offsetof(struct sockaddr_in, sin_addr),
- offsetof(struct sockaddr_in, sin_port)},
- {0, 0, 0, 0, 0},
-};
-
-#if INET6
-static int ip6_parsenumeric __P((const struct sockaddr *, const char *, char *,
- size_t, int));
-static int ip6_sa2str __P((const struct sockaddr_in6 *, char *, size_t, int));
-#endif
-
-int
-getnameinfo(sa, salen, host, hostlen, serv, servlen, flags)
-const struct sockaddr *sa;
-socklen_t salen;
-char *host;
-size_t hostlen;
-char *serv;
-size_t servlen;
-int flags;
-{
- const struct afd *afd;
- struct servent *sp;
- struct hostent *hp;
- unsigned short port;
- int family, i;
- const char *addr;
- uint32_t v4a;
- char numserv[512];
-
- if (sa == NULL)
- return EAI_FAIL;
-
-#if HAVE_SA_LEN /*XXX*/
- if (sa->sa_len != salen)
- return EAI_FAIL;
-#endif
-
- family = sa->sa_family;
- for (i = 0; afdl[i].a_af; i++)
- if (afdl[i].a_af == family) {
- afd = &afdl[i];
- goto found;
- }
- return EAI_FAMILY;
-
-found:
- if (salen != afd->a_socklen)
- return EAI_FAIL;
-
- /* network byte order */
- memcpy(&port, (const char *)sa + afd->a_portoff, sizeof(port));
- addr = (const char *)sa + afd->a_off;
-
- if (serv == NULL || servlen == 0) {
- /*
- * do nothing in this case.
- * in case you are wondering if "&&" is more correct than
- * "||" here: RFC3493 says that serv == NULL OR servlen == 0
- * means that the caller does not want the result.
- */
- } else {
- if (flags & NI_NUMERICSERV)
- sp = NULL;
- else {
- sp = getservbyport(port,
- (flags & NI_DGRAM) ? "udp" : "tcp");
- }
- if (sp) {
- if (strlen(sp->s_name) + 1 > servlen)
- return EAI_OVERFLOW;
- strncpy(serv, sp->s_name, servlen);
- } else {
- snprintf(numserv, sizeof(numserv), "%u", ntohs(port));
- if (strlen(numserv) + 1 > servlen)
- return EAI_OVERFLOW;
- strncpy(serv, numserv, servlen);
- }
- }
-
- switch (sa->sa_family) {
- case AF_INET:
- v4a = (uint32_t)
- ntohl(((const struct sockaddr_in *)sa)->sin_addr.s_addr);
- if (IN_MULTICAST(v4a) || IN_EXPERIMENTAL(v4a))
- flags |= NI_NUMERICHOST;
- v4a >>= IN_CLASSA_NSHIFT;
- if (v4a == 0)
- flags |= NI_NUMERICHOST;
- break;
-#if INET6
- case AF_INET6: {
- const struct sockaddr_in6 *sin6;
- sin6 = (const struct sockaddr_in6 *)sa;
- switch (sin6->sin6_addr.s6_addr[0]) {
- case 0x00:
- if (IN6_IS_ADDR_V4MAPPED(&sin6->sin6_addr))
- ;
- else if (IN6_IS_ADDR_LOOPBACK(&sin6->sin6_addr))
- ;
- else
- flags |= NI_NUMERICHOST;
- break;
- default:
- if (IN6_IS_ADDR_LINKLOCAL(&sin6->sin6_addr))
- flags |= NI_NUMERICHOST;
- else if (IN6_IS_ADDR_MULTICAST(&sin6->sin6_addr))
- flags |= NI_NUMERICHOST;
- break;
- }
- }
- break;
-#endif
- }
- if (host == NULL || hostlen == 0) {
- /*
- * do nothing in this case.
- * in case you are wondering if "&&" is more correct than
- * "||" here: RFC3493 says that host == NULL or hostlen == 0
- * means that the caller does not want the result.
- */
- } else if (flags & NI_NUMERICHOST) {
- /* NUMERICHOST and NAMEREQD conflicts with each other */
- if (flags & NI_NAMEREQD)
- return EAI_NONAME;
-
- goto numeric;
- } else {
-#if USE_GETIPNODEBY
- int h_error = 0;
- hp = getipnodebyaddr(addr, afd->a_addrlen, afd->a_af, &h_error);
-#else
- hp = gethostbyaddr(addr, afd->a_addrlen, afd->a_af);
-#if 0 // getnameinfo.c:161:9: error: variable 'h_error' set but not used
-#if HAVE_H_ERRNO
- h_error = h_errno;
-#else
- h_error = EINVAL;
-#endif
-#endif /* 0 */
-#endif
-
- if (hp) {
-#if 0
- if (flags & NI_NOFQDN) {
- /*
- * According to RFC3493 section 6.2, NI_NOFQDN
- * means "node name portion of the FQDN shall
- * be returned for local hosts." The following
- * code tries to implement it by returning the
- * first label (the part before the first
- * period) of the FQDN. However, it is not
- * clear if this always makes sense, since the
- * given address may be outside of "local
- * hosts." Due to the unclear description, we
- * disable the code in this implementation.
- */
- char *p;
- p = strchr(hp->h_name, '.');
- if (p)
- *p = '\0';
- }
-#endif
- if (strlen(hp->h_name) + 1 > hostlen) {
-#if USE_GETIPNODEBY
- freehostent(hp);
-#endif
- return EAI_OVERFLOW;
- }
- strncpy(host, hp->h_name, hostlen);
-#if USE_GETIPNODEBY
- freehostent(hp);
-#endif
- } else {
- if (flags & NI_NAMEREQD)
- return EAI_NONAME;
-
-numeric:
- switch (afd->a_af) {
-#if INET6
- case AF_INET6: {
- int error;
-
- if ((error = ip6_parsenumeric(sa, addr, host,
- hostlen,
- flags)) != 0)
- return(error);
- break;
- }
-#endif
- default:
- if (inet_ntop(afd->a_af, addr, host,
- hostlen) == NULL)
- return EAI_SYSTEM;
- break;
- }
- }
- }
- return(0);
-}
-
-#if INET6
-static int
-ip6_parsenumeric(sa, addr, host, hostlen, flags)
-const struct sockaddr *sa;
-const char *addr;
-char *host;
-size_t hostlen;
-int flags;
-{
- int numaddrlen;
- char numaddr[512];
-
- if (inet_ntop(AF_INET6, addr, numaddr, sizeof(numaddr)) == NULL)
- return EAI_SYSTEM;
-
- numaddrlen = strlen(numaddr);
- if (numaddrlen + 1 > hostlen) /* don't forget terminator */
- return EAI_OVERFLOW;
- strncpy(host, numaddr, hostlen);
-
- if (((const struct sockaddr_in6 *)sa)->sin6_scope_id) {
- char zonebuf[SQUIDHOSTNAMELEN];
- int zonelen;
-
- zonelen = ip6_sa2str(
- (const struct sockaddr_in6 *)(const void *)sa,
- zonebuf, sizeof(zonebuf), flags);
- if (zonelen < 0)
- return EAI_OVERFLOW;
- if (zonelen + 1 + numaddrlen + 1 > hostlen)
- return EAI_OVERFLOW;
-
- /* construct */
- memcpy(host + numaddrlen + 1, zonebuf,
- (size_t)zonelen);
- host[numaddrlen] = SCOPE_DELIMITER;
- host[numaddrlen + 1 + zonelen] = '\0';
- }
-
- return 0;
-}
-
-/* ARGSUSED */
-static int
-ip6_sa2str(sa6, buf, bufsiz, flags)
-const struct sockaddr_in6 *sa6;
-char *buf;
-size_t bufsiz;
-int flags;
-{
- unsigned int ifindex;
- const struct in6_addr *a6;
- int n;
-
- ifindex = (unsigned int)sa6->sin6_scope_id;
- a6 = &sa6->sin6_addr;
-
-#if NI_NUMERICSCOPE
- if ((flags & NI_NUMERICSCOPE) != 0) {
- n = snprintf(buf, bufsiz, "%u", sa6->sin6_scope_id);
- if (n < 0 || n >= bufsiz)
- return -1;
- else
- return n;
- }
-#endif
-
- /* if_indextoname() does not take buffer size. not a good api... */
- if ((IN6_IS_ADDR_LINKLOCAL(a6) || IN6_IS_ADDR_MC_LINKLOCAL(a6) ||
- IN6_IS_ADDR_MC_NODELOCAL(a6)) && bufsiz >= IF_NAMESIZE) {
- char *p = if_indextoname(ifindex, buf);
- if (p)
- return (strlen(p));
- }
-
- /* last resort */
- n = snprintf(buf, bufsiz, "%u", sa6->sin6_scope_id);
- if (n < 0 || n >= bufsiz)
- return -1;
- else
- return n;
-}
-#endif /* INET6 */
-#endif
diff --git a/src/3rdparty/os2/getnameinfo.h b/src/3rdparty/os2/getnameinfo.h
deleted file mode 100644
index c1861aa033..0000000000
--- a/src/3rdparty/os2/getnameinfo.h
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef _getnameinfo_h
-#define _getnameinfo_h
-/*
- * Reconstructed from KAME getnameinfo.c (in lib/)
- */
-
- /* getnameinfo flags */
-#define NI_NOFQDN 0x0001
-#define NI_NUMERICHOST 0x0002 /* return numeric form of address */
-#define NI_NAMEREQD 0x0004 /* request DNS name */
-#define NI_NUMERICSERV 0x0008
-#define NI_DGRAM 0x0010
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-/* RFC 2553 / Posix resolver */
-int getnameinfo(const struct sockaddr *sa,
- socklen_t salen,
- char *host,
- size_t hostlen,
- char *serv,
- size_t servlen,
- int flags );
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _getnameinfo_h */
diff --git a/src/cpu.cpp b/src/cpu.cpp
index d95c704e2a..e9b875015d 100644
--- a/src/cpu.cpp
+++ b/src/cpu.cpp
@@ -32,13 +32,6 @@ uint64 ottd_rdtsc()
#define RDTSC_AVAILABLE
#endif
-/* rdtsc for OS/2. Hopefully this works, who knows */
-#if defined (__WATCOMC__) && !defined(RDTSC_AVAILABLE)
-unsigned __int64 ottd_rdtsc();
-# pragma aux ottd_rdtsc = 0x0F 0x31 value [edx eax] parm nomemory modify exact [edx eax] nomemory;
-# define RDTSC_AVAILABLE
-#endif
-
/* rdtsc for all other *nix-en (hopefully). Use GCC syntax */
#if (defined(__i386__) || defined(__x86_64__)) && !defined(RDTSC_AVAILABLE)
uint64 ottd_rdtsc()
diff --git a/src/crashlog.cpp b/src/crashlog.cpp
index 141b2bb67e..8be9bc134c 100644
--- a/src/crashlog.cpp
+++ b/src/crashlog.cpp
@@ -88,8 +88,6 @@ void CrashLog::LogCompiler(std::back_insert_iterator &output_iterat
"ICC {}", __ICC
#elif defined(__GNUC__)
"GCC {}.{}.{}", __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__
-#elif defined(__WATCOMC__)
- "WatcomC {}", __WATCOMC__
#else
""
#endif
diff --git a/src/fileio.cpp b/src/fileio.cpp
index 0461b27a13..7e69db0316 100644
--- a/src/fileio.cpp
+++ b/src/fileio.cpp
@@ -347,8 +347,6 @@ void FioCreateDirectory(const std::string &name)
* of the time they are 'directory already exists' errors anyhow. */
#if defined(_WIN32)
CreateDirectory(OTTD2FS(name).c_str(), nullptr);
-#elif defined(OS2) && !defined(__INNOTEK_LIBC__)
- mkdir(OTTD2FS(name).c_str());
#else
mkdir(OTTD2FS(name).c_str(), 0755);
#endif
@@ -724,7 +722,7 @@ bool ExtractTar(const std::string &tar_filename, Subdirectory subdir)
/**
* Determine the base (personal dir and game data dir) paths
* @param exe the path from the current path to the executable
- * @note defined in the OS related files (os2.cpp, win32.cpp, unix.cpp etc)
+ * @note defined in the OS related files (win32.cpp, unix.cpp etc)
*/
extern void DetermineBasePaths(const char *exe);
#else /* defined(_WIN32) */
@@ -846,7 +844,7 @@ void DetermineBasePaths(const char *exe)
}
#endif
-#if defined(OS2) || !defined(WITH_PERSONAL_DIR)
+#if !defined(WITH_PERSONAL_DIR)
_searchpaths[SP_PERSONAL_DIR].clear();
#else
if (!homedir.empty()) {
diff --git a/src/fios.cpp b/src/fios.cpp
index 0388e6ecae..20f923804f 100644
--- a/src/fios.cpp
+++ b/src/fios.cpp
@@ -34,7 +34,7 @@
static std::string *_fios_path = nullptr;
SortingBits _savegame_sort_order = SORT_BY_DATE | SORT_DESCENDING;
-/* OS-specific functions are taken from their respective files (win32/unix/os2 .c) */
+/* OS-specific functions are taken from their respective files (win32/unix .c) */
extern bool FiosIsRoot(const std::string &path);
extern bool FiosIsValidFile(const std::string &path, const struct dirent *ent, struct stat *sb);
extern bool FiosIsHiddenFile(const struct dirent *ent);
@@ -143,7 +143,7 @@ bool FiosBrowseTo(const FiosItem *item)
{
switch (item->type) {
case FIOS_TYPE_DRIVE:
-#if defined(_WIN32) || defined(__OS2__)
+#if defined(_WIN32)
assert(_fios_path != nullptr);
*_fios_path = std::string{ item->title, 0, 1 } + ":" PATHSEP;
#endif
diff --git a/src/music/CMakeLists.txt b/src/music/CMakeLists.txt
index 8f87a9c936..54105bd3cb 100644
--- a/src/music/CMakeLists.txt
+++ b/src/music/CMakeLists.txt
@@ -36,12 +36,6 @@ if(NOT OPTION_DEDICATED)
bemidi.h
CONDITION HAIKU
)
-
- add_files(
- os2_m.cpp
- os2_m.h
- CONDITION OPTION_OS2
- )
endif()
add_files(
diff --git a/src/music/os2_m.cpp b/src/music/os2_m.cpp
deleted file mode 100644
index 1c898138ad..0000000000
--- a/src/music/os2_m.cpp
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * This file is part of OpenTTD.
- * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
- * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see .
- */
-
-/** @file os2_m.cpp Music playback on OS/2. */
-
-#include "../stdafx.h"
-#include "../openttd.h"
-#include "os2_m.h"
-#include "midifile.hpp"
-#include "../base_media_base.h"
-#include "../3rdparty/fmt/format.h"
-
-#define INCL_DOS
-#define INCL_OS2MM
-#define INCL_WIN
-
-#include
-#include
-
-#include "../safeguards.h"
-
-/**********************
- * OS/2 MIDI PLAYER
- **********************/
-
-/* Interesting how similar the MCI API in OS/2 is to the Win32 MCI API,
- * eh? Anyone would think they both came from the same place originally! ;)
- */
-
-/**
- * Send a midi command.
- * @param cmd The command to send.
- * @return The result of sending it.
- */
-static long CDECL MidiSendCommand(const std::string_view cmd)
-{
- return mciSendString(cmd.data(), nullptr, 0, nullptr, 0);
-}
-
-/** OS/2's music player's factory. */
-static FMusicDriver_OS2 iFMusicDriver_OS2;
-
-void MusicDriver_OS2::PlaySong(const MusicSongInfo &song)
-{
- std::string filename = MidiFile::GetSMFFile(song);
-
- MidiSendCommand("close all");
- if (filename.empty()) return;
-
- if (MidiSendCommand(fmt::format("open {} type sequencer alias song", filename)) != 0) {
- return;
- }
-
- MidiSendCommand("play song from 0");
-}
-
-void MusicDriver_OS2::StopSong()
-{
- MidiSendCommand("close all");
-}
-
-void MusicDriver_OS2::SetVolume(byte vol)
-{
- MidiSendCommand("set song audio volume %d", ((vol/127)*100));
-}
-
-bool MusicDriver_OS2::IsSongPlaying()
-{
- char buf[16];
- mciSendString("status song mode", buf, sizeof(buf), nullptr, 0);
- return strcmp(buf, "playing") == 0 || strcmp(buf, "seeking") == 0;
-}
-
-const char *MusicDriver_OS2::Start(const StringList &parm)
-{
- return 0;
-}
-
-void MusicDriver_OS2::Stop()
-{
- MidiSendCommand("close all");
-}
diff --git a/src/music/os2_m.h b/src/music/os2_m.h
deleted file mode 100644
index a60f5bbfc7..0000000000
--- a/src/music/os2_m.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * This file is part of OpenTTD.
- * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
- * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see .
- */
-
-/** @file os2_m.h Base for OS2 music playback. */
-
-#ifndef MUSIC_OS2_H
-#define MUSIC_OS2_H
-
-#include "music_driver.hpp"
-
-/** OS/2's music player. */
-class MusicDriver_OS2 : public MusicDriver {
-public:
- const char *Start(const StringList ¶m) override;
-
- void Stop() override;
-
- void PlaySong(const MusicSongInfo &song) override;
-
- void StopSong() override;
-
- bool IsSongPlaying() override;
-
- void SetVolume(byte vol) override;
- const char *GetName() const override { return "os2"; }
-};
-
-/** Factory for OS/2's music player. */
-class FMusicDriver_OS2 : public DriverFactoryBase {
-public:
- FMusicDriver_OS2() : DriverFactoryBase(Driver::DT_MUSIC, 10, "os2", "OS/2 Music Driver") {}
- Driver *CreateInstance() const override { return new MusicDriver_OS2(); }
-};
-
-#endif /* MUSIC_OS2_H */
diff --git a/src/network/core/address.cpp b/src/network/core/address.cpp
index 313a725c55..478aab3ad0 100644
--- a/src/network/core/address.cpp
+++ b/src/network/core/address.cpp
@@ -316,13 +316,11 @@ static SOCKET ListenLoopProc(addrinfo *runp)
Debug(net, 0, "Setting reuse-address mode failed: {}", NetworkError::GetLast().AsString());
}
-#ifndef __OS2__
int on = 1;
if (runp->ai_family == AF_INET6 &&
setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, (const char*)&on, sizeof(on)) == -1) {
Debug(net, 3, "Could not disable IPv4 over IPv6: {}", NetworkError::GetLast().AsString());
}
-#endif
if (bind(sock, runp->ai_addr, (int)runp->ai_addrlen) != 0) {
Debug(net, 0, "Could not bind socket on {}: {}", address, NetworkError::GetLast().AsString());
diff --git a/src/network/core/os_abstraction.cpp b/src/network/core/os_abstraction.cpp
index 9fcb9bf7fd..74dbc2fe4b 100644
--- a/src/network/core/os_abstraction.cpp
+++ b/src/network/core/os_abstraction.cpp
@@ -118,8 +118,6 @@ bool NetworkError::HasError() const
{
#if defined(_WIN32)
return NetworkError(WSAGetLastError());
-#elif defined(__OS2__)
- return NetworkError(sock_errno());
#else
return NetworkError(errno);
#endif
diff --git a/src/network/core/os_abstraction.h b/src/network/core/os_abstraction.h
index 6bb6101a17..461ada2b12 100644
--- a/src/network/core/os_abstraction.h
+++ b/src/network/core/os_abstraction.h
@@ -60,7 +60,7 @@ typedef unsigned long in_addr_t;
#endif /* _WIN32 */
/* UNIX stuff */
-#if defined(UNIX) && !defined(__OS2__)
+#if defined(UNIX)
# if defined(OPENBSD) || defined(__NetBSD__)
# define AI_ADDRCONFIG 0
# endif
@@ -79,7 +79,7 @@ typedef unsigned long in_addr_t;
# include
# include
/* According to glibc/NEWS, appeared in glibc-2.3. */
-# if !defined(__sgi__) && !defined(SUNOS) && !defined(__INNOTEK_LIBC__) \
+# if !defined(__sgi__) && !defined(SUNOS) \
&& !(defined(__GLIBC__) && (__GLIBC__ <= 2) && (__GLIBC_MINOR__ <= 2)) && !defined(__dietlibc__) && !defined(HPUX)
/* If for any reason ifaddrs.h does not exist on your system, comment out
* the following two lines and an alternative way will be used to fetch
@@ -117,60 +117,6 @@ typedef unsigned long in_addr_t;
#endif /* UNIX */
-/* OS/2 stuff */
-#if defined(__OS2__)
-# define SOCKET int
-# define INVALID_SOCKET -1
-# define closesocket close
-
-/* Includes needed for OS/2 systems */
-# include
-# include
-# include
-# include
-# include
-# include
-# include
-# include
-# include
-# include
-# include
-# include
-# define INADDR_NONE 0xffffffff
-# include "../../3rdparty/os2/getaddrinfo.h"
-# include "../../3rdparty/os2/getnameinfo.h"
-
-#define IPV6_V6ONLY 27
-
-/*
- * IPv6 address
- */
-struct in6_addr {
- union {
- uint8_t __u6_addr8[16];
- uint16_t __u6_addr16[8];
- uint32_t __u6_addr32[4];
- } __u6_addr; /* 128-bit IP6 address */
-};
-
-#define s6_addr __u6_addr.__u6_addr8
-
-struct sockaddr_in6 {
- uint8_t sin6_len; /* length of this struct */
- sa_family_t sin6_family; /* AF_INET6 */
- in_port_t sin6_port; /* Transport layer port # */
- uint32_t sin6_flowinfo; /* IP6 flow information */
- struct in6_addr sin6_addr; /* IP6 address */
- uint32_t sin6_scope_id; /* scope zone index */
-};
-
-typedef int socklen_t;
-#if !defined(__INNOTEK_LIBC__)
-typedef unsigned long in_addr_t;
-#endif /* __INNOTEK_LIBC__ */
-
-#endif /* OS/2 */
-
#ifdef __EMSCRIPTEN__
/**
* Emscripten doesn't set 'addrlen' for accept(), getsockname(), getpeername()
diff --git a/src/os/CMakeLists.txt b/src/os/CMakeLists.txt
index e302c448b5..0ec182dfcb 100644
--- a/src/os/CMakeLists.txt
+++ b/src/os/CMakeLists.txt
@@ -1,4 +1,3 @@
add_subdirectory(macosx)
-add_subdirectory(os2)
add_subdirectory(unix)
add_subdirectory(windows)
diff --git a/src/os/os2/CMakeLists.txt b/src/os/os2/CMakeLists.txt
deleted file mode 100644
index 141dd98043..0000000000
--- a/src/os/os2/CMakeLists.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-add_files(
- os2.cpp
- CONDITION OPTION_OS2
-)
-
-if(OPTION_OS2)
- target_sources(openttd PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/os2_main.cpp)
-endif()
diff --git a/src/os/os2/os2.cpp b/src/os/os2/os2.cpp
deleted file mode 100644
index ae49d8633a..0000000000
--- a/src/os/os2/os2.cpp
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * This file is part of OpenTTD.
- * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
- * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see .
- */
-
-/** @file os2.cpp OS2 related OS support. */
-
-#include "../../stdafx.h"
-#include "../../openttd.h"
-#include "../../gui.h"
-#include "../../fileio_func.h"
-#include "../../fios.h"
-#include "../../string_func.h"
-#include "../../textbuf_gui.h"
-#include "../../thread.h"
-
-#include "table/strings.h"
-
-#include
-#include
-#include
-#include
-#ifndef __INNOTEK_LIBC__
-# include
-#endif
-
-#include "../../safeguards.h"
-
-#define INCL_WIN
-#define INCL_WINCLIPBOARD
-
-#include
-#ifndef __INNOTEK_LIBC__
-# include
-#endif
-
-bool FiosIsRoot(const std::string &file)
-{
- return file.size() == 3; // C:\...
-}
-
-void FiosGetDrives(FileList &file_list)
-{
- uint disk, disk2, save, total;
-
-#ifndef __INNOTEK_LIBC__
- _dos_getdrive(&save); // save original drive
-#else
- save = _getdrive(); // save original drive
- char wd[MAX_PATH];
- getcwd(wd, MAX_PATH);
- total = 'z';
-#endif
-
- /* get an available drive letter */
-#ifndef __INNOTEK_LIBC__
- for (disk = 1;; disk++) {
- _dos_setdrive(disk, &total);
-#else
- for (disk = 'A';; disk++) {
- _chdrive(disk);
-#endif
- if (disk >= total) break;
-
-#ifndef __INNOTEK_LIBC__
- _dos_getdrive(&disk2);
-#else
- disk2 = _getdrive();
-#endif
-
- if (disk == disk2) {
- FiosItem *fios = file_list.Append();
- fios->type = FIOS_TYPE_DRIVE;
- fios->mtime = 0;
-#ifndef __INNOTEK_LIBC__
- fios->name += 'A' + disk - 1;
-#else
- fios->name += (char)disk;
-#endif
- fios->name += ':';
- fios->title = fios->name;
- }
- }
-
- /* Restore the original drive */
-#ifndef __INNOTEK_LIBC__
- _dos_setdrive(save, &total);
-#else
- chdir(wd);
-#endif
-}
-
-std::optional FiosGetDiskFreeSpace(const std::string &path)
-{
-#ifndef __INNOTEK_LIBC__
- struct diskfree_t free;
- char drive = path[0] - 'A' + 1;
-
- if (_getdiskfree(drive, &free) == 0) {
- return free.avail_clusters * free.sectors_per_cluster * free.bytes_per_sector;
- }
-#elif defined(HAS_STATVFS)
- struct statvfs s;
-
- if (statvfs(path.c_str(), &s) == 0) return static_cast(s.f_frsize) * s.f_bavail;
-#endif
- return std::nullopt;
-}
-
-bool FiosIsValidFile(const std::string &path, const struct dirent *ent, struct stat *sb)
-{
- std::string filename = fmt::format("{}" PATHSEP "{}", path, ent->d_name);
- return stat(filename.c_str(), sb) == 0;
-}
-
-bool FiosIsHiddenFile(const struct dirent *ent)
-{
- return ent->d_name[0] == '.';
-}
-
-void ShowInfoI(const std::string &str)
-{
- HAB hab;
- HMQ hmq;
- ULONG rc;
-
- /* init PM env. */
- hmq = WinCreateMsgQueue((hab = WinInitialize(0)), 0);
-
- /* display the box */
- rc = WinMessageBox(HWND_DESKTOP, HWND_DESKTOP, (const unsigned char *)str.c_str(), (const unsigned char *)"OpenTTD", 0, MB_OK | MB_MOVEABLE | MB_INFORMATION);
-
- /* terminate PM env. */
- WinDestroyMsgQueue(hmq);
- WinTerminate(hab);
-}
-
-void ShowOSErrorBox(const char *buf, bool system)
-{
- HAB hab;
- HMQ hmq;
- ULONG rc;
-
- /* init PM env. */
- hmq = WinCreateMsgQueue((hab = WinInitialize(0)), 0);
-
- /* display the box */
- rc = WinMessageBox(HWND_DESKTOP, HWND_DESKTOP, (const unsigned char *)buf, (const unsigned char *)"OpenTTD", 0, MB_OK | MB_MOVEABLE | MB_ERROR);
-
- /* terminate PM env. */
- WinDestroyMsgQueue(hmq);
- WinTerminate(hab);
-}
-
-std::optional GetClipboardContents()
-{
-/* XXX -- Currently no clipboard support implemented with GCC */
-#ifndef __INNOTEK_LIBC__
- HAB hab = 0;
-
- if (WinOpenClipbrd(hab)) {
- const char *text = (const char *)WinQueryClipbrdData(hab, CF_TEXT);
-
- if (text != nullptr) {
- std::string result = text;
- WinCloseClipbrd(hab);
- return result;
- }
-
- WinCloseClipbrd(hab);
- }
-#endif
- return std::nullopt;
-}
-
-
-void OSOpenBrowser(const char *url)
-{
- // stub only
- Debug(misc, 0, "Failed to open url: {}", url);
-}
-
-void SetCurrentThreadName(const char *)
-{
-}
diff --git a/src/os/os2/os2_main.cpp b/src/os/os2/os2_main.cpp
deleted file mode 100644
index 9f903e3868..0000000000
--- a/src/os/os2/os2_main.cpp
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * This file is part of OpenTTD.
- * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
- * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see .
- */
-
-/** @file os2_main.cpp Main entry for OS/2. */
-
-#include "../../stdafx.h"
-#include "../../openttd.h"
-#include "../../core/random_func.hpp"
-#include "../../string_func.h"
-
-#include
-
-#include "../../safeguards.h"
-
-int CDECL main(int argc, char *argv[])
-{
- SetRandomSeed(time(nullptr));
-
- /* Make sure our arguments contain only valid UTF-8 characters. */
- for (int i = 0; i < argc; i++) StrMakeValidInPlace(argv[i]);
-
- return openttd_main(argc, argv);
-}
diff --git a/src/os/unix/CMakeLists.txt b/src/os/unix/CMakeLists.txt
index acdc73831f..1e8bb5d63d 100644
--- a/src/os/unix/CMakeLists.txt
+++ b/src/os/unix/CMakeLists.txt
@@ -1,12 +1,12 @@
add_files(
crashlog_unix.cpp
survey_unix.cpp
- CONDITION UNIX AND NOT APPLE AND NOT OPTION_OS2
+ CONDITION UNIX AND NOT APPLE
)
add_files(
unix.cpp
- CONDITION UNIX AND NOT OPTION_OS2
+ CONDITION UNIX
)
add_files(
@@ -14,6 +14,6 @@ add_files(
CONDITION Fontconfig_FOUND
)
-if(UNIX AND NOT APPLE AND NOT OPTION_OS2)
+if(UNIX AND NOT APPLE)
target_sources(openttd PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/unix_main.cpp)
endif()
diff --git a/src/stdafx.h b/src/stdafx.h
index ea90c310b0..b249d97e08 100644
--- a/src/stdafx.h
+++ b/src/stdafx.h
@@ -121,14 +121,6 @@
# define NODISCARD [[nodiscard]]
#endif
-#if defined(__WATCOMC__)
-# define NORETURN
-# define CDECL
-# define FINAL
-# define FALLTHROUGH
-# include
-#endif /* __WATCOMC__ */
-
#if defined(_WIN32)
# define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#endif
@@ -236,7 +228,7 @@
# endif /* _WIN32 or WITH_ICONV */
#endif /* STRGEN || SETTINGSGEN */
-#if defined(_WIN32) || defined(__OS2__) && !defined(__INNOTEK_LIBC__)
+#if defined(_WIN32)
# define PATHSEP "\\"
# define PATHSEPCHAR '\\'
#else
@@ -244,7 +236,7 @@
# define PATHSEPCHAR '/'
#endif
-#if defined(_MSC_VER) || defined(__WATCOMC__)
+#if defined(_MSC_VER)
# define PACK_N(type_dec, n) __pragma(pack(push, n)) type_dec; __pragma(pack(pop))
#elif defined(__MINGW32__)
# define PRAGMA(x) _Pragma(#x)
diff --git a/src/video/dedicated_v.cpp b/src/video/dedicated_v.cpp
index bfd15425f8..4b492c7019 100644
--- a/src/video/dedicated_v.cpp
+++ b/src/video/dedicated_v.cpp
@@ -25,33 +25,6 @@
#include "../window_func.h"
#include "dedicated_v.h"
-#ifdef __OS2__
-# include /* gettimeofday */
-# include
-# include
-# include
-
-# define INCL_DOS
-# include
-
-# define STDIN 0 /* file descriptor for standard input */
-
-/**
- * Switches OpenTTD to a console app at run-time, instead of a PM app
- * Necessary to see stdout, etc.
- */
-static void OS2_SwitchToConsoleMode()
-{
- PPIB pib;
- PTIB tib;
-
- DosGetInfoBlocks(&tib, &pib);
-
- /* Change flag from PM to VIO */
- pib->pib_ultype = 3;
-}
-#endif
-
#if defined(UNIX)
# include /* gettimeofday */
# include
@@ -160,11 +133,6 @@ const char *VideoDriver_Dedicated::Start(const StringList &parm)
_set_error_mode(_OUT_TO_STDERR);
#endif
-#ifdef __OS2__
- /* For OS/2 we also need to switch to console mode instead of PM mode */
- OS2_SwitchToConsoleMode();
-#endif
-
Debug(driver, 1, "Loading dedicated server");
return nullptr;
}
@@ -181,7 +149,7 @@ void VideoDriver_Dedicated::MakeDirty(int left, int top, int width, int height)
bool VideoDriver_Dedicated::ChangeResolution(int w, int h) { return false; }
bool VideoDriver_Dedicated::ToggleFullscreen(bool fs) { return false; }
-#if defined(UNIX) || defined(__OS2__)
+#if defined(UNIX)
static bool InputWaiting()
{
struct timeval tv;
@@ -214,7 +182,7 @@ static void DedicatedHandleKeyInput()
if (_exit_game) return;
-#if defined(UNIX) || defined(__OS2__)
+#if defined(UNIX)
if (fgets(input_line, lengthof(input_line), stdin) == nullptr) return;
#else
/* Handle console input, and signal console thread, it can accept input again */
diff --git a/src/video/sdl_v.cpp b/src/video/sdl_v.cpp
index d33ac77a65..af3571314f 100644
--- a/src/video/sdl_v.cpp
+++ b/src/video/sdl_v.cpp
@@ -446,7 +446,7 @@ static uint ConvertSdlKeyIntoMy(SDL_keysym *sym, WChar *character)
}
/* check scancode for BACKQUOTE key, because we want the key left of "1", not anything else (on non-US keyboards) */
-#if defined(_WIN32) || defined(__OS2__)
+#if defined(_WIN32)
if (sym->scancode == 41) key = WKC_BACKQUOTE;
#elif defined(__APPLE__)
if (sym->scancode == 10) key = WKC_BACKQUOTE;