home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fresh Fish 10
/
Fresh_Fish_10_2352.bin
/
useful
/
util
/
edit
/
mg
/
src.lzh
/
amiga
/
ttykbd.c
< prev
next >
Wrap
C/C++ Source or Header
|
1990-05-23
|
3KB
|
131 lines
/*
* Name: MG 2a Amiga virtual terminal keyboard, default console
* keymap. Created: Mic Kaczmarczik (mic@emx.cc.utexas.edu) Last edit:
* May 14, 1988
*/
#include "fkeys.h"
#undef TRUE
#undef FALSE
#include "def.h"
#include "kbd.h"
/*
* List of function key names, from KFIRST to KLAST
*/
#ifdef FKEYS
char *keystrings[] = {
"Up", "Down", "Left", "Right",
"Shift-Up", "Shift-Down", "Shift-Left", "Shift-Right",
"F1", "F2", "F3", "F4",
"F5", "F6", "F7", "F8",
"F9", "F10", "Shift-F1", "Shift-F2",
"Shift-F3", "Shift-F4", "Shift-F5", "Shift-F6",
"Shift-F7", "Shift-F8", "Shift-F9", "Shift-F10",
"Help", "The menu", "The resize gadget", "The mouse",
"Mouse", "Ctrl-Mouse",
"Shift-Mouse", "Shift-Ctrl-Mouse",
"Meta-Mouse", "Meta-Ctrl-Mouse",
"Meta-Shift-Mouse", "Meta-Shift-Ctrl-Mouse",
"Mode-Mouse", "Ctrl-Mode-Mouse",
"Shift-Mode-Mouse", "Shift-Ctrl-Mode-Mouse",
"Meta-Mode-Mouse", "Meta-Ctrl-Mode-Mouse",
"Meta-Shift-Mode-Mouse", "Meta-Shift-Ctrl-Mode-Mouse",
"Echo-Mouse", "Ctrl-Echo-Mouse",
"Shift-Echo-Mouse", "Shift-Ctrl-Echo-Mouse",
"Meta-Echo-Mouse", "Meta-Ctrl-Echo-Mouse",
"Meta-Shift-Echo-Mouse", "Meta-Shift-Ctrl-Echo-Mouse"
};
#endif
/*
* Read in a key, doing whatever low-level mapping of ASCII code to 11 bit
* code. This has become a bit easier since keymaps.
*/
#define CSI 0x9b
getkbd()
{
register int c;
#ifdef FKEYS
register int n;
#endif
loop:
if ((c = ttgetc()) == CSI) {
c = ttgetc();
#ifdef FKEYS
if (c == '?') { /* HELP key */
ttgetc(); /* discard '~' */
return (KHELP);
}
/* Arrow keys */
if (c == 'A')
return (KUP);
if (c == 'B')
return (KDOWN);
if (c == 'C')
return (KRIGHT);
if (c == 'D')
return (KLEFT);
if (c == 'T')
return (KSUP);
if (c == 'S')
return (KSDOWN);
/* Shifted left, right arrow */
if (c == ' ') {
c = ttgetc();
if (c == 'A' || c == '@')
return ((c == 'A') ? (KSLEFT) : (KSRIGHT));
goto loop; /* try again, sucker */
}
/* Function keys */
if (c >= '0' && c <= '9') {
n = 0;
do {
n = 10 * n + c - '0';
c = ttgetc();
} while (c >= '0' && c <= '9');
if (c == '~' && n < 20)
return (n < 9) ? (KF1 + n) : (KSF1 + (n - 10));
else
goto loop; /* Try again */
}
#endif
goto loop; /* Try again */
}
return (c);
}
/*
* Terminal specific keymap initialization, calling bind() to get things
* done. All the keys bound here are done globally.
*/
VOID
ttykeymapinit()
{
#ifdef notdef
KCHAR c;
register struct keymap *mapp = map_table[0].p_map;
static KCHAR esc_bs[] = {CCHR('['), CCHR('H')};
static KCHAR esc_del[] = {CCHR('['), CCHR('?')};
#define BINDC(k,s) (c = k, bindkey(mapp, s, &c, 1))
#define BINDM(m,s) bindkey(mapp, s, m, (sizeof(m)/sizeof(KCHAR)))
/*
* Swap the backspace and del keys, at least in normal usage. This
* loses the help feature of CTRL-H, but we rebind CTRL-_ to do the
* same thing. Under FKEYS, the Help key calls describe-key-briefly.
*/
BINDC(CCHR('_'), "help-help"); /* CTRL-Backspace */
BINDM(esc_bs, "backward-kill-word");
BINDC(CCHR('H'), "delete-backward-char");
BINDC(CCHR('?'), "delete-char");
BINDM(esc_del, "kill-word");
#endif
}