From ce6bbc930c1a490f6cda00e8e276b659a5a603dd Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Wed, 11 Feb 2009 19:41:19 +0000 Subject: [PATCH] 2009-02-11 20:40 UTC+0100 Viktor Szakats (harbour.01 syenar hu) * source/rtl/binnumx.c * Added rewritten versions of these functions: a proper license: BIN2U(), W2BIN(), U2BIN() ; Work of Przemek. * source/rtl/binnum.c ! Readded old copyright holder as co-holder. --- harbour/ChangeLog | 9 +++++ harbour/source/rtl/binnum.c | 1 + harbour/source/rtl/binnumx.c | 74 ++++++++++++------------------------ 3 files changed, 34 insertions(+), 50 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index fa292cf9e6..87e9523f5f 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,15 @@ 2009-12-31 13:59 UTC+0100 Foo Bar (foo.bar foobar.org) */ +2009-02-11 20:40 UTC+0100 Viktor Szakats (harbour.01 syenar hu) + * source/rtl/binnumx.c + * Added rewritten versions of these functions: + a proper license: BIN2U(), W2BIN(), U2BIN() + ; Work of Przemek. + + * source/rtl/binnum.c + ! Readded old copyright holder as co-holder. + 2009-02-11 20:05 UTC+0100 Viktor Szakats (harbour.01 syenar hu) * COPYING * doc/license.txt diff --git a/harbour/source/rtl/binnum.c b/harbour/source/rtl/binnum.c index 378eff6802..407a82d39f 100644 --- a/harbour/source/rtl/binnum.c +++ b/harbour/source/rtl/binnum.c @@ -7,6 +7,7 @@ * BIN2W(), BIN2I(), BIN2L(), I2BIN(), L2BIN() functions * * Copyright 2009 Przemyslaw Czerpak + * Copyright 1999 Manuel Ruiz * www - http://www.harbour-project.org * * This program is free software; you can redistribute it and/or modify diff --git a/harbour/source/rtl/binnumx.c b/harbour/source/rtl/binnumx.c index afb933c4b0..f1aeab774f 100644 --- a/harbour/source/rtl/binnumx.c +++ b/harbour/source/rtl/binnumx.c @@ -6,6 +6,7 @@ * Harbour Project source code: * BIN2U(), W2BIN(), U2BIN() functions * + * Copyright 2009 Przemyslaw Czerpak * Copyright 1999-2001 Viktor Szakats * www - http://www.harbour-project.org * @@ -52,72 +53,45 @@ /* NOTE: Xbase++ compatible functions */ +#ifdef HB_COMPAT_XPP + #include "hbapi.h" #include "hbapiitm.h" -#ifdef HB_COMPAT_XPP - HB_FUNC( BIN2U ) { PHB_ITEM pItem = hb_param( 1, HB_IT_STRING ); + UINT32 uiResult = 0; if( pItem ) { - char * pszString = hb_itemGetCPtr( pItem ); ULONG ulLen = hb_itemGetCLen( pItem ); - - hb_retnint( HB_MKULONG( ( ulLen >= 1 ) ? ( BYTE ) pszString[ 0 ] : 0, - ( ulLen >= 2 ) ? ( BYTE ) pszString[ 1 ] : 0, - ( ulLen >= 3 ) ? ( BYTE ) pszString[ 2 ] : 0, - ( ulLen >= 4 ) ? ( BYTE ) pszString[ 3 ] : 0 ) ); + if( ulLen ) + { + const char * pszString = hb_itemGetCPtr( pItem ); + if( ulLen >= 3 ) + iResult = HB_GET_LE_UINT32( pszString ); + else + iResult = HB_GET_LE_UINT16( pszString ); + } } - else - hb_retnl( 0 ); -} - -HB_FUNC( W2BIN ) -{ - char szString[ 2 ]; - - if( ISNUM( 1 ) ) - { - USHORT uiValue = ( USHORT ) hb_parni( 1 ); - - szString[ 0 ] = ( uiValue & 0x00FF ); - szString[ 1 ] = ( uiValue & 0xFF00 ) >> 8; - } - else - { - szString[ 0 ] = - szString[ 1 ] = '\0'; - } - - hb_retclen( szString, 2 ); + hb_retnint( uiResult ); } HB_FUNC( U2BIN ) { - char szString[ 4 ]; + char szResult[ 4 ]; + UINT32 iValue = ( UINT32 ) hb_parnint( 1 ); + HB_PUT_LE_UINT32( szResult, iValue ); + hb_retclen( szResult, 4 ); +} - if( ISNUM( 1 ) ) - { - ULONG ulValue = ( ULONG ) hb_parnl( 1 ); - - szString[ 0 ] = ( char ) ( ulValue & 0x000000FF ); - szString[ 1 ] = ( char ) ( ( ulValue & 0x0000FF00 ) >> 8 ); - szString[ 2 ] = ( char ) ( ( ulValue & 0x00FF0000 ) >> 16 ); - szString[ 3 ] = ( char ) ( ( ulValue & 0xFF000000 ) >> 24 ); - } - else - { - szString[ 0 ] = - szString[ 1 ] = - szString[ 2 ] = - szString[ 3 ] = '\0'; - } - - hb_retclen( szString, 4 ); +HB_FUNC( W2BIN ) +{ + char szResult[ 2 ]; + UINT16 uiValue = ( UINT16 ) hb_parni( 1 ); + HB_PUT_LE_UINT16( szResult, uiValue ); + hb_retclen( szResult, 4 ); } #endif -