diff --git a/harbour/ChangeLog b/harbour/ChangeLog index d278a285b7..77da184da6 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,30 @@ 2008-12-31 13:59 UTC+0100 Foo Bar */ +2008-07-08 16:47 UTC+0200 Viktor Szakats (harbour.01 syenar hu) + * contrib/hbw32/Makefile + * contrib/hbw32/common.mak + + contrib/hbw32/w32_osc.c + + contrib/hbw32/w32_os.prg + + Ported some Windows specific version detection and + networking checker/setup code. From Peter Rees/xhb: + OS_ISWINNT() + OS_ISWINNT351() + OS_ISWINNT4() + OS_ISWIN2000_OR_LATER() + OS_ISWIN2000() + OS_ISWINXP() + OS_ISWIN2003() + OS_ISWINVISTA() + OS_ISWIN9X() + OS_ISWIN95() + OS_ISWIN98() + OS_ISWINME() + OS_ISWTSCLIENT() + OS_VERSIONINFO() + OS_NETREGOK() + OS_NETVREDIROK() + 2008-07-08 14:13 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) * harbour/include/hbrddcdx.h * harbour/source/rdd/dbfcdx/dbfcdx1.c diff --git a/harbour/contrib/hbw32/Makefile b/harbour/contrib/hbw32/Makefile index 384710d545..55f8be4f76 100644 --- a/harbour/contrib/hbw32/Makefile +++ b/harbour/contrib/hbw32/Makefile @@ -12,13 +12,15 @@ C_SOURCES=\ dllcall.c \ tprinter.c \ w32_ole.c \ + w32_osc.c \ w32_prn.c \ w32_regc.c \ PRG_SOURCES=\ + w32_os.prg \ + w32_reg.prg \ w32_tole.prg \ w32_tprn.prg \ - w32_reg.prg \ PRG_HEADERS = \ hbw32.ch \ diff --git a/harbour/contrib/hbw32/common.mak b/harbour/contrib/hbw32/common.mak index 4442a4d19f..826257eff1 100644 --- a/harbour/contrib/hbw32/common.mak +++ b/harbour/contrib/hbw32/common.mak @@ -13,12 +13,14 @@ LIB_OBJS = \ $(OBJ_DIR)dllcall$(OBJEXT) \ $(OBJ_DIR)tprinter$(OBJEXT) \ $(OBJ_DIR)w32_ole$(OBJEXT) \ + $(OBJ_DIR)w32_osc$(OBJEXT) \ $(OBJ_DIR)w32_prn$(OBJEXT) \ $(OBJ_DIR)w32_regc$(OBJEXT) \ \ + $(OBJ_DIR)w32_os$(OBJEXT) \ + $(OBJ_DIR)w32_reg$(OBJEXT) \ $(OBJ_DIR)w32_tole$(OBJEXT) \ $(OBJ_DIR)w32_tprn$(OBJEXT) \ - $(OBJ_DIR)w32_reg$(OBJEXT) \ all: \ $(LIB_PATH) \ diff --git a/harbour/contrib/hbw32/w32_os.prg b/harbour/contrib/hbw32/w32_os.prg new file mode 100644 index 0000000000..294258f36b --- /dev/null +++ b/harbour/contrib/hbw32/w32_os.prg @@ -0,0 +1,131 @@ +/* + * $Id$ + */ + +/* + * Harbour Project source code: + * + * Copyright 2004 Peter Rees + * Rees Software & Systems Ltd + * + * 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. + +*/ + +/* + * Operating system functions for Win32 + * + * Program to check and set Windows Registry settings + * for safe networking - all versions of Windows to XP SP2 + * + * Also includes check for buggy VREDIR.VXD under Win95 + * and if the correct patch file is found - run it. + */ + +#include "common.ch" +#include "directry.ch" +#include "hbw32.ch" + +/* NOTE: To change any of these registry settings + Administrator rights are required by default in Windows. [vszakats] */ + +FUNCTION OS_NETREGOK( lSetIt, lDoVista ) + LOCAL rVal := .T. + LOCAL cKeySrv + LOCAL cKeyWks + + DEFAULT lSetIt TO .F. + DEFAULT lDoVista TO .T. + + IF !lDoVista .AND. OS_ISWINVISTA() + * + ELSEIF OS_ISWIN9X() + rVal := QueryRegistry( HKEY_LOCAL_MACHINE, "System\CurrentControlSet\Services\VxD\VREDIR", "DiscardCacheOnOpen", 1, lSetIt ) + ELSE + cKeySrv := "System\CurrentControlSet\Services\LanmanServer\Parameters" + cKeyWks := "System\CurrentControlSet\Services\LanmanWorkStation\Parameters" + + /* Server settings */ + rVal := rVal .AND. QueryRegistry( HKEY_LOCAL_MACHINE, cKeySrv, "CachedOpenLimit", 0, lSetIt ) + rVal := rVal .AND. QueryRegistry( HKEY_LOCAL_MACHINE, cKeySrv, "EnableOpLocks", 0, lSetIt ) /* Q124916 */ + rVal := rVal .AND. QueryRegistry( HKEY_LOCAL_MACHINE, cKeySrv, "EnableOpLockForceClose", 1, lSetIt ) + rVal := rVal .AND. QueryRegistry( HKEY_LOCAL_MACHINE, cKeySrv, "SharingViolationDelay", 0, lSetIt ) + rVal := rVal .AND. QueryRegistry( HKEY_LOCAL_MACHINE, cKeySrv, "SharingViolationRetries", 0, lSetIt ) + + /* Workstation settings */ + rVal := rVal .AND. QueryRegistry( HKEY_LOCAL_MACHINE, cKeyWks, "UseOpportunisticLocking", 0, lSetIt ) + rVal := rVal .AND. QueryRegistry( HKEY_LOCAL_MACHINE, cKeyWks, "EnableOpLocks", 0, lSetIt ) + rVal := rVal .AND. QueryRegistry( HKEY_LOCAL_MACHINE, cKeyWks, "EnableOpLockForceClose", 1, lSetIt ) + rVal := rVal .AND. QueryRegistry( HKEY_LOCAL_MACHINE, cKeyWks, "UtilizeNtCaching", 0, lSetIt ) + rVal := rVal .AND. QueryRegistry( HKEY_LOCAL_MACHINE, cKeyWks, "UseLockReadUnlock", 0, lSetIt ) + + IF OS_ISWIN2000_OR_LATER() + rVal := rVal .AND. QueryRegistry( HKEY_LOCAL_MACHINE, "System\CurrentControlSet\Services\MRXSmb\Parameters", "OpLocksDisabled", 1, lSetIt ) + ENDIF + ENDIF + + RETURN rVal + +FUNCTION OS_NETVREDIROK( nResult ) + LOCAL cWinDir + LOCAL cFile + LOCAL a + + nResult := 0 + + IF OS_ISWIN9X() + cWinDir := GETENV( "WINDIR" ) /* Get the folder that Windows is installed in */ + IF EMPTY( cWinDir ) + cWinDir := "C:\WINDOWS" + ENDIF + cFile := cWinDir + "\SYSTEM\VREDIR.VXD" + a := DIRECTORY( cFile ) /* Check for faulty files. */ + IF !EMPTY( a ) + IF a[ 1, F_SIZE ] == 156749 .AND. a[ 1, F_TIME ] == "11:11:10" + nResult := 1111 + ELSEIF a[ 1, F_SIZE ] == 140343 .AND. a[ 1, F_TIME ] == "09:50:00" + nResult := 950 + ENDIF + ENDIF + ENDIF + + RETURN EMPTY( nResult ) diff --git a/harbour/contrib/hbw32/w32_osc.c b/harbour/contrib/hbw32/w32_osc.c new file mode 100644 index 0000000000..aaf18b4973 --- /dev/null +++ b/harbour/contrib/hbw32/w32_osc.c @@ -0,0 +1,193 @@ +/* + * $Id$ + */ + +/* + * Harbour Project source code: + * + * Copyright 2004 Peter Rees + * Rees Software & Systems Ltd + * + * 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. + +*/ + +/* + * Operating system functions for Win32 + * + * Program to check and set Windows Registry settings + * for safe networking - all versions of Windows to XP SP2 + * + * + * Also includes check for buggy VREDIR.VXD under Win95 + * and if the correct patch file is found - run it. + */ + +#define HB_OS_WIN_32_USED + +#include "hbapiitm.h" + +static void getwinver( OSVERSIONINFO * pOSvi ) +{ + pOSvi->dwOSVersionInfoSize = sizeof( OSVERSIONINFO ); + GetVersionEx( pOSvi ); +} + +HB_FUNC( OS_ISWINNT ) +{ + OSVERSIONINFO osvi; + getwinver( &osvi ); + hb_retl( osvi.dwPlatformId == VER_PLATFORM_WIN32_NT ); +} + +HB_FUNC( OS_ISWINNT351 ) +{ + OSVERSIONINFO osvi; + getwinver( &osvi ); + hb_retl( osvi.dwPlatformId == VER_PLATFORM_WIN32_NT + && osvi.dwMajorVersion == 3 && osvi.dwMinorVersion == 51 ); +} + +HB_FUNC( OS_ISWINNT4 ) +{ + OSVERSIONINFO osvi; + getwinver( &osvi ); + hb_retl( osvi.dwPlatformId == VER_PLATFORM_WIN32_NT + && osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0 ); +} + +HB_FUNC( OS_ISWIN2000_OR_LATER ) +{ + OSVERSIONINFO osvi; + getwinver( &osvi ); + hb_retl( osvi.dwMajorVersion >= 5 ); +} + +HB_FUNC( OS_ISWIN2000 ) +{ + OSVERSIONINFO osvi; + getwinver( &osvi ); + hb_retl( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 ); +} + +HB_FUNC( OS_ISWINXP ) +{ + OSVERSIONINFO osvi; + getwinver( &osvi ); + hb_retl( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 ); +} + +HB_FUNC( OS_ISWIN2003 ) +{ + OSVERSIONINFO osvi; + getwinver( &osvi ); + hb_retl( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 ); +} + +HB_FUNC( OS_ISWINVISTA ) +{ + OSVERSIONINFO osvi; + getwinver( &osvi ); + hb_retl( osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 0 ); +} + +HB_FUNC( OS_ISWIN9X ) +{ + OSVERSIONINFO osvi; + getwinver( &osvi ); + hb_retl( osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS ); +} + +HB_FUNC( OS_ISWIN95 ) +{ + OSVERSIONINFO osvi; + getwinver( &osvi ); + hb_retl( osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS + && osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0 ); +} + +HB_FUNC( OS_ISWIN98 ) +{ + OSVERSIONINFO osvi; + getwinver( &osvi ); + hb_retl( osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS + && osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10 ); +} + +HB_FUNC( OS_ISWINME ) +{ + OSVERSIONINFO osvi; + getwinver( &osvi ); + hb_retl( osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS + && osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90 ); +} + +HB_FUNC( OS_ISWTSCLIENT ) +{ + BOOL iResult = FALSE; + OSVERSIONINFO osvi; + getwinver( &osvi ); + if( osvi.dwPlatformId == VER_PLATFORM_WIN32_NT && osvi.dwMajorVersion >= 4 ) + { + /* Only supported on NT 4.0 SP3 & higher */ + #ifndef SM_REMOTESESSION + #define SM_REMOTESESSION 0x1000 + #endif + iResult = GetSystemMetrics( SM_REMOTESESSION ) != 0; + } + hb_retl( iResult ); +} + +HB_FUNC( OS_VERSIONINFO ) +{ + PHB_ITEM pArray = hb_itemArrayNew( 5 ); + OSVERSIONINFO osvi; + getwinver( &osvi ); + hb_arraySetNL( pArray, 1, osvi.dwMajorVersion ); + hb_arraySetNL( pArray, 2, osvi.dwMinorVersion ); + if( osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS ) + osvi.dwBuildNumber = LOWORD( osvi.dwBuildNumber ); + hb_arraySetNL( pArray, 3, osvi.dwBuildNumber ); + hb_arraySetNL( pArray, 4, osvi.dwPlatformId ); + hb_arraySetC( pArray, 5, osvi.szCSDVersion ); + hb_itemReturnRelease( pArray ); +}