Page 1 of 1
Harbour y uso de scripts
Posted: Tue Jul 09, 2019 2:10 pm
by Compuin
Saludos,
Estoy pensando implementar el uso de scripts en mi aplicacion pero tengo las siguientes dudas:
1.- Los scripts deben ser compilados a .hrb o pueden ser solo .prg ?
2.- Si quiero proteger estos .prg como puedo encriptarlos ? Algun ejemplo ?
3.- A nivel de scripts, la sintaxis es la misma que un .prg tradicional, es decir, sin restriccion del tipo de variable (local, estatica, etc), uso de funciones o procedures, etc ?
4.- Existe documentacion donde pueda ver la sintaxis de Harbour para el manejo de scripts (Ejecucion, revision de sintaxis, etc ) ?
5.- Finalmente, se puede ejecutar el script desde una base de datos ?
He tratado de ejecutar los samples que trae fivewin pero me arrojan errores, por eso posteo esta inquietud
Atentos a sus comentarios,
Re: Harbour y uso de scripts
Posted: Tue Jul 09, 2019 2:40 pm
by hmpaquito
Hola,
1.- Los scripts deben ser compilados a .hrb o pueden ser solo .prg ?
Pueden ser de las dos clases
2.- Si quiero proteger estos .prg como puedo encriptarlos ? Algun ejemplo ?
Si, usando .hrb
3.- A nivel de scripts, la sintaxis es la misma que un .prg tradicional, es decir, sin restriccion del tipo de variable (local, estatica, etc), uso de funciones o procedures, etc ?
Si, sin restricciones
4.- Existe documentacion donde pueda ver la sintaxis de Harbour para el manejo de scripts (Ejecucion, revision de sintaxis, etc ) ?
Busque informacion sobre la funcion hb_CompileFromBuffer() y hb_HrbDo() / hb_HrbLoad()
Un buen ejemplo es esta función de Apache.prg desde HFW, que permite archivos .hrb y .prg:
https://github.com/FiveTechSoft/mod_har ... apache.prg
Code: Select all
function _AppMain()
local cFileName
ErrorBlock( { | o | DoBreak( o ) } )
cFileName = AP_FileName()
AddPPRules()
if File( cFileName )
if Lower( Right( cFileName, 4 ) ) == ".hrb"
hb_HrbDo( hb_HrbLoad( cFileName ), AP_Args() )
else
hb_SetEnv( "PRGPATH",;
SubStr( cFileName, 1, RAt( "/", cFileName ) + RAt( "\", cFileName ) - 1 ) )
Execute( MemoRead( cFileName ), AP_Args() )
endif
else
ErrorLevel( 404 )
endif
return nil
//----------------------------------------------------------------//
function Execute( cCode, ... )
local oHrb, uRet, lReplaced := .T.
local cHBheaders1 := "~/harbour/include"
local cHBheaders2 := "c:\harbour\include"
while lReplaced
lReplaced = ReplaceBlocks( @cCode, "{%", "%}" )
cCode = __pp_process( hPP, cCode )
end
oHrb = HB_CompileFromBuf( cCode, .T., "-n", "-I" + cHBheaders1, "-I" + cHBheaders2,;
"-I" + hb_GetEnv( "HB_INCLUDE" ), hb_GetEnv( "HB_USER_PRGFLAGS" ) )
if ! Empty( oHrb )
uRet = hb_HrbDo( hb_HrbLoad( oHrb ), ... )
endif
return uRet
5.- Finalmente, se puede ejecutar el script desde una base de datos ?
Esta no la entiendo o lo que si entiendo la respuesta es no.
Saludos
Re: Harbour y uso de scripts
Posted: Tue Jul 09, 2019 2:53 pm
by cnavarro
Si lo que quieres decir es si puedes guardar los scripts en una base de datos, recuperarlos y ejecutarlos, la respuesta es SI
Re: Harbour y uso de scripts
Posted: Tue Jul 09, 2019 2:54 pm
by Compuin
cnavarro wrote:Si lo que quieres decir es si puedes guardar los scripts en una base de datos, recuperarlos y ejecutarlos, la respuesta es SI
Gracias cnavarro, hmpaquito
Como ajusto harbour para que reconozca el #include "fivewin.ch" ?
Re: Harbour y uso de scripts
Posted: Tue Jul 09, 2019 3:10 pm
by cnavarro
Fijate en la function Execute del codigo que ha puesto el compañero antes
Re: Harbour y uso de scripts
Posted: Tue Jul 09, 2019 3:35 pm
by Compuin
cnavarro wrote:Fijate en la function Execute del codigo que ha puesto el compañero antes
Me referia como lo hago desde la linea de comando, usando un .bat
Re: Harbour y uso de scripts
Posted: Wed Jul 10, 2019 6:10 am
by hmpaquito
Me referia como lo hago desde la linea de comando, usando un .bat
Se puede hacer pasándole la cláusula /i como en el ejemplo:
Code: Select all
harbour prueba.prg /ic:\fwh;d:\include\headers.ch;e:\harbour\include\std.ch
Re: Harbour y uso de scripts
Posted: Wed Jul 10, 2019 11:57 am
by Compuin
hmpaquito wrote:Me referia como lo hago desde la linea de comando, usando un .bat
Se puede hacer pasándole la cláusula /i como en el ejemplo:
Code: Select all
harbour prueba.prg /ic:\fwh;d:\include\headers.ch;e:\harbour\include\std.ch
Me arroja este error
Code: Select all
C:\Harbour\bin>harbour t02.prg /gh /ic:\fwh1901\include\headers.ch;c:\harbour\include\std.ch
Harbour 3.2.0dev (r1904111533)
Copyright (c) 1999-2019, https://harbour.github.io/
Compiling 't02.prg'...
t02.prg(1) Error F0029 Can't open #include file 'FiveWin.ch'
C:\Harbour\bin>
Re: Harbour y uso de scripts
Posted: Wed Jul 10, 2019 1:14 pm
by hmpaquito
Lo que puse era un ejemplo.
En tu caso deberia funcionar poniendo en el .bat lo siguiente:
Re: Harbour y uso de scripts
Posted: Wed Jul 10, 2019 1:21 pm
by Compuin
Gracias hmpaquito
Ahora si funciona