From f4ebdfd48bf9308f9d87658081088fbc6087c52f Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Sun, 7 Apr 2013 22:45:23 +0200 Subject: [PATCH] 2013-04-07 22:41 UTC+0200 Viktor Szakats (harbour syenar.net) * bin/commit.hb + do not add new empty entry template if one already exist, replace existing one instead + put last changelog entry to clipboard on pre-commit * bin/check.hb * refined and sorted exceptions for case checking * bin/check.hb - tests/fixcase.hb - deleted stdalong case fixer, now part of bin/check.hb (call it it --fixup-case option for same functionality) * doc/oldnews.txt * doc/pp.txt * casing fixes --- ChangeLog.txt | 19 +++ bin/check.hb | 77 +++++---- bin/commit.hb | 135 ++++++++++++---- doc/oldnews.txt | 414 +++++++++++++++++++++++------------------------ doc/pp.txt | 2 +- tests/fixcase.hb | 228 -------------------------- 6 files changed, 377 insertions(+), 498 deletions(-) delete mode 100644 tests/fixcase.hb diff --git a/ChangeLog.txt b/ChangeLog.txt index 28efc6e356..5d728a2ecb 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -10,6 +10,25 @@ * Change, ! Fix, % Optimization, + Addition, - Removal, ; Comment */ +2013-04-07 22:41 UTC+0200 Viktor Szakats (harbour syenar.net) + * bin/commit.hb + + do not add new empty entry template if one already + exist, replace existing one instead + + put last changelog entry to clipboard on pre-commit + + + * bin/check.hb + * refined and sorted exceptions for case checking + + * bin/check.hb + - tests/fixcase.hb + - deleted stdalong case fixer, now part of bin/check.hb + (call it it --fixup-case option for same functionality) + + * doc/oldnews.txt + * doc/pp.txt + * casing fixes + 2013-04-07 17:39 UTC+0200 Viktor Szakats (harbour syenar.net) * bin/check.hb * tests/fixcase.hb diff --git a/bin/check.hb b/bin/check.hb index 78c3346a1e..2fcb9c4e69 100644 --- a/bin/check.hb +++ b/bin/check.hb @@ -45,7 +45,7 @@ FUNCTION CheckFileList( xName ) LOCAL lApplyFixes := "--fixup" $ hb_CmdLine() IF HB_ISSTRING( xName ) - xName := { xName } + xName := iif( Left( xName, 2 ) == "--", NIL, { xName } ) ENDIF IF Empty( xName ) .OR. HB_ISARRAY( xName ) @@ -55,14 +55,22 @@ FUNCTION CheckFileList( xName ) hb_cwd( s ) lApplyFixes := .F. /* do not allow to mass fix all files */ ENDIF - FOR EACH file IN xName - IF ! CheckFile( file, @aErr, lApplyFixes ) - lPassed := .F. - FOR EACH s IN aErr - OutStd( file + ": " + s + hb_eol() ) - NEXT - ENDIF - NEXT + IF "--fixup-case" $ hb_CmdLine() + FOR EACH file IN xName + IF "|" + hb_FNameExt( file ) + "|" $ "|.c|.cpp|.h|.api|.ch|.hb|.po|.prg|.md|.txt|" + FixFuncCase( file, .T. ) + ENDIF + NEXT + ELSE + FOR EACH file IN xName + IF ! CheckFile( file, @aErr, lApplyFixes ) + lPassed := .F. + FOR EACH s IN aErr + OutStd( file + ": " + s + hb_eol() ) + NEXT + ENDIF + NEXT + ENDIF ENDIF RETURN lPassed @@ -100,14 +108,14 @@ STATIC FUNCTION CheckFile( cName, /* @ */ aErr, lApplyFixes ) "*/hb-charmap.def", ; /* TOFIX: Use 8.3 name */ "debian/*", ; "package/*", ; - "*/3rd/*", ; + "lib/3rd/*", ; "contrib/hbwin/*", ; "contrib/rddads/unixutils.h", ; "extras/httpsrv/*" } LOCAL aCanHaveNoExtension := { ; - "Makefile", ; ".*", ; + "Makefile", ; "debian/*" } LOCAL aCanHaveTab := { ; @@ -116,6 +124,7 @@ STATIC FUNCTION CheckFile( cName, /* @ */ aErr, lApplyFixes ) "*.mk", ; "*.yyc", ; "*.dif", ; + "*.html", ; "*.xml", ; "*.css" } @@ -685,9 +694,9 @@ STATIC FUNCTION my_DirScanWorker( cMask, aList ) /* ---- */ -STATIC FUNCTION FixFuncCase( cFileName ) +STATIC FUNCTION FixFuncCase( cFileName, lVerbose ) - STATIC sc_hPartial := { ; + STATIC sc_hInCommentOnly := { ; ".c" =>, ; ".cpp" =>, ; ".h" =>, ; @@ -696,32 +705,30 @@ STATIC FUNCTION FixFuncCase( cFileName ) STATIC sc_hFileExceptions := { ; "ChangeLog.txt" =>, ; "std.ch" =>, ; - "wcecon.prg" =>, ; - "uc16_gen.prg" =>, ; - "clsscope.prg" =>, ; - "speedstr.prg" =>, ; - "cpinfo.prg" =>, ; + "big5_gen.prg" =>, ; "clsccast.prg" =>, ; "clsicast.prg" =>, ; "clsscast.prg" =>, ; - "big5_gen.prg" =>, ; + "clsscope.prg" =>, ; + "cpinfo.prg" =>, ; "foreach2.prg" =>, ; - "speedtst.prg" =>, ; "keywords.prg" =>, ; - "xhb-diff.txt" =>, ; - "pp.txt" =>, ; - "locks.txt" =>, ; - "oldnews.txt" =>, ; + "speedstr.prg" =>, ; + "speedtst.prg" =>, ; + "uc16_gen.prg" =>, ; + "wcecon.prg" =>, ; "c_std.txt" =>, ; + "locks.txt" =>, ; + "pcode.txt" =>, ; "tracing.txt" =>, ; - "pcode.txt" => } + "xhb-diff.txt" => } STATIC sc_aMaskExceptions := { ; "src/3rd/*" , ; "contrib/3rd/*" , ; "contrib/*/3rd/*" , ; "contrib/hbnetio/tests/*" , ; - "extras/httpsrv/home/*" , ; + "contrib/xhb/thtm.prg" , ; "tests/hbpptest/*" , ; "tests/mt/*" , ; "tests/multifnc/*" , ; @@ -735,20 +742,22 @@ STATIC FUNCTION FixFuncCase( cFileName ) LOCAL cProper LOCAL cOldCP - LOCAL lPartial + LOCAL lInCommentOnly LOCAL nChanged := 0 + hb_default( @lVerbose, .F. ) + IF Empty( hb_FNameExt( cFileName ) ) .OR. ; hb_FNameNameExt( cFileName ) $ sc_hFileExceptions .OR. ; - AScan( sc_aMaskExceptions, {| tmp | hb_FileMatch( StrTran( cFileName, "\", "/" ), tmp ) } ) == 0 + AScan( sc_aMaskExceptions, {| tmp | hb_FileMatch( StrTran( cFileName, "\", "/" ), tmp ) } ) != 0 RETURN .F. ENDIF hAll := __hbformat_BuildListOfFunctions() cFile := MemoRead( _HBROOT_ + cFileName ) - lPartial := hb_FNameExt( cFileName ) $ sc_hPartial - cFileStripped := iif( lPartial, GetCComments( cFile ), cFile ) + lInCommentOnly := hb_FNameExt( cFileName ) $ sc_hInCommentOnly + cFileStripped := iif( lInCommentOnly, GetCComments( cFile ), cFile ) cOldCP := hb_cdpSelect( "EN" ) @@ -763,15 +772,17 @@ STATIC FUNCTION FixFuncCase( cFileName ) !( Upper( cProper ) == Upper( "FILE(" ) ) .AND. ; /* interacts with "file(s)" text */ !( Upper( cProper ) == Upper( "TOKEN(" ) ) .AND. ; /* interacts with "token(s)" text */ !( Upper( cProper ) == Upper( "INT(" ) ) .AND. ; /* interacts with SQL statements */ - ( ! lPartial .OR. !( "|" + Lower( cProper ) + "|" $ Lower( "|Max(|Min(|FOpen(|Abs(|Log10(|GetEnv(|Sqrt(|Rand(|IsDigit(|IsAlpha(|" ) ) ) + ( ! lInCommentOnly .OR. !( "|" + Lower( cProper ) + "|" $ Lower( "|Max(|Min(|FOpen(|Abs(|Log10(|GetEnv(|Sqrt(|Rand(|IsDigit(|IsAlpha(|" ) ) ) cFile := Left( cFile, match[ 3 ][ _MATCH_nStart ] - 1 ) + cProper + SubStr( cFile, match[ 3 ][ _MATCH_nEnd ] + 1 ) - ? cFileName, match[ 3 ][ _MATCH_cStr ], cProper, "|" + match[ 1 ][ _MATCH_cStr ] + "|" + IF lVerbose + OutStd( cFileName, match[ 3 ][ _MATCH_cStr ], cProper, "|" + match[ 1 ][ _MATCH_cStr ] + "|" + hb_eol() ) + ENDIF nChanged++ ENDIF ENDIF NEXT - IF !( "hbclass.ch" $ cFileName ) .AND. ! lPartial + IF !( "hbclass.ch" $ cFileName ) .AND. ! lInCommentOnly FOR EACH match IN hb_regexAll( "(?:REQUEST|EXTERNAL|EXTERNA|EXTERN)[ \t]+([A-Za-z_][A-Za-z0-9_]+)", cFile,,,,, .F. ) cProper := ProperCase( hAll, match[ 2 ][ _MATCH_cStr ] ) IF !( cProper == match[ 2 ][ _MATCH_cStr ] ) diff --git a/bin/commit.hb b/bin/commit.hb index 392c052ff7..0db57d5183 100644 --- a/bin/commit.hb +++ b/bin/commit.hb @@ -30,6 +30,8 @@ #pragma -km+ #pragma -ko+ +#include "hbgtinfo.ch" + PROCEDURE Main() LOCAL cVCS := VCSDetect() @@ -37,14 +39,10 @@ PROCEDURE Main() LOCAL aFiles := {} LOCAL aChanges := DoctorChanges( cVCS, Changes( cVCS ), aFiles ) LOCAL cLog - LOCAL cLogNew - LOCAL cLine - LOCAL nOffset - LOCAL cHit - LOCAL nPos + LOCAL nStart, nEnd LOCAL cMyName - LOCAL cOldLang LOCAL cLogName + LOCAL lWasChangeLog IF Empty( aChanges ) OutStd( hb_ProgName() + ": " + "no changes" + hb_eol() ) @@ -67,6 +65,12 @@ PROCEDURE Main() OutStd( hb_ProgName() + ": " + hb_StrFormat( "%1$s not updated. Run 'hbrun bin/commit' and retry.", cLogName ) + hb_eol() ) ErrorLevel( 3 ) RETURN + ELSE + cLog := GetLastEntry( MemoRead( cLogName ), @nStart, @nEnd ) + IF ! Empty( cLog ) + hbshell_gtSelect() + hb_gtInfo( HB_GTI_CLIPBOARDDATA, cLog ) + ENDIF ENDIF ELSE IF cVCS == "git" @@ -81,34 +85,28 @@ PROCEDURE Main() ENDIF ENDIF - nOffset := hb_UTCOffset() - - cLogNew := hb_StrFormat( "%1$s UTC%2$s%3$02d%4$02d %5$s", ; - hb_TToC( hb_DateTime(), "YYYY-MM-DD", "HH:MM" ), ; - iif( nOffset < 0, "-", "+" ), ; - Int( nOffset / 3600 ), ; - Int( ( ( nOffset / 3600 ) - Int( nOffset / 3600 ) ) * 60 ), ; - cMyName ) + hb_eol() - - FOR EACH cLine IN aChanges - cLogNew += cLine + hb_eol() - NEXT - // ; cLog := MemoRead( cLogName ) - cOldLang := hb_cdpSelect( "EN" ) - cHit := hb_AtX( "\n[1-2][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9] [0-2][0-9]:[0-5][0-9] UTC[\-+][0-1][0-9][0-5][0-9] ", cLog ) - IF Empty( cHit ) - cHit := "" - ENDIF - hb_cdpSelect( cOldLang ) - nPos := At( AllTrim( cHit ), cLog ) - IF nPos > 0 - cLog := Left( cLog, nPos - 1 ) + cLogNew + hb_eol() + SubStr( cLog, nPos ) + GetLastEntry( cLog, @nStart, @nEnd ) + + IF nStart > 0 + + /* Strip last entry if it's empty to avoid adding double entries */ + IF IsLastEntryEmpty( SubStr( cLog, nStart, nEnd - nStart ), cLogName, @lWasChangeLog ) + OutStd( hb_ProgName() + ": " + hb_StrFormat( "Updating last empty %1$s entry", cLogName ) + hb_eol() ) + cLog := Left( cLog, nStart - 1 ) + SubStr( cLog, nEnd ) + ELSE + lWasChangelog := .T. + ENDIF + + cLog := ; + Left( cLog, nStart - 1 ) + ; + MakeEntry( aChanges, cMyName, cLogName, lWasChangeLog ) + hb_eol() + ; + SubStr( cLog, nStart ) ELSE - cLog += hb_eol() + cLogNew + cLog += hb_eol() + MakeEntry( aChanges, cMyName, cLogName, .T. ) ENDIF hb_MemoWrit( cLogName, cLog ) @@ -125,6 +123,85 @@ PROCEDURE Main() RETURN +STATIC FUNCTION GetLastEntry( cLog, /* @ */ nStart, /* @ */ nEnd ) + + LOCAL cLogHeaderExp := "\n[1-2][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9] [0-2][0-9]:[0-5][0-9] UTC[\-+][0-1][0-9][0-5][0-9] [\S ]*" + hb_eol() + + LOCAL cOldLang := hb_cdpSelect( "EN" ) + LOCAL cHit + + nEnd := 0 + + cHit := hb_AtX( cLogHeaderExp, cLog ) + IF Empty( cHit ) + cHit := "" + ENDIF + + nStart := At( AllTrim( cHit ), cLog ) + IF nStart > 0 + + cHit := hb_AtX( cLogHeaderExp, cLog,, nStart + Len( cHit ) ) + IF Empty( cHit ) + cHit := "" + ENDIF + + nEnd := At( AllTrim( cHit ), cLog ) + IF nEnd == 0 + nEnd := Len( cLog ) + ENDIF + + cLog := hb_StrShrink( SubStr( cLog, nStart, nEnd - nStart ), Len( hb_eol() ) ) + ELSE + cLog := "" + ENDIF + + hb_cdpSelect( cOldLang ) + + RETURN cLog + +STATIC FUNCTION MakeEntry( aChanges, cMyName, cLogName, lAllowChangeLog ) + + LOCAL nOffset := hb_UTCOffset() + + LOCAL cLog := hb_StrFormat( "%1$s UTC%2$s%3$02d%4$02d %5$s", ; + hb_TToC( hb_DateTime(), "YYYY-MM-DD", "HH:MM" ), ; + iif( nOffset < 0, "-", "+" ), ; + Int( nOffset / 3600 ), ; + Int( ( ( nOffset / 3600 ) - Int( nOffset / 3600 ) ) * 60 ), ; + cMyName ) + hb_eol() + + LOCAL cLine + + FOR EACH cLine IN aChanges + IF lAllowChangeLog .OR. !( SubStr( cLine, 5 ) == cLogName ) + cLog += cLine + hb_eol() + ENDIF + NEXT + + RETURN cLog + +STATIC FUNCTION IsLastEntryEmpty( cLog, cLogName, /* @ */ lChangeLog ) + + LOCAL cLine + + lChangeLog := .F. + + FOR EACH cLine IN hb_ATokens( StrTran( cLog, Chr( 13 ) ), Chr( 10 ) ) + IF cLine:__enumIndex() != 1 + IF Empty( Left( cLine, 2 ) ) .AND. ! Empty( SubStr( cLine, 3, 1 ) ) + IF SubStr( cLine, 5 ) == cLogName + lChangeLog := .T. + ENDIF + ELSE + IF ! Empty( cLine ) + RETURN .F. + ENDIF + ENDIF + ENDIF + NEXT + + RETURN .T. + STATIC FUNCTION VCSDetect() DO CASE diff --git a/doc/oldnews.txt b/doc/oldnews.txt index cc0f25d78d..81c5697a43 100644 --- a/doc/oldnews.txt +++ b/doc/oldnews.txt @@ -26,7 +26,7 @@ Known build issues Known open issues ============================= - HB_TCHAR_* macro usage in Harbour sources -- ACHOICE() minor Clipper compatibility bugs +- AChoice() minor Clipper compatibility bugs - MENUSYS minor Clipper incompatibility - Target specific C code generated for some numeric operations in -gc3 mode (preventing cross-compilation) @@ -143,54 +143,54 @@ Core files (hbi18n). - Added hb_fsCreateTempEx(), hb_fileCreateTempEx() C level APIs. - Fixed to not use C RTL CP dependent character functions - in Harbour code. (islower(), toupper(), etc) + in Harbour code. (IsLower(), toupper(), etc) Added new macros instead. -- __NATISNEGATIVE() and __NATISAFFIRM() are now using +- __natIsNegative() and __natIsAffirm() are now using CP sensitive case conversion. - Added hb_charIsUpper()/hb_charIsLower() APIs. -- CURDRIVE() and DISKNAME() fixed for systems that don't support +- CurDrive() and DiskName() fixed for systems that don't support drive letters. -- Xbase++ compatible TBROWSE()/TBCOLUMN()/GET() related methods +- Xbase++ compatible TBrowse()/TBColumn()/Get() related methods moved to derived classes xpp_TBrowse()/xpp_TBColumn()/xpp_Get(). -- Fixed potential GPF in HB_RASCAN(). +- Fixed potential GPF in hb_RAScan(). - Debugger improvements and fixes. - Most Harbour level code prepared for MT. - Fixed few potential GPFs in RDDNTX, RDDCDX code. - Added own hb_snprintf() implementation. -- Fixed HB_VERSION( HB_VERSION_BUILD_DATE ) +- Fixed hb_Version( HB_VERSION_BUILD_DATE ) - Added hbuddall library holding all core supplied user RDDs. - Fixed to successfully build all user RDD examples. - Fixed dbCreate() behaviour in arrayrdd user RDD. - Added new LOGRDD user RDD. - Added DBFNSX RDD. -- Fixed FWRITE() potential GPF and security hole. +- Fixed FWrite() potential GPF and security hole. - Added __FILE__ support for .prg code. - Added: - HB_MILLISECONDS() - HB_FTEMPCREATEEX( @, , , ) -> - HB_STRDECODESCAPE( ) -> - HB_STRCDECODE( [, @ ] ) -> | NIL - HB_STRXOR( , | ) -> - HB_PROGNAME() -> - HB_DISPOUTATBOX() similar to HB_DISPOUTAT() but for drawing chars. - HB_FGETATTR( , @ ) -> - HB_FSETATTR( , ) -> - HB_FSETDATETIME( , [], [], [] ) -> - HB_FGETDATETIME() - HB_WILDMATCHI() like HB_WILDMATCH() but case-insentitive. - HB_CDPSELECT() same as HB_SETCODEPAGE() (please upgrade to new function name). - HB_CDPUNIID( ) -> - HB_GTINFO( HB_GTI_CARGO[, - HB_DIRBASE() -> - HB_DBCREATETEMP()/DBCREATETEMP() to create temporary tables. - HB_MMIDDLEDOWN/MMIDDLEDOWN() new Harbour function. - DBINFO( DBI_ISTEMPORARY ) - HB_VERSION( HB_VERSION_BUILD_PLAT ) - HB_VERSION( HB_VERSION_BUILD_COMP ) - HB_STRFORMAT() C-like string formatting function + hb_MilliSeconds() + hb_FTempCreateEx( @, , , ) -> + hb_StrDecodEscape( ) -> + hb_StrCDecode( [, @ ] ) -> | NIL + hb_StrXor( , | ) -> + hb_ProgName() -> + hb_DispOutAtBox() similar to hb_DispOutAt() but for drawing chars. + hb_FGetAttr( , @ ) -> + hb_FSetAttr( , ) -> + hb_FSetDateTime( , [], [], [] ) -> + hb_FGetDateTime() + hb_WildMatchI() like hb_WildMatch() but case-insentitive. + hb_cdpSelect() same as hb_SetCodepage() (please upgrade to new function name). + hb_cdpUniID( ) -> + hb_gtInfo( HB_GTI_CARGO[, + hb_DirBase() -> + hb_dbCreateTemp()/DBCREATETEMP() to create temporary tables. + HB_MMIDDLEDOWN/MMiddleDown() new Harbour function. + dbInfo( DBI_ISTEMPORARY ) + hb_Version( HB_VERSION_BUILD_PLAT ) + hb_Version( HB_VERSION_BUILD_COMP ) + hb_StrFormat() C-like string formatting function (also as C level API named hb_StrFormat()) - HB_SETENV( , [] [, ] ) -> - (also as C level API named hb_setenv()) + hb_SetEnv( , [] [, ] ) -> + (also as C level API named hb_SetEnv()) - Fixed UNSELECTED color updating in SetColor(). - GTWVT, GTWIN HB_GTI_CODEPAGE support. - GTWVT now supports drawing chars even if the selected codepage @@ -198,10 +198,10 @@ Core - GTWVT HB_GTI_BOXCP support. - GTWVT disabled K_MM*DOWN non-Clipper (and other GT) compatible mouse events. -- Fixed TBROWSE(), TPOPUP() to display drawing chars properly. -- Fixed DISKSPACE() and HB_DISKSPACE() to return proper values +- Fixed TBrowse(), TPOPUP() to display drawing chars properly. +- Fixed DiskSpace() and hb_DiskSpace() to return proper values on Darwin. -- Fixed DIRECTORY() when called with "V" (label) parameter (on Windows). +- Fixed Directory() when called with "V" (label) parameter (on Windows). - New HB_SIZEOFARRAY() macro. - Added C APIs: hb_charIsDigit(), hb_charIsAlpha(), hb_charIsLower(), hb_charIsUpper() @@ -210,13 +210,13 @@ Core C level: hb_setGetOSCODEPAGE() Conversion is done automatically in existing functions. - Added hb_osDecode(), hb_osEncode() C APIs. -- HB_GETENV() extended with 3rd parameter to control OS codepage +- hb_GetEnv() extended with 3rd parameter to control OS codepage conversion (on by default). - Added CPU dump support for AMD64/x64. - Added module listing on GPF for x86 and x64. - GTXWC potential GPF fixed. - Added process handling: - HB_PROCESSOPEN(), HB_PROCESSVALUE(), HB_PROCESSCLOSE() + hb_processOpen(), hb_processValue(), hb_processClose() - Added HB_GTI_BOXCP to control box drawing CP for GTs. - Using Heap instead of Local memory when HB_FM_WIN32_ALLOC is set. - Added __objHasMsgAssigned( object, "msgName" ) @@ -235,7 +235,7 @@ Core - GTTRM added support for HB_GTI_PALETTE. - New compiler expression optimizations, and some fixes for rare cases. - Some compiler optimizations are now enabled using new -ko switch. -- Added array preallocation on AADD(). +- Added array preallocation on AAdd(). - Optimization to string reallocation. - Added detection of unused variable assigments. Code cleaned in all Harbour for such warnings. @@ -243,7 +243,7 @@ Core - __HRB*() functions marked as compatibility, please update your code to use HB_HRB*(). - __RDDGETTEMPALIAS() marked as compatibility, please update your - code to use HB_RDDGETTEMPALIAS(). + code to use hb_rddGetTempAlias(). - Added hb_spFileExists() a more efficient version of hb_spFile(). Modified Harbour code to use the new API. - HSX index MT support. @@ -254,7 +254,7 @@ Core - HB_SYMBOL_UNUSED() moved to std.ch. NOTE: This macro is no longer present in common.ch so if you're overriding std.ch, make sure to add this macro to your header file. -- BIN2W(), BIN2I(), BIN2L(), I2BIN(), L2BIN(), BIN2U(), W2BIN(), U2BIN() +- Bin2W(), Bin2I(), Bin2L(), I2Bin(), L2Bin(), Bin2U(), W2Bin(), U2Bin() functions rewritten in a more efficient way. Previous pure GPL license changed to standard Harbour license (including exception). - Fixed Ukrainian localization files. @@ -274,7 +274,7 @@ Core and much more. Replaced Win/DOS specific .bat files with portable .hbp and .hbm files. - Added all missing non-multibyte codepages. -- LISTBOX() doesn't modify _SET_EXACT settings anymore in :Find*() methods. +- ListBox() doesn't modify _SET_EXACT settings anymore in :Find*() methods. - HVM pcode evaluation speed improvement. - Fixed _SET_EXACT handling in core. - hb_gtInfo( HB_GTI_PALLETE ) now uses zero based color indexes in @@ -324,40 +324,40 @@ Core It should make some xHarbour users using OVERRIDE METHOD happy but please remember it's still undocumented and unsupported functionality - use for your own risk. -- Fixed typo in HB_INETDATAREADY() - the second parameter (timeout) +- Fixed typo in hb_inetDataReady() - the second parameter (timeout) was ignored. - Changed the NOT operator precedence - it should be bigger then logical .and./.or. operators in #if expressions. -- Fixed HB_REGEXMATCH(). Now the HAS/LIKE mode can be controlled +- Fixed hb_regexMatch(). Now the HAS/LIKE mode can be controlled by 5th logical parameter (was 3rd), so 3rd parameter is solely controlling case-sensitivity as indicated in the documentation. - Users are recommended to use HB_REGEXHAS() and HB_REGEXLIKE() + Users are recommended to use hb_regexHas() and hb_regexLike() functions as unambiguous alternatives, which work equally - well on all Harbour versions. HB_REGEXMATCH() is now deprecated, + well on all Harbour versions. hb_regexMatch() is now deprecated, but kept for compatibility. -- ACHOICE() fixed to redisplay itself when exiting with or +- AChoice() fixed to redisplay itself when exiting with or equivalent. Contrib ============================= - hbblat new Blat interface class for Windows (Contributed by Francesco Saverio Giudice). -- hbmzip fixed GPF in HB_ZIPDELETEFILE() when file has comment. -- hbmzip fixed handling attributes in HB_ZIPFILECREATE(). +- hbmzip fixed GPF in hb_zipDeleteFile() when file has comment. +- hbmzip fixed handling attributes in hb_zipFileCreate(). - hbmzip fixed timestamps stored in .zip files. -- hbmzip added HB_ZIPSTOREFILEHANDLE(), - HB_UNZIPEXTRACTCURRENTFILETOHANDLE() functions. -- hbwin WIN_REGREAD()/GETREGISTRY() got new parameter to supply +- hbmzip added hb_zipStoreFileHandle(), + hb_unzipExtractCurrentFileToHandle() functions. +- hbwin win_regRead()/GetRegistry() got new parameter to supply a default value when the entry isn't found. - hbtip FTP handling fixed some accidental typos. - hbtip new MIME types. - hbtip fixes and optimization to HB_BASE64(). - rddads now autodetects version 9.10. -- hbct XTOC(), FTOC() and CTOF() fixed to be properly multiplatform. +- hbct XToC(), FToC() and CToF() fixed to be properly multiplatform. - hbct unbuffered drawing speed improvement in windowing code. -- hbct DIRNAME() fixed. +- hbct DirName() fixed. - hbct other fixes. -- hbct FILESEEK(), FILEATTR(), FILESIZE(), FILEDATE() now MT compatible. +- hbct FileSeek(), FileAttr(), FileSize(), FileDate() now MT compatible. - hbct added support for thread local current window pointer in CT Windows. - hbwin made steps towards creating a unified Windows API wrapper layer. - Added hbcrypt, hbssl and rddsql (with mysql, pgsql, fbsql plugins) @@ -367,71 +367,71 @@ Contrib - gtwvg lots of improvements. - gtwvg Xbase++ compatible UI objects. - hbw32 library renamed to hbwin. -- hbwin added WIN_ABORTDOC(), WIN_RUNDETACHED(), WIN_SHELLEXECUTE(), - WIN_LOADRESOURCE(). +- hbwin added win_AbortDoc(), win_RunDetached(), WIN_SHELLEXECUTE(), + win_LoadResource(). - dbu patch now adds SET DATE ANSI and SET CENTURY ON. -- hbwin WIN_MULDIV(), WIN_RECTANGLE(), WIN_SETBKMODE() extended to +- hbwin win_MulDiv(), win_Rectangle(), win_SetBkMode() extended to accept handles passed using alternate methods. - hbwin function names changed as below: - - W32_REGPATHSPLIT() -> WIN_REGPATHSPLIT() - - W32_REGREAD() -> WIN_REGREAD() - - W32_REGWRITE() -> WIN_REGWRITE() - - WIN32_REGCREATEKEYEX() -> WIN_REGCREATEKEYEX() - - WIN32_REGOPENKEYEX() -> WIN_REGOPENKEYEX() - - WIN32_REGQUERYVALUEEX() -> WIN_REGQUERYVALUEEX() - - WIN32_REGSETVALUEEX() -> WIN_REGSETVALUEEX() - - WIN32_REGCLOSEKEY() -> WIN_REGCLOSEKEY() - - WIN32_ARC() -> WIN_ARC() - - WIN32_BITMAPSOK() -> WIN_BITMAPSOK() - - WIN32_CREATEDC() -> WIN_CREATEDC() - - WIN32_CREATEFONT() -> WIN_CREATEFONT() - - WIN32_DELETEDC() -> WIN_DELETEDC() - - WIN32_DRAWBITMAP() -> WIN_DRAWBITMAP() - - WIN32_ELLIPSE() -> WIN_ELLIPSE() - - WIN32_ENDDOC() -> WIN_ENDDOC() - - WIN32_ENDPAGE() -> WIN_ENDPAGE() - - WIN32_ENUMFONTS() -> WIN_ENUMFONTS() - - WIN32_FILLRECT() -> WIN_FILLRECT() - - WIN32_GETCHARSIZE() -> WIN_GETCHARSIZE() - - WIN32_GETDEVICECAPS() -> WIN_GETDEVICECAPS() + - W32_REGPATHSPLIT() -> win_regPathSplit() + - W32_REGREAD() -> win_regRead() + - W32_REGWRITE() -> win_regWrite() + - WIN32_REGCREATEKEYEX() -> win_regCreateKeyEx() + - WIN32_REGOPENKEYEX() -> win_regOpenKeyEx() + - WIN32_REGQUERYVALUEEX() -> win_regQueryValueEx() + - WIN32_REGSETVALUEEX() -> win_regSetValueEx() + - WIN32_REGCLOSEKEY() -> win_regCloseKey() + - WIN32_ARC() -> win_Arc() + - WIN32_BITMAPSOK() -> win_BitmapsOK() + - WIN32_CREATEDC() -> win_CreateDC() + - WIN32_CREATEFONT() -> win_CreateFont() + - WIN32_DELETEDC() -> win_DeleteDC() + - WIN32_DRAWBITMAP() -> win_DrawBitmap() + - WIN32_ELLIPSE() -> win_Ellipse() + - WIN32_ENDDOC() -> win_EndDoc() + - WIN32_ENDPAGE() -> win_EndPage() + - WIN32_ENUMFONTS() -> win_EnumFonts() + - WIN32_FILLRECT() -> win_FillRect() + - WIN32_GETCHARSIZE() -> win_GetCharSize() + - WIN32_GETDEVICECAPS() -> win_GetDeviceCaps() - WIN32_GETEXEFILENAME() -> WIN_GETEXEFILENAME() - - WIN32_GETPRINTERFONTNAME() -> WIN_GETPRINTERFONTNAME() - - WIN32_GETTEXTSIZE() -> WIN_GETTEXTSIZE() - - WIN32_LINETO() -> WIN_LINETO() - - WIN32_LOADBITMAPFILE() -> WIN_LOADBITMAPFILE() - - WIN32_MULDIV() -> WIN_MULDIV() + - WIN32_GETPRINTERFONTNAME() -> win_GetPrinterFontName() + - WIN32_GETTEXTSIZE() -> win_GetTextSize() + - WIN32_LINETO() -> win_LineTo() + - WIN32_LOADBITMAPFILE() -> win_LoadBitmapFile() + - WIN32_MULDIV() -> win_MulDiv() - WIN32_OS_ISWIN9X() -> WIN_OS_ISWIN9X() - - WIN32_RECTANGLE() -> WIN_RECTANGLE() - - WIN32_SETBKMODE() -> WIN_SETBKMODE() - - WIN32_SETCOLOR() -> WIN_SETCOLOR() - - WIN32_SETDOCUMENTPROPERTIES() -> WIN_SETDOCUMENTPROPERTIES() - - WIN32_SETMAPMODE() -> WIN_SETMAPMODE() - - WIN32_SETPEN() -> WIN_SETPEN() - - WIN32_STARTDOC() -> WIN_STARTDOC() - - WIN32_STARTPAGE() -> WIN_STARTPAGE() - - WIN32_TEXTOUT() -> WIN_TEXTOUT() + - WIN32_RECTANGLE() -> win_Rectangle() + - WIN32_SETBKMODE() -> win_SetBkMode() + - WIN32_SETCOLOR() -> win_SetColor() + - WIN32_SETDOCUMENTPROPERTIES() -> win_SetDocumentProperties() + - WIN32_SETMAPMODE() -> win_SetMapMode() + - WIN32_SETPEN() -> win_SetPen() + - WIN32_STARTDOC() -> win_StartDoc() + - WIN32_STARTPAGE() -> win_StartPage() + - WIN32_TEXTOUT() -> win_TextOut() - WIN32PRN class -> WIN_PRN class - WIN32BMP class -> WIN_BMP class - hbct GPF and wrong RTE messages fixed in: - CHARADD(), CHARSUB(), CHARAND(), CHAROR(), CHARXOR() + CharAdd(), CharSub(), CharAnd(), CharOr(), CharXor() - hbct string optimizations in thrown RTEs. - hbziparc fixed behavior if the parameter is not passed. - hbhpdf added HPDF_VERSION_TEXT() to replace former macro with the same name. -- hbhpdf fixed HPDF_SETINFODATEATTR() function. +- hbhpdf fixed HPDF_SetInfoDateAttr() function. - Added experimental terminal server written in Harbour. Find it in /examples. - hbgt now properly checks for package version and includes feature accordingly. -- hbwin added WAPI_GETCOMMANDLINE(), WIN_GETCOMMANDLINEPARAM(), - WAPI_GETLASTERROR(), WAPI_SETLASTERROR(), WAPI_SETERRORMODE(). +- hbwin added wapi_GetCommandLine(), win_GetCommandLineParam(), + wapi_GetLastError(), wapi_SetLastError(), wapi_SetErrorMode(). - hbwhat removed from contrib list and moved to examples instead. - xhb OVERRIDE / EXTEND CLASS emulation in xhbcls.ch header. (this feature is there to help xhb compatibility, but can break inheritance scheme and internal class definitions in both compilers) - xhb added DBF2TXT() with critical fixes. -- xhb added HB_REGEXREPLACE(). +- xhb added hb_regexReplace(). - hbwin WINPORTWRITE() GPF when wrong parameter type is passed. - Added Darwin/MacPorts support for following contribs: gtalleg, hbmysql, hbpgsql, sddmy, sddpg, hbfimage. @@ -598,7 +598,7 @@ Core - Fixed OS() to detect Vista/Windows 2008. This bug got introduced in 1.0.0rc2. - Fixed OS() string when run on Windows XP 64-bit Edition. -- Changed HB_COMPILER() to always show 32/64-bit in the +- Changed hb_Compiler() to always show 32/64-bit in the returned string. - Fixed GPFs and leaks when using Harbour compiler -w3 switch. - Bad workaround added for Pelles C 5.00.1 in AMD64 mode to @@ -607,7 +607,7 @@ Core - PCRE lib upgraded to 7.8 (from 7.7) - Fixed dbInfo( DBI_POSITIONED ) returned value. - Fixed internal error in dirty index reading. -- Fixed return value of HB_INETGETSNDBUFSIZE(). +- Fixed return value of hb_inetGetSndBufSize(). - Fixed GPF when user sort code block reduces the size of sorted array. - Fixed typo in hash cloning code which caused that references was copied to cloned array. Thanks to Mindaugas for example. @@ -623,14 +623,14 @@ Contrib - hbclipsm GAUGE*() function fixes. - gtalleg fixed to compile under several non-*nix platforms (still needs more work). -- xhb: HB_ARRAYBLOCK() compatibility function added. -- hbnf FT_GETE() function bad leak fixed on Win32 systems, +- xhb: hb_ArrayBlock() compatibility function added. +- hbnf ft_GetE() function bad leak fixed on Win32 systems, and potential GPF on all systems. - hbwhat32 removed wintypes.ch header. Header with the same name and identical content can be found in xhb contrib. -- hbct VOLUME() buffer overrun fixed. +- hbct Volume() buffer overrun fixed. - hbole GPF fixed. This bug got introduced in 1.0.0rc2. -- hbole, hbw32 64-bit fix for MESSAGEBOX() functions. It now +- hbole, hbw32 64-bit fix for MessageBox() functions. It now allows for both pointer and numeric types to be passed as a window handle. - hbwhat32 fixed to not define WinMain() and also not to @@ -669,7 +669,7 @@ Contrib and fixed to support Win64 platform. INTERNETREADFILE(), INTERNETWRITEFILE() functions were fixed. what32.ch renamed to hbwhat.ch. -- hbhpdf fixed HPDF_ADDPAGELABEL(). +- hbhpdf fixed HPDF_AddPageLabel(). - hbw32 got a new COM port handling class and API. - gtwvg got some enhancements and 64-bit compatibility fixes. A critical 1.0.0 bug was also fixed, which could cause @@ -715,7 +715,7 @@ General Core ============================= - Fixed __HARBOUR__ macro on .prg level, when compiled with -u switch. -- HB_ARRAYID() moved to xhb.lib, synced with xhb and made 64-bit compatible. +- hb_ArrayId() moved to xhb.lib, synced with xhb and made 64-bit compatible. - File handle usage cleanup and 64-bit compatibility. - Automatic destructors for .hrb modules. - Added passing non-string parameters to .hrb functions. @@ -725,47 +725,47 @@ Core hb_fsGetAttr(). - New date API function: hb_timeStampEncode(). - Fixed printing under OS/2. -- Implemented DBEDIT() DE_APPEND mode plus some other features and +- Implemented dbEdit() DE_APPEND mode plus some other features and compatibility fixes. - MD5 calculation fixes. - Added C level hb_hashAddNew(). -- Compile time optimization of EMPTY() function. +- Compile time optimization of Empty() function. - Compress trailing spaces during string item serialization. - Replicated CA-Cl*pper compile time optimization bugs. -- TCP/IP function (HB_INET*()) fixes. -- Added HB_OSFILEMASK(), HB_DIRSCAN(), HB_FILEMATCH() Harbour level functions. +- TCP/IP function (hb_inet*()) fixes. +- Added hb_osFileMask(), hb_DirScan(), hb_FileMatch() Harbour level functions. - Fixed RTE in HBReportForm() class. -- Added __OBJGETPROPERTIES(), extended __CLSGETPROPERTIES(). +- Added __objGetProperties(), extended __clsGetProperties(). - Changed (incompatible): __PLATFORM__Windows -> __PLATFORM__WINDOWS __PLATFORM__Linux -> __PLATFORM__LINUX - hbdot functionality merged into hbrun. - *nix exception handler added. - Source filename visible in stack traces. -- ACHOICE() mouse support added. +- AChoice() mouse support added. - Core Harbour level ZLIB compression functions renamed as follows: - HB_COMPRESS() -> HB_ZCOMPRESS() - HB_COMPRESSBOUND() -> HB_ZCOMPRESSBOUND() - HB_UNCOMPRESS() -> HB_ZUNCOMPRESS() - HB_UNCOMPRESSLEN() -> HB_ZUNCOMPRESSLEN() + hb_Compress() -> hb_ZCompress() + HB_COMPRESSBOUND() -> hb_ZCompressBound() + hb_Uncompress() -> hb_ZUncompress() + HB_UNCOMPRESSLEN() -> hb_ZUncompressLen() - Harbour .hrb API moved to the documented namespace as follows: - __HRBRUN() -> HB_HRBRUN() - __HRBLOAD() -> HB_HRBLOAD() - __HRBUNLOAD() -> HB_HRBUNLOAD() - __HRBDO() -> HB_HRBDO() - __HRBDOFU() -> (deleted, please use DO()) - __HRBGETFU() -> HB_HRBGETFUNSYM() + __HRBRUN() -> hb_hrbRun() + __HRBLOAD() -> hb_hrbLoad() + __HRBUNLOAD() -> hb_hrbUnload() + __HRBDO() -> hb_hrbDo() + __HRBDOFU() -> (deleted, please use Do()) + __HRBGETFU() -> hb_hrbGetFunSym() (old function names still function) Contrib ============================= - Better cross-build support for contribs with external dependencies. - hbmzip OS/2 support, Unix .zip header fix, using Harbour memory - management functions, global and file comment support, HB_ZIPDELETEFILE() + management functions, global and file comment support, hb_zipDeleteFile() function. - hbziparch fixes and better portability. - hbcurl fixes, now using Harbour memory allocation functions, - now older libcurl versions are supported as well, CURL_EASY_GETINFO() + now older libcurl versions are supported as well, curl_easy_getinfo() fixed for unsupported info types. - 64-bit compatibility fixes. hbmysql/SQLLISTF() function now uses pointer instead of numeric type. @@ -837,19 +837,19 @@ Contrib - hbziparch updated, bugs fixed and ZipArchive library updated to latest version. - Added DLL call functionality to hbw32 contrib. -- Added HB_FREADLINE(), HB_CRYPT(), HB_DECRYPT() to xhb contrib. +- Added hb_FReadLine(), hb_Crypt(), hb_Decrypt() to xhb contrib. - Added hbtip contrib tests. - GTWVG contrib enhancements. -- Added SQL_SPRINTF() to hbmisc contrib. -- Enhanced STRFORMAT() in hbmisc contrib. +- Added sql_sprintf() to hbmisc contrib. +- Enhanced StrFormat() in hbmisc contrib. - Enabled hbgf contrib for all (Linux, OS/2, Windows) platforms. - Due to fixing 64-bit portability problems, some functions became incompatible, because numeric addresses have been converted to pointer types: - hbwhat32: wndproc/dlgproc parameters in related functions. - - hbmysql: SQLCONNECT(), SQLSTORER(), SQLUSERES() + - hbmysql: SQLConnect(), SQLSTORER(), SQLUSERES() - hbmsql: MSQLSTORER(), MSQLLISTFI() -- Removed function CEIL() from hbmisc. Please use CEILING() from hbct +- Removed function CEIL() from hbmisc. Please use Ceiling() from hbct instead. - Optimizations and minor fixes. @@ -988,9 +988,9 @@ VM c := Upper( c ) NEXT - added full support for FOR EACH overloading -- extended PROCFILE() function - now it can accept | | - as first parameter, f.e.: PROCFILE( @someFunc() ) or - PROCFILE( "PUBLICFUNC" ) or PROCFILE( nStackLevel ). For non character +- extended ProcFile() function - now it can accept | | + as first parameter, f.e.: ProcFile( @someFunc() ) or + ProcFile( "PUBLICFUNC" ) or ProcFile( nStackLevel ). For non character parameters it fully works also for static functions even if source code have many static functions with the same name - added support for detecting not cleanly overloaded by linker .prg @@ -1013,9 +1013,9 @@ RTL - added functions for bit manipulations: HB_BIT*() and for conversions to/from hexadecimal format - added set of functions with hb_ prefix supported extended parameters, - f.e.: HB_AINS(), HB_ADEL(), HB_ASCAN(), HB_RASCAN(), HB_GETENV(), - HB_AT(), ... -- added HB_FILEEXISTS(), HB_DIREXISTS() + f.e.: hb_AIns(), hb_ADel(), hb_AScan(), hb_RAScan(), hb_GetEnv(), + hb_At(), ... +- added hb_FileExists(), hb_DirExists() - new TBROWSE class which is now very highly compatible with Clipper It should resolve 99.9% problems with BROWSE reported in the past. - TBCOLUMN class is now fully Clipper compatible @@ -1032,8 +1032,8 @@ RTL - added _SET_TRIMFILENAME - when enabled low level hb_fs*() functions strip trailing and leading spaces from file names to emulate DOS like behavior - added support for _SET_DEFEXTENSIONS to native all RDDs -- many fixes in transform() function and fixed 64-bit integer transformation. - Now transform() passes our all compatibility tests +- many fixes in Transform() function and fixed 64-bit integer transformation. + Now Transform() passes our all compatibility tests - added undocumented Clipper error functions - added functions to manage .ini files: HB_INI*() - extended HB_KEYPUT to support strings and arrays. @@ -1081,7 +1081,7 @@ GT: escape key sequences in terminal based GTs. It's supported by GTCRS and GTTRM - fixed color string decoding to be fully Clipper compatible -- OUTSTD()/OUTERR() respects automatic CP translation when they +- OutStd()/OutErr() respects automatic CP translation when they are not redirected to GT screen - added common for all GTs CLIPBOARD support. If possible low level GT drivers uses system clipboard otherwise they emulate it for Harbour @@ -1121,8 +1121,8 @@ Contrib - many contrib libraries borrowed from xHarbour code - added xHarbour compatibility library: xhb. It emulates many of xHarbour behavior which cannot be covered by PP rules like extended operators, - strings like arrays, one byte string in math operations, HB_ENUMINDEX(), - HB_QWith(), HB_QSelf(), accessing hash item using OOP interface, + strings like arrays, one byte string in math operations, hb_enumIndex(), + hb_QWith(), hb_QSelf(), accessing hash item using OOP interface, accessing/assigning string characters using [] operators (many of the above fully works only in Harbour but not in native xHarbour code :-)) and many extensions like HBLOG, HBXML, HBCSTRUCT, HASH, INET*(), etc. @@ -1227,7 +1227,7 @@ The runtime modules - Class code extensively changed with many extensions like nonvirtual methods and members, scopes, friend classes and functions, destructors, etc. -- Added support for PROCFILE() +- Added support for ProcFile() - Profiler code disabled in default build. GT: --- @@ -1274,7 +1274,7 @@ syntax: internals: ---------- - Fixed bug in divide by 0 substitution. -- Fixed bug in ASC() optimization (when character code > 127) +- Fixed bug in Asc() optimization (when character code > 127) - Fixed path delimiters in included file names. - Removed strong typing in the compiler. Reactivate it by compiling with -DHB_COMP_STRONG_TYPES. @@ -1372,25 +1372,25 @@ API Now HB_P_ENDBLOCK and HB_P_ENDPROC pcodes set HB_ENDPROC_REQUESTED and the main loop can be exited only from one place. It gives some small but noticeable speed improvement. -- Possible problem fixed in __CLSADDMSG() where message parameter was +- Possible problem fixed in __clsAddMsg() where message parameter was required to be uppercase when overloading operators .NOT. .AND. .OR. - Fixed GPF when unshareing string item buffer with embedded 0 by using hb_itemUnShare(). - Make HB_SET_TYPEAHEAD Clipper compatible. -- Set DOSERROR() to oError:OSCODE when RT error is generated. +- Set DosError() to oError:OSCODE when RT error is generated. - Fixed some small incompatibilities with Clipper in number to string conversions. - Added HB_STR_DATE_BASE for conversion to string, Clipper - compatibility though we are not 100% Clipper compatible in STOD() + compatibility though we are not 100% Clipper compatible in SToD() because we will have to reduce functionality (supported date range) - to reach it. In Clipper STOD(DTOS()) is not revertible, it is + to reach it. In Clipper SToD(DToS()) is not revertible, it is revertible in [x]Harbour for the whole supported in string conversion range: 0000-01-01 : 9999-01-01. - Fixed possible GPF in CTOD when badly formated date is given. - Optimized hb_dateEncode(). - Fixed RT error number in hb_vmAddInt() for negative values to be Clipper compatible. -- Optimized __CLSADDMSG() to call hb_parc() only once instead of 25 +- Optimized __clsAddMsg() to call hb_parc() only once instead of 25 times for most cases. - Synced file IO with xHarbour, it fixed some problems, added some missing functionality and long (64-bit) file support for Windows. @@ -1406,7 +1406,7 @@ API - Added STRPEEK and STRPOKE FS functions covered by HB_COMPAT_FLAGSHIP macro. - Added hb_fsSetDevMode() Unix branch added. -- hb_secondsCPU() move inside FlagShip guard instead of HB_EXTENSION. +- hb_SecondsCPU() move inside FlagShip guard instead of HB_EXTENSION. - Fixed invalid handle error in Windows when file() fails (borrowed from xHarbour). - SetUnhandledExceptionFilter() is called if HB_INCLUDE_WINEXCHANDLER @@ -1452,10 +1452,10 @@ RDD USE command. For newly created tables the memo type can be set with rddInfo(RDDI_MEMOTYPE, [,]) It's possible to use any combinations of memo and index files. -- Added RDDINFO() to set global RDD parameters. See dbinfo.ch for +- Added rddInfo() to set global RDD parameters. See dbinfo.ch for possible actions. - Rewritten DBFNTX, now it supports in practice all CDX features with - multi tags and many others. With RDDINFO() some important new + multi tags and many others. With rddInfo() some important new features in DBFNTX can be enabled like increased maximum NTX file size up to 4TB, support structural/autoopen indexes, bounding record number with index key (like in CDX format what resaolves the @@ -1464,7 +1464,7 @@ RDD - User setable locking DBF mode. - Added SIXCDX which is modified version of DBFCDX without trailing spaces compresion for SIX3 compatibility. -- Added ordKeyRelPos([nNewPos])->nOldPos which works with all RDDs +- Added ordKeyRelPos( [nNewPos] ) -> nOldPos which works with all RDDs and returns relative (from 0.0 to 1.0) position in index file but much faster than ordKeyPos()/ordKeyCount() combination. It works like AdsGetRelKeyPos()/AdsSetRelKeyPos() and the results for CDX are @@ -1482,9 +1482,9 @@ RDD - Fixed possible GPF when "/an/existing/path/" was used as file name. - Enable 'Y' (currency) fields, translated to HB_IT_DOUBLE. - Fixed some wrong behavior in SORT parameters setting in __dbArrange() -- Removed hack with COPY TO when lastrec() == 1. +- Removed hack with COPY TO when LastRec() == 1. - Fixed GPF in DBF2TEXT when work are is not in use. -- __dbDelim() generate 2001 RT error when work area is not in USED() +- __dbDelim() generate 2001 RT error when work area is not in Used() before export file is created. - Added DBI_SCOPEDRELATION action. It alow to test if given relation on current work area sets scope on child index. @@ -1496,7 +1496,7 @@ RDD - Added new RDD DBFBLOB compatible with Clipper 5.3 DBFBLOB. It operates on memo files only (.dbv) without tables (.dbf). - Do not report error when empty structure table is passed to - DBCREATE(). + dbCreate(). - Added support for NIL value in SIX3 FPT files. - Changed definition of SUPERTABLE for optional dynamic overloading. - Added default SYSNAME method. @@ -1598,9 +1598,9 @@ The runtime modules - Replaced code which made pointer casting without respecting machine alignment with proper macros and fixed some problems with byte alignment - Added function hb_stackIncrease() and modifications for new stack macros -- Improved Clipper compatibility in AFILL() +- Improved Clipper compatibility in AFill() - Replace of malloc()/free() that still remains by hb_xgrab()/hb_xfree() -- Added new functions: HB_IDLESLEEP() and hb_idleSleep() +- Added new functions: hb_idleSleep() and hb_idleSleep() - Add the missing Greek language and codepage files. - Added Spanish Modern codepage - Synced HB CDP API with xHarbour - added basic Unicode support @@ -1679,11 +1679,11 @@ The runtime modules - Enhanced Debugger. - Added missing code to use HB_IT_POINTER just like other value's type. For example: - p = GET_SOME_POINTER() - ? VALTYPE(p) //prints: 'P' - ? p //prints: 0x12345678 + p := GET_SOME_POINTER() + ? ValType( p ) // prints: "P" + ? p // prints: 0x12345678 - The support for runtime definition of keycodes mapping was added - (translation from terminal key sequences into INKEY() codes) + (translation from terminal key sequences into Inkey() codes) eterm.map and linux.map are example files with keycode mapping HB_GT_KEYMAP() function was added (ncurses GT only) - Added possibility to load a character mapping using HB_GT_CHARMAP() @@ -1706,7 +1706,7 @@ The runtime modules //CANCEL:key //CANCELEX:keyex this flag allows change the keycode of application cancel - request (usually Alt-C) - using normal INKEY() keycodes + request (usually Alt-C) - using normal Inkey() keycodes or extended keycodes (CANCELEX) For example: myapp //CANCEL:304 @@ -1720,13 +1720,13 @@ The runtime modules displaying like in C52. - TBColumn - Added PreBlock and PostBlock instance variables for Clipper 5.3b compatibility. -- Fixed TYPE() function to return correct value when an assigment to +- Fixed Type() function to return correct value when an assigment to undeclared variable is checked (Clipper creates the memvar variable). - TGet - Fixed to correctly display buffer when negative value and '0' was pressed in the position next to decimal point. - TGet - Fixed support for '9999.' picture. -- TRANSFORM(1.23,"999.") correctly returns " 1." now instead of empty string. -- Fixed to correctly check for infinity on Unix STR(LOG(-1)) no longer +- Transform(1.23,"999.") correctly returns " 1." now instead of empty string. +- Fixed to correctly check for infinity on Unix Str(Log(-1)) no longer core dumps. - Fixed infinite support for WatcomC. - Fixed to release memory in cases where invalid syntax was macro compiled. @@ -1743,12 +1743,12 @@ RDD - Latest RDD changes synced with xHarbour. - Fixed dbCreate() bug that closed an open dbf with same name as newly created dbf in a different folder. -- FIELDPUT() Fixed to accept and ignore field NIL values +- FieldPut() Fixed to accept and ignore field NIL values without runtime error. C52 compatible. -- Added scopped relations. Now OrdSetRelation() works with DBFCDX like +- Added scopped relations. Now ordSetRelation() works with DBFCDX like it does with Clipper 5.3b. -- Changes to ADSCOPYTABLE. -- Changes to ADSCOPYTABLECONTENTS. +- Changes to ADSCOPYTABLE(). +- Changes to ADSCOPYTABLECONTENTS(). - Fixed rddMoveRecords() so that copied records, which are deleted, maintain their deleted status. @@ -1810,7 +1810,7 @@ Version 0.39 Alpha Build 39 (2002-04-08) tag: build39 - Delphi integration started - Dbfntx basic functionality is ready - Added new possibilities in hrb handling -- __dbSdf() is ready +- __dbSDF() is ready - Enhacements to hbmake,hbzlib - Great speed improvement - New enhancements and bug fixes in the debugger @@ -1828,16 +1828,16 @@ Version 0.38 Alpha Build 38 (2001-12-15) tag: build38 - Added new function __VMVARSLEN() --> nStatics It returns the total amount of used statics variables - include/hbapi.h Enhanced HB_IS_OBJECT( PHB_ITEM ) -- __ClsAddMsg() case HB_OO_MSG_ONERROR modifed to use hb_parnl( 3 ) -- __ClsAddMsg() call, for ON ERROR clause, modified suplied parameters +- __clsAddMsg() case HB_OO_MSG_ONERROR modifed to use hb_parnl( 3 ) +- __clsAddMsg() call, for ON ERROR clause, modified suplied parameters - ::Super(::oneVar) is now correctly interpreted - Freezed Scooping because it was not anymore working after the previous fix. Waiting after Alpha build 38 to fix and re-enable it - HGF (Harbour GUI multiplatform Framework) started - Class HBPersistent added to RTL to provide Harbour objects persistence - New PROPERTY | PERSISTENT clause added as a DATA feature -- New function __ClsGetProperties() added. Syntax: - __ClsGetProperties( ) --> +- New function __clsGetProperties() added. Syntax: + __clsGetProperties( ) --> - Harbour Profiler foundation functions added - New apollo.lib for SIXNSX database connection via sde60.dll - RDD Scope handling was changed to handle non-character @@ -1851,9 +1851,9 @@ Version 0.38 Alpha Build 38 (2001-12-15) tag: build38 - Added AdsRefreshRecord, AdsIsTableLocked, AdsIsRecordLocked - Dave Pearson's bitflags.c, which I ported to Harbour. Has functions to use a Harbour string for storing On/Off bit flags -- Added HB_TRACESTRING() which lets prg code trace a string into same +- Added hb_traceString() which lets prg code trace a string into same trace file/window as C traces -- Added __TRACEPRGCALLS( ) --> +- Added __TracePrgCalls( ) --> Turns on | off tracing of PRG-level function and method calls. Dumps symbol name just before it's called. This is very useful when debugging GPFs as it will trace all PRG-level calls up until the crash. @@ -1919,9 +1919,9 @@ Version 0.35 Alpha Build 35 (2000-08-15) - Garbage collector added - Compiler -u, -m support, support for automatically compiled files for DO, SET FORMAT TO, etc., memory usage optimizations -- Added HB_DISKSPACE(), __DBLIST(), __DBAPPEND() +- Added hb_DiskSpace(), __dbList(), __dbAppend() - Fixes: Line numbering, PP, macro compiler, RTL (Extend API, Item API, - TRANSFORM(), DISKSPACE(), CURDIR(), __GET()), HBDOC, + Transform(), DiskSpace(), CurDir(), __Get()), HBDOC, HBTEST (for Xbase++ and Linux), Documentation, Class engine - HBZLIB enhancements - MySQL database access contribution started @@ -1947,7 +1947,7 @@ Version 0.34 Alpha Build 34 (2000-06-02) - Far jump pcode support - Double number size support in pcode - Pcode finalized in the compiler, instead of the output generation modules -- OS/2 support improved (DISKSPACE(), MEMORY(), locks, etc...) +- OS/2 support improved (DiskSpace(), Memory(), locks, etc...) - Linux/Unix support for file locks and commit - DBFCDX index creation support (started) - Strong Typing support @@ -1956,7 +1956,7 @@ Version 0.34 Alpha Build 34 (2000-06-02) - Clipper 5.3 compatible MENUITEM, POPUP, TOPBAR classes - HBDOC further enhanced - RSX32 and RSXNT compiler support -- SETKEY functions, ASORT(), SAVESCREEN/RESTSCREEN rewritten in C +- SETKEY functions, ASort(), SAVESCREEN/RESTSCREEN rewritten in C - Extensions (XPP, C53, Harbour) are easier to switch of and better separated from Harbour - Some fixes for 10 chars support @@ -1964,7 +1964,7 @@ Version 0.34 Alpha Build 34 (2000-06-02) - -gf switch renamed to -go - Compiler /BUILD switch added - Crew list added to /CREDIT compiler switch -- CURDIR(), CURDRIVE() fixed +- CurDir(), CurDrive() fixed - Updated national language modules - More documented functions - Documented all db* related functions @@ -1979,11 +1979,11 @@ Version 0.33 Alpha Build 33 (2000-04-07) - Final cleanups on global macro and symbol names (date*(), console*(), HB_FUNC()) -- DISKSPACE() enhancements +- DiskSpace() enhancements - Microsoft C++ 8.x compiler support started - 10 character symbol support finalized -- VAL() made fully compatible -- New functions HB_COMPILER(), HB_FSIZE(), HB_FTEMPNAME(), HB_FTEMPCREATE() +- Val() made fully compatible +- New functions hb_Compiler(), hb_FSize(), HB_FTEMPNAME(), hb_FTempCreate() - PP bug fixes - More functions documented - Fixed to compile with Borland C++ in C++ mode @@ -2026,7 +2026,7 @@ Version 0.32 Alpha Build 32 (2000-03-07) - New C include file names - Many other small fixes and changes - PP __DATE__ and __TIME__ support -- __TYPEFILE() added +- __TypeFile() added ---------------------------------------------------------------------- Version 0.31a Alpha Build 31a (2000-02-02) tag: build31a @@ -2040,8 +2040,8 @@ Version 0.31 Alpha Build 31 (2000-01-27) tag: build31 - Many changes, fixes, and enhancements to compiler internals - Many changes, fixes, and enhancements to RDD system - Many changes, fixes, and enhancements to the GT API system -- Improved SETCURSOR() and SET( _SET_CURSOR ) -- Added FIELDBLOCK() and FIELDWBLOCK() +- Improved SetCursor() and Set( _SET_CURSOR ) +- Added FieldBlock() and FieldWBlock() - The Harbour '-w' command line option can set the maximal level of reported warnings. The following levels are supported currently: '-w0' - no warnings @@ -2054,18 +2054,18 @@ Version 0.31 Alpha Build 31 (2000-01-27) tag: build31 - db_brows significantly enhanced - Regression testing enhanced and expanded, replacing several standalone test modules. Now in tests/regress directory -- Added FSETDEVMOD() -- Added READINSERT() -- Added MEMOLINE() -- Added undocumented DISPOUTAT() -- Added DEFPATH() and __DEFPATH() -- Enhanced VERSION() to optionally include the compiler version used to +- Added FSetDevMod() +- Added ReadInsert() +- Added MemoLine() +- Added undocumented DispOutAt() +- Added DefPath() and __DefPath() +- Enhanced Version() to optionally include the compiler version used to create Harbour - Enhanced OS() to include more Windows version details -- Added __INPUT(), __WAIT(), and SETTYPEAHEAD() +- Added __Input(), __Wait(), and SetTypeahead() - Added several undocumented __BOX*() functions -- Added HB_VALTOSTR() -- Improved Windows INKEY() support +- Added hb_ValToStr() +- Improved Windows Inkey() support - Added missing Clipper 5.3 SETs: _SET_VIDEOMODE _SET_MBLOCKSIZE @@ -2074,19 +2074,19 @@ Version 0.31 Alpha Build 31 (2000-01-27) tag: build31 _SET_OPTIMIZE _SET_AUTOPEN _SET_AUTORDER -- Added undocumented GETE() +- Added undocumented GetE() - Compatibility functions added: - __CLASSNEW() - __CLASSINSTANCE() - __CLASSADD() - __CLASSNAME() - __CLASSSEL() - __CLEAR() - __ATCLEAR() + __classNew() + __classInstance() + __classAdd() + __className() + __classSel() + __Clear() + __AtClear() - Added ANNOUNCE CLIPPER520 and ANNOUNCE CLIPPER530 -- Added PROCFILE() +- Added ProcFile() - Added national message related functions: - ISAFFIRM(), ISNEGATIVE(), NATIONMSG(), _NATSORTVER(), _NATMSGVER() + IsAffirm(), IsNegative(), NationMsg(), _NatSortVer(), _NatMsgVer() - Added Harbour compiler tracing (i.e., debug output) - Many changes, fixes, and enhancements to documentation - Program added to extract documentation from source code and create NG, @@ -2094,12 +2094,12 @@ Version 0.31 Alpha Build 31 (2000-01-27) tag: build31 - Compile time expression optimizer - Some preprocessor fixes - Added ADS RDD -- Added TYPE() function -- MlCount() and MlPos() functions +- Added Type() function +- MLCount() and MLPos() functions - Get system completely finished - Added HARBOURCMD/CLIPPERCMD environment variables - Added support for #pragma directives -- Enhanced Getenv() function +- Enhanced GetEnv() function - Added //BUILD app command line option ---------------------------------------------------------------------- diff --git a/doc/pp.txt b/doc/pp.txt index c51db27a00..8ea2d488ec 100644 --- a/doc/pp.txt +++ b/doc/pp.txt @@ -183,7 +183,7 @@ making in last days. '\t' when not inside quoted string is converted to 4 spaces '\r' is always stripped, also from quoted strings '\0' stop line processing, like '\n' but the rest of line is ignored - ^z (chr(26)) works _exactly_ like '\n' + ^z (Chr(26)) works _exactly_ like '\n' All other characters are illegal 12. All characters which are not keyword, string, numbers and know diff --git a/tests/fixcase.hb b/tests/fixcase.hb deleted file mode 100644 index 9abef50a2f..0000000000 --- a/tests/fixcase.hb +++ /dev/null @@ -1,228 +0,0 @@ -/* - * Function naming casing fixer - * - * The script takes proper casing from .hbx files - * and applies it to whole source tree. (except - * C sources and some certain files) - * - * BEWARE: ugly code - * - * Copyright 2012 Viktor Szakats (harbour syenar.net) - * www - http://harbour-project.org - * - */ - -#pragma -w3 -#pragma -km+ -#pragma -ko+ - -#include "directry.ch" - -#define _HBROOT_ hb_DirBase() + hb_DirSepToOS( "../" ) /* must end with dirsep */ - -PROCEDURE Main( cFile ) - - STATIC sc_hTypes := { ; - ".c" =>, ; - ".cpp" =>, ; - ".h" =>, ; - ".api" =>, ; - ".ch" =>, ; - ".hb" =>, ; - ".po" =>, ; - ".prg" =>, ; - ".md" =>, } - ".txt" => } - - STATIC sc_hFileExceptions := { ; - "ChangeLog.txt" =>, ; - "std.ch" =>, ; - "wcecon.prg" =>, ; - "uc16_gen.prg" =>, ; - "clsscope.prg" =>, ; - "speedstr.prg" =>, ; - "cpinfo.prg" =>, ; - "clsccast.prg" =>, ; - "clsicast.prg" =>, ; - "clsscast.prg" =>, ; - "big5_gen.prg" =>, ; - "foreach2.prg" =>, ; - "speedtst.prg" =>, ; - "keywords.prg" =>, ; - "xhb-diff.txt" =>, ; - "pp.txt" =>, ; - "locks.txt" =>, ; - "oldnews.txt" =>, ; - "c_std.txt" =>, ; - "tracing.txt" =>, ; - "pcode.txt" => } - - STATIC sc_aMaskExceptions := { ; - "src/3rd/*" , ; - "contrib/3rd/*" , ; - "contrib/*/3rd/*" , ; - "contrib/xhb/thtm.prg" , ; - "contrib/hbnetio/tests/*" , ; - "extras/httpsrv/home/*" , ; - "tests/hbpptest/*" , ; - "tests/mt/*" , ; - "tests/multifnc/*" , ; - "tests/rddtest/*" } - - LOCAL aFile - LOCAL cExt - LOCAL cOldCWD - - LOCAL hAll := { => } - - hb_cdpSelect( "EN" ) - - hb_HCaseMatch( hAll, .F. ) - - __hbformat_BuildListOfFunctions( hAll ) - - IF HB_ISSTRING( cFile ) - ProcFile( hAll, cFile ) - ELSE - cOldCWD := hb_cwd( _HBROOT_ ) - FOR EACH aFile IN hb_DirScan( "", hb_osFileMask() ) - cExt := hb_FNameExt( aFile[ F_NAME ] ) - IF cExt $ sc_hTypes .AND. ; - !( hb_FNameNameExt( aFile[ F_NAME ] ) $ sc_hFileExceptions ) .AND. ; - AScan( sc_aMaskExceptions, {| tmp | hb_FileMatch( StrTran( aFile[ F_NAME ], "\", "/" ), tmp ) } ) == 0 - ProcFile( hAll, aFile[ F_NAME ] ) - ENDIF - NEXT - hb_cwd( cOldCWD ) - ENDIF - - RETURN - -STATIC PROCEDURE ProcFile( hAll, cFileName ) - - STATIC sc_hPartial := { ; - ".c" =>, ; - ".cpp" =>, ; - ".h" =>, ; - ".api" => } - - LOCAL cFile := MemoRead( cFileName ) - LOCAL cFileStripped - - LOCAL match - LOCAL cProper - - LOCAL lPartial - LOCAL nChanged := 0 - - lPartial := hb_FNameExt( cFileName ) $ sc_hPartial - cFileStripped := iif( lPartial, GetCComments( cFile ), cFile ) - - #define _MATCH_cStr 1 - #define _MATCH_nStart 2 - #define _MATCH_nEnd 3 - - FOR EACH match IN hb_regexAll( "([A-Za-z] |[^A-Za-z_:]|^)([A-Za-z_][A-Za-z0-9_]+\()", cFileStripped,,,,, .F. ) - IF Len( match[ 2 ][ _MATCH_cStr ] ) != 2 .OR. !( Left( match[ 2 ][ _MATCH_cStr ], 1 ) $ "D" /* "METHOD" */ ) - cProper := ProperCase( hAll, hb_StrShrink( match[ 3 ][ _MATCH_cStr ] ) ) + "(" - IF !( cProper == match[ 3 ][ _MATCH_cStr ] ) .AND. ; - !( Upper( cProper ) == Upper( "FILE(" ) ) .AND. ; /* interacts with "file(s)" text */ - !( Upper( cProper ) == Upper( "TOKEN(" ) ) .AND. ; /* interacts with "token(s)" text */ - !( Upper( cProper ) == Upper( "INT(" ) ) .AND. ; /* interacts with SQL statements */ - ( ! lPartial .OR. !( "|" + Lower( cProper ) + "|" $ Lower( "|Max(|Min(|FOpen(|Abs(|Log10(|GetEnv(|Sqrt(|Rand(|IsDigit(|IsAlpha(|" ) ) ) - cFile := Left( cFile, match[ 3 ][ _MATCH_nStart ] - 1 ) + cProper + SubStr( cFile, match[ 3 ][ _MATCH_nEnd ] + 1 ) - ? cFileName, match[ 3 ][ _MATCH_cStr ], cProper, "|" + match[ 1 ][ _MATCH_cStr ] + "|" - nChanged++ - ENDIF - ENDIF - NEXT - - IF !( "hbclass.ch" $ cFileName ) .AND. ! lPartial - FOR EACH match IN hb_regexAll( "(?:REQUEST|EXTERNAL|EXTERNA|EXTERN)[ \t]+([A-Za-z_][A-Za-z0-9_]+)", cFile,,,,, .F. ) - cProper := ProperCase( hAll, match[ 2 ][ _MATCH_cStr ] ) - IF !( cProper == match[ 2 ][ _MATCH_cStr ] ) - cFile := Left( cFile, match[ 2 ][ _MATCH_nStart ] - 1 ) + cProper + SubStr( cFile, match[ 2 ][ _MATCH_nEnd ] + 1 ) - OutStd( cFileName, match[ 2 ][ _MATCH_cStr ], cProper, "|" + match[ 1 ][ _MATCH_cStr ] + "|" + hb_eol() ) - nChanged++ - ENDIF - NEXT - ENDIF - - IF nChanged > 0 - ? cFileName, "changed: ", nChanged - hb_MemoWrit( cFileName, cFile ) - ENDIF - - RETURN - -STATIC FUNCTION ProperCase( hAll, cName ) - - IF cName $ hAll - RETURN hb_HKeyAt( hAll, hb_HPos( hAll, cName ) ) - ENDIF - - RETURN cName - -STATIC PROCEDURE __hbformat_BuildListOfFunctions( hFunctions ) - - WalkDir( hb_DirBase() + ".." + hb_ps() + "include", hFunctions ) - WalkDir( hb_DirBase() + ".." + hb_ps() + "contrib", hFunctions ) - WalkDir( hb_DirBase() + ".." + hb_ps() + "extras", hFunctions ) - - RETURN - -STATIC PROCEDURE WalkDir( cDir, hFunctions ) - - LOCAL aFile - - cDir := hb_DirSepAdd( cDir ) - - FOR EACH aFile IN hb_DirScan( cDir, "*.hbx" ) - HBXToFuncList( hFunctions, hb_MemoRead( cDir + aFile[ F_NAME ] ) ) - NEXT - - RETURN - -STATIC PROCEDURE HBXToFuncList( hFunctions, cHBX ) - LOCAL cLine - - FOR EACH cLine IN hb_ATokens( StrTran( cHBX, Chr( 13 ) ), Chr( 10 ) ) - IF Left( cLine, Len( "DYNAMIC " ) ) == "DYNAMIC " - hFunctions[ SubStr( cLine, Len( "DYNAMIC " ) + 1 ) ] := NIL - ENDIF - NEXT - - RETURN - -/* retains positions in file */ -STATIC FUNCTION GetCComments( cFile ) - - LOCAL nPos := 1 - LOCAL aHits := {} - LOCAL tmp - LOCAL tmp1 - LOCAL lStart := .T. - - LOCAL cComments - - /* bare bones */ - DO WHILE ( tmp := hb_BAt( iif( lStart, "/*", "*/" ), cFile, nPos ) ) > 0 - AAdd( aHits, tmp + iif( lStart, 0, 2 ) ) - nPos := tmp - lStart := ! lStart - ENDDO - - /* unbalanced */ - IF Len( aHits ) % 2 != 0 - AAdd( aHits, hb_BLen( cFile ) ) - ENDIF - - cComments := Space( hb_BLen( cFile ) ) - - FOR tmp := 1 TO Len( aHits ) STEP 2 - FOR tmp1 := aHits[ tmp ] TO aHits[ tmp + 1 ] - hb_BPoke( @cComments, tmp1, hb_BPeek( cFile, tmp1 ) ) - NEXT - NEXT - - RETURN cComments