For those not following all the cvs logs: I've added a new function
to Nasal a few days ago: removelistener(). It takes one argument --
the unique id number of a listener as returned by setlistener():

  var foo = setlistener("/sim/foo", die);
  ...
  removelistener(foo);


This can be used to remove all listeners in an <unload> part that
were set by the <load> part of a scenery object:

  <load>
          listener = [];
          append(listener, setlistener("/sim/foo", die));
          append(listener, setlistener("/sim/bar", func {});
          ...
  </load>

  <unload>
          foreach (l; listener) { removelistener(l) }
  </unload>


screen.nas stores all relevant listener ids in a hash, so that other
parts can, for example, remove the mapping of pilot messages to
screen and voice):

  removelistener(screen.listener["pilot"]);


The id is 0 for the first listener, 1 for the second etc. removelistener()
returns the total number of remaining listeners, or nil on error (i.e. if
there was no listener known with this id). This can be used for statistics:

  id = setlistener("/sim/signals/quit", func {});  # let's not count this one
  num = removelistener(id);

  print("there were ", id, " Nasal listeners attached since fgfs was started");
  print("of which ", num, " are still active");
  
m.


-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
Flightgear-devel mailing list
Flightgear-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/flightgear-devel

Reply via email to