2008-11-09 14:02 UTC+0100 Viktor Szakats (harbour.01 syenar hu)

* make_vc.mak
    + Added /nxcompat linker flag for non-WinCE, non-DLL, 
      HB_VISUALC_VER >= 80 MSVC executables. 
      This should add extra safety.

  * include/hbextern.ch
  * source/rtl/rat.c
    + Added HB_RAT() which is similar to RAT(), but also accepts 
      <nStart> and <nEnd> optional paramaters, similarly to HB_AT().
    ; Please test.

  * source/rtl/at.c
    * Minor formatting.
This commit is contained in:
Viktor Szakats
2008-11-09 13:03:31 +00:00
parent c497f05e91
commit 642efdc827
5 changed files with 79 additions and 5 deletions

View File

@@ -8,6 +8,21 @@
2008-12-31 13:59 UTC+0100 Foo Bar (foo.bar foobar.org)
*/
2008-11-09 14:02 UTC+0100 Viktor Szakats (harbour.01 syenar hu)
* make_vc.mak
+ Added /nxcompat linker flag for non-WinCE, non-DLL,
HB_VISUALC_VER >= 80 MSVC executables.
This should add extra safety.
* include/hbextern.ch
* source/rtl/rat.c
+ Added HB_RAT() which is similar to RAT(), but also accepts
<nStart> and <nEnd> optional paramaters, similarly to HB_AT().
; Please test.
* source/rtl/at.c
* Minor formatting.
2008-11-09 13:16 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/source/vm/memvars.c
! fixed 3 tracelog messages

View File

@@ -1107,6 +1107,7 @@ EXTERNAL HB_LANG_ZHB5
EXTERNAL HB_LANG_ZHGB
EXTERNAL HB_AT
EXTERNAL HB_RAT
EXTERNAL HB_AINS
EXTERNAL HB_ADEL
EXTERNAL HB_ASCAN

View File

@@ -163,21 +163,24 @@ CEXEFLAGSDLL = $(CEXEFLAGSDLL) -MT$(DBGMARKER)
# Linker Flags
!if "$(HB_BUILD_WINCE)" == "yes"
LDFLAGS = /nologo /subsystem:windowsce,4.20 /machine:ARM /armpadcode \
LDFLAGS = /nologo /subsystem:windowsce,4.20 /machine:arm /armpadcode \
/stack:65536,4096 /nodefaultlib:"oldnames.lib" \
/nodefaultlib:"kernel32.lib" /align:4096 /opt:REF /opt:ICF \
/nodefaultlib:"kernel32.lib" /align:4096 /opt:ref /opt:icf \
/libpath:$(LIB_DIR) $(L_USR)
!if $(HB_VISUALC_VER) >= 80
LDFLAGS = $(LDFLAGS) /manifest:NO
LDFLAGS = $(LDFLAGS) /manifest:no
!endif
LDFLAGSDLL = /dll \
/nologo /subsystem:WINDOWSCE,4.20 /machine:ARM /armpadcode \
/nologo /subsystem:windowsce,4.20 /machine:arm /armpadcode \
/stack:65536,4096 /nodefaultlib:"oldnames.lib" \
/libpath:$(LIB_DIR) $(L_USR)
STANDARD_SYSLIBS = coredll.lib corelibc.lib winsock.lib ws2.lib
!else
LDFLAGS = /nologo /libpath:$(LIB_DIR) $(L_USR)
LDFLAGSDLL = /dll $(LDFLAGS)
!if $(HB_VISUALC_VER) >= 80
LDFLAGS = $(LDFLAGS) /nxcompat /dynamicbase /fixed:no
!endif
# user32.lib: *Clipboard*(), CharToOemBuff(), OemToCharBuff(), GetKeyState(), GetKeyboardState(), SetKeyboardState()
# wsock32.lib: hbinet
# advapi32.lib: GetUserName()

View File

@@ -78,7 +78,7 @@ HB_FUNC( HB_AT )
ulPos = hb_strAt( hb_itemGetCPtr( pSub ), hb_itemGetCLen( pSub ),
hb_itemGetCPtr( pText ) + ulStart - 1, ulEnd - ulStart + 1 );
if( ulPos > 0)
if( ulPos > 0 )
ulPos += ( ulStart - 1 );
hb_retnl( ulPos );

View File

@@ -83,3 +83,58 @@ HB_FUNC( RAT )
hb_retni( 0 );
}
HB_FUNC( HB_RAT )
{
ULONG ulSubLen = hb_parclen( 1 );
if( ulSubLen )
{
long lPos = hb_parclen( 2 ) - ulSubLen;
if( lPos >= 0 )
{
char * pszSub = hb_parc( 1 );
char * pszText = hb_parc( 2 );
BOOL bFound = FALSE;
long lStart;
if( ISNUM( 3 ) )
{
lStart = hb_parnl( 3 );
if( lStart >= 1 )
--lStart;
else
lStart = 0;
}
else
lStart = 0;
if( ISNUM( 4 ) )
{
long lEnd = hb_parnl( 4 );
if( lEnd >= 1 )
{
--lEnd;
if( lEnd < lPos )
lPos = lEnd;
}
}
while( lPos >= lStart && !bFound )
{
if( *( pszText + lPos ) == *pszSub )
bFound = ( memcmp( pszSub, pszText + lPos, ulSubLen ) == 0 );
lPos--;
}
hb_retnl( bFound ? lPos + 2 : 0 );
}
else
hb_retni( 0 );
}
else
/* This function never seems to raise an error */
hb_retni( 0 );
}