#include #include #include #include #include void HandlerInterface(); struct MsgPort *inPort; struct IOStdReq *inReq; struct Interrupt HandlerData = { { NULL,NULL,0,55,NULL }, NULL, &HandlerInterface }; int down = NULL; BOOL on = TRUE; struct InputEvent *myHandler(event, data) struct InputEvent *event; APTR data; { register struct InputEvent *e, *oe = NULL, *ne = NULL; Forbid(); for(e=event; e != NULL; e = ne) { ne = e->ie_NextEvent; if(on && e->ie_Class == IECLASS_RAWMOUSE && (e->ie_Code & IECODE_COMM_CODE_LAST) == IECODE_RBUTTON) { if(e->ie_Code & IECODE_UP_PREFIX) /* Loslass-Event: entfernen */ { if(oe) oe->ie_NextEvent = ne; else event = ne; e = 0; } else /* sonst: kippen */ { e->ie_Code = down | IECODE_RBUTTON; down = IECODE_UP_PREFIX - down; } } else if(e->ie_Class == IECLASS_RAWKEY && e->ie_Code == 0x42 && e->ie_Qualifier & IEQUALIFIER_LSHIFT) { on = !on; /* Lshift-Tab: Ein/Aus */ if(oe) oe->ie_NextEvent = ne; else event = ne; e = 0; } if(e) oe = e; } Permit(); return(event); } void HandlerInterface() { #asm movem.l a4,-(sp) jsr _geta4# movem.l a0/a1,-(sp) jsr _myHandler addq.l #8,sp move.l (sp)+,a4 #endasm } Init() { inPort = CreatePort(0,0); inReq = CreateStdIO(inPort); OpenDevice("input.device",0,inReq,0); inReq->io_Command = IND_ADDHANDLER; inReq->io_Data = (APTR)&HandlerData; DoIO(inReq); } Quit() { inReq->io_Command = IND_REMHANDLER; inReq->io_Data = (APTR)&HandlerData; DoIO(inReq); CloseDevice(inReq); DeleteStdIO(inReq); DeletePort(inPort); exit(0); } main() { Init(); Wait(SIGBREAKF_CTRL_C); Quit(); }