2011-02-08 22:29 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)

* utils/hbmk2/hbmk2.prg
    + Added experimental hbrun script runner "emulation" to hbmk2.
      With a few differences:
      - there is no interactive console
      - it works only if filename with .hbs or .hrb is passed as first parameter
        (which present a minor incompatibility for those using hbmk2
        to compile .hbs scripts to executables)
      - the default GT environment for scripts is GTCGI.
      - scripts may request interactivity with HBRUN_GTINTERACTIVE()
        function call. This will switch mode to GTWIN/GTTRM/GTDOS/GTOS2
        depending on platform. Though interactive functions linked into
        hbmk2 are very limited.
      - only a limited set of functions and headers are available,
        those which may be useful for cmdline apps.
        (which means hbmk2 size didn't grow significantly after this
        commit)
    ; The goal is to make it possible to replace hbrun with hbmk2
      for Harbour build related scripts, and other simple user scripts.

  * utils/hbrun/hbrun.prg
    * Minor cleanups.
    * Using HB_PROGNAME() instead of HB_ARGV( 0 )
This commit is contained in:
Viktor Szakats
2011-02-08 21:30:08 +00:00
parent 9dd35f9931
commit 2425da0075
3 changed files with 128 additions and 21 deletions

View File

@@ -16,6 +16,30 @@
The license applies to all entries newer than 2009-04-28.
*/
2011-02-08 22:29 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
* utils/hbmk2/hbmk2.prg
+ Added experimental hbrun script runner "emulation" to hbmk2.
With a few differences:
- there is no interactive console
- it works only if filename with .hbs or .hrb is passed as first parameter
(which present a minor incompatibility for those using hbmk2
to compile .hbs scripts to executables)
- the default GT environment for scripts is GTCGI.
- scripts may request interactivity with HBRUN_GTINTERACTIVE()
function call. This will switch mode to GTWIN/GTTRM/GTDOS/GTOS2
depending on platform. Though interactive functions linked into
hbmk2 are very limited.
- only a limited set of functions and headers are available,
those which may be useful for cmdline apps.
(which means hbmk2 size didn't grow significantly after this
commit)
; The goal is to make it possible to replace hbrun with hbmk2
for Harbour build related scripts, and other simple user scripts.
* utils/hbrun/hbrun.prg
* Minor cleanups.
* Using HB_PROGNAME() instead of HB_ARGV( 0 )
2011-02-08 14:50 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
* contrib/hbnetio/hbnetio.hbp
+ contrib/hbnetio/hbnetio.hbx

View File

@@ -504,6 +504,14 @@ REQUEST __CLSLOCKDEF
REQUEST HB_HKEEPORDER
REQUEST HB_CRC32
REQUEST __HBDOC_TOSOURCE
REQUEST HB_LIBEXT
REQUEST HB_HKEYAT
REQUEST HB_HDELAT
REQUEST HB_HKEYS
REQUEST HB_FGETATTR
/* For hbrun emulation */
STATIC s_cDirBase_hbrun
/* NOTE: Security token to protect against plugins accessing our
internal structures referenced from context variable */
@@ -526,6 +534,15 @@ PROCEDURE _APPMAIN( ... )
/* Expand wildcard project specs */
IF PCount() >= 1
tmp := Lower( FNameExtGet( hb_PValue( 1 ) ) )
IF tmp == ".hbs" .OR. ;
tmp == ".hrb"
hbmk2_hbrun_minimal( ... )
QUIT
ENDIF
ENDIF
aArgsProc := {}
FOR EACH tmp IN hb_AParams()
DO CASE
@@ -537,19 +554,6 @@ PROCEDURE _APPMAIN( ... )
FOR EACH tmp1 IN FN_Expand( SubStr( tmp, Len( "-target=" ) + 1 ), .F. )
AAdd( aArgsProc, "-target=" + tmp1 )
NEXT
#if 0
CASE Lower( FNameExtGet( tmp ) ) == ".hbs"
hbrun_main( tmp )
QUIT
CASE Lower( tmp ) == "-ui"
#if defined( __PLATFORM__WINCE )
hb_gtSelect( hb_gtCreate( "GTWVT" ) )
#elif defined( __PLATFORM__WINDOWS )
hb_gtSelect( hb_gtCreate( "GTWIN" ) )
#endif
hbrun_main()
QUIT
#endif
OTHERWISE
AAdd( aArgsProc, tmp )
ENDCASE
@@ -11462,6 +11466,87 @@ STATIC FUNCTION __hb_extern_gen( hbmk, aFuncList, cOutputName )
RETURN .F.
STATIC FUNCTION hbmk_CoreHeaderFilesMinimal()
STATIC s_hHeaders := NIL
IF s_hHeaders == NIL
s_hHeaders := { => }
/* command to store header files in hash array */
#command ADD HEADER TO <hash> FILE <(cFile)> => ;
#pragma __streaminclude <(cFile)>|<hash>\[ <(cFile)> \] := %s
ADD HEADER TO s_hHeaders FILE "color.ch"
ADD HEADER TO s_hHeaders FILE "common.ch"
ADD HEADER TO s_hHeaders FILE "directry.ch"
ADD HEADER TO s_hHeaders FILE "error.ch"
ADD HEADER TO s_hHeaders FILE "fileio.ch"
ADD HEADER TO s_hHeaders FILE "hbmemory.ch"
ADD HEADER TO s_hHeaders FILE "hbver.ch"
ADD HEADER TO s_hHeaders FILE "inkey.ch"
ADD HEADER TO s_hHeaders FILE "setcurs.ch"
ADD HEADER TO s_hHeaders FILE "simpleio.ch"
#if defined( __PLATFORM__UNIX )
hb_HCaseMatch( s_hHeaders, .T. )
#else
hb_HCaseMatch( s_hHeaders, .F. )
#endif
ENDIF
RETURN s_hHeaders
/* Emulate a minimal hbrun */
PROCEDURE hbmk2_hbrun_minimal( cFile, ... )
IF ! Empty( cFile := FindInPath( cFile ) )
SWITCH Lower( FNameExtGet( cFile ) )
CASE ".hbs"
cFile := hb_compileBuf( hbmk_CoreHeaderFilesMinimal(), hb_ProgName(), "-n2", "-w", "-es2", "-q0", ;
"-I" + FNameDirGet( cFile ), "-D" + "__HBSCRIPT__HBRUN", cFile )
IF cFile == NIL
ErrorLevel( 1 )
EXIT
ENDIF
CASE ".hrb"
s_cDirBase_hbrun := hb_DirBase()
hb_argShift( .T. )
hb_hrbRun( cFile, ... )
EXIT
ENDSWITCH
ENDIF
RETURN
/* ------------------------------------------------------------- */
/* Public hbrun API */
FUNCTION hbrun_DirBase()
RETURN s_cDirBase_hbrun
/* Public hbrun API */
PROCEDURE hbrun_gtInteractive()
hb_gtSelect( hb_gtCreate( hbrun_gtDefault() ) )
RETURN
STATIC FUNCTION hbrun_gtDefault()
#if defined( __PLATFORM__WINCE )
RETURN "GTWVT"
#elif defined( __PLATFORM__WINDOWS )
RETURN "GTWIN"
#elif defined( __PLATFORM__DOS )
RETURN "GTDOS"
#elif defined( __PLATFORM__OS2 )
RETURN "GTOS2"
#elif defined( __PLATFORM__UNIX ) .AND. ! defined( __PLATFORM__VXWORKS ) .AND. ! defined( __PLATFORM__SYMBIAN )
RETURN "GTTRM"
#else
RETURN "GTCGI"
#endif
/* ------------------------------------------------------------- */
STATIC PROCEDURE convert_hbmake_to_hbp( hbmk, cSrcName, cDstName )
LOCAL cSrc := MemoRead( cSrcName )
LOCAL cDst
@@ -12006,7 +12091,7 @@ STATIC PROCEDURE ShowHelp( hbmk, lLong )
{ "-[no]minipo" , I_( "do (not) add Harbour version number and source file reference to .po (default: add them)" ) },;
{ "-rebuildpo" , I_( "recreate .po file, thus removing all obsolete entries in it" ) },;
NIL,;
{ "-hbx=<.ch>" , I_( "Create Harbour header (in .hbx format) with all external symbols. (EXPERIMENTAL)" ) },;
{ "-hbx=<.ch>" , I_( "Create Harbour header (in .hbx format) with all external symbols." ) },;
{ "-autohbc=<.ch:.hbc>", I_( "<.ch> is a header file name. <.hbc> is a .hbc filename to be automatically included in case the header is found in any of the compiled sources. (EXPERIMENTAL)" ) },;
NIL,;
{ "-deppkgname=<d:n>" , I_( "<d> is the name of the dependency. <n> name of the package depedency. Can be specified multiple times." ) },;

View File

@@ -82,7 +82,6 @@ REQUEST HB_GT_STD
STATIC s_nRow
STATIC s_nCol := 0
STATIC s_aCompOptions := {}
STATIC s_aHistory := {}
STATIC s_lPreserveHistory := .T.
STATIC s_lWasLoad := .F.
@@ -94,7 +93,6 @@ STATIC s_cDirBase
PROCEDURE _APPMAIN( cFile, ... )
LOCAL cExt
LOCAL hHeaders
LOCAL lHeadersDisable := ! Empty( getenv( "HBRUN_NOHEAD" ) )
IF PCount() > 0
SWITCH Lower( cFile )
@@ -140,7 +138,7 @@ PROCEDURE _APPMAIN( cFile, ... )
cFile := hbrun_FindInPath( cFile )
IF ! Empty( cFile )
hb_FNameSplit( cFile, NIL, NIL, @cExt )
cExt := lower( cExt )
cExt := Lower( cExt )
SWITCH cExt
CASE ".prg"
CASE ".hbs"
@@ -156,12 +154,12 @@ PROCEDURE _APPMAIN( cFile, ... )
EXIT
CASE ".prg"
CASE ".hbs"
IF ! lHeadersDisable
IF Empty( getenv( "HBRUN_NOHEAD" ) )
hHeaders := hbrun_CoreHeaderFiles() /* add core header files */
ENDIF
cFile := HB_COMPILEBUF( hHeaders, HB_ARGV( 0 ), "-n2", "-w", "-es2", "-q0", ;
s_aCompOptions, "-I" + FNameDirGet( cFile ), "-D" + "__HBSCRIPT__HBRUN", cFile )
cFile := HB_COMPILEBUF( hHeaders, hb_ProgName(), "-n2", "-w", "-es2", "-q0", ;
"-I" + FNameDirGet( cFile ), "-D" + "__HBSCRIPT__HBRUN", cFile )
IF cFile == NIL
ERRORLEVEL( 1 )
EXIT
@@ -520,7 +518,7 @@ STATIC PROCEDURE hbrun_Exec( cCommand )
BEGIN SEQUENCE WITH {|oErr| hbrun_Err( oErr, cCommand ) }
cHRB := HB_COMPILEFROMBUF( cFunc, HB_ARGV( 0 ), "-n2", "-q2", s_aCompOptions )
cHRB := HB_COMPILEFROMBUF( cFunc, hb_ProgName(), "-n2", "-q2" )
IF cHRB == NIL
EVAL( ErrorBlock(), "Syntax error." )
ELSE