+#include <crxstd.h>
+#include <stdio.h>
+#include <signal.h>
+#include <string.h>
+#include <errno.h>
+#include <arch.h>
+
+void _kbd_int_handler(int);
+
+int _int_register(void)
+{
+ struct sigaction sa;
+ int ret_val;
+
+ memset(&sa, 0, sizeof(sa));
+
+ sa.sa_handler = _kbd_int_handler;
+ sigemptyset(&(sa.sa_mask));
+ sigaddset(&(sa.sa_mask), INT_KEYBOARD);
+
+ if(sigaction(SIGHWINT, &sa, NULL) < 0) {
+ ret_val = -errno;
+ } else {
+ ret_val = 0;
+ }
+
+ return(ret_val);
+}
+
+void _kbd_int_handler(int signal)
+{
+
+}
+
int kbd_main(int argc, char *argv[])
{
- /* FIXME: Handle interrupts, IPC messages */
- for(;;);
+ struct cxmsg msg;
+ int err;
+
+ err = _int_register();
+
+ if(!err) {
+ printf("Keyboard interrupt handler registered\n");
+
+ while(1) {
+ err = cxrecv(PID_ANY, &msg);
+
+ if(err > 0) {
+ /* FIXME: Handle received message */
+ }
+ }
+ } else {
+ printf("Could not register keyboard interrupt handler\n");
+ }
return(0);
}