2010-06-30 22:49 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)

* utils/hbrun/hbrun.prg
    + Added load/save of command history.
      It can be disabled by -p cmdline option or by adding
      a single line "no" (without quotes) to the history filename.
      Otherwise last 500 commands will be remembered.
      History filename is %APPDATA|HOME%/.harbour/.hbrun_history
      if such envvar is present, otherwise hbrun dir. On MS-DOS
      it's hbrun dir and hbrunhst.ini.

  * utils/hbmk2/hbmk2.prg
    * Minor variable/constant name cleanup.

  * contrib/hbqt/hbmk2_plugin_qt.prg
    ! Typo in #if statements.
This commit is contained in:
Viktor Szakats
2010-06-30 21:02:04 +00:00
parent ad8660b652
commit b2d1490a06
4 changed files with 161 additions and 62 deletions

View File

@@ -16,6 +16,22 @@
The license applies to all entries newer than 2009-04-28.
*/
2010-06-30 22:49 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* utils/hbrun/hbrun.prg
+ Added load/save of command history.
It can be disabled by -p cmdline option or by adding
a single line "no" (without quotes) to the history filename.
Otherwise last 500 commands will be remembered.
History filename is %APPDATA|HOME%/.harbour/.hbrun_history
if such envvar is present, otherwise hbrun dir. On MS-DOS
it's hbrun dir and hbrunhst.ini.
* utils/hbmk2/hbmk2.prg
* Minor variable/constant name cleanup.
* contrib/hbqt/hbmk2_plugin_qt.prg
! Typo in #if statements.
2010-06-30 10:23 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com)
* contrib/hbide/idebrowse.prg
! Fixed: closing a table in ideDBU was causing RTE.

View File

@@ -77,7 +77,7 @@ FUNCTION hbmk2_plugin_qt( hbmk2 )
NEXT
FOR EACH cSrc IN hbmk2[ "vars" ][ "aQRC_Src" ]
#if __OWN_QRC_GENERATOR__
#ifdef __OWN_QRC_GENERATOR__
cDst := hbmk2_FNameDirExtSet( "rcc_" + hbmk2_FNameNameGet( cSrc ), hbmk2[ "cWorkDir" ], ".c" )
AAdd( hbmk2[ "vars" ][ "aQRC_Dst" ], cDst )
hbmk2_AddInput_C( hbmk2, cDst )
@@ -228,7 +228,7 @@ FUNCTION hbmk2_plugin_qt( hbmk2 )
IF lBuildIt
#if __OWN_QRC_GENERATOR__
#ifdef __OWN_QRC_GENERATOR__
FClose( hb_FTempCreateEx( @cTmp ) )
cCommand := cRCC_BIN +;

View File

@@ -192,12 +192,12 @@ REQUEST hbmk_KEYW
#define _ESC_DBLQUOTE 1
#define _ESC_SGLQUOTE_WATCOM 2
#define _ESC_NIX 3
#define _ESC_BACKSLASH 4
#define _ESC_BCKSLASH 4
#define _FNF_BACKSLASH 0
#define _FNF_FWSLASH 1
#define _FNF_FWSLASHCYGWIN 2
#define _FNF_FWSLASHMSYS 3
#define _FNF_BCKSLASH 0
#define _FNF_FWDSLASH 1
#define _FNF_FWDSLASHCYGWIN 2
#define _FNF_FWDSLASHMSYS 3
#define _MACRO_NO_PREFIX ""
#define _MACRO_NORM_PREFIX "$"
@@ -2833,9 +2833,9 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
( hbmk[ _HBMK_cPLAT ] == "win" .AND. hbmk[ _HBMK_cCOMP ] == "cygwin" )
IF hbmk[ _HBMK_cCOMP ] == "cygwin"
hbmk[ _HBMK_nCmd_FNF ] := _FNF_FWSLASHCYGWIN
hbmk[ _HBMK_nCmd_FNF ] := _FNF_FWDSLASHCYGWIN
ELSE
hbmk[ _HBMK_nCmd_FNF ] := _FNF_FWSLASH
hbmk[ _HBMK_nCmd_FNF ] := _FNF_FWDSLASH
ENDIF
IF hbmk[ _HBMK_lDEBUG ]
@@ -2981,7 +2981,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
ENDIF
CASE hbmk[ _HBMK_cPLAT ] == "os2" .AND. hbmk[ _HBMK_cCOMP ] $ "gcc|gccomf"
hbmk[ _HBMK_nCmd_FNF ] := _FNF_BACKSLASH
hbmk[ _HBMK_nCmd_FNF ] := _FNF_BCKSLASH
IF hbmk[ _HBMK_lDEBUG ]
AAdd( hbmk[ _HBMK_aOPTC ], "-g" )
ENDIF
@@ -3346,7 +3346,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
ENDIF
CASE hbmk[ _HBMK_cPLAT ] == "win" .AND. hbmk[ _HBMK_cCOMP ] == "bcc"
hbmk[ _HBMK_nCmd_FNF ] := _FNF_BACKSLASH
hbmk[ _HBMK_nCmd_FNF ] := _FNF_BCKSLASH
#if defined( __PLATFORM__UNIX )
hbmk[ _HBMK_nCmd_Esc ] := _ESC_NIX
#else
@@ -3442,7 +3442,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
CASE ( hbmk[ _HBMK_cPLAT ] == "win" .AND. hbmk[ _HBMK_cCOMP ] $ "msvc|msvc64|msvcia64|icc|iccia64" ) .OR. ;
( hbmk[ _HBMK_cPLAT ] == "wce" .AND. hbmk[ _HBMK_cCOMP ] == "msvcarm" ) /* NOTE: Cross-platform: wce/ARM on win/x86 */
hbmk[ _HBMK_nCmd_FNF ] := _FNF_BACKSLASH
hbmk[ _HBMK_nCmd_FNF ] := _FNF_BCKSLASH
#if defined( __PLATFORM__UNIX )
hbmk[ _HBMK_nCmd_Esc ] := _ESC_NIX
#else
@@ -3659,7 +3659,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
( hbmk[ _HBMK_cPLAT ] == "wce" .AND. hbmk[ _HBMK_cCOMP ] == "poccarm" ) .OR. ; /* NOTE: Cross-platform: wce/ARM on win/x86 */
( hbmk[ _HBMK_cPLAT ] == "win" .AND. hbmk[ _HBMK_cCOMP ] == "xcc" )
hbmk[ _HBMK_nCmd_FNF ] := _FNF_BACKSLASH
hbmk[ _HBMK_nCmd_FNF ] := _FNF_BCKSLASH
#if defined( __PLATFORM__UNIX )
hbmk[ _HBMK_nCmd_Esc ] := _ESC_NIX
#else
@@ -7213,19 +7213,19 @@ STATIC FUNCTION FN_Escape( cFileName, nEscapeMode, nFNNotation )
#if defined( __PLATFORM__WINDOWS ) .OR. ;
defined( __PLATFORM__DOS ) .OR. ;
defined( __PLATFORM__OS2 )
DEFAULT nFNNotation TO _FNF_BACKSLASH
DEFAULT nFNNotation TO _FNF_BCKSLASH
#else
DEFAULT nFNNotation TO _FNF_FWSLASH
DEFAULT nFNNotation TO _FNF_FWDSLASH
#endif
SWITCH nFNNotation
CASE _FNF_BACKSLASH
CASE _FNF_BCKSLASH
cFileName := StrTran( cFileName, "/", "\" )
EXIT
CASE _FNF_FWSLASH
CASE _FNF_FWDSLASH
cFileName := StrTran( cFileName, "\", "/" )
EXIT
CASE _FNF_FWSLASHCYGWIN
CASE _FNF_FWDSLASHCYGWIN
hb_FNameSplit( cFileName, @cDir, @cName, @cExt, @cDrive )
IF ! Empty( cDrive )
cDir := SubStr( cDir, Len( cDrive + hb_osDriveSeparator() ) + 1 )
@@ -7237,7 +7237,7 @@ STATIC FUNCTION FN_Escape( cFileName, nEscapeMode, nFNNotation )
ENDIF
cFileName := StrTran( cFileName, "\", "/" )
EXIT
CASE _FNF_FWSLASHMSYS
CASE _FNF_FWDSLASHMSYS
hb_FNameSplit( cFileName, @cDir, @cName, @cExt, @cDrive )
IF ! Empty( cDrive )
cDir := SubStr( cDir, Len( cDrive + hb_osDriveSeparator() ) + 1 )
@@ -7273,7 +7273,7 @@ STATIC FUNCTION FN_Escape( cFileName, nEscapeMode, nFNNotation )
CASE _ESC_NIX
cFileName := "'" + StrTran( cFileName, "'", "'\''" ) + "'"
EXIT
CASE _ESC_BACKSLASH
CASE _ESC_BCKSLASH
cFileName := StrTran( cFileName, "\", "\\" )
EXIT
ENDSWITCH
@@ -7416,10 +7416,10 @@ STATIC FUNCTION HBC_ProcessOne( hbmk, cFileName, nNestingLevel )
cFile := MemoRead( cFileName ) /* NOTE: Intentionally using MemoRead() which handles EOF char. */
IF ! hb_osNewLine() == _CHR_EOL
IF !( hb_osNewLine() == _CHR_EOL )
cFile := StrTran( cFile, hb_osNewLine(), _CHR_EOL )
ENDIF
IF ! hb_osNewLine() == Chr( 13 ) + Chr( 10 )
IF !( hb_osNewLine() == Chr( 13 ) + Chr( 10 ) )
cFile := StrTran( cFile, Chr( 13 ) + Chr( 10 ), _CHR_EOL )
ENDIF
@@ -7879,10 +7879,10 @@ STATIC PROCEDURE HBM_Load( hbmk, aParams, cFileName, nNestingLevel )
cFile := MemoRead( cFileName ) /* NOTE: Intentionally using MemoRead() which handles EOF char. */
IF ! hb_osNewLine() == _CHR_EOL
IF !( hb_osNewLine() == _CHR_EOL )
cFile := StrTran( cFile, hb_osNewLine(), _CHR_EOL )
ENDIF
IF ! hb_osNewLine() == Chr( 13 ) + Chr( 10 )
IF !( hb_osNewLine() == Chr( 13 ) + Chr( 10 ) )
cFile := StrTran( cFile, Chr( 13 ) + Chr( 10 ), _CHR_EOL )
ENDIF
@@ -8370,7 +8370,7 @@ STATIC PROCEDURE PlatformPRGFlags( hbmk, aOPTPRG )
#define RTLNK_MODE_SKIPNEXT 7
STATIC PROCEDURE rtlnk_libtrans( aLibList )
STATIC hTrans := { ;
STATIC s_hTrans := { ;
"CT" => "hbct" , ;
"CTP" => "hbct" , ;
"CLASSY" => NIL , ;
@@ -8402,8 +8402,8 @@ STATIC PROCEDURE rtlnk_libtrans( aLibList )
IF Lower( Right( cLib, 4 ) ) == ".lib"
cLib := Left( cLib, Len( cLib ) - 4 )
ENDIF
IF Upper( cLib ) $ hTrans
cLib := hTrans[ Upper( cLib ) ]
IF Upper( cLib ) $ s_hTrans
cLib := s_hTrans[ Upper( cLib ) ]
IF cLib == NIL
hb_ADel( aLibList, cLib:__enumIndex(), .T. )
ENDIF
@@ -8413,7 +8413,7 @@ STATIC PROCEDURE rtlnk_libtrans( aLibList )
RETURN
STATIC PROCEDURE rtlnk_filetrans( aFileList )
STATIC hTrans := { ;
STATIC s_hTrans := { ;
"CTUS" => NIL , ;
"CTUSP" => NIL , ;
"CTINT" => NIL , ;
@@ -8441,8 +8441,8 @@ STATIC PROCEDURE rtlnk_filetrans( aFileList )
IF Lower( Right( cFile, 4 ) ) == ".obj"
cFile := Left( cFile, Len( cFile ) - 4 )
ENDIF
IF Upper( cFile ) $ hTrans
cFile := hTrans[ Upper( cFile ) ]
IF Upper( cFile ) $ s_hTrans
cFile := s_hTrans[ Upper( cFile ) ]
IF cFile == NIL
hb_ADel( aFileList, cFile:__enumIndex(), .T. )
ENDIF

View File

@@ -74,6 +74,8 @@ REQUEST HB_GT_STD
STATIC s_nRow := 2
STATIC s_nCol := 0
STATIC s_aIncDir := {}
STATIC s_aHistory := {}
STATIC s_lPreserveHistory := .T.
/* ********************************************************************** */
@@ -99,11 +101,16 @@ PROCEDURE _APPMAIN( cFile, ... )
CASE "--help"
CASE "/?"
CASE "/h"
HB_DotUsage()
hbrun_Usage()
EXIT
CASE "-v"
CASE "/v"
HB_DotPrompt( "? hb_version()" )
hbrun_Prompt( "? hb_version()" )
EXIT
CASE "-p"
CASE "/p"
s_lPreserveHistory := .F.
hbrun_Prompt()
EXIT
OTHERWISE
hb_FNameSplit( cFile, NIL, NIL, @cExt )
@@ -115,11 +122,11 @@ PROCEDURE _APPMAIN( cFile, ... )
CASE ".dbf"
EXIT
OTHERWISE
cExt := HB_DotFileSig( cFile )
cExt := hbrun_FileSig( cFile )
ENDSWITCH
SWITCH cExt
CASE ".dbf"
HB_DotPrompt( "USE " + cFile )
hbrun_Prompt( "USE " + cFile )
EXIT
CASE ".prg"
CASE ".hbs"
@@ -135,12 +142,18 @@ PROCEDURE _APPMAIN( cFile, ... )
ENDSWITCH
ENDSWITCH
ELSE
HB_DotPrompt()
hbrun_Prompt()
ENDIF
RETURN
STATIC FUNCTION HB_DotFileSig( cFile )
EXIT PROCEDURE hbrun_exit()
hbrun_HistorySave()
RETURN
STATIC FUNCTION hbrun_FileSig( cFile )
LOCAL hFile
LOCAL cBuff, cSig, cExt
@@ -158,23 +171,26 @@ STATIC FUNCTION HB_DotFileSig( cFile )
RETURN cExt
STATIC PROCEDURE HB_DotPrompt( cCommand )
STATIC PROCEDURE hbrun_Prompt( cCommand )
LOCAL GetList
LOCAL cLine
LOCAL nMaxRow, nMaxCol
LOCAL aHistory, nHistIndex
LOCAL nHistIndex
LOCAL bKeyUP, bKeyDown, bKeyIns
CLEAR SCREEN
SET SCOREBOARD OFF
GetList := {}
aHistory := { padr( "quit", HB_LINE_LEN ) }
nHistIndex := 2
hbrun_HistoryLoad()
AADD( s_aHistory, padr( "quit", HB_LINE_LEN ) )
nHistIndex := Len( s_aHistory ) + 1
IF ISCHARACTER( cCommand )
AADD( aHistory, PadR( cCommand, HB_LINE_LEN ) )
HB_DotInfo( cCommand )
HB_DotExec( cCommand )
AADD( s_aHistory, PadR( cCommand, HB_LINE_LEN ) )
hbrun_Info( cCommand )
hbrun_Exec( cCommand )
ELSE
cCommand := ""
ENDIF
@@ -185,7 +201,7 @@ STATIC PROCEDURE HB_DotPrompt( cCommand )
cLine := Space( HB_LINE_LEN )
ENDIF
HB_DotInfo( cCommand )
hbrun_Info( cCommand )
nMaxRow := MaxRow()
nMaxCol := MaxCol()
@@ -199,12 +215,12 @@ STATIC PROCEDURE HB_DotPrompt( cCommand )
{|| SetCursor( IIF( ReadInsert( !ReadInsert() ), ;
SC_NORMAL, SC_INSERT ) ) } )
bKeyUp := SetKey( K_UP, ;
{|| IIF( nHistIndex > 1, ;
cLine := aHistory[ --nHistIndex ], ) } )
{|| IIF( nHistIndex > 1, ;
cLine := s_aHistory[ --nHistIndex ], ) } )
bKeyDown := SetKey( K_DOWN, ;
{|| cLine := IIF( nHistIndex < LEN( aHistory ), ;
aHistory[ ++nHistIndex ], ;
( nHistIndex := LEN( aHistory ) + 1, Space( HB_LINE_LEN ) ) ) } )
{|| cLine := IIF( nHistIndex < LEN( s_aHistory ), ;
s_aHistory[ ++nHistIndex ], ;
( nHistIndex := LEN( s_aHistory ) + 1, Space( HB_LINE_LEN ) ) ) } )
READ
@@ -220,22 +236,22 @@ STATIC PROCEDURE HB_DotPrompt( cCommand )
LOOP
ENDIF
IF EMPTY( aHistory ) .OR. ! ATAIL( aHistory ) == cLine
IF LEN( aHistory ) < HB_HISTORY_LEN
AADD( aHistory, cLine )
IF EMPTY( s_aHistory ) .OR. ! ATAIL( s_aHistory ) == cLine
IF LEN( s_aHistory ) < HB_HISTORY_LEN
AADD( s_aHistory, cLine )
ELSE
ADEL( aHistory, 1 )
aHistory[ LEN( aHistory ) ] := cLine
ADEL( s_aHistory, 1 )
s_aHistory[ LEN( s_aHistory ) ] := cLine
ENDIF
ENDIF
nHistIndex := LEN( aHistory ) + 1
nHistIndex := LEN( s_aHistory ) + 1
cCommand := AllTrim( cLine, " " )
cLine := NIL
@ nMaxRow, 0 CLEAR
HB_DotInfo( cCommand )
hbrun_Info( cCommand )
HB_DotExec( cCommand )
hbrun_Exec( cCommand )
IF s_nRow >= MaxRow()
Scroll( 2, 0, MaxRow(), MaxCol(), 1 )
@@ -248,7 +264,7 @@ STATIC PROCEDURE HB_DotPrompt( cCommand )
/* ********************************************************************** */
STATIC PROCEDURE HB_DotUsage()
STATIC PROCEDURE hbrun_Usage()
OutStd( 'Harbour "DOt Prompt" Console / runner ' + HBRawVersion() + HB_OSNewLine() +;
"Copyright (c) 1999-2010, Przemyslaw Czerpak" + HB_OSNewLine() + ;
@@ -260,7 +276,7 @@ STATIC PROCEDURE HB_DotUsage()
/* ********************************************************************** */
STATIC PROCEDURE HB_DotInfo( cCommand )
STATIC PROCEDURE hbrun_Info( cCommand )
LOCAL r := Row(), c := Col()
@@ -291,7 +307,7 @@ STATIC PROCEDURE HB_DotInfo( cCommand )
/* ********************************************************************** */
STATIC PROCEDURE HB_DotErr( oErr, cCommand )
STATIC PROCEDURE hbrun_Err( oErr, cCommand )
LOCAL xArg, cMessage
@@ -315,7 +331,7 @@ STATIC PROCEDURE HB_DotErr( oErr, cCommand )
/* ********************************************************************** */
STATIC PROCEDURE HB_DotExec( cCommand )
STATIC PROCEDURE hbrun_Exec( cCommand )
LOCAL pHRB, cHRB, cFunc, bBlock, cEol
cEol := hb_osNewLine()
@@ -325,7 +341,7 @@ STATIC PROCEDURE HB_DotExec( cCommand )
" RETURN __MVSETBASE()" + cEol + ;
"}" + cEol
BEGIN SEQUENCE WITH {|oErr| HB_DotErr( oErr, cCommand ) }
BEGIN SEQUENCE WITH {|oErr| hbrun_Err( oErr, cCommand ) }
cHRB := HB_COMPILEFROMBUF( cFunc, HB_ARGV( 0 ), "-n", "-q2", s_aIncDir )
IF cHRB == NIL
@@ -354,3 +370,70 @@ STATIC FUNCTION HBRawVersion()
RETURN StrTran( Version(), "Harbour " )
/* ********************************************************************** */
#define _HISTORY_DISABLE_LINE "no"
#define _HISTORY_SAVE_LINE_MAX 500
STATIC PROCEDURE hbrun_HistoryLoad()
LOCAL cHistory
LOCAL cLine
IF s_lPreserveHistory
cHistory := StrTran( MemoRead( hbrun_HistoryFileName() ), Chr( 13 ) )
IF Left( cHistory, Len( _HISTORY_DISABLE_LINE + Chr( 10 ) ) ) == _HISTORY_DISABLE_LINE + Chr( 10 )
s_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 ) )
ENDIF
NEXT
ENDIF
ENDIF
RETURN
STATIC PROCEDURE hbrun_HistorySave()
LOCAL cHistory
LOCAL tmp
IF s_lPreserveHistory
cHistory := ""
FOR tmp := Max( 1, Len( s_aHistory ) - _HISTORY_SAVE_LINE_MAX ) TO Len( s_aHistory )
IF !( Lower( AllTrim( s_aHistory[ tmp ] ) ) == "quit" )
cHistory += AllTrim( s_aHistory[ tmp ] ) + hb_osNewLine()
ENDIF
NEXT
hb_MemoWrit( hbrun_HistoryFileName(), cHistory )
ENDIF
RETURN
STATIC FUNCTION hbrun_HistoryFileName()
LOCAL cEnvVar
LOCAL cDir
LOCAL cFileName
#if defined( __PLATFORM__WINDOWS )
cEnvVar := "APPDATA"
#else
cEnvVar := "HOME"
#endif
#if defined( __PLATFORM__DOS )
cFileName := "hbrunhst.ini"
#else
cFileName := ".hbrun_history"
#endif
IF ! Empty( GetEnv( cEnvVar ) )
cDir := GetEnv( cEnvVar ) + hb_osPathSeparator() + ".harbour"
ELSE
cDir := hb_dirBase()
ENDIF
IF ! hb_dirExists( cDir )
MakeDir( cDir )
ENDIF
RETURN cDir + hb_osPathSeparator() + cFileName