• exec/ftpclient.jsdocs/v32

    From Rob Swindell (on Debian L@VERT to Git commit to main/sbbs/m on Sat Sep 19 15:48:00 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/fa07ec6808f54334ed5bf73c
    Added Files:
    exec/ftpclient.js
    Modified Files:
    docs/v322_new.md exec/CLAUDE.md GNUmakefile Makefile exec/load/ftp.js Removed Files:
    exec/ftp.src
    Log Message:
    Port the Baja FTP client to JavaScript as ftpclient.js

    ftpclient.js replaces ftp.src/.bin, using the load/ftp.js library for the protocol itself. Same commands (open, close, dir, pwd, cd, pasv, ascii,
    hash, debug, get, put, delete, quit and ?), same help screen with the
    current mode settings, same response echoing (with debug adding the
    commands sent), and the same auto-connect from the module's argument.
    'get' still downloads to the temp directory and sends the file to the
    user; 'put' receives from the user and uploads.

    It is NOT named ftp.js: load() resolves a bare filename from the calling script's own directory first, so an exec/ftp.js would shadow the exec/load/ftp.js library for wget.js, qnet-ftp.js and any other script
    that requires 'ftp.js'. Sysops running this module as "?ftp" will need
    to change that to "?ftpclient".

    New: an optional port ("open host 2121" or "open host:2121") and 'ls' as
    an alias for 'dir'. Control characters are now stripped from everything
    the server sends, so a hostile server can't drive the user's terminal
    with Ctrl-A codes.

    load/ftp.js gains an optional progress callback, called with the running
    byte count during transfers, which is how the client prints hash marks;
    nothing else sets it. list() with no path now sends "LIST" rather than
    "LIST " with a trailing space.

    Only matrix.src is left to build in exec/, so the makefiles now have one target.

    Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net