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