;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;   Handler für die InputEvents
;
;   von     Jürgen Mülbert
;	    Rathausstr.42
;      6803 Edingen
;	    Tel 06203/81467
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;   INCLUDES nicht Listen

    NOLIST

    include "exec/types.i"
    include "exec/lists.i"
    include "exec/nodes.i"
    include "exec/tasks.i"
    include "exec/ports.i"
    include "exec/io.i"
    include "exec/libraries.i"

    include "devices/timer.i"
    include "devices/inputevent.i"

    LIST

;   Die benötigten Bibliotheks Funktionen

Signal	      EQU -324
AllocSignal   EQU -330
FindTask      EQU -294

    SECTION Handler,CODE

    XDEF    _Handler
    XDEF    _InitHandler

;   Die sind alle beim C-Teil definiert

    XREF    _SysBase
    XREF    _IntuitionBase
    XREF    _cleanup

    XREF    _ev_signal
    XREF    _meintask

;   Hier geht los

_InitHandler:

    movem.l d2/d3/a4,-(sp)
    jsr     _geta4#

    move.l  _SysBase,a6
    move.l  #0,a1
    CALLLIB FindTask
    move.l  d0,_meintask
    moveq   #-1,d0
    CALLLIB AllocSignal
    cmpi    #-1,d0	    Wenn kein Signal mehr frei ist
    beq     ende	    wird das Programm beendet
    clr.l   d1
    bset    d0,d1
    move.l  d1,_ev_signal

    movem.l (sp)+,d2/d3/a4
    rts

ende:
    move.w #20,-(sp)
    jsr _cleanup
    add.w   #2,sp
    rts 	    Wird nie erreicht !


;   Hier ist der wichtigste Teil !!

_Handler:
    movem.l d2/d3/a4,-(sp)
    jsr     _geta4#

    move.l  a0,-(sp)
    clr.l   d0
    move.b  ie_Class(a0),d0
    cmpi    #IECLASS_RAWMOUSE,d0    Wenn was mit der Maus passiert
    bne.s   1$			    den Task wecken
    move.l  _ev_signal,d0
    move.l  _meintask,a1
    move.l  _SysBase,a6
    CALLLIB Signal
1$:
    move.l  (sp)+,d0		    Event weitermelden
    movem.l (sp)+,d2/d3/a4
    rts

