-
-
Notifications
You must be signed in to change notification settings - Fork 5
Releases: BlitterStudio/dopus5
DOpus5 5.101
Directory Opus 5.101 is a maintenance and portability release with new target packages, FTP/SFTP upgrades, filesystem compatibility fixes, refreshed documentation, and several late-cycle UI and stability fixes.
Downloads
DOpus5_101_os3.lha- AmigaOS 3, 68020+DOpus5_101_os3-68000.lha- AmigaOS 3, plain 68000 systemsDOpus5_101_os4.lha- AmigaOS 4DOpus5_101_mos.lha- MorphOSDOpus5_101_i386-aros.lha- AROS i386 ABIv0DOpus5_101_x86_64-aros.lha- AROS x86_64 ABIv11
OS3 68000 Package Replacement
The DOpus5_101_os3-68000.lha archive was replaced on May 9, 2026 to fix a startup Guru 8000 0003 on plain 68000 AmigaOS 3 systems. The crash was caused by an odd-aligned built-in CatComp string block being parsed with word/long reads while scanning modules at startup.
- Previous OS3 68000 asset:
sha256:e16c9c8134444148c8101adaf4e1e60173e840a7f4d2f384f68f1ee6204a14cb, 1,566,581 bytes. - Replacement OS3 68000 asset:
sha256:9f0b9cc186bba29cc92f36a7ea8bf2a18c5ea8316b065e6ed629764fc0039132, 1,566,638 bytes. - Commit with the fix:
c71745f.
Highlights
- Added SFTP support to the FTP module and improved FTP/FTPS/SFTP UTF-8 filename handling through
codesets.librarywhen available. - Added first-class AROS i386 and x86_64 release packages, plus a separate AmigaOS 3 68000 package for plain 68000 machines.
- Improved
format.modulehandling for Long File Names, including FastFileSystem version gating and PFS awareness. - Improved backdrop and icon-mode behavior, including Workbench-order type sorting, row-fill cleanup, stable label baselines, and Resize to Fit menu gating.
- Added GUI controls for previously hidden Environment options and cleaned up dead
ENV:variables. - Refreshed
DOpus5.guide, clarified public headers, updated package layout, and aligned drawer naming underDOpus5.
Late-Cycle Fixes
- Fixed OS3 titlebar drawing so the clock, memory text, and custom title text use the real screen bar height on newer
intuition.libraryversions. - Restored Environment / Lister Options spacing around the Icon Action double-click row.
- Fixed the About requester copyright block so it stays within the requester.
- Removed the dead Custom Screen Title Internet Time code from the formatter, configuration popup, and translated catalogs.
- Fixed Custom Screen Title memory substitutions so plain byte values honor the locale thousands-separator setting, matching the K/M/G/S forms. This closes issue #81.
- Hardened
print.modulestring handling for user-supplied title, output path, wrap buffer, and header/footer text, closing the V-001 CWE-120 buffer-overflow report. - Kept that
print.modulehardening compatible with the OS3 toolchain by using local bounded copy/append helpers instead of unavailable BSDstrl*symbols.
Validation
The 5.101 tag was built by GitHub Actions run 25598614157. The run passed host FTP/SFTP tests, AROS debug builds, debug and release package builds for OS3, OS3 68000, OS4, MorphOS, i386 AROS, and x86_64 AROS, and uploaded the release assets above.
The replacement OS3 68000 archive was built locally with sacredbanana/amiga-compiler:m68k-amigaos using make os3-68000 release debug=no. The packaged DOpus5/Libs/dopus5.library was extracted and compared against the rebuilt source/bin.os3-68000/dopus5.library.
Full changelog: 5.100...5.101
Assets 8
5.100
Explicit FTPS support and archive lister fix
Program bumps to 5.100, library and modules to 73.4, and commands remain at 65.1.
FTP / FTPS
- Add explicit FTPS support backed by AmiSSL/OpenSSL, including protected control/data channels and optional TLS certificate verification.
- Expose FTP security settings in FTP Options and
FTPConnect, includingftps://andftp://URL scheme handling plus common FTPS mode aliases. - Prefer EPSV passive transfers, fall back safely for unroutable PASV hosts, and harden command/list parsing.
- Improve MLSD fallback behavior, reconnect handoff, stale error cleanup, and FTPS copy fallbacks.
- Block direct FTPS site-to-site copy because the data channel cannot be protected end-to-end there.
- Add host-side FTP parser, LIST command, and TLS tests, and run them in CI before the platform release builds.
Covers PR #7 (feature/ftp-ftps), 34 non-merge commits.
XADOpus
- Avoid empty lister entries for trailing-slash directory records when browsing archive subfolders.
- Keeps lister directory detection aligned with the 5.99 extraction fix for non-Amiga LHA directory entries.
Covers PR #8 (fix/xadopus-archive-lister-empty-entries).
Release / Build
- Ensure release archives preserve executable protection bits for the library and modules when built from Linux.
Validation
make -C source/Modules/ftp -f makefile.tests clean test- Release archive filename dry-runs for OS3, OS4, and MorphOS confirm
Dopus5_100_*output names. - GitHub Actions
Makefile CItag workflow passed for5.100, including host FTP tests, OS3/OS4/MorphOS debug builds, OS3/OS4/MorphOS release builds, and release asset upload.
Downloads
Dopus5_100_os3.lhaDopus5_100_os4.lhaDopus5_100_mos.lha
Full Changelog: 5.99...5.100
Assets 5
5.99
Picasso96 migration, OS4 bug fixes and features
Program bumps to 5.99, library and dopus5.module to 73.3, and commands remain at 65.1.
Picasso96 / RTG display overhaul
- Migrated the RTG subsystem from
cybergraphics.librarytoPicasso96API.librarywith a CyberGraphX fallback, fixing drag-mask rendering and 24-bit ILBM decoding on modern graphics cards across all platforms. - Fixed 24-bit ILBM handling: route decisions through colour-plane count, clamp uncompressed chunky decode to width, decode all source planes into the chunky buffer for
DIF_WRITEPIX, and prevent 24-bit decode into the 8-bit fallback buffer. - Hardened drag-mask handling: validate P96 stride before per-row reads, read
Memory/BytesPerRowviap96LockBitMap, fix hicolor compare, stop P96 re-entry under lock, and probe RTG viap96GetBitMapAttr. - OS4: validate interface acquisition for both P96 and CGX, and guard NULL in teardown.
- AROS: compile out P96 call sites and route RTG through CyberGraphX.
- Cleaned up dead
P96Base/IP96globals from all module init files. - Added full Picasso96 SDK headers:
proto,inline,ppcinline, andpragmas.
Covers PR #2 (p96-migration), 26 non-merge commits.
OS4 bug fixes ported from derfsss/dopus5-os4
- Fix filetype editor crash: remove spurious
REG(a2)from OS4proc_init. - Fix anti-aliased font progressive bolding: use
JAM2draw mode instead ofJAM1so previous weight layers accumulate correctly. - Fix Escape key not closing requesters on OS4.
- Fix backdrop disappearing on settings save:
FUNKOFFwas mistyped asFUNK0FF, so the backdrop-off code never compiled in. - Port defensive lock validation and 255-character filename support.
Covers PR #5 (port/derfsss-os4-bugfixes), 5 commits.
OS4 features ported from derfsss/dopus5-os4
- Raise font requester cap from 30pt to 96pt for 4K / HiDPI displays.
- Add a full-path-in-lister-title option: new
LISTEROPTF_FULL_PATHflag shows the complete expanded path instead ofvolume:objectname. - Show human-readable free memory on the OS4 screen title bar using
BytesToString, for example324.5 MB free. - Fix
CatCompBlockbinary encoding for the two new catalog strings; lengths must include null separator bytes. - Fix a pre-existing buffer overflow in lister title construction: unbounded
strcpy/strcatinto the 300-byte title buffer, plus overflow oflast_status[80]from the 300-byte title.
Covers PR #6 (port/derfsss-os4-features), 6 commits.
Other fixes
- XADOpus: handle non-Amiga LHA directory entries during extraction. Covers PR #4.
Full Changelog: 5.98...5.99
Assets 5
5.98
Backdrop tooltip fix + About window polish
Bundled follow-ups to 5.97's tooltip work plus a couple of unrelated quality-of-life fixes.
Fixes
-
Finish the tooltip regression fix. The 5.97 fix only covered the lister's own IDCMP handler. The backdrop IDCMP handler (active in icon view, same window handle as the lister, and the first dispatch target for icon-area events) had the same pattern and was also stripping
IDCMP_INTUITICKSon every idle tick / gadget release / mouse-button click / drag end. In icon mode the idle-tick path alone was enough: the very first tick after switching to icon view unsubscribed INTUITICKS and the hover timer was then permanently off, so tooltips stayed dead even after returning to name mode. Removed all five strip calls acrossbackdrop_idcmp.candbackdrop_drag.c, and sethandled = 0on idle ticks so the dispatcher still letslister_toolbar_tooltip_tickrun in icon / icon-action mode. -
About window: fit the extended copyright. The single-line
COPYRIGHTstring grew long enough that it overflowed the About dialog's fixed-width copyright area. Split the displayed text into two shorter lines inside the About caller, keeping theCOPYRIGHTmacro (used verbatim for every library/module's$VERstring) intact.
Under-the-hood
- Archive filename now tracks the version bump.
source/makefile'sREVISIONliteral was hand-maintained and had silently stayed at95since 5.95, so 5.96 and 5.97 both shipped asDopus5_95_*.lhaeven though the binaries reported the higher version.REVISIONis now derived fromPROG_REVISIONinversion.hvia$(shell awk ...), so a single edit toversion.hupdates the archive name too.
Version bumps
- Program: 5.97 → 5.98
- Library / dopus5.module: 73.1 (unchanged)
- Commands (viewfont, dopusrt5, LoadDB): 65.1 (unchanged)
No API, IPC or on-disk format changes - safe drop-in over 5.97.
Full Changelog: 5.97...5.98
Assets 5
5.97
Window-close leak + tooltip regression fixes
Two targeted fixes to the lister window machinery, unrelated to each other but worth shipping together.
Fixes
-
Zoom-gadget memory leak on lister window close.
lister_open_windowhijacks the screen's system zoom gadget by clearingGTYP_SYSGADGET | GTYP_SYSTYPEMASKand settingGadgetID = GAD_ZOOMso our IDCMP handler can route it. Intuition only frees gadgets it still recognises as system gadgets, so after this mutation the storage leaked on every open/close cycle. The originalGadgetTypeandGadgetIDare now saved on open and restored immediately beforeCloseWindow, so Intuition cleans up normally; custom IDCMP routing stays intact for the window's lifetime. -
Tooltips silently disappearing after any gadget click. The
IDCMP_GADGETUPhandler was strippingIDCMP_INTUITICKSfrom the window's IDCMP mask on every release, which turned off the toolbar tooltip hover timer for the remaining lifetime of the lister. A freshly opened Name-mode lister showed tooltips (INTUITICKS is in the initial IDCMP mask), but the moment the user clicked anything — including the menu-driven Icon↔Name mode switch — they stopped.GADGETUPnow keepsINTUITICKSsubscribed, matching the intent already documented in the neighbouringIDCMP_MOUSEBUTTONSpath.
Version bumps
- Program: 5.96 → 5.97
- Library / dopus5.module: 73.1 (unchanged)
- Commands (viewfont, dopusrt5, LoadDB): 65.1 (unchanged)
No API, IPC or on-disk format changes — safe drop-in over 5.96.
Full Changelog: 5.96...5.97
Assets 5
5.96
Leak/resource fixes and Galileo UI/UX ports
Version bumps to 5.96 / library 73.1 / commands 65.1, copyright notice extended to 2026. Groups two bodies of work ported from the Hagbard-Celin/galileo fork plus one fix found during review.
Leak and resource fixes
- ViewFont: save and restore
PROGDIR:lock on exit (font.c/font.h). - clock_task: free
ScreenDrawInfoafter use. - start_menu: free
ScreenDrawInfoon hide. - environment: free outer lister node in
FreeListerNode. - cleanup / event_loop / ipc / images / toolbar / filetype: plug small leaks around pool / port / drawinfo ownership on failure and teardown paths.
Covers all 10 v0.1 + v0.2 leak fixes from Galileo plus one additional OpenListerNode wrapper leak found during review. Copyright headers on each affected file extended to credit the DOPUS5 Open Source Team and the dopus5allamigas fork.
UI/UX fixes
- lister / lister_idcmp: do not track titlebar-minimised listers as
GUI->current_lister(Galileofaf369c). Prevents actions targeting a lister the user can no longer see. - lister_function:
ActivateWindowafter Lock/Unlock Position reopens the lister (Galileo5564d91). Restores focus that the close+open cycle drops. - lister_window: parent button gains
GACT_LEFTBORDERso Intuition treats it as part of the border (Galileo33041d4). - boopsi: scrollbar gadgets gain
GA_RightBorder/GA_BottomBorderon all sixNewObjectsites inL_AddScrollBarsfor the same reason.
Version bumps
- Program: 5.95 → 5.96
- Library / dopus5.module: 73.0 → 73.1
- Commands (viewfont, dopusrt5, LoadDB): 65.0 → 65.1
No API, IPC or on-disk format changes.
Full Changelog: 5.95...5.96
Assets 5
Dopus5 5.95
Dopus5 5.95 — MorphOS startup hang fix
Fixes
- MorphOS startup hang in module discovery. The five modules that kept extra functions in a separate
more_functions[]/module_funcglobal (themes, ftp, misc, join, filetype, plus xadopus) now store all entries inline in a properly-sizedModuleInfo_Nstruct. The old pattern relied on the linker placing the auxiliary array immediately aftermodule_infoin memory; the MorphOS PPC toolchain does not guarantee that, soinfo->function[n]for n>=1 read garbage, hanging DirectoryOpus at startup step 8 (init_commands_scan) on the first module with multiple functions (themes).
Cleanup
- Modernised the MorphOS IPC entry-point dispatch:
IPC_EntryCode/IPC_StartupCode/IPC_EntryProtonow expand to plain PPC-native functions on MorphOS (matching OS4/AROS).IPC_LaunchforcesNP_CodeType=CODETYPE_PPCunconditionally. TheIPCF_NATIVEflag is retained for source compatibility but no longer required.
Downloads
Dopus5_95_mos.lha— MorphOSDopus5_95_os3.lha— AmigaOS 3 (m68k)Dopus5_95_os4.lha— AmigaOS 4 (PPC)
Assets 8
5.94.1
Full Changelog: 5.94...5.94.1
Assets 5
5.94
First release of this fork that ships builds for all three Amiga flavours (OS3, OS4, MorphOS) from CI.
New features
- Live filter overlay for listers — View menu → "Filter..." (right-Amiga + F) opens a string gadget over the active lister's path field. Typing updates the show pattern on the fly and re-applies display rejection against already-buffered entries, so filtering is instant and skips a directory re-read. The pattern persists with the lister's format alongside Show. Name-mode listers only. New "Lister - Filter" node in the guide.
- Hover tooltips on lister toolbar buttons — after ~0.8 s of hover a small popup lists the LMB/RMB/MMB function names bound to the button, so you can discover what each icon does without clicking through. Dismissed on click, keystroke, window move/resize, or the mouse leaving the button.
Performance
- Pipelined icon populate —
lister_get_iconspreviously sentLISTER_SHOW_ICONwithREPLY_NO_PORT, which despite the name is synchronous from an IPC task: the handle task blocked inWait()until the lister finished drawing each icon, serialising disk I/O and draw. Switched to an async reply port (same mechanismL_IPC_ListCommandalready uses) and drain replies after the loop. The handle task can now prefetch the next icon from disk while the lister finishes drawing the previous one. Largest win with plainicon.library; smaller on IconLib 46.4 + fast CPU/RTG where render is already cheap. - Tail-first backdrop scan — new icons are
AddTail'd during populate, butlister_show_iconwalked from the head, making the common path O(N) per icon and O(N2) for a drawer open. Reversed the walk (lh_TailPred/ln_Pred); common case is O(1). UAF guard still covers the window between IPC send and receive.
Platform support
- OS4 build fixed — adjusted
InputBase/UtilityBasetypes for the SDK, switched to cybergraphx, wrapped__stdargs exit()for m68k only, added-fcommon, dropped-lamigafor newlib, added SetRexxVar/GetRexxVar wrappers over the Rexx interface, restored newlines inaos4_ppc_libstub.c(LIBSTUB tokens were being eaten by a preceding#include), and madeFormat()arity conditional. - MorphOS build fixed — added MorphOS
exit()stubs (noreturn) in library and modulelibinit.c, declaredMathIeee*Basefor diskinfo, replacedtime()/localtime()inftp_utilwithDateStamp()/Amiga2Date()to avoid libnix libc, stubbedlibnix_mempool/ThisRequiresConstructorHandlingfor the ftp link under-nostartfiles, cast arrow image data toUWORD *, and downgraded GCC 14's new-Werror=incompatible-pointer-types/-Werror=int-conversionback to warnings across allmakefile.mosfiles. - CI now matrix-builds os3/os4/mos in debug and release and attaches all three
.lhaarchives to tagged releases.
Housekeeping
.gitignorecovers the OS4/MOS/AROS bin output dirs.
Version bumped to 5.94 (PROG_REVISION, archive REVISION). LIB/CMD ABI versions unchanged — existing modules are compatible.
Full Changelog: 5.93...5.94
Assets 5
5.93
First numbered release of this fork, based on upstream mheyer32/dopus5allamigas v5.93.0. Adds a round of bug fixes (memory leaks, enforcer hits, disk-reporting), fixes a GCC 6.5.0b miscompile that crashed clock_proc, and replaces the build/release pipeline with one that attaches artifacts to tagged releases.
Only an OS3 build is attached to this release — OS4 and MorphOS builds are fixed in 5.94.
Bug fixes
- Enforcer hits on stale lister pointers —
function_lock_pathsandfunction_unlock_pathsdereferencednode->listerafter the lister window had been closed, triggering reads of freed memory atlister+0x1503andlister+0x5E2. Both paths now validate againstGUI->lister_listunder the shared lock before touching the lister. - Disk percentage > 100% on floppies and misbehaving drives — used wrong intermediate divisions; rewritten as
(used * 100) / totalwith a defensive 100% cap. Fixes upstream issue #7. - Title-bar and device-list hardening for large/bogus drives — cap Full% at 100% when
id_NumBlocksUsed > id_NumBlocks, show "?" for Free/In Use in that case instead of tens-of-terabytes wrap-around, add a TB tier toBytesToString64(legitimate multi-TB volumes show "23.5T" instead of "HUGE"), widen block counts throughULONGbefore promoting toUQUADto avoid sign-extension on drives with more than 231 blocks. - xadopus hangs on archive drag/copy — added a 30 s
LaunchCommandtimeout and fixed NULL-pointer bugs in_doubleclick,_viewcommand,_copy. Module bumped to 93. - GCC 6.5.0b miscompile of inline library headers —
SysInfo.h,newicon.h,multiuser.hused the((fn*)(base - LVO))(base)idiom withregister __asm("a6"); GCC 6.5.0b (amigadev/crosstools) emittedjsr +LVO(a6)instead ofjsr -LVO(a6), jumping into garbage and crashing with 80000004 on the first SysInfo.library call fromclock_proc. Rewritten withLP0/LP1/... macros from<inline/macros.h>, whose inline asm hardcodes the minus sign and is immune to the miscompile.NO_INLINE_STDARGvarargs helpers preserved.
Memory / resource leaks
Leaks ported from Hagbard-Celin/galileo:
launcher.c—DeleteMsgPort(reply_port)onlauncher_procexitrexx_handler.c—ClearRexxMsgbeforeDeleteRexxMsg; reply port leak on sync pathcallback_main.c— freerm_Result2argstring inHookRexxCommandfileclass_editor.c— free result argstring +ClearRexxMsginclassed_send_rexxdesktop_drop.c—UnLock(CurrentDir(old))indesktop_drop_on_objectevent_loop.c— remove straybreakthat skippedReplyAppMessagefunction_launch.c— free partial allocations on failure infunction_new_handlethemes.c— unified cleanup path insave_theme, handlesCreateMsgPortfailure
Additional leaks found by audit:
config_open.c—L_OpenButtonBankbailed viareturn NULLonconvert_button_windowfailure, leaking the IFF handle and buttons-drawer Lock and leavingCurrentDirpointing at a freed lock. Now uses a unified cleanup path.filetype.c—creator_guicreateddata->app_portbut never calledDeleteMsgPortbeforeFreeVec(data); leaked one port per invocation.ftp_main.c— ifrexport CreateMsgPortsucceeded butnfyportfailed,AddPort(rexport)was skipped yet cleanup unconditionally calledRemPort(rexport)on the un-Added port (undefined behaviour). Split soAddPortpairs with the always-run cleanup.function_filechange.c—alloc_filechangeleaked theAllocMemH'dFileChangeblock ifAllocDosObject(DOS_FIB)failed.
Other fixes ported from Hagbard-Celin/galileo:
launcher.c—DupLock/UnLockaroundCurrentDirswap so a Project-icon launch does not clobber the WBArg lock when the default tool has no path.backdrop.c— replaceBOOL only_iconwithULONG mode(BTRM_WINDOW|BTRM_NOBORDER|BTRM_ICON) inbackdrop_test_rmbso the group-window popup uses theWhichLayerresult instead of a naive bounds check, preventing popups firing through overlapping windows.filetypes_proc.c— skipGetFileVersionfor directories.
Build / CI
- OS3 build switched to
sacredbanana/amiga-compiler(NDK 3.2 headers; still GCC 6.5.0b). Matrix-builds debug and release from one job, concurrency group cancels superseded runs,workflow_dispatchtrigger added, upload step now fails if no archive is produced instead of silently succeeding. - Automated tagged releases via
ncipollo/release-action. Release job accepts numeric tags like5.93in addition tov*, and matches the version-suffixed archive produced by the makefile (the hardcodedDopus5_os3.zipnever existed, so earlier tags attached no artifact). - Pack releases with
lhainstead ofzip— AmigaOSunzipdoes not restore theeprotection flag, so binaries extracted from the CI zip were not executable.lhais already in the compiler image; executables arechmod +x'd before packing so Amiga LHA maps the permission back toeon extract. - Stub
creal/cimaginmath_replace.h— release build (-Os -flto) pulledlibm020/libm.a(cexp.o)via LTO during the diskinfo.module link; sacredbanana's libm is missing these symbols. Diskinfo never callscexp; minimal implementations via GCC__real__/__imag__satisfy the linker without affecting behaviour. - Bump CI actions off Node 20:
checkoutv4 → v6,upload-artifactv4 → v7.
Other
- Copyright year updated to 2026.
- Non-ASCII character fix.
- Internal docs mapping module discovery/identification, module entry points and execution protocol, and the
EXTCMD_*callback system (not user-visible; for future maintainers).
PROG_REVISION bumped to 93. LIB/CMD ABI versions unchanged.
Full Changelog: https://github.com/midwan/dopus5allamigas/commits/5.93