78 lines
1.9 KiB
C
78 lines
1.9 KiB
C
|
#include <clib/alib_protos.h>
|
||
|
#include <clib/dos_protos.h>
|
||
|
#include <clib/exec_protos.h>
|
||
|
#include <clib/graphics_protos.h>
|
||
|
|
||
|
#include <exec/exec.h>
|
||
|
#include <exec/types.h>
|
||
|
#include <exec/memory.h>
|
||
|
#include <exec/interrupts.h>
|
||
|
|
||
|
#include <devices/input.h>
|
||
|
|
||
|
#include <intuition/intuition.h>
|
||
|
|
||
|
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;
|
||
|
}
|