Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: josebita on September 09, 2009, 11:30:58 PM

Title: Ayuda con glob
Post by: josebita on September 09, 2009, 11:30:58 PM
Ando retocando el karaoke y me he encontrado que las rutinas de determinación del charset de los ficheros no funcionan como deberían. Me explico:
El tema es que cada vez que le pido que determine el charset de un fichero de texto, la rutina debería leer los nombres de todos los ficheros del directorio "charset_finder", abrirlos y buscar los caracteres en ellos contenidos (que estarán codificados con la codificación que da nombre al fichero) dentro del fichero cuyo charset le he pedido que determine.

Pues resulta que sólo recorre el directorio charset_finder la primera vez. El resto de veces salta directamente al charset por defecto cuando ninguno coincide (es como si no viera los ficheros).

Adjunto parte del código en forma probable. El fichero de prueba es "tonto.prg", el resto los adjunto para comprobar la funcionalidad.

Si alguien me puede echar una mano, se lo agradecería.

PD: He renombrado el adjunto de ".tar.gz" a ".zip" para poder adjuntarlo. Depende de lo listo que sea el descompresor que useis, quizás haya que renombrarlo...

PD2: Estoy con la última versión de Bennu liberada.
Title: Re: Ayuda con glob
Post by: SplinterGU on September 10, 2009, 12:01:45 AM
disculpame, esta vez no voy a poder ayudar, estoy un poco complicado por los proximos 2 meses con proyectos personales...
Title: Re: Ayuda con glob
Post by: josebita on September 10, 2009, 12:15:59 AM
Ok, no te preocupes. Ánimo con esos proyectos.

Si alguien más me puede echar una mano, lo agradecería.
Title: Re: Ayuda con glob
Post by: josebita on September 11, 2009, 03:21:20 PM
Bueno, por si alguien le quiere echar un ojo, aquí va un ejemplo mucho más simple que supongo que debería funcionar distinto de como lo hace:
[code language="bennu"]import "mod_say";
import "mod_dir";


Function main()
Begin
 while(glob("/*") != "")
   if(fileinfo.directory == TRUE && fileinfo.name != "." && fileinfo.name != "..")
     say(fileinfo.name);
   end;
 end;
 say("Done finding dirs");
 FRAME(0);   // Need to frame, to restart the glob file search
 while(glob("/*") != "")
   if(fileinfo.directory == TRUE && fileinfo.name != "." && fileinfo.name != "..")
     say(fileinfo.name);
   end;
 end;
 say("Done finding dirs");
End;[/code]

Y la salida es:
[code language="bash"]joseba@rescubuntu:bennugd-karaoke$ bgdi tonto
home
sys
mnt
var
srv
cdrom
root
tmp
usr
proc
sbin
dev
bin
lib
lost+found
media
opt
selinux
etc
boot
Done finding dirs
Done finding dirs[/code]
Cuando entiendo que debería ser:
[code language="bash"]joseba@rescubuntu:bennugd-karaoke$ bgdi tonto
home
sys
mnt
var
srv
cdrom
root
tmp
usr
proc
sbin
dev
bin
lib
lost+found
media
opt
selinux
etc
boot
Done finding dirs
home
sys
mnt
var
srv
cdrom
root
tmp
usr
proc
sbin
dev
bin
lib
lost+found
media
opt
selinux
etc
boot
Done finding dirs[/code]

PD: lo he probado contra la última revisión del svn (104) que es más moderna que la última build oficial.
Title: Re: Ayuda con glob
Post by: panreyes on September 11, 2009, 03:32:34 PM
Doy fe. Hasta que sea arreglado el parche es hacer un glob a otro directorio y así seguro que reinicia el contador.
Title: Re: Ayuda con glob
Post by: josebita on September 11, 2009, 03:36:22 PM
Gracias, Pixel, me estaba rayando...
Confirmo que el siguiente código sí funciona como debería:
[code language="bennu"]import "mod_say";
import "mod_dir";


Function main()
Begin
  while(glob("/*") != "")
    if(fileinfo.directory == TRUE && fileinfo.name != "." && fileinfo.name != "..")
      say(fileinfo.name);
    end;
  end;
  say("Done finding dirs");
  glob("/tmp/*");
  while(glob("/*") != "")
    if(fileinfo.directory == TRUE && fileinfo.name != "." && fileinfo.name != "..")
      say(fileinfo.name);
    end;
  end;
  say("Done finding dirs");
End;[/code]
Title: Re: Ayuda con glob
Post by: Prg on September 11, 2009, 04:04:41 PM
frame no reinicia el glob o si?

veo un frame(0) queriendo reiniciarlo... mmm
Title: Re: Ayuda con glob
Post by: josebita on September 11, 2009, 04:07:19 PM
Según la página del wiki hace falta el FRAME.

http://wiki.bennugd.org/index.php?title=Glob
Title: Re: Ayuda con glob
Post by: SplinterGU on September 11, 2009, 11:36:34 PM
yo te suguiero usas las nuevas funciones diropen, dirread, dirclose... manejas aperturas como si fueran handles de archivos, con lo que podes abrir varias a la ves y no necesitas resetear...
Title: Re: Ayuda con glob
Post by: Drumpi on September 12, 2009, 12:28:16 AM
¿No será que necesita un frame al 100%, o sea, FRAME o FRAME(100)?
No se, no lo he probado nunca.
Title: Re: Ayuda con glob
Post by: josebita on September 12, 2009, 11:16:35 AM
@Drumpi: He probado cambiando los valores de FRAME y el asunto no mejora.

@Splinter: Le echaré un ojo a las funciones, gracias.
Title: Re: Ayuda con glob
Post by: Windgate on September 12, 2009, 01:16:27 PM
Hablé de esto con PiXeL hace un tiempo, no conocía la existencia de glob hasta entonces, y no he tenido ocasión de probarlo sorry.

Yo me quedé con la idea que dice Drumpi... Además tampoco conocía eso de FRAME(100) xD
Title: Re: Ayuda con glob
Post by: SplinterGU on September 12, 2009, 02:48:11 PM
no entendi para que el FRAME?
Title: Re: Ayuda con glob
Post by: josebita on September 12, 2009, 03:02:00 PM
Según el wiki (sandman me ha confirmado en el foro inglés que con la revisión 27 esto funcionaba así) si haces un FRAME mientras estás haciendo un glob en un directorio, el glob se reinicia y te vuelve a dar los archivos desde el principio.
Title: Re: Ayuda con glob
Post by: SplinterGU on September 12, 2009, 03:15:23 PM
imposible... se equivoco... hay que corregir la wiki... frame nunca reseteo glob... ni siquiera en fenix...
Title: Re: Ayuda con glob
Post by: Drumpi on September 12, 2009, 08:25:06 PM
Pues apúntalo como sugerencia en la próxima release ;D
Más que nada para estandarizar las funciones, como get_id, etc...
Title: Re: Ayuda con glob
Post by: SplinterGU on September 12, 2009, 08:47:12 PM
no, no deberia ser...

las getid y collision tienen relacion con los frame, ya que la vida y muerte de los procesos y graficos que estos usan la tienen... entonces es logico que se reseteen en cada frame, ya que el estado de los mismos cambia en cada frame... pero esto no debe ser asi, con glob, que nada de relacion tiene con los frames ni con los procesos ni con los graficos...

asi que el funcionamiento actual es el correcto.

por otro lado, la funcion glob es obsoleta... hay que usar las nuevas funciones que dan mas control...
Title: Re: Ayuda con glob
Post by: Windgate on September 12, 2009, 08:51:40 PM
Lo de listar el contenido del directorio es algo que valoré en mi visor 3D para poder seleccionar el fichero de los existentes... Al estilo del FPG Edit que programó Prg.

Leí los problemas de glob y prescindí de usarlo, ¿Qué alternativas hay, de qué librería son?
Title: Re: Ayuda con glob
Post by: SplinterGU on September 12, 2009, 09:40:28 PM
no hay problemas con la glob... hay que usarlo correctamente y eso significa resetear cuando se quiere releer la misma carpeta...
Title: Re: Ayuda con glob
Post by: Windgate on September 13, 2009, 12:11:56 AM
¿Leer otro directorio para resetear es entonces la solución? Lo pregunto por curiosidad más que nada.

disculpame, esta vez no voy a poder ayudar, estoy un poco complicado por los proximos 2 meses con proyectos personales...

No lo había leído, ánimo Splinter, sabremos esperarte con paciencia, dejas el foro en buenas manos, estamos hechos unos grandes "trolasos"

http://www.youtube.com/watch?v=sHbAYzG8IoE

Me llamo Iván xD
Title: Re: Ayuda con glob
Post by: josebita on September 13, 2009, 01:43:34 AM
Menuda pedrada...
Title: Re: Ayuda con glob
Post by: TYCO on September 13, 2009, 08:36:42 AM
Quote from: SplinterGU on September 12, 2009, 08:47:12 PM
las getid y collision tienen relacion con los frame, ya que la vida y muerte de los procesos y graficos que estos usan la tienen... entonces es logico que se reseteen en cada frame, ya que el estado de los mismos cambia en cada frame...

Mmm... no se cambio que los SIGNAL tipo KILL (otros como SLEEP no sé) se aplicaran al instante??? antes de llegar al FRAME??? esto no afecta a esas que funciones que tienen relacion con los frames?
Title: Re: Ayuda con glob
Post by: Windgate on September 13, 2009, 01:56:14 PM
¿Las señales KILL ya no esperan al FRAME? No tenía conocimiento de eso, podría dar problemas para procesos que escriban algunos datos en fichero y puedan dejarse de escribir parte de ellos... Se podría arreglar con el ONEXIT pero... Es curioso cómo retorcemos los hilos y sacamos nuevos temas xD
Title: Re: Ayuda con glob
Post by: SplinterGU on September 13, 2009, 02:42:32 PM
Quote from: TYCO on September 13, 2009, 08:36:42 AM
Quote from: SplinterGU on September 12, 2009, 08:47:12 PM
las getid y collision tienen relacion con los frame, ya que la vida y muerte de los procesos y graficos que estos usan la tienen... entonces es logico que se reseteen en cada frame, ya que el estado de los mismos cambia en cada frame...

Mmm... no se cambio que los SIGNAL tipo KILL (otros como SLEEP no sé) se aplicaran al instante??? antes de llegar al FRAME??? esto no afecta a esas que funciones que tienen relacion con los frames?

No veo la relacion...

mientas vos en tu proceso, con collision y con getid no hagas un frame ningun proceso va a recibir ninguna señal... a menos que vos en tu mismo proceso lo hagas... y cuando haces un frame se resetea... sigo sin ver la relacion... no se a que vino el comentario...
Title: Re: Ayuda con glob
Post by: SplinterGU on September 13, 2009, 02:43:31 PM
Quote from: Windgate on September 13, 2009, 01:56:14 PM
¿Las señales KILL ya no esperan al FRAME? No tenía conocimiento de eso, podría dar problemas para procesos que escriban algunos datos en fichero y puedan dejarse de escribir parte de ellos... Se podría arreglar con el ONEXIT pero... Es curioso cómo retorcemos los hilos y sacamos nuevos temas xD

eso hace siglos no es asi... desde fenix que son instantaneas...
Title: Re: Ayuda con glob
Post by: osk on September 13, 2009, 03:09:34 PM
Quote from: Windgate on September 13, 2009, 12:11:56 AM
No lo había leído, ánimo Splinter, sabremos esperarte con paciencia, dejas el foro en buenas manos, estamos hechos unos grandes "trolasos"

http://www.youtube.com/watch?v=sHbAYzG8IoE

Me llamo Iván xD

Tremendo!! :D