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 >
C/C++ Source or Header  |  1990-05-23  |  3KB  |  131 lines

  1. /*
  2.  * Name:    MG 2a Amiga virtual terminal keyboard, default console
  3.  * keymap. Created:    Mic Kaczmarczik (mic@emx.cc.utexas.edu) Last edit:
  4.  * May 14, 1988
  5.  */
  6.  
  7. #include "fkeys.h"
  8.  
  9. #undef    TRUE
  10. #undef    FALSE
  11. #include    "def.h"
  12. #include    "kbd.h"
  13.  
  14. /*
  15.  * List of function key names, from KFIRST to KLAST
  16.  */
  17. #ifdef    FKEYS
  18. char    *keystrings[] = {
  19.     "Up",        "Down",        "Left",        "Right",
  20.     "Shift-Up",    "Shift-Down",    "Shift-Left",    "Shift-Right",
  21.     "F1",        "F2",        "F3",        "F4",
  22.     "F5",        "F6",        "F7",        "F8",
  23.     "F9",        "F10",        "Shift-F1",    "Shift-F2",
  24.     "Shift-F3",    "Shift-F4",    "Shift-F5",    "Shift-F6",
  25.     "Shift-F7",    "Shift-F8",    "Shift-F9",    "Shift-F10",
  26.     "Help",        "The menu",    "The resize gadget", "The mouse",
  27.     "Mouse",            "Ctrl-Mouse",
  28.     "Shift-Mouse",            "Shift-Ctrl-Mouse",
  29.     "Meta-Mouse",            "Meta-Ctrl-Mouse",
  30.     "Meta-Shift-Mouse",        "Meta-Shift-Ctrl-Mouse",
  31.     "Mode-Mouse",            "Ctrl-Mode-Mouse",
  32.     "Shift-Mode-Mouse",        "Shift-Ctrl-Mode-Mouse",
  33.     "Meta-Mode-Mouse",        "Meta-Ctrl-Mode-Mouse",
  34.     "Meta-Shift-Mode-Mouse",    "Meta-Shift-Ctrl-Mode-Mouse",
  35.     "Echo-Mouse",            "Ctrl-Echo-Mouse",
  36.     "Shift-Echo-Mouse",        "Shift-Ctrl-Echo-Mouse",
  37.     "Meta-Echo-Mouse",        "Meta-Ctrl-Echo-Mouse",
  38.     "Meta-Shift-Echo-Mouse",    "Meta-Shift-Ctrl-Echo-Mouse"
  39. };
  40. #endif
  41.  
  42. /*
  43.  * Read in a key, doing whatever low-level mapping of ASCII code to 11 bit
  44.  * code.  This has become a bit easier since keymaps.
  45.  */
  46. #define    CSI    0x9b
  47.  
  48. getkbd()
  49. {
  50.     register int    c;
  51. #ifdef    FKEYS
  52.     register int    n;
  53. #endif
  54. loop:
  55.     if ((c = ttgetc()) == CSI) {
  56.         c = ttgetc();
  57. #ifdef    FKEYS
  58.         if (c == '?') {    /* HELP key         */
  59.             ttgetc();    /* discard '~'         */
  60.             return (KHELP);
  61.         }
  62.         /* Arrow keys */
  63.         if (c == 'A')
  64.             return (KUP);
  65.         if (c == 'B')
  66.             return (KDOWN);
  67.         if (c == 'C')
  68.             return (KRIGHT);
  69.         if (c == 'D')
  70.             return (KLEFT);
  71.         if (c == 'T')
  72.             return (KSUP);
  73.         if (c == 'S')
  74.             return (KSDOWN);
  75.  
  76.         /* Shifted left, right arrow */
  77.         if (c == ' ') {
  78.             c = ttgetc();
  79.             if (c == 'A' || c == '@')
  80.                 return ((c == 'A') ? (KSLEFT) : (KSRIGHT));
  81.             goto loop;    /* try again, sucker */
  82.         }
  83.         /* Function keys     */
  84.         if (c >= '0' && c <= '9') {
  85.             n = 0;
  86.             do {
  87.                 n = 10 * n + c - '0';
  88.                 c = ttgetc();
  89.             } while (c >= '0' && c <= '9');
  90.             if (c == '~' && n < 20)
  91.                 return (n < 9) ? (KF1 + n) : (KSF1 + (n - 10));
  92.             else
  93.                 goto loop;    /* Try again */
  94.         }
  95. #endif
  96.         goto loop;    /* Try again */
  97.     }
  98.     return (c);
  99. }
  100.  
  101. /*
  102.  * Terminal specific keymap initialization, calling bind() to get things
  103.  * done.  All the keys bound here are done globally.
  104.  */
  105.  
  106. VOID
  107. ttykeymapinit()
  108. {
  109. #ifdef    notdef
  110.     KCHAR           c;
  111.     register struct keymap *mapp = map_table[0].p_map;
  112.     static KCHAR    esc_bs[] = {CCHR('['), CCHR('H')};
  113.     static KCHAR    esc_del[] = {CCHR('['), CCHR('?')};
  114.  
  115. #define    BINDC(k,s) (c = k, bindkey(mapp, s, &c, 1))
  116. #define    BINDM(m,s) bindkey(mapp, s, m, (sizeof(m)/sizeof(KCHAR)))
  117.  
  118.     /*
  119.      * Swap the backspace and del keys, at least in normal usage. This
  120.      * loses the help feature of CTRL-H, but we rebind CTRL-_ to do the
  121.      * same thing. Under FKEYS, the Help key calls describe-key-briefly.
  122.      */
  123.     BINDC(CCHR('_'), "help-help");    /* CTRL-Backspace */
  124.     BINDM(esc_bs, "backward-kill-word");
  125.     BINDC(CCHR('H'), "delete-backward-char");
  126.  
  127.     BINDC(CCHR('?'), "delete-char");
  128.     BINDM(esc_del, "kill-word");
  129. #endif
  130. }
  131.