Bennu Game Development

Foros en Español => General => Topic started by: panreyes on September 19, 2010, 01:52:39 PM

Title: ¿Cómo recoger la salida de la función exec?
Post by: panreyes on September 19, 2010, 01:52:39 PM
¿Hay alguna forma de hacerlo? ¿O de redirigir temporalmente la salida de la consola a una variable de alguna forma?
Title: Re: ¿Cómo recoger la salida de la función exec?
Post by: FreeYourMind on September 19, 2010, 02:59:44 PM
Siempre te pasas 4 pueblos preguntando cosas raras  ;D
Title: Re: ¿Cómo recoger la salida de la función exec?
Post by: SplinterGU on September 19, 2010, 03:01:27 PM
no por el momento directamente, tal vez con un script, pero eso deja de ser portable.
Title: Re: ¿Cómo recoger la salida de la función exec?
Post by: panreyes on September 19, 2010, 03:14:37 PM
Al final esa será la solución supongo, no es tan mala después de todo.

El objetivo es recuperar el lenguaje de Windows, a través del registro, con un reg query...
Title: Re: ¿Cómo recoger la salida de la función exec?
Post by: SplinterGU on September 19, 2010, 05:12:01 PM
para eso te conviene sacar la salida a un archivo de texto y luego leerlo desde bennugd, asi hago en el instalador de la version windows.
Title: Re: ¿Cómo recoger la salida de la función exec?
Post by: DCelso on September 19, 2010, 07:44:23 PM
yo haría un módulo que exportar la función de reg query a bennu para así poderla usar fácilmente desde bennu. :D.
Title: Re: ¿Cómo recoger la salida de la función exec?
Post by: panreyes on September 19, 2010, 08:18:21 PM
Pero me da problemas la parte de "> fichero.txt"
Por ahora me funciona con un bat, luego pongo cómo lo solucioné. Es interesante que se autodetecte el idioma :)
Title: Re: ¿Cómo recoger la salida de la función exec?
Post by: DCelso on September 19, 2010, 10:31:42 PM
Pixel, te he creado un módulo especial para ello, lo malo es que es para linux :D, es que ahora no tengo ese odioso sistema operativo de pago a mano y no he podido compilar el código fuente en él, te dejo la fantástica tarea de que lo portes si quieres, :D.

http://forum.bennugd.org/index.php?topic=1651.0

NOTA: a lo mejor en windows no va el set_locale de "locale.h" y hay que usar el "GetLocaleInfo" de la API de windows,

http://msdn.microsoft.com/en-us/library/dd318101%28VS.85%29.aspx
Title: Re: ¿Cómo recoger la salida de la función exec?
Post by: josebita on September 19, 2010, 10:54:29 PM
Quizás esto del idioma se podría incorporar a la mod_sys. Creo que es un problema bastante común y no parece difícil de añadir.
Title: Re: ¿Cómo recoger la salida de la función exec?
Post by: panreyes on September 19, 2010, 11:47:52 PM
Aquí está una posible solución, tirando de exec:
http://www.windowsitpro.com/article/configuration/where-in-the-registry-is-the-language-setting-for-each-user-stored-.aspx

En BennuGD hago esto:
if(!fexists(getenv("TEMP")+"\lang.txt")) exec(1,"language.bat",0,0); end

Y language.bat contiene esto:
@rem recupera lenguaje de windows
@reg query HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Nls\Language /v Default | findstr Default > %TEMP%\lang.txt


Luego lo recupero y elijo el idioma dependiendo de lo que hayamos recogido, y en base a la lista que hay en el enlace de antes:

fp=fopen(getenv("TEMP")+"\lang.txt",O_READ);
if(fp)
cadena_lenguaje=fgets(fp);
fclose(fp);
end
cadena_lenguaje_bien=""+cadena_lenguaje[25]+cadena_lenguaje[26]+cadena_lenguaje[27]+cadena_lenguaje[28];
ops.lenguaje=0;
switch(cadena_lenguaje_bien)
case "0c0a": ops.lenguaje=1; end
case "0410": ops.lenguaje=2; end
case "0407": ops.lenguaje=3; end
case "040c": ops.lenguaje=4; end
end