int cbm2_kbd_init(void) { kbd_default_keymap(&CBM2keys); kbd_init_keymap(2); kbd_add_keymap(&CBM2keys, 0); kbd_add_keymap(&CBM2keys, 1); kbd_load_keymap(NULL, 0); return kbd_init(); }
int keyboard_init_return_fd(void) { char *ptr; keyboard_translatekeys(translatemode); /* Honour 'nosigint' setting */ /* Install default keyboard handler. */ __svgalib_keyboard_eventhandler = default_handler; __svgalib_open_devconsole(); __svgalib_kbd_fd = __svgalib_tty_fd; /* We are initialized. */ if (ioctl(__svgalib_kbd_fd, KDGKBMODE, &oldkbmode)) { printf("svgalib: cannot get keyboard mode.\n"); return -1; } tcgetattr(__svgalib_kbd_fd, &oldkbdtermios); newkbdtermios = oldkbdtermios; newkbdtermios.c_lflag &= ~(ICANON | ECHO | ISIG); newkbdtermios.c_iflag &= ~(ISTRIP | IGNCR | ICRNL | INLCR | IXOFF | IXON); newkbdtermios.c_cc[VMIN] = 0; /* Making these 0 seems to have the */ newkbdtermios.c_cc[VTIME] = 0; /* desired effect. */ tcsetattr(__svgalib_kbd_fd, TCSAFLUSH, &newkbdtermios); ioctl(__svgalib_kbd_fd, KDSKBMODE, K_MEDIUMRAW); keyboard_clearstate(); __svgalib_read_options(kbd_config_options, kbd_process_option); /* Check SVGALIB_KEYMAP env var */ if ( (ptr = getenv("SVGALIB_KEYMAP")) != 0) { kbd_load_keymap(ptr); } return __svgalib_kbd_fd; /* OK, return fd. */ }
static char *kbd_process_option(int option, int mode) { char *ptr; short type = 0; short ignore_type = 0; short flags = FMEF_AT_PRESS; int data = 0; int scancode = 0; int event_ok = 0; int n = 0; struct FakeMouseEvent *event; char keyname[MAX_KEYNAME_LEN]; switch (option) { case 0: /* kbd_fake_mouse_event */ if ( (ptr = strtok(NULL, " ")) == 0) { param_needed: fprintf(stderr, "svgalib: kbd-config: too few parameters for \'%s\'\n", kbd_config_options[option]); return ptr; } else if ( (scancode = __svgalib_mapkeyname(ptr)) == -1) { fprintf(stderr, "svgalib: kbd-config: \'%s\' is not a valid scancode\n", ptr); return ptr; } strncpy(keyname, ptr, MAX_KEYNAME_LEN); /* Find the event for this key if there is one*/ #ifdef DEBUG_KEYBOARD fprintf(stderr," Looking for fme for key \'%s\'... ", keyname); #endif for(n = 0; n < fme_used; n++) if(strcmp(fake_mouse_events[n]->keyname, keyname) == 0) break; if(n == fme_used) fme_used++; #ifdef DEBUG_KEYBOARD fprintf(stderr," found at #%d.\n", n); #endif read_event: if ( (ptr = strtok(NULL, " ")) == 0) { if ( event_ok ) break; else goto param_needed; } if ( ! strcasecmp(ptr, "both")) { flags |= FMEF_AT_BOTH; goto read_event; } else if ( ! strcasecmp(ptr, "up")) { flags &= ~FMEF_AT_PRESS; flags &= ~FMEF_AT_BOTH; goto read_event; } else if ( ! strcasecmp(ptr, "down")) { flags |= FMEF_AT_PRESS; flags &= ~FMEF_AT_BOTH; goto read_event; } else if ( ! strcasecmp(ptr, "repeat")) { flags |= FMEF_REPEAT; goto read_event; } else if ( ! strcasecmp(ptr, "discrete")) { flags &= ~FMEF_REPEAT; goto read_event; } else if ( ! strcasecmp(ptr, "button")) { type = FME_TYPE_BUTTON; if ( (ptr = strtok(NULL, " ")) == 0) goto param_needed; if ( (data = atoi(ptr)) == 0 || data > 10) { fprintf(stderr, "svgalib: kbd-config: \'%s\' is not a valid mouse button\n", ptr); return ptr; } store_event: #ifdef DEBUG_KEYBOARD printf(" Fake Mouse Event: scancode: %ld; type: %ld; data: %ld; flags: %ld\n", (long)scancode, (long)type, (long)data, (long)flags); #endif if ( ! expand_events(n)) return ptr; event = &fake_mouse_events[n][fme_numberof[n] - 1]; event -> type = type; event -> flags = flags; event -> data = data; event -> scancode = scancode; strcpy(event -> keyname, keyname); event_ok = 1; goto read_event; } else if ( ! strcasecmp(ptr, "deltax")) { type = FME_TYPE_DELTAX; ignore_type = FME_TYPE_IGNOREX; process_delta: if ( (ptr = strtok(NULL, " ")) == 0) goto param_needed; if ( ! strcasecmp(ptr, "off")) { type = ignore_type; data = 1; goto store_event; } else if ( ! strcasecmp(ptr, "on")) { type = ignore_type; data = 0; goto store_event; } else if ( (data = atoi(ptr)) == 0) { fprintf(stderr, "svgalib: kbd-config: \'%s\' is not a valid delta\n", ptr); return ptr; } goto store_event; } else if ( ! strcasecmp(ptr, "deltay")) { type = FME_TYPE_DELTAY; ignore_type = FME_TYPE_IGNOREY; goto process_delta; } else if ( ! strcasecmp(ptr, "deltaz")) { type = FME_TYPE_DELTAZ; ignore_type = FME_TYPE_IGNOREZ; goto process_delta; } else if ( ! strcasecmp(ptr, "button1")) { type = FME_TYPE_BUTTON1; process_button: if ( (ptr = strtok(NULL, " ")) == 0) goto param_needed; if ( ! strcasecmp(ptr, "pressed")) { data = 1; } else if ( ! strcasecmp(ptr, "released")) { data = 0; } else { fprintf(stderr, "svgalib: kbd-config: \'%s\' is not a legal parameter for command " "\'button[123]\'. Should be either \'pressed\' or \'released\'\n", ptr); return ptr; } goto store_event; } else if ( ! strcasecmp(ptr, "button2")) { type = FME_TYPE_BUTTON2; goto process_button; } else if ( ! strcasecmp(ptr, "button3")) { type = FME_TYPE_BUTTON3; goto process_button; } else if ( ! event_ok) { fprintf(stderr, "svgalib: kbd-config: illegal mouse event: \'%s\'\n", ptr); return ptr; } else return ptr; break; case 1: /* kbd_keymap */ if ( (ptr = strtok(NULL, " ")) == 0 ) { goto param_needed; } else if(kbd_load_keymap(ptr)) return ptr; break; case 2: /* kbd_only_root_keymaps */ #ifdef DEBUG_KEYBOARD fprintf(stderr, " Setting rootkeymaps to 1.\n"); #endif rootkeymaps = 1; break; } return strtok(NULL, " "); };