adopt y set_father

Started by Packo_z007, September 23, 2008, 04:28:55 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Packo_z007

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

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

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

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

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

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

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Packo_z007

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

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

#9
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]
[STRING] *PANIC Too many strings, allocating more space

SplinterGU

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

La idea de la funcion es adoptar el arbol. Edito el nombre..
[STRING] *PANIC Too many strings, allocating more space