;-------------------------------------------------------------------------
;MuchMore's InputHandler
;© 1989 by Fridtjof Siebert
;compiles with a68k
;-------------------------------------------------------------------------

  XDEF MMInputHandler ; Then Handler Procedure
  XDEF WakeUpSignal   ; Signal to be send to awake MuchMore (byte)
  XDEF SigTask        ; TaskPtr to MuchMore's main task
  XDEF Sleeping       ; true while waiting for alt-ESC

ie_nextevent = 0;
ie_class     = 4;
ie_subclass  = 5;
ie_code      = 6;
ie_qualifier = 8;

Signal = -30-294;


;  InputData: STRUCT
;    wakeUpSignal: SHORTINT;      (* Signal that's wakes us up*)
;    sigTask: e.TaskPtr;          (* MM's main task                    *)
;    sleeping: BOOLEAN;           (* TRUE while we sleep               *)
;  END;


; offsets in InputData

WakeUpSignal = 0;
SigTask      = 2;
Sleeping     = 6;


MMInputHandler:

        move.l  A3,-(A7);  we'll use A3
        move.l  A0,-(A7);  presave eventlist;
        move.l  A1,A3;     save pointer to InputData
        tst.b   Sleeping(A3);
        beq.s   rts;
loop:   cmp.b   #$10,ie_qualifier+1(A0); test if lAlt is set end rest is clear
        bne     next;
        cmp.w   #$45,ie_code(A0); test ESC
        bne.s   next;
        clr.w   ie_code(A0);
        move.l  $4,A6;
        move.l  SigTask(A3),A1;
        moveq   #0,D0;
        move.b  WakeUpSignal(A3),D1;
        bset    D1,D0;
        jsr     Signal(A6);
        sf      Sleeping(A3);
        bra.s   rts;
next:   move.l  ie_nextevent(A0),A0;
        move.l  A0,D0;
        bne.s   loop;
rts:    move.l  (A7)+,D0; return EventList
        move.l  (A7)+,A3; restore A3
        rts;

        end;
