Harbour y uso de scripts

Post Reply
Compuin
Posts: 1017
Joined: Tue Dec 28, 2010 1:29 pm

Harbour y uso de scripts

Post 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,
hmpaquito
Posts: 1200
Joined: Thu Oct 30, 2008 2:37 pm

Re: Harbour y uso de scripts

Post 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
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Harbour y uso de scripts

Post 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
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Compuin
Posts: 1017
Joined: Tue Dec 28, 2010 1:29 pm

Re: Harbour y uso de scripts

Post 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" ?
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Harbour y uso de scripts

Post by cnavarro »

Fijate en la function Execute del codigo que ha puesto el compañero antes
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Compuin
Posts: 1017
Joined: Tue Dec 28, 2010 1:29 pm

Re: Harbour y uso de scripts

Post 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
hmpaquito
Posts: 1200
Joined: Thu Oct 30, 2008 2:37 pm

Re: Harbour y uso de scripts

Post 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
Compuin
Posts: 1017
Joined: Tue Dec 28, 2010 1:29 pm

Re: Harbour y uso de scripts

Post 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>
hmpaquito
Posts: 1200
Joined: Thu Oct 30, 2008 2:37 pm

Re: Harbour y uso de scripts

Post by hmpaquito »

Lo que puse era un ejemplo.
En tu caso deberia funcionar poniendo en el .bat lo siguiente:

Code: Select all

SET INCLUDE=c:\fwh1901\include
Compuin
Posts: 1017
Joined: Tue Dec 28, 2010 1:29 pm

Re: Harbour y uso de scripts

Post by Compuin »

Gracias hmpaquito

Ahora si funciona
Post Reply