* contrib/mtpl_vc.mak
! Fixed MSVC not rebuilding .prg files after changing them.
Current solution is to simply delete the intermediate .c
file after C compiler returned. This also saves space,
so even if it's a hack, it might be good to add this
for other build paths.
* make_vc.mak
! Changed '!' (non-working) echo supression char to '@'.
* contrib/mtpl_b32.mak
* contrib/mtpl_vc.mak
% Changed to create the obj dir as a separate build rule
(just like for core) rather than for each file.
* make_b32.mak
* make_vc.mak
* contrib/mtpl_b32.mak
* contrib/mtpl_vc.mak
* "IF EXIST" -> "if exist" for consistency.
* "-" echo supression char consistently changed to "@",
and added where it was missing (for 'if exist' commands).
* make_vc.mak
% Cleaned WinCE C options from unnecessary quotes.
% Minor opt in .dll flag assembly.
% Some commented options removed.
* WinCE LDFLAGS uppercase to lowercase.
% Minor opt in non-WinCE LDFLAGSDLL assembly.
* source/rtl/gtwvt/gtwvt.c
* Minor formatting.
* harbour/contrib/gtwvg/gtwvg.c
* harbour/contrib/gtwvg/gtwvg.h
* harbour/contrib/gtwvg/wvgpaint.prg
* harbour/contrib/gtwvg/tests/demowvg.prg
! Updated to current GTWVT changes for multi-windows support.
;NOTE Compile demowvg.prg with -d__MW__ and execute repeatedly
<Traditonal><Next Gets | Browser>. Also paly with other parts as usual.
* harbour/source/rtl/gtxwc/gtxwc.h
* harbour/source/rtl/gtxwc/gtxwc.c
! use XInitThreads() for MT safe thread access when linked with MT HVM
+ added optional mutex protection enabled by HB_XWC_XLIB_NEEDLOCKS macro
to use when XLib does not support XInitThreads()
* bin/hbmk.bat
! Fix to previous change. (MT and GUI status was reset in the loop).
* bin/hbmk.bat
* bin/hbmk_os2.cmd
! Help message corrections.
* bin/hbmk.bat
* make_vc.mak
* config/w32/msvc.cf
* config/w32/msvcce.cf
* Using lowercase linker options for MSVC. Just for consistency.
* Using '/' as a switch char for MSVC linker. This works fo all
old version.
* contrib/mtpl_vc.mak
* Minor formatting.
* harbour/bin/hbmk.bat
* simple modification to make beginning hbmk parameters (-mt and -gui)
position independent though they still have to be used before Harbour/
C compiler switches and filenames
* harbour/source/common/hbdate.c
* harbour/source/compiler/cmdcheck.c
* harbour/source/rtl/filesys.c
* harbour/source/rtl/hbffind.c
! use MT safe localtime_r() function if it's available instead of
localtime()
TODO: clean the usage of this function and gmttime[_r]() probably
by adding our own wrappers.
* harbour/source/rtl/hbffind.c
! disabled calls to tzset() - this function should be executed
automatically by CRTL only if it's necessary. It's also not MT
safe and can cause MT applications crash.
+ contrib/rddads/adsx.c
+ added implementation of local indexing support for ADS driver.
Local indexing is used in case server can not do index
creation, for example: index key depends on relation child area
fields, index key uses user defined functions, index is created
using codeblock, but not expression, etc.
; This code implements no update index! Partial index update could
also be implemented, but I didn't have a need for this. Besides
that partial index implementation will be a little more
complicated than in other RDD. Database update operations are
not done in a single goCold() method. So, index update should
be called, from many methods: append(), putValue(), delete(),
recall(), etc., or ADS RDD structure should be changed to
support real goCold(). For implementation of partial index,
I'd suggest to use tree index (instead of a simple sorted array
and binary search). B-tree code could be found in
contrib/rddsql/sqlmix.c.
; Please check makefiles, and other compilers, platforms.
* bin/hbmk.bat
+ Added support for 'set HB_GUI=yes'
Currently implemented for BCC32 and MSVC.
+ Added support for 'set HB_MT=yes' (instead of 'MT')
for consistency. MT seems to be an xhb heritage and
it may be removed in the future.
+ Added support for optional -mt switch as an equivalent
to 'set HB_MT=yes'
+ Added support for optional -gui switch as an equivalent
to 'set HB_GUI=yes'
; NOTE: Ordering (first -mt, then -gui) and casing (everything
is lowercase) of the above options are significant.
* bin/hbmk.bat
* bin/hbmk_os2.cmd
* Help screen cleanup.
* contrib/gtwvg/tests/bld_vc.bat
* contrib/gtwvg/tests/bld_b32.bat
* Changed to use HB_GUI=yes instead of C_USR/L_USR.
* tests/rto_get.prg
+ Added tests for assigments as function calls (o:col( 10 )
and some for assigments as _function calls (o:_col( 10 )).
* bin/hbmk.bat
* make_vc.mak
- Removed /subsystem:console from LDFLAGS. This seems to
be the default so it's not necessary.
* bin/hbmk.bat
+ Added L_USR support for MSVC. Now it's possible to
build GUI (and GTWVT) programs using
'set L_USR=/subsystem:WINDOWS' switch.
* contrib/gtwvg/tests/bld_vc.bat
! Using above method to make it work with MSVC.
* harbour/tests/wvtext.prg
Updated to demonstrate multi-windows GT capabilities.
A REMINDER : This development alone places Harbour much higher than
so many dialects. Mind-blowing feature. I had ever longed
for this functionality since I started with Xbase++.
But the ease of use of a MW-GT in Harbour is far superior
than in Xbase++. Spread this word. I am sure this feature
alone is going to add a handsome value to my applications.
I hope you all will be benefitted.
I have no word of appreciation for Przemyslaw Czerpak as
whatever I will say will fall short of weight. So...
* harbour/include/hbstack.h
* harbour/include/hbgtcore.h
* harbour/include/hbthread.h
* harbour/include/hbapigt.h
* harbour/source/vm/estack.c
* harbour/source/vm/hvm.c
* harbour/source/vm/thread.c
* harbour/source/rtl/hbgtcore.c
+ added support for optional allocating independent console window by
each thread. By default new thread inherits console Window from
parent thread. But each thread can allocate its own console window
by calling hb_gtReload( <cGtName> ) function, f.e. by:
hb_gtReload( hb_gtVersion() )
If GT driver supports such functionality then new it will allocate
new console windows.
Each console window has reference counter which is increased when
new thread starts and decreased when hb_gtReload() is executed or
thread terminates. When counter reach zero give console window is
destroyed.
* harbour/source/rtl/gtwvt/gtwvt.c
! use SendNotifyMessage() instead of SendMessage() to not block
threads which inherited GT from parent thread. Why non of MS-Win
users reported this problem?
+ added reference counter to window class for multi GT support
+ harbour/tests/mt/mttest10.prg
+ added demonstration/test code for using independent console window
in different threads. It needs GT driver which supports such
functionality, f.e GTXWC in *nixes or GTWVT in MS-Windows
* harbour/tests/mt/mttest09.prg
! fixed typo in comment
* source/debug/debugger.prg
! Fixed error when moving in the call stack window to an source prg
not included in the path, and a ::oWndVars (Monitor of vars) is opened.
* harbour/include/hbapigt.h
* harbour/source/rtl/console.c
* harbour/source/rtl/filesys.c
* use HB_STD{IN,OUT,ERR}_HANDLE macros instead of hard coded values
* harbour/include/hbgtcore.h
* harbour/source/rtl/hbgtcore.c
* harbour/source/rtl/gtapi.c
+ added optional support for dynamic supertables
+ added reference counter to HB_GT_BASE structure
- removed hb_gtUnLoad() function
+ added hb_gtAlloc(), hb_gtRelease(), hb_gtAttach()
+ added hb_gtRealod() function which unloads current GT driver
and loads given new one
+ added .prg function HB_GTRELOAD( <cGtName> ) -> <lSuccess>
This function allow to switch active GT driver at run time.
It can be also used to simulate removed HB_NOSTARTUPWINDOW()
functionality. F.e.:
REQUEST HB_GT_WVT
REQUEST HB_GT_NUL_DEFAULT
proc main()
// do some initializations...
hb_gtReload( "WVT" )
// rest of code...
return
Please remember that some GTs may refuse initialization due to
missing required resources and instead of return FALSE they can
interrupt program with internal error, just like at application
startup so it's not guarantied that this function always returns.
* harbour/contrib/hbct/ctwin.c
* updated for new GT API
+ added support for dynamic supertable to allow using CTWIN in the
same time with different GTs.
* harbour/contrib/xhb/hbcompat.h
- removed hb_retclenAdoptRaw translation
* harbour/contrib/hbct/ctwin.c
* moved internal CTW data to structure allocated dynamically and
hold by inside current thread GT (HB_GT) to eliminate static
variables used by GTCTW. Now each thread can have its own
independent set of CTWindows if it allocated new GT.
* harbour/contrib/hbct/tests/ctwtest.prg
* removed two unused local variables
* source/debug/debugger.prg
! Fixed error when selecting "Restore Settings" and the current prg source
is not in the "path for Files" option. (NIL ::oBrwText at line 1478 on
debugger.prg)
* harbour/source/rtl/filebuf.c
! fixed bad typo in lock table resizing
* harbour/source/rdd/hbsix/sxcompr.c
! fixed ring buffer initialization in Sx_Compress()
+ contrib/hbdbgfx
+ contrib/hbdbgfx/dbgfxc.c
+ contrib/hbdbgfx/dbgfxc.prg
+ contrib/hbdbgfx/hbdbgfx.h
+ contrib/hbdbgfx/sprintf.prg
+ hbdbgfx lib add some functions usefull for debugging purpose:
hb_ToOutDebug( cMsg, p1, p2, ... )
that outputs to OutDebug from Microsoft debugview
HB_ToLogFile( cLogFile, cMsg, p1, p2, ... )
that outputs to a file
where cMsg is formatted like printf()
example:
hb_ToOutDebug( "fields: name = %s, address = %s", field->name, field->address )
and some utility functions:
HB_ToOutDebugOnOff( lOnOff )
HB_LogFileOnOff( lOnOff )
HB_EmptyLogFileOnOff( lOnOff )
Above functions are available either at prg than at C level.
Actually it is only for window platform.
* contrib/mtpl_b32.mak
* contrib/mtpl_gcc.mak
* contrib/mtpl_vc.mak
* Fine tuning latest setting changes. I've rather removed
-gc3 as contrib default switch. For those contribs where
speed is critical, this switch should be turned on
on a per contrib basis.
* common.mak
* contrib/mtpl_b32.mak
* contrib/mtpl_gcc.mak
* contrib/mtpl_vc.mak
+ Made -gc3 switch the default. This will result in
noticeably faster .prg code execution at the cost of
a slightly bigger executable. Speaking of the core,
this can result at maximum 250K of extra executable
size increase, if the final executable uses _all_
core .prg functions. Usually though it's much lower
than that, especially for GUI programs, since the
majority of core .prg code deals with CUI elements,
like TBrowse(), TGet(), 5.3 compatible CUI controls,
.frm and .lbl support, MemoEdit().
* contrib/examples/dbu/bld_b32.bat
* contrib/examples/dbu/bld_vc.bat
* utils/hbdoc/bld_vc.bat
* utils/hbdoc/bld_b32.bat
* utils/hbmake/bld_b32.bat
* utils/hbmake/bld_vc.bat
+ Added -l Harbour switch.