* utils/hbmk2/hbmk2.prg
+ Readded lib grouping by default for all targets which
require it: mingw, linux/gcc, bsd/gcc, dos/djgpp.
+ Added option '-nolibgrouping' to disable lib grouping
for advanced users who'd like to streamline link process.
Maybe once we manage to make this smooth for everyone,
it will become the default.
+ Added option '-nomiscsyslib' to disable default list
of extra system libs (on win/wce platforms currently).
This will speed up link process but you should in turn
supply these libs manually (even for our own contribs).
* utils/hbmk2/hbmk2.prg
! Fixed to not apply compression in -hbcmp (and similar) modes.
! Adjusted rdd lib ordering to make some linkers (mingw) happy without
using lib grouping. Please review.
* bin/hb-mkimp.bat
* Little formatting.
* utils/hbmk2/examples/contribf.hbc
* contrib/hbtip/hbtipssl.hbc
* contrib/hbtip/hbtip.hbc
* contrib/hbtip/Makefile
+ Enabled hbtip lib for dos platform. It can work with watt lib.
* INSTALL
+ Little improvements.
* bin/hb-func.sh
* utils/hbmk2/hbmk2.pt_BR.po
* utils/hbmk2/hbmk2.hu_HU.po
* utils/hbmk2/hbmk2.prg
! Fixed gpm lib to be added at the end of liblist to make
it link after removal of lib grouping switches.
* utils/hbmk2/hbmk2.pt_BR.po
* utils/hbmk2/hbmk2.hu_HU.po
* utils/hbmk2/hbmk2.prg
+ Added -compiler and -platform options as alternatives for
-comp and -plat, maybe this is more clear and it's also better in
sync with GNU Make's HB_COMPILER/HB_PLATFORM.
* config/dos/watcom.mk
* watt libname to lowercase.
* config/global.mk
! Fixed svnversion command call to work with older svn versions.
Thanks to Tamas Tevesz.
* contrib/hbfbird/firebird.c
! Fixed all remaining 64-bit compiler warnings. (msvc64, mingw64)
+ contrib/hbnetio/hbnetio.hbc
- contrib/hbnetio/tests/netiotst.hbp
+ contrib/hbnetio/tests/hbmk.hbm
+ Added .hbc file.
* Changed .prg specific .hbp file to generic autoprocessed .hbm file,
referring to .hbc file. This way it's in sync with rest of contribs
and makes it possible to add new tests in a lighter way)
* utils/hbmk2/hbmk2.prg
+ Added experimental support for @.clp files.
A bit hacky and could be incomplete. I'm not a .clp file user,
so pls test and extend.
* INSTALL
* contrib/gtalleg/Makefile
+ contrib/gtalleg/gtallegs
+ contrib/gtalleg/gtallegs/Makefile
* contrib/gtalleg/gtalleg.hbc
+ contrib/gtalleg/gtallegs.hbc
+ Added static flavour of gtalleg. This was an option until now,
now both versions are automatically built to be in sync with
rest of contribs. This also means that HB_ALLEGRO_STATIC
setting is no longer needed.
+ Added separate static/dynamic .hbc files accordingly.
* contrib/hbqt/Makefile
+ contrib/hbqt/hbqts
+ contrib/hbqt/hbqts/Makefile
* contrib/hbqt/hbqt.hbc
+ contrib/hbqt/hbqts.hbc
+ HB_QT_STATIC=yes setting will now cause building of static
flavor hbqt lib *above* the default one which links against
dynamic qt libs. Until now this setting caused that the
static version was built *instead* of the dynamic one.
NOTE: Using this setting will cause a significantly longer
build time on non-*nix systems.
+ Added separate static/dynamic .hbc files accordingly.
* config/global.mk
! Fixed to set CXX predefined variable to empty to make
defaulting logic in rules.mk work as expected.
This fixes recent hbqt build failure with MSVC.
* config/dos/watcom.mk
+ Added watt lib support. (untested, please test)
* source/rtl/Makefile
* source/rtl/hbsocket.c
* config/detect.mk
* config/dos/djgpp.mk
* Renamed HB_*_TCP to HB_*_WATT.
+ Added HB_INC_WATT to INSTALL. (couldn't make it work locally,
so it's not very precise yet)
* config/detect.mk
* Minor: lowercased component name for watt lib.
* config/dos/djgpp.mk
* Minor: Using LIBPATHS to store watt lib path instead of LDLIBS.
* config/install.mk
% Deleted no longer used/needed HB_INSTALL_DEF variable.
* harbour/doc/cmpopt.txt
* added information about ( "<alias>" )-> to <alias>-> compile time
optimization
* harbour/source/rtl/valtostr.c
! fixed GPF if hb_valToStr() is called without any parameters.
In such case RTE is generated.
* harbour/source/rtl/transfrm.c
! fixed GPF if transform() is called without any parameters, i.e.:
? &("transform")()
* harbour/source/vm/itemapi.c
! return "U" if hb_itemTypeStr() is called with NULL parameter
It fixed GPF when valtype() is called without any parameters, i.e.:
? &("valtype")()
NOTE: Compiler check number of parameters in some functions and
refuse to compile the code when it's wrong but such validation
does not work in macrocompiler or when function is called
indirectly like in above examples or using function symbols
so always write such functions to work with wrong number of
parameters.
* harbour/contrib/hbwin/axcore.c
! removed the hack I added in previous commit with interface enumeration
which was accepting any interface without validation its ID.
+ added 3-rd parameter to __AXREGISTERHANDLER() as Mindaugas proposed.
Now this function has the following syntax:
__AXREGISTERHANDLER( <pDisp>, <bHandler> | <hHandlers>
[, <cIID> ] ) -> <pDisp>
default value for <cIID> is IID_IDispatch.
* harbour/source/compiler/hbmain.c
! added missing pFunc initialization in symbol structure.
It was causing GPF when C code was attached to .prg file using
HB_INLINE() {} or #pragma BEGIN/ENDDUMP with HB_FUNC_STATIC()
inside. Many thanks to Andi for information about the problem.
* harbour/contrib/hbwin/axcore.c
+ added alternative method to look for connection point if
FindConnectionPoint() method fails when new AX control is created.
Such method is used by HWGUI and GTWVG.
Mindaugas please verify it, windows users please test it.
* harbour/source/common/hbver.c
! added additional hack for conditional code used for Windows detection
to work with VC98.
Viktor please verify it but this condition:
( !defined( _MSC_VER ) || _MSC_VER >= 1400 )
was not enough.
* harbour/source/vm/runner.c
! fixed possible GPF after loading .hrb module - clear function
address if dynamic symbol does not exist
* harbour/source/compiler/hbmain.c
! fixed typo in conditional compilation in last commit
* harbour/include/hbcomp.h
* harbour/include/hbcompdf.h
* harbour/source/compiler/hbmain.c
* harbour/source/compiler/genc.c
* harbour/source/compiler/genhrb.c
+ added support for compiling multiple .prg modules into single
compilation unit with repeated static or init/exit functions
with the same name.
Now Harbour compiler compiling .prg code from different .prg modules
included by @<name>.clp or by SET PROCEDURE TO ... / DO ... [ WITH ... ]
works exactly like Clipper. It supports separated file wide definitions
for each compiled .prg module when -n switch is used and allows to
use static or init/exit functions/procedures with the same names but
in different modules.
It resolves incompatibility often reported by [x]Harbour users.
Now it's not longer necessary to update existing Clipper code.
@.clp files and SET PROCEDURE TO ... / DO ... [ WITH ... ] are
fully functional like in Clipper.
AFAIR it was the last unintentional incompatibility with Clipper.
TODO: add support for multiple static functions with the same name
in .HRB files - it's necessary to change used format so I'll
probably to that with .HRL support. Now when -gh switch is used
harbour and such functions exists then compiler generates:
Error E0002 Redefinition of procedure or function ...
TODO: modify hbmk2 to pass @<name>.clp files directly to Harbour
compiler so it can compile them just like Clipper does and
generate single output file: <name>.<ext>
* harbour/config/instsh.mk
* disabled install command echo
* harbour/config/lib.mk
* harbour/config/bin.mk
* harbour/config/header.mk
* harbour/config/dyn.mk
* harbour/config/doc.mk
* harbour/config/instsh.mk
! rewritten install rules so now they work without any problem when
more then one target .mk file is included, i.e. lib.mk and header.mk
* harbour/source/pp/Makefile
* harbour/source/dynlib/mt/Makefile
* harbour/source/dynlib/Makefile
* harbour/contrib/hbmysql/Makefile
* harbour/contrib/hbct/Makefile
* harbour/contrib/xhb/Makefile
* harbour/contrib/hbodbc/Makefile
* harbour/contrib/hbtpathy/Makefile
* harbour/contrib/hbsqlit3/Makefile
* harbour/contrib/hbmzip/Makefile
* harbour/contrib/hbblat/Makefile
* harbour/contrib/hbqt/Makefile
* harbour/contrib/hbxbp/Makefile
* harbour/contrib/xpp/Makefile
* harbour/contrib/hbnf/Makefile
* harbour/contrib/hbcurl/Makefile
* harbour/contrib/gtqtc/Makefile
* harbour/contrib/rddsql/sddmy/Makefile
* harbour/contrib/rddsql/sddpg/Makefile
* harbour/contrib/rddsql/sddfb/Makefile
* harbour/contrib/rddsql/sddodbc/Makefile
* harbour/contrib/hbhpdf/Makefile
* harbour/contrib/rddado/Makefile
* harbour/contrib/gtwvg/Makefile
* harbour/contrib/hbpgsql/Makefile
* harbour/contrib/hbclipsm/Makefile
* harbour/contrib/rddads/Makefile
* harbour/contrib/hbfimage/Makefile
* harbour/contrib/hbgd/Makefile
* harbour/contrib/hbtip/Makefile
* harbour/contrib/hbwin/Makefile
* harbour/contrib/hbvpdf/Makefile
* harbour/contrib/hbbtree/Makefile
* harbour/contrib/hbssl/Makefile
* harbour/external/libhpdf/Makefile
* removed not longer necessary workaround for overwritten by different
targets INSTALL_RULE
Possible TODO: clean up some other rules in config .mk files to remove
hacks from pp and dynlib Makefile(s).
Above modifications should fully resolve the problems with repeated
install actions and also build problems with some more restrictive
POSIX SHELLs.
* harbour/include/hbcomp.h
* harbour/include/hbcompdf.h
* harbour/source/compiler/hbmain.c
* harbour/source/compiler/genc.c
* harbour/source/compiler/genhrb.c
% removed FUNCALLS internal structures and functions.
It simplifies compiler code, reduce memory usage and
increase performance due to eliminating unnecessary
structures which were update and scanned in previous.
Now we have all necessary information in symbol table.
* harbour/contrib/hbnetio/netiocli.c
+ added support for DNS addresses
* harbour/source/rtl/hbsocket.c
! added sock_init()/sock_exit() calls to DOS builds.
! use select_s() and close_s() instead of select() and close()
in DOS builds.
* harbour/contrib/hbnetio/netiocli.c
* harbour/contrib/hbnetio/netiosrv.c
! initialize socket library automatically - it's necessary for some
platforms.
* harbour/harbour.spec
* harbour/harbour-win-spec
* harbour/harbour-wce-spec
* harbour/bin/hb-func.sh
* harbour/contrib/Makefile
+ harbour/contrib/hbnetio
+ harbour/contrib/hbnetio/netio.h
+ harbour/contrib/hbnetio/netiomt.prg
+ harbour/contrib/hbnetio/netiocli.c
+ harbour/contrib/hbnetio/netiosrv.c
+ harbour/contrib/hbnetio/Makefile
+ added new library: HBNETIO.
It implements alternative RDD IO API which uses own TCP/IP sockets
to exchange data between client and server.
This library contains client and server code and is fully MT safe.
On client side it's enough to execute:
NETIO_CONNECT( [<cServer>], [<cPort>], [<nTimeOut>] ) -> <lOK>
function to register alternative NETIO RDD API and set default
server address and port.
<cServer> - server addres (default 127.0.0.1)
<cPort> - server port (default 2941)
<nTimeOut> - connection timeout (default -1 - not timeout)
Above settings are thread local and parameters of the 1-st successful
connection are used as default values for each new thread.
After registering NETIO client by above function each file starting
"net:" prefix is automatically redirected to given NETIO server, i.e.
use "net:mytable"
It's also possible to pass NETIO server and port as part of file name,
i.e.:
use "net:192.168.0.1:10005:mytable"
On the server side the following functions are available:
create NETIO listen socket:
NETIO_LISTEN( [<nPort>], [<cAddress>], [<cRootDir>] )
-> <pListenSocket> | NIL
accept new connection on NETIO listen socket:
NETIO_ACCEPT( <pListenSocket> [, <nTimeOut>] )
-> <pConnectionSocket> | NIL
start connection server:
NETIO_SERVER( <pConnectionSocket> ) -> NIL
stop connection accepting or connection server:
NETIO_SERVERSTOP( <pListenSocket> | <pConnectionSocket>, <lStop> )
-> NIL
activate MT NETIO server (it needs MT HVM):
NETIO_MTSERVER( [<nPort>], [<cAddress>] ) -> <pListenSocket> | NIL
To create NETIO server is enough to compile and link with MT HVM
this code:
proc main()
local pListenSocket
pListenSocket := netio_mtserver()
if empty( pListenSocket )
? "Cannot start server."
else
wait "Press any key to stop NETIO server."
netio_serverstop( pListenSocket )
pListenSocket := NIL
endif
return
NETIO works with all core RDDs (DBF, DBFFPT, DBFBLOB, DBFNTX, DBFCDX,
DBFNSX, SDF, DELIM) and any other RDD which inherits from above or
use standard RDD IO API (hb_file*() functions).
Without touching even single line in RDD code it gives the same
functionality as REDBFCDX in xHarbour but for all RDDs.
It's possible that such direct TCP/IP connection is faster then
file server protocols especially if they need more then one IP frame
to exchange data so it's one of the reason to use it in such cases.
Please make real speed tests.
The second reason to use NETIO server is resolving problem with
concurrent access to the same files using Harbour applications
compiled for different platforms, i.e. DOS, LINUX, Windows and OS2.
It's very hard to configure all client stations to use correct
locking system. NETIO fully resolves this problem so it can be
interesting alternative also for MS-Windows users only if they
do not want to play with oplocks setting on each station.
I'm interesting in user opinions about real life NETIO usage.
Have a fun with this new toy ;-)
+ harbour/contrib/hbnetio/tests
+ harbour/contrib/hbnetio/tests/netiotst.prg
+ harbour/contrib/hbnetio/tests/netiotst.hbp
+ harbour/contrib/hbnetio/tests/data
+ added simple test code for NETIO. It activates NETIO MT server
and then connects to this server to create and browse table with
memo file and production index with few tags.
* harbour/config/dos/djgpp.mk
! added watt library to linked library list when TCP support is
enabled in DOS builds
TODO: make the same for watcom builds - I would like to leave it
for Viktor because I'm not sure where exactly I should add it
for new watcom .mk files to not break Viktor's build concept.
* harbour/config/detect.mk
* harbour/source/rtl/Makefile
* harbour/source/rtl/hbsocket.c
+ added support for TCPIP in DOS builds using WATTCP/WATT-32 library.
The latest release of Watt-32 is available at
http://www.bgnett.no/~giva/
* contrib/hbqt/hbqt_slots.cpp
! Completely reworked events management. It now supports multi-threads.
* contrib/hbxbp/xbpbrowse.prg
* contrib/hbxbp/xbpdialog.prg
* contrib/hbxbp/xbpgeneric.prg
! Reworked event management to support multi threads.
* contrib/hbxbp/tests/demoxbp.prg
! Demonstrated the MT support. Click on <Dialogs> on main menu and play
with more than one dialog.
/* Still there are few glitches in MT mode and I do request Przemek to
look into the code and suggest us what else is required.
*/
* contrib/gtwvg/gtwvg.c
! A small fix in caret handelling. Under certain circumstances,
when other modal consoles are opened, HideCaret() is issued multiple
time and hence caret is diappeared. For normal console it was ok.
* contrib/gtwvg/wvgsink.c
! Some optimizations and formatting.
* harbour/source/pp/Makefile
* harbour/source/main/Makefile
! hacked the order of linked library list to resolve problem with
potential cross references between libraries on platforms which do
not support library grouping
* harbour/source/nortl/nortl.c
! added missing include hbmemory.ch
* harbour/source/compiler/hbmain.c
! added protection against multiple init function freeing