diff --git a/harbour/ChangeLog b/harbour/ChangeLog index d7bf594d04..9cdd634f25 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -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 + and 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 diff --git a/harbour/include/hbextern.ch b/harbour/include/hbextern.ch index dfa8bdcc89..813dc1487e 100644 --- a/harbour/include/hbextern.ch +++ b/harbour/include/hbextern.ch @@ -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 diff --git a/harbour/make_vc.mak b/harbour/make_vc.mak index 16d713ff6e..942e16c0c9 100644 --- a/harbour/make_vc.mak +++ b/harbour/make_vc.mak @@ -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() diff --git a/harbour/source/rtl/at.c b/harbour/source/rtl/at.c index f2b8fdf9ec..c489aad141 100644 --- a/harbour/source/rtl/at.c +++ b/harbour/source/rtl/at.c @@ -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 ); diff --git a/harbour/source/rtl/rat.c b/harbour/source/rtl/rat.c index 04246ea016..f72adb77e2 100644 --- a/harbour/source/rtl/rat.c +++ b/harbour/source/rtl/rat.c @@ -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 ); +}