* config/global.mk
* set HARBOUR=F:100 during build process in OS2 builds - it increases
maximum number of open handles per process from 20 to 100 so it should
be possible to use -j<n> switch during Harbour compilation - please
test, i.e.:
os2-make -j3
* contrib/xhb/hbcompat.ch
! fixed pp rules for Str(,,, <lStrip> ) translation
* include/hbapifs.h
* src/rtl/filesys.c
+ added new C function:
HB_FHANDLE hb_fsOpenEx( const char * pszFileName, HB_FATTR nAttr,
HB_USHORT uiFlags );
* minor cleanup
* include/hbmemory.ch
* src/vm/fm.c
+ added two new actions for Memory() function:
HB_MEM_STATISTICS - return non 0 value if FM statistic is enabled
HB_MEM_ISLIMIT - return non 0 value if used memory limit is
supported
+ added new PRG function:
__fm_allocLimit( [ <nNewLimit> ] ) -> <nPrevLimit>
It allows to set limit for maximum used memory in some memory
managers, -1 means no limit.
Now it works with DLMALLOC and in ST mode it's limit for memory
allocated from system for whole application. In MT mode when
HB_FM_DLMT_ALLOC (default for DLMALLOC) is enabled it's limit for
single MSPACE (Harbour allocates 16 MSPACES and balance them
between threads to improve scalability) so it's rather per thread
limit. If memory statistic module is enabled during Harbour build
process then this limit works with any memory manager and defines
limit for total memory allocated by Harbour application regardles
of MT or ST mode.
* src/vm/hvm.c
* use HB_MEM_STATISTICS instead of HB_MEM_USEDMAX to check if memory
statistic module is enabled
* src/vm/hvm.c
* allow to use == operator for codeblocks
* utils/hbtest/rt_hvm.prg
* updated for == operator which accepts codeblocks
* utils/hbtest/rt_main.ch
* do not define __CLIPPER__ macro when ITK Clip compiler is used
* contrib/hbbz2/errint.c
* added HB_EXPORT to bz_internal_error() declaration
* src/vm/hvm.c
+ allow to compare symbol items with == operator, i.e.:
? @QOut() == &( "@QOut()" )
* include/hbapiitm.h
* src/vm/itemapi.c
+ added new C function:
hb_itemCompare( PHB_ITEM pItem1, PHB_ITEM pItem2,
HB_BOOL bForceExact, int * piResult );
For compatible types it compares pItem1 with pItem2 setting piResult
to -1, 0 or 1 if pItem1 is <, == or > then pItem2 and returns true
otherwise it returns false and does not touch piResult.
+ allow to compare symbol items in hb_itemEqual()
* include/harbour.hbx
* src/vm/hvm.c
+ added new PRG function:
__RecoverErrorBlock() -> <bError> | NIL
It extracts previous error block pushed on HVM stack
by BEGIN SEQUENCE WITH ...
* src/rdd/dbf1.c
! fixed detecting VFP tables broken in my previous
modification - thanks to Mario H. Sabado for information
about the problem.
* config/dos/watcom.mk
* config/win/watcom.mk
* config/linux/watcom.mk
! enabled -bd OpenWatcom switch for code compiled as part of dynamic
libraries
* use CauseWay as default DOS extender for dynamic DOS builds
* config/dyn.mk
* config/lib.mk
* src/Makefile
! fixed list of libraries used to create Harbour DLL in DOS builds
* config/bin.mk
* src/vm/Makefile
* create hbmainstd library for OpenWatcom DOS shared builds
* src/vm/maindllh.c
+ added DLL entry function for CauseWay DLLs in OpenWatcom builds
* src/vm/main.c
* include maindllh.c in OpenWatcom DOS shared builds
* utils/hbmk2/hbmk2.prg
+ added support for dynamic binaries in DOS OpenWatcom builds.
Support for CauseWay DLLs is still broken in current OpenWatcom
builds so it will have to wait for the fix to be usable.
* src/vm/dynlibhb.c
+ added support for dynamic libraries to OpenWatcom DOS builds.
Now it's enabled only in harbour.dll due to problems with
CW and current OW.
* src/3rd/zlib/zconf.h
* src/3rd/zlib/zlib.dif
* use OS2 patch for exporting ZLIB symbols also in DOS builds
* src/rdd/dbf1.c
* pacified warning
* include/hbstack.h
* src/vm/estack.c
+ added new C function:
HB_ISIZ hb_stackBaseSymbolOffset( PHB_SYMB pSymbol );
it returns offset of pSymbol function frame on HVM stack or -1
if function/procedure pointed by pSymbol is not called.
* contrib/hbnetio/readme.txt
* contrib/hbnetio/netiosrv.c
* contrib/hbnetio/hbnetio.hbx
+ added new server side function:
netio_ServedConnection() -> <pConnectionSocket>
It returns connection served by netio_Server() in current thread and
can be used inside executed RPC functions to access <pConnectionSocket>
* include/harbour.hbx
* src/rtl/dateshb.c
+ added two new PRG functions:
hb_SecToT( <nSeconds> ) -> <tTime>
hb_MSecToT( <nMilliseconds> ) -> <tTime>
* include/hbset.h
* src/vm/set.c
+ added new C function:
int hb_setUpdateEpoch( int iYear );
if necessary it converts year respecting _SET_EPOCH settings
* src/rtl/dates.c
* use hb_setUpdateEpoch() instead of local code
* src/rdd/dbf1.c
! respect _SET_EPOCH decoding DBF update time from DBF HEADER
(LUpdate() function).
It's not Cl*pper compatible anyhow looks that most of tools
stores only last two digits from the year (just like in the
DBF documentation) and -1900 trick is not used so it helps
to decode correct update date.
* store 'year % 100' instead of 'year - 1900' in DBF header
when DBF table with VFP signature is used (DB_DBF_VFP).
* src/rdd/dbf1.c
+ reserve space for DBC name in newly created DBF files with VFP DBF
signature, Thanks to Nikos Christophi, Jeff Stone and other who
reported this problem.
+ added RTE when size of DBF header is exceed by "_NullFlags" field
* src/vm/thread.c
! typo in comment
* include/hbapigt.h
* src/rtl/inkeyapi.c
+ added new C function:
int hb_inkeyKeyExt( int iKey );
It extracts function/edit key code value HB_KX_* from Harbour extended
key code. If passed keycode is not valid extended keycode which points
to function/edit key then 0 is returned.
* include/harbour.hbx
* src/rtl/inkey.c
+ added new PRG function hb_keyExt() - it's wrapper to hb_inkeyKeyExt()
* include/harbour.hbx
* src/rtl/mlcfunc.c
! restored original Cl*pper behavior in memo line functions,
test shows that inside MemoEdit() Cl*pper internally uses a little
bit different rules to format text then in memo line functions,
It's Cl*pper bug but hard to fix because any differences to Cl*pper
in this area cause that someone reports them as bug. So I decided
to leave original Cl*pper behavior for compatibility and add new
function which can be used in MemoEdit() and related code.
+ added new memo line function:
hb_MLEval( <cString>, <bCode>, [ <nLineLength>=79 ],
[ <nTabSize>=4 ], [ <lWrap>=.T. ],
[ <nPos> ], [ @<nRow> ], [ @<nCol> ] ) -> <nLines>
it formats texts using rules like in Cl*pper MemoEdit() not Cl*pper
memo lines functions. For each processed line <bCode> is executed
with 2 parameters: <cLine> and <lSoftCR>. It recognizes and accepts
any EOLs just like hb_ATokens( <cText>, .T. ) and strips or converts
soft CRs depending on word wrap mode.
* src/rtl/teditor.prg
* Use hb_MLEval() to format text
% minor optimization
* src/rtl/memoedit.prg
* enabled Harbour extended key codes
* small optimization
! fixed ME_BOTTOMRIGHT processing
! fixed initial line size calculation
* src/vm/thread.c
* removed dymmy code
* src/vm/hvm.c
! delay locking of main HVM thread stack until HVM is initialized,
it fixes issue #107
! protect access to HB_STACK_TLS_PRELOAD by s_fHVMActive in
hb_vmLockForce()
* include/hbapicls.h
* src/vm/classes.c
* minor modification in variable name
* src/rtl/filebuf.c
* src/rtl/fscopy.c
* src/rtl/fslink.c
* src/rtl/vfile.c
* cleaned FError() setting. It should not be changed by C file IO
functions because they can be activated from RDD code so accessing
work area field could change the FError() result, i.e. this code
does not work when FError() is changed by C level IO operations:
AnyFunc( FSeek( hFile, 0, FS_END ), field->MEMOVAL, FError() )
Even simple field access may cause file IO operations in RDD code
when relations are set because records in child area are repositioned
only when necessary (when user tries to make some operations on this
area). In the past RDD code was full of constructions like:
uiSaveError = hb_fsFError();
// make some IO operations
hb_fsSetFerror( uiSaveError );
to eliminate such overhead I separated PRG level FError() from
C level IOError(). Please keep it.
* ChangeLog.txt
! few typos
* include/hbvmpub.h
* src/vm/hvm.c
+ added support for hb_vmAtInit(), hb_vmAtExit() and hb_vmAtQuit()
functions for dynamically loaded libraries
This modification should also fix issue #33
* src/vm/estack.c
! protect access to HB_STACK_TLS_PRELOAD by hb_stack_ready() macro,
it's necessary for MT builds which do not use direct TLS access
but need TLS key initialization, i.e. OS2
* src/vm/hvm.c
! protect access to HB_STACK_TLS_PRELOAD by s_fHVMActive
* include/hbdefs.h
* changed reference 32-bit reference counters in Win64 builds to 64-bit
ones. It resolves problems with data alignment in memory allocated
by hb_xgrab().
* src/vm/asort.c
* removed hack for MinGW64 build from new array sort code,
after switching to 64bit reference counters it should not
be longer necessary because allocated that has 64bit alignment
* include/hbapifs.h
* src/rtl/filebuf.c
* added new C function hb_fileLoadData() - it can be used to load data
from already opened regular files and streams
* include/harbour.hbx
* src/rtl/vfile.c
+ added new PRG function:
hb_vfLoad( <cFileName>, [ <nMaxSize> ] ) -> <cFileBody> | NIL
* src/vm/runner.c
* use hb_fileLoadData()
* contrib/hbwin/win_bmp.c
* use hb_fileLoad()
* contrib/hbtcpio/tcpio.c
* contrib/hbtcpio/hbtcpio.hbx
+ added new PRG function
hb_vfFromSocket( <pSocket> ) -> <pFile>
It converts socket created by socket open into TCPIP virtual file
which works just like files created by hb_vfOpen( "tcp:...", ... )
* include/hbapifs.h
* src/rtl/filesys.c
+ added new C function
HB_SIZE hb_fsPipeWrite( HB_FHANDLE hPipe, const void * buffer,
HB_SIZE nSize, HB_MAXINT nTimeOut );
+ implemented hb_fsPipeUnblock() in OS2 builds
+ set IO error in hb_fsPipeCreate(), hb_fsIsPipeOrSock() and
hb_fsPipeUnblock()
* return ( HB_SIZE ) -1 from hb_fsPipeRead() if end of stream is
reached or read error appears on non empty buffer. This modification
also change the behavior of PRG hb_PRead() function so now result -1
can be used to detect end of stream.
* src/rtl/philes.c
* include/harbour.hbx
+ added new PRG function:
hb_PWrite( <nPipeHandle>, <cBuffer>, [<nBytes>], [<nTimeOut>] )
-> <nBytesWritten>
% removed unnecessary assignment
* include/hbapiitm.h
+ added HVM internal macro hb_itemRawSwap()
* src/vm/asort.c
% use hb_itemRawSwap()
* in old code use comparison which prefers < and > operators
instead of <= and >=
* src/vm/asort.c
* restored original loop and added different workaround which for
the problem in 64 bit MinGW we exploited. It's dummy function call
inside a loop so probably link time optimization (LTO is enabled
by -O4 in the newest GCC versions) ignore it and the problem will
reappear. Anyhow it only temporary solution which should give time
to create self contain example and report the problem to MinGW
authors - it's highly possible that also other code exploited this
problem so be careful with MinGW64.
% fixed index range checking to eliminate unnecessary index verification
* src/vm/asort.c
! fixed missing nStart checking during array items reordering
* utils/hbtest/rt_array.prg
* updated Harbour specific results - I thought that someone
invested time to exactly replicate CA-Cl*pper ASort() sorting
but in fact Harbour specific resutls where hardcoded inside
HBTEST so previous code was not Cl*pper compatible in the
same way as current one.
* src/vm/asort.c
% added new code for ASort()
Warning: new sorting algorithm is stable (does not change the
order of equal items). It means is not strictly Cl*pper
compatible and it can be seen some dummy ASort() tests
in HBTEST results.
* src/vm/classes.c
! fixed __objGetIVars() to correctly serialize objects without any own
and inherited instance variables
* contrib/hbhpdf/3rd/libhpdf/hpdfimac.c
! include string.h
* contrib/hbhpdf/3rd/libhpdf/libhpdf.dif
* rediffed
* src/rtl/filesys.c
! fixed FXO_TRUNCATE flag used without FXO_SHARELOCK in POSIX systems
* src/rtl/net.c
! typo in variable name
* src/vm/task.c
! variable scope
* src/compiler/compi18n.c
* minor variable type update
* ChangeLog.txt
! formatting
* include/harbour.hbx
* src/vm/cmdarg.c
+ added new PRG function
hb_ACmdLine() -> <array>
borrowed from Viktor's branch (2015-03-12 03:02 UTC+0100 Viktor Szakats)
It returns array with all command line parameters. Unlike
hb_AParams( __dbgProcLevel() - 1 )
hb_ACmdLine() returns all parameters also hidden ones just like
hb_CmdLine() function and hb_argv()/hb_argc()
Please also remember that hb_AParams() returns current value of
parameters which could be changed bu user code so they can be different
then original parameters passed to given function.
* src/rtl/gtchrmap.c
* casting
* include/std.ch
* synced casing with Viktor's branch
* include/hbapi.h
* src/vm/garbage.c
+ added hb_gcDummyClear() function
* include/hbapirdd.h
* include/hbusrrdd.ch
+ added DBTF_CPYCTR constant value - when set in dbTransInfo.uiFlags
then after record transfer field counters should to be copied from
source to destination area
* include/hbapirdd.h
* src/rdd/wafunc.c
+ added new C functions hb_dbTransInfoPut() and hb_dbTransInfoGet()
which allow to store and retrieve pointer to DBTRANSINFO structure
into/from HB_ITEM with strict type verification.
* src/rdd/wafunc.c
* pass pointer to DBTRANSINFO structure as argument of DBI_TRANSREC
action. It allows RDD serving destination area to decide which
fields and how should be transferred updating uiFlags, uiItemCount
and lpTransItems members of DBTRANSINFO.
If RDD removes all fields from DBTRANSINFO structure (uiItemCount==0)
or does not return HB_SUCCESS for DBI_TRANSREC action (default WA
implementation returns HB_SUCCESS so it's not necessary to overload
it if RDD does not make any additional operations) then record
transfer is interrupted.
* copy field counters only when destination area asked about it setting
DBTF_CPYCTR in dbTransInfo.uiFlags in DBI_TRANSREC action.
* src/rdd/dbf1.c
* do not copy automatically updated fields when destination area
is not empty
* set DBTF_CPYCTR to indicate that counters should be copied from
source to destination area when original value of automatically
updated fields are transferred
; Now DBF* RDDs in Harbour respects the following rules for record
transfer operations (COPY TO / APPEND FROM) with automatically
updated fields:
- COPY TO transfers original values to destination table and
finally copy counters from the source table to destination one
so autoincrement fields in both tables after next append will be
initialized with the same values regardless of number of copied
records - even if only single record is copied then counters in
destination table will inherit next values for new record from
the source table. Also values of RowVer and ModTime fields are
copied from source to destination table and not updated during
transfer operation.
- APPEND FROM works like COPY TO (original field values and then
counters are copied to destination table) if the source table
supports counters and destination table is empty and FLocked()
or opened in exclusive mode.
If source table does not support counters for given fields, i.e.
it is processed by transfer RDD like DELIM or SDF (RDT_TRANSFER)
or destination table is not empty or opened in shared mode and
FLock is not set when APPEND FROM is executed then automatically
updated fields (counters, RowVer, ModTime) are not copied and
initialized with new values like for each new record added to
destination table.
* ChangeLog.txt
! typo in last ChangeLog entry
* contrib/hbssl/tests/inetssl.prg
* contrib/rddads/ads1.c
* src/rtl/teditor.prg
* formatting of my recent modifications taken from Viktor's branch
* src/common/hbfsapi.c
* src/compiler/complex.c
* formatting
* include/hbset.h
* src/vm/set.c
* src/nortl/nortl.c
+ add new C functions to change HVM set values:
hb_setSetFileCase(), hb_setSetDirCase(), hb_setSetDirSeparator(),
hb_setSetTrimFileName()
* include/hbcomp.h
* include/hbcompdf.h
* src/compiler/cmdcheck.c
* src/compiler/hbmain.c
* src/compiler/ppcomp.c
* src/compiler/genc.c
* src/compiler/hbusage.c
* src/nortl/nortl.c
* rewritten code used to parse command line and environment parameters.
New code is covered by GPL + Harbour exception license.
All parameters are decoded by only one function and whole code is
smaller so it's much easier to modify this code.
! fixed some small bugs and incompatibilities with Cl*pper in parameter
parsing
! fixed -y undocumented (YYDEBUG) switch
- removed -x[<prefix>] set symbol init function name prefix (for .c only)
compiler command line switch
* moved -fn[:[l|u]|-] -fd[:[l|u]|-] -fp[:<char>] and -fs[-] switches
parsing to core compiler library. Now these switches are also works
with compiler library linked with HBMK2.
; TOFIX: HBMK2 ignores -fn/-fd switches and allocates temporary names
which are not compatible with names used later by harbour
compiler when above switches are activated. HBMK2 should
parse parameters and update SET FILECASE / SET DIRCASE before
it creates temporary files.
* include/harbour.hbx
* src/vm/hvm.c
+ added new PRG function:
__BreakBlock() -> {|e| Break( e ) }
* include/hbexprb.c
% replace {|e| Break( e ) } with __BreakBlock() function call.
__BreakBlock() returns exactly the same codeblock on each call
so using it save memory and improve a little bit speed because
it's not necessary to allocate new GC memory block and register
it in GC block list. Additionally in MT mode it eliminates mutex
lock necessary to register new GC block.
* src/rtl/hbsocket.c
* added support MAC addreses array returned by hb_socketGetIFaces()
in BSD based systems like FreeBSD or Darwin (Mac OS X)
* src/vm/hvm.c
% small simplification i FOR EACH initial code
* contrib/hbwin/win_bmp.c
* contrib/hbwin/win_prn2.c
* use Harbour FILE IO API instead of local file access
* contrib/hbct/ctstrfil.c
* formatting
* contrib/gtqtc/gtqtc1.cpp
! fixed possible missing initialization for drawing character images
* include/hbcompdf.h
* include/hbexprb.c
* src/common/funcid.c
* src/vm/hvm.c
% optimize Array() function by replacing function call with HB_P_ARRAYDIM
PCODE. Because this optimization changes RTE and interacts with broken
code like
aVal := Array( 10, 0, "A" )
then it's not enabled by default. User can enable it by -ko switch.
* utils/hbtest/rt_array.prg
* use #pragma -ko- to for tests which interacts with above modification
* src/rtl/hbproces.c
% optimize memory allocation for redirected STDOUT and STDERR buffers in
hb_processRun() function.
The previous implementation was extremly inneficient when
hb_processRun() was used to extract very long output from
child process.
* src/rtl/hbtoken.c
+ added support for dividing text into lines using EOLs used by different
platform. To enable it it's enough to specify .T. as delimiter.
* src/rtl/filesys.c
* pacified MSVC warning - in fact this modification is significant only
for bugy code which changes current directory in MT programs. It's bug
on all platforms using current directory as process not thread
attribute (common behavior).
* include/inkey.ch
* src/rtl/hbgtcore.c
+ added new extended keycodes:
HB_K_TERMINATE
HB_K_MENU
* contrib/gtqtc/gtqtc1.cpp
+ center and rescale to console window dimension keeping aspect size ratio
picture passed to HB_GTI_DISPIMAGE when second parameter is .T.
+ added support for HB_K_MENU key
! fixed dynamic font size modification in fullscreen, maximized and
HB_GTI_RESIZEMODE_ROWS modes
* src/vm/arrays.c
! added protection against internal error when ACOPY() is executed
with the same array passed as source and target without any indexes
which can force item move. Now ACOPY() works like in Cl*pper.
* include/hbdebug.ch
+ added HB_DBG_* constant values for arrays returned by __dbg*()
functions
* include/hbset.h
* src/vm/set.c
+ added new C function: hb_setGetItem();
* src/debug/dbgentry.c
* use HB_DBG_* constant values
+ added new debugger function: __dbgGetSETs() - it returns array with
all HVM SETs: { { <nSet>, <cSetName>, <xSetValue> }, ... }
% optimized hb_dbgActivateCallStackArray() and hb_dbgActivateModuleArray()
* src/debug/debugger.prg
* use HB_DBG_* constant values
* use __dbgGetSETs() for "System Settings" window
+ added support for Harbour SET extensions
* ChangeLog.txt
* updated description for structure of array returned
by __dbgGetBreakPoints()
* contrib/hbmysql/tmysql.prg
* added support for nFlags in TMySQLServer constructor as
suggested by Fernando Athayde
* src/rtl/gtcgi/gtcgi.c
% replaced hb_cdpnDup() with hb_cdpnDup3() to eliminate unnecessary
memory block duplicating when translation is not activated.
* src/vm/itemapi.c
* removed old ugly hack used to mark infinite or undefined double
value using double item length field. The code which created such
item have been eliminated many years ago.
* use HB_DEFAULT_WIDTH instead of hardcoded 99 to force numeric value
length recalculation.
* src/vm/estack.c
* always set NIL in item allocated by hb_stackAllocItem() when it's
used as function. In internal macro this step is missing so allocated
item still may contain other simple value. All places in HVM where
hb_stackAllocItem() is used are safe for such situation (I've just
verified them again).
It fixes problem reported by Mindaugas when hb_stackAllocItem()
was used inside DBFFPT as temporary item and could unintentionally
change memo type if allocated item containes previous numeric
value in valid memo type range.
* src/rdd/wafunc.c
* src/vm/hvm.c
* src/vm/memvars.c
* clear passed item before RTE when accessed memvar or field does not
exists
* src/vm/hashfunc.c
! set default value before decoding 2-nd logical parameter in
hb_HAutoAdd() function. It fixes ambiguity reported by Mindaugas.
* include/hbvm.h
* src/vm/hvm.c
+ added new HVM function: hb_vmTryEval()
This function tries to execute given block or function
inside BEGIN SEQUENCE / RECOVER oErr / END SEQUENCE statement.
It return HB_TRUE if it was executed without any problem and
HB_FALSE otherwise. Result or RTE object is stored in 1-st
parameter and should be freed by the caller using hb_itemRelese()
* src/debug/dbgentry.c
! use hb_vmTryEval() instead of hb_itemDo() to evaluate trace point
expressions. Now debugger does not crash when user sets tracepoint
expression which cannot be evaluated in executed context.
! allow to use expressions with more then 99 variables
! added missing protections against GPF when wrong parameters are
passed to __dbg*() functions
* keep original trace and watch point expression for farther
processing
* replaced IS_IDENT_*() macros with HB_IS*IDCHAR()
+ added new debuger function:
__dbgGetWatchPoints() -> <aWatchTracePoints>
<aWatchTracePoints> contains subarrays describing trace and watch
points:
{ <cExpression>, <lTracePoint>, <lValid>, <xResult> }
It was the last function necessary to extract all information
about debugged context from core internals. Now it's possible
to create fully functional standalone debugger without storing
and updating locally any information about debugger state.
All such information can be accessed at any time using __dbg*()
functions.
It should greatly simplify creating 3-rd party debuggers like
HWDebug or HBQTDebug.
* src/debug/debugger.prg
! fixed callstack window updating during tracing and stepping.
Tanks to Rolf for reporting the problem.
* include/hbserial.ch
* src/rtl/itemseri.c
+ added HB_SERIALIZE_IGNOREREF flag.
This flag fully disables logic used to detect multireferences to the
same complex (sub)items like arrays or hashes. It increses the speed
of serialization but serialized data does not contain any information
about refences, i.e. aVal[ 1 ] and aVal[ 2 ] in code below:
aSub := { 1, 2, 3 }
aVal := { aSub, aSub }
are serialized as separated arrays. Additionally items with cyclic
references like:
aSub[ 2 ] := aSub
cannot be serialized at all with HB_SERIALIZE_IGNOREREF flag because
it will create infinite serialization loop and crash with out of
memory message.
* src/rtl/itemseri.c
% rewritten algorithm used to detect cyclic and multi references in
serialized items. The original algorithm has very high overhead when
huge arrays were serialized, i.e. serialization of array with 1'000'000
of subarrays needed about 30 minutes on my i5@3.30GHz. Now it needs
less then a second and this time is only a little bit bigger then
used by serialization with HB_SERIALIZE_IGNOREREF flag.
This modification improve performance also in other code using Harbour
serialization mechanism like I18N files, HBNETIO, GTNET, ... when large
arrays or hashes are saved or transmitted.
* include/hbapi.h
* include/hbapicls.h
* src/vm/arrays.c
* src/vm/classes.c
* src/vm/hashes.c
* src/vm/itemapi.c
* replaced algorithm used to detect cyclic and multi references in
array and hash clone operations with new one similar to current
item serial code. The speed improvement for very large arrays is
the same as in case of serialization code.
* src/rtl/gtsln/mousesln.c
! typo in while loop - synced with Viktor's branch
* contrib/hbtip/mail.prg
! fixed missing 1-st adress in CC and BCC parameters - many
for information about the bug and patch
* contrib/hbtip/sendmail.prg
! typo in comment - thanks to Heinz V Bergen too
* src/rtl/gtwvt/gtwvt.c
* some minor modification to sync code with Vitkor's branch
* src/vm/hvm.c
* src/vm/itemapi.c
* small optimization in string comparison
* extras/gtwvw/gtwvwd.c
! fixed typo in WVW_SETICON() - thanks to Ash
* src/rdd/dbcmd53.c
! typo in comment
* src/rtl/dateshb.c
% use hb_retclen() instead of hb_retc() when size is well known.
* src/rtl/valtoexp.prg
% use hb_defaultValue()
* src/vm/estack.c
* minor cleanup
* src/vm/fm.c
* modified a little bit HB_MEMINFO structure to force strict alignment
+ added debug code covered by HB_FM_FORCE_REALLOC macro which forces
allocateing new block in each hb_xrealloc() call
! protect realloc() in HB_FM_STATISTIC by mutex, it fixes issue #77.
* src/rtl/hbproces.c
% unlock HVM waiting for process in OS2 builds
! build array of argument passed to process in hb_processRun() in
parent process not forked one. It fixes possible deadlock in forked
process because memory is allocated to create arguments array and
in MT program memory managers may use mutexes internally which can
be cloned to forked process in locked state.
It fixes seldom and random HBMK2 freezing during compilation
with -jobs=<n> parameter.
* utils/hbmk2/hbmk2.prg
! fixed race condition in concurrent C compiler execution (-jobs=<n>)
with script file
* src/debug/dbgentry.c
! fixed crash when wrong expression is used as tracepoint
! fixed expression analyzer to correctly recognized extended strings e"..."
* formatting
* src/debug/dbgbrwsr.prg
* src/debug/dbghelp.prg
* src/debug/dbgtarr.prg
* src/debug/dbgthsh.prg
* src/debug/dbgtinp.prg
* src/debug/dbgtmenu.prg
* src/debug/dbgtobj.prg
* src/debug/dbgtwin.prg
* src/debug/dbgwa.prg
* src/debug/debugger.prg
* added calls to ::NotSupported() method for some still missing
functionality
! do not use SetColor() but directly pass colors to used objects
and functions
! do not use SetPos() and Row()/Col() for core functionality - it was
source of few minor bugs
% enable cursor only in input objects and disable it just after
% eliminated code to save and restore cursor position and shape
! fixed initial positioning in help window
+ implemented HiLite() and DeHiLite() methods in HBDbBrowser() class
! fixed positioning when end of source data is reached in browser
% eliminated some redundant or completely useless code and comments
% use some fully functional HBDbBrowser() features instead of manual
encoding similar functionality
! validate watchpoint and tracepoint expressions
% use SWITCH statements
! fixed expression presentation (added __dbgValToExp() and __dbgValToStr())
! fixed input for new expressions
! fixed browser scrolling in object inspector
! fixed inkey() processing inside debugger (ALT+D and ALT+C)
! fixed browsers highliting in WA inspector
! fixed hardcoded limit for 512 workareas in WA inspector
! fixed initial WA positioning in WA inspector
* resized WA inspector window
* many other minor fixes and improvements
* contrib/hbwin/olecore.c
+ added some additional error codes to win_oleErrorText() function
* contrib/hbwin/hbole.ch
+ added OLE error code definitions with WIN_* prefix for errors returned
by win_oleErrorText()
* contrib/xhb/xhb.hbx
* contrib/xhb/xhbole.prg
+ aded new function OleDefaultArg()
% minor simplification
* src/rtl/itemseri.c
* do not generate RTE when wrong string is deserialized.
Now RTE 3016 is generated only when compressed data is deserialized
and ZLIB is not linked with final binaries so users can easy locate
the source of problem.
* src/vm/garbage.c
% added missing static in s_gcSpinLock declaration
* src/rtl/hbi18n1.c
* typo in comment
* src/rdd/dbf1.c
* src/rdd/dbffpt/dbffpt1.c
* src/rdd/dbsql.c
* formatting
* src/rdd/usrrdd/rdds/logrdd.prg
* src/rdd/usrrdd/usrrdd.c
* src/rtl/checkbox.prg
* src/rtl/getsys.prg
* src/rtl/listbox.prg
* src/rtl/menuto.prg
* src/rtl/pushbtn.prg
* src/rtl/radiobtn.prg
* src/rtl/radiogrp.prg
* src/rtl/scrollbr.prg
* src/rtl/tbrowse.prg
* src/rtl/tget.prg
* src/rtl/tgetint.prg
* src/rtl/tgetlist.prg
* src/rtl/tmenuitm.prg
* src/rtl/errapi.c
* src/rtl/hbgtcore.c
* src/rtl/hbi18n1.c
* src/rtl/hbinet.c
* src/rtl/idle.c
* src/rtl/math.c
* src/rtl/setkey.c
* src/vm/asort.c
* src/vm/hashfunc.c
* src/vm/thread.c
* accept any EVAL item not only codeblocks. Actually it means that
also SYMBOL items are accepted but in the future we may extend it
and accept also objects of classes with :eval() message.
* src/rtl/tget.prg
! fixed GET default PICTURE for TIMESTAMP type
fixes https://github.com/harbour/core/issues/65
2014-05-11 00:05 UTC+0200 Viktor Szakats
! fixed GET colors when _SET_INTENSITY == .F.
2014-04-22 02:35 UTC+0200 Viktor Szakats
% use Stuff() instead of different combinations of Left() and SubStr()
* include/harbour.hbx
* src/rtl/left.c
+ added new function to replace "=" operator without the SET EXACT ambiguity
in its most common pattern of usage:
hb_LeftEq( <cString1>, <cString2> ) -> <lResult>
it's equivalent to this expression, but faster and shorter:
( Left( <cString1>, Len( <cString2> ) ) == <cString2> )
2014-01-22 03:09 UTC+0100 Viktor Szakáts
+ added hb_LeftEqI(). Same as hb_LeftEq() but case-insensitive.
hb_LeftEqI( <cString1>, <cString2> ) -> <lResult>
2014-02-04 13:38 UTC+0100 Viktor Szakáts
* include/harbour.hbx
* src/rtl/chruni.c
+ added hb_BRAt(). Same as hb_RAt() but for raw/binary strings
2014-06-25 19:54 UTC+0200 Viktor Szakats
* contrib/sddsqlt3/core.c
! fixed missing first record of query
2013-11-08 21:43 UTC+0100 Viktor Szakats
; many of above modification was borrowed directly or try to follow some
changes in Viktor's branch - thanks.