* include/harbour.hbx
* src/rtl/hbfilehi.prg
! HB_DIRADDPATHSEP() fixed to not add pathsep to plain dirspec.
! HB_DIRDELPATHSEP() fixed to not remove double pathspec from UNC root.
! Fixed to work if HB_OSDRIVESEPARATOR()'s length is not 1:
HB_PATHMAKERELATIVE(), HB_DIRUNBUILD(), HB_DIRDELPATHSEP().
(QUESTION: is this a valid possibility, or is this over-design?)
+ Added TODO to HB_CWD() to also be able to change dir.
This will require adding Harbour versions of DIRCHANGE() and
DISKCHANGE(), or moving the implementation to C level.
(possibly the latter)
- Deleted HB_FNAMEDIREXTSET(). Doesn't satisfy a general need.
* src/rtl/hbfilehi.prg
% Minor optimization, cleanups.
* contrib/hbide/idemisc.prg
* contrib/hbide/ideprojmanager.prg
* Cleaned PathProc() to have the name PathMakeAbsolute().
Deleted duplicate copies under different names.
* src/rtl/dirdrive.c
+ Added HB_DIRCREATE(), which is same as MAKEDIR() C5.3 function,
but it's always available, not just when HB_COMPAT_C53 is enabled.
+ Added HB_DIRDELETE(), which is same as DIRREMOVE() C5.3 function,
but it's always available, not just when HB_COMPAT_C53 is enabled.
* contrib/hbnetio/tests/netiotst.prg
* contrib/hbnetio/tests/netiot03.prg
* contrib/hbfimage/tests/fitest.prg
* contrib/hbide/idesaveload.prg
* utils/hbmk2/hbmk2.prg
* utils/hbrun/hbrun.prg
* tests/wcecon.prg
* tests/flink.prg
* bin/hb3rdpat.hbs
* examples/hbdoc2/gentpl.prg
* Replaced MakeDir() with universally available hb_DirCreate().
; TODO: same in config/postinst.hbs (delayed to avoid a million
false bug reports)
* src/rtl/Makefile
+ src/rtl/hbfilehi.prg
+ Added generic file/dir/path handling functions.
They are taken from hbmk2 code, added parameter checking,
did two minor change to DirBuild() to be generic,
renamed to have HB_ prefix.
Please note the parameter list and any details are
subject to change yet, IOW these APIs are not yet finalized:
hb_cwd() -> <cPath>
hb_PathNormalize( <cPath> ) -> <cPath>
hb_PathMakeAbsolute( <cPathRel>, <cPathAbs> ) -> <cPath>
hb_PathMakeRelative( <cPathBase>, <cPathTarget>, <lForceRelative> ) -> <cPath>
hb_DirAddPathSep( <cDir> ) -> <cDir>
hb_DirDelPathSep( <cDir> ) -> <cDir>
hb_DirBuild( <cDir> ) -> <lSuccess>
hb_DirUnbuild( <cDir> ) -> <lSuccess>
hb_FNameDirGet( <cFileName> ) -> <cDir>
hb_FNameNameGet( <cFileName> ) -> <cName>
hb_FNameNameExtGet( <cFileName> ) -> <cNameExt>
hb_FNameExtGet( <cFileName> ) -> <cExt>
hb_FNameExtDef( <cFileName>, <cDefExt> ) -> <cFileName>
hb_FNameExtSet( <cFileName>, <cExt> ) -> <cFileName>
hb_FNameDirExtSet( <cFileName>, <cDirNew>, <cExtNew> ) -> <cFileName>
; TODO: Review, clean interface.
; TODO: Use these functions in .hbs files, utils, hbide.
* include/harbour.hbx
* Updated.
* utils/hbmk2/hbmk2.prg
* One internal function renamed.
* contrib/hbide/idemisc.prg
! Applied FN_FromArray() fix to the copy in HBIDE.
; QUESTION: Should we make some of these file manipulation
functions part of core (possibly with
reorganized names)? These are generally useful,
and some of them are not trivial, some others
are often used, and all of them generic:
Some possible candidates from hbmk2:
hb_pwd()
PathNormalize( ... )
PathMakeAbsolute( ... )
PathMakeRelative( ... )
PathSepToSelf( ... )
DirAddPathSep( ... )
DirDelPathSep( ... )
DirBuild( ... )
DirUnbuild( ... )
FNameDirGet( ... )
FNameDirExtSet( ... )
FNameNameGet( ... )
FNameNameExtGet( ... )
FNameExtGet( ... )
FNameExtDef( ... )
FNameExtSet( ... )
FNameEscape( ... )
* harbour/utils/hbmk2/hbmk2.prg
! small fix in FN_FromArray() which caused that relative paths were
converted to the root directory, i.e. -workdir=. was not working
correctly
* utils/hbmk2/hbmk2.prg
+ Enabled to use link scripts with msvc compilers, to avoid
too long cmdline problems. (experienced when creating
qtgui lib in dynamic version (HB_BUILD_CONTRIB_DYN=yes)
with HB_BUILD_NAME set to a longer name, so it was quite
a stress case and should not cause a problem for most
users.)
* contrib/hbide/ideformat.prg
! Provided: to view formatted results of select text.
Now if "Selected Text" checkbox is checked then only
selected source is supplied for the formatting.
+ Added HB_EXPORT flag to these functions: (required by xhb, hbfship)
hb_stackBaseOffset()
hb_stackItem()
hb_stackBaseProcOffset()
hb_stackGetRecoverBase()
hb_stackWithObjectOffset()
hb_memvarSaveInArray()
* contrib/hbnetio/utils/hbnetio/netiosrv.prg
+ Added client address filtering engine for both data and
management interface. It will do quick match against
IP, then wildcard match against IP, then quick host name match,
wildcard hostname match. Block filter has priority over
allow filter. It's possible to control via management RPC,
console UI not yet extended to use it. A lot of other
TODO is quickly generated by this feature, f.e. making
settings persistent, supporting IP subnet masks, etc.
I didn't test this at all, pls do.
* src/rtl/strmatch.c
! Typo in comment.
* harbour/src/pp/ppcore.c
! fixed to not strip path in .d dependencies list for files included
from -I<directories>
* harbour/utils/hbmk2/hbmk2.prg
% do not use FindHeader() for dependencies list extracted from .d
files - they should contain full paths so it's not necessary
* contrib/hbnetio/utils/hbnetioq/hbnetioq.hbp
+ contrib/hbnetio/utils/hbnetioq/manageips.ui
* contrib/hbnetio/utils/hbnetioq/netiosrq.prg
* contrib/hbnetio/utils/hbnetioq/netiosrq.qrc
+ contrib/hbnetio/utils/hbnetioq/refresh.png
+ Implemented: activate/deactivate banning IPs from connecting
to server. This implementation provides for the -ini=cINIFile
command line switch. <cINIFile> contains the info about IPs.
User-interface to manage activations is via toolbar button
which allows to <Add><Delete><Save> IPs and also to flag
to activate/deactivate IPs on-the-go.
TODO: take use of console daemon by separating the user inetrface.
Hopefully by next week.
* src/rtl/Makefile
- src/rtl/base64.prg
+ src/rtl/base64d.c
+ Replaced HB_BASE64DECODE() with an optimized C implementation.
The core code is borrowed from libb64 project
(http://sourceforge.net/projects/libb64) and has been places
to public domain by author Chris Venter.
I've reformatted the code and made some minor modifications.
I had used the Harbour license for the whole file.
This code is 50-100 times faster than old Harbour code doing
the same job. Please review it, especially the buffer size
calculation.
BTW the C code uses a unique trick called 'Duff's device'.
* contrib/hbqt/hbqt_hbmk2_plugin.hbs
! Fixed to initialize pText value to avoid GPF when reaching hb_strfree(),
if non-string parameter is passed instead of string type.
Pls review, test, etc.
* contrib/hbide/hbide.hbp
! Added static libs required for embedded Harbour compiler.
* contrib/hbhpdf/harupdf.c
! Fixed to build in dynamic mode (HB_BUILD_CONTRIB_DYN=yes).
Two recently added wrappers (PDF/A related) are not exported
from libharu, which may either be a design decision or a bug.
Requires further fix once we've found out.
* contrib/hbwin/hbolesrv.c
! Fixed doubly defined symbols in HB_BUILD_CONTRIB_DYN=yes.
'hbmaindllp.lib(dllpcode.obj) : error LNK2005: _DllMain@12 already defined in hbolesrv.obj'
OLE server code will be left out of the .dll version of hbwin lib,
please refine it if needed.
* src/rtl/listbox.prg
! LISTBOX(): Fixed RTE (and 5.3 incompatibility) when
non-logical/non-NIL type is passed as 5th parameter.
This makes the ListBox() example included in 5.3 NG behave
exactly the same in Harbour as in C5.3. (Yes, the
example passes wrong parameter, plus it has a compiler
stopping typo, and it still RTEs even after the fix,
so better find some better example.)
* src/rtl/listbox.prg
! _LISTBOX_(): Fixed very old bug (can't access ViewVC ATM, but around ~r7550)
causing incompatibility with C5.3 regarding IsOpen initial value. It was
wrongly initialized by parameter what is now correctly renamed to lScrollBar.
Was wrongly named lIsOpen before this fix.
% Don't pass default style value to ScrollBar()
* utils/hbmk2/hbmk2.prg
* utils/hbmk2/hbmk2.*.po
! Fixed RTE in FindNewerHeaders() when using autohbc feature.
(it's regression from around 2010-08-05 15:58 UTC+0200 Viktor Szakats)
+ Added -head=dep option to help.
* harbour/utils/hbmk2/hbmk2.prg
! fixed dependences checking for -head=full and @.clp files
+ added automatic dependencies checking for .prg files using .d
files generated by harbour compiler (-head=dep)
; TODO: extend it for .c files and GCC based compilers
* src/rtl/listbox.prg
* Internal var renamed to reflect its type.
* src/rtl/einstvar.prg
* src/rtl/einstv52.prg
* Fixed to use manifest constants.
* utils/hbrun/hbrun.prg
! Fixed to allow case-insensitive match for headers on
non-*nix platforms.
* harbour/utils/hbmk2/hbmk2.prg
! remove .d files from .hbmk working dir when -clean option is used
! do not ignore dependencies list read from .d files
* check dependencies specified by .d files for .c and .o files
generated from .prg ones
% some minor optimizations
; TOFIX: it's not safe to call FindNewerHeaders() with 3-rd parameter
set to NIL (RTE) and HBMK2 does it when -autohbc option is used
* package/winuni/mpkg_win_uni.bat
* package/winuni/mpkg_win_uni.nsi
+ Added hbnetio management console to winuni distro.
(only the 32-bit build, because the 64-bit has no
advantage at all in case of this thin client app)
* contrib/make.hbs
+ Defined _HB_BUILD_=yes to tell .hbp files we're building
for a Harbour build.
* contrib/hbnetio/utils/hbnetio/hbnetioc.hbp
* contrib/hbformat/utils/hbformat.hbp
+ Tweak to not build in -shared mode when directly building
the .hbp file (and not as part of Harbour build).
* contrib/hbnetio/utils/hbnetioq/hbnetioq.hbp
* contrib/hbide/hbide.hbp
+ Added tweak to build in shared mode when building as
part of Harbour build. This will make the distro size
noticeably smaller.
* contrib/hbnetio/utils/hbnetio/netiosrv.prg
* contrib/hbnetio/utils/hbnetio/netiocon.prg
+ Show server config feature converted to client-server.
* contrib/hbplist
+ Added hbnetioc to tools automatically built.
This is management console for hbnetio deamon.
* contrib/hbnetio/utils/hbnetio/hbnetioc.hbp
* Tweak to build hbformat in shared mode for
win/wce/os2 systems.
* utils/hbmk2/hbmk2.hu_HU.po
! Minor fix.
* utils/hbmk2/hbmk2.prg
! Resolved TOFIXes related to cygwin.
+ Added -head=dep option. Nothing fancy, just making room for it.
* utils/hbmk2/hbmk2.prg
+ Changed to use hb_milliSeconds() to measure build time
when using -debugtime option. This will now work precisely
for builds taking more than 1 day.
* utils/hbmk2/hbmk2.prg
+ Added experimental support for creating extern headers in .hbx.
It's currently only supported for static libs (-hblib mode),
and only for gcc based compilers (can be extended to all
platorms where 'nm' tool is available), msvc, pocc, watcom
and bcc compilers. Some of these have not been tested.
The feature implements the same functionality which already
exists in Harbour build system (enabled with HB_REBUILD_EXTERN=yes),
but now integrated into hbmk2 and with few minor enhancements.
* contrib/hbnetio/utils/hbnetio/hbnetio.hbp
* contrib/hbnetio/utils/hbnetio/hbnetioc.hbp
* contrib/hbnetio/utils/hbnetio/netiosrv.prg
+ contrib/hbnetio/utils/hbnetio/netiocon.prg
- contrib/hbnetio/utils/hbnetio/netiocui.prg
+ contrib/hbnetio/utils/hbnetio/netiocmd.prg
+ Split netiocui.prg into cmdline tool and
console logic. The latter is now used by both
the daemon tool and cmdline tool.
* contrib/hbplist
- contrib/hbnetio/utils/netiosrv/netiosrv.hbp
+ contrib/hbnetio/utils/netiosrv/hbnetio.hbp
- contrib/hbnetio/utils/netiosrv/netiocui.hbp
+ contrib/hbnetio/utils/netiosrv/hbnetioc.hbp
- contrib/hbnetio/utils/netiosrq/netiosrq.hbp
+ contrib/hbnetio/utils/netiosrq/hbnetioq.hbp
! Renamed back to get in sync with installer.
; TOFIX: Change hbnetioq to a pure management client without
embedded server daemon code. Pritpal, can you do it?
; TODO: Change hbnetio to be pure server daemon and add separate
management console tool. Or, it's possible to put the
console UI in a lib and keeping it included in daemon
for convenience.
* harbour/src/rdd/wacore.c
% minor optimization
* harbour/src/rdd/usrrdd/usrrdd.c
+ extended USRRDD_ID() to accept RDD name as parameter
* harbour/src/rdd/usrrdd/rdds/arrayrdd.prg
* harbour/src/rdd/usrrdd/rdds/logrdd.prg
! fixed to not use:
( AScan( RDDLIST( RDT_FULL ), "ARRAYRDD" ) - 1 )
to extract RDD ID.
In theory it could work if RDDLIST( 0 ) is used instead
of RDDLIST( RDT_FULL ) anyhow it's much more efficient to
simply store RDD ID in static variable inside *_GETFUNCTABLE()
function
* contrib/hbnetio/utils/netiosrv/netiosrv.prg
* contrib/hbnetio/utils/netiosrv/netiocui.prg
+ Added 'clientinfo <ip:port>' console command. This will
display the self-identification variable sent by the client
to the server on connect. It's fully up to the client what
this info contains. The command works for both normal
and management connections.
+ Added 'adminfo' console command to list management client
connections.
+ Added stream based "cargo" data exchange based on Przemek's
code, purely as an experiment. Cargo data will be shown
in connection lists.
% Optimized out redundant connector code in console UI.
* harbour/include/hbcompdf.h
* harbour/src/compiler/hbmain.c
* save and restore compiler settings when separated .prg files are
compiled as different modules. Files compiled as single module
(i.e. by .clp files, #included, added by DO ... [WITH ...], etc.)
are still compiled using the same settings inheriting any modifications
introduced by #pragma. It's intentional behavior.
* contrib/hbnetio/utils/netiosrv/netiosrv.prg
* contrib/hbnetio/utils/netiosrv/netiocui.prg
+ RPC command names changed to begin with "hbnetiomgm_" (instead of "netio_")
% Using constants for default ip/port and showing them
dynamically in help screens.
+ Cleaned CUI options now there is simple -addr=<ip[:port]> format
supported.
* CUI option -adminpass= renamed to -pass=.
+ CUI now supports disconnect/connect command on the console.
connect will ask for the password if omitted.
It also means that console can now be in 'disconnected' state.
This will be the mode it starts up when no password is
specced on the cmdline.