Ignore:
Timestamp:
Jan 1, 2014, 12:47:38 AM (10 years ago)
Author:
Bruno Cornec
Message:
  • Update mindi-busybox to 1.21.1
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/3.2/mindi-busybox/console-tools/showkey.c

    r2725 r3232  
    77 * Licensed under GPLv2, see file LICENSE in this source tree.
    88 */
     9
     10//usage:#define showkey_trivial_usage
     11//usage:       "[-a | -k | -s]"
     12//usage:#define showkey_full_usage "\n\n"
     13//usage:       "Show keys pressed\n"
     14//usage:     "\n    -a  Display decimal/octal/hex values of the keys"
     15//usage:     "\n    -k  Display interpreted keycodes (default)"
     16//usage:     "\n    -s  Display raw scan-codes"
    917
    1018#include "libbb.h"
     
    5765    getopt32(argv, "aks");
    5866
    59     // get keyboard settings
    60     xioctl(STDIN_FILENO, KDGKBMODE, &kbmode);
    61     printf("kb mode was %s\n\nPress any keys. Program terminates %s\n\n",
    62         kbmode == K_RAW ? "RAW" :
    63             (kbmode == K_XLATE ? "XLATE" :
    64                 (kbmode == K_MEDIUMRAW ? "MEDIUMRAW" :
    65                     (kbmode == K_UNICODE ? "UNICODE" : "UNKNOWN")))
    66         , (option_mask32 & OPT_a) ? "on EOF (ctrl-D)" : "10s after last keypress"
    67     );
    68 
    6967    // prepare for raw mode
    7068    xget1(&tio, &tio0);
     
    7270    xset1(&tio);
    7371
     72#define press_keys "Press any keys, program terminates %s:\r\n\n"
     73
    7474    if (option_mask32 & OPT_a) {
     75        // just read stdin char by char
    7576        unsigned char c;
    7677
    77         // just read stdin char by char
     78        printf(press_keys, "on EOF (ctrl-D)");
     79
     80        // read and show byte values
    7881        while (1 == read(STDIN_FILENO, &c, 1)) {
    7982            printf("%3u 0%03o 0x%02x\r\n", c, c, c);
     
    8184                break;
    8285        }
     86
    8387    } else {
     88        // we assume a PC keyboard
     89        xioctl(STDIN_FILENO, KDGKBMODE, &kbmode);
     90        printf("Keyboard mode was %s.\r\n\n",
     91            kbmode == K_RAW ? "RAW" :
     92                (kbmode == K_XLATE ? "XLATE" :
     93                    (kbmode == K_MEDIUMRAW ? "MEDIUMRAW" :
     94                        (kbmode == K_UNICODE ? "UNICODE" : "UNKNOWN")))
     95        );
     96
    8497        // set raw keyboard mode
    8598        xioctl(STDIN_FILENO, KDSKBMODE, (void *)(ptrdiff_t)((option_mask32 & OPT_k) ? K_MEDIUMRAW : K_RAW));
     
    87100        // we should exit on any signal; signals should interrupt read
    88101        bb_signals_recursive_norestart(BB_FATAL_SIGS, record_signo);
     102
     103        // inform user that program ends after time of inactivity
     104        printf(press_keys, "10s after last keypress");
    89105
    90106        // read and show scancodes
     
    95111            // setup 10s watchdog
    96112            alarm(10);
     113
    97114            // read scancodes
    98115            n = read(STDIN_FILENO, buf, sizeof(buf));
     
    122139            puts("\r");
    123140        }
     141
     142        // restore keyboard mode
     143        xioctl(STDIN_FILENO, KDSKBMODE, (void *)(ptrdiff_t)kbmode);
    124144    }
    125145
    126     // restore keyboard and console settings
     146    // restore console settings
    127147    xset1(&tio0);
    128     xioctl(STDIN_FILENO, KDSKBMODE, (void *)(ptrdiff_t)kbmode);
    129148
    130149    return EXIT_SUCCESS;
Note: See TracChangeset for help on using the changeset viewer.