2009-12-06 18:47 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)

* src/rdd/dbcmd.c
    + Added short DBUSEAREA() parameter list doc in comment.

  * contrib/hbide/hbide.hbp
  - contrib/hbide/freadlin.c
  * contrib/hbide/idemisc.prg
    % Elminated HB_FREADLINE().
    % Highly optimized MEMOTOARRAY().
    % Using FOR EACH in PARSEWITHMETADATA(), APPLYMETADATA().
    ! -1 -> F_ERROR
    - Deleted #include "hbqt.ch". Not needed.
    * Minor formatting.
This commit is contained in:
Viktor Szakats
2009-12-06 17:48:12 +00:00
parent 9e7e433a1a
commit 047e8eb9e3
5 changed files with 40 additions and 276 deletions

View File

@@ -17,6 +17,20 @@
past entries belonging to author(s): Viktor Szakats.
*/
2009-12-06 18:47 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
* src/rdd/dbcmd.c
+ Added short DBUSEAREA() parameter list doc in comment.
* contrib/hbide/hbide.hbp
- contrib/hbide/freadlin.c
* contrib/hbide/idemisc.prg
% Elminated HB_FREADLINE().
% Highly optimized MEMOTOARRAY().
% Using FOR EACH in PARSEWITHMETADATA(), APPLYMETADATA().
! -1 -> F_ERROR
- Deleted #include "hbqt.ch". Not needed.
* Minor formatting.
2009-12-06 18:35 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/contrib/hbtpathy/tpunix.c
! fixed tty raw IO mode setting

View File

@@ -1,241 +0,0 @@
/*
* $Id$
*/
/*
* xHarbour Project source code:
* Text file reading functions
*
* Copyright 2003 Marcelo Lombardo - lombardo@uol.com.br
* http://www.xharbour.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.
*
*/
#include "hbapi.h"
#include "hbapifs.h"
#include "hbset.h"
#include "hbapiitm.h"
#include "hbapierr.h"
#define READING_BLOCK 4096
char * hb_fsReadLine( HB_FHANDLE hFileHandle, LONG * plBuffLen, const char ** Term, int * iTermSizes, USHORT iTerms, BOOL * bFound, BOOL * bEOF )
{
USHORT uiPosTerm = 0, iPos, uiPosition;
USHORT nTries;
LONG lRead = 0, lOffset, lSize;
char * pBuff;
HB_TRACE(HB_TR_DEBUG, ("hb_fsReadLine(%p, %ld, %p, %p, %hu, %i, %i)", ( void * ) ( HB_PTRDIFF ) hFileHandle, *plBuffLen, Term, iTermSizes, iTerms, *bFound, *bEOF ));
*bFound = FALSE;
*bEOF = FALSE;
nTries = 0;
lOffset = 0;
lSize = *plBuffLen;
if( *plBuffLen < 10 )
*plBuffLen = READING_BLOCK;
pBuff = ( char * ) hb_xgrab( *plBuffLen + 1 );
do
{
if( nTries > 0 )
{
/* pBuff can be enlarged to hold the line as needed.. */
lSize = ( *plBuffLen * ( nTries + 1 ) ) + 1;
pBuff = ( char * ) hb_xrealloc( pBuff, lSize );
lOffset += lRead;
}
/* read from file */
lRead = hb_fsReadLarge( hFileHandle, pBuff + lOffset, lSize - lOffset );
/* scan the read buffer */
if( lRead > 0 )
{
for( iPos = 0; iPos < lRead; iPos++ )
{
for( uiPosTerm = 0; uiPosTerm < iTerms; uiPosTerm++ )
{
/* Compare with the LAST terminator byte */
if( pBuff[lOffset+iPos] == Term[uiPosTerm][iTermSizes[uiPosTerm]-1] && (iTermSizes[uiPosTerm]-1) <= (iPos+lOffset) )
{
*bFound = TRUE;
for(uiPosition=0; uiPosition < (iTermSizes[uiPosTerm]-1); uiPosition++)
{
if(Term[uiPosTerm][uiPosition] != pBuff[ lOffset+(iPos-iTermSizes[uiPosTerm])+uiPosition+1 ])
{
*bFound = FALSE;
break;
}
}
if( *bFound )
break;
}
}
if( *bFound )
break;
}
if( *bFound )
{
*plBuffLen = lOffset + iPos - iTermSizes[ uiPosTerm ] + 1;
pBuff[ *plBuffLen ] = '\0';
/* Set handle pointer in the end of the line */
hb_fsSeek( hFileHandle, (((lRead-((LONG)iPos)))*-1)+1, FS_RELATIVE );
return pBuff;
}
}
else
{
if( ! *bFound )
{
if( nTries == 0 )
{
pBuff[ 0 ] = '\0';
*plBuffLen = 0;
}
else
{
pBuff[ lOffset + lRead ] = '\0';
*plBuffLen = lOffset + lRead;
}
*bEOF = TRUE;
}
}
nTries++;
}
while( ( ! *bFound ) && lRead > 0 );
return pBuff;
}
/* PRG level fReadLine( <Handle>, <@buffer>, [<aTerminators | cTerminator>], [<nReadingBlock>] ) */
HB_FUNC( HB_FREADLINE )
{
PHB_ITEM pTerm1;
HB_FHANDLE hFileHandle = ( HB_FHANDLE ) hb_parnint( 1 );
const char ** Term;
char * pBuffer;
int * iTermSizes;
LONG lSize = hb_parnl( 4 );
USHORT i, iTerms;
BOOL bFound, bEOF;
if( ( !HB_ISBYREF( 2 ) ) || ( !HB_ISNUM( 1 ) ) )
{
hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, 4,
hb_paramError( 1 ),
hb_paramError( 2 ),
hb_paramError( 3 ),
hb_paramError( 4 ) );
return;
}
if( HB_ISARRAY( 3 ) || HB_ISCHAR( 3 ) )
{
if( HB_ISARRAY( 3 ) )
{
pTerm1 = hb_param( 3, HB_IT_ARRAY );
iTerms = ( USHORT ) hb_arrayLen( pTerm1 );
if( iTerms <= 0 )
{
hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, 4,
hb_paramError( 1 ),
hb_paramError( 2 ),
hb_paramError( 3 ),
hb_paramError( 4 ) );
return;
}
Term = ( const char ** ) hb_xgrab( sizeof( char * ) * iTerms );
iTermSizes = ( int * ) hb_xgrab( sizeof( int ) * iTerms );
for( i = 0; i < iTerms; i++ )
{
Term[ i ] = hb_arrayGetCPtr( pTerm1, i + 1 );
iTermSizes[ i ] = hb_arrayGetCLen( pTerm1, i + 1 );
}
}
else
{
pTerm1 = hb_param( 3, HB_IT_STRING );
Term = ( const char ** ) hb_xgrab( sizeof( char * ) );
iTermSizes = ( int * ) hb_xgrab( sizeof( int ) );
Term[ 0 ] = hb_itemGetCPtr( pTerm1 );
iTermSizes[ 0 ] = hb_itemGetCLen( pTerm1 );
iTerms = 1;
}
}
else
{
Term = ( const char ** ) hb_xgrab( sizeof( char * ) );
iTermSizes = ( int * ) hb_xgrab( sizeof( int ) );
Term[ 0 ] = "\r\n"; /* Should be preplaced with the default EOL sequence */
iTerms = 1;
iTermSizes[ 0 ] = 2;
}
if( lSize == 0 )
lSize = READING_BLOCK;
pBuffer = hb_fsReadLine( hFileHandle, &lSize, Term, iTermSizes, iTerms, &bFound, &bEOF );
if( ! hb_storclen_buffer( pBuffer, lSize, 2 ) )
hb_xfree( pBuffer );
hb_retnl( bEOF ? -1 : 0 );
hb_xfree( ( void * ) Term );
hb_xfree( iTermSizes );
}

View File

@@ -16,6 +16,4 @@ idetags.prg
idemisc.prg
ideactions.prg
freadlin.c
ideparseexpr.c

View File

@@ -65,8 +65,9 @@
/*----------------------------------------------------------------------*/
#include "common.ch"
#include "fileio.ch"
#include "xbp.ch"
#include "hbqt.ch"
#include "hbide.ch"
@@ -85,7 +86,7 @@ PROCEDURE JustACall()
FUNCTION ExecPopup( aPops, aPos, qParent )
LOCAL i, qPop, qPoint, qAct, nAct, cAct, xRet, pAct
qPop := QMenu():new( IF( hb_isObject( qParent ), QT_PTROF( qParent ), NIL ) )
qPop := QMenu():new( IIF( hb_isObject( qParent ), QT_PTROF( qParent ), NIL ) )
FOR i := 1 TO len( aPops )
qPop:addAction( aPops[ i, 1 ] )
@@ -118,7 +119,7 @@ FUNCTION CreateTarget( cFile, txt_ )
LOCAL hHandle := fcreate( cFile )
LOCAL cNewLine := hb_OsNewLine()
IF hHandle != -1
IF hHandle != F_ERROR
aeval( txt_, { |e| fWrite( hHandle, e + cNewLine ) } )
fClose( hHandle )
ENDIF
@@ -174,17 +175,13 @@ FUNCTION FetchAFile( oWnd, cTitle, aFlt, cDftDir )
/*----------------------------------------------------------------------*/
FUNCTION ReadSource( cTxtFile )
LOCAL cLine, nHandle, aTxt :={}
LOCAL cFileBody := MemoRead( cTxtFile )
if ( nHandle := fopen( cTxtFile ) ) != -1
do WHILE ( hb_fReadLine( nHandle, @cLine ) == 0 )
aadd( aTxt, cLine )
enddo
//aadd( aTxt, cLine )
fclose( nHandle )
endif
cFileBody := StrTran( cFileBody, Chr( 13 ) )
cFileBody := StrTran( cFileBody, Chr( 10 ), " " )
cFileBody := StrTran( cFileBody, Chr( 9 ), " " )
RETURN aTxt
RETURN hb_ATokens( cFileBody,, .T. )
/*----------------------------------------------------------------------*/
@@ -321,9 +318,9 @@ FUNCTION SetupMetaKeys( a_ )
FUNCTION ApplyMetaData( s, a_ )
LOCAL k
IF !empty( a_ )
FOR k := 1 TO len( a_ )
s := strtran( s, a_[ k,2 ], a_[ k,1 ] )
IF ! Empty( a_ )
FOR EACH k IN a_
s := StrTran( s, k[ 2 ], k[ 1 ] )
NEXT
ENDIF
@@ -334,9 +331,9 @@ FUNCTION ApplyMetaData( s, a_ )
FUNCTION ParseWithMetaData( s, a_ )
LOCAL k
IF !empty( a_ )
FOR k := 1 TO len( a_ )
s := strtran( s, a_[ k,1 ], a_[ k,2 ] )
IF ! Empty( a_ )
FOR EACH k IN a_
s := StrTran( s, k[ 1 ], k[ 2 ] )
NEXT
ENDIF
@@ -356,25 +353,19 @@ FUNCTION ArrayToMemo( a_ )
/*----------------------------------------------------------------------*/
FUNCTION MemoToArray( s )
LOCAL a_, b_, i, j
LOCAL aLine := hb_ATokens( StrTran( RTrim( s ), CRLF, _EOL ), _EOL )
LOCAL nNewSize := 0
LOCAL line
b_:={}
s := trim( s )
s := strtran( s, CRLF, _EOL )
a_:= hb_atokens( s, _EOL )
FOR i := len( a_ ) TO 1 step -1
IF !empty( a_[ i ] )
FOR EACH line IN aLine DESCEND
IF ! Empty( line )
nNewSize := line:__enumIndex()
EXIT
ENDIF
NEXT
IF i < len( a_ )
FOR j := 1 TO i
aadd( b_, a_[ j ] )
NEXT
ENDIF
RETURN b_
ASize( aLine, nNewSize )
RETURN aLine
/*----------------------------------------------------------------------*/

View File

@@ -890,6 +890,8 @@ HB_FUNC( DBUNLOCKALL )
hb_rddUnLockAll();
}
/* dbUseArea( [<lNewArea>], [<cDriver>], <cName>, [<xcAlias>], [<lShared>], [<lReadonly>], [<cCodePage>], [<nConnection>] ) -> NIL */
HB_FUNC( DBUSEAREA )
{
hb_retl( hb_rddOpenTable( hb_parc( 3 ), hb_parc( 2 ),