* ChangeLog
+ Added more description to WIN_DLLCALL() function usage.
* contrib/hbwin/hbdyn.c
+ Type conversion fixes after actual testing.
Now everything should work except float parameter passing
on x64 and passing/receiving unsigned longlongs to/from .dlls
on both x64/x86. I couldn't found how to interact properly
with HVM in this case.
Please review remaining TOFIXes.
+ contrib/hbwin/tests/testdll1.prg
+ contrib/hbwin/tests/testdll.c
+ Added code to test parameter passing.
* contrib/hbwin/legacycd.c
* contrib/hbwin/win_dll.c
+ Forcing stdcall calling convention. (it's the default yet,
but this may change to cdecl).
* contrib/hbwin/win_dll.c
* bUNICODE -> bWIDE.
* contrib/hbwin/hbdyn.ch
+ Added comment.
* include/hbdefs.h
* Typo in comment.
* contrib/hbwin/Makefile
! Added missing hbdyn.h.
* utils/hbmk2/hbmk2.prg
! Fixed to never add double backslash to output dir.
* harbour/contrib/hbwin/wapi_winbase.c
! fixed WAPI_GETPROCADDRESS() to work in WinCE builds
(missing in previous ChangeLog entry)
* harbour/contrib/hbwin/wapi_winbase.c
! cleaned library handle usage in WAPI_GETLONGPATHNAME()
* harbour/contrib/hbwin/wapi_winbase.c
* harbour/contrib/hbwin/wapi_winbase_mutex.c
* added small description for few functions excluded by
HB_OS_WIN_CE macro.
* contrib/hbwin/win_dll.c
* Changed names to be OS neutral.
; Low-level dynamic lib call support should now work on
all x86 and x64 platforms, possibly also on ARM
(and maybe even more). In this sense, it should not
be placed in hbwin lib.
* contrib/hbwin/hbwin.h
* contrib/hbwin/hbwin.ch
* contrib/hbwin/win_dllx.c
* contrib/hbwin/win_dll.c
* contrib/hbwin/legacycd.c
* contrib/hbwin/tests/testdll.prg
+ Reworked WIN_DLLCALL() and low-level hbwin_dllCall() interfaces.
* WIN_DLLCALL() should be called as follows:
WIN_DLLCALL( <pFunction | <aFunction>, ... ) -> <xResult>
where <aFunction> can be:
{ <cFunction> | <nFunction>, <cLibrary> | <pLibrary> [, <nFuncFlags> [, <nArgFlags1>, ..., <nArgFlagsn> ]] }
{ <pFunction> [, <nFuncFlags> [, <nArgFlags1>, ..., <nArgFlagsn> ]] }
With above API it's possible to access all low-level options and
merge all possible call types in one call. If passing function ordinal
or name, it will also autodetect UNICODE mode. Autodetection turns
on UNICODE mode for WinCE permanently and for functions ending with 'W'.
* Call convention, C type and unicode flags are now merged into one
callflag value.
* Unicode flag extended to RAW, ASCII, UTF8, UTF16.
+ Added support for UTF-8 and forced raw encoding for char pointer types.
* GETPROCADDRESS() finally moved to legacy source.
* contrib/hbsms/hbsms.prg
! Fixed SMS_SEND() to return numeric value when port couldn't
be opened.
* harbour/ChangeLog
! fixed typo
* harbour/contrib/hbwin/wapi_winbase.c
! fixed WAPI_GETLONGPATHNAME() to compile and work with older header
files and windows versions. When GetLongPathName() is not available
then this function is redirected to GetShortPathName()
* contrib/hbwin/win_dll.c
! Fixed to unshare all HVM strings before passing them to callee.
* contrib/hbwin/tests/testdll.prg
! Deleted two commented test call, which corrupted memory anyway
due to too small buffer passed to low-level function.
* contrib/hbqt/hbqt_hbqplaintextedit.cpp
* contrib/hbqt/hbqt_hbqplaintextedit.h
* contrib/hbqt/qtgui/HBQPlainTextEdit.cpp
* contrib/hbqt/qtgui/THBQPlainTextEdit.prg
* contrib/hbqt/qth/HBQPlainTextEdit.qth
* contrib/hbide/resources/skeletons.ui
* contrib/hbide/resources/skeletons.uic
* contrib/hbide/hbide.prg
* contrib/hbide/ideactions.prg
* contrib/hbide/idedocks.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/ideobject.prg
* contrib/hbide/idesaveload.prg
+ Implemented "Invert Case" feature.
% All operations applied on selected text do not remove selections.
However "undo/redo" does not respect selections.
+ Added <Docks> main-menu option which presents toggling feature
for all implemented docked windows. It facilitates clubbing
all toggle actions at one convenient place.
+ Implemented "Code Skeletons".
How to write
============
* Click <Docks> main-menu option and select <Code Skeletons>.
* "Code Skeletons" window will open at the right-docking area.
* Close other docks if open to make room for its components.
* Click <Add New> button, a dialog will appear requesting a "Name".
* Enter recognizable name for this skeleton, i.e., "DO CASE 3",
where "3" will represent that this case statement contains 3
iterations of CASE statement. It is just an example, follow
your way of recognitions.
* After you click <ok> the name will appear in "Identity" list-box.
* Start writing in "Code Snippet" editor, like:
DO CASE
CASE x ==
CASE x ==
CASE x ==
ENDCASE
* After you are done with it, click <Update>.
* Repeat the process for some other skeletons.
* Do not forget to click <Update> even after slightest modification.
This will ensure that your skeleton is always in order.
* If you wish to change the name, click on that "Name" in
"Identity" list-box and click <Rename>, follow next process.
Click <Update> to save permanently.
* <Delete> is not working yet.
* Navigate the skeletons by clicking on the prompts; you will
find the attached code in the editor below.
How to Call
===========
* While in the editor tab, position your editing cursor at
desired column.
* Press Ctrl+K, a context menu will appear near left-upper part
of the editing tab containing all skeletons you wrote.
* Use arrow-up/down keys to desired skeleton and press <Enter>.
* The code skeleton will be inserted in the source aligned
to the column you started with. The cursor will be anchored
on the same place.
* Alternativly you can use mouse, but keyboard navigation is
simple in this context.
* Note that alignment and indent of inserted code skeleton is
perfect to starting column.
Note: Your suggessions are welcome to enhance this feature.
* contrib/hbwin/win_dll.c
% Optimization steps.
* Syncing between win64/win32 sections.
* contrib/hbwin/tests/testdll.prg
+ Added new tests, but they GPF due to corrupted internals,
so they are commented for now.
* contrib/hbqt/generator/qt45.qtp
* contrib/hbqt/hbqt.h
* contrib/hbqt/hbqt_garbage.h
* contrib/hbqt/hbqt_hbslots.cpp
* contrib/hbqt/qtgui/filelist.mk
+ contrib/hbqt/qtgui/QPlainTextDocumentLayout.cpp
+ contrib/hbqt/qtgui/TQPlainTextDocumentLayout.prg
+ contrib/hbqt/qth/QPlainTextDocumentLayout.qth
+ Added one more class.
+ contrib/hbide/resources/skeletons.ui
+ contrib/hbide/resources/skeletons.uic
+ Added widget definition to hold user input for "code skeletons".
* contrib/hbide/hbide.prg
* contrib/hbide/ideactions.prg
* contrib/hbide/idedocks.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/ideobject.prg
* contrib/hbide/idesaveload.prg
* contrib/hbide/idesources.prg
* contrib/hbide/idethemes.prg
+ Prepared to fetch "Code Skeletons" from the user which will be
made available to be inserted into the source being edited.
To have a preview as to what will go inside the implementation,
click on "{}" icon on the toolbar.
! Fixed not to load whole document and highlight when hbIDE is
terminated. This reduces termination time to bare minimum.
+ Implemented "Convert Single Quotes to Double" and its reverse,
accessible from <Edit><Block...> main-menu options. First select the
part of the source you want to apply these options, then click
on relevant menu option. A toolbar implementation will be better
which I am looking into how it can be presented in an aesthetic way.
! Fixed many more artifacts.
; NOTE: Regression is possible, please report issues, if any.
* include/hbdefs.h
* HB_BYTE made a synonym for HB_UCHAR.
HB_BYTE is only there for convenience, HB_UCHAR is recommended
for unsigned byte streams.
* HB_U8 now based on HB_UCHAR.
! Fixed UINT64/INT64 left defined in some cases.
* contrib/hbwin/hbwin.h
* contrib/hbwin/hbwin.ch
* contrib/hbwin/tests/testdll.prg
* contrib/hbwin/win_dll.c
* contrib/hbwin/legacycd.c
+ Added LONGLONG C types.
+ Added support for user-specifiable parameter types.
This works now in low-level C dll call function and also
on high level in HB_DLLCALL().
+ Added support for LONGLONG/int64 integers.
+ Added support for raw strings. (no UNICODE or codepage
conversion).
! Fixed typo in iRetTypeRaw assigment.
+ Added one new test for param type spec test. (pretty bare)
! Fixed WAPI_GETPROCADDRESS() to GETPROCADDRESS(). Latter
has some extra features so we still need it.
* GETPROCADDRESS() moved back to non-compatibility.
; Please review the code. There are some integer conversion
which might not be proper (& 0xFFFF).
* utils/hbmk2/hbmk2.prg
! Typo in recently added help text.
* contrib/Makefile
- contrib/hbbmcdx
+ contrib/rddbmcdx
* contrib/rddbmcdx/bmdbfcdx.c
* contrib/rddbmcdx/Makefile
* Renamed hbbmcdx to rddbmcdx.
* More cleanup to RDD code. (sync with rddcdx, deleted
unnecessary lines)
- Deleted "turbo" functionality. BM_TURBO() is now a dummy.
AFAIR this isn't safe, and even if it is it should be
implemented differently, not as a static variable.
* contrib/hbwin/Makefile
* contrib/hbwin/win_dll.c
+ contrib/hbwin/win_dllx.c
* contrib/hbwin/legacycd.c
+ Moved LOADLIBRARY(), FREELIBRARY() and GETPROCADDRESS() to legacy source.
+ Moved Xbase++ compatibel DLL interface to separate Xbase++ specific file.
; From now on the recommended native DLL interface for Harbour apps is:
WAPI_LOADLIBRARY(), WAPI_GETPROCADDRESS(), WAPI_FREELIBRARY() and
WIN_DLLCALL()
; TODO: Solve GC collected HMODULE in above WAPI LIB handling functions.
; TODO: Clean HB_LIB*() vs. WAPI LIB handling confusion.
* contrib/hbwin/tests/testdll.prg
* Changed to use WAPI_LOADLIBRARY()/WAPI_FREELIBRARY()
! Fixed one remaining CALLDLLTYPED() call.
- Deleted no more valid comment about not-working libcurl .dll call.
Now it works.
* contrib/hbwin/hbwin.ch
+ Added HB_WIN_DLL_CALLCONV_* macros. (so far only privately defined inside .c code)
+ Added HB_WIN_DLL_CTYPE_* macros. (so far only privately defined inside .c code)
+ Reworked HB_WIN_DLL_CTYPE_* macro values. INCOMPATIBLE. Since they weren't
previously documented, this should not be a breakage, pls report it if this is
a problem.
! Fixed .ch syntax to also work in .c files.
* contrib/hbwin/hbwin.h
* contrib/hbwin/legacycd.c
* contrib/hbwin/win_dll.c
* contrib/hbwin/tests/testdll.prg
* Using hbwin.ch for callconv and C type constants.
+ Added public low-level interface: hbwin_dllCall().
This has provision for exact parameter type specification.
* Changed Harbour level functions to use new public
interface hbwin_dllCall().
+ Moved CALLDLL(), CALLDLLBOOL(), CALLDLLTYPED() to legacy source.
* HB_DLLEXEC structure made private to XPP compatibility
section.
+ Added new WIN_DLLCALL() API. This can replace all old CALL*()
function and give more flexibility. Its first parameter is an
optional array, which can specify calling convention (it was
fixed in old implementation), return type and UNICODE swicth,
plus it has provision to specify parameter types, too.
+ Changed test app to use new WIN_DLLCALL() API.
* hb_getprocaddress() made public (but not exported) and
renamed to hbwin_getprocaddress().
* config/wce/mingwarm.mk
* config/win/mingw.mk
- Deleted hack to always add frame buffer for hbwin.
It's not necessary anymore.
* contrib/hbwin/win_dll.c
+ Reimplemented win32 .dll calls using pure C code.
; Please review it. Especially around the few TODO/TOFIX
notes. It would also be great of someone could make
some test on WinCE platform.
* contrib/hbwin/win_dll.c
% Simplified win64 support.
! Fixed win64 support for returning parameters passed by reference.
* ChangeLog
* Old TOFIXes marked DONE.
* contrib/hbwin/win_dll.c
- Deleted WINAPI keyword from win64 .dll support.
It has no meaning under win64, and win64 .dll support is
not only meant to access winapi functions anyway.
* src/rtl/direct.c
* int -> HB_SIZE
* contrib/hbwin/wapi_wingdi.c
! Fixed return value of WAPI_SELECTOBJECT()
* contrib/hbwin/tests/testdll.prg
+ Minor.
* contrib/hbwin/win_dll.c
! Fixed typo in byref parameter handling. Thanks to
Xavi for noticing it.
* Deleted unused union members from win32 retval support,
renamed the rest.
* utils/hbmk2/hbmk2.prg
+ Added -3rd= option. This is always ignored by hbmk2 and it
allows to store extra, non-hbmk2 information in hbmk2 make files.
F.e.: -3rd=-hbide_friendlyname=MyProject
* harbour/src/rtl/achoice.prg
! fixed typo in one of recent modifications which caused RTE in
ac_test.prg
! fixed yet another typo which removed nMode setting
! fixed to not execute user procedure when no item is active at
startup. This problem was visible in ac_test2.prg
* utils/hbmk2/hbmk2.prg
+ Enabled -implib option in -hbexe (default) mode.
(except for dos/djgpp, pls add it manually)
+ Enabled -map option in -hbdyn mode for some targets where it was missing.
(except for dos/djgpp, pls review this case)
* harbour/src/pp/Makefile
* harbour/src/pp/hbpp.c
! fixed compilation with HB_DYNLIB macro
- harbour/src/vm/maindll.c
- removed unused dummy file
* harbour/src/vm/Makefile
* harbour/include/hbapi.h
+ harbour/src/vm/procaddr.c
+ added hb_vmProcAddress() function
* harbour/include/hbdefs.h
+ added HB_EXPORT_ATTR and HB_IMPORT_ATTR macros - they are always
defined regardless of HB_DYNLIB macro state
* harbour/src/vm/maindllh/Makefile
* disabled HB_DYNLIB
* harbour/src/vm/maindllp/Makefile
+ harbour/src/vm/maindllp/dllpcode.c
+ added new import library for PCODE DLLs. It contains wrappers for
hb_vmProcessSymbols() and hb_vmExecute() implemented in a way
which creates minimal speed overhead.
+ added error reporting (MessageBox()) when redirected functions
cannot be found.
+ added hb_dllGetProcAddress() C function
* harbour/include/hbtypes.h
- harbour/src/vm/maindllp.c
+ harbour/src/vm/maindllp/dllext.c
* moved old wrappers to some of extended and array API functions
into separate file
* updated to use hb_dllGetProcAddress()
- removed functions which should not be used by user code
% cleaned, optimized and added error reporting to function wrappers.
I do not know who chose exported functions but it looks like a
quite random set which should be extended for real functionality.
If someone is interested then he can do that. I updated this file
only for backward compatibility.
Above modifications allows to use PCODE DLLs with any application
also static ones using Harbour compiled without exported symbols.
It's enough to link it with this function:
HB_EXPORT_ATTR PHB_FUNC dll_hb_vmProcAddress( const char * szFuncName )
{
return hb_vmProcAddress( szFuncName );
}
The official form of including above function to final binaries is not
defined yet.
+ contrib/hbide/docs
+ contrib/hbide/docs/idemainpage.html
+ contrib/hbide/docs/interfaceelements.html
+ contrib/hbide/docs/multiviews.html
* contrib/hbide/resources/help.png
* contrib/hbide/hbide.prg
* contrib/hbide/ideactions.prg
* contrib/hbide/idedocks.prg
* contrib/hbide/ideobject.prg
+ Implemented basics of ib-build help mechanism.
It is working in a limited manner and is scheduled to be
matured in next few days, at-least from operations
point-of-view. QtextBrowser() accepts a sub-set of
html commands and hence is very limited in appearnce.
As we have decided against QtWebkit, this implementation
may not look highly professional, will surely solve
our purpose.
If someone is willing to extend help in this direction,
then following are the guidelines how you should design
html page:
1. Open Qt Creator
2. Create a widget in the designer.
3. Place a QTextBrowser control somewhere.
4. Double-click within the control.
5. A rich-text editing box will appear.
6. Design the page.
7. Click on the "Source" tab at the bottom.
8. Select the whole source with Ctrl+A and copy with Ctrl+C.
9. Create a .html file with notepad, paste the source, and save.
The process is lengthy, but no other html editor solves our
purpose due to limited html tags availability in QTextBrowser.
* include/hbdefs.h
+ Added more info on HB_SIZE/HB_ISIZ future plans.
* contrib/hbmemio/memio.c
* contrib/hbnetio/netiocli.c
- Deleted ( HB_SIZE ) casts in more obscure places.
* utils/hbmk2/hbmk2.prg
+ -hbnolib option is now automatically enabled in -hbdyn mode.
To disable it anyway, -hbnolib- option can be used.
* contrib/hbide/hbide.ch
* contrib/hbide/hbide.prg
* contrib/hbide/ideactions.prg
* contrib/hbide/idedocks.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/idefindreplace.prg
* contrib/hbide/ideobject.prg
* contrib/hbide/idesaveload.prg
* contrib/hbide/idesources.prg
+ Implemented multiple views.
How it works:
* Select "New..." from drop-down menu of "Views" combo-box in toolbar.
* An input dialog opens, provide a useful name,
keep it "one word" if possible
* Press <ENTER> or click "Ok", a blank edit area will come-up.
* Make ususal operations to add/delete/move sources.
* You must be able to see view's name in the status-bar in blue.
* Thus created "view" name will appear in the drop-down list.
* To switch to another view, select it from same drop-down.
* To verify, come out of the hbIDE and re-enter.
* Voila, you have the "views" created.
* "Main" view or say "root" view is always present.
;Please report if anything is missing or could be better.
* contrib/hbide/hbide.prg
* contrib/hbide/idedocks.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/ideobject.prg
% More ground cover in preperation of multiple views.
Just to versionize changes.
;NOTE: Unreleased memory blocks have reduced considerably
after parent/child relations fix in prev commit.
This implies that in sometime in near future,
memory issue is going to be the ghost of past.
* contrib/hbxbp/xbp.ch
* contrib/hbxbp/xbpparthandler.prg
* contrib/hbxbp/xbpstatusbar.prg
* contrib/hbxbp/xbptoolbar.prg
* contrib/hbxbp/xbpwindow.prg
! Fixed a rare parent/child relation issue in XbpStatusBar()
and XbpToolBar() classes.
+ Implemented Harbour extension:
Method :hbLayout( HBPLAYOUT_TYPE_* )
Currently HBPLAYOUT_TYPE_HORZBOX and
HBPLAYOUT_TYPE_VERTBOX are supported.
This is essentially executed after :create().
When executed class attemps to all children of
it to be laid accordingly, if some are already created.
Any other Xbp part created with "this" object as parent,
that is also laid appropriately.
This reduces a lot of code writing.
Example:
oStatic := XbpStatic():new():create( oDlg,... )
oStatic:hbLayout := HBPLAYOUT_TYPE_HORZBOX
oBtn := XbpPushButton():new( oStatic ):create( ... )
oBtn1 := XbpPushButton():new( oStatic ):create( ... )
oBtn2 := XbpPushButton():new( oStatic ):create( ... )
Then, these buttons will be nicely placed inside
oStatic. No need to go for complex calculations.
* contrib/hbxbp/tests/demoxbp.prg
+ Applied :hbLayout for :drawingArea and tabPages.