From bfa271d4e52c0592f9c5cb49954f3789290bba24 Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Sun, 3 Jan 2010 10:03:50 +0000 Subject: [PATCH] 2010-01-03 11:00 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) * 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. --- harbour/ChangeLog | 163 ++++++++++++------ harbour/contrib/hbqt/detect.mk | 2 +- harbour/contrib/hbqt/generator/hbqtgen.prg | 19 +- harbour/contrib/hbqt/hbqt_hbqmainwindow.cpp | 126 +------------- .../hbqt/hbqt_hbqsyntaxhighlighter.cpp | 35 ++-- harbour/contrib/hbqt/hbqt_hbqtableview.cpp | 4 +- harbour/contrib/hbqt/qtgui/QApplication.cpp | 2 + .../contrib/hbqt/qtgui/QSyntaxHighlighter.cpp | 14 +- harbour/contrib/hbqt/qtgui/QTextCursor.cpp | 12 +- .../hbqt/qtgui/TQSyntaxHighlighter.prg | 15 +- harbour/contrib/hbqt/qtgui/TQTextCursor.prg | 15 +- harbour/contrib/hbqt/qth/QApplication.qth | 4 +- harbour/contrib/hbwin/Makefile | 1 + harbour/contrib/hbwin/hbwapi.h | 2 + harbour/contrib/hbwin/hbwin.h | 12 ++ harbour/contrib/hbwin/hbwinole.h | 5 + harbour/contrib/hbwin/wapi_winbase.c | 3 +- harbour/contrib/hbwin/wapi_winbase_mutex.c | 14 +- harbour/contrib/hbwin/win_err.c | 77 +++++++++ harbour/contrib/hbxbp/Makefile | 3 +- 20 files changed, 274 insertions(+), 254 deletions(-) create mode 100644 harbour/contrib/hbwin/win_err.c diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 462ef7305e..44b3c09e3b 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -17,13 +17,70 @@ past entries belonging to author(s): Viktor Szakats. */ +2010-01-03 11:00 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) + * 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. + 2010-01-02 22:47 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com) - /* - This commint is from Vailton Renato and applied as is + /* + 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 @@ -38,57 +95,57 @@ + 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. + ! isValidText() some more valid extensions added - ! 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 + ! 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. + + 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. + ! 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. + 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. + + 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. + + 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. + + 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() + + EDIT menu items were attached to the existing options + in ::executeAction() - ! IdeFindReplace:show() -> Detect if current edit has any selected text. + ! IdeFindReplace:show() -> Detect if current edit has any selected text. - ! hbide now displays the text "Untitled XX" on creating a new file. + ! 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. + 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. 2010-01-02 19:31 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com) * contrib/hbide/hbide.prg @@ -98,16 +155,16 @@ * contrib/hbide/idethemes.prg + contrib/hbide/resources/selectionlist.ui * contrib/hbide/resources/themes.ui - ! Changed the way .ppo is presented. Now a new modeless + ! 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., + HBIDE provides 5 default themes, along the lines of xMate, viz., 1. Classic 2. City Lights - 3. Evening Glamour + 3. Evening Glamour 4. Sand Storm with a few changes, and 5. Pritpal's Favourite. @@ -116,22 +173,22 @@ 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 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 + 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 + 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 + to any source file opened. You can override it by applying new theme to it. Right click on <_any_source_file_> - and select "Apply Theme" and finally select from a list of + 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 + 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 @@ -145,10 +202,10 @@ 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, + To implement some missing parts of source, such as, background color of selections, etc. - You are encouraged to test this implementation. I will be + You are encouraged to test this implementation. I will be more than happy to implement descent thoughts you can imagine. 2010-01-02 19:31 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com) diff --git a/harbour/contrib/hbqt/detect.mk b/harbour/contrib/hbqt/detect.mk index c9b4f60fdf..98862c4af6 100644 --- a/harbour/contrib/hbqt/detect.mk +++ b/harbour/contrib/hbqt/detect.mk @@ -13,7 +13,7 @@ HB_HAS_QT := _DET_DSP_NAME := qt _DET_VAR_INC_ := HB_INC_QT _DET_VAR_HAS_ := HB_HAS_QT -_DET_FLT_PLAT := !dos !os2 +_DET_FLT_PLAT := !dos _DET_FLT_COMP := !mingw64 !watcom !bcc !pocc !pocc64 !poccarm !msvcia64 _DET_INC_DEFP := /usr/include/qt4 /usr/lib/qt4/include /usr/include /Developer/qt/include _DET_INC_HEAD := /Qt/qglobal.h diff --git a/harbour/contrib/hbqt/generator/hbqtgen.prg b/harbour/contrib/hbqt/generator/hbqtgen.prg index cf53532ae1..1c41130d10 100644 --- a/harbour/contrib/hbqt/generator/hbqtgen.prg +++ b/harbour/contrib/hbqt/generator/hbqtgen.prg @@ -1650,16 +1650,15 @@ STATIC FUNCTION Build_GarbageFile( cpp_, cPathOut ) LOCAL txt_ := {} LOCAL s - aadd( txt_, "/*" ) - aadd( txt_, " * $Id$" ) - aadd( txt_, " * " ) - aadd( txt_, " * " ) - aadd( txt_, " * --------------------------------------------------------------------" ) - aadd( txt_, " * WARNING: Automatically generated source file. DO NOT EDIT! " ) - aadd( txt_, " * Instead, edit corresponding .qth file, " ) - aadd( txt_, " * or the generator tool itself, and run regenarate. " ) - aadd( txt_, " * --------------------------------------------------------------------" ) - aadd( txt_, " */" ) + aadd( txt_, "/*" ) + aadd( txt_, " * $Id$" ) + aadd( txt_, " */" ) + aadd( txt_, "" ) + aadd( txt_, "/* -------------------------------------------------------------------- */" ) + aadd( txt_, "/* WARNING: Automatically generated source file. DO NOT EDIT! */" ) + aadd( txt_, "/* Instead, edit corresponding .qth file, */" ) + aadd( txt_, "/* or the generator tool itself, and run regenarate. */" ) + aadd( txt_, "/* -------------------------------------------------------------------- */" ) aadd( txt_, " " ) FOR EACH s IN cpp_ diff --git a/harbour/contrib/hbqt/hbqt_hbqmainwindow.cpp b/harbour/contrib/hbqt/hbqt_hbqmainwindow.cpp index 041370f82e..12627feec8 100644 --- a/harbour/contrib/hbqt/hbqt_hbqmainwindow.cpp +++ b/harbour/contrib/hbqt/hbqt_hbqmainwindow.cpp @@ -55,7 +55,6 @@ #include "hbapiitm.h" #include "hbthread.h" #include "hbvm.h" -#include "hbinit.h" #include "hbqt.h" @@ -63,10 +62,6 @@ #include "hbqt_hbqmainwindow.h" -#if defined( _HBQT_MAINWINDOW_MUTEX ) -static PHB_ITEM s_mutex = NULL; -#endif - HBQMainWindow::HBQMainWindow( PHB_ITEM pBlock, int iThreadID ) { Qt::WindowFlags flags = Qt::WindowCloseButtonHint | Qt::WindowMaximizeButtonHint | @@ -99,9 +94,6 @@ HBQMainWindow::~HBQMainWindow( void ) void HBQMainWindow::paintEvent( QPaintEvent * event ) { -#if defined( _HBQT_MAINWINDOW_MUTEX ) - hb_threadMutexLock( s_mutex ); -#endif if( hb_vmRequestReenter() ) { PHB_ITEM p0 = hb_itemPutNI( NULL, QEvent::Paint ); @@ -111,28 +103,15 @@ void HBQMainWindow::paintEvent( QPaintEvent * event ) hb_itemRelease( p1 ); hb_vmRequestRestore(); } -#if defined( _HBQT_MAINWINDOW_MUTEX ) - hb_threadMutexUnlock( s_mutex ); -#endif } bool HBQMainWindow::event( QEvent * event ) { -#if defined( _HBQT_MAINWINDOW_MUTEX ) - hb_threadMutexLock( s_mutex ); -#endif - bool bRet = QWidget::event( event ); -#if defined( _HBQT_MAINWINDOW_MUTEX ) - hb_threadMutexUnlock( s_mutex ); -#endif - return bRet; + return QWidget::event( event ); } void HBQMainWindow::focusInEvent( QFocusEvent *event ) { -#if defined( _HBQT_MAINWINDOW_MUTEX ) - hb_threadMutexLock( s_mutex ); -#endif if( hb_vmRequestReenter() ) { PHB_ITEM p0 = hb_itemPutNI( NULL, QEvent::FocusIn ); @@ -143,16 +122,10 @@ void HBQMainWindow::focusInEvent( QFocusEvent *event ) hb_vmRequestRestore(); } QWidget::focusInEvent( event ); -#if defined( _HBQT_MAINWINDOW_MUTEX ) - hb_threadMutexUnlock( s_mutex ); -#endif } void HBQMainWindow::focusOutEvent( QFocusEvent *event ) { -#if defined( _HBQT_MAINWINDOW_MUTEX ) - hb_threadMutexLock( s_mutex ); -#endif if( hb_vmRequestReenter() ) { PHB_ITEM p0 = hb_itemPutNI( NULL, QEvent::FocusOut ); @@ -163,16 +136,10 @@ void HBQMainWindow::focusOutEvent( QFocusEvent *event ) hb_vmRequestRestore(); } QWidget::focusOutEvent( event ); -#if defined( _HBQT_MAINWINDOW_MUTEX ) - hb_threadMutexUnlock( s_mutex ); -#endif } void HBQMainWindow::keyPressEvent( QKeyEvent * event ) { -#if defined( _HBQT_MAINWINDOW_MUTEX ) - hb_threadMutexLock( s_mutex ); -#endif if( hb_vmRequestReenter() ) { PHB_ITEM p0 = hb_itemPutNI( NULL, QEvent::KeyPress ); @@ -183,16 +150,10 @@ void HBQMainWindow::keyPressEvent( QKeyEvent * event ) hb_vmRequestRestore(); } QWidget::keyPressEvent( event ); -#if defined( _HBQT_MAINWINDOW_MUTEX ) - hb_threadMutexUnlock( s_mutex ); -#endif } void HBQMainWindow::mouseDoubleClickEvent( QMouseEvent * event ) { -#if defined( _HBQT_MAINWINDOW_MUTEX ) - hb_threadMutexLock( s_mutex ); -#endif if( hb_vmRequestReenter() ) { PHB_ITEM p0 = hb_itemPutNI( NULL, QEvent::MouseButtonDblClick ); @@ -203,16 +164,10 @@ void HBQMainWindow::mouseDoubleClickEvent( QMouseEvent * event ) hb_vmRequestRestore(); } QWidget::mouseDoubleClickEvent( event ); -#if defined( _HBQT_MAINWINDOW_MUTEX ) - hb_threadMutexUnlock( s_mutex ); -#endif } void HBQMainWindow::mouseMoveEvent( QMouseEvent * event ) { -#if defined( _HBQT_MAINWINDOW_MUTEX ) - hb_threadMutexLock( s_mutex ); -#endif if( hb_vmRequestReenter() ) { PHB_ITEM p0 = hb_itemPutNI( NULL, QEvent::MouseMove ); @@ -223,16 +178,10 @@ void HBQMainWindow::mouseMoveEvent( QMouseEvent * event ) hb_vmRequestRestore(); } QWidget::mouseMoveEvent( event ); -#if defined( _HBQT_MAINWINDOW_MUTEX ) - hb_threadMutexUnlock( s_mutex ); -#endif } void HBQMainWindow::mousePressEvent( QMouseEvent * event ) { -#if defined( _HBQT_MAINWINDOW_MUTEX ) - hb_threadMutexLock( s_mutex ); -#endif if( hb_vmRequestReenter() ) { PHB_ITEM p0 = hb_itemPutNI( NULL, QEvent::MouseButtonPress ); @@ -243,16 +192,10 @@ void HBQMainWindow::mousePressEvent( QMouseEvent * event ) hb_vmRequestRestore(); } QWidget::mousePressEvent( event ); -#if defined( _HBQT_MAINWINDOW_MUTEX ) - hb_threadMutexUnlock( s_mutex ); -#endif } void HBQMainWindow::mouseReleaseEvent( QMouseEvent * event ) { -#if defined( _HBQT_MAINWINDOW_MUTEX ) - hb_threadMutexLock( s_mutex ); -#endif if( hb_vmRequestReenter() ) { PHB_ITEM p0 = hb_itemPutNI( NULL, QEvent::MouseButtonRelease ); @@ -263,16 +206,10 @@ void HBQMainWindow::mouseReleaseEvent( QMouseEvent * event ) hb_vmRequestRestore(); } QWidget::mouseReleaseEvent( event ); -#if defined( _HBQT_MAINWINDOW_MUTEX ) - hb_threadMutexUnlock( s_mutex ); -#endif } void HBQMainWindow::wheelEvent( QWheelEvent * event ) { -#if defined( _HBQT_MAINWINDOW_MUTEX ) - hb_threadMutexLock( s_mutex ); -#endif if( hb_vmRequestReenter() ) { PHB_ITEM p0 = hb_itemPutNI( NULL, QEvent::Wheel ); @@ -283,16 +220,10 @@ void HBQMainWindow::wheelEvent( QWheelEvent * event ) hb_vmRequestRestore(); } QWidget::wheelEvent( event ); -#if defined( _HBQT_MAINWINDOW_MUTEX ) - hb_threadMutexUnlock( s_mutex ); -#endif } void HBQMainWindow::resizeEvent( QResizeEvent * event ) { -#if defined( _HBQT_MAINWINDOW_MUTEX ) - hb_threadMutexLock( s_mutex ); -#endif if( hb_vmRequestReenter() ) { PHB_ITEM p0 = hb_itemPutNI( NULL, QEvent::Resize ); @@ -303,18 +234,12 @@ void HBQMainWindow::resizeEvent( QResizeEvent * event ) hb_vmRequestRestore(); } QWidget::resizeEvent( event ); -#if defined( _HBQT_MAINWINDOW_MUTEX ) - hb_threadMutexUnlock( s_mutex ); -#endif } void HBQMainWindow::closeEvent( QCloseEvent * event ) { HB_TRACE( HB_TR_DEBUG, ( "HBQMainWindow::closeEvent: ThreadID: %i", threadID ) ); -#if defined( _HBQT_MAINWINDOW_MUTEX ) - hb_threadMutexLock( s_mutex ); -#endif if( hb_vmRequestReenter() ) { PHB_ITEM p0 = hb_itemPutNI( NULL, QEvent::Close ); @@ -324,9 +249,6 @@ void HBQMainWindow::closeEvent( QCloseEvent * event ) hb_itemRelease( p1 ); hb_vmRequestRestore(); } -#if defined( _HBQT_MAINWINDOW_MUTEX ) - hb_threadMutexUnlock( s_mutex ); -#endif } typedef struct @@ -336,7 +258,7 @@ typedef struct QPointer< HBQMainWindow > pq; } QGC_POINTER_HBQMainWindow; -QT_G_FUNC( release_HBQMainWindow ) +static QT_G_FUNC( release_HBQMainWindow ) { QGC_POINTER_HBQMainWindow * p = ( QGC_POINTER_HBQMainWindow * ) Cargo; @@ -374,7 +296,7 @@ QT_G_FUNC( release_HBQMainWindow ) } } -void * hbqt_gcAllocate_HBQMainWindow( void * pObj ) +static void * hbqt_gcAllocate_HBQMainWindow( void * pObj ) { QGC_POINTER_HBQMainWindow * p = ( QGC_POINTER_HBQMainWindow * ) hb_gcAllocate( sizeof( QGC_POINTER_HBQMainWindow ), hbqt_gcFuncs() ); @@ -387,11 +309,6 @@ void * hbqt_gcAllocate_HBQMainWindow( void * pObj ) HB_FUNC( QT_HBQMAINWINDOW ) { -#if defined( _HBQT_MAINWINDOW_MUTEX ) - if( s_mutex == NULL ) - s_mutex = hb_threadMutexCreate(); -#endif - void * pObj = NULL; pObj = ( HBQMainWindow * ) new HBQMainWindow( hb_itemNew( hb_param( 1, HB_IT_BLOCK ) ), hb_parni( 2 ) ); @@ -399,41 +316,4 @@ HB_FUNC( QT_HBQMAINWINDOW ) hb_retptrGC( hbqt_gcAllocate_HBQMainWindow( pObj ) ); } -HB_FUNC( HB_QT ) {;} - -static void hbqt_hbqmainwindow_init( void * cargo ) -{ - HB_SYMBOL_UNUSED( cargo ); - -#if defined( _HBQT_MAINWINDOW_MUTEX ) - if( s_mutex == NULL ) - s_mutex = hb_threadMutexCreate(); -#endif -} - -static void hbqt_hbqmainwindow_exit( void * cargo ) -{ - HB_SYMBOL_UNUSED( cargo ); - -#if defined( _HBQT_MAINWINDOW_MUTEX ) - if( s_mutex != NULL ) - { - hb_itemRelease( s_mutex ); - s_mutex = NULL; - } -#endif -} - -HB_CALL_ON_STARTUP_BEGIN( _hbqt_hbqmainwindow_initialize_ ) - hb_vmAtInit( hbqt_hbqmainwindow_init, NULL ); - hb_vmAtExit( hbqt_hbqmainwindow_exit, NULL ); -HB_CALL_ON_STARTUP_END( _hbqt_hbqmainwindow_initialize_ ) - -#if defined( HB_PRAGMA_STARTUP ) - #pragma startup _hbqt_hbqmainwindow_initialize_ -#elif defined( HB_DATASEG_STARTUP ) - #define HB_DATASEG_BODY HB_DATASEG_FUNC( _hbqt_hbqmainwindow_initialize_ ) - #include "hbiniseg.h" -#endif - #endif diff --git a/harbour/contrib/hbqt/hbqt_hbqsyntaxhighlighter.cpp b/harbour/contrib/hbqt/hbqt_hbqsyntaxhighlighter.cpp index c4c25a59ea..93f213ca45 100644 --- a/harbour/contrib/hbqt/hbqt_hbqsyntaxhighlighter.cpp +++ b/harbour/contrib/hbqt/hbqt_hbqsyntaxhighlighter.cpp @@ -63,7 +63,7 @@ #include #include -HBQSyntaxHighlighter::HBQSyntaxHighlighter( QTextDocument *parent ) +HBQSyntaxHighlighter::HBQSyntaxHighlighter( QTextDocument * parent ) : QSyntaxHighlighter( parent ) { HighlightingRule rule; @@ -81,7 +81,7 @@ HBQSyntaxHighlighter::HBQSyntaxHighlighter( QTextDocument *parent ) << "\\btemplate\\b" << "\\btypedef\\b" << "\\btypename\\b" << "\\bunion\\b" << "\\bunsigned\\b" << "\\bvirtual\\b" << "\\bvoid\\b" << "\\bvolatile\\b"; - foreach ( const QString &pattern, keywordPatterns ) + foreach( const QString &pattern, keywordPatterns ) { rule.pattern = QRegExp( pattern ); rule.format = keywordFormat; @@ -96,8 +96,8 @@ HBQSyntaxHighlighter::HBQSyntaxHighlighter( QTextDocument *parent ) multiLineCommentFormat.setForeground( Qt::red ); - commentStartExpression = QRegExp("/\\*"); - commentEndExpression = QRegExp("\\*/"); + commentStartExpression = QRegExp( "/\\*" ); + commentEndExpression = QRegExp( "\\*/" ); } void HBQSyntaxHighlighter::setHBRule( QString name, QString pattern, const QTextCharFormat & format ) @@ -128,7 +128,7 @@ void HBQSyntaxHighlighter::setHBCompilerDirectives( const QStringList & directiv HighlightingRule rule; directivesFormat = format; - foreach ( const QString &pattern, directives ) + foreach( const QString &pattern, directives ) { rule.pattern = QRegExp( pattern ); rule.format = directivesFormat; @@ -143,15 +143,15 @@ void HBQSyntaxHighlighter::setHBMultiLineCommentFormat( const QTextCharFormat & void HBQSyntaxHighlighter::highlightBlock( const QString &text ) { - int index( 0 ); QRegExp expression; #if 0 - foreach ( const HighlightingRule &rule, highlightingRules ) + int index( 0 ); + foreach( const HighlightingRule &rule, highlightingRules ) { expression = QRegExp( rule.pattern ); index = expression.indexIn( text ); - while ( index >= 0 ) + while( index >= 0 ) { int length = expression.matchedLength(); setFormat( index, length, rule.format ); @@ -159,11 +159,11 @@ void HBQSyntaxHighlighter::highlightBlock( const QString &text ) } } #else - foreach ( const hHighlightingRule &rule, hhighlightingRules ) + foreach( const hHighlightingRule &rule, hhighlightingRules ) { QRegExp expression( rule.pattern ); int index = expression.indexIn( text ); - while ( index >= 0 ) + while( index >= 0 ) { int length = expression.matchedLength(); setFormat( index, length, rule.format ); @@ -175,22 +175,21 @@ void HBQSyntaxHighlighter::highlightBlock( const QString &text ) setCurrentBlockState( 0 ); int startIndex = 0; - if ( previousBlockState() != 1 ) + if( previousBlockState() != 1 ) startIndex = commentStartExpression.indexIn( text ); - while ( startIndex >= 0 ) + while( startIndex >= 0 ) { int endIndex = commentEndExpression.indexIn( text, startIndex ); int commentLength; - if ( endIndex == -1 ) + if( endIndex == -1 ) { setCurrentBlockState( 1 ); commentLength = text.length() - startIndex; } else - { commentLength = endIndex - startIndex + commentEndExpression.matchedLength(); - } + setFormat( startIndex, commentLength, multiLineCommentFormat ); startIndex = commentStartExpression.indexIn( text, startIndex + commentLength ); } @@ -203,7 +202,7 @@ typedef struct QPointer< HBQSyntaxHighlighter > pq; } QGC_POINTER_HBQSyntaxHighlighter; -QT_G_FUNC( release_HBQSyntaxHighlighter ) +static QT_G_FUNC( release_HBQSyntaxHighlighter ) { QGC_POINTER_HBQSyntaxHighlighter * p = ( QGC_POINTER_HBQSyntaxHighlighter * ) Cargo; @@ -241,7 +240,7 @@ QT_G_FUNC( release_HBQSyntaxHighlighter ) } } -void * hbqt_gcAllocate_HBQSyntaxHighlighter( void * pObj ) +static void * hbqt_gcAllocate_HBQSyntaxHighlighter( void * pObj ) { QGC_POINTER_HBQSyntaxHighlighter * p = ( QGC_POINTER_HBQSyntaxHighlighter * ) hb_gcAllocate( sizeof( QGC_POINTER_HBQSyntaxHighlighter ), hbqt_gcFuncs() ); @@ -257,9 +256,7 @@ HB_FUNC( QT_HBQSYNTAXHIGHLIGHTER ) void * pObj = NULL; if( hb_pcount() == 1 && HB_ISPOINTER( 1 ) ) - { pObj = new HBQSyntaxHighlighter( hbqt_par_QTextDocument( 1 ) ) ; - } hb_retptrGC( hbqt_gcAllocate_HBQSyntaxHighlighter( pObj ) ); } diff --git a/harbour/contrib/hbqt/hbqt_hbqtableview.cpp b/harbour/contrib/hbqt/hbqt_hbqtableview.cpp index cd1567a77f..9f49390060 100644 --- a/harbour/contrib/hbqt/hbqt_hbqtableview.cpp +++ b/harbour/contrib/hbqt/hbqt_hbqtableview.cpp @@ -135,7 +135,7 @@ typedef struct QPointer< HBQTableView > pq; } QGC_POINTER_HBQTableView; -QT_G_FUNC( release_HBQTableView ) +static QT_G_FUNC( release_HBQTableView ) { QGC_POINTER_HBQTableView * p = ( QGC_POINTER_HBQTableView * ) Cargo; @@ -173,7 +173,7 @@ QT_G_FUNC( release_HBQTableView ) } } -void * hbqt_gcAllocate_HBQTableView( void * pObj ) +static void * hbqt_gcAllocate_HBQTableView( void * pObj ) { QGC_POINTER_HBQTableView * p = ( QGC_POINTER_HBQTableView * ) hb_gcAllocate( sizeof( QGC_POINTER_HBQTableView ), hbqt_gcFuncs() ); diff --git a/harbour/contrib/hbqt/qtgui/QApplication.cpp b/harbour/contrib/hbqt/qtgui/QApplication.cpp index 2ed7fe3527..46ae69f3c0 100644 --- a/harbour/contrib/hbqt/qtgui/QApplication.cpp +++ b/harbour/contrib/hbqt/qtgui/QApplication.cpp @@ -99,6 +99,8 @@ static bool s_hbqtinit = false; static int s_argc; static char ** s_argv; +HB_FUNC( HB_QT ) {;} + /* * QApplication ( int & argc, char ** argv ) * QApplication ( int & argc, char ** argv, bool GUIenabled ) diff --git a/harbour/contrib/hbqt/qtgui/QSyntaxHighlighter.cpp b/harbour/contrib/hbqt/qtgui/QSyntaxHighlighter.cpp index 62bc5e8b12..05217262af 100644 --- a/harbour/contrib/hbqt/qtgui/QSyntaxHighlighter.cpp +++ b/harbour/contrib/hbqt/qtgui/QSyntaxHighlighter.cpp @@ -85,12 +85,12 @@ typedef struct QPointer< QSyntaxHighlighter > pq; } QGC_POINTER_QSyntaxHighlighter; -QT_G_FUNC( release_QSyntaxHighlighter ) +QT_G_FUNC( hbqt_gcRelease_QSyntaxHighlighter ) { QGC_POINTER_QSyntaxHighlighter * p = ( QGC_POINTER_QSyntaxHighlighter * ) Cargo; - HB_TRACE( HB_TR_DEBUG, ( "release_QSyntaxHighlighter p=%p", p)); - HB_TRACE( HB_TR_DEBUG, ( "release_QSyntaxHighlighter ph=%p pq=%p", p->ph, (void *)(p->pq))); + HB_TRACE( HB_TR_DEBUG, ( "hbqt_gcRelease_QSyntaxHighlighter p=%p", p)); + HB_TRACE( HB_TR_DEBUG, ( "hbqt_gcRelease_QSyntaxHighlighter ph=%p pq=%p", p->ph, (void *)(p->pq))); if( p && p->ph && p->pq ) { @@ -110,16 +110,16 @@ QT_G_FUNC( release_QSyntaxHighlighter ) break; } p->ph = NULL; - HB_TRACE( HB_TR_DEBUG, ( "release_QSyntaxHighlighter Object deleted! %i B %i KB", ( int ) hb_xquery( 1001 ), hbqt_getmemused() ) ); + HB_TRACE( HB_TR_DEBUG, ( "hbqt_gcRelease_QSyntaxHighlighter Object deleted! %i B %i KB", ( int ) hb_xquery( 1001 ), hbqt_getmemused() ) ); } else { - HB_TRACE( HB_TR_DEBUG, ( "NO release_QSyntaxHighlighter Object Name Missing!" ) ); + HB_TRACE( HB_TR_DEBUG, ( "NO hbqt_gcRelease_QSyntaxHighlighter Object Name Missing!" ) ); } } else { - HB_TRACE( HB_TR_DEBUG, ( "DEL release_QSyntaxHighlighter Object Already deleted!" ) ); + HB_TRACE( HB_TR_DEBUG, ( "DEL hbqt_gcRelease_QSyntaxHighlighter Object Already deleted!" ) ); } } @@ -128,7 +128,7 @@ void * hbqt_gcAllocate_QSyntaxHighlighter( void * pObj ) QGC_POINTER_QSyntaxHighlighter * p = ( QGC_POINTER_QSyntaxHighlighter * ) hb_gcAllocate( sizeof( QGC_POINTER_QSyntaxHighlighter ), hbqt_gcFuncs() ); p->ph = pObj; - p->func = release_QSyntaxHighlighter; + p->func = hbqt_gcRelease_QSyntaxHighlighter; new( & p->pq ) QPointer< QSyntaxHighlighter >( ( QSyntaxHighlighter * ) pObj ); HB_TRACE( HB_TR_DEBUG, ( " new_QSyntaxHighlighter %i B %i KB", ( int ) hb_xquery( 1001 ), hbqt_getmemused() ) ); return( p ); diff --git a/harbour/contrib/hbqt/qtgui/QTextCursor.cpp b/harbour/contrib/hbqt/qtgui/QTextCursor.cpp index 530ef77cb4..5162bf65b9 100644 --- a/harbour/contrib/hbqt/qtgui/QTextCursor.cpp +++ b/harbour/contrib/hbqt/qtgui/QTextCursor.cpp @@ -88,22 +88,22 @@ * ~QTextCursor () */ -QT_G_FUNC( release_QTextCursor ) +QT_G_FUNC( hbqt_gcRelease_QTextCursor ) { QGC_POINTER * p = ( QGC_POINTER * ) Cargo; - HB_TRACE( HB_TR_DEBUG, ( "release_QTextCursor p=%p", p ) ); - HB_TRACE( HB_TR_DEBUG, ( "release_QTextCursor ph=%p", p->ph ) ); + HB_TRACE( HB_TR_DEBUG, ( "hbqt_gcRelease_QTextCursor p=%p", p ) ); + HB_TRACE( HB_TR_DEBUG, ( "hbqt_gcRelease_QTextCursor ph=%p", p->ph ) ); if( p && p->ph ) { delete ( ( QTextCursor * ) p->ph ); p->ph = NULL; - HB_TRACE( HB_TR_DEBUG, ( "YES release_QTextCursor Object deleted! %i B %i KB", ( int ) hb_xquery( 1001 ), hbqt_getmemused() ) ); + HB_TRACE( HB_TR_DEBUG, ( "YES hbqt_gcRelease_QTextCursor Object deleted! %i B %i KB", ( int ) hb_xquery( 1001 ), hbqt_getmemused() ) ); } else { - HB_TRACE( HB_TR_DEBUG, ( "DEL release_QTextCursor Object Already deleted!" ) ); + HB_TRACE( HB_TR_DEBUG, ( "DEL hbqt_gcRelease_QTextCursor Object Already deleted!" ) ); } } @@ -112,7 +112,7 @@ void * hbqt_gcAllocate_QTextCursor( void * pObj ) QGC_POINTER * p = ( QGC_POINTER * ) hb_gcAllocate( sizeof( QGC_POINTER ), hbqt_gcFuncs() ); p->ph = pObj; - p->func = release_QTextCursor; + p->func = hbqt_gcRelease_QTextCursor; HB_TRACE( HB_TR_DEBUG, ( " new_QTextCursor %i B %i KB", ( int ) hb_xquery( 1001 ), hbqt_getmemused() ) ); return( p ); } diff --git a/harbour/contrib/hbqt/qtgui/TQSyntaxHighlighter.prg b/harbour/contrib/hbqt/qtgui/TQSyntaxHighlighter.prg index c18971f6ee..e2b87a0e1a 100644 --- a/harbour/contrib/hbqt/qtgui/TQSyntaxHighlighter.prg +++ b/harbour/contrib/hbqt/qtgui/TQSyntaxHighlighter.prg @@ -63,12 +63,9 @@ #include "hbclass.ch" -CREATE CLASS QSyntaxHighlighter INHERIT QObject - - VAR pPtr +CREATE CLASS QSyntaxHighlighter INHERIT HbQtObjectHandler, QObject METHOD new() - METHOD configure( xObject ) METHOD document() METHOD setDocument( pDoc ) @@ -76,7 +73,6 @@ CREATE CLASS QSyntaxHighlighter INHERIT QObject ENDCLASS -/*----------------------------------------------------------------------*/ METHOD QSyntaxHighlighter:new( ... ) LOCAL p @@ -88,15 +84,6 @@ METHOD QSyntaxHighlighter:new( ... ) RETURN Self -METHOD QSyntaxHighlighter:configure( xObject ) - IF hb_isObject( xObject ) - ::pPtr := xObject:pPtr - ELSEIF hb_isPointer( xObject ) - ::pPtr := xObject - ENDIF - RETURN Self - - METHOD QSyntaxHighlighter:document() RETURN Qt_QSyntaxHighlighter_document( ::pPtr ) diff --git a/harbour/contrib/hbqt/qtgui/TQTextCursor.prg b/harbour/contrib/hbqt/qtgui/TQTextCursor.prg index cb5ab3cb27..3dd1e41117 100644 --- a/harbour/contrib/hbqt/qtgui/TQTextCursor.prg +++ b/harbour/contrib/hbqt/qtgui/TQTextCursor.prg @@ -63,12 +63,9 @@ #include "hbclass.ch" -CREATE CLASS QTextCursor - - VAR pPtr +CREATE CLASS QTextCursor INHERIT HbQtObjectHandler METHOD new() - METHOD configure( xObject ) METHOD anchor() METHOD atBlockEnd() @@ -134,7 +131,6 @@ CREATE CLASS QTextCursor ENDCLASS -/*----------------------------------------------------------------------*/ METHOD QTextCursor:new( ... ) LOCAL p @@ -146,15 +142,6 @@ METHOD QTextCursor:new( ... ) RETURN Self -METHOD QTextCursor:configure( xObject ) - IF hb_isObject( xObject ) - ::pPtr := xObject:pPtr - ELSEIF hb_isPointer( xObject ) - ::pPtr := xObject - ENDIF - RETURN Self - - METHOD QTextCursor:anchor() RETURN Qt_QTextCursor_anchor( ::pPtr ) diff --git a/harbour/contrib/hbqt/qth/QApplication.qth b/harbour/contrib/hbqt/qth/QApplication.qth index ef65a1edb8..f2de1e397f 100644 --- a/harbour/contrib/hbqt/qth/QApplication.qth +++ b/harbour/contrib/hbqt/qth/QApplication.qth @@ -86,6 +86,8 @@ static bool s_hbqtinit = false; static int s_argc; static char ** s_argv; +HB_FUNC( HB_QT ) {;} + /* * QApplication ( int & argc, char ** argv ) * QApplication ( int & argc, char ** argv, bool GUIenabled ) @@ -276,4 +278,4 @@ void saveStateRequest ( QSessionManager & manager ) hbqt_par_QApplication( 1 )->commitData( *hbqt_par_QSessionManager( 2 ) ); -*/ \ No newline at end of file +*/ diff --git a/harbour/contrib/hbwin/Makefile b/harbour/contrib/hbwin/Makefile index b8dc026479..c25d155ed3 100644 --- a/harbour/contrib/hbwin/Makefile +++ b/harbour/contrib/hbwin/Makefile @@ -22,6 +22,7 @@ C_SOURCES := \ wce_smsc.c \ win_com.c \ win_dll.c \ + win_err.c \ win_misc.c \ win_osc.c \ win_prn1.c \ diff --git a/harbour/contrib/hbwin/hbwapi.h b/harbour/contrib/hbwin/hbwapi.h index 72397b416c..06974daa1d 100644 --- a/harbour/contrib/hbwin/hbwapi.h +++ b/harbour/contrib/hbwin/hbwapi.h @@ -53,6 +53,8 @@ #ifndef __HBWAPI_H #define __HBWAPI_H +#include "hbwin.h" + #define wapi_par_WNDPROC( n ) ( ( WNDPROC ) hb_parptr( n ) ) #define wapi_par_WPARAM( n ) ( ( WPARAM ) hb_parptr( n ) ) #define wapi_par_LPARAM( n ) ( ( LPARAM ) hb_parptr( n ) ) diff --git a/harbour/contrib/hbwin/hbwin.h b/harbour/contrib/hbwin/hbwin.h index f987ac15d5..e7235ea4de 100644 --- a/harbour/contrib/hbwin/hbwin.h +++ b/harbour/contrib/hbwin/hbwin.h @@ -50,6 +50,9 @@ * */ +#ifndef __HBWIN_H +#define __HBWIN_H + #define WIN_COM_FUN_CREATEFILE 1 #define WIN_COM_FUN_GETCOMMSTATE 2 #define WIN_COM_FUN_SETCOMMSTATE 3 @@ -73,3 +76,12 @@ #define WIN_COM_DBGTIMEOUTS 0x10 #define WIN_COM_DBGQUEUE 0x20 #define WIN_COM_DBGALL 0x3F + +HB_EXTERN_BEGIN + +HB_EXPORT void hbwin_SetLastError( void ); +HB_EXPORT DWORD hbwin_GetLastError( void ); + +HB_EXTERN_END + +#endif /* __HBWIN_H */ diff --git a/harbour/contrib/hbwin/hbwinole.h b/harbour/contrib/hbwin/hbwinole.h index da0d460ce8..3acd99b140 100644 --- a/harbour/contrib/hbwin/hbwinole.h +++ b/harbour/contrib/hbwin/hbwinole.h @@ -50,6 +50,9 @@ * */ +#ifndef __HBWINOLE_H +#define __HBWINOLE_H + #include "hbapi.h" #include "hbapiitm.h" #include "hbapicls.h" @@ -118,3 +121,5 @@ HB_EXPORT HB_BOOL hb_oleAxInit( void ); HB_EXPORT PHB_ITEM hb_oleAxControlNew( PHB_ITEM pItem, HWND hWnd ); HB_EXTERN_END + +#endif /* __HBWINOLE_H */ diff --git a/harbour/contrib/hbwin/wapi_winbase.c b/harbour/contrib/hbwin/wapi_winbase.c index 73db8447de..61ffae2b50 100644 --- a/harbour/contrib/hbwin/wapi_winbase.c +++ b/harbour/contrib/hbwin/wapi_winbase.c @@ -151,12 +151,13 @@ HB_FUNC( WAPI_SETPROCESSWORKINGSETSIZE ) HB_FUNC( WAPI_GETLASTERROR ) { - hb_retnl( ( long ) GetLastError() ); + hb_retnl( ( long ) hbwin_GetLastError() ); } HB_FUNC( WAPI_SETLASTERROR ) { SetLastError( ( DWORD ) hb_parnl( 1 ) ); + hbwin_SetLastError(); } HB_FUNC( WAPI_SETERRORMODE ) diff --git a/harbour/contrib/hbwin/wapi_winbase_mutex.c b/harbour/contrib/hbwin/wapi_winbase_mutex.c index 71320ae15c..b274803f1f 100644 --- a/harbour/contrib/hbwin/wapi_winbase_mutex.c +++ b/harbour/contrib/hbwin/wapi_winbase_mutex.c @@ -53,6 +53,7 @@ #define HB_OS_WIN_USED #include "hbapi.h" +#include "hbwapi.h" #include "hbwinuni.h" static HB_GARBAGE_FUNC( wapi_mutex_release ) @@ -98,6 +99,8 @@ HB_FUNC( WAPI_CREATEMUTEX ) void * hName; HANDLE hMutex = CreateMutex( ( LPSECURITY_ATTRIBUTES ) hb_parptr( 1 ), hb_parl( 2 ), HB_PARSTR( 3, &hName, NULL ) ); + hbwin_SetLastError(); + wapi_mutex_ret( hMutex ); hb_strfree( hName ); } @@ -109,6 +112,8 @@ HB_FUNC( WAPI_OPENMUTEX ) void * hName; HANDLE hMutex = OpenMutex( hb_parnl( 1 ), hb_parl( 2 ), HB_PARSTR( 3, &hName, NULL ) ); + hbwin_SetLastError(); + wapi_mutex_ret( hMutex ); hb_strfree( hName ); #else @@ -121,5 +126,12 @@ HB_FUNC( WAPI_RELEASEMUTEX ) { HANDLE hMutex = wapi_mutex_par( 1 ); - hb_retl( hMutex ? ReleaseMutex( hMutex ) : HB_FALSE ); + if( hMutex ) + { + BOOL bResult = ReleaseMutex( hMutex ); + hbwin_SetLastError(); + hb_retl( bResult ); + } + else + hb_retl( HB_FALSE ); } diff --git a/harbour/contrib/hbwin/win_err.c b/harbour/contrib/hbwin/win_err.c new file mode 100644 index 0000000000..f2c5a01fa6 --- /dev/null +++ b/harbour/contrib/hbwin/win_err.c @@ -0,0 +1,77 @@ +/* + * $Id$ + */ + +/* + * Harbour Project source code: + * Windows API last error handling + * + * Copyright 2010 Viktor Szakats (harbour.01 syenar.hu) + * www - http://www.harbour-project.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/). + * + * As a special exception, the Harbour Project gives permission for + * additional uses of the text contained in its release of Harbour. + * + * The exception is that, if you link the Harbour libraries with other + * files to produce an executable, this does not by itself cause the + * resulting executable to be covered by the GNU General Public License. + * Your use of that executable is in no way restricted on account of + * linking the Harbour library code into it. + * + * This exception does not however invalidate any other reasons why + * the executable file might be covered by the GNU General Public License. + * + * This exception applies only to the code released by the Harbour + * Project under the name Harbour. If you copy code from other + * Harbour Project or Free Software Foundation releases into a copy of + * Harbour, as the General Public License permits, the exception does + * not apply to the code that you add in this way. To avoid misleading + * anyone as to the status of such modified files, you must delete + * this exception notice from them. + * + * If you write modifications of your own for Harbour, it is your choice + * whether to permit this exception to apply to your modifications. + * If you do not wish that, delete this exception notice. + * + */ + +#define HB_OS_WIN_USED + +#include "hbapi.h" +#include "hbstack.h" + +typedef struct +{ + DWORD dwLastError; +} HB_WINERRDATA, * PHB_WINERRDATA; + +static HB_TSD_NEW( s_winerrData, sizeof( HB_WINERRDATA ), NULL, NULL ); + +void hbwin_SetLastError( void ) +{ + PHB_WINERRDATA pWinErrData = ( PHB_WINERRDATA ) hb_stackGetTSD( &s_winerrData ); + + pWinErrData->dwLastError = GetLastError(); +} + +DWORD hbwin_GetLastError( void ) +{ + PHB_WINERRDATA pWinErrData = ( PHB_WINERRDATA ) hb_stackGetTSD( &s_winerrData ); + + return pWinErrData->dwLastError; +} diff --git a/harbour/contrib/hbxbp/Makefile b/harbour/contrib/hbxbp/Makefile index 9b62cd28de..c929019be1 100644 --- a/harbour/contrib/hbxbp/Makefile +++ b/harbour/contrib/hbxbp/Makefile @@ -51,7 +51,7 @@ PRG_HEADERS := \ # Try to be in sync with hbqt, but not too hard, since this # lib doesn't need QT external component directly. -ifeq ($(filter $(HB_PLATFORM),dos os2),) +ifeq ($(filter $(HB_PLATFORM),dos),) ifeq ($(filter $(HB_COMPILER),mingw64 watcom bcc pocc pocc64 poccarm),) ifneq ($(HB_WITH_QT),no) @@ -59,7 +59,6 @@ ifeq ($(filter $(HB_PLATFORM),dos os2),) include $(TOP)$(ROOT)config/header.mk include $(TOP)$(ROOT)config/lib.mk - else HB_SKIP_REASON := component explicitly disabled include $(TOP)$(ROOT)config/none.mk