What's New in FWH 26.06

This page summarizes the changes and additions in FiveWin for Harbour/xHarbour version 26.06 (June 2026), relative to the previous release 26.05 (May 2026).

New Sample: XBrowse with Tree & Search

A new sample samples\xbrowses\xbrwtre.prg demonstrates XBrowse with Tree mode and incremental search. Features:

New Sample: Resource Dialog with Proportional Zoom

A new sample samples\dialog\resdlg.prg demonstrates resource-based dialogs with proportional zoom. When the dialog is resized, all controls (labels, edits, buttons) resize proportionally, including positions, widths, heights and font sizes.

XBrowse Bar GET Action Buttons — Fix

The action button shown on header-bar GETs (oBrw:lGetBar with :cBarGetBmp and :bBarGetAction) appeared tiny at the GET's top-left corner instead of square, full GET height and flush on the right side. Fixed in source\classes\xbrowse.prg.

TSmartButton — Fixes

The TSmartButton control (source\classes\smartbtn.prg) had two action-handling bugs, both fixed:

Related build fix: vitem.prg was missing #define BDR_RAISEDOUTER (0x0001) and BDR_SUNKENOUTER (0x0002); the EDGE_* macros referenced these undefined symbols, raising W0001 ambiguous-reference warnings that aborted the FiveH.lib build under -es1.

Agent Class — Major Improvements

The Agent class (source\classes\agent.prg) received substantial upgrades since its introduction in 26.05:

New helper functions: AG_SseParse(), AG_UrlEncode(), AG_ExtractDdgResults(), AG_StripHtml(), AG_ToolDesc(), AG_ToolParams().

AgenticAI — GUI Desktop Sample

A full-featured desktop GUI for the ccharbour agentic engine, ported from the Agents Web version to a native FiveWin app using an embedded Edge WebView2 (TWebView2):

Transport is in-process libcurl (hbcurl), the same path as TOpenAI:SendStream, plugged into ccharbour via hOpts["transport"]. Sample: samples\AgenticAI\ (multi-module build with agenticai.hbp + build.bat).

ccharbour Engine & Console

New Classes

TGit — Git Integration

source\classes\tgit.prg + source\winapi\git.c wrap git.exe via CreateProcess with anonymous pipe capture (no hb_processRun, no external libs). Requires only git in PATH.

C backend (source/winapi/git.c):

FunctionSignature
GIT_EXEC()(cCmd) → cStdout
GIT_RUN()(cCmd, @cOut, @cErr) → nExit
GIT_EXITCODE()() → nLastExitCode
GIT_STDERR()() → cLastStderr
GIT_HASGIT()() → lAvailable

TGit class methods:

CategoryMethods
RepositoryNew(), Init(), Clone(), IsRepo(), RootDir(), HasGit()
StatusStatus(), IsClean()
StagingAdd(), AddAll(), Reset(), Rm()
CommitCommit()
RemoteRemoteList(), RemoteAdd(), RemoteRemove(), RemoteGetURL(), RemoteSetURL()
Push/PullPush(), Pull(), Fetch()
BranchBranchList(), BranchCreate(), BranchDelete(), BranchRename(), BranchSwitch(), CurrentBranch(), Merge(), Rebase()
HistoryLog(), LogRaw()
DiffDiff(), Show()
BlameBlame()
StashStashList(), StashSave(), StashPop(), StashApply(), StashDrop()
TagTagList(), TagCreate(), TagDelete()
CheckoutCheckout()
ConfigConfig(), ConfigList()

Sample: samples\misc\tgit.prg. Include: include\tgit.ch.

TSSH — SSH Client

source\classes\tssh.prg + source\winapi\ssh.c wrap ssh.exe / scp.exe (Windows 10+ OpenSSH) via CreateProcess with pipe capture. Supports key authentication, custom port, SCP file transfer, and host key scanning.

C backend (source/winapi/ssh.c):

FunctionSignature
SSH_EXEC()(cHost, cUser, cCmd, cKeyFile, nPort, @cOut, @cErr) → nExit
SCP_SEND()(cHost, cUser, cLocal, cRemote, cKeyFile, nPort, @cErr) → nExit
SCP_RECV()(cHost, cUser, cRemote, cLocal, cKeyFile, nPort, @cErr) → nExit
SSH_HASSSH()() → lAvailable

TSSH class methods:

CategoryMethods
ConnectionNew(), Connect(), IsAvailable()
Remote execExec(), ExecQuiet(), Shell()
File transferSendFile(), GetFile(), SendFiles(), GetFiles()
Key mgmtKeyGen(), KeyScan(), SetKnownHosts()

Sample: samples\misc\tssh.prg.

Transformer Class — Multi-Head, GELU, LR Scheduler & Padding

Remote View — Multi-Client & Login

build_new.bat: set FW_MT=1 to link the Harbour MT VM (hbvmmt) for apps that use hb_threadStart; without it the single-thread VM (hbvm) is linked.

Build System

Compiler Warning Sweep

Every compiler warning emitted by the GCC32, GCC64, MSVC32 and MSVC64 library builds (~170 sites) has been cleared while preserving behavior on all supported toolchains (BCC32/64, MSVC32/64, GCC32/64, Harbour and xHarbour). Covers:

Two real bugs found: a buffer overflow in BlankQuotes() (vstrfun1.prg) when its 2nd argument exceeds 3 chars, and a 3-byte over-read of the GIF graphic-control block in fwgif.c. All nine library variants now build warning-free.

xHarbour Commercial Restored

The xHB Commercial (xhbc) target — which had been abandoned since 2016 — now builds, links and runs again with the VC98 toolchain:

Build scripts: makes/build_fivehcm.ps1 + makes/build_fivehmx.ps1.

makes/ Test Projects

Every makes/<compiler>/ folder now builds, links and runs a minimal FiveWin app for its Harbour/xHarbour + C-compiler combo (11 variants confirmed). Two missing variants were added (xhb_bcc64, xhb_msvc32). Each go.bat honours FW_NORUN=1 and uses the VS 18 toolchain.

Notable Fixes

TGet ANSI Characters (Turkish, CP1250-1258)

Keyboard input of ANSI characters with Unicode codepoint above 255 (Turkish ş-cedilla, ğ-breve, dotted İ; Polish, Czech, Baltic, Cyrillic and Greek letters) showed "?" in non-Unicode applications (FW_SetUnicode(.F.)) using single-byte codepages CP1250–CP1258.

Regression introduced when is2byteansi() started treating all 2-byte sequences as ANSI pairs on those codepages: WideKey2Asc() built genuine UTF-8 from the WM_CHAR wide code but fw_Utf8ToStr()'s isutf8() heuristic refused to convert it, so the keystroke was rejected.

WideKey2Asc() now converts with explicit codepages via FW_CdpTranslate(cUtf8, 65001, -1), bypassing the heuristic. is2byteansi() display behavior is unchanged.

New samples: samples\test\trwincdp.prg (conversion-chain check) and samples\test\trwinget.prg (sends ş ğ İ WM_CHAR codes to a GET and checks the buffer receives CP1254 bytes FE F0 DD).

TGraph ADD SERIE / SET Y LABELS

Both #xcommand rules expanded to a hard-coded oGraph: instead of the <oGraph> matchmarker, so ADD SERIE TO oMyGraph / SET Y LABELS OF oMyGraph called a non-existent oGraph variable unless the object happened to be named oGraph. They now expand to <oGraph>:AddSerie() / <oGraph>:SetYVals().

New Features

TRichEdit5 & TRichEdit — SetTextColor()

SetTextColor(nColor) applies text color to the current selection (SCF_WORD | SCF_SELECTION) using only the CFM_COLOR mask, preserving all other character formatting (bold, italic, underline, font face, size). If no text is selected, the color is applied to the word under the caret. Works on both TRichEdit5 (RichEdit 5.0) and TRichEdit (RichEdit 2.0 via riched20.dll).

Samples: samples\test\testchclr.prg (Blue/Red/Black + Bold/Italic), samples\test\testreclr.prg (same for RichEdit 2.0).

TRichEdit5 — Dark Mode

New METHOD SetDarkMode(nClrText, nClrBack), cascaded automatically by TDialog:SetDarkMode / FW_SetDarkMode like other controls. Uses the same dark palette as TMultiGet/TGet.

TURLLink — Text Alignment

New DATA nAlign and METHOD AlignText(nAlign). Method Default() now auto-detects alignment from window styles (SS_RIGHT, SS_CENTER) when ::nAlign is nil. Method EraseBkGnd() now accepts the hDC parameter. Thanks to Carlos Sincuir.

TX8 (TComboMetro drop-down) — Now Subclassable

The TX8 class (the TXBrowse-based drop-down list used by TComboMetro, source\classes\combom.prg) is no longer declared STATIC, so applications can subclass it or OVERRIDE its methods (drop-down direction, selection colors, etc.) without keeping a private copy of combom.prg. No behavior change.

fwhxhb.h — Harbour/xHarbour C Compatibility

include/fwhxhb.h maps Harbour-only C API (hb_parvc/parvni/parvnl/parvnll/parvnd/parvl, hb_storvc/storvni/storvnl/storvnll/storvnd/storvl, hb_vmCDP, hb_retclen_buffer, hb_rettdt, hb_timeStampStrGetDT) to primitives common to both VMs. A single set of C object files links against Harbour or xHarbour.

New Samples

transxbrowse — Transformer Text Classifier in XBrowse

samples\ai\transxbrowse.prg trains a Transformer neural network to classify Spanish phrases into 6 categories (Saludo, Despedida, Agradecimiento, Pregunta, Comando, Respuesta) using a 25-token vocabulary. Displays all predictions in an XBrowse grid with confidence percentage and OK/FAIL status. Window title shows accuracy. Uses LRScheduler for warmup scheduling.

transsave — Transformer Save/Load Roundtrip

samples\ai\transsave.prg demonstrates the full model lifecycle: trains a Transformer classifier, saves it to disk via Save() (hb_Serialize), loads it back via Load(), and verifies that predictions match. Results displayed in XBrowse.

transgen — Transformer Text Generation

samples\ai\transgen.prg trains a Transformer on character sequences and generates new text autoregressively from seed tokens. Uses Generate() with temperature sampling. Results displayed in XBrowse with confidence scores.

githubdb — githubDB + XBrowse

samples\githubdb\githubdb.prg browses a githubDB fork (SQL+vector database on GitHub Actions) from FiveWin using two HTTP paths:

HTTP transport via WinHttp COM object (no curl/DLL dependency). Built with build_new.bat (all compiler variants). Docs at githubdb.

testrsz — Flicker-Free XBrowse Resize

samples\testrsz.prg demonstrates how to resize an XBrowse at runtime without flickering. The correct method: add WS_CLIPCHILDREN to the dialog style, freeze the dialog with WM_SETREDRAW around the resize, then repaint both dialog and browse. Includes "old method" buttons side by side for comparison. Also documented in the TXBrowse HTML docs.

seqedit & xbrseqed — Sequential XBrowse Edit

samples\seqedit.prg and samples\ui\xbrowse\xbrseqed.prg demonstrate sequential keyboard-driven edit for Array data sources in XBrowse. Press ENTER on a row to start editing the first column in the sequence; each subsequent ENTER validates the current column and auto-advances; ESC cancels. Fully configurable via aEditSeq static array (default {3,5,7}). Uses PostMessage-based column advance (zero timers).

Bug Fixes

Development Tools

Summary

FWH 26.06 delivers major Agent class maturity (streaming SSE, real tool implementations, error handling, interrupt/inject), two new system-integration classes (TGit, TSSH), the AgenticAI GUI desktop port, Remote View multi-client support, a full compiler warning sweep (~170 sites, two real bugs found and fixed), restoration of the xHarbour Commercial target, and significant documentation expanding to 36+ HTML pages.

See Also