home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 451.lha / MuchMorePoPa_v2.7 / MMInput.asm < prev    next >
Assembly Source File  |  1990-12-08  |  2KB  |  63 lines

  1. ;-------------------------------------------------------------------------
  2. ;MuchMore's InputHandler
  3. ;© 1989 by Fridtjof Siebert
  4. ;compiles with a68k
  5. ;-------------------------------------------------------------------------
  6.  
  7.   XDEF MMInputHandler ; Then Handler Procedure
  8.   XDEF WakeUpSignal   ; Signal to be send to awake MuchMore (byte)
  9.   XDEF SigTask        ; TaskPtr to MuchMore's main task
  10.   XDEF Sleeping       ; true while waiting for alt-ESC
  11.  
  12. ie_nextevent = 0;
  13. ie_class     = 4;
  14. ie_subclass  = 5;
  15. ie_code      = 6;
  16. ie_qualifier = 8;
  17.  
  18. Signal = -30-294;
  19.  
  20.  
  21. ;  InputData: STRUCT
  22. ;    wakeUpSignal: SHORTINT;      (* Signal that's wakes us up*)
  23. ;    sigTask: e.TaskPtr;          (* MM's main task                    *)
  24. ;    sleeping: BOOLEAN;           (* TRUE while we sleep               *)
  25. ;  END;
  26.  
  27.  
  28. ; offsets in InputData
  29.  
  30. WakeUpSignal = 0;
  31. SigTask      = 2;
  32. Sleeping     = 6;
  33.  
  34.  
  35. MMInputHandler:
  36.  
  37.         move.l  A3,-(A7);  we'll use A3
  38.         move.l  A0,-(A7);  presave eventlist;
  39.         move.l  A1,A3;     save pointer to InputData
  40.         tst.b   Sleeping(A3);
  41.         beq.s   rts;
  42. loop:   cmp.b   #$10,ie_qualifier+1(A0); test if lAlt is set end rest is clear
  43.         bne     next;
  44.         cmp.w   #$45,ie_code(A0); test ESC
  45.         bne.s   next;
  46.         clr.w   ie_code(A0);
  47.         move.l  $4,A6;
  48.         move.l  SigTask(A3),A1;
  49.         moveq   #0,D0;
  50.         move.b  WakeUpSignal(A3),D1;
  51.         bset    D1,D0;
  52.         jsr     Signal(A6);
  53.         sf      Sleeping(A3);
  54.         bra.s   rts;
  55. next:   move.l  ie_nextevent(A0),A0;
  56.         move.l  A0,D0;
  57.         bne.s   loop;
  58. rts:    move.l  (A7)+,D0; return EventList
  59.         move.l  (A7)+,A3; restore A3
  60.         rts;
  61.  
  62.         end;
  63.