2007-08-22 19:10 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbpp.h
* harbour/include/hbcomp.h
* harbour/include/hbcompdf.h
* harbour/source/pp/ppcore.c
* harbour/source/rtl/gttrm/gttrm.c
* harbour/source/main/harbour.c
* harbour/source/compiler/hbmain.c
* harbour/source/compiler/cmdcheck.c
* harbour/source/compiler/hbcomp.c
* harbour/source/compiler/hbcmplib.c
* harbour/source/compiler/ppcomp.c
* added 'const' to some 'char *' declarations
+ added hb_pp_inBuffer()
+ extended hb_compMain() to accept source code passed as ASCIIZ
string
+ .prg function HB_COMPILEFROMBUF()
+ added support for -q2 compiler switch - it disables _ALL_ stdout/stderr
messages
* harbour/utils/Makefile
+ harbour/utils/hbdot
+ harbour/utils/hbdot/hbdot.prg
+ harbour/utils/hbdot/Makefile
+ added hbdot utility program.
It's a "DOt Prompt" Console for the Harbour Language
Syntax: hbdot [<hrbfile[.prg]> [<parameters,...>]]
It should look and work in similar way to pp/xBaseScript
by Ron Pinkas but unlike xBaseScript is does not have preprocessor
or simulated runtime environment but simply uses Harbour pp and
compiler libraries to preprocess and compile commands. It means
that it supports all language constructions also statements, f.e.:
"for i:=1 to 10; ? i; next"
Additionally it can also compile and execute .prg files given as
first parameter just like hbrun.
Please test it. If it will work as expected then we can remove
'pp' (contrib/dot) from standard packages
This commit is contained in:
@@ -8,6 +8,44 @@
|
||||
2002-12-01 13:30 UTC+0100 Foo Bar <foo.bar@foobar.org>
|
||||
*/
|
||||
|
||||
2007-08-22 19:10 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
||||
* harbour/include/hbpp.h
|
||||
* harbour/include/hbcomp.h
|
||||
* harbour/include/hbcompdf.h
|
||||
* harbour/source/pp/ppcore.c
|
||||
* harbour/source/rtl/gttrm/gttrm.c
|
||||
* harbour/source/main/harbour.c
|
||||
* harbour/source/compiler/hbmain.c
|
||||
* harbour/source/compiler/cmdcheck.c
|
||||
* harbour/source/compiler/hbcomp.c
|
||||
* harbour/source/compiler/hbcmplib.c
|
||||
* harbour/source/compiler/ppcomp.c
|
||||
* added 'const' to some 'char *' declarations
|
||||
+ added hb_pp_inBuffer()
|
||||
+ extended hb_compMain() to accept source code passed as ASCIIZ
|
||||
string
|
||||
+ .prg function HB_COMPILEFROMBUF()
|
||||
+ added support for -q2 compiler switch - it disables _ALL_ stdout/stderr
|
||||
messages
|
||||
|
||||
* harbour/utils/Makefile
|
||||
+ harbour/utils/hbdot
|
||||
+ harbour/utils/hbdot/hbdot.prg
|
||||
+ harbour/utils/hbdot/Makefile
|
||||
+ added hbdot utility program.
|
||||
It's a "DOt Prompt" Console for the Harbour Language
|
||||
Syntax: hbdot [<hrbfile[.prg]> [<parameters,...>]]
|
||||
It should look and work in similar way to pp/xBaseScript
|
||||
by Ron Pinkas but unlike xBaseScript is does not have preprocessor
|
||||
or simulated runtime environment but simply uses Harbour pp and
|
||||
compiler libraries to preprocess and compile commands. It means
|
||||
that it supports all language constructions also statements, f.e.:
|
||||
"for i:=1 to 10; ? i; next"
|
||||
Additionally it can also compile and execute .prg files given as
|
||||
first parameter just like hbrun.
|
||||
Please test it. If it will work as expected then we can remove
|
||||
'pp' (contrib/dot) from standard packages
|
||||
|
||||
2007-08-21 16:00 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
||||
* harbour/source/vm/memvars.c
|
||||
+ added __MVSETBASE() function
|
||||
|
||||
@@ -169,7 +169,7 @@ extern void hb_compGenBreak( HB_COMP_DECL ); /* generate code for BREAK stateme
|
||||
|
||||
extern void hb_compExternGen( HB_COMP_DECL ); /* generates the symbols for the EXTERN names */
|
||||
extern void hb_compExternAdd( HB_COMP_DECL, char * szExternName, HB_SYMBOLSCOPE cScope ); /* defines a new extern name */
|
||||
extern void hb_compAutoOpenAdd( HB_COMP_DECL, char * szName );
|
||||
extern void hb_compAutoOpenAdd( HB_COMP_DECL, const char * szName );
|
||||
|
||||
extern void hb_compSwitchKill( HB_COMP_DECL );
|
||||
extern void hb_compLoopKill( HB_COMP_DECL );
|
||||
@@ -266,7 +266,7 @@ extern BOOL hb_compCheckUnclosedStru( HB_COMP_DECL );
|
||||
#define HB_GEN_FUNC3( func, p1,p2,p3 ) hb_compGen##func( p1, p2, p3, HB_COMP_PARAM )
|
||||
#define HB_GEN_FUNC4( func, p1,p2,p3,p4 ) hb_compGen##func( p1, p2, p3, p4, HB_COMP_PARAM )
|
||||
|
||||
extern int hb_compMain( int argc, char * argv[], BYTE ** pBufPtr, ULONG * pulSize );
|
||||
extern int hb_compMain( int argc, char * argv[], BYTE ** pBufPtr, ULONG * pulSize, const char * szSource );
|
||||
extern void hb_compOutStd( HB_COMP_DECL, const char * szMessage );
|
||||
extern void hb_compOutErr( HB_COMP_DECL, const char * szMessage );
|
||||
|
||||
@@ -352,9 +352,6 @@ extern const char * hb_comp_szWarnings[];
|
||||
/* table with PCODEs' length */
|
||||
extern const BYTE hb_comp_pcode_len[];
|
||||
|
||||
/* file handle for error messages */
|
||||
extern FILE * hb_comp_errFile;
|
||||
|
||||
/* identifier types for hb_compIdentifierNew() */
|
||||
#define HB_IDENT_STATIC 0
|
||||
#define HB_IDENT_FREE 1
|
||||
|
||||
@@ -608,6 +608,10 @@ typedef struct _HB_COMP
|
||||
PHB_FNAME pOutPath;
|
||||
PHB_FNAME pPpoPath;
|
||||
|
||||
void ( * outStdFunc ) ( void *, const char* );
|
||||
void ( * outErrFunc ) ( void *, const char* );
|
||||
void * cargo;
|
||||
|
||||
ULONG ulOutBufSize; /* memory output buffer size */
|
||||
BYTE * pOutBuf; /* memory output buffer address */
|
||||
|
||||
@@ -642,6 +646,7 @@ typedef struct _HB_COMP
|
||||
int ilastLineErr; /* line numer with last syntax error */
|
||||
|
||||
BOOL fQuiet; /* be quiet during compilation (-q) */
|
||||
BOOL fFullQuiet; /* be quiet during compilation disable all messages */
|
||||
BOOL fExit; /* force breaking compilation process */
|
||||
BOOL fPPO; /* flag indicating, is ppo output needed */
|
||||
BOOL fPPT; /* flag indicating, is ppt output needed */
|
||||
|
||||
@@ -83,7 +83,7 @@ HB_EXTERN_BEGIN
|
||||
#define HB_PP_INLINE_QUOTE2 6
|
||||
|
||||
/* function to open included files */
|
||||
#define HB_PP_OPEN_FUNC_( func ) FILE * func( void *, char *, BOOL, char * )
|
||||
#define HB_PP_OPEN_FUNC_( func ) FILE * func( void *, const char *, BOOL, char * )
|
||||
typedef HB_PP_OPEN_FUNC_( HB_PP_OPEN_FUNC );
|
||||
typedef HB_PP_OPEN_FUNC * PHB_PP_OPEN_FUNC;
|
||||
|
||||
@@ -107,7 +107,7 @@ typedef HB_PP_DISP_FUNC * PHB_PP_DISP_FUNC;
|
||||
typedef HB_PP_DUMP_FUNC_( HB_PP_DUMP_FUNC );
|
||||
typedef HB_PP_DUMP_FUNC * PHB_PP_DUMP_FUNC;
|
||||
|
||||
/* function for catching #pragma dump data */
|
||||
/* function for catching HB_INLINE(...){...} data */
|
||||
#define HB_PP_INLINE_FUNC_( func ) void func( void *, char *, char *, ULONG, int )
|
||||
typedef HB_PP_INLINE_FUNC_( HB_PP_INLINE_FUNC );
|
||||
typedef HB_PP_INLINE_FUNC * PHB_PP_INLINE_FUNC;
|
||||
@@ -542,7 +542,7 @@ typedef struct _HB_PP_FILE
|
||||
BOOL fGenLineInfo; /* #line information should be generated */
|
||||
BOOL fEof; /* the end of file reached */
|
||||
|
||||
char * pLineBuf; /* buffer for parsing external lines */
|
||||
const char * pLineBuf; /* buffer for parsing external lines */
|
||||
ULONG ulLineBufLen; /* size of external line buffer */
|
||||
|
||||
struct _HB_PP_FILE * pPrev; /* previous file, the one which included this file */
|
||||
@@ -646,14 +646,15 @@ extern void hb_pp_init( PHB_PP_STATE pState, BOOL fQuiet,
|
||||
PHB_PP_DUMP_FUNC pDumpFunc, PHB_PP_INLINE_FUNC pInLineFunc,
|
||||
PHB_PP_SWITCH_FUNC pSwitchFunc );
|
||||
extern void hb_pp_initDynDefines( PHB_PP_STATE pState );
|
||||
extern void hb_pp_readRules( PHB_PP_STATE pState, char * szRulesFile );
|
||||
extern void hb_pp_readRules( PHB_PP_STATE pState, const char * szRulesFile );
|
||||
extern void hb_pp_setStdRules( PHB_PP_STATE pState );
|
||||
extern void hb_pp_setStdBase( PHB_PP_STATE pState );
|
||||
extern void hb_pp_setStream( PHB_PP_STATE pState, int iMode );
|
||||
extern void hb_pp_addSearchPath( PHB_PP_STATE pState, const char * szPath, BOOL fReplace );
|
||||
extern BOOL hb_pp_inFile( PHB_PP_STATE pState, char * szFileName, BOOL fSearchPath, FILE * file_in, BOOL fError );
|
||||
extern BOOL hb_pp_outFile( PHB_PP_STATE pState, char * szOutFileName, FILE * file_out );
|
||||
extern BOOL hb_pp_traceFile( PHB_PP_STATE pState, char * szTraceFileName, FILE * file_trace );
|
||||
extern BOOL hb_pp_inBuffer( PHB_PP_STATE pState, const char * pBuffer, ULONG ulLen );
|
||||
extern BOOL hb_pp_inFile( PHB_PP_STATE pState, const char * szFileName, BOOL fSearchPath, FILE * file_in, BOOL fError );
|
||||
extern BOOL hb_pp_outFile( PHB_PP_STATE pState, const char * szOutFileName, FILE * file_out );
|
||||
extern BOOL hb_pp_traceFile( PHB_PP_STATE pState, const char * szTraceFileName, FILE * file_trace );
|
||||
extern char * hb_pp_fileName( PHB_PP_STATE pState );
|
||||
extern int hb_pp_line( PHB_PP_STATE pState );
|
||||
extern BOOL hb_pp_eof( PHB_PP_STATE pState );
|
||||
@@ -661,16 +662,16 @@ extern int hb_pp_lineTot( PHB_PP_STATE pState );
|
||||
extern char * hb_pp_outFileName( PHB_PP_STATE pState );
|
||||
extern char * hb_pp_traceFileName( PHB_PP_STATE pState );
|
||||
extern char * hb_pp_nextLine( PHB_PP_STATE pState, ULONG * pulLen );
|
||||
extern char * hb_pp_parseLine( PHB_PP_STATE pState, char * pLine, ULONG * pulLen );
|
||||
extern void hb_pp_addDefine( PHB_PP_STATE pState, char * szDefName, char * szDefValue );
|
||||
extern void hb_pp_delDefine( PHB_PP_STATE pState, char * szDefName );
|
||||
extern char * hb_pp_parseLine( PHB_PP_STATE pState, const char * pLine, ULONG * pulLen );
|
||||
extern void hb_pp_addDefine( PHB_PP_STATE pState, const char * szDefName, const char * szDefValue );
|
||||
extern void hb_pp_delDefine( PHB_PP_STATE pState, const char * szDefName );
|
||||
extern BOOL hb_pp_lasterror( PHB_PP_STATE pState );
|
||||
extern BOOL hb_pp_eof( PHB_PP_STATE pState );
|
||||
|
||||
extern void hb_pp_tokenUpper( PHB_PP_TOKEN pToken );
|
||||
extern void hb_pp_tokenToString( PHB_PP_STATE pState, PHB_PP_TOKEN pToken );
|
||||
extern char * hb_pp_tokenBlockString( PHB_PP_STATE pState, PHB_PP_TOKEN pToken, int * piType, int * piLen );
|
||||
extern PHB_PP_STATE hb_pp_lexNew( char * pString, ULONG ulLen );
|
||||
extern PHB_PP_STATE hb_pp_lexNew( const char * pString, ULONG ulLen );
|
||||
extern PHB_PP_TOKEN hb_pp_lexGet( PHB_PP_STATE pState );
|
||||
extern PHB_PP_TOKEN hb_pp_tokenGet( PHB_PP_STATE pState );
|
||||
extern BOOL hb_pp_tokenNextExp( PHB_PP_TOKEN * pTokenPtr );
|
||||
|
||||
@@ -449,10 +449,15 @@ static void hb_compChkEnvironVar( HB_COMP_DECL, char *szSwitch )
|
||||
|
||||
case 'q':
|
||||
case 'Q':
|
||||
if( *( s + 1 ) == '0' )
|
||||
HB_COMP_PARAM->fLogo = FALSE;
|
||||
|
||||
HB_COMP_PARAM->fQuiet = TRUE;
|
||||
switch( *( s + 1 ) )
|
||||
{
|
||||
case '2':
|
||||
HB_COMP_PARAM->fFullQuiet = TRUE;
|
||||
case '0':
|
||||
HB_COMP_PARAM->fLogo = FALSE;
|
||||
default:
|
||||
HB_COMP_PARAM->fQuiet = TRUE;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'r':
|
||||
|
||||
@@ -117,7 +117,7 @@ HB_FUNC( HB_COMPILE )
|
||||
|
||||
hb_compGenArgList( 1, hb_pcount(), &argc, &argv );
|
||||
|
||||
hb_retni( hb_compMain( argc, argv, NULL, NULL ) );
|
||||
hb_retni( hb_compMain( argc, argv, NULL, NULL, NULL ) );
|
||||
hb_xfree( argv );
|
||||
}
|
||||
|
||||
@@ -129,8 +129,26 @@ HB_FUNC( HB_COMPILEBUF )
|
||||
ULONG ulLen;
|
||||
|
||||
hb_compGenArgList( 1, hb_pcount(), &argc, &argv );
|
||||
iResult = hb_compMain( argc, argv, &pBuffer, &ulLen );
|
||||
iResult = hb_compMain( argc, argv, &pBuffer, &ulLen, NULL );
|
||||
hb_xfree( argv );
|
||||
if( iResult == EXIT_SUCCESS && pBuffer )
|
||||
hb_retclen_buffer( ( char * ) pBuffer, ulLen );
|
||||
}
|
||||
|
||||
HB_FUNC( HB_COMPILEFROMBUF )
|
||||
{
|
||||
int iResult, argc;
|
||||
char ** argv, * szSource;
|
||||
BYTE * pBuffer;
|
||||
ULONG ulLen;
|
||||
|
||||
szSource = hb_parc( 1 );
|
||||
if( szSource )
|
||||
{
|
||||
hb_compGenArgList( 2, hb_pcount(), &argc, &argv );
|
||||
iResult = hb_compMain( argc, argv, &pBuffer, &ulLen, szSource );
|
||||
hb_xfree( argv );
|
||||
if( iResult == EXIT_SUCCESS && pBuffer )
|
||||
hb_retclen_buffer( ( char * ) pBuffer, ulLen );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -292,16 +292,30 @@ void hb_comp_free( HB_COMP_PTR pComp )
|
||||
|
||||
void hb_compOutStd( HB_COMP_DECL, const char * szMessage )
|
||||
{
|
||||
HB_SYMBOL_UNUSED( HB_COMP_PARAM );
|
||||
|
||||
fprintf( stderr, "%s", szMessage );
|
||||
fflush( stdout );
|
||||
if( ! HB_COMP_PARAM->fFullQuiet )
|
||||
{
|
||||
if( HB_COMP_PARAM->outStdFunc )
|
||||
HB_COMP_PARAM->outStdFunc( HB_COMP_PARAM->cargo, szMessage );
|
||||
else
|
||||
{
|
||||
fprintf( stderr, "%s", szMessage ); fflush( stdout );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void hb_compOutErr( HB_COMP_DECL, const char * szMessage )
|
||||
{
|
||||
HB_SYMBOL_UNUSED( HB_COMP_PARAM );
|
||||
|
||||
fprintf( hb_comp_errFile, "%s", szMessage );
|
||||
fflush( hb_comp_errFile );
|
||||
if( ! HB_COMP_PARAM->fFullQuiet )
|
||||
{
|
||||
if( HB_COMP_PARAM->outErrFunc )
|
||||
HB_COMP_PARAM->outErrFunc( HB_COMP_PARAM->cargo, szMessage );
|
||||
else
|
||||
{
|
||||
#if defined( HOST_OS_UNIX_COMPATIBLE )
|
||||
fprintf( stderr, "%s", szMessage ); fflush( stderr );
|
||||
#else
|
||||
fprintf( stdout, "%s", szMessage ); fflush( stdout );
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,30 +67,27 @@
|
||||
extern unsigned _stklen = UINT_MAX;
|
||||
#endif
|
||||
|
||||
static int hb_compCompile( HB_COMP_DECL, char * szPrg, BOOL bSingleFile );
|
||||
#define HB_COMP_SINGLEFILE 1
|
||||
#define HB_COMP_AUTOADDFILE 2
|
||||
#define HB_COMP_MEMBUFFER 3
|
||||
|
||||
static int hb_compCompile( HB_COMP_DECL, const char * szPrg, int iFileType );
|
||||
static int hb_compProcessRSPFile( HB_COMP_DECL, char * ); /* process response file */
|
||||
static int hb_compAutoOpen( HB_COMP_DECL, char * szPrg, BOOL * bSkipGen, BOOL bSingleFile );
|
||||
static int hb_compAutoOpen( HB_COMP_DECL, const char * szPrg, BOOL * bSkipGen, int iFileType );
|
||||
|
||||
static void hb_compDeclaredInit( HB_COMP_DECL );
|
||||
|
||||
/* global variables */
|
||||
FILE * hb_comp_errFile = NULL;
|
||||
|
||||
/* ************************************************************************* */
|
||||
|
||||
int hb_compMain( int argc, char * argv[], BYTE ** pBufPtr, ULONG * pulSize )
|
||||
int hb_compMain( int argc, char * argv[], BYTE ** pBufPtr, ULONG * pulSize,
|
||||
const char * szSource )
|
||||
{
|
||||
HB_COMP_DECL;
|
||||
int iStatus = EXIT_SUCCESS;
|
||||
BOOL bAnyFiles = FALSE;
|
||||
int i;
|
||||
|
||||
#if defined( HOST_OS_UNIX_COMPATIBLE )
|
||||
hb_comp_errFile = stderr;
|
||||
#else
|
||||
hb_comp_errFile = stdout;
|
||||
#endif
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_compMain()"));
|
||||
|
||||
HB_COMP_PARAM = hb_comp_new();
|
||||
@@ -142,21 +139,27 @@ int hb_compMain( int argc, char * argv[], BYTE ** pBufPtr, ULONG * pulSize )
|
||||
hb_compDeclaredInit( HB_COMP_PARAM );
|
||||
}
|
||||
|
||||
/* Process all files passed via the command line. */
|
||||
for( i = 1; i < argc && !HB_COMP_PARAM->fExit; i++ )
|
||||
if( szSource )
|
||||
{
|
||||
HB_TRACE(HB_TR_DEBUG, ("main LOOP(%i,%s)", i, argv[i]));
|
||||
if( ! HB_ISOPTSEP( argv[ i ][ 0 ] ) )
|
||||
bAnyFiles = TRUE;
|
||||
iStatus = hb_compCompile( HB_COMP_PARAM, szSource, HB_COMP_MEMBUFFER );
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Process all files passed via the command line. */
|
||||
for( i = 1; i < argc && !HB_COMP_PARAM->fExit; i++ )
|
||||
{
|
||||
bAnyFiles = TRUE;
|
||||
|
||||
if( argv[ i ][ 0 ] == '@' )
|
||||
iStatus = hb_compProcessRSPFile( HB_COMP_PARAM, argv[ i ] + 1 );
|
||||
else
|
||||
iStatus = hb_compCompile( HB_COMP_PARAM, argv[ i ], TRUE );
|
||||
|
||||
if( iStatus != EXIT_SUCCESS )
|
||||
break;
|
||||
HB_TRACE(HB_TR_DEBUG, ("main LOOP(%i,%s)", i, argv[i]));
|
||||
if( ! HB_ISOPTSEP( argv[ i ][ 0 ] ) )
|
||||
{
|
||||
bAnyFiles = TRUE;
|
||||
if( argv[ i ][ 0 ] == '@' )
|
||||
iStatus = hb_compProcessRSPFile( HB_COMP_PARAM, argv[ i ] + 1 );
|
||||
else
|
||||
iStatus = hb_compCompile( HB_COMP_PARAM, argv[ i ], HB_COMP_SINGLEFILE );
|
||||
if( iStatus != EXIT_SUCCESS )
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -265,7 +268,7 @@ static int hb_compProcessRSPFile( HB_COMP_DECL, char * szRspName )
|
||||
HB_COMP_PARAM->fAutoOpen = bAutoOpen;
|
||||
|
||||
hb_fsFNameMerge( szFile, pFileName );
|
||||
hb_compCompile( HB_COMP_PARAM, szFile, FALSE );
|
||||
hb_compCompile( HB_COMP_PARAM, szFile, HB_COMP_AUTOADDFILE );
|
||||
}
|
||||
|
||||
hb_xfree( pFileName );
|
||||
@@ -4229,11 +4232,18 @@ void hb_compCompileEnd( HB_COMP_DECL )
|
||||
}
|
||||
}
|
||||
|
||||
static int hb_compCompile( HB_COMP_DECL, char * szPrg, BOOL bSingleFile )
|
||||
static int hb_compCompile( HB_COMP_DECL, const char * szPrg, int iFileType )
|
||||
{
|
||||
const char * szBuffer = NULL;
|
||||
int iStatus = EXIT_SUCCESS;
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_compCompile(%s,%d)", szPrg, bSingleFile));
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_compCompile(%s,%d)", szPrg, iFileType));
|
||||
|
||||
if( iFileType == HB_COMP_MEMBUFFER )
|
||||
{
|
||||
szBuffer = szPrg;
|
||||
szPrg = "{SOURCE}";
|
||||
}
|
||||
|
||||
HB_COMP_PARAM->pMainFileName = hb_fsFNameSplit( szPrg );
|
||||
HB_COMP_PARAM->pFileName = HB_COMP_PARAM->pMainFileName;
|
||||
@@ -4257,14 +4267,22 @@ static int hb_compCompile( HB_COMP_DECL, char * szPrg, BOOL bSingleFile )
|
||||
HB_COMP_PARAM->pFileName->szExtension = ".prg";
|
||||
hb_fsFNameMerge( szFileName, HB_COMP_PARAM->pFileName );
|
||||
|
||||
if( !hb_pp_inFile( HB_COMP_PARAM->pLex->pPP, szFileName, FALSE, NULL, FALSE ) )
|
||||
if( iFileType == HB_COMP_MEMBUFFER )
|
||||
{
|
||||
if( !hb_pp_inBuffer( HB_COMP_PARAM->pLex->pPP, szBuffer, strlen( szBuffer ) ) )
|
||||
{
|
||||
hb_compOutErr( HB_COMP_PARAM, "Cannot create preprocessor buffer." );
|
||||
iStatus = EXIT_FAILURE;
|
||||
}
|
||||
}
|
||||
else if( !hb_pp_inFile( HB_COMP_PARAM->pLex->pPP, szFileName, FALSE, NULL, FALSE ) )
|
||||
{
|
||||
snprintf( buffer, sizeof( buffer ),
|
||||
"Cannot open input file: %s\n", szFileName );
|
||||
hb_compOutErr( HB_COMP_PARAM, buffer );
|
||||
iStatus = EXIT_FAILURE;
|
||||
}
|
||||
else if( bSingleFile )
|
||||
else if( iFileType == HB_COMP_SINGLEFILE )
|
||||
{
|
||||
if( HB_COMP_PARAM->fPPT )
|
||||
{
|
||||
@@ -4289,7 +4307,13 @@ static int hb_compCompile( HB_COMP_DECL, char * szPrg, BOOL bSingleFile )
|
||||
hb_compIdentifierNew( HB_COMP_PARAM, szFileName, HB_IDENT_COPY );
|
||||
HB_COMP_PARAM->currLine = 1;
|
||||
|
||||
if( bSingleFile )
|
||||
if( iFileType == HB_COMP_MEMBUFFER )
|
||||
{
|
||||
hb_compFunctionAdd( HB_COMP_PARAM, "", 0, FUN_PROCEDURE );
|
||||
hb_compparse( HB_COMP_PARAM );
|
||||
hb_compCheckUnclosedStru( HB_COMP_PARAM );
|
||||
}
|
||||
else if( iFileType == HB_COMP_SINGLEFILE )
|
||||
{
|
||||
if( ! HB_COMP_PARAM->fQuiet )
|
||||
{
|
||||
@@ -4336,7 +4360,7 @@ static int hb_compCompile( HB_COMP_DECL, char * szPrg, BOOL bSingleFile )
|
||||
PAUTOOPEN pAutoOpen = HB_COMP_PARAM->autoopen;
|
||||
|
||||
if( ! hb_compFunctionFind( HB_COMP_PARAM, pAutoOpen->szName ) )
|
||||
hb_compAutoOpen( HB_COMP_PARAM, pAutoOpen->szName, &bSkipGen, bSingleFile );
|
||||
hb_compAutoOpen( HB_COMP_PARAM, pAutoOpen->szName, &bSkipGen, iFileType );
|
||||
|
||||
HB_COMP_PARAM->autoopen = HB_COMP_PARAM->autoopen->pNext;
|
||||
hb_xfree( pAutoOpen );
|
||||
@@ -4504,7 +4528,7 @@ static int hb_compCompile( HB_COMP_DECL, char * szPrg, BOOL bSingleFile )
|
||||
return HB_COMP_PARAM->fExit ? EXIT_FAILURE : iStatus;
|
||||
}
|
||||
|
||||
static BOOL hb_compAutoOpenFind( HB_COMP_DECL, char * szName )
|
||||
static BOOL hb_compAutoOpenFind( HB_COMP_DECL, const char * szName )
|
||||
{
|
||||
PAUTOOPEN pLast = HB_COMP_PARAM->autoopen;
|
||||
|
||||
@@ -4528,7 +4552,7 @@ static BOOL hb_compAutoOpenFind( HB_COMP_DECL, char * szName )
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void hb_compAutoOpenAdd( HB_COMP_DECL, char * szName )
|
||||
void hb_compAutoOpenAdd( HB_COMP_DECL, const char * szName )
|
||||
{
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_compAutoOpenAdd(%p,%s)", HB_COMP_PARAM, szName));
|
||||
|
||||
@@ -4536,7 +4560,7 @@ void hb_compAutoOpenAdd( HB_COMP_DECL, char * szName )
|
||||
{
|
||||
PAUTOOPEN pAutoOpen = ( PAUTOOPEN ) hb_xgrab( sizeof( AUTOOPEN ) ), pLast;
|
||||
|
||||
pAutoOpen->szName = szName;
|
||||
pAutoOpen->szName = ( char * ) szName;
|
||||
pAutoOpen->pNext = NULL;
|
||||
|
||||
if( HB_COMP_PARAM->autoopen == NULL )
|
||||
@@ -4552,7 +4576,7 @@ void hb_compAutoOpenAdd( HB_COMP_DECL, char * szName )
|
||||
}
|
||||
}
|
||||
|
||||
static int hb_compAutoOpen( HB_COMP_DECL, char * szPrg, BOOL * pbSkipGen, BOOL bSingleFile )
|
||||
static int hb_compAutoOpen( HB_COMP_DECL, const char * szPrg, BOOL * pbSkipGen, int iFileType )
|
||||
{
|
||||
int iStatus = EXIT_SUCCESS;
|
||||
PHB_FNAME pMainFileName = HB_COMP_PARAM->pFileName;
|
||||
@@ -4616,7 +4640,7 @@ static int hb_compAutoOpen( HB_COMP_DECL, char * szPrg, BOOL * pbSkipGen, BOOL b
|
||||
/* Generate the starting procedure frame */
|
||||
if( HB_COMP_PARAM->fStartProc )
|
||||
hb_compFunctionAdd( HB_COMP_PARAM, hb_compIdentifierNew( HB_COMP_PARAM, hb_strupr( hb_strdup( HB_COMP_PARAM->pFileName->szName ) ), HB_IDENT_FREE ), HB_FS_PUBLIC, FUN_PROCEDURE );
|
||||
else if( ! bSingleFile )
|
||||
else if( iFileType != HB_COMP_SINGLEFILE )
|
||||
hb_compFunctionAdd( HB_COMP_PARAM, "", 0, FUN_PROCEDURE );
|
||||
|
||||
if( !HB_COMP_PARAM->fExit )
|
||||
|
||||
@@ -73,6 +73,13 @@ static void hb_pp_ErrorGen( void * cargo,
|
||||
HB_COMP_PARAM->currModule = currModule;
|
||||
}
|
||||
|
||||
static void hb_pp_Disp( void * cargo, const char * szMessage )
|
||||
{
|
||||
HB_COMP_DECL = ( HB_COMP_PTR ) cargo;
|
||||
|
||||
hb_compOutStd( HB_COMP_PARAM, szMessage );
|
||||
}
|
||||
|
||||
static void hb_pp_PragmaDump( void * cargo, char * pBuffer, ULONG ulSize,
|
||||
int iLine )
|
||||
{
|
||||
@@ -210,7 +217,7 @@ void hb_compInitPP( HB_COMP_DECL, int argc, char * argv[] )
|
||||
hb_pp_init( HB_COMP_PARAM->pLex->pPP, HB_COMP_PARAM->fQuiet,
|
||||
HB_COMP_PARAM->iMaxTransCycles,
|
||||
HB_COMP_PARAM, NULL, NULL,
|
||||
hb_pp_ErrorGen, NULL, hb_pp_PragmaDump,
|
||||
hb_pp_ErrorGen, hb_pp_Disp, hb_pp_PragmaDump,
|
||||
HB_COMP_ISSUPPORTED( HB_COMPFLAG_HB_INLINE ) ?
|
||||
hb_pp_hb_inLine : NULL, hb_pp_CompilerSwitch );
|
||||
|
||||
|
||||
@@ -57,7 +57,7 @@ int main( int argc, char * argv[] )
|
||||
{
|
||||
int iResult;
|
||||
|
||||
iResult = hb_compMain( argc, argv, NULL, NULL );
|
||||
iResult = hb_compMain( argc, argv, NULL, NULL, NULL );
|
||||
hb_xexit();
|
||||
|
||||
return iResult;
|
||||
@@ -353,15 +353,7 @@ void hb_conOutErr( const char * pStr, ULONG ulLen )
|
||||
if( ulLen == 0 )
|
||||
ulLen = strlen( pStr );
|
||||
|
||||
fprintf( hb_comp_errFile, "%.*s", ( int ) ulLen, pStr );
|
||||
}
|
||||
|
||||
void hb_conOutStd( const char * pStr, ULONG ulLen )
|
||||
{
|
||||
if( ulLen == 0 )
|
||||
ulLen = strlen( pStr );
|
||||
|
||||
printf( "%.*s", ( int ) ulLen, pStr );
|
||||
fprintf( stderr, "%.*s", ( int ) ulLen, pStr );
|
||||
}
|
||||
|
||||
char * hb_conNewLine( void )
|
||||
|
||||
@@ -1831,7 +1831,7 @@ static PHB_PP_FILE hb_pp_FileNew( PHB_PP_STATE pState, char * szFileName,
|
||||
return pFile;
|
||||
}
|
||||
|
||||
static PHB_PP_FILE hb_pp_FileBufNew( char * pLineBuf, ULONG ulLineBufLen )
|
||||
static PHB_PP_FILE hb_pp_FileBufNew( const char * pLineBuf, ULONG ulLineBufLen )
|
||||
{
|
||||
PHB_PP_FILE pFile;
|
||||
|
||||
@@ -5113,7 +5113,7 @@ void hb_pp_initDynDefines( PHB_PP_STATE pState )
|
||||
/*
|
||||
* read preprocess rules from file
|
||||
*/
|
||||
void hb_pp_readRules( PHB_PP_STATE pState, char * szRulesFile )
|
||||
void hb_pp_readRules( PHB_PP_STATE pState, const char * szRulesFile )
|
||||
{
|
||||
char szFileName[ _POSIX_PATH_MAX + 1 ];
|
||||
PHB_PP_FILE pFile = pState->pFile;
|
||||
@@ -5154,17 +5154,31 @@ void hb_pp_readRules( PHB_PP_STATE pState, char * szRulesFile )
|
||||
}
|
||||
|
||||
/*
|
||||
* close all open input files and set the given one as new
|
||||
* close all open input files and set the given buffer as input stream
|
||||
*/
|
||||
BOOL hb_pp_inFile( PHB_PP_STATE pState, char * szFileName, BOOL fSearchPath,
|
||||
FILE * file_in, BOOL fError )
|
||||
BOOL hb_pp_inBuffer( PHB_PP_STATE pState, const char * pBuffer, ULONG ulLen )
|
||||
{
|
||||
hb_pp_InFileFree( pState );
|
||||
|
||||
pState->fError = FALSE;
|
||||
|
||||
pState->pFile = hb_pp_FileNew( pState, szFileName, FALSE, file_in,
|
||||
fSearchPath, NULL );
|
||||
pState->pFile = hb_pp_FileBufNew( pBuffer, ulLen );
|
||||
pState->iFiles++;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*
|
||||
* close all open input files and set the given one as new
|
||||
*/
|
||||
BOOL hb_pp_inFile( PHB_PP_STATE pState, const char * szFileName,
|
||||
BOOL fSearchPath, FILE * file_in, BOOL fError )
|
||||
{
|
||||
hb_pp_InFileFree( pState );
|
||||
|
||||
pState->fError = FALSE;
|
||||
|
||||
pState->pFile = hb_pp_FileNew( pState, ( char * ) szFileName, FALSE,
|
||||
file_in, fSearchPath, NULL );
|
||||
if( pState->pFile )
|
||||
{
|
||||
pState->iFiles++;
|
||||
@@ -5178,7 +5192,8 @@ BOOL hb_pp_inFile( PHB_PP_STATE pState, char * szFileName, BOOL fSearchPath,
|
||||
/*
|
||||
* set output (.ppo) file
|
||||
*/
|
||||
BOOL hb_pp_outFile( PHB_PP_STATE pState, char * szOutFileName, FILE * file_out )
|
||||
BOOL hb_pp_outFile( PHB_PP_STATE pState, const char * szOutFileName,
|
||||
FILE * file_out )
|
||||
{
|
||||
pState->fError = FALSE;
|
||||
hb_pp_OutFileFree( pState );
|
||||
@@ -5207,7 +5222,7 @@ BOOL hb_pp_outFile( PHB_PP_STATE pState, char * szOutFileName, FILE * file_out )
|
||||
/*
|
||||
* set trace (.ppt) file
|
||||
*/
|
||||
BOOL hb_pp_traceFile( PHB_PP_STATE pState, char * szTraceFileName, FILE * file_trace )
|
||||
BOOL hb_pp_traceFile( PHB_PP_STATE pState, const char * szTraceFileName, FILE * file_trace )
|
||||
{
|
||||
pState->fError = FALSE;
|
||||
hb_pp_TraceFileFree( pState );
|
||||
@@ -5295,7 +5310,8 @@ BOOL hb_pp_eof( PHB_PP_STATE pState )
|
||||
/*
|
||||
* add new define value
|
||||
*/
|
||||
void hb_pp_addDefine( PHB_PP_STATE pState, char * szDefName, char * szDefValue )
|
||||
void hb_pp_addDefine( PHB_PP_STATE pState, const char * szDefName,
|
||||
const char * szDefValue )
|
||||
{
|
||||
PHB_PP_TOKEN pMatch, pResult, pToken;
|
||||
PHB_PP_FILE pFile;
|
||||
@@ -5342,7 +5358,7 @@ void hb_pp_addDefine( PHB_PP_STATE pState, char * szDefName, char * szDefValue )
|
||||
/*
|
||||
* delete define value
|
||||
*/
|
||||
void hb_pp_delDefine( PHB_PP_STATE pState, char * szDefName )
|
||||
void hb_pp_delDefine( PHB_PP_STATE pState, const char * szDefName )
|
||||
{
|
||||
PHB_PP_TOKEN pToken;
|
||||
|
||||
@@ -5430,7 +5446,7 @@ char * hb_pp_nextLine( PHB_PP_STATE pState, ULONG * pulLen )
|
||||
/*
|
||||
* preprocess given buffer
|
||||
*/
|
||||
char * hb_pp_parseLine( PHB_PP_STATE pState, char * pLine, ULONG * pulLen )
|
||||
char * hb_pp_parseLine( PHB_PP_STATE pState, const char * pLine, ULONG * pulLen )
|
||||
{
|
||||
PHB_PP_TOKEN pToken;
|
||||
PHB_PP_FILE pFile;
|
||||
@@ -5486,7 +5502,7 @@ char * hb_pp_parseLine( PHB_PP_STATE pState, char * pLine, ULONG * pulLen )
|
||||
/*
|
||||
* create new PP context for macro compiler
|
||||
*/
|
||||
PHB_PP_STATE hb_pp_lexNew( char * pMacroString, ULONG ulLen )
|
||||
PHB_PP_STATE hb_pp_lexNew( const char * pMacroString, ULONG ulLen )
|
||||
{
|
||||
PHB_PP_STATE pState = hb_pp_new();
|
||||
|
||||
|
||||
@@ -379,6 +379,10 @@ typedef struct
|
||||
|
||||
static HB_TERM_STATE s_termState;
|
||||
|
||||
/* save old hilit tracking & enable mouse tracking */
|
||||
static const char * s_szMouseOn = "\033[?1001s\033[?1002h";
|
||||
/* disable mouse tracking & restore old hilit tracking */
|
||||
static const char * s_szMouseOff = "\033[?1002l\033[?1001r";
|
||||
static const BYTE s_szBell[] = { HB_CHAR_BEL, 0 };
|
||||
static BYTE * s_szCrLf;
|
||||
static ULONG s_ulCrLf;
|
||||
@@ -1076,9 +1080,7 @@ static void mouse_init( void )
|
||||
if( s_termState.terminal_type == TERM_XTERM ||
|
||||
s_termState.terminal_type == TERM_LINUX )
|
||||
{
|
||||
/* save old hilit tracking & enable mouse tracking */
|
||||
static const char * szMouseOn = "\033[?1001s\033[?1002h";
|
||||
hb_gt_trm_termOut( ( BYTE * ) szMouseOn, strlen( szMouseOn ) );
|
||||
hb_gt_trm_termOut( ( BYTE * ) s_szMouseOn, strlen( s_szMouseOn ) );
|
||||
hb_gt_trm_termFlush();
|
||||
memset( ( void * ) &s_termState.mLastEvt, 0, sizeof( s_termState.mLastEvt ) );
|
||||
s_termState.mouse_type |= MOUSE_XTERM;
|
||||
@@ -1125,9 +1127,7 @@ static void mouse_exit( void )
|
||||
{
|
||||
if( s_termState.mouse_type & MOUSE_XTERM )
|
||||
{
|
||||
/* disable mouse tracking & restore old hilit tracking */
|
||||
static const char * szMouseOff = "\033[?1002l\033[?1001r";
|
||||
hb_gt_trm_termOut( ( BYTE * ) szMouseOff, strlen( szMouseOff ) );
|
||||
hb_gt_trm_termOut( ( BYTE * ) s_szMouseOff, strlen( s_szMouseOff ) );
|
||||
hb_gt_trm_termFlush();
|
||||
}
|
||||
#ifdef HAVE_GPM_H
|
||||
@@ -3044,6 +3044,10 @@ static BOOL hb_gt_trm_Resume( void )
|
||||
tcsetattr( s_termState.hFilenoStdin, TCSANOW, &s_termState.curr_TIO );
|
||||
}
|
||||
#endif
|
||||
|
||||
if( s_termState.mouse_type & MOUSE_XTERM )
|
||||
hb_gt_trm_termOut( ( BYTE * ) s_szMouseOn, strlen( s_szMouseOn ) );
|
||||
|
||||
s_termState.Init();
|
||||
|
||||
hb_gt_GetSize( &iHeight, &iWidth );
|
||||
|
||||
@@ -9,6 +9,7 @@ DIRS=\
|
||||
hbpptest \
|
||||
hbver \
|
||||
hbrun \
|
||||
hbdot \
|
||||
hbdoc \
|
||||
hbtest \
|
||||
hbmake \
|
||||
|
||||
35
harbour/utils/hbdot/Makefile
Normal file
35
harbour/utils/hbdot/Makefile
Normal file
@@ -0,0 +1,35 @@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
|
||||
ifeq ($(HB_MAIN),)
|
||||
HB_MAIN = std
|
||||
endif
|
||||
|
||||
ROOT = ../../
|
||||
|
||||
PRG_SOURCES=\
|
||||
hbdot.prg \
|
||||
|
||||
PRG_MAIN=hbdot.prg
|
||||
|
||||
LIBS=\
|
||||
debug \
|
||||
vm \
|
||||
rtl \
|
||||
lang \
|
||||
rdd \
|
||||
rtl \
|
||||
vm \
|
||||
macro \
|
||||
pp \
|
||||
compiler \
|
||||
common \
|
||||
|
||||
ifeq ($(findstring -DHB_PCRE_REGEX, $(C_USR)),)
|
||||
ifeq ($(findstring -DHB_POSIX_REGEX, $(C_USR)),)
|
||||
LIBS += hbpcre
|
||||
endif
|
||||
endif
|
||||
|
||||
include $(TOP)$(ROOT)config/bin.cf
|
||||
321
harbour/utils/hbdot/hbdot.prg
Normal file
321
harbour/utils/hbdot/hbdot.prg
Normal file
@@ -0,0 +1,321 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Harbour Project source code:
|
||||
* "DOt Prompt" Console for the Harbour Language
|
||||
*
|
||||
* Copyright 2007 Przemyslaw Czerpak <druzus / at / priv.onet.pl>
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this software; see the file COPYING. If not, write to
|
||||
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/).
|
||||
*
|
||||
* As a special exception, the Harbour Project gives permission for
|
||||
* additional uses of the text contained in its release of Harbour.
|
||||
*
|
||||
* The exception is that, if you link the Harbour libraries with other
|
||||
* files to produce an executable, this does not by itself cause the
|
||||
* resulting executable to be covered by the GNU General Public License.
|
||||
* Your use of that executable is in no way restricted on account of
|
||||
* linking the Harbour library code into it.
|
||||
*
|
||||
* This exception does not however invalidate any other reasons why
|
||||
* the executable file might be covered by the GNU General Public License.
|
||||
*
|
||||
* This exception applies only to the code released by the Harbour
|
||||
* Project under the name Harbour. If you copy code from other
|
||||
* Harbour Project or Free Software Foundation releases into a copy of
|
||||
* Harbour, as the General Public License permits, the exception does
|
||||
* not apply to the code that you add in this way. To avoid misleading
|
||||
* anyone as to the status of such modified files, you must delete
|
||||
* this exception notice from them.
|
||||
*
|
||||
* If you write modifications of your own for Harbour, it is your choice
|
||||
* whether to permit this exception to apply to your modifications.
|
||||
* If you do not wish that, delete this exception notice.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "inkey.ch"
|
||||
#include "setcurs.ch"
|
||||
#include "hbextern.ch"
|
||||
|
||||
#include "hbclass.ch"
|
||||
|
||||
#define HB_HISTORY_LEN 32
|
||||
#define HB_LINE_LEN 256
|
||||
#define HB_PROMPT "."
|
||||
|
||||
STATIC s_nRow := 2, s_nCol := 0
|
||||
STATIC s_aIncDir := {}
|
||||
|
||||
/* ********************************************************************** */
|
||||
|
||||
PROCEDURE _APPMAIN( cFile, ... )
|
||||
LOCAL GetList, cLine, cCommand, cPath
|
||||
LOCAL aHistory, nHistIndex
|
||||
LOCAL bKeyUP, bKeyDown, bKeyIns
|
||||
|
||||
#ifdef _DEFAULT_INC_DIR
|
||||
AADD( s_aIncDir, "-I" + _DEFAULT_INC_DIR )
|
||||
#endif
|
||||
cPath := getenv( "HB_INC_INSTALL" )
|
||||
IF !EMPTY( cPath )
|
||||
AADD( s_aIncDir, "-I" + cPath )
|
||||
ENDIF
|
||||
#ifdef __PLATFORM__UNIX
|
||||
AADD( s_aIncDir, "-I/usr/include/harbour" )
|
||||
AADD( s_aIncDir, "-I/usr/local/include/harbour" )
|
||||
#endif
|
||||
|
||||
CLEAR SCREEN
|
||||
|
||||
IF PCount() > 0
|
||||
SWITCH cFile
|
||||
CASE "-?"
|
||||
CASE "-h"
|
||||
CASE "--help"
|
||||
CASE "/?"
|
||||
CASE "/h"
|
||||
HB_DotUsage()
|
||||
EXIT
|
||||
OTHERWISE
|
||||
cFile := HB_COMPILEBUF( HB_ARGV( 0 ), "-n", "-w", "-es2", "-q0", ;
|
||||
s_aIncDir, cFile )
|
||||
IF cFile == NIL
|
||||
ERRORLEVEL( 1 )
|
||||
ELSE
|
||||
__hrbRun( cFile, ... )
|
||||
ENDIF
|
||||
END
|
||||
ELSE
|
||||
|
||||
SET SCOREBOARD OFF
|
||||
GetList := {}
|
||||
cCommand := ""
|
||||
aHistory := { padr( "quit", HB_LINE_LEN ) }
|
||||
nHistIndex := 2
|
||||
|
||||
DO WHILE .T.
|
||||
|
||||
IF cLine == NIL
|
||||
cLine := Space( HB_LINE_LEN )
|
||||
ENDIF
|
||||
|
||||
HB_DotInfo( cCommand )
|
||||
|
||||
@ MaxRow(), 00 SAY HB_PROMPT
|
||||
@ Row(), Col() GET cLine PICTURE "@KS79"
|
||||
|
||||
SetCursor( IIF( ReadInsert(), SC_INSERT, SC_NORMAL ) )
|
||||
|
||||
bKeyIns := SetKey( K_INS, ;
|
||||
{|| SetCursor( IIF( ReadInsert( !ReadInsert() ), ;
|
||||
SC_NORMAL, SC_INSERT ) ) } )
|
||||
bKeyUp := SetKey( K_UP, ;
|
||||
{|| IIF( nHistIndex > 1, ;
|
||||
cLine := aHistory[ --nHistIndex ], ) } )
|
||||
bKeyDown := SetKey( K_DOWN, ;
|
||||
{|| cLine := IIF( nHistIndex < LEN( aHistory ), ;
|
||||
aHistory[ ++nHistIndex ], ;
|
||||
( nHistIndex := LEN( aHistory ) + 1, Space( HB_LINE_LEN ) ) ) } )
|
||||
|
||||
READ
|
||||
|
||||
SetKey( K_DOWN, bKeyDown )
|
||||
SetKey( K_UP, bKeyUp )
|
||||
SetKey( K_INS, bKeyIns )
|
||||
|
||||
IF LastKey() == K_ESC .OR. EMPTY( cLine )
|
||||
cLine := NIL
|
||||
LOOP
|
||||
ENDIF
|
||||
|
||||
IF EMPTY( aHistory ) .OR. ! ATAIL( aHistory ) == cLine
|
||||
IF LEN( aHistory ) < HB_HISTORY_LEN
|
||||
AADD( aHistory, cLine )
|
||||
ELSE
|
||||
ADEL( aHistory, 1 )
|
||||
aHistory[ 1 ] := cLine
|
||||
ENDIF
|
||||
ENDIF
|
||||
nHistIndex := LEN( aHistory ) + 1
|
||||
|
||||
cCommand := AllTrim( cLine, " " )
|
||||
cLine := NIL
|
||||
@ MaxRow(), 0 CLEAR
|
||||
HB_DotInfo( cCommand )
|
||||
|
||||
HB_DotExec( cCommand )
|
||||
|
||||
IF s_nRow >= MaxRow()
|
||||
Scroll( 2, 0, MaxRow(), MaxCol(), 1 )
|
||||
s_nRow = MaxRow() - 1
|
||||
ENDIF
|
||||
|
||||
ENDDO
|
||||
ENDIF
|
||||
|
||||
RETURN
|
||||
|
||||
/* ********************************************************************** */
|
||||
|
||||
STATIC PROCEDURE HB_DotUsage()
|
||||
|
||||
OutStd( 'Harbour "DOt Prompt" Console' + HB_OSNewLine() +;
|
||||
'Copyright 1999-2007, Przemyslaw Czerpak' + HB_OSNewLine() + ;
|
||||
'http://www.harbour-project.org' + HB_OSNewLine() +;
|
||||
HB_OSNewLine() +;
|
||||
'Syntax: hbdot [<hrbfile[.prg]> [<parameters,...>]]' + HB_OSNewLine() + ;
|
||||
HB_OSNewLine() +;
|
||||
"Note: Linked with " + Version() + HB_OSNewLine() )
|
||||
|
||||
RETURN
|
||||
|
||||
/* ********************************************************************** */
|
||||
|
||||
STATIC PROCEDURE HB_DotInfo( cCommand )
|
||||
|
||||
LOCAL r := Row(), c := Col()
|
||||
|
||||
IF cCommand != NIL
|
||||
DispOutAt( 0, 0, "PP: " )
|
||||
DispOutAt( 0, 4, PadR( cCommand, MaxCol() - 3 ), "N/R" )
|
||||
ENDIF
|
||||
IF Used()
|
||||
DispOutAt( 1, 0, ;
|
||||
PadR( "RDD: " + PadR( RddName(), 6 ) + ;
|
||||
" | Area:" + Str( Select(), 3 ) + ;
|
||||
" | Dbf: " + PadR( Alias(), 10 ) + ;
|
||||
" | Index: " + PadR( OrdName( IndexOrd() ), 8 ) + ;
|
||||
" | # " + Str( RecNo(), 7 ) + "/" + Str( RecCount(), 7 ), ;
|
||||
MaxCol() + 1 ), "N/BG" )
|
||||
ELSE
|
||||
DispOutAt( 1, 0, ;
|
||||
PadR( "RDD: " + Space( 6 ) + ;
|
||||
" | Area:" + Space( 3 ) + ;
|
||||
" | Dbf: " + Space( 10 ) + ;
|
||||
" | Index: " + Space( 8 ) + ;
|
||||
" | # " + Space( 7 ) + "/" + Space( 7 ), ;
|
||||
MaxCol() + 1 ), "N/BG" )
|
||||
ENDIF
|
||||
SetPos( r, c )
|
||||
|
||||
RETURN
|
||||
|
||||
/* ********************************************************************** */
|
||||
|
||||
STATIC PROCEDURE HB_DotErr( oErr, cCommand )
|
||||
|
||||
LOCAL xArg, cMessage
|
||||
|
||||
cMessage := "Sorry, could not execute:;;" + cCommand + ";;"
|
||||
IF oErr:ClassName == "ERROR"
|
||||
cMessage += oErr:Description
|
||||
IF ValType( oErr:Args ) == 'A' .AND. Len( oErr:Args ) > 0
|
||||
cMessage += ";Arguments:"
|
||||
FOR EACH xArg IN oErr:Args
|
||||
cMessage += ";" + HB_CStr( xArg )
|
||||
NEXT
|
||||
ENDIF
|
||||
ELSEIF ValType( oErr ) == 'C'
|
||||
cMessage += oErr
|
||||
ENDIF
|
||||
cMessage += ";;" + ProcName( 2 ) + '(' + LTrim( Str( ProcLine( 2 ) ) ) + ')'
|
||||
|
||||
Alert( cMessage )
|
||||
|
||||
BREAK( oErr )
|
||||
|
||||
/* ********************************************************************** */
|
||||
|
||||
STATIC PROCEDURE HB_DotExec( cCommand )
|
||||
LOCAL oHRB, cHRB, cFunc, bBlock, cEol
|
||||
|
||||
cEol := hb_osNewLine()
|
||||
cFunc := "STATIC FUNC __HBDOT()" + cEol + ;
|
||||
"RETURN {||" + cEol + ;
|
||||
" " + cCommand + cEol + ;
|
||||
" RETURN __MVSETBASE()" + cEol + ;
|
||||
"}" + cEol
|
||||
|
||||
BEGIN SEQUENCE WITH {|oErr| HB_DotErr( oErr, cCommand ) }
|
||||
|
||||
cHRB := HB_COMPILEFROMBUF( cFunc, HB_ARGV( 0 ), "-n", "-q2", s_aIncDir )
|
||||
IF cHRB == NIL
|
||||
EVAL( ErrorBlock(), "Syntax error." )
|
||||
ELSE
|
||||
oHRB := hrbHolder():New( cHRB )
|
||||
bBlock := oHRB:do()
|
||||
|
||||
DevPos( s_nRow, s_nCol )
|
||||
Eval( bBlock )
|
||||
s_nRow := Row()
|
||||
s_nCol := Col()
|
||||
IF s_nRow < 2
|
||||
s_nRow := 2
|
||||
ENDIF
|
||||
|
||||
ENDIF
|
||||
|
||||
END SEQUENCE
|
||||
|
||||
oHRB := NIL
|
||||
|
||||
__MVSETBASE()
|
||||
|
||||
RETURN
|
||||
|
||||
/* ********************************************************************** */
|
||||
|
||||
CREATE CLASS hrbHolder STATIC
|
||||
VAR pHRB
|
||||
METHOD init( cHRB )
|
||||
METHOD do()
|
||||
DESTRUCTOR hrbDestruct
|
||||
ENDCLASS
|
||||
|
||||
METHOD init( cHRB )
|
||||
::pHRB := __hrbLoad( cHRB )
|
||||
RETURN Self
|
||||
|
||||
METHOD do()
|
||||
IF ::pHRB != NIL
|
||||
RETURN __hrbDo( ::pHRB )
|
||||
ENDIF
|
||||
RETURN NIL
|
||||
|
||||
METHOD PROCEDURE hrbDestruct
|
||||
IF ::pHRB != NIL
|
||||
__hrbUnLoad( ::pHRB )
|
||||
ENDIF
|
||||
RETURN
|
||||
|
||||
/* ********************************************************************** */
|
||||
|
||||
/* request about full screen GT driver */
|
||||
#if defined( __PLATFORM__UNIX )
|
||||
REQUEST HB_GT_TRM_DEFAULT
|
||||
#elif defined( __PLATFORM__Windows )
|
||||
REQUEST HB_GT_WIN_DEFAULT
|
||||
#elif defined( __PLATFORM__DOS )
|
||||
REQUEST HB_GT_DOS_DEFAULT
|
||||
#elif defined( __PLATFORM__OS2 )
|
||||
REQUEST HB_GT_OS2_DEFAULT
|
||||
#endif
|
||||
|
||||
/* ********************************************************************** */
|
||||
Reference in New Issue
Block a user