2012-11-24 20:01 UTC+0100 Viktor Szakats (harbour syenar.net)

* contrib/hbct/charsort.c
  * contrib/hbct/ctstr.c
  * contrib/hbct/dattime3.c
  * contrib/hbct/token1.c
    + added MT support for certain C level statics

  * contrib/hbgt/bitflags.c
  * contrib/hbnf/ftattr.c
  * contrib/hbnf/fttext.c
  * contrib/hbnf/proper.c
    % var scope cleanups

  * doc/gmake.txt
    ! deleted obsolete reference
This commit is contained in:
Viktor Szakats
2012-11-24 19:07:23 +00:00
parent 7ec3746550
commit 9b2a23a194
10 changed files with 230 additions and 127 deletions

View File

@@ -10,6 +10,22 @@
* Change, ! Fix, % Optimization, + Addition, - Removal, ; Comment
*/
2012-11-24 20:01 UTC+0100 Viktor Szakats (harbour syenar.net)
* contrib/hbct/charsort.c
* contrib/hbct/ctstr.c
* contrib/hbct/dattime3.c
* contrib/hbct/token1.c
+ added MT support for certain C level statics
* contrib/hbgt/bitflags.c
* contrib/hbnf/ftattr.c
* contrib/hbnf/fttext.c
* contrib/hbnf/proper.c
% var scope cleanups
* doc/gmake.txt
! deleted obsolete reference
2012-11-24 16:48 UTC+0100 Viktor Szakats (harbour syenar.net)
* contrib/hbgt/hbgt.hbp
* contrib/hbgt/hbgt.hbx

View File

@@ -54,9 +54,17 @@
#include "ct.h"
#include "hbstack.h"
/* statics */
static HB_SIZE s_sCompareLen; /* TODO: make this thread safe */
static HB_SIZE s_sElementPos; /* TODO: make this thread safe */
typedef struct
{
HB_SIZE sCompareLen;
HB_SIZE sElementPos;
} CT_CHARSORT, * PCT_CHARSORT;
static HB_TSD_NEW( s_charsort, sizeof( CT_CHARSORT ), NULL, NULL );
/* qsort function */
#ifdef __IBMCPP__
@@ -66,9 +74,11 @@ static int
#endif
_hb_do_sortascend( const void * p1, const void * p2 )
{
return strncmp( ( const char * ) p1 + s_sElementPos,
( const char * ) p2 + s_sElementPos,
s_sCompareLen );
PCT_CHARSORT charsort = ( PCT_CHARSORT ) hb_stackGetTSD( &s_charsort );
return strncmp( ( const char * ) p1 + charsort->sElementPos,
( const char * ) p2 + charsort->sElementPos,
charsort->sCompareLen );
}
#ifdef __IBMCPP__
@@ -78,9 +88,11 @@ static int
#endif
_hb_do_sortdescend( const void * p1, const void * p2 )
{
return -strncmp( ( const char * ) p1 + s_sElementPos,
( const char * ) p2 + s_sElementPos,
s_sCompareLen );
PCT_CHARSORT charsort = ( PCT_CHARSORT ) hb_stackGetTSD( &s_charsort );
return -strncmp( ( const char * ) p1 + charsort->sElementPos,
( const char * ) p2 + charsort->sElementPos,
charsort->sCompareLen );
}
HB_FUNC( CHARSORT )
@@ -93,24 +105,25 @@ HB_FUNC( CHARSORT )
/* param check I */
if( HB_ISCHAR( 1 ) )
{
PCT_CHARSORT charsort = ( PCT_CHARSORT ) hb_stackGetTSD( &s_charsort );
/* get parameters */
const char * pcString = hb_parc( 1 );
char * pcRet;
HB_SIZE sStrLen = hb_parclen( 1 );
HB_SIZE sElementLen, sIgnore, sSortLen;
int iDescend;
sElementLen = hb_parnsdef( 2, 1 );
s_sCompareLen = hb_parnsdef( 3, sElementLen );
sIgnore = hb_parnsdef( 4, 0 );
s_sElementPos = hb_parnsdef( 5, 0 );
sSortLen = hb_parnsdef( 6, sStrLen - sIgnore );
iDescend = hb_parldef( 7, 0 );
char * pcRet;
HB_SIZE sStrLen = hb_parclen( 1 );
HB_SIZE sElementLen = hb_parnsdef( 2, 1 );
HB_SIZE sIgnore = hb_parnsdef( 4, 0 );
HB_SIZE sSortLen = hb_parnsdef( 6, sStrLen - sIgnore );
int iDescend = hb_parldef( 7, 0 );
charsort->sCompareLen = hb_parnsdef( 3, sElementLen );
charsort->sElementPos = hb_parnsdef( 5, 0 );
/* param check II */
if( sElementLen == 0 || s_sCompareLen > sElementLen ||
if( sElementLen == 0 || charsort->sCompareLen > sElementLen ||
sIgnore + sElementLen > sStrLen ||
s_sElementPos + s_sCompareLen > sElementLen ||
charsort->sElementPos + charsort->sCompareLen > sElementLen ||
sSortLen + sIgnore > sStrLen )
{
int iArgErrorMode = ct_getargerrormode();

View File

@@ -54,6 +54,28 @@
#include "ct.h"
#include "hbstack.h"
typedef struct
{
int iRefSwitch;
int iAtMupaSwitch;
int iAtLikeMode;
char cAtLikeChar;
} CT_STR, * PCT_STR;
static void s_ct_str_init( void * cargo )
{
PCT_STR ct_str = ( PCT_STR ) cargo;
ct_str->iRefSwitch = 0;
ct_str->iAtMupaSwitch = 0;
ct_str->iAtLikeMode = 0;
ct_str->cAtLikeChar = '?';
}
static HB_TSD_NEW( s_ct_str, sizeof( CT_STR ), s_ct_str_init, NULL );
/* -------------- */
/* initialization */
/* -------------- */
@@ -223,12 +245,14 @@ const char * ct_at_charset_forward( const char * pcString, HB_SIZE sStrLen,
for( pcRet = pcString; pcRet < pcStop1; pcRet++ )
{
for( pcSet = pcCharSet; pcSet < pcStop2; pcSet++ )
{
if( *pcSet == *pcRet )
{
if( psMatchedCharPos != NULL )
*( psMatchedCharPos ) = pcSet - pcCharSet;
return pcRet;
}
}
}
return NULL;
@@ -254,12 +278,14 @@ const char * ct_at_charset_backward( const char * pcString, HB_SIZE sStrLen,
for( pcRet = pcString + sStrLen - 1; pcRet >= pcString; pcRet-- )
{
for( pcSet = pcCharSet; pcSet < pcStop; pcSet++ )
{
if( *pcSet == *pcRet )
{
if( psMatchedCharPos != NULL )
*( psMatchedCharPos ) = pcSet - pcCharSet;
return pcRet;
}
}
}
return NULL;
@@ -269,18 +295,22 @@ const char * ct_at_charset_backward( const char * pcString, HB_SIZE sStrLen,
* CSETREF() stuff
*/
static int s_iRefSwitch = 0; /* TODO: make this tread safe */
void ct_setref( int iNewSwitch )
{
PCT_STR ct_str = ( PCT_STR ) hb_stackGetTSD( &s_ct_str );
HB_TRACE( HB_TR_DEBUG, ( "ct_setref(%i)", iNewSwitch ) );
s_iRefSwitch = iNewSwitch;
ct_str->iRefSwitch = iNewSwitch;
}
int ct_getref( void )
{
PCT_STR ct_str = ( PCT_STR ) hb_stackGetTSD( &s_ct_str );
HB_TRACE( HB_TR_DEBUG, ( "ct_getref()" ) );
return s_iRefSwitch;
return ct_str->iRefSwitch;
}
HB_FUNC( CSETREF )
@@ -303,18 +333,22 @@ HB_FUNC( CSETREF )
* CSETATMUPA() stuff
*/
static int s_iAtMupaSwitch = 0; /* TODO: make this tread safe */
void ct_setatmupa( int iNewSwitch )
{
PCT_STR ct_str = ( PCT_STR ) hb_stackGetTSD( &s_ct_str );
HB_TRACE( HB_TR_DEBUG, ( "ct_setatmupa(%i)", iNewSwitch ) );
s_iAtMupaSwitch = iNewSwitch;
ct_str->iAtMupaSwitch = iNewSwitch;
}
int ct_getatmupa( void )
{
PCT_STR ct_str = ( PCT_STR ) hb_stackGetTSD( &s_ct_str );
HB_TRACE( HB_TR_DEBUG, ( "ct_getatmupa()" ) );
return s_iAtMupaSwitch;
return ct_str->iAtMupaSwitch;
}
HB_FUNC( CSETATMUPA )
@@ -337,36 +371,44 @@ HB_FUNC( CSETATMUPA )
* SETATLIKE() stuff
*/
static int s_iAtLikeMode = 0; /* TODO: make this tread safe */
static char s_cAtLikeChar = '?'; /* TODO: make this tread safe */
void ct_setatlike( int iNewMode )
{
PCT_STR ct_str = ( PCT_STR ) hb_stackGetTSD( &s_ct_str );
HB_TRACE( HB_TR_DEBUG, ( "ct_setatlike(%i)", iNewMode ) );
s_iAtLikeMode = iNewMode;
ct_str->iAtLikeMode = iNewMode;
}
int ct_getatlike( void )
{
PCT_STR ct_str = ( PCT_STR ) hb_stackGetTSD( &s_ct_str );
HB_TRACE( HB_TR_DEBUG, ( "ct_getatlike()" ) );
return s_iAtLikeMode;
return ct_str->iAtLikeMode;
}
void ct_setatlikechar( char cNewChar )
{
PCT_STR ct_str = ( PCT_STR ) hb_stackGetTSD( &s_ct_str );
HB_TRACE( HB_TR_DEBUG, ( "ct_setatlikechar(\'%c\')", cNewChar ) );
s_cAtLikeChar = cNewChar;
ct_str->cAtLikeChar = cNewChar;
}
char ct_getatlikechar( void )
{
PCT_STR ct_str = ( PCT_STR ) hb_stackGetTSD( &s_ct_str );
HB_TRACE( HB_TR_DEBUG, ( "ct_getatlikechar()" ) );
return s_cAtLikeChar;
return ct_str->cAtLikeChar;
}
HB_FUNC( SETATLIKE )
{
hb_retni( ct_getatlike() );
/* set new mode if first parameter is CT_SETATLIKE_EXACT (==0)
@@ -376,9 +418,7 @@ HB_FUNC( SETATLIKE )
int iNewMode = hb_parni( 1 );
if( iNewMode == CT_SETATLIKE_EXACT || iNewMode == CT_SETATLIKE_WILDCARD )
{
ct_setatlike( iNewMode );
}
else
{
int iArgErrorMode = ct_getargerrormode();

View File

@@ -58,30 +58,46 @@
#include "hbapi.h"
#include "hbdate.h"
#include "hbstack.h"
#if defined( HB_OS_WIN )
# include <windows.h>
#endif
#include <time.h>
typedef struct
{
/* even if these are chars, variable must be int, since we need an extra -1 */
double dTimeSet;
double dTimeCounter;
} CT_DATE, * PCT_DATE;
static void s_ct_date_init( void * cargo )
{
PCT_DATE ct_date = ( PCT_DATE ) cargo;
ct_date->dTimeSet = 0;
ct_date->dTimeCounter = 0;
}
static HB_TSD_NEW( s_ct_date, sizeof( CT_DATE ), s_ct_date_init, NULL );
HB_FUNC( WAITPERIOD )
{
/* TODO: make it MT safe */
static double s_dTimeSet = 0;
static double s_dTimeCounter = 0;
PCT_DATE ct_date = ( PCT_DATE ) hb_stackGetTSD( &s_ct_date );
double d = hb_dateSeconds();
if( hb_pcount() > 0 )
{
s_dTimeSet = d;
s_dTimeCounter = d + hb_parnd( 1 ) / 100.0;
ct_date->dTimeSet = d;
ct_date->dTimeCounter = d + hb_parnd( 1 ) / 100.0;
}
if( d < s_dTimeSet )
if( d < ct_date->dTimeSet )
d += 86400.0;
hb_retl( d < s_dTimeCounter );
hb_retl( d < ct_date->dTimeCounter );
}
static HB_BOOL _hb_timeValid( const char * szTime, HB_SIZE nLen, int * piDecode )

View File

@@ -60,15 +60,31 @@
#include "ct.h"
#include "hbstack.h"
/* static const data */
static const char * sc_pcSeparatorStr =
"\x00" "\x09" "\x0A" "\x0C" "\x1A" "\x20" "\x8A" "\x8C" ",.;:!\?/\\<>()#&%+-*";
static const HB_SIZE sc_sSeparatorStrLen = 26;
/* static data */
/* even if these are chars, variable must be int, since we need an extra -1 */
static int s_iPreSeparator = -1; /* TODO: make this threadsafe */
static int s_iPostSeparator = -1; /* TODO: make this threadsafe */
typedef struct
{
/* even if these are chars, variable must be int, since we need an extra -1 */
int iPreSeparator;
int iPostSeparator;
} CT_TOKEN, * PCT_TOKEN;
static void s_ct_token_init( void * cargo )
{
PCT_TOKEN ct_token = ( PCT_TOKEN ) cargo;
ct_token->iPreSeparator = -1;
ct_token->iPostSeparator = -1;
}
static HB_TSD_NEW( s_ct_token, sizeof( CT_TOKEN ), s_ct_token_init, NULL );
/* defines */
#define DO_TOKEN1_TOKEN 0
@@ -80,13 +96,15 @@ static int s_iPostSeparator = -1; /* TODO: make this threadsafe */
/* helper function for the token function group I */
static void do_token1( int iSwitch )
{
PCT_TOKEN ct_token = ( PCT_TOKEN ) hb_stackGetTSD( &s_ct_token );
int iParamCheck = 0;
int iNoRef = ct_getref() && HB_ISBYREF( 1 );
switch( iSwitch )
{
case DO_TOKEN1_TOKEN:
s_iPreSeparator = s_iPostSeparator = -1;
ct_token->iPreSeparator = ct_token->iPostSeparator = -1;
/* no "break" here !! */
case DO_TOKEN1_ATTOKEN:
case DO_TOKEN1_NUMTOKEN:
@@ -183,11 +201,11 @@ static void do_token1( int iSwitch )
pcSeparatorStr, sSeparatorStrLen, &sMatchedPos );
if( iSwitch == DO_TOKEN1_TOKEN )
{
s_iPreSeparator = s_iPostSeparator;
ct_token->iPreSeparator = ct_token->iPostSeparator;
if( sMatchedPos < sSeparatorStrLen )
s_iPostSeparator = pcSeparatorStr[ sMatchedPos ];
ct_token->iPostSeparator = pcSeparatorStr[ sMatchedPos ];
else
s_iPostSeparator = -1;
ct_token->iPostSeparator = -1;
}
nSkipCnt++;
}
@@ -206,13 +224,13 @@ static void do_token1( int iSwitch )
hb_retc_null();
if( HB_ISBYREF( 5 ) )
{
cRet = ( char ) s_iPreSeparator;
hb_storclen( &cRet, ( s_iPreSeparator != -1 ? 1 : 0 ), 5 );
cRet = ( char ) ct_token->iPreSeparator;
hb_storclen( &cRet, ( ct_token->iPreSeparator != -1 ? 1 : 0 ), 5 );
}
if( HB_ISBYREF( 6 ) )
{
cRet = ( char ) s_iPostSeparator;
hb_storclen( &cRet, ( s_iPostSeparator != -1 ? 1 : 0 ), 6 );
cRet = ( char ) ct_token->iPostSeparator;
hb_storclen( &cRet, ( ct_token->iPostSeparator != -1 ? 1 : 0 ), 6 );
}
break;
}
@@ -314,13 +332,13 @@ static void do_token1( int iSwitch )
if( HB_ISBYREF( 5 ) )
{
cRet = ( char ) s_iPreSeparator;
hb_storclen( &cRet, ( s_iPreSeparator != -1 ? 1 : 0 ), 5 );
cRet = ( char ) ct_token->iPreSeparator;
hb_storclen( &cRet, ( ct_token->iPreSeparator != -1 ? 1 : 0 ), 5 );
}
if( HB_ISBYREF( 6 ) )
{
cRet = ( char ) s_iPostSeparator;
hb_storclen( &cRet, ( s_iPostSeparator != -1 ? 1 : 0 ), 6 );
cRet = ( char ) ct_token->iPostSeparator;
hb_storclen( &cRet, ( ct_token->iPostSeparator != -1 ? 1 : 0 ), 6 );
}
break;
}
@@ -362,13 +380,13 @@ static void do_token1( int iSwitch )
if( HB_ISBYREF( 5 ) )
{
cRet = ( char ) s_iPreSeparator;
hb_storclen( &cRet, ( s_iPreSeparator != -1 ? 1 : 0 ), 5 );
cRet = ( char ) ct_token->iPreSeparator;
hb_storclen( &cRet, ( ct_token->iPreSeparator != -1 ? 1 : 0 ), 5 );
}
if( HB_ISBYREF( 6 ) )
{
cRet = ( char ) s_iPostSeparator;
hb_storclen( &cRet, ( s_iPostSeparator != -1 ? 1 : 0 ), 6 );
cRet = ( char ) ct_token->iPostSeparator;
hb_storclen( &cRet, ( ct_token->iPostSeparator != -1 ? 1 : 0 ), 6 );
}
if( iArgErrorMode != CT_ARGERR_IGNORE )
@@ -457,14 +475,16 @@ HB_FUNC( TOKENUPPER )
HB_FUNC( TOKENSEP )
{
PCT_TOKEN ct_token = ( PCT_TOKEN ) hb_stackGetTSD( &s_ct_token );
char cRet;
if( hb_parl( 1 ) )
{
/* return the separator char BEHIND the last token */
if( s_iPostSeparator != -1 )
if( ct_token->iPostSeparator != -1 )
{
cRet = ( char ) s_iPostSeparator;
cRet = ( char ) ct_token->iPostSeparator;
hb_retclen( &cRet, 1 );
}
else
@@ -473,9 +493,9 @@ HB_FUNC( TOKENSEP )
else
{
/* return the separator char BEFORE the last token */
if( s_iPreSeparator != -1 )
if( ct_token->iPreSeparator != -1 )
{
cRet = ( char ) s_iPreSeparator;
cRet = ( char ) ct_token->iPreSeparator;
hb_retclen( &cRet, 1 );
}
else

View File

@@ -56,18 +56,18 @@ HB_FUNC( GT_SETFLAG )
char * FlagString = hb_itemGetC( hb_param( 1, HB_IT_STRING ) );
unsigned StartBit = hb_parnidef( 2, 1 );
unsigned EndBit = hb_parnidef( 3, 1 );
unsigned BitCount;
unsigned BitPointer;
unsigned BytePointer;
EndBit = HB_MAX( StartBit, EndBit );
if( StartBit > 0 && EndBit <= ( hb_parclen( 1 ) * 8 ) )
{
unsigned BitCount;
for( BitCount = StartBit; BitCount <= EndBit; BitCount++ )
{
BitPointer = BitCount % 8;
BytePointer = ( unsigned ) ( BitCount / 8 );
unsigned BitPointer = BitCount % 8;
unsigned BytePointer = ( unsigned ) ( BitCount / 8 );
if( ! BitPointer )
{
BitPointer = 8;
@@ -89,18 +89,18 @@ HB_FUNC( GT_CLRFLAG )
char * FlagString = hb_itemGetC( hb_param( 1, HB_IT_STRING ) );
unsigned StartBit = hb_parnidef( 2, 1 );
unsigned EndBit = hb_parnidef( 3, 1 );
unsigned BitCount;
unsigned BitPointer;
unsigned BytePointer;
EndBit = HB_MAX( StartBit, EndBit );
if( StartBit > 0 && EndBit <= ( hb_parclen( 1 ) * 8 ) )
{
unsigned BitCount;
for( BitCount = StartBit; BitCount <= EndBit; BitCount++ )
{
BitPointer = BitCount % 8;
BytePointer = ( unsigned ) ( BitCount / 8 );
unsigned BitPointer = BitCount % 8;
unsigned BytePointer = ( unsigned ) ( BitCount / 8 );
if( ! BitPointer )
{
BitPointer = 8;
@@ -121,15 +121,15 @@ HB_FUNC( GT_ISFLAG )
if( HB_ISCHAR( 1 ) )
{
unsigned Bit = hb_parnidef( 2, 1 );
unsigned BitPointer;
unsigned BytePointer;
const char * FlagString = hb_parc( 1 );
unsigned Bit = hb_parnidef( 2, 1 );
if( Bit > 0 && Bit <= ( hb_parclen( 1 ) * 8 ) )
{
BitPointer = Bit % 8;
BytePointer = ( unsigned ) ( Bit / 8 );
const char * FlagString = hb_parc( 1 );
unsigned BitPointer = Bit % 8;
unsigned BytePointer = ( unsigned ) ( Bit / 8 );
if( ! BitPointer )
{
BitPointer = 8;

View File

@@ -35,10 +35,6 @@ HB_FUNC( FT_SAVEATT )
int iBottom = hb_parnidef( 3, iMaxRow );
int iRight = hb_parnidef( 4, iMaxRow );
HB_SIZE nSize;
char * pBuffer;
char * pAttrib;
if( iTop < 0 )
iTop = 0;
if( iLeft < 0 )
@@ -50,6 +46,10 @@ HB_FUNC( FT_SAVEATT )
if( iTop <= iBottom && iLeft <= iRight )
{
HB_SIZE nSize;
char * pBuffer;
char * pAttrib;
nSize = ( iBottom - iTop + 1 ) * ( iRight - iLeft + 1 );
pBuffer = pAttrib = ( char * ) hb_xgrab( nSize + 1 );
while( iTop <= iBottom )
@@ -106,7 +106,6 @@ HB_FUNC( FT_RESTATT )
int iMaxCol = hb_gtMaxCol();
int iBottom = hb_parnidef( 3, iMaxRow );
int iRight = hb_parnidef( 4, iMaxCol );
const char * pAttrib = hb_parc( 5 );
if( iTop < 0 )
iTop = 0;
@@ -119,6 +118,8 @@ HB_FUNC( FT_RESTATT )
if( iTop <= iBottom && iLeft <= iRight )
{
const char * pAttrib = hb_parc( 5 );
hb_gtDispBegin();
while( nLen && iTop <= iBottom )

View File

@@ -176,14 +176,14 @@ typedef struct
HB_ERRCODE error[ TEXT_WORKAREAS ];
} FT_TEXT, * PFT_TEXT;
static void s_fttext_init_init( void * cargo )
static void s_ft_text_init( void * cargo )
{
PFT_TEXT ft_text = ( PFT_TEXT ) cargo;
ft_text->area = 0;
}
static HB_TSD_NEW( s_fttext, sizeof( FT_TEXT ), s_fttext_init_init, NULL );
static HB_TSD_NEW( s_ft_text, sizeof( FT_TEXT ), s_ft_text_init, NULL );
/* routines internal to this module */
static HB_ISIZ _findeol( char * buf, HB_ISIZ buf_len );
@@ -196,7 +196,7 @@ static HB_BOOL _writeeol( HB_FHANDLE fhnd );
HB_FUNC( FT_FOFFSET )
{
PFT_TEXT ft_text = ( PFT_TEXT ) hb_stackGetTSD( &s_fttext );
PFT_TEXT ft_text = ( PFT_TEXT ) hb_stackGetTSD( &s_ft_text );
hb_retnint( ft_text->offset[ ft_text->area ] );
}
@@ -207,14 +207,14 @@ HB_FUNC( FT_FOFFSET )
HB_FUNC( FT_FUSE )
{
PFT_TEXT ft_text = ( PFT_TEXT ) hb_stackGetTSD( &s_fttext );
int attr = hb_parnidef( 2, FO_READWRITE | FO_DENYNONE );
PFT_TEXT ft_text = ( PFT_TEXT ) hb_stackGetTSD( &s_ft_text );
ft_text->error[ ft_text->area ] = 0;
if( HB_ISCHAR( 1 ) )
{
int attr = hb_parnidef( 2, FO_READWRITE | FO_DENYNONE );
ft_text->handles[ ft_text->area ] = hb_fsOpen( hb_parc( 1 ), ( HB_USHORT ) attr );
if( ft_text->handles[ ft_text->area ] <= 0 )
ft_text->error[ ft_text->area ] = hb_fsError();
@@ -243,14 +243,14 @@ HB_FUNC( FT_FUSE )
HB_FUNC( FT_FSELECT )
{
PFT_TEXT ft_text = ( PFT_TEXT ) hb_stackGetTSD( &s_fttext );
PFT_TEXT ft_text = ( PFT_TEXT ) hb_stackGetTSD( &s_ft_text );
int oldarea = ft_text->area + 1;
int newArea;
if( HB_ISNUM( 1 ) )
{
newArea = hb_parni( 1 );
int newArea = hb_parni( 1 );
if( newArea <= TEXT_WORKAREAS )
{
if( newArea == 0 )
@@ -273,7 +273,7 @@ HB_FUNC( FT_FSELECT )
HB_FUNC( FT_FGOTOP )
{
PFT_TEXT ft_text = ( PFT_TEXT ) hb_stackGetTSD( &s_fttext );
PFT_TEXT ft_text = ( PFT_TEXT ) hb_stackGetTSD( &s_ft_text );
ft_text->error[ ft_text->area ] = 0;
ft_text->offset[ ft_text->area ] = 0L;
@@ -284,21 +284,21 @@ HB_FUNC( FT_FGOTOP )
HB_FUNC( FT_FERROR )
{
PFT_TEXT ft_text = ( PFT_TEXT ) hb_stackGetTSD( &s_fttext );
PFT_TEXT ft_text = ( PFT_TEXT ) hb_stackGetTSD( &s_ft_text );
hb_retni( ft_text->error[ ft_text->area ] );
}
HB_FUNC( FT_FRECNO )
{
PFT_TEXT ft_text = ( PFT_TEXT ) hb_stackGetTSD( &s_fttext );
PFT_TEXT ft_text = ( PFT_TEXT ) hb_stackGetTSD( &s_ft_text );
hb_retnl( ft_text->recno[ ft_text->area ] );
}
HB_FUNC( FT_FGOBOT )
{
PFT_TEXT ft_text = ( PFT_TEXT ) hb_stackGetTSD( &s_fttext );
PFT_TEXT ft_text = ( PFT_TEXT ) hb_stackGetTSD( &s_ft_text );
ft_text->error[ ft_text->area ] = 0;
if( ! ft_text->last_rec[ ft_text->area ] )
@@ -332,7 +332,7 @@ HB_FUNC( FT_FSKIP )
Returns a long indicating the number of records skipped */
static long _ft_skip( long iRecs )
{
PFT_TEXT ft_text = ( PFT_TEXT ) hb_stackGetTSD( &s_fttext );
PFT_TEXT ft_text = ( PFT_TEXT ) hb_stackGetTSD( &s_ft_text );
HB_ISIZ iByteCount;
HB_ISIZ iBytesRead, iBytesRemaining;
@@ -519,7 +519,7 @@ static long _ft_skip( long iRecs )
HB_FUNC( FT_FREADLN )
{
PFT_TEXT ft_text = ( PFT_TEXT ) hb_stackGetTSD( &s_fttext );
PFT_TEXT ft_text = ( PFT_TEXT ) hb_stackGetTSD( &s_ft_text );
HB_ISIZ iByteCount;
HB_ISIZ iBytesRead;
@@ -545,7 +545,7 @@ HB_FUNC( FT_FREADLN )
HB_FUNC( FT_FDELETE )
{
PFT_TEXT ft_text = ( PFT_TEXT ) hb_stackGetTSD( &s_fttext );
PFT_TEXT ft_text = ( PFT_TEXT ) hb_stackGetTSD( &s_ft_text );
int iBytesRead;
HB_FOFFSET srcPtr;
@@ -601,7 +601,7 @@ HB_FUNC( FT_FDELETE )
HB_FUNC( FT_FINSERT )
{
PFT_TEXT ft_text = ( PFT_TEXT ) hb_stackGetTSD( &s_fttext );
PFT_TEXT ft_text = ( PFT_TEXT ) hb_stackGetTSD( &s_ft_text );
int no_lines = hb_parnidef( 1, 1 );
HB_ISIZ no_bytes = no_lines * 2;
@@ -625,7 +625,7 @@ HB_FUNC( FT_FINSERT )
HB_FUNC( FT_FAPPEND )
{
PFT_TEXT ft_text = ( PFT_TEXT ) hb_stackGetTSD( &s_fttext );
PFT_TEXT ft_text = ( PFT_TEXT ) hb_stackGetTSD( &s_ft_text );
int no_lines = hb_parnidef( 1, 1 );
HB_ISIZ iRead;
@@ -666,7 +666,9 @@ HB_FUNC( FT_FAPPEND )
}
ft_text->recno[ ft_text->area ]++;
ft_text->offset[ ft_text->area ] = hb_fsSeekLarge( ft_text->handles[ ft_text->area ], 0, FS_RELATIVE );
/* no_lines--; !Harbour FIX! */
#if 0
no_lines--; /* !Harbour FIX! */
#endif
}
if( ! ft_text->error[ ft_text->area ] )
@@ -687,16 +689,12 @@ HB_FUNC( FT_FAPPEND )
HB_FUNC( FT_FWRITELN )
{
PFT_TEXT ft_text = ( PFT_TEXT ) hb_stackGetTSD( &s_fttext );
PFT_TEXT ft_text = ( PFT_TEXT ) hb_stackGetTSD( &s_ft_text );
const char * theData = hb_parc( 1 );
HB_ISIZ iDataLen = hb_parclen( 1 );
HB_BOOL bInsert = hb_parl( 2 );
int err;
HB_ISIZ iLineLen = 0;
HB_ISIZ iRead, iEOL;
char * buffer;
/* position file pointer to insertion point */
hb_fsSeekLarge( ft_text->handles[ ft_text->area ], ft_text->offset[ ft_text->area ], FS_SET );
@@ -715,7 +713,10 @@ HB_FUNC( FT_FWRITELN )
else
{
/* overwrite mode, determine how many bytes over/under */
buffer = ( char * ) hb_xgrab( BUFFSIZE );
char * buffer = ( char * ) hb_xgrab( BUFFSIZE );
HB_ISIZ iLineLen = 0;
HB_ISIZ iRead, iEOL;
/* find length of current line, loop if longer than buffer */
do
@@ -762,7 +763,7 @@ HB_FUNC_TRANSLATE( FT_FWRITEL, FT_FWRITELN )
HB_FUNC( FT_FLASTRE )
{
PFT_TEXT ft_text = ( PFT_TEXT ) hb_stackGetTSD( &s_fttext );
PFT_TEXT ft_text = ( PFT_TEXT ) hb_stackGetTSD( &s_ft_text );
long cur_rec;
HB_FOFFSET cur_offset;
@@ -779,21 +780,21 @@ HB_FUNC( FT_FLASTRE )
HB_FUNC( FT_FEOF )
{
PFT_TEXT ft_text = ( PFT_TEXT ) hb_stackGetTSD( &s_fttext );
PFT_TEXT ft_text = ( PFT_TEXT ) hb_stackGetTSD( &s_ft_text );
hb_retl( ft_text->isEof[ ft_text->area ] );
}
HB_FUNC( FT_FBOF )
{
PFT_TEXT ft_text = ( PFT_TEXT ) hb_stackGetTSD( &s_fttext );
PFT_TEXT ft_text = ( PFT_TEXT ) hb_stackGetTSD( &s_ft_text );
hb_retl( ft_text->isBof[ ft_text->area ] );
}
HB_FUNC( FT_FGOTO )
{
PFT_TEXT ft_text = ( PFT_TEXT ) hb_stackGetTSD( &s_fttext );
PFT_TEXT ft_text = ( PFT_TEXT ) hb_stackGetTSD( &s_ft_text );
long target = hb_parnl( 1 );
@@ -968,7 +969,9 @@ static int _ins_buff( PFT_TEXT ft_text, HB_ISIZ iLen )
ft_text->error[ ft_text->area ] = hb_fsError();
break;
}
/* WriteLen = SaveLen; */
#if 0
WriteLen = SaveLen;
#endif
/* swap buffers */
SaveBuff = WriteBuff;
@@ -1066,8 +1069,7 @@ static int _writeLine( PFT_TEXT ft_text, const char * theData, HB_SIZE iDataLen
err = 1;
ft_text->error[ ft_text->area ] = hb_fsError();
}
else
if( ! _writeeol( ft_text->handles[ ft_text->area ] ) )
else if( ! _writeeol( ft_text->handles[ ft_text->area ] ) )
{
err = 1;
ft_text->error[ ft_text->area ] = hb_fsError();

View File

@@ -91,9 +91,7 @@ HB_FUNC( FT_PROPER )
for( i = 0; i < iLen - 2; i++ )
{
if( cStr[ i ] == 'M' && cStr[ i + 1 ] == 'c' )
{
cDst[ i + 2 ] = _ftToUpper( cDst[ i + 2 ] );
}
}
}

View File

@@ -181,13 +181,10 @@ For GCC on OS/2 for VIO mode:
HB_PLATFORM os2
HB_COMPILER gcc
For Borland C++ 5.5
For Borland C++
HB_PLATFORM win
HB_COMPILER bcc
For Borland C++ 3.x
HB_PLATFORM dos
For DJGPP (GCC port for MS-DOS)
HB_PLATFORM dos
HB_COMPILER djgpp