Releases: Projanglez/FTP4DOS
Release list
FTP4DOS v1.3.0
Memory, throughput, and no more silent failures - mostly aimed at machines with little conventional memory left.
- An empty remote pane now says why. A connect that succeeded but whose first
LISTfailed used to leave a blank blue pane and no message. Failed listings are reported, with the free-memory figure in the dialog, and Ctrl-R checks the same thing so a refresh that errored out can no longer look like a successful one. - Data connections shrink to fit instead of failing. The 16 KB receive buffer is halved until it can be allocated, so a tight machine transfers more slowly rather than not at all. The XMS/EMS listing store does the same with its index table.
- The panel's ~30 KB conventional buffer is allocated only when it is used - the remote pane normally runs on XMS/EMS and used to reserve a copy it never touched.
- "Check MTCPCFG" is no longer the answer to every startup failure. Out of memory is told apart from a broken configuration and reported as what it is.
- Cancelling a transfer returns immediately. Esc during a download could freeze for ~30 s when the server ignored the in-band
ABOR; that wait is now bounded and overlaps the socket close. - Throughput tuning for fast links at the default MTU (reported: 753 KB/s at MTU 576 against 11 MB/s at 1500): more packet buffers and a bigger per-socket ring, because at MSS 536 the same number of bytes arrives as 2.7x as many packets.
- Downloading several marked files no longer collapses them onto one name.
Dateiname1.txtandDateiname2.txtboth mangled toDATEIN~1.TXT; names are now unique within the batch, though still never resolved against the disk, so re-downloads still raise the overwrite prompt. - New
/LD:DIR- the local counterpart of/D:. Opens the left pane in a directory, a drive, or both (/LD:D:,/LD:D:\DOWNLOAD). /LASTCONon a connection saved without its password opens the connect dialog prefilled instead of failing the login.
SHA-256 (FTP4DOS.EXE): 9fbc44c10b5fd5e69864fba6d1dc372342a792dc452b00e6a7d2255fc7ce99b9
FTP4DOS v1.2.1
Performance fix for /EXMEM (now the default remote-panel backend).
- Cursor movement no longer rescans the whole listing. The status bar's
marked-count/size/dir-count were recomputed by scanning every entry on each
arrow-key press, even with nothing marked.
No user-visible feature changes, no command-line or file-format changes.
SHA-256 (FTP4DOS.EXE): d4615f0b7cd54c1cc4dd8e3014935ba2339d1e6b61b328e2d6c916be5e6a87ae
FTP4DOS v1.2.0
Image viewing
F3 (or Enter) on a picture now shows it, full-screen in 320x200 with 256
colours on any VGA — no VESA BIOS or SVGA card needed. The format is taken from
the file's content, not its name.
| Format | Decoded |
|---|---|
| BMP | 1/4/8/24/32 bpp; uncompressed, RLE8, RLE4 |
| PCX | RLE, 1/2/4/8 bpp |
| GIF | 87a and 89a, interlaced; first frame of an animation |
| PNG | greyscale, palette, RGB, RGBA, 1–16 bits |
Pictures open fitted to the screen; the zoom level is shown in the top right
corner.
| Key | Action |
|---|---|
+ / - |
Zoom: fit, 25, 50, 100, 200, 400, 800 % |
* |
1:1 |
f, Enter |
Fit to screen |
| Arrows | Pan |
| PgUp / PgDn | Pan a screen at a time |
| Home / End | Top-left / bottom-right |
Esc, q |
Close |
Zooming is not a luxury here: a 720x400 screen capture fitted to 320x200 loses
three quarters of its pixels and the text in it stops being readable.
Palette images get their exact colours, loaded straight into the VGA DAC.
Truecolour is dithered to a fixed colour cube; PNG alpha is composited rather
than discarded.
Not decoded: JPEG, TIFF, interlaced PNG. These give a clear message rather
than a wrong picture.
Memory
A picture needs about 100 KB of free conventional memory — F1 now reports
how much you have. Pan and zoom additionally need XMS or EMS, because the
decoded picture is held there between redraws; without extended memory the
fitted view still works.
Verified on real 386 hardware.
FTP4DOS.EXE — 327,014 bytes
SHA-256 03f3021bc63254fdc1d4f84352d9a685af7bd68851d2a1264d25a3f9cd7f0d55
ftp4dos-mtcp-src-2025-01-10.zip is the unmodified mTCP source this binary
links against (official repository, release tag 2025-01-10, commit d68948f).
Together with this repository at tag v1.2.0 it is the complete corresponding
source (GPLv3 §6).
FTP4DOS v1.1.0
FTP4DOS can now update itself, and every update is signed.
Press Alt+F10 to check for a new version. You get its version, date, size,
full SHA-256 and release notes, and nothing is downloaded until you say so. The
swap happens when FTP4DOS exits — the previous executable is kept as
FTP4DOS.BAK — and FTP4DOS can restart itself into the new version.
How updates are authenticated
mTCP has no TLS, so updates travel over plain HTTP. Authenticity does not come
from the connection but from a signature:
- The manifest naming the new version and its SHA-256 is signed with RSA-2048.
- The matching public keys are compiled into FTP4DOS.
- The signature is verified before the manifest is read, and the downloaded
executable must match the SHA-256 the signed manifest states. - If either check fails the update is refused. There is no way to override it.
Nobody on the network path — and neither GitHub nor Cloudflare, which carry the
files — can produce an update FTP4DOS will install. They can stop updates from
arriving; they cannot substitute one.
The SHA-256 of this build is shown in the update dialog and listed below, so it
can be compared by hand.
New
- Alt+F10: check for updates
/UPDATECHECKand/NOUPDATECHECKswitches- Optional check on startup, off by default, at most once a week, and it
never does more than write a line in the status bar. Enable it with
updcheck=1inFTP4DOS.SAV FTP4DOS_UPDHOST/FTP4DOS_UPDPORTinMTCP.CFGpoint the updater
somewhere else — the signature check applies either way
Under the hood
- SHA-256 and an RSA-2048 PKCS#1 v1.5 verifier, both 16-bit real mode, no
assembly, still built with-0— the 8086 compatibility promise is unchanged - The socket-to-disk transfer core moved into
netcore.cpp, so HTTP downloads
take the same proven path as FTP, including the Silly Window Syndrome
handling that large transfers depend on - Tested on real 386 hardware: crypto self-test, timings, the full update flow
including the swap and the automatic restart
Downloads
- FTP4DOS.EXE — the DOS executable
- UPDATE.INF / UPDATE.SIG — the signed update manifest, used by the
in-application updater - ftp4dos-mtcp-src-2025-01-10.zip — the exact mTCP sources this build links
against (GPLv3 section 6)
Full release history: HISTORY.md
FTP4DOS v1.0.1
A bug-fix and minor improvement release for the v1.0.0 feedback round in the VOGONS thread — thanks to Yoghoo, ntalaec, Grzyb and fly_indiz for the reports. Verified on real 386 hardware.
Fixed
- Downloads on systems with long filename support. They could fail with "Cannot create local file" — or, worse, report success and write a 0-byte file — on DOSBox-X, MS-DOS 7.x + DOSLFN and Windows 9x DOS. A long-named target was created through the DOS extended-open call and the handle handed to the C library, which does not accept a handle it did not open itself. The long name is now created first and all file I/O goes through its 8.3 alias.
- "550 No such file" on entries plainly visible in the pane. In directories with many long names the name buffer ran dry after a few hundred entries and the truncated 39-character prefix went out verbatim in
RETR/CWD/DELE. Name storage now lives in XMS/EMS — a 2800-entry directory keeps every name — and anything that still will not fit is marked>and refused up front instead of drawing a server-side error. - Recursive copies no longer abort at 400 entries per directory (2048 now, stepping down only as far as free conventional memory requires; a plain DOS game directory with 549 images was enough to hit the old ceiling).
- Cancelling a transfer completes in well under a second (~0.9 s on a 20 MB download) instead of freezing the progress dialog for up to 20 seconds.
- Progress, speed and ETA keep moving during a recursive copy. Small files that arrived in one go never reported their bytes, so in a tree of many small files the whole display froze on whatever the last large file had left behind. The estimate now also accounts for per-file overhead (
PASV/RETR/226round trip, open/close, listing each level) instead of extrapolating a pure byte rate, and directory copies show the total remaining time, not just the per-file one. - Real timestamps for remote files via
MLSD(RFC 3659), with automatic fallback toLIST.ls -lomits the time of day for entries older than about six months, which is why archive directories showed00:00on every row; whereLISTis still used those entries now show the year. Note thatMLSDreports UTC. - The local pane preserves the case of long file names (the Norton uppercase/lowercase convention now applies only to genuine 8.3 names), and 8.3 names on the FTP side are shown lowercase to match. Also fixed: an empty directory on an LFN system could show no
..entry.
New
- Extended memory is used automatically — no more
/EXMEM. XMS/EMS is used whenever it actually yields more entries than the 512 of the conventional list, so a machine with little free XMS silently keeps the proven path./NOEXMEMopts out entirely;/EXMEM:XMS//EXMEM:EMSstill force a backend. /LASTCON: connect straight to the last used connection on startup, with no dialog —FTP4DOS /Q /LASTCONneeds no batch file.- Transfer diagnostics:
FTP4DOS_XFERLOGinMTCP.CFGwrites one line per second during a transfer (elapsed time, bytes total, bytes in the last second, receive/idle/disk-write counts, buffer fill). Off by default, and unlike per-packet tracing it does not distort the timing it measures.
Downloads
FTP4DOS.EXE— the DOS executable.ftp4dos-mtcp-src-2025-01-10.zip— unmodified mTCP source (Michael B. Brutman, GPLv3), provided to satisfy the license; generated from the pinned submodule commitd68948fand unchanged in content since v0.9.5.
Full release history: HISTORY.md
FTP4DOS v1.0.0
The official 1.0.0 release. Includes last optimizations and much of the feedback in the VOGONS thread — special thanks to fly_indiz and ntalaec.
Fixed
- Long file names work in more setups. The v0.9.6 LFN support had only ever been exercised on plain DOS: detection now uses the documented Get Volume Information call instead of an undocumented probe that only Windows 9x answers (fixes DOSLFN on MS-DOS 7.x), the find-data record layout and attribute mask were wrong (garbage names, missing directories), and all file operations now route through the LFN API or the 8.3 alias. Enter long-named directories, view/copy/delete/rename long-named files, download to long names, create long-named directories — on Windows 9x DOS, MS-DOS 7.x, and DOSLFN.
- Steadier download speeds. Disk writes no longer starve the network stack: the file buffer is flushed in slices with packet processing in between, avoiding the burst/stall sawtooth seen on real hardware.
- Cancelling a download is instant instead of freezing the progress dialog for up to 10 seconds — ABOR is now sent while the data connection is still open, mirroring the upload path.
- Control-connection resync. Stale replies left over from aborted or timed-out transfers no longer desync later commands (the reported "PASV refused (257)"). A server-side idle timeout (421) now cleanly reports "connection lost" instead of failing on the next command.
- Full screen mode fix The full available space is now used for displaying long file names in full screen mode
- Minor bugfixes: UTF-8 remote paths are codepage-converted in the pane header (file lists already were), and the cursor is correctly reselected after leaving a UTF-8-named directory, Deterministic 8.3 download names for long remote names, Move+Skip no longer loses files, overflow guard for >4 GB transfer counters.
New
/SITESswitch: open the site manager directly on startup.
Downloads
FTP4DOS.EXE— the DOS executable.ftp4dos-mtcp-src-2025-01-10.zip— unmodified mTCP source (Michael B. Brutman, GPLv3), provided to satisfy the license; generated from the pinned submodule commitd68948fand unchanged in content since v0.9.5.
Full release history: HISTORY.md
FTP4DOS v0.9.6
Feature release, driven by feedback in the VOGONS thread — thanks to mbbrutman, ntalaec, Falcosoft, Grzyb and fly_indiz.
New
- Faster transfers + tunable buffers. Downloads now collect received data in a dedicated file buffer and write to disk in large blocks instead of many small per-packet writes — a big speedup on machines where small disk writes are expensive (uploads read in the same large blocks). The sizes are configurable in your mTCP configuration file (advanced, totally optional — the defaults work fine out of the box):
FTP4DOS_TCP_BUFFER(512–16384, default 16384) andFTP4DOS_FILE_BUFFER(512–32768, default 8192). The mTCP FTP client settingsFTP_TCP_BUFFER/FTP_FILE_BUFFERare read as fallbacks, so an already tunedMTCP.CFGjust works. See the README's "Performance tuning" section. - UTF-8 file name support (RFC 2640). Names from modern servers are converted to the active DOS codepage (CP437, CP850/858, CP866; override with
FTP4DOS_CODEPAGE) for panel display and local file names, while the original name is still used on the wire. Uploads to servers that announceUTF8in FEAT are encoded back to UTF-8 (OPTS UTF8 ON). - Long file names (LFN) in the local panel on systems with an LFN API (Windows 9x DOS, MS-DOS 7.x, or DOSLFN on plain DOS): long names are listed and handled natively.
Changed
- mTCP is now a git submodule of the official repository https://github.com/mbbrutman/mTCP, pinned to the
2025-01-10release tag — replacing the manually unpacked source zip (verified source-identical). Build withgit clone --recursiveorgit submodule update --init.
Downloads
FTP4DOS.EXE— the DOS executable.ftp4dos-mtcp-src-2025-01-10.zip— unmodified mTCP source (Michael B. Brutman, GPLv3), provided to satisfy the license; generated from the pinned submodule commitd68948fand unchanged in content since v0.9.5.
FTP4DOS v0.9.5a
Maintenance release over v0.9.5.
Fixes
- Downloading files with multi-dot / long names (e.g.
apack-1.00.zip) no longer fails. The local target is now mapped to a valid DOS 8.3 name (e.g.APACK-1~1.ZIP) instead of failing to create the file. Applies to both the F5 single-file download and batch copy. - Ctrl+C now works as a shortcut for "compare panels" (the numpad
+action). The keyboard is read via the BIOS (INT 16h), so Ctrl+C is no longer swallowed by DOS and no longer echoes a stray^C.
Changes
- Date and Time sorting merged into one "Date/Time" criterion. A file timestamp is a single entity (date major, time minor); the old separate, time-of-day-major "Time" sort was removed. Sort menu (Alt+F3) now lists Name, Extension, Size, Date/Time, Default.
- Minor F1 help text wording/consistency tweaks.
Downloads
FTP4DOS.EXE— the DOS executable.ftp4dos-mtcp-src-2025-01-10.zip— unmodified mTCP source (Michael B. Brutman, GPLv3), provided to satisfy the license; unchanged since v0.9.5.
FTP4DOS v0.9.5
Feature release over v0.9.4a.
New
- Site manager — save and load multiple named FTP connection profiles (host, port, user, password, start directory) in
FTP4DOS.SIT. Open it from the [Manage...] button in the F2 connect dialog: Ins = new (pre-filled from the current fields), F4 = edit, Del = delete; Enter connects. - Large remote directories (
/EXMEM) — by default a listing holds 512 entries and a popup warns when a directory has more. Start with/EXMEM(auto-detect) or/EXMEM:XMS//EXMEM:EMSto store the remote list in extended (XMS) or expanded (EMS) memory instead, lifting the limit to several thousand entries. A compact conventional sort-key cache keeps sorting fast. - Search / jump-to-name — Alt+F7 or Ctrl+F: type a prefix and jump to the next matching entry, wrapping to the top.
- Long remote file names — names longer than the 8.3/40-char column are kept in full and used for transfers; Alt+F2 "Detail" shows the complete name.
- Full-screen toggle — Alt+F8 makes the active panel span all 80 columns so long remote file names are readable; Tab switches which panel is maximized.
- Per-session conveniences — remembered per-pane sort order, an FTP start directory in the connect dialog (and
/D:DIR), Ctrl+A (Detail) and Ctrl+R (Refresh) shortcuts, and F9 = Refresh.
Fixes
- Entering a remote directory whose name exceeds 39 characters no longer fails with
550; the cursor stays put when a directory change fails. - Connect dialog: Left/Right now move between buttons, and labels/titles are clearer.
Assets
FTP4DOS.EXE— the DOS executable (real-mode 386, large model).ftp4dos-mtcp-src-2025-01-10.zip— the official mTCP source (version 2025-01-10) this build links against, provided per GPLv3 §6.
FTP4DOS v0.9.4a
Maintenance/feature update over v0.9.4.
Changes
- Remote panel: the
..(parent) entry is no longer shown at the FTP root directory, where there is no parent. - New — Alt+F2 "Detail": popup showing the selected entry's full filename (the panel column truncates long FTP names) plus its size in Bytes, KB, MB and GB.
- New — Alt+F5 "Refresh": re-read the active panel's directory, e.g. to pick up a file newly added on the FTP server. Both labels appear on the function-key bar while Alt is held.
- File sizes are now displayed consistently throughout the app using the classic 1024-based KB/MB/GB convention.
Assets
FTP4DOS.EXE— the DOS executable (real-mode 386, large model).ftp4dos-mtcp-src-2025-01-10.zip— the official mTCP source (version 2025-01-10) this build links against, provided per GPLv3 §6.