diff options
author | ridiculousfish <corydoras@ridiculousfish.com> | 2011-12-26 19:11:54 -0800 |
---|---|---|
committer | ridiculousfish <corydoras@ridiculousfish.com> | 2011-12-26 19:11:54 -0800 |
commit | 3f16ace6784caab54fb054836ee93902e9701913 (patch) | |
tree | 6ae6170f86bd45ce7fd0dae4a4242bb8dc67c505 /key_reader.cpp | |
parent | 834ea94eb97d37c65fcbf2fcc3b69303f6fb7e24 (diff) |
Initial C++ conversion
Diffstat (limited to 'key_reader.cpp')
-rw-r--r-- | key_reader.cpp | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/key_reader.cpp b/key_reader.cpp new file mode 100644 index 00000000..1cf42a1c --- /dev/null +++ b/key_reader.cpp @@ -0,0 +1,95 @@ +/* + A small utility to print the resulting key codes from pressing a + key. Servers the same function as hitting ^V in bash, but I prefer + the way key_reader works. + + Type ^C to exit the program. +*/ +#include "config.h" + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <termios.h> +#include <unistd.h> +#include <locale.h> +#include <termcap.h> + +#include "fallback.h" + +#include "input_common.h" + +int writestr( char *str ) +{ + write( 1, str, strlen(str) ); + return 0; +} + +int main( int argc, char **argv) +{ + + setlocale( LC_ALL, "" ); + + + if( argc == 2 ) + { + static char term_buffer[2048]; + char *termtype = getenv ("TERM"); + char *tbuff = malloc( sizeof(char)*9999); + char *res; + + tgetent( term_buffer, termtype ); + res = tgetstr( argv[1], &tbuff ); + if( res != 0 ) + { + while( *res != 0 ) + { + printf("%d ", *res ); + + + res++; + } + printf( "\n" ); + } + else + { + printf("Undefined sequence\n"); + } + } + else + { + char scratch[1024]; + unsigned int c; + + struct termios modes, /* so we can change the modes */ + savemodes; /* so we can reset the modes when we're done */ + + input_common_init(0); + + + tcgetattr(0,&modes); /* get the current terminal modes */ + savemodes = modes; /* save a copy so we can reset them */ + + modes.c_lflag &= ~ICANON; /* turn off canonical mode */ + modes.c_lflag &= ~ECHO; /* turn off echo mode */ + modes.c_cc[VMIN]=1; + modes.c_cc[VTIME]=0; + tcsetattr(0,TCSANOW,&modes); /* set the new modes */ + while(1) + { + if( (c=input_common_readch(0)) == EOF ) + break; + if( (c > 31) && (c != 127) ) + sprintf( scratch, "dec: %d hex: %x char: %c\n", c, c, c ); + else + sprintf( scratch, "dec: %d hex: %x\n", c, c ); + writestr( scratch ); + } + /* reset the terminal to the saved mode */ + tcsetattr(0,TCSANOW,&savemodes); + + input_common_destroy(); + } + + return 0; +} |