* include/hbclass.ch
! fixed declaration stripping when HB_CLS_NO_DECLARATIONS is defined
* src/compiler/hbmain.c
! do not generate warnings for undeclared methods when -w[12] is used.
They should be emitted only for -w3 or higher (if any in the future).
Thanks to Toninho for the information about the problem.
* include/harbour.hbx
* src/harbour.def
* src/rtl/vfile.c
+ added new PRG function:
hb_vfIsLocal( <cFileName> ) --> <lLocalFileSystem>
It returns TRUE if <cFileName> is not redirected to any Harbour File IO
driver but access local file system API.
* contrib/xhb/traceprg.prg
* merged with Victor's branch so now Harbour File IO API is used to
access log file.
* convert relative log file name to absolute file path name
% write whole log entry in single IO operation.
* contrib/xhb/hbcompat.ch
! fixed translations of xHarbour operators inside brackets,
thanks to Ron.
* contrib/xhb/xhb.hbx
* contrib/xhb/xcstr.prg
+ added support for timestamp translations
! fixed few wrong translations
! fixed serialization of hash items with cyclic references
in ValToPrg()
% optimized cyclic references detection in ValToPrg()
! generate dummy code which cannot be compiled for codeblocks serialized
by ValToPrg()
* contrib/xhb/xhb.ch
+ added SET TRACE ... command, thanks to Ron.
* contrib/xhb/xhberror.c
* do not show __ERRRT_BASE() and __ERRRT_SBASE() in error call stack.
* src/vm/classes.c
! added protection against possible GPF when manually created serialized object
data with super class symbols longer then HB_SYMBOL_NAME_LEN is deserialized
* src/vm/arrays.c
! fixed buffer allocation in AClone()/hb_HClone() with possible cyclic
references.
I created the problem on 2023-01-30 15:18 UTC+0100 and it was reported
as internal error 9024: hb_xrealloc requested to resize to zero bytes
* contrib/xhb/xhberrc.c
+ implemented Harbour version of SetUnhandledExceptionFilter() and
SetErrorMode()
* src/rtl/diskspac.c
% use GetDiskFreeSpaceEx() directly on Win64 instead of accessing it
by GetProcAddress()
* ChangeLog.txt
! typo in file name in previous commit
+ contrib/xhb/xhberror.prg
! added file missing in previous commit:
added code which extends Harbour error objects adding functionality
known from xHarbour:
oError:ProcName
oError:ProcLine
oError:ProcModule
Above instance variables are initialized automatically when error
object is created.
To enable this functionality it's enough to add to PRG code:
REQUEST xhb_ErrorNew
* include/hbapierr.h
* src/harbour.def
* src/rtl/errapi.c
+ added new C function:
void hb_errReinit( PHB_ITEM pError );
it allows to replace default error object with user custom one which
support :Init() method
* contrib/xhb/xhb.hbp
+ contrib/xhb/xhb.h
+ contrib/xhb/xhberror.prg
+ added code which extends Harbour error objects adding functionality
known from xHarbour:
oError:ProcName
oError:ProcLine
oError:ProcModule
Above instance variables are initialized automatically when error
object is created.
To enable this functionality it's enough to add to PRG code:
REQUEST xhb_ErrorNew
* contrib/xhb/xhberr.prg
* use error object :Proc*() methods if they are available
- removed PRG version of xhb_ErrorNew()
* contrib/xhb/xhbmemo.prg
* contrib/xhb/xhbtedit.prg
! use xhb_ErrorNew() instead of ErrorNew() which does not support
any parameters
* include/hbapicls.h
; typo in comment
* src/rtl/arc4.c
! include hbarc4.h instead of arc4.h which does not contain
required for dynamic libraries export attributes in function
declaration
* src/vm/classes.c
! cleaned module symbol range checking
* src/vm/arrays.c
% optimized AClone() and hb_HClone()
* src/vm/hvmall.c
% changed the order of included files to keep alive function macros
undefined in garbage.c and fm.c
* src/vm/hvm.c
! fixed hb_vmGetRealFuncSym() to work with PRG functions written in C
and registered in HVM without their own symbol table
* src/vm/dynsym.c
; comment updated
* include/harbour.hbx
! added missing hb_socketSetNoSigPipe()
* src/rdd/dbfcdx/dbfcdx1.c
* redirect all debug output to stderr
* reenabled light debug code for early detection of index corruption
* contrib/gtqtc/gtqtc.h
* contrib/gtqtc/gtqtc1.cpp
* replaced depreciated in 5.15 methods for mouse wheel events processing
by modern ones
* replaced depreciated in 5.15 methods for accessing screen geometry by
modern ones
* contrib/gtqtc/gtqtc1.cpp
+ added support for TAB key processing when other widgets are shown and
TAB is use to switch focus
* src/rtl/alert.prg
* src/rtl/hbgtcore.c
+ added support for hb_Alert() parameters passed in hash array, i.e.
hb_Alert( { "TXT" => <cMessage>, ;
"BTN" => <aButtons>, ;
[ "TIM" => <nTimeOut> ] } ) => <nButton>
* contrib/gtqtc/gtqtc.h
* contrib/gtqtc/gtqtc1.cpp
* include/hbgtinfo.ch
+ added new hb_gtInfo() action: HB_GTI_MSGBOX
It opens QMessageBox with given by user text and buttons, i.e.
hb_gtInfo( HB_GTI_MSGBOX, <cMessage>, <aButtons> ) => <nButton>
or:
hb_gtInfo( HB_GTI_MSGBOX, ;
{ "TXT" => <cMessage>, ;
"BTN" => <aButtons>, ;
[ "TIM" => <nTimeOut>, ] ;
[ "TIT" => <cTitle>, ] ;
[ "INF" => <cInfoText>, ] ;
[ "DTL" => <cDetailedText> ] } ) => <nButton>
+ added support for redirecting Alert() and hb_Alert() calls to QT GUI
QMessageBox(). This functionality can be enabled by:
hb_gtInfo( HB_GTI_MSGBOX, .t. )
and then
Alert( <cMessage>, <aButtons> )
is redirected to QT GUI QMessageBox().
* include/hbgtinfo.ch
* contrib/gtqtc/gtqtc.h
* contrib/gtqtc/gtqtc.hbc
* contrib/gtqtc/gtqtc.hbp
* contrib/gtqtc/gtqtc1.cpp
+ added new hb_gtInfo() action: HB_QT_SOUND
It allows to play sound using the low level GUI library, i.e.
hb_gtInfo( HB_QT_SOUND, <cSoundFile> )
This modification needs additional QT5 library Qt5Multimedia so I decided
to enable it conditionally by HB_QT_SOUND=yes environment variable.
* contrib/hbwin/wapi_shellapi.c
! replaced struct = { 0 } with memset( &struct, 0, sizeof( struct ) )
Such BCC syntax does not clear the whole structure body in most of
other C compilers.
* src/pp/hbpp.c
! fixed compilation for compilers using "i64" to format long long numbers,
thanks to Toninho for the information.
* include/hbapi.h
* src/vm/cmdarg.c
! changed returned type in hb_verSvnID() form int to HB_MAXINT
* src/nortl/nortl.c
! fixed void* pointer incrementation
! pacified warnings
* src/rdd/dbcmd.c
* accept NIL value in hb_FieldPut() according to Aleksander recommendation
* contrib/hbcurl/core.c
! use hb_vmPushString() instead of hb_vmPushStringPcode()
hb_vmPushStringPcode() is only for static buffer which cannot be freed.
Variables passed to PRG debug functions can be stored by PRG code in
other variables which lives longer then passed buffer and later cause
GPF when curls structure is freed.
! indenting
* include/hbapi.h
* src/common/hbver.c
* src/main/harbour.c
* src/pp/hbpp.c
* src/rtl/version.c
* src/vm/cmdarg.c
! fixed integer overflow in revision number calculated from
the last ChangeLog entry date
* contrib/hbcurl/core.c
! CURLOPT_MAXLIFETIME_CONN is available in curl 7.80.0,
fix older builds by adding a version check
* ChangeLog.txt
* entry for previous merge was "old" (i wouldn't touch
it alone), but it also had paths with backslashes
in place of slashes
* contrib\hbcurl\hbcurl.ch
* contrib\hbcurl\core.c
+ added HB_CURLOPT_MAXLIFETIME_CONN to setup max lifetime of connection
see https://curl.se/libcurl/c/CURLOPT_MAXLIFETIME_CONN.html for more
information.
2022-05-02 08:38 UTC+0200 Antonino Perricone
* contrib\hbcurl\core.c
+ added HB_CURLOPT_DEBUGBLOCK to setup a block for debug information
It takes a callback in the form of {|type, msg| ... }
see https://curl.se/libcurl/c/CURLOPT_DEBUGFUNCTION.html for more
information.
* contrib\hbcurl\hbcurl.ch
+ added HB_CURLINFOTYPE_* macros for debug block
* include/harbour.hbx
* src/harbour.def
* src/rdd/dbcmd.c
+ added two new functions:
hb_FieldGet( <cFieldName> | <nFieldPos> )
-> <xFieldValue> | NIL
hb_FieldPut( <cFieldName> | <nFieldPos>, <xFieldValue> )
-> <xFieldValue> | NIL
They works like FieldGet() and FieldPut() but allows to use field
name instead of field index.
* include/hbvm.h
* include/harbour.hbx
* src/harbour.def
* src/vm/hvm.c
+ added new C function:
extern HB_EXPORT HB_BOOL hb_vmSetKeyPool( HB_BOOL fEnable );
It allows to disable keyboard pooling by GT driver in main HVM loop.
It's important in programs which mix GT terminal with GUI library
which use common event loop. Many GUI objects are not reentrant
safe and activating event loop during big changes may cause crash.
Such things can happen in applications which try to mix HBQT
and GTQTC. To avoid such problems before PRG code is called it's
enough to disable keyboard pooling in main HVM loop, eg.
if( hb_vmRequestReenter() )
{
HB_BOOL fKeyPool = hb_vmSetKeyPool( HB_FALSE );
hb_vmPushEvalSym();
hb_vmPush( pBlockItm );
hb_vmSend( 0 );
hb_vmSetKeyPool( fKeyPool );
hb_vmRequestRestore();
}
+ added new PRG function:
__vmKeyPool( [<fEnable>] ) -> <fPrevState>
It's PRG interface to above C function. If application uses GT driver
and GUI library using the same event loop and such GUI library does not
disable keyboard pooling in main HVM loop before PRG code is activated
then it's enough to call this function at the beginning of application,
eg.
PROCEDURE INIT Clip()
__vmKeyPool( .f. )
RETURN
With above peace of code you can mix HBQT or other QT wrapper with GTQTC.
* include/hbvm.h
* include/harbour.hbx
* src/harbour.def
* src/vm/hvm.c
+ added new C function:
extern HB_EXPORT HB_BOOL hb_vmSetKeyPool( HB_BOOL fEnable );
It allows to disable keyboard pooling by GT driver in main HVM loop.
It's important in programs which mix GT terminal with GUI library
which use common event loop. Many GUI objects are not reentrant
safe and activating event loop during big changes may cause crash.
Such things can happen in applications which try to mix HBQT
and GTQTC. To avoid such problems before PRG code is called it's
enough to disable keyboard pooling in main HVM loop, eg.
if( hb_vmRequestReenter() )
{
HB_BOOL fKeyPool = hb_vmSetKeyPool( HB_FALSE );
hb_vmPushEvalSym();
hb_vmPush( pBlockItm );
hb_vmSend( 0 );
hb_vmSetKeyPool( fKeyPool );
hb_vmRequestRestore();
}
+ added new PRG function:
__vmKeyPool( [<fEnable>] ) -> <fPrevState>
It's PRG interface to above C function. If application uses GT driver
and GUI library using the same event loop and such GUI library does not
disable keyboard pooling in main HVM loop before PRG code is activated
then it's enough to call this function at the beginning of application,
eg.
PROCEDURE INIT Clip()
__vmKeyPool( .f. )
RETURN
With above peace of code you can mix HBQT or other QT wrapper with GTQTC.
* include/hbvm.h
* include/harbour.hbx
* src/harbour.def
* src/vm/hvm.c
+ added new C function:
extern HB_EXPORT HB_BOOL hb_vmSetKeyPool( HB_BOOL fEnable );
It allows to disable keyboard pooling by GT driver in main HVM loop.
It's important in programs which mix GT terminal with GUI library
which use common event loop. Many GUI objects are not reentrant
safe and activating event loop during big changes may cause crash.
Such things can happen in applications which try to mix HBQT
and GTQTC. To avoid such problems before PRG code is called it's
enough to disable keyboard pooling in main HVM loop, eg.
if( hb_vmRequestReenter() )
{
HB_BOOL fKeyPool = hb_vmSetKeyPool( HB_FALSE );
hb_vmPushEvalSym();
hb_vmPush( pBlockItm );
hb_vmSend( 0 );
hb_vmSetKeyPool( fKeyPool );
hb_vmRequestRestore();
}
+ added new PRG function:
__vmKeyPool( [<fEnable>] ) -> <fPrevState>
It's PRG interface to above C function. If application uses GT driver
and GUI library using the same event loop and such GUI library does not
disable keyboard pooling in main HVM loop before PRG code is activated
then it's enough to call this function at the beginning of application,
eg.
PROCEDURE INIT Clip()
__vmKeyPool( .f. )
RETURN
With above peace of code you can mix HBQT or other QT wrapper with GTQTC.
+ src/rtl/vfilehi.prg
* src/rtl/Makefile
* src/harbour.def
* include/harbour.hbx
+ added FILE API counterparts to hb_DirBuild() and hb_FNameExists()
hb_vfDirBuild( <cDir> ) -> <lSuccess>
hb_vfDirUnbuild( <cDir> ) -> <lSuccess>
hb_vfNameExists( <cName> ) -> <lExists>
; their implementations are imported from 3.4
https://github.com/vszakats/hb/blob/master/src/rtl/hbfilehi.prg
but were renamed to fit in the hb_vf* namespace
* src/rtl/hbfilehi.prg
* use hb_LeftEq() instead of Left() ==
; partial merge of 3.4
2015-07-27 14:26 UTC+0200 Viktor Szakats
! fix several sloppy checks where Empty() were
used on strings while in fact a zero length
check would have been correct.
; Empty() is a "weasel-word" when used on strings,
should be used carefully and sparingly.
* ChangeLog.txt
% avoid spaces before EOLs
* src/rtl/hbfilehi.prg
* hb_DirBuild() will now honor UNC "\\server\share\dir\tree" parameter
on Windows and correctly create specified "\dir\tree" on remote
server. If your code used a malformed "\\local\path" a regression
in .prg code may happen on Windows. Previously a "\local\path"
folder was created on current drive, as if the UNC specifier was
omitted. It was more or less consistent with other platforms but
not expected for this platform. Spotted by Maurizio la Cecilia (#233)
[INCOMPATIBLE]
* contrib/hbdoc/hbdoc.prg
* contrib/hbformat/utils/hbformat.prg
* contrib/hbnetio/utils/hbnetio/hbnetio.prg
* package/harbour.mft
* package/harbour.rc
* src/compiler/hbusage.c
* utils/hbi18n/hbi18n.prg
* utils/hbtest/hbtest.prg
* bumped copyright year to 2021