#include #include #include #include #include #include #include #include #include #include static struct MsgPort *keyboardMessagePort = NULL; static struct IOStdReq *keyboardIO = NULL; static struct Interrupt keyboardInterrupt; extern far ULONG keyboardPressed; extern struct InputEvent * __asm stupidKeyboardHandler( register __a0 struct InputEvent *input, register __a1 APTR id ); void setupKeyboard(void) { if (keyboardMessagePort = CreatePort(NULL, NULL)) { if (keyboardIO = (struct IOStdReq *)CreateExtIO( keyboardMessagePort, sizeof(struct IOStdReq) )) { // OpenDevice returns 0 if successful if (!OpenDevice( "input.device", 0, (struct IORequest *)keyboardIO, 0 )) { keyboardInterrupt.is_Node.ln_Type = NT_INTERRUPT; keyboardInterrupt.is_Node.ln_Pri = 100; keyboardInterrupt.is_Node.ln_Name = (STRPTR)"cool bun"; keyboardInterrupt.is_Code = (void (*)())&stupidKeyboardHandler; keyboardIO->io_Data = (void *)&keyboardInterrupt; keyboardIO->io_Command = IND_ADDHANDLER; DoIO((struct IORequest *)keyboardIO); } } } } void teardownKeyboard(void) { if (keyboardIO) { keyboardIO->io_Data = (void *)&keyboardInterrupt; keyboardIO->io_Command = IND_REMHANDLER; DoIO((struct IORequest *)keyboardIO); CloseDevice((struct IORequest *)keyboardIO); DeleteIORequest((struct IORequest *)keyboardIO); keyboardIO = NULL; } if (keyboardMessagePort) { DeleteMsgPort(keyboardMessagePort); keyboardMessagePort = NULL; } } int main(void) { setupKeyboard(); while (!keyboardPressed) {} teardownKeyboard(); return 0; }