MODULE EventsMemoryLog; (** AUTHOR "staubesv"; PURPOSE "Log system events in memory"; *)
(**
 * History:
 *
 *	14.03.2007	First release (staubesv)
 *)

IMPORT
	Modules, Events, EventsUtils;

CONST

	(* Logsize = MaxNofWrapper * EventsPerWrapper events *)
	MaxNofWrapper = 16;
	EventsPerWrapper = 256;

TYPE

	EventLogger = OBJECT(Events.Sink)
	VAR
		events : EventsUtils.EventContainer;

		PROCEDURE Handle(event : Events.Event);
		BEGIN
			IF ~events.IsFull() THEN
				events.Handle(event);
			END;
		END Handle;

		PROCEDURE &Init*;
		BEGIN
			name := "EventLog";
			NEW(events, MaxNofWrapper, EventsPerWrapper);
		END Init;

	END EventLogger;

VAR
	eventLog- : EventLogger;

PROCEDURE GetEvents*() : EventsUtils.EventContainer;
BEGIN
	RETURN eventLog.events;
END GetEvents;

PROCEDURE Clear*;
BEGIN
	eventLog.events.Clear;
END Clear;

PROCEDURE Cleanup;
BEGIN
	Events.Unregister(eventLog);
END Cleanup;

BEGIN
	Modules.InstallTermHandler(Cleanup);
	NEW(eventLog);
	Events.Register(eventLog);
END EventsMemoryLog.