Menu

Commit [r13024]  Maximize  Restore  History

Fix NCHAR/NVCHAR handling of multi byte (UTF-8) data.

Bytes, characters and display columns were all being treated as one
number, which only holds for ASCII. nchar.c now has one function per
quantity and each caller uses the one it needs.

- subscripts and padding now work in characters; truncation no longer
cuts a UTF-8 sequence in half
- A4GL_wcswidth counted characters despite its name, so screen and
report layout now ask for columns instead
- upshift/downshift fold non-ASCII via towupper/towlower
- NCHAR was invisible to the ODBC driver, so those columns came back
empty; fgl_sizes[] also ran off the end for NCHAR/NVCHAR/INT8/SERIAL8
- NVARCHAR was compiled as DTYPE_CHAR, so no character aware path ever
applied to it. Now a real DTYPE_NVCHAR, along with the operators,
conversions and pop_var2/alloc entries that were missing behind it
- a locale named in the environment but not installed no longer aborts
the program at startup

Adds A4GL_COLLATE (off by default) to order comparisons with strcoll.

ASCII behaviour is unchanged. Suite: 1098 run, 32 failed, against 33
before the change.

mikeaubury 2026-08-31

changed /aubit4glsrc/trunk/compilers/4glc/calltree.c
changed /aubit4glsrc/trunk/compilers/4glc/common.c
changed /aubit4glsrc/trunk/compilers/4glc/rules/define.rule
changed /aubit4glsrc/trunk/compilers/4glc/rules/expr.rule
changed /aubit4glsrc/trunk/etc/aubitrc.in
changed /aubit4glsrc/trunk/incl/a4gl_libaubit4gl.h
changed /aubit4glsrc/trunk/lib/libaubit4gl/builtin.c
changed /aubit4glsrc/trunk/lib/libaubit4gl/conv.c
changed /aubit4glsrc/trunk/lib/libaubit4gl/fglwrap.c
changed /aubit4glsrc/trunk/lib/libaubit4gl/funcs_d.c
changed /aubit4glsrc/trunk/lib/libaubit4gl/nchar.c
changed /aubit4glsrc/trunk/lib/libaubit4gl/ops.c
changed /aubit4glsrc/trunk/lib/libaubit4gl/others.c
changed /aubit4glsrc/trunk/lib/libaubit4gl/report.c
changed /aubit4glsrc/trunk/lib/libaubit4gl/stack.c
changed /aubit4glsrc/trunk/lib/liblex/lex_esqlc/compile_c.c
changed /aubit4glsrc/trunk/lib/libsql/odbc/sql.c
changed /aubit4glsrc/trunk/lib/libui/ui_curses/ioform.c
/aubit4glsrc/trunk/compilers/4glc/calltree.c Diff Switch to side-by-side view
Loading...
/aubit4glsrc/trunk/compilers/4glc/common.c Diff Switch to side-by-side view
Loading...
/aubit4glsrc/trunk/compilers/4glc/rules/define.rule Diff Switch to side-by-side view
Loading...
/aubit4glsrc/trunk/compilers/4glc/rules/expr.rule Diff Switch to side-by-side view
Loading...
/aubit4glsrc/trunk/etc/aubitrc.in Diff Switch to side-by-side view
Loading...
/aubit4glsrc/trunk/incl/a4gl_libaubit4gl.h Diff Switch to side-by-side view
Loading...
/aubit4glsrc/trunk/lib/libaubit4gl/builtin.c Diff Switch to side-by-side view
Loading...
/aubit4glsrc/trunk/lib/libaubit4gl/conv.c Diff Switch to side-by-side view
Loading...
/aubit4glsrc/trunk/lib/libaubit4gl/fglwrap.c Diff Switch to side-by-side view
Loading...
/aubit4glsrc/trunk/lib/libaubit4gl/funcs_d.c Diff Switch to side-by-side view
Loading...
/aubit4glsrc/trunk/lib/libaubit4gl/nchar.c Diff Switch to side-by-side view
Loading...
/aubit4glsrc/trunk/lib/libaubit4gl/ops.c Diff Switch to side-by-side view
Loading...
/aubit4glsrc/trunk/lib/libaubit4gl/others.c Diff Switch to side-by-side view
Loading...
/aubit4glsrc/trunk/lib/libaubit4gl/report.c Diff Switch to side-by-side view
Loading...
/aubit4glsrc/trunk/lib/libaubit4gl/stack.c Diff Switch to side-by-side view
Loading...
/aubit4glsrc/trunk/lib/liblex/lex_esqlc/compile_c.c Diff Switch to side-by-side view
Loading...
/aubit4glsrc/trunk/lib/libsql/odbc/sql.c Diff Switch to side-by-side view
Loading...
/aubit4glsrc/trunk/lib/libui/ui_curses/ioform.c Diff Switch to side-by-side view
Loading...