Monthly Archives: August 2026

Clarion Unicode preview — refreshed beta build (14204)

Clarion · Unicode Preview · Beta Refresh

Refresh build 14204 — a drop built from your reports

Nearly every item in this refresh traces back to a beta field report — exactly what the beta is for. CHOOSE() and POPUP() go wide, control pictures carry Unicode, TXA round-trips in UTF-8, INI files and the registry go wide, a full sweep of the string built-ins closed out the remaining port regressions — and there’s a Windows 11 fix every desktop app should retest. Already testing? Everything below is new since build 14175.

Language CHOOSE · POPUP · pictures · built-ins sweep IDE TXA in UTF-8 · %CWVersion 12026 Runtime INI · registry · Win11 hit-test fix

Highlights of this drop — then the full tester guide, whose “What’s new” section and dated “beta refresh” markers flag exactly what changed since you last read it.

?:

CHOOSE() takes USTRING values

A USTRING among CHOOSE’s values used to make the whole result numeric — even a plain-string alternative came back as '0'. Now string values give a string result that keeps every unit, and string-mixed-with- numeric stays numeric, exactly the STRING rules. From Carl B.’s report.

POPUP() is wide

Menu text draws its real glyphs — currency signs, CJK, emoji — and the item structure (|, {}, ~, …) is decided on the wide text itself, so a full-width in an item no longer splits the menu. All-ANSI POPUPs take exactly the old code path. Also from Carl B.’s reports.

@

Control pictures carry Unicode

A picture with symbols outside the codepage — say @n~₿~-15.2 — set on a LIST column (PROPLIST:Picture) or a pictured display STRING now formats with the real symbol and reads back intact. A wide LIST heading also survives a later reformat. (The pictured-ENTRY editor is a separate queued step.)

Runtime caption rewrites go wide

{PROP:Text} = <wide value> on the caption families — PROMPT, STRING, BUTTON, CHECK, RADIO, TAB, GROUP/OPTION/SHEET — now keeps exact units. This was on the known-limitations list; it’s off it now.

ƒ

String built-ins, swept against gold

Every string built-in was measured two-era against Clarion 12 gold, and the remaining beta regressions fixed: DEFORMAT(x) with the picture omitted, ERROR() returning unclipped padding, NUMERIC() rejecting trailing spaces, ALL('',n), wide RIGHT()/CENTER() padding — and wide-to-wide compares now clip trailing spaces like narrow always did.

TXA export/import in UTF-8

Export application text as Application text, UTF-8 — a filetype choice in every export dialog, ClarionCL /u8 /ax on the command line, or the AutoExport-on-save option. Import auto-detects UTF-8 (with or without BOM) and rejects loudly, naming the line, instead of silently mangling. Defaults stay ANSI, byte-identical. From Petar’s request.

§

INI files and the registry go wide

GETINI/PUTINI accept and return USTRING exactly — and a wide write to a missing .ini creates it UTF-16 LE with BOM. The GETREG family matches the registry’s native UTF-16 end to end: RegEdit shows your real characters, and reads them back exactly.

#

Templates can gate the Unicode era

%CWVersion is now 12026#IF(%CWVersion >= 12026) is the idiom for template and third-party code that must also generate for older builds (equality tests against 12000 break; use >=). And multi-DLL exports of procedures taking USTRING arrays now link.

A Windows 11 fix worth retesting

Menus and mouse clicks going dead when another app’s always-on-top window (Windows 11 shell “island” windows are the usual trigger) overlapped a Clarion window — fixed, from a tester’s precise analysis (thanks, Alexey). If you’ve seen a Clarion app stop responding to the mouse on Win11, retest on this build.

?

F1 help, rebuilt and current

The IDE help (ClarionHelp.chm) is rebuilt: the Unicode-era language surface — USTRING and friends, the new and changed built-ins, the INI/registry notes — is now in the F1 help itself, not only in the tester documents.

Full tester guide — mental model, conversion rules, DCT import table, screen controls, reports, blobs, SQL / SQLite / text drivers / TopSpeedW / Memory / IP, recipes, and what to focus on when testing. The guide’s “What’s new” section lists everything in this drop; changes are also flagged inline with dated “beta refresh” notes.

Open the full Unicode Tester Guide

Report tool authors — the wide generator surface has shipped (IReportGeneratorW — six methods, opt-in, zero break for existing implementors). Format detection, the EMF record set, transition paths per integration style:

EMF Page Files — Transition Note

Standalone pages (best full-width). Everything described there is implemented unless marked as a known limitation — different behavior is exactly what we want to hear about.

Clarion Unicode preview — refreshed beta build (14175)

Clarion · Unicode Preview · Beta Refresh

Another refresh — the window itself goes wide

This drop pushes Unicode out into the window chrome — titles, menus, the status bar — carries wide columns into LIST and the TopScan browser, widens the client/server IP driver, and folds in a batch of fixes straight from your reports. Already testing? Everything below is new since the last build.

UI window chrome · menus · status · LIST cells Drivers IP goes wide IDE Solution Explorer reload

Highlights of this drop — then the full tester guide, whose dated “beta refresh” markers flag exactly what changed since you last read it.

Window chrome goes wide

Window, frame and MDI-child titles, menu item text, and runtime writes to the status bar, message zone and tips now carry exact UTF-16 — set them in the designer or at runtime with {PROP:Text}. Narrow apps are byte-for-byte unchanged.

Wide LIST columns — and TopScan

The last narrow LIST surfaces went wide: split columns (one queue field fanned across cells with |) and column headings now draw real glyphs, not best-fit. TopScan’s browser rides the same change — its cells show Ω, é, 中 with no changes on your side.

Controls widen at runtime

Bind an ENTRY or TEXT to a USTRING at runtime with {PROP:Use} and the control now switches to the wide class on the spot (and back again for a STRING) — no longer only when the USE was declared wide at compile time.

Solution Explorer keeps up

Edit a project outside the IDE — hand-edit the .cwproj, AppGen, source control, code-generation tooling — and the tree now offers to reload so it reflects reality. A manual Reload Solution command too, and a guard against silently overwriting an external edit on save. From a tester request — thanks, Mark S.

The IP driver goes wide

USTRING fields and UNICODE memo/blob travel end to end through the client/server IP database stack — client, requester and data server — round-tripping bit-identically at rest. Keys inherit the backing driver’s order for free.

Two report fixes from the field

A saved REPORT,…,UNICODE now reopens in the designer without the “Unexpected attribute” error, and two reports previewed at once no longer collide over page files (which could overwrite or drop one report’s pages). Both straight from beta reports.

UCHR() and hex code points

New UCHR(code) is the one-argument form of CHR(code,1), and U'<…>' constants now take hex (U'<1F4A9h>' = one emoji) and full code points that emit the surrogate pair for you. Out-of-range is a loud error, never a silent truncation. From Carl B.’s post.

A compiler crash, fixed

An Internal Compiler Error that appeared and vanished with unrelated source edits — triggered by an identifier ending in a colon (e.g. from PRE(CS:)) landing at a pool boundary — is fixed. Reported against an earlier build; the fix rides this one.

Full tester guide — mental model, conversion rules, DCT import table, screen controls, reports, blobs, SQL / SQLite / text drivers / TopSpeedW / Memory, recipes, and what to focus on when testing. Changes since the last build are flagged inline with dated “beta refresh” notes.

Open the full Unicode Tester Guide

Report tool authors — the wide generator surface has shipped (IReportGeneratorW — six methods, opt-in, zero break for existing implementors). Format detection, the EMF record set, transition paths per integration style:

EMF Page Files — Transition Note

Standalone pages (best full-width). Everything described there is implemented unless marked as a known limitation — different behavior is exactly what we want to hear about.

Clarion Unicode preview — refreshed beta build

Clarion · Unicode Preview · Beta Refresh

New beta build — shaped by your reports

The Unicode preview moves fast: this refreshed build folds in fixes and features driven directly by tester feedback, widens two more drivers, and lands full documentation coverage. Already testing? Everything below is new since the last build.

Language MESSAGE · CHR · RTF · parameters Drivers Memory goes wide · TopScan reads .tpsw Docs Language Reference + Database Drivers updated

Highlights of this drop — then the full tester guide, whose dated “beta refresh” markers flag exactly what changed since you last read it.

💬

MESSAGE() displays wide

All the displayed text — message, caption, custom |-list button captions, the copyable CANCOPY form — now renders exact UTF-16, emoji included. No prototype change, no code change; plain ANSI calls are untouched.

CHR() takes the full Unicode range

CHR(1F4A9h,1) returns the surrogate pair directly — no manual D800h math. Constants fold at compile time. And shared code can now gate its wide paths on the new predefined compile flag _USTRING_ (undefined on older compilers, so OMIT keeps it portable).

Rich text binds USTRING

TEXT,...,RTF with a USTRING USE variable displays, edits and saves back wide. Plain text stays exact UTF-16; formatted content saves as portable RTF source — paste it into Word or WordPad and your characters survive, emoji included.

Sharper language edges

Value USTRING parameters are writable private copies (STRING parity — something value CSTRING never offered), and a &USTRING reference-assignment crash found through a beta report is fixed. Keep those reports coming.

Ω

Emoji fixes from the field

Two beta reports, two fixes: a color emoji at the right edge of an ENTRY was clipped, and mixed text-plus-emoji on UNICODE report pages could drop the text half. Both print and display correctly now.

The Memory driver goes wide

USTRING fields, keys and UNICODE blobs on DRIVER('Memory'). Keys order by linguistic collation — the same order a keyed QUEUE gives wide components, so in-memory tables and queues agree.

TopScan reads .tpsw

TopSpeedW joins TopScan’s driver list — open, browse and edit wide TPS files; USTRING values round-trip bit-identically at rest. Plus a Segoe UI face-lift (your saved font choice is kept).

64-bit SQL integers, lossless

bigint / PG int8 imports as DECIMAL(19,0) and the full 19-digit value round-trips on every driver lane — earlier builds went through LONG or a double and silently rounded past 15–16 digits.

§

The books caught up

The Language Reference now covers the whole Unicode surface — USTRING, BSTRING, CHR, conversion functions, the REPORT UNICODE attribute, error codes. The Database Drivers guide gains TopSpeedW, the text-driver 4 GB story, and a first-ever precise chapter on driver-string and owner-string syntax (now 1024 characters, up from a silently truncating 255).

Full tester guide — mental model, conversion rules, DCT import table, screen controls, reports, blobs, SQL / SQLite / text drivers / TopSpeedW / Memory, recipes, and what to focus on when testing. Changes since the last build are flagged inline with dated “beta refresh” notes.

Open the full Unicode Tester Guide

Report tool authors — the wide generator surface has shipped (IReportGeneratorW — six methods, opt-in, zero break for existing implementors). Format detection, the EMF record set, transition paths per integration style:

EMF Page Files — Transition Note

Standalone pages (best full-width). Everything described there is implemented unless marked as a known limitation — different behavior is exactly what we want to hear about.

USTRING — Unicode that feels like Clarion (v2)

Clarion · Unicode Preview (v2)

USTRING — Unicode that feels like Clarion

Wide text end to end: declare it, type it, store it, browse it. No new programming model. No special “Unicode mode.” If you already know CSTRING, you already know USTRING — and your existing ANSI apps stay byte-identical.

SQL MSSQL · ODBC · PostgreSQL · SQLite ISAM TopSpeedW · ASCII · BASIC · DOS UI ENTRY · TEXT · COMBO · captions · blobs · reports

A few highlights for Clarion developers evaluating this build — then the full tester guide (declaration rules, import maps, backends, recipes, what to poke at).

Hands-off by design

Pick USTRING in the DCT, USE it on a control, PUT it to SQL. No conversion buffers, no “wide mode” flag, no per-screen ceremony. It just works the way Clarion always did.

Σ

All SQL backends speak Unicode

MSSQL, ODBC, PostgreSQL, and SQLite: USTRING(n) ↔ NVARCHAR(n-1) (logical length round-trips). Keys, GET, SET/NEXT, and bound WHERE values stay wide — never narrowed literals.

TopSpeed goes wide

Classic TPS is untouched. New driver: DRIVER('TopSpeedW'), .tpsw files, USTRING fields + UNICODE blobs, keys that work, and clean version rejects instead of silent mojibake. TopSpeedW files use the new 512 GB big file format — the classic 2 GB limit is now a guarded error, never a corrupted file, and SEND('BIGFILE=ON') upgrades an adopted classic file in place.

Text drivers now do 4 GB

ASCII, BASIC and DOS files work to 4 GB in shared and exclusive modes. Before: shared files quietly died at 2 GB with a false “Access Denied”, and growing past 4 GB silently overwrote the start of the file. Now the limit is a clean, reported error — a full file is an error, not a corrupted file.

A blob is a field

On SQL there is no MEMO(n) — long text is the blob. TEXT,USE(blob) displays and edits; IMAGE,USE(blob) displays. Window binding ships today; Report is the same mental model (next surface).

Ω

Reports print wide

Add UNICODE to a REPORT and wide text prints end to end — preview, print-after-preview, direct print — and emoji print in color, composing over colored bands. A report left un-opted posts a loud error 546 on wide data — never silent mojibake.

Type your language — everywhere

Source (UTF-8 / UTF-16), Window/Report designers, DCT messages/tips, IME, emoji panel, clipboard. Captions and free-form ENTRY/TEXT/COMBO carry exact UTF-16 on any system codepage.

ANSI apps stay byte-identical

No USTRING? No wide designer text? Rebuild and ship — same binary behavior as before. Opt-in tokens (e.g. PostgreSQL UNICODECONNECT=1) never change default connects.

Import maps that tell the truth

Import Tables: nvarchar → USTRING, ntext / nvarchar(max) → UNICODE memo/blob, binary max → BINARY blob — attributes already ticked. Data Browser edits wide without narrowing.

Surrogate-safe editing

Emoji and non-BMP text edit as atomic characters on wide ENTRY/COMBO. Color emoji via DirectWrite where available; ordinary edits never leave half a pair behind.

Full tester guide — mental model, conversion rules, DCT import table, screen controls, reports, blobs, SQL / SQLite / text drivers / TopSpeedW, recipes, and what to focus on when testing.

Open the full Unicode Tester Guide

Report tool authors — preview replacements, export targets, or anything that reads page files: when a report opts into UNICODE, pages are .emf instead of .wmf. Transition paths, format detection, and the generator-interface roadmap:

EMF Page Files — Transition Note

Standalone pages (best full-width). Everything described there is implemented unless marked as a known limitation — different behavior is exactly what we want to hear about.

USTRING — Unicode that feels like Clarion

Clarion · Unicode Preview

USTRING — Unicode that feels like Clarion

Wide text end to end: declare it, type it, store it, browse it. No new programming model. No special “Unicode mode.” If you already know CSTRING, you already know USTRING — and your existing ANSI apps stay byte-identical.

SQL MSSQL · ODBC · PostgreSQL · SQLite ISAM TopSpeedW · ASCII · BASIC · DOS UI ENTRY · TEXT · COMBO · captions · blobs

A few highlights for Clarion developers evaluating this build — then the full tester guide (declaration rules, import maps, backends, recipes, what to poke at).

Hands-off by design

Pick USTRING in the DCT, USE it on a control, PUT it to SQL. No conversion buffers, no “wide mode” flag, no per-screen ceremony. It just works the way Clarion always did.

Σ

All SQL backends speak Unicode

MSSQL, ODBC, PostgreSQL, and SQLite: USTRING(n) ↔ NVARCHAR(n-1) (logical length round-trips). Keys, GET, SET/NEXT, and bound WHERE values stay wide — never narrowed literals.

TopSpeed goes wide

Classic TPS is untouched. New driver: DRIVER('TopSpeedW'), .tpsw files, USTRING fields + UNICODE blobs, keys that work, and clean version rejects instead of silent mojibake.

A blob is a field

On SQL there is no MEMO(n) — long text is the blob. TEXT,USE(blob) displays and edits; IMAGE,USE(blob) displays. Window binding ships today; Report is the same mental model (next surface).

Type your language — everywhere

Source (UTF-8 / UTF-16), Window/Report designers, DCT messages/tips, IME, emoji panel, clipboard. Captions and free-form ENTRY/TEXT/COMBO carry exact UTF-16 on any system codepage.

ANSI apps stay byte-identical

No USTRING? No wide designer text? Rebuild and ship — same binary behavior as before. Opt-in tokens (e.g. PostgreSQL UNICODECONNECT=1) never change default connects.

Import maps that tell the truth

Import Tables: nvarchar → USTRING, ntext / nvarchar(max) → UNICODE memo/blob, binary max → BINARY blob — attributes already ticked. Data Browser edits wide without narrowing.

Surrogate-safe editing

Emoji and non-BMP text edit as atomic characters on wide ENTRY/COMBO. Color emoji via DirectWrite where available; ordinary edits never leave half a pair behind.

Full tester guide — mental model, conversion rules, DCT import table, screen controls, blobs, SQL / SQLite / text drivers / TopSpeedW, recipes, and what to focus on when testing.

Open the full Unicode Tester Guide

Standalone page (best full-width). Everything described there is implemented unless marked as a known limitation — different behavior is exactly what we want to hear about.