Autor Tema: adopt y set_father  (Leído 2729 veces)

Packo_z007

  • Jr. Member
  • **
  • Mensajes: 90
  • Karma: 3
adopt y set_father
« en: Septiembre 23, 2008, 04:28:55 pm »
Buenas. Queria sugerir la inclusion de estas funciones. Serian otra opcion para compensar la existencia de procesos huerfanos ademas de signal(0,señal).Saludos
[STRING] *PANIC Too many strings, allocating more space

panreyes

  • Administrator
  • *****
  • Mensajes: 2232
  • Karma: 81
    • panreyes.com
Re: adopt y set_father
« Respuesta #1 en: Septiembre 23, 2008, 04:54:44 pm »
Son variables locales.
Puedes usar father=get_id(id_proceso); o son=get_id(id_proceso);

Testeado en 0.93a, no lo he mirado en bennu.
[Editado]
En Bennu, igual :)

Packo_z007

  • Jr. Member
  • **
  • Mensajes: 90
  • Karma: 3
Re: adopt y set_father
« Respuesta #2 en: Septiembre 23, 2008, 04:59:46 pm »
Si podes cambiar el valor de las variables pero nose como funciona signal. Mira este codigo:

Con la "p" cambias el padre del ultimo cuadrado.. con la k matas el arbol de procesos a partir del segnudo.
[code language="bennu"]Program DataBase;
private
   Paused;
   proc;
end
begin
   set_fps(24,1);
   set_mode(640,480,16);
   pr1();
   repeat
      if(exists(type pr2) && key(_k))
         signal(type pr2,s_kill_tree);
      end
      frame;
   until(key(_esc))
   let_me_alone();
end

process pr1();
begin
   x = 100;
   y = 200;
   graph = new_map(64,64,16);
   map_clear(file,graph,rgb(255,255,255));
   pr2();
   loop
      frame;
   end
end

process pr2();
begin
   graph = new_map(64,64,16);
   map_clear(file,graph,rgb(204,255,255));
   pr3();
   loop
      x = father.x+50;
      y = father.y+50;
      frame;
   end
end
process pr3();
begin
   graph = new_map(64,64,16);
   map_clear(file,graph,rgb(153,255,255));
   loop
      if(key(_p));
         father = father.father;
         break;
      end
      x = father.x+100;
      y = father.y+100;
      frame;
   end
   loop
      x = father.x+100;
      y = father.y+100;
      frame;
   end
end[/code]

No digo que no se pueda hacer con variables (la verdad no lo se).. pero evidentemente hay que cambiar algo mas que que el valor de father, por eso seria comoda una funcion.Saludos
[STRING] *PANIC Too many strings, allocating more space

panreyes

  • Administrator
  • *****
  • Mensajes: 2232
  • Karma: 81
    • panreyes.com
Re: adopt y set_father
« Respuesta #3 en: Septiembre 23, 2008, 05:14:57 pm »
Ya veo... Me supongo que los árboles de procesos estarán por otro lado y no funcionan cambiando father y son.

Na, a ver si pasa Splinter por aquí y le da luz al asunto :)

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12870
  • Karma: 377
Re: adopt y set_father
« Respuesta #4 en: Septiembre 23, 2008, 08:24:16 pm »
yo sugiero no hacer eso, ya que es de uso interno... se supone que son de lectura... pero si insisten en querer tocarlos... no solo estan los padres, tambien estan los hermanos menores y mayores... resumiendo...

1) actualizar "father"...
2) actualizar "son" en "father" nuevo... (si corresponde)
3) actualizar "bigbro" y "smallbro"... (segun corresponda)
4) actualizar "bigbro" y/o "smalbro" en el "smallbro" y/o "bigbro" (segun corresponda) de mi anterior "father"
5) actualizar "father" en todos mis hermanos (mayores y menores)
6) actualizar "bigbro" y/o "smallbro" en el mas joven y en el mas viejo de mis hermanos (si corresponde)

esto era lo que se hacia antes... e imagino que se daran cuenta porque se elimino...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Packo_z007

  • Jr. Member
  • **
  • Mensajes: 90
  • Karma: 3
Re: adopt y set_father
« Respuesta #5 en: Septiembre 23, 2008, 08:40:59 pm »
En una de esas comienzo a hacer una funcion asi.. ¿se puede acceder de alguna forma a las variables locales o globales de bennu desde una dll?(sin pasar como parametro un puntero por cada variable)
[STRING] *PANIC Too many strings, allocating more space

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12870
  • Karma: 377
Re: adopt y set_father
« Respuesta #6 en: Septiembre 23, 2008, 08:43:41 pm »
a que te referis?
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Packo_z007

  • Jr. Member
  • **
  • Mensajes: 90
  • Karma: 3
Re: adopt y set_father
« Respuesta #7 en: Septiembre 23, 2008, 08:49:12 pm »
La verdad es que no se practicamente nada acerca de la programacion de dlls. ¿Hay alguna forma de pasar como parametro a una funcion de una dll el id un proceso y solo con eso acceder a sus variables locales?

¿son accesibles las variables globales declaradas en bennu desde una dll?
[STRING] *PANIC Too many strings, allocating more space

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12870
  • Karma: 377
Re: adopt y set_father
« Respuesta #8 en: Septiembre 23, 2008, 09:06:52 pm »
claro que si, cada funcion de dll, tiene 2 parametros default...

1) puntero a la estructura de instancia del proceso llamador... INSTANCE *
2) un array de enteros con los parametros pasados a la funcion

Si, claro que se pueden acceder a las variables globales y a las locales, no se puede a las privadas, ni a las publicas... (o si se puede, pero no es recomendable, y no se da facilidades para su acceso, ya que se supone no es seguro...)

busca en la seccion de documentacion como hacer dlls, hay unos pequeños cambios al sistema actual (final) pero la base esta perfectamente descripta, luego lo demas son cosas muy simples de tocar...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Packo_z007

  • Jr. Member
  • **
  • Mensajes: 90
  • Karma: 3
Re: adopt y set_father
« Respuesta #9 en: Septiembre 23, 2008, 09:16:48 pm »
Gracias. Dejo el codigo de adopt_tree por si a alguien le sirve.. voy a ver si lo puedo convertir en dll.

[code language="bennu"]function adopt_tree(dad,child)
begin
   if(child.father)
      if(child.smallbro && child.bigbro)
         child.bigbro.smallbro = child.smallbro;
         child.smallbro.bigbro = child.bigbro;
      elseif(child.smallbro)
         child.smallbro.bigbro = 0;
      elseif(child.bigbro)
         child.bigbro.smallbro = 0;
      else
         child.father.son = 0;
      end
   end
   child.father = dad;
   child.smallbro = 0;
   child.bigbro = dad.son;
   dad.son = child;
   child.bigbro.smallbro = child;
end[/code]
« última modificación: Septiembre 23, 2008, 09:26:48 pm por Packo_z007 »
[STRING] *PANIC Too many strings, allocating more space

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12870
  • Karma: 377
Re: adopt y set_father
« Respuesta #10 en: Septiembre 23, 2008, 09:22:22 pm »
no se si te falta algo, pero tene en cuenta que esta funcion la tenes que llamar por cada uno de los hijos huerfanos...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Packo_z007

  • Jr. Member
  • **
  • Mensajes: 90
  • Karma: 3
Re: adopt y set_father
« Respuesta #11 en: Septiembre 23, 2008, 09:26:12 pm »
La idea de la funcion es adoptar el arbol. Edito el nombre..
[STRING] *PANIC Too many strings, allocating more space