diff --git a/harbour/ChangeLog.txt b/harbour/ChangeLog.txt index 8b99079c8b..1cc962a1b2 100644 --- a/harbour/ChangeLog.txt +++ b/harbour/ChangeLog.txt @@ -10,6 +10,70 @@ * Change, ! Fix, % Optimization, + Addition, - Removal, ; Comment */ +2013-02-21 17:52 UTC+0100 Viktor Szakats (harbour syenar.net) + * utils/hbmk2/hbmk2.hbp + * utils/hbmk2/hbmk2.prg + * utils/hbmk2/Makefile + ! fixed to not run shell in corner case of: + hbmk2 -plugin=my.hb [...] + + documented one missing script/shell API + + refactored hbmk2/hbshell code to not utilize file wide + STATIC variables. It allows to _compile_ hbmk2.prg + regardless of -n option usage + + added some black magic to be able to _run_ hbmk2.prg + with or without using -n option + + additional tricks to avoid defining any unnecessary + or potentially colliding public functions. It means + hbmk2/hbrun can now run _itself_ as a script. + both as .hrb and .prg flavor and regardless of + -n option usage. + + * contrib/hbcurl/hbcurl.ch + + added HB_CURLFTP_CREATE_DIR* constants + + * contrib/hbcurl/tests/ftp_uldl.prg + ! updated FTP test URL + * cleaned configuration parameters to be strictly + in sync with libcurl docs + + do not disable SSL host/peer verifications + + * tests/testhrb.prg + * src/vm/runner.c + * misc comment cleanup + + * tests/testhtml.prg + * code cleanup + + * contrib/gtwvg/gtwgud.c + * contrib/gtwvg/gtwvgd.c + * contrib/hbgt/bitflags.c + * contrib/hbmysql/readme.txt + * contrib/hbmysql/tests/dbf2mysq.prg + * contrib/hbmysql/tsqlbrw.prg + * contrib/hbtip/mail.prg + * contrib/rddads/ads1.c + * contrib/xhb/dumpvar.prg + * contrib/xhb/xhbmemo.prg + * contrib/xhb/xhbtedit.prg + * doc/gtapi.txt + * extras/gtwvw/gtwvwd.c + * extras/hbxlsxml/tests/example.prg + * extras/httpsrv/uhttpd.prg + * src/debug/dbgtarr.prg + * src/debug/dbgthsh.prg + * src/lang/l_sk.c + * src/rdd/dbfcdx/dbfcdx1.c + * src/rdd/usrrdd/rdds/arrayrdd.prg + * src/rtl/filesys.c + * src/rtl/gtos2/gtos2.c + * src/rtl/gtwvt/gtwvt.c + * src/rtl/net.c + * src/rtl/teditor.prg + * src/vm/thread.c + * website/news1.html + * cleaned all remaining national/misc dates + to be in ANSI format (YYYY.MM.DD) + 2013-02-19 10:34 UTC+0100 Viktor Szakats (harbour syenar.net) * utils/hbmk2/hbmk2.prg ! accept -n1 for compilation diff --git a/harbour/contrib/gtwvg/gtwgud.c b/harbour/contrib/gtwvg/gtwgud.c index b1d911d044..2a94599c9e 100644 --- a/harbour/contrib/gtwvg/gtwgud.c +++ b/harbour/contrib/gtwvg/gtwgud.c @@ -929,10 +929,10 @@ static LRESULT CALLBACK hb_gt_wvt_WndProc( HWND hWnd, UINT message, WPARAM wPara hb_vmRequestQuit(); return 0; case WM_ENTERIDLE: - /* FSG - 12/05/2004 - Signal than i'm on idle */ + /* FSG - 2004.05.12 - Signal than i'm on idle */ hb_idleState(); return 0; - /* Pritpal Bedi - 06 Jun 2008 */ + /* Pritpal Bedi - 2008.06.06 */ case WM_ACTIVATE: { PHB_ITEM pEvParams = hb_itemNew( NULL ); diff --git a/harbour/contrib/gtwvg/gtwvgd.c b/harbour/contrib/gtwvg/gtwvgd.c index 2448f86cb7..e908720c92 100644 --- a/harbour/contrib/gtwvg/gtwvgd.c +++ b/harbour/contrib/gtwvg/gtwvgd.c @@ -2155,11 +2155,11 @@ static LRESULT CALLBACK hb_gt_wvt_WndProc( HWND hWnd, UINT message, WPARAM wPara return 0; case WM_ENTERIDLE: - /* FSG - 12/05/2004 - Signal than i'm on idle */ + /* FSG - 2004.05.12 - Signal than i'm on idle */ hb_idleState(); return 0; - /* Pritpal Bedi - 06 Jun 2008 */ + /* Pritpal Bedi - 2008.06.06 */ case WM_ACTIVATE: { PHB_ITEM pEvParams = hb_itemNew( NULL ); diff --git a/harbour/contrib/hbcurl/hbcurl.ch b/harbour/contrib/hbcurl/hbcurl.ch index 48b904e3dd..95da18a1dc 100644 --- a/harbour/contrib/hbcurl/hbcurl.ch +++ b/harbour/contrib/hbcurl/hbcurl.ch @@ -333,6 +333,11 @@ #define HB_CURLFTPMETHOD_NOCWD 2 /* no CWD at all */ #define HB_CURLFTPMETHOD_SINGLECWD 3 /* one CWD to full dir, then work on file */ +/* HB_CURLOPT_FTP_CREATE_MISSING_DIRS option */ +#define HB_CURLFTP_CREATE_DIR_NONE 0 +#define HB_CURLFTP_CREATE_DIR 1 +#define HB_CURLFTP_CREATE_DIR_RETRY 2 + /* HB_CURLOPT_RTSP_REQUEST option */ #define HB_CURL_RTSPREQ_NONE 0 #define HB_CURL_RTSPREQ_OPTIONS 1 diff --git a/harbour/contrib/hbcurl/tests/ftp_uldl.prg b/harbour/contrib/hbcurl/tests/ftp_uldl.prg index 9c4e054e6d..9331a25917 100644 --- a/harbour/contrib/hbcurl/tests/ftp_uldl.prg +++ b/harbour/contrib/hbcurl/tests/ftp_uldl.prg @@ -65,7 +65,7 @@ PROCEDURE Main( cDL, cUL ) ? curl_easy_setopt( curl, HB_CURLOPT_USERPWD, "harbour:power" ) #endif ? curl_easy_setopt( curl, HB_CURLOPT_PROGRESSBLOCK, {| nPos, nLen | a := CurGet(), hb_DispOutAt( 10, 10, Str( ( nPos / nLen ) * 100, 6, 2 ) + "%" ), CurSet( a ) } ) - ? curl_easy_setopt( curl, HB_CURLOPT_NOPROGRESS, .F. ) + ? curl_easy_setopt( curl, HB_CURLOPT_NOPROGRESS, 0 ) ? curl_easy_setopt( curl, HB_CURLOPT_POSTQUOTE, { "RNFR " + UPLOAD_FILE_AS, "RNTO " + RENAME_FILE_TO } ) ? curl_easy_setopt( curl, HB_CURLOPT_VERBOSE, lVerbose ) @@ -118,7 +118,7 @@ PROCEDURE Main( cDL, cUL ) ? curl_easy_setopt( curl, HB_CURLOPT_USERPWD, "harbour:power" ) #endif ? curl_easy_setopt( curl, HB_CURLOPT_PROGRESSBLOCK, {| nPos, nLen | a := CurGet(), hb_DispOutAt( 10, 10, Str( ( nPos / nLen ) * 100, 6, 2 ) + "%" ), CurSet( a ) } ) - ? curl_easy_setopt( curl, HB_CURLOPT_NOPROGRESS, .F. ) + ? curl_easy_setopt( curl, HB_CURLOPT_NOPROGRESS, 0 ) ? curl_easy_setopt( curl, HB_CURLOPT_VERBOSE, lVerbose ) ? "UPLOAD FILE FROM MEMORY:", curl_easy_perform( curl ) @@ -131,17 +131,17 @@ PROCEDURE Main( cDL, cUL ) ? "Press key..." Inkey( 0 ) - hb_default( @cDL, "ftp://ftp.cisco.com/README" ) + hb_default( @cDL, "ftp://ftp.cisco.com/pub/mibs/README-MIB.txt" ) /* Now let's download to a file */ ? curl_easy_setopt( curl, HB_CURLOPT_DOWNLOAD ) ? curl_easy_setopt( curl, HB_CURLOPT_URL, cDL ) - ? curl_easy_setopt( curl, HB_CURLOPT_SSL_VERIFYPEER, .F. ) - ? curl_easy_setopt( curl, HB_CURLOPT_SSL_VERIFYHOST, .F. ) +// ? curl_easy_setopt( curl, HB_CURLOPT_SSL_VERIFYPEER, 0 ) +// ? curl_easy_setopt( curl, HB_CURLOPT_SSL_VERIFYHOST, 0 ) ? curl_easy_setopt( curl, HB_CURLOPT_DL_FILE_SETUP, "test_dl.bin" ) ? curl_easy_setopt( curl, HB_CURLOPT_PROGRESSBLOCK, {| nPos, nLen | a := CurGet(), hb_DispOutAt( 11, 10, Str( ( nPos / nLen ) * 100, 6, 2 ) + "%" ), CurSet( a ) } ) - ? curl_easy_setopt( curl, HB_CURLOPT_NOPROGRESS, .F. ) + ? curl_easy_setopt( curl, HB_CURLOPT_NOPROGRESS, 0 ) ? curl_easy_setopt( curl, HB_CURLOPT_VERBOSE, lVerbose ) ? "DOWNLOAD FILE:", curl_easy_perform( curl ) @@ -155,11 +155,11 @@ PROCEDURE Main( cDL, cUL ) ? curl_easy_setopt( curl, HB_CURLOPT_DOWNLOAD ) ? curl_easy_setopt( curl, HB_CURLOPT_URL, cDL ) - ? curl_easy_setopt( curl, HB_CURLOPT_SSL_VERIFYPEER, .F. ) - ? curl_easy_setopt( curl, HB_CURLOPT_SSL_VERIFYHOST, .F. ) +// ? curl_easy_setopt( curl, HB_CURLOPT_SSL_VERIFYPEER, 0 ) +// ? curl_easy_setopt( curl, HB_CURLOPT_SSL_VERIFYHOST, 0 ) ? curl_easy_setopt( curl, HB_CURLOPT_DL_BUFF_SETUP ) ? curl_easy_setopt( curl, HB_CURLOPT_PROGRESSBLOCK, {| nPos, nLen | a := CurGet(), hb_DispOutAt( 11, 10, Str( ( nPos / nLen ) * 100, 6, 2 ) + "%" ), CurSet( a ) } ) - ? curl_easy_setopt( curl, HB_CURLOPT_NOPROGRESS, .F. ) + ? curl_easy_setopt( curl, HB_CURLOPT_NOPROGRESS, 0 ) ? curl_easy_setopt( curl, HB_CURLOPT_VERBOSE, lVerbose ) ? "DOWNLOAD FILE TO MEM:", curl_easy_perform( curl ) @@ -184,11 +184,11 @@ PROCEDURE Main( cDL, cUL ) ? curl_easy_setopt( curl, HB_CURLOPT_DOWNLOAD ) ? curl_easy_setopt( curl, HB_CURLOPT_DIRLISTONLY ) ? curl_easy_setopt( curl, HB_CURLOPT_URL, cDL ) - ? curl_easy_setopt( curl, HB_CURLOPT_SSL_VERIFYPEER, .F. ) - ? curl_easy_setopt( curl, HB_CURLOPT_SSL_VERIFYHOST, .F. ) +// ? curl_easy_setopt( curl, HB_CURLOPT_SSL_VERIFYPEER, 0 ) +// ? curl_easy_setopt( curl, HB_CURLOPT_SSL_VERIFYHOST, 0 ) ? curl_easy_setopt( curl, HB_CURLOPT_DL_BUFF_SETUP ) ? curl_easy_setopt( curl, HB_CURLOPT_PROGRESSBLOCK, {| nPos, nLen | a := CurGet(), hb_DispOutAt( 11, 10, Str( ( nPos / nLen ) * 100, 6, 2 ) + "%" ), CurSet( a ) } ) - ? curl_easy_setopt( curl, HB_CURLOPT_NOPROGRESS, .F. ) + ? curl_easy_setopt( curl, HB_CURLOPT_NOPROGRESS, 0 ) ? curl_easy_setopt( curl, HB_CURLOPT_VERBOSE, lVerbose ) ? "DOWNLOAD DIRLIST TO STRING:", curl_easy_perform( curl ) diff --git a/harbour/contrib/hbgt/bitflags.c b/harbour/contrib/hbgt/bitflags.c index 07bf3fb15e..7d19172abb 100644 --- a/harbour/contrib/hbgt/bitflags.c +++ b/harbour/contrib/hbgt/bitflags.c @@ -16,7 +16,7 @@ * Modification history: * --------------------- * - * 8/19/2001 Modifications for Harbour by Brian Hays, also placed in + * 2001.08.19 Modifications for Harbour by Brian Hays, also placed in * the public domain. * */ diff --git a/harbour/contrib/hbmysql/readme.txt b/harbour/contrib/hbmysql/readme.txt index 94fffee926..9e767df887 100644 --- a/harbour/contrib/hbmysql/readme.txt +++ b/harbour/contrib/hbmysql/readme.txt @@ -2,9 +2,9 @@ * $Id$ */ - +---------------------------------------------------------------+ - | 2001/November/22 - Harbour MySQL access classes - readme file | - +---------------------------------------------------------------+ + +---------------------------------------------------------+ + | 2001.11.22 - Harbour MySQL access classes - readme file | + +---------------------------------------------------------+ This is work in progress, so it has to be fully tested and needs a few more methods to cover MySQL possibilities. diff --git a/harbour/contrib/hbmysql/tests/dbf2mysq.prg b/harbour/contrib/hbmysql/tests/dbf2mysq.prg index 0de19088b0..5c234e3151 100644 --- a/harbour/contrib/hbmysql/tests/dbf2mysq.prg +++ b/harbour/contrib/hbmysql/tests/dbf2mysq.prg @@ -67,7 +67,7 @@ PROCEDURE Main( ... ) SET CENTURY ON - // At present time (23/10/2000) DBFCDX is default RDD and DBFNTX is + // At present time (2000.10.23) DBFCDX is default RDD and DBFNTX is // now DBF (I mean the one able to handle .dbt-s :-)) rddSetDefault( "DBF" ) diff --git a/harbour/contrib/hbmysql/tsqlbrw.prg b/harbour/contrib/hbmysql/tsqlbrw.prg index fc7a2ec92a..e3c46a0c58 100644 --- a/harbour/contrib/hbmysql/tsqlbrw.prg +++ b/harbour/contrib/hbmysql/tsqlbrw.prg @@ -115,7 +115,7 @@ METHOD Block() CLASS TBColumnSQL xValue := iif( xValue, ".T.", ".F." ) CASE xType == "C" - // Chr(34) is a double quote + // Chr( 34 ) is a double quote // That is: if there is a double quote inside text substitute it with a string // which gets converted back to a double quote by macro operator. If not it would // give an error because of unbalanced double quotes. diff --git a/harbour/contrib/hbtip/mail.prg b/harbour/contrib/hbtip/mail.prg index 829abecb95..b191e11bc7 100644 --- a/harbour/contrib/hbtip/mail.prg +++ b/harbour/contrib/hbtip/mail.prg @@ -495,7 +495,7 @@ METHOD FromString( cMail, cBoundary, nPos ) CLASS TIPMail ELSE // nPos := nLinePos + 2 - /* 04/05/2004 - + /* 2004.05.04 - Instead of testing every single line of mail until we find next boundary, if there is a boundary we jump to it immediatly, this saves thousands of EOL test and makes splitting of a string fast */ diff --git a/harbour/contrib/rddads/ads1.c b/harbour/contrib/rddads/ads1.c index ba9db488d0..fb436b0cf5 100644 --- a/harbour/contrib/rddads/ads1.c +++ b/harbour/contrib/rddads/ads1.c @@ -231,8 +231,8 @@ static void DumpArea( ADSAREAP pArea ) /* For debugging: call this to dump ads pusLen = MAX_STR_LEN; AdsGetIndexExpr( pArea->hOrdCurrent, pucIndexExpr, &pusLen ); - pusLen = 1024; /*ADS top/bottom are 1,2 instead of 0,1*/ - u32RetVal = AdsGetScope( pArea->hOrdCurrent, ADS_TOP, pucTemp, &pusLen ); + pusLen = 1024; /* ADS top/bottom are 1,2 instead of 0,1 */ + u32RetVal = AdsGetScope( pArea->hOrdCurrent, ADS_TOP, pucTemp, &pusLen ); pusLen = 1024; ulRetFilt = AdsGetScope( pArea->hOrdCurrent, ADS_BOTTOM, pucFilter, &pusLen ); @@ -856,7 +856,7 @@ static HB_ERRCODE adsGoTo( ADSAREAP pArea, HB_ULONG ulRecNo ) * will return the error 5022 (AE_INVALID_RECORD_NUMBER), invalid record * number. * - * Sut 24 Sep 2005 16:24:18 CEST, Druzus + * 2005.09.24 16:24:18 CEST, Druzus * IMHO such GOTO operation should reposition our RDD to phantom record */ UNSIGNED32 u32RetVal, u32RecNo; @@ -864,7 +864,7 @@ static HB_ERRCODE adsGoTo( ADSAREAP pArea, HB_ULONG ulRecNo ) HB_TRACE( HB_TR_DEBUG, ( "adsGoTo(%p, %lu)", pArea, ulRecNo ) ); - /* -----------------7/19/2001 3:04PM----------------- + /* -----------------2001.07.19 15:04----------------- The following call is a necessary workaround for ace32.dll prior to 6.1. There were bugs where AdsGotoRecord() can FAIL to move the record pointer @@ -872,7 +872,7 @@ static HB_ERRCODE adsGoTo( ADSAREAP pArea, HB_ULONG ulRecNo ) A call to AdsGetRecordNum() before it clears the problem. -BH --------------------------------------------------*/ /* - * Thu 25 Aug 2005 11:56:20 CEST, Druzus + * 2005.08.25 11:56:20 CEST, Druzus * This trick force to resolving pending relations. It means * that this ADS clients does not reset pending relation in * AdsGotoRecord() and it is resolved later. Similar situation @@ -2162,7 +2162,7 @@ static HB_ERRCODE adsGetValue( ADSAREAP pArea, HB_USHORT uiIndex, PHB_ITEM pItem pField = pArea->area.lpFields + uiIndex - 1; /* This code was optimized for use ADSFIELD() macro instead */ - /* AdsGetFieldName() function for speed. ToninhoFwi, 22/07/2003 */ + /* AdsGetFieldName() function for speed. ToninhoFwi, 2003.07.22 */ switch( pField->uiType ) { @@ -2592,7 +2592,7 @@ static HB_ERRCODE adsPutValue( ADSAREAP pArea, HB_USHORT uiIndex, PHB_ITEM pItem if( ! uiIndex || uiIndex > pArea->area.uiFieldCount ) return HB_FAILURE; - /* -----------------10/30/2003 3:54PM---------------- + /* -----------------2003.10.30 15:54----------------- ADS has Implicit Record locking that can mask programming errors. Implicit locking can occur the first time a value is written to a @@ -2627,7 +2627,7 @@ static HB_ERRCODE adsPutValue( ADSAREAP pArea, HB_USHORT uiIndex, PHB_ITEM pItem szText = pArea->pRecord; /* This code was optimized for use ADSFIELD() macro instead */ - /* AdsGetFieldName() function for speed. ToninhoFwi, 22/07/2003 */ + /* AdsGetFieldName() function for speed. ToninhoFwi, 2003.07.22 */ switch( pField->uiType ) { @@ -2741,7 +2741,7 @@ static HB_ERRCODE adsPutValue( ADSAREAP pArea, HB_USHORT uiIndex, PHB_ITEM pItem bTypeError = HB_FALSE; nLen = hb_itemGetCLen( pItem ); - /* ToninhoFwi - 09/12/2006 - In the previous code nLen was limited to 0xFFFF + /* ToninhoFwi - 2006.12.09 - In the previous code nLen was limited to 0xFFFF so, I comment it, because ADS support up to 4Gb in memo/binary/image fields. Advantage documentations says that we need use AdsSetBinary in binary/image fields. I tested these special fields with AdsSetString() and it works, but @@ -2976,7 +2976,7 @@ static HB_ERRCODE adsCreate( ADSAREAP pArea, LPDBOPENINFO pCreateInfo ) So, per field it should be ( 6 + 4 + 8 + 2 = 20 ): uiMaxFieldNameLength + 20 - * 9/19/2006 BH: this is an oversized buffer since most fields don't have + * 2006.09.19 BH: this is an oversized buffer since most fields don't have * 128-byte names. But the overhead in counting up the bytes is worse than * allocating a bigger buffer. We need to make sure it's not too big, though. * ADS docs say max # of fields is fnameLen + 10 diff --git a/harbour/contrib/xhb/dumpvar.prg b/harbour/contrib/xhb/dumpvar.prg index a6938c1621..6bd99667e2 100644 --- a/harbour/contrib/xhb/dumpvar.prg +++ b/harbour/contrib/xhb/dumpvar.prg @@ -74,8 +74,7 @@ PROCEDURE __OutDebug( ... ) * * return a string containing a dump of a variable * - * - * 24/09/2006 - FSG + * 2006.09.24 * - Added recursion limit * - Added front function with limited parameters and removed support for TAssociative Array */ diff --git a/harbour/contrib/xhb/xhbmemo.prg b/harbour/contrib/xhb/xhbmemo.prg index af8bdb7053..171e85b061 100644 --- a/harbour/contrib/xhb/xhbmemo.prg +++ b/harbour/contrib/xhb/xhbmemo.prg @@ -135,7 +135,7 @@ METHOD MemoInit( xUDF ) CLASS xhb_TMemoEditor IF ::ExistUdf() /* Keep calling user function until it returns 0 - 05/08/2004 - + 2004.08.05 - Clipper 5.2 MemoEdit() treats a NIL as ME_DEFAULT */ DO WHILE AScan( { ME_DEFAULT, NIL }, nUdfReturn := ::CallUdf( ME_INIT ) ) == 0 @@ -179,9 +179,9 @@ METHOD Edit() CLASS xhb_TMemoEditor Eval( ::bKeyBlock, ::ProcName, ::ProcLine, ReadVar() ) - /* 2006/SEP/15 - E.F. - After SetKey() is executed, if exist nextkey, - * I need trap this nextkey to memoedit process - * first and the on the next loop. + /* 2006.09.15 - E.F. - After SetKey() is executed, if exist nextkey, + * I need trap this nextkey to memoedit process + * first and the on the next loop. */ nNextKey := NextKey() @@ -191,7 +191,7 @@ METHOD Edit() CLASS xhb_TMemoEditor ENDIF - /* 24/10/2005 - + /* 2005.10.24 - Taken from clipper norton guide: The user function: , a user-defined function @@ -289,8 +289,7 @@ METHOD KeyboardHook( nKey ) CLASS xhb_TMemoEditor METHOD HandleUdf( nKey, nUdfReturn, lEdited ) CLASS xhb_TMemoEditor - - /* 05/08/2004 - + /* 2004.08.05 - A little trick to be able to handle a nUdfReturn with value of NIL like it had a value of ME_DEFAULT */ @@ -362,8 +361,8 @@ METHOD HandleUdf( nKey, nUdfReturn, lEdited ) CLASS xhb_TMemoEditor OTHERWISE // ME_UNKEY (1 TO 31) - /* 2006/AUG/02 - E.F. - (NG) Process requested action corresponding to - * key value. + /* 2006.08.02 - E.F. - (NG) Process requested action corresponding to + * key value. */ nKey := nUdfReturn @@ -426,7 +425,7 @@ FUNCTION xhb_MemoEdit( ; __defaultNIL( @nRight, MaxCol() ) __defaultNIL( @lEditMode, .T. ) __defaultNIL( @nLineLength, NIL ) - /* 24/10/2005 - + /* 2005.10.24 - NG says 4, but clipper 5.2e inserts 3 spaces when pressing K_TAB */ __defaultNIL( @nTabSize, 3 ) @@ -435,7 +434,7 @@ FUNCTION xhb_MemoEdit( ; __defaultNIL( @nWindowRow, 0 ) __defaultNIL( @nWindowColumn, nTextBuffColumn ) - // 2006/JUL/22 - E.F. Check argument types. + // 2006.07.22 - E.F. Check argument types. // IF ! HB_ISNIL( cString ) .AND. ! HB_ISSTRING( cString ) .AND. ! HB_ISMEMO( cString ) Throw( ErrorNew( "BASE", 0, 1127, " Argument type error", ProcName() ) ) @@ -478,7 +477,7 @@ FUNCTION xhb_MemoEdit( ; ENDIF - // 2006/JUL/22 - E.F. To avoid run time error. + // 2006.07.22 - E.F. To avoid run time error. IF nTop > nBottom .OR. nLeft > nRight Throw( ErrorNew( "BASE", 0, 1127, " Argument error", ProcName() ) ) ENDIF @@ -487,7 +486,7 @@ FUNCTION xhb_MemoEdit( ; xUDF := NIL ENDIF - /* 24/10/2005 - + /* 2005.10.24 - Clipper MemoEdit() converts Tabs into spaces */ oEd := xhb_TMemoEditor():New( StrTran( cString, Chr( 9 ), Space( nTabSize ) ), ; @@ -506,7 +505,7 @@ FUNCTION xhb_MemoEdit( ; oEd:MemoInit( xUDF ) oEd:RefreshWindow() - // 2006/AUG/06 - E.F. Clipper's in .T. or. F. is samething. + // 2006.08.06 - E.F. Clipper's in .T. or. F. is samething. // IF ! HB_ISLOGICAL( xUDF ) // .OR. cUserFunction @@ -517,9 +516,9 @@ FUNCTION xhb_MemoEdit( ; ENDIF ELSE - // 2006/JUL/24 - E.F. - If xUDF is in .F. or .T. cause diplay memo content and exit, - // so we have to repos the cursor at bottom of memoedit - // screen after that. + // 2006.07.24 - E.F. - If xUDF is in .F. or .T. cause diplay memo content and exit, + // so we have to repos the cursor at bottom of memoedit + // screen after that. SetPos( Min( nBottom, MaxRow() ), 0 ) ENDIF diff --git a/harbour/contrib/xhb/xhbtedit.prg b/harbour/contrib/xhb/xhbtedit.prg index 009539b077..6a24237348 100644 --- a/harbour/contrib/xhb/xhbtedit.prg +++ b/harbour/contrib/xhb/xhbtedit.prg @@ -52,7 +52,7 @@ /* * Pritpal Bedi - * 28Feb2004 + * 2004.02.28 * * Suppor for Clipper's MemoEdit( ..., nTextBufferRow, nTextBufferCol, nWindowRow, nWindowCol ) * Rearrangement of code in logical sections. @@ -63,7 +63,7 @@ /* * - * Teditor Fix: v3.0beta 2004/04/17 + * Teditor Fix: v3.0beta 2004.04.17 * Copyright 2004 Giancarlo Niccolai * * Minimal revision for proper working (expecially with word warping). @@ -75,7 +75,7 @@ */ /* - * Teditor Fix: v2.0 2003-11-17 + * Teditor Fix: v2.0 2003.11.17 * Copyright 2003 Lance Owens * * This Revised Version has a completely rewritten edit method key commands, with dynamic line and paragraph reformatting. @@ -232,7 +232,7 @@ CREATE CLASS XHBEditor METHOD K_Mouse( nKey ) METHOD K_Esc() - // 2006/07/19 - E.F. - Added datas and methods. + // 2006.07.19 - E.F. - Added datas and methods. VAR cInsLabel // label to display at toggle insert VAR lVerticalScroll INIT .T. // True if vertical scrolling is active (default) VAR bKeyBlock // To process set key codeblock @@ -249,7 +249,7 @@ CREATE CLASS XHBEditor METHOD BrowseText( nPassedKey, lHandleOneKey ) - // 2006/07/25 - E.F. - Internal use only. + // 2006.07.25 - E.F. - Internal use only. METHOD GetCol( nRow, nCol ) INLINE iif( nRow > 0 .AND. nRow <= ::LastRow(), iif( nCol > 0 .AND. nCol <= Min( ::nWordWrapCol + 1, ::LineLen( nRow ) ), SubStr( ::aText[ nRow ]:cText, nCol, 1 ), "" ), "" ) METHOD IsEmptyLine( nRow ) INLINE iif( nRow > 0 .AND. nRow <= ::LastRow(), Empty( ::aText[ nRow ]:cText ), .T. ) @@ -273,7 +273,7 @@ METHOD New( cString, nTop, nLeft, nBottom, nRight, lEditMode, nLineLength, nTabS __defaultNIL( @nWndRow, 0 ) __defaultNIL( @nWndCol, 0 ) - // 2006/JUL/22 - E.F. To avoid run time error. + // 2006.07.22 - E.F. To avoid run time error. IF nTop > nBottom .OR. nLeft > nRight Throw( ErrorNew( "BASE", 0, 1127, "Argument error: ", ProcName() ) ) ENDIF @@ -286,7 +286,7 @@ METHOD New( cString, nTop, nLeft, nBottom, nRight, lEditMode, nLineLength, nTabS ::nOrigCursor := SetCursor() - // 2006/JUL/21 - E.F. To avoid out of boundaries. + // 2006.07.21 - E.F. To avoid out of boundaries. // Editor window boundaries ::nTop := Min( Max( 0, nTop ), MaxRow() ) ::nLeft := Min( Max( 0, nLeft ), MaxCol() ) @@ -298,8 +298,8 @@ METHOD New( cString, nTop, nLeft, nBottom, nRight, lEditMode, nLineLength, nTabS ::nNumCols := ::nRight - ::nLeft + 1 ::nNumRows := ::nBottom - ::nTop + 1 - // 2006/AUG/18 - E.F. Adjusted nLineLenght in accordance with Clipper's - // memoedit. + // 2006.08.18 - E.F. Adjusted nLineLenght in accordance with Clipper's + // memoedit. IF ! HB_ISNUMERIC( nLineLength ) nLineLength := ::nNumCols ELSE @@ -344,8 +344,8 @@ METHOD New( cString, nTop, nLeft, nBottom, nRight, lEditMode, nLineLength, nTabS // If memofield was created with Clipper, it needs to have __SoftCR() stripped - // 2006/JUL/20 - E.F. - We should not replace SoftCR with Chr( 32 ). - // See Text2Array function for more details. + // 2006.07.20 - E.F. - We should not replace SoftCR with Chr( 32 ). + // See Text2Array function for more details. // IF hb_BChar( 141 ) $ cString // acsn := Chr( 32 ) + Chr( 141 ) + Chr( 10 ) // cString := StrTran( cString, acsn, " " ) @@ -458,9 +458,9 @@ METHOD RefreshWindow() CLASS XHBEditor FOR i := 0 TO Min( ::nNumRows - 1, ::LastRow() - 1 ) - // 2006/JUL/23 - E.F. Adjusted to avoid out of bound. - // Don't replace ::GetLine( nRow ) by ::aText[ nRow ]:cText here, - // because getline return line number in tbrwtext.prg (debug). + // 2006.07.23 - E.F. Adjusted to avoid out of bound. + // Don't replace ::GetLine( nRow ) by ::aText[ nRow ]:cText here, + // because getline return line number in tbrwtext.prg (debug). hb_DispOutAt( Min( ::nTop + i, ::nBottom ), ::nLeft, ; PadR( iif( ::nFirstRow + i <= ::LastRow(), SubStr( ::GetLine( ::nFirstRow + i ), ::nFirstCol, ::nNumCols ), Space( ::nNumCols ) ), ::nNumCols ), ; ::LineColor( ::nFirstRow + i ) ) @@ -529,9 +529,9 @@ METHOD RefreshLine( lRefreshColSel ) CLASS XHBEditor DispBegin() - // 2006/AUG/02 - E.F. - // Don't replace ::GetLine( nRow ) by ::aText[ nRow ]:cText here - // because getline return line number in tbrwtext.prg (debug). + // 2006.08.02 - E.F. + // Don't replace ::GetLine( nRow ) by ::aText[ nRow ]:cText here + // because getline return line number in tbrwtext.prg (debug). hb_DispOutAt( ::Row(), ::nLeft, PadR( SubStr( ::GetLine( ::nRow ), ::nFirstCol, ::nNumCols ), ::nNumCols, " " ), ::LineColor( ::nRow ) ) IF lRefreshColSel @@ -539,7 +539,7 @@ METHOD RefreshLine( lRefreshColSel ) CLASS XHBEditor nFirstCol := Max( ::nTextCol, ::nWndCol ) nFirstCol := Max( nFirstCol, ::nLeft ) - /* 2006/SEP/20 - E.F. - Fine cursor adjustment. */ + /* 2006.09.20 - E.F. - Fine cursor adjustment. */ // nCol := nFirstCol + ::nColSelStart - 1 nCol := Max( ::nLeft, nFirstCol + ::nColSelStart - 1 ) @@ -572,9 +572,9 @@ METHOD RefreshColumn() CLASS XHBEditor DispBegin() - // 2006/AUG/02 - E.F. - // Don't replace ::GetLine( nRow ) by ::aText[ nRow ]:cText here - // because getline return line number in tbrwtext.prg (debug). + // 2006.08.02 - E.F. + // Don't replace ::GetLine( nRow ) by ::aText[ nRow ]:cText here + // because getline return line number in tbrwtext.prg (debug). FOR i := 0 TO Min( ::nNumRows - 1, ::LastRow() - 1 ) hb_DispOutAt( ::nTop + i, nOCol, SubStr( ::GetLine( ::nFirstRow + i ), ::nCol, 1 ), ::LineColor( ::nFirstRow + i ) ) NEXT @@ -708,7 +708,7 @@ METHOD Edit( nPassedKey ) CLASS XHBEditor ENDIF /* - * 2006/AUG/12 -E.F. Trap Set key only if nKey is NIL. + * 2006.08.12 -E.F. Trap Set key only if nKey is NIL. */ IF nPassedKey == NIL IF ( ::bKeyBlock := SetKey( nKey ) ) != NIL @@ -765,7 +765,7 @@ METHOD Edit( nPassedKey ) CLASS XHBEditor CASE K_CTRL_B // Reformat paragraph IF ::lEditAllow ::ClrTextSelection() - ::ReformParagraph() // 2006/JUL/29 -E.F. Added. + ::ReformParagraph() // 2006.07.29 -E.F. Added. ENDIF EXIT #else @@ -937,7 +937,7 @@ METHOD Edit( nPassedKey ) CLASS XHBEditor ::ClrTextSelection() ENDIF ELSE - // 2006/JUL/22 - E.F. - Insert is allowed only in edit mode. + // 2006.07.22 - E.F. - Insert is allowed only in edit mode. IF ::lEditAllow ::ClrTextSelection() ::InsertState( ! ::lInsert ) @@ -979,7 +979,7 @@ METHOD Edit( nPassedKey ) CLASS XHBEditor IF ::lEditAllow // Clipper compatibility ::K_Bs() ELSE - // 2006/JUL/22 - E.F. - Clipper backspace in read only is same as left movement. + // 2006.07.22 - E.F. - Clipper backspace in read only is same as left movement. ::Left() ENDIF EXIT @@ -1168,7 +1168,7 @@ METHOD GoTop() CLASS XHBEditor METHOD Right() CLASS XHBEditor IF ::lWordWrap - // 2006/07/19 - E.F. Changed max right point to pos cursor to next. + // 2006.07.19 - E.F. Changed max right point to pos cursor to next. // IF ::nCol > ::nWordWrapCol .AND. ::nRow < ::LastRow() ::GotoPos( ::nRow + 1, 1, .T. ) @@ -1207,11 +1207,10 @@ METHOD WordRight() CLASS XHBEditor DispBegin() // to minimize flicker. - // 2006/JUL/21 - E.F. Changed to verify empty character instead space. - // In any circunstancies wordright stop at space. - // Added verification in not wordwrap mode if reach - // rightmost position. - // + // 2006.07.21 - E.F. Changed to verify empty character instead space. + // In any circunstancies wordright stop at space. + // Added verification in not wordwrap mode if reach + // rightmost position. DO while ::nCol <= nMaxCol .AND. ! Empty( ::GetCol( ::nRow, ::nCol ) ) ::Right() @@ -1243,16 +1242,16 @@ METHOD WordRight() CLASS XHBEditor IF ::lRightScroll IF ::lWordWrap - // 2006/JUL/21 - E.F. - If cursor reach rightmost position - // go to the next line. + // 2006.07.21 - E.F. - If cursor reach rightmost position + // go to the next line. IF ::nCol > nMaxCol .AND. ::nRow < ::LastRow() ::Down() ::Home() IF Empty( ::GetCol( ::nRow, ::nCol ) ) ::WordRight() ENDIF - // 2006/JUL/21 - E.F. - If cursor stop at empty char and it is the - // last reachable position go back to the previous word. + // 2006.07.21 - E.F. - If cursor stop at empty char and it is the + // last reachable position go back to the previous word. ELSEIF ::nCol >= nMaxCol .AND. ::nRow == ::LastRow() IF ! Empty( ::GetCol( ::nRow, ::nCol ) ) ::end() @@ -1262,7 +1261,7 @@ METHOD WordRight() CLASS XHBEditor ::WordRight() ENDIF ELSE - // 2006/JUL/21 - E.F. - If cursor reach rightmost position go to back to prior word. + // 2006.07.21 - E.F. - If cursor reach rightmost position go to back to prior word. IF ::nCol > nMaxCol ::Wordleft() ENDIF @@ -1277,7 +1276,7 @@ METHOD WordRight() CLASS XHBEditor METHOD End() CLASS XHBEditor - // 2006/07/19 - E.F. Changed to avoid the cursor out of line. + // 2006.07.19 - E.F. Changed to avoid the cursor out of line. // ::GotoCol( Min( ::LineLen( ::nRow ) + 1, Max( ::nNumCols, ::nWordWrapCol + 1 ) ) ) @@ -1291,7 +1290,7 @@ METHOD Left() CLASS XHBEditor IF ::nCol == 1 IF ::lWordWrap IF ::nRow > 1 - // 2006/07/19 E.F. left should be at max in the leftmost column. + // 2006.07.19 E.F. left should be at max in the leftmost column. // ::GotoPos( ::nRow - 1, Max( ::nNumCols, ::nWordWrapCol + 1 ), .T. ) ENDIF @@ -1330,8 +1329,8 @@ METHOD WordLeft() CLASS XHBEditor ENDIF - // 2006/JUL/21 - E.F. - Changed to verifiy empty char instead space. In any - // circunstancies wordleft stop at space. + // 2006.07.21 - E.F. - Changed to verifiy empty char instead space. In any + // circunstancies wordleft stop at space. // DO while ::nCol > 1 .AND. ! Empty( ::GetCol( ::nRow, ::nCol ) ) ::Left() @@ -1343,8 +1342,8 @@ METHOD WordLeft() CLASS XHBEditor ::Left() ENDDO - // 2006/JUL/24 -E.F. - If cursor stoped at empty char, then - // go to the next word. + // 2006.07.24 -E.F. - If cursor stoped at empty char, then + // go to the next word. IF ! ::lWordWrap .AND. ; ::nCol < ::LineLen( ::nRow ) .AND. ; Empty( ::GetCol( ::nRow, ::nCol ) ) @@ -1417,7 +1416,7 @@ METHOD K_Ascii( nKey ) CLASS XHBEditor RETURN Self ENDIF - // 2006/JUL/22 - E.F. - IF there is no line into memo add a new one. + // 2006.07.22 - E.F. - IF there is no line into memo add a new one. IF ::LastRow() == 0 ::AddLine( "", .F. ) ENDIF @@ -1475,7 +1474,7 @@ METHOD K_Bs() CLASS XHBEditor IF ::nRow > 1 .AND. ::nRow <= ::LastRow() - // 2006/JUL/21 - E.F. - Determine new ::nCol position. + // 2006.07.21 - E.F. - Determine new ::nCol position. // ::nCol := Min( ::LineLen( ::nRow - 1 ) + 1, ::nWordWrapCol ) @@ -1499,7 +1498,7 @@ METHOD K_Bs() CLASS XHBEditor ::SplitLine( ::nRow ) ENDIF - // 2006/JUL/21 - E.F. - Delete the rightmost char and pos the cursor on it. + // 2006.07.21 - E.F. - Delete the rightmost char and pos the cursor on it. IF ::LineLen( ::nRow ) >= ::nWordWrapCol ::aText[ ::nRow ]:cText := SubStr( ::aText[ ::nRow ]:cText, 1, ::LineLen( ::nRow ) - 1 ) + " " ::nCol := Min( ::nCol + 1, ::nWordWrapCol + 1 ) @@ -1514,9 +1513,9 @@ METHOD K_Bs() CLASS XHBEditor ENDIF ENDIF - // 2006/JUL/19 - E.F. When backspace reach column 1 and the line is - // empty and exist next line, we need set linelen to - // zero and set lSoftCR to true as Clipper does. + // 2006.07.19 - E.F. When backspace reach column 1 and the line is + // empty and exist next line, we need set linelen to + // zero and set lSoftCR to true as Clipper does. // IF ::nCol == 1 .AND. Empty( ::aText[ ::nRow ]:cText ) .AND. ; ::nRow + 1 <= ::LastRow() @@ -1571,8 +1570,8 @@ METHOD K_Del() CLASS XHBEditor ::aText[ ::nRow ]:cText += " " ENDIF - // 2006/JUL/21 - E.F. If current line is empty and cursor is in - // the first column, remove it after del. + // 2006.07.21 - E.F. If current line is empty and cursor is in + // the first column, remove it after del. // IF ::IsEmptyLine( ::nRow ) .AND. ::nCol == 1 ::RemoveLine( ::nRow ) @@ -1589,7 +1588,7 @@ METHOD K_Del() CLASS XHBEditor ::lChanged := .T. nCurRow := ::nRow nCurCol := ::nCol - // 2006/07/19 - E.F. Merge line only if ::nRow+1 is valid, + // 2006.07.19 - E.F. Merge line only if ::nRow+1 is valid, // to avoid bound error. // IF ::nRow + 1 <= ::LastRow() @@ -1672,7 +1671,7 @@ METHOD K_Return() CLASS XHBEditor IF ::lEditAllow - // 2006/JUL/24 - E.F. - Fixed at insert mode. + // 2006.07.24 - E.F. - Fixed at insert mode. #if 0 IF ::lInsert IF ::nRow == ::LastRow() @@ -1749,7 +1748,7 @@ METHOD K_Esc() CLASS XHBEditor SetCursor( nCursor ) SetPos( nCurRow, nCurCol ) - // 2006/JUL/21 - E.F - Exit only if "Y" is pressed. + // 2006.07.21 - E.F - Exit only if "Y" is pressed. // ::lExitEdit := ( Upper( hb_keyChar( nKey ) ) == "Y" ) ENDIF @@ -1968,8 +1967,8 @@ METHOD GotoCol( nCol ) CLASS XHBEditor IF nCol >= 1 - // 2006/JUL/21 E.F. - Clipper allow cursor movement to left/right into - // line, with or without chars. + // 2006.07.21 E.F. - Clipper allow cursor movement to left/right into + // line, with or without chars. // Note: ::nWordWrapCol can be different than ::nNumCols if user has // informed nLineLength > 0. nCol := Max( 1, Min( nCol, Max( ::nNumCols, ::nWordWrapCol + 1 ) ) ) @@ -2014,8 +2013,8 @@ METHOD GotoPos( nRow, nCol, lRefresh ) CLASS XHBEditor IF nCol >= 1 - // 2006/JUL/21 E.F. - Clipper allow cursor movement to left/right into - // line, with or without chars. + // 2006.07.21 E.F. - Clipper allow cursor movement to left/right into + // line, with or without chars. // Note: ::nWordWrapCol can be different than ::nNumCols if user has // informed nLineLength > 0 nCol := Max( 1, Min( nCol, Max( ::nNumCols, ::nWordWrapCol + 1 ) ) ) @@ -2167,7 +2166,7 @@ METHOD SplitLine( nRow ) CLASS XHBEditor // Old method was: else split at current cursor position // cSplittedLine := Left( cLine, ::nCol - 1 ) - // 2006/07/19 - E.F. - Changed cut point at witdh of line to maintain. + // 2006.07.19 - E.F. - Changed cut point at witdh of line to maintain. // amount of chars same as Clipper. // // cSplittedLine := Left( cLine, ::nWordWrapCol ) @@ -2181,7 +2180,7 @@ METHOD SplitLine( nRow ) CLASS XHBEditor // // GAD IF !( Right( cSplittedLine, 1 ) == " " ) .AND. nFirstSpace > 1 - // 2006/JUL/21 - E.F. - Added condition to not stay out of max columns. + // 2006.07.21 - E.F. - Added condition to not stay out of max columns. IF Len( cSplittedLine ) < ::nNumCols cSplittedLine += " " ENDIF @@ -2196,7 +2195,7 @@ METHOD SplitLine( nRow ) CLASS XHBEditor // I have to recheck if trim is viable here ??? // - // 2006/JUL/21 - E.F. Only insert a line in any circunstancies. + // 2006.07.21 - E.F. Only insert a line in any circunstancies. // IF nStartRow + 1 <= ::LastRow() IF ::LineLen( nStartRow + 1 ) == 0 .OR. Len( AllTrim( cLine ) ) > 0 @@ -2316,7 +2315,7 @@ METHOD SetPos( nRow, nCol ) CLASS XHBEditor METHOD InsertState( lInsState ) CLASS XHBEditor - // 2006/JUL/22 - E.F. - Insert only in edit mode. + // 2006.07.22 - E.F. - Insert only in edit mode. IF ::lEditAllow .AND. HB_ISLOGICAL( lInsState ) .AND. ::lInsert != lInsState ::lInsert := lInsState @@ -2337,7 +2336,7 @@ METHOD InsertState( lInsState ) CLASS XHBEditor RETURN Self // -// 2006/JUL/15 - E.F. - Display "" message +// 2006.07.15 - E.F. - Display "" message // METHOD DisplayInsert( lInsert ) CLASS XHBEditor @@ -2564,8 +2563,8 @@ METHOD SetTextSelection( cAction, nCount ) CLASS XHBEditor IF ::nRowSelEnd == ::LastRow() // ::nRowSelEnd := ::LastRow()-1 - /* 2006/SEP/17 - E.F. - At this point we need add a new line - to be able to select the last row. + /* 2006.09.17 - E.F. - At this point we need add a new line + to be able to select the last row. */ IF ! Empty( ::aText[ ::nRowSelEnd ]:cText ) ::AddLine() @@ -2713,14 +2712,14 @@ METHOD DelText() CLASS XHBEditor RETURN self ENDIF - // 2006/SEP/17 - E.F. - changed to ::top() to avoid cursor out of bound. + // 2006.09.17 - E.F. - changed to ::top() to avoid cursor out of bound. // ::Gotop() ::Top() ::aText := {} - // 2006/JUL/22 - E.F. - There is no need to add line here. - // See K_ASCII() method. + // 2006.07.22 - E.F. - There is no need to add line here. + // See K_ASCII() method. // AAdd( ::aText, HBTextLine():New() ) ::lChanged := .T. @@ -2789,7 +2788,7 @@ METHOD DelTextSelection() CLASS XHBEditor ENDIF ENDIF - // 3/03/2008 8:26a.m. added next 4 lines to fix array out of bounds RTL + // 2008.03.03 08:26 added next 4 lines to fix array out of bounds RTL IF ::nRow > ::LastRow() ::Addline( "", .F. ) ::GoBottom() @@ -2972,8 +2971,8 @@ STATIC FUNCTION Text2Array( cString, nWordWrapCol ) LOCAL lTokenized := .F. LOCAL cSoftCR := __SoftCR() - // 2005/JUL/19 - E.F. - SoftCR must be removed before convert string to - // array. It will be treated by HBEditor. + // 2005.07.19 - E.F. - SoftCR must be removed before convert string to + // array. It will be treated by HBEditor. IF cSoftCR $ cString cString := StrTran( cString, cSoftCR ) ENDIF @@ -3022,14 +3021,14 @@ STATIC FUNCTION Text2Array( cString, nWordWrapCol ) cLine := SubStr( cLine, nFirstSpace + 1 ) ELSE cSplittedLine := Left( cLine, nWordWrapCol ) - // 2006/07/19 - E.F. Changed cut point of second split. + // 2006.07.19 - E.F. Changed cut point of second split. // cLine := SubStr( cLine, nWordWrapCol + 1 ) cLine := SubStr( cLine, Len( cSplittedLine ) + 1 ) ENDIF AAdd( aArray, HBTextLine():New( cSplittedLine, .T. ) ) ELSE // remainder of line is shorter than split point - // 2006/JUL/21 - E.F. Only add a new line if cLine is not empty. + // 2006.07.21 - E.F. Only add a new line if cLine is not empty. // IF Len( cLine ) > 0 AAdd( aArray, HBTextLine():New( cLine, .F. ) ) @@ -3087,14 +3086,15 @@ METHOD BrowseText( nPassedKey, lHandleOneKey ) CLASS XHBEditor ELSE ::MoveCursor( nKey ) - /* 02/09/2004 - +#if 0 + /* 2004-09-02 - If I'm on a readonly editor don't call KeyboardHook() because it calls HandleUserKey() which calls Edit() which sees this is - a readonly editor and calls again BrowseText() which.., + a readonly editor and calls again BrowseText() which.. */ IF ! oSelf:MoveCursor( nKey ) oSelf:KeyboardHook( nKey ) ENDIF - */ +#endif ENDIF // If I want to handle only one key and then exit... diff --git a/harbour/doc/gtapi.txt b/harbour/doc/gtapi.txt index 47b2f85e96..fe2994ca78 100644 --- a/harbour/doc/gtapi.txt +++ b/harbour/doc/gtapi.txt @@ -232,8 +232,6 @@ See as example GTGUI in src/rtl/gtgui/gtgui.c It supports only TONE and CLIPBOARD operations. GUI libraries can use it or create other GT driver inheriting from this one. -NOTE: src/rtl/gtgui/gtdef.c is a hack which overloads the default - Harbour build time GT driver and should not be replicated. gtnul - base GT driver from which each other inherits. @@ -304,8 +302,8 @@ gtwvt - GT driver for MS-Windows. It creates its own GUI window for use with GTWVT. To let the memory refreshed, I must remind everybody that it is a superb work of Peter Rees contributed - to xHarbour on 22nd December 2003. -GTWVG - GUI emulation of GTWVT. It implements itself on top of GTWVT. + to xHarbour on 2003.12.22. +gtwvg - GUI emulation of GTWVT. It implements itself on top of GTWVT. GTWVG ( WVTGUI in xHarbour ) offers functions and classes to present a console application look like a windows one. It renderes GUI elements on top of Clipper elements diff --git a/harbour/extras/gtwvw/gtwvwd.c b/harbour/extras/gtwvw/gtwvwd.c index f99081a00f..8690ff60de 100644 --- a/harbour/extras/gtwvw/gtwvwd.c +++ b/harbour/extras/gtwvw/gtwvwd.c @@ -1512,14 +1512,14 @@ static BOOL hb_gt_wvw_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) break; case HB_GTI_SCREENHEIGHT: - /* NOTE 20040618 currently not includes StatusBar and ToolBar, if any. - * TODO I Think it should return ALL window height, incl - * StatusBar and ToolBar - * ie. hb_gt_wvwCalcPixelHeight() - * SEEALSO hb_gt_wvwCalcPixelHeight() + /* NOTE 2004.06.18 currently not includes StatusBar and ToolBar, if any. + * TODO I Think it should return ALL window height, incl + * StatusBar and ToolBar + * ie. hb_gt_wvwCalcPixelHeight() + * SEEALSO hb_gt_wvwCalcPixelHeight() */ - /*NOTE 20040719 screenheight includes linespacing, if any */ + /*NOTE 2004.07.19 screenheight includes linespacing, if any */ pInfo->pResult = hb_itemPutNI( pInfo->pResult, hb_wvw_LineHeight( pWindowData ) * pWindowData->ROWS ); @@ -1548,9 +1548,9 @@ static BOOL hb_gt_wvw_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) case HB_GTI_DESKTOPHEIGHT: { - /*NOTE 20040618 currently includes StatusBar and ToolBar, if any. - *TODO Think: should it return chars area only? - *SEEALSO hb_gt_wvwCalcPixelHeight() - usSBHeight - usTBHeight + /* NOTE 2004.06.18 currently includes StatusBar and ToolBar, if any. + * TODO Think: should it return chars area only? + * SEEALSO hb_gt_wvwCalcPixelHeight() - usSBHeight - usTBHeight */ RECT rDesk = { 0 }; @@ -1575,12 +1575,12 @@ static BOOL hb_gt_wvw_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) case HB_GTI_DESKTOPROWS: { - /*NOTE 20040618 currently includes StatusBar and ToolBar, if any. - *TODO I Think it should it return chars area only? - *SEEALSO hb_gt_wvwCalcPixelHeight() - usSBHeight - usTBHeight + /* NOTE 2004.06.18 currently includes StatusBar and ToolBar, if any. + * TODO I Think it should it return chars area only? + * SEEALSO hb_gt_wvwCalcPixelHeight() - usSBHeight - usTBHeight */ - /*NOTE 20040719 screenheight includes linespacing, if any */ + /* NOTE 2004.07.19 screenheight includes linespacing, if any */ RECT rDesk = { 0 }; HWND hDesk; @@ -2165,7 +2165,7 @@ static void hb_gt_wvwCreateObjects( UINT usWinNum ) { LOGBRUSH lb = { 0 }; - /* 20040921 IMPORTANT: + /* 2004.09.21 IMPORTANT: All these PENs and BRUSHes creations are temporarily disabled because WINDOW #1's CAN'T BE DELETED LATER! See also hb_gt_wvwCloseWindow() and gt_Exit() @@ -2174,7 +2174,7 @@ static void hb_gt_wvwCreateObjects( UINT usWinNum ) or (2) do the creation and deletion only when required */ - /* 20040923 choose #1 of above option */ + /* 2004.09.23 choose #1 of above option */ if( usWinNum > 0 ) return; @@ -2807,7 +2807,7 @@ static LRESULT CALLBACK hb_gt_wvwWndProc( HWND hWnd, UINT message, WPARAM wParam * BeginPaint resets the update rectangle - don't move it or nothing is drawn! */ - /* 20050625 TODO: MSDN says app should NOT call BeginPaint if GetUpdateRect returns zero */ + /* 2005.06.25 TODO: MSDN says app should NOT call BeginPaint if GetUpdateRect returns zero */ hdc = BeginPaint( hWnd, &ps ); @@ -3468,7 +3468,7 @@ static LRESULT CALLBACK hb_gt_wvwWndProc( HWND hWnd, UINT message, WPARAM wParam fake an Alt+C */ - /* 20040610 + /* 2004.06.10 reject if not accepting input (topmost window not on focus) */ if( ! hb_gt_wvwAcceptingInput() ) { @@ -3479,8 +3479,8 @@ static LRESULT CALLBACK hb_gt_wvwWndProc( HWND hWnd, UINT message, WPARAM wParam } if( usWinNum == 0 ) - /* bdj note 20060724: - We should put this line here, as per FSG change on 20060626: + /* bdj note 2006.07.24: + We should put this line here, as per FSG change on 2006.06.26: hb_gtHandleClose() However, if there is no gtSetCloseHandler, ALT+C effect is not produced as it should. So for now I put it back to the old behaviour with the following two lines, until hb_gtHandleClose() is fixed. @@ -3498,7 +3498,7 @@ static LRESULT CALLBACK hb_gt_wvwWndProc( HWND hWnd, UINT message, WPARAM wParam return 0; case WM_ENTERIDLE: - /* FSG - 12/05/2004 - Signal than i'm on idle */ + /* FSG - 2004.05.12 - Signal than i'm on idle */ hb_idleState(); return 0; @@ -5204,7 +5204,7 @@ static void hb_gt_wvwCloseWindow( void ) /*assume s_pWvwData->s_usNumWindows >= if( s_pWvwData->s_sApp->pSymWVW_TIMER ) KillTimer( pWindowData->hWnd, WVW_ID_BASE_TIMER + s_pWvwData->s_usNumWindows - 1 ); - /* 20040921 IMPORTANT: + /* 2004.09.21 IMPORTANT: All these PENs and BRUSHes deletions return OK, but GDI objects are reported as still in use by Task Manager. We now temporarily disable PENs and BRUSHes creation during @@ -5215,7 +5215,7 @@ static void hb_gt_wvwCloseWindow( void ) /*assume s_pWvwData->s_usNumWindows >= or (2) do the creation and deletion only when required */ - /* 20040923 choose #1 of above option + /* 2004.09.23 choose #1 of above option DeleteObject( ( HPEN ) pWindowData->penWhite ); DeleteObject( ( HPEN ) pWindowData->penWhiteDim ); DeleteObject( ( HPEN ) pWindowData->penBlack ); @@ -6502,7 +6502,7 @@ static void DrawTransparentBitmap( HDC hdc, HBITMAP hBitmap, short xStart, DeleteDC( hdcCopy ); } -/* 20060724 Notes: +/* 2006.07.24 Notes: (1) Transparency if bTransparent is .t., top-left pixel is used as the transparent color, @@ -6534,7 +6534,7 @@ BOOL hb_gt_wvwDrawImage( UINT usWinNum, int x1, int y1, int wd, int ht, const ch if( ! pPic ) return FALSE; - /* 20060724 canNOT do it this way: + /* 2006.07.24 canNOT do it this way: pPic->lpVtbl->get_Width( pPic,&lWidth ); pPic->lpVtbl->get_Height( pPic,&lHeight ); iWidth = (int) lWidth; @@ -7001,7 +7001,7 @@ WVW_DATA * hb_getWvwData( void ) /* */ -/* 20040713 this function was named WVW_lOpenWindow() +/* 2004.07.13 this function was named WVW_lOpenWindow() * now it is wvw_nOpenWindow() * it now returns numeric @@ -8507,12 +8507,12 @@ IPicture * rr_LoadPicture( const char * filename, LONG * lwidth, LONG * lheight /* PENDING decision: - 20040908 TODO: GTWVT deliberately adds new parm aOffset before nRoundHeight - I hate it when doing such thing + 2004.09.08 TODO: GTWVT deliberately adds new parm aOffset before nRoundHeight + I hate it when doing such thing */ -/* Supporting functions */ +/* Supporting functions */ static BITMAPINFO * PackedDibLoad( PTSTR szFileName ) diff --git a/harbour/extras/hbxlsxml/tests/example.prg b/harbour/extras/hbxlsxml/tests/example.prg index a23eb4dfeb..54c5aa7092 100644 --- a/harbour/extras/hbxlsxml/tests/example.prg +++ b/harbour/extras/hbxlsxml/tests/example.prg @@ -172,9 +172,9 @@ PROCEDURE Main() oObj:columnWidth( 13, 80 ) // Valor IPI xEmpresa := "EMPRESA DEMONSTRACAO LTDA" - xDataImp := "22.03.2011" + xDataImp := "2011.03.22" xTitulo := "RELATORIO PARA DEMONSTRAR XML EXCEL" - xPeriodo := "01.02.2011 a 28.02.2011" + xPeriodo := "2011.02.01 a 2011.02.28" xOrdem := "DATA DE EMISSAO" nLinha := 0 diff --git a/harbour/extras/httpsrv/uhttpd.prg b/harbour/extras/httpsrv/uhttpd.prg index e0bd0498fb..da503cd4be 100644 --- a/harbour/extras/httpsrv/uhttpd.prg +++ b/harbour/extras/httpsrv/uhttpd.prg @@ -12,7 +12,7 @@ * * Credits: * Based on first version posted from Mindaugas Kavaliauskas on - * developers NG on December 15th, 2008 whom give my thanks to have + * developers NG on 2008.12.15 whom give my thanks to have * shared initial work. * Francesco. * diff --git a/harbour/src/debug/dbgtarr.prg b/harbour/src/debug/dbgtarr.prg index 1ed2fa366e..80fa284e1c 100644 --- a/harbour/src/debug/dbgtarr.prg +++ b/harbour/src/debug/dbgtarr.prg @@ -123,7 +123,7 @@ METHOD addWindows( aArray, nRow ) CLASS HBDbArray oBrwSets:AddColumn( oCol := HBDbColumnNew( "", {|| PadR( __dbgValToStr( aArray[ oBrwSets:cargo[ 1 ] ] ), nWidth - nColWidth - 1 ) } ) ) - /* 09/08/2004 - + /* 2004.08.09 - Setting a fixed width like it is done in the next line of code wich I've commented exploits a bug of current tbrowse, that is, if every column is narrower than tbrowse but the sum of them is wider tbrowse paints diff --git a/harbour/src/debug/dbgthsh.prg b/harbour/src/debug/dbgthsh.prg index c8648bbe84..c54af4cd1f 100644 --- a/harbour/src/debug/dbgthsh.prg +++ b/harbour/src/debug/dbgthsh.prg @@ -127,7 +127,7 @@ METHOD addWindows( hHash, nRow ) CLASS HBDbHash oBrwSets:AddColumn( oCol := HBDbColumnNew( "", {|| PadR( __dbgValToStr( hb_HValueAt( hHash, oBrwSets:cargo[ 1 ] ) ), nWidth - nColWidth - 1 ) } ) ) - /* 09/08/2004 - + /* 2004.08.09 - Setting a fixed width like it is done in the next line of code wich I've commented exploits a bug of current tbrowse, that is, if every column is narrower than tbrowse but the sum of them is wider tbrowse paints diff --git a/harbour/src/lang/l_sk.c b/harbour/src/lang/l_sk.c index 3308402644..cb4b5ab805 100644 --- a/harbour/src/lang/l_sk.c +++ b/harbour/src/lang/l_sk.c @@ -7,7 +7,7 @@ * Language Support Module (sk) * * Copyright 2008, 2012 Gyula Bartal (from CSWIN) - * Update October 1, 2012 Jaroslav Janík + * Copyright 2012 Jaroslav Janík * www - http://harbour-project.org * * This program is free software; you can redistribute it and/or modify diff --git a/harbour/src/rdd/dbfcdx/dbfcdx1.c b/harbour/src/rdd/dbfcdx/dbfcdx1.c index 5bfb1118ef..28a516f440 100644 --- a/harbour/src/rdd/dbfcdx/dbfcdx1.c +++ b/harbour/src/rdd/dbfcdx/dbfcdx1.c @@ -6878,7 +6878,7 @@ static HB_ERRCODE hb_cdxGoCold( CDXAREAP pArea ) * Without changes in locking scheme we can do only one thing which * is enough if there is only one index file: lock first index only * before SUPER_GOCOLD - * Druzus, 05 Oct 2003 10:27:52 CEST + * Druzus, 2003.10.05 10:27:52 CEST */ while( pTag ) diff --git a/harbour/src/rdd/usrrdd/rdds/arrayrdd.prg b/harbour/src/rdd/usrrdd/rdds/arrayrdd.prg index 13bc2c4f3b..bced6f852e 100644 --- a/harbour/src/rdd/usrrdd/rdds/arrayrdd.prg +++ b/harbour/src/rdd/usrrdd/rdds/arrayrdd.prg @@ -292,7 +292,7 @@ STATIC FUNCTION AR_CREATE( nWA, aOpenInfo ) /* Check if database is already present in memory slots */ /* - 07/11/2008 FSG - dbCreate() doesn't check if a dbf file exists. So I will not check it. + 2008.11.07 FSG - dbCreate() doesn't check if a dbf file exists. So I will not check it. If you need to check if a table exists use hb_FileArrayRdd() function that works in similar way of File(), i.e.: IF hb_FileArrayRdd( cFullName ) diff --git a/harbour/src/rtl/filesys.c b/harbour/src/rtl/filesys.c index 36983cd107..f387d753eb 100644 --- a/harbour/src/rtl/filesys.c +++ b/harbour/src/rtl/filesys.c @@ -229,7 +229,7 @@ #endif #if defined( HB_OS_HAS_DRIVE_LETTER ) -/* 27/08/2004 - +/* 2004.08.27 - HB_FS_GETDRIVE() should return a number in the range 0..25 ('A'..'Z') HB_FS_SETDRIVE() should accept a number inside same range. diff --git a/harbour/src/rtl/gtos2/gtos2.c b/harbour/src/rtl/gtos2/gtos2.c index 99863ab2f7..e1c73a3784 100644 --- a/harbour/src/rtl/gtos2/gtos2.c +++ b/harbour/src/rtl/gtos2/gtos2.c @@ -74,7 +74,7 @@ * hb_gt_os2_GetBlink() * hb_gt_os2_SetBlink() * - * Copyright 2000 - 2001 Maurilio Longo + * Copyright 2000-2001 Maurilio Longo * hb_gt_DispBegin() / hb_gt_DispEnd() * hb_gt_ScreenPtr() and hb_gt_xYYYY() functions and virtual screen support inside hb_gt_XXXX()s * 16 bit KBD subsystem use inside hb_gt_os2_ReadKey() @@ -111,7 +111,7 @@ #define SELTOFLAT( ptr ) ( void * ) ( ( ( ( ( ULONG ) ( ptr ) ) >> 19 ) << 16 ) | ( 0xFFFF & ( ( ULONG ) ( ptr ) ) ) ) #if defined( HB_OS_OS2_GCC ) - /* 25/03/2000 - maurilio.longo@libero.it + /* 2000.03.25 - maurilio.longo@libero.it OS/2 GCC hasn't got ToolKit headers available */ #include #else @@ -562,7 +562,7 @@ static void hb_gt_os2_Init( PHB_GT pGT, HB_FHANDLE hFilenoStdin, HB_FHANDLE hFil box drawing chars. (Maurilio Longo - maurilio.longo@libero.it) */ - /* 21/08/2001 - + /* 2001.08.21 - NOTE: Box drawing characters need page 437 to show correctly, so, in your config.sys you need to have a CODEPAGE=x,y statement where x or y is equal to 437 diff --git a/harbour/src/rtl/gtwvt/gtwvt.c b/harbour/src/rtl/gtwvt/gtwvt.c index 8edb09bc6a..5e4de3456d 100644 --- a/harbour/src/rtl/gtwvt/gtwvt.c +++ b/harbour/src/rtl/gtwvt/gtwvt.c @@ -1864,11 +1864,11 @@ static LRESULT CALLBACK hb_gt_wvt_WndProc( HWND hWnd, UINT message, WPARAM wPara return 0; case WM_ENTERIDLE: - /* FSG - 12/05/2004 - Signal than i'm on idle */ + /* FSG - 2004.05.12 - Signal than i'm on idle */ hb_idleState(); return 0; - /* Pritpal Bedi - 06 Jun 2008 */ + /* Pritpal Bedi - 2008.06.06 */ case WM_ACTIVATE: hb_gt_wvt_AddCharToInputQueue( pWVT, ( LOWORD( wParam ) == WA_INACTIVE ? HB_K_LOSTFOCUS : HB_K_GOTFOCUS ) ); return 0; diff --git a/harbour/src/rtl/net.c b/harbour/src/rtl/net.c index 9fb556f2a3..3afea39956 100644 --- a/harbour/src/rtl/net.c +++ b/harbour/src/rtl/net.c @@ -67,7 +67,7 @@ #include "hb_io.h" - /* 25/03/2004 - + /* 2004.03.25 - not needed anymore as of GCC 3.2.2 */ #include diff --git a/harbour/src/rtl/teditor.prg b/harbour/src/rtl/teditor.prg index c814bfc9ba..a3dfc4fce9 100644 --- a/harbour/src/rtl/teditor.prg +++ b/harbour/src/rtl/teditor.prg @@ -695,7 +695,7 @@ METHOD Edit( nPassedKey ) CLASS HBEditor nKey := nPassedKey ENDIF - // 03/sept/2002 - maurilio.longo@libero.it + // 2002.09.03 - maurilio.longo@libero.it // NOTE: I think this code should only be present on classes derived from TEditor which is // a low level "editing engine".. For now I leave it here... IF ( bKeyBlock := SetKey( nKey ) ) != NIL diff --git a/harbour/src/vm/runner.c b/harbour/src/vm/runner.c index 28dea39d17..b26404e44c 100644 --- a/harbour/src/vm/runner.c +++ b/harbour/src/vm/runner.c @@ -49,14 +49,19 @@ * If you do not wish that, delete this exception notice. * */ + /* - * The following functions are added Feb 01,2002 by - * Alexander Kresin + * The following parts are Copyright of the individual authors. + * www - http://harbour-project.org + * + * Copyright 2002 Alexander Kresin + * HB_HRBLOAD() + * HB_HRBDO() + * HB_HRBUNLOAD() + * HB_HRBGETFUNSYM() + * + * See COPYING.txt for licensing terms. * - * HB_HRBLOAD() - * HB_HRBDO() - * HB_HRBUNLOAD() - * HB_HRBGETFUNSYM() */ #include "hbvmint.h" @@ -642,7 +647,7 @@ static void hb_hrbDo( PHRB_BODY pHrbBody, int iPCount, PHB_ITEM * pParams ) hb_hrbInit( pHrbBody, iPCount, pParams ); - /* May not have a startup symbol, if first symbol was an INIT Symbol (was executed already).*/ + /* May not have a startup symbol, if first symbol was an INIT Symbol (was executed already). */ if( pHrbBody->lSymStart >= 0 && hb_vmRequestQuery() == 0 ) { hb_vmPushSymbol( &pHrbBody->pSymRead[ pHrbBody->lSymStart ] ); diff --git a/harbour/src/vm/thread.c b/harbour/src/vm/thread.c index e1390e9127..74e827beeb 100644 --- a/harbour/src/vm/thread.c +++ b/harbour/src/vm/thread.c @@ -267,7 +267,7 @@ void hb_threadReleaseCPU( void ) #elif defined( HB_OS_OS2 ) - /* 23/nov/2000 - maurilio.longo@libero.it + /* 2000.11.23 - maurilio.longo@libero.it Minimum time slice under OS/2 is 32 milliseconds, passed 1 will be rounded to 32 and will give a chance to threads of lower priority to get executed. Passing 0 causes current thread to give up its time slice only if there are threads of diff --git a/harbour/tests/testhrb.prg b/harbour/tests/testhrb.prg index db76ed5532..37cb1aa993 100644 --- a/harbour/tests/testhrb.prg +++ b/harbour/tests/testhrb.prg @@ -8,24 +8,26 @@ PROCEDURE Main( x ) - LOCAL pHrb, cExe := "Msg2()", n + LOCAL pHrb, cExe := "Msg2()" - n := iif( x == NIL, 0, Val( x ) ) + LOCAL n := iif( x == NIL, 0, Val( x ) ) ? "calling Msg ... From exe here !" Msg() ? "=========================" - // ? "Loading('exthrb.hrb' )" - // pHrb := hb_hrbLoad("exthrb.hrb" ) +#if 0 + ? "Loading( 'exthrb.hrb' )" + pHrb := hb_hrbLoad( "exthrb.hrb" ) - // ? "Loading(HB_HRB_BIND_DEFAULT,'exthrb.hrb' )" - // pHrb := hb_hrbLoad(HB_HRB_BIND_DEFAULT,"exthrb.hrb" ) + ? "Loading( HB_HRB_BIND_DEFAULT, 'exthrb.hrb' )" + pHrb := hb_hrbLoad( HB_HRB_BIND_DEFAULT, "exthrb.hrb" ) - // ? "Loading(HB_HRB_BIND_LOCAL,'exthrb.hrb' )" - // pHrb := hb_hrbLoad(HB_HRB_BIND_LOCAL,"exthrb.hrb" ) + ? "Loading( HB_HRB_BIND_LOCAL, 'exthrb.hrb' )" + pHrb := hb_hrbLoad( HB_HRB_BIND_LOCAL, "exthrb.hrb" ) +#endif - ? "Loading(" + iif( n == 0, "HB_HRB_BIND_DEFAULT", iif( n == 1,"HB_HRB_BIND_LOCAL","HB_HRB_BIND_OVERLOAD" ) ) + ",'exthrb.hrb' )" + ? "Loading(" + iif( n == 0, "HB_HRB_BIND_DEFAULT", iif( n == 1, "HB_HRB_BIND_LOCAL", "HB_HRB_BIND_OVERLOAD" ) ) + ", 'exthrb.hrb' )" pHrb := hb_hrbLoad( n, "exthrb.hrb" ) ? "=========================" @@ -44,7 +46,7 @@ PROCEDURE Main( x ) Msg() // test unload protection when using OVERLOAD ... then .hrb not anymore unloadable ? "=========================" - ? "END" + ? "END" RETURN diff --git a/harbour/tests/testhtml.prg b/harbour/tests/testhtml.prg index 328d90a39a..ebbf978145 100644 --- a/harbour/tests/testhtml.prg +++ b/harbour/tests/testhtml.prg @@ -75,8 +75,7 @@ METHOD SetTitle( cTitle ) CLASS THTML METHOD AddLink( cLinkTo, cLinkName ) CLASS THTML - ::cBody := ::cBody + ; - "" + cLinkName + "" + ::cBody += "" + cLinkName + "" RETURN Self @@ -86,16 +85,15 @@ METHOD AddHead( cDescr ) CLASS THTML // ::cBody += ... // ??? - ::cBody := ::cBody + ; - "

" + cDescr + "

" + ::cBody += "

" + cDescr + "

" RETURN NIL METHOD AddPara( cPara, cAlign ) CLASS THTML - cAlign := iif( cAlign == NIL, "Left", cAlign ) // Added Patrick Mast 2000-06-17 + hb_default( @cAlign, "Left" ) - ::cBody := ::cBody + ; + ::cBody += ; "

" + hb_eol() + ; cPara + hb_eol() + ; "

" diff --git a/harbour/utils/hbmk2/Makefile b/harbour/utils/hbmk2/Makefile index e2497db31e..c42e1958ab 100644 --- a/harbour/utils/hbmk2/Makefile +++ b/harbour/utils/hbmk2/Makefile @@ -25,6 +25,12 @@ ifneq ($(HB_HAS_WATT),) HB_PRGFLAGS += -DHB_HAS_WATT endif +# Not possible to override default entry +# function cleanly when using plain GNU Make +# to build, so we're using _APPMAIN(), which +# is better than MAIN() +HB_PRGFLAGS += -DHBMK_USE_APPMAIN + HB_PRGFLAGS += -DHBMK_WITH_ALL_EMBEDDED_HEADERS include $(TOP)$(ROOT)config/bin.mk diff --git a/harbour/utils/hbmk2/hbmk2.hbp b/harbour/utils/hbmk2/hbmk2.hbp index 29e427d0ef..ed6fb4d2e3 100644 --- a/harbour/utils/hbmk2/hbmk2.hbp +++ b/harbour/utils/hbmk2/hbmk2.hbp @@ -13,6 +13,12 @@ hbmk2.prg +# use alternate public entry function name +# to not collide with any known ones when +# running scripts. +-main=__hbmk_public_entry +-DHBMK_USE_CUSTMAIN + -DHBMK_WITH_ALL_EMBEDDED_HEADERS -lhbpmcom{dos} diff --git a/harbour/utils/hbmk2/hbmk2.prg b/harbour/utils/hbmk2/hbmk2.prg index ce7efb3f21..5d1b6aebe5 100644 --- a/harbour/utils/hbmk2/hbmk2.prg +++ b/harbour/utils/hbmk2/hbmk2.prg @@ -58,13 +58,9 @@ * */ -#if __pragma( n ) >= 1 - /* Keeping it tidy */ - #pragma -w3 - #pragma -es2 -#else - #error Missing required Harbour option: -n -#endif +/* Keeping it tidy */ +#pragma -w3 +#pragma -es2 /* Optimizations */ #pragma -km+ @@ -577,10 +573,6 @@ EXTERNAL hbmk_KEYW #define PathMakeAbsolute( cPathR, cPathA ) hb_PathJoin( cPathA, cPathR ) -/* NOTE: Security token to protect against plugins accessing our - internal structures referenced from context variable */ -STATIC s_cSecToken := NIL - #ifndef _HBMK_EMBEDDED_ /* Request for runner and shell */ @@ -610,27 +602,49 @@ EXTERNAL hb_HKeepOrder EXTERNAL hb_FGetAttr EXTERNAL hb_FSetAttr -/* For hbshell */ -STATIC s_cDirBase_hbshell -STATIC s_cProgName_hbshell -STATIC s_hLibExt := { => } -STATIC s_hCH := { => } -STATIC s_hOPTPRG := { => } -STATIC s_hINCPATH := { => } -STATIC s_hCHCORE := { => } -STATIC s_hbmk - #define HB_HISTORY_LEN 500 #define HB_LINE_LEN 256 -STATIC s_nRow -STATIC s_nCol := 0 -STATIC s_aHistory := {} -STATIC s_lPreserveHistory := .T. -STATIC s_lWasLoad := .F. -STATIC s_lInteractive := .T. +/* For hbshell */ +#define _HBSH_cDirBase 1 +#define _HBSH_cProgName 2 +#define _HBSH_hLibExt 3 +#define _HBSH_hCH 4 +#define _HBSH_hOPTPRG 5 +#define _HBSH_hINCPATH 6 +#define _HBSH_hCHCORE 7 +#define _HBSH_hbmk 8 +#define _HBSH_nRow 9 +#define _HBSH_nCol 10 +#define _HBSH_aHistory 11 +#define _HBSH_lPreserveHistory 12 +#define _HBSH_lWasLoad 13 +#define _HBSH_lInteractive 14 +#define _HBSH_MAX_ 15 -PROCEDURE _APPMAIN( ... ) +/* Trick to make it run if compiled without -n/-n1/-n2 + (or with -n-) option. + (typically as scripts and precompiled scripts) */ +/* NOTE: Avoid file wide STATICs to keep this working */ +#if __pragma( n ) < 1 +hbmk_local_entry( hb_ArrayToParams( hb_AParams() ) ) +#endif + +#if defined( HBMK_USE_CUSTMAIN ) /* for .hbp build */ +PROCEDURE __hbmk_public_entry( ... ) /* for hbrun builds (or any builds via .hbp) */ + hbmk_local_entry( ... ) + RETURN +#elif defined( HBMK_USE_APPMAIN ) +PROCEDURE _APPMAIN( ... ) /* for GNU Make build (we can't override default entry, so we use this alternate built-in one */ + hbmk_local_entry( ... ) + RETURN +#else +PROCEDURE __hbmk_fake_entry( ... ) /* for scripts and precompiled scripts with -n/-n1/-n2 option */ + hbmk_local_entry( ... ) + RETURN +#endif + +STATIC PROCEDURE hbmk_local_entry( ... ) LOCAL aArgsProc LOCAL nResult @@ -645,23 +659,29 @@ PROCEDURE _APPMAIN( ... ) LOCAL nTargetPos LOCAL lHadTarget + LOCAL cParam1L + /* for temp debug messages */ Set( _SET_DATEFORMAT, "yyyy.mm.dd" ) - /* Expand wildcard project specs */ + /* Check if we should go into shell mode */ + cParam1L := iif( PCount() >= 1, Lower( hb_PValue( 1 ) ), "" ) IF ( Right( Lower( hb_FNameName( hb_argv( 0 ) ) ), 5 ) == "hbrun" .OR. ; Left( Lower( hb_FNameName( hb_argv( 0 ) ) ), 5 ) == "hbrun" .OR. ; - hb_PValue( 1 ) == "." .OR. ; - HBMK_IS_IN( Lower( hb_FNameExt( hb_PValue( 1 ) ) ), ".hb|.hrb|.dbf" ) ) .AND. ; - !( ! Empty( hb_PValue( 1 ) ) .AND. ; - ( Left( hb_PValue( 1 ), 6 ) == "-hbreg" .OR. ; - Left( hb_PValue( 1 ), 8 ) == "-hbunreg" ) ) + cParam1L == "." .OR. ; + hb_FNameExt( cParam1L ) == ".dbf" .OR. ; + ( HBMK_IS_IN( hb_FNameExt( cParam1L ), ".hb|.hrb" ) .AND. !( Left( cParam1L, 1 ) == "-" ) ) ) .AND. ; + !( ! Empty( cParam1L ) .AND. ; + ( Left( cParam1L, 6 ) == "-hbreg" .OR. ; + Left( cParam1L, 8 ) == "-hbunreg" ) ) __hbshell( ... ) RETURN ENDIF + /* Expand wildcard project specs */ + aArgsProc := {} FOR EACH tmp IN hb_AParams() DO CASE @@ -764,7 +784,7 @@ PROCEDURE _APPMAIN( ... ) ENDIF /* Build one target */ - nResult := hbmk( aArgsTarget, nTargetPos, 1, @lPause, @lExitStr ) + nResult := __hbmk( aArgsTarget, nTargetPos, 1, @lPause, @lExitStr ) /* Exit on first failure */ IF nResult != _EXIT_OK @@ -788,7 +808,7 @@ PROCEDURE _APPMAIN( ... ) RETURN -#endif /* _HBMK_EMBEDDED_ */ +#endif /* ! _HBMK_EMBEDDED_ */ #if defined( __PLATFORM__WINDOWS ) .OR. ; defined( __PLATFORM__DOS ) .OR. ; @@ -1208,7 +1228,7 @@ STATIC PROCEDURE hbmk_harbour_dirlayout_init( hbmk ) RETURN -FUNCTION hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExitStr ) +STATIC FUNCTION __hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExitStr ) LOCAL hbmk @@ -1389,10 +1409,6 @@ FUNCTION hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExitStr ) LOCAL cStdOutErr - IF s_cSecToken == NIL - s_cSecToken := StrZero( hb_rand32(), 10, 0 ) - ENDIF - hbmk := hbmk_new() hbmk[ _HBMK_aArgs ] := aArgs @@ -9295,8 +9311,10 @@ STATIC FUNCTION ctx_to_hbmk( ctx ) LOCAL hbmk - IF HB_ISHASH( ctx ) .AND. s_cSecToken $ ctx - hbmk := ctx[ s_cSecToken ] + LOCAL cSecToken := hbmk_SecToken() + + IF HB_ISHASH( ctx ) .AND. cSecToken $ ctx + hbmk := ctx[ cSecToken ] IF HB_ISARRAY( hbmk ) .AND. Len( hbmk ) == _HBMK_MAX_ RETURN hbmk ENDIF @@ -9453,45 +9471,62 @@ FUNCTION hbmk_Register_Input_File_Extension( ctx, cExt ) RETURN NIL +STATIC FUNCTION hbmk_SecToken() + + /* NOTE: Security token to protect against plugins accessing our + internal structures referenced from context variable */ + STATIC s_cToken := NIL + STATIC s_mutexToken := hb_mutexCreate() + + hb_mutexLock( s_mutexToken ) + + IF s_cToken == NIL + s_cToken := StrZero( hb_rand32(), 10, 0 ) + ENDIF + + hb_mutexUnlock( s_mutexToken ) + + RETURN s_cToken + /* ; */ STATIC FUNCTION PlugIn_make_ctx( hbmk, cState ) RETURN { ; - "cSTATE" => cState , ; - "params" => hbmk[ _HBMK_aPLUGINPars ] , ; - "vars" => hbmk[ _HBMK_hPLUGINVars ] , ; - "cPLAT" => hbmk[ _HBMK_cPLAT ] , ; - "cCOMP" => hbmk[ _HBMK_cCOMP ] , ; - "nCOMPVer" => hbmk[ _HBMK_nCOMPVer ] , ; - "cCPU" => hbmk[ _HBMK_cCPU ] , ; - "cBUILD" => hbmk[ _HBMK_cBUILD ] , ; - "cOUTPUTNAME" => hbmk[ _HBMK_cPROGNAME ] , ; - "cTARGETNAME" => hbmk_TARGETNAME( hbmk ) , ; - "cTARGETTYPE" => hbmk_TARGETTYPE( hbmk ) , ; - "lREBUILD" => hbmk[ _HBMK_lREBUILD ] , ; - "lCLEAN" => hbmk[ _HBMK_lCLEAN ] , ; - "lDEBUG" => hbmk[ _HBMK_lDEBUG ] , ; - "lMAP" => hbmk[ _HBMK_lMAP ] , ; - "lSTRIP" => hbmk[ _HBMK_lSTRIP ] , ; - "lDONTEXEC" => hbmk[ _HBMK_lDONTEXEC ] , ; - "lIGNOREERROR" => hbmk[ _HBMK_lIGNOREERROR ] , ; - "lTRACE" => hbmk[ _HBMK_lTRACE ] , ; - "lQUIET" => hbmk[ _HBMK_lQuiet ] , ; - "lINFO" => hbmk[ _HBMK_lInfo ] , ; - "lBEEP" => hbmk[ _HBMK_lBEEP ] , ; - "lRUN" => hbmk[ _HBMK_lRUN ] , ; - "lINC" => hbmk[ _HBMK_lINC ] , ; - "cCCPATH" => hbmk[ _HBMK_cCCPATH ] , ; - "cCCPREFIX" => hbmk[ _HBMK_cCCPREFIX ] , ; - "cCCSUFFIX" => hbmk[ _HBMK_cCCSUFFIX ] , ; - "cCCEXT" => hbmk[ _HBMK_cCCEXT ] , ; - "nCmd_Esc" => hbmk[ _HBMK_nCmd_Esc ] , ; - "nScr_Esc" => hbmk[ _HBMK_nScr_Esc ] , ; - "nCmd_FNF" => hbmk[ _HBMK_nCmd_FNF ] , ; - "nScr_FNF" => hbmk[ _HBMK_nScr_FNF ] , ; - "cWorkDir" => hbmk[ _HBMK_cWorkDir ] , ; - "nExitCode" => hbmk[ _HBMK_nExitCode ] , ; - s_cSecToken => hbmk } + "cSTATE" => cState , ; + "params" => hbmk[ _HBMK_aPLUGINPars ] , ; + "vars" => hbmk[ _HBMK_hPLUGINVars ] , ; + "cPLAT" => hbmk[ _HBMK_cPLAT ] , ; + "cCOMP" => hbmk[ _HBMK_cCOMP ] , ; + "nCOMPVer" => hbmk[ _HBMK_nCOMPVer ] , ; + "cCPU" => hbmk[ _HBMK_cCPU ] , ; + "cBUILD" => hbmk[ _HBMK_cBUILD ] , ; + "cOUTPUTNAME" => hbmk[ _HBMK_cPROGNAME ] , ; + "cTARGETNAME" => hbmk_TARGETNAME( hbmk ) , ; + "cTARGETTYPE" => hbmk_TARGETTYPE( hbmk ) , ; + "lREBUILD" => hbmk[ _HBMK_lREBUILD ] , ; + "lCLEAN" => hbmk[ _HBMK_lCLEAN ] , ; + "lDEBUG" => hbmk[ _HBMK_lDEBUG ] , ; + "lMAP" => hbmk[ _HBMK_lMAP ] , ; + "lSTRIP" => hbmk[ _HBMK_lSTRIP ] , ; + "lDONTEXEC" => hbmk[ _HBMK_lDONTEXEC ] , ; + "lIGNOREERROR" => hbmk[ _HBMK_lIGNOREERROR ] , ; + "lTRACE" => hbmk[ _HBMK_lTRACE ] , ; + "lQUIET" => hbmk[ _HBMK_lQuiet ] , ; + "lINFO" => hbmk[ _HBMK_lInfo ] , ; + "lBEEP" => hbmk[ _HBMK_lBEEP ] , ; + "lRUN" => hbmk[ _HBMK_lRUN ] , ; + "lINC" => hbmk[ _HBMK_lINC ] , ; + "cCCPATH" => hbmk[ _HBMK_cCCPATH ] , ; + "cCCPREFIX" => hbmk[ _HBMK_cCCPREFIX ] , ; + "cCCSUFFIX" => hbmk[ _HBMK_cCCSUFFIX ] , ; + "cCCEXT" => hbmk[ _HBMK_cCCEXT ] , ; + "nCmd_Esc" => hbmk[ _HBMK_nCmd_Esc ] , ; + "nScr_Esc" => hbmk[ _HBMK_nScr_Esc ] , ; + "nCmd_FNF" => hbmk[ _HBMK_nCmd_FNF ] , ; + "nScr_FNF" => hbmk[ _HBMK_nScr_FNF ] , ; + "cWorkDir" => hbmk[ _HBMK_cWorkDir ] , ; + "nExitCode" => hbmk[ _HBMK_nExitCode ] , ; + hbmk_SecToken() => hbmk } STATIC FUNCTION PlugIn_ctx_get_state( ctx ) RETURN ctx[ "cSTATE" ] @@ -11059,7 +11094,7 @@ STATIC FUNCTION HBM_Load( hbmk, aParams, cFileName, nNestingLevel, lProcHBP, cPa IF lFound aArgs := AClone( hbmk[ _HBMK_aArgs ] ) aArgs[ hbmk[ _HBMK_nArgTarget ] ] := cHBP - nResult := hbmk( aArgs, hbmk[ _HBMK_nArgTarget ], hbmk[ _HBMK_nLevel ] + 1, @hbmk[ _HBMK_lPause ] ) + nResult := __hbmk( aArgs, hbmk[ _HBMK_nArgTarget ], hbmk[ _HBMK_nLevel ] + 1, @hbmk[ _HBMK_lPause ] ) IF nResult != 0 RETURN nResult ENDIF @@ -13367,8 +13402,30 @@ STATIC FUNCTION hbmk_CoreHeaderFiles() #endif #define _EXT_ENV_ "HB_EXTENSION" +STATIC FUNCTION hbsh() + + THREAD STATIC t_hbsh := NIL + + IF t_hbsh == NIL + t_hbsh := Array( _HBSH_MAX_ ) + t_hbsh[ _HBSH_hLibExt ] := { => } + t_hbsh[ _HBSH_hCH ] := { => } + t_hbsh[ _HBSH_hOPTPRG ] := { => } + t_hbsh[ _HBSH_hINCPATH ] := { => } + t_hbsh[ _HBSH_hCHCORE ] := { => } + t_hbsh[ _HBSH_nCol ] := 0 + t_hbsh[ _HBSH_aHistory ] := {} + t_hbsh[ _HBSH_lPreserveHistory ] := .T. + t_hbsh[ _HBSH_lWasLoad ] := .F. + t_hbsh[ _HBSH_lInteractive ] := .T. + ENDIF + + RETURN t_hbsh + STATIC PROCEDURE __hbshell( cFile, ... ) + LOCAL hbsh := hbsh() + LOCAL aExtension := {} LOCAL hbmk LOCAL cHBC @@ -13384,12 +13441,12 @@ STATIC PROCEDURE __hbshell( cFile, ... ) /* Save originals */ - s_cDirBase_hbshell := hb_DirBase() - s_cProgName_hbshell := hb_ProgName() + hbsh[ _HBSH_cDirBase ] := hb_DirBase() + hbsh[ _HBSH_cProgName ] := hb_ProgName() /* Detect Harbour dir layout */ - hbmk := s_hbmk := hbmk_new() + hbmk := hbsh[ _HBSH_hbmk ] := hbmk_new() hbmk_init_stage2( hbmk ) IF ! hbmk_harbour_dirlayout_detect( hbmk, .T. ) IF __hbshell_CanLoadDyn() @@ -13443,7 +13500,7 @@ STATIC PROCEDURE __hbshell( cFile, ... ) SWITCH cExt CASE ".hb" - s_lInteractive := .F. + hbsh[ _HBSH_lInteractive ] := .F. /* NOTE: Assumptions: - one dynamic lib belongs to one .hbc file (true for dynamic builds in contrib) @@ -13495,7 +13552,7 @@ STATIC PROCEDURE __hbshell( cFile, ... ) ENDIF CASE ".hrb" - s_lInteractive := .F. + hbsh[ _HBSH_lInteractive ] := .F. __hbshell_ext_init( aExtension ) hHRB := hb_hrbLoad( cFile ) hbshell_gtSelect( __hbshell_detect_GT( hHRB ) ) @@ -13610,6 +13667,8 @@ STATIC PROCEDURE __hbshell_LoadExtFromSource( aExtension, cFileName ) STATIC PROCEDURE __hbshell_ext_static_init() + LOCAL hbsh := hbsh() + LOCAL tmp LOCAL nCount LOCAL cName @@ -13619,7 +13678,7 @@ STATIC PROCEDURE __hbshell_ext_static_init() cName := __dynSGetName( tmp ) IF LEFTEQUAL( cName, "__HBEXTERN__" ) .AND. ; ! HBMK_IS_IN( cName, "__HBEXTERN__HBCPAGE__" ) - s_hLibExt[ Lower( SubStr( cName, Len( "__HBEXTERN__" ) + 1, Len( cName ) - Len( "__HBEXTERN__" ) - Len( "__" ) ) ) ] := NIL + hbsh[ _HBSH_hLibExt ][ Lower( SubStr( cName, Len( "__HBEXTERN__" ) + 1, Len( cName ) - Len( "__HBEXTERN__" ) - Len( "__" ) ) ) ] := NIL ENDIF NEXT @@ -13643,6 +13702,8 @@ STATIC PROCEDURE __hbshell_ext_init( aExtension ) extend header search path accordingly */ FUNCTION hbshell_ext_load( cName ) + LOCAL hbsh := hbsh() + LOCAL cFileName LOCAL hLib LOCAL tmp @@ -13652,29 +13713,29 @@ FUNCTION hbshell_ext_load( cName ) IF ! Empty( cName ) IF __hbshell_CanLoadDyn() - IF !( cName $ s_hLibExt ) + IF !( cName $ hbsh[ _HBSH_hLibExt ] ) - s_hbmk[ _HBMK_aINCPATH ] := {} - s_hbmk[ _HBMK_aCH ] := {} - s_hbmk[ _HBMK_aLIBUSER ] := {} + hbsh[ _HBSH_hbmk ][ _HBMK_aINCPATH ] := {} + hbsh[ _HBSH_hbmk ][ _HBMK_aCH ] := {} + hbsh[ _HBSH_hbmk ][ _HBMK_aLIBUSER ] := {} - s_hINCPATH[ cName ] := {} - s_hCH[ cName ] := {} - s_hOPTPRG[ cName ] := {} + hbsh[ _HBSH_hINCPATH ][ cName ] := {} + hbsh[ _HBSH_hCH ][ cName ] := {} + hbsh[ _HBSH_hOPTPRG ][ cName ] := {} - IF Empty( cVersion := HBC_Find( s_hbmk, cHBC := hb_FNameExtSet( cName, ".hbc" ) ) ) + IF Empty( cVersion := HBC_Find( hbsh[ _HBSH_hbmk ], cHBC := hb_FNameExtSet( cName, ".hbc" ) ) ) OutErr( hb_StrFormat( I_( "hbshell: Warning: Cannot find %1$s" ), cHBC ) + _OUT_EOL ) ELSE - AEval( s_hbmk[ _HBMK_aINCPATH ], {| tmp | AAdd( s_hINCPATH[ cName ], tmp ) } ) - AEval( s_hbmk[ _HBMK_aCH ], {| tmp | AAdd( s_hCH[ cName ], tmp ) } ) - AAddNew( s_hOPTPRG[ cName ], "-D" + hb_StrFormat( _HBMK_HAS_TPL_HBC, StrToDefine( cName ) ) + "=" + cVersion ) + AEval( hbsh[ _HBSH_hbmk ][ _HBMK_aINCPATH ], {| tmp | AAdd( hbsh[ _HBSH_hINCPATH ][ cName ], tmp ) } ) + AEval( hbsh[ _HBSH_hbmk ][ _HBMK_aCH ], {| tmp | AAdd( hbsh[ _HBSH_hCH ][ cName ], tmp ) } ) + AAddNew( hbsh[ _HBSH_hOPTPRG ][ cName ], "-D" + hb_StrFormat( _HBMK_HAS_TPL_HBC, StrToDefine( cName ) ) + "=" + cVersion ) /* NOTE: Hack. We detect if the .hbc had defined any libs to load. (f.e. there will not be any libs if the .hbc was skipped due to filters) TODO: In the future the .hbc should specify a list of dynamic libs to load, and we should load those, if any. */ - IF ! Empty( s_hbmk[ _HBMK_aLIBUSER ] ) + IF ! Empty( hbsh[ _HBSH_hbmk ][ _HBMK_aLIBUSER ] ) cFileName := FindInPath( tmp := hb_libName( cName + hb_libPostfix() ), ; iif( hb_Version( HB_VERSION_UNIX_COMPAT ), GetEnv( "LD_LIBRARY_PATH" ), GetEnv( "PATH" ) ) ) IF Empty( cFileName ) @@ -13684,7 +13745,7 @@ FUNCTION hbshell_ext_load( cName ) IF Empty( hLib ) OutErr( hb_StrFormat( I_( "hbshell: Error loading '%1$s' (%2$s)." ), cName, cFileName ) + _OUT_EOL ) ELSE - s_hLibExt[ cName ] := hLib + hbsh[ _HBSH_hLibExt ][ cName ] := hLib RETURN .T. ENDIF ENDIF @@ -13700,11 +13761,13 @@ FUNCTION hbshell_ext_load( cName ) FUNCTION hbshell_ext_unload( cName ) - IF cName $ s_hLibExt .AND. s_hLibExt[ cName ] != NIL - hb_HDel( s_hINCPATH, cName ) - hb_HDel( s_hCH, cName ) - hb_HDel( s_hOPTPRG, cName ) - hb_HDel( s_hLibExt, cName ) + LOCAL hbsh := hbsh() + + IF cName $ hbsh[ _HBSH_hLibExt ] .AND. hbsh[ _HBSH_hLibExt ][ cName ] != NIL + hb_HDel( hbsh[ _HBSH_hINCPATH ], cName ) + hb_HDel( hbsh[ _HBSH_hCH ], cName ) + hb_HDel( hbsh[ _HBSH_hOPTPRG ], cName ) + hb_HDel( hbsh[ _HBSH_hLibExt ], cName ) RETURN .T. ENDIF @@ -13712,10 +13775,12 @@ FUNCTION hbshell_ext_unload( cName ) FUNCTION hbshell_ext_get_list() - LOCAL aName := Array( Len( s_hLibExt ) ) + LOCAL hbsh := hbsh() + + LOCAL aName := Array( Len( hbsh[ _HBSH_hLibExt ] ) ) LOCAL hLib - FOR EACH hLib IN s_hLibExt + FOR EACH hLib IN hbsh[ _HBSH_hLibExt ] aName[ hLib:__enumIndex() ] := iif( Empty( hLib ), Upper( hLib:__enumKey() ), hLib:__enumKey() ) NEXT @@ -13957,6 +14022,8 @@ STATIC PROCEDURE __hbshell_ProcessStart() /* TODO: rewrite the full-screen shell to be a simple stdout/stdin shell */ STATIC PROCEDURE __hbshell_prompt( aParams, aCommand ) + LOCAL hbsh := hbsh() + LOCAL GetList LOCAL cLine LOCAL nMaxRow, nMaxCol @@ -13984,8 +14051,8 @@ STATIC PROCEDURE __hbshell_prompt( aParams, aCommand ) __hbshell_HistoryLoad() - AAdd( s_aHistory, PadR( "quit", HB_LINE_LEN ) ) - nHistIndex := Len( s_aHistory ) + 1 + AAdd( hbsh[ _HBSH_aHistory ], PadR( "quit", HB_LINE_LEN ) ) + nHistIndex := Len( hbsh[ _HBSH_aHistory ] ) + 1 hb_gtInfo( HB_GTI_RESIZEMODE, HB_GTI_RESIZEMODE_ROWS ) @@ -13993,7 +14060,7 @@ STATIC PROCEDURE __hbshell_prompt( aParams, aCommand ) Set( _SET_EVENTMASK, hb_bitOr( INKEY_KEYBOARD, HB_INKEY_GTEVENT ) ) - s_nRow := 3 + hbsh[ _HBSH_nRow ] := 3 __hbshell_Exec( "?? hb_Version()" ) @@ -14002,7 +14069,7 @@ STATIC PROCEDURE __hbshell_prompt( aParams, aCommand ) IF HB_ISARRAY( aCommand ) FOR EACH cCommand IN aCommand IF HB_ISSTRING( cCommand ) - AAdd( s_aHistory, PadR( cCommand, HB_LINE_LEN ) ) + AAdd( hbsh[ _HBSH_aHistory ], PadR( cCommand, HB_LINE_LEN ) ) __hbshell_Info( cCommand ) __hbshell_Exec( cCommand ) ENDIF @@ -14036,11 +14103,11 @@ STATIC PROCEDURE __hbshell_prompt( aParams, aCommand ) SC_NORMAL, SC_INSERT ) ) } ) bKeyUp := SetKey( K_UP, ; {|| iif( nHistIndex > 1, ; - cLine := s_aHistory[ --nHistIndex ], ) } ) + cLine := hbsh[ _HBSH_aHistory ][ --nHistIndex ], ) } ) bKeyDown := SetKey( K_DOWN, ; - {|| cLine := iif( nHistIndex < Len( s_aHistory ), ; - s_aHistory[ ++nHistIndex ], ; - ( nHistIndex := Len( s_aHistory ) + 1, Space( HB_LINE_LEN ) ) ) } ) + {|| cLine := iif( nHistIndex < Len( hbsh[ _HBSH_aHistory ] ), ; + hbsh[ _HBSH_aHistory ][ ++nHistIndex ], ; + ( nHistIndex := Len( hbsh[ _HBSH_aHistory ] ) + 1, Space( HB_LINE_LEN ) ) ) } ) bKeyResize := SetKey( HB_K_RESIZE, ; {|| lResize := .T., hb_keyPut( K_ENTER ) } ) @@ -14064,15 +14131,15 @@ STATIC PROCEDURE __hbshell_prompt( aParams, aCommand ) LOOP ENDIF - IF Empty( s_aHistory ) .OR. !( ATail( s_aHistory ) == cLine ) - IF Len( s_aHistory ) < HB_HISTORY_LEN - AAdd( s_aHistory, cLine ) + IF Empty( hbsh[ _HBSH_aHistory ] ) .OR. !( ATail( hbsh[ _HBSH_aHistory ] ) == cLine ) + IF Len( hbsh[ _HBSH_aHistory ] ) < HB_HISTORY_LEN + AAdd( hbsh[ _HBSH_aHistory ], cLine ) ELSE - ADel( s_aHistory, 1 ) - s_aHistory[ Len( s_aHistory ) ] := cLine + ADel( hbsh[ _HBSH_aHistory ], 1 ) + hbsh[ _HBSH_aHistory ][ Len( hbsh[ _HBSH_aHistory ] ) ] := cLine ENDIF ENDIF - nHistIndex := Len( s_aHistory ) + 1 + nHistIndex := Len( hbsh[ _HBSH_aHistory ] ) + 1 cCommand := AllTrim( cLine, " " ) cLine := NIL @@ -14096,9 +14163,9 @@ STATIC PROCEDURE __hbshell_prompt( aParams, aCommand ) __hbshell_Exec( cCommand ) ENDIF - IF s_nRow >= MaxRow() + IF hbsh[ _HBSH_nRow ] >= MaxRow() hb_Scroll( 3, 0, MaxRow(), MaxCol(), 1 ) - s_nRow := MaxRow() - 1 + hbsh[ _HBSH_nRow ] := MaxRow() - 1 ENDIF ENDIF ENDIF @@ -14145,6 +14212,8 @@ STATIC FUNCTION __hbshell_GetHidden() STATIC PROCEDURE __hbshell_Info( cCommand ) + LOCAL hbsh := hbsh() + IF cCommand != NIL hb_DispOutAt( 0, 0, "PP: ", "W/N" ) hb_DispOutAt( 0, 4, PadR( cCommand, MaxCol() - 3 ), "N/R" ) @@ -14166,7 +14235,7 @@ STATIC PROCEDURE __hbshell_Info( cCommand ) " | # " + Space( 7 ) + "/" + Space( 7 ), ; MaxCol() + 1 ), "N/BG" ) ENDIF - IF s_lPreserveHistory + IF hbsh[ _HBSH_lPreserveHistory ] hb_DispOutAt( 1, MaxCol(), "o", "R/BG" ) ENDIF @@ -14206,28 +14275,32 @@ STATIC PROCEDURE __hbshell_Err( oError, cCommand ) STATIC PROCEDURE __hbshell_Exec( cCommand ) + LOCAL hbsh := hbsh() + LOCAL pHRB, cHRB, cFunc, bBlock, nRowMin LOCAL aOPTPRG := {} - IF ! Empty( s_hCHCORE ) - AAdd( aOPTPRG, "-i" + s_hbmk[ _HBMK_cHB_INSTALL_INC ] ) - hb_HEval( s_hCHCORE, {| tmp | AAdd( aOPTPRG, "-u+" + tmp ) } ) + IF ! Empty( hbsh[ _HBSH_hCHCORE ] ) + AAdd( aOPTPRG, "-i" + hbsh[ _HBSH_hbmk ][ _HBMK_cHB_INSTALL_INC ] ) + hb_HEval( hbsh[ _HBSH_hCHCORE ], {| tmp | AAdd( aOPTPRG, "-u+" + tmp ) } ) ENDIF - hb_HEval( s_hINCPATH, {| cExt | - AEval( s_hINCPATH[ cExt ], {| tmp | AAddNew( aOPTPRG, "-i" + tmp ) } ) - AEval( s_hCH[ cExt ] , {| tmp | AAddNew( aOPTPRG, "-u+" + tmp ) } ) - AEval( s_hOPTPRG[ cExt ] , {| tmp | AAddNew( aOPTPRG, tmp ) } ) - RETURN NIL - } ) + hb_HEval( hbsh[ _HBSH_hINCPATH ], ; + {| cExt | + AEval( hbsh[ _HBSH_hINCPATH ][ cExt ], {| tmp | AAddNew( aOPTPRG, "-i" + tmp ) } ) + AEval( hbsh[ _HBSH_hCH ][ cExt ] , {| tmp | AAddNew( aOPTPRG, "-u+" + tmp ) } ) + AEval( hbsh[ _HBSH_hOPTPRG ][ cExt ] , {| tmp | AAddNew( aOPTPRG, tmp ) } ) + RETURN NIL + } ) - cFunc := "STATIC FUNCTION __HBDOT()" + hb_eol() +; - "RETURN {||" + hb_eol() +; - " " + cCommand + hb_eol() +; - " RETURN __mvSetBase()" + hb_eol() +; - "}" + hb_eol() + cFunc := ; + "STATIC FUNCTION __HBDOT()" + hb_eol() +; + "RETURN {||" + hb_eol() +; + " " + cCommand + hb_eol() +; + " RETURN __mvSetBase()" + hb_eol() +; + "}" + hb_eol() - DevPos( s_nRow, s_nCol ) + DevPos( hbsh[ _HBSH_nRow ], hbsh[ _HBSH_nCol ] ) BEGIN SEQUENCE WITH {| oError | __hbshell_Err( oError, cCommand ) } @@ -14245,11 +14318,11 @@ STATIC PROCEDURE __hbshell_Exec( cCommand ) END /* SEQUENCE */ - s_nRow := Row() - s_nCol := Col() + hbsh[ _HBSH_nRow ] := Row() + hbsh[ _HBSH_nCol ] := Col() nRowMin := 3 - IF s_nRow < nRowMin - s_nRow := nRowMin + IF hbsh[ _HBSH_nRow ] < nRowMin + hbsh[ _HBSH_nRow ] := nRowMin ENDIF __mvSetBase() @@ -14272,19 +14345,21 @@ EXIT PROCEDURE __hbshell_exit() STATIC PROCEDURE __hbshell_HistoryLoad() + LOCAL hbsh := hbsh() + LOCAL cHistory LOCAL cLine - s_lWasLoad := .T. + hbsh[ _HBSH_lWasLoad ] := .T. - IF s_lPreserveHistory + IF hbsh[ _HBSH_lPreserveHistory ] cHistory := StrTran( MemoRead( __hbshell_ConfigDir() + _FNAME_HISTORY_ ), Chr( 13 ) ) IF Left( cHistory, Len( _HISTORY_DISABLE_LINE + Chr( 10 ) ) ) == _HISTORY_DISABLE_LINE + Chr( 10 ) - s_lPreserveHistory := .F. + hbsh[ _HBSH_lPreserveHistory ] := .F. ELSE FOR EACH cLine IN hb_ATokens( StrTran( cHistory, Chr( 13 ) ), Chr( 10 ) ) IF ! Empty( cLine ) - AAdd( s_aHistory, PadR( cLine, HB_LINE_LEN ) ) + AAdd( hbsh[ _HBSH_aHistory ], PadR( cLine, HB_LINE_LEN ) ) ENDIF NEXT ENDIF @@ -14294,13 +14369,15 @@ STATIC PROCEDURE __hbshell_HistoryLoad() STATIC PROCEDURE __hbshell_HistorySave() + LOCAL hbsh := hbsh() + LOCAL cHistory LOCAL cLine LOCAL cDir - IF s_lWasLoad .AND. s_lPreserveHistory + IF hbsh[ _HBSH_lWasLoad ] .AND. hbsh[ _HBSH_lPreserveHistory ] cHistory := "" - FOR EACH cLine IN s_aHistory + FOR EACH cLine IN hbsh[ _HBSH_aHistory ] IF !( Lower( AllTrim( cLine ) ) == "quit" ) cHistory += AllTrim( cLine ) + hb_eol() ENDIF @@ -14465,12 +14542,14 @@ STATIC FUNCTION __hbshell_detect_GT( hHRB ) /* Check if a header is a valid core one */ STATIC FUNCTION __hbshell_TryHeader( cName ) + LOCAL hbsh := hbsh() + LOCAL lRetVal := .F. BEGIN SEQUENCE WITH {| oError | Break( oError ) } IF ! Empty( hb_compileFromBuf( "", hbmk_CoreHeaderFiles(), hb_ProgName(), "-q2", ; - "-i" + s_hbmk[ _HBMK_cHB_INSTALL_INC ], ; + "-i" + hbsh[ _HBSH_hbmk ][ _HBMK_cHB_INSTALL_INC ], ; "-u+" + cName ) ) lRetVal := .T. ENDIF @@ -14482,10 +14561,12 @@ STATIC FUNCTION __hbshell_TryHeader( cName ) /* Public hbshell API usable in dot prompt and startup script */ FUNCTION hbshell_include( cName ) + LOCAL hbsh := hbsh() + cName := Lower( cName ) - IF !( cName $ s_hCHCORE ) .AND. __hbshell_TryHeader( cName ) - s_hCHCORE[ cName ] := NIL + IF !( cName $ hbsh[ _HBSH_hCHCORE ] ) .AND. __hbshell_TryHeader( cName ) + hbsh[ _HBSH_hCHCORE ][ cName ] := NIL RETURN .T. ENDIF @@ -14493,10 +14574,12 @@ FUNCTION hbshell_include( cName ) FUNCTION hbshell_uninclude( cName ) + LOCAL hbsh := hbsh() + cName := Lower( cName ) - IF cName $ s_hCHCORE - hb_HDel( s_hCHCORE, cName ) + IF cName $ hbsh[ _HBSH_hCHCORE ] + hb_HDel( hbsh[ _HBSH_hCHCORE ], cName ) RETURN .T. ENDIF @@ -14504,16 +14587,24 @@ FUNCTION hbshell_uninclude( cName ) PROCEDURE hbshell_include_list() - hb_HEval( s_hCHCORE, {| tmp | __hbshell_ToConsole( tmp ) } ) + LOCAL hbsh := hbsh() + + hb_HEval( hbsh[ _HBSH_hCHCORE ], {| tmp | __hbshell_ToConsole( tmp ) } ) RETURN /* Public hbshell API */ FUNCTION hbshell_DirBase() - RETURN hb_UTF8ToStr( s_cDirBase_hbshell ) + + LOCAL hbsh := hbsh() + + RETURN hb_UTF8ToStr( hbsh[ _HBSH_cDirBase ] ) FUNCTION hbshell_ProgName() - RETURN hb_UTF8ToStr( s_cProgName_hbshell ) + + LOCAL hbsh := hbsh() + + RETURN hb_UTF8ToStr( hbsh[ _HBSH_cProgName ] ) FUNCTION hbshell_gtSelect( cGT ) @@ -14543,7 +14634,13 @@ STATIC FUNCTION __hbshell_gtDefault() RETURN _HBMK_GT_DEF_ #endif -#endif /* _HBMK_EMBEDDED_ */ +#else + +/* public entry for embedded flavor */ +FUNCTION hbmk( ... ) + RETURN __hbmk( ... ) + +#endif /* ! _HBMK_EMBEDDED_ */ /* ------------------------------------------------------------- */ @@ -15602,6 +15699,7 @@ STATIC PROCEDURE ShowHelp( hbmk, lFull, lLong ) { "hbshell_gtSelect( [] ) -> NIL" , hb_StrFormat( I_( "Switch GT. Default [*]: '%1$s'" ), Lower( __hbshell_gtDefault() ) ) }, ; { "hbshell_include( ) -> " , I_( "Load Harbour header." ) }, ; { "hbshell_uninclude( ) -> " , I_( "Unload Harbour header." ) }, ; + { "hbshell_include_list() -> NIL" , I_( "Display list of loaded Harbour header." ) }, ; { "hbshell_ext_load( ) -> " , I_( "Load package. Similar to #request PP directive." ) }, ; { "hbshell_ext_unload( ) -> ", I_( "Unload package." ) }, ; { "hbshell_ext_get_list() -> " , I_( "List of loaded packages." ) }, ; diff --git a/harbour/website/news1.html b/harbour/website/news1.html index 1ab90f0c19..721986072e 100644 --- a/harbour/website/news1.html +++ b/harbour/website/news1.html @@ -163,7 +163,7 @@ ul {   Release of 1.0.0 RC 2
    -
  • July 01, 2008
    +
  • July 1, 2008

    General  
  • SVN repository cleanup in /tags and /branches
  • @@ -232,7 +232,7 @@ ul {   Release of 1.0.0 RC 1
      -
    • June 04, 2008
      +
    • June 4, 2008

      General
    • @@ -689,7 +689,7 @@ ul {   Release of Alpha build 46
        -
      • June 05, 2006
      • +
      • June 5, 2006

      General