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()
This commit is contained in:
Viktor Szakats
2008-07-08 14:52:35 +00:00
parent 4926a3375e
commit c692d5d67a
5 changed files with 354 additions and 2 deletions

View File

@@ -8,6 +8,30 @@
2008-12-31 13:59 UTC+0100 Foo Bar <foo.bar@foobar.org>
*/
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

View File

@@ -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 \

View File

@@ -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) \

View File

@@ -0,0 +1,131 @@
/*
* $Id$
*/
/*
* Harbour Project source code:
*
* Copyright 2004 Peter Rees <peter@rees.co.nz>
* 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 )

View File

@@ -0,0 +1,193 @@
/*
* $Id$
*/
/*
* Harbour Project source code:
*
* Copyright 2004 Peter Rees <peter@rees.co.nz>
* 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 );
}