davidrg / ckwin

Kermit 95 (C-Kermit for Windows) - scriptable internet and serial communications with terminal emulation
Other
60 stars 15 forks source link

[Feature request] Windows 3.1 in 386 enhanced mode with Win32s #303

Open kristibektashi opened 1 week ago

kristibektashi commented 1 week ago

Windows 3.1 (and later, including Windows for Workgroups 3.11) can run 32-bit apps, provided they are running in 386 enhanced mode and Win32s is installed. (Win32s is a subset of the Win32 API that allows 16-bit Windows 3.1 OS to run a limited set of 32-bit applications). Generally Windows NT 3.1 applications do run in Win32s (afaik) so perhaps the NT 3.1 build could be extended to support Windows 3.1 with Win32s as well.

Some versions of Internet Explorer for Windows 3.1 (the 16-bit ones) add modem support to the OS (I believe the "full" versions of IE include it while the "lite" ones don't) and you can also add support for TCP/IP either via a third-party stack such as Trumpet Winsock, or, if you're running Windows for Workgroups 3.11, Microsoft's own TCP/IP stack (and if you're not you can also simply install an MS-DOS networking client such as this one)

Installing Windows 3.1 for testing is super easy and can be acomplished with numerous software, such as DOSBox

(Yes I know this is kinda pointless, but since pretty much every other Windows platform is supported, and considering Windows NT 3.1 builds are already being provided, I don't see why not)

davidrg commented 1 week ago

Win32s is something I looked into a year or two back as it seems like it really should be possible even if it was without network support. It can be built with Visual C++ 1.0 32-bit edition, it at least executes on NT 3.1 (it just exposes bugs in its TCP/IP stack preventing it from working), it doesn't require Unicode at all (it supports Windows 95), and it doesn't even assume or require long-filenames. Kind of seems like a perfect candidate for Win32s.

But it turns out one of the features Win32s leaves out is threading. This was pretty surprising to me but I guess Internet Explorer and Outlook Express must be single-threaded. Or at least there was a way of building them without threading. Unfortunately Kermit 95 has no such build option. Its always needed threads (even on 16bit OS/2) and it would be a huge undertaking to make them optional.

Back in 1995 Columbia just recommended people use the free MS-DOS Kermit rather than attempt to support Win32s and I guess that will have to remain the case unless some library that can provide threading and the Event APIs on Win32s turns up.