Some more comparisons Windows vs Linux, plain fpc vs Lazarus:
------ Plain Fpc ------
Windows Linux
AnsiCompareStr(APPLE,_APPLE) = 1 -1
CompareStr(APPLE,_APPLE) = -30 30
WideCompareStr(APPLE,_APPLE) = 1 -1
AnsiCompareStr(apple,_apple) = 1 -1
CompareStr(apple,_apple) = 2 2
WideCompareStr(apple,_apple) = 1 -1
AnsiCompareText(APPLE,_APPLE) = 1 -1
CompareText(APPLE,_APPLE) = -30 30
WideCompareText(APPLE,_APPLE) = 1 -1
AnsiCompareText(apple,_apple) = 1 -1
CompareText(apple,_apple) = -30 30
WideCompareText(apple,_apple) = 1 -1
AnsiCompareStr(A,a) = 1 7
CompareStr(A,a) = -32 -32
WideCompareStr(A,a) = 1 7
------ Lazarus -------
Windows Linux
Utf8CompareStr(APPLE,_APPLE) = -30 -30
AnsiCompareStr(APPLE,_APPLE) = -30 -1
CompareStr(APPLE,_APPLE) = -30 -30
WideCompareStr(APPLE,_APPLE) = 1 -1
Utf8CompareStr(apple,_apple) = 2 2
AnsiCompareStr(apple,_apple) = 2 -1
CompareStr(apple,_apple) = 2 2
WideCompareStr(apple,_apple) = 1 -1
Utf8CompareText(APPLE,_APPLE) = 2 2
AnsiCompareText(APPLE,_APPLE) = 2 -1
CompareText(APPLE,_APPLE) = -30 -30
WideCompareText(APPLE,_APPLE) = 1 -1
Utf8CompareText(apple,_apple) = 2 2
AnsiCompareText(apple,_apple) = 2 -1
CompareText(apple,_apple) = -30 -30
WideCompareText(apple,_apple) = 1 -1
Utf8CompareStr(A,a) = -32 -32
AnsiCompareStr(A,a) = -32 7
CompareStr(A,a) = -32 -32
WideCompareStr(A,a) = 1 7
Notice that under Linux, LazUtf8 does not "temper with" the widestringmanager (it uses cwstring).
The example deonstrates that it is wrong (TM) to rely on xxxCompare* functions to return a specific sign.
You can only rely on the fact that it will return the same sign on the same OS/WS.
Furthermore AnsiCompare* and WideCompare* have the same sign (plain fpc) and IMO Utf8Compare* should have the same sign as well.
Bart