/*
        IDCMP.h

        V1.00 - 041196  Kimmo Teräväinen
        -----   ------  ----------------
        V0.01   041196  Started
        V0.02   051196  Renamed Handle_IDCMP() -> IDCMP()
        V0.04   051196  Added Is_Active()-routine, remove int active
        V0.05   071196  Renamed Is_Active() -> Active()
        V0.07   130297  Added FlushMessages.

NOTE:   Abstract class to ease handling of IDCMP-messages.

USE:    Main program call it like in example below.
example:
    {
      int rt,terminated=FALSE;

      while(!terminated) {
        msg=(IntuiMessage *)GetMessage(wnd->UserPort);

        if(rt=???.IDCMP(msg)==IDCMP_NOT_DONE)
          if(rt=???.IDCMP(msg)==IDCMP_NOT_DONE)
            if(rt=???.IDCMP(msg)==IDCMP_NOT_DONE)
              switch(msg) {
                case IDCMP_CLOSEWINDOW: terminated=TRUE; break;
              }
        if(rt==IDCMP_TERMINATED) terminated=TRUE;
        if(rt!=IDCMP_REPLYED)    ReplyMsg(msg);
      }
    }
*/

#ifndef ACL_IDCMP
#define ACL_IDCMP

#include <intuition/intuition.h>

const int IDCMP_NOT_DONE   = 0;
const int IDCMP_DONE       = 1;
const int IDCMP_REPLYED    = 2;
const int IDCMP_TERMINATED =-1;

class cIDCMP {
public:

  void FlushMessages(Window *);

  virtual int Active() const = 0;

  virtual int IDCMP(const IntuiMessage *) = 0;  // Message handler
};

#endif