Página 1 de 2
Directiva preprocesador
Publicado: Lun May 16, 2022 11:35 am
por quim
Saludos foro ...
Existe alguna directiva genérica de compilador, al estilo de __PLATFORM_WINDOWS para saber si el módulo en ejecución es lanzado por mod_harbour ?
Algo así como _MOD_HARBOUR_ para poder determinar la compilación condicional al estilo de
#ifdef _MOD_ ..
...
#else
#endif
Gracias por la ayuda !
Re: Directiva preprocesador
Publicado: Lun May 16, 2022 3:24 pm
por quim
No entiendo porque no funciona
{% hb_SetEnv( "HB_USER_PRGFLAGS", "-d__MODHARBOUR__" ) %}
Re: Directiva preprocesador
Publicado: Lun May 16, 2022 4:02 pm
por charly
Quim,
Si luego haces un
? hb_GetEnv( "HB_USER_PRGFLAGS" )
Q aparece?
Prueba tambien poner las // antes
// {% hb_SetEnv( "HB_USER_PRGFLAGS", "-d__MODHARBOUR__" ) %}
N o recuerdo si devolvia algo el hb_SETENV() y te enmascara el code
C.
Re: Directiva preprocesador
Publicado: Lun May 16, 2022 5:30 pm
por quim
Gracias Charly por la respuesta
Con
? hb_GetEnv( "HB_USER_PRGFLAGS" )
aparece : -d__MODHARBOUR___
pero si en el código hago
#ifdef __MODHARBOUR___
#include "{% hb_GetEnv('PRGPATH')+'/menu.prg'%}"
#endif
Ya no funciona, nunca incluye el #include
Saludos
Re: Directiva preprocesador
Publicado: Lun May 16, 2022 5:42 pm
por charly
Quim,
Entiendo que no entra en el #ifdef __MODHARBOUR___
Si haces
#ifdef __MODHARBOUR___
mh_echo( time() )
#endif
Esto no te imprimer la hora....
Re: Directiva preprocesador
Publicado: Lun May 16, 2022 7:10 pm
por quim
Charly, no, no entra
Utilizo mod_harbour de
https://github.com/FiveTechSoft/mod_harbour/
En la cabecera de mi prg tengo:
// {% hb_SetEnv( "HB_USER_PRGFLAGS", "-d__MODHARBOUR__" ) %}
Al analizar el codigo 'ejecutor'
cCode = __pp_process( hPP, cCode ) //<-- Aqui entiendo que resuelve el hb_SetEnv anterior no ?
oHrb = HB_CompileFromBuf( cCode, .T., "-n", "-q2", "-I" + cHBheaders1, "-I" + cHBheaders2,;
"-I" + hb_GetEnv( "HB_INCLUDE" ), hb_GetEnv( "HB_USER_PRGFLAGS" ) )
Al final de mi prg, llamada a otro prg
#ifdef __MODHARBOUR__
#include "{% hb_GetEnv('PRGPATH')+'/menu.prg'%}"
#endif
Al revisar el código anterior, me parece que __pp_process() también resuelve el #ifdef, por lo que __MODHARBOUR__ no existe
Estoy en un bucle
Re: Directiva preprocesador
Publicado: Lun May 16, 2022 7:34 pm
por quim
Como posible solución, creo que se debería de construir el mod con alguna directiva, por ejemplo __MOD_HARBOUR___
Al estilo de cómo se construye _XHARBOUR_
Re: Directiva preprocesador
Publicado: Lun May 16, 2022 7:35 pm
por charly
Quim.
Create un fichero .htaccess que contenga esto
SetEnv MH_INITPROCESS init.prg
Crea un fichero init.prg y pon
Código: Seleccionar todo
#define __MODHARBOUR__
function main()
_d( 'Entro en init...' )
#ifdef __MODHARBOUR__
_d( '__MODHARBOUR__ definida!' )
#endif
retu nil
Apaga el server y lo vuelves a conectar y prueba.
La funcion _d() supongo que lo sabes, crea salida por dbwin32. Para mi importantisimo para tracear. Si lo tienes arráncalo y mira si entra en init
NOTA. Esta funcionalidad solo esta en V2.
C.
Re: Directiva preprocesador
Publicado: Mié May 18, 2022 9:39 am
por quim
Gracias Charly por la ayuda pero ...
No utilizo de momento la V2, lo haré más adelante
Busco compatibilidad para todos los mod_harbour*
Básicamente es conocer quién está ejecutando un prg, si mod_harbour o un cgi, con la finalidad que un mismo código sea compatible para ambos sistemas
A nivel mod,
HB_CompileFromBuf no distingue al 'ejecutor'
La única solución que de momento veo, es compilar cada mod incluyendo un descriptor, al estilo :
__pp_AddRule( hPP, "#define __MODHARBOUR__" )
Saludos
Re: Directiva preprocesador
Publicado: Mié May 18, 2022 6:38 pm
por charly
Quim,
quim escribió: ↑Mié May 18, 2022 9:39 am
No utilizo de momento la V2, lo haré más adelante
Mi consejo es usar el V2.1, no hay color. Es mas potente, mas veloz y con mas funcionalidades internas
quim escribió: ↑Mié May 18, 2022 9:39 am
Busco compatibilidad para todos los mod_harbour*
No vas a poder. En lo básico si, pero a la que tengas que usar segun que funcionalidad no
quim escribió: ↑Mié May 18, 2022 9:39 am
A nivel mod, HB_CompileFromBuf no distingue al 'ejecutor'
Yo probe ayer el ejemplo que te puse y funciona perfectamente. La ventaja de SetEnv MH_INITPROCESS (una de las funcionalidades que tiene) es que puedes antes de ejecutar tus codigos, cargar ch,prg y hrb cuando inicias el server. En el ejemplo cargo el init.prg y hago un #define __MODHARBOUR__ .Luego al ejecutar tus prgs ya detectan la nueva directiva cargada
quim escribió: ↑Mié May 18, 2022 9:39 am
La única solución que de momento veo, es compilar cada mod incluyendo un descriptor, al estilo :
__pp_AddRule( hPP, "#define __MODHARBOUR__" )
Esto seria una buena solución tambien. Dejar esta directiva en el mod ya preparada, por mi la podriamos poner, es solo un define que puede ir bien para estos casos.
C.