* INSTALL
+ Added new section: 7. DEBUGGING OPTIONS
So far covered: tracing, memory statistics, valgrind and codeguard.
I'd like to ask our experts to review and if needed extend
these informations (send me suggestions and I'll update it).
* bin/postinst.bat
+ Enabling -debug option on shared tool hbmk2 builds if HB_BUILD_DEBUG=yes.
* contrib/hbide/ideactions.prg
! Typo.
* contrib/hbide/projects/hbide.hbi
! Deleted windows and local environment specific hbmk2
options, plus a few ones which are automatically pulled anyway
via hbqt.hbc (which is in turn pulled by hbxbp.hbc).
Please set HB_WITH_QT to make it find the QT libs. This is
the universal method.
* contrib/hbqt/detect.mk
+ Will now verify if HB_QT_MOC_BIN is pointing to an existing filename.
If not, an error message will be shown, trying to make it clear how
to set it up properly. Many users like to set the dir only, which
makes the build process fail.
* contrib/hbide/hbide.prg
+ Switched to HBQT_RELEASE_WITH_DELETE as suggested by Istvan Bisz.
* contrib/hbqt/generator/hbqtgen.prg
* Minor cosmetic.
* utils/hbmk2/hbmk2.prg
+ Added disctinctive static text which is always linked in
when C++ mm override is active. This makes it easy to
verify if C++ mm override is activated in an executable.
* ChangeLog
! Fixed messed text in latest hbmk2 changes.
2010-01-05 18:48 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
* 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.
In general, this feature makes -cpp option unnecessary, its
only purpose now is to override default mode.
+ Added option to override standard C++ memory management functions
with Harbour ones.
Enable with option: -hbcppmm (cmdline) or hbcppmm=yes (in .hbc files)
NOTE1: Suggestions for better names are welcome.
NOTE2: hbide will now crash with mingw if this option is enabled.
Any idea why?
; Please test.
* 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.
* contrib/hbct/dummy.c
+ Added dummy stubs for all CT functions which are not yet
implemented in Harbour. This file is intentionally not
built, because a link-time error is better than a runtime
one, anyhow we could convert them to real dummies emulating
error behavior and add them to build process.
* contrib/hbqt/generator/hbqtgen.prg
% Optimization to parameter list ptr conversion loop.
; TODO: Regenerate QT sources.
* 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]
* contrib/hbxbp/xbpmenubar.prg
* contrib/hbxbp/xbptoolbar.prg
+ Implemented to accept QAction() as menu constructor.
Before only cCaption or XbpMenu() were accepted.
* contrib/hbide/hbide.ch
* contrib/hbide/hbide.prg
* contrib/hbide/ideactions.prg
* contrib/hbide/idedocks.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/ideobject.prg
* contrib/hbide/ideprojmanager.prg
! Next round of reforms.
+ Implemented IdeActions() class which forms the basis
of IDE's menus and toolbars. Now we have greater control
over the uniformity of different actions hooked into
different interface elements, i.e., menu option, toolbar
option or popup option. The same visual experience is
presented in all the three flavours.
It also implies that we can switch on/off any action
only at one place. For example, if you issue this command:
::oAC:getAction( "Save" ):setEnabled( .f. )
then the option will be grayed in any flavour of user
interaction, viz., menu, toolbar, or context menu.
The code is much cleaner and paves the way to be reloaded
with various means.
* contrib/hbide/hbide.prg
* contrib/hbide/ideactions.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/ideobject.prg
* contrib/hbide/ideprojmanager.prg
* contrib/hbide/idesaveload.prg
! Next round of reforms, stay patient.
! Implemented to hold last working project.
! Fixed to not generate error if an open project is tried
to reopen.
! Many small artifacts correctd.
* 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
* contrib/hbgd/hbgd.hbc
+ examples/httpsrv/modulesg.hbp
* examples/httpsrv/uhttpdgd.hbp
* examples/httpsrv/readme.txt
* Merged gd linking logic from uhttpdgd.hbp to hbgd.hbc.
(contains little hack, too) (untested)
+ Added .hbp file to build GD enabled modules.
* Modified readme to reflect above change.
+ Changed .hbp files to use hbgd.hbc and hbct.hbc to
build with hbgd and hbct libs. This is much better
method, since hbmk2 will locate them automatically
plus set header path as well.
* contrib/hbide/idethemes.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/hbide.prg
* contrib/hbide/ideactions.prg
* contrib/hbide/ideprojmanager.prg
! Reapplied my File() -> hb_FileExists() pacth.
Please note that it's not my favourite pass-time to
find out which of my changes were overwritten and such
practice pretty much defeats the purpose of version
tracking systems like SVN altogther. It's committers
job to properly resolve conflicts, unless there is
as advance request for commit-stop.
Since it's also not very efficient for me to refix all
future File() usages to hb_FileExists(), it would
be much more beneficiary for the whole project if coding
practices like that would be adopted by other developers
and taken care of in future updates. Thanks in advance.
* 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/hbide/hbide.hbp
* contrib/hbide/hbide.prg
* contrib/hbide/ideactions.prg
* contrib/hbide/idedocks.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/idefindreplace.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/ideobject.prg
* contrib/hbide/ideprojmanager.prg
* contrib/hbide/idesaveload.prg
* contrib/hbide/idethemes.prg
* contrib/hbide/projects/hbide.hbi
+ contrib/hbide/resources/insert-datetime.png
+ contrib/hbide/resources/insert-external-file.png
+ contrib/hbide/resources/insert-procname.png
+ contrib/hbide/resources/readonly.png
* contrib/hbide/resources/tabreadonly.png
* contrib/hbxbp/xbpqtuiloader.prg
A lot of changes are in effect including the patch
sent by Vailton. The code is in the middle of restructing
phase and may take several days to finish. Till the I request
you all to bear with me and may expect some bumps too.
Please do not update this code until I finish preliminaries.
To sumup this commit includes:
! Thourough reclassification of classes and separation of
code fragments in a way that not two developers collide
with each other. One may takeup one segment and the other another.
+ Used hbide_* namespace and have changed almost every function.
+ Implemented, though not in a way I wanted, building a project
via Qt's process classes. You will see a refreshing difference.
+ A major breakthrough in XbpQtUiLoader() class implementation.
Now you can access the child widgets of a .ui component per
this syntax:
oUI:qObj[ "checkMatchCase" ]:setChecked( .t. )
=>
oUI:q_checkMatchCase:seChecked( .t. )
^^
just prefix object name with "q_" ( Q + Underscore ).
This greatly simmplifies coding and allows to exploit child
widgets as real-time objects.
* contrib/hbqt/hbqt_hbevents.cpp
* contrib/hbqt/hbqt_hbslots.cpp
- Deleted old method of slots/events handling.
* contrib/hbide/idethemes.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/hbide.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/idesaveload.prg
% Using hb_FileExists() instead of File().
! Fixed to not force lowercase on filenames.
* contrib/hbqt/qth/QApplication.qth
* Minor optimizations.
% One static var deleted.
; TOFIX/TOCHECK: argv/argc usage.
* contrib/hbqt/qtgui/QApplication.cpp
* contrib/hbqt/hbqt_garbage.h
* Regenerated.
* contrib/hbxbp/xbpgeneric.prg
- Deleted unused statics.
; TOFIX: HBQT has an irregularity which I couldn't find a
reason yet. It maintains a pointer to QApplication
in a static variable on C level, plus every HBQT
app maintains a copy of the QApp object in a .prg
level STATIC var. Both are inited using C/prg
level init/exit functions.
* INSTALL
+ Added OS/2 to QT supported platforms.
* harbour.spec
+ Merged lib and static subpackages into main one.
hbmk2 requires that both dynamic and static libs (namely hbcplr)
are present for successful linking.
Please test and comment, I can revert old version in
case of any problems.
* contrib/hbqt/filelist.mk
* contrib/hbqt/hbqt_hbevents.cpp
* contrib/hbqt/hbqt_hbslots.cpp
- contrib/hbqt/hbqt_hbevents2.cpp
- contrib/hbqt/hbqt_hbslots2.cpp
* Merged new EVENTS/SLOTS implementation with old one,
removing all existing redundancies and fixing double
definition of low-level classes.
* contrib/hbqt/generator/hbqtgen.prg
! Fixed formatting for one generated headder.
* contrib/hbqt/hbqt_hbqmainwindow.cpp
* contrib/hbqt/qth/QApplication.qth
+ Moved HB_QT declaration to QApplication.
* contrib/hbqt/qtgui/QApplication.cpp
* Regenerated.
* contrib/hbqt/qtgui/QTextCursor.cpp
* contrib/hbqt/qtgui/TQTextCursor.prg
* contrib/hbqt/qtgui/QSyntaxHighlighter.cpp
* contrib/hbqt/qtgui/TQSyntaxHighlighter.prg
* Changed after regeneration.
(Someone pbly changed these files without .qth,
or run older generator, or didn't run generator
after modifying .qth)
* contrib/hbqt/hbqt_hbqsyntaxhighlighter.cpp
! Fixed warning.
* Formatting.
* contrib/hbqt/hbqt_hbqtableview.cpp
* contrib/hbqt/hbqt_hbqmainwindow.cpp
% GC callbacks made 'static'.
* contrib/hbqt/detect.mk
* contrib/hbxbp/Makefile
+ Enabled for OS/2.
* contrib/hbqt/hbqt_hbqmainwindow.cpp
- Deleted mutex handling. (was commented for while with no
problems reported)
* contrib/hbwin/Makefile
* contrib/hbwin/hbwin.h
* contrib/hbwin/hbwapi.h
+ contrib/hbwin/win_err.c
* contrib/hbwin/wapi_winbase.c
+ Added hbwin_SetLastError(), hbwin_GetLastError()
low-level functions to save/get GetLastError() values.
This is required to preserve win lasterror value on .prg
level. The reason we need this is because TlsGetValue()
(called internally by Harbour core) is overwriting this
value. Thanks to Xavi for research.
* contrib/hbwin/wapi_winbase_mutex.c
! Fixed to use hbwin_SetLastError().
; TODO: Call hbwin_SetLastError() after _all_ winapi
calls which modify lasterror value.
Until then, WAPI_GETLASTERROR() is broken.
* contrib/hbwin/hbwinole.h
+ Added self-guard.
/*
This commint is from Vailton Renato and applied as is
Please set me right if something is omitted.
Changes are written below as published on DL.
*/
* contrib/hbide/hbide.ch
* contrib/hbide/hbide.env
* contrib/hbide/hbide.prg
* contrib/hbide/ideactions.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/idesaveload.prg
* contrib/hbide/resources/hb-16x16.png
+ contrib/hbide/resources/hb-32x32.png
+ contrib/hbide/resources/list-developers.png
+ contrib/hbide/resources/list-users.png
+ contrib/hbide/resources/new2.png
+ contrib/hbide/resources/project.png
+ contrib/hbide/resources/vr-16x16.png
! isValidText() some more valid extensions added
! editSource() message appears if the file open is not supported.
! loadIni()
Implemented support for RecentFiles & RECENTPROJECTS sections.
Optimized support for section names regardless of case used.
Enhanced with SWITCH instead of CASE.
Optimized initialization oide:Aini regardless of the amount
expected items in the INI file.
Implemented a basic validation to ignore invalid
sections in the INI file.
+ Added a few new icons for the menu of the application.
! FILE > recent files -> implementation done.
! FILE > recent projects -> implementation done.
! FILE > SAVE AND EXIT -> implementation done.
! FILE > OPEN -> supports opening multiple files
! FILE > REVERT -> implementation done.
+ findEditByFileName() - new method to Find an item in a
Edits[] based on the file name passed as argument.
+ findEditByID() - new method to Find an item in
aEdits[] based on the ID passed as argument.
+ HbIde:closeAllSources() -> implementation done.
! HbIde:closeSource() -> rewritten to support the closeAllSources() method
+ HbIde:closeAllOther() -> implementation done.
+ HbIde:saveSourceAs() -> implementation done.
+ HbIde:updateTitleBar() -> New method to updates the title bar of the
main window, indicating the project and the current filename.
+ HELP > About - implementation done.
+ HELP > Harbour on line - implementation done.
+ HELP > HB Users Mailing - implementation done.
+ HELP > HB Developers Mailing - implementation done.
+ EDIT menu items were attached to the existing options
in ::executeAction()
! IdeFindReplace:show() -> Detect if current edit has any selected text.
! hbide now displays the text "Untitled XX" on creating a new file.
NOTE: Something is not right because when I click the close
button to close the main window and he asks me if I want
to save the files and when I click CANCEL it has to abort
the process and not close the system as it is occurring.
* contrib/hbide/hbide.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/idesaveload.prg
* contrib/hbide/idethemes.prg
+ contrib/hbide/resources/selectionlist.ui
* contrib/hbide/resources/themes.ui
! Changed the way .ppo is presented. Now a new modeless
window displays .ppo source and thus you have more control
over comaprison with original source. You can keep as many
such .ppo windows on the screen.
+ Implemented Editor Themes.
HBIDE provides 5 default themes, along the lines of xMate, viz.,
1. Classic
2. City Lights
3. Evening Glamour
4. Sand Storm
with a few changes, and
5. Pritpal's Favourite.
Themes interface provides for changing the existing themes
as well as constructing a new one based on any exiting themes.
Then user can save them in hbide.hbt file.
HBIDE always loads default 5 themes as above then,
HBIDE looks for hbide.hbt in the same folder where it is.
If it finds one, it attempts to load it. In the loading
process it will merge the duplicate themes, including the
default ones. It means, if you modify an existing default
theme and then save it in hbide.hbt, at next invocation
default theme will be overwritten and your changes are
reflected. But if the name of the theme is changed you have
yours plus default both themes available.
Default theme is "Pritpal's Favourite" which will be applied
to any source file opened. You can override it by applying
new theme to it. Right click on <Editors Tree><_any_source_file_>
and select "Apply Theme" and finally select from a list of
themes presented in a list box by double clicking onto one
of choice. Next time you open HBIDE thus souce will be
applied the last theme selected.
You can re-define various labels on the Themes Dialog including
drop-down list items of different parts of the sources.
Just examine hbide.hbt and change the values of dialog elements.
Differences from xMate implementation:
1. Theme can be applied to indivisual source separately.
2. Theme elements can have <Italic>, <Bold> and <Underline>
attributes.
3. Themes can be copied and re-defined for n numbers.
TODO: To apply themes per project.
To implement some missing parts of source, such as,
background color of selections, etc.
You are encouraged to test this implementation. I will be
more than happy to implement descent thoughts you can imagine.
* contrib/hbqt/tests/demoqt.prg
+ Changed to use new EVENTS/SLOTS layout.
These are currently two STATIC vars, may be better to
add :events / :slots to oWnd and keep them tied to windows,
or threads. It's difficult to find out from current usage.
; Please test.
* contrib/hbqt/filelist.mk
+ contrib/hbqt/hbqt_hbslots2.cpp
+ contrib/hbqt/hbqt_hbevents2.cpp
+ Added new implementation of slots and events.
This fixes potential leaks in old implementation by
moving HB_EVENTS, HB_SLOTS low level per-thread
structures to .prg level and adding proper GC destructors
to them.
To use the new interface in .prg level code, following changes
will have to be applied:
1. Adding new :events, :slots holder variables to .prg level.
2. Init these holder variables with QT_EVENTS_NEW() and QT_SLOTS_NEW().
3. Make these conversions:
QT_CONNECT_EVENT( ... ) -> QT_EVENTS_CONNECT( p, ... )
QT_DISCONNECT_EVENT( ... ) -> QT_EVENTS_DISCONNECT( p, ... )
QT_CONNECT_SIGNAL( ... ) -> QT_SLOTS_CONNECT( p, ... )
QT_DISCONNECT_SIGNAL( ... ) -> QT_SLOTS_DISCONNECT( p, ... )
QT_GETEVENTFILTER() -> QT_EVENTS_PTR( p ) (there is a TOFIX here for the future)
4. Delete these calls:
QT_EVENTS_DESTROY()
QT_SLOTS_DESTROY()
; Pritpal, can you please review this method?
* contrib/hbqt/hbqt_hbdbfmodel.cpp
* contrib/hbqt/hbqt.h
% Memory allocation internals made static.
* 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).
* contrib/hbqt/hbqt.h
+ Will now fail with forced compiler error if used with
QT libs older than 4.5.0.
* package/winuni/mpkg_win_uni_extra_copy.bat
* Formatting.
* config/global.mk
% Applied optimization sent by Tamas Tevesz.
% Applied little further optimization.
* One variable renamed.
- Deleted checking for MAKE_381 when using 3.81 features.
Now 3.81 is the minimum required so there is no point.
* contrib/hbide/hbide.prg
! Don't add binary extensions to target names.
It will be added by hbmk2 automatically and properly
according to target platform/compiler.
! Don't add .exe extension to hbmk2 executable name.
* harbour.spec
! Modified this line:
%define hb_lflag export HB_USER_LDFLAGS="${CC_HB_USER_LDFLAGS} %{?_with_static:-static}"
to this:
%define hb_lflag export HB_USER_LDFLAGS=
_with_static is later converted to HB_BUILD_SHARED setting which is right.
* Formatting.
* config/global.mk
% Applied little optimization from Tamas Tevesz.
* contrib/hbide/idemisc.prg
+ hbide_PathProc()
This function can combine relative paths together so it's
the key to avoid macros dealing with placing paths to their
intended location. It can replace current method of
<IdeSrc> = hb_dirBase(). F.e.:
hbide_PathProc( "src/mysource_in_project.prg", "projects_dir/" ) ->
"projects_dir/src/mysource_in_project.prg"
hbide_PathProc( "projects/myproject.hbi", hb_dirBase() ) ->
"C:/harbour/contrib/hbide/projects/myproject.hbi"
Please use it.
; TOFIX: Since hbide seems to intend to support a hbrun-like
command prompt, maybe it's a good idea to prefix all
public functions with hbide_, otherwise there will
be problems when name collision occurs with user code.
If this is not the goal, we can leave it.
* INSTALL
* Clean Linux .rpm section, added full install commands just
like for Ubuntu, added qt45-devel, added more description.
(not tested, I don't have .rpm based distro)
* config/global.mk
! Fixed debian package manager detection, as suggest by
Tamas Tevesz.
* config/global.mk
+ Added rudamentary package manager detection (so far for
darwin and linux). Please extend. This will allow to make
proper dependency checking in detect.mk.