Page 1 of 1

Harbour y uso de scripts

PostPosted: 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

PostPosted: 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  Expand view
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

PostPosted: 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

PostPosted: 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

PostPosted: 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

PostPosted: 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

PostPosted: 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  Expand view
harbour prueba.prg /ic:\fwh;d:\include\headers.ch;e:\harbour\include\std.ch

Re: Harbour y uso de scripts

PostPosted: 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  Expand view
harbour prueba.prg /ic:\fwh;d:\include\headers.ch;e:\harbour\include\std.ch


Me arroja este error

Code: Select all  Expand view
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

PostPosted: 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:

Code: Select all  Expand view
SET INCLUDE=c:\fwh1901\include

Re: Harbour y uso de scripts

PostPosted: Wed Jul 10, 2019 1:21 pm
by Compuin
Gracias hmpaquito

Ahora si funciona