Repository navigation
Native apps for Windows, macOS and Linux - #3
Merged
Merged
Conversation
A plain C library with no I/O of its own, so the Windows, macOS and Linux apps can each be only views: the AT session (commands, their responses, the call's state from the result codes, hanging up through the escape), the settings model from AT!M, the call statistics from AT#UD, a small ANSI terminal screen for the configurator, and reading dmodemd's start-up lines. Tested against dmodemd's own output. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01B82eRVTPinTtLUajudobBC
Starts dmodemd as the user and opens its pty, or opens a modem that already runs. Five pages: Modem (state, dial, answer, hang up, start and stop, the device for other programs), Terminal (a VTE on the modem, with the full-screen and command-line setup), Settings (a row for each of the modem's settings from AT!M, applied at once; the init string), Call Stats (AT#UD as rows, and ATI11) and Log (dmodemd's output). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01B82eRVTPinTtLUajudobBC
- windows/: the Windows app in plain Win32 C++ (ANSI APIs, Win95 common controls, Winsock 1.1), so that it runs on Windows 95 and later: Modem, Terminal, Settings, Call Stats and Log pages over libdmodemctl. dmodemd is started where Windows can run it; on 9x the app reaches a modem over TCP or a COM port. build-watcom.sh builds it with Open Watcom; CMake builds it with MinGW or MSVC. - macos/: the SwiftUI app (XcodeGen project), with the terminal drawn from libdmodemctl's screen, the SIP password in the keychain. - The app icon (assets/dmodem.svg, from the brand's jack art) as .ico and an asset catalogue, by tools/icons.js and tools/icons.py. - libdmodemctl: anonymous enums (Swift imports them as constants), Backspace as BS (the modem's S5), key table without designated initialisers. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01B82eRVTPinTtLUajudobBC
- .github/workflows/build.yml: Linux (with the tests, and again with ASan and UBSan), Windows 95 and later with Open Watcom, Windows with MSVC, and macOS with XcodeGen and xcodebuild. - libdmodemctl: a line over 4 KiB keeps its end, not its start. AT!CF sends its screens with no line ends and its OK after the last one, so the OK was lost and the app stayed in the configurator after Alt-X. - Windows: the pages without WS_CLIPCHILDREN, so that the page paints inside its group boxes. - Screenshots of the Windows app, run under Wine against dmodemd. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01B82eRVTPinTtLUajudobBC
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01B82eRVTPinTtLUajudobBC
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01B82eRVTPinTtLUajudobBC
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01B82eRVTPinTtLUajudobBC
…fore stopping Open Watcom's C takes only constants in an aggregate's initialiser. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01B82eRVTPinTtLUajudobBC
…tant) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01B82eRVTPinTtLUajudobBC
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by Sydney · project thread
Summary
Three native desktop apps for D-Modem, built on one shared C library:
core/): a small C library with no I/O and no threads. It handles the AT session (command queue, call state, escape and hang-up, caller ID), the settings model from AT!M, the call statistics from AT#UD, a VT100 screen, and dmodemd's startup lines. It has 230+ checks, also run under ASan and UBSan.linux/): GTK 4, libadwaita and VTE.windows/): plain Win32 C++98 with ANSI APIs, so one binary runs on Windows 95 through 11. It builds with Open Watcom (build-watcom.sh) and also with MinGW or MSVC through CMake. On 9x it connects to a modem over TCP or a COM port.macos/): SwiftUI, with the project generated by XcodeGen. The SIP password is kept in the keychain.All three have the same pages: Modem, Terminal (including the modem's AT!CF and AT!CT setup screens), Settings, Call Stats and Log. They use the brand icon and banner. The design is described in
docs/design.md.This depends on D-Modem/D-Modem's AT!M pull request for the Settings page. Without it, the other pages still work.
Testing
docs/images).Generated by Claude Code