Build 001.005.003.176 (Changes from Build 001.005.003.126)
Workaround:
Hooks the function _parclen() from xpprt1.dll fixing a bug that can cause a IDSC and unwanted
behaviors when the parameter is not provided to the xbase funcion.
The issue is automatically fixed when ot4xb.dll is loaded.
xpprt, xppui, foxdbe,cdxbde,and the xbtools DLLs will not need this fix, but if you use 3pp
DLLs, you should use it. On the other hand the fix in ot4xb.dll will add a minimal overhead (
just a few CPU cycles when _parclen() is called ), so it you can use it every time - until Xbase++ is fixed.
Enhancement:
PeekStr(<pMem>,[[@]<nShift>],-2) -> <cUnicodeStr>
Using -2 as the third param retrieves an unicode \0\0 terminated string
--------------------------------
New Function:
cPathChangeExt( <cFilename> , <cNewExt> )
Build 001.005.003.126 (Changes from Build 001.005.002.204)
New Functions:
OT4XB_SINGLE_INSTANCE(cUniqueId,oAppHandler,aParams) -> lAlreadyRunning // New Funcion
DELEGATED_EVAL(bBlock, ... params ... ) - Eval a codeblock at the GUI thread
PeekFloat()
PokeFloat()
aSplitTxtLines()
lPathIsRelative()
Enhancement:
DELEGATED_FPQCALL() - Improved
cPrintf( cFmt , ...params... ) // Standard behavior
cPrintf( NIL , cFmt , ...params... ) // Parse some embedded escape sequences in cFmt
\xnn // Hex character
\dnnn // dec character // ot4xb extension
\q // Double Quote // ot4xb extension
\a // Bell
\b // Backspace
\f // Formfeed
\n // New line
\r // Carriage return
\t // Horizontal tab
\v // Vertical tab
\\ // Backslash
Fixed:
PeekDouble() - Bug Fixed ( truncated return value)
Build 001.005.002.204 (Changes from Build 001.005.002.152)
Enhancement:
cPrintf() function now has no character limit
Build 001.005.002.152 (Changes from Build 001.005.002.139)
New Functions:
Delegated_FpQCall()
ot4xb_Register_Delegate_hWnd()
Build 001.005.002.139 (Changes from Build 001.005.002.079)
New Functions:
SET_FPCALL_FLAGS()
Enhancement:
New behavior for functions:
nFpCall(), ndFpCall(), qwFpCall() , FpQCall() and
DLL...IMPORT and @dllname:function() commands
Preprocessor FIXED :
Conflict with the .NOT. operator and the WITH OBJECT commands ( Thanks to Andreas Gehrs-Pahl )
Some expresions like this:
if .not. ::lOk
was wrongly preprocessed to
if .notWithObjectStackTop:lOk
Really seems to be an Xbase++ preprocessor bug as this only occurs for the .not. operator
while .and. .or. operators was not affected
In any case this is NOW FIXED with a small workaround added inside ot4xb.ch
Compatibility ISSUE FIXED
ot4xb.ch conflict with Thomas Braun's regclass.ch ( Thanks to Jimmy ( AUGE_OHR) )
Both ot4xb.ch and RegClass.ch uses some #defines from the winapi so the preprocessor
report some warnings like this
warning XBT0110: Redefinition or duplicate definition of
#define STANDARD_RIGHTS_READ
Currently added some #ifndef inside ot4xb.ch to avoid these warnings, however you must
include RegClass.ch before ot4xb.ch
Build 001.005.002.079 (Changes from Build 001.005.002.054)
New Functions:
cUuidCreateName()
BUG FIX:
Reduced the number of collisions in cGenRndStr()
Build 001.005.002.054 (Changes from Build 001.005.002.002)
New Functions:
cGenRndStr()
cFmtResMsg()
cFmtStrMsg()
cFmtSysMsg()
MD5 Functions ... ready to use:
Str2Md5Bin()
Str2Md5Hex()
File2Md5Bin()
File2Md5Hex()
hFile2Md5Bin()
hFile2Md5Hex()
MD5 Functions ... step by step:
_MD5_Destroy()
_MD5_Finalize()
_MD5_Getbin()
_MD5_Gethex()
_MD5_Hfile()
_MD5_New()
_MD5_Str()
_HDICT_AddPropFromArray() // virtual . pending to implement
Build 001.005.002.002 (Changes from Build 001.002.109)
New PRG functions:
cPrintf() // not documented yet
Array2ppMarshall() // prepare a pointer to the strings in the array.
ppMarshall2Array() // get the info back.
cDw2Bits()
cQw2Hex()
FPPQCALL() // Experimental DO not use. pending to fix or remove
FPPQPREPARE() // Experimental DO not use. pending to fix or remove
FpQCall()
GetCurrentProcessHandle()
lCopyFile()
lDiskReady()
lFreeLibrary()
lSendLogStr()
lSendLogStrFL()
lStrWildCmp()
lWriteLogLine()
MkScStr()
nBits2Dw()
nFpGet()
nHex2Qw()
nLoadLibrary()
ot4xb_CreateGenericWindow()
ot4xb_lSendLogStr()
ot4xb_lSendLogstrFL()
ot4xb_SubclassWindow()
PeekDWordNet()
PeekWordNet()
PeekWStr()
PokeDWordNet()
PokeWordNet()
pt2gp()
QFpGetLastPointer()
QFpSetLastPointer()
Type2EmptyValue()
WithObjectStackCount() // support functions for the WITH OBJECT command
WithObjectStackPop() // support functions for the WITH OBJECT command
WithObjectStackPush() // support functions for the WITH OBJECT command
WithObjectStackTop() // support functions for the WITH OBJECT command
_DummyStdCbk()
Internal:
_GWST_XBSETGET_BINSTR_() // internal
_GWST_XBSETGET_BOOL_() // internal
_GWST_XBSETGET_BYTEBOOL_() // internal
_GWST_XBSETGET_BYTE_() // internal
_GWST_XBSETGET_DOUBLE_() // internal
_GWST_XBSETGET_DWORD64_() // internal
_GWST_XBSETGET_DWORDNET_() // internal
_GWST_XBSETGET_DWORD_() // internal
_GWST_XBSETGET_DYNSZ_() // internal
_GWST_XBSETGET_FLOAT_() // internal
_GWST_XBSETGET_HANDLE_() // internal
_GWST_XBSETGET_LPSTR_() // internal
_GWST_XBSETGET_NINT64_() // internal
_GWST_XBSETGET_PCLIPVAR_() // internal
_GWST_XBSETGET_POINTER32_() // internal
_GWST_XBSETGET_SINT16_() // internal
_GWST_XBSETGET_SINT8_() // internal
_GWST_XBSETGET_SZSTR_() // internal
_GWST_XBSETGET_SZWSTR_() // internal
_GWST_XBSETGET_UINT32_() // internal
_GWST_XBSETGET_WORDNET_() // internal
_GWST_XBSETGET_WORD_() // internal
_GWST_XBSETGET_XDATE_() // internal
_GWST_XBSETGET_XPPGUIWND_() // internal
Removed Functions:
GWSTALIGNNEXTMEMBER() // Now a preprocessor macro in ot4xb.ch
GWSTGETOFFSET() // Now a preprocessor macro in ot4xb.ch
GWSTSETOFFSET() // Now a preprocessor macro in ot4xb.ch
GWSTSKIPBYTES() // Now a preprocessor macro in ot4xb.ch
_DIRTYUNLOCKC_() // internal
_DIRTYWLOCKC_() // internal
_GWSTALLOC() // internal
_GWSTFREE() // internal
_GWSTLINK() // internal
_GWSTREAD() // internal
_GWSTUNLINK() // internal
_GWSTWRITE() // internal
_GWSTZEROMEMORY() // internal
_GWST_ADD_CHILD() // internal
_GWST_ADD_MEMBER() // internal
_GWST_BEGIN_STRUCTURE() // internal
_GWST_BEGIN_UNION() // internal
_GWST_END_STRUCTURE() // internal
_GWST_END_UNION() // internal
_GWST_READONLY() // internal
_GWST_SETGET_() // internal
__GWST__M__() // internal
Renamed function:
UUIDCREATE() -> Function with same name and behavior exists also in Xbase++ 1.9 SL1
Now renamed to _UUIDCREATE() to avoid conflicts
Also ot4xb.ch include the following directrive to warrant compatibility
#pragma Map( UUIDCREATE, "_UUIDCREATE" )
New Classes:
FileTime()
ot4xb_generic_pointer()
TBinFile()
TLdList()
TXbClass() - TXbClass is a class that make simpler the definition of
dynamic classes and gwst() derivated structures
ULARGE_INTEGER()
LARGE_INTEGER()
_large_integer_() // base class for LARGE_INTEGER and ULARGE_INTEGER
Build 001.002.119 (Changes from Build 001.002.109)
New PRG functions:
New Classes:
Build 001.002.109
New PRG functions:
// Also wrapped for use in PRGs some common memory pointer functions
// available also at C/C++ level :
Build 001.002.108
New PRG functions:
New Xbase commands:
PROPERTY <name> IS MASK <mask> OF <var> [READONLY]
PROPERTY <name> IS CONSTANT <val>
Build 001.002.103
* xbrt1request.hpp :
FIXED:
Early REQUESTs for some xpprt1.dll break
XppGui Apps using XbpCrt ( only in Xb 1.9 RC2 )