* contrib/hbct/ctnet.c
! fixed copy and past typo in previous commit
* src/rdd/hbsix/sxcompat.prg
! fixed sx_Compress() and sx_Decompress() used with arrays
; modifications below comes from Viktor fork:
* include/dbinfo.ch
* src/rdd/workarea.c
+ added support for new dbInfo() action: DBI_CODEPAGE
It returns Harbour CP used by current work area.
* src/common/expropt2.c
* change instruction order to protect against NULL references
if we ever add support for dummy lists
* src/common/hbver.c
! CLANG detection
* src/lang/l_fr.c
* src/lang/l_hu.c
* updated translations
* src/rtl/cdpapihb.c
* include/harbour.hbx
+ added function hb_cdpExists( <cCDP> ) -> <lExists>
it returns .T. if the passed codepage is supported
and linked, .F. otherwise
* src/rtl/hbrand.c
* include/harbour.hbx
+ added hb_randStr( <nLen> ) -> <cBytes> which returns a strong
random stream of bytes of requested length
* src/vm/hashfunc.c
* include/harbour.hbx
+ New hash function to easily check for the existence
of a key and at the same time retrieving its corresponding
value:
hb_HGetRef( <hHash>, <xKey>[, <@xValue> ] ) -> <lFound>
If the key is not found, <xValue> is also reset to NIL.
Useful to replace hb_HPos()/hb_HValueAt() call pairs and
associated temp variable, or to avoid multiple hash lookups
for the cost of one temp variable.
* src/rtl/copyfile.c
% use 64KB buffer
* src/rtl/tget.prg
! Get():Insert()/Get():OverStrike() GET freeze fix reworked
using better solution by Heinz.
* src/rtl/tgetlist.prg
* src/rtl/tmenuitm.prg
* src/rtl/tmenusys.prg
* src/rtl/tpopup.prg
! fixed to precisely verify against multiple expected class names
previously a custom class named f.e. 'LIST' was accepted in some
places for LISTBOX
! fixed TOFIX where CP/encoding dependent string was
used to determine whether a menu item is separator
throughout the lifetime of the menu.
* src/common/hbdate.c
* src/common/hbprintf.c
* src/common/hbtrace.c
* src/common/hbver.c
* src/compiler/compi18n.c
* src/compiler/genc.c
* src/compiler/gencc.c
* src/compiler/hbusage.c
* src/debug/dbgthsh.prg
* src/debug/dbgtmenu.prg
* src/debug/debugger.prg
* src/debug/tbrwtext.prg
* src/pp/hbpp.c
* src/rdd/dbfcdx/dbfcdx1.c
* src/rdd/dbfuncs.prg
* src/rdd/dbtotal.prg
* src/rdd/hbsix/sxcompat.prg
* src/rdd/hbsix/sxini.prg
* src/rdd/usrrdd/rdds/arrayrdd.prg
* src/rdd/usrrdd/rdds/hscdx.prg
* src/rtl/adir.prg
* src/rtl/arc4.c
* src/rtl/cdpdet.prg
* src/rtl/dbedit.prg
* src/rtl/dircmd.prg
* src/rtl/diskspac.c
* src/rtl/disksphb.c
* src/rtl/errint.c
* src/rtl/errintlo.c
* src/rtl/errsys.prg
* src/rtl/filesys.c
* src/rtl/fslink.c
* src/rtl/gtkbstat.c
* src/rtl/gtwin/gtwin.c
* src/rtl/gtwvt/gtwvt.c
* src/rtl/hbbffnc.c
* src/rtl/hbi18n1.c
* src/rtl/hbi18n2.prg
* src/rtl/hbini.prg
* src/rtl/hbjson.c
* src/rtl/listbox.prg
* src/rtl/menusys.prg
* src/rtl/mtran.c
* src/rtl/radiogrp.prg
* src/rtl/tgetlist.prg
* src/rtl/tmenusys.prg
* src/rtl/tobject.prg
* src/rtl/tpersist.prg
* src/rtl/tpopup.prg
* src/rtl/tpopuphb.prg
* src/rtl/treport.prg
* src/rtl/tscalar.prg
* src/rtl/ttopbar.prg
* src/rtl/tget.prg
* src/rtl/tlabel.prg
* src/rtl/tmenuitm.prg
* src/rtl/valtoexp.prg
* src/rtl/valtype.c
* src/vm/dlmalloc.c
* src/vm/fm.c
! check module handle returned by GetModuleHandle() in MS-Windows
builds
! use %u for unsigned printf formatting
* casting, formatting, casing and some modifications in names
* use #if 0 / #endif to mark commented blocks
* updated year to 2014
% use FOR EACH, SWITCH, DO CASE statements
% use :__enumFirst() / :__enumLast()
% eliminated some local variables and redundant declarations
% use hb_defaultValue()
% use $ operator instead of At() and hb_HHasKey()
% use hb_ADel() instead of ADel()+ASize()
* replace some functions with procedures
* pacified some MSC warnings
* use hb_StrFormat() for user messages
* use :: instead of Self:
* use ANSI date delimiters
* src/rtl/hbsocket.c
* removed not longer valid TODO note
* contrib/hbmisc/bbabble.c
! fixed buffer size calculation (it fixes buffer overflow for small
strings, i.e. 2 bytes and does not allocate more memory then necessary
for long ones)
* contrib/hbct/dattime2.c
! fixed CToMonth() and CToDoW() to respect case intensive search for
strings with national characters
* variable name synced with Viktor branch
* contrib/hbct/strswap.c
! fixed NULL reference when neither 1-st nor 2-nd parameter is passed
by reference
* contrib/hbct/fcopy.prg
! fixed source file positioning in case of partial write
! use hb_FGetDateTime() / hb_FSetDateTime() instead of
FileDate()+FileTime() / SetFDaTi()
It's faster and unlike FileDate() and FileTime() it does
not leave directory open.
! fixed typo (RTE)
% minor simplification
* src/rtl/disksphb.c
! use dynamic binding for GetDiskFreeSpaceEx() function
; modifications below comes from Viktor fork:
* contrib/hbct/ctwin.c
% removed unnecessary declaration
* contrib/hbct/envparam.c
! do not call FreeEnvironmentStrings() is it's not necessary
* contrib/hbodbc/odbc.c
! fixed potential buffer overflow in SQLERROR()/SQLGETDIAGREC()
* contrib/hbnetio/netiosrv.c
! fixed possible NULL reference
* contrib/hbct/ctnet.c
! added missing check for result of WinAPI function call
* contrib/hbct/cttime.prg
! SecToTime(): fixed regression from 2007-11-18 13:46 UTC+0100
* contrib/hbwin/hbolesrv.c
! fixed char -> TCHAR after recent unicodification
* config/win/global.mk
* utils/hbmk2/hbmk2.prg
* src/rtl/hbsocket.c
+ added support for returning NIC MAC address by hb_socketGetIFaces()
in MS-Windows builds.
To see physical device addresses bound with active IP interfaces use:
#include "hbsocket.ch"
PROCEDURE Main()
LOCAL aIFace
FOR EACH aIFace IN hb_socketGetIFaces( , .t. )
? "IP:", aIFace[ HB_SOCKET_IFINFO_ADDR ], ;
" MAC:", aIFace[ HB_SOCKET_IFINFO_HWADDR ]
NEXT
WAIT
RETURN
* src/rtl/hbjson.c
! indent null used as cross reference replacement
* strip space at the end of line after ":" in human readable output
of objects with complex values
* respect _SET_EOL setting in human readable output
* round decoded number to keep the same final value as compiler
* src/rtl/hbproces.c
* minor simplification
* src/rtl/filesys.c
+ added support for setting non blocking mode in MS-Windows builds
of hb_fsPipeUnblock()
* src/rtl/hbproces.c
! rewritten MS-Windows version of hb_fsProcessRun()
* include/hbatomic.h
* for GCC >= 4.1 (except MinGW) use build-in GCC __sync_*() atomic
functions instead of our x86 assembler macros. This can be disabled
by HB_USE_GCCATOMIC_OFF macro. Please make tests on different
platforms. If you find some platforms on which compile or link
errors bound with __sync_*() functions are reported then please
send information about used platform and GCC version. GCC 4.1 or
higher should support it during compilation but not all runtime
libraries have implementation for __sync_*() functions. Low level
implementations were added later for different platforms. In such
case adding -DHB_USE_GCCATOMIC_OFF to HB_USER_CFLAGS should be
sufficient workaround but I want to document such cases so please
send information about it to devel list.
; This modification fixes problem with x86_64 CentOS and RH builds
were default GCC does not respect volatile in our ASM macros and
"optimize" them breaking our memory barriers.
* contrib/hbct/ctcom1.c
! fixed typo reported by Rolf
* src/rtl/hbcom.c
+ added support for 1000000 baudrate setting in *nix builds covered
by B1000000 macro
* src/rtl/tgetint.prg
! allow to accept complex expressions passed as string to __Get()
function. It fixes the problem I introduced in previous modification.
! allow to use __GetA() for hashes
* src/vm/macro.c
! do not ignore additional characters after blank ones looking for
memvar name. More restrictive behavior is necessary for to fix
problem with code like: MemVarBlock( "GETLIST [1]" )
* contrib/hbfoxpro/hbfoxpro.hbp
* contrib/hbfoxpro/misc.prg
+ contrib/hbfoxpro/occurs.prg
* moved Occurs() function to separate file to avoid link conflict
with xHarbour function using the same name
* include/harbour.hbx
* src/rtl/hbdef.c
+ added new PRG function hb_defaultValue(). It's similar to hb_default()
but it returns expected value instead of setting 1-st parameter.
New function can be used to replace code like:
hb_default( @lParam, .T. )
IF lParam
[...]
ENDIF
with:
IF hb_defaultValue( lParam, .T. )
[...]
ENDIF
It's useful for two main reasons:
1) we do not damage original parameter value
2) if parameter is used only once then it's a little bit faster
* contrib/hbfship/stroccur.prg
! do not generate error when wrong parameters are passed to StrOccurs()
function (FS compatible behavior)
! set default value of 3-rd parameter in StrOccurs() to .T. only if it's not
passed at all, otherwise set it to .F. (FS compatible behavior)
% small simplification
* src/compiler/hbmain.c
! extended code which resolves conflicts with multiple static
functions with the same name compiled from different PRG modules
into single object file to resolve conflicts also with external
function calls. It should fix problem reported by Viktor.
* contrib/gtqtc/gtqtc.hbc
* contrib/gtqtc/gtqtc.hbp
* updated for QT 5.2 builds on Linux and some other *nixes
; TODO: update Mac OSX builds.
* contrib/gtqtc/gtqtc1.cpp
! removed Qt::WA_PaintOnScreen
* src/vm/hvm.c
* clear STATIC variables before releasing thread specific data.
It should resolve potential problems with code using TSD to activate
cleanup procedure and later cannot correctly execute pointer item
destructors, i.e. OLE subsystem.
* src/rtl/itemseri.c
! fixed casting for C++ builds
* contrib/rddads/ads1.c
+ use AdsIsNull() function instead of AdsIsEmpty() in DBS_ISNULL
action for ACE library 9.0 or newer.
* contrib/rddads/adsfunc.c
* contrib/rddads/rddads.hbx
+ added new PRG function: AdsIsNull()
For ACE libraries < 9.0 it's redirected to AdsIsEmpty()
* include/hbapicdp.h
* include/hbapiitm.h
* src/rtl/itemseri.c
* changed 2-nd parameter in hb_itemSerialize() and hb_itemSerializeCP()
from HB_BOOL fNumSize parameter to int iFlags.
Previous fNumSize is replaced by HB_SERIALIZE_NUMSIZE flag.
Warning: declaration is not backward compatible though existing code
using these functions is binary compatible so it will work
without recompilation.
+ added support for optional compression of serialized values.
It can be enabled in C code by HB_SERIALIZE_COMPRESS flag.
+ added support for serialization flags passed in 2-nd parameter to
hb_Serialize() PRG function.
; Info: support for compression and decompression exists only in
programs which are linked with ZLIB library. Programmers
which want to use it and so far the haven't used ZLIB functions
should add to their code REQUEST HB_ZCOMPRESS
* include/Makefile
+ include/hbserial.ch
+ added header file with Harbour serialization flags.
Now the following flags are supported:
HB_SERIALIZE_NUMSIZE
HB_SERIALIZE_COMPRESS
I'll add support for HB_SERIALIZE_OBJECTSTRUCT soon.
* src/rtl/hbi18n1.c
* contrib/hbnetio/netiocli.c
* contrib/hbnetio/netiosrv.c
* updated to use new Harbour serialization flags.
* include/hbexpra.c
+ added warning for undeclared get variables, it can be enabled by -w2
(it also fixes compilation problem after last commit - this modification
was work in progress committed partially by mistake)
* include/Makefile
+ include/hbzlib.h
* include/hbzlib.ch
* src/rtl/Makefile
* src/rtl/hbzlib.c
+ added new C functions weakly bound with ZLIB library:
HB_SIZE hb_zlibCompressBound( HB_SIZE nLen );
HB_SIZE hb_zlibUncompressedSize( const char * pSrc, HB_SIZE nLen,
int * piResult );
int hb_zlibCompress( char * pDst, HB_SIZE * pnDst,
const char * pSrc, HB_SIZE nLen, int iLevel );
int hb_zlibUncompress( char * pDst, HB_SIZE * pnDst,
const char * pSrc, HB_SIZE nLen );
these functions can be used by any C code without forcing ZLIB liking.
If user usese in his code HB_ZCOMPRESS() function or has
REQUEST HB_ZCOMPRESS
then above funcitons are automatically bound with linked ZLIB library.
Otherwise they return 0 or HB_ZLIB_RES_UNSUPPORTED error.
* src/rdd/dbf1.c
* small code simplification
; added note about alternative numeric value rounding when
pure binary integer fields (without decimal places) are
assigned.
* src/common/hbdate.c
! added missing header for WinCE builds
* include/hbexpra.c
* minor simplification
* src/vm/macro.c
+ added new implementation for MemVarBlock() function. It's much faster
and does not force dynamic symbol table scanning on each call
* src/rtl/Makefile
- src/rtl/memvarbl.prg
- removed previous implementation of MemVarBlock()
* src/rtl/tgetint.prg
! fixed __Get() and __GetA() to return NIL when cVarName parameter
is not string (CA-Cl*pper compatible)
! fixed __GetA() to return NIL when given aIndex parameter or value
returned by variable block is not array (CA-Cl*pper compatible)
! fixed __Get() and __GetA() to use FieldWBlock() instead of manually
created macro block which didn't respect workarea
(CA-Cl*pper compatible)
! fixed __GetA() to create SET/GET block instead of access block
(CA-Cl*pper compatible)
! fixed __Get() and __GetA() to not create simple SET/GET macro
blocks but always force memvar usage (CA-Cl*pper compatible).
Please remember that
&( "DATA" )
gives code which tries to access field then memvar but
&( "DATA := .T." )
gives code which always tries to assign memvar and does not even
check if "DATA" field exists in current WA. It means that macro
compiled code like:
&( "{|_1| iif( _1 == NIL, DATA, DATA := _1 ) }" )
should not be used because gives higher priority for fields in
access operation and always assigns memvars, if necessary creating
them.
! allow to dynamically create memvars for get objects in error handler
(CA-Cl*pper compatible)
% use much faster MemVarBlock() instead of manually created codeblock
which activates dynamic symbol table scanning on each call
* contrib\gtwvg\gtwvg.h
! Increased: WVT_CHAR_QUEUE_SIZE 128 => 256
Required in cases where paste operation in a bigger character
field is needed. Even this is hypothetical, but still works
for most use cases.
* contrib\gtwvg\gtwvgd.c
% Changed: behaviour of hb_gt_wvt_PutChar() to let SUPER GT layer
to take the next action if application is not compiled for
GUI controls on CUI window. This is controlled by pWVT->bGui
member of GTWVG structure. This makes GTWVG at par with GTWVT
if GUI controls are not sought as long as screen refreshes
are concerned.
Przemek, can you correct me if I am wrong?
* contrib\gtwvg\wvtwin.ch
% Guarded: #deine RGB under #ifndef construct.
* contrib/hbmxml/3rd/minixml/mxml_fil.c
! fixed mxmlLoadString() with top node - patch by Franček Prijatelj
* contrib/hbmxml/core.c
! fixed mxml node reference counter in mxmlAdd() - it fixes 2-dn
problem reported by Franček Prijatelj
* src/common/strwild.c
! fixed hb_strMatchFile() (C) and hb_fileMatch() (PRG) to respect
. and .* used at the end of pattern just like system does
(or at least should, tests with more complicated wildcard expressions
in my Windows7 exploit bugs in system wildcards interpretation)
* src/rtl/gtxwc/gtxwc.c
* removed some old unused code
! restored window oriented message processing
! check window position on each HB_GTI_SETPOS_XY request - some
WMs sends ConfigureNotify with 0,0 cords when window is resized
overwriting correct values.
* switched HB_GTI_SETPOS_XY coordinates to NorthWestGravity (upper left
corner of window with frame and title bar) from StaticGravity (upper
left corner of client area). Many thanks to Rolf for the hint which
allows to translate coordinates from StaticGravity and NorthWestGravity
; updated note about StaticGravity/NorthWestGravity
; Warning: sometime WMs report wrong size in _NET_FRAME_EXTENTS
and then HB_GTI_SETPOS_XY returns wrong position two.
I observed this behavior in different situations and
different WMs, f.e. in KWIN from Ubuntu, after:
MAXIMIZE, FULLSCREEN-ON, FULLSCREEN-OFF
wrong left and top offsets (3,3) are set which are later
inherited also by NORMALSIZE window for which HB_GTI_SETPOS_XY
returns wrong position. _NET_FRAME_EXTENTS begins to report
correct size after next FULLSCREEN-ON.FULLSCREEN-OFF
* contrib/hbwin/axcore.c
! protection against buffer underflow
* src/rtl/gtxwc/gtxwc.c
* src/rtl/gtxwc/gtxwc.h
% use 32 bit screen buffer items also in 64bit systems
! fixed race condition in SetMode()
! fixed infinite loop with size updating in fullscreen and
maximized modes
! fixed typo in function name used in HB_TRACE() message
* use _MOTIF_WM_HINTS to change window decoration and buttons
instead of _NET_WM_ALLOWED_ACTIONS:_NET_WM_ACTION_CLOSE
_MOTIF_WM_HINTS is much more portable and looks that most of WMs
understand it. _NET_WM_ALLOWED_ACTIONS:_NET_WM_ACTION_CLOSE works
only with few WMs (i.e. with default WM in Ubuntu).
Many thanks to Rolf for information about this method.
* use _MOTIF_WM_HINTS to control some other hints (i.e. resizing)
in WMs which do not make it automatically using information
form XSetWMNormalHints()
* removed \r from all debug messages
; added note about StaticGravity and NorthWestGravity
; TODO:
1) add margins if window cannot be resized to requested size
(i.e. in fullscreen or maximized mode)
2) add support for HB_GTI_RESIZEMODE=HB_GTI_RESIZEMODE_FONT
* contrib/gtqtc/gtqtc.h
! typo in variable type
* contrib/gtqtc/gtqtc1.cpp
* minor simplification
* src/rtl/gtxwc/gtxwc.c
+ added support for disabling close button [x] on HB_GTI_CLOSEMODE==2
Thanks to Rolf for suggestion removing/adding _NET_WM_ACTION_CLOSE
to _NET_WM_ALLOWED_ACTIONS property is honored by WMs I tested and
they hide/show [x] button respectively.
* contrib/gtqtc/gtqtc1.cpp
! typo in last commit - flags and state were not changed
* src/rtl/gtxwc/gtxwc.c
* added XSync() just after XBell() to reduce a little bit potential
delay
* include/hbgtinfo.ch
+ added new hb_gtInfo() switch: HB_GTI_CLOSEMODE
It controls close event (i.e. ALT+F4 and/or [x] button in MS-Windows)
behavior:
== 0 - terminate application
>= 1 - generate HB_K_CLOSE
== 2 - disable close button
* contrib/gtqtc/gtqtc.h
* contrib/gtqtc/gtqtc1.cpp
% optimized setWindowFlags() and setWindowState() to not
execute show() when flags/state are not changed.
+ added support for HB_GTI_CLOSEMODE
* changed HB_GTI_CLOSABLE to work line in GTXWC and GTWVT
* src/rtl/gtxwc/gtxwc.c
! fixed setting window position by HB_GTI_SETPOS_XY
+ added support for HB_GTI_CLOSEMODE
; note: in GTXWC we cannot easy disable close button so
HB_GTI_CLOSEMODE==2 will work like 1 until we
do not find some portable way to inform WM that
is should hide close button
* src/rtl/gtwin/gtwin.c
* added type checking in few HB_GTI_* settings
+ added support for HB_GTI_CLOSEMODE
; note: in GTWIN we cannot catch close event so
HB_GTI_CLOSEMODE==1 works like 2
In this GT HB_GTI_CLOSABLE also has to work like
HB_GTI_CLOSEMODE==2
* src/rtl/gtwvt/gtwvt.h
* src/rtl/gtwvt/gtwvt.c
* added range checking in HB_GTI_RESIZEMODE setting
+ added support for HB_GTI_CLOSEMODE