1. 06 Dec, 2021 3 commits
    • Rob Swindell's avatar
      Don't build sbbsexec.dll by default for debug builds · 366c05de
      Rob Swindell authored
      This build is touchy and requires an explicit path to a Win10 SDK
      directory, so just disable by default for (for debug build). We still
      want this built by default for CI, which are release builds.
    • Rob Swindell's avatar
      Fix FTPS upload failure: !DATA ERROR 0 receiving on data socket · 17a67ee9
      Rob Swindell authored
      Don't treat CRYPT_ERROR_COMPLETE (-24) as a socket error during upload since it's an indication that the remote closed the connection and is the normal "end of file/transfer" indicator, not an error. 'rd' is already 0 in this case, so no need to set at all (since recv() returns 0 upon disconnect and that's what we're emulating here).
      Fixes issue #309 reported by Jas Hud.
    • Rob Swindell's avatar
      Allow local abort/cancel to abort (more) retries/loops · 312daa40
      Rob Swindell authored
      While debugging a SyncTERM upload issue, I came across some scenarios where an out of control file transfer could not be aborted via local key press (e.g. Ctrl-C, Ctrl-Break).
      We use zm.local_abort for all local abort indications (even for X/YMODEM). <shrug>
  2. 03 Dec, 2021 2 commits
    • Rob Swindell's avatar
      Add sbbsexec.dll project (again) · b15bd564
      Rob Swindell authored
      Regenerated for MSVC2019, the Synchronet virtual UART/FOSSIL driver (VDD) can be built from Visual Studio again (the makevdd.bat can probably go away now). I haven't had an MSVC project to build this DLL since the old MSVC 6.0 sbbsexec.dsp file.
      A few oddities about this project:
      1. xpdev files had to directly included/compiled in this project rather than linking with the xpdev_mt.lib because __stdcall calling convention is required for compatibility with ntvdm.lib and xpdev_mt.lib is built using __cdecl calling convention (the default). Rather than re-introducing the calling convention game-playing that I just recently removed (e.g. #define DLLCALL), just build the required xpdev files directly as part of this project. Perhaps there is a more elegant solution that I'll revisit later.
      2. The absolute path of my install Windows 10 SDK directories had to be specified (for include and library paths) to find vdd_svc.h and ntvdm.lib. Weird thing is that I didn't have to do anything hacky like this with the command-line/batch file build method. Again, there's probably a better solution I'm not seeing. But as is, this project might not build on other systems.
      So why use this rather than the brute-force batch file (makevdd.bat)? Well, this should be a little easier to get into CI/nightly builds and the resulting release build was 30KB (instead of 150KB), so that's good.
                 1AA00 size of code
                  AA00 size of initialized data
                     0 size of uninitialized data
                  4C00 size of code
                  2A00 size of initialized data
                     0 size of uninitialized data
      Those default DLL project build options include some good optimization flags apparently.
    • Rob Swindell's avatar
      Work around GetVersionEx deprecation warning/error · 01bda6a8
      Rob Swindell authored
      For some reason this deprecation warning is being treated as an error (and only with newer Windows platform SDKs). Just disable this warning for the GetVersionEx line.
      See https://stackoverflow.com/questions/22303824/warning-c4996-getversionexw-was-declared-deprecated for details.
  3. 01 Dec, 2021 4 commits
    • Rob Swindell's avatar
      Remove the last remnants of Win9x/Me support · 717592bc
      Rob Swindell authored
      Allow "FOSSIL Only" as a configuration option for external programs in SCFG. This is a much easier method of disabling the virtual UART support in the Virtual UART/FOSSIL device driver (if/when necessary) than editing the sbbsexec.ini file (which is still supported).
    • Rob Swindell's avatar
      Fix some FOSSIL functions · 18bcbeb7
      Rob Swindell authored
      Function 0Ch (peek) never worked correctly (character was not returned in AX); I guess nothing uses this function (?).
      Function 01h (transmit char w/wait) now will set the timeout flag (0x8000) in the AX if the VDD_WRITE function fails (returns value other than 1).
      Optimize Function 18h (read block) - no need for the extra VDD_STATUS call.
      Use newly defined FOSSIL macros instead of magic numbers of port status bits.
      Log the git branch/hash values to the Windows debug log (via sbbsexec.dll).
    • Rob Swindell's avatar
      The sem_wait() call was just a bad idea after-all · 48874e1e
      Rob Swindell authored
      The sem_wait() call from vdd_read() that was fixed in the previous commit to this file was a bad idea to begin with:
      There is (often) not a 1:1 ratio of bytes in the receive ring buffer and the semaphore count, so we'd often halt here waiting for the semaphore to be signaled even though there were still characters in the receive buffer. This caused (new) stalls/hangs in keyboard input in DOS door games. We didn't see this previously because the sem_wait() call just didn't work (wrong semaphore pointer value).
      Now, call sem_trywait_block() in vdd_read(), but only if the RingBufRead() returned 0 (no bytes read) and even then, only block/wait for a maximum of 30 seconds (same as X00 FOSSIL driver). This blocking behavior is specified for FOSSIL function 02h (Get received character with wait) and would not have worked previous to the previous "fix", so now we have that corrected behavior too. The FTSC spec says the wait is indefinite, but I think a 30 second timeout (ala X00) is more reasonable.
      Log the git brach/hash instead of the old CVS revision.
      GetMailSlotInfo() apparently always fails on Windows 7 with error 87 (even using Microsoft's own sample code), so lower the log message severity of that failure from ERR to DEBUG. Apparently this is pretty harmless anyway as nothing really needs the write-mailslot status. <shrug>
    • Rob Swindell's avatar
      Add a debug line when wrapping split-screen chat lines. · 39c82c50
      Rob Swindell authored
      Is this the point when the lost chars problem happens?
  4. 30 Nov, 2021 6 commits
  5. 28 Nov, 2021 2 commits
  6. 26 Nov, 2021 10 commits
  7. 24 Nov, 2021 2 commits
    • Rob Swindell's avatar
      Implement FOSSIL function 0Dh (Keyboard read without wait) · a87ecd0f
      Rob Swindell authored
      As a work around for TradeWars 2 (v11.14 and v11.20) FOSSIL support:
      This door game would never call the FOSSIL "get received character"
      function (02h) . But I did notice that it was calling the "Keyboard
      read" functions. I never implemented the "Keyboard read" functions
      (figured the door game could read the keyboard itself if it wanted to),
      but appparently TW2 won't ever read the COM port (using function 02h)
      unless the Keyboard read function returns AX=0xFFFF (no keyboard data
      available). So now, I just do that and TW2 works (with FOSSIL I/O).
      Incremented the revision to 26.
      Logging the Git branch/hash and other helpful FOSSIL-debug stuff now.
    • Rob Swindell's avatar
      Continuation of previous commit (support for UART-only doors on Windows) · 5cf93814
      Rob Swindell authored
      Needed the actually mapping of XTRN_UART -> EX_UART mode flag here.
  8. 23 Nov, 2021 3 commits
    • Rob Swindell's avatar
      Allow FOSSIL mode of the Win32 virtual UART/FOSSIL driver to be disabled · 5b36ab9a
      Rob Swindell authored
      When configuring an external program, a Win32 sysop can now choose to *only* enable the virtual UART (and not the FOSSIL driver) feature of the Synchronet virtual UART/FOSSIL driver (dosxtrn.exe/sbbsexec.dll). Some programs (e.g. TradeWars 2) will always use the FOSSIL driver if one is detected and in order to force the use of COM/UART driver for I/O (if that is desired), then one must disable the FOSSIL driver. It's a rare use case, but I can see the potential need.
      Renamed the "Intercept I/O" option in SCFG to "I/O Method" and make it clear that "Socket" (for native programs) and "FOSSIL or UART" (for 16-bit DOS programs) is the default method (what was previously identified as "No" I/O Interception).
      If a sysop want to disable the virtual UART support (on Win32, e.g. so *only* FOSSIL is available to one or all DOS programs), they do that via their sbbsexec.ini file.
    • Rob Swindell's avatar
    • Rob Swindell's avatar
      MSVC 1.5c defines _MSDOS, not __MSDOS__ · b1fcb452
      Rob Swindell authored
      This change needed to build dosxtrn.exe (again).
  9. 19 Nov, 2021 1 commit
  10. 18 Nov, 2021 5 commits
  11. 17 Nov, 2021 1 commit
    • Rob Swindell's avatar
      Include twit-listed sender name in quotes in log message · 3c55d333
      Rob Swindell authored
      Since mail server log messages have their white-space condensed, it was not obvious why some sender's name would match a twitlist.cfg line that filters names beginning with a space: "\ *" because the initial space of the sender's name was condensed/combined with space before it in the log message.
  12. 16 Nov, 2021 1 commit
    • Rob Swindell's avatar
      Initialize time zone variable (zone) · ed1f4ab1
      Rob Swindell authored
      As found and reported by Talisam author, apam (HAPPYLND).
      sscanf() won't initialize the buffer of the argument passed if the format string is not matched, so when there was no hexadecimal/SMB timezone value, the timezone specified in the ISO date/time string (if any) would be overwritten with 0, converted from the uninitialized 'zone' variable (unlikely to be valid hex-ASCII chars). Thanks apam!