/* V1.22  */
/* Handler.c Project Calgor */

#include <hold/extra.h>
#include <exec/libraries.h>
#include <intuition/intuition.h>
#include <devices/inputevent.h>
#include <clib/exec_protos.h>
#include <clib/console_protos.h>
#include <signal.h>

extern void alert(TEXT *);
extern void clearkeybuf(void);
extern void clean_local(void);
#ifdef TEST
extern void write_log(TEXT *,SHORT);
#endif
extern struct Library *ConsoleDevice;
extern struct Window *my_window;
extern UBYTE *keybufptr;

void handler(int);

struct InputEvent ievent = { NULL };

SHORT squeek[2];
BOOL lmbpress;
BOOL keypress;

void handler(int pulse)
{
long actual;
/* SHORT lop; */
ULONG class;
USHORT code;
SHORT mousex, mousey;
struct IntuiMessage *message;

      keypress = lmbpress = FALSE;
      squeek[0]=squeek[1]=0;
      actual = 0L;
      while(message = (struct IntuiMessage *)
        GetMsg(my_window->UserPort)){
          class = message->Class;
          code = message->Code;
          mousex = message->MouseX;
          mousey = message->MouseY;
          ievent.ie_position.ie_addr = *((APTR *) message->IAddress);
          ievent.ie_Class = IECLASS_RAWKEY;
          ievent.ie_Code  = message->Code;
          ievent.ie_Qualifier = message->Qualifier;
          ReplyMsg( (struct Message *) message);
          switch(class){
            case(IDCMP_RAWKEY):
              keypress = TRUE;
              actual=RawKeyConvert(&ievent,keybufptr,(KEYBUFF-1),NULL);
              if(actual==-1)
                clearkeybuf();
              /* Check Key */
              /* for(lop=0;lop<actual;lop++)
                  printf("%X ",*(keybufptr+lop) );
                  printf("\n"); */
              break;
            case(IDCMP_MOUSEBUTTONS):
               switch(code){
                 case SELECTDOWN:
                   squeek[0]=mousex;   /* Squeek 0 x coordinate */
                   squeek[1]=mousey;   /* Squeek 1 y coordinate */
                    lmbpress=TRUE;
                   break;
                 case SELECTUP:
                   break;
                 case MENUDOWN:
                   break;
                 case MENUUP:
                   break;
                 default:
                   break;
               }
            case(IDCMP_ACTIVEWINDOW):
              lmbpress=TRUE;
              break;
            case(IDCMP_INACTIVEWINDOW):
              break;
            default:
              break;
          }
      }
      #ifdef TEST
        write_log("handler PASSED\n",PRIFOUR);
      #endif
      SetSignal(0L, 0xFFFFFFFFL);
      signal(SIGINT,handler);
}
