void keyboard_get_values(const char *pre, int fd) { if (field_by_value(keyboard_field_tab, &kbtype)->flags & FLG_GET) if (ioctl(fd, WSKBDIO_GTYPE, &kbtype) < 0) warn("WSKBDIO_GTYPE"); bell.which = 0; if (field_by_value(keyboard_field_tab, &bell.pitch)->flags & FLG_GET) bell.which |= WSKBD_BELL_DOPITCH; if (field_by_value(keyboard_field_tab, &bell.period)->flags & FLG_GET) bell.which |= WSKBD_BELL_DOPERIOD; if (field_by_value(keyboard_field_tab, &bell.volume)->flags & FLG_GET) bell.which |= WSKBD_BELL_DOVOLUME; if (bell.which != 0 && ioctl(fd, WSKBDIO_GETBELL, &bell) < 0) warn("WSKBDIO_GETBELL"); dfbell.which = 0; if (field_by_value(keyboard_field_tab, &dfbell.pitch)->flags & FLG_GET) dfbell.which |= WSKBD_BELL_DOPITCH; if (field_by_value(keyboard_field_tab, &dfbell.period)->flags & FLG_GET) dfbell.which |= WSKBD_BELL_DOPERIOD; if (field_by_value(keyboard_field_tab, &dfbell.volume)->flags & FLG_GET) dfbell.which |= WSKBD_BELL_DOVOLUME; if (dfbell.which != 0 && ioctl(fd, WSKBDIO_GETDEFAULTBELL, &dfbell) < 0) warn("WSKBDIO_GETDEFAULTBELL"); if (field_by_value(keyboard_field_tab, &kbmap)->flags & FLG_GET) { kbmap.maplen = KS_NUMKEYCODES; if (ioctl(fd, WSKBDIO_GETMAP, &kbmap) < 0) warn("WSKBDIO_GETMAP"); } repeat.which = 0; if (field_by_value(keyboard_field_tab, &repeat.del1)->flags & FLG_GET) repeat.which |= WSKBD_KEYREPEAT_DODEL1; if (field_by_value(keyboard_field_tab, &repeat.delN)->flags & FLG_GET) repeat.which |= WSKBD_KEYREPEAT_DODELN; if (repeat.which != 0 && ioctl(fd, WSKBDIO_GETKEYREPEAT, &repeat) < 0) warn("WSKBDIO_GETKEYREPEAT"); dfrepeat.which = 0; if (field_by_value(keyboard_field_tab, &dfrepeat.del1)->flags & FLG_GET) dfrepeat.which |= WSKBD_KEYREPEAT_DODEL1; if (field_by_value(keyboard_field_tab, &dfrepeat.delN)->flags & FLG_GET) dfrepeat.which |= WSKBD_KEYREPEAT_DODELN; if (dfrepeat.which != 0 && ioctl(fd, WSKBDIO_GETKEYREPEAT, &dfrepeat) < 0) warn("WSKBDIO_GETKEYREPEAT"); if (field_by_value(keyboard_field_tab, &ledstate)->flags & FLG_GET) if (ioctl(fd, WSKBDIO_GETLEDS, &ledstate) < 0) warn("WSKBDIO_GETLEDS"); if (field_by_value(keyboard_field_tab, &kbdencoding)->flags & FLG_GET) if (ioctl(fd, WSKBDIO_GETENCODING, &kbdencoding) < 0) warn("WSKBDIO_GETENCODING"); }
void keyboard_get_values(int fd) { if (field_by_value(&kbtype)->flags & FLG_GET) if (ioctl(fd, WSKBDIO_GTYPE, &kbtype) < 0) err(EXIT_FAILURE, "WSKBDIO_GTYPE"); bell.which = 0; if (field_by_value(&bell.pitch)->flags & FLG_GET) bell.which |= WSKBD_BELL_DOPITCH; if (field_by_value(&bell.period)->flags & FLG_GET) bell.which |= WSKBD_BELL_DOPERIOD; if (field_by_value(&bell.volume)->flags & FLG_GET) bell.which |= WSKBD_BELL_DOVOLUME; if (bell.which != 0 && ioctl(fd, WSKBDIO_GETBELL, &bell) < 0) err(EXIT_FAILURE, "WSKBDIO_GETBELL"); dfbell.which = 0; if (field_by_value(&dfbell.pitch)->flags & FLG_GET) dfbell.which |= WSKBD_BELL_DOPITCH; if (field_by_value(&dfbell.period)->flags & FLG_GET) dfbell.which |= WSKBD_BELL_DOPERIOD; if (field_by_value(&dfbell.volume)->flags & FLG_GET) dfbell.which |= WSKBD_BELL_DOVOLUME; if (dfbell.which != 0 && ioctl(fd, WSKBDIO_GETDEFAULTBELL, &dfbell) < 0) err(EXIT_FAILURE, "WSKBDIO_GETDEFAULTBELL"); if (field_by_value(&kbmap)->flags & FLG_GET) { kbmap.maplen = KS_NUMKEYCODES; if (ioctl(fd, WSKBDIO_GETMAP, &kbmap) < 0) err(EXIT_FAILURE, "WSKBDIO_GETMAP"); } repeat.which = 0; if (field_by_value(&repeat.del1)->flags & FLG_GET) repeat.which |= WSKBD_KEYREPEAT_DODEL1; if (field_by_value(&repeat.delN)->flags & FLG_GET) repeat.which |= WSKBD_KEYREPEAT_DODELN; if (repeat.which != 0 && ioctl(fd, WSKBDIO_GETKEYREPEAT, &repeat) < 0) err(EXIT_FAILURE, "WSKBDIO_GETKEYREPEAT"); dfrepeat.which = 0; if (field_by_value(&dfrepeat.del1)->flags & FLG_GET) dfrepeat.which |= WSKBD_KEYREPEAT_DODEL1; if (field_by_value(&dfrepeat.delN)->flags & FLG_GET) dfrepeat.which |= WSKBD_KEYREPEAT_DODELN; if (dfrepeat.which != 0 && ioctl(fd, WSKBDIO_GETKEYREPEAT, &dfrepeat) < 0) err(EXIT_FAILURE, "WSKBDIO_GETKEYREPEAT"); if (field_by_value(&ledstate)->flags & FLG_GET) if (ioctl(fd, WSKBDIO_GETLEDS, &ledstate) < 0) err(EXIT_FAILURE, "WSKBDIO_GETLEDS"); if (field_by_value(&kbdencoding)->flags & FLG_GET) if (ioctl(fd, WSKBDIO_GETENCODING, &kbdencoding) < 0) err(EXIT_FAILURE, "WSKBDIO_GETENCODING"); if (field_by_value(&keyclick)->flags & FLG_GET) { ioctl(fd, WSKBDIO_GETKEYCLICK, &keyclick); /* Optional; don't complain. */ } scroll.which = 0; if (field_by_value(&scroll.mode)->flags & FLG_GET) scroll.which |= WSKBD_SCROLL_DOMODE; if (field_by_value(&scroll.modifier)->flags & FLG_GET) scroll.which |= WSKBD_SCROLL_DOMODIFIER; if (scroll.which != 0) { if (ioctl(fd, WSKBDIO_GETSCROLL, &scroll) == -1) { if (errno != ENODEV) err(EXIT_FAILURE, "WSKBDIO_GETSCROLL"); else havescroll = 0; } } }
void keyboard_put_values(const char *pre, int fd) { bell.which = 0; if (field_by_value(keyboard_field_tab, &bell.pitch)->flags & FLG_SET) bell.which |= WSKBD_BELL_DOPITCH; if (field_by_value(keyboard_field_tab, &bell.period)->flags & FLG_SET) bell.which |= WSKBD_BELL_DOPERIOD; if (field_by_value(keyboard_field_tab, &bell.volume)->flags & FLG_SET) bell.which |= WSKBD_BELL_DOVOLUME; if (bell.which != 0 && ioctl(fd, WSKBDIO_SETBELL, &bell) < 0) warn("WSKBDIO_SETBELL"); else { if (bell.which & WSKBD_BELL_DOPITCH) pr_field(pre, field_by_value(keyboard_field_tab, &bell.pitch), " -> "); if (bell.which & WSKBD_BELL_DOPERIOD) pr_field(pre, field_by_value(keyboard_field_tab, &bell.period), " -> "); if (bell.which & WSKBD_BELL_DOVOLUME) pr_field(pre, field_by_value(keyboard_field_tab, &bell.volume), " -> "); } dfbell.which = 0; if (field_by_value(keyboard_field_tab, &dfbell.pitch)->flags & FLG_SET) dfbell.which |= WSKBD_BELL_DOPITCH; if (field_by_value(keyboard_field_tab, &dfbell.period)->flags & FLG_SET) dfbell.which |= WSKBD_BELL_DOPERIOD; if (field_by_value(keyboard_field_tab, &dfbell.volume)->flags & FLG_SET) dfbell.which |= WSKBD_BELL_DOVOLUME; if (dfbell.which != 0 && ioctl(fd, WSKBDIO_SETDEFAULTBELL, &dfbell) < 0) warn("WSKBDIO_SETDEFAULTBELL"); else { if (dfbell.which & WSKBD_BELL_DOPITCH) pr_field(pre, field_by_value(keyboard_field_tab, &dfbell.pitch), " -> "); if (dfbell.which & WSKBD_BELL_DOPERIOD) pr_field(pre, field_by_value(keyboard_field_tab, &dfbell.period), " -> "); if (dfbell.which & WSKBD_BELL_DOVOLUME) pr_field(pre, field_by_value(keyboard_field_tab, &dfbell.volume), " -> "); } if (field_by_value(keyboard_field_tab, &kbmap)->flags & FLG_SET) { if (ioctl(fd, WSKBDIO_SETMAP, &kbmap) < 0) warn("WSKBDIO_SETMAP"); } repeat.which = 0; if (field_by_value(keyboard_field_tab, &repeat.del1)->flags & FLG_SET) repeat.which |= WSKBD_KEYREPEAT_DODEL1; if (field_by_value(keyboard_field_tab, &repeat.delN)->flags & FLG_SET) repeat.which |= WSKBD_KEYREPEAT_DODELN; if (repeat.which != 0 && ioctl(fd, WSKBDIO_SETKEYREPEAT, &repeat) < 0) warn("WSKBDIO_SETKEYREPEAT"); else { if (repeat.which & WSKBD_KEYREPEAT_DODEL1) pr_field(pre, field_by_value(keyboard_field_tab, &repeat.del1), " -> "); if (repeat.which & WSKBD_KEYREPEAT_DODELN) pr_field(pre, field_by_value(keyboard_field_tab, &repeat.delN), " -> "); } dfrepeat.which = 0; if (field_by_value(keyboard_field_tab, &dfrepeat.del1)->flags & FLG_SET) dfrepeat.which |= WSKBD_KEYREPEAT_DODEL1; if (field_by_value(keyboard_field_tab, &dfrepeat.delN)->flags & FLG_SET) dfrepeat.which |= WSKBD_KEYREPEAT_DODELN; if (dfrepeat.which != 0 && ioctl(fd, WSKBDIO_SETDEFAULTKEYREPEAT, &dfrepeat) < 0) warn("WSKBDIO_SETDEFAULTKEYREPEAT"); else { if (dfrepeat.which &WSKBD_KEYREPEAT_DODEL1) pr_field(pre, field_by_value(keyboard_field_tab, &dfrepeat.del1), " -> "); if (dfrepeat.which & WSKBD_KEYREPEAT_DODELN) pr_field(pre, field_by_value(keyboard_field_tab, &dfrepeat.delN), " -> "); } if (field_by_value(keyboard_field_tab, &ledstate)->flags & FLG_SET) { if (ioctl(fd, WSKBDIO_SETLEDS, &ledstate) < 0) warn("WSKBDIO_SETLEDS"); else { pr_field(pre, field_by_value(keyboard_field_tab, &ledstate), " -> "); } } if (field_by_value(keyboard_field_tab, &kbdencoding)->flags & FLG_SET) { if (ioctl(fd, WSKBDIO_SETENCODING, &kbdencoding) < 0) warn("WSKBDIO_SETENCODING"); else { pr_field(pre, field_by_value(keyboard_field_tab, &kbdencoding), " -> "); } } }
void keyboard_put_values(int fd) { bell.which = 0; if (field_by_value(&bell.pitch)->flags & FLG_SET) bell.which |= WSKBD_BELL_DOPITCH; if (field_by_value(&bell.period)->flags & FLG_SET) bell.which |= WSKBD_BELL_DOPERIOD; if (field_by_value(&bell.volume)->flags & FLG_SET) bell.which |= WSKBD_BELL_DOVOLUME; if (bell.which != 0 && ioctl(fd, WSKBDIO_SETBELL, &bell) < 0) err(EXIT_FAILURE, "WSKBDIO_SETBELL"); if (bell.which & WSKBD_BELL_DOPITCH) pr_field(field_by_value(&bell.pitch), " -> "); if (bell.which & WSKBD_BELL_DOPERIOD) pr_field(field_by_value(&bell.period), " -> "); if (bell.which & WSKBD_BELL_DOVOLUME) pr_field(field_by_value(&bell.volume), " -> "); dfbell.which = 0; if (field_by_value(&dfbell.pitch)->flags & FLG_SET) dfbell.which |= WSKBD_BELL_DOPITCH; if (field_by_value(&dfbell.period)->flags & FLG_SET) dfbell.which |= WSKBD_BELL_DOPERIOD; if (field_by_value(&dfbell.volume)->flags & FLG_SET) dfbell.which |= WSKBD_BELL_DOVOLUME; if (dfbell.which != 0 && ioctl(fd, WSKBDIO_SETDEFAULTBELL, &dfbell) < 0) err(EXIT_FAILURE, "WSKBDIO_SETDEFAULTBELL"); if (dfbell.which & WSKBD_BELL_DOPITCH) pr_field(field_by_value(&dfbell.pitch), " -> "); if (dfbell.which & WSKBD_BELL_DOPERIOD) pr_field(field_by_value(&dfbell.period), " -> "); if (dfbell.which & WSKBD_BELL_DOVOLUME) pr_field(field_by_value(&dfbell.volume), " -> "); if (field_by_value(&kbmap)->flags & FLG_SET) { if (ioctl(fd, WSKBDIO_SETMAP, &kbmap) < 0) err(EXIT_FAILURE, "WSKBDIO_SETMAP"); pr_field(field_by_value(&kbmap), " -> "); } repeat.which = 0; if (field_by_value(&repeat.del1)->flags & FLG_SET) repeat.which |= WSKBD_KEYREPEAT_DODEL1; if (field_by_value(&repeat.delN)->flags & FLG_SET) repeat.which |= WSKBD_KEYREPEAT_DODELN; if (repeat.which != 0 && ioctl(fd, WSKBDIO_SETKEYREPEAT, &repeat) < 0) err(EXIT_FAILURE, "WSKBDIO_SETKEYREPEAT"); if (repeat.which & WSKBD_KEYREPEAT_DODEL1) pr_field(field_by_value(&repeat.del1), " -> "); if (repeat.which & WSKBD_KEYREPEAT_DODELN) pr_field(field_by_value(&repeat.delN), " -> "); dfrepeat.which = 0; if (field_by_value(&dfrepeat.del1)->flags & FLG_SET) dfrepeat.which |= WSKBD_KEYREPEAT_DODEL1; if (field_by_value(&dfrepeat.delN)->flags & FLG_SET) dfrepeat.which |= WSKBD_KEYREPEAT_DODELN; if (dfrepeat.which != 0 && ioctl(fd, WSKBDIO_SETDEFAULTKEYREPEAT, &dfrepeat) < 0) err(EXIT_FAILURE, "WSKBDIO_SETDEFAULTKEYREPEAT"); if (dfrepeat.which &WSKBD_KEYREPEAT_DODEL1) pr_field(field_by_value(&dfrepeat.del1), " -> "); if (dfrepeat.which & WSKBD_KEYREPEAT_DODELN) pr_field(field_by_value(&dfrepeat.delN), " -> "); if (field_by_value(&ledstate)->flags & FLG_SET) { if (ioctl(fd, WSKBDIO_SETLEDS, &ledstate) < 0) err(EXIT_FAILURE, "WSKBDIO_SETLEDS"); pr_field(field_by_value(&ledstate), " -> "); } if (field_by_value(&kbdencoding)->flags & FLG_SET) { if (ioctl(fd, WSKBDIO_SETENCODING, &kbdencoding) < 0) err(EXIT_FAILURE, "WSKBDIO_SETENCODING"); pr_field(field_by_value(&kbdencoding), " -> "); } if (field_by_value(&keyclick)->flags & FLG_SET) { if (ioctl(fd, WSKBDIO_SETKEYCLICK, &keyclick) < 0) err(EXIT_FAILURE, "WSKBDIO_SETKEYCLICK"); pr_field(field_by_value(&keyclick), " -> "); } if (havescroll == 0) return; scroll.which = 0; if (field_by_value(&scroll.mode)->flags & FLG_SET) scroll.which |= WSKBD_SCROLL_DOMODE; if (field_by_value(&scroll.modifier)->flags & FLG_SET) scroll.which |= WSKBD_SCROLL_DOMODIFIER; if (scroll.which & WSKBD_SCROLL_DOMODE) pr_field(field_by_value(&scroll.mode), " -> "); if (scroll.which & WSKBD_SCROLL_DOMODIFIER) pr_field(field_by_value(&scroll.modifier), " -> "); if (scroll.which != 0) { if (ioctl(fd, WSKBDIO_SETSCROLL, &scroll) == -1) { if (errno != ENODEV) err(EXIT_FAILURE, "WSKBDIO_SETSCROLL"); else { warnx("scrolling is not supported by this " "kernel"); havescroll = 0; } } } }