* harbour/include/hbapi.h
* harbour/src/common/hbver.c
+ added BOOL hb_iswin9x( void ) C function
* harbour/src/rtl/version.c
+ added HB_OSISWIN9X() PRG function
* harbour/src/rtl/gttone.c
% simplified the code using hb_iswin9x() function
TODO: Check if WinCE support WinNT file IO functions and if yes then
replace in src/rtl/filesys.c 'if( hb_iswinnt() )' with
'if( !hb_iswin9x() )'
* harbour/contrib/hbwin/win_tprn.prg
* harbour/contrib/hbwin/win_prn1.c
+ added ::AskProperties in WIN_PRN class
If it is assigned .t. prior to calling ::Create(), a DocumentProperties
dialog is displayed. By Budyanto Dj. borrowed from xHarbour.
NOTE: this modification does not contain win9x hack present in
xHarbour. Please make tests and update this code if necessary
* harbour/include/dbinfo.ch
* harbour/include/hbrdddbf.h
* harbour/src/rdd/dbf1.c
* harbour/src/rdd/dbfntx/dbfntx1.c
* harbour/src/rdd/dbfnsx/dbfnsx1.c
* renamed DB_DBFLOCK_XHB64 => DB_DBFLOCK_HB64
* harbour/contrib/hbwin/win_tprn.prg
* updated some comments and formatting
* harbour/contrib/xhb/Makefile
+ harbour/contrib/xhb/xhw32prn.prg
+ added WIN32PRN class, it inherits from WIN_PRN class hiding some
differences between Harbour and xHarbour in paper size setting and
separated horizontal and vertical alignment setting
* contrib/hbwin/win_reg.prg
* contrib/hbwin/win_os.prg
* contrib/hbwin/win_tprn.prg
* contrib/hbwin/wapi_winbase.c
* contrib/hbwin/hbwin.h
* contrib/hbwin/hbwin.ch
* contrib/hbwin/tests/testprn.prg
* contrib/hbwin/tests/testcom1.prg
* contrib/hbwin/tests/testcom2.prg
* contrib/hbwin/tests/testreg.prg
* contrib/hbwin/tests/testmapi.prg
* contrib/hbwin/win_com.c
* contrib/hbwin/win_prn1.c
* MM_TO_INCH macro moved from hbwin.ch to win_tprn.prg.
(INCOMPATIBLE is someone happened to use this in app code)
+ Prefixed all Windows constants with WIN_ in hbwin.ch.
+ Prefixed all hbwin specific constants with HB_ in hbwin.ch.
+ Retained all old legacy / deprecated hbwin.ch constants
for compatibility. Users are encourages to use the new
ones, as the old ones will be deleted in the future.
* Changed WIN_MULDIV() to use hb_retni() (instead of hb_retnl())
* WIN_MULDIV() renamed to WAPI_MULDIV() and moved
to wapi source. (INCOMPATIBLE, although it's unlikely anyone
is using WIN_MULDIV() so I didn't keep it.)
+ Added some additional printing related Windows constants.
+ Added comments to hbwin.ch saying which constant is used
in which WIN_*() function.
* HB_WIN_MAPI_* constants renamed to WIN_MAPI_*.
(I haven't dealt with compatibility as this is brand new
functions with not much users yet)
+ Marked all hbwin.ch deprecated macros with HB_LEGACY_LEVEL3
! Fixed to use hbwin.ch constants in few remaining places in testprn.prg
; Now it's possible to include hbwin.ch in .c files.
; QUESTION: Why RGB_* color constants aren't using pure colors?
If there is no special reason, I think it should be
changed to pure ones (with 0xFF components).
* src/compiler/hbgenerr.c
* Formatting.
* src/vm/set.c
! ULONG -> HB_FATTR. Missed this occurrence of this ULONG
in previous global modification pass.
Error reported by Istvan Bisz.
* contrib/hbct/Makefile
* contrib/hbct/disk.c
+ contrib/hbct/diskhb.c
! Cleaned the way Windows headers are included.
* Cleaned TRUENAME(), GETVOLINFO() and VOLSERIAL().
+ Using new UNICODE macros in TRUENAME(), GETVOLINFO() and VOLSERIAL().
! GETVOLINFO(), which is not a CT function, got moved
to a separate source file to avoid name collisions.
; TOFIX: It should be moved to xhb lib eventually.
* contrib/hbct/ctnet.c
* Cleaned NETREDIR() and NETRMTNAME() functions.
+ Reworked NETREDIR() and NETRMTNAME() functions to use new UNICODE macros.
+ Extended return buffer in network functions to 128 (from 80).
+ NETRMTNAME() got support to return embedded zeros in name string.
+ Documented a hidden xhb extension in NETREDIR().
% hb_WNetErrorHandler() static function merged into NETREDIR().
; TOFIX: Above hidden extension in NETREDIR() very much looks like
a debugging feature, so I left a TOFIX to convert it to
HB_TRACE() call.
; Please test them.
* contrib/hbsqlit3/hbsqlit3.c
* contrib/hbmisc/dates2.c
- Deleted two functions which were recently made static,
and it turned out they're not even used by Harbour.
Warning reported by Istvan Bisz.
* src/vm/hashfunc.c
* src/vm/asort.c
* src/rtl/cdpapi.c
* contrib/xhb/xhbat.c
* contrib/xhb/txtline.c
* LONG -> HB_ISIZ
* contrib/xhb/bkgtsks.c
* SHORT -> int
* contrib/xhb/hbcomprs.c
* contrib/xhb/xhberrc.c
* LONG -> long
* harbour/src/compiler/harbour.y
* harbour/src/compiler/harbour.yyh
* harbour/src/compiler/harbour.yyc
! pacified compile time error when ... is used as parameter in _HB_MEMBRER
declaration. TODO: Remove or fix this strong typing grammar rules.
* harbour/src/debug/dbgtwin.prg
* harbour/src/debug/dbgtmenu.prg
* harbour/src/debug/tbrwtext.prg
* harbour/src/debug/debugger.prg
* harbour/src/debug/dbgtinp.prg
* harbour/src/rtl/tbcolumn.prg
* harbour/src/rtl/listbox.prg
* harbour/src/rtl/pushbtn.prg
* harbour/src/rtl/treport.prg
* harbour/src/rtl/radiogrp.prg
* harbour/src/rtl/tthreadx.prg
* harbour/src/rtl/checkbox.prg
* harbour/src/rtl/tsymbol.prg
* harbour/src/rtl/teditor.prg
* harbour/src/rtl/tmenuitm.prg
* harbour/src/rtl/tbrowse.prg
* harbour/contrib/hbmysql/tmysql.prg
* harbour/contrib/xhb/stream.prg
* harbour/contrib/xhb/trpccli.prg
* harbour/contrib/xhb/hblognet.prg
* harbour/contrib/xhb/tfile.prg
* harbour/contrib/xhb/tframe.prg
* harbour/contrib/xhb/htjlist.prg
* harbour/contrib/xhb/hblog.prg
* harbour/contrib/xhb/trpc.prg
* harbour/contrib/xhb/thtm.prg
* harbour/contrib/xhb/tcgi.prg
* harbour/contrib/xhb/ttable.prg
* harbour/contrib/xhb/txml.prg
* harbour/contrib/xhb/hjwindow.prg
* harbour/contrib/xhb/htmutil.prg
* harbour/contrib/hbodbc/todbc.prg
* harbour/contrib/hbfbird/tfirebrd.prg
* harbour/contrib/xpp/tthreadx.prg
* harbour/contrib/hbpgsql/tpostgre.prg
* harbour/contrib/hbgd/gdchart.prg
* harbour/contrib/hbgd/gdimage.prg
* harbour/contrib/hbgd/gdbar.prg
* harbour/contrib/hbgd/gdbarcod.prg
* harbour/contrib/hbmisc/twirler.prg
* harbour/contrib/hbtip/thtml.prg
* harbour/contrib/hbtip/cgi.prg
* harbour/contrib/hbtip/httpcli.prg
* harbour/contrib/hbtip/smtpcli.prg
* harbour/contrib/hbtip/client.prg
* harbour/contrib/hbtip/ftpcli.prg
* harbour/contrib/hbtip/mail.prg
* harbour/contrib/hbtip/popcli.prg
* harbour/contrib/hbwin/win_tprn.prg
* harbour/contrib/hbbtree/tbtree.prg
* harbour/utils/hbformat/hbformat.prg
! fixed class method declarations to be synced with method implementations
All of the above missdeclarations were detected by compilation with:
HB_USER_PRGFLAGS=-DHB_CLS_PARAMS_ERR
Few years ago in hbclass.ch I defined PP rules to force strict method
declarations but I had to disable them due to problems with old PP.
I defined HB_CLS_NO_PARAMS_ERR and left this note in hbclass.ch:
> I have to enable this definition by default until we will not fix
> preprocessor. [druzus]
Current PP code works correctly so we can remove it and activate this
code. Anyhow as above commit shows a lot of code has been created with
wrong declarations. I fixed Harbour core code (except HBQT, HBXBP and
GTWVG - I hope Pritpal or Viktor will fix it) but setting
HB_CLS_PARAMS_ERR as default will exploit a lot of similar problems in
user code so I would like the hear other developers' opinions about it.
* src/rtl/memoedit.prg
! Fixed to set K_ESC as lastkey() if exiting with changed
buffer and answering 'yes' to confirmation question.
Thanks Przemek for reporting it.
! Fixed to not save buffer if exiting with <Esc> and
SET SCOREBOARD OFF.
* src/rtl/tget.prg
% Minor optimization when displaying delim chars.
* contrib/hbwin/win_prn3.c
! Fixed function name in file header comment.
* harbour/src/rtl/achoice.prg
! fixed RTE reported by Robert Skowronek - thanks for the code example
! fixed not shown immediately newly added achoice items (see
Robert's example) - please verify this modification.
* harbour/src/vm/hashes.c
! fixed missing HB_STACK_TLS_PRELOAD - thanks to Xavi
* harbour/contrib/hbnetio/netiosrv.c
! fixed wrong declaration and casting of rpcFilter - thanks to Xavi
+ harbour/contrib/hbnetio/readme.txt
+ added small description of NETIO functions - now only client parts
* harbour/contrib/hbwin/win_tprn.prg
* updated class name in comments
* harbour/contrib/hbwin/win_prn1.c
* minor formatting
* harbour/contrib/hbwin/win_prn3.c
% removed unnecessary rest of buffer clearing in hb_tstrncat()
* src/rtl/tget.prg
! Fixed cursor positioning bug, when @S picture length is
higher than actual edit buffer length.
Thanks to Stupar for report.
[TOMERGE 2.0]
* contrib/hbnetio/utils/netiosrv.prg
* Minor.
* src/rtl/Makefile
+ src/rtl/strclear.c
* include/hbextern.ch
+ Added HB_STRCLEAR() function to safely clear the content
of a string variable.
Notice that this method by itself can only work if the
string variable has no other references, and generally
you have to code carefully to avoid creating unwanted
copies of the string when passing it around in an app.
So this is no silver bullet, but rather just one component
to solve this problem.
* contrib/hbnetio/utils/netiosrv.prg
+ Added steps to avoid having the password stored in memory,
while the server is running.
* src/rtl/philes.c
% Minor cleanup.
* include/hbsetup.ch
* Disabled HB_LEGACY_LEVEL2 by default.
* HB_LEGACY_OFF now controls HB_LEGACY_LEVEL3 (was HB_LEGACY_LEVEL2).
+ Added HB_LEGACY_LEVEL4
; SVN users notice: This may make your C code INCOMPATIBLE with
this version, please review required changes (documented in older
ChangeLog entries) and update your code. Look for HB_LEGACY_LEVEL2
and INCOMPATIBLE keywords.
* contrib/hbnetio/utils/netiosrv.prg
+ contrib/hbnetio/utils/modules.hbp
+ contrib/hbnetio/utils/modules
+ contrib/hbnetio/utils/modules/test.prg
+ Added simple command line to server.
+ Added list of possible feature as TODO. Most of these will
need backend support from hbnetio lib.
+ Added detailed help screen.
+ Added --version option support.
+ Added support for -rpc=file.hrb option. Although for some
reason (most likely my omission) it doesn't work yet.
+ -DHB_EXTERN will now enable inclusion of all core functions.
+ Added build file for .hrb modules.
+ Added little test module.
+ Added SETCANCEL( .F. ) to avoid irregular shutdown with Ctrl+C.
* src/rtl/memoedit.prg
! Deleted hack which explicitly set lastkey to CTRL_END/W
when exiting with changes saved. The comment said that
it was added to make DBU happy, but it doesn't seem to be
necessary anymore, at least I couldn't spot any problem
without it. Pls check it.
! Fixed MEMOEDIT() not recognizing K_ESC as exit key when
custom function is used.
This fixes DBU not recognizing K_ESC as a way to exit
memo editing. Please review, I'm not MEMOEDIT() user
and this was such an obvious omission that I wonder
if there was some real reason for it. Anyhow it was
wrong before.
* contrib/hbfimage/fi_wrp.c
* contrib/hbclipsm/num.c
* contrib/hbclipsm/numfloor.c
* contrib/hbclipsm/status.c
* contrib/hbclipsm/numceil.c
* Formatting.
* harbour/include/hbapi.h
* harbour/src/vm/hashes.c
+ added new function hb_hashGetCItemPtr() which accepts ASCIIZ string
as index.
* harbour/contrib/hbnetio/netiosrv.c
+ added support for using HASH arrays as RPC filter.
Such hash array should be indexed by function/procedure name set of
codeblocks or function references or even objects which understand
EVAL method.
Please remember that function names passed from client side are case
sensitive so if you do not need it then please disable case matching
in the hash array, i.e. using HB_HSETCASEMATCH( hValue, .F. ).
* renamed NETIO_RPCFUNC() to NETIO_RPCFILTER() it's better name now
because we added support for using hash arrays as RPC filters:
NETIO_RPCFILTER( <pConnectionSocket>,
<sFuncSym> | <hValue> | NIL ) -> NIL
* harbour/contrib/hbnetio/netiomt.prg
+ added support for setting RPC filter in NETIO_MTSERVER() using its
4-th parameter:
NETIO_MTSERVER( [<nPort>], [<cIfAddr>], [<cRootDir>],
[<lRPC> | <sFuncSym> | <hValue>],
[<cPasswd>], [<nCompressionLevel>], [<nStrategy>] )
-> <pListenSocket>
* harbour/contrib/hbclipsm/environ.c
! fixed GPF in FILEDRIVE() function on platforms which do not support
drive letters or when path does not contain drive.
% small optimization in FILEPATH(), FILEBASE(), FILEEXT(), FILEDRIVE()
* harbour/src/rtl/hbznet.c
* move hb_znetOpen() parameter validation from HB_INETCOMPRESS()
to hb_znetOpen() - it should help keeping other code using
hb_znetOpen() more simple
* harbour/contrib/hbnetio/netio.h
* harbour/contrib/hbnetio/netiocli.c
* harbour/contrib/hbnetio/netiosrv.c
+ added support for compression and encryption in NETIO connection
streams. Enabling encryption (password) automatically enable also
compression. If necessary user can set compression level to
HB_ZLIB_COMPRESSION_NONE. HB_ZLIB_COMPRESSION_DISABLE used as
compression level removes compression and encryption.
See below for details of NETIO server and client code modifications.
* harbour/contrib/hbnetio/netiocli.c
+ extended NETIO_CONNECT() client side function parameters:
NETIO_CONNECT( [<cServer>], [<cPort>], [<nTimeOut>], ;
[<cPasswd>], [<nCompressionLevel>], [<nStrategy>] )
-> <lOK>
% changed the behavior of NETIO_CONNECT() client side function.
In the previous version this function was connecting to the server
and then disconnecting so it was used to check if connection is
available and to set default connection parameters.
Now it does not disconnect after successful connection so created
connection is keept and can be reused by any pending NETIO_*() calls.
User can open many different connections in the same time.
The connections are recognized by server and port address.
The connections set by NETIO_CONNECT() function can be closed by
NETIO_DISCONNECT() function.
Each repeated call to NETIO_CONNECT() increase reference counter
in the connection stream and need corresponding number of
NETIO_DISCONNECT() calls.
+ added new PRG client side function:
NETIO_DISCONNECT( [<cServer>], [<cPort>] ) -> <lOK>
which closes connections set by NETIO_CONNECT().
+ added support for passing connection password as part of file path
or function name in format:
<server>[:<port>[:<passwd>]]:<filepath|funcname>
i.e.:
192.168.0.1:2941:secret:path/to/file
Please remember that it's only an alternative method of setting
encryption which does not allow to use CHR(0) or ":" in passwords.
User can always set connection using NETIO_CONNECT() function which
will be used in RPC or FILE IO calls. If more then one connection
is set by NETIO_CONNECT() then user can chose the connection using
only server and port. It's not necessary to pass other connection
parameters.
+ added support for UNC paths:
//<server>[:<port>]/<filepath|funcname>
i.e.:
//192.168.0.1:2941/path/to/file
backslashes (\\) are also supported.
* harbour/contrib/hbnetio/netiosrv.c
% moved 1-st login identification from NETIO_ACCEPT() to NETIO_SERVER()
Such version do not block other connection accepting when server
waits for NETIO_LOGIN frame so it improve scalability and also
protect against code which may want to block access to the server
by opening dummy connections.
+ added new parameters to NETIO_ACCEPT() function which allows to set
encryption and compression for new connections:
NETIO_ACCEPT( <pListenSocket>, [<nTimeOut>],
[<cPass>], [<nCompressionLevel>], [<nStrategy>] )
-> <pConnectionSocket> | NIL
+ added new server side function:
NETIO_COMPRESS( <pConnectionSocket>,
[<cPass>], [<nCompressionLevel>], [<nStrategy>] )
-> NIL
which allow to set or change encryption and compression parameters
in existing connections
* harbour/contrib/hbnetio/netiomt.prg
* updated to accept new connection parameters in NETIO_MTSERVER()
function:
NETIO_MTSERVER( [<nPort>], [<cIfAddr>], [<cRootDir>], [<lRPC>],
[<cPasswd>], [<nCompressionLevel>], [<nStrategy>] )
-> <pListenSocket>
* harbour/contrib/hbnetio/utils/netiosrv.prg
+ added 5-th parameter <passwd> which enable encryption with compression,
current syntx is:
netiosrv [<port>] [<inetaddr>] [<rootdir>] [<rpc>] [<passwd>]
For default values use "" in command line for skipped parameters, i.e.:
netiosrv "" "" "" 1 topsecret
* harbour/contrib/hbnetio/tests/netiotst.prg
* enable RPC, compression and encryption in test code
+ added simple code which use RPC to create directory on the server side
Now it's possible to easy create secure NETIO connections and compression
should help in slow connections when big number of data has to be
exchange. In RDD file access it mostly help when tables use long records.
Hope you will find it useful. Please make tests.
* harbour/src/vm/dynsym.c
+ accept also function name (not only symbol index) as parameter
of __DYNSISFUN()
* harbour/src/rtl/hbznet.c
* pacified BCC warnings
* harbour/contrib/hbnetio/netiocli.c
* pacified BCC warning
* harbour/include/hbznet.h
* harbour/src/rtl/hbznet.c
+ added support for blowfish encryption in HB_ZNETSTREAM
+ added C function
void hb_znetEncryptKey( PHB_ZNETSTREAM pStream,
const void * keydata, int keylen );
which enables data encryption in HB_ZNETSTREAM
+ added 4-th parameter to <cPass> to .PRG HB_INETCOMPRESS() function:
HB_INETCOMPRESS( <pSocket>, [<nCompressionLevel>], [<nStrategy>],
[<cPass>] )
<cPass> is initial value to create blowfish key.
Please test.
* src/vm/dlmalloc.c
! Fixed two potentially uninitialized variables, signaled by MSVC.
* src/common/hbgete.c
+ Changed to use native SetEnvironmentVariable() API instead of
forced ANSI one.
* src/common/hbwince.c
* include/hbwince.h
% Deleted unused ANSI Windows API stubs.
+ Added empty SetEnvironmentVariable() stub for WinCE
builds where it's missing.
* Reconfigured these stubs:
SetCurrentDirectory()
GetCurrentDirectory()
GetComputerName()
GetUserName()
* config/win/global.mk
* Comment updated.
* config/win/msvc.mk
+ Added -nxcompat and -dynamicbase to .dll link command.
(I'm unsure what -dynamicbase is good for in a .dll, but it's
accepted and set)
! Fixed to add -nxcompat/-dynamicbase for MSVC 2008 and upper.
(it's also possible to use it with MSVS 2005 SP1 though, but
build won't detect this case)
* INSTALL
+ Added free SVN book link.
* src/vm/extrap.c
% Marked exception filter callback as 'static'
; TOCHECK: Please verify that OS/2 still works this way.
* src/rtl/oemansi.c
! Fixed two tabs.
* src/rtl/gtwvt/gtwvt.c
* contrib/gtwvg/gtwvg.c
* contrib/rddads/adsfunc.c
! Fixed to not use unsafe/ANSI CharToOemBuffA() API.
; Please review me.
* config/win/mingw.mk
+ Added information about MinGW alternatives for MSVC
security features. Unfortunately they need Cygwin
binary plus some depend on MinGW host platform
and/or version.
* include/hbwince.h
* src/common/hbwince.c
- Deleted CharToOemBuffA(), OemToCharBuffA(). No longer
needed by Harbour.
; TODO: Delete rest of not anymore used ANSI WinAPI
functions. Now Harbour never uses ANSI
WinAPI functions in UNICODE mode.
* config/win/global.mk
- Deleted reference to CharToOemBuffA(), OemToCharBuffA().
* src/vm/extrap.c
* contrib/hbwin/win_prn3.c
+ Added TOFIXes for unsafe function usage:
IsBadWritePtr(), IsBadReadPtr(), lstrlen(), lstrcpy(), lstrcat()
; QUESTION: Any idea how to fix that? win_prn3.c can
probably be fixed with some good general coding
idea.
* contrib/hbwin/wce_smsc.c
! Fixed to not use unsafe CRTL functions.
* src/rtl/oemansi.c
! Rewritten HB_OEMTOANSI() and HB_ANSITOOEM() to not use
Windows API functions marked as unsafe. New version is a bit
slower but won't mark Harbour apps as unsafe in an audit.
; Please test and review.
* utils/hbmk2/hbmk2.prg
* config/wce/msvcarm.mk
* config/win/msvc.mk
% Deleted -Gs MSVC option. Testing with MSVC 2008 I've found
this have no effect on x86 builds, and it makes x64 builds
slighly less efficient by forcing stack checks in each function
call. This seems to contradict MSDN, which doesn't suggest such
difference between x86 and x64:
http://msdn.microsoft.com/en-us/library/9598wk25.aspx
% Deleted -GS- MSVC option used for wce targets for MSVC >= 8.00.
'-GS-' will disable stack cookies (on by default), thus trading
app size/speed for security. Maybe this is preferred for wce
users, but in Harbour I'd rather opt to pass this decision to users
for all targets.
Enable with: HB_USER_CFLAGS=-GS- / -cflag={allmsvc}-GS-
MSDN:
http://msdn.microsoft.com/en-us/library/8dbf701c.aspx
* harbour/src/rtl/hbznet.c
* harbour/include/hbznet.h
* added new optional parameter to hb_znetWrite() function which allow
to catch result of last hb_socketSend() operation
* removed automatic flushing from hb_znetWrite() function,
it should help in implementing more efficient C code using
hb_znet*() functions
* harbour/src/rtl/hbinet.c
* flush HB_ZNETSTREAM output after write operation
% small optimization in internal inet error setting
* harbour/src/rtl/hbznet.c
! do not use DEF_MEM_LEVEL to avoid potential problems when <zutil.h>
is not available
* harbour/contrib/hbnetio/netio.h
* harbour/contrib/hbnetio/netiocli.c
* harbour/contrib/hbnetio/netiosrv.c
+ implemented RPC in HBNETIO protocol
+ added the following client functions:
check if function/procedure exists on the server side:
NETIO_PROCEXISTS( <cProcName> ) -> <lExists>
execute function/procedure on server the side,
do not wait for confirmation:
NETIO_PROCEXEC( <cProcName> [, <params,...>] ) -> <lSent>
execute function/procedure on the server side and wait for
confirmation:
NETIO_PROCEXECW( <cProcName> [, <params,...>] ) -> <lExecuted>
execute function on the server side and wait for its return value:
NETIO_FUNCEXEC( <cFuncName> [, <params,...>] ) -> <xFuncRetVal>
All above functions use default connection set by NETIO_CONNECT()
for RPCs but it's also possible to specify server address and port
in <cProcName>/<cFuncName> just like in <cFileName> parameter in RDD
functions, i.e.:
NETIO_PROCEXISTS( "192.168.0.1:10005:MYFUNC" )
+ added new server side functions to enable/disable/check RPC support:
NETIO_RPC( <pListenSocket> | <pConnectionSocket> [, <lEnable> ] )
-> <lEnabled>
if RPC is enabled for listen socket then connection sockets inherit
this setting.
+ added 4-th parameter <lRPC> to NETIO_LISTEN() function. .T. enable
RPC support in returned listen socket which is later inherited by
connection sockets
* changed protocol version ID - current NETIO clients and servers
cannot be used with old code
* harbour/contrib/hbnetio/utils/netiosrv.prg
* added option to enable RPC support in NETIO server
If you want to make some test then you can execute netiosrv with
non empty 4-th parameter as server, i.e.:
./netiosrv "" "" "" 1
and try this code as client:
proc main()
// pass server address to netio_connect() for non localhost tests
? "NETIO_CONNECT():", netio_connect()
?
? "DATE() function is supported:", netio_procexists( "DATE" )
? "QOUT() function is supported:", netio_procexists( "DATE" )
? "HB_DATETIME() function is supported:", ;
netio_procexists( "HB_DATETIME" )
?
? netio_procexec( "QOUT", repl( "=", 50 ) )
? netio_procexec( "QOUT", "This is RPC TEST", date(), hb_datetime() )
? netio_procexecw( "QOUT", repl( "=", 50 ) )
?
? "SERVER DATE:", netio_funcexec( "DATE" )
? "SERVER TIME:", netio_funcexec( "TIME" )
? "SERVER DATETIME:", netio_funcexec( "HB_DATETIME" )
?
? netio_funcexec( "upper", "hello world !!!" )
return
Please remember that only functions linked with server are available.
If you want to enabled all core functions in netiosrv then please
uncomment this line in netiosrv.prg:
REQUEST __HB_EXTERN__
Have a fun with a new toy. I hope that many Harbour user will find it
very interesting. Please only be careful !!!. This feature allows to
execute remotely _ANY_ code on the server side. _NEVER_ leave open ports
with RPC support for untrusted access.
* harbour/src/rtl/gtwin/gtwin.c
+ added support for HB_GTI_ISUNICODE
* harbour/include/hbapifs.h
* added missing 'extern' in some declarations
* harbour/include/hbzlib.ch
+ added HB_ZLIB_STRATEGY_* constants
+ added HB_ZLIB_COMPRESSION_DISABLE
* harbour/include/Makefile
+ harbour/include/hbznet.h
* harbour/include/hbextern.ch
* harbour/src/rtl/Makefile
* harbour/src/rtl/hbinet.c
+ harbour/src/rtl/hbznet.c
+ added support for ZLIB compression in stream sockets.
+ added .prg function:
HB_INETCOMPRESS( <pSocket>, [<nCompressionLevel>], [<nStrategy>] )
which enables ZLIB compression for given HB_INET*() socket.
<pSocket> is a socket created by one of HB_INET*() functions
<nCompressionLevel> is compression factor between 1 (fastest) and
9 (best) (see HB_ZLIB_COMPRESSION_*)
0 (none) disable compression on output data
but decompression is still working.
<nStrategy> is used to tune compression algorithm,
see HB_ZLIB_STRATEGY_*
The compression must be enabled on both connection sides, i.e.
on the server side:
conn := hb_inetAccept( sock )
hb_inetCompress( conn )
and on the client side:
sock := hb_inetConnect( cServer, nPort )
hb_inetCompress( sock )
in the same moment but it's not necessary to enable it at the
beginning of connection. It can be done later, i.e. when both
sides agree to enable connection using some custom protocol.
The compression has effect only on stream connections, i.e.
TCP and it's ignored in datagram connections like UDP.
This function can be executed more then once changing the compression
parameters but it causes that all data in readahead decompression
buffer is discarded. When called with HB_ZLIB_COMPRESSION_DISABLE
as <nCompressionLevel> then support for stream compression is removed
and sockets works again in raw mode.
The compression level and strategy do not have to be the same on both
connection sides. Each side can chose the best settings for data it's
going to send.
This code was written in a way which allows to easy implement
alternative compression methods or other extensions like encryption
in existing HB_INET*() sockets also by non core code. The public C
functions declared in hbznet.h allows to use this extension with raw
harbour sockets two.
* utils/hbmk2/hbmk2.pt_BR.po
* utils/hbmk2/hbmk2.hu_HU.po
* utils/hbmk2/hbmk2.prg
+ Added support for C++ input files. Now C++ files will be compiled
in a separate pass where native C++ compiler is used, which
means that C++ compilation mode is now enforced by using .cpp
extension. This also means that it's now possible to build
mixed mode projects with both C and C++ input files.
Enable with option: -hbcppmm (cmdline) or hbcppmm=yes (in .hbc files)
NOTE: Suggestions for better names are welcome.
In general, this feature makes -cpp option unnecessary, its
only purpose now is to override default mode.
; Please test.
* utils/hbmk2/hbmk2.prg
- Deleted support for link-related macros in C compilation phase,
these weren't used anymore inside current hbmk2, so it seems safe,
but it's possible nevertheless that it will cause regressions in
some exotic use cases.
* utils/hbmk2/hbmk2.prg
! Fixed parsing -warn option on the commandline and .hbm/.hbp files.
[TOMERGE 2.0]
* contrib/hbqt/generator/hbmk.hbm
! Deleted xhb lib. It's not required and was probably added for
"outdebug" stuff.
* contrib/hbqt/hbqt.hbc
* contrib/hbqt/hbqts.hbc
* contrib/gtqtc/gtqtcs.hbc
* contrib/gtqtc/gtqtc.hbc
+ Added hbcppmm=yes option. This will force C++ memory allocation
functions to be overridden by Harbour mm functions.
* src/vm/fm.c
- Deleted C++ memory allocation functions. This feature now
lives inside hbmk2, and it now doesn't require whole Harbour
to be built in C++ mode.
* contrib/hbqt/*
* Regenerated.
* harbour/contrib/hbct/video.c
% use hb_gtColorToN() function instead of own code to decode Clipper
color in VGAPALETTE()
! added protection against possible transfer buffer overflow in
SETFONT() function
! return -2 when SETFONT() is not implemented
TODO: clean these functions, add support for other DOS compilers,
add some missing functions and redirect few of them like
VGAPALETTE() to hb_gtInfo() in non DOS builds
* harbour/src/rtl/hbgtcore.c
! fixed missing ';' => CHR( 13 ) translation in __KEYBOARD() function
[TOMERGE 2.0]
* harbour/ChangeLog
! fixed typo in my recent ChangeLog entry
* harbour/src/vm/fm.c
% minor simplification
* harbour/src/common/hbtrace.c
! fixed possible recursive call reported by Istvan
* harbour/src/rtl/gtxwc/gtxwc.c
! cleaned a little bit hack with euro sign support
+ added optional support for input respecting locale settings
To enable it it's necessary to recompile GTXWC with HB_XWC_USE_LOCALE
macro. It can be done globally using
export UH_USER_CFLAGS=-DHB_XWC_USE_LOCALE
and recompiling Harbour core code.
When enabled GTXWC initialize locale at startup (LC_CTYPE only) what
enable national keyboard layout support in default input context
(XLookupString()). Current Harbour core code does not use any
<ctype.h> functions so enabling locale should not effect user
national settings in HVM.
Please test.
* contrib/hbqt/tests/demoqt.prg
! Possible fix for leaks in this .prg code.
Added these two calls before exit:
QT_EVENTS_DESTROY()
QT_SLOTS_DESTROY()
* contrib/hbqt/filelist.mk
- contrib/hbqt/hbqt_events.h
+ contrib/hbqt/hbqt_hbevents.h
- contrib/hbqt/hbqt_events.cpp
+ contrib/hbqt/hbqt_hbevents.cpp
- contrib/hbqt/hbqt_slots.h
+ contrib/hbqt/hbqt_hbslots.h
- contrib/hbqt/hbqt_slots.cpp
+ contrib/hbqt/hbqt_hbslots.cpp
* Renamed Events class to HBEvents.
* Renamed Slots class to HBSlots.
* src/vm/fm.c
% Deleted unnecessary guard added in prev commit.
* src/vm/fm.c
+ Overriding some additional C++ memory allocation operators
to cover the full set required by QT, according to this document:
http://doc.trolltech.com/4.5/qt-performance.html#alternative-memory-allocation
; Please report if it causes problem in other areas, also
retest HBQT memory allocation after change.
* src/vm/fm.c
! Fixed to not display "Warning, memory allocated but not released"
message for non-fmstat builds.
! Fixed to display "Memory allocated but not released: none" message
(without 'warning' sign) when built with fmstat and there was no
unrelease blocks.
* /src/vm/fm.c
* Not adequate defitions of the subsequent CRT functions for the MinGW implemetations:
#ifndef USE_DL_PREFIX
#define dlcalloc calloc
#define dlfree free
#define dlmalloc malloc
...
#endif /* USE_DL_PREFIX */
The malloc/free CRT functions should'nt be redefined in this way.
* The mesage: "Warning, memory allocated but not released..." is sent on request (//INFO cmdarg).
* harbour/include/hbextcdp.ch
* harbour/include/hbextlng.ch
* harbour/src/lang/Makefile
- harbour/src/lang/msghr437.c
+ harbour/src/lang/msghr646.c
- harbour/src/codepage/cphr437.c
+ harbour/src/codepage/cphr646.c
* renamed HR437 CP and LANG modules to HR646 (CROSCII / ISO-646-YU)
* harbour/include/hbextcdp.ch
* harbour/include/hbextlng.ch
* harbour/src/codepage/Makefile
- harbour/src/lang/msgsl437.c
+ harbour/src/lang/msgsl646.c
- harbour/src/codepage/cpsl437.c
+ harbour/src/codepage/cpsl646.c
* renamed CL437 CP and LANG modules to CL646 (SLOSCII / ISO-646-YU)
* harbour/src/lang/msghriso.c
! fixed language ID
+ harbour/src/codepage/cphr646.c
* harbour/src/codepage/cphr852.c
* harbour/src/codepage/cphrwin.c
+ harbour/src/codepage/cpsl646.c
* harbour/src/codepage/cpsliso.c
* harbour/src/codepage/cpslwin.c
* harbour/src/codepage/cpsl852.c
! changed the collation order so X and Y characters are sorted before Z
It's CL5.2 ntxcro.obj compatible behavior. Now HR646 and SL646 Harbour
CPs can be used to share data with Clipper application linked with
ntxcro.obj.
* harbour/include/hbextcdp.ch
* harbour/src/codepage/Makefile
+ harbour/src/codepage/cphriso.c
+ added HRISO (ISO-8859-2) Harbour CP module
Please test all these modifications.
[TOMERGE 2.0]