176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* ----------------------------------------------------------------------- * 276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Copyright 2004-2008 H. Peter Anvin - All Rights Reserved 476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * This program is free software; you can redistribute it and/or modify 676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * it under the terms of the GNU General Public License as published by 776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * the Free Software Foundation, Inc., 53 Temple Place Ste 330, 876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Boston MA 02111-1307, USA; either version 2 of the License, or 976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * (at your option) any later version; incorporated herein by reference. 1076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 1176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * ----------------------------------------------------------------------- */ 1276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 1376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* 1476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * keytest.c 1576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 1676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Test the key parsing library 1776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 1876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 1976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <string.h> 2076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <stdio.h> 2176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <stdlib.h> 2276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <time.h> 2376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <sys/times.h> 2476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <consoles.h> /* Provided by libutil */ 2676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <getkey.h> 2776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstatic void cooked_keys(void) 2976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 3076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman int key; 3176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman printf("[cooked]"); 3376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman for (;;) { 3576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman key = get_key(stdin, 0); 3676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (key == 0x03) { 3876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman printf("[done]\n"); 3976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman exit(0); 4076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } else if (key == '!') 4176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return; 4276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (key >= 0x20 && key < 0x100) { 4476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman putchar(key); 4576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } else { 4676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman printf("[%s,%04x]", key_code_to_name(key), key); 4776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 4876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 4976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} 5076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 5176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstatic void raw_keys(void) 5276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 5376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman int key; 5476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 5576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman printf("[raw]"); 5676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 5776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman for (;;) { 5876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman key = getc(stdin); 5976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 6076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (key == 0x03) { 6176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman printf("[done]\n"); 6276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman exit(0); 6376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } else if (key == '!') 6476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return; 6576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 6676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (key != EOF) 6776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman printf("<%02x>", key); 6876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 6976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} 7076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 7176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanint main(void) 7276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 7376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman console_ansi_raw(); 7476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 7576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman printf("CLK_TCK = %d\n", (int)CLK_TCK); 7676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman printf("Press keys, end with Ctrl-C, ! changes from cooked to raw\n"); 7776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 7876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman for (;;) { 7976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman cooked_keys(); 8076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman raw_keys(); 8176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 8276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} 83