From 046d1ea4d70d4af8a510a79d200e16275da0c020 Mon Sep 17 00:00:00 2001 From: Przemyslaw Czerpak Date: Wed, 11 Apr 2007 20:01:18 +0000 Subject: [PATCH] 2007-04-11 22:00 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) * harbour/source/compiler/harbour.y * harbour/source/compiler/harbour.yyc ! fixed some possible false warning messages * harbour/include/hboo.ch * harbour/source/vm/classes.c + added support for HB_OO_MSG_PROPERTY and HB_OO_MSG_CLASSPROPERTY to make some xHarbour users happy ;-) * harbour/common.mak * harbour/harbour.spec * harbour/include/hbcompdf.h * harbour/source/compiler/Makefile + harbour/source/compiler/hbcmplib.c + added HB_COMPILE() function - it accepts exactly the same parameters as harbour compiler and makes the same job :-) * harbour/utils/hbrun/Makefile * harbour/utils/hbrun/hbrun.prg + added support for compilation and direct execution of .prg files Now hbrun can accept as first parameter .hrb or .prg file and if it's .prg file it's compiled and then executed just like .hrb one. In *nixes if you copy compiled hbrun to /usr/bin directory then you can add to your .prg files as first line: #!/usr/bin/hbrun and then after setting executable attribute you can directly execute them, f.e.: ./test.prg If you are using Linux then you can also chose default gt driver by dding to above line: //gt F.e. #!/usr/bin/hbrun //gtstd --- harbour/ChangeLog | 33 ++++++++++++++ harbour/common.mak | 1 + harbour/harbour.spec | 8 ++-- harbour/include/hbcompdf.h | 2 +- harbour/include/hboo.ch | 5 ++ harbour/source/compiler/Makefile | 1 + harbour/source/compiler/harbour.y | 22 ++++----- harbour/source/compiler/harbour.yyc | 22 ++++----- harbour/source/compiler/hbcmplib.c | 71 +++++++++++++++++++++++++++++ harbour/source/vm/classes.c | 31 ++++++++++++- harbour/utils/hbrun/Makefile | 1 + harbour/utils/hbrun/hbrun.prg | 46 +++++++++++++++++-- 12 files changed, 210 insertions(+), 33 deletions(-) create mode 100644 harbour/source/compiler/hbcmplib.c diff --git a/harbour/ChangeLog b/harbour/ChangeLog index f599081996..88b08f3631 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,39 @@ 2002-12-01 13:30 UTC+0100 Foo Bar */ +2007-04-11 22:00 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) + * harbour/source/compiler/harbour.y + * harbour/source/compiler/harbour.yyc + ! fixed some possible false warning messages + + * harbour/include/hboo.ch + * harbour/source/vm/classes.c + + added support for HB_OO_MSG_PROPERTY and HB_OO_MSG_CLASSPROPERTY + to make some xHarbour users happy ;-) + + * harbour/common.mak + * harbour/harbour.spec + * harbour/include/hbcompdf.h + * harbour/source/compiler/Makefile + + harbour/source/compiler/hbcmplib.c + + added HB_COMPILE() function - it accepts exactly the same parameters + as harbour compiler and makes the same job :-) + + * harbour/utils/hbrun/Makefile + * harbour/utils/hbrun/hbrun.prg + + added support for compilation and direct execution of .prg files + Now hbrun can accept as first parameter .hrb or .prg file and if + it's .prg file it's compiled and then executed just like .hrb one. + In *nixes if you copy compiled hbrun to /usr/bin directory then + you can add to your .prg files as first line: + #!/usr/bin/hbrun + and then after setting executable attribute you can directly + execute them, f.e.: + ./test.prg + If you are using Linux then you can also chose default gt driver + by dding to above line: //gt + F.e. + #!/usr/bin/hbrun //gtstd 2007-04-11 15:25 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) * harbour/contrib/libnf/mouse1.prg diff --git a/harbour/common.mak b/harbour/common.mak index 913b495735..91f1748a12 100644 --- a/harbour/common.mak +++ b/harbour/common.mak @@ -256,6 +256,7 @@ COMPILER_LIB_OBJS = \ $(OBJ_DIR)\complex.obj \ $(OBJ_DIR)\cmdcheck.obj \ $(OBJ_DIR)\hbcomp.obj \ + $(OBJ_DIR)\hbcmplib.obj \ $(OBJ_DIR)\hbdead.obj \ $(OBJ_DIR)\hbstripl.obj \ $(OBJ_DIR)\hbusage.obj \ diff --git a/harbour/harbour.spec b/harbour/harbour.spec index cb9d061cae..ad6ccf5431 100644 --- a/harbour/harbour.spec +++ b/harbour/harbour.spec @@ -455,23 +455,25 @@ druzus@uran:~/tmp$ ls -l foo ---------------------------------------------------------------------- -In this RPM you will find additional wonderful tools: /usr/bin/pprun +In this RPM you will find additional wonderful tools: /usr/bin/hbrun You can run clipper/xbase compatible source files with it if you only put in their first line: -#!/usr/bin/pprun +#!/usr/bin/hbrun For example: ---------------------------------------------------------------------- druzus@uran:~/tmp$ cat foo.prg -#!/usr/bin/pprun +#!/usr/bin/hbrun function main() ? "Hello, World!, This is a script !!! :-)" +? return nil druzus@uran:~/tmp$ chmod +x foo.prg druzus@uran:~/tmp$ ./foo.prg +Hello, World!, This is a script !!! :-) I hope this RPM is useful. Have fun with %{dname}. diff --git a/harbour/include/hbcompdf.h b/harbour/include/hbcompdf.h index 3e6f0ec87a..250187eadc 100644 --- a/harbour/include/hbcompdf.h +++ b/harbour/include/hbcompdf.h @@ -623,8 +623,8 @@ typedef struct _HB_COMP int iGenCOutput; /* C code generation should be verbose (use comments) or not */ int ilastLineErr; /* line numer with last syntax error */ - BOOL fExit; /* force breaking compilation process */ BOOL fQuiet; /* be quiet during compilation (-q) */ + BOOL fExit; /* force breaking compilation process */ BOOL fPPO; /* flag indicating, is ppo output needed */ BOOL fPPT; /* flag indicating, is ppt output needed */ BOOL fStartProc; /* holds if we need to create the starting procedure */ diff --git a/harbour/include/hboo.ch b/harbour/include/hboo.ch index f019f2ce1f..032d12d452 100644 --- a/harbour/include/hboo.ch +++ b/harbour/include/hboo.ch @@ -107,6 +107,11 @@ #define HB_OO_MSG_PERFORM 15 #define HB_OO_MSG_DELEGATE 16 +/* to make xHarbour users happy ;-) */ +#define HB_OO_PROPERTY 32 +#define HB_OO_MSG_PROPERTY HB_OO_PROPERTY + HB_OO_MSG_DATA /* Auto management of DATA */ +#define HB_OO_MSG_CLASSPROPERTY HB_OO_PROPERTY + HB_OO_MSG_CLASSDATA /* Auto management of CLASSDATA */ + /* Data */ #define HB_OO_DATA_SYMBOL 1 #define HB_OO_DATA_VALUE 2 diff --git a/harbour/source/compiler/Makefile b/harbour/source/compiler/Makefile index 7176cff149..1242e3296d 100644 --- a/harbour/source/compiler/Makefile +++ b/harbour/source/compiler/Makefile @@ -31,6 +31,7 @@ C_SOURCES=\ genjava.c \ genobj32.c \ gencli.c \ + hbcmplib.c \ hbcomp.c \ hbfunchk.c \ hbgenerr.c \ diff --git a/harbour/source/compiler/harbour.y b/harbour/source/compiler/harbour.y index 83020db2e6..5f291fdbe1 100644 --- a/harbour/source/compiler/harbour.y +++ b/harbour/source/compiler/harbour.y @@ -1390,13 +1390,13 @@ DoCase : DoCaseBegin ; EndCase : ENDCASE - { if( HB_COMP_PARAM->wCaseCounter ) - --HB_COMP_PARAM->wCaseCounter; - HB_COMP_PARAM->functions.pLast->bFlags &= ~ ( FUN_WITH_RETURN | FUN_BREAK_CODE ); + { if( HB_COMP_PARAM->wCaseCounter ) + --HB_COMP_PARAM->wCaseCounter; + HB_COMP_PARAM->functions.pLast->bFlags &= ~ ( FUN_WITH_RETURN | FUN_BREAK_CODE ); } | END - { if( HB_COMP_PARAM->wCaseCounter ) - --HB_COMP_PARAM->wCaseCounter; + { if( HB_COMP_PARAM->wCaseCounter ) + --HB_COMP_PARAM->wCaseCounter; HB_COMP_PARAM->functions.pLast->bFlags &= ~ ( FUN_WITH_RETURN | FUN_BREAK_CODE ); } ; @@ -1461,7 +1461,7 @@ DoWhile : WhileBegin Expression Crlf --HB_COMP_PARAM->wWhileCounter; hb_compLoopEnd( HB_COMP_PARAM ); HB_COMP_PARAM->functions.pLast->bFlags &= ~ FUN_WITH_RETURN; - } + } ; WhileBegin : WHILE { $$ = HB_COMP_PARAM->functions.pLast->lPCodePos; hb_compLinePushIfInside( HB_COMP_PARAM ); ++HB_COMP_PARAM->wWhileCounter; hb_compLoopStart( HB_COMP_PARAM ); } @@ -1525,7 +1525,7 @@ ForNext : FOR LValue ForAssign Expression /* 1 2 3 4 */ HB_COMP_EXPR_DELETE( $5 ); /* deletes $5, $2, $4 */ if( $8 ) HB_COMP_EXPR_DELETE( $8 ); - HB_COMP_PARAM->functions.pLast->bFlags &= ~ FUN_WITH_RETURN; + HB_COMP_PARAM->functions.pLast->bFlags &= ~ ( FUN_WITH_RETURN | FUN_BREAK_CODE ); } ; @@ -1597,7 +1597,7 @@ ForEach : FOREACH ForList IN ForArgs /* 1 2 3 4 */ hb_compGenJumpHere( $9, HB_COMP_PARAM ); hb_compLoopEnd( HB_COMP_PARAM ); - HB_COMP_PARAM->functions.pLast->bFlags &= ~ FUN_WITH_RETURN; + HB_COMP_PARAM->functions.pLast->bFlags &= ~ ( FUN_WITH_RETURN | FUN_BREAK_CODE ); hb_compEnumEnd( HB_COMP_PARAM, $2 ); HB_COMP_EXPR_DELETE( $2 ); HB_COMP_EXPR_DELETE( $4 ); @@ -1696,6 +1696,7 @@ BeginSeq : BEGINSEQ /* 1 */ } AlwaysSeq /* 8 */ { /* 9 */ + HB_COMP_PARAM->functions.pLast->bFlags &= ~ ( FUN_WITH_RETURN | FUN_BREAK_CODE ); if( $8 ) { /* replace END address with ALWAYS address in @@ -1714,7 +1715,6 @@ BeginSeq : BEGINSEQ /* 1 */ } hb_compSequenceFinish( HB_COMP_PARAM, $2, $5, $8, $4 != 0, $6 != 0 ); - HB_COMP_PARAM->functions.pLast->bFlags &= ~FUN_WITH_RETURN; } END /* 10 */ ; @@ -1725,13 +1725,13 @@ AlwaysSeq : /* no always */ { $$ = 0; } Always : ALWAYS { - HB_COMP_PARAM->functions.pLast->bFlags &= ~FUN_BREAK_CODE; + HB_COMP_PARAM->functions.pLast->bFlags &= ~ ( FUN_WITH_RETURN | FUN_BREAK_CODE ); $$ = HB_COMP_PARAM->functions.pLast->lPCodePos; hb_compSequenceAlways( HB_COMP_PARAM ); } ; -RecoverSeq : /* no recover */ { $$ = 0; } +RecoverSeq : /* no recover */ { $$ = 0; HB_COMP_PARAM->functions.pLast->bFlags &= ~ FUN_BREAK_CODE; } | RecoverEmpty Crlf EmptyStats | RecoverUsing Crlf EmptyStats ; diff --git a/harbour/source/compiler/harbour.yyc b/harbour/source/compiler/harbour.yyc index fe6a8c8013..9d99b20c8e 100644 --- a/harbour/source/compiler/harbour.yyc +++ b/harbour/source/compiler/harbour.yyc @@ -6247,16 +6247,16 @@ yyreduce: case 519: #line 1393 "harbour.y" - { if( HB_COMP_PARAM->wCaseCounter ) - --HB_COMP_PARAM->wCaseCounter; - HB_COMP_PARAM->functions.pLast->bFlags &= ~ ( FUN_WITH_RETURN | FUN_BREAK_CODE ); + { if( HB_COMP_PARAM->wCaseCounter ) + --HB_COMP_PARAM->wCaseCounter; + HB_COMP_PARAM->functions.pLast->bFlags &= ~ ( FUN_WITH_RETURN | FUN_BREAK_CODE ); ;} break; case 520: #line 1398 "harbour.y" - { if( HB_COMP_PARAM->wCaseCounter ) - --HB_COMP_PARAM->wCaseCounter; + { if( HB_COMP_PARAM->wCaseCounter ) + --HB_COMP_PARAM->wCaseCounter; HB_COMP_PARAM->functions.pLast->bFlags &= ~ ( FUN_WITH_RETURN | FUN_BREAK_CODE ); ;} break; @@ -6359,7 +6359,7 @@ yyreduce: --HB_COMP_PARAM->wWhileCounter; hb_compLoopEnd( HB_COMP_PARAM ); HB_COMP_PARAM->functions.pLast->bFlags &= ~ FUN_WITH_RETURN; - ;} + ;} break; case 539: @@ -6441,7 +6441,7 @@ yyreduce: HB_COMP_EXPR_DELETE( (yyvsp[(5) - (12)].asExpr) ); /* deletes $5, $2, $4 */ if( (yyvsp[(8) - (12)].asExpr) ) HB_COMP_EXPR_DELETE( (yyvsp[(8) - (12)].asExpr) ); - HB_COMP_PARAM->functions.pLast->bFlags &= ~ FUN_WITH_RETURN; + HB_COMP_PARAM->functions.pLast->bFlags &= ~ ( FUN_WITH_RETURN | FUN_BREAK_CODE ); ;} break; @@ -6557,7 +6557,7 @@ yyreduce: hb_compGenJumpHere( (yyvsp[(9) - (10)].lNumber), HB_COMP_PARAM ); hb_compLoopEnd( HB_COMP_PARAM ); - HB_COMP_PARAM->functions.pLast->bFlags &= ~ FUN_WITH_RETURN; + HB_COMP_PARAM->functions.pLast->bFlags &= ~ ( FUN_WITH_RETURN | FUN_BREAK_CODE ); hb_compEnumEnd( HB_COMP_PARAM, (yyvsp[(2) - (10)].asExpr) ); HB_COMP_EXPR_DELETE( (yyvsp[(2) - (10)].asExpr) ); HB_COMP_EXPR_DELETE( (yyvsp[(4) - (10)].asExpr) ); @@ -6686,6 +6686,7 @@ yyreduce: case 588: #line 1698 "harbour.y" { /* 9 */ + HB_COMP_PARAM->functions.pLast->bFlags &= ~ ( FUN_WITH_RETURN | FUN_BREAK_CODE ); if( (yyvsp[(8) - (8)].lNumber) ) { /* replace END address with ALWAYS address in @@ -6704,7 +6705,6 @@ yyreduce: } hb_compSequenceFinish( HB_COMP_PARAM, (yyvsp[(2) - (8)].lNumber), (yyvsp[(5) - (8)].lNumber), (yyvsp[(8) - (8)].lNumber), (yyvsp[(4) - (8)].lNumber) != 0, (yyvsp[(6) - (8)].lNumber) != 0 ); - HB_COMP_PARAM->functions.pLast->bFlags &= ~FUN_WITH_RETURN; ;} break; @@ -6716,7 +6716,7 @@ yyreduce: case 592: #line 1727 "harbour.y" { - HB_COMP_PARAM->functions.pLast->bFlags &= ~FUN_BREAK_CODE; + HB_COMP_PARAM->functions.pLast->bFlags &= ~ ( FUN_WITH_RETURN | FUN_BREAK_CODE ); (yyval.lNumber) = HB_COMP_PARAM->functions.pLast->lPCodePos; hb_compSequenceAlways( HB_COMP_PARAM ); ;} @@ -6724,7 +6724,7 @@ yyreduce: case 593: #line 1734 "harbour.y" - { (yyval.lNumber) = 0; ;} + { (yyval.lNumber) = 0; HB_COMP_PARAM->functions.pLast->bFlags &= ~ FUN_BREAK_CODE; ;} break; case 596: diff --git a/harbour/source/compiler/hbcmplib.c b/harbour/source/compiler/hbcmplib.c new file mode 100644 index 0000000000..7306c493ca --- /dev/null +++ b/harbour/source/compiler/hbcmplib.c @@ -0,0 +1,71 @@ +/* + * $Id$ + */ + +/* + * Harbour Project source code: + * HB_COMPILE() - compiler interface + * + * Copyright 2007 Przemyslaw Czerpak + * 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 "hbapi.h" +#include "hbcomp.h" + +HB_FUNC( HB_COMPILE ) +{ + int iPCount = hb_pcount(), argc = 0, i; + char ** argv, * szParam; + + argv = ( char ** ) hb_xgrab( sizeof( char * ) * ( iPCount + 1 ) ); + for( i = 1; i <= iPCount; ++i ) + { + szParam = hb_parc( i ); + if( szParam ) + argv[ argc++ ] = szParam; + } + argv[ argc ] = NULL; + hb_retni( compMain( argc, argv ) ); + hb_xfree( argv ); +} diff --git a/harbour/source/vm/classes.c b/harbour/source/vm/classes.c index 4f43bf73e1..6c6c2e5863 100644 --- a/harbour/source/vm/classes.c +++ b/harbour/source/vm/classes.c @@ -2202,7 +2202,7 @@ static BOOL hb_clsAddMsg( USHORT uiClass, char * szMessage, if( !fOK ) { - hb_errRT_BASE( EG_ARG, 3000, NULL, "__CLSADDMSG", HB_ERR_ARGS_BASEPARAMS ); + hb_errRT_BASE( EG_ARG, 3000, NULL, &hb_errFuncName, HB_ERR_ARGS_BASEPARAMS ); return FALSE; } @@ -2460,11 +2460,38 @@ HB_FUNC( __CLSADDMSG ) { nType = szMessage[ 0 ] == '_' ? HB_OO_MSG_ASSIGN : HB_OO_MSG_ACCESS; } - if( nType == HB_OO_MSG_CLASSDATA ) + else if( nType == HB_OO_MSG_CLASSDATA ) { nType = szMessage[ 0 ] == '_' ? HB_OO_MSG_CLSASSIGN : HB_OO_MSG_CLSACCESS; } + /* to make xHarbour users happy ;-) */ + else if( nType == HB_OO_MSG_PROPERTY || + nType == HB_OO_MSG_CLASSPROPERTY ) + { + char szAssign[ HB_SYMBOL_NAME_LEN + 1 ]; + int iLen = ( int ) hb_parclen( 1 ); + if( iLen >= HB_SYMBOL_NAME_LEN ) + iLen = HB_SYMBOL_NAME_LEN - 1; + szAssign[ 0 ] = '_'; + memcpy( szAssign + 1, szMessage, iLen ); + szAssign[ iLen ] = '\0'; + + uiScope = ( uiScope | HB_OO_CLSTP_EXPORTED ) & + ~( HB_OO_CLSTP_PROTECTED | HB_OO_CLSTP_HIDDEN ); + if( nType == HB_OO_MSG_PROPERTY ) + { + hb_clsAddMsg( uiClass, szAssign, HB_OO_MSG_ASSIGN, + uiScope & ~HB_OO_CLSTP_PERSIST, pFunction, pInit ); + nType = HB_OO_MSG_ACCESS; + } + else + { + hb_clsAddMsg( uiClass, szAssign, HB_OO_MSG_CLSASSIGN, + uiScope & ~HB_OO_CLSTP_PERSIST, pFunction, pInit ); + nType = HB_OO_MSG_CLSACCESS; + } + } hb_clsAddMsg( uiClass, szMessage, nType, uiScope, pFunction, pInit ); } diff --git a/harbour/utils/hbrun/Makefile b/harbour/utils/hbrun/Makefile index e1a7cd166a..146ae72e0b 100644 --- a/harbour/utils/hbrun/Makefile +++ b/harbour/utils/hbrun/Makefile @@ -25,5 +25,6 @@ LIBS=\ macro \ pp \ common \ + compiler \ include $(TOP)$(ROOT)config/bin.cf diff --git a/harbour/utils/hbrun/hbrun.prg b/harbour/utils/hbrun/hbrun.prg index 7dcb965c32..6939f8e5df 100644 --- a/harbour/utils/hbrun/hbrun.prg +++ b/harbour/utils/hbrun/hbrun.prg @@ -9,6 +9,9 @@ * Copyright 1999 Ryszard Glab * www - http://www.harbour-project.org * + * Copyright 2007 Przemyslaw Czerpak + * added support for dynamic compilation and execution of .prg files + * * 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) @@ -50,24 +53,57 @@ * */ +/* + * Please remember that in *nixes if you copy compiled version + * of this program to /usr/bin directory then you can add to your + * .prg files as first line: + * #!/usr/bin/hbrun + * and then after setting executable attribute you can directly execute + * your .prg files + * If you are using Linux then you can also chose default gt driver by + * adding to above line: //gt + * F.e. + * #!/usr/bin/hbrun //gtstd + */ + #include "hbextern.ch" /* NOTE: Undocumented CA-Clipper _APPMAIN is used instead of Main to avoid collision with user function in HRB file with that name. [ckedem] */ -FUNCTION _APPMAIN( cHRBFile, cPar1, cPar2, cPar3, cPar4, cPar5, cPar6, cPar7, cPar8, cPar9 ) - LOCAL xRetVal +FUNCTION _APPMAIN( cHRBFile, ... ) + LOCAL xRetVal, cPRGFile, cRMFile, cPath, cName, cExt, cDrive IF Empty( cHRBFile ) OutStd( "Harbour Runner" + HB_OSNewLine() +; "Copyright 1999-2006, http://www.harbour-project.org" + HB_OSNewLine() +; HB_OSNewLine() +; - "Syntax: hbrun [parameters]" + HB_OSNewLine() +; + "Syntax: hbrun [parameters]" + HB_OSNewLine() + ; HB_OSNewLine() +; "Note: Linked with " + Version() + HB_OSNewLine() ) ELSE - xRetVal := __hrbRun( cHRBFile, cPar1, cPar2, cPar3, cPar4, cPar5, cPar6, cPar7, cPar8, cPar9 ) + HB_FNAMESPLIT( cHRBFile, @cPath, @cName, @cExt, @cDrive ) + IF LOWER( cExt ) == ".prg" + cPRGFile := cHRBFile + xRetVal := HB_FTEMPCREATE(,,, @cHRBFile ) + IF xRetVal == -1 + RETURN xRetVal + ENDIF + FCLOSE( xRetVal ) + FERASE( cHRBFile ) + HB_FNAMESPLIT( cHRBFile, @cPath, @cName, @cExt, @cDrive ) + cRMFile := cHRBFile := HB_FNAMEMERGE( cPath, cName, ".hrb", cDrive ) + xRetVal := HB_COMPILE( HB_ARGV( 0 ), "-n", "-w", "-es2", "-q0", ; + "-gh", "-o"+cHRBFile, cPRGFile ) + IF xRetVal != 0 + RETURN xRetVal + ENDIF + ENDIF + xRetVal := __hrbRun( cHRBFile, ... ) + ENDIF + + IF !EMPTY( cRMFile ) + FERASE( cRMFile ) ENDIF RETURN xRetVal -