* INSTALL
+ extended troubleshooting instructions for code that
involves non-ASCII chars
* utils/hbmk2/hbmk2.prg
+ use UTF8 HVM in runner mode
+ enabled translations in runner mode
! in runner mode fixed setting up core header dir when no
dyanmic libs are used
! in runner mode, dynamic lib location should now be detected
also on *nix systems (untested)
* some other minor cleanups and tweaks to runner mode
* contrib/hbqt/qtcore/hbqt_bind.cpp
* contrib/hbqt/qtcore/hbqt_pointer.cpp
+ Implemented: [*D=1*] token of methods in .qth for __HBQT_REVAMP__.
This changes the ownership of an object from Harbour to Qt.
* contrib/hbhttpd/log.prg
* contrib/hbtip/log.prg
* contrib/hbziparc/ziparc.prg
* src/rtl/hbdoc.prg
* src/rtl/hbi18n2.prg
* src/rtl/memvarhb.prg
* src/rtl/tlabel.prg
* src/rtl/treport.prg
% use HB_FNAMEEXTSETDEF() instead of manual logic.
it also fixes RTEs in hbziparc when passed non-string
filename to nearly any of its APIs.
* utils/hbi18n/hbi18n.hbp
* missed -shared enabler in .hbp
* utils/hbmk2/Makefile
* utils/hbmk2/hbmk2.hbp
+ enabled -shared build for hbmk2
* utils/hbmk2/hbmk2.prg
% consolidated .hbc finder logic
% moved 'hbmk' structure initializations to subfunctions
+ added Harbour installation autodetection for hbmk2's
runner mode. It's copy-paste code yet.
+ added automatic include path configuration in hbmk2's
runner mode. It means that now #require-d extensions
will have their include paths setup, so their header
will be found, so they can be used now.
; I more and more see it a reality to integrate hbrun
functionality into hbmk2. #require logic needs
much of hbmk2's facilities, and hbmk2 already has
basic runner capabilities. Contrib libs (and plugins)
will all have to be loaded dynamically in such case,
but since it works well, it should not be a problem.
Finally hbmk2 can be the utility that runs scripts
dynamically and also able to build an exe from them,
using the exact same source code, without any external
configuration, if the source code provides "#require"
clues. All it needs is both dynamic and static versions
of extensions (=contribs or addons).
+ contrib/hbqt/tests/dbfbrowser.prg
+ contrib/hbqt/tests/dbfbrowserclass.prg
+ Added: Table browser demo code by Bacco, thank you.
This code works absolutely flawless both with current and
__HBQT_REVAMP__ protocols.
* harbour/contrib/hbct/misc1.c
% optimized XTOC()
* harbour/doc/xhb-diff.txt
* added some additional description to the section
OOP AND CLASS OBJECT/CLASS MESSAGES
* harbour/doc/Makefile
* added xhb-diff.txt
* harbour/include/hbapi.h
* harbour/src/vm/arrays.c
+ added new C function hb_arrayFromId()
* harbour/contrib/hbqt/qtcore/hbqt_bind.cpp
* use hb_arrayFromId() instead of local hb_arrayCreateClone()
with hb_arrayPushBase() inside
* do not use hbvmint.h
! fixed few bugs in this code. I haven't analyzed this code deeply
and how it's used so I cannot say it's correct. I only fixed few
completly wrong places which caused HVM stack corruption, internal
GC item list corruption or were completly dummy calls.
* include/harbour.hbx
* src/vm/dynsym.c
+ added HB_ISFUNCTION( <cName> ) -> <lExists>
uses Przemek's code from hbfship/ISFUNCTION() with minor
adaptation for VM.
Use it instead of __DYNSISFUN() and TYPE( <cName> ) == "UI".
* include/harbour.hbx
* formatted HB_IS*() functions used for type checking
* contrib/hbfship/isfunc.c
% converted ISFUNCTION() to wrapper for HB_ISFUNCTION()
* contrib/hbide/ideplugins.prg
* contrib/hbrun/hbrun.prg
* contrib/hbxpp/xppop.prg
* contrib/xhb/xhbcomp.prg
* contrib/xhb/xhberr.prg
* examples/hbdoc/hbdoc.prg
% Using HB_ISFUNCTION() instead of __DYNSISFUN() and TYPE( <cName> ) == "UI"
* bin/hbcommit.hb
+ To configure your own name and e-mail address used
in ChangeLog entries, create a file called ".hbcommit"
in the root of Harbour SVN sandbox, and fill it with this:
'Firstname Lastname (my domain.net)'
(in single line. no EOLs and padding is necessary)
* contrib/hbrun/hbrun.prg
+ use .hb as default extension for Harbour sources.
(was .prg)
+ bin/hbcommit.hb
+ added commit preparer script. It will pull all changed
files, format it according to Harbour ChangeLog standard,
add standard commit header and prepend the entry before
latest on into ChangeLog file.
Usage:
<harbour SVN root>$ hbrun hbcommit.hb
Please try it and use it when committing to Harbour SVN
* contrib/hbplist
* disabled hbqt and its dependencies, until the nightly
build breaker problem is resolved.
* contrib/hbblat/hbblat.hbp
+ added experimental support for installing 3rd party .dll
to bin dir. Enabled with new build option, not yet documented,
see it in the patch.
* contrib/hbhpdf/tests/harupdf.prg
* formatted
* contrib/hbqt/hbmk2_qt.hb
! Fixed: some formatting in generated source.
* contrib/hbqt/qtcore/hbqt.h
+ Added: HB_EXPORT PHB_ITEM hbqt_bindSetHbObject( PHB_ITEM pItem, void * qtObject, const char * szClassName, PHBQT_DEL_FUNC pDelFunc, int iFlags );
* contrib/hbqt/qtcore/hbqt_bind.cpp
+ Added: static PHB_DYNS s_dynsym_SETSLOTS = NULL;
Used to initiate __Slots hash to contain code block for slots.
+ Added: PHB_ITEM hbqt_bindSetHbObject( PHB_ITEM pItem, void * qtObject, const char * szClassName, PHBQT_DEL_FUNC pDelFunc, int iFlags )
Used for class inheritance with :new() method.
void hbqt_bindDelSlots( PHB_ITEM pSenderObject );
Used to delete all slots for an object.
+ Added: HB_FUNC( HBQT_PROMOTEWIDGET2 )
Provided by Francesco.
+ Added: HB_FUNC( HBQT_ITEMSONGLOBALLIST )
Provided by Francesco.
- Transferred: some HB_EXPORT prototypes in hbqt.h from hbqt_bind.cpp.
* contrib/hbqt/qtcore/hbqt_hbqslots.cpp
+ Transferred: code blocks exploiting slots to PRG level from C++ level.
* contrib/hbqt/qtcore/hbqt_init.cpp
* contrib/hbqt/qtgui/hbqt_init.cpp
* Formatting.
* contrib/hbqt/qtcore/hbqt_misc.prg
+ Added: VAR __Slots
+ Added: METHOD setSlots()
* contrib/hbqt/qtcore/qth/QObject.qth
+ Uncommented: metaObject() method.
* contrib/hbqt/tests/inherit.prg
+ Added: demo code to exploit inheritance of classes.
This implementation is aimed at transferring signal/slot codeblocks from C++
level to PRG level. This to happen, I am driffting from Przemek's orginal idea
of a separate class, encapsulating the same in exsting superclass HbqtObjectHandeller.
So far has been successful but the concept has introduced a GPF on exit.
* utils/hbmk2/hbmk2.prg
+ added support for #require directive in minimal script
runner. The plan is to model .hbc processing and header
directory setup for #require-ed extensions and backport
it to hbrun.
* src/rtl/cdpdet.prg
! *nix specific CP autodetection code missed to call
a local conversion subfunction.
* src/rtl/gtfunc.c
* HB_SETDISPCP(), HB_SETTERMCP(), HB_SETKEYCP() will
now not RTE when passed NIL as 1st paramater. This
makes it smoother to fall-back on purposedly invalid
values, f.e. return values of new HB_CDPOS() and
HB_CDPTERM() in case of failure.
* contrib/hblzf/tests/test2.prg
+ replaced in-source hbmk2 cmdline instructions with
#require directive
* contrib/gtwvg/tests/wvgactivex.prg
! fixed reference to non-existing batch file
* doc/en/file.txt
* doc/gmake.txt
* doc/windll.txt
* examples/gtwvw/docs/gtwvw.txt
* examples/gtwvw/docs/whatsnew.txt
* examples/gtwvw/tests/drawimg.prg
* examples/guestbk/guestbk.txt
* examples/hscript/readme.txt
- deleted references to non-existing/obsolete batch files
* include/harbour.hbx
* src/rtl/Makefile
+ src/rtl/cdpdet.prg
+ src/rtl/cdpdetc.c
+ moved terminal and OS detection logic from hbmk2 to RTL
with changes necessary to fit into core. New functions are:
hb_cdpOS() -> <cCP | NIL>
hb_cdpTerm() -> <cCP | NIL>
it means these functions can be used in any apps now.
Example:
hb_SetTermCP( hb_cdpTerm() )
Set( _SET_OSCODEPAGE, hb_cdpOS() )
* contrib/hbrun/hbrun.prg
* utils/hbmk2/Makefile
- utils/hbmk2/hbmk2c.c
* utils/hbmk2/hbmk2.hbp
* utils/hbmk2/hbmk2.prg
* using hb_cdpOS() and hb_cdpTerm() to automatically
configure OS and terminal CP
* contrib/hbrun/hbrun.prg
+ enabled UTF8EX as default CP for hbrun script. This makes
scripts portable and on par with other script languages.
It also syncs this aspect with hbmk2's script runner
facility. INCOMPATIBLE. Make sure to create scripts
that are unicode compatible and use UTF8 CP for accents.
If you need old behavior, add 'hb_cdpSelect( "EN" )' to
the top of your script.
; contains copy/paste code from hbmk2 for OS and terminal
CP detection. These should eventually make it into the
RTL
* INSTALL
! minor
* contrib/make.hb
% use $d in hb_strformat() instead of calling hb_ntos()
! switched to UTF8EX to be in sync with hbmk2
* utils/hbmk2/hbmk2.prg
! fixed nasty regression caused by old problem where --hbinfo
output might have contained other information. Now hbmk2
makes sure to keep -info disabled and -quiet enabled when
in --hbinfo mode
* contrib/hbqt/hbmk2_qt.hb
* contrib/hbqt/qtcore/hbqt.h
* contrib/hbqt/qtcore/hbqt_bind.cpp
* contrib/hbqt/qtcore/hbqt_hbqevents.cpp
* contrib/hbqt/qtcore/hbqt_hbqslots.cpp
* contrib/hbqt/qtcore/hbqt_init.cpp
* contrib/hbqt/qtcore/qth/QLibraryInfo.qth
* contrib/hbqt/qtcore/qth/QMimeData.qth
* contrib/hbqt/qtgui/hbqt_hbqgraphicsitem.cpp
* contrib/hbqt/qtgui/hbqt_hbqgraphicsscene.cpp
* contrib/hbqt/qtgui/hbqt_hbqplaintextedit.cpp
* contrib/hbqt/qtgui/hbqt_hbqtableview.cpp
* contrib/hbqt/qtgui/hbqt_init.cpp
* contrib/hbqt/qtgui/qth/QApplication.qth
* contrib/hbqt/qtgui/qth/QClipboard.qth
* contrib/hbqt/qtgui/qth/QDirModel.qth
* contrib/hbqt/qtgui/qth/QDropEvent.qth
* contrib/hbqt/qtgui/qth/QFileSystemModel.qth
* contrib/hbqt/qtgui/qth/QGraphicsSceneDragDropEvent.qth
! Changed:
PHB_ITEM hbqt_bindGetHbObject( PHB_ITEM pItem, void * qtObject, PHB_SYMB pClassName, PHBQT_DEL_FUNC pDelFunc, int iFlags )
=>
PHB_ITEM hbqt_bindGetHbObject( PHB_ITEM pItem, void * qtObject, const char * szClassName, PHBQT_DEL_FUNC pDelFunc, int iFlags )
This facilitates the easy manipulation of objects and also a central
point to scale its usage. It is much easier to recognize the non-QObject
derived classes, which are in plenty, and hence take corrective actions
in case of some exceptions are buried inside descriptions instead of headers.
* contrib/hbgd/gdbar.prg
* contrib/hbgd/gdbarcod.prg
* contrib/hbgd/gdchart.prg
* contrib/hbgd/gdimage.prg
* formatting
% using HB_DEFAULT() instead of DEFAULT TO and local DEFAULT() macro
(it means that in these places, type checking is more thourough
than before). I left DEFAULT TO in places where the default expression
is complex.
! fixed TCODE():New() to not use Alert(), use ::DrawError() instead
% HGetValue(): use HB_HGETDEF() instead of equivalent local logic
% use HB_ISHASH() instead of ValType()
% use hb_ntos() instead of LTrim( Str() )
; build tested only, pls review
* contrib/hbqt/tests/draggable.prg
+ Added: a draggable Harbour Logo without titlebar.
* contrib/hbqt/tests/testres.prg
! Rewritten: per current hbQT implementation.
; Both are supplied by Bacco, thankyou.
* contrib/hbrun/hbrun.hbp
+ build hbrun in -shared mode if HB_BUILD_CONTRIB_DYN is
enabled. This means that new dynamic loading feature
will work out of the box if Habrour is build using
HB_BUILD_CONTRIB_DYN=yes.
* include/Makefile
* include/common.ch
+ include/hbhash.ch
+ moved hash-related constants from common.ch to new hbhash.ch
; common.ch include hbhash.ch for compatibility, protected by
HB_LEGACY_LEVEL4 so it will stop being included automatically.
If you use HB_HAUTOADD_* or HB_HMERGE_* constants, make sure
to #include "hbhash.ch".
* contrib/hbrun/headers.prg
* utils/hbmk2/hbmk2.prg
+ include hbhash.ch
* src/rdd/hbsix/sxini.prg
* use hbhash.ch instead of common.ch
* contrib/hbqt/tests/qtrevamp.prg
- Removed: note on returned QAction if it is not of same type
as stated in previous commit. New hbQT is always returning
NIL if a valid Qt pointer could not been obtained. This holds
true for all type of objects. Actually I did not test it
along these lines. So with __HBQT_REVAMP__ there is no need
of :isValidPointer() any more, just test a returned object
against NIL.
* contrib/hbqt/qtcore/hbqt_bind.cpp
* Struggled: to set pointer arithmatic to be used properly.
Also at times Qt returns different type instead of one
defined in documentation, but referred in description part only.
For example, a popup menu returns null instead of QAction if
no item is selected or user pressed escape. This is not
possible to manage such instances in present engine. For
this reason only :isValidPointer() method was introduced.
In REVAMPED hbQT this is different. So to test it, the only
way to ascertain is if the Harbour class name is of same type.
* contrib/hbqt/tests/qtrevamp.prg
+ Added: popup menu option to demonstrate what happens
at the background, if tracelog is activated.
; NOTE: I am not from C or C++ background at all, so some things
may not be as elegant as those should be when viewed from
source point of view. Also trace entries are left in the
code, though under DEBUG mode, which will be cleaned once
code settles down.
* include/hbapi.h
- deleted unused old HB_BASEARRAY_PTR type. INCOMPATIBLE.
Same as PHB_BASEARRAY, use this instead.
* include/hbtypes.h
* src/vm/maindllp/dllext.c
+ added hb_macroTextValue() to hbmaindllp.
; TODO: rename all HB_ITEM_PTR to PHB_ITEM and delete former.
pls shout if there is any difference in usage between
these two.
* contrib/make.hb
* utils/hbmk2/hbmk2.es_PE.po
* utils/hbmk2/hbmk2.hu_HU.po
* utils/hbmk2/hbmk2.pt_BR.po
* utils/hbmk2/hbmk2.prg
+ use JSON format instead of hand-rolled microformat for
--hbinfo output (used in Harbour SVN for communication
between contrib make.hb script and hbmk2)
INCOMPATIBLE. Update your system in the unlikely event
you use --hbinfo output.