* src/codepage/Makefile
+ src/codepage/cphuutf.c
+ added Hungarian collation module in UTF-8. It's an
experiment and will require low-level changes in the
CP subsystem, since it is not yet possible to use
HB_UNITB_UTF8 for HB_CP_UNITB parameter. The idea is
to make it possible to define collation modules in UTF-8,
which would in turn allow to drop the link to a specific
legacy CP, thus allowing to drop the different CP flavours
of them, then finally simplifying the naming, maintenance
and usage of these modules. We could also finally call
them what they are: 'collations' (and not "codepages" like today)
I understand this may need substantial low-level
modifications, by doing automatic translation on each
HVM CP change, etc.
* ChangeLog
+ added compatibility notes to previous (2012-07-24 15:04 UTC+0200)
entry
* src/rtl/langlgcy.prg
* minor cleanup
+ src/codepage/cphe862.c
+ src/codepage/cphewin.c
- src/lang/msghe862.c
- src/lang/msghewin.c
- src/lang/msgsr852.c
- src/lang/msgsriso.c
- src/lang/msguados.c
* ChangeLog
* include/hbcpage.hbx
* include/hblang.hbx
* src/codepage/Makefile
* src/lang/Makefile
* src/rtl/langcomp.prg
+ added HE862 and HEWIN codepage modules. Only to for
CP conversion, so they do not feature a collation table
yet. Please add it.
+ using HE862 and HWIN to dynamically create Hebrew language
modules for legacy CPs from UTF-8 one.
+ mapped SR852 and SRISO lang modules to CPs, and deleted
old modules
+ mapped USDOS lang module to CP and deleted old module
* harbour/include/hbdefs.h
* moved HB_WCHAR definition from hbapicdp.h to hbdefs.h
* harbour/include/hbapicdp.h
* harbour/include/hbcdpreg.h
* harbour/src/rtl/cdpapi.c
* harbour/src/rtl/cdpapihb.c
+ added support for custom sorting redirected from HVM
+ added support for custom character indexes in strings
+ added support for custom character flags (upper, lower, alpha, digit)
+ added support for custom upper/lower conversions
+ added support for CPs using unicode character values instead of
ASCII ones
+ added new CP functions which respects custom CP settings:
hb_cdpUpperWC(), hb_cdpTextLen(), hb_cdpTextPos(),
hb_cdpTextPosEx(), hb_cdpTextGetU16(), hb_cdpTextPutU16(),
hb_cdpCharEq(), hb_cdpCharCaseEq()
+ added new conversion functions:
hb_cdpGetUC(), hb_cdpGetWC(), hb_cdpGetU16Ctrl()
+ added macros to detect codepage parameters:
HB_CDP_ISBINSORT() - codepage uses simple binary sorting
HB_CDP_ISCUSTOM() - codepage uses custom string decoding
HB_CDP_ISCHARIDX() - codepage use character indexes instead
of bytes ones
HB_CDP_ISCHARUNI() - CHR(), ASC() and similar functions operates
on Unicode values instead of bytes
HB_CDP_ISUTF8() - codepage uses UTF-8 encoding
* harbour/include/inkey.ch
- removed HB_INKEY_EXTENDED - it was not used in Harbour
+ added new flag HB_INKEY_EXT - it allows to used different
event encoding system with automatic translation to
standard Clipper values. It will be used in the future
as base for low level GTs code. Now it's possible to
selectively switch to the new system. New codes are
unique and do not interacts with Clipper.
+ added HB_INKEY_ALL macro - it's similar to INKEY_ALL but
enables also GTEVENT keys.
* harbour/include/hbgtcore.h
* harbour/src/rtl/hbgtcore.c
* changed character values in internal screen buffer to unicode.
Warning: this modification interacts with SAVESCREE()/RESTSCREEN()
data. Now all GTs uses extended definition. If somene
has code which needs VGA like screen buffers returned
by SAVESCREE() then it can be forced by
hb_gtInfo( HB_GTI_COMPATBUFFER, .t. )
Anyhow it will for to use only one CP in output.
+ added new GT methods which operated on HB_WCHAR values
* modified existing methods using HB_WCHAR/HB_USHORT parameters
to operate on HB_WCHAR values
+ added codepage conversion code directly to core code so it can
be eliminated from low level GT drivers which do not need some
special operations on it.
+ added support for extended inkey codes, they allow to encoded
unicode values, mouse events with flags, keyboard events with
modifier flags (shift,alt,ctrl,...), etc.
Now in low level GT code only unicode key values are used but
I plan to updated all GTs and switch to new code - it should
resolve many small problems inheriting with Clipper inkey codes.
* harbour/include/hbapifs.h
* moved hb_fsNameConvU16() definition from hbapicdp.h to hbapifs.h
* harbour/include/hbxvm.h
- removed comment copied by mistake from GT header file
* harbour/include/hbwinuni.h
* changed HB_CHARDUP() and HB_CHARDUPN() macros - now they
operate on functions which can be used without active HVM.
In such case ANSI CP is used as source encoding.
+ added new macros: HB_OSSTRDUP() and HB_OSSTRDUP2().
They make conversions from OS encoding to HVM one.
They can be used without active HVM and in such case ANSI CP
is used as destination encoding.
* harbour/include/hbapi.h
* harbour/src/vm/cmdarg.c
+ added new function hb_cmdargProgName()
It returns application name with path or NULL if not set,
caller must free returned value with hb_xfree() if not NULL.
The string is in HVM encoding so it does not need any additional
encodings.
* modified hb_cmdargString() to return strings in HVM encoding.
% some small code optimizations
; NOTE: parameters passed to MS-WINDOWS GUI programs which use
WinMain() instead of main() as startup entry are translated
to ANSICP before they can be accessed by application.
This can be eliminated though not for console programs
using where C compiler makes such translation to main()
parameters.
in all systems parameters are passed to application
startup and init functions before programmer can set OS CP.
This can be resolved by adding:
INIT PROC CLIPINIT()
SET( _SET_CODEPAGE, <userCP> )
SET( _SET_OSCODEPAGE, <systemCP> )
RETURN
to linked code. INIT procedures called CLIPINIT() are
executed before any other ones.
* harbour/include/hbapi.h
* harbour/src/vm/set.c
+ added new functions for CP converisons which can be used with
and without active HVM:
hb_osStrEncode(), hb_osStrEncodeN(),
hb_osStrDecode(), hb_osStrDecode2(),
hb_osStrU16Encode(), hb_osStrU16EncodeN(),
hb_osStrU16Decode(), hb_osStrU16Decode2(),
* harbour/include/hbvm.h
* harbour/src/vm/hvm.c
+ added new function hb_vmIsReady() - it's similar to hb_vmActive()
but it also checks if current thread has active HVM stack.
* moved hb_cdpReleaseAll() to the end of HVM cleanup code so
CP conversions are longer active.
* harbour/include/hbcomp.h
* harbour/src/compiler/cmdcheck.c
* harbour/src/compiler/hbusage.c
* harbour/src/common/expropt2.c
+ added new compiler switch:
-ku - strings in user encoding
Now it informs compiler that strings use custom encoding so some
optimizations which are byte oriented cannot be used.
It's possible that in the future we will change above definition
to sth like: "strings in UTF8 encoding" but now I would like to
keep more general.
* harbour/src/vm/macro.c
* inform macrocompiler about custom CPs using own character indexes
to disable byte oriented optimizations.
* harbour/include/hbapigt.h
* harbour/src/rtl/gtapi.c
* harbour/src/rtl/inkeyapi.c
+ added HB_B_*_W macros with unicode box character definitions
+ added HB_MBUTTON_* macros
+ added new GT functions: hb_gtHostCP() and hb_gtBoxCP() which
allows to extract CPs used in translations by GTs.
+ added new function hb_inkeyKeyString() - it converts inkey value
to corresponding string
+ added new function hb_inkeyKeyStd() - it converts new extended
key value to standard Clipper one.
* harbour/include/hbapifs.h
* harbour/src/common/hbffind.c
* moved OS codepage translations fully to hb_fsFind*() functions.
It fixes few problems which existed before, i.e. double CP
conversions in MS-Windows builds and simplifies upper level code.
* harbour/src/pp/hbpp.c
* harbour/src/rtl/direct.c
* harbour/src/rtl/fssize.c
* harbour/src/rtl/file.c
* harbour/contrib/hbct/files.c
* eliminated not longer necessary CP conversions in code calling
hb_fsFind*() functions.
* harbour/src/common/hbgete.c
* moved OS codepage translations to hb_getenv(), hb_getenv_buffer()
and hb_setenv() functions. It fixes few problems which existed
before, i.e. double CP conversions in MS-Windows builds and
simplifies upper level code.
* harbour/src/rtl/net.c
* harbour/src/rtl/gete.c
* eliminated not longer necessary CP conversions in code calling
hb_getenv()/hb_setenv() functions.
; NOTE: additional parameters in HB_GETENV() and HB_SETENV() which
disabled CP conversions are not longer supported.
They were strictly platform dependent and ignored in chosen
cases (i.e. in MS-Windows UNICODE builds we always have to
convert strings transferred between HVM and OS. If someone
needs old functionality for other platform then he should
temporary disable _SET_OSCODEPAGE.
* harbour/src/common/hbver.c
* harbour/src/common/hbfsapi.c
* harbour/src/rtl/fstemp.c
* harbour/src/rtl/fslink.c
* eliminated HB_TCHAR_*() macros
* harbour/src/common/strwild.c
+ added supprot for custom CPs using own character indexes in:
hb_strMatchWild(),
hb_strMatchWildExact(),
hb_strMatchCaseWildExact()
* harbour/src/nortl/nortl.c
+ added new dummy function replacement for binaries which are not
linked with HVM.
* harbour/src/rtl/filesys.c
! fixed double CP conversions in MS-Windows builds of hb_fsCurDirBuff()
* use hb_vmIsReady() instead of hb_stackId() in file name conversions.
* use hb_cmdargProgName() in hb_fsBaseDirBuff()
* harbour/src/rtl/philes.c
* use hb_cmdargProgName() in HB_PROGNAME() function.
* harbour/src/rtl/gtcgi/gtcgi.c
* harbour/src/rtl/gtstd/gtstd.c
* harbour/src/rtl/gtpca/gtpca.c
* harbour/src/rtl/gtdos/gtdos.c
* harbour/src/rtl/gtos2/gtos2.c
* harbour/src/rtl/gtwin/gtwin.c
* harbour/src/rtl/gtwvt/gtwvt.h
* harbour/src/rtl/gtwvt/gtwvt.c
* harbour/src/rtl/gttrm/gttrm.c
* harbour/src/rtl/gtcrs/gtcrs.c
* harbour/src/rtl/gtsln/gtsln.c
* harbour/src/rtl/gtsln/kbsln.c
* harbour/src/rtl/gtsln/gtsln.h
* harbour/src/rtl/gtxwc/gtxwc.h
* harbour/src/rtl/gtxwc/gtxwc.c
* harbour/contrib/gtwvg/gtwvg.c
* harbour/contrib/gtwvg/gtwvg.h
* harbour/contrib/gtalleg/gtalleg.c
* harbour/contrib/hbqt/gtqtc/gtqtc.cpp
* harbour/contrib/hbqt/gtqtc/gtqtc.h
* updated to work with new unicode GT API
please make tests with different GTs - I'm not able to test
all of them, i.e. I do not have any OS2 machine.
* harbour/src/rtl/box.c
* harbour/src/rtl/oldbox.c
* harbour/src/rtl/scroll.c
* harbour/src/rtl/console.c
* updated to work with new unicode GT API and
CPs using custom character indexes
* harbour/src/rtl/at.c
* harbour/src/rtl/ati.c
* harbour/src/rtl/rat.c
* harbour/src/rtl/len.c
* harbour/src/rtl/transfrm.c
* harbour/src/rtl/left.c
* harbour/src/rtl/right.c
* harbour/src/rtl/substr.c
* harbour/src/rtl/stuff.c
* harbour/src/rtl/padc.c
* harbour/src/rtl/padl.c
* harbour/src/rtl/padr.c
* updated to work with CPs using custom character indexes
* harbour/src/rtl/chrasc.c
+ added support for HB_CDP_ISCHARUNI() CPs.
* harbour/src/rtl/mlcfunc.c
* rewritten from scratch to work with CPs using custom character
indexes
* harbour/src/rtl/accept.c
* updated to work with unicode inkey values and
CPs using custom character indexes
* harbour/src/rtl/strmatch.c
% small optimization
* harbour/src/rtl/Makefile
+ harbour/src/rtl/chruni.c
+ added new PRG functions which allows to make byte/binary and
unicode/character operations on strings:
HB_UCHAR( <nCode> ) -> <cText>
return string with U+nCode character in HVM CP encoding
HB_BCHAR( <nCode> ) -> <cText>
return 1 byte string with <nCode> value
HB_UCODE( <cText> ) -> <nCode>
return unicode value of 1-st character (not byte) in given string
HB_BCODE( <cText> ) -> <nCode>
return value of 1-st byte in given string
HB_ULEN( <cText> ) -> <nChars>
return string length in characters
HB_BLEN( <cText> ) -> <nBytes>
return string length in bytes
HB_UPEEK( <cText>, <n> ) -> <nCode>
return unicode value of <n>-th character in given string
HB_BPEEK( <cText>, <n> ) -> <nCode>
return value of <n>-th byte in given string
HB_UPOKE( [@]<cText>, <n>, <nVal> ) -> <cText>
change <n>-th character in given string to unicode <nVal> one and
return modified text
HB_BPOKE( [@]<cText>, <n>, <nVal> ) -> <cText>
change <n>-th byte in given string to <nVal> and return modified
text
* harbour/src/rtl/hbdoc.prg
* harbour/src/rtl/memvarhb.prg
* use HB_BCHAR() for binary string definitions
* harbour/src/rtl/hbi18n2.prg
* use hb_utf8CHR( 0xFEFF ) instead of hardcoded binary sting and
HB_BLEN() instead of LEN()
* harbour/src/rtl/inkey.c
+ added new functions:
HB_KEYCHAR( <nKey> ) -> <cChar>
HB_KEYSTD( <nExtKey> ) -> <nClipKey>
! use HB_INKEY_ALL instead of INKEY_ALL in LASTKEY()
* harbour/src/rtl/achoice.prg
* harbour/src/rtl/browse.prg
* harbour/src/rtl/menuto.prg
* harbour/src/rtl/tgetlist.prg
* harbour/src/rtl/teditor.prg
* harbour/src/rtl/tlabel.prg
* harbour/src/rtl/tpopup.prg
* harbour/src/rtl/radiobtn.prg
* harbour/src/rtl/radiogrp.prg
* harbour/src/rtl/wait.prg
* updated to work with unicode inkey() values
* harbour/src/rtl/listbox.prg
* use box.ch macros instead of explicit CHR(...) definitions
* harbour/src/rtl/ttopbar.prg
* updated to work with different type of CPs
* harbour/src/rtl/scrollbr.prg
* formatting
* harbour/src/rtl/mouse53.c
* use HB_MBUTTON_* macros instead of local ones
* harbour/src/codepage/cp_utf8.c
+ harbour/src/codepage/uc16def.c
+ harbour/src/codepage/utf8sort.c
* replaced UTF8ASC with new CP: UTF8EX
This CP uses character indexes instead of bytes one
and operates on unicode characters flags.
Tables for upper/lower conversions and upper/lower/alpha/digit
flags were generated automatically from
http://www.unicode.org/Public/UNIDATA/UnicodeData.txt
It also uses custom collation rules. It's very simple one
level sorting based on UTF8 C collation.
If someone needs some advanced sorting rules, then it's enough
to create copy of this cp with user custom version of UTF8_cmp()
and UTF8_cmpi() functions, i.e. they can be redirected to some
external library like ICU (icu-project.org).
* harbour/contrib/hbct/ctwin.c
* harbour/contrib/hbct/ctwin.h
* harbour/contrib/hbct/ctwfunc.c
* added support for new unicode GT API
* harbour/contrib/xhb/xhbfunc.c
* redirected HB_CMDARGARGV() to HB_PROGNAME()
* harbour/contrib/hbnf/origin.c
* redirected FT_ORIGIN() to HB_PROGNAME()
* harbour/contrib/hbnf/getenvrn.c
! windows version of FT_GETE() fully rewritten - it should
fix well known problems reported to the devel list. Please test.
% small optimization for other systems
* harbour/contrib/hbfship/exec.c
* use hb_cmdargProgName() in EXECNAME()
+ harbour/tests/uc16_gen.prg
+ added code which generates tables with unicode character flags
from http://www.unicode.org/Public/UNIDATA/UnicodeData.txt.
harbour/src/codepage/uc16def.c was generated by this code.
* harbour/tests/inkeytst.prg
* harbour/tests/wvtext.prg
* harbour/tests/gtkeys.prg
* use HB_INKEY_ALL
* harbour/include/harbour.hbx
* harbour/include/hbcpage.hbx
* harbour/include/hblang.hbx
* regenerated
; It was quite big peace of modifications and for sure not everything
is well tested so please make test and report problems you will find.
; This is basic version which introduce to HVM CPs with custom encodings.
Some contrib code has to be updated to work correctly with it.
I hope that developers interesting in will make necessary updates.
I haven't touched GTWVW code at all - sorry but it needs very serious
work to make it production ready and fix all existing problems.
; Special thanks to OTC - this firm sponsored adding basic UTF8 support
to HVM.
* harbour/include/hbapifs.h
* harbour/src/common/hbffind.c
! fixed potential freeing uninitialized handlers on some platforms
* hide private members
* harbour/src/codepage/Makefile
* harbour/include/hbcpage.hbx
+ harbour/src/codepage/cp950.c
+ harbour/src/codepage/cp_950.c
+ added new Harbour codepage "CP950". It's similar to BIG5 and
used by MS-Windows. Please test and inform me if you can replace
BIG5 in your applications with CP950 without any problems.
* harbour/contrib/hbnf/hbnf.hbx
+ added FT_IDLE()
* harbour/include/hbcdpreg.h
+ added few macros for extended CP definition
* harbour/src/codepage/cp_big5.c
* harbour/src/codepage/cp_utf8.c
* harbour/src/codepage/cp_u16le.c
* updated macros for CP definition
* harbour/tests/big5_gen.prg
% added small improvement in code hashing character
translation tables so they are a little bit smaller
* harbour/src/codepage/big5.c
* regenerated
* harbour/src/rtl/cdpapi.c
* harbour/src/rtl/cdpapihb.c
* harbour/src/codepage/cp_utf8.c
* slightly modified algorithms for decoding UTF8 characters to work
better with broken UTF8 strings (i.e. to not eat characters after
broken and unclosed multibyte one)
* some minor improvements in HB_UTF8STUFF()
* formating
* harbour/src/rtl/gtwvt/gtwvt.c
! update font metrics after HB_GTI_FONTSIZE also when window is not
active yet - without it all other calculations are broken
* harbour/src/codepage/uc1250.c
* harbour/src/codepage/uc1251.c
* add some missing codes which are not officially defined but
MS-Windows uses them - I've just check it reading unicode values
from some fonts.
It also look that some fonts have VGA glyphs attached only to control
values at range 0-31 without their real Unicode representation. It's
the reason why they are not shown in GTWVT UNICODE builds. Pritpal
reported such problem recently.
This can be quite easy resolved by replacing hb_cdpGetU16Disp()
with hb_cdpGetU16() in gtwvt.c but it may cause that we lost control
characters in some other fonts. I would like to ask MS-Windows users
to makes some tests with such modified GTWVT and check if control
code are well shown with different fonts. If not then we can add
HB_GTI_* switch to enable/disable control codes to unicode values
translation.
* harbour/src/rtl/gtxwc/gtxwc.c
* harbour/src/rtl/gtwvt/gtwvt.c
* harbour/contrib/xhb/hboutdbg.c
* harbour/contrib/xhb/xhbfunc.c
! use 'hb_cmdargARGVN( 0 )' instead of 'hb_cmdargARGV()[ 0 ]' to avoid
GPF when no arguments are initialized
* harbour/contrib/hbwin/hbolesrv.hbc
* use {allmingw} instead of {mingw} macro for MinGW64 builds
* harbour/src/codepage/Makefile
* harbour/src/codepage/uc646_yu.c
+ harbour/src/codepage/uc646yuc.c
* harbour/include/hbapicdp.h
+ added JUS I.B1.003 - Cyrillic script variant of ISO-646-YU
for Serbian and Macedonian language
* harbour/src/codepage/Makefile
+ harbour/src/codepage/cpsr646.c
+ harbour/src/codepage/cpsr646c.c
* harbour/include/hbcpage.hbx
+ added SR646 and SR646C Harbour codeapges.
Both code pages uses the same 8-bit representation but different
unicode values - SR646 uses Latin script and SR646C Cyrillic script.
It means that it's useless to make any translations between SR646
and SR646C because both versions uses the same ASCII values but they
can help in translation to other encodings or CPs, i.e. to convert
some Serbian text in one of the above CPs to Latin letters in UTF8
encoding then it's enough to make:
hb_strToUTF8( <cText>, "SR646" ) -> <cUtf8LatinText>
and for conversion to UTF8+Cyrillic:
hb_strToUTF8( <cText>, "SR646C" ) -> <cUtf8CyrillicText>
* harbour/src/rtl/memofile.c
% eliminated two call to hb_fsSeek() and one hb_fsRead() from
non *nix version of MEMOREAD() function
! do not write final EOF character if write failed in MEMOWRIT()
function
; TOFIX: In *nixes support for EOF character in MEMOREAD() and
MEMOWRITE() is disabled by default - IMHO it's wrong
because it's not possible to use these functions to exchange
safely data with CA-Cl*pper applications or even DOS/Windows
versions of Harbour applications.
* harbour/src/rtl/hbcom.c
* replaced infinite waiting for reading/writing from/to serial port
in *nix builds with loops checking periodically (once per second)
for HVM events (i.e. thread interrupting).
* harbour/src/codepage/uc88591b.c
* converted hex digit to uppercase
* harbour/contrib/hbwin/win_dlg.c
+ added support for setting default file name in
WIN_GETOPENFILENAME() and WIN_GETSAVEFILENAME() functions:
WIN_GETOPENFILENAME( [[@]<nFlags>], [<cTitle>], [<cInitDir>],
[<cDefExt>], [<acFilter>], [[@]<nFilterIndex>],
[<nBufferSize>], [<cDefName>] )
-> <cFilePath> |
<cPath> + e"\0" + <cFile1> [ + e"\0" + <cFileN> ] |
""
WIN_GETSAVEFILENAME( [[@]<nFlags>], [<cTitle>], [<cInitDir>],
[<cDefExt>], [<acFilter>], [[@]<nFilterIndex>],
[<nBufferSize>], [<cDefName>] )
-> <cFilePath> |
<cPath> + e"\0" + <cFile1> [ + e"\0" + <cFileN> ] |
""
* harbour/include/hbapicdp.h
* harbour/include/hbcdpreg.h
* harbour/src/rtl/cdpapi.c
* harbour/src/rtl/cdpapihb.c
+ added support for user defined character encoding.
Now it's possible to easy create and register in HVM CPs using any
encoding so I expected that users interested in adding support for
some exotic character encoding will create such mapping instead
of asking for it.
% moved support for codepages using multibyte characters mapped to
single unicode values to user defined encoding - it nicely simplify
the code and eliminate unnecessary overhead in other CPs.
* allow to chose UTF8 as HVM CP
* harbour/src/rtl/idle.c
! fixed idle mode flag resetting
* harbour/src/rdd/hbsix/sxutil.c
! fixed SX_SLIMFAST() results when nested quoting with (") and (') is
used
+ harbour/tests/big5_gen.prg
+ added code to generate C source with conversion tables between
BIG5 and UCS16 using data defined by Unicode, Inc. in BIG5.TXT
+ harbour/src/codepage/cp_utf8.c
+ added alternative UTF8 Harbour CP (UTF8ASC) as an example Harbour
user defined codapged using multibyte character encoding
* harbour/src/codepage/Makefile
+ harbour/src/codepage/cp_u16le.c
+ added Harbour codepage using UTF16 little endian encoding
* harbour/src/codepage/Makefile
+ harbour/src/codepage/big5.c
+ harbour/src/codepage/cp_big5.c
+ added BIG5 Harbour CP. It can be used with programs using Harbour
STR API with automatic translations.
; This CP needs really big translation tables. I added code which
makes some very simple compression which reduced raw size from
176100 bytes to 77354 but it's still large 77KB so maybe we should
think about moving this CP to other Harbour codpage library which
is not part of harbour shared library harbour*{.dll|.so|.dyn|...}
Alternatively I can try to reduce static size to about 30KB and
then build necessary tables dynamically at runtime when they are
used first time though in such case I will need additional 177KB
of dynamic memory instead of 77KB of static memory used by current
code.
* harbour/src/codepage/cpcskamc.c
* harbour/src/codepage/cpskkamc.c
* replaced binary tables used to create CSKAMC and SKKAMC with
human readable definition using HB_CDP_CSSORT_MIXED
* include/harbour.hbx
* include/hbsocket.h
* src/rtl/hbsocket.c
* src/rtl/hbinet.c
* src/rtl/hbsockhb.c
+ Added hb_socketSetExclusiveAddr() on .c level.
+ Added hb_socketSetExclusiveAddr() on .prg level.
* hb_socketSetReuseAddr() cleaned from SO_EXCLUSIVEADDRUSE (Windows-only)
logic.
* Changed HB_INETSERVER(), HB_INETDGRAMBIND() to call
hb_socketSetExclusiveAddr()(). We may delete these if they
cause problems on some Windows platforms, though we must
absolutely use this option (for security reasons) in every
server component, if Windows host supports it.
; TODO: Call hb_socketSetExclusiveAddr() from hbnetio server,
hbhttpd server.
* include/hbcpage.hbx
* src/codepage/Makefile
+ src/codepage/cpcs852c.c
* src/codepage/cpsk852c.c
- src/codepage/cpcskam.c
+ src/codepage/cpcskamc.c
- src/codepage/cpskkam.c
+ src/codepage/cpskkamc.c
! Fixed SK852C to be fully Clipper compatible. (generated with cpinfo)
! Added Clipper compatible CS852C CP. (generated with cpinfo)
* SK/CS Kamenicky CP moved to Clipper compatibility status.
Updated to be Clipper compatible. (generated with cpinfo)
INCOMPATIBLE. Pls update CP names if you used these.
Thanks to Jaroslav Janik for the help.
Please test all these.
* harbour/src/codepage/cpcs852.c
* harbour/src/codepage/cpcskam.c
* harbour/src/codepage/cpcsiso.c
* harbour/src/codepage/cpcswin.c
! switched from HB_CDP_ACSORT_INTERLEAVED to HB_CDP_ACSORT_NONE in
Czech code pages.
* harbour/config/win/bcc.mk
* disable explicitly some common BCC warnings in 3rd party code
which we can safely ignore when HB_BUILD_WARN=no
* harbour/utils/hbmk2/hbmk2.prg
* disable explicitly some common BCC warnings which we can safely
ignore when warning level is set to low
* harbour/contrib/hbmisc/bbabble.c
* removed unnecessary incrementation to pacify compile warning
+ config/hbc.cfg
+ Added .c source formatter config file for uncrustify source code formatter,
tailored to mimic Harbour C formatting style.
http://uncrustify.sourceforge.net/
This tool looks very promising to save manual formatting time.
(in our case it's useful for new code, existing code is mostly
quite well formatted in most parts)
; WARNING: The config is currently at experimental stage (IOW it's
not perfect), so don't use it to format any existing
Harbour source, but you may try it with your local source
which you want to submit or see how would it look in
Harbour-style.
* contrib/hbtip/url.prg
! Fixed to store passed url in :cAddress VAR.
Like with most Harbour OOP code, this simple change may
introduce hard-to-detect imcompatibility,
so check your code.
- contrib/rddbm/rddbmcdx.hbp
+ contrib/rddbm/rddbm.hbp
- contrib/rddbm/rddbmcdx.hbc
+ contrib/rddbm/rddbm.hbc
! Renamed too.
* src/codepage/cpsk852.c
* src/codepage/cpskiso.c
* src/codepage/cpskwin.c
* Trying to add digraphs. (doesn't work here, but can't find out why)
; TODO: Update Kamenicky. (can't even do it with hb_translate(),
as it's messed up the first time I edit it.
; TODO: Apply final fixes to CS CPs.
* contrib/sddoci/sddoci.hbp
+ Added support for implib creation for win x64 targets.
* package/winuni/RELNOTES
* OCILIB version update.
* contrib/rddbm/bmdbfcdx.c
* contrib/hbhttpd/core.prg
* contrib/hbhttpd/widgets.prg
* Formatting.
* include/hbcpage.hbx
* src/codepage/Makefile
+ src/codepage/cpsk852c.c
+ Added Clipper compatible Slovak collation.
* src/codepage/cpsk852.c
* src/codepage/cpskkam.c
* src/codepage/cpskiso.c
* src/codepage/cpskwin.c
! Fixed Slovak collation.
; INCOMPATIBLE: All users using any of the above codepages will
have to reindex.
; Thanks to Julius Bartal for sorting it out.
* harbour/include/hbextcdp.ch
* harbour/include/hbextlng.ch
* harbour/src/lang/Makefile
- harbour/src/lang/msghr437.c
+ harbour/src/lang/msghr646.c
- harbour/src/codepage/cphr437.c
+ harbour/src/codepage/cphr646.c
* renamed HR437 CP and LANG modules to HR646 (CROSCII / ISO-646-YU)
* harbour/include/hbextcdp.ch
* harbour/include/hbextlng.ch
* harbour/src/codepage/Makefile
- harbour/src/lang/msgsl437.c
+ harbour/src/lang/msgsl646.c
- harbour/src/codepage/cpsl437.c
+ harbour/src/codepage/cpsl646.c
* renamed CL437 CP and LANG modules to CL646 (SLOSCII / ISO-646-YU)
* harbour/src/lang/msghriso.c
! fixed language ID
+ harbour/src/codepage/cphr646.c
* harbour/src/codepage/cphr852.c
* harbour/src/codepage/cphrwin.c
+ harbour/src/codepage/cpsl646.c
* harbour/src/codepage/cpsliso.c
* harbour/src/codepage/cpslwin.c
* harbour/src/codepage/cpsl852.c
! changed the collation order so X and Y characters are sorted before Z
It's CL5.2 ntxcro.obj compatible behavior. Now HR646 and SL646 Harbour
CPs can be used to share data with Clipper application linked with
ntxcro.obj.
* harbour/include/hbextcdp.ch
* harbour/src/codepage/Makefile
+ harbour/src/codepage/cphriso.c
+ added HRISO (ISO-8859-2) Harbour CP module
Please test all these modifications.
[TOMERGE 2.0]
* harbour/src/nortl/nortl.c
! added hb_xtraced()
* harbour/src/common/hbstr.c
* do not fill unused part of buffer with '\0' bytes in
hb_strncpy(), hb_strncpyLower(), hb_strncpyUpper(),
hb_strncpyUpperTrim(), hb_strncpyTrim()
* harbour/src/common/hbtrace.c
% small optimization in building Unicode OutputDebugString() message
* harbour/src/codepage/Makefile
* harbour/include/hbapicdp.h
+ harbour/src/codepage/ucyuscii.c
+ added YUSCII unicode table
* harbour/src/codepage/cphr437.c
* harbour/src/codepage/cpsl437.c
! fixed unicode table used in HR437 and SL437 Harbour CPs.
It's not CP-437 but YUSCII
- removed my old note "TOFIX: is it really CP-437?"
TOFIX: change Harbour names of above CPs, i.e. to HRYU and SLYU
* harbour/src/codepage/uckam.c
* removed TOFIX note I forgot to remove when committed correct
Kamenicky Unicode table.
* harbour/src/codepage/uckoi8.c
* harbour/src/codepage/uc857.c
* harbour/src/codepage/uc1250.c
* harbour/src/codepage/uc1254.c
* harbour/src/codepage/uc866.c
* harbour/src/codepage/uc850.c
* harbour/src/codepage/uc1251.c
* harbour/src/codepage/ucmaz.c
* harbour/src/codepage/uc1252.c
* harbour/src/codepage/uc8859_1.c
* harbour/src/codepage/uc88591b.c
* harbour/src/codepage/uc852.c
* harbour/src/codepage/uc737.c
* harbour/src/codepage/uc1253.c
* harbour/src/codepage/uc1257.c
* harbour/src/codepage/uc8859_2.c
* updated some of my old copyright messages
* src/codepage/Makefile
+ src/codepage/cpel437.c
- src/codepage/cpgr437.c
* include/hbextcdp.ch
* Renamed GR437 codepage to EL437. EL is the ISO language code for Greek.
* harbour/src/rtl/cdpapi.c
* updated to work well with CPs where CHR( 0 ) is not sorted as 1-st
character
* harbour/tests/cpinfo.prg
* chose binary form for CPs where upper and lower letters are sorted
in different order
* harbour/src/codepage/cpnl850.c
* updated to binary form
* harbour/tests/cpinfo.prg
* harbour/include/hbapicdp.h
* harbour/include/hbcdpreg.h
* modified format used for CP definition using binary tables
+ added Latin character striping from non Latin based CPs
* changed warning message to be more clear. In most of cases when
this message is shown:
Warning: irregular CP which needs verification for human
readable definition in Harbour
it should be possible to create human non binary CP definition.
Usually it should be enough to copy HB_CP_UPPER and HB_CP_LOWER
strings and verify if final result are compatible by comparing
automatically generated .c file with binary tables. If you will
find some CPs where it's not compatible then please inform me
about it and I'll try to update cpinfo.prg
When this message is shown:
Warning: irregular CP which needs special definition in Harbour
using binary tables generated by this program
then binary tables have to be used to replicate exact CP conditions.
If no warning message is shown then human readable form of CP
definition can be used without (I hope ;)) additional verification.
* harbour/src/codepage/cpno865.c
* harbour/src/codepage/cpit850m.c
* harbour/src/codepage/cpis850.c
* harbour/src/codepage/cpfr850.c
* harbour/src/codepage/cpes850c.c
* harbour/src/codepage/cpsv850m.c
* harbour/src/codepage/cpde850m.c
* harbour/src/codepage/cppt860.c
* harbour/src/codepage/cpnl850m.c
* harbour/src/codepage/cpnl850.c
* harbour/src/codepage/cpde850.c
* harbour/src/codepage/cpfi850.c
* harbour/src/codepage/cpit850.c
* harbour/src/codepage/cpis861.c
* harbour/src/codepage/cpes850m.c
* harbour/src/codepage/cpfr850m.c
* harbour/src/codepage/cpsv437c.c
* harbour/src/codepage/cpdk865.c
* harbour/src/codepage/cpgr437.c
* updated for new format
* include/hbextcdp.ch
* Updated to reflect recent couple of commits.
* src/codepage/Makefile
+ src/codepage/cpit850m.c
+ src/codepage/cpde850m.c
+ src/codepage/cpsv850m.c
+ src/codepage/cpnl850m.c
+ src/codepage/cpes850m.c
+ src/codepage/cpfr850m.c
+ Added mdx*.obj compatible CPs, created by cpinfo.prg.
; TOFIX: I didn't added mdxuk and mdxusa, simply because
it cannot fit in current filename scheme, which
uses only two chars to denote language.
* codepage/Makefile
- codepage/cpesisoc.c
- codepage/cpeswinc.c
- Deletes ISO and Win pairs of ES850C.
* codepage/Makefile
+ codepage/cpgr437.c
+ codepage/cpgr851.c
+ codepage/cpis850.c
+ codepage/cpis861.c
+ codepage/cpdk865.c
+ codepage/cpfi850.c
+ codepage/cpnl850.c
+ codepage/cpno865.c
+ codepage/cppt860.c
+ Added CPs generated via cpinfo.prg from ntx*.obj (C5.2e).
For these language, I've only 'guessed' the CP assigment:
cpdk865
cpfi850
cpnl850
cpno865
cppt860
TOFIX: Any mistakes in above.
* codepage/Makefile
- codepage/cpsvclip.c
+ codepage/cpsv437c.c
* Renamed to use naming scheme like all others.
; TOFIX: 437 is most certainly wrong CP assigment, and
it should probably be 850 or 865.
* codepage/cpfr850.c
* codepage/cpes850c.c
* codepage/cpde850.c
* codepage/cpit850.c
* Replaced with versions generated by cpinfo.prg.
; TODO: cpinfo.prg isn't generating short format of CP source files,
so all above may need to be converted to it for better readability.
* harbour/tests/cpinfo.prg
+ added additional information that binary tables generated by cpinfo.prg
have to be used instead of human readable form when such situation can
be easy detected
* harbour/src/codepage/cpsvclip.c
* replaced old definition with binary tables generated by cpinfo.prg
to fully replicate wrong Clipper NTXSWE.OBJ definition.
* src/codepage/cphu852.c
+ src/codepage/cphu852c.c
- src/codepage/cphu852s.c
* src/codepage/Makefile
* include/hbextcdp.ch
* Changed HU852 CP to be the same as HUISO and HUWIN.
I kept the extra non-Hungarian char, which makes this CP
fully compatible with sixhu852.obj.
+ Added HU852C which is fully C5.2e compatible, this file
was generated by cpinfo using C5.2e Intl + ntxhu852.obj.
This may fix some C5.2e incompatibilities that existed
in former HU852 CP.
- Deleted HU852S, it's now called HU852.
; NOTE: Since there is no 'default' HU852 CP in Harbour I
find it ok to provide C5.2e compatible CP by the
name 'HU852C'. If this seems bothering to Hungarian
users in general, we may think out something.
- src/codepage/cphuisos.c
- src/codepage/cphuwins.c
- Deleted these variants which are no longer needed.
* src/codepage/cphuiso.c
* src/codepage/cphuwin.c
* Updated comments.
; TOFIX: Remove or not remove ASCII 196/228 char pair?
It's not a Hungarian accented char, it was present
in sixhu852, but since we don't have any obligations
to keep compatibility as the CP is different anyway,
maybe the best would be to clean it.
What is the general opinion in this regard in Harbour?
* harbour/ChangeLog
* marked last TOFIX note as [DONE] - thanks to Mindaugas
* harbour/src/rtl/cdpapi.c
* use 1-st upper<->lower conversion pair instead of last one
if more then one conversion pair exist - it's more natural
form in most of cases
% skip translation code when two different CDP modules use
the same Unicode table
* harbour/tests/cpinfo.prg
+ detect CPs which have corresponding upper or lower characters
for non alpha characters and inform about it.
Such situations is in NTXSPA.OBJ so such CP can be fully
replicated in Harbour using alternative CP definition only
which uses static tables.
* harbour/src/codepage/cpes850c.c
* harbour/src/codepage/cpesisoc.c
* harbour/src/codepage/cpeswinc.c
! removed the hack with changed order for characters which do not
have corresponding upper latter.
Now there is only one difference between ES850C and Clipper NTXSPA.OBJ
In NTXSPA 'UPPER( Chr( 163 ) )' gives "U" though Chr( 163 ) is not
marked as letter and not sorted with other letters. For me it looks
like a bug anyhow if you want to fully replicate NTXSPA.OBJ in Harbour
then current cpes850c.c code should be replaced by code generated
using tests/cpinfo.prg compiler by clipper and linked with ntxspa.obj.
Such code should be generated using:
cpinfo.exe es850c "Spanish CP-850 (ntxspa.obj compatible)" 850
Now translations can be done between CPs using different number of
letters or even defined for different languages so I have question
to Spanish users: Do you need ESISOC and ESWINC for anything?
If not then I would like to remove them.
Similar situation is with HUISOS and HUWINS.
* harbour/include/hbapicdp.h
* harbour/src/rtl/cdpapi.c
* harbour/src/codepage/ucmacce.c
* harbour/src/codepage/uckoi8.c
* harbour/src/codepage/uc885910.c
* harbour/src/codepage/ucmacice.c
* harbour/src/codepage/uc885914.c
* harbour/src/codepage/uc874.c
* harbour/src/codepage/uc857.c
* harbour/src/codepage/uc1250.c
* harbour/src/codepage/uc1254.c
* harbour/src/codepage/uc1258.c
* harbour/src/codepage/uckoi8u.c
* harbour/src/codepage/uckam.c
* harbour/src/codepage/uc424.c
* harbour/src/codepage/ucmacrom.c
* harbour/src/codepage/uc862.c
* harbour/src/codepage/cpesisoc.c
* harbour/src/codepage/uc866.c
* harbour/src/codepage/uc8859_3.c
* harbour/src/codepage/cpes850c.c
* harbour/src/codepage/uc8859_7.c
* harbour/src/codepage/ucmacgrk.c
* harbour/src/codepage/uc037.c
* harbour/src/codepage/uc850.c
* harbour/src/codepage/uc885911.c
* harbour/src/codepage/uc885915.c
* harbour/src/codepage/uc875.c
* harbour/src/codepage/uc1251.c
* harbour/src/codepage/uc1255.c
* harbour/src/codepage/uc863.c
* harbour/src/codepage/ucmaz.c
* harbour/src/codepage/uc1026.c
* harbour/src/codepage/uc8859_4.c
* harbour/src/codepage/uc8859_8.c
* harbour/src/codepage/uc855.c
* harbour/src/codepage/cpeswinc.c
* harbour/src/codepage/uc885916.c
* harbour/src/codepage/ucascii.c
* harbour/src/codepage/uc1252.c
* harbour/src/codepage/uc1256.c
* harbour/src/codepage/ucatari.c
* harbour/src/codepage/uc860.c
* harbour/src/codepage/ucmaccyr.c
* harbour/src/codepage/ucmik.c
* harbour/src/codepage/uc864.c
* harbour/src/codepage/uc1006.c
* harbour/src/codepage/uc1125.c
* harbour/src/codepage/uc8859_1.c
* harbour/src/codepage/uc88591b.c
* harbour/src/codepage/uc8859_5.c
* harbour/src/codepage/uc8859_9.c
* harbour/src/codepage/uc852.c
* harbour/src/codepage/ucnext.c
* harbour/src/codepage/uc737.c
* harbour/src/codepage/uc885913.c
* harbour/src/codepage/ucmactrk.c
* harbour/src/codepage/uc856.c
* harbour/src/codepage/uc775.c
* harbour/src/codepage/uc1253.c
* harbour/src/codepage/uc1257.c
* harbour/src/codepage/uc500.c
* harbour/src/codepage/uc861.c
* harbour/src/codepage/uc865.c
* harbour/src/codepage/uc869.c
* harbour/src/codepage/uc8859_2.c
* harbour/src/codepage/uc8859_6.c
% declare Unicode tables with 'const' qualifier
* harbour/src/vm/set.c
! fixed small typos in returned values (FALSE instead of NULL and 0)
* harbour/src/vm/estack.c
* make calling hb_stackTotalItems() safe in MT mode when stack is not
initialized - now this function can be used to check if HVM stack
exists and is initialized in ST and MT mode
* harbour/src/rtl/errintlo.c
! fixed at least 4 GPF traps exploited when hb_errInternal() was called
and HVM stack was not initialized
* harbour/include/Makefile
+ harbour/include/hbcdpreg.h
* harbour/include/hbapicdp.h
* harbour/src/rtl/cdpapi.c
+ added new CDP API which fixes many errors and limitations in old
implementation.
Warning !!! some very serious bugs in national sorting have been
fixed. It may cause that old indexes using some national
sorting will not be compatible. Please rebuild existing
indexes.
* harbour/src/vm/itemapi.c
* harbour/src/rdd/hsx/hsx.c
* harbour/src/rdd/dbfntx/dbfntx1.c
* harbour/src/rdd/dbfnsx/dbfnsx1.c
* harbour/src/rdd/dbfcdx/dbfcdx1.c
* harbour/contrib/hbbmcdx/bmdbfcdx.c
* harbour/contrib/rddads/adsx.c
* harbour/contrib/rddsql/sqlmix.c
* updated to work with new CDP API
TOFIX: update adsx.c and sqlmix.c to use hb_cdpcmp() which resepcts
sorting with accented and mulitybyts characters.
Mindaugas, can you update above code?
* harbour/src/codepage/cpbg866.c
* harbour/src/codepage/cpbgiso.c
* harbour/src/codepage/cpbgmik.c
* harbour/src/codepage/cpbgwin.c
* harbour/src/codepage/cpcs852.c
* harbour/src/codepage/cpcsiso.c
* harbour/src/codepage/cpcskam.c
* harbour/src/codepage/cpcswin.c
* harbour/src/codepage/cpde850.c
* harbour/src/codepage/cpdeiso.c
* harbour/src/codepage/cpdewin.c
* harbour/src/codepage/cpel737.c
* harbour/src/codepage/cpeliso.c
* harbour/src/codepage/cpelwin.c
* harbour/src/codepage/cpes850.c
* harbour/src/codepage/cpes850c.c
* harbour/src/codepage/cpesiso.c
* harbour/src/codepage/cpesisoc.c
* harbour/src/codepage/cpeswin.c
* harbour/src/codepage/cpeswinc.c
* harbour/src/codepage/cpeswinm.c
* harbour/src/codepage/cpfr850.c
* harbour/src/codepage/cpfriso.c
* harbour/src/codepage/cpfrwin.c
* harbour/src/codepage/cphr437.c
* harbour/src/codepage/cphr852.c
* harbour/src/codepage/cphrwin.c
* harbour/src/codepage/cphu852.c
* harbour/src/codepage/cphu852s.c
* harbour/src/codepage/cphuiso.c
* harbour/src/codepage/cphuisos.c
* harbour/src/codepage/cphuwin.c
* harbour/src/codepage/cphuwins.c
* harbour/src/codepage/cpit437.c
* harbour/src/codepage/cpit850.c
* harbour/src/codepage/cpitisb.c
* harbour/src/codepage/cpitiso.c
* harbour/src/codepage/cpitwin.c
* harbour/src/codepage/cpltwin.c
* harbour/src/codepage/cppl852.c
* harbour/src/codepage/cppliso.c
* harbour/src/codepage/cpplmaz.c
* harbour/src/codepage/cpplwin.c
* harbour/src/codepage/cppt850.c
* harbour/src/codepage/cpptiso.c
* harbour/src/codepage/cpro852.c
* harbour/src/codepage/cproiso.c
* harbour/src/codepage/cprowin.c
* harbour/src/codepage/cpru866.c
* harbour/src/codepage/cpruiso.c
* harbour/src/codepage/cprukoi.c
* harbour/src/codepage/cpruwin.c
* harbour/src/codepage/cpsk852.c
* harbour/src/codepage/cpskiso.c
* harbour/src/codepage/cpskkam.c
* harbour/src/codepage/cpskwin.c
* harbour/src/codepage/cpsl437.c
* harbour/src/codepage/cpsl852.c
* harbour/src/codepage/cpsliso.c
* harbour/src/codepage/cpslwin.c
* harbour/src/codepage/cpsrwin.c
* harbour/src/codepage/cpsv850.c
* harbour/src/codepage/cpsvclip.c
* harbour/src/codepage/cpsviso.c
* harbour/src/codepage/cpsvwin.c
* harbour/src/codepage/cptr857.c
* harbour/src/codepage/cptriso.c
* harbour/src/codepage/cptrwin.c
* harbour/src/codepage/cpua1125.c
* harbour/src/codepage/cpua866.c
* harbour/src/codepage/cpuakoi.c
* harbour/src/codepage/cpuawin.c
* harbour/src/codepage/uc037.c
* harbour/src/codepage/uc1006.c
* harbour/src/codepage/uc1026.c
* harbour/src/codepage/uc1125.c
* harbour/src/codepage/uc1250.c
* harbour/src/codepage/uc1251.c
* harbour/src/codepage/uc1252.c
* harbour/src/codepage/uc1253.c
* harbour/src/codepage/uc1254.c
* harbour/src/codepage/uc1255.c
* harbour/src/codepage/uc1256.c
* harbour/src/codepage/uc1257.c
* harbour/src/codepage/uc1258.c
* harbour/src/codepage/uc424.c
* harbour/src/codepage/uc500.c
* harbour/src/codepage/uc737.c
* harbour/src/codepage/uc775.c
* harbour/src/codepage/uc850.c
* harbour/src/codepage/uc852.c
* harbour/src/codepage/uc855.c
* harbour/src/codepage/uc856.c
* harbour/src/codepage/uc857.c
* harbour/src/codepage/uc860.c
* harbour/src/codepage/uc861.c
* harbour/src/codepage/uc862.c
* harbour/src/codepage/uc863.c
* harbour/src/codepage/uc864.c
* harbour/src/codepage/uc865.c
* harbour/src/codepage/uc866.c
* harbour/src/codepage/uc869.c
* harbour/src/codepage/uc874.c
* harbour/src/codepage/uc875.c
* harbour/src/codepage/uc885910.c
* harbour/src/codepage/uc885911.c
* harbour/src/codepage/uc885913.c
* harbour/src/codepage/uc885914.c
* harbour/src/codepage/uc885915.c
* harbour/src/codepage/uc885916.c
* harbour/src/codepage/uc88591b.c
* harbour/src/codepage/uc8859_1.c
* harbour/src/codepage/uc8859_2.c
* harbour/src/codepage/uc8859_3.c
* harbour/src/codepage/uc8859_4.c
* harbour/src/codepage/uc8859_5.c
* harbour/src/codepage/uc8859_6.c
* harbour/src/codepage/uc8859_7.c
* harbour/src/codepage/uc8859_8.c
* harbour/src/codepage/uc8859_9.c
* harbour/src/codepage/ucascii.c
* harbour/src/codepage/ucatari.c
* harbour/src/codepage/uckam.c
* harbour/src/codepage/uckoi8.c
* harbour/src/codepage/uckoi8u.c
* harbour/src/codepage/ucmacce.c
* harbour/src/codepage/ucmaccyr.c
* harbour/src/codepage/ucmacgrk.c
* harbour/src/codepage/ucmacice.c
* harbour/src/codepage/ucmacrom.c
* harbour/src/codepage/ucmactrk.c
* harbour/src/codepage/ucmaz.c
* harbour/src/codepage/ucmik.c
* harbour/src/codepage/ucnext.c
* updated for new CP API
Warning: please test all national CPs. I'm not able to test unknown for
me national character conditions so it's possible that I made
something wrong. Additionally current CP API does not have
some limitations which existed in the old one so now some hacks
or workarounds can be cleaned. I.e. now all translations are
done using Unicode tables so it's not necessary to use the
same number of characters to make them working.
Updating CP files I've found the following potential problems
in definitions which I haven't fixed or fixed only partially:
cpes850c.c - update for new format removing hacks for old CP
implementation
cpesisoc.c > remove, it's not longer necessary
cpeswinc.c /
cpeswinm.c - it is the same as cpesiso.c so it should be removed
cphu852.c \
cphu852s.c \
cphuiso.c > update for new format removing hacks for old CP
cphuwin.c / implementation
cphuisos.c > remove, it's not longer necessary
cphuwins.c /
cphr437.c > does it really use CP-437? and ^]\[@~}|{` instead of
cpsl437.c / nationalletters or it uses different then 437 CP for
7-bit Croatian characters encoding. It's important
because without valid unicode table translations will
not work.
cpit437.c - update for new version if necessary (upper characters)
cpsv850.c \
cpsviso.c > they had ACCENTED_INTERLEAVED but without ACCENTED_EQUAL
cpsvwin.c / so this setting was ignored. Now it's not ignored.
cpsvclip.c - update for new format to be fully not only
"almost compatible with Clipper's NTXSWE.OBJ"
For sure these are not all problems inherited from old CP
implementation so please verify all existing CPs.
* harbour/src/codepage/cp_tpl.c
+ added new example for CP definition. Working on new CPs please read
this description:
If accented characters need special sorting ( HB_CDP_ACSORT_EQUAL or
HB_CDP_ACSORT_INTERLEAVE ) then you need to mark the accented
characters with the symbol '~' before each of them, for example:
a~_
If there is two-character sequence, which is considered as one, it
should be marked with '.' before and after it, for example:
... h.ch.i ...
if such multibyte character has its own Unicode representation then
this Unicode value can be set using '=' symbol, for example:
....h.ch=2A7C.i
and it will be used in translations.
The Upper case string and the Lower case string should use the
same letters. If some characters does not have corresponding upper
or lower letter then space ' ' can be used as dummy character, for
example in German CPs there is no upper case 'scharfes S' letter
so space is used as dummy character.
HB_CP_LATIN should be 1 if the national alphabet is based on Latin
otherwise 0
Please note that now you can use two versions of CP definition.
The 1-st one which uses human readable form similar to the old CP
definition and 2-nd which uses directly final CP tables so it
allows to replicate any conditions which existed in Clipper or
any other compatible language which uses static tables.
tests/cpinfo.prg can generate automatically .c files with new CP
definition in the 2-nd version. Now if user wants to create new
Harbour CP which is fully Clipper compatible he only has to
compile and link cpinfo.prg with given national sorting module
and then execute it with new Harbour CP name as 1-st parameter.
cp<cpname>.c file is generated which can be added to Harbour
repository. Optional 2-nd parameter is CP description and 3-rd
is Harbour Unicode table ID (if not given 437 is used and should
be updated by user in .c file). This method should definitely
resolve any problems with creating Clipper compatible CP definition.
It also allows to easy verify if CP definitions are compatible. It's
enough to compare generated .c files.
* harbour/src/codepage/uckam.c
! fixed Kamenicky Unicode table definition - it was Mazovia CP :)
* harbour/src/codepage/cpde850.c
* harbour/src/codepage/cpdeiso.c
* harbour/src/codepage/cpdewin.c
! fixed CP wrongly encoded CP due to limitations in old CP definition.
Now it's possible to define different number of upper an lower
characters (space " " can be used as dummy character) and I used
it to eliminate hack for 'scharfes S' which does not exists as upper
case.
Please clean other CPs which contain similar hacks.
* harbour/src/codepage/cphu852.c
* harbour/src/codepage/cphuiso.c
* harbour/src/codepage/cphuwin.c
* harbour/src/codepage/cpua866.c
* removed dummy letters introduced for old translation code
* harbour/src/rtl/natmsg.c
* harbour/src/rtl/cdpapi.c
* harbour/include/hbextern.ch
+ added HB_CDPINFO() function
* redirected _NATSORTVER() function to HB_CDPINFO()
To All,
Please check your national sorting in current version and make
any updates if necessary or inform me about found problems.
I've checked that Polish CPs are working fine and all existing
CPs passes my test program which verified some technical aspects
of CP implementation. But I cannot verify if this definitions
satisfy users in different countries.