stumpf@gtenmc.UUCP (stumpf) (12/13/89)
I am looking for a simple program to tell me the name of the key that is pressed until EOF. This is something similar to the keycaps function on the MAC. Output similar to the following is desired. Key Pressed Output ----------- ------ a a control-v ^v Up Arrow KEY_UP Ins Char KEY_IC Or something to this effect. Basically, you hit a key and you get back either the curses.h definition or the ascii code in control or regular format. -- jss - Jon S. Stumpf
tchrist@convex.COM (Tom Christiansen) (12/14/89)
In article <317@gtenmc.UUCP> stumpf@gtenmc.UUCP (stumpf) writes: >I am looking for a simple program to tell me the name >of the key that is pressed until EOF. This is something >similar to the keycaps function on the MAC. Here is a brief program to do what you want. Hit the same char 3 times to exit. --tom /* * Ascii reads characters from the keyboard in raw mode and writes the * numerical equvalent in octal and decimal as well as its standard mnemonic. * * Originally written on 4.1 by J. Goodman (I think). * Rewritten by Dave Cohrs <dave@cs.wisc.edu> * * * Modified 1/19/86 by David Parter to also show hex. */ char *cval[128] = { "nul ^@,null", "soh ^a", "stx ^b", "etx ^c", "eot ^d", "enq ^e", "ack ^f", "bel ^g", "bs ^h", "ht ^i", "nl ^j", "vt ^k", "np ^l", "cr ^m", "so ^n", "si ^o", "dle ^p", "dc1 ^q", "dc2 ^r", "dc3 ^s", "dc4 ^t", "nak ^u", "syn ^v", "etb ^w", "can ^x", "em ^y", "sub ^z", "esc ^[", "fs ^\\,^shL", "gs ^],^shM", "rs ^^,^shN", "us ^_,^shO", "space", "!", "\"", "#", "$", "%", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ";", "<", "=", ">", "?", "@", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "[", "\\", "]", "^", "_", "`", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "{", "|", "}", "~", "del ^?", }; #include <sys/ioctl.h> #include <stdio.h> main() { struct sgttyb savp; struct sgttyb buf; register char csav = 0200, ccnt = 0; char c; printf("octal hex decimal char other\n"); printf("----------------------------\n"); fflush(stdout); ioctl(0, TIOCGETP, &savp); /* save old state */ ioctl(0, TIOCGETP, &buf); /* get another copy to change */ buf.sg_flags |= RAW; buf.sg_flags &= ~(ECHO|CRMOD); ioctl(0, TIOCSETP, &buf); for(;;) { read(0, &c, 1); c &= 127; printf(" %03o %02X %3d %s\r\n", c, c, c, cval[c]); if (c == csav) { if(++ccnt == 2) { ioctl(0, TIOCSETP, &savp); exit(0); } } else ccnt = 0; csav = c; } } /* lint output: ascii.c: ioctl, arg. 3 used inconsistently llib-lc(68) :: ascii.c(69) ioctl, arg. 3 used inconsistently llib-lc(68) :: ascii.c(70) ioctl, arg. 3 used inconsistently llib-lc(68) :: ascii.c(74) ioctl, arg. 3 used inconsistently llib-lc(68) :: ascii.c(82) ioctl returns value which is always ignored read returns value which is always ignored fflush returns value which is always ignored */ Tom Christiansen {uunet,uiucdcs,sun}!convex!tchrist Convex Computer Corporation tchrist@convex.COM "EMACS belongs in <sys/errno.h>: Editor too big!"