home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The C Users' Group Library 1994 August
/
wc-cdrom-cusersgrouplibrary-1994-08.iso
/
listings
/
v_08_01
/
8n01096a
< prev
next >
Wrap
Text File
|
1990-02-19
|
2KB
|
87 lines
*****Listing 3*****
/*
* keys.c - gets arrow and function keys from termcap,
* returns terminfo codes
* changes quit key for use as arrow
*
* define NO_SYSV for versions of curses that do not look up
* arrow & function keys from termcap
*
* copyright 1988 Ronald Florence
* changed VMIN & VTIME for wy99 @ 9600 ron@mlfarm (7/11/88)
*/
#include <curses.h>
#ifndef KEY_DOWN
#include "keys.h"
#endif
#define NKEYS 16
char
#ifdef NO_SYSV
*tcap_ids[] = {
"kd", "ku", "kl", "kr", "kh", "kb",
"k0", "k1", "k2", "k3", "k4", "k5", "k6", "k7", "k8", "k9", 0
},
#endif
*fkeys[NKEYS];
lookupkeys()
{
#ifdef NO_SYSV
static char sbuf[256];
char **key, tbuf[1024], *fill = sbuf, *tgetstr();
int i = 0;
tgetent(tbuf, ttytype);
for (key = tcap_ids; *key; ++key)
fkeys[i++] = tgetstr(*key, &fill);
#else
fkeys[0] = KD;
fkeys[1] = KU;
fkeys[2] = KL;
fkeys[3] = KR;
fkeys[4] = KH;
fkeys[5] = KB;
fkeys[6] = K0;
fkeys[7] = K1;
fkeys[8] = K2;
fkeys[9] = K3;
fkeys[10] = K4;
fkeys[11] = K5;
fkeys[12] = K6;
fkeys[13] = K7;
fkeys[14] = K8;
fkeys[15] = K9;
#endif
fixquit();
}
getkey()
{
char cmd[6];
register k;
k = read(0, cmd, 6);
cmd[k] = '\0';
for (k = 0; k < NKEYS; k++)
if (strcmp(cmd, fkeys[k]) == 0)
return (k + KEY_DOWN);
return ((int) *cmd);
}
fixquit()
{
struct termio new;
ioctl(0, TCGETA, &new);
new.c_cc[VQUIT] = 0xff; /* in case QUIT is an arrow */
new.c_cc[VTIME] = 1; /* minimum timeout */
new.c_cc[VMIN] = 3; /* three characters satisfy */
ioctl(0, TCSETA, &new);
}