Directiva preprocesador

quim
Mensajes: 31
Registered for: 3 years 4 months
Andorra

Directiva preprocesador

Mensaje 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 !

quim
Mensajes: 31
Registered for: 3 years 4 months
Andorra

Mensaje por quim »

No entiendo porque no funciona
{% hb_SetEnv( "HB_USER_PRGFLAGS", "-d__MODHARBOUR__" ) %}

Avatar de Usuario
charly
Mensajes: 145
Registered for: 3 years 6 months

Mensaje 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.
Salutacions, saludos, regards.
Charly

"...programar es fácil, hacer programas es difícil..."

https://httpd2.blogspot.com/
https://forum.modharbour.app

quim
Mensajes: 31
Registered for: 3 years 4 months
Andorra

Mensaje 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

Avatar de Usuario
charly
Mensajes: 145
Registered for: 3 years 6 months

Mensaje 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....
Salutacions, saludos, regards.
Charly

"...programar es fácil, hacer programas es difícil..."

https://httpd2.blogspot.com/
https://forum.modharbour.app

quim
Mensajes: 31
Registered for: 3 years 4 months
Andorra

Mensaje 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 :)

quim
Mensajes: 31
Registered for: 3 years 4 months
Andorra

Mensaje 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_

Avatar de Usuario
charly
Mensajes: 145
Registered for: 3 years 6 months

Mensaje 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.
Salutacions, saludos, regards.
Charly

"...programar es fácil, hacer programas es difícil..."

https://httpd2.blogspot.com/
https://forum.modharbour.app

quim
Mensajes: 31
Registered for: 3 years 4 months
Andorra

Mensaje 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

Avatar de Usuario
charly
Mensajes: 145
Registered for: 3 years 6 months

Mensaje 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.
Salutacions, saludos, regards.
Charly

"...programar es fácil, hacer programas es difícil..."

https://httpd2.blogspot.com/
https://forum.modharbour.app

Responder