diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 26f3e36a7d..e120872b6f 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -1,3 +1,16 @@ +20000301-14:34 GMT+1 Victor Szakats + * source/rtl/console.c + source/rtl/oldclear.c + % Removed more non-GTAPI branches. + * source/rtl/tgetlist.prg + % One FUNCTION converted to PROCEDURE + * source/rtl/setfunc.prg + * NOTE made more clear. + * source/rtl/setkey.prg + * Changed to three chars indentation + * source/rtl/arrays.c + * Minor change in comment. + 20000301-10:15 GMT+2 Chen Kedem * doc/en/ARRAY.TXT * doc/en/BINNUM.TXT diff --git a/harbour/source/rtl/arrays.c b/harbour/source/rtl/arrays.c index 6364039b56..cc5dbeaf7c 100644 --- a/harbour/source/rtl/arrays.c +++ b/harbour/source/rtl/arrays.c @@ -760,10 +760,6 @@ PHB_ITEM hb_arrayClone( PHB_ITEM pSrcArray ) return pDstArray; } -/* - * HARBOUR - */ - /* This function creates an array item using 'iDimension' as an index * to retrieve the number of elements from the parameter list. */ @@ -787,6 +783,10 @@ static void hb_arrayNewRagged( PHB_ITEM pArray, int iDimension ) } } +/* + * HARBOUR + */ + HARBOUR HB_ARRAY( void ) { int iPCount = hb_pcount(); @@ -994,6 +994,7 @@ HARBOUR HB_ACLONE( void ) if( pSrcArray && ! hb_arrayIsObject( pSrcArray ) ) { PHB_ITEM pDstArray = hb_arrayClone( pSrcArray ); + hb_itemReturn( pDstArray ); /* AClone() returns the new array */ hb_itemRelease( pDstArray ); } diff --git a/harbour/source/rtl/console.c b/harbour/source/rtl/console.c index 1028a64566..cfabe73ee0 100644 --- a/harbour/source/rtl/console.c +++ b/harbour/source/rtl/console.c @@ -42,8 +42,8 @@ * * Copyright 1999 David G. Holm * adjust_pos(), hb_altout(), hb_devout(), HB_DEVOUT(), hb_devpos(), - * HB_DEVPOS(), hb_dispout(), HB___EJECT(), hb_max_col(), HB_MAXCOL(), - * hb_max_row(), HB_MAXROW(), hb_out(), hb_outerr(), HB_OUTERR(), + * HB_DEVPOS(), hb_dispout(), HB___EJECT(), HB_MAXCOL(), + * HB_MAXROW(), hb_out(), hb_outerr(), HB_OUTERR(), * hb_outstd(), HB_OUTSTD(), HB_PCOL(), HB_PROW(), hb_setpos(), * HB_SETPOS(), HB_SETPRC(), HB_SCROLL(), and hb_consoleInitialize() * @@ -163,9 +163,7 @@ void hb_consoleRelease( void ) s_szCrLf[ 0 ] = HB_CHAR_LF; s_szCrLf[ 1 ] = '\0'; -#ifdef HARBOUR_USE_GTAPI hb_gtExit(); -#endif s_bInit = FALSE; } @@ -182,43 +180,18 @@ HARBOUR HB_HB_OSNEWLINE( void ) hb_retc( s_szCrLf ); } -USHORT hb_max_row( void ) -{ - HB_TRACE(HB_TR_DEBUG, ("hb_max_row()")); - -#ifdef HARBOUR_USE_GTAPI - return hb_gtMaxRow(); -#else - #if defined(HB_OS_UNIX_COMPATIBLE) - return 23; - #else - return 24; - #endif -#endif -} - -USHORT hb_max_col( void ) -{ - HB_TRACE(HB_TR_DEBUG, ("hb_max_col()")); - -#ifdef HARBOUR_USE_GTAPI - return hb_gtMaxCol(); -#else - return 79; -#endif -} - #ifndef HARBOUR_USE_GTAPI -static void adjust_pos( char * pStr, ULONG ulLen, SHORT * row, SHORT * col, USHORT max_row, USHORT max_col ) +static void adjust_pos( char * pStr, ULONG ulLen, SHORT * row, SHORT * col ) { + USHORT max_row = hb_gtMaxRow(); + USHORT max_col = hb_gtMaxCol(); ULONG ulCount; - char * pPtr = pStr; - HB_TRACE(HB_TR_DEBUG, ("adjust_pos(%s, %lu, %p, %p, %hu, %hu)", pStr, ulLen, row, col, max_row, max_col)); + HB_TRACE(HB_TR_DEBUG, ("adjust_pos(%s, %lu, %p, %p)", pStr, ulLen, row, col)); for( ulCount = 0; ulCount < ulLen; ulCount++ ) { - switch( *pPtr++ ) + switch( *pStr++ ) { case HB_CHAR_BEL: break; @@ -283,18 +256,16 @@ void hb_outstd( char * pStr, ULONG ulLen ) if( ulLen == 0 ) ulLen = strlen( pStr ); -#ifdef HARBOUR_USE_GTAPI if( s_bInit ) hb_gtPreExt(); -#endif user_ferror = hb_fsError(); /* Save current user file error code */ hb_fsWriteLarge( s_iFilenoStdout, ( BYTE * ) pStr, ulLen ); hb_fsSetError( user_ferror ); /* Restore last user file error code */ -#ifdef HARBOUR_USE_GTAPI if( s_bInit ) { +#ifdef HARBOUR_USE_GTAPI #ifndef __CYGWIN__ if( isatty( s_iFilenoStdout ) ) #endif @@ -303,11 +274,11 @@ void hb_outstd( char * pStr, ULONG ulLen ) s_iDevCol = hb_gt_Col(); hb_gtSetPos( s_iDevRow, s_iDevCol ); } +#else + adjust_pos( pStr, ulLen, &s_iDevRow, &s_iDevCol ); +#endif hb_gtPostExt(); } -#else - adjust_pos( pStr, ulLen, &s_iDevRow, &s_iDevCol, hb_max_row(), hb_max_col() ); -#endif } /* Output an item to STDERR */ @@ -320,18 +291,16 @@ void hb_outerr( char * pStr, ULONG ulLen ) if( ulLen == 0 ) ulLen = strlen( pStr ); -#ifdef HARBOUR_USE_GTAPI if( s_bInit ) hb_gtPreExt(); -#endif user_ferror = hb_fsError(); /* Save current user file error code */ hb_fsWriteLarge( s_iFilenoStderr, ( BYTE * ) pStr, ulLen ); hb_fsSetError( user_ferror ); /* Restore last user file error code */ -#ifdef HARBOUR_USE_GTAPI if( s_bInit ) { +#ifdef HARBOUR_USE_GTAPI #ifndef __CYGWIN__ if( isatty( s_iFilenoStdout ) ) #endif @@ -340,11 +309,11 @@ void hb_outerr( char * pStr, ULONG ulLen ) s_iDevCol = hb_gt_Col(); hb_gtSetPos( s_iDevRow, s_iDevCol ); } +#else + adjust_pos( pStr, ulLen, &s_iDevRow, &s_iDevCol ); +#endif hb_gtPostExt(); } -#else - adjust_pos( pStr, ulLen, &s_iDevRow, &s_iDevCol, hb_max_row(), hb_max_col() ); -#endif } /* Output an item to the screen and/or printer and/or alternate */ @@ -361,7 +330,7 @@ static void hb_altout( char * pStr, ULONG ulLen ) USHORT user_ferror = hb_fsError(); /* Save current user file error code */ hb_fsWriteLarge( s_iFilenoStdout, ( BYTE * ) pStr, ulLen ); hb_fsSetError( user_ferror ); /* Restore last user file error code */ - adjust_pos( pStr, ulLen, &s_iDevRow, &s_iDevCol, hb_max_row(), hb_max_col() ); + adjust_pos( pStr, ulLen, &s_iDevRow, &s_iDevCol ); #endif } @@ -414,7 +383,7 @@ static void hb_devout( char * pStr, ULONG ulLen ) USHORT user_ferror = hb_fsError(); /* Save current user file error code */ hb_fsWriteLarge( s_iFilenoStdout, ( BYTE * ) pStr, ulLen ); hb_fsSetError( user_ferror ); /* Restore last user file error code */ - adjust_pos( pStr, ulLen, &s_iDevRow, &s_iDevCol, hb_max_row(), hb_max_col() ); + adjust_pos( pStr, ulLen, &s_iDevRow, &s_iDevCol ); #endif } } @@ -435,7 +404,7 @@ static void hb_dispout( char * pStr, ULONG ulLen ) user_ferror = hb_fsError(); /* Save current user file error code */ hb_fsWriteLarge( s_iFilenoStdout, ( BYTE * ) pStr, ulLen ); hb_fsSetError( user_ferror ); /* Restore last user file error code */ - adjust_pos( pStr, ulLen, &s_iDevRow, &s_iDevCol, hb_max_row(), hb_max_col() ); + adjust_pos( pStr, ulLen, &s_iDevRow, &s_iDevCol ); #endif } @@ -566,14 +535,12 @@ HARBOUR HB_SETPOS( void ) /* Sets the screen position */ /* Move the screen position to the right by one column */ HARBOUR HB_SETPOSBS( void ) { -#ifdef HARBOUR_USE_GTAPI SHORT iRow, iCol; /* NOTE: Clipper does no checks about reaching the border or anything. [vszakats] */ hb_gtGetPos( &iRow, &iCol ); hb_gtSetPos( iRow, iCol + 1 ); -#endif } HARBOUR HB_DEVPOS( void ) /* Sets the screen and/or printer position */ @@ -586,7 +553,6 @@ HARBOUR HB_DEVOUT( void ) /* writes a single value to the current device (screen { if( hb_pcount() >= 1 ) { -#ifdef HARBOUR_USE_GTAPI if( ISCHAR( 2 ) ) { char szOldColor[ CLR_STRLEN ]; @@ -600,9 +566,6 @@ HARBOUR HB_DEVOUT( void ) /* writes a single value to the current device (screen } else hb_out( 1, hb_devout ); -#else - hb_out( 1, hb_devout ); -#endif } } @@ -610,7 +573,6 @@ HARBOUR HB_DISPOUT( void ) /* writes a single value to the screen, but is not af { if( hb_pcount() >= 1 ) { -#ifdef HARBOUR_USE_GTAPI if( ISCHAR( 2 ) ) { char szOldColor[ CLR_STRLEN ]; @@ -624,9 +586,6 @@ HARBOUR HB_DISPOUT( void ) /* writes a single value to the screen, but is not af } else hb_out( 1, hb_dispout ); -#else - hb_out( 1, hb_devout ); -#endif } } @@ -639,7 +598,6 @@ HARBOUR HB_DISPOUTAT( void ) /* writes a single value to the screen at speficic /* NOTE: Clipper does no checks here. [vszakats] */ hb_setpos( hb_parni( 1 ), hb_parni( 2 ) ); -#ifdef HARBOUR_USE_GTAPI if( ISCHAR( 4 ) ) { char szOldColor[ CLR_STRLEN ]; @@ -653,9 +611,6 @@ HARBOUR HB_DISPOUTAT( void ) /* writes a single value to the screen at speficic } else hb_out( 3, hb_dispout ); -#else - hb_out( 3, hb_devout ); -#endif } } @@ -693,8 +648,8 @@ HARBOUR HB_SCROLL( void ) /* Scrolls a screen region (requires the GT API) */ { USHORT top, left, bottom, right; - int iMR = hb_max_row(); - int iMC = hb_max_col(); + int iMR = hb_gtMaxRow(); + int iMC = hb_gtMaxCol(); int i_top = ISNUM( 1 ) ? hb_parni( 1 ) : 0; int i_left = ISNUM( 2 ) ? hb_parni( 2 ) : 0; @@ -736,12 +691,12 @@ HARBOUR HB_SCROLL( void ) /* Scrolls a screen region (requires the GT API) */ HARBOUR HB_MAXROW( void ) /* Return the maximum screen row number (zero origin) */ { - hb_retni( hb_max_row() ); + hb_retni( hb_gtMaxRow() ); } HARBOUR HB_MAXCOL( void ) /* Return the maximum screen column number (zero origin) */ { - hb_retni( hb_max_col() ); + hb_retni( hb_gtMaxCol() ); } HARBOUR HB_ROW( void ) /* Return the current screen row position (zero origin) */ @@ -800,10 +755,10 @@ HARBOUR HB_DISPBOX( void ) if( i_left < 0 ) left = 0; else left = ( USHORT ) i_left; if( i_bottom < 0 ) bottom = 0; else bottom = ( USHORT ) i_bottom; if( i_right < 0 ) right = 0; else right = ( USHORT ) i_right; - if( top > hb_max_row() ) top = hb_max_row(); - if( left > hb_max_col() ) left = hb_max_col(); - if( bottom > hb_max_row() ) bottom = hb_max_row(); - if( right > hb_max_col() ) right = hb_max_col(); + if( top > hb_gtMaxRow() ) top = hb_gtMaxRow(); + if( left > hb_gtMaxCol() ) left = hb_gtMaxCol(); + if( bottom > hb_gtMaxRow() ) bottom = hb_gtMaxRow(); + if( right > hb_gtMaxCol() ) right = hb_gtMaxCol(); /* Force the box to be drawn from top left to bottom right */ if( top > bottom ) diff --git a/harbour/source/rtl/oldclear.c b/harbour/source/rtl/oldclear.c index 37861b094b..548cc2c04b 100644 --- a/harbour/source/rtl/oldclear.c +++ b/harbour/source/rtl/oldclear.c @@ -37,20 +37,16 @@ HARBOUR HB___ATCLEAR( void ) { -#ifdef HARBOUR_USE_GTAPI if( hb_pcount() == 4 ) { hb_gtSetPos( hb_parni( 1 ), hb_parni( 2 ) ); hb_gtScroll( hb_parni( 1 ), hb_parni( 2 ), hb_parni( 3 ), hb_parni( 4 ), 0, 0 ); } -#endif } HARBOUR HB___CLEAR( void ) { -#ifdef HARBOUR_USE_GTAPI hb_gtScroll( 0, 0, hb_gtMaxRow(), hb_gtMaxCol(), 0, 0 ); hb_gtSetPos( 0, 0 ); -#endif } diff --git a/harbour/source/rtl/setfunc.prg b/harbour/source/rtl/setfunc.prg index 8321a165b8..683a1889f8 100644 --- a/harbour/source/rtl/setfunc.prg +++ b/harbour/source/rtl/setfunc.prg @@ -38,7 +38,8 @@ PROCEDURE __SetFunction( nFunctionKey, cString ) - /* NOTE: CA-Cl*pper will not handle F11 and F12 here. */ + /* NOTE: CA-Cl*pper will not handle F11 and F12 here. + This is a Harbour extension. [vszakats] */ DO CASE CASE nFunctionKey == 1 ; nFunctionKey := K_F1 diff --git a/harbour/source/rtl/setkey.prg b/harbour/source/rtl/setkey.prg index cacd6ff3a7..00576b4d63 100644 --- a/harbour/source/rtl/setkey.prg +++ b/harbour/source/rtl/setkey.prg @@ -36,10 +36,10 @@ /* * ChangeLog: * - * V 1.1 A White Fixed wrong parameter aClone() bug in SetKeySave() - * Added SetKeyCheck() - * Added SetKeyGet() - * V 1.0 A White Initial version, submitted to Harbour Projects + * V 1.1 A White Fixed wrong parameter aClone() bug in SetKeySave() + * Added SetKeyCheck() + * Added SetKeyGet() + * V 1.0 A White Initial version, submitted to Harbour Projects * */ @@ -50,102 +50,106 @@ #define BLOCK 2 #define CONDITION 3 -static s_aSetKeys := {} // holds array of hot-key id, code-block, activation-block +// holds array of hot-key id, code-block, activation-block +static s_aSetKeys := {} Function SetKey( anKey, bBlock, bCondition ) - local nFound, bReturn, aKey - - if ISARRAY( anKey ) - aEval( anKey, {|x| setKey( x, bBlock, bCondition ) } ) - - elseif ISNUMBER( anKey ) .and. anKey <> 0 - if ( nFound := aScan( s_aSetKeys, {|x| x[ KEY ] == anKey } ) ) == 0 - if ISBLOCK( bBlock ) - aAdd( s_aSetKeys, { anKey, bBlock, bCondition } ) + local nFound + local bReturn + local aKey + + if ISARRAY( anKey ) + aEval( anKey, {|x| setKey( x, bBlock, bCondition ) } ) + + elseif ISNUMBER( anKey ) .and. anKey <> 0 + if ( nFound := aScan( s_aSetKeys, {|x| x[ KEY ] == anKey } ) ) == 0 + if ISBLOCK( bBlock ) + aAdd( s_aSetKeys, { anKey, bBlock, bCondition } ) + + endif + + else + aKey := s_aSetKeys[ nFound ] + + if aKey[ CONDITION ] == NIL .or. eval( aKey[ CONDITION ], anKey ) + bReturn := aKey[ BLOCK ] + endif + + if ISBLOCK( bBlock ) + aKey[ BLOCK ] := bBlock + aKey[ CONDITION ] := bCondition + + elseif pcount() > 1 .and. bBlock == NIL + aSize( aDel( s_aSetKeys, nFound ), len( s_aSetKeys ) - 1 ) + + endif + endif - - else - aKey := s_aSetKeys[ nFound ] - - if aKey[ CONDITION ] == NIL .or. eval( aKey[ CONDITION ], anKey ) - bReturn := aKey[ BLOCK ] - - endif - - if ISBLOCK( bBlock ) - aKey[ BLOCK ] := bBlock - aKey[ CONDITION ] := bCondition - - elseif pcount() > 1 .and. bBlock == NIL - aSize( aDel( s_aSetKeys, nFound ), len( s_aSetKeys ) - 1 ) - - endif - - endif - - endif + + endif return bReturn - Function HB_SetKeyGet( nKey, bCondition ) - local nFound + local nFound + + if ISNUMBER( nKey ) .and. nKey <> 0 + if ( nFound := aScan( s_aSetKeys, {|x| x[ KEY ] == nKey } ) ) == 0 + bCondition := NIL + + else + bCondition := s_aSetKeys[ nFound, CONDITION ] + return s_aSetKeys[ nFound, BLOCK ] + + endif + + endif - if ISNUMBER( nKey ) .and. nKey <> 0 - if ( nFound := aScan( s_aSetKeys, {|x| x[ KEY ] == nKey } ) ) == 0 - bCondition := NIL - - else - bCondition := s_aSetKeys[ nFound, CONDITION ] - return s_aSetKeys[ nFound, BLOCK ] - - endif - - endif - -return NIL //bReturn +return NIL Function HB_SetKeySave( OldKeys ) - local aReturn := aClone( s_aSetKeys ) - - if pcount() != 0 .or. ISARRAY( OldKeys ) - if OldKeys == NIL - s_aSetKeys := {} - - else - s_aSetKeys := aClone( OldKeys ) - - endif - - endif + local aReturn := aClone( s_aSetKeys ) + + if pcount() != 0 .or. ISARRAY( OldKeys ) + if OldKeys == NIL + s_aSetKeys := {} + + else + s_aSetKeys := aClone( OldKeys ) + + endif + + endif return aReturn Function HB_SetKeyCheck( nKey, p1, p2, p3 ) - local nFound, aKey, bBlock - - if ( nFound := aScan( s_aSetKeys, {|x| x[ KEY ] == nKey } ) ) > 0 - aKey := s_aSetKeys[ nFound ] - bBLock := aKey[ BLOCK ] - - if aKey[ CONDITION ] == NIL .or. eval( aKey[ CONDITION ], nKey ) - - // is this overkill? if a code-block checks its own pcount(), - // passing nil parameters would skew the count! - - do case - case pcount() == 1 ; eval( bBlock, nKey ) - case pcount() == 2 ; eval( bBlock, p1, nKey ) - case pcount() == 3 ; eval( bBlock, p1, p2, nKey ) - otherwise ; eval( bBlock, p1, p2, p3, nKey ) - end case - - return .t. - - endif - - endif + local nFound + local aKey + local bBlock + + if ( nFound := aScan( s_aSetKeys, {|x| x[ KEY ] == nKey } ) ) > 0 + aKey := s_aSetKeys[ nFound ] + bBLock := aKey[ BLOCK ] + + if aKey[ CONDITION ] == NIL .or. eval( aKey[ CONDITION ], nKey ) + + // is this overkill? if a code-block checks its own pcount(), + // passing nil parameters would skew the count! + + do case + case pcount() == 1 ; eval( bBlock, nKey ) + case pcount() == 2 ; eval( bBlock, p1, nKey ) + case pcount() == 3 ; eval( bBlock, p1, p2, nKey ) + otherwise ; eval( bBlock, p1, p2, p3, nKey ) + end case + + return .t. + + endif + + endif return .f. diff --git a/harbour/source/rtl/tgetlist.prg b/harbour/source/rtl/tgetlist.prg index c58d9faf63..efe1b717a0 100644 --- a/harbour/source/rtl/tgetlist.prg +++ b/harbour/source/rtl/tgetlist.prg @@ -659,11 +659,11 @@ function Updated() return .f. -function GetApplyKey( oGet, nKey ) +procedure GetApplyKey( oGet, nKey ) if s_oGetListActive != nil s_oGetListActive:oGet := oGet s_oGetListActive:GetApplyKey( nKey ) endif -return nil +return