* harbour/include/hbgtinfo.ch
+ added new HB_GTI_FONTATTRIBUTE value: HB_GTI_FONTA_CTRLCHARS
When used it forces using CTRL characters (from chr(0) to chr(31))
directly without translation to CP437 unicode values.
In windows some fonts need it to correctly display them.
* harbour/src/rtl/gtwvt/gtwvt.h
* harbour/src/rtl/gtwvt/gtwvt.c
+ added support for
hb_gtInfo( HB_GTI_FONTATTRIBUTE, HB_GTI_FONTA_CTRLCHARS )
* harbour/src/rtl/hbgtcore.c
! do not replace CTRL chars with '?' in HB_GTSELF_GETUC() method
* harbour/src/rtl/cdpapi.c
% use HB_CDP_ISUTF8( cdp ) macro instead of cdp == &s_utf8_codepage
It should eliminate unnecessary translations and speedup some
operations.
* harbour/include/hbstack.h
* harbour/src/vm/codebloc.c
* harbour/src/vm/estack.c
* harbour/src/vm/hvm.c
% split hb_stackLocalVariable( int * ) macro and function into
two different actions:
hb_stackLocalVariable( int ) // access/assign local var
hb_stackLocalVariableAt( int * ) // create reference to local var
* contrib/hbqt/qtcore/hbqt.h
* contrib/hbqt/qtcore/hbqt_pointer.cpp
- Removed: residual contructs pointing to "HB_U32 type" member of
all the important structure of HBQT plus the functions associated
with it. Strange point is that the bug was not showing up on Windows.
Thanks Francessco for dig-up.
* harbour/src/vm/classes.c
% small optimization in __CLSGetProperties() function
* harbour/src/rtl/tpersist.prg
! force linkin ARRAY() function when HBPersistent class is used
! use hb_ValToExp() instead of local ValToText() function which
didn't work correctly for memos and some other types
! fixed infinite loop in HBPersistent:LoadFromText() used with
empty text. The problem was also exploited by :LoadFromFile()
method if file does not exists or it's empty()
! fixed deserialization of strings containing "=" char inside
! fixed deserialization of strings containing "::"
! added support for decoding nested objects - the code was not
finished and this part was not implemented at all
+ added support for serialized text using ":=" assign operator
instead of "="
* use ":=" instead of "=" as assign operator in new serialized
text
+ ignore lines starting with "//" and added support for files
which do not start with OBJECT directive
* ignore pointer and codeblock items stored in instance variables
during serialization
; now HBPersistent class in Harbour should read serialized files
created in xHarbour with few exceptions:
- Harbour does not allow to serialize codeblocks
See "CODEBLOCK SERIALIZATION / DESERIALIZATION" in
doc/xhb-diff.txt for the reasons.
If Harbour application restores xHarbour HBPersistent files
with serialized codeblocks then RTE
Undefined function: HB_RESTOREBLOCK
is generated.
- xHarbour serialize pointer items as numeric items
saved in hexadecimal notation. Then restore them as numbers.
- HBPersistent does not support hash arrays - they are
serialized by default serialization code used by both
compilers to generate expressions.
In Harbour it's done by hb_valToExp() function and
in xHarbour it's ValToPrg() is used.
ValToPrg() does not create valid macrocompiler expressions
for arrays and objects so HBPersistent files created
by xHarbour are broken and cannot be correctly deserialized.
It happens if objects has hash arrays in instance variables
and these hash arrays contain normal arrays or object
If Harbour application restores such xHarbour HBPersistent
file then RTE "Syntax error: &" is generated.
; xHarbour encapsulates deserialization code inside TRY/CATCH/END
statement saving errors to trace.log file. Harbour generates RTE.
If programmer needs similar behavior then he should
call :LoadFromText() and :LoadFromFile() methods inside
BEGIN SEQUENCE [ / RECOVER ... ] / END SEQUENCE
statement.
; xHarbour reinitialize all or properties instance variables to
default state inside :LoadFromText() and :LoadFromFile() methods.
The 3-rd parameter in above method <lPropertiesOnly> allows to
chose which install variables should be reinitialized:
all (default) or properties only.
Harbour does not have such functionality.
If programmer needs it then he should reinitialize them himself.
It can be easy done be simple function.
Alternatively we can implement this functionality but in such
case I'd suggest to define three actions for such switch:
none (default), all, properties only.
; Harbour does not support 2-nd parameter <lIgnoreBadIVars> which
exist in xHarbour versions of HBPersistent:LoadFromText() and
HBPersistent:LoadFromFile():
If necessary we can implement it though it's usable only if we
want to ignore some wrong lines and process others.
; Warning: Neither Harbour nor xHarbour supports arrays and objects
with cyclic references in HBPersistent code - infinite
loop appears in such case.
; I've never used HBPersistent and the state of the previous
HBPersistent code in Harbour suggests that no one used it for
some serious jobs so I'm open for any opinions and suggestions
about it from xHarbour users.
* harbour/src/compiler/harbour.y
* generate line numbers before extended codeblocks - it gives
more debugger friendly code.
* harbour/src/compiler/harbour.yyh
* harbour/src/compiler/harbour.yyc
* regenerated (with bison 2.4.1)
* contrib/hbqt/qtwebkit/hbqtwebkit.hbm
* contrib/hbqt/hbqt_common.hbm
* INSTALL
+ added support for QT from Homebrew package manager. Probably
a better option than the official installer which is a) not
compatible with latest Xcode changes b) copies millions of
files into the system file structure with no easy uninstall
or upgrade option.
* contrib/hbqt/hbmk2_qt.hb
* contrib/hbqt/qtcore/hbqtcore.h
* contrib/hbqt/qtgui/hbqt_hbqabstractitemmodel.cpp
* contrib/hbqt/qtgui/hbqtgui.h
- Removed: the usage of HBQT_TYPE_xxxx constants.
It was a hack to identify a few type of objects Qt had
not provided the mechanism to retrieve.
NOTE: there should be improvement in build speed of hbQT.
* contrib/hbqt/qtgui/hbqt_hbqplaintextedit.cpp
- Added: deletion of child widget of HBQPlainTextEdit.
* contrib/hbqt/qtgui/hbqt_hbqsyntaxhighlighter.h
* contrib/hbqt/qtgui/qth/HBQSyntaxHighlighter.qth
+ Added: method hbSetEditor( QPlainTextEdit edit ).
This fixes issues where some of the components of hbIDE were
not working properly due to strict object inheritance checking.
* contrib/hbqt/qtcore/hbqt_hbqevents.cpp
* contrib/hbqt/qtcore/hbqt_hbqslots.cpp
* contrib/hbqt/qtcore/hbqt_misc.prg
* Optimizations.
* More VM protections.
* contrib/hbxbp/xbplistbox.prg
! Fixed: a nasty construct in :clear() method where slots were
being disconnected and connected again increasing the unnecessary
object destruction/creation.
* contrib/hbqt/tests/demoqt.prg
* contrib/hbqt/tests/testbrow.prg
! Minor guards.
; NOTE: all the hbQT related test programmes are working flawlessly.
hbIDE still reports "reference to freed block" error but
this is not due to hbQT, instead, the complex object
relationship of hbXBP/hbQT/hbIDE classes. This is only
visible when hbIDE is linked without :destroy() mechanism.
BUT no GPF whatsoever. With :destroy() calls hbIDE EXITS
normally.
* contrib/hbqt/qtcore/qth/*.qth
* contrib/hbqt/qtgui/qth/*.qth
* contrib/hbqt/qtnetwork/qth/*.qth
! Copyright year bump.
+ Formatting.
- Long coptyright notice to short one.
* contrib/hbqt/hbmk2_qt.hb
* Fixed: the objects derived from QObject but without a constructor
were conflickting somehow with the use of shared pointer.
Now any demo in hbqt/tests and hbxbp/tests does not through
error messages at EXIT. TESTBROW.PRG with #if 0 / #if 1
works flawlessly. However, in hbIDE these error messages still
exist if :destroy() is not employed, otherwise, neither error
messages nor GPF.
* contrib/hbide/idefunctions.prg
* contrib/hbide/ideharbourhelp.prg
* contrib/hbide/idemain.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/ideshortcuts.prg
* Optimized: to avoid repeated QApplication() object creation
and destruction.
* contrib/hbqt/qtcore/hbqt_hbqslots.cpp
* contrib/hbqt/qtcore/hbqt_misc.prg
* contrib/hbqt/qtcore/hbqt_pointer.cpp
* Changed: the way :connect()/disConnect() could been
applied to an object. Now programmer cannot make
a mistake, controlling one more pitfall.
* contrib/hbqt/qtcore/qth/QUrl.qth
* contrib/hbqt/qtgui/qth/QListWidgetItem.qth
- Inherits = QObject
* contrib/hbqt/qtgui/qth/QWidget.qth
- PainEvent = YES
; NOTE: still "Reference to freed block" messages at EXIT
are unresolved and very much reproducable.
* contrib/hbqt/hbmk2_qt.hb
+ Applied: concept forwarded by Francessco a few days back,
where class creation and registration has been separated.
This reduces a lot of object creation and destruction.
It also increases the speed, you can experience in hbIDE.
Not confirmed, but have also noticed that memory consumption
has also been optimized.
* utils/hbmk2/Makefile
* utils/hbmk2/hbmk2.hbp
+ utils/hbmk2/hbmk2c.c
* utils/hbmk2/hbmk2.prg
+ added automatic detection of _SET_OSCODEPAGE and hb_SetDispCP()
Experimental, not well tested and it may need extensions to handle
all possible CPs and cases on *nix systems.
MS-DOS and OS/2 support are missing.
Autodetection will now be used instead of generic assumptions
and defaults stored in translation files.
+ enabled UTF8EX HVM CP on remaining (non-*nix) platforms.
; Once matured, this code can be moved to the core, possible
after rewrite in C. This will make it unnecessary to roll
private C code for hbmk2.
; Several problems remain on non-*nix systems when working with
actual non-ASCII filenames.
* utils/hbmk2/hbmk2.pt_BR.po
* utils/hbmk2/hbmk2.hu_HU.po
* utils/hbmk2/hbmk2.es_PE.po
- deleted translation (language) dependent CP settings.
* contrib/hbide/idemain.prg
! Disabled: :destroy() calls before application quits.
* Simplified: ambigous variable reference.
; NOTE: now hbIDE does not produces GPF on EXIT but throws
2 RTE the contents of them can be viewed in tracelog.
.
Error BASE/1301 Object destructor failure: Reference to freed block.
* contrib/hbqt/qtgui/hbqt_errorsys.prg
+ Added: HB_TRACE() call if HVM is closed and error message
needs to be retrieved somehow. It will allow us to
peep in further to pin-point the EXIT GPF.
* contrib/hbqt/qtgui/hbqtgui.hbx
* Re-generated.
* contrib/hbxbp/tests/demoxbp.prg
* Minor.
* contrib/hbide/idehome.prg
* Minor.
* contrib/hbide/idemain.prg
! Enabled: :destroy() calls before application quits.
; NOTE: now no more EXIT GPF is reported in hbIDE.
Please shout if you get one and report the message
available on std error output, for Window which
will be debugger like debug.exe.
* contrib/hbqt/qtgui/hbqt_errorsys.prg
* Guarded: against possible recursive error handler calls
with hbqt_isActiveApplication().
* contrib/hbqt/qtgui/hbqt_init.cpp
+ Added: HB_FUNC( HBQT_ISACTIVEAPPLICATION ).
; NOTE: there may be a better solution, I know, but...
* contrib/hbnetio/utils/hbnetio/netiosrv.prg
* contrib/hbrun/plugins.prg
- deleted .hbs script support from places where it was
unlikely to be used in the wild
* contrib/hbide/ideplugins.prg
* changed to support .hb extension for plugins instead of
.hbs (plus, same applies as above0
* config/postinst.hbs
* implemented same ASORT() fix as in prev commit by Przemek.
(it may be important once we modify hbrun/hbmk2 to run
scripts under UTF8 CP)
* contrib/hbnetio/utils/hbnetio/modules.hbp
- contrib/hbnetio/utils/hbnetio/rpcdemo.hbs
+ contrib/hbnetio/utils/hbnetio/rpcdemo.hb
- contrib/hbide/plugins/hbide_script_qtgui.hbs
+ contrib/hbide/plugins/hbide_script_qtgui.hb
- contrib/hbide/plugins/hbide_plugin_savebackup.hbs
+ contrib/hbide/plugins/hbide_plugin_savebackup.hb
- utils/hbmk2/examples/plug_tpl.hbs
+ utils/hbmk2/examples/plug_tpl.hb
- tests/stripdoc.hbs
+ tests/stripdoc.hb
* .hbs -> .hb for Harbour scripts.
* tests/stripdoc.hb
+ use directry.ch
* harbour/utils/hbmk2/hbmk2.prg
! sort functions in .hbx files using "EN" CP.
This modification fixed problem with resorted
functions in .hbx files for CPs using non ASCII
collation order for [A-Z], [0-9] and [_] characters
* harbour/src/common/expropt2.c
* small code simplification
* harbour/src/rtl/hbregex.c
% eliminated call to pcre_config() on each regex compilation
* harbour/utils/hbmk2/hbmk2.prg
! fixed -head=full for code using non UTF8 characters.
It was broken because in UNIX builds UTF8 is always enabled
as HVM CP in HBMK2 and this setting was inherited by PCRE
with PCRE_UTF8 flag. If this flag is used PCRE validates
all strings and refuse to make any operations if they are
not valid UTF8 string so it was not working at all for
source code using different encoding.
! fixed regex used in -head=full to respect shortcuts in #include
directive, i.e.:
#incl "file.ch"
! fixed regex used in -head=full to recognize #include directives
separated by ';', i.e.:
#include "file1.ch" ; #include "file2.ch" ; #include "file3.ch"
; TOFIX: UTF8 mode on output should not be enabled unconditionally in
all UNIX builds. There are many *nix installations where UTF8
is not system CP, i.e. older Linux distributions. In fact
it's user attribute so each user can use different encoding
local to his connection and/or terminal settings. Probably
it's good idea to use code like:
lUTF8 := "UTF-8" $ GetEnv( "LANG" ) .OR. ;
"UTF-8" $ GetEnv( "LC_CTYPE" )
* contrib/hbqt/qtcore/hbqt_pointer.cpp
+ Added: hbqt_par_isDerivedFrom() - protection against a null
pointer passed as an argument. This makes possible to detect
if an object is still active when passed. If not, a RTE is
generated. This covers some more potential user mistakes.
* contrib/hbqt/hbmk2_qt.hbs
! Fixed: to take use of the hbqt_par_isDerivedFrom() completely.
This renders parameter checking with Class TYPE constants
redundant which can be removed alltogether. This also
facilitates usage of subclassing a Qt class.
; TODO: impliment siblings checking inside hbqt_par_isDerivedFrom().
HBQPlainTextEdit() is a sibling of QPlainTextEdit().