:- category(monitor, implements(monitorp)). :- info([ version is 1.0, authors is 'Paulo Moura', date is 2000/7/24, comment is 'Monitor predicates.']). :- private(spy_point_/4). :- dynamic(spy_point_/4). :- mode(spy_point_(?event, ?object, ?callable, ?object), zero_or_more). :- info(spy_point_/4, [ comment is 'Stores current spy points.', argnames is ['Event', 'Object', 'Message', 'Sender']]). monitor_activated :- self(Self), once(current_event(_, _, _, _, Self)). activate_monitor :- self(Self), abolish_events(before, _, _, _, Self), abolish_events(after, _, _, _, Self), forall( ::spy_point_(Event, Object, Message, Sender), define_events(Event, Object, Message, Sender, Self)). suspend_monitor :- self(Self), abolish_events(before, _, _, _, Self), abolish_events(after, _, _, _, Self). reset_monitor :- self(Self), abolish_events(before, _, _, _, Self), abolish_events(after, _, _, _, Self). ::retractall(spy_point_(_, _, _, _)). spy_point(Event, Object, Message, Sender) :- ::spy_point_(Event, Object, Message, Sender). set_spy_point(Event, Object, Message, Sender) :- ::retractall(spy_point_(Event, Object, Message, Sender)), once((var(Event); Event = before; Event = after)), ::assertz(spy_point_(Event, Object, Message, Sender)). del_spy_points(Event, Object, Message, Sender) :- ::retractall(spy_point_(Event, Object, Message, Sender)). :- end_category.