Page 1 of 2

Scripting ...

Posted: Wed Oct 31, 2007 6:08 pm
by Rimantas
This question is adressed to Antonio. I know that xHB have "xHbScript" . It's requirement to have something to FWH , that script will support good FWH things ... :-) . What you can say , Antonio ? ... Or maybe it's any other technique which can support FWH libs ? I'm asking for that , because it's ideas to do own ERP more flexible and , I'm thinking , scripting with FWH can do this job ... :-)

With best regards ! Rimantas

Posted: Thu Nov 01, 2007 6:30 am
by Antonio Linares
Rimantas,

You may use xHB's "xHbScript", it works fine with FWH

Posted: Thu Nov 01, 2007 9:16 am
by Rimantas
Antonio Linares wrote:Rimantas,

You may use xHB's "xHbScript", it works fine with FWH
I know xhbScript . But I have in mind scripts which can work with FWH syntax . As a sample - open dialog with some controls - gets , buttons :

Code: Select all

#include "FiveWin.ch"
function Main()

   local oDlg, lExit := .f., oBtn

   DEFINE DIALOG oDlg FROM 5, 5 TO 15, 40 TITLE "A Dialog Box"

   @ 3,  4 BUTTON "&Ok" OF oDlg SIZE 40, 12

   @ 3, 12 BUTTON oBtn PROMPT "&Cancel" OF oDlg SIZE 40, 12 ;
      ACTION ( MsgInfo( "Cancel" ), lExit := .t., oDlg:End() )

   ACTIVATE DIALOG oDlg VALID lExit

return nil
Will this code work with xHbScript ?

Regards !

Posted: Thu Nov 01, 2007 9:41 am
by Antonio Linares
Rimantas,

I have not tested it myself, but it should work ok :-)

Posted: Thu Nov 01, 2007 2:13 pm
by James Bott
Rimantas,

I'm just curious, where are you going with this? What is the advantage to using script insead of code?

James

Posted: Thu Nov 01, 2007 5:05 pm
by Rimantas
James Bott wrote: I'm just curious, where are you going with this? What is the advantage to using script insead of code?
Hello James ,

At first I want to to specify , that I'm talking about separate prgs as scripts ... It can be prg as script can run , or xbs , ppo files as they are supported from xharbour.com ...

Exist many places where the scripts are better than code . One of the best place to fit scripts are reports ... Today I'm addidng code inside exe for any report . I'm thinking that this can be changed in other way - put prg's or ppo's files in special directory , from main program in report menu ( generated from DBF ,which contain list of reports ) call needful report = script ... With database it's all working OK . But at the beggining of report I'm calling dialog/window in which user direct needfulls parameters for report . Of course , all the code is with FWH ...

I begin from reports , because this place must be very flexible - at the begining of new project users don't know possibilities of programmer and programmer can't to see future - what users will ask ... :) . So , in mine mind , directory with prg's or precompiled ppo's , maybe xbs's , files it's the easiest way to manage such things . Now , I'm adding code , rebuilding exe , and then placing the new exe remotely in users servers . I'm thinkig that remotely to do new prg file or modify old its more easy ...

Antonio , sorry , but xbScript don't support FWH syntax . I renamed dlg.prg to dlg.xbs and tried to open that . It return error dialog with "compilation error" message ... :( Maybe it's working and I don't know how to to run that .

So I'm asking you , that maybe something similar exist in FWH or xHarbour ...

Regards , Rimantas

Posted: Thu Nov 01, 2007 9:26 pm
by Antonio Linares
Rimantas,

I just forgot this: Harbour natively supports dynamic scripting! :-) There is no need for you to use a third party scripting tool!

You create a HRB file on runtime and execute it from the application, so there is no limitations at all and you can execute any Harbour code :-)

Let me find some samples for you.

James, runtime scripting is an incredible powerfull feature, that allows to have full data driven support in your applications :-) Its the foundation of ERP applications

Posted: Fri Nov 02, 2007 12:09 am
by Antonio Linares
Rimantas,

Do you use Harbour or xHarbour ?

Posted: Fri Nov 02, 2007 2:57 am
by nageswaragunupudi
I have been watching this topic with interest. I am using xharbour (bcc) now. But like to know the possibilities of creating hrb files on the fly and running them both in harbour and xharbour. In principle what I am looking for is something similar. Have some code as data somewhere and run it at runtime, instead of replacing the exe for every small modification.

Posted: Fri Nov 02, 2007 8:40 am
by Antonio Linares
This is a simple test. Please have a copy of harbour.exe where you run this:

test.prg

Code: Select all

#include "FiveWin.ch"

function Main()

   Compile( "another.prg" )

   __HrbRun( "another.hrb" )
   
   MsgInfo( "done" )

return nil

function Compile( cPrgName )

   WinExec( "harbour.exe " + cPrgName + " /n /gh", 0 )
   
   while ! File( cFileNoExt( cPrgName ) + ".hrb" )
      SysRefresh()
   end   
   
return nil   
Another.prg

Code: Select all

function DontNameThisMain()

   MsgInfo( "Hello world!" )

return nil
Please notice that Harbour users don't need to keep an external harbour.exe as they can use hb_CompileBuf() that compiles from the application itself

Posted: Fri Nov 02, 2007 8:44 am
by nageswaragunupudi
Thanks

Assuming that we precompiled a program is .hrb and stored it as data. We read the .hrb into a memory variable. How can we execute it direclty? ( without having .hrb file on disk ) ?

Posted: Fri Nov 02, 2007 8:46 am
by Antonio Linares
NageswaraRao,

Just copy the data to a temporal external file:

MemoWrit( "test.hrb", cHrbData )

later on, erase it:

FErase( "test.hrb" )

Posted: Fri Nov 02, 2007 8:50 am
by Antonio Linares
My mistake, you can directly execute it from memory too :-)

__HrbRun( MemoRead( "another.hrb" ) )

Posted: Fri Nov 02, 2007 9:03 am
by nageswaragunupudi
Yes. This is better .. Thanks

Posted: Fri Nov 02, 2007 9:17 am
by nageswaragunupudi
I have tested with xharbour. In xharbour __hrbrun requires the filename as parameter. it looks like __hrbrun calls __hrbload with the file name. now if _hrbrun uses __hrbload to load the hrb file into memory, then what is the function that executes the code in the memory ? i guess we need to use that function to execute code in memory