diff --git a/harbour/ChangeLog b/harbour/ChangeLog index b5fc81aa2d..fe545a5b18 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -17,6 +17,22 @@ past entries belonging to author(s): Viktor Szakats. */ +2009-07-30 00:43 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) + * include/hbextern.ch + * source/rtl/dateshb.c + + Added HB_UTCOFFSET() -> core function to return UTC offset + as signed number in seconds. + + * contrib/hbwin/win_misc.c + + Copied WIN_SYSREFRESH() from httpsrv. Bit reworked (types, goto, + 64-bit compatibility, unnecessary outer loop), pls review. + + * examples/httpsrv/uhttpd.hbp + - examples/httpsrv/uhttpdc.c + * examples/httpsrv/uhttpd.prg + * HB_UTCOFFSET() renamed to UHTTPD_UTCOFFSET() and rewritten as .prg. + ! Using __PLATFORM__WINDOWS to enable WIN_SYSREFRESH() calls. + 2009-07-29 23:46 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) * include/hbdate.h * source/common/hbdate.c diff --git a/harbour/contrib/hbwin/win_misc.c b/harbour/contrib/hbwin/win_misc.c index 441d91a775..eba1a49e53 100644 --- a/harbour/contrib/hbwin/win_misc.c +++ b/harbour/contrib/hbwin/win_misc.c @@ -50,6 +50,17 @@ * */ +/* + * The following parts are Copyright of the individual authors. + * www - http://www.harbour-project.org + * + * Copyright 2009 Francesco Saverio Giudice + * WIN_SYSREFRESH() + * + * See COPYING for licensing terms. + * + */ + #define HB_OS_WIN_USED #include "hbapi.h" @@ -239,3 +250,55 @@ HB_FUNC( WIN_HIWORD ) { hb_retni( ( int ) HIWORD( ( DWORD ) hb_parnl( 1 ) ) ); } + +HB_FUNC( WIN_SYSREFRESH ) +{ + DWORD dwMsec = ( DWORD ) hb_parnl( 1 ); + + HANDLE hDummyEvent = CreateEvent( NULL, FALSE, FALSE, NULL ); + + /* Begin the operation and continue until it is complete + or until the user clicks the mouse or presses a key. */ + + if( MsgWaitForMultipleObjects( 1, &hDummyEvent, FALSE, ( dwMsec == 0 ? INFINITE : dwMsec ), QS_ALLINPUT | QS_ALLPOSTMESSAGE ) == WAIT_OBJECT_0 + 1 ) + { + MSG msg; + + while( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) ) + { + switch( msg.message ) + { + case WM_CLOSE: + { + CloseHandle( hDummyEvent ); + hb_retni( 1 ); + return; + } + case WM_QUIT: + { + CloseHandle( hDummyEvent ); + hb_retnint( msg.wParam ); + return; + } +#if 0 + case WM_LBUTTONDOWN: + case WM_RBUTTONDOWN: + case WM_KEYDOWN: + case WM_LBUTTONUP: + case WM_RBUTTONUP: + case WM_KEYUP: + /* Perform any required cleanup. */ + break; + /* exit; */ + +#endif + default: + TranslateMessage( &msg ); + DispatchMessage( &msg ); + } + } + } + + CloseHandle( hDummyEvent ); + hb_retni( 0 ); +} diff --git a/harbour/examples/httpsrv/uhttpd.hbp b/harbour/examples/httpsrv/uhttpd.hbp index a103066402..1ce9b0bf29 100644 --- a/harbour/examples/httpsrv/uhttpd.hbp +++ b/harbour/examples/httpsrv/uhttpd.hbp @@ -5,4 +5,6 @@ # Use -DUSE_HB_INET if you want to turn on Harbour internet socket. # It's always on on non-Windows systems. --mt -gui uhttpd.prg cgifunc.prg cookie.prg session.prg uhttpdc.c socket.c +-mt -gui uhttpd.prg cgifunc.prg cookie.prg session.prg socket.c + +-l{win}hbwin diff --git a/harbour/examples/httpsrv/uhttpd.prg b/harbour/examples/httpsrv/uhttpd.prg index 5750e65f85..17f6e9d49e 100644 --- a/harbour/examples/httpsrv/uhttpd.prg +++ b/harbour/examples/httpsrv/uhttpd.prg @@ -607,7 +607,7 @@ FUNCTION MAIN( ... ) DO WHILE .T. -#ifdef USE_WIN_ADDONS +#ifdef __PLATFORM__WINDOWS // windows resource releasing - 1 millisecond wait IF WIN_SYSREFRESH( 1 ) != 0 EXIT @@ -754,7 +754,7 @@ STATIC FUNCTION AcceptConnections() // reset socket hSocket := NIL -#ifdef USE_WIN_ADDONS +#ifdef __PLATFORM__WINDOWS // releasing resources IF WIN_SYSREFRESH( 1 ) != 0 lQuitRequest := TRUE @@ -902,7 +902,7 @@ STATIC FUNCTION ProcessConnection() // Reset socket hSocket := NIL -#ifdef USE_WIN_ADDONS +#ifdef __PLATFORM__WINDOWS // releasing resources IF WIN_SYSREFRESH( 1 ) != 0 lQuitRequest := TRUE @@ -1065,7 +1065,7 @@ STATIC FUNCTION ServiceConnection() // Reset socket hSocket := NIL -#ifdef USE_WIN_ADDONS +#ifdef __PLATFORM__WINDOWS // releasing resources IF WIN_SYSREFRESH( 1 ) != 0 lQuitRequest := TRUE @@ -1505,7 +1505,7 @@ STATIC PROCEDURE WriteToLog( cRequest ) cDate := DTOS( dDate ) nSize := LEN( t_cResult ) cReferer := _SERVER[ "HTTP_REFERER" ] - cBias := hb_UTCOffset() + cBias := uhttpd_UTCOffset() cAccess := _SERVER[ "REMOTE_ADDR" ] + " - - [" + RIGHT( cDate, 2 ) + "/" + ; aMonths[ VAL( SUBSTR( cDate, 5, 2 ) ) ] + ; @@ -2935,3 +2935,9 @@ STATIC FUNCTION GT_notifier( nEvent, xParams ) HB_SYMBOL_UNUSED( xParams ) RETURN nReturn + +STATIC FUNCTION UHTTPD_UTCOFFSET() + LOCAL nOffset := HB_UTCOFFSET() + RETURN iif( nOffset < 0, "-", "+" ) +; + StrZero( nOffset / 3600, 2, 0 ) +; + StrZero( ( nOffset % 3600 ) / 60, 2, 0 ) diff --git a/harbour/examples/httpsrv/uhttpdc.c b/harbour/examples/httpsrv/uhttpdc.c deleted file mode 100644 index 2fb2e3e6e3..0000000000 --- a/harbour/examples/httpsrv/uhttpdc.c +++ /dev/null @@ -1,153 +0,0 @@ -/* - * $Id$ - */ - -/* - * Harbour Project source code: - * uHTTPD (Micro HTTP server) [C helper functions] - * - * Copyright 2009 Francesco Saverio Giudice - * Copyright 2008 Mindaugas Kavaliauskas (dbtopas at dbtopas.lt) - * www - http://www.harbour-project.org - * - * Credits: - * Based on first version posted from Mindaugas Kavaliauskas on - * developers NG on December 15th, 2008 whom give my thanks to have - * shared initial work. - * Francesco. - * - * 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 "hbdate.h" - -#if !defined( HB_OS_WIN ) - #include -#endif - -#if defined( HB_OS_WIN ) - -BOOL win_SysRefresh( int iMsec ) -{ - int iQuit = ( int ) FALSE; - - HANDLE hDummyEvent = CreateEvent( NULL, FALSE, FALSE, NULL ); - - /* Begin the operation and continue until it is complete - or until the user clicks the mouse or presses a key. */ - - while( MsgWaitForMultipleObjects( 1, &hDummyEvent, FALSE, ( iMsec == 0 ? INFINITE : ( ULONG ) iMsec ), QS_ALLINPUT | QS_ALLPOSTMESSAGE ) == WAIT_OBJECT_0 + 1 ) - { - MSG msg; - - while( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) ) - { - switch( msg.message ) - { - case WM_CLOSE: - { - iQuit = 1; - goto stopLoop; - } - case WM_QUIT: - { - iQuit = ( int ) msg.wParam; - goto stopLoop; - } -#if 0 - case WM_LBUTTONDOWN: - case WM_RBUTTONDOWN: - case WM_KEYDOWN: - case WM_LBUTTONUP: - case WM_RBUTTONUP: - case WM_KEYUP: - /* Perform any required cleanup. */ - break; - /* exit; */ - -#endif - default: - TranslateMessage( &msg ); - DispatchMessage( &msg ); - } - } - - if( ! iQuit ) - { - goto stopLoop; - } - } - -stopLoop: - - CloseHandle( hDummyEvent ); - - return iQuit; -} - -HB_FUNC( WIN_SYSREFRESH ) -{ - hb_retni( win_SysRefresh( hb_parni( 1 ) ) ); -} - -#else - -HB_FUNC( WIN_SYSREFRESH ) -{ - hb_retni( ( int ) FALSE ); -} - -#endif - -HB_FUNC( HB_UTCOFFSET ) -{ - char szRet[ 6 ]; - long offset = hb_timeUTCOffset(); - - hb_snprintf( szRet, sizeof( szRet ), "%+03d%02d", - ( int ) ( offset / 3600 ), - ( int ) ( ( offset % 3600 ) / 60 ) ); - - hb_retc( szRet ); -} diff --git a/harbour/include/hbextern.ch b/harbour/include/hbextern.ch index 57cfda8101..2f97438adc 100644 --- a/harbour/include/hbextern.ch +++ b/harbour/include/hbextern.ch @@ -885,6 +885,7 @@ EXTERNAL HB_STRTOTS EXTERNAL HB_HOUR EXTERNAL HB_MINUTE EXTERNAL HB_SEC +EXTERNAL HB_UTCOFFSET EXTERNAL HB_IDLEADD EXTERNAL HB_IDLEDEL diff --git a/harbour/source/rtl/dateshb.c b/harbour/source/rtl/dateshb.c index d4fed8508f..4ca25717ca 100644 --- a/harbour/source/rtl/dateshb.c +++ b/harbour/source/rtl/dateshb.c @@ -427,3 +427,8 @@ HB_FUNC( HB_STRTOTS ) else hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); } + +HB_FUNC( HB_UTCOFFSET ) +{ + hb_retnl( hb_timeUTCOffset() ); +}