scripts.prg
// Scripting for Harbour and FiveWin only (not supported on xHarbour)
#include "FiveWin.ch"
#include "Splitter.ch"
#include "xbrowse.ch"
static oWnd
function Main()
聽 聽local oBrw, oFont, oMemo, oSplit
聽 聽
聽 聽if ! File( "scripts.dbf" )
聽 聽 聽 DbCreate( "scripts.dbf", { { "NAME", "C", 20, 0 }, { "DESCRIPT", "C", 100, 0 }, { "CODE", "M", 80, 0 } } )
聽 聽endif 聽 聽 聽
聽 聽
聽 聽USE scripts
聽 聽
聽 聽if RecCount() == 0
聽 聽 聽 APPEND BLANK
聽 聽 聽 Scripts->Name := "Test"
聽 聽 聽 Scripts->Descript := "This is a test script"
聽 Scripts->Code := "function Test()" + CRLF + CRLF + ' MsgInfo( "Hello world!" )' + CRLF + CRLF + "return nil"
聽 聽endif 聽
聽 聽
聽 聽DEFINE WINDOW oWnd TITLE "Scripts" MENU BuildMenu()
聽 聽
聽 聽DEFINE BUTTONBAR oBar OF oWnd SIZE 80, 80 2007
聽 聽
聽 聽DEFINE BUTTON OF oBar PROMPT "New" FILE "..\bitmaps\alphabmp\plus.bmp" TOOLTIP "New"
聽 聽DEFINE BUTTON OF oBar PROMPT "Run" FILE "..\bitmaps\alphabmp\task.bmp" TOOLTIP "Run" ACTION Execute()
聽 聽DEFINE BUTTON OF oBar PROMPT "Exit" 聽FILE "..\bitmaps\32x32\quit.bmp" TOOLTIP "Exit" ;
聽 聽 聽 ACTION If( MsgYesNo( "Do you want to end ?" ), oWnd:End(),)
聽 聽 聽
聽 聽@ 5.8, 0 XBROWSE oBrw OF oWnd SIZE 450, 500 ;
聽 聽 聽 FIELDS Scripts->Name, Scripts->Descript ;
聽 聽 聽 HEADERS "Name", "Description" CELL LINES
聽 聽
聽 聽oBrw:CreateFromCode() 聽
聽 聽 聽
聽 聽DEFINE FONT oFont NAME "Courier New" SIZE 0, -14 聽
聽 聽 聽
聽 聽@ 6.3, 57 GET oMemo VAR Scripts->Code MEMO OF oWnd SIZE 500, 500 FONT oFont
聽 聽
聽 聽@ 0, 450 SPLITTER oSplit ;
聽 聽 聽 VERTICAL _3DLOOK ;
聽 聽 聽 PREVIOUS CONTROLS oBrw ;
聽 聽 聽 HINDS CONTROLS oMemo ;
聽 聽 聽 SIZE 4, 200 PIXEL ;
聽 聽 聽 OF oWnd
聽 聽 聽
聽 聽oSplit:AdjClient() 聽 聽 聽 聽
聽 聽
聽 聽DEFINE MSGBAR oMsgBar OF oWnd 2007 PROMPT "Scripting support for your applications"
聽 聽
聽 聽ACTIVATE WINDOW oWnd MAXIMIZED ;
聽 聽 聽 ON RESIZE oSplit:AdjClient() 聽
聽 聽
return nil
function BuildMenu()
聽 聽local oMenu
聽 聽
聽 聽MENU oMenu
聽 聽 聽 MENUITEM "Scripts management"
聽 聽 聽 MENU
聽 聽 聽 聽 聽MENUITEM "About..." ACTION MsgAbout( "Scripting support for Harbour and FiveWin", "(c) FiveTech Software 2011" )
聽 聽 聽 聽 聽SEPARATOR
聽 聽 聽 聽 聽MENUITEM "Exit" ACTION If( MsgYesNo( "Do you want to end ?" ), oWnd:End(),)
聽 聽 聽 ENDMENU 聽
聽 聽ENDMENU
聽 聽
return oMenu 聽 聽 聽
function Execute()
聽 聽local oHrb
聽 聽MemoWrit( "_temp.prg", Scripts->Code )
聽 聽FReOpen_Stderr( "comp.log", "w" )
聽 聽oHrb = HB_CompileBuf( HB_ARGV( 0 ), "_temp.prg", "-n", "-Ic:\fwh\include" )
聽 聽// MsgInfo( MemoRead( "comp.log" ) )
聽 聽hb_HrbRun( oHrb )
return nil
#pragma BEGINDUMP
#include <stdio.h>
#include <hbapi.h>
HB_FUNC( FREOPEN_STDERR )
{
聽 聽hb_retnl( ( LONG ) freopen( hb_parc( 1 ), hb_parc( 2 ), stderr ) );
} 聽 聽
#pragma ENDDUMP
