
import java.io.*;

import  Event;

class EventEntry {
  public Event evt;
  public EventEntry next;
}

public class EventQueue extends Object {
  private EventEntry newest;
  private EventEntry oldest;
    public int entnum;

    public void EventQueue() {
	newest = null;
	oldest = null;
	entnum = 0;
    }

    public synchronized void append(int evt, int sev, Object o) {
      Event e = new Event(evt,sev,o);
      EventEntry ent = new EventEntry();
      ent.evt = e;
      ent.next = null;
      if (newest==null) { 
	  oldest = ent;
	  newest = ent;
      }
      else {
	  newest.next = ent;
	  newest = ent;
      }
      entnum++;
      notify();
    }

    public synchronized Event read() {
      Event e;
      if (oldest==null) {
        e = null;
      }
      else {
        e = oldest.evt;
        oldest = oldest.next;
	entnum--;
	if (entnum==0) { newest = null; }
      }
      return e;
    }

    public synchronized Event waitEvent() {
      Event e;
      while ((e=read())==null) {
	  try {
            wait();
          } catch (Exception exc) { System.out.println("waitEvent: Exception: "+e); }
      }
      return e;
    }

    public synchronized void println(PrintStream ps) {
	EventEntry ent = oldest;
	while (ent!=null) {
	    ent.evt.println(ps);
	    ent = ent.next;
	}
    }

}

