home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / k95source / ckokey.c < prev    next >
C/C++ Source or Header  |  2020-01-01  |  378KB  |  8,078 lines

  1. /* C K O K E Y -- Kermit Keyboard support for OS/2 and Win32 Systems */
  2.  
  3. #ifdef NT
  4. char *ckyv = "Win32 Keyboard I/O, 8.0.203, 30 Oct 2003";
  5. #else
  6. char *ckyv = "OS/2 Keyboard I/O, 8.0.203, 30 Oct 2003";
  7. #endif /* NT */
  8. /*
  9.   Author: Jeffrey Altman (jaltman@secure-endpoints.com),
  10.             Secure Endpoints Inc., New York City.
  11.  
  12.   Copyright (C) 1985, 2004, Trustees of Columbia University in the City of New
  13.   York.
  14. */
  15.  
  16. #include "ckcdeb.h"                     /* Typedefs, debug formats, etc */
  17. #include "ckcasc.h"                     /* ASCII character names */
  18. #include "ckcker.h"                     /* Kermit definitions */
  19. #include "ckuusr.h"                     /* Command definitions - needed for ckokey.h */
  20. #include "ckctel.h"
  21. #include <ctype.h>                      /* Character types */
  22. #include <stdio.h>                      /* Standard i/o */
  23. #include <io.h>                         /* File io function declarations */
  24. #include <process.h>                    /* Process-control functions */
  25. #include <string.h>                     /* String manipulation declarations */
  26. #include <stdlib.h>                     /* Standard library declarations */
  27. #include <signal.h>
  28.  
  29. /* OS/2 system header files & related stuff */
  30.  
  31. #ifdef NT
  32. #include <windows.h>
  33. #else /* not NT */
  34. #define INCL_WIN
  35. #define INCL_WINSWITCHLIST
  36. #define INCL_ERRORS
  37. #define INCL_KBD
  38. #ifdef OS2MOUSE
  39. #define INCL_MOU
  40. #endif /* OS2MOUSE */
  41. #define INCL_DOSMISC
  42. #define INCL_DOSPROCESS
  43. #define INCL_DOSSEMAPHORES
  44. #define INCL_DOSDEVICES
  45. #define INCL_DOSNLS
  46. #include <os2.h>        /* This pulls in a whole load of stuff */
  47. #undef COMMENT
  48. #endif /* NT */
  49.  
  50. #include "ckcxla.h"
  51. #include "ckuxla.h"
  52. #include "ckcuni.h"
  53. #include "ckocon.h"
  54. #include "ckokey.h"
  55. #ifdef KUI
  56. #include "ikui.h"
  57. #endif /* KUI */
  58.  
  59. #define THRDSTKSIZ      32768
  60. extern HKBD KbdHandle;
  61. extern TID tidKbdHandler;
  62. extern BOOL KbdActive;
  63. #ifndef NOSETKEY
  64. extern KEY *keymap;
  65. #endif /* NOSETKEY */
  66. extern int islocal ;
  67. extern int k95stdio, k95stdin, k95stdout;
  68. extern int ttyfd ;
  69. #ifdef IKSD
  70. extern int inserver;
  71. #endif /* IKSD */
  72.  
  73. #ifndef NOSETKEY
  74. /* Key names */
  75. char *keynam[256];                      /* Names of keys, by scan code */
  76. char *charnam[256];                     /* Names of chars, by US ASCII */
  77. #endif /* NOSETKEY */
  78. #ifndef NOKVERBS
  79. vik_rec vik ;                           /* Very Important Keys */
  80. int     initvik = TRUE ;                /* Need to init VIK table */
  81. int os2gks = 1 ;                        /* Kverb processing active */
  82. int mskkeys = 0 ;                       /* Perform MSK keycode xlation  */
  83. static int kbdCallsKverb = 0;
  84. #endif /* NOKVERBS */
  85.  
  86. extern bool keyclick ;
  87. #ifndef NOTERM
  88. extern int tt_type, tt_type_mode ;
  89. extern int tt_kb_mode ;
  90. #ifdef PCTERM
  91. int tt_pcterm = 0;                      /* PCTERM keyboard mode */
  92. VOID
  93. setpcterm(int x)
  94. {
  95.     tt_pcterm = x;
  96.     ipadl25();
  97. #ifdef KUI
  98.     KuiSetProperty(KUI_TERM_PCTERM,x,0);
  99. #endif /* KUI */
  100. }
  101. extern int wy_block;
  102. #endif /* PCTERM */
  103. #endif /* NOTERM */
  104.  
  105. #ifdef NT
  106. extern int win95altgr;
  107. #endif /* NT */
  108.  
  109. #ifndef NOKVERBS
  110. /*
  111.   Table of keyboard verbs, associating name with symbol (value).
  112.   Names are chosen for compatibility with MS-DOS Kermit.
  113.   Keyword strings MUST be in lowercase and must be in alphabetical order!
  114. */
  115. struct keytab kverbs[] = {
  116.     "answerback", K_ANSWERBACK,  0,
  117.     "ansif01",    K_ANSIF01,     0,
  118.     "ansif02",    K_ANSIF02,      0,
  119.     "ansif03",    K_ANSIF03,      0,
  120.     "ansif04",    K_ANSIF04,      0,
  121.     "ansif05",    K_ANSIF05,      0,
  122.     "ansif06",    K_ANSIF06,      0,
  123.     "ansif07",    K_ANSIF07,      0,
  124.     "ansif08",    K_ANSIF08,      0,
  125.     "ansif09",    K_ANSIF09,      0,
  126.     "ansif10",    K_ANSIF10,      0,
  127.     "ansif11",    K_ANSIF11,      0,
  128.     "ansif12",    K_ANSIF12,      0,
  129.     "ansif13",    K_ANSIF13,      0,
  130.     "ansif14",    K_ANSIF14,      0,
  131.     "ansif15",    K_ANSIF15,      0,
  132.     "ansif16",    K_ANSIF16,      0,
  133.     "ansif17",    K_ANSIF17,      0,
  134.     "ansif18",    K_ANSIF18,      0,
  135.     "ansif19",    K_ANSIF19,      0,
  136.     "ansif20",    K_ANSIF20,      0,
  137.     "ansif21",    K_ANSIF21,      0,
  138.     "ansif22",    K_ANSIF22,      0,
  139.     "ansif23",    K_ANSIF23,      0,
  140.     "ansif24",    K_ANSIF24,      0,
  141.     "ansif25",    K_ANSIF25,      0,
  142.     "ansif26",    K_ANSIF26,      0,
  143.     "ansif27",    K_ANSIF27,      0,
  144.     "ansif28",    K_ANSIF28,      0,
  145.     "ansif29",    K_ANSIF29,      0,
  146.     "ansif30",    K_ANSIF30,      0,
  147.     "ansif31",    K_ANSIF31,      0,
  148.     "ansif32",    K_ANSIF32,      0,
  149.     "ansif33",    K_ANSIF33,      0,
  150.     "ansif34",    K_ANSIF34,      0,
  151.     "ansif35",    K_ANSIF35,      0,
  152.     "ansif36",    K_ANSIF36,      0,
  153.     "ansif37",    K_ANSIF37,      0,
  154.     "ansif38",    K_ANSIF38,      0,
  155.     "ansif39",    K_ANSIF39,      0,
  156.     "ansif40",    K_ANSIF40,      0,
  157.     "ansif41",    K_ANSIF41,      0,
  158.     "ansif42",    K_ANSIF42,      0,
  159.     "ansif43",    K_ANSIF43,      0,
  160.     "ansif44",    K_ANSIF44,      0,
  161.     "ansif45",    K_ANSIF45,      0,
  162.     "ansif46",    K_ANSIF46,      0,
  163.     "ansif47",    K_ANSIF47,      0,
  164.     "ansif48",    K_ANSIF48,      0,
  165.     "ansif49",    K_ANSIF49,      0,
  166.     "ansif50",    K_ANSIF50,      0,
  167.     "ansif51",    K_ANSIF51,      0,
  168.     "ansif52",    K_ANSIF52,      0,
  169.     "ansif53",    K_ANSIF53,      0,
  170.     "ansif54",    K_ANSIF54,      0,
  171.     "ansif55",    K_ANSIF55,      0,
  172.     "ansif56",    K_ANSIF56,      0,
  173.     "ansif57",    K_ANSIF57,      0,
  174.     "ansif58",    K_ANSIF58,      0,
  175.     "ansif59",    K_ANSIF59,      0,
  176.     "ansif60",    K_ANSIF60,      0,
  177.     "ansif61",    K_ANSIF61,      0,
  178.  
  179.     "autodown",   K_AUTODOWN,     0,
  180.  
  181.     "ba80_attr",     K_BA80_ATTR    , 0,
  182.     "ba80_c_key",    K_BA80_C_KEY   , 0,
  183.     "ba80_clear",    K_BA80_CLEAR   , 0,
  184.     "ba80_cmd",      K_BA80_CMD     , 0,
  185.     "ba80_copy",     K_BA80_COPY    , 0,
  186.     "ba80_del",      K_BA80_DEL , 0,
  187.     "ba80_del_b",    K_BA80_DEL_B   , 0,
  188.     "ba80_do",       K_BA80_DO      , 0,
  189.     "ba80_end",      K_BA80_END , 0,
  190.     "ba80_env",      K_BA80_ENV     , 0,
  191.     "ba80_eop",      K_BA80_EOP     , 0,
  192.     "ba80_erase",    K_BA80_ERASE   , 0,
  193.     "ba80_fmt",      K_BA80_FMT     , 0,
  194.     "ba80_help",     K_BA80_HELP, 0,
  195.     "ba80_home",     K_BA80_HOME    , 0,
  196.     "ba80_ins",      K_BA80_INS , 0,
  197.     "ba80_ins_b",    K_BA80_INS_B   , 0,
  198.     "ba80_mark",     K_BA80_MARK    , 0,
  199.     "ba80_move",     K_BA80_MOVE    , 0,
  200.     "ba80_pa01",     K_BA80_PA01, 0,
  201.     "ba80_pa02",     K_BA80_PA02, 0,
  202.     "ba80_pa03",     K_BA80_PA03, 0,
  203.     "ba80_pa04",     K_BA80_PA04, 0,
  204.     "ba80_pa05",     K_BA80_PA05, 0,
  205.     "ba80_pa06",     K_BA80_PA06, 0,
  206.     "ba80_pa07",     K_BA80_PA07, 0,
  207.     "ba80_pa08",     K_BA80_PA08, 0,
  208.     "ba80_pa09",     K_BA80_PA09, 0,
  209.     "ba80_pa10",     K_BA80_PA10, 0,
  210.     "ba80_pa11",     K_BA80_PA11, 0,
  211.     "ba80_pa12",     K_BA80_PA12, 0,
  212.     "ba80_pa13",     K_BA80_PA13, 0,
  213.     "ba80_pa14",     K_BA80_PA14, 0,
  214.     "ba80_pa15",     K_BA80_PA15, 0,
  215.     "ba80_pa16",     K_BA80_PA16, 0,
  216.     "ba80_pa17",     K_BA80_PA17, 0,
  217.     "ba80_pa18",     K_BA80_PA18, 0,
  218.     "ba80_pa19",     K_BA80_PA19, 0,
  219.     "ba80_pa20",     K_BA80_PA20, 0,
  220.     "ba80_pa21",     K_BA80_PA21, 0,
  221.     "ba80_pa22",     K_BA80_PA22, 0,
  222.     "ba80_pa23",     K_BA80_PA23, 0,
  223.     "ba80_pa24",     K_BA80_PA24, 0,
  224.     "ba80_pgdn",     K_BA80_PGDN    , 0,
  225.     "ba80_pgup",     K_BA80_PGUP    , 0,
  226.     "ba80_pick",     K_BA80_PICK    , 0,
  227.     "ba80_print",    K_BA80_PRINT   , 0,
  228.     "ba80_put",      K_BA80_PUT     , 0,
  229.     "ba80_refresh",  K_BA80_REFRESH , 0,
  230.     "ba80_reset",    K_BA80_RESET   , 0,
  231.     "ba80_rubout",   K_BA80_RUBOUT  , 0,
  232.     "ba80_save",     K_BA80_SAVE    , 0,
  233.     "ba80_softkey1", K_BA80_SOFTKEY1, 0,
  234.     "ba80_softkey2", K_BA80_SOFTKEY2, 0,
  235.     "ba80_softkey3", K_BA80_SOFTKEY3, 0,
  236.     "ba80_softkey4", K_BA80_SOFTKEY4, 0,
  237.     "ba80_softkey5", K_BA80_SOFTKEY5, 0,
  238.     "ba80_softkey6", K_BA80_SOFTKEY6, 0,
  239.     "ba80_softkey7", K_BA80_SOFTKEY7, 0,
  240.     "ba80_softkey8", K_BA80_SOFTKEY8, 0,
  241.     "ba80_softkey9", K_BA80_SOFTKEY9, 0,
  242.     "ba80_undo",     K_BA80_UNDO    , 0,
  243.  
  244.     "backnext",   K_BACKNEXT,    0,
  245.     "backsearch", K_BACKSRCH,    0,
  246.     "break",      K_BREAK,       0,
  247.     "bytesize",   K_BYTESIZE,    0,
  248.     "clearscreen",K_CLRSCRN,     0,
  249.     "clearscrollback", K_CLRSCROLL, 0,
  250.     "compose",    K_COMPOSE,     0,
  251.     "debug",      K_DEBUG,       0,
  252.     "decdo",      K_DECDO,       0,
  253.     "decf01",     K_DECF1,       CM_INV,
  254.     "decf02",     K_DECF2,       CM_INV,
  255.     "decf03",     K_DECF3,       CM_INV,
  256.     "decf04",     K_DECF4,       CM_INV,
  257.     "decf05",     K_DECF5,       CM_INV,
  258.     "decf06",     K_DECF6,       CM_INV,
  259.     "decf07",     K_DECF7,       CM_INV,
  260.     "decf08",     K_DECF8,       CM_INV,
  261.     "decf09",     K_DECF9,       CM_INV,
  262.     "decf1",      K_DECF1,       0,
  263.     "decf10",     K_DECF10,      0,
  264.     "decf11",     K_DECF11,      0,
  265.     "decf12",     K_DECF12,      0,
  266.     "decf13",     K_DECF13,      0,
  267.     "decf14",     K_DECF14,      0,
  268.     "decf15",     K_DECF15,      0,
  269.     "decf16",     K_DECF16,      0,
  270.     "decf17",     K_DECF17,      0,
  271.     "decf18",     K_DECF18,      0,
  272.     "decf19",     K_DECF19,      0,
  273.     "decf2",      K_DECF2,       0,
  274.     "decf20",     K_DECF20,      0,
  275.     "decf3",      K_DECF3,       0,
  276.     "decf4",      K_DECF4,       0,
  277.     "decf5",      K_DECF5,       0,
  278.     "decf6",      K_DECF6,       0,
  279.     "decf7",      K_DECF7,       0,
  280.     "decf8",      K_DECF8,       0,
  281.     "decf9",      K_DECF9,       0,
  282.     "decfind",    K_DECFIND,     0,
  283.     "dechelp",    K_DECHELP,     0,
  284.     "dechome",    K_DECHOME,     0,
  285.     "decinsert",  K_DECINSERT,   0,
  286.     "decnext",    K_DECNEXT,     0,
  287.     "decprev",    K_DECPREV,     0,
  288.     "decremove",  K_DECREMOVE,   0,
  289.     "decselect",  K_DECSELECT,   0,
  290.     "debuglog",   K_LOGDEBUG,    CM_INV,
  291.     "dgbs",       K_DGBS, 0,
  292.     "dgc1",       K_DGC1, 0,
  293.     "dgc2",       K_DGC2, 0,
  294.     "dgc3",        K_DGC3, 0,
  295.     "dgc4",       K_DGC4, 0,
  296.     "dgcf01",      K_DGCF01,       0,
  297.     "dgcf02",      K_DGCF02,       0,
  298.     "dgcf03",      K_DGCF03,       0,
  299.     "dgcf04",      K_DGCF04,       0,
  300.     "dgcf05",      K_DGCF05,       0,
  301.     "dgcf06",      K_DGCF06,       0,
  302.     "dgcf07",      K_DGCF07,       0,
  303.     "dgcf08",      K_DGCF08,       0,
  304.     "dgcf09",      K_DGCF09,       0,
  305.     "dgcf10",      K_DGCF10,       0,
  306.     "dgcf11",      K_DGCF11,       0,
  307.     "dgcf12",      K_DGCF12,       0,
  308.     "dgcf13",      K_DGCF13,       0,
  309.     "dgcf14",      K_DGCF14,       0,
  310.     "dgcf15",      K_DGCF15,       0,
  311.     "dgcmdprint",   K_DGCMDPRINT, 0,
  312.     "dgcsf01",      K_DGCSF01,       0,
  313.     "dgcsf02",      K_DGCSF02,       0,
  314.     "dgcsf03",      K_DGCSF03,       0,
  315.     "dgcsf04",      K_DGCSF04,       0,
  316.     "dgcsf05",      K_DGCSF05,       0,
  317.     "dgcsf06",      K_DGCSF06,       0,
  318.     "dgcsf07",      K_DGCSF07,       0,
  319.     "dgcsf08",      K_DGCSF08,       0,
  320.     "dgcsf09",      K_DGCSF09,       0,
  321.     "dgcsf10",      K_DGCSF10,       0,
  322.     "dgcsf11",      K_DGCSF11,       0,
  323.     "dgcsf12",      K_DGCSF12,       0,
  324.     "dgcsf13",      K_DGCSF13,       0,
  325.     "dgcsf14",      K_DGCSF14,       0,
  326.     "dgcsf15",      K_DGCSF15,       0,
  327.     "dgdnarr",     K_DGDNARR, 0,
  328.     "dgeraseeol",     K_DGERASEEOL, 0,
  329.     "dgerasepage",     K_DGERASEPAGE, 0,
  330.     "dgf01",      K_DGF01,       0,
  331.     "dgf02",      K_DGF02,       0,
  332.     "dgf03",      K_DGF03,       0,
  333.     "dgf04",      K_DGF04,       0,
  334.     "dgf05",      K_DGF05,       0,
  335.     "dgf06",      K_DGF06,       0,
  336.     "dgf07",      K_DGF07,       0,
  337.     "dgf08",      K_DGF08,       0,
  338.     "dgf09",      K_DGF09,       0,
  339.     "dgf10",      K_DGF10,       0,
  340.     "dgf11",      K_DGF11,       0,
  341.     "dgf12",      K_DGF12,       0,
  342.     "dgf13",      K_DGF13,       0,
  343.     "dgf14",      K_DGF14,       0,
  344.     "dgf15",      K_DGF15,       0,
  345.     "dghome",     K_DGHOME,      0,
  346.     "dglfarr",     K_DGLFARR, 0,
  347.     "dgrtarr",     K_DGRTARR, 0,
  348.     "dgsc1",       K_DGSC1, 0,
  349.     "dgsc2",     K_DGSC2, 0,
  350.     "dgsc3",        K_DGSC3, 0,
  351.     "dgsc4",     K_DGSC4, 0,
  352.     "dgscmdprint",   K_DGSCMDPRINT, 0,
  353.     "dgsdnarr",     K_DGSDNARR, 0,
  354.     "dgseraseeol",     K_DGSERASEEOL, 0,
  355.     "dgserasepage",   K_DGSERASEPAGE, 0,
  356.     "dgsf01",      K_DGSF01,       0,
  357.     "dgsf02",      K_DGSF02,       0,
  358.     "dgsf03",      K_DGSF03,       0,
  359.     "dgsf04",      K_DGSF04,       0,
  360.     "dgsf05",      K_DGSF05,       0,
  361.     "dgsf06",      K_DGSF06,       0,
  362.     "dgsf07",      K_DGSF07,       0,
  363.     "dgsf08",      K_DGSF08,       0,
  364.     "dgsf09",      K_DGSF09,       0,
  365.     "dgsf10",      K_DGSF10,       0,
  366.     "dgsf11",      K_DGSF11,       0,
  367.     "dgsf12",      K_DGSF12,       0,
  368.     "dgsf13",      K_DGSF13,       0,
  369.     "dgsf14",      K_DGSF14,       0,
  370.     "dgsf15",      K_DGSF15,       0,
  371.     "dgshome",     K_DGSHOME, 0,
  372.     "dgslfarr",    K_DGSLFARR, 0,
  373.     "dgsrtarr",    K_DGSRTARR, 0,
  374.     "dgsuparr",    K_DGSUPARR, 0,
  375.     "dguparr",     K_DGUPARR, 0,
  376.     "dnarr",      K_DNARR,       0,
  377.     "dnone",      K_DNONE,       0,
  378.     "dnscn",      K_DNSCN,       0,
  379.     "dos",        K_DOS,         0,
  380.     "dump",       K_DUMP,        0,
  381.     "emacs_overwrite", K_EMACS_OVER, CM_INV,
  382.     "endscn",     K_ENDSCN,      0,
  383.     "exit",       K_EXIT,        0,
  384.     "flipscn",    K_FLIPSCN,     0,
  385.     "fnkeys",     K_FNKEYS,      0,
  386.     "fwdnext",    K_FWDNEXT,     0,
  387.     "fwdsearch",  K_FWDSRCH,     0,
  388.     "gold",       K_GOLD,        0,
  389.     "gobook",     K_GO_BOOK,     0,
  390.     "goto",       K_GOTO,        0,
  391.     "hangup",     K_HANGUP,      0,
  392.     "help",       K_HELP,        0,
  393.     "holdscrn",   K_HOLDSCRN,    0,
  394.     "homscn",     K_HOMSCN,      0,
  395.     "hpbacktab",  K_HPBACKTAB,   0,
  396.     "hpenter",    K_HPENTER,     0,
  397.     "hpf01",      K_HPF01,       0,
  398.     "hpf02",      K_HPF02,       0,
  399.     "hpf03",      K_HPF03,       0,
  400.     "hpf04",      K_HPF04,       0,
  401.     "hpf05",      K_HPF05,       0,
  402.     "hpf06",      K_HPF06,       0,
  403.     "hpf07",      K_HPF07,       0,
  404.     "hpf08",      K_HPF08,       0,
  405.     "hpf09",      K_HPF09,       0,
  406.     "hpf1",       K_HPF01,       CM_INV,
  407.     "hpf10",      K_HPF10,       0,
  408.     "hpf11",      K_HPF11,       0,
  409.     "hpf12",      K_HPF12,       0,
  410.     "hpf13",      K_HPF13,       0,
  411.     "hpf14",      K_HPF14,       0,
  412.     "hpf15",      K_HPF15,       0,
  413.     "hpf16",      K_HPF16,       0,
  414.     "hpf2",      K_HPF02,        CM_INV,
  415.     "hpf3",      K_HPF03,        CM_INV,
  416.     "hpf4",      K_HPF04,        CM_INV,
  417.     "hpf5",      K_HPF05,        CM_INV,
  418.     "hpf6",      K_HPF06,        CM_INV,
  419.     "hpf7",      K_HPF07,        CM_INV,
  420.     "hpf8",      K_HPF08,        CM_INV,
  421.     "hpf9",      K_HPF09,        CM_INV,
  422.     "hpreturn",   K_HPRETURN,    0,
  423.  
  424.     "i31_cancel", K_I31_CANCEL         ,      0,
  425.     "i31_clear", K_I31_CLEAR           ,      0,
  426.     "i31_delete", K_I31_DELETE         ,      0,
  427.     "i31_del_ln", K_I31_DEL_LN         ,      0,
  428.     "i31_erase_eof", K_I31_ERASE_EOF   ,      0,
  429.     "i31_erase_eop", K_I31_ERASE_EOP   ,      0,
  430.     "i31_erase_inp", K_I31_ERASE_INP   ,      0,
  431.     "i31_f01", K_I31_F01               ,      0,
  432.     "i31_f02", K_I31_F02               ,      0,
  433.     "i31_f03", K_I31_F03               ,      0,
  434.     "i31_f04", K_I31_F04               ,      0,
  435.     "i31_f05", K_I31_F05               ,      0,
  436.     "i31_f06", K_I31_F06               ,      0,
  437.     "i31_f07", K_I31_F07               ,      0,
  438.     "i31_f08", K_I31_F08               ,      0,
  439.     "i31_f09", K_I31_F09               ,      0,
  440.     "i31_f10", K_I31_F10               ,      0,
  441.     "i31_f11", K_I31_F11               ,      0,
  442.     "i31_f12", K_I31_F12               ,      0,
  443.     "i31_f13", K_I31_F13               ,      0,
  444.     "i31_f14", K_I31_F14               ,      0,
  445.     "i31_f15", K_I31_F15               ,      0,
  446.     "i31_f16", K_I31_F16               ,      0,
  447.     "i31_f17", K_I31_F17               ,      0,
  448.     "i31_f18", K_I31_F18               ,      0,
  449.     "i31_f19", K_I31_F19               ,      0,
  450.     "i31_f20", K_I31_F20               ,      0,
  451.     "i31_f21", K_I31_F21               ,      0,
  452.     "i31_f22", K_I31_F22               ,      0,
  453.     "i31_f23", K_I31_F23               ,      0,
  454.     "i31_f24", K_I31_F24               ,      0,
  455.     "i31_f25", K_I31_F25               ,      0,
  456.     "i31_f26", K_I31_F26               ,      0,
  457.     "i31_f27", K_I31_F27               ,      0,
  458.     "i31_f28", K_I31_F28               ,      0,
  459.     "i31_f29", K_I31_F29               ,      0,
  460.     "i31_f30", K_I31_F30               ,      0,
  461.     "i31_f31", K_I31_F31               ,      0,
  462.     "i31_f32", K_I31_F32               ,      0,
  463.     "i31_f33", K_I31_F33               ,      0,
  464.     "i31_f34", K_I31_F34               ,      0,
  465.     "i31_f35", K_I31_F35               ,      0,
  466.     "i31_f36", K_I31_F36               ,      0,
  467.     "i31_ins_char", K_I31_INSERT_CHAR  ,      0,
  468.     "i31_ins_line", K_I31_INS_LN         ,    0,
  469.     "i31_ins_space", K_I31_INSERT_SPACE,      0,
  470.     "i31_jump", K_I31_JUMP             ,      0,
  471.     "i31_pa1", K_I31_PA1               ,      0,
  472.     "i31_pa2", K_I31_PA2               ,      0,
  473.     "i31_pa3", K_I31_PA3               ,      0,
  474.     "i31_prt_line", K_I31_PRINT_LINE     ,    0,
  475.     "i31_prt_msg", K_I31_PRINT_MSG     ,      0,
  476.     "i31_prt_shift", K_I31_PRINT_SHIFT ,      0,
  477.     "i31_reset", K_I31_RESET           ,      0,
  478.     "i31_send_line", K_I31_SEND_LINE   ,      0,
  479.     "i31_send_msg", K_I31_SEND_MSG     ,      0,
  480.     "i31_send_page", K_I31_SEND_PAGE   ,      0,
  481.  
  482.     "ignore",     K_IGNORE,      0,
  483.     "kbemacs",    K_KB_EMA,      0,
  484.     "kbenglish",  K_KB_ENG,      0,
  485.     "kbhebrew",   K_KB_HEB,      0,
  486.     "kbrussian",  K_KB_RUS,      0,
  487.     "kbwp",       K_KB_WP,       0,
  488.     "keyclick",   K_KEYCLICK,    0,
  489.     "kp0",        K_KP0,         0,
  490.     "kp1",        K_KP1,         0,
  491.     "kp2",        K_KP2,         0,
  492.     "kp3",        K_KP3,         0,
  493.     "kp4",        K_KP4,         0,
  494.     "kp5",        K_KP5,         0,
  495.     "kp6",        K_KP6,         0,
  496.     "kp7",        K_KP7,         0,
  497.     "kp8",        K_KP8,         0,
  498.     "kp9",        K_KP9,         0,
  499.     "kpcoma",     K_KPCOMA,      0,
  500.     "kpdot",      K_KPDOT,       0,
  501.     "kpenter",    K_KPENTER,     0,
  502.     "kpminus",    K_KPMINUS,     0,
  503.     "lbreak",     K_LBREAK,      0,
  504.     "lfall",      K_LFALL,       0,
  505.     "lfarr",      K_LFARR,       0,
  506.     "lfone",      K_LFONE,       0,
  507.     "lfpage",     K_LFPAGE,      0,
  508.     "logoff",     K_LOGOFF,      CM_INV,
  509.     "logon",      K_LOGON,       CM_INV,
  510.     "markcancel", K_MARK_CANCEL, 0,
  511.     "markcopyclip", K_MARK_COPYCLIP, 0,
  512.     "markcopyclip_noeol", K_MARK_COPYCLIP_NOEOL, 0,
  513.     "markcopyhost", K_MARK_COPYHOST, 0,
  514.     "markcopyhost_noeol", K_MARK_COPYHOST_NOEOL, 0,
  515.     "markselect",   K_MARK_SELECT, CM_INV,
  516.     "markselect_noeol",   K_MARK_SELECT_NOEOL, CM_INV,
  517.     "markstart",  K_MARK_START,  0,
  518. /*  "modeline",   K_MODELINE,    0, */
  519. #ifdef OS2MOUSE
  520.     "mousecurpos",K_MOUSE_CURPOS,0,
  521.     "mousemark",  K_MOUSE_MARK,  0,
  522.     "mouseurl",   K_MOUSE_URL,   0,
  523. #endif /* OS2MOUSE */
  524. /*  "nethold",    K_NETHOLD,     0, */
  525. /*  "nextsession",K_NEXTSESS,    0, */
  526.     "null",       K_NULL,        0,
  527.     "os2",        K_DOS,         0,
  528.     "paste",      K_PASTE,       0,
  529.     "pcterm",     K_PCTERM,      CM_INV,
  530.     "pf1",        K_PF1,         0,
  531.     "pf2",        K_PF2,         0,
  532.     "pf3",        K_PF3,         0,
  533.     "pf4",        K_PF4,         0,
  534.     "printff",    K_PRINTFF,     0,
  535.     "prtauto",    K_PRTAUTO,     0,
  536.     "prtcopy",    K_PRTCOPY,     0,
  537.     "prtctrl",    K_PRTCTRL,     0,
  538.     "prtscn",     K_DUMP,        CM_INV,
  539.     "quit",       K_QUIT,        0,
  540.     "reset",      K_RESET,       0,
  541.     "rtall",      K_RTALL,       0,
  542.     "rtarr",      K_RTARR,       0,
  543.     "rtone",      K_RTONE,       0,
  544.     "rtpage",     K_RTPAGE,      0,
  545.     "session",    K_SESSION,     0,
  546.     "setbook",    K_SET_BOOK,    0,
  547.  
  548.     "sni_00",        K_SNI_DOUBLE_0      ,0,
  549.     "sni_c_00",        K_SNI_C_DOUBLE_0    ,0,
  550.     "sni_c_ce",        K_SNI_C_CE        ,0,
  551.     "sni_c_compose",   K_SNI_C_COMPOSE     ,0,
  552.     "sni_c_del_char",  K_SNI_C_DELETE_CHAR ,0,
  553.     "sni_c_del_line",  K_SNI_C_DELETE_LINE ,0,
  554.     "sni_c_del_word",  K_SNI_C_DELETE_WORD ,0,
  555.     "sni_c_dnarr",     K_SNI_C_CURSOR_DOWN ,0,
  556.     "sni_c_end",       K_SNI_C_END         ,0,
  557.     "sni_c_endmarke",  K_SNI_C_ENDMARKE    ,0,
  558.     "sni_c_f01",       K_SNI_C_F01       ,0,
  559.     "sni_c_f02",       K_SNI_C_F02       ,0,
  560.     "sni_c_f03",       K_SNI_C_F03       ,0,
  561.     "sni_c_f04",       K_SNI_C_F04       ,0,
  562.     "sni_c_f05",       K_SNI_C_F05       ,0,
  563.     "sni_c_f06",       K_SNI_C_F06       ,0,
  564.     "sni_c_f07",       K_SNI_C_F07       ,0,
  565.     "sni_c_f08",       K_SNI_C_F08       ,0,
  566.     "sni_c_f09",       K_SNI_C_F09       ,0,
  567.     "sni_c_f10",       K_SNI_C_F10       ,0,
  568.     "sni_c_f11",       K_SNI_C_F11       ,0,
  569.     "sni_c_f12",       K_SNI_C_F12       ,0,
  570.     "sni_c_f13",       K_SNI_C_F13       ,0,
  571.     "sni_c_f14",       K_SNI_C_F14       ,0,
  572.     "sni_c_f15",       K_SNI_C_F15       ,0,
  573.     "sni_c_f16",       K_SNI_C_F16       ,0,
  574.     "sni_c_f17",       K_SNI_C_F17       ,0,
  575.     "sni_c_f18",       K_SNI_C_F18       ,0,
  576.     "sni_c_f19",       K_SNI_C_F19       ,0,
  577.     "sni_c_f20",       K_SNI_C_F20       ,0,
  578.     "sni_c_f21",       K_SNI_C_F21       ,0,
  579.     "sni_c_f22",       K_SNI_C_F22       ,0,
  580.     "sni_c_help",      K_SNI_C_HELP      ,0,
  581.     "sni_c_home",      K_SNI_C_HOME        ,0,
  582.     "sni_c_ins_char",  K_SNI_C_INSERT_CHAR ,0,
  583.     "sni_c_ins_line",  K_SNI_C_INSERT_LINE ,0,
  584.     "sni_c_ins_word",  K_SNI_C_INSERT_WORD ,0,
  585.     "sni_c_left_tab",  K_SNI_C_LEFT_TAB  ,0,
  586.     "sni_c_lfarr",     K_SNI_C_CURSOR_LEFT ,0,
  587.     "sni_c_mode",      K_SNI_C_MODE      ,0,
  588.     "sni_c_page",      K_SNI_C_PAGE        ,0,
  589.     "sni_c_print",     K_SNI_C_PRINT     ,0,
  590.     "sni_c_rtarr",     K_SNI_C_CURSOR_RIGHT,0,
  591.     "sni_c_scroll_dn", K_SNI_C_SCROLL_DOWN ,0,
  592.     "sni_c_scroll_up", K_SNI_C_SCROLL_UP ,0,
  593.     "sni_c_start",     K_SNI_C_START     ,0,
  594.     "sni_c_uparr",     K_SNI_C_CURSOR_UP   ,0,
  595.     "sni_c_user1",     K_SNI_C_USER1       ,0,
  596.     "sni_c_user2",     K_SNI_C_USER2       ,0,
  597.     "sni_c_user3",     K_SNI_C_USER3       ,0,
  598.     "sni_c_user4",     K_SNI_C_USER4       ,0,
  599.     "sni_c_user5",     K_SNI_C_USER5       ,0,
  600.     "sni_c_tab",       K_SNI_C_TAB       ,0,
  601.     "sni_ce",        K_SNI_CE            ,0,
  602.     "sni_ch_code",   K_SNI_CH_CODE       ,0,
  603.     "sni_compose",   K_SNI_COMPOSE       ,0,
  604.     "sni_del_char",  K_SNI_DELETE_CHAR   ,0,
  605.     "sni_del_line",  K_SNI_DELETE_LINE   ,0,
  606.     "sni_del_word",  K_SNI_DELETE_WORD   ,0,
  607.     "sni_dnarr",     K_SNI_CURSOR_DOWN   ,0,
  608.     "sni_end",       K_SNI_END           ,0,
  609.     "sni_endmarke",  K_SNI_ENDMARKE      ,0,
  610.     "sni_f01",       K_SNI_F01           ,0,
  611.     "sni_f02",       K_SNI_F02           ,0,
  612.     "sni_f03",       K_SNI_F03           ,0,
  613.     "sni_f04",       K_SNI_F04           ,0,
  614.     "sni_f05",       K_SNI_F05           ,0,
  615.     "sni_f06",       K_SNI_F06           ,0,
  616.     "sni_f07",       K_SNI_F07           ,0,
  617.     "sni_f08",       K_SNI_F08           ,0,
  618.     "sni_f09",       K_SNI_F09           ,0,
  619.     "sni_f10",       K_SNI_F10           ,0,
  620.     "sni_f11",       K_SNI_F11           ,0,
  621.     "sni_f12",       K_SNI_F12           ,0,
  622.     "sni_f13",       K_SNI_F13           ,0,
  623.     "sni_f14",       K_SNI_F14           ,0,
  624.     "sni_f15",       K_SNI_F15           ,0,
  625.     "sni_f16",       K_SNI_F16           ,0,
  626.     "sni_f17",       K_SNI_F17           ,0,
  627.     "sni_f18",       K_SNI_F18           ,0,
  628.     "sni_f19",       K_SNI_F19           ,0,
  629.     "sni_f20",       K_SNI_F20           ,0,
  630.     "sni_f21",       K_SNI_F21           ,0,
  631.     "sni_f22",       K_SNI_F22           ,0,
  632.     "sni_help",      K_SNI_HELP          ,0,
  633.     "sni_home",      K_SNI_HOME          ,0,
  634.     "sni_ins_char",  K_SNI_INSERT_CHAR   ,0,
  635.     "sni_ins_line",  K_SNI_INSERT_LINE   ,0,
  636.     "sni_ins_word",  K_SNI_INSERT_WORD   ,0,
  637.     "sni_left_tab",  K_SNI_LEFT_TAB      ,0,
  638.     "sni_lfarr",     K_SNI_CURSOR_LEFT   ,0,
  639.     "sni_mode",      K_SNI_MODE          ,0,
  640.     "sni_page",      K_SNI_PAGE          ,0,
  641.     "sni_print",     K_SNI_PRINT         ,0,
  642.     "sni_rtarr",     K_SNI_CURSOR_RIGHT  ,0,
  643.     "sni_s_00",        K_SNI_S_DOUBLE_0    ,0,
  644.     "sni_s_ce",        K_SNI_S_CE        ,0,
  645.     "sni_s_compose",   K_SNI_S_COMPOSE     ,0,
  646.     "sni_s_del_char",  K_SNI_S_DELETE_CHAR ,0,
  647.     "sni_s_del_line",  K_SNI_S_DELETE_LINE ,0,
  648.     "sni_s_del_word",  K_SNI_S_DELETE_WORD ,0,
  649.     "sni_s_dnarr",     K_SNI_S_CURSOR_DOWN ,0,
  650.     "sni_s_end",       K_SNI_S_END         ,0,
  651.     "sni_s_endmarke",  K_SNI_S_ENDMARKE    ,0,
  652.     "sni_s_f01",       K_SNI_S_F01       ,0,
  653.     "sni_s_f02",       K_SNI_S_F02       ,0,
  654.     "sni_s_f03",       K_SNI_S_F03       ,0,
  655.     "sni_s_f04",       K_SNI_S_F04       ,0,
  656.     "sni_s_f05",       K_SNI_S_F05       ,0,
  657.     "sni_s_f06",       K_SNI_S_F06       ,0,
  658.     "sni_s_f07",       K_SNI_S_F07       ,0,
  659.     "sni_s_f08",       K_SNI_S_F08       ,0,
  660.     "sni_s_f09",       K_SNI_S_F09       ,0,
  661.     "sni_s_f10",       K_SNI_S_F10       ,0,
  662.     "sni_s_f11",       K_SNI_S_F11       ,0,
  663.     "sni_s_f12",       K_SNI_S_F12       ,0,
  664.     "sni_s_f13",       K_SNI_S_F13       ,0,
  665.     "sni_s_f14",       K_SNI_S_F14       ,0,
  666.     "sni_s_f15",       K_SNI_S_F15       ,0,
  667.     "sni_s_f16",       K_SNI_S_F16       ,0,
  668.     "sni_s_f17",       K_SNI_S_F17       ,0,
  669.     "sni_s_f18",       K_SNI_S_F18       ,0,
  670.     "sni_s_f19",       K_SNI_S_F19       ,0,
  671.     "sni_s_f20",       K_SNI_S_F20       ,0,
  672.     "sni_s_f21",       K_SNI_S_F21       ,0,
  673.     "sni_s_f22",       K_SNI_S_F22       ,0,
  674.     "sni_s_help",      K_SNI_S_HELP      ,0,
  675.     "sni_s_home",      K_SNI_S_HOME        ,0,
  676.     "sni_s_ins_char",  K_SNI_S_INSERT_CHAR ,0,
  677.     "sni_s_ins_line",  K_SNI_S_INSERT_LINE ,0,
  678.     "sni_s_ins_word",  K_SNI_S_INSERT_WORD ,0,
  679.     "sni_s_left_tab",  K_SNI_S_LEFT_TAB  ,0,
  680.     "sni_s_lfarr",     K_SNI_S_CURSOR_LEFT ,0,
  681.     "sni_s_mode",      K_SNI_S_MODE      ,0,
  682.     "sni_s_page",      K_SNI_S_PAGE        ,0,
  683.     "sni_s_print",     K_SNI_S_PRINT     ,0,
  684.     "sni_s_rtarr",     K_SNI_S_CURSOR_RIGHT,0,
  685.     "sni_s_scroll_dn", K_SNI_S_SCROLL_DOWN ,0,
  686.     "sni_s_scroll_up", K_SNI_S_SCROLL_UP ,0,
  687.     "sni_s_start",     K_SNI_S_START     ,0,
  688.     "sni_s_uparr",     K_SNI_S_CURSOR_UP   ,0,
  689.     "sni_s_user1",     K_SNI_S_USER1       ,0,
  690.     "sni_s_user2",     K_SNI_S_USER2       ,0,
  691.     "sni_s_user3",     K_SNI_S_USER3       ,0,
  692.     "sni_s_user4",     K_SNI_S_USER4       ,0,
  693.     "sni_s_user5",     K_SNI_S_USER5       ,0,
  694.     "sni_s_tab",       K_SNI_S_TAB       ,0,
  695.     "sni_scroll_dn", K_SNI_SCROLL_DOWN   ,0,
  696.     "sni_scroll_up", K_SNI_SCROLL_UP     ,0,
  697.     "sni_start",     K_SNI_START         ,0,
  698.     "sni_tab",       K_SNI_TAB           ,0,
  699.     "sni_uparr",     K_SNI_CURSOR_UP     ,0,
  700.     "sni_user1",     K_SNI_USER1         ,0,
  701.     "sni_user2",     K_SNI_USER2         ,0,
  702.     "sni_user3",     K_SNI_USER3         ,0,
  703.     "sni_user4",     K_SNI_USER4         ,0,
  704.     "sni_user5",     K_SNI_USER5         ,0,
  705.     "status",     K_STATUS,      0,
  706.  
  707.     "sunagain", K_SUN_AGAIN, 0,
  708.     "suncopy",  K_SUN_COPY, 0,
  709.     "suncut",   K_SUN_CUT, 0,
  710.     "sunfind",  K_SUN_FIND, 0,
  711.     "sunfront", K_SUN_FRONT, 0,
  712.     "sunhelp",  K_SUN_HELP, 0,
  713.     "sunopen",  K_SUN_OPEN, 0,
  714.     "sunpaste", K_SUN_PASTE, 0,
  715.     "sunprops", K_SUN_PROPS, 0,
  716.     "sunstop", K_SUN_STOP, 0,
  717.     "sunundo",  K_SUN_UNDO, 0,
  718.  
  719.     "termtype",   K_TERMTYPE,    0,
  720.     "tn_ao",      K_TN_AO,      0,
  721.     "tn_ayt",     K_TN_AYT,      0,
  722.     "tn_ec",      K_TN_EC,       0,
  723.     "tn_el",      K_TN_EL,       0,
  724.     "tn_ga",      K_TN_GA,       CM_INV,
  725.     "tn_ip",      K_TN_IP,       0,
  726.     "tn_logout",  K_TN_LOGOUT,   0,
  727.     "tn_naws",    K_TN_NAWS,     0,
  728.     "tn_sak",     K_TN_SAK,      0,
  729.     "tvibs",      K_TVIBS,       0,
  730.     "tviclrln",   K_TVICLRLN,    0,
  731.     "tviclrpg",   K_TVICLRPG,    0,
  732.     "tvidelchar", K_TVIDELCHAR,  0,
  733.     "tvidelln",   K_TVIDELLN,    0,
  734.     "tvidnarr",   K_TVIDNARR,    0,
  735.     "tvienter",   K_TVIENTER,    0,
  736.     "tviesc",     K_TVIESC,      0,
  737.     "tvif01",     K_TVIF01,      0,
  738.     "tvif02",     K_TVIF02,      0,
  739.     "tvif03",     K_TVIF03,      0,
  740.     "tvif04",     K_TVIF04,      0,
  741.     "tvif05",     K_TVIF05,      0,
  742.     "tvif06",     K_TVIF06,      0,
  743.     "tvif07",     K_TVIF07,      0,
  744.     "tvif08",     K_TVIF08,      0,
  745.     "tvif09",     K_TVIF09,      0,
  746.     "tvif10",     K_TVIF10,      0,
  747.     "tvif11",     K_TVIF11,      0,
  748.     "tvif12",     K_TVIF12,      0,
  749.     "tvif13",     K_TVIF13,      0,
  750.     "tvif14",     K_TVIF14,      0,
  751.     "tvif15",     K_TVIF15,      0,
  752.     "tvif16",     K_TVIF16,      0,
  753.     "tvihome",    K_TVIHOME,     0,
  754.     "tviinschar", K_TVIINSCHAR,  0,
  755.     "tviinsert",  K_TVIINSERT,   0,
  756.     "tviinsln",   K_TVIINSLN,    0,
  757.     "tvilfarr",   K_TVILFARR,    0,
  758.     "tvipgnext",  K_TVIPGNEXT,   0,
  759.     "tvipgprev",  K_TVIPGPREV,   0,
  760.     "tviprtscn",  K_TVIPRTSCN,   0,
  761.     "tvireplace", K_TVIREPLACE,  0,
  762.     "tvireturn",  K_TVIRETURN,   0,
  763.     "tvirtarr",   K_TVIRTARR,    0,
  764.     "tvisbs",     K_TVISBS,      0,
  765.     "tvisclrln",  K_TVISCLRLN,   0,
  766.     "tvisclrpg",  K_TVISCLRPG,   0,
  767.     "tvisdnarr",  K_TVISDNARR,   0,
  768.     "tvisend",    K_TVISEND,     0,
  769.     "tvisenter",  K_TVISENTER,   0,
  770.     "tvisesc",    K_TVISESC,     0,
  771.     "tvisf01",    K_TVISF01,     0,
  772.     "tvisf02",    K_TVISF02,     0,
  773.     "tvisf03",    K_TVISF03,     0,
  774.     "tvisf04",    K_TVISF04,     0,
  775.     "tvisf05",    K_TVISF05,     0,
  776.     "tvisf06",    K_TVISF06,     0,
  777.     "tvisf07",    K_TVISF07,     0,
  778.     "tvisf08",    K_TVISF08,     0,
  779.     "tvisf09",    K_TVISF09,     0,
  780.     "tvisf10",    K_TVISF10,     0,
  781.     "tvisf11",    K_TVISF11,     0,
  782.     "tvisf12",    K_TVISF12,     0,
  783.     "tvisf13",    K_TVISF13,     0,
  784.     "tvisf14",    K_TVISF14,     0,
  785.     "tvisf15",    K_TVISF15,     0,
  786.     "tvisf16",    K_TVISF16,     0,
  787.     "tvishome",   K_TVISHOME,    0,
  788.     "tvislfarr",  K_TVISLFARR,   0,
  789.     "tvisreturn", K_TVISRETURN,  0,
  790.     "tvisrtarr",  K_TVISRTARR,   0,
  791.     "tvissend",   K_TVISSEND,    0,
  792.     "tvistab",    K_TVISTAB,     0,
  793.     "tvisuparr",  K_TVISUPARR,   0,
  794.     "tvitab",     K_TVITAB,      0,
  795.     "tviuparr",   K_TVIUPARR,    0,
  796.     "ucs2",       K_C_UNI16,     0,
  797.     "udkf1",      K_UDKF1,       0,
  798.     "udkf2",      K_UDKF2,       0,
  799.     "udkf3",      K_UDKF3,       0,
  800.     "udkf4",      K_UDKF4,       0,
  801.     "udkf5",      K_UDKF5,       0,
  802.     "udkdo",      K_UDKDO,       0,
  803.     "udkf6",      K_UDKF6,       0,
  804.     "udkf7",      K_UDKF7,       0,
  805.     "udkf8",      K_UDKF8,       0,
  806.     "udkf9",      K_UDKF9,       0,
  807.     "udkf10",     K_UDKF10,      0,
  808.     "udkf11",     K_UDKF11,      0,
  809.     "udkf12",     K_UDKF12,      0,
  810.     "udkf13",     K_UDKF13,      0,
  811.     "udkf14",     K_UDKF14,      0,
  812.     "udkf15",     K_UDKF15,      CM_INV,
  813.     "udkf16",     K_UDKF16,      CM_INV,
  814.     "udkf17",     K_UDKF17,      0,
  815.     "udkf18",     K_UDKF18,      0,
  816.     "udkf19",     K_UDKF19,      0,
  817.     "udkf20",     K_UDKF20,      0,
  818.     "udkhelp",    K_UDKHELP,     0,
  819.     "uparr",      K_UPARR,       0,
  820.     "upone",      K_UPONE,       0,
  821.     "upscn",      K_UPSCN,       0,
  822.     "url",        K_CURSOR_URL,  0,
  823.     "url-highlight", K_URLHILT,  0,
  824.     "wybs",       K_WYBS,        0,
  825.     "wyclrln",    K_WYCLRLN,     0,
  826.     "wyclrpg",    K_WYCLRPG,     0,
  827.     "wydelchar",  K_WYDELCHAR,   0,
  828.     "wydelln",    K_WYDELLN,     0,
  829.     "wydnarr",    K_WYDNARR,     CM_INV,
  830.     "wyenter",    K_WYENTER,     0,
  831.     "wyesc",      K_WYESC,       0,
  832.     "wyf01",      K_WYF01,       0,
  833.     "wyf02",      K_WYF02,       0,
  834.     "wyf03",      K_WYF03,       0,
  835.     "wyf04",      K_WYF04,       0,
  836.     "wyf05",      K_WYF05,       0,
  837.     "wyf06",      K_WYF06,       0,
  838.     "wyf07",      K_WYF07,       0,
  839.     "wyf08",      K_WYF08,       0,
  840.     "wyf09",      K_WYF09,       0,
  841.     "wyf10",      K_WYF10,       0,
  842.     "wyf11",      K_WYF11,       0,
  843.     "wyf12",      K_WYF12,       0,
  844.     "wyf13",      K_WYF13,       0,
  845.     "wyf14",      K_WYF14,       0,
  846.     "wyf15",      K_WYF15,       0,
  847.     "wyf16",      K_WYF16,       0,
  848.     "wyf17",      K_WYF17,       0,
  849.     "wyf18",      K_WYF18,       0,
  850.     "wyf19",      K_WYF19,       0,
  851.     "wyf20",      K_WYF20,       0,
  852.     "wyhome",     K_WYHOME,      0,
  853.     "wyinschar",  K_WYINSCHAR,   0,
  854.     "wyinsert",   K_WYINSERT,    0,
  855.     "wyinsln",    K_WYINSLN,     0,
  856.     "wylfarr",    K_WYLFARR,     CM_INV,
  857.     "wypgnext",   K_WYPGNEXT,    0,
  858.     "wypgprev",   K_WYPGPREV,    0,
  859.     "wyprtscn",   K_WYPRTSCN,    0,
  860.     "wyreplace",  K_WYREPLACE,   0,
  861.     "wyreturn",   K_WYRETURN,    0,
  862.     "wyrtarr",    K_WYRTARR,     CM_INV,
  863.     "wysbs",      K_WYSBS,       0,
  864.     "wysclrln",   K_WYSCLRLN,    0,
  865.     "wysclrpg",   K_WYSCLRPG,    0,
  866.     "wysdnarr",   K_WYSDNARR,    0,
  867.     "wysend",     K_WYSEND,      0,
  868.     "wysenter",   K_WYSENTER,    0,
  869.     "wysesc",     K_WYSESC,      0,
  870.     "wysf01",     K_WYSF01,      0,
  871.     "wysf02",     K_WYSF02,      0,
  872.     "wysf03",     K_WYSF03,      0,
  873.     "wysf04",     K_WYSF04,      0,
  874.     "wysf05",     K_WYSF05,      0,
  875.     "wysf06",     K_WYSF06,      0,
  876.     "wysf07",     K_WYSF07,      0,
  877.     "wysf08",     K_WYSF08,      0,
  878.     "wysf09",     K_WYSF09,      0,
  879.     "wysf10",     K_WYSF10,      0,
  880.     "wysf11",     K_WYSF11,      0,
  881.     "wysf12",     K_WYSF12,      0,
  882.     "wysf13",     K_WYSF13,      0,
  883.     "wysf14",     K_WYSF14,      0,
  884.     "wysf15",     K_WYSF15,      0,
  885.     "wysf16",     K_WYSF16,      0,
  886.     "wysf17",     K_WYSF17,      0,
  887.     "wysf18",     K_WYSF18,      0,
  888.     "wysf19",     K_WYSF19,      0,
  889.     "wysf20",     K_WYSF20,      0,
  890.     "wyshome",    K_WYSHOME,     0,
  891.     "wyslfarr",   K_WYSLFARR,    0,
  892.     "wysreturn",  K_WYSRETURN,   0,
  893.     "wysrtarr",   K_WYSRTARR,    0,
  894.     "wyssend",    K_WYSSEND,     0,
  895.     "wystab",     K_WYSTAB,      0,
  896.     "wysuparr",   K_WYSUPARR,    0,
  897.     "wytab",      K_WYTAB,       0,
  898.     "wyuparr",    K_WYUPARR,     CM_INV
  899. };
  900. int nkverbs = (sizeof(kverbs) / sizeof(struct keytab));
  901. #endif /* NOKVERBS */
  902.  
  903. #ifndef NOLOCAL
  904. void
  905. clickkeys(void)
  906. {
  907.     if ( keyclick )
  908. #ifdef NT
  909.     Beep( 1600, 15 ) ;
  910. #else /* NT */
  911.     DosBeep( 1600, 15 ) ;
  912. #endif /* NT */
  913. }
  914. #endif /* NOLOCAL */
  915.  
  916. USHORT
  917. getshiftstate( void ) {
  918. #ifdef NT
  919.     /* ??? returns VK_SHIFT, VK_CONTROL, VK_MENU (ALT) */
  920.     /* ??? these probably do not match OS/2 */
  921.     BYTE keystate = 0;
  922.     GetKeyboardState(&keystate);
  923.     return keystate;
  924. #else /* NT */
  925.     KBDINFO k ;
  926.  
  927.     memset( &k, 0, sizeof(k) ) ;
  928.     k.cb = sizeof(k) ;
  929.     KbdGetStatus( &k, KbdHandle ) ;
  930.     return k.fsState ;
  931. #endif  /* NT */
  932. }
  933.  
  934.  
  935. /* Begin Keyboard Buffer Code
  936.    This is a simple implementation of a circular queue with access
  937.    protected by a Mutual Exclusion Semaphore
  938. */
  939.  
  940. #define KEY_BUF_SIZE (65536 / sizeof(con_event))
  941. con_event Keystroke[VNUM][KEY_BUF_SIZE] ;
  942. int start[VNUM]={0,0,0}, end[VNUM]={0,0,0} ;
  943.  
  944. void
  945. keybufinit( void ) {
  946.    int i,j ;
  947.  
  948.     CreateEventAvailSem( FALSE );
  949.     CreateKeyStrokeMutex( TRUE ) ;
  950.     CreateKeyboardMutex( FALSE ) ;
  951.     for ( j=0 ; j<VNUM ; j++ )
  952.     {
  953.         for ( i = 0 ; i < KEY_BUF_SIZE ; i++ )
  954.             memset(&Keystroke[j][i],0,sizeof(con_event)) ;
  955.         start[j] = 0 ;
  956.         end[j] = 0 ;
  957.         ReleaseKeyStrokeMutex(j) ;
  958.     }
  959. }
  960.  
  961. void
  962. keybufcleanup( void ) {
  963.     CloseKeyStrokeMutex() ;
  964.     CloseKeyboardMutex() ;
  965.     CloseEventAvailSem() ;
  966. }
  967.  
  968. int
  969. keyinbuf( int kmode ) {
  970.     int rc = 0, count = 0;
  971.  
  972.     rc = RequestKeyStrokeMutex( kmode, SEM_INDEFINITE_WAIT ) ;
  973.  
  974.     if ( start[kmode] != end[kmode] )
  975.     {
  976.         int i = start[kmode] ;
  977.         for ( ; i != end[kmode] ; i++ )
  978.         {
  979.             if ( i == KEY_BUF_SIZE )
  980.               i = 0 ;
  981.             if ( Keystroke[kmode][i].type == key ) {
  982.               count++ ;
  983.             }
  984.         }
  985.     }
  986.     rc = ReleaseKeyStrokeMutex(kmode) ;
  987.     return count;
  988. }
  989.  
  990. int
  991. charinbuf( int kmode ) {
  992.     int rc = 0, count = 0;
  993.  
  994.     rc = RequestKeyStrokeMutex( kmode, SEM_INDEFINITE_WAIT ) ;
  995.  
  996.     if ( start[kmode] != end[kmode] )
  997.     {
  998.         int i = start[kmode] ;
  999.         for ( ; i != end[kmode] ; i++ )
  1000.         {
  1001.             if ( i == KEY_BUF_SIZE )
  1002.               i = 0 ;
  1003.             if ( Keystroke[kmode][i].type == key &&
  1004.                  Keystroke[kmode][i].key.scancode < 256 )
  1005.             {
  1006.                 count++ ;
  1007.             } else if ( Keystroke[kmode][i].type == macro ) {
  1008.                 count += strlen(Keystroke[kmode][i].macro.string);
  1009.             } else if ( Keystroke[kmode][i].type == literal ) {
  1010.                 count += strlen(Keystroke[kmode][i].literal.string);
  1011.             }
  1012.         }
  1013.     }
  1014.     rc = ReleaseKeyStrokeMutex(kmode) ;
  1015.     return count;
  1016. }
  1017.  
  1018. int
  1019. evtinbuf( int kmode ) {
  1020.     int rc = 0, count = 0 ;
  1021.  
  1022.     debug(F111,"evtinbuf","kmode",kmode);
  1023.     rc = RequestKeyStrokeMutex( kmode, SEM_INDEFINITE_WAIT ) ;
  1024.     debug(F111,"evtinbuf","RequestKeyStrokeMutex",rc);
  1025.  
  1026.     debug(F111,"evtinbuf","start[kmode]",start[kmode]);
  1027.     debug(F111,"evtinbuf","end[kmode]",end[kmode]);
  1028.     if ( start[kmode] != end[kmode] )
  1029.     {
  1030.         count = (end[kmode] - start[kmode] + KEY_BUF_SIZE)%KEY_BUF_SIZE;
  1031.     }
  1032.     rc = ReleaseKeyStrokeMutex(kmode) ;
  1033.     debug(F111,"evtinbuf","ReleaseKeyStrokeMutex",rc);
  1034.     debug(F111,"evtinbuf","count",count);
  1035.     return count ;
  1036. }
  1037.  
  1038. int
  1039. putkeystr( int kmode, char * s )
  1040. {
  1041.     char * p ;
  1042.     int rc = 0 ;
  1043.     for ( p=s; *p && !rc ; p++ )
  1044.       rc = putkey( kmode, *p ) ;
  1045.     return rc ;
  1046. }
  1047.  
  1048. int
  1049. putkey( int kmode, int k ) {
  1050.     extern MACRO * macrotab ;
  1051.     int rc = 0, count = 0 ;
  1052.     con_event evt ;
  1053.  
  1054. #ifndef NOSETKEY
  1055.     evt = mapkey(k) ;
  1056. #else /* NOSETKEY */
  1057.     evt.type = key ;
  1058.     evt.key.scancode = k;
  1059. #endif /* NOSETKEY */
  1060.  
  1061.     debug(F111,"putkey","evt.type",(int)evt.type);
  1062. #ifndef NOKVERBS
  1063.     if ( !VscrnIsPopup(kmode) &&
  1064.          os2gks && evt.type == kverb ) {
  1065.         putkverb(kmode, evt.kverb.id & ~F_KVERB);
  1066.     }
  1067.     else if ( os2gks && evt.type != error && evt.type != key) {
  1068.         putevent( kmode, evt ) ;
  1069.     }
  1070.     else
  1071. #endif /* NOKVERBS */
  1072.     {
  1073.         if (
  1074. #ifndef NOKVERBS
  1075.              !os2gks ||
  1076. #endif /* NOKVERBS */
  1077.              evt.type == error ) {
  1078.             evt.type = key ;
  1079.             evt.key.scancode = k ;
  1080.             debug(F111,"putkey()","evt.key.scancode",k);
  1081.         }
  1082.         RequestKeyStrokeMutex( kmode, SEM_INDEFINITE_WAIT ) ;
  1083.         while ( (start[kmode] - end[kmode] == 1) ||
  1084.                 ( start[kmode] == 0 && end[kmode] == KEY_BUF_SIZE - 1 ) )
  1085.             /* Buffer is full */
  1086.         {
  1087.             ReleaseKeyStrokeMutex(kmode) ;
  1088.             if ( ++count > 4 ) {
  1089.                 bleep(BP_WARN);
  1090.                 return(-1);
  1091.             }
  1092.             msleep(250);
  1093.             RequestKeyStrokeMutex( kmode, SEM_INDEFINITE_WAIT ) ;
  1094.         }
  1095.  
  1096.         Keystroke[kmode][end[kmode]++] = evt ;
  1097.         if ( end[kmode] == KEY_BUF_SIZE )
  1098.             end[kmode] = 0 ;
  1099.         PostEventAvailSem(kmode)  ;
  1100.         ReleaseKeyStrokeMutex(kmode) ;
  1101.     }
  1102.     return rc ;
  1103. }
  1104.  
  1105. #ifndef NOKVERBS
  1106. struct kverb_call {
  1107.     int kmode;
  1108.     int km;
  1109. };
  1110.  
  1111. static void
  1112. kverb_thread(struct kverb_call *kc)
  1113. {
  1114.     if ( kc ) {
  1115.         kbdCallsKverb = 1;
  1116.         dokverb( kc->kmode, kc->km );
  1117.         kbdCallsKverb = 0;
  1118.         free(kc);
  1119.     }
  1120. }
  1121.  
  1122. /* 
  1123.  * K_DUMP will spawn a thread from dokverb()
  1124.  */
  1125.  
  1126. int
  1127. putkverb( int kmode, int k ) {
  1128.     int rc = 0 ;
  1129.     int count = 0;
  1130.     con_event evt ;
  1131.     int km = 0 ;
  1132.     extern enum markmodes markmodeflag[VNUM];
  1133.     extern int SysInited;
  1134.  
  1135.     evt.type = kverb ;
  1136.     evt.kverb.id = k | F_KVERB ;
  1137.  
  1138.     /* Handle Scroll and Mark events immediately */
  1139.     km = evt.kverb.id & ~F_KVERB;
  1140.  
  1141.     if (SysInited) {
  1142.         if (km >= K_ROLLMIN && km <= K_HOMSCN ||
  1143.              /* Can't let K_GO_BOOK or K_GOTO be executed in this thread */
  1144.              km >= K_MARK_START && km <= K_MARK_SELECT ||
  1145.              km >= K_ARR_MIN && km <= K_ARR_MAX && markmodeflag[kmode] != notmarking ||
  1146.              km >= K_LFONE && km <= K_RTALL ||
  1147.              km >= K_KB_ENG && km <= K_KB_WP ||
  1148.              km == K_LOGDEBUG ||
  1149.              km == K_DEBUG ||
  1150.              km == K_HOLDSCRN ||
  1151.              km == K_EXIT ||
  1152.              km == K_HANGUP ||
  1153.          km == K_DUMP && markmodeflag[kmode] != notmarking ||
  1154. #ifdef OS2MOUSE
  1155.              km >= K_MOUSE_MIN && km <= K_MOUSE_MAX
  1156. #endif /* OS2MOUSE */
  1157.              )
  1158.         {
  1159.             kbdCallsKverb = 1;
  1160.             dokverb( kmode, km );
  1161.             kbdCallsKverb = 0;
  1162.             return 0;
  1163.         }
  1164.         else if ( km == K_QUIT ||
  1165.                   km == K_CURSOR_URL ||
  1166.                   km >= K_TN_AO && km <= K_TN_LOGOUT || km == K_TN_AYT ||
  1167.                   km == K_LOGON || km == K_LOGOFF || km == K_STATUS  ||
  1168.                   km == K_RESET || km == K_DUMP ||
  1169.                   km == K_TN_IP
  1170.                   )
  1171.         {
  1172.             struct kverb_call * kc = malloc(sizeof(struct kverb_call));
  1173.             if ( kc ) {
  1174.                 kc->kmode = kmode;
  1175.                 kc->km = km;
  1176.                 _beginthread(&kverb_thread,
  1177. #ifndef NT
  1178.                               0,
  1179. #endif /* NT */
  1180.                               65536,
  1181.                               (void *)kc);
  1182.                 return 0;
  1183.             }
  1184.         }
  1185.     }
  1186.  
  1187.     RequestKeyStrokeMutex( kmode, SEM_INDEFINITE_WAIT ) ;
  1188.     while ( (start[kmode] - end[kmode] == 1) ||
  1189.             ( start[kmode] == 0 && end[kmode] == KEY_BUF_SIZE - 1 ) )
  1190.        /* Buffer is full */
  1191.     {
  1192.         ReleaseKeyStrokeMutex(kmode) ;
  1193.         if ( ++count > 4 ) {
  1194.             bleep(BP_WARN);
  1195.             return(-1);
  1196.         }
  1197.         msleep(250);
  1198.         RequestKeyStrokeMutex( kmode, SEM_INDEFINITE_WAIT ) ;
  1199.     }
  1200.  
  1201.     Keystroke[kmode][end[kmode]++] = evt ;
  1202.     if ( end[kmode] == KEY_BUF_SIZE )
  1203.       end[kmode] = 0 ;
  1204.     PostEventAvailSem(kmode)  ;
  1205.     ReleaseKeyStrokeMutex(kmode) ;
  1206.  
  1207.     return rc ;
  1208. }
  1209. #endif /* NOKVERBS */
  1210. int
  1211. puterror( int kmode ) {
  1212.     int rc = 0, count = 0 ;
  1213.     con_event evt ;
  1214.  
  1215.     evt.type = error ;
  1216.  
  1217.     RequestKeyStrokeMutex( kmode, SEM_INDEFINITE_WAIT ) ;
  1218.     while ( (start[kmode] - end[kmode] == 1) || ( start[kmode] == 0 && end[kmode] == KEY_BUF_SIZE - 1 ) )
  1219.        /* Buffer is full */
  1220.     {
  1221.         ReleaseKeyStrokeMutex(kmode) ;
  1222.         if ( ++count > 4 ) {
  1223.             bleep(BP_WARN);
  1224.             return(-1);
  1225.         }
  1226.         msleep(250);
  1227.         RequestKeyStrokeMutex( kmode, SEM_INDEFINITE_WAIT ) ;
  1228.     }
  1229.  
  1230.     Keystroke[kmode][end[kmode]++] = evt ;
  1231.     if ( end[kmode] == KEY_BUF_SIZE )
  1232.       end[kmode] = 0 ;
  1233.     PostEventAvailSem(kmode)  ;
  1234.     ReleaseKeyStrokeMutex(kmode) ;
  1235.  
  1236.     return rc ;
  1237. }
  1238.  
  1239. int
  1240. putesc( int kmode, int k ) {
  1241.     int rc = 0, count = 0 ;
  1242.     con_event evt ;
  1243.  
  1244.     evt.type = esc ;
  1245.     evt.esc.key = k & ~F_ESC ;
  1246.  
  1247.     RequestKeyStrokeMutex( kmode, SEM_INDEFINITE_WAIT ) ;
  1248.     while ( (start[kmode] - end[kmode] == 1) || ( start[kmode] == 0 && end[kmode] == KEY_BUF_SIZE - 1 ) )
  1249.        /* Buffer is full */
  1250.     {
  1251.         ReleaseKeyStrokeMutex(kmode) ;
  1252.         if ( ++count > 4 ) {
  1253.             bleep(BP_WARN);
  1254.             return(-1);
  1255.         }
  1256.         msleep(250);
  1257.         RequestKeyStrokeMutex( kmode, SEM_INDEFINITE_WAIT ) ;
  1258.     }
  1259.  
  1260.     Keystroke[kmode][end[kmode]++] = evt ;
  1261.     if ( end[kmode] == KEY_BUF_SIZE )
  1262.       end[kmode] = 0 ;
  1263.     PostEventAvailSem(kmode)  ;
  1264.     ReleaseKeyStrokeMutex(kmode) ;
  1265.  
  1266.     return rc ;
  1267. }
  1268.  
  1269. int
  1270. putcsi( int kmode, int k ) {
  1271.     int rc = 0, count = 0 ;
  1272.     con_event evt ;
  1273.  
  1274.     evt.type = csi ;
  1275.     evt.csi.key = k & ~F_CSI ;
  1276.  
  1277.     RequestKeyStrokeMutex( kmode, SEM_INDEFINITE_WAIT ) ;
  1278.     while ( (start[kmode] - end[kmode] == 1) || ( start[kmode] == 0 && end[kmode] == KEY_BUF_SIZE - 1 ) )
  1279.        /* Buffer is full */
  1280.     {
  1281.         ReleaseKeyStrokeMutex(kmode) ;
  1282.         if ( ++count > 4 ) {
  1283.             bleep(BP_WARN);
  1284.             return(-1);
  1285.         }
  1286.         msleep(250);
  1287.         RequestKeyStrokeMutex( kmode, SEM_INDEFINITE_WAIT ) ;
  1288.     }
  1289.  
  1290.     Keystroke[kmode][end[kmode]++] = evt ;
  1291.     if ( end[kmode] == KEY_BUF_SIZE )
  1292.       end[kmode] = 0 ;
  1293.     PostEventAvailSem(kmode)  ;
  1294.     ReleaseKeyStrokeMutex(kmode) ;
  1295.  
  1296.     return rc ;
  1297. }
  1298.  
  1299. int
  1300. putmacro( int kmode, char * s ) {
  1301.     int rc = 0, count = 0 ;
  1302.     con_event evt ;
  1303.  
  1304.     evt.type = macro ;
  1305.     evt.macro.string = strdup(s) ;
  1306.  
  1307.     RequestKeyStrokeMutex( kmode, SEM_INDEFINITE_WAIT ) ;
  1308.     while ( (start[kmode] - end[kmode] == 1) || ( start[kmode] == 0 && end[kmode] == KEY_BUF_SIZE - 1 ) )
  1309.       /* Buffer is full */
  1310.     {
  1311.         ReleaseKeyStrokeMutex(kmode) ;
  1312.         if ( ++count > 4 ) {
  1313.             bleep(BP_WARN);
  1314.             return(-1);
  1315.         }
  1316.         msleep(250);
  1317.         RequestKeyStrokeMutex( kmode, SEM_INDEFINITE_WAIT ) ;
  1318.     }
  1319.     Keystroke[kmode][end[kmode]++] = evt ;
  1320.     if ( end[kmode] == KEY_BUF_SIZE )
  1321.       end[kmode] = 0 ;
  1322.     PostEventAvailSem(kmode)  ;
  1323.     ReleaseKeyStrokeMutex(kmode) ;
  1324.  
  1325.     return rc ;
  1326. }
  1327.  
  1328. int
  1329. putliteral( int kmode, char * s ) {
  1330.     int rc = 0, count = 0 ;
  1331.     con_event evt ;
  1332.  
  1333.     evt.type = literal ;
  1334.     evt.literal.string = strdup(s) ;
  1335.  
  1336.     RequestKeyStrokeMutex( kmode, SEM_INDEFINITE_WAIT ) ;
  1337.     while ( (start[kmode] - end[kmode] == 1) || ( start[kmode] == 0 && end[kmode] == KEY_BUF_SIZE - 1 ) )
  1338.       /* Buffer is full */
  1339.     {
  1340.         ReleaseKeyStrokeMutex(kmode) ;
  1341.         if ( ++count > 4 ) {
  1342.             bleep(BP_WARN);
  1343.             return(-1);
  1344.         }
  1345.         msleep(250);
  1346.         RequestKeyStrokeMutex( kmode, SEM_INDEFINITE_WAIT ) ;
  1347.     }
  1348.     Keystroke[kmode][end[kmode]++] = evt ;
  1349.     if ( end[kmode] == KEY_BUF_SIZE )
  1350.       end[kmode] = 0 ;
  1351.     PostEventAvailSem(kmode)  ;
  1352.     ReleaseKeyStrokeMutex(kmode) ;
  1353.  
  1354.     return rc ;
  1355. }
  1356. #ifdef OS2MOUSE
  1357. int
  1358. putclick( int kmode, char but, char alt, char ctrl, char shift, char dbl, char drag ) {
  1359.     int rc = 0, count = 0 ;
  1360.     con_event evt ;
  1361.  
  1362.     evt.type = mouse ;
  1363.     evt.mouse.button = but;
  1364.     evt.mouse.alt    = (alt != 0);
  1365.     evt.mouse.ctrl   = (ctrl != 0);
  1366.     evt.mouse.shift  = (shift != 0);
  1367.     evt.mouse.dbl    = (dbl != 0);
  1368.     evt.mouse.drag   = (drag != 0);
  1369.  
  1370.     RequestKeyStrokeMutex( kmode, SEM_INDEFINITE_WAIT ) ;
  1371.     while ( (start[kmode] - end[kmode] == 1) || ( start[kmode] == 0 && end[kmode] == KEY_BUF_SIZE - 1 ) )
  1372.       /* Buffer is full */
  1373.     {
  1374.         ReleaseKeyStrokeMutex(kmode) ;
  1375.         if ( ++count > 4 ) {
  1376.             bleep(BP_WARN);
  1377.             return(-1);
  1378.         }
  1379.         msleep(250);
  1380.         RequestKeyStrokeMutex( kmode, SEM_INDEFINITE_WAIT ) ;
  1381.     }
  1382.     Keystroke[kmode][end[kmode]++] = evt ;
  1383.     if ( end[kmode] == KEY_BUF_SIZE )
  1384.       end[kmode] = 0 ;
  1385.     PostEventAvailSem(kmode)  ;
  1386.     ReleaseKeyStrokeMutex(kmode) ;
  1387.  
  1388.     return rc ;
  1389. }
  1390. #endif /* OS2MOUSE */
  1391.  
  1392. int
  1393. putevent( int kmode, con_event e ) {
  1394.     int rc = 0;
  1395.     con_event evt ;
  1396.  
  1397.     switch ( e.type ) {
  1398.     case key:
  1399.         rc = putkey( kmode, e.key.scancode ) ;
  1400.         break;
  1401. #ifndef NOKVERBS
  1402.     case kverb:
  1403.         rc = putkverb( kmode, e.kverb.id ) ;
  1404.         break;
  1405. #endif /* NOKVERBS */
  1406.     case macro:
  1407.         rc = putmacro( kmode, e.macro.string ) ;
  1408.         break;
  1409.     case literal:
  1410.         rc = putliteral( kmode, e.literal.string ) ;
  1411.         break;
  1412. #ifdef OS2MOUSE
  1413.     case mouse:
  1414.         rc = putclick( kmode, e.mouse.button, e.mouse.alt, e.mouse.ctrl,
  1415.                        e.mouse.shift, e.mouse.dbl, e.mouse.drag ) ;
  1416.         break;
  1417. #endif /* OS2MOUSE */
  1418.     case csi:
  1419.         rc = putcsi( kmode, e.csi.key ) ;
  1420.         break;
  1421.     case esc:
  1422.         rc = putesc( kmode, e.esc.key ) ;
  1423.         break;
  1424.     case error:
  1425.         rc = puterror( kmode );
  1426.         break;
  1427.     };
  1428.  
  1429.     return rc ;
  1430. }
  1431.  
  1432. int
  1433. getevent( int kmode, con_event * evt ) {
  1434.     int rc = 0, fc = 0 ;
  1435.     ULONG PostCount ;
  1436.  
  1437.     fc = RequestKeyStrokeMutex( kmode, SEM_INDEFINITE_WAIT ) ;
  1438.     debug(F111,"getevent","RequestKeyStrokeMutex()",fc);
  1439.     if ( start[kmode] != end[kmode] ) {
  1440.         *evt = Keystroke[kmode][start[kmode]] ;
  1441.         memset(&Keystroke[kmode][start[kmode]],0,sizeof(con_event)) ;
  1442.         start[kmode]++ ;
  1443.  
  1444.         if ( start[kmode] == KEY_BUF_SIZE )
  1445.           start[kmode] = 0 ;
  1446.  
  1447.         if ( start[kmode] == end[kmode] ) {
  1448.             fc = ResetEventAvailSem(kmode) ;
  1449.             debug(F111,"getevent","ResetEventAvailSem()",fc);
  1450.         }
  1451.         rc++ ;
  1452.     }
  1453.     else
  1454.     {
  1455.         evt->type = error ;
  1456.     }
  1457.     fc = ReleaseKeyStrokeMutex(kmode) ;
  1458.     debug(F111,"getevent","ReleaseKeyStrokeMutex()",fc);
  1459.     return rc ;
  1460. }
  1461.  
  1462. #ifndef NOLOCAL
  1463. #ifndef KUI
  1464. /* Begin Keyboard Handler Thread Code */
  1465. int
  1466. KbdHandlerInit( void ) {
  1467.     int rc = 0 ;
  1468.  
  1469.     debug(F100,"KbdHandlerInit called","",0);
  1470.     KbdActive = 1 ;
  1471.  
  1472.     CreateKbdThreadSem( FALSE ) ;
  1473.     tidKbdHandler = (TID) ckThreadBegin( &KbdHandlerThread,
  1474.                                          THRDSTKSIZ, 0, FALSE, 0 ) ;
  1475.     if ( tidKbdHandler == (TID) -1 ) {
  1476.         printf( "Sorry, can't create KbdHandlerThread\n" ) ;
  1477.         rc = -1 ;
  1478.     }
  1479.     else {
  1480.         WaitAndResetKbdThreadSem( SEM_INDEFINITE_WAIT ) ;
  1481.     }
  1482.     return rc ;
  1483. }
  1484.  
  1485. int
  1486. KbdHandlerCleanup( void ) {
  1487.     APIRET rc=0 ;
  1488.     int n = 0;
  1489.     if ( !tidKbdHandler )
  1490.         return(0);
  1491.  
  1492.     debug(F100,"KbdHandlerCleanup called","",0);
  1493.         ResetKbdThreadSem();
  1494.     KbdActive = 0 ;
  1495.     while ( !kbdCallsKverb && !WaitAndResetKbdThreadSem( 1000 ) && n++ < 5) {
  1496.         debug(F111,"Waiting for KbdThreadSem","n",n) ;
  1497.     }
  1498.     tidKbdHandler = (TID) 0 ;   /* This will be closed by the thread */
  1499.     CloseKbdThreadSem() ;
  1500.     return 0 ;
  1501. }
  1502. #endif /* KUI */
  1503. #endif /* NOLOCAL */
  1504.  
  1505. /* KbdHandlerThread() needs to be updated to support non-local mode
  1506.     and alternative inputs (pipes) */
  1507.  
  1508. #ifdef NT
  1509. /* NT version of KbdHandlerThread handles all Keyboard, Mouse, and Windows
  1510.    resizing events */
  1511.  
  1512. #ifndef NOLOCAL
  1513. win32WindowEvent( int mode, WINDOW_BUFFER_SIZE_RECORD r )
  1514. {
  1515.     LONG sz ;
  1516.     extern int ttmdm, me_naws;
  1517. #ifdef TCPSOCKET
  1518. _PROTOTYP( int tn_snaws, (void) ) ;
  1519. #ifdef RLOGCODE
  1520. _PROTOTYP( int rlog_naws, (void) ) ;
  1521. #endif /* RLOGCODE */
  1522. #endif /* TCPSOCKET */
  1523. #ifndef COMMENT
  1524.      char buf[64] ;
  1525.      sprintf(buf, "win32 Window Event: (%d,%d)\n", r.dwSize.X, r.dwSize.Y ) ;
  1526.      debug(F100,buf,"",0) ;
  1527. #endif /* COMMENT */
  1528.      if ( VscrnGetWidth(mode) != r.dwSize.X || VscrnGetHeight(mode) != r.dwSize.Y ){
  1529.          sz = (VscrnGetEnd(mode) - VscrnGetTop(mode)
  1530.                 + VscrnGetBufferSize(mode) + 1)%VscrnGetBufferSize(mode) ;
  1531.          VscrnSetWidth( mode, r.dwSize.X ) ;
  1532.          VscrnSetHeight( mode, r.dwSize.Y ) ;
  1533.          VscrnScroll( mode, UPWARD, 1, sz, sz, TRUE, SP ) ;
  1534.          cleartermscreen(mode);
  1535. #ifdef TCPSOCKET
  1536.          if (ttmdm < 0 && TELOPT_ME(TELOPT_NAWS)) {
  1537.              tn_snaws() ;
  1538. #ifdef RLOGCODE
  1539.              rlog_naws() ;
  1540. #endif /* RLOGCODE */
  1541. #ifdef SSHBUILTIN
  1542.              ssh_snaws();
  1543. #endif /* SSHBUILTIN */
  1544.          }
  1545. #endif /* TCPSOCKET */
  1546.      }
  1547. }
  1548. #endif /* NOLOCAL */
  1549.  
  1550. int
  1551. getKeycodeFromKeyRec( KEY_EVENT_RECORD * pkeyrec, WORD * buf, int chcount )
  1552. {
  1553.     int c= -1, k, km ;
  1554.     extern int ckconraw ;
  1555.     int keycount = 1 ;
  1556.     char ch;
  1557.     static char keystate[256] ;
  1558. #ifdef CKOUNI_IN
  1559.     WORD xbuf[8] ;
  1560. #else
  1561.     CHAR xbuf[8];
  1562. #endif
  1563.     KEY_EVENT_RECORD keyrec = *pkeyrec;
  1564.  
  1565.     /* The following are used in Win95 only to simulate the Keyboard Layout Hotkey */
  1566.     static int altdown = 0, altup = 0, ctrlup = 0, ctrldown = 0,
  1567.                shiftdown = 0, shiftup = 0;
  1568.     static int getlist = 1;
  1569.     static HKL hkllist[64];
  1570.     static int nhkl = 0;
  1571.     static int ihkl = 0;
  1572.  
  1573.     /* In case the caller doesn't need to know what the dead key values are */
  1574.     if ( buf == NULL || chcount == 0 ) {
  1575.         buf = (WORD *) xbuf;
  1576.         chcount = 8;
  1577.     }
  1578.  
  1579.     /* begin computation of keycode value */
  1580.  
  1581. #ifndef KUI
  1582.     debug(F111,"win32keyrec","keyrec.wVirtualKeyCode",keyrec.wVirtualKeyCode);
  1583.     debug(F111,"win32keyrec","keyrec.wVirtualScanCode",keyrec.wVirtualScanCode);
  1584.     debug(F111,"win32keyrec","keyrec.uChar.AsciiChar",keyrec.uChar.AsciiChar);
  1585.     debug(F111,"win32keyrec","keyrec.dwControlKeyState",keyrec.dwControlKeyState);
  1586.  
  1587.     if ( isWin95() ) {
  1588.         /* This code should work but ActivateKeyboardLayout() appears to have no */
  1589.         /* effect on Win95 Console programs.  So instead we use a combination of */
  1590.         /* GetKeyboardLayoutList(), MapVirtualKeyEx(), and ToAsciiEx() to do what*/
  1591.         /* CONAGENT.EXE should have down from the very beginning.  As a toggle   */
  1592.         /* we implement both Alt-Shift and Ctrl-Shift.  Ctrl-Alt-Shift is not a  */
  1593.         /* valid toggle.                                                         */
  1594.  
  1595.         if ( getlist ) {
  1596.             nhkl = GetKeyboardLayoutList(64,hkllist);
  1597.  
  1598.             memset(keystate,0,256);
  1599.             for ( ihkl = 0; ihkl < nhkl ; ihkl++ ) {
  1600.                 keycount = ToAsciiEx( 65,
  1601.                                       30 | 0x80,
  1602.                                       keystate,
  1603.                                       buf,
  1604.                                       FALSE,
  1605.                                       hkllist[ihkl]);
  1606.                 if ( keycount == 1 )
  1607.                     break;
  1608.             }
  1609.             if ( ihkl == nhkl ) {
  1610.                 debug(F111,"FATAL ERROR: No Latin Keyboard Layouts are installed",
  1611.                        "number of layouts installed",nhkl);
  1612.                 printf("FATAL ERROR: No ASCII compatible Input Locale is installed\r\n");
  1613.                 printf("  on this computer.  Please install an Input Locale that supports\r\n");
  1614.                 printf("  English, French, German, or one of the other Input languages\r\n");
  1615.                 printf("  supported by the ISO Latin character sets.  Use:\r\n\n");
  1616.                 printf("     Start Menu->Settings->Control Panel->Keyboard:Input Locales\r\n\n");
  1617.                 bleep(BP_FAIL);
  1618.                 sleep(5);
  1619.                 doexit(BAD_EXIT,10);
  1620.             }
  1621.             getlist = 0;
  1622.         }
  1623.  
  1624.         if ( keyrec.bKeyDown ) {
  1625.             switch ( keyrec.wVirtualKeyCode ) {
  1626.             case VK_MENU:
  1627.                 altdown = 1;
  1628.                 break;
  1629.             case VK_SHIFT:
  1630.                 shiftdown = 1;
  1631.                 break;
  1632.             case VK_CONTROL:
  1633.                 ctrldown = 1;
  1634.                 break;
  1635.             default:
  1636.                 altdown = altup = shiftdown = shiftup = ctrldown = ctrlup = 0;
  1637.             }
  1638.         } else {
  1639.             HKL prevhkl = 0;
  1640.             switch ( keyrec.wVirtualKeyCode ) {
  1641.             case VK_MENU:
  1642.                 if ( altdown && shiftdown && shiftup) {
  1643.                     ihkl = (ihkl+1)%nhkl;
  1644.                     altdown = altup = shiftdown = shiftup = ctrldown = ctrlup = 0;
  1645.                 } else {
  1646.                     altup = 1;
  1647.                 }
  1648.                 break;
  1649.             case VK_CONTROL:
  1650.                 if ( ctrldown && shiftdown && shiftup) {
  1651.                     ihkl = (ihkl+1)%nhkl;
  1652.                     altdown = altup = shiftdown = shiftup = ctrldown = ctrlup = 0;
  1653.                 } else {
  1654.                     ctrlup = 1;
  1655.                 }
  1656.                 break;
  1657.             case VK_SHIFT:
  1658.                 if ( ((altdown && altup && !ctrldown) ||
  1659.                        (ctrldown && ctrlup && !altdown)) && shiftdown ) {
  1660.                     ihkl = (ihkl+1)%nhkl;
  1661.                     altdown = altup = shiftdown = shiftup = ctrldown = ctrlup = 0;
  1662.                 } else {
  1663.                     shiftup = 1;
  1664.                 }
  1665.                 break;
  1666.             }
  1667.         }
  1668.  
  1669.         if ( 1 || keyrec.bKeyDown ) {
  1670.             memset(keystate,0,256);
  1671.  
  1672.             if ( keyrec.dwControlKeyState & CAPSLOCK_ON ) {
  1673.                 debug(F110,"win32key","CAPSLOCK_ON",0);
  1674.                 keystate[VK_CAPITAL] = 0x01 ;
  1675.             }
  1676.             if ( keyrec.dwControlKeyState & NUMLOCK_ON ) {
  1677.                 debug(F110,"win32key","NUMLOCK_ON",0);
  1678.                 keystate[VK_NUMLOCK] = 0x01 ;
  1679.             }
  1680.             if ( keyrec.dwControlKeyState & SCROLLLOCK_ON ) {
  1681.                 debug(F110,"win32key","SCROLLLOCK_ON",0);
  1682.                 keystate[VK_SCROLL] = 0x01 ;
  1683.             }
  1684.             if ( keyrec.dwControlKeyState & LEFT_CTRL_PRESSED ) {
  1685.                 debug(F110,"win32key","LEFT_CTRL_PRESSED",0);
  1686.                 keystate[VK_CONTROL] = 0x80 ;
  1687.                 keystate[VK_LCONTROL] = 0x80 ;
  1688.             }
  1689.             if ( keyrec.dwControlKeyState & RIGHT_CTRL_PRESSED ) {
  1690.                 debug(F110,"win32key","RIGHT_CTRL_PRESSED",0);
  1691.                 keystate[VK_CONTROL] = 0x80 ;
  1692.                 keystate[VK_RCONTROL] = 0x80 ;
  1693.             }
  1694.             if ( keyrec.dwControlKeyState & LEFT_ALT_PRESSED ) {
  1695.                 keystate[VK_MENU] = 0x80 ;
  1696.                 keystate[VK_LMENU] = 0x80 ;
  1697.                 debug(F111,"LeftAltPressed","keyrec.wVirtualKeyCode",
  1698.                        keyrec.wVirtualKeyCode);
  1699.                 debug(F111,"LeftAltPressed","keyrec.wVirtualScanCode",
  1700.                        keyrec.wVirtualScanCode);
  1701.                 debug(F111,"LeftAltPressed","keyrec.uChar.AsciiChar",
  1702.                        keyrec.uChar.AsciiChar);
  1703.                 debug(F111,"LeftAltPressed","keyrec.dwControlKeyState",
  1704.                        keyrec.dwControlKeyState);
  1705.             }
  1706.             if ( keyrec.dwControlKeyState & RIGHT_ALT_PRESSED ) {
  1707.                 keystate[VK_MENU] = 0x80 ;
  1708.                 keystate[VK_RMENU] = 0x80 ;
  1709.                 debug(F111,"RightAltPressed","keyrec.wVirtualKeyCode",
  1710.                        keyrec.wVirtualKeyCode);
  1711.                 debug(F111,"RightAltPressed","keyrec.wVirtualScanCode",
  1712.                        keyrec.wVirtualScanCode);
  1713.                 debug(F111,"RightAltPressed","keyrec.uChar.AsciiChar",
  1714.                        keyrec.uChar.AsciiChar);
  1715.                 debug(F111,"RightAltPressed","keyrec.dwControlKeyState",
  1716.                        keyrec.dwControlKeyState);
  1717.                 if ( (isWin95() && win95altgr) ||
  1718.                      keyrec.dwControlKeyState & LEFT_CTRL_PRESSED ) {
  1719.                     debug(F110,"win32key","AltGr combination",0);
  1720.                     keystate[VK_CONTROL] = 0x80 ;
  1721.                     keyrec.dwControlKeyState |= RIGHT_ALT_PRESSED | LEFT_CTRL_PRESSED;
  1722.  
  1723. #ifdef COMMENT
  1724.                     /* Should the ENHANCED_KEY flag be set for Alt-Gr?  */
  1725.                     /* It is not on NT/2000.  Must think about this.    */
  1726.                     keyrec.dwControlKeyState |= ENHANCED_KEY ;
  1727. #endif /* COMMENT */
  1728.                 }
  1729.             }
  1730.             if ( keyrec.dwControlKeyState & SHIFT_PRESSED ) {
  1731.                 debug(F110,"win32key","SHIFT_PRESSED",0);
  1732.                 keystate[VK_SHIFT] = 0x80 ;
  1733.                 keystate[VK_LSHIFT] = 0x80 ;
  1734.                 keystate[VK_RSHIFT] = 0x80 ;
  1735.             }
  1736.  
  1737.             /* There is a comment in the ToAsciiEx() docs that says that  */
  1738.             /* the high order bit of the Scan Code must be set if the key */
  1739.             /* is not currently being pressed. */
  1740.             if ( !keyrec.bKeyDown )
  1741.                 keyrec.wVirtualScanCode |= 0x80;
  1742. #ifdef CKOUNI_IN
  1743.             keycount = ToUnicode( keyrec.wVirtualKeyCode,
  1744.                                   keyrec.wVirtualScanCode,
  1745.                                   keystate,
  1746.                                   buf,
  1747.                                   chcount,
  1748.                                   FALSE
  1749.                                   );
  1750. #else /* CKOUNI_IN */
  1751.             if ( nhkl > 0 ) {
  1752.                 /* We must convert from the scancode to the KeyCode */
  1753.                 /* which we can then use to generate an Ascii value */
  1754.                 /* all using a specific Keyboard Layout             */
  1755.                 UINT wVirtualKeyCode = MapVirtualKeyEx( keyrec.wVirtualScanCode,
  1756.                                                         1, hkllist[ihkl]);
  1757.                 keycount = ToAsciiEx(wVirtualKeyCode,
  1758.                                       keyrec.wVirtualScanCode,
  1759.                                       keystate,
  1760.                                       buf,
  1761.                                       FALSE,
  1762.                                       hkllist[ihkl]);
  1763.             }
  1764.             else
  1765.                 keycount = ToAscii( keyrec.wVirtualKeyCode,
  1766.                                     keyrec.wVirtualScanCode,
  1767.                                     keystate,
  1768.                                     buf,
  1769.                                     FALSE);
  1770. #endif /* CKOUNI_IN */
  1771.             debug(F111,"win32key","keycount",keycount);
  1772.             if ( keycount < 0 ) {
  1773.                 debug(F111,"win32Key","DeadKey",buf[0]);
  1774.                 return -1;
  1775.             }
  1776.         }
  1777.  
  1778.         if ( keycount > 0 ) {
  1779.             if ( buf[0] < 128 ) {
  1780.                 debug(F111,"win32Key","buf[0]",buf[0]);
  1781.                 keyrec.uChar.AsciiChar = buf[0] ;
  1782.             }
  1783.             else if ( buf[0] < 256 ) {
  1784.                 char ch = (char) buf[0];
  1785.                 debug(F111,"win32Key","buf[0]",ch);
  1786.                 CharToOemBuff( &ch, &(keyrec.uChar.AsciiChar), 1);
  1787.                 debug(F111,"win32Key","keyrec.uChar.AsciiChar",
  1788.                        keyrec.uChar.AsciiChar);
  1789.             }
  1790.             else
  1791.                 debug(F111,"win32Key - UNICODE character","buf[0]",buf[0]);
  1792.         }
  1793.         else {
  1794.             debug(F110,"win32Key","No translation",0);
  1795.             /* this is a really ugly hack to handle the fact that */
  1796.             /* win95 generates the wrong keycode for DECIMAL      */
  1797.             /* it returns DELETE instead                          */
  1798.             if ( keycount == 0 &&
  1799.                  ( keyrec.uChar.AsciiChar == '.' ||
  1800.                    keyrec.uChar.AsciiChar == ',') &&
  1801.                  keyrec.wVirtualKeyCode == 46 &&
  1802.                  keyrec.wVirtualScanCode == 83 ) {
  1803.                 debug( F111,"win32Key","is this DECIMAL?",
  1804.                        keyrec.uChar.AsciiChar);
  1805.                 }
  1806.             else {
  1807.                 keyrec.uChar.AsciiChar = 0 ;
  1808.             }
  1809.         }
  1810.     } /* end of Win95 processing */
  1811. #endif /* KUI */
  1812.  
  1813.     if ( keyrec.bKeyDown &&
  1814.          !(keyrec.wVirtualKeyCode == 0x0010 ||  /* SHIFT */
  1815.             keyrec.wVirtualKeyCode == 0x0011 || /* CTRL */
  1816.             keyrec.wVirtualKeyCode == 0x0012)   /* ALT */
  1817.          ){
  1818.  
  1819.         if (keyrec.uChar.AsciiChar || keyrec.wVirtualKeyCode) {
  1820.  
  1821.             if ( keyrec.uChar.AsciiChar == 0x0 ||
  1822.                  (keyrec.dwControlKeyState & CONTROL) &&
  1823.                  (keyrec.dwControlKeyState & ALT) ||
  1824.                  keyrec.dwControlKeyState & ENHANCED_KEY )
  1825.             {
  1826.  
  1827.                 /* Then we must use a scan code */
  1828.                 c = keyrec.wVirtualKeyCode | KEY_SCAN ;
  1829.  
  1830.                 /* We don't check for SHIFT of ascii values because they */
  1831.                 /* just generate other ASCII values */
  1832.                 if ( keyrec.dwControlKeyState & SHIFT )
  1833.                   c |= KEY_SHIFT ;
  1834.             }
  1835.             else
  1836.             {
  1837.                 /* We have an ascii value */
  1838.                 c = keyrec.uChar.AsciiChar ;
  1839.                 switch (c) {    /* Handle ambiguous keypad and space keys */
  1840.                 case ESC:
  1841.                     if ( keyrec.dwControlKeyState & SHIFT )
  1842.                       c |= KEY_SHIFT ;
  1843.                     break;
  1844.                 case '\t':
  1845.                     if ( keyrec.wVirtualKeyCode == VK_TAB )
  1846.                     {
  1847.                         c = keyrec.wVirtualKeyCode | KEY_SCAN |
  1848.                           ( keyrec.dwControlKeyState & ENHANCED_KEY ? KEY_ENHANCED : 0x0 ) |
  1849.                             ( keyrec.dwControlKeyState & SHIFT_PRESSED ? KEY_SHIFT : 0x0 ) ;
  1850.                     }
  1851.                     break;
  1852.  
  1853.                 case DEL:
  1854.                     if ( keyrec.wVirtualKeyCode == VK_DELETE )        /* look at the scan code */
  1855.                     {
  1856.                         c = keyrec.wVirtualKeyCode | KEY_SCAN |
  1857.                           ( keyrec.dwControlKeyState & ENHANCED_KEY ? KEY_ENHANCED : 0x0 ) |
  1858.                             ( keyrec.dwControlKeyState & SHIFT_PRESSED ? KEY_SHIFT : 0x0 ) ;
  1859.                     }
  1860.                     break;
  1861.                 case '\b':
  1862.                     if ( keyrec.wVirtualKeyCode == VK_BACK )
  1863.                     {
  1864.                         c = keyrec.wVirtualKeyCode | KEY_SCAN |
  1865.                           ( keyrec.dwControlKeyState & ENHANCED_KEY ? KEY_ENHANCED : 0x0 ) |
  1866.                             ( keyrec.dwControlKeyState & SHIFT_PRESSED ? KEY_SHIFT : 0x0 ) ;
  1867.                     }
  1868.                     break;
  1869.                 case '+':
  1870.                     if ( keyrec.wVirtualKeyCode == VK_ADD )
  1871.                     {
  1872.                         c = keyrec.wVirtualKeyCode | KEY_SCAN |
  1873.                           ( keyrec.dwControlKeyState & ENHANCED_KEY ? KEY_ENHANCED : 0x0 ) |
  1874.                             ( keyrec.dwControlKeyState & SHIFT_PRESSED ? KEY_SHIFT : 0x0 ) ;
  1875.                     }
  1876.                     break;
  1877.                 case    '-':
  1878.                     if ( keyrec.wVirtualKeyCode == VK_SUBTRACT )
  1879.                     {
  1880.                         c = keyrec.wVirtualKeyCode | KEY_SCAN |
  1881.                           ( keyrec.dwControlKeyState & ENHANCED_KEY ? KEY_ENHANCED : 0x0 ) |
  1882.                             ( keyrec.dwControlKeyState & SHIFT_PRESSED ? KEY_SHIFT : 0x0 ) ;
  1883.                     }
  1884.                     break;
  1885.                 case '*':
  1886.                     if ( keyrec.wVirtualKeyCode == VK_MULTIPLY )
  1887.                     {
  1888.                         c = keyrec.wVirtualKeyCode | KEY_SCAN |
  1889.                           ( keyrec.dwControlKeyState & ENHANCED_KEY ? KEY_ENHANCED : 0x0 ) |
  1890.                             ( keyrec.dwControlKeyState & SHIFT_PRESSED ? KEY_SHIFT : 0x0 ) ;
  1891.                     }
  1892.                     break;
  1893.                 case '/':
  1894.                     if ( keyrec.wVirtualKeyCode == VK_DIVIDE )
  1895.                     {
  1896.                         c = keyrec.wVirtualKeyCode | KEY_SCAN |
  1897.                           ( keyrec.dwControlKeyState & ENHANCED_KEY ? KEY_ENHANCED : 0x0 ) |
  1898.                             ( keyrec.dwControlKeyState & SHIFT_PRESSED ? KEY_SHIFT : 0x0 ) ;
  1899.                     }
  1900.                     break;
  1901.                 case '\r':
  1902.                 case '\n':
  1903.                     if ( keyrec.wVirtualKeyCode == VK_RETURN )
  1904.                     {
  1905.                         c = keyrec.wVirtualKeyCode | KEY_SCAN |
  1906.                           ( keyrec.dwControlKeyState & ENHANCED_KEY ? KEY_ENHANCED : 0x0 ) |
  1907.                             ( keyrec.dwControlKeyState & SHIFT_PRESSED ? KEY_SHIFT : 0x0 ) ;
  1908.                     }
  1909.                     break;
  1910.                 case '.':
  1911.                 case ',':
  1912.                     if ( keyrec.wVirtualKeyCode == VK_DECIMAL )
  1913.                     {
  1914.                         c = keyrec.wVirtualKeyCode | KEY_SCAN |
  1915.                           ( keyrec.dwControlKeyState & ENHANCED_KEY ? KEY_ENHANCED : 0x0 ) |
  1916.                             ( keyrec.dwControlKeyState & SHIFT_PRESSED ? KEY_SHIFT : 0x0 ) ;
  1917.                     }
  1918.                     else if ( keyrec.wVirtualScanCode == 83 && isWin95() )
  1919.                     {
  1920.                         /* Windows 95 reports the wrong KeyCode for the KeyPad Decimal */
  1921.                         c = VK_DECIMAL | KEY_SCAN |
  1922.                           ( keyrec.dwControlKeyState & ENHANCED_KEY ? KEY_ENHANCED : 0x0 ) |
  1923.                             ( keyrec.dwControlKeyState & SHIFT_PRESSED ? KEY_SHIFT : 0x0 ) ;
  1924.                     }
  1925.                     break;
  1926.                 case '0':
  1927.                 case '1':
  1928.                 case '2':
  1929.                 case '3':
  1930.                 case '4':
  1931.                 case '5':
  1932.                 case '6':
  1933.                 case '7':
  1934.                 case '8':
  1935.                 case '9':
  1936.                     if ( keyrec.wVirtualKeyCode >= VK_NUMPAD0 &&
  1937.                          keyrec.wVirtualKeyCode <= VK_NUMPAD9 )
  1938.                     {
  1939.                         c = keyrec.wVirtualKeyCode | KEY_SCAN |
  1940.                           ( keyrec.dwControlKeyState & ENHANCED_KEY ? KEY_ENHANCED : 0x0 ) |
  1941.                             ( keyrec.dwControlKeyState & SHIFT_PRESSED ? KEY_SHIFT : 0x0 ) ;
  1942.                     }
  1943.                     break;
  1944.                 default:
  1945.                     ;
  1946.                 }       /* switch */
  1947.             }           /* ascii char */
  1948.             if ( keyrec.dwControlKeyState & ENHANCED_KEY )
  1949.               c |= KEY_ENHANCED ;
  1950.  
  1951.             if ( keyrec.dwControlKeyState & CONTROL )
  1952.               c |= KEY_CTRL ;
  1953.  
  1954.             if ( keyrec.dwControlKeyState & ALT )
  1955.               c |= KEY_ALT ;
  1956.  
  1957.         } /* if (real key) */
  1958.     }
  1959. /* end computation of keycode value */
  1960.     *pkeyrec = keyrec;
  1961.     return c;
  1962. }
  1963.  
  1964. void
  1965. win32KeyEvent( int mode, KEY_EVENT_RECORD keyrec )
  1966. {
  1967.     int c = -1, i;
  1968.     int keycount = 1 ;
  1969. #define CHCOUNT 8
  1970. #ifdef CKOUNI_IN
  1971.     WORD buf[CHCOUNT] ;
  1972. #else
  1973.     CHAR buf[CHCOUNT];
  1974. #endif
  1975.  
  1976. #ifdef COMMENT
  1977.     printf("\n");
  1978.     printf("keyrec.bKeyDown          0x%X\n",keyrec.bKeyDown);
  1979.     printf("keyrec.wRepeatCount      0x%X\n",keyrec.wRepeatCount);
  1980.     printf("keyrec.wVirtualKeyCode   0x%X\n",keyrec.wVirtualKeyCode);
  1981.     printf("keyrec.wVirtualScanCode  0x%X\n",keyrec.wVirtualScanCode);
  1982.     printf("keyrec.uChar.AsciiChar   0x%X\n",keyrec.uChar.AsciiChar);
  1983.     printf("keyrec.dwControlKeyState 0x%X\n",keyrec.dwControlKeyState);
  1984.     printf("\n");
  1985. #endif /* COMMENT */
  1986.  
  1987. #ifdef PCTERM
  1988.     if ( mode == VTERM ) {
  1989.         /* Ctrl-CAPSLOCK is the toggle for PCTERM */
  1990.         static int pcterm_ctrl_down = 0, pcterm_ctrl_up = 0,
  1991.                    pcterm_caps_down = 0, pcterm_caps_up = 0;
  1992.  
  1993.         switch ( keyrec.wVirtualKeyCode ) {
  1994.         case VK_CONTROL:
  1995.             if ( keyrec.bKeyDown ) {
  1996.                 pcterm_ctrl_down = 1;
  1997.             } else {
  1998.                 if ( pcterm_caps_down && pcterm_caps_up ) {
  1999.                     setpcterm(!tt_pcterm);
  2000.                     pcterm_ctrl_down = pcterm_ctrl_up = pcterm_caps_down =
  2001.                         pcterm_caps_up = 0;
  2002.                 } else {
  2003.                     pcterm_ctrl_up = 1;
  2004.                 }
  2005.             }
  2006.             break;
  2007.         case VK_CAPITAL:
  2008.             if ( keyrec.bKeyDown ) {
  2009.                 pcterm_caps_down = 1;
  2010.             } else {
  2011.                 if ( pcterm_ctrl_down && pcterm_ctrl_up ) {
  2012.                     setpcterm(!tt_pcterm);
  2013.                     pcterm_ctrl_down = pcterm_ctrl_up = pcterm_caps_down =
  2014.                         pcterm_caps_up = 0;
  2015.                 } else {
  2016.                     pcterm_caps_up = 1;
  2017.                 }
  2018.             }
  2019.             break;
  2020.         default:
  2021.             pcterm_ctrl_down = pcterm_ctrl_up = pcterm_caps_down =
  2022.                 pcterm_caps_up = 0;
  2023.         }
  2024.  
  2025.         if ( tt_pcterm && !wy_block ) {
  2026.             char pre[16]="";
  2027.             char hex[16]="";
  2028.             char post[16]="";
  2029.             char msg[32]="";
  2030.             int i=0;
  2031.  
  2032.             if ( keyrec.dwControlKeyState & ENHANCED_KEY ) {
  2033.                 if ( keyrec.dwControlKeyState & SHIFT_PRESSED) {
  2034.                     if ( keyrec.bKeyDown )
  2035.                         sprintf(pre,"%c%c",0xE0,0xAA);
  2036.                     else
  2037.                         sprintf(post,"%c%c",0xE0,0x2A);
  2038.                 }
  2039.                 sprintf(hex,"%c",0xE0);
  2040.                 strcat(pre,hex);
  2041.             }
  2042.  
  2043.             for ( i=0 ; i<keyrec.wRepeatCount && i<15 ; i++ ) {
  2044.                 if ( keyrec.bKeyDown )
  2045.                     hex[i] = keyrec.wVirtualScanCode;
  2046.                 else
  2047.                     hex[i] = keyrec.wVirtualScanCode + 0x80;
  2048.             }
  2049.             hex[i] = '\0';
  2050.             sprintf(msg,"%s%s%s",pre,hex,post);
  2051.             ttol(msg,strlen(msg));
  2052. #ifndef NOLOCAL
  2053.             clickkeys();
  2054. #endif /* NOLOCAL */
  2055.             return;
  2056.         }
  2057.     }
  2058. #endif /* PCTERM */
  2059.  
  2060.     c = getKeycodeFromKeyRec(&keyrec, (WORD *)buf, CHCOUNT);
  2061.  
  2062.     if ( c >= 0 ) {
  2063. #ifdef NOSETKEY
  2064.         con_event evt;
  2065.         evt.type = key ;
  2066.         evt.key.scancode = c;
  2067. #else /* NOSETKEY */
  2068.         con_event evt = mapkey(c);
  2069.         if ( evt.type == error ) {
  2070.             /* map the key to the Ascii value */
  2071.             /* if no previous value has been assigned */
  2072.             if ( keymap != NULL && keyrec.uChar.AsciiChar != 0x00 && c < KMSIZE)
  2073.                 keymap[c] = keyrec.uChar.AsciiChar;
  2074.         }
  2075. #endif /* NOSETKEY */
  2076.         if ( (c == 1027)
  2077. #ifndef NOLOCAL
  2078.              && !IsConnectMode()
  2079. #endif /* NOLOCAL */
  2080.              )  /* Ctrl-C */
  2081.             raise(SIGINT);
  2082.         else
  2083.             for ( i=0; i<keyrec.wRepeatCount ;i++ )
  2084.             {
  2085. #ifndef NOLOCAL
  2086.                 clickkeys() ;
  2087. #endif /* NOLOCAL */
  2088. #ifdef COMMENT
  2089. /* It was a good try, but it is not safe.  There is a reason that we */
  2090. /* don't allow the thread that reads the keystrokes to process them  */
  2091. /* and that is because that means the thread can block waiting for   */
  2092. /* input if the command to be carried out requires it.               */
  2093.                 if ( mode == VTERM &&
  2094.                      !VscrnIsPopup() &&
  2095.                      evt.type != kverb ||
  2096.                      (evt.type == kverb &&
  2097.                        evt.kverb.id != K_GO_BOOK &&
  2098.                        evt.kverb.id != K_GOTO &&
  2099.                        evt.kverb.id != K_HELP &&
  2100.                        evt.kverb.id != K_COMPOSE &&
  2101.                        evt.kverb.id != K_C_UNI16)) {
  2102.                     evt = mapkey(c);
  2103.                     if ( evt.type == error ) {
  2104.                         evt.type = key;
  2105.                         evt.key.scancode = c;
  2106.                     }
  2107.                     con2host(evt);
  2108.                 }
  2109.                 else
  2110. #endif /* COMMENT */
  2111.                     putkey( mode, c ) ;
  2112.  
  2113. #ifndef KUI
  2114.                 if ( isWin95() && (keycount == 2) ) {
  2115.                     char k2 = (char) buf[1], k2x;
  2116.                     debug(F111,"win32Key","buf[1]",k2);
  2117.                     CharToOemBuff( &k2, &k2x, 1);
  2118.                     debug(F111,"win32Key","k2x",k2x);
  2119.  
  2120. #ifdef COMMENT  
  2121. /* It was a good try, but it is not safe.  There is a reason that we */
  2122. /* don't allow the thread that reads the keystrokes to process them  */
  2123. /* and that is because that means the thread can block waiting for   */
  2124. /* input if the command to be carried out requires it.               */
  2125.                     if ( mode == VTERM &&
  2126.                          !VscrnIsPopup() &&
  2127.                          evt.type != kverb ||
  2128.                          (evt.type == kverb &&
  2129.                            evt.kverb.id != K_GO_BOOK &&
  2130.                            evt.kverb.id != K_GOTO &&
  2131.                            evt.kverb.id != K_HELP &&
  2132.                            evt.kverb.id != K_COMPOSE &&
  2133.                            evt.kverb.id != K_C_UNI16)) {
  2134.                         evt = mapkey(k2x);
  2135.                         if ( evt.type == error ) {
  2136.                             evt.type = key;
  2137.                             evt.key.scancode = k2x;
  2138.                         }
  2139.                         con2host(evt);
  2140.                     }
  2141.                     else
  2142. #endif /* COMMENT */    
  2143.                         putkey( mode, k2x ) ;
  2144.                 }   
  2145. #endif /* KUI */        
  2146.             }       
  2147.     } /* if (c >= 0 ) */
  2148. }
  2149.  
  2150. int win32ScrollUp = 0, win32ScrollDown = 0;
  2151.  
  2152. #ifndef NOLOCAL
  2153. #ifndef KUI
  2154. void
  2155. KbdHandlerThread( void * pArgList ) {
  2156.     INPUT_RECORD k;
  2157.     DWORD count = 0;
  2158.     int rc=0, c=0, i=0;
  2159.     extern int StartedFromDialer ;
  2160.     extern BYTE vmode ;
  2161.     DWORD saved_mode=0;
  2162.  
  2163.     memset( &k, 0, sizeof(k) ) ;
  2164.     setint();
  2165.  
  2166.     debug(F100,"KbdHandlerThread is born","",0);
  2167. #ifdef IKSD
  2168.     if ( !inserver ) {
  2169. #endif /* IKSD */
  2170.         if ( StartedFromDialer && isWin95() && !k95stdin ) {
  2171.             KbdHandle = CreateFile( "CONIN$", GENERIC_READ | GENERIC_WRITE,
  2172.                                     FILE_SHARE_READ | FILE_SHARE_WRITE,
  2173.                                     NULL,
  2174.                                     OPEN_EXISTING,
  2175.                                     0,
  2176.                                     0) ;
  2177.         } else
  2178.             KbdHandle = GetStdHandle( STD_INPUT_HANDLE ) ;
  2179.  
  2180.         GetConsoleMode( KbdHandle, &saved_mode ) ;
  2181. #ifdef IKSD
  2182.     }
  2183. #endif /* IKSD */
  2184.  
  2185.     rc = PostKbdThreadSem() ;
  2186.     ResetThreadPrty();
  2187.     SetThreadPrty(0,3);
  2188.  
  2189.     /* we must wait for the keymap to be initialized before starting */
  2190.     /* to process keyboard input */
  2191.     WaitKeyMapInitSem(SEM_INDEFINITE_WAIT) ;
  2192.     /* Do not reset as we don't want to wait each */
  2193.     /* time this thread restarts */
  2194.  
  2195.     while ( KbdActive ) {
  2196.         if ( k95stdin ) {
  2197.             c = 0;
  2198.             if ( (c = getchar()) != EOF ) {
  2199.                 debug(F101,"getchar()","",c);
  2200. #ifndef NOLOCAL
  2201.                 clickkeys();
  2202. #endif /* NOLOCAL */
  2203.                 putkey(vmode, c);
  2204.             }
  2205. #ifndef NOKVERBS
  2206.             else {
  2207.                  putkverb(vmode,K_QUIT);
  2208.             }
  2209. #endif /* NOKVERBS */
  2210.         }
  2211.         else if ( islocal ) {
  2212.             while ( KbdActive ) {
  2213.                 memset( &k, 0, sizeof(k) ) ;
  2214.                 rc = RequestKeyboardMutex( SEM_INDEFINITE_WAIT ) ;
  2215.                 count = 0 ;
  2216.                 if ( WAIT_OBJECT_0 == WaitForSingleObject(KbdHandle,
  2217.                      (win32ScrollUp || win32ScrollDown) ? 50 : 1000) )
  2218.                 {
  2219. #ifdef CKOUNI_IN
  2220.                     rc = ReadConsoleInputW( KbdHandle, &k, 1, &count ) ;
  2221. #else /* CKOUNI_IN */
  2222.                     rc = ReadConsoleInput( KbdHandle, &k, 1, &count ) ;
  2223. #endif /* CKOUNI_IN */
  2224. #ifdef COMMENT
  2225.                     /* If we were MS-DOS Kermit, we could do this */
  2226.                     if ( !rc && isWin95() ) {
  2227.                         if ( Win95QueryClose() ) {
  2228.                             Win95AcknowledgeClose() ;
  2229.                             putmacro(VCMD,"quit\r");
  2230.                         }
  2231.                     }
  2232. #endif /* COMMENT */
  2233.  
  2234.                     if ( !rc ) {
  2235.                         int lasterror = GetLastError();
  2236. #ifdef BETADEBUG
  2237.                         printf("Keyboard Wait succeeded, no data.  Error %d\n",lasterror);
  2238. #endif /* BETADEBUG */
  2239.                         debug(F111,"KbdHandlerThread - ReadConsoleInput failed","GetLastError()",
  2240.                                lasterror);
  2241.                     }
  2242.                 }
  2243. #ifndef NOKVERBS
  2244.                 else if ( win32ScrollUp ) {
  2245.                     putkverb(vmode, F_KVERB | K_UPONE);
  2246.                 } else if ( win32ScrollDown ) {
  2247.                     putkverb(vmode, F_KVERB | K_DNONE);
  2248.                 }
  2249. #endif /* NOKVERBS */
  2250.                 rc = ReleaseKeyboardMutex() ;
  2251.                 if (count)
  2252.                   break ;
  2253.             }
  2254.  
  2255.             if ( KbdActive ) {
  2256.                 extern int ttnum;               /* from ckcnet.c */
  2257.  
  2258.                 switch ( k.EventType ) {
  2259.                 case KEY_EVENT:
  2260. #ifndef NOTERM
  2261.                     if ( ISVTNT(tt_type_mode) &&
  2262.                          ttnum != -1
  2263. #ifndef NOLOCAL
  2264.                          && IsConnectMode()
  2265. #endif /* NOLOCAL */
  2266.                          )
  2267.                         ttol((char *)&k,sizeof(INPUT_RECORD));
  2268.                     else
  2269. #endif /* NOTERM */
  2270.                         win32KeyEvent( vmode, k.Event.KeyEvent ) ;
  2271.                     break;
  2272. #ifdef OS2MOUSE
  2273.                 case MOUSE_EVENT:
  2274.                     win32MouseEvent( vmode, k.Event.MouseEvent ) ;
  2275.                     break;
  2276. #endif /* OS2MOUSE */
  2277. #ifndef NOLOCAL
  2278.                 case WINDOW_BUFFER_SIZE_EVENT:
  2279.                     win32WindowEvent( vmode, k.Event.WindowBufferSizeEvent ) ;
  2280.                     break;
  2281. #endif /* NOLOCAL */
  2282.                 case MENU_EVENT:
  2283.                     debug(F111,"MENU_EVENT","k.Event.MenuEvent.dwCommandId",
  2284.                            k.Event.MenuEvent.dwCommandId);
  2285.                     break;
  2286.                 case FOCUS_EVENT:
  2287.                     debug(F111,"FOCUS_EVENT","k.Event.FocusEvent.bSetFocus",
  2288.                            k.Event.FocusEvent.bSetFocus);
  2289.                     break;
  2290.                 }
  2291.             } /* if ( KbdActive ) */
  2292.         }   /* if ( !islocal ) */
  2293.         else {
  2294.             c = 0;
  2295.             if ( _read(ttyfd, &c, 1) == 1 ) {
  2296.                 putkey(vmode, c);
  2297.             }
  2298.             else
  2299.               msleep(80);
  2300.         }
  2301.     }  /* while ( KbdActive ) */
  2302.  
  2303. #ifdef IKSD
  2304.     if ( !inserver ) {
  2305. #endif /* IKSD */
  2306.         SetConsoleMode( KbdHandle, saved_mode ) ;
  2307.  
  2308.         if ( StartedFromDialer && isWin95() && !k95stdin )
  2309.             CloseHandle(KbdHandle);
  2310.         KbdHandle = 0 ;
  2311. #ifdef IKSD
  2312.     }
  2313. #endif /* IKSD */
  2314.  
  2315.     PostKbdThreadSem() ;
  2316.     debug(F100,"KbdHandlerThread dies","",0);
  2317.     ckThreadEnd(pArgList);
  2318. }
  2319. #endif /* KUI */
  2320. #endif /* NOLOCAL */
  2321. #else /* not NT */
  2322. /* OS/2 version of the KbdHandlerThread only sees Keyboard events */
  2323. static int os2win32_XS[] =
  2324. {
  2325.     /* 782 - Backspace */  KEY_SCAN | KEY_SHIFT | 8,
  2326.     /* 783 - Tab */        KEY_SCAN | KEY_SHIFT | 9,
  2327.     0,0,0,0,0,0,0,0,0,0,
  2328.     0,0,
  2329.     /* 796 - Enter */      KEY_SCAN | KEY_SHIFT | 13,
  2330.     0,0,0,0,0,0,0,0,0,0,
  2331.     0,0,0,0,0,0,0,0,0,0,
  2332.     0,0,0,0,0,0,0,0,0,0,
  2333.     0,0,0,0,0,0,0,0,0,0,
  2334.     /* 837 - NumLock */    KEY_ENHANCED | KEY_SCAN | 144,
  2335.     /* 838 - ScrollLock */ KEY_SCAN | 145,
  2336.     /* 839 - Home */       KEY_SCAN | 36,
  2337.     /* 840 - Up */         KEY_SCAN | 38,
  2338.     /* 841 - PgUp */       KEY_SCAN | 33,
  2339.     0,
  2340.     /* 843 - Left */       KEY_SCAN | 37,
  2341.     /* 844 - Clear */      KEY_SCAN | 12,
  2342.     /* 845 - Right */      KEY_SCAN | 39,
  2343.     0,
  2344.     /* 847 - End */        KEY_SCAN | 35,
  2345.     /* 848 - Down */       KEY_SCAN | 40,
  2346.     /* 849 - PgDn */       KEY_SCAN | 34,
  2347.     /* 850 - Insert */     KEY_SCAN | 45,
  2348.     /* 851 - Delete */     KEY_SCAN | 46,
  2349.     /* 852 - F1  */ KEY_SCAN | KEY_SHIFT | 112,
  2350.     /* 853 - F2  */ KEY_SCAN | KEY_SHIFT | 113,
  2351.     /* 854 - F3  */ KEY_SCAN | KEY_SHIFT | 114,
  2352.     /* 855 - F4  */ KEY_SCAN | KEY_SHIFT | 115,
  2353.     /* 856 - F5  */ KEY_SCAN | KEY_SHIFT | 116,
  2354.     /* 857 - F6  */ KEY_SCAN | KEY_SHIFT | 117,
  2355.     /* 858 - F7  */ KEY_SCAN | KEY_SHIFT | 118,
  2356.     /* 859 - F8  */ KEY_SCAN | KEY_SHIFT | 119,
  2357.     /* 860 - F9  */ KEY_SCAN | KEY_SHIFT | 120,
  2358.     /* 861 - F10 */ KEY_SCAN | KEY_SHIFT | 121,
  2359.     0,0,0,0,0,0,0,0,0,0,
  2360.     0,0,0,0,0,0,0,0,0,0,
  2361.     0,0,0,0,0,0,0,0,0,0,
  2362.     0,0,0,0,0,0,0,0,0,0,
  2363.     0,
  2364.     /* 903 - F11 */ KEY_SCAN | KEY_SHIFT | 122,
  2365.     /* 904 - F12 */ KEY_SCAN | KEY_SHIFT | 123
  2366. };
  2367.  
  2368. static int os2win32_C[] =
  2369. {
  2370.     /* 1025 - A */   KEY_CTRL | 1 ,
  2371.     /* 1026 - B */   KEY_CTRL | 2 ,
  2372.     /* 1027 - C */   KEY_CTRL | 3 ,
  2373.     /* 1028 - D */   KEY_CTRL | 4 ,
  2374.     /* 1029 - E */   KEY_CTRL | 5 ,
  2375.     /* 1030 - F */   KEY_CTRL | 6 ,
  2376.     /* 1031 - G */   KEY_CTRL | 7 ,
  2377.     0,
  2378.     /* 1033 - I */   KEY_CTRL | 9 ,
  2379.     0,
  2380.     /* 1035 - K */   KEY_CTRL | 11 ,
  2381.     /* 1036 - L */   KEY_CTRL | 12 ,
  2382.     0,
  2383.     /* 1038 - N */   KEY_CTRL | 14 ,
  2384.     /* 1039 - O */   KEY_CTRL | 15 ,
  2385.     /* 1040 - P */   KEY_CTRL | 16 ,
  2386.     /* 1041 - Q */   KEY_CTRL | 17 ,
  2387.     /* 1042 - R */   KEY_CTRL | 18 ,
  2388.     /* 1043 - S */   KEY_CTRL | 19 ,
  2389.     /* 1044 - T */   KEY_CTRL | 20 ,
  2390.     /* 1045 - U */   KEY_CTRL | 21 ,
  2391.     /* 1046 - V */   KEY_CTRL | 22 ,
  2392.     /* 1047 - W */   KEY_CTRL | 23 ,
  2393.     /* 1048 - X */   KEY_CTRL | 24 ,
  2394.     /* 1049 - Y */   KEY_CTRL | 25 ,
  2395.     /* 1050 - Z */   KEY_CTRL | 26 ,
  2396.     0,
  2397.     /* 1052 - \ */   KEY_CTRL | 28 ,
  2398.     /* 1053 - ] */   KEY_CTRL | 29 ,
  2399.     /* 1054 - 6 */   KEY_CTRL | 30 ,
  2400.     /* 1055 - - */   KEY_CTRL | 31 ,
  2401.     /* 1056 - Space */ KEY_CTRL | SP
  2402. };
  2403.  
  2404. static int os2win32_XC[] =
  2405. {
  2406.     /* 1283 - 2 */   KEY_SCAN | KEY_CTRL | 50,
  2407.     0,0,0,0,0,0,0,0,0,0,
  2408.     /* 1294 - Backspace */  KEY_SCAN | KEY_CTRL | 8,
  2409.     0,0,0,0,0,0,0,0,0,0,
  2410.     0,
  2411.     /* 1306 - [ */      KEY_CTRL | 27,
  2412.     0,
  2413.     /* 1308 - Enter */      KEY_SCAN | KEY_CTRL | 13,
  2414.     0,0,0,0,0,0,
  2415.     /* 1315 - H */   KEY_CTRL | 8 ,
  2416.     /* 1316 - J */   KEY_CTRL | 10 ,
  2417.     0,0,0,0,0,0,0,0,0,0,
  2418.     0,0,0,
  2419.     /* 1330 - M */   KEY_CTRL | 13 ,
  2420.     0,0,0,0,0,0,0,0,0,0,
  2421.     0,0,0,0,0,0,0,0,0,0,
  2422.     0,0,0,0,0,0,0,0,0,0,
  2423.     0,0,0,0,0,0,0,0,0,0,
  2424.     0,0,0,
  2425.     /* 1374 - F1  */ KEY_SCAN | KEY_CTRL | 112,
  2426.     /* 1375 - F2  */ KEY_SCAN | KEY_CTRL | 113,
  2427.     /* 1376 - F3  */ KEY_SCAN | KEY_CTRL | 114,
  2428.     /* 1377 - F4  */ KEY_SCAN | KEY_CTRL | 115,
  2429.     /* 1378 - F5  */ KEY_SCAN | KEY_CTRL | 116,
  2430.     /* 1379 - F6  */ KEY_SCAN | KEY_CTRL | 117,
  2431.     /* 1380 - F7  */ KEY_SCAN | KEY_CTRL | 118,
  2432.     /* 1381 - F8  */ KEY_SCAN | KEY_CTRL | 119,
  2433.     /* 1382 - F9  */ KEY_SCAN | KEY_CTRL | 120,
  2434.     /* 1383 - F10 */ KEY_SCAN | KEY_CTRL | 121,
  2435.     0,0,0,0,0,0,0,0,0,0,
  2436.     0,
  2437.     /* 1395 - Kp4 */        KEY_SCAN | KEY_CTRL | 37,
  2438.     /* 1396 - Kp6 */        KEY_SCAN | KEY_CTRL | 39,
  2439.     /* 1397 - Kp1 */        KEY_SCAN | KEY_CTRL | 35,
  2440.     /* 1398 - Kp3 */        KEY_SCAN | KEY_CTRL | 34,
  2441.     /* 1399 - Kp7 */        KEY_SCAN | KEY_CTRL | 36,
  2442.     0,0,0,0,0,0,0,0,0,0,
  2443.     0,0,
  2444.     /* 1412 - Kp9 */        KEY_SCAN | KEY_CTRL | 33,
  2445.     0,0,0,0,
  2446.     /* 1417 - F11 */        KEY_SCAN | KEY_CTRL | 122,
  2447.     /* 1418 - F12 */        KEY_SCAN | KEY_CTRL | 123,
  2448.     0,0,
  2449.     /* 1421 - Kp8 */        KEY_SCAN | KEY_CTRL | 38,
  2450.     /* 1422 - Kp- */        KEY_SCAN | KEY_CTRL | 109,
  2451.     /* 1423 - Kp5 */        KEY_SCAN | KEY_CTRL | 12,
  2452.     /* 1424 - Kp+ */        KEY_SCAN | KEY_CTRL | 107,
  2453.     /* 1425 - Kp2 */        KEY_SCAN | KEY_CTRL | 40,
  2454.     /* 1426 - Kp0 */        KEY_SCAN | KEY_CTRL | 45,
  2455.     /* 1427 - Decimal */    KEY_SCAN | KEY_CTRL | 46,
  2456.     /* 1428 - Tab */        KEY_SCAN | KEY_CTRL | 9,
  2457.     0,
  2458.     /* 1430 - Kp* */        KEY_SCAN | KEY_CTRL | 106
  2459. };
  2460.  
  2461. static int os2win32_A[] =
  2462. {
  2463.     /* 1025 - A */   KEY_ALT | 65 ,
  2464.     /* 1026 - B */   KEY_ALT | 66 ,
  2465.     /* 1027 - C */   KEY_ALT | 67 ,
  2466.     /* 1028 - D */   KEY_ALT | 68 ,
  2467.     /* 1029 - E */   KEY_ALT | 69 ,
  2468.     /* 1030 - F */   KEY_ALT | 70 ,
  2469.     /* 1031 - G */   KEY_ALT | 71 ,
  2470.     0,
  2471.     /* 1033 - I */   KEY_ALT | 73 ,
  2472.     0,
  2473.     /* 1035 - K */   KEY_ALT | 75 ,
  2474.     /* 1036 - L */   KEY_ALT | 76 ,
  2475.     0,
  2476.     /* 1038 - N */   KEY_ALT | 78 ,
  2477.     /* 1039 - O */   KEY_ALT | 79 ,
  2478.     /* 1040 - P */   KEY_ALT | 80 ,
  2479.     /* 1041 - Q */   KEY_ALT | 81 ,
  2480.     /* 1042 - R */   KEY_ALT | 82 ,
  2481.     /* 1043 - S */   KEY_ALT | 83 ,
  2482.     /* 1044 - T */   KEY_ALT | 84 ,
  2483.     /* 1045 - U */   KEY_ALT | 85 ,
  2484.     /* 1046 - V */   KEY_ALT | 86 ,
  2485.     /* 1047 - W */   KEY_ALT | 87 ,
  2486.     /* 1048 - X */   KEY_ALT | 88 ,
  2487.     /* 1049 - Y */   KEY_ALT | 89 ,
  2488.     /* 1050 - Z */   KEY_ALT | 90 ,
  2489.     0,
  2490.     /* 1052 - \ */   KEY_ALT | 65 ,
  2491.     /* 1053 - [ */   KEY_ALT | 65 ,
  2492.     /* 1054 - 6 */   KEY_ALT | 54,
  2493.     /* 1055 - - */   KEY_ALT | 189,
  2494.     /* 1056 -   */   KEY_ALT | 32
  2495.  
  2496. };
  2497.  
  2498. static int os2win32_XA[] =
  2499. {
  2500.     /* 2318 - Backspace */ KEY_SCAN | KEY_ALT | 8,
  2501.     0,
  2502.     /* 2320 - Q     */ KEY_ALT | 'q',
  2503.     /* 2321 - W     */ KEY_ALT | 'w',
  2504.     /* 2322 - E     */ KEY_ALT | 'e',
  2505.     /* 2323 - R     */ KEY_ALT | 'r',
  2506.     /* 2324 - T     */ KEY_ALT | 't',
  2507.     /* 2325 - Y     */ KEY_ALT | 'y',
  2508.     /* 2326 - U     */ KEY_ALT | 'u',
  2509.     /* 2327 - I     */ KEY_ALT | 'i',
  2510.     /* 2328 - O     */ KEY_ALT | 'o',
  2511.     /* 2329 - P     */ KEY_ALT | 'p',
  2512.     /* 2330 - [     */ KEY_ALT | '[',
  2513.     /* 2331 - ]     */ KEY_ALT | ']',
  2514.     /* 2332 - Enter */ KEY_SCAN | KEY_ALT | 13,
  2515.     0,
  2516.     /* 2334 - A     */ KEY_ALT | 'a',
  2517.     /* 2335 - S     */ KEY_ALT | 's',
  2518.     /* 2336 - D     */ KEY_ALT | 'd',
  2519.     /* 2337 - F     */ KEY_ALT | 'f',
  2520.     /* 2338 - G     */ KEY_ALT | 'g',
  2521.     /* 2339 - H     */ KEY_ALT | 'h',
  2522.     /* 2340 - J     */ KEY_ALT | 'j',
  2523.     /* 2341 - K     */ KEY_ALT | 'k',
  2524.     /* 2342 - L     */ KEY_ALT | 'l',
  2525.     /* 2343 - ;     */ KEY_ALT | ';',
  2526.     /* 2344 - '     */ KEY_ALT | '\'',
  2527.     /* 2345 - `     */ KEY_ALT | '`',
  2528.     0,
  2529.     /* 2347 - \     */ KEY_ALT | '\\',
  2530.     /* 2348 - Z     */ KEY_ALT | 'z',
  2531.     /* 2349 - X     */ KEY_ALT | 'x',
  2532.     /* 2350 - C     */ KEY_ALT | 'c',
  2533.     /* 2351 - V     */ KEY_ALT | 'v',
  2534.     /* 2352 - B     */ KEY_ALT | 'b',
  2535.     /* 2353 - N     */ KEY_ALT | 'n',
  2536.     /* 2354 - M     */ KEY_ALT | 'm',
  2537.     /* 2355 - ,     */ KEY_ALT | ',',
  2538.     /* 2356 - .     */ KEY_ALT | '.',
  2539.     /* 2357 - /     */ KEY_ALT | '/',
  2540.     0,
  2541.     /* 2359 - Kp* */ KEY_SCAN | KEY_ENHANCED | KEY_ALT | 106 , /* ??? */
  2542.     0,0,0,0,0,0,0,0,0,0,
  2543.     0,0,0,0,0,0,0,0,
  2544.     /* 2378 - Kp- */ KEY_SCAN | KEY_ENHANCED | KEY_ALT | 109 , /* ??? */
  2545.     0,0,0,
  2546.     /* 2382 - Kp+ */ KEY_SCAN | KEY_ENHANCED | KEY_ALT | 107 , /* ??? */
  2547.     0,0,0,0,0,0,0,0,0,0,
  2548.     0,0,0,0,0,0,0,0,0,0,
  2549.     0,0,0,0,0,
  2550.     /* 2408 - F1     */ KEY_SCAN | KEY_ALT | 112,
  2551.     /* 2409 - F2     */ KEY_SCAN | KEY_ALT | 113,
  2552.     /* 2410 - F3     */ KEY_SCAN | KEY_ALT | 114,
  2553.     /* 2411 - F4     */ KEY_SCAN | KEY_ALT | 115,
  2554.     /* 2412 - F5     */ KEY_SCAN | KEY_ALT | 116,
  2555.     /* 2413 - F6     */ KEY_SCAN | KEY_ALT | 117,
  2556.     /* 2414 - F7     */ KEY_SCAN | KEY_ALT | 118,
  2557.     /* 2415 - F8     */ KEY_SCAN | KEY_ALT | 119,
  2558.     /* 2416 - F9     */ KEY_SCAN | KEY_ALT | 120,
  2559.     /* 2417 - F10    */ KEY_SCAN | KEY_ALT | 121,
  2560.     0,0,0,0,0,0,
  2561.     /* 2424 - 1     */ KEY_ALT | '1',
  2562.     /* 2425 - 2     */ KEY_ALT | '2',
  2563.     /* 2426 - 3     */ KEY_ALT | '3',
  2564.     /* 2427 - 4     */ KEY_ALT | '4',
  2565.     /* 2428 - 5     */ KEY_ALT | '5',
  2566.     /* 2429 - 6     */ KEY_ALT | '6',
  2567.     /* 2430 - 7     */ KEY_ALT | '7',
  2568.     /* 2431 - 8     */ KEY_ALT | '8',
  2569.     /* 2432 - 9     */ KEY_ALT | '9',
  2570.     /* 2433 - 0     */ KEY_ALT | '0',
  2571.     /* 2434 - -     */ KEY_ALT | '-',
  2572.     /* 2435 - =     */ KEY_ALT | '=',
  2573.     0,0,0,0,0,0,0,
  2574.     /* 2443 - F11    */ KEY_SCAN | KEY_ALT | 122,
  2575.     /* 2444 - F12    */ KEY_SCAN | KEY_ALT | 123,
  2576.     0,0,0,0,0,0,0,0,0,0,
  2577.     /* 2455 - Home   */ KEY_SCAN | KEY_ENHANCED | KEY_ALT | 36 ,
  2578.     /* 2456 - Up     */ KEY_SCAN | KEY_ENHANCED | KEY_ALT | 38 ,
  2579.     /* 2457 - PgUp   */ KEY_SCAN | KEY_ENHANCED | KEY_ALT | 33 ,
  2580.     0,
  2581.     /* 2459 - Left   */ KEY_SCAN | KEY_ENHANCED | KEY_ALT | 37 ,
  2582.     0,
  2583.     /* 2461 - Right  */ KEY_SCAN | KEY_ENHANCED | KEY_ALT | 39 ,
  2584.     0,
  2585.     /* 2463 - End    */ KEY_SCAN | KEY_ENHANCED | KEY_ALT | 35 ,
  2586.     /* 2464 - Down   */ KEY_SCAN | KEY_ENHANCED | KEY_ALT | 40 ,
  2587.     /* 2465 - PgDn   */ KEY_SCAN | KEY_ENHANCED | KEY_ALT | 34 ,
  2588.     /* 2466 - Insert */ KEY_SCAN | KEY_ENHANCED | KEY_ALT | 45 ,
  2589.     /* 2467 - Delete */ KEY_SCAN | KEY_ENHANCED | KEY_ALT | 46 ,
  2590.     /* 2468 - Kp/    */ KEY_SCAN | KEY_ENHANCED | KEY_ALT | 111 , /* ??? */
  2591.     0,
  2592.     /* 2470 - KpEnter*/ KEY_SCAN | KEY_ENHANCED | KEY_ALT | 13
  2593. };
  2594.  
  2595.  
  2596. static int os2win32_XAS[] =
  2597. {
  2598.     /* 2830 - Backspace */ KEY_SCAN | KEY_SHIFT | KEY_ALT | 8,
  2599.     0,
  2600.     /* 2832 - Q     */ KEY_ALT | 'Q',
  2601.     /* 2833 - W     */ KEY_ALT | 'W',
  2602.     /* 2834 - E     */ KEY_ALT | 'E',
  2603.     /* 2835 - R     */ KEY_ALT | 'R',
  2604.     /* 2836 - T     */ KEY_ALT | 'T',
  2605.     /* 2837 - Y     */ KEY_ALT | 'Y',
  2606.     /* 2838 - U     */ KEY_ALT | 'U',
  2607.     /* 2839 - I     */ KEY_ALT | 'I',
  2608.     /* 2840 - O     */ KEY_ALT | 'O',
  2609.     /* 2841 - P     */ KEY_ALT | 'P',
  2610.     /* 2842 - [     */ KEY_ALT | '{',
  2611.     /* 2843 - ]     */ KEY_ALT | '}',
  2612.     /* 2844 - Enter */ KEY_SCAN | KEY_SHIFT | KEY_ALT | 13,
  2613.     0,
  2614.     /* 2846 - A     */ KEY_ALT | 'A',
  2615.     /* 2847 - S     */ KEY_ALT | 'S',
  2616.     /* 2848 - D     */ KEY_ALT | 'D',
  2617.     /* 2849 - F     */ KEY_ALT | 'F',
  2618.     /* 2850 - G     */ KEY_ALT | 'G',
  2619.     /* 2851 - H     */ KEY_ALT | 'H',
  2620.     /* 2852 - J     */ KEY_ALT | 'J',
  2621.     /* 2853 - K     */ KEY_ALT | 'K',
  2622.     /* 2854 - L     */ KEY_ALT | 'L',
  2623.     /* 2855 - ;     */ KEY_ALT | ':',
  2624.     /* 2856 - '     */ KEY_ALT | '"',
  2625.     /* 2857 - `     */ KEY_ALT | '~',
  2626.     0,
  2627.     /* 2859 - \     */ KEY_ALT | '|',
  2628.     /* 2860 - Z     */ KEY_ALT | 'Z',
  2629.     /* 2861 - X     */ KEY_ALT | 'X',
  2630.     /* 2862 - C     */ KEY_ALT | 'C',
  2631.     /* 2863 - V     */ KEY_ALT | 'V',
  2632.     /* 2864 - B     */ KEY_ALT | 'B',
  2633.     /* 2865 - N     */ KEY_ALT | 'N',
  2634.     /* 2866 - M     */ KEY_ALT | 'M',
  2635.     /* 2867 - ,     */ KEY_ALT | '<',
  2636.     /* 2868 - .     */ KEY_ALT | '>',
  2637.     /* 2869 - /     */ KEY_ALT | '?',
  2638.     0,0,0,0,0,0,0,0,0,0,
  2639.     0,0,0,0,0,0,0,0,0,0,
  2640.     /* 2890 - Kp- */ KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_ALT | 109 , /* ??? */
  2641.     0,0,0,
  2642.     /* 2894 - Kp+ */ KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_ALT | 107 , /* ??? */
  2643.     0,0,0,0,0,0,0,0,0,0,
  2644.     0,0,0,0,0,0,0,0,0,0,
  2645.     0,0,0,0,0,
  2646.     /* 2920 - F1     */ KEY_SCAN | KEY_SHIFT | KEY_ALT | 112,
  2647.     /* 2921 - F2     */ KEY_SCAN | KEY_SHIFT | KEY_ALT | 113,
  2648.     /* 2922 - F3     */ KEY_SCAN | KEY_SHIFT | KEY_ALT | 114,
  2649.     /* 2923 - F4     */ KEY_SCAN | KEY_SHIFT | KEY_ALT | 115,
  2650.     /* 2924 - F5     */ KEY_SCAN | KEY_SHIFT | KEY_ALT | 116,
  2651.     /* 2925 - F6     */ KEY_SCAN | KEY_SHIFT | KEY_ALT | 117,
  2652.     /* 2926 - F7     */ KEY_SCAN | KEY_SHIFT | KEY_ALT | 118,
  2653.     /* 2927 - F8     */ KEY_SCAN | KEY_SHIFT | KEY_ALT | 119,
  2654.     /* 2928 - F9     */ KEY_SCAN | KEY_SHIFT | KEY_ALT | 120,
  2655.     /* 2929 - F10    */ KEY_SCAN | KEY_SHIFT | KEY_ALT | 121,
  2656.     0,0,0,0,0,0,
  2657.     /* 2936 - 1     */ KEY_SHIFT | KEY_ALT | '1',
  2658.     /* 2937 - 2     */ KEY_SHIFT | KEY_ALT | '2',
  2659.     /* 2938 - 3     */ KEY_SHIFT | KEY_ALT | '3',
  2660.     /* 2939 - 4     */ KEY_SHIFT | KEY_ALT | '4',
  2661.     /* 2940 - 5     */ KEY_SHIFT | KEY_ALT | '5',
  2662.     /* 2941 - 6     */ KEY_SHIFT | KEY_ALT | '6',
  2663.     /* 2942 - 7     */ KEY_SHIFT | KEY_ALT | '7',
  2664.     /* 2943 - 8     */ KEY_SHIFT | KEY_ALT | '8',
  2665.     /* 2944 - 9     */ KEY_SHIFT | KEY_ALT | '9',
  2666.     /* 2945 - 0     */ KEY_SHIFT | KEY_ALT | '0',
  2667.     /* 2946 - -     */ KEY_SHIFT | KEY_ALT | '-',
  2668.     /* 2947 - =     */ KEY_SHIFT | KEY_ALT | '=',
  2669.     0,0,0,0,0,0,0,
  2670.     /* 2955 - F11    */ KEY_SCAN | KEY_SHIFT | KEY_ALT | 122,
  2671.     /* 2956 - F12    */ KEY_SCAN | KEY_SHIFT | KEY_ALT | 123,
  2672.     0,0,0,0,0,0,0,0,0,0,
  2673.     /* 2967 - Home   */ KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_ALT | 36 ,
  2674.     /* 2968 - Up     */ KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_ALT | 38 ,
  2675.     /* 2969 - PgUp   */ KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_ALT | 33 ,
  2676.     0,
  2677.     /* 2971 - Left   */ KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_ALT | 37 ,
  2678.     0,
  2679.     /* 2973 - Right  */ KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_ALT | 39 ,
  2680.     0,
  2681.     /* 2975 - End    */ KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_ALT | 35 ,
  2682.     /* 2976 - Down   */ KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_ALT | 40 ,
  2683.     /* 2977 - PgDn   */ KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_ALT | 34 ,
  2684.     /* 2978 - Insert */ KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_ALT | 45 ,
  2685.     /* 2979 - Delete */ KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_ALT | 46 ,
  2686.     /* 2980 - Kp/    */ KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_ALT | 111 , /* ??? */
  2687.     0,
  2688.     /* 2982 - KpEnter*/ KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_ALT | 13
  2689. };
  2690.  
  2691.  
  2692. static int os2win32_XCA[] =
  2693. {
  2694.     /* 3329 - ESC */       KEY_CTRL | KEY_ALT | 27,
  2695.     0,0,0,0,0,0,0,0,0,0,
  2696.     0,0,
  2697.     /* 3342 - Backspace */ KEY_SCAN | KEY_CTRL | KEY_ALT | 8,
  2698.     0,
  2699.     /* 3344 - Q     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 'Q',
  2700.     /* 3345 - W     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 'W',
  2701.     /* 3346 - E     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 'E',
  2702.     /* 3347 - R     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 'R',
  2703.     /* 3348 - T     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 'T',
  2704.     /* 3349 - Y     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 'Y',
  2705.     /* 3350 - U     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 'U',
  2706.     /* 3351 - I     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 'I',
  2707.     /* 3352 - O     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 'O',
  2708.     /* 3353 - P     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 'P',
  2709.     /* 3354 - [     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 219,
  2710.     /* 3355 - ]     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 221,
  2711.     /* 3356 - Enter */ KEY_SCAN | KEY_CTRL | KEY_ALT | 13,
  2712.     0,
  2713.     /* 3358 - A     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 'A',
  2714.     /* 3359 - S     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 'S',
  2715.     /* 3360 - D     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 'D',
  2716.     /* 3361 - F     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 'F',
  2717.     /* 3362 - G     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 'G',
  2718.     /* 3363 - H     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 'H',
  2719.     /* 3364 - J     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 'J',
  2720.     /* 3365 - K     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 'K',
  2721.     /* 3366 - L     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 'L',
  2722.     /* 3367 - ;     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 186,
  2723.     /* 3368 - '     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 222,
  2724.     /* 3369 - `     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 192,
  2725.     0,
  2726.     /* 3371 - \     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 220,
  2727.     /* 3372 - Z     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 'Z',
  2728.     /* 3373 - X     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 'X',
  2729.     /* 3374 - C     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 'C',
  2730.     /* 3375 - V     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 'V',
  2731.     /* 3376 - B     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 'B',
  2732.     /* 3377 - N     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 'N',
  2733.     /* 3378 - M     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 'M',
  2734.     /* 3379 - ,     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 188,
  2735.     /* 3380 - .     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 190,
  2736.     /* 3381 - /     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 191,
  2737.     0,0,
  2738.     /* 3383 - Kp* */ KEY_SCAN | KEY_ENHANCED | KEY_CTRL | KEY_ALT | 106 , /* ??? */
  2739.     0,0,0,0,0,0,0,
  2740.     0,0,0,0,0,0,0,0,0,0,
  2741.     /* 3402 - Kp- */ KEY_SCAN | KEY_ENHANCED | KEY_CTRL | KEY_ALT | 109 , /* ??? */
  2742.     0,0,0,
  2743.     /* 3406 - Kp+ */ KEY_SCAN | KEY_ENHANCED | KEY_CTRL | KEY_ALT | 107 , /* ??? */
  2744.     0,0,0,0,0,0,0,0,0,0,
  2745.     0,0,0,0,0,0,0,0,0,0,
  2746.     0,0,0,0,0,
  2747.     /* 3432 - F1     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 112,
  2748.     /* 3433 - F2     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 113,
  2749.     /* 3434 - F3     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 114,
  2750.     /* 3435 - F4     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 115,
  2751.     /* 3436 - F5     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 116,
  2752.     /* 3437 - F6     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 117,
  2753.     /* 3438 - F7     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 118,
  2754.     /* 3439 - F8     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 119,
  2755.     /* 3440 - F9     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 120,
  2756.     /* 3441 - F10    */ KEY_SCAN | KEY_CTRL | KEY_ALT | 121,
  2757.     0,0,0,0,0,0,
  2758.     /* 3448 - 1     */ KEY_SCAN | KEY_CTRL | KEY_ALT | '1',
  2759.     /* 3449 - 2     */ KEY_SCAN | KEY_CTRL | KEY_ALT | '2',
  2760.     /* 3450 - 3     */ KEY_SCAN | KEY_CTRL | KEY_ALT | '3',
  2761.     /* 3451 - 4     */ KEY_SCAN | KEY_CTRL | KEY_ALT | '4',
  2762.     /* 3452 - 5     */ KEY_SCAN | KEY_CTRL | KEY_ALT | '5',
  2763.     /* 3453 - 6     */ KEY_SCAN | KEY_CTRL | KEY_ALT | '6',
  2764.     /* 3454 - 7     */ KEY_SCAN | KEY_CTRL | KEY_ALT | '7',
  2765.     /* 3455 - 8     */ KEY_SCAN | KEY_CTRL | KEY_ALT | '8',
  2766.     /* 3456 - 9     */ KEY_SCAN | KEY_CTRL | KEY_ALT | '9',
  2767.     /* 3457 - 0     */ KEY_SCAN | KEY_CTRL | KEY_ALT | '0',
  2768.     /* 3458 - -     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 189,
  2769.     /* 3459 - =     */ KEY_SCAN | KEY_CTRL | KEY_ALT | 187,
  2770.     0,0,0,0,0,0,0,
  2771.     /* 3467 - F11    */ KEY_SCAN | KEY_CTRL | KEY_ALT | 122,
  2772.     /* 3468 - F12    */ KEY_SCAN | KEY_CTRL | KEY_ALT | 123,
  2773.     0,0,0,0,0,0,0,0,0,0,
  2774.     0,
  2775.     /* 3480 - Up     */ KEY_SCAN | KEY_ENHANCED | KEY_CTRL | KEY_ALT | 38 ,
  2776.     /* 3481 - PgUp   */ KEY_SCAN | KEY_ENHANCED | KEY_CTRL | KEY_ALT | 33 ,
  2777.     0,
  2778.     /* 3483 - Left   */ KEY_SCAN | KEY_ENHANCED | KEY_CTRL | KEY_ALT | 37 ,
  2779.     0,
  2780.     /* 3485 - Right  */ KEY_SCAN | KEY_ENHANCED | KEY_CTRL | KEY_ALT | 39 ,
  2781.     0,
  2782.     /* 3487 - End    */ KEY_SCAN | KEY_ENHANCED | KEY_CTRL | KEY_ALT | 35 ,
  2783.     /* 3488 - Down   */ KEY_SCAN | KEY_ENHANCED | KEY_CTRL | KEY_ALT | 40 ,
  2784.     /* 3489 - PgDn   */ KEY_SCAN | KEY_ENHANCED | KEY_CTRL | KEY_ALT | 34 ,
  2785.     /* 3490 - Insert */ KEY_SCAN | KEY_ENHANCED | KEY_CTRL | KEY_ALT | 45 ,
  2786.     /* 3491 - Delete */ KEY_SCAN | KEY_ENHANCED | KEY_CTRL | KEY_ALT | 46 ,
  2787.     /* 3492 - Kp/    */ KEY_SCAN | KEY_ENHANCED | KEY_CTRL | KEY_ALT | 111 , /* ??? */
  2788.     0,
  2789.     /* 3494 - KpEnter*/ KEY_SCAN | KEY_ENHANCED | KEY_CTRL | KEY_ALT | 13
  2790. };
  2791.  
  2792.  
  2793. static int os2win32_XCAS[] =
  2794. {
  2795.     /* 3841 - ESC */       KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 27,
  2796.     0,0,0,0,0,0,0,0,0,0,
  2797.     0,0,
  2798.     /* 3854 - Backspace */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 8,
  2799.     0,
  2800.     /* 3856 - Q     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 'Q',
  2801.     /* 3857 - W     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 'W',
  2802.     /* 3858 - E     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 'E',
  2803.     /* 3859 - R     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 'R',
  2804.     /* 3860 - T     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 'T',
  2805.     /* 3861 - Y     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 'Y',
  2806.     /* 3862 - U     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 'U',
  2807.     /* 3863 - I     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 'I',
  2808.     /* 3864 - O     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 'O',
  2809.     /* 3865 - P     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 'P',
  2810.     /* 3866 - [     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 219,
  2811.     /* 3867 - ]     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 221,
  2812.     /* 3868 - Enter */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 13,
  2813.     0,
  2814.     /* 3870 - A     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 'A',
  2815.     /* 3871 - S     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 'S',
  2816.     /* 3872 - D     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 'D',
  2817.     /* 3873 - F     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 'F',
  2818.     /* 3874 - G     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 'G',
  2819.     /* 3875 - H     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 'H',
  2820.     /* 3876 - J     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 'J',
  2821.     /* 3877 - K     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 'K',
  2822.     /* 3878 - L     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 'L',
  2823.     /* 3879 - ;     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 186,
  2824.     /* 3880 - '     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 222,
  2825.     /* 3881 - `     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 192,
  2826.     0,
  2827.     /* 3883 - \     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 220,
  2828.     /* 3884 - Z     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 'Z',
  2829.     /* 3885 - X     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 'X',
  2830.     /* 3886 - C     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 'C',
  2831.     /* 3887 - V     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 'V',
  2832.     /* 3888 - B     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 'B',
  2833.     /* 3889 - N     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 'N',
  2834.     /* 3890 - M     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 'M',
  2835.     /* 3891 - ,     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 186,
  2836.     /* 3892 - .     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 190,
  2837.     /* 3893 - /     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 191,
  2838.     0,0,
  2839.     /* 3896 - Kp* */ KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_CTRL | KEY_ALT | 106 ,
  2840.     0,0,0,0,0,0,0,
  2841.     0,0,0,0,0,0,0,0,0,0,
  2842.     /* 3914 - Kp- */ KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_CTRL | KEY_ALT | 109 ,
  2843.     0,0,0,
  2844.     /* 3918 - Kp+ */ KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_CTRL | KEY_ALT | 107 ,
  2845.     0,0,0,0,0,0,0,0,0,0,
  2846.     0,0,0,0,0,0,0,0,0,0,
  2847.     0,0,0,0,0,
  2848.     /* 3944 - F1     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 112,
  2849.     /* 3945 - F2     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 113,
  2850.     /* 3946 - F3     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 114,
  2851.     /* 3947 - F4     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 115,
  2852.     /* 3948 - F5     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 116,
  2853.     /* 3949 - F6     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 117,
  2854.     /* 3950 - F7     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 118,
  2855.     /* 3951 - F8     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 119,
  2856.     /* 3952 - F9     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 120,
  2857.     /* 3953 - F10    */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 121,
  2858.     0,0,0,0,0,0,
  2859.     /* 3960 - 1     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | '1',
  2860.     /* 3961 - 2     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | '2',
  2861.     /* 3962 - 3     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | '3',
  2862.     /* 3963 - 4     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | '4',
  2863.     /* 3964 - 5     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | '5',
  2864.     /* 3965 - 6     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | '6',
  2865.     /* 3966 - 7     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | '7',
  2866.     /* 3967 - 8     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | '8',
  2867.     /* 3968 - 9     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | '9',
  2868.     /* 3969 - 0     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | '0',
  2869.     /* 3970 - -     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 189,
  2870.     /* 3971 - =     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 187,
  2871.     0,0,0,0,0,0,0,
  2872.     /* 3979 - F11    */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 122,
  2873.     /* 3980 - F12    */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 123,
  2874.     0,0,0,0,0,0,0,0,0,0,
  2875.     /* 3991 - Home   */ KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_CTRL | KEY_ALT | 36 ,
  2876.     /* 3992 - Up     */ KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_CTRL | KEY_ALT | 38 ,
  2877.     /* 3993 - PgUp   */ KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_CTRL | KEY_ALT | 33 ,
  2878.     0,
  2879.     /* 3995 - Left   */ KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_CTRL | KEY_ALT | 37 ,
  2880.     0,
  2881.     /* 3997 - Right  */ KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_CTRL | KEY_ALT | 39 ,
  2882.     0,
  2883.     /* 3999 - End    */ KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_CTRL | KEY_ALT | 35 ,
  2884.     /* 4000 - Down   */ KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_CTRL | KEY_ALT | 40 ,
  2885.     /* 4001 - PgDn   */ KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_CTRL | KEY_ALT | 34 ,
  2886.     /* 4002 - Insert */ KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_CTRL | KEY_ALT | 45 ,
  2887.     /* 4003 - Delete */ KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_CTRL | KEY_ALT | 46 ,
  2888.     /* 4004 - Kp/    */ KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_CTRL | KEY_ALT | 111 , /* ??? */
  2889.     0,
  2890.     /* 4006 - KpEnter*/ KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_CTRL | KEY_ALT | 13
  2891. };
  2892.  
  2893. static int os2win32_E[] = {
  2894.     /* 4138 - Kp* */    KEY_SCAN | 106 ,
  2895.     /* 4139 - Kp+ */    KEY_SCAN | 107 ,
  2896.     0,
  2897.     /* 4141 - Kp- */    KEY_SCAN | 109 ,
  2898.     /* 4142 - Decimal */KEY_SCAN | 110,
  2899.     /* 4143 - Kp/    */ KEY_SCAN | KEY_ENHANCED |  111 ,
  2900.     /* 4144 - Kp0    */ KEY_SCAN | 96 ,
  2901.     /* 4145 - Kp1    */ KEY_SCAN | 97 ,
  2902.     /* 4146 - Kp2    */ KEY_SCAN | 98 ,
  2903.     /* 4147 - Kp3    */ KEY_SCAN | 99 ,
  2904.     /* 4148 - Kp4    */ KEY_SCAN | 100 ,
  2905.     /* 4149 - Kp5    */ KEY_SCAN | 101 ,
  2906.     /* 4150 - Kp6    */ KEY_SCAN | 102 ,
  2907.     /* 4151 - Kp7    */ KEY_SCAN | 103 ,
  2908.     /* 4152 - Kp8    */ KEY_SCAN | 104 ,
  2909.     /* 4153 - Kp9    */ KEY_SCAN | 105
  2910. };
  2911.  
  2912. static int os2win32_E1[] =
  2913. {
  2914.     /* 4423 - Home   */ KEY_SCAN | KEY_ENHANCED |  36 ,
  2915.     /* 4424 - Up     */ KEY_SCAN | KEY_ENHANCED |  38 ,
  2916.     /* 4425 - PgUp   */ KEY_SCAN | KEY_ENHANCED |  33 ,
  2917.     0,
  2918.     /* 4427 - Left   */ KEY_SCAN | KEY_ENHANCED |  37 ,
  2919.     0,
  2920.     /* 4429 - Right  */ KEY_SCAN | KEY_ENHANCED |  39 ,
  2921.     0,
  2922.     /* 4431 - End    */ KEY_SCAN | KEY_ENHANCED |  35 ,
  2923.     /* 4432 - Down   */ KEY_SCAN | KEY_ENHANCED |  40 ,
  2924.     /* 4433 - PgDn   */ KEY_SCAN | KEY_ENHANCED |  34 ,
  2925.     /* 4434 - Insert */ KEY_SCAN | KEY_ENHANCED |  45 ,
  2926.     /* 4435 - Delete */ KEY_SCAN | KEY_ENHANCED |  46
  2927. };
  2928.  
  2929. static int os2win32_E1A[] =
  2930. {
  2931.     /* 4651 - Kp+ */    KEY_SCAN | KEY_SHIFT | 107 ,
  2932.     0,
  2933.     /* 4653 - Kp- */    KEY_SCAN | KEY_SHIFT | 109 ,
  2934.     /* 4654 - Decimal */KEY_SCAN | KEY_SHIFT | 46,
  2935.     /* 4655 - Kp/    */ KEY_SCAN | KEY_SHIFT | KEY_ENHANCED | 111 ,
  2936.     /* 4656 - Kp0    */ KEY_SCAN | KEY_SHIFT | 45 ,
  2937.     /* 4657 - Kp1    */ KEY_SCAN | KEY_SHIFT | 35 ,
  2938.     /* 4658 - Kp2    */ KEY_SCAN | KEY_SHIFT | 40 ,
  2939.     /* 4659 - Kp3    */ KEY_SCAN | KEY_SHIFT | 34 ,
  2940.     /* 4660 - Kp4    */ KEY_SCAN | KEY_SHIFT | 37 ,
  2941.     /* 4661 - Kp5    */ KEY_SCAN | KEY_SHIFT | 12 ,
  2942.     /* 4662 - Kp6    */ KEY_SCAN | KEY_SHIFT | 39 ,
  2943.     /* 4663 - Kp7    */ KEY_SCAN | KEY_SHIFT | 36 ,
  2944.     /* 4664 - Kp8    */ KEY_SCAN | KEY_SHIFT | 38 ,
  2945.     /* 4665 - Kp9    */ KEY_SCAN | KEY_SHIFT | 33
  2946. };
  2947.  
  2948. static int os2win32_E1B[] =
  2949. {
  2950.     /* 4935 - Home   */ KEY_SCAN | KEY_SHIFT | KEY_ENHANCED |  36,
  2951.     /* 4936 - Up     */ KEY_SCAN | KEY_SHIFT | KEY_ENHANCED |  38 ,
  2952.     /* 4937 - PgUp   */ KEY_SCAN | KEY_SHIFT | KEY_ENHANCED |  33 ,
  2953.     0,
  2954.     /* 4939 - Left   */ KEY_SCAN | KEY_SHIFT | KEY_ENHANCED |  37 ,
  2955.     0,
  2956.     /* 4941 - Right  */ KEY_SCAN | KEY_SHIFT | KEY_ENHANCED |  39 ,
  2957.     0,
  2958.     /* 4943 - End    */ KEY_SCAN | KEY_SHIFT | KEY_ENHANCED |  35 ,
  2959.     /* 4944 - Down   */ KEY_SCAN | KEY_SHIFT | KEY_ENHANCED |  40 ,
  2960.     /* 4945 - PgDn   */ KEY_SCAN | KEY_SHIFT | KEY_ENHANCED |  34 ,
  2961.     /* 4946 - Insert */ KEY_SCAN | KEY_SHIFT | KEY_ENHANCED |  45 ,
  2962.     /* 4947 - Delete */ KEY_SCAN | KEY_SHIFT | KEY_ENHANCED |  46
  2963. };
  2964.  
  2965. static int os2win32_E2[] =
  2966. {
  2967.     /* 5491 - Left   */ KEY_SCAN | KEY_CTRL | KEY_ENHANCED |  37 ,
  2968.     /* 5492 - Right  */ KEY_SCAN | KEY_CTRL | KEY_ENHANCED |  39 ,
  2969.     /* 5493 - End    */ KEY_SCAN | KEY_CTRL | KEY_ENHANCED |  35 ,
  2970.     /* 5494 - PgDn   */ KEY_SCAN | KEY_CTRL | KEY_ENHANCED |  34 ,
  2971.     /* 5495 - Home   */ KEY_SCAN | KEY_CTRL | KEY_ENHANCED |  36 ,
  2972.      0,0,0,0,0,0,0,0,0,0,
  2973.      0,0,
  2974.     /* 5508 - PgUp   */ KEY_SCAN | KEY_CTRL | KEY_ENHANCED |  33 ,
  2975.     0,0,0,0,0,0,0,0,
  2976.     /* 5517 - Up     */ KEY_SCAN | KEY_CTRL | KEY_ENHANCED |  38 ,
  2977.     0,0,0,
  2978.     /* 5521 - Down   */ KEY_SCAN | KEY_CTRL | KEY_ENHANCED |  40 ,
  2979.     /* 5522 - Insert */ KEY_SCAN | KEY_CTRL | KEY_ENHANCED |  45 ,
  2980.     /* 5523 - Delete */ KEY_SCAN | KEY_CTRL | KEY_ENHANCED |  46
  2981. };
  2982.  
  2983. static int os2win32_E3[] =
  2984. {
  2985.     /* 6003 - Left   */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ENHANCED |  37 ,
  2986.     /* 6004 - Right  */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ENHANCED |  39 ,
  2987.     /* 6005 - End    */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ENHANCED |  35 ,
  2988.     /* 6006 - PgDn   */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ENHANCED |  34 ,
  2989.     /* 6007 - Home   */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ENHANCED |  36 ,
  2990.      0,0,0,0,0,0,0,0,0,0,
  2991.      0,0,
  2992.     /* 6020 - PgUp   */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ENHANCED |  33 ,
  2993.     0,0,0,0,0,0,0,0,
  2994.     /* 6029 - Up     */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ENHANCED |  38 ,
  2995.     0,0,0,
  2996.     /* 6033 - Down   */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ENHANCED |  40 ,
  2997.     /* 6034 - Insert */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ENHANCED |  45 ,
  2998.     /* 6035 - Delete */ KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ENHANCED |  46
  2999. };
  3000.  
  3001. static int
  3002. os2towin32( int c )
  3003. {
  3004.     if ( c < 256 )
  3005.       c ;
  3006.     else if ( c < 512 )  /* KEY_SCAN */
  3007.     {
  3008.         switch ( c ) {
  3009.         case 257: /* ESC */
  3010.             c = 27 ;
  3011.             break;
  3012.         case 315: /* F1 */
  3013.             c = KEY_SCAN | 112 ;
  3014.             break;
  3015.         case 316: /* F2 */
  3016.             c = KEY_SCAN | 113 ;
  3017.             break;
  3018.         case 317: /* F3 */
  3019.             c = KEY_SCAN | 114 ;
  3020.             break;
  3021.         case 318: /* F4 */
  3022.             c = KEY_SCAN | 115 ;
  3023.             break;
  3024.         case 319: /* F5 */
  3025.             c = KEY_SCAN | 116 ;
  3026.             break;
  3027.         case 320: /* F6 */
  3028.             c = KEY_SCAN | 117 ;
  3029.             break;
  3030.         case 321: /* F7 */
  3031.             c = KEY_SCAN | 118 ;
  3032.             break;
  3033.         case 322: /* F8 */
  3034.             c = KEY_SCAN | 119 ;
  3035.             break;
  3036.         case 323: /* F9 */
  3037.             c = KEY_SCAN | 120 ;
  3038.             break;
  3039.         case 324: /* F10 */
  3040.             c = KEY_SCAN | 121 ;
  3041.             break;
  3042.         case 389: /* F11 */
  3043.             c = KEY_SCAN | 122 ;
  3044.             break;
  3045.         case 390: /* F12 */
  3046.             c = KEY_SCAN | 123 ;
  3047.             break;
  3048.         case 325: /* NUMLOCK */
  3049.             c = KEY_SCAN | 144 ;
  3050.             break;
  3051.         case 326: /* SCROLLBACK */
  3052.             c = KEY_SCAN | 145 ;
  3053.             break;
  3054.         case 270: /* Backspace */
  3055.             c = KEY_SCAN | 8 ;
  3056.             break;
  3057.         case 271: /* Tab */
  3058.             c = KEY_SCAN | 9 ;
  3059.             break;
  3060.         case 284: /* Enter */
  3061.             c = KEY_SCAN | 13 ;
  3062.             break;
  3063.         case 327: /* Kp7 - NumLock Off */
  3064.             c = KEY_SCAN | 36;   /* Home */
  3065.             break;
  3066.         case 328: /* Kp8 - NumLock Off */
  3067.             c = KEY_SCAN | 38;  /* Up */
  3068.             break;
  3069.         case 329: /* Kp9 - NumLock Off */
  3070.             c = KEY_SCAN | 33;  /* PgUp */
  3071.             break;
  3072.         case 331: /* Kp4 - NumLock Off */
  3073.             c = KEY_SCAN | 37; /* Left */
  3074.             break;
  3075.         case 332: /* Kp5 - NumLock Off */
  3076.             c = KEY_SCAN | 12; /* Clear */
  3077.             break;
  3078.         case 333: /* Kp6 - NumLock Off */
  3079.             c = KEY_SCAN | 39; /* Right */
  3080.             break;
  3081.         case 335: /* Kp1 - NumLock Off */
  3082.             c = KEY_SCAN | 35; /* End */
  3083.             break;
  3084.         case 336: /* Kp2 - NumLock Off */
  3085.             c = KEY_SCAN | 40; /* Down */
  3086.             break;
  3087.         case 337: /* Kp3 - NumLock Off */
  3088.             c = KEY_SCAN | 34; /* PgDn */
  3089.             break;
  3090.         case 338: /* Kp0 - NumLock Off */
  3091.             c = KEY_SCAN | 45; /* Insert */
  3092.             break;
  3093.         case 339: /* Decimal - NumLock Off */
  3094.             c = KEY_SCAN | 46; /* Delete */
  3095.             break;
  3096.         case 493: /* RightMSWindows */
  3097.             c = KEY_SCAN | 92;
  3098.             break;
  3099.         default:
  3100.             c = 0 ;
  3101.         }
  3102.     }
  3103.     else if ( c >= 782 && c <= 904 )     /* KEY_SCAN | KEY_SHIFT */
  3104.     {
  3105.        c = os2win32_XS[c-782] ;
  3106.     }
  3107.     else if ( c== 963 )
  3108.     {
  3109.         c = KEY_SCAN | KEY_SHIFT | 92 ; /* RightMSWindows */
  3110.     }
  3111.     else if ( c >= 1025 && c <= 1056 )      /* KEY_CTRL */
  3112.     {
  3113.         c = os2win32_C[c-1025] ;
  3114.     }
  3115.     else if ( c >= 1283 && c <= 1430 )      /* KEY_SCAN | KEY_CTRL */
  3116.     {
  3117.         c = os2win32_XC[c-1283] ;
  3118.     }
  3119.     else if ( c== 1486 )
  3120.     {
  3121.        c = KEY_SCAN | KEY_CTRL | KEY_ENHANCED | 91 ; /* LeftMSWindows */
  3122.     }
  3123.     else if ( c== 1487 )
  3124.     {
  3125.         c = KEY_SCAN | KEY_CTRL | KEY_ENHANCED | 92 ; /* RightMSWindows */
  3126.     }
  3127.     else if ( c== 1516 )
  3128.     {
  3129.         c = KEY_SCAN | KEY_ENHANCED | 91 ; /* LeftMSWindows */
  3130.     }
  3131.     else if ( c >= 1792 && c < 2048 )    /* KEY_SCAN | KEY_SHIFT | KEY_CTRL */
  3132.     {
  3133.        switch ( c ) {
  3134.        case 1793: c = KEY_SCAN | KEY_SHIFT | KEY_CTRL | 27 ; break ;
  3135.        case 1795: c = KEY_SCAN | KEY_SHIFT | KEY_CTRL | 50 ; break ;
  3136.        case 1806: c = KEY_SCAN | KEY_SHIFT | KEY_CTRL | 8 ; break ;
  3137.        case 1818: c = KEY_SCAN | KEY_SHIFT | KEY_CTRL | 219 ; break ;
  3138.        case 1820: c = KEY_SCAN | KEY_SHIFT | KEY_CTRL | 13 ; break ;
  3139.        case 1827: c = KEY_SHIFT | KEY_CTRL | 8 ; break ;
  3140.        case 1828: c = KEY_SHIFT | KEY_CTRL | 9 ; break ;
  3141.        case 1842: c = KEY_SHIFT | KEY_CTRL | 13 ; break ;
  3142.        case 1886: c = KEY_SCAN | KEY_SHIFT | KEY_CTRL | 112 ; break ;
  3143.        case 1887: c = KEY_SCAN | KEY_SHIFT | KEY_CTRL | 113 ; break ;
  3144.        case 1888: c = KEY_SCAN | KEY_SHIFT | KEY_CTRL | 114 ; break ;
  3145.        case 1889: c = KEY_SCAN | KEY_SHIFT | KEY_CTRL | 115 ; break ;
  3146.        case 1890: c = KEY_SCAN | KEY_SHIFT | KEY_CTRL | 116 ; break ;
  3147.        case 1891: c = KEY_SCAN | KEY_SHIFT | KEY_CTRL | 117 ; break ;
  3148.        case 1892: c = KEY_SCAN | KEY_SHIFT | KEY_CTRL | 118 ; break ;
  3149.        case 1893: c = KEY_SCAN | KEY_SHIFT | KEY_CTRL | 119 ; break ;
  3150.        case 1894: c = KEY_SCAN | KEY_SHIFT | KEY_CTRL | 120 ; break ;
  3151.        case 1895: c = KEY_SCAN | KEY_SHIFT | KEY_CTRL | 121 ; break ;
  3152.  
  3153.        case 1907: c = KEY_SCAN | KEY_SHIFT | KEY_CTRL | 37 ; break ;
  3154.        case 1908: c = KEY_SCAN | KEY_SHIFT | KEY_CTRL | 39 ; break ;
  3155.        case 1909: c = KEY_SCAN | KEY_SHIFT | KEY_CTRL | 35 ; break ;
  3156.        case 1910: c = KEY_SCAN | KEY_SHIFT | KEY_CTRL | 34 ; break ;
  3157.        case 1911: c = KEY_SCAN | KEY_SHIFT | KEY_CTRL | 36 ; break ;
  3158.  
  3159.        case 1924: c = KEY_SCAN | KEY_SHIFT | KEY_CTRL | 33 ; break ;
  3160.        case 1929: c = KEY_SCAN | KEY_SHIFT | KEY_CTRL | 122 ; break ;
  3161.        case 1930: c = KEY_SCAN | KEY_SHIFT | KEY_CTRL | 123 ; break ;
  3162.        case 1933: c = KEY_SCAN | KEY_SHIFT | KEY_CTRL | 38 ; break ;
  3163.        case 1935: c = KEY_SCAN | KEY_SHIFT | KEY_CTRL | 12 ; break ;
  3164.        case 1937: c = KEY_SCAN | KEY_SHIFT | KEY_CTRL | 40 ; break ;
  3165.        case 1938: c = KEY_SCAN | KEY_SHIFT | KEY_CTRL | 45 ; break ;
  3166.        case 1939: c = KEY_SCAN | KEY_SHIFT | KEY_CTRL | 46 ; break ;
  3167.        case 1940: c = KEY_SCAN | KEY_SHIFT | KEY_CTRL | 9 ; break ;
  3168.  
  3169.        case 1985: c = KEY_SCAN | KEY_SHIFT | 91 ; break ;
  3170.        case 1998: c = KEY_SCAN | KEY_SHIFT | KEY_CTRL | 91 ; break ;
  3171.        case 1999: c = KEY_SCAN | KEY_SHIFT | KEY_CTRL | 92 ; break ;
  3172.  
  3173.        default:
  3174.            c = 0 ;
  3175.        }
  3176.     }
  3177.     else if ( c == 2080 )
  3178.     {
  3179.         c = KEY_ALT | 32 ;
  3180.     }
  3181.     else if ( c == 2084 )
  3182.     {
  3183.         c = KEY_SCAN | KEY_CTRL | KEY_ALT | 52 ; /* AltGr-4 - DK */
  3184.     }
  3185.     else if ( c >= 2112 && c <= 2301 ) /* AltGr combinations */
  3186.     {
  3187.         switch ( c )
  3188.         {
  3189.         case 2112: c = KEY_SCAN | KEY_CTRL | KEY_ALT | 81 ; break ; /* Q */
  3190.             /* This is Ctrl-Alt-2 with the DK keyboard */
  3191.         case 2204: c = KEY_SCAN | KEY_CTRL | KEY_ALT | 51 ; break ; /* 3 - DK */
  3192.         case 2171: c = KEY_SCAN | KEY_CTRL | KEY_ALT | 55 ; break ; /* 7 */
  3193.         case 2139: c = KEY_SCAN | KEY_CTRL | KEY_ALT | 56 ; break ; /* 8 */
  3194.         case 2141: c = KEY_SCAN | KEY_CTRL | KEY_ALT | 57 ; break ; /* 9 */
  3195.         case 2172: c = KEY_SCAN | KEY_CTRL | KEY_ALT | 226; break ; /* OEM.102 */
  3196.         case 2173: c = KEY_SCAN | KEY_CTRL | KEY_ALT | 48 ; break ; /* 0 */
  3197.         case 2140: c = KEY_SCAN | KEY_CTRL | KEY_ALT | 219 ; break ; /* - */
  3198.         case 2174: c = KEY_SCAN | KEY_CTRL | KEY_ALT | 109 ; break ; /* ] */
  3199.         case 2301: c = KEY_SCAN | KEY_CTRL | KEY_ALT | 50 ; break ;  /* 2 */
  3200.         case 2300: c = KEY_SCAN | KEY_CTRL | KEY_ALT | 51 ; break ;  /* 3 */
  3201.         case 2278: c = KEY_SCAN | KEY_CTRL | KEY_ALT | 77 ; break ; /* M */
  3202.         default: c |= KEY_SCAN | KEY_CTRL | KEY_ALT ;
  3203.             /* at least it will be something */
  3204.         }
  3205.     }
  3206.     else if ( c >= 2318 && c <= 2470 ) /* KEY_SCAN | KEY_ALT */
  3207.     {
  3208.         c = os2win32_XA[c-2318] ;
  3209.     }
  3210.     else if ( c== 2523 )
  3211.     {
  3212.         c = KEY_SCAN | KEY_ALT | KEY_ENHANCED | 92 ; /* RightMSWindows */
  3213.     }
  3214.     else if ( c >= 2830 && c <= 2982 ) /* KEY_SCAN | KEY_SHIFT | KEY_ALT */
  3215.     {
  3216.         c = os2win32_XAS[c-2830];
  3217.     }
  3218.     else if ( c == 3104 )
  3219.     {
  3220.         c = KEY_CTRL | KEY_ALT | 32 ;
  3221.     }
  3222.     else if ( c== 3035 )
  3223.     {
  3224.         c = KEY_SCAN | KEY_SHIFT | KEY_ALT | KEY_ENHANCED | 92 ; /* RightMSWindows */
  3225.     }
  3226.     else if ( c >= 3329 && c <= 3494 ) /* KEY_SCAN | KEY_CTRL | KEY_ALT */
  3227.     {
  3228.        c = os2win32_XCA[c-3329];
  3229.     }
  3230.     else if ( c== 3546 )
  3231.     {
  3232.         c = KEY_SCAN | KEY_ALT | KEY_ENHANCED | 91 ; /* LeftMSWindows */
  3233.     }
  3234.     else if ( c== 3547 )
  3235.     {
  3236.         c = KEY_SCAN | KEY_CTRL | KEY_ALT | KEY_ENHANCED | 92 ; /* RightMSWindows */
  3237.     }
  3238.     else if ( c >= 3841 && c <= 4006 )      /* KEY_SCAN | KEY_SHIFT | KEY_ALT | KEY_CTRL */
  3239.     {
  3240.         c = os2win32_XCAS[c-3841];
  3241.     }
  3242.     else if ( c== 4058 )
  3243.     {
  3244.         c = KEY_SCAN | KEY_SHIFT | KEY_ALT | KEY_ENHANCED | 91 ; /* LeftMSWindows */
  3245.     }
  3246.     else if ( c== 4059 )
  3247.     {
  3248.         c = KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | KEY_ENHANCED | 92 ; /* RightMSWindows */
  3249.     }
  3250.     else if ( c >= 4138 && c <= 4153 )
  3251.     {
  3252.         c = os2win32_E[c-4138];
  3253.     }
  3254.     else if ( c >= 4423 && c <= 4435 )
  3255.     {
  3256.         c = os2win32_E1[c-4423];
  3257.     }
  3258.     else if ( c == 4576 )
  3259.     {
  3260.         /* KpEnter */ c = KEY_SCAN | KEY_ENHANCED | 13 ;
  3261.     }
  3262.     else if ( c >= 4651 && c <= 4665 )
  3263.     {
  3264.         c = os2win32_E1A[c-4651];
  3265.     }
  3266.     else if ( c >= 4935 && c <= 4947 )
  3267.     {
  3268.         c = os2win32_E1B[c-4935];
  3269.     }
  3270.     else if ( c == 5088 )
  3271.     {
  3272.         /* KpEnter */ c = KEY_SCAN | KEY_SHIFT | KEY_ENHANCED | 13 ;
  3273.     }
  3274.     else if ( c >= 5491 && c <= 5523 )
  3275.     {
  3276.         c = os2win32_E2[c-5491];
  3277.     }
  3278.     else if ( c == 5600 )
  3279.     {
  3280.         /* KpEnter */ c = KEY_SCAN | KEY_CTRL | KEY_ENHANCED | 13 ;
  3281.     }
  3282.     else if ( c >= 6003 && c <= 6035 )
  3283.     {
  3284.         c = os2win32_E3[c-6003];
  3285.     }
  3286.     else if ( c == 6112 )
  3287.     {
  3288.         /* KpEnter */ c = KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ENHANCED | 13 ;
  3289.     }
  3290.     else
  3291.       c |= KEY_SCAN ;
  3292.  
  3293.     return c ;
  3294. }
  3295.  
  3296. _PROTOTYP( APIRET ConnectToPM, (void) );
  3297. _PROTOTYP( APIRET ReadFromPM, (char *, ULONG, ULONG *) );
  3298. _PROTOTYP( APIRET DisconnectFromPM, (void) );
  3299.  
  3300. #ifndef NOLOCAL
  3301. void
  3302. KbdHandlerThread( void * ArgList ) {
  3303.     KBDKEYINFO k ;
  3304.     int rc, c ;
  3305.     extern BYTE vmode ;
  3306.     extern int priority;
  3307.     char buffer[512] ;
  3308.     ULONG bytes;
  3309.  
  3310.     debug(F100,"KbdHandlerThread is born","",0);
  3311.     SetThreadPrty(XYP_REG,3);
  3312.     rc = PostKbdThreadSem() ;
  3313.  
  3314.     /* we must wait for the keymap to be initialized before starting */
  3315.     /* to process keyboard input */
  3316.     WaitKeyMapInitSem(SEM_INDEFINITE_WAIT) ;
  3317.     /* Do not reset as we don't want to wait each */
  3318.     /* time this thread restarts */
  3319.  
  3320.     while ( KbdActive ) {
  3321.         if ( k95stdin ) {
  3322.             c = 0;
  3323.             if ( (c = getchar()) != EOF ) {
  3324.                 clickkeys();
  3325.                 putkey(vmode, c);
  3326.             }
  3327.             else
  3328.                 msleep(80);
  3329.         }
  3330.         else if ( islocal ) {
  3331.             c = -1 ;
  3332.             if ( !ReadFromPM( buffer, 512, &bytes ))
  3333.             {
  3334. #ifndef NOLOCAL
  3335.                 if ( IsConnectMode() )
  3336.                     SetConnectMode( FALSE, CSX_INTERNAL ) ;
  3337. #endif /* NOLOCAL */
  3338.                 if ( bytes )
  3339.                     putmacro( VCMD, buffer ) ;
  3340.             }
  3341.  
  3342.             memset( &k, 0, sizeof(k) ) ;
  3343.             RequestKeyboardMutex( SEM_INDEFINITE_WAIT ) ;
  3344.             rc = KbdCharIn(&k, IO_NOWAIT, KbdHandle ) ;
  3345.             ReleaseKeyboardMutex() ;
  3346.             if (!(k.fbStatus & (3 << 6)))
  3347.                 /* && !(k.fbStatus & 1) --- blocks ScrollLock */
  3348.             {
  3349.                 msleep( 100 ) ; /* a human can't type faster than this */
  3350.                 continue;       /* top level while(KbdActive) */
  3351.             }
  3352.  
  3353.             if ( !KbdActive )
  3354.                 continue;       /* top level while(KbdActive) */
  3355.  
  3356. #ifdef PCTERM
  3357.             Can't implement PCTERM because I don't have a clue
  3358.             as to how we can capture the KEY_UP events in an OS/2
  3359.             console application.  Using KbdSetStatus() with the
  3360.             KEYBOARD_SHIFT_REPORT flag allows us to see the UP/DOWN
  3361.             events for SHIFT, CTRL, ALT, CAPSLOCK, SCROLLLOCK, NUMLOCK,
  3362.             and maybe a few others but not for the keyboard in general
  3363.             and for those it does report it does not include the scancode.
  3364. #ifndef COMMENT
  3365.             if ( tt_pcterm ) {
  3366.                 printf("k.chChar    0x%X\n",k.chChar   );
  3367.                 printf("k.chScan    0x%X\n",k.chScan   );
  3368.                 printf("k.fbStatus  0x%X\n",k.fbStatus );
  3369.                 printf("k.bNlsShift 0x%X\n",k.bNlsShift);
  3370.                 printf("k.fsState   0x%X\n",k.fsState  );
  3371.                 printf("k.time      0x%X\n",k.time     );
  3372.             }
  3373. #endif /* COMMENT */
  3374.  
  3375.             if ( mode == VTERM ) {
  3376.                 /* Ctrl-CAPSLOCK is the toggle for PCTERM */
  3377.                 static int pcterm_ctrl_down = 0, pcterm_ctrl_up = 0,
  3378.                 pcterm_caps_down = 0, pcterm_caps_up = 0;
  3379.  
  3380.                 switch ( k.wVirtualKeyCode ) {
  3381.                 case VK_CONTROL:
  3382.                     if ( k.bKeyDown ) {
  3383.                         pcterm_ctrl_down = 1;
  3384.                     } else {
  3385.                         if ( pcterm_caps_down && pcterm_caps_up ) {
  3386.                             setpcterm(!tt_pcterm);
  3387.                             pcterm_ctrl_down = pcterm_ctrl_up = pcterm_caps_down =
  3388.                                 pcterm_caps_up = 0;
  3389.                         } else {
  3390.                             pcterm_ctrl_up = 1;
  3391.                         }
  3392.                     }
  3393.                     break;
  3394.                 case VK_CAPITAL:
  3395.                     if ( k.bKeyDown ) {
  3396.                         pcterm_caps_down = 1;
  3397.                     } else {
  3398.                         if ( pcterm_ctrl_down && pcterm_ctrl_up ) {
  3399.                             setpcterm(!tt_pcterm);
  3400.                             pcterm_ctrl_down = pcterm_ctrl_up = pcterm_caps_down =
  3401.                                 pcterm_caps_up = 0;
  3402.                         } else {
  3403.                             pcterm_caps_up = 1;
  3404.                         }
  3405.                     }
  3406.                     break;
  3407.                 default:
  3408.                     pcterm_ctrl_down = pcterm_ctrl_up = pcterm_caps_down =
  3409.                         pcterm_caps_up = 0;
  3410.                 }
  3411.  
  3412.                 if ( tt_pcterm && !wy_block ) {
  3413.                     char pre[16]="";
  3414.                     char hex[16]="";
  3415.                     char post[16]="";
  3416.                     char msg[32]="";
  3417.                     int i=0;
  3418.  
  3419.                     if ( k.fbStatus & ENHANCED_KEY ) {
  3420.                         if ( k.fsStatus & SHIFT) {
  3421.                             if ( k.bKeyDown )
  3422.                                 sprintf(pre,"%c%c",0xE0,0xAA);
  3423.                             else
  3424.                                 sprintf(post,"%c%c",0xE0,0x2A);
  3425.                         }
  3426.                         sprintf(hex,"%c",0xE0);
  3427.                         strcat(pre,hex);
  3428.                     }
  3429.  
  3430.                     for ( i=0 ; i<k.wRepeatCount && i<15 ; i++ ) {
  3431.                         if ( k.bKeyDown )
  3432.                             hex[i] = k.wVirtualScanCode;
  3433.                         else
  3434.                             hex[i] = k.wVirtualScanCode + 0x80;
  3435.                     }
  3436.                     hex[i] = '\0';
  3437.                     sprintf(msg,"%s%s%s",pre,hex,post);
  3438.                     ttol(msg,strlen(msg));
  3439.                     return;
  3440.                 }
  3441.             }
  3442. #endif /* PCTERM */
  3443.  
  3444.  
  3445.             if ( k.chChar || k.chScan ) {
  3446.                 if ( ( k.fbStatus & ENHANCED_KEY ) &&
  3447.                      ( k.chChar == 0x0 || k.chChar == 0xE0 ) )
  3448.                 {
  3449.                     /* Then we have an extended scan code */
  3450.                     c = k.chScan | KEY_SCAN ;
  3451.  
  3452.                     /* We don't check for SHIFT of normal characters because they */
  3453.                     /* just generate other ASCII values */
  3454.  
  3455.                     if ( k.fsState & SHIFT )
  3456.                         c |= KEY_SHIFT ;
  3457.  
  3458.                     if ( k.chChar == 0xE0 )
  3459.                         c |= KEY_ENHANCED ;
  3460.                 }
  3461.                 else
  3462.                 {
  3463.                     /* We have a normal character */
  3464.                     c = k.chChar ;
  3465.                     switch (c) {        /* Handle ambiguous keypad and space keys */
  3466.                     case ESC:
  3467.                         c = k.chScan | KEY_SCAN         |
  3468.                             ( k.fsState & SHIFT ? KEY_SHIFT : 0x0 ) ;
  3469.                         break ;
  3470.                     case '\t':
  3471.                         if ( k.chScan == 0x0F )
  3472.                         {
  3473.                             c = k.chScan | KEY_SCAN |
  3474.                                 ( ( k.fbStatus & ENHANCED_KEY && k.chChar == 0xE0 )
  3475.                                   ? KEY_ENHANCED : 0x0 ) |
  3476.                                       ( k.fsState & SHIFT ? KEY_SHIFT : 0x0 ) ;
  3477.                         }
  3478.                         break ;
  3479.                     case DEL:
  3480.                         c = k.chScan | KEY_SCAN |
  3481.                             ( ( k.fbStatus & ENHANCED_KEY && k.chChar == 0xE0 )
  3482.                               ? KEY_ENHANCED : 0x0 ) |
  3483.                                   ( k.fsState & SHIFT ? KEY_SHIFT : 0x0 ) ;
  3484.                         break;
  3485.                     case '\b':
  3486.                         c = k.chScan | KEY_SCAN |
  3487.                             ( ( k.fbStatus & ENHANCED_KEY && k.chChar == 0xE0 )
  3488.                               ? KEY_ENHANCED : 0x0 ) |
  3489.                                   ( k.fsState & SHIFT ? KEY_SHIFT : 0x0 ) ;
  3490.                         break;
  3491.                     case '+':
  3492.                         /* c |= k.chScan == 0x4E ? KEY_ENHANCED : 0 ; */
  3493.                         if ( k.chScan == 0x4E )
  3494.                         {
  3495.                             c |= KEY_ENHANCED |
  3496.                                 ( k.fsState & SHIFT ? KEY_SHIFT : 0x0 ) ;
  3497.                         }
  3498.                         break;
  3499.                     case '-':
  3500.                         /* c |= k.chScan == 0x4A ? KEY_ENHANCED : 0; */
  3501.                         if ( k.chScan == 0x4A )
  3502.                         {
  3503.                             c |= KEY_ENHANCED |
  3504.                                 ( k.fsState & SHIFT ? KEY_SHIFT : 0x0 ) ;
  3505.                         }
  3506.                         break;
  3507.                     case '*':
  3508.                         /* c |= k.chScan == 0x37 ? KEY_ENHANCED : 0; */
  3509.                         if ( k.chScan == 0x37 )
  3510.                         {
  3511.                             c |= KEY_ENHANCED |
  3512.                                 ( k.fsState & SHIFT ? KEY_SHIFT : 0x0 ) ;
  3513.                         }
  3514.                         break;
  3515.                     case '/':
  3516.                         if ( k.chScan == 0xE0 )
  3517.                         {
  3518.                             c |= KEY_ENHANCED |
  3519.                                 ( k.fsState & SHIFT ? KEY_SHIFT : 0x0 ) ;
  3520.                         }
  3521.                         break;
  3522.                     case '\r':
  3523.                     case '\n':
  3524.                         /* c |= k.chScan == 0xE0 ? KEY_ENHANCED : 0; */
  3525.                         c = k.chScan | KEY_SCAN ;
  3526.                         if ( k.chScan == 0xE0 ||
  3527.                              k.chScan == 166 )
  3528.                         {
  3529.                             c |= KEY_ENHANCED ;
  3530.                         }
  3531.                         c |= ( k.fsState & SHIFT ? KEY_SHIFT : 0x0 ) ;
  3532.                         break;
  3533.                     case '.':
  3534.                     case ',':
  3535.                         /* c |= k.chScan == 0x53 ? KEY_ENHANCED : 0; */
  3536.                         if ( k.chScan == 0x53 )
  3537.                         {
  3538.                             c |= KEY_ENHANCED |
  3539.                                 ( k.fsState & SHIFT ? KEY_SHIFT : 0x0 ) ;
  3540.                         }
  3541.                         break;
  3542.                     case '0':
  3543.                     case '1':
  3544.                     case '2':
  3545.                     case '3':
  3546.                     case '4':
  3547.                     case '5':
  3548.                     case '6':
  3549.                     case '7':
  3550.                     case '8':
  3551.                     case '9':
  3552.                         /* c |= k.chScan >= 0x47 ? KEY_ENHANCED : 0; */
  3553.                         if ( k.chScan >= 0x47 )
  3554.                         {
  3555.                             c |= KEY_ENHANCED |
  3556.                                 ( k.fsState & SHIFT ? KEY_SHIFT : 0x0 ) ;
  3557.                         }
  3558.                         break;
  3559.                     }
  3560.                 }
  3561.  
  3562.                 if ( k.fsState & CONTROL )
  3563.                     c |= KEY_CTRL ;
  3564.  
  3565.                 if ( k.fsState & ALT )
  3566.                     c |= KEY_ALT ;
  3567.             }
  3568.             else if ( (k.fbStatus & SHIFT_KEY_IN) && (k.fsState & NUMLOCK) ) {
  3569.                 c = KEY_SCAN | 69 | ((k.fsState & NUMLOCK_ON) ? KEY_SHIFT : 0x0) ;
  3570.             }
  3571.             else if ( (k.fbStatus & SHIFT_KEY_IN) && (k.fsState & SCROLLLOCK) ) {
  3572.                 c = KEY_SCAN | 70 | ((k.fsState & SCROLLLOCK_ON) ? KEY_SHIFT : 0x0) ;
  3573.             }
  3574.  
  3575.             debug(F111,"KbdThreadHandler","scancode",c);
  3576.             if ( c >= 0 ) {
  3577.                 c = os2towin32(c);      /* Convert Scan Code                         */
  3578.                 debug(F111,"KbdThreadHandler","os2towin32(c)",c);
  3579.                 if ( c >= 256 &&            /* Not a pure ascii value                    */
  3580.                      k.chChar != 0x00 &&    /* these values are used when there          */
  3581.                      k.chChar != 0xE0 ) {   /* is no Ascii value associated with the key */
  3582. #ifndef NOSETKEY
  3583.                     if ( keymap != NULL && mapkey(c).type == error &&
  3584.                          c < KMSIZE )   /* Not equal to its default value            */
  3585.                         keymap[c] = k.chChar ;
  3586. #endif /* NOSETKEY */
  3587.                 }
  3588.                 debug(F101,"putkey","",c);
  3589.                 clickkeys() ;
  3590.                 putkey( vmode, c ) ;
  3591.             }
  3592.         }   /* if ( !islocal ) */
  3593.         else {
  3594.             c = 0;
  3595.             if ( read(ttyfd, &c, 1) == 1 ) {
  3596.                 putkey(vmode,c);
  3597.             }
  3598.             else
  3599.                 msleep(80);
  3600.         }
  3601.     }  /* while ( KbdActive ) */
  3602.  
  3603.     PostKbdThreadSem() ;
  3604.     debug(F100,"KbdHandlerThread dies","",0);
  3605.     ckThreadEnd(NULL);
  3606. }
  3607. #endif /* NOLOCAL */
  3608. #endif /* NT */
  3609.  
  3610. #ifndef NOSETKEY
  3611. /* Initialize key map */
  3612. void
  3613. keymapinit() {
  3614.     int i ;
  3615. #ifdef BETADEBUG
  3616.     printf("Initializing Default Keymaps\n");
  3617. #endif /* BETADEBUG */
  3618.     for ( i=0;i<=TT_MAX+4;i++ )
  3619.         defaultkeymap(i) ;
  3620. #ifdef BETADEBUG
  3621.     printf("Initialization complete!\n");
  3622. #endif /* BETADEBUG */
  3623.  
  3624.    PostKeyMapInitSem() ;
  3625. }
  3626.  
  3627. char *
  3628. keyname( ULONG key )
  3629. {
  3630.     static char namestr[80] ;
  3631.     ULONG c = 0 ;
  3632.     int len = 0;
  3633.  
  3634.     namestr[0] = '\0' ;
  3635.     if ( key & KEY_CTRL &&
  3636.          !(charnam[c] && !(key & KEY_SCAN)))
  3637.     {
  3638.         strcat( namestr, "Ctrl-" ) ;
  3639.         len += 5 ;
  3640.     }
  3641.  
  3642.     if ( key & KEY_ALT )
  3643.     {
  3644.         strcat( namestr, "Alt-" ) ;
  3645.         len += 4 ;
  3646.     }
  3647.  
  3648.     if ( key & KEY_SHIFT )
  3649.     {
  3650.         strcat( namestr, "Shift-" ) ;
  3651.         len += 6 ;
  3652.     }
  3653.  
  3654.     if ( key & KEY_ENHANCED )
  3655.     {
  3656.         if ( key & KEY_SCAN )
  3657.         {
  3658.             strcat( namestr, "Gray-" ) ;
  3659.             len += 5 ;
  3660.         }
  3661.         else
  3662.         {
  3663.             strcat( namestr, "Kp-" ) ;
  3664.             len += 3 ;
  3665.         }
  3666.     }
  3667.  
  3668.     c = key & 0xFF ;
  3669.     if ( key & KEY_SCAN )
  3670.     {
  3671.         char buf[32] ;
  3672. #ifdef NT
  3673.         strcat( namestr, keynam[c] == NULL ? _itoa(c, buf, 10) : keynam[c] ) ;
  3674. #else /* NT */
  3675.         strcat( namestr, keynam[c] == NULL ? itoa(c, buf, 10) : keynam[c] ) ;
  3676. #endif /* NT */
  3677.     }
  3678.     else /* A pure ASCII value */
  3679.     {
  3680.         if ( charnam[c] )
  3681.             strcat( namestr, charnam[c] ) ;
  3682.         else if ( c == 0x00 )
  3683.             return NULL ;
  3684.         else if ( c == 8 )
  3685.         {
  3686.             strcat( namestr, "BS" ) ;
  3687.             len = 2 ;
  3688.         }
  3689.         else if ( c == 9 )
  3690.         {
  3691.             strcat( namestr, "TAB" ) ;
  3692.             len = 3 ;
  3693.         }
  3694.         else if ( c == 10 )
  3695.         {
  3696.             strcat( namestr, "LF" ) ;
  3697.             len = 2 ;
  3698.         }
  3699.         else if ( c == 13 )
  3700.         {
  3701.             strcat( namestr, "CR" ) ;
  3702.             len = 2 ;
  3703.         }
  3704.         else if ( c == 27 )
  3705.         {
  3706.             strcat( namestr, "ESC" ) ;
  3707.             len = 3 ;
  3708.         }
  3709.         else if ( c < 32 )
  3710.         {
  3711.             namestr[len++] = '^' ;
  3712.             namestr[len++] = c + 64 ;
  3713.             namestr[len] = '\0' ;
  3714.         }
  3715.         else if ( c == 127 )
  3716.         {
  3717.             strcat( namestr, "DEL" ) ;
  3718.             len = 9 ;
  3719.         }
  3720.         else if ( c == 32 )
  3721.         {
  3722.             strcat( namestr, "SPACE" ) ;
  3723.             len = 11 ;
  3724.         }
  3725.         else
  3726.         {
  3727.             namestr[len++] = c ;
  3728.             namestr[len] = '\0' ;
  3729.         }
  3730.     }
  3731.     return *namestr ? namestr : NULL ;
  3732. }
  3733.  
  3734. VOID
  3735. keynaminit() {
  3736.  
  3737. /*  These names apply only to US keyboards.  */
  3738.  
  3739.     int i;
  3740.  
  3741.     for (i = 0; i < 256; i++) {
  3742.         keynam[i] = NULL ;  /* Should be NULL */
  3743.         charnam[i] = NULL ;
  3744.     }
  3745.  
  3746.     keynam[1] = "LMouse" ;
  3747.     keynam[2] = "RMouse" ;
  3748.     keynam[3] = "Control-Break" ;
  3749.     keynam[4] = "MMouse" ;
  3750.  
  3751.     keynam[8] = "Backspace" ;
  3752.     keynam[9] = "Tab" ;
  3753.  
  3754.     keynam[12] = "Clear" ;
  3755.     keynam[13] = "Enter" ;
  3756.  
  3757.     keynam[16] = "Shift" ;
  3758.     keynam[17] = "Control" ;
  3759.     keynam[18] = "Alt" ;
  3760.     keynam[19] = "Pause" ;
  3761.     keynam[20] = "CapsLock" ;
  3762.  
  3763.     keynam[27] = "Esc" ;
  3764.  
  3765.     keynam[32] = "Space" ;
  3766.     keynam[33] = "PageUp" ;
  3767.     keynam[34] = "PageDown" ;
  3768.     keynam[35] = "End" ;
  3769.     keynam[36] = "Home" ;
  3770.     keynam[37] = "LeftArrow" ;
  3771.     keynam[38] = "UpArrow" ;
  3772.     keynam[39] = "RightArrow" ;
  3773.     keynam[40] = "DownArrow" ;
  3774.     keynam[41] = "Select" ;
  3775.     keynam[42] = "Print";  /* Nokia */
  3776.     keynam[43] = "Execute" ;
  3777.     keynam[44] = "PrintScreen" ;
  3778.     keynam[45] = "Insert" ;
  3779.     keynam[46] = "Delete" ;
  3780.     keynam[47] = "Help" ;
  3781.     keynam[48] = "0" ;
  3782.     keynam[49] = "1" ;
  3783.     keynam[50] = "2" ;
  3784.     keynam[51] = "3" ;
  3785.     keynam[52] = "4" ;
  3786.     keynam[53] = "5" ;
  3787.     keynam[54] = "6" ;
  3788.     keynam[55] = "7" ;
  3789.     keynam[56] = "8" ;
  3790.     keynam[57] = "9" ;
  3791.  
  3792.     keynam[65] = "A" ;
  3793.     keynam[66] = "B" ;
  3794.     keynam[67] = "C" ;
  3795.     keynam[68] = "D" ;
  3796.     keynam[69] = "E" ;
  3797.     keynam[70] = "F" ;
  3798.     keynam[71] = "G" ;
  3799.     keynam[72] = "H" ;
  3800.     keynam[73] = "I" ;
  3801.     keynam[74] = "J" ;
  3802.     keynam[75] = "K" ;
  3803.     keynam[76] = "L" ;
  3804.     keynam[77] = "M" ;
  3805.     keynam[78] = "N" ;
  3806.     keynam[79] = "O" ;
  3807.     keynam[80] = "P" ;
  3808.     keynam[81] = "Q" ;
  3809.     keynam[82] = "R" ;
  3810.     keynam[83] = "S" ;
  3811.     keynam[84] = "T" ;
  3812.     keynam[85] = "U" ;
  3813.     keynam[86] = "V" ;
  3814.     keynam[87] = "W" ;
  3815.     keynam[88] = "X" ;
  3816.     keynam[89] = "Y" ;
  3817.     keynam[90] = "Z" ;
  3818.  
  3819.     keynam[91] = "LeftMSWindows" ;
  3820.     keynam[92] = "RightMSWindows" ;
  3821.     keynam[93] = "TaskList" ;
  3822.  
  3823.     keynam[96] = "Keypad-0" ;
  3824.     keynam[97] = "Keypad-1" ;
  3825.     keynam[98] = "Keypad-2" ;
  3826.     keynam[99] = "Keypad-3" ;
  3827.     keynam[100] = "Keypad-4" ;
  3828.     keynam[101] = "Keypad-5" ;
  3829.     keynam[102] = "Keypad-6" ;
  3830.     keynam[103] = "Keypad-7" ;
  3831.     keynam[104] = "Keypad-8" ;
  3832.     keynam[105] = "Keypad-9" ;
  3833.     keynam[106] = "Multiply" ;
  3834.     keynam[107] = "Add" ;
  3835.     keynam[108] = "Separator" ;
  3836.     keynam[109] = "Subtract" ;
  3837.     keynam[110] = "Decimal" ;
  3838.     keynam[111] = "Divide" ;
  3839.     keynam[112] = "F1" ;
  3840.     keynam[113] = "F2" ;
  3841.     keynam[114] = "F3" ;
  3842.     keynam[115] = "F4" ;
  3843.     keynam[116] = "F5" ;
  3844.     keynam[117] = "F6" ;
  3845.     keynam[118] = "F7" ;
  3846.     keynam[119] = "F8" ;
  3847.     keynam[120] = "F9" ;
  3848.     keynam[121] = "F10" ;
  3849.     keynam[122] = "F11" ;
  3850.     keynam[123] = "F12" ;
  3851.     keynam[124] = "F13" ;
  3852.     keynam[125] = "F14" ;
  3853.     keynam[126] = "F15" ;
  3854.     keynam[127] = "F16" ;
  3855.     keynam[128] = "F17" ;
  3856.     keynam[129] = "F18" ;
  3857.     keynam[130] = "F19" ;
  3858.     keynam[131] = "F20" ;
  3859.     keynam[132] = "F21" ;
  3860.     keynam[133] = "F22" ;
  3861.     keynam[134] = "F23" ;
  3862.     keynam[135] = "F24" ;
  3863.  
  3864.     keynam[144] = "NumLock" ;
  3865.     keynam[145] = "ScrollLock" ;
  3866.  
  3867.     keynam[166] = "Web Page Backward";
  3868.     keynam[167] = "Web Page Forward";
  3869.  
  3870.     keynam[186] = "OEM.US.SemiColon" ;
  3871.     keynam[187] = "OEM.US.Equal" ;
  3872.     keynam[188] = "OEM.US.Comma" ;
  3873.     keynam[189] = "OEM.US.Subtract" ;
  3874.     keynam[190] = "OEM.US.Period" ;
  3875.     keynam[191] = "OEM.US.Slash" ;
  3876.     keynam[192] = "OEM.US.Grave" ;
  3877.  
  3878.     keynam[219] = "OEM.US.LeftBracket" ;
  3879.     keynam[220] = "OEM.US.BackSlash" ;
  3880.     keynam[221] = "OEM.US.RightBracket" ;
  3881.     keynam[222] = "OEM.US.Quote" ;
  3882.     keynam[223] = "OEM_8";
  3883.     keynam[224] = "Olivetti.F17" ;
  3884.     keynam[225] = "Olivetti.F18" ;
  3885.     keynam[226] = "OEM.IBM.Enhanced.102";
  3886.     keynam[227] = "Olivetti.Help";
  3887.     keynam[228] = "Olivetti.00";
  3888.  
  3889.     keynam[230] = "Olivetti.Clear";
  3890.  
  3891.     keynam[233] = "OEM.Reset";  /* Nokia */
  3892.     keynam[234] = "OEM.Jump" ;  /* Nokia */
  3893.     keynam[235] = "OEM.PA1";    /* Nokia */
  3894.     keynam[236] = "OEM.PA2";    /* Nokia */
  3895.     keynam[237] = "OEM.PA3";    /* Nokia */
  3896.     keynam[238] = "OEM.WSCtrl"; /* Nokia */
  3897.     keynam[239] = "OEM.CUSel";  /* Nokia */
  3898.     keynam[240] = "OEM.Attn";   /* Nokia */
  3899.     keynam[241] = "OEM.Finnish";/* Nokia */
  3900.     keynam[242] = "OEM.Copy";   /* Nokia */
  3901.     keynam[243] = "OEM.Auto";   /* Nokia */
  3902.     keynam[244] = "OEM.Enlw";   /* Nokia */
  3903.     keynam[245] = "OEM.Backtab";/* Nokia */
  3904.     keynam[246] = "Attn";
  3905.     keynam[247] = "Crsel";
  3906.     keynam[248] = "Exsel";
  3907.     keynam[249] = "Ereof";
  3908.     keynam[250] = "Play";
  3909.     keynam[251] = "Zoom";
  3910.     keynam[252] = "Noname";
  3911.     keynam[253] = "PA1";
  3912.     keynam[254] = "OEM.Clear";
  3913.  
  3914.     /* Now complete the char name table */
  3915.     charnam[0] = "NUL" ;
  3916.     charnam[1] = "SOH" ;
  3917.     charnam[2] = "STX" ;
  3918.     charnam[3] = "ETX" ;
  3919.     charnam[4] = "EOT" ;
  3920.     charnam[5] = "ENQ" ;
  3921.     charnam[6] = "ACK" ;
  3922.     charnam[7] = "BEL" ;
  3923.     charnam[8] = "BS" ;
  3924.     charnam[9] = "HT" ;
  3925.     charnam[10] = "LF" ;
  3926.     charnam[11] = "VT" ;
  3927.     charnam[12] = "FF" ;
  3928.     charnam[13] = "CR" ;
  3929.     charnam[14] = "SO" ;
  3930.     charnam[15] = "SI" ;
  3931.     charnam[16] = "DLE" ;
  3932.     charnam[17] = "DC1" ;
  3933.     charnam[18] = "DC2" ;
  3934.     charnam[19] = "DC3" ;
  3935.     charnam[20] = "DC4" ;
  3936.     charnam[21] = "NAK" ;
  3937.     charnam[22] = "SYN" ;
  3938.     charnam[23] = "ETB" ;
  3939.     charnam[24] = "CAN" ;
  3940.     charnam[25] = "EM" ;
  3941.     charnam[26] = "SUB" ;
  3942.     charnam[27] = "ESC" ;
  3943.     charnam[28] = "FS" ;
  3944.     charnam[29] = "GS" ;
  3945.     charnam[30] = "RS" ;
  3946.     charnam[31] = "US" ;
  3947.     charnam[32] = "SP" ;
  3948.     charnam[127] = "DEL" ;
  3949.     charnam[132] = "IND" ;
  3950.     charnam[133] = "NEL" ;
  3951.     charnam[134] = "SSA" ;
  3952.     charnam[135] = "ESA" ;
  3953.     charnam[136] = "HTS" ;
  3954.     charnam[137] = "HTJ" ;
  3955.     charnam[138] = "VTS" ;
  3956.     charnam[139] = "PLD" ;
  3957.     charnam[140] = "PLU" ;
  3958.     charnam[141] = "RI" ;
  3959.     charnam[142] = "SS2" ;
  3960.     charnam[143] = "SS3" ;
  3961.     charnam[144] = "DCS" ;
  3962.     charnam[145] = "PU1" ;
  3963.     charnam[146] = "PU2" ;
  3964.     charnam[147] = "STS" ;
  3965.     charnam[148] = "CCH" ;
  3966.     charnam[149] = "MW" ;
  3967.     charnam[150] = "SPA" ;
  3968.     charnam[151] = "EPA" ;
  3969.     charnam[155] = "CSI" ;
  3970.     charnam[156] = "ST" ;
  3971.     charnam[157] = "OSC" ;
  3972.     charnam[158] = "PM" ;
  3973.     charnam[159] = "APC" ;
  3974. }
  3975.  
  3976. struct {
  3977.     int msk ;
  3978.     int ck ;
  3979. } mskcontab[] = {
  3980.     /* Control Keys */
  3981. /* Ctrl-A */ 1, 1025 ,
  3982. /* Ctrl-B */ 2, 1026 ,
  3983. /* Ctrl-C */ 3, 1027 ,
  3984. /* Ctrl-D */ 4, 1028 ,
  3985. /* Ctrl-E */ 5, 1029 ,
  3986. /* Ctrl-F */ 6, 1030 ,
  3987. /* Ctrl-G */ 7, 1031 ,
  3988. /* Ctrl-H */ 8, 1032 ,
  3989. /* Ctrl-I */ 9, 1033 ,
  3990. /* Ctrl-J */ 10, 1034 ,
  3991. /* Ctrl-K */ 11, 1035 ,
  3992. /* Ctrl-L */ 12, 1036 ,
  3993. /* Ctrl-M */ 13, 1037 ,
  3994. /* Ctrl-N */ 14, 1038 ,
  3995. /* Ctrl-O */ 15, 1039 ,
  3996. /* Ctrl-P */ 16, 1040 ,
  3997. /* Ctrl-Q */ 17, 1041 ,
  3998. /* Ctrl-R */ 18, 1042 ,
  3999. /* Ctrl-S */ 19, 1043 ,
  4000. /* Ctrl-T */ 20, 1044 ,
  4001. /* Ctrl-U */ 21, 1045 ,
  4002. /* Ctrl-V */ 22, 1046 ,
  4003. /* Ctrl-W */ 23, 1047 ,
  4004. /* Ctrl-X */ 24, 1048 ,
  4005. /* Ctrl-Y */ 25, 1049 ,
  4006. /* Ctrl-Z */ 26, 1050 ,
  4007. /* Ctrl-[ */ 27, 1051 ,
  4008. /* Ctrl-\ */ 28, 1052 ,
  4009. /* Ctrl-] */ 29, 1053 ,
  4010. /* Ctrl-^ */ 30, 1054 ,
  4011. /* Ctrl-_ */ 31, 1055 ,
  4012.  
  4013. /* Esc */   257, 27 ,
  4014. /* BS */    270, 264 ,
  4015. /* Tab */   271, 265 ,
  4016. /* Enter */ 284, 269 ,
  4017. /* Space */ 313, 32 ,
  4018.  
  4019. /* Fn */
  4020. /* F1 */ 315, 368 ,
  4021. /* F2 */ 316, 369 ,
  4022. /* F3 */ 317, 370 ,
  4023. /* F4 */ 318, 371 ,
  4024. /* F5 */ 319, 372 ,
  4025. /* F6 */ 320, 373 ,
  4026. /* F7 */ 321, 374 ,
  4027. /* F8 */ 322, 375 ,
  4028. /* F9 */ 323, 376 ,
  4029. /* F10*/ 324, 377 ,
  4030. /* F11*/ 389, 378 ,
  4031. /* F12*/ 390, 379 ,
  4032.  
  4033.     /* Shift */
  4034. /* Esc */   769, 539 ,
  4035. /* BS */    782, 776 ,
  4036. /* Tab */   783, 777 ,
  4037. /* Enter */ 796, 781 ,
  4038. /* Space */ 825, 32 ,
  4039.  
  4040. /* Shift-Fn */
  4041. /* F1 */ 852, 880 ,
  4042. /* F2 */ 853, 881 ,
  4043. /* F3 */ 854, 882 ,
  4044. /* F4 */ 855, 883 ,
  4045. /* F5 */ 856, 884 ,
  4046. /* F6 */ 857, 885 ,
  4047. /* F7 */ 858, 886 ,
  4048. /* F8 */ 859, 887 ,
  4049. /* F9 */ 860, 888 ,
  4050. /* F10*/ 861, 889 ,
  4051. /* F11*/ 903, 890 ,
  4052. /* F12*/ 904, 891 ,
  4053.  
  4054. /* Gray Keys */
  4055. 4434, 4397 ,
  4056. 4435, 4398 ,
  4057. 4423, 4388 ,
  4058. 4431, 4387 ,
  4059. 4425, 4385 ,
  4060. 4433, 4386 ,
  4061. 4427, 4389 ,
  4062. 4432, 4392 ,
  4063. 4429, 4391 ,
  4064. 4424, 4390 ,
  4065.  
  4066. /* Ctrl-Fn */
  4067. /* F1 */ 1374, 1392 ,
  4068. /* F2 */ 1375, 1393 ,
  4069. /* F3 */ 1376, 1394 ,
  4070. /* F4 */ 1377, 1395 ,
  4071. /* F5 */ 1378, 1396 ,
  4072. /* F6 */ 1379, 1397 ,
  4073. /* F7 */ 1380, 1398 ,
  4074. /* F8 */ 1381, 1399 ,
  4075. /* F9 */ 1382, 1400 ,
  4076. /* F10*/ 1383, 1401 ,
  4077. /* F11*/ 1417, 1402 ,
  4078. /* F12*/ 1418, 1403 ,
  4079.  
  4080. /* Alt-Fn */
  4081. /* F1 */ 2408, 2416 ,
  4082. /* F2 */ 2409, 2417 ,
  4083. /* F3 */ 2410, 2418 ,
  4084. /* F4 */ 2411, 2419 ,
  4085. /* F5 */ 2412, 2420 ,
  4086. /* F6 */ 2413, 2421 ,
  4087. /* F7 */ 2414, 2422 ,
  4088. /* F8 */ 2415, 2423 ,
  4089. /* F9 */ 2416, 2424 ,
  4090. /* F10*/ 2417, 2425 ,
  4091. /* F11*/ 2443, 2426 ,
  4092. /* F12*/ 2444, 2427 ,
  4093.  
  4094. /* Ctrl-Shift-Fn */
  4095. /* F1 */ 1886, 1904 ,
  4096. /* F2 */ 1887, 1905 ,
  4097. /* F3 */ 1888, 1906 ,
  4098. /* F4 */ 1889, 1907 ,
  4099. /* F5 */ 1890, 1908 ,
  4100. /* F6 */ 1891, 1909 ,
  4101. /* F7 */ 1892, 1910 ,
  4102. /* F8 */ 1893, 1911 ,
  4103. /* F9 */ 1894, 1912 ,
  4104. /* F10*/ 1895, 1913 ,
  4105. /* F11*/ 1929, 1914 ,
  4106. /* F12*/ 1930, 1915 ,
  4107.  
  4108. /* Alt-Shift-Fn */
  4109. /* F1 */ 2920, 2928 ,
  4110. /* F2 */ 2921, 2929 ,
  4111. /* F3 */ 2922, 2930 ,
  4112. /* F4 */ 2923, 2931 ,
  4113. /* F5 */ 2924, 2932 ,
  4114. /* F6 */ 2925, 2933 ,
  4115. /* F7 */ 2926, 2934 ,
  4116. /* F8 */ 2927, 2935 ,
  4117. /* F9 */ 2928, 2936 ,
  4118. /* F10*/ 2929, 2937 ,
  4119. /* F11*/ 2955, 2938 ,
  4120. /* F12*/ 2956, 2939 ,
  4121.  
  4122. /* Ctrl-Alt-Fn */
  4123. /* F1 */ 3432, 3440 ,
  4124. /* F2 */ 3433, 3441 ,
  4125. /* F3 */ 3434, 3442 ,
  4126. /* F4 */ 3435, 3443 ,
  4127. /* F5 */ 3436, 3444 ,
  4128. /* F6 */ 3437, 3445 ,
  4129. /* F7 */ 3438, 3446 ,
  4130. /* F8 */ 3439, 3447 ,
  4131. /* F9 */ 3440, 3448 ,
  4132. /* F10*/ 3441, 3449 ,
  4133. /* F11*/ 3467, 3450 ,
  4134. /* F12*/ 3468, 3451 ,
  4135.  
  4136. /* Ctrl-Alt-Shift-Fn */
  4137. /* F1 */ 3944, 3952 ,
  4138. /* F2 */ 3945, 3953 ,
  4139. /* F3 */ 3946, 3954 ,
  4140. /* F4 */ 3947, 3955 ,
  4141. /* F5 */ 3948, 3956 ,
  4142. /* F6 */ 3949, 3957 ,
  4143. /* F7 */ 3950, 3958 ,
  4144. /* F8 */ 3951, 3959 ,
  4145. /* F9 */ 3952, 3960 ,
  4146. /* F10*/ 3953, 3961 ,
  4147. /* F11*/ 3979, 3962 ,
  4148. /* F12*/ 3980, 3963 ,
  4149.  
  4150. /* Ctrl */
  4151. /* Tab */ 1428, 1289 ,
  4152. /* BS */  127, 1151 ,
  4153. /* Enter */ 1308, 1293,
  4154. /* Space */ 1337, 1056,
  4155. /* 2 */   1283, 1330,
  4156. /* 6 */   30, 1334,
  4157. /* - */   31, 1469,
  4158. /* \ */   28, 1052,
  4159.  
  4160. /* Alt */
  4161. /* BS */    2318, 2312 ,
  4162. /* Enter */ 2332, 2317 ,
  4163. /* Space */ 2361, 2080 ,
  4164.  
  4165. 2345, 2144 ,
  4166. 2424, 2097 ,
  4167. 2425, 2098 ,
  4168. 2426, 2099 ,
  4169. 2427, 2100 ,
  4170. 2428, 2101 ,
  4171. 2429, 2102 ,
  4172. 2430, 2103 ,
  4173. 2431, 2104 ,
  4174. 2432, 2105 ,
  4175. 2433, 2096 ,
  4176. 2434, 2093 ,
  4177. 2435, 2109 ,
  4178.  
  4179. 2320, 2161 ,
  4180.  
  4181. 2334, 2145 ,
  4182.  
  4183.  
  4184. /* Ctrl-Shift */
  4185. 1940, 1801 ,
  4186. 1820, 1805 ,
  4187.  
  4188. /* Alt-Shift */
  4189. 2830, 2824 ,
  4190.  
  4191. /* Ctrl-Alt-Shift */
  4192. 4005, 3849 ,
  4193. 3854, 3848 ,
  4194. 3868, 3853 ,
  4195.  
  4196. /* Alt-Alphabet */
  4197. /* ' */ 2344, 2087,
  4198. /* , */ 2355, 2092,
  4199. /* - */ 2434, 2093,
  4200. /* . */ 2356, 2094,
  4201. /* / */ 2357, 2095,
  4202. /* 0 */ 2433, 2096,
  4203. /* 1 */ 2424, 2097,
  4204. /* 2 */ 2425, 2098,
  4205. /* 3 */ 2426, 2099,
  4206. /* 4 */ 2427, 2100,
  4207. /* 5 */ 2428, 2101,
  4208. /* 6 */ 2429, 2102,
  4209. /* 7 */ 2430, 2103,
  4210. /* 8 */ 2431, 2104,
  4211. /* 9 */ 2432, 2105,
  4212. /* ; */ 2343, 2107,
  4213. /* = */ 2435, 2109,
  4214. /* [ */ 2330, 2139,
  4215. /* \ */ 2347, 2140,
  4216. /* ] */ 2331, 2141,
  4217. /* ` */ 2345, 2144,
  4218. /* a */ 2334, 2145,
  4219. /* b */ 2352, 2146,
  4220. /* c */ 2350, 2147,
  4221. /* d */ 2336, 2148,
  4222. /* e */ 2322, 2149,
  4223. /* f */ 2337, 2150,
  4224. /* g */ 2338, 2151,
  4225. /* h */ 2339, 2152,
  4226. /* i */ 2327, 2153,
  4227. /* j */ 2340, 2154,
  4228. /* k */ 2341, 2155,
  4229. /* l */ 2342, 2156,
  4230. /* m */ 2354, 2157,
  4231. /* n */ 2353, 2158,
  4232. /* o */ 2328, 2159,
  4233. /* p */ 2329, 2160,
  4234. /* q */ 2320, 2161,
  4235. /* r */ 2323, 2162,
  4236. /* s */ 2335, 2163,
  4237. /* t */ 2324, 2164,
  4238. /* u */ 2326, 2165,
  4239. /* v */ 2351, 2166,
  4240. /* w */ 2321, 2167,
  4241. /* x */ 2349, 2168,
  4242. /* y */ 2325, 2169,
  4243. /* z */ 2348, 2170,
  4244. /* " */ 2856, 2082,
  4245. /* < */ 2867, 2108,
  4246. /* _ */ 2946, 2143,
  4247. /* > */ 2868, 2110,
  4248. /* ? */ 2869, 2111,
  4249. /* ) */ 2945, 2089,
  4250. /* ! */ 2936, 2081,
  4251. /* @ */ 2937, 2112,
  4252. /* # */ 2938, 2083,
  4253. /* $ */ 2939, 2084,
  4254. /* % */ 2940, 2085,
  4255. /* ^ */ 2941, 2142,
  4256. /* & */ 2942, 2086,
  4257. /* * */ 2943, 2090,
  4258. /* ( */ 2944, 2088,
  4259. /* : */ 2855, 2106,
  4260. /* + */ 2947, 2091,
  4261. /* { */ 2842, 2171,
  4262. /* | */ 2859, 2172,
  4263. /* } */ 2843, 2173,
  4264. /* ~ */ 2857, 2174,
  4265. /* A */ 2846, 2113,
  4266. /* B */ 2864, 2114,
  4267. /* C */ 2862, 2115,
  4268. /* D */ 2848, 2116,
  4269. /* E */ 2834, 2117,
  4270. /* F */ 2849, 2118,
  4271. /* G */ 2850, 2119,
  4272. /* H */ 2851, 2120,
  4273. /* I */ 2839, 2121,
  4274. /* J */ 2852, 2122,
  4275. /* K */ 2853, 2123,
  4276. /* L */ 2854, 2124,
  4277. /* M */ 2866, 2125,
  4278. /* N */ 2865, 2126,
  4279. /* O */ 2840, 2127,
  4280. /* P */ 2841, 2128,
  4281. /* Q */ 2832, 2129,
  4282. /* R */ 2835, 2130,
  4283. /* S */ 2847, 2131,
  4284. /* T */ 2836, 2132,
  4285. /* U */ 2838, 2133,
  4286. /* V */ 2863, 2134,
  4287. /* W */ 2833, 2135,
  4288. /* X */ 2861, 2136,
  4289. /* Y */ 2837, 2137,
  4290. /* Z */ 2860, 2138,
  4291.  
  4292. /* Ctrl-Alt Alphabet */
  4293. /* ' */ 3368, 3550,
  4294. /* , */ 3379, 3516,
  4295. /* - */ 3458, 3517,
  4296. /* . */ 3380, 3518,
  4297. /* / */ 3381, 3519,
  4298. /* 0 */ 3457, 3376,
  4299. /* 1 */ 3448, 3377,
  4300. /* 2 */ 3449, 3378,
  4301. /* 3 */ 3450, 3379,
  4302. /* 4 */ 3451, 3380,
  4303. /* 5 */ 3452, 3381,
  4304. /* 6 */ 3453, 3382,
  4305. /* 7 */ 3454, 3383,
  4306. /* 8 */ 3455, 3384,
  4307. /* 9 */ 3456, 3385,
  4308. /* ; */ 3367, 3514,
  4309. /* = */ 3459, 3515,
  4310. /* [ */ 3354, 3547,
  4311. /* \ */ 3371, 3548,
  4312. /* ] */ 3355, 3549,
  4313. /* ` */ 3369, 3520,
  4314. /* a */ 3358, 3393,
  4315. /* b */ 3376, 3394,
  4316. /* c */ 3374, 3395,
  4317. /* d */ 3360, 3396,
  4318. /* e */ 3346, 3397,
  4319. /* f */ 3361, 3398,
  4320. /* g */ 3362, 3399,
  4321. /* h */ 3363, 3400,
  4322. /* i */ 3351, 3401,
  4323. /* j */ 3364, 3402,
  4324. /* k */ 3365, 3403,
  4325. /* l */ 3366, 3404,
  4326. /* m */ 3378, 3405,
  4327. /* n */ 3377, 3406,
  4328. /* o */ 3352, 3407,
  4329. /* p */ 3353, 3408,
  4330. /* q */ 3344, 3409,
  4331. /* r */ 3347, 3410,
  4332. /* s */ 3359, 3411,
  4333. /* t */ 3348, 3412,
  4334. /* u */ 3350, 3413,
  4335. /* v */ 3375, 3414,
  4336. /* w */ 3345, 3415,
  4337. /* x */ 3373, 3416,
  4338. /* y */ 3349, 3417,
  4339. /* z */ 3372, 3418,
  4340. /* " */ 3880, 4062,
  4341. /* < */ 3891, 4028,
  4342. /* _ */ 3970, 4029,
  4343. /* > */ 3892, 4030,
  4344. /* ? */ 3893, 4031,
  4345. /* ) */ 3969, 3888,
  4346. /* ! */ 3960, 3889,
  4347. /* @ */ 3961, 3890,
  4348. /* # */ 3962, 3891,
  4349. /* $ */ 3963, 3892,
  4350. /* % */ 3964, 3893,
  4351. /* ^ */ 3965, 3894,
  4352. /* & */ 3966, 3895,
  4353. /* * */ 3967, 3896,
  4354. /* ( */ 3968, 3897,
  4355. /* : */ 3879, 4026,
  4356. /* + */ 3971, 4027,
  4357. /* { */ 3866, 4059,
  4358. /* | */ 3883, 4060,
  4359. /* } */ 3867, 4061,
  4360. /* ~ */ 3881, 4032,
  4361. /* A */ 3870, 3905,
  4362. /* B */ 3888, 3906,
  4363. /* C */ 3886, 3907,
  4364. /* D */ 3872, 3908,
  4365. /* E */ 3858, 3909,
  4366. /* F */ 3873, 3910,
  4367. /* G */ 3874, 3911,
  4368. /* H */ 3875, 3912,
  4369. /* I */ 3863, 3913,
  4370. /* J */ 3876, 3914,
  4371. /* K */ 3877, 3915,
  4372. /* L */ 3878, 3916,
  4373. /* M */ 3890, 3917,
  4374. /* N */ 3889, 3918,
  4375. /* O */ 3864, 3919,
  4376. /* P */ 3865, 3920,
  4377. /* Q */ 3856, 3921,
  4378. /* R */ 3859, 3922,
  4379. /* S */ 3871, 3923,
  4380. /* T */ 3860, 3924,
  4381. /* U */ 3862, 3925,
  4382. /* V */ 3887, 3926,
  4383. /* W */ 3857, 3927,
  4384. /* X */ 3885, 3928,
  4385. /* Y */ 3861, 3929,
  4386. /* Z */ 3884, 3930,
  4387.  
  4388. /* Keypad */
  4389. /* NumLock - no keycode on MSK */
  4390. /* Gray Divide - WinNT */       4399, 4463,
  4391. /* Gray Divide - Win95 */       4399, 4143,
  4392. /* Multiply */          311, 362,
  4393. /* Subtract */          330, 365,
  4394. /* Add */               334, 363,
  4395. /* Gray-Enter */        4365, 4365,
  4396. /* Insert */            338, 301,
  4397. /* Delete */            339, 302,
  4398. /* End */               335, 291,
  4399. /* DownArrow */         336, 296,
  4400. /* PgDn */              337, 290,
  4401. /* LeftArrow */         331, 293,
  4402. /* Clear */             332, 268,
  4403. /* RightArrow */        333, 295,
  4404. /* Home */              327, 292,
  4405. /* UpArrow */           328, 294,
  4406. /* PgUp */              329, 289,
  4407. /* Decimal */           850/* 339 */, 366,
  4408. /* Kp-0 */              851/* 338 */, 352,
  4409. /* Kp-1 */              847/* 335 */, 353,
  4410. /* Kp-2 */              848/* 336 */, 354,
  4411. /* Kp-3 */              849/* 337 */, 355,
  4412. /* Kp-4 */              843/* 331 */, 356,
  4413. /* Kp-5 */              844/* 332 */, 357,
  4414. /* kp-6 */              845/* 333 */, 358,
  4415. /* kp-7 */              839/* 327 */, 359,
  4416. /* kp-8 */              840/* 328 */, 360,
  4417. /* kp-9 */              841/* 329 */, 361,
  4418.  
  4419. /* Shift-Keypad */
  4420. /* NumLock - no keycode on MSK */
  4421. /* Gray Divide */       4911, 4975,
  4422. /* Multiply */          823, 874,
  4423. /* Subtract */          842, 877,
  4424. /* Add */               846, 875,
  4425. /* Gray-Enter */        4877, 4877,
  4426. /* Insert */            850, 813,
  4427. /* Delete */            851, 814,
  4428. /* End */               847, 803,
  4429. /* DownArrow */         848, 808,
  4430. /* PgDn */              849, 802,
  4431. /* LeftArrow */         843, 805,
  4432. /* Clear */             844, 780,
  4433. /* RightArrow */        845, 807,
  4434. /* Home */              839, 804,
  4435. /* UpArrow */           840, 806,
  4436. /* PgUp */              841, 801,
  4437.  
  4438. /* Ctrl-Keypad */
  4439. /* NumLock - no keycode on MSK */
  4440. /* Gray Divide */       1429, 5487,
  4441. /* Multiply */          1430, 1386,
  4442. /* Subtract */          1422, 1389,
  4443. /* Add */               1424, 1387,
  4444. /* Gray-Enter */        5386, 5389,
  4445. /* Insert */            1426, 1325,
  4446. /* Delete */            1427, 1326,
  4447. /* End */               1397, 1315,
  4448. /* DownArrow */         1425, 1320,
  4449. /* PgDn */              1398, 1314,
  4450. /* LeftArrow */         1395, 1317,
  4451. /* Clear */             1423, 1292,
  4452. /* RightArrow */        1396, 1319,
  4453. /* Home */              1399, 1316,
  4454. /* UpArrow */           1421, 1318,
  4455. /* PgUp */              1412, 1313,
  4456.  
  4457. /* Alt-Keypad */
  4458. /* Gray Divide */       2468, 6511,
  4459. /* Multiply */          2359, 2410,
  4460. /* Subtract */          2378, 2413,
  4461. /* Add */               2382, 2411,
  4462.  
  4463. /* Alt-Shift-Keypad */
  4464. /* Gray Divide */       2980, 7023,
  4465. /* Multiply */          2871, 2922,
  4466. /* Subtract */          2890, 2925,
  4467. /* Add */               2894, 2923,
  4468.  
  4469. /* Alt-Ctrl-Keypad */
  4470. /* Gray Divide */       3492, 7535,
  4471. /* Multiply */          3383, 3434,
  4472. /* Subtract */          3402, 3437,
  4473. /* Add */               3406, 3435,
  4474. /* Gray-Enter */        3494, 7437,
  4475.  
  4476. /* Alt-Ctrl-Shift-Keypad */
  4477. /* Gray Divide */       4004, 8047,
  4478. /* Multiply */          3895, 3946,
  4479. /* Subtract */          3914, 3949,
  4480. /* Add */               3918, 3947,
  4481. /* Gray-Enter */        4006, 7949,
  4482.  
  4483. /* Gray */
  4484. /* - Home   */ 4423, KEY_SCAN | KEY_ENHANCED |  36 ,
  4485. /* - Up     */ 4424, KEY_SCAN | KEY_ENHANCED |  38 ,
  4486. /* - PgUp   */ 4425, KEY_SCAN | KEY_ENHANCED |  33 ,
  4487. /* - Left   */ 4427, KEY_SCAN | KEY_ENHANCED |  37 ,
  4488. /* - Right  */ 4429, KEY_SCAN | KEY_ENHANCED |  39 ,
  4489. /* - End    */ 4431, KEY_SCAN | KEY_ENHANCED |  35 ,
  4490. /* - Down   */ 4432, KEY_SCAN | KEY_ENHANCED |  40 ,
  4491. /* - PgDn   */ 4433, KEY_SCAN | KEY_ENHANCED |  34 ,
  4492. /* - Insert */ 4434, KEY_SCAN | KEY_ENHANCED |  45 ,
  4493. /* - Delete */ 4435, KEY_SCAN | KEY_ENHANCED |  46 ,
  4494.  
  4495. /* Shift-Gray */
  4496. /* - Home   */ 4935, KEY_SCAN | KEY_SHIFT | KEY_ENHANCED |  36,
  4497. /* - Up     */ 4936, KEY_SCAN | KEY_SHIFT | KEY_ENHANCED |  38 ,
  4498. /* - PgUp   */ 4937, KEY_SCAN | KEY_SHIFT | KEY_ENHANCED |  33 ,
  4499. /* - Left   */ 4939, KEY_SCAN | KEY_SHIFT | KEY_ENHANCED |  37 ,
  4500. /* - Right  */ 4941, KEY_SCAN | KEY_SHIFT | KEY_ENHANCED |  39 ,
  4501. /* - End    */ 4943, KEY_SCAN | KEY_SHIFT | KEY_ENHANCED |  35 ,
  4502. /* - Down   */ 4944, KEY_SCAN | KEY_SHIFT | KEY_ENHANCED |  40 ,
  4503. /* - PgDn   */ 4945, KEY_SCAN | KEY_SHIFT | KEY_ENHANCED |  34 ,
  4504. /* - Insert */ 4946, KEY_SCAN | KEY_SHIFT | KEY_ENHANCED |  45 ,
  4505. /* - Delete */ 4947, KEY_SCAN | KEY_SHIFT | KEY_ENHANCED |  46 ,
  4506.  
  4507. /* Ctrl-Gray */
  4508. /* - Left   */ 5491, KEY_SCAN | KEY_CTRL | KEY_ENHANCED |  37 ,
  4509. /* - Right  */ 5492, KEY_SCAN | KEY_CTRL | KEY_ENHANCED |  39 ,
  4510. /* - End    */ 5493, KEY_SCAN | KEY_CTRL | KEY_ENHANCED |  35 ,
  4511. /* - PgDn   */ 5494, KEY_SCAN | KEY_CTRL | KEY_ENHANCED |  34 ,
  4512. /* - Home   */ 5495, KEY_SCAN | KEY_CTRL | KEY_ENHANCED |  36 ,
  4513. /* - PgUp   */ 5508, KEY_SCAN | KEY_CTRL | KEY_ENHANCED |  33 ,
  4514. /* - Up     */ 5517, KEY_SCAN | KEY_CTRL | KEY_ENHANCED |  38 ,
  4515. /* - Down   */ 5521, KEY_SCAN | KEY_CTRL | KEY_ENHANCED |  40 ,
  4516. /* - Insert */ 5522, KEY_SCAN | KEY_CTRL | KEY_ENHANCED |  45 ,
  4517. /* - Delete */ 5523, KEY_SCAN | KEY_CTRL | KEY_ENHANCED |  46 ,
  4518.  
  4519. /* Ctrl-Shift-Gray */
  4520. /* - Left   */ 6003, KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ENHANCED |  37 ,
  4521. /* - Right  */ 6004, KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ENHANCED |  39 ,
  4522. /* - End    */ 6005, KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ENHANCED |  35 ,
  4523. /* - PgDn   */ 6006, KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ENHANCED |  34 ,
  4524. /* - Home   */ 6007, KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ENHANCED |  36 ,
  4525. /* - PgUp   */ 6020, KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ENHANCED |  33 ,
  4526. /* - Up     */ 6029, KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ENHANCED |  38 ,
  4527. /* - Down   */ 6033, KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ENHANCED |  40 ,
  4528. /* - Insert */ 6034, KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ENHANCED |  45 ,
  4529. /* - Delete */ 6035, KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ENHANCED |  46 ,
  4530.  
  4531. /* Alt-Gray */
  4532. /* - Home   */ 2455, KEY_SCAN | KEY_ENHANCED | KEY_ALT | 36 ,
  4533. /* - Up     */ 2456, KEY_SCAN | KEY_ENHANCED | KEY_ALT | 38 ,
  4534. /* - PgUp   */ 2457, KEY_SCAN | KEY_ENHANCED | KEY_ALT | 33 ,
  4535. /* - Left   */ 2459, KEY_SCAN | KEY_ENHANCED | KEY_ALT | 37 ,
  4536. /* - Right  */ 2461, KEY_SCAN | KEY_ENHANCED | KEY_ALT | 39 ,
  4537. /* - End    */ 2463, KEY_SCAN | KEY_ENHANCED | KEY_ALT | 35 ,
  4538. /* - Down   */ 2464, KEY_SCAN | KEY_ENHANCED | KEY_ALT | 40 ,
  4539. /* - PgDn   */ 2465, KEY_SCAN | KEY_ENHANCED | KEY_ALT | 34 ,
  4540. /* - Insert */ 2466, KEY_SCAN | KEY_ENHANCED | KEY_ALT | 45 ,
  4541. /* - Delete */ 2467, KEY_SCAN | KEY_ENHANCED | KEY_ALT | 46 ,
  4542.  
  4543. /* Alt-Shift-Gray */
  4544. /* - Home   */ 2967, KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_ALT | 36 ,
  4545. /* - Up     */ 2968, KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_ALT | 38 ,
  4546. /* - PgUp   */ 2969, KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_ALT | 33 ,
  4547. /* - Left   */ 2971, KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_ALT | 37 ,
  4548. /* - Right  */ 2973, KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_ALT | 39 ,
  4549. /* - End    */ 2975, KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_ALT | 35 ,
  4550. /* - Down   */ 2976, KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_ALT | 40 ,
  4551. /* - PgDn   */ 2977, KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_ALT | 34 ,
  4552. /* - Insert */ 2978, KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_ALT | 45 ,
  4553. /* - Delete */ 2979, KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_ALT | 46 ,
  4554.  
  4555. /* Ctrl-Alt-Gray */
  4556. /* - Up     */ 3480, KEY_SCAN | KEY_ENHANCED | KEY_CTRL | KEY_ALT | 38 ,
  4557. /* - PgUp   */ 3481, KEY_SCAN | KEY_ENHANCED | KEY_CTRL | KEY_ALT | 33 ,
  4558. /* - Left   */ 3483, KEY_SCAN | KEY_ENHANCED | KEY_CTRL | KEY_ALT | 37 ,
  4559. /* - Right  */ 3485, KEY_SCAN | KEY_ENHANCED | KEY_CTRL | KEY_ALT | 39 ,
  4560. /* - End    */ 3487, KEY_SCAN | KEY_ENHANCED | KEY_CTRL | KEY_ALT | 35 ,
  4561. /* - Down   */ 3488, KEY_SCAN | KEY_ENHANCED | KEY_CTRL | KEY_ALT | 40 ,
  4562. /* - PgDn   */ 3489, KEY_SCAN | KEY_ENHANCED | KEY_CTRL | KEY_ALT | 34 ,
  4563. /* - Insert */ 3490, KEY_SCAN | KEY_ENHANCED | KEY_CTRL | KEY_ALT | 45 ,
  4564. /* - Delete */ 3491, KEY_SCAN | KEY_ENHANCED | KEY_CTRL | KEY_ALT | 46 ,
  4565.  
  4566. /* Ctrl-Shift-Alt Gray */
  4567. /* - Home   */ 3991, KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_CTRL | KEY_ALT | 36 ,
  4568. /* - Up     */ 3992, KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_CTRL | KEY_ALT | 38 ,
  4569. /* - PgUp   */ 3993, KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_CTRL | KEY_ALT | 33 ,
  4570. /* - Left   */ 3995, KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_CTRL | KEY_ALT | 37 ,
  4571. /* - Right  */ 3997, KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_CTRL | KEY_ALT | 39 ,
  4572. /* - End    */ 3999, KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_CTRL | KEY_ALT | 35 ,
  4573. /* - Down   */ 4000, KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_CTRL | KEY_ALT | 40 ,
  4574. /* - PgDn   */ 4001, KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_CTRL | KEY_ALT | 34 ,
  4575. /* - Insert */ 4002, KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_CTRL | KEY_ALT | 45 ,
  4576. /* - Delete */ 4003, KEY_SCAN | KEY_ENHANCED | KEY_SHIFT | KEY_CTRL | KEY_ALT | 46 ,
  4577.  
  4578. /* Windows Keys */
  4579. /* Left-Window */       4534,   4443,
  4580. /* Right-Window */      4535,   4444,
  4581. /* Task List */         4536,   4445,
  4582.  
  4583. /* Shift-Windows Keys */
  4584. /* Left-Window */       5058,   4955,
  4585. /* Right-Window */      5059,   4956,
  4586. /* Task List */         5060,   4957,
  4587.  
  4588. /* Ctrl-Windows Keys */
  4589. /* Left-Window */       5582,   5467,
  4590. /* Right-Window */      5583,   5468,
  4591. /* Task List */         5584,   5469,
  4592.  
  4593. /* Ctrl-Shift-Windows Keys */
  4594. /* Left-Window */       6094,   5979,
  4595. /* Right-Window */      6095,   5980,
  4596. /* Task List */         6096,   5981,
  4597.  
  4598. /* Alt-Windows Keys */
  4599. /* Left-Window */       6618,   6491,
  4600. /* Right-Window */      6619,   6492,
  4601. /* Task List */         6620,   6493,
  4602.  
  4603. /* Shift-Alt-Windows Keys */
  4604. /* Left-Window */       7130,   7003,
  4605. /* Right-Window */      7131,   7004,
  4606. /* Task List */         7132,   7005,
  4607.  
  4608. /* Ctrl-Alt-Windows Keys */
  4609. /* Left-Window */       7642,   7515,
  4610. /* Right-Window */      7643,   7516,
  4611. /* Task List */         7644,   7517,
  4612.  
  4613. /* Ctrl-Shift-Alt-Windows Keys */
  4614. /* Left-Window */       8154,   8027,
  4615. /* Right-Window */      8155,   8028,
  4616. /* Task List */         8156,   8029
  4617.  
  4618. };
  4619. int nmskcon = sizeof(mskcontab)/sizeof(int)/2 ;
  4620.  
  4621. int
  4622. msktock( int key )
  4623. {
  4624.     int i ;
  4625.     for ( i=0;i<nmskcon;i++ )
  4626.         if ( mskcontab[i].msk == key )
  4627.             return mskcontab[i].ck ;
  4628.     return key < 256 ? key : 0 ;
  4629. }
  4630.  
  4631. int
  4632. cktomsk( int key )
  4633. {
  4634.     int i ;
  4635.     for ( i=0;i<nmskcon;i++ )
  4636.         if ( mskcontab[i].ck == key )
  4637.             return mskcontab[i].msk ;
  4638.     return key < 256 ? key : 0;
  4639. }
  4640.  
  4641. struct keynode * ttkeymap[TT_MAX+5] ;
  4642.  
  4643. static con_event
  4644. mkkeyevt( KEY scancode ) {
  4645.     con_event evt ;
  4646.  
  4647.     if ( IS_KVERB(scancode) ) {
  4648.         evt.type = kverb ;
  4649.         evt.kverb.id = scancode ;
  4650.     }
  4651.     else if ( IS_CSI(scancode) ) {
  4652.         evt.type = csi ;
  4653.         evt.csi.key = scancode ;
  4654.     }
  4655.     else if ( IS_ESC(scancode) ) {
  4656.         evt.type = esc ;
  4657.         evt.esc.key = scancode ;
  4658.     }
  4659.     else {
  4660.         evt.type = key ;
  4661.         evt.key.scancode = scancode ;
  4662.     }
  4663.     return evt ;
  4664. }
  4665.  
  4666. static con_event
  4667. mkmacroevt( CHAR * string ) {
  4668.     con_event evt ;
  4669.  
  4670.     evt.type = macro ;
  4671.     evt.macro.string = strdup(string) ;
  4672.     return evt ;
  4673. }
  4674.  
  4675.  
  4676. static con_event
  4677. mkliteralevt( CHAR * string ) {
  4678.     con_event evt ;
  4679.  
  4680.     evt.type = literal ;
  4681.     evt.literal.string = strdup(string) ;
  4682.     return evt ;
  4683. }
  4684.  
  4685.  
  4686. int
  4687. defbasekm( int tt )
  4688. {
  4689.     if (
  4690.     insertkeymap( tt, KEY_CTRL | 32, mkkeyevt(F_KVERB | K_NULL)) ||     /* Ctrl-Space return NUL */
  4691.     insertkeymap( tt, KEY_SCAN | KEY_CTRL | KEY_SHIFT | 50, mkkeyevt(F_KVERB | K_NULL)) ||      /* Ctrl-@ return NUL */
  4692.     insertkeymap( tt, KEY_SCAN | KEY_CTRL | 50, mkkeyevt(F_KVERB | K_NULL)) ||    /* Ctrl-2 return NUL */
  4693.  
  4694.     insertkeymap( tt, 1471, mkkeyevt(29) ) ||
  4695.     insertkeymap( tt, 1846, mkkeyevt(30) ) ||
  4696.     insertkeymap( tt, 1981, mkkeyevt(31) ) ||
  4697.     insertkeymap( tt, 1469, mkkeyevt(31) ) ||
  4698.     insertkeymap( tt, 1983, mkkeyevt(31) ) ||
  4699.     insertkeymap( tt, 1334, mkkeyevt(30) ) ||
  4700.     insertkeymap( tt, 2011, mkkeyevt(27) ) ||
  4701.     insertkeymap( tt, 2012, mkkeyevt(28) ) ||
  4702.     insertkeymap( tt, 2013, mkkeyevt(29) ) ||
  4703.  
  4704.     insertkeymap( tt, KEY_SCAN | KEY_SHIFT | 9, mkkeyevt(8)) || /* Shift-Tab return Backtab return Backspace */
  4705.     insertkeymap( tt, KEY_SHIFT | 27, mkkeyevt(27)) ||    /* Shift-Escape return Escape */
  4706.  
  4707.     insertkeymap( tt, KEY_SCAN | 13, mkkeyevt(CR) ) ||               /* Enter sends CR */
  4708.     insertkeymap( tt, KEY_SCAN | 8, mkkeyevt(DEL) ) ||               /* Backspace sends DEL */
  4709.     insertkeymap( tt, KEY_SCAN | KEY_SHIFT | 8, mkkeyevt(DEL) ) ||   /* Shift-Backspace sends DEL */
  4710.     insertkeymap( tt, KEY_SCAN | KEY_ALT | 8, mkkeyevt(BS)) ||        /* Alt-Backspace return Backspace */
  4711.     insertkeymap( tt, KEY_SCAN | KEY_CTRL | 46, mkkeyevt(BS)) ||    /* Ctrl-Backspace return DEL for Kai Uwe */
  4712.     insertkeymap( tt, KEY_SCAN | 46,  mkkeyevt(DEL)) ||         /* Keypad Del sends DEL */
  4713.     insertkeymap( tt, KEY_SCAN | KEY_ENHANCED | 46, mkkeyevt(DEL)) ||       /* Gray Delete send DEL */
  4714.     insertkeymap( tt, KEY_SCAN | KEY_SHIFT | KEY_ENHANCED | 46, mkkeyevt(DEL)) || /* Shift-Gray Delete return DEL */
  4715.     insertkeymap( tt, KEY_SCAN | KEY_CTRL | KEY_ENHANCED | 46, mkkeyevt(BS)) || /* Ctrl-Gray Delete return BS */
  4716.  
  4717. /* Arrow keys */
  4718.     insertkeymap( tt, KEY_SCAN | KEY_ENHANCED | 38, mkkeyevt(F_KVERB | K_UPARR)) ||     /* Up Arrow    Gray */
  4719.     insertkeymap( tt, KEY_SCAN | 38               , mkkeyevt(F_KVERB | K_UPARR)) ||     /* Up Arrow    Numeric */
  4720.     insertkeymap( tt, KEY_SCAN | KEY_ENHANCED | 37, mkkeyevt(F_KVERB | K_LFARR)) ||     /* Left Arrow  Gray */
  4721.     insertkeymap( tt, KEY_SCAN | 37               , mkkeyevt(F_KVERB | K_LFARR)) ||     /* Left Arrow  Numeric*/
  4722.     insertkeymap( tt, KEY_SCAN | KEY_ENHANCED | 39, mkkeyevt(F_KVERB | K_RTARR)) ||     /* Right Arrow Gray */
  4723.     insertkeymap( tt, KEY_SCAN | 39               , mkkeyevt(F_KVERB | K_RTARR)) ||     /* Right Arrow Numeric */
  4724.     insertkeymap( tt, KEY_SCAN | KEY_ENHANCED | 40, mkkeyevt(F_KVERB | K_DNARR)) ||     /* Down Arrow  Gray */
  4725.     insertkeymap( tt, KEY_SCAN | 40               , mkkeyevt(F_KVERB | K_DNARR)) ||     /* Down Arrow  Numeric */
  4726.  
  4727.     /* Prep the keypad key values */
  4728.     insertkeymap( tt, 4365, mkkeyevt(CR) ) || /* Gray-Enter sends CR */
  4729.     insertkeymap( tt, 363, mkkeyevt('+') ) || /* Add sends '+' */
  4730.     insertkeymap( tt, 365, mkkeyevt('-') ) || /* Subtract sends '-' */
  4731.     insertkeymap( tt, 362, mkkeyevt('*') ) || /* Multiply sends '*' */
  4732.     insertkeymap( tt, 364, mkkeyevt('/') ) || /* Divide sends '/' */
  4733.     insertkeymap( tt, 4543, mkkeyevt('/')) || /* 95 Divide sends '/' */
  4734.     insertkeymap( tt, 4463, mkkeyevt('/')) || /* NT Divide sends '/' */
  4735.     insertkeymap( tt, KEY_SCAN | 352, mkkeyevt('0') ) || /* 0 sends '0' */
  4736.     insertkeymap( tt, KEY_SCAN | 366, mkkeyevt('.') ) || /* Decimal sends '.' */
  4737.     insertkeymap( tt, KEY_SCAN | 353, mkkeyevt('1') ) || /* 1 sends '1' */
  4738.     insertkeymap( tt, KEY_SCAN | 354, mkkeyevt('2') ) || /* 2 sends '2' */
  4739.     insertkeymap( tt, KEY_SCAN | 355, mkkeyevt('3') ) || /* 3 sends '3' */
  4740.     insertkeymap( tt, KEY_SCAN | 356, mkkeyevt('4') ) || /* 4 sends '4' */
  4741.     insertkeymap( tt, KEY_SCAN | 357, mkkeyevt('5') ) || /* 5 sends '5' */
  4742.     insertkeymap( tt, KEY_SCAN | 358, mkkeyevt('6') ) || /* 6 sends '6' */
  4743.     insertkeymap( tt, KEY_SCAN | 359, mkkeyevt('7') ) || /* 7 sends '7' */
  4744.     insertkeymap( tt, KEY_SCAN | 360, mkkeyevt('8') ) || /* 8 sends '8' */
  4745.     insertkeymap( tt, KEY_SCAN | 361, mkkeyevt('9') ) || /* 9 sends '9' */
  4746.  
  4747.     insertkeymap( tt, KEY_SCAN | KEY_CTRL | KEY_SHIFT | 13, mkkeyevt(F_KVERB | K_KEYCLICK) ) ||
  4748.     insertkeymap( tt, KEY_SCAN | KEY_CTRL | KEY_SHIFT | KEY_ALT | 'D', mkkeyevt(F_KVERB | K_LOGDEBUG) ) ||
  4749.  
  4750.         /* Screen scroll */
  4751.     insertkeymap( tt, KEY_SCAN | KEY_ENHANCED | 33, mkkeyevt(F_KVERB | K_UPSCN)) ||               /* Page Up:        Up one screen */
  4752.     insertkeymap( tt, KEY_SCAN | KEY_ENHANCED | KEY_ALT | KEY_SHIFT | 33, mkkeyevt(F_KVERB | K_UPSCN)) ||  /* Page Up:        Up one screen */
  4753. /*    insertkeymap( tt, KEY_SCAN | 33, mkkeyevt(F_KVERB | K_UPSCN)) ||                            /* PgUp:           Up one screen */
  4754.     insertkeymap( tt, KEY_SCAN | KEY_ENHANCED | KEY_CTRL | 33, mkkeyevt(F_KVERB | K_UPONE)) ||  /* Ctrl Page Up:   Up one line */
  4755. /*    insertkeymap( tt, KEY_SCAN | KEY_CTRL | 33, mkkeyevt(F_KVERB | K_UPONE)) ||                     /* Ctrl PgUp:      Up one line */
  4756.     insertkeymap( tt, KEY_SCAN | KEY_ENHANCED | 34, mkkeyevt(F_KVERB | K_DNSCN)) ||     /* Page Down:      Down one screen */
  4757.     insertkeymap( tt, KEY_SCAN | KEY_ENHANCED | KEY_ALT | KEY_SHIFT | 34, mkkeyevt(F_KVERB | K_DNSCN)) ||       /* Page Down:      Down one screen */
  4758.     insertkeymap( tt, KEY_SCAN | 34, mkkeyevt(F_KVERB | K_DNSCN)) ||    /* PgDn:           Down one screen */
  4759.     insertkeymap( tt, KEY_SCAN | KEY_ENHANCED | KEY_CTRL | 34, mkkeyevt(F_KVERB | K_DNONE)) ||  /* Ctrl Page Down: Down one line */
  4760. /*    insertkeymap( tt, KEY_SCAN | KEY_CTRL | 34, mkkeyevt(F_KVERB | K_DNONE)) ||       /* Ctrl PgDn:      Down one line */
  4761.     insertkeymap( tt, KEY_SCAN | KEY_ENHANCED | 36, mkkeyevt(F_KVERB | K_HOMSCN)) ||    /* Gray Home:      Top of buffer */
  4762.     insertkeymap( tt, KEY_SCAN | KEY_ENHANCED | KEY_ALT | KEY_SHIFT | 36, mkkeyevt(F_KVERB | K_HOMSCN)) ||      /* Gray Home:      Top of buffer */
  4763.     insertkeymap( tt, KEY_SCAN | 36, mkkeyevt(F_KVERB | K_HOMSCN)) ||   /* Numeric Home:   Top of buffer */
  4764.     insertkeymap( tt, KEY_SCAN | KEY_ENHANCED | 35, mkkeyevt(F_KVERB | K_ENDSCN)) ||    /* Gray End:       Bottom of buffer */
  4765.     insertkeymap( tt, KEY_SCAN | KEY_ENHANCED | KEY_ALT | KEY_SHIFT | 35, mkkeyevt(F_KVERB | K_ENDSCN)) ||      /* Gray End:       Bottom of buffer */
  4766.     insertkeymap( tt, KEY_SCAN | 35, mkkeyevt(F_KVERB | K_ENDSCN)) ||   /* Numeric End:    Bottom of buffer */
  4767.  
  4768.     /* Bookmarks, Goto, and Searching */
  4769.     insertkeymap( tt, KEY_ALT | KEY_SCAN | KEY_ENHANCED | 38, mkkeyevt(F_KVERB | K_GO_BOOK)) || /* Alt- Up Arrow    Gray */
  4770.     insertkeymap( tt, KEY_CTRL | KEY_SCAN | KEY_ENHANCED | 38, mkkeyevt(F_KVERB | K_GOTO)) ||       /* Ctrl- Up Arrow    Gray */
  4771.     insertkeymap( tt, KEY_ALT | KEY_SCAN | KEY_ENHANCED | 40, mkkeyevt(F_KVERB | K_SET_BOOK)) ||        /* Alt- Down Arrow  Gray */
  4772.  
  4773.     insertkeymap( tt, KEY_ALT  | KEY_SCAN | KEY_ENHANCED | 37, mkkeyevt(F_KVERB | K_BACKSRCH)) ||       /* Alt- Left Arrow  Gray */
  4774.     insertkeymap( tt, KEY_CTRL | KEY_SCAN | KEY_ENHANCED | 37, mkkeyevt(F_KVERB | K_BACKNEXT)) ||       /* Ctrl-Left Arrow  Gray */
  4775.     insertkeymap( tt, KEY_ALT  | KEY_SCAN | KEY_ENHANCED | 39, mkkeyevt(F_KVERB | K_FWDSRCH)) ||        /* Alt- Right Arrow Gray */
  4776.     insertkeymap( tt, KEY_CTRL | KEY_SCAN | KEY_ENHANCED | 39, mkkeyevt(F_KVERB | K_FWDNEXT)) ||        /* Ctrl-Right Arrow Gray */
  4777.  
  4778.     /* Horizontal Scrolling */
  4779.     insertkeymap( tt, KEY_SHIFT | KEY_SCAN | KEY_ENHANCED | 37, mkkeyevt(F_KVERB | K_LFONE)) || /* Shift-Left Arrow    Gray */
  4780.     insertkeymap( tt, KEY_ALT | KEY_SHIFT | KEY_SCAN | KEY_ENHANCED | 37, mkkeyevt(F_KVERB | K_LFPAGE)) ||          /* Alt-Shift-Left Arrow    Gray */
  4781.     insertkeymap( tt, KEY_ALT | KEY_CTRL | KEY_SHIFT | KEY_SCAN | KEY_ENHANCED | 37, mkkeyevt(F_KVERB | K_LFALL)) ||    /* Ctrl-Alt-Shift-Left Arrow  Gray */
  4782.     insertkeymap( tt, KEY_SHIFT | KEY_SCAN | KEY_ENHANCED | 39, mkkeyevt(F_KVERB | K_RTONE)) || /* Shift-Right Arrow    Gray */
  4783.     insertkeymap( tt, KEY_ALT | KEY_SHIFT | KEY_SCAN | KEY_ENHANCED | 39, mkkeyevt(F_KVERB | K_RTPAGE)) ||          /* Alt-Shift-Right Arrow    Gray */
  4784.     insertkeymap( tt, KEY_ALT | KEY_CTRL | KEY_SHIFT | KEY_SCAN | KEY_ENHANCED | 39, mkkeyevt(F_KVERB | K_RTALL)) ||    /* Ctrl-Alt-Shift-Right Arrow  Gray */
  4785.  
  4786.     /* The compose key */
  4787.     insertkeymap( tt, KEY_ALT | 67, mkkeyevt(F_KVERB | K_COMPOSE)) ||   /* Alt-C, Compose */
  4788.     insertkeymap( tt, KEY_ALT | 99, mkkeyevt(F_KVERB | K_COMPOSE)) ||   /* Alt-c, Compose */
  4789.  
  4790.     insertkeymap( tt, KEY_ALT | 78, mkkeyevt(F_KVERB | K_C_UNI16)) ||   /* Alt-N, Compose */
  4791.     insertkeymap( tt, KEY_ALT | 110, mkkeyevt(F_KVERB | K_C_UNI16)) ||  /* Alt-n, Compose */
  4792.  
  4793.     /* Kermit action verbs */
  4794.     /* Default mappings designed so key names are valid on all systems */
  4795.     /* Upper insertkeymap( tt, versions */
  4796.     insertkeymap( tt, KEY_ALT | 66, mkkeyevt(F_KVERB | K_BREAK)) ||     /* Alt-B, Send BREAK */
  4797.     insertkeymap( tt, KEY_ALT | 68, mkkeyevt(F_KVERB | K_DEBUG)) ||     /* Alt-D, Toggle debugging */
  4798.     insertkeymap( tt, KEY_ALT | 70, mkkeyevt(F_KVERB | K_FNKEYS)) ||    /* Alt-F, Display Fn Key labels */
  4799.     insertkeymap( tt, KEY_ALT | 72, mkkeyevt(F_KVERB | K_HELP)) ||      /* Alt-H, Help */
  4800.     insertkeymap( tt, KEY_ALT | 75, mkkeyevt(F_KVERB | K_KEYCLICK)) ||  /* Alt-K, Toggle Keyclick */
  4801.     insertkeymap( tt, KEY_ALT | 76, mkkeyevt(F_KVERB | K_LBREAK)) ||    /* Alt-L, Send Long BREAK */
  4802.     insertkeymap( tt, KEY_ALT | 79, mkkeyevt(F_KVERB | K_PRTAUTO)) ||   /* Alt-O, Toggle printing */
  4803.     insertkeymap( tt, KEY_ALT | 80, mkkeyevt(F_KVERB | K_DUMP)) ||      /* Alt-P, Print/Dump screen */
  4804.     insertkeymap( tt, KEY_ALT | 81, mkkeyevt(F_KVERB | K_QUIT)) ||      /* Alt-Q, Quit Kermit */
  4805.     insertkeymap( tt, KEY_ALT | 82, mkkeyevt(F_KVERB | K_RESET)) ||     /* Alt-R, Reset emulator */
  4806.     insertkeymap( tt, KEY_ALT | 83, mkkeyevt(F_KVERB | K_STATUS)) ||    /* Alt-S, Toggle Status Line */
  4807.     insertkeymap( tt, KEY_ALT | 84, mkkeyevt(F_KVERB | K_TERMTYPE)) ||  /* Alt-T, Toggle Terminal Type */
  4808.     insertkeymap( tt, KEY_ALT | 85, mkkeyevt(F_KVERB | K_HANGUP)) ||    /* Alt-U, Hangup connection */
  4809.     insertkeymap( tt, KEY_ALT | 86, mkkeyevt(F_KVERB | K_FLIPSCN)) ||   /* Alt-V, video toggle */
  4810.     insertkeymap( tt, KEY_ALT | 88, mkkeyevt(F_KVERB | K_EXIT)) ||              /* Alt-X, Exit emulator */
  4811.  
  4812.     /* Lower insertkeymap( tt, versions */
  4813.     insertkeymap( tt, KEY_ALT | 98, mkkeyevt(F_KVERB | K_BREAK)) ||     /* Alt-b, Send BREAK */
  4814.     insertkeymap( tt, KEY_ALT | 100, mkkeyevt(F_KVERB | K_DEBUG)) ||    /* Alt-d, Toggle debugging */
  4815.     insertkeymap( tt, KEY_ALT | 102, mkkeyevt(F_KVERB | K_FNKEYS)) ||   /* Alt-f, Display Fn Key labels */
  4816.     insertkeymap( tt, KEY_ALT | 104, mkkeyevt(F_KVERB | K_HELP)) ||        /* Alt-h, Help */
  4817.     insertkeymap( tt, KEY_ALT | 107, mkkeyevt(F_KVERB | K_KEYCLICK)) ||    /* Alt-k, Toggle Keyclick */
  4818.     insertkeymap( tt, KEY_ALT | 108, mkkeyevt(F_KVERB | K_LBREAK)) ||   /* Alt-l, Send Long BREAK */
  4819.     insertkeymap( tt, KEY_ALT | 111, mkkeyevt(F_KVERB | K_PRTAUTO)) ||  /* Alt-o, Toggle printing */
  4820.     insertkeymap( tt, KEY_ALT | 112, mkkeyevt(F_KVERB | K_DUMP)) ||     /* Alt-p, Print/Dump screen */
  4821.     insertkeymap( tt, KEY_ALT | 113, mkkeyevt(F_KVERB | K_QUIT)) ||     /* Alt-q, Quit Kermit */
  4822.     insertkeymap( tt, KEY_ALT | 114, mkkeyevt(F_KVERB | K_RESET)) ||    /* Alt-r, Reset emulator */
  4823.     insertkeymap( tt, KEY_ALT | 115, mkkeyevt(F_KVERB | K_STATUS)) ||      /* Alt-s, Toggle Status Line */
  4824.     insertkeymap( tt, KEY_ALT | 116, mkkeyevt(F_KVERB | K_TERMTYPE)) ||    /* Alt-t, Toggle Terminal Type */
  4825.     insertkeymap( tt, KEY_ALT | 117, mkkeyevt(F_KVERB | K_HANGUP)) ||   /* Alt-u, Hangup connection */
  4826.     insertkeymap( tt, KEY_ALT | 118, mkkeyevt(F_KVERB | K_FLIPSCN)) ||  /* Alt-v, video toggle */
  4827.     insertkeymap( tt, KEY_ALT | 120, mkkeyevt(F_KVERB | K_EXIT)) ||     /* Alt-x, Exit emulator */
  4828.  
  4829.     insertkeymap( tt, KEY_ALT | 61, mkkeyevt(F_KVERB | K_RESET)) ||     /* Alt-return, Reset emulator */
  4830.     insertkeymap( tt, KEY_SCAN | KEY_ALT | KEY_ENHANCED | 35, mkkeyevt(F_KVERB | K_PRINTFF)) || /* Alt-End, Print FF */
  4831.     insertkeymap( tt, KEY_SCAN | KEY_ALT | KEY_ENHANCED | 34, mkkeyevt(F_KVERB | K_DOS)) ||         /* Alt-Page Down, Push to OS/2 */
  4832.     insertkeymap( tt, KEY_SCAN | 145, mkkeyevt(F_KVERB | K_HOLDSCRN)) || /* ScrollLock, Hold Screen */
  4833.     insertkeymap( tt, KEY_SCAN | 20, mkkeyevt(F_KVERB | K_IGNORE)) ||   /* CapsLock, don't beep */
  4834.  
  4835.     insertkeymap( tt, KEY_ALT | 'E', mkkeyevt(F_KVERB | K_PRINTFF)) ||  /* Alt-E, Print FF */
  4836.     insertkeymap( tt, KEY_ALT | 'e', mkkeyevt(F_KVERB | K_PRINTFF)) ||  /* Alt-e, Print FF */
  4837.     insertkeymap( tt, KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 'E', mkkeyevt(F_KVERB | K_KB_EMA)) ||
  4838.     insertkeymap( tt, KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 'H', mkkeyevt(F_KVERB | K_KB_HEB )) ||
  4839.     insertkeymap( tt, KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 'N', mkkeyevt(F_KVERB | K_KB_ENG )) ||
  4840.     insertkeymap( tt, KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 'R', mkkeyevt(F_KVERB | K_KB_RUS )) ||
  4841.     insertkeymap( tt, KEY_SCAN | KEY_SHIFT | KEY_CTRL | KEY_ALT | 'W', mkkeyevt(F_KVERB | K_KB_WP )) ||
  4842.  
  4843.     /* Num-Lock */
  4844.     insertkeymap( tt, KEY_SCAN | KEY_ENHANCED | 144, mkkeyevt(F_KVERB | K_IGNORE)) ||   /* WinNT */
  4845.     insertkeymap( tt, KEY_SCAN | 144, mkkeyevt(F_KVERB | K_IGNORE)) ||  /* Win95 */
  4846.     insertkeymap( tt, KEY_SCAN | KEY_SHIFT | KEY_ENHANCED | 144, mkkeyevt(F_KVERB | K_IGNORE)) ||       /* WinNT ThinkPad */
  4847.     insertkeymap( tt, KEY_SCAN | KEY_SHIFT | 144, mkkeyevt(F_KVERB | K_IGNORE)) ||      /* Win95 Thinkpad */
  4848.  
  4849.     /* Workaround the Win95 Shift-Gray-Multiply bug for Shift-Printscreen */
  4850.     insertkeymap( tt, KEY_SCAN | KEY_SHIFT | KEY_ENHANCED | 106, mkkeyevt(F_KVERB | K_IGNORE)) ||
  4851.     insertkeymap( tt, 4458, mkkeyevt(F_KVERB | K_DUMP)) ||          /* PrtScrn (Gray-Multiply) if not captured */
  4852.  
  4853.     /* These are seen in KUI only */
  4854.     insertkeymap( tt, 16, mkkeyevt(F_KVERB | K_IGNORE)) ||     /* Left & Right Shift */
  4855.     insertkeymap( tt, 17, mkkeyevt(F_KVERB | K_IGNORE)) ||     /* Left Ctrl */
  4856.     insertkeymap( tt, 18, mkkeyevt(F_KVERB | K_IGNORE)) ||     /* Left Alt */
  4857.     insertkeymap( tt, 4443, mkkeyevt(F_KVERB | K_IGNORE)) ||   /* Left MSWindows */
  4858.     insertkeymap( tt, 4444, mkkeyevt(F_KVERB | K_IGNORE)) ||   /* Right MSWindows */
  4859.     insertkeymap( tt, 4445, mkkeyevt(F_KVERB | K_IGNORE)) ||   /* TaskList */
  4860.     insertkeymap( tt, 4516, mkkeyevt(F_KVERB | K_IGNORE)) ||   /* Right Ctrl */
  4861.     insertkeymap( tt, 4514, mkkeyevt(F_KVERB | K_IGNORE)) ||   /* Right Alt */
  4862.  
  4863.     /* Mark Mode action verbs */
  4864.     insertkeymap( tt, 4909, mkkeyevt(F_KVERB | K_PASTE)) ||         /* Shift-Insert */
  4865.     insertkeymap( tt, 5421, mkkeyevt(F_KVERB | K_MARK_COPYCLIP)) || /* Ctrl-Insert  */
  4866.     insertkeymap( tt, 5933, mkkeyevt(F_KVERB | K_MARK_COPYHOST)) || /* Ctrl-Shift-Insert */
  4867.     insertkeymap( tt, 1392, mkkeyevt(F_KVERB | K_MARK_START)) ||    /* Ctrl-F1      */
  4868.     insertkeymap( tt, 1393, mkkeyevt(F_KVERB | K_MARK_CANCEL))      /* Ctrl-F2      */
  4869.  
  4870.     )
  4871.         return -1;
  4872.     return 0;
  4873. }
  4874.  
  4875. int
  4876. defwpkm( int tt )
  4877. {
  4878.     /* MS-DOS Kermit Defaults which are expected by Word Perfect */
  4879.     insertkeymap( tt, 372, mkkeyevt(F_KVERB | K_KP7));      /* F5   */
  4880.     insertkeymap( tt, 373, mkkeyevt(F_KVERB | K_KP8));      /* F6   */
  4881.     insertkeymap( tt, 374, mkkeyevt(F_KVERB | K_KP9));      /* F7   */
  4882.     insertkeymap( tt, 375, mkkeyevt(F_KVERB | K_KPMINUS));  /* F8   */
  4883.     insertkeymap( tt, 376, mkkeyevt(F_KVERB | K_KP4));      /* F9   */
  4884.     insertkeymap( tt, 377, mkkeyevt(F_KVERB | K_KP5));      /* F10  */
  4885.     insertkeymap( tt, 378, mkliteralevt("\033~A"));         /* F11  */
  4886.     insertkeymap( tt, 379, mkliteralevt("\033~B"));         /* F12  */
  4887.     insertkeymap( tt, 1293, mkliteralevt("\033)\015"));     /* Ctrl-Enter */
  4888.  
  4889.     /* The following keymaps were provided by Pete Hickey */
  4890.     insertkeymap( tt, 353, mkkeyevt('1'));
  4891.     insertkeymap( tt, 354, mkkeyevt('2'));
  4892.     insertkeymap( tt, 355, mkkeyevt('3'));
  4893.     insertkeymap( tt, 356, mkkeyevt('4'));
  4894.     insertkeymap( tt, 357, mkkeyevt('5'));
  4895.     insertkeymap( tt, 358, mkkeyevt('6'));
  4896.     insertkeymap( tt, 359, mkkeyevt('7'));
  4897.     insertkeymap( tt, 360, mkkeyevt('8'));
  4898.     insertkeymap( tt, 361, mkkeyevt('9'));
  4899.     insertkeymap( tt, 352, mkkeyevt('0'));
  4900.     insertkeymap( tt, 366, mkkeyevt('.'));
  4901.  
  4902.     insertkeymap( tt, 291, mkliteralevt("\033$4"));
  4903.     insertkeymap( tt, 296, mkkeyevt(F_KVERB | K_DNARR));
  4904.     insertkeymap( tt, 290, mkliteralevt("\033$5"));
  4905.     insertkeymap( tt, 293, mkkeyevt(F_KVERB | K_LFARR));
  4906.     insertkeymap( tt, 268, mkkeyevt(ESC));
  4907.     insertkeymap( tt, 295, mkkeyevt(F_KVERB | K_RTARR));
  4908.     insertkeymap( tt, 292, mkliteralevt("\033$1"));
  4909.     insertkeymap( tt, 294, mkkeyevt(F_KVERB | K_UPARR));
  4910.     insertkeymap( tt, 289, mkliteralevt("\033$2"));
  4911.     insertkeymap( tt, 301, mkliteralevt("\033$0"));
  4912.     insertkeymap( tt, 302, mkliteralevt("\033$3"));
  4913.  
  4914.     insertkeymap( tt, 4543, mkkeyevt('/'));
  4915.     insertkeymap( tt, 362, mkkeyevt('*'));
  4916.     insertkeymap( tt, 365, mkkeyevt('-'));
  4917.     insertkeymap( tt, 363, mkkeyevt('+'));
  4918.     insertkeymap( tt, 4365, mkkeyevt(CR));
  4919.     /* End of Pete Hickey additions */
  4920.  
  4921.  
  4922.     /* The following come from the old WPUNIX.INI MS-DOS Kermit file */
  4923.     insertkeymap( tt, 880, mkkeyevt(F_KVERB | K_KP6));
  4924.     insertkeymap( tt, 881, mkkeyevt(F_KVERB | K_KPCOMA));
  4925.     insertkeymap( tt, 882, mkkeyevt(F_KVERB | K_KP1));
  4926.     insertkeymap( tt, 883, mkkeyevt(F_KVERB | K_KP2));
  4927.     insertkeymap( tt, 884, mkkeyevt(F_KVERB | K_KP3));
  4928.     insertkeymap( tt, 885, mkkeyevt(F_KVERB | K_KPENTER));
  4929.     insertkeymap( tt, 886, mkkeyevt(F_KVERB | K_KP0));
  4930.     insertkeymap( tt, 887, mkkeyevt(F_KVERB | K_KPDOT));
  4931.     insertkeymap( tt, 888, mkliteralevt("\033!8"));
  4932.     insertkeymap( tt, 889, mkliteralevt("\033!9"));
  4933.  
  4934.     insertkeymap( tt, 1028, mkkeyevt(EOT));
  4935.     insertkeymap( tt, 1032, mkliteralevt("\033)h"));
  4936.     insertkeymap( tt, 1033, mkliteralevt("\033)i"));
  4937.     insertkeymap( tt, 1034, mkliteralevt("\033)\015"));
  4938.     insertkeymap( tt, 1037, mkliteralevt("\033)m"));
  4939.     insertkeymap( tt, 1041, mkliteralevt("\033)q"));
  4940.     insertkeymap( tt, 1043, mkliteralevt("\033)s"));
  4941.     insertkeymap( tt, 1151, mkliteralevt("\033)\008"));
  4942.     insertkeymap( tt, 1313, mkliteralevt("\033^2"));
  4943.     insertkeymap( tt, 1314, mkliteralevt("\033^5"));
  4944.     insertkeymap( tt, 1315, mkliteralevt("\033^4"));
  4945.     insertkeymap( tt, 1316, mkliteralevt("\033^1"));
  4946.     insertkeymap( tt, 1317, mkliteralevt("\033^L"));
  4947.     insertkeymap( tt, 1318, mkliteralevt("\033^U"));
  4948.     insertkeymap( tt, 1319, mkliteralevt("\033^R"));
  4949.     insertkeymap( tt, 1320, mkliteralevt("\033^D"));
  4950.     insertkeymap( tt, 1325, mkliteralevt("\033^0"));
  4951.  
  4952.     insertkeymap( tt, 1392, mkliteralevt("\033@0"));
  4953.     insertkeymap( tt, 1393, mkliteralevt("\033@1"));
  4954.     insertkeymap( tt, 1394, mkliteralevt("\033@2"));
  4955.     insertkeymap( tt, 1395, mkliteralevt("\033@3"));
  4956.     insertkeymap( tt, 1396, mkliteralevt("\033@4"));
  4957.     insertkeymap( tt, 1397, mkliteralevt("\033@5"));
  4958.     insertkeymap( tt, 1398, mkliteralevt("\033@6"));
  4959.     insertkeymap( tt, 1399, mkliteralevt("\033@7"));
  4960.     insertkeymap( tt, 1400, mkliteralevt("\033@8"));
  4961.     insertkeymap( tt, 1401, mkliteralevt("\033@9"));
  4962.  
  4963.     insertkeymap( tt, 2094, mkkeyevt(F_KVERB | K_EXIT));
  4964.     insertkeymap( tt, 2096, mkliteralevt("\033|9"));
  4965.     insertkeymap( tt, 2097, mkliteralevt("\033|0"));
  4966.     insertkeymap( tt, 2098, mkliteralevt("\033|1"));
  4967.     insertkeymap( tt, 2099, mkliteralevt("\033|2"));
  4968.     insertkeymap( tt, 2100, mkliteralevt("\033|3"));
  4969.     insertkeymap( tt, 2101, mkliteralevt("\033|4"));
  4970.     insertkeymap( tt, 2102, mkliteralevt("\033|5"));
  4971.     insertkeymap( tt, 2103, mkliteralevt("\033|6"));
  4972.     insertkeymap( tt, 2104, mkliteralevt("\033|7"));
  4973.     insertkeymap( tt, 2105, mkliteralevt("\033|8"));
  4974.     insertkeymap( tt, 2107, mkkeyevt(F_KVERB | K_DUMP));
  4975.     insertkeymap( tt, 2109, mkliteralevt("\033|="));
  4976.     insertkeymap( tt, 2145, mkliteralevt("\033|a"));
  4977.     insertkeymap( tt, 2146, mkliteralevt("\033|b"));
  4978.     insertkeymap( tt, 2147, mkliteralevt("\033|c"));
  4979.     insertkeymap( tt, 2148, mkliteralevt("\033|d"));
  4980.     insertkeymap( tt, 2149, mkliteralevt("\033|e"));
  4981.     insertkeymap( tt, 2150, mkliteralevt("\033|f"));
  4982.     insertkeymap( tt, 2151, mkliteralevt("\033|g"));
  4983.     insertkeymap( tt, 2152, mkliteralevt("\033|h"));
  4984.     insertkeymap( tt, 2153, mkliteralevt("\033|i"));
  4985.     insertkeymap( tt, 2154, mkliteralevt("\033|j"));
  4986.     insertkeymap( tt, 2155, mkliteralevt("\033|k"));
  4987.     insertkeymap( tt, 2156, mkliteralevt("\033|l"));
  4988.     insertkeymap( tt, 2157, mkliteralevt("\033|m"));
  4989.     insertkeymap( tt, 2158, mkliteralevt("\033|n"));
  4990.     insertkeymap( tt, 2159, mkliteralevt("\033|o"));
  4991.     insertkeymap( tt, 2160, mkliteralevt("\033|p"));
  4992.     insertkeymap( tt, 2161, mkliteralevt("\033|q"));
  4993.     insertkeymap( tt, 2162, mkliteralevt("\033|r"));
  4994.     insertkeymap( tt, 2163, mkliteralevt("\033|s"));
  4995.     insertkeymap( tt, 2164, mkliteralevt("\033|t"));
  4996.     insertkeymap( tt, 2165, mkliteralevt("\033|u"));
  4997.     insertkeymap( tt, 2166, mkliteralevt("\033|v"));
  4998.     insertkeymap( tt, 2167, mkliteralevt("\033|w"));
  4999.     insertkeymap( tt, 2168, mkliteralevt("\033|x"));
  5000.     insertkeymap( tt, 2169, mkliteralevt("\033|y"));
  5001.     insertkeymap( tt, 2170, mkliteralevt("\033|z"));
  5002.  
  5003.     insertkeymap( tt, 2416, mkliteralevt("\033#0"));
  5004.     insertkeymap( tt, 2417, mkliteralevt("\033#1"));
  5005.     insertkeymap( tt, 2418, mkliteralevt("\033#2"));
  5006.     insertkeymap( tt, 2419, mkliteralevt("\033#3"));
  5007.     insertkeymap( tt, 2420, mkliteralevt("\033#4"));
  5008.     insertkeymap( tt, 2421, mkliteralevt("\033#5"));
  5009.     insertkeymap( tt, 2422, mkliteralevt("\033#6"));
  5010.     insertkeymap( tt, 2423, mkliteralevt("\033#7"));
  5011.     insertkeymap( tt, 2424, mkliteralevt("\033#8"));
  5012.     insertkeymap( tt, 2425, mkliteralevt("\033#9"));
  5013.  
  5014.     insertkeymap( tt, 4385, mkliteralevt("\033$2"));
  5015.     insertkeymap( tt, 4386, mkliteralevt("\033$5"));
  5016.     insertkeymap( tt, 4387, mkliteralevt("\033$4"));
  5017.     insertkeymap( tt, 4388, mkliteralevt("\033$1"));
  5018.     insertkeymap( tt, 4397, mkliteralevt("\033$0"));
  5019.     insertkeymap( tt, 4398, mkliteralevt("\033$3"));
  5020.  
  5021.     insertkeymap( tt, 4909, mkliteralevt("\033%0"));
  5022.     insertkeymap( tt, 4910, mkliteralevt("\033%3"));
  5023.  
  5024.     insertkeymap( tt, 5389, mkliteralevt("\033)\015"));
  5025.     insertkeymap( tt, 5409, mkliteralevt("\033^2"));
  5026.     insertkeymap( tt, 5410, mkliteralevt("\033^5"));
  5027.     insertkeymap( tt, 5411, mkliteralevt("\033^4"));
  5028.     insertkeymap( tt, 5412, mkliteralevt("\033^1"));
  5029.     insertkeymap( tt, 5413, mkliteralevt("\033^L"));
  5030.     insertkeymap( tt, 5414, mkliteralevt("\033^U"));
  5031.     insertkeymap( tt, 5415, mkliteralevt("\033^R"));
  5032.     insertkeymap( tt, 5416, mkliteralevt("\033^D"));
  5033.     insertkeymap( tt, 5421, mkliteralevt("\033^0"));
  5034.  
  5035.     insertkeymap( tt, 6436, mkliteralevt("\033&1"));
  5036.     insertkeymap( tt, 6437, mkliteralevt("\033&L"));
  5037.     insertkeymap( tt, 6438, mkliteralevt("\033&U"));
  5038.     insertkeymap( tt, 6439, mkliteralevt("\033&R"));
  5039.     if(insertkeymap( tt, 6440, mkliteralevt("\033&D")))
  5040.         return(-1);
  5041.     return(0);
  5042. }
  5043.  
  5044. int
  5045. defemacskm( int tt )
  5046. {
  5047.     if (
  5048.         /* Alt key = Meta key */
  5049.         insertkeymap( tt, 2416, mkkeyevt(F_KVERB | K_HELP )) || /* Alt-F1 Help                     */
  5050.         insertkeymap( tt, 2419, mkkeyevt(F_KVERB | K_EXIT )) || /* Alt-F4 return to prompt              */
  5051.         insertkeymap( tt, 2145, mkkeyevt(F_ESC | 'a'      )) || /* Alt-a sends Meta-a (i.e. ESC a)      */
  5052.         insertkeymap( tt, 2146, mkkeyevt(F_ESC | 'b'      )) || /* Alt-b sends Meta-b (ESC b)   */
  5053.         insertkeymap( tt, 2147, mkkeyevt(F_ESC | 'c'      )) || /* Alt-c etc etc...             */
  5054.         insertkeymap( tt, 2148, mkkeyevt(F_ESC | 'd'      )) || /* Alt-d                                */
  5055.         insertkeymap( tt, 2149, mkkeyevt(F_ESC | 'e'      )) || /* Alt-e                                */
  5056.         insertkeymap( tt, 2150, mkkeyevt(F_ESC | 'f'      )) || /* Alt-f                                */
  5057.         insertkeymap( tt, 2151, mkkeyevt(F_ESC | 'g'      )) || /* Alt-g                                */
  5058.         insertkeymap( tt, 2152, mkkeyevt(F_ESC | 'h'      )) || /* Alt-h                                */
  5059.         insertkeymap( tt, 2153, mkkeyevt(F_ESC | 'i'      )) || /* Alt-i                                */
  5060.         insertkeymap( tt, 2154, mkkeyevt(F_ESC | 'j'      )) || /* Alt-j                                */
  5061.         insertkeymap( tt, 2155, mkkeyevt(F_ESC | 'k'      )) || /* Alt-k                                */
  5062.         insertkeymap( tt, 2156, mkkeyevt(F_ESC | 'l'      )) || /* Alt-l                                */
  5063.         insertkeymap( tt, 2157, mkkeyevt(F_ESC | 'm'      )) || /* Alt-m                                */
  5064.         insertkeymap( tt, 2158, mkkeyevt(F_ESC | 'n'      )) || /* Alt-n                                */
  5065.         insertkeymap( tt, 2159, mkkeyevt(F_ESC | 'o'      )) || /* Alt-o                                */
  5066.         insertkeymap( tt, 2160, mkkeyevt(F_ESC | 'p'      )) || /* Alt-p                                */
  5067.         insertkeymap( tt, 2161, mkkeyevt(F_ESC | 'q'      )) || /* Alt-q                                */
  5068.         insertkeymap( tt, 2162, mkkeyevt(F_ESC | 'r'      )) || /* Alt-r                                */
  5069.         insertkeymap( tt, 2163, mkkeyevt(F_ESC | 's'      )) || /* Alt-s                                */
  5070.         insertkeymap( tt, 2164, mkkeyevt(F_ESC | 't'      )) || /* Alt-t                                */
  5071.         insertkeymap( tt, 2165, mkkeyevt(F_ESC | 'u'      )) || /* Alt-u                                */
  5072.         insertkeymap( tt, 2166, mkkeyevt(F_ESC | 'v'      )) || /* Alt-v                                */
  5073.         insertkeymap( tt, 2167, mkkeyevt(F_ESC | 'w'      )) || /* Alt-w                                */
  5074.         insertkeymap( tt, 2168, mkkeyevt(F_ESC | 'x'      )) || /* Alt-x                                */
  5075.         insertkeymap( tt, 2169, mkkeyevt(F_ESC | 'y'      )) || /* Alt-y                                */
  5076.         insertkeymap( tt, 2170, mkkeyevt(F_ESC | 'z'      )) || /* Alt-z                                */
  5077.  
  5078.          insertkeymap( tt, 2096, mkkeyevt( F_ESC | '0' )) || /* Alt-0 */
  5079.          insertkeymap( tt, 2097, mkkeyevt( F_ESC | '1' )) || /* Alt-1 */
  5080.          insertkeymap( tt, 2098, mkkeyevt( F_ESC | '2' )) || /* Alt-2 */
  5081.          insertkeymap( tt, 2099, mkkeyevt( F_ESC | '3' )) || /* Alt-3 */
  5082.          insertkeymap( tt, 2100, mkkeyevt( F_ESC | '4' )) || /* Alt-4 */
  5083.          insertkeymap( tt, 2101, mkkeyevt( F_ESC | '5' )) || /* Alt-5 */
  5084.          insertkeymap( tt, 2102, mkkeyevt( F_ESC | '6' )) || /* Alt-6 */
  5085.          insertkeymap( tt, 2103, mkkeyevt( F_ESC | '7' )) || /* Alt-7 */
  5086.          insertkeymap( tt, 2104, mkkeyevt( F_ESC | '8' )) || /* Alt-8 */
  5087.          insertkeymap( tt, 2105, mkkeyevt( F_ESC | '9' )) || /* Alt-9 */
  5088.  
  5089.         insertkeymap( tt, 2107, mkkeyevt(F_ESC | 59       )) || /* Alt-) ||                             */
  5090.         insertkeymap( tt, 2087, mkkeyevt(F_ESC | 39       )) || /* Alt-'                                */
  5091.         insertkeymap( tt, 2139, mkkeyevt(F_ESC | '['      )) || /* Alt-[                                */
  5092.         insertkeymap( tt, 2141, mkkeyevt(F_ESC | ']'      )) || /* Alt-]                                */
  5093.         insertkeymap( tt, 2140, mkkeyevt(F_ESC | 92       )) || /* Alt-\                                */
  5094.         insertkeymap( tt, 2092, mkkeyevt(F_ESC | ','      )) || /* Alt-< (unshifted)            */
  5095.         insertkeymap( tt, 2094, mkkeyevt(F_ESC | '.'      )) || /* Alt-> (unshifted)            */
  5096.         insertkeymap( tt, 2144, mkkeyevt(F_ESC | '`'      )) || /* Alt-`                        */
  5097.         insertkeymap( tt, 2093, mkkeyevt(F_ESC | '-'      )) || /* Alt-- */
  5098.  
  5099.         insertkeymap( tt, 2113, mkkeyevt(F_ESC | 'A'      )) || /* Alt-A sends Meta-a (i.e. ESC a)      */
  5100.         insertkeymap( tt, 2114, mkkeyevt(F_ESC | 'B'      )) || /* Alt-B sends Meta-b (ESC b)   */
  5101.         insertkeymap( tt, 2115, mkkeyevt(F_ESC | 'C'      )) || /* Alt-C etc etc...             */
  5102.         insertkeymap( tt, 2116, mkkeyevt(F_ESC | 'D'      )) || /* Alt-D                                */
  5103.         insertkeymap( tt, 2117, mkkeyevt(F_ESC | 'E'      )) || /* Alt-E                                */
  5104.         insertkeymap( tt, 2118, mkkeyevt(F_ESC | 'F'      )) || /* Alt-F                                */
  5105.         insertkeymap( tt, 2119, mkkeyevt(F_ESC | 'G'      )) || /* Alt-G                                */
  5106.         insertkeymap( tt, 2120, mkkeyevt(F_ESC | 'H'      )) || /* Alt-H                                */
  5107.         insertkeymap( tt, 2121, mkkeyevt(F_ESC | 'I'      )) || /* Alt-I                                */
  5108.         insertkeymap( tt, 2122, mkkeyevt(F_ESC | 'J'      )) || /* Alt-J                                */
  5109.         insertkeymap( tt, 2123, mkkeyevt(F_ESC | 'K'      )) || /* Alt-K                                */
  5110.         insertkeymap( tt, 2124, mkkeyevt(F_ESC | 'L'      )) || /* Alt-L                                */
  5111.         insertkeymap( tt, 2125, mkkeyevt(F_ESC | 'M'      )) || /* Alt-M                                */
  5112.         insertkeymap( tt, 2126, mkkeyevt(F_ESC | 'N'      )) || /* Alt-N                                */
  5113.         insertkeymap( tt, 2127, mkkeyevt(F_ESC | 'O'      )) || /* Alt-O                                */
  5114.         insertkeymap( tt, 2128, mkkeyevt(F_ESC | 'P'      )) || /* Alt-P                                */
  5115.         insertkeymap( tt, 2129, mkkeyevt(F_ESC | 'Q'      )) || /* Alt-Q                                */
  5116.         insertkeymap( tt, 2130, mkkeyevt(F_ESC | 'R'      )) || /* Alt-R                                */
  5117.         insertkeymap( tt, 2131, mkkeyevt(F_ESC | 'S'      )) || /* Alt-S                                */
  5118.         insertkeymap( tt, 2132, mkkeyevt(F_ESC | 'T'      )) || /* Alt-T                                */
  5119.         insertkeymap( tt, 2133, mkkeyevt(F_ESC | 'U'      )) || /* Alt-U                                */
  5120.         insertkeymap( tt, 2134, mkkeyevt(F_ESC | 'V'      )) || /* Alt-V                                */
  5121.         insertkeymap( tt, 2135, mkkeyevt(F_ESC | 'W'      )) || /* Alt-W                                */
  5122.         insertkeymap( tt, 2136, mkkeyevt(F_ESC | 'X'      )) || /* Alt-X                                */
  5123.         insertkeymap( tt, 2137, mkkeyevt(F_ESC | 'Y'      )) || /* Alt-Y                                */
  5124.         insertkeymap( tt, 2138, mkkeyevt(F_ESC | 'Z'      )) || /* Alt-Z                                */
  5125.  
  5126.         insertkeymap( tt, 2082, mkkeyevt(F_ESC | '"'      )) || /* Alt-"                                */
  5127.         insertkeymap( tt, 2171, mkkeyevt(F_ESC | '{'     )) || /* Alt-{                         */
  5128.         insertkeymap( tt, 2173, mkkeyevt(F_ESC | '}'     )) || /* Alt-}                         */
  5129.         insertkeymap( tt, 2172, mkkeyevt(F_ESC | '|'      )) || /* Alt-\                                */
  5130.         insertkeymap( tt, 2108, mkkeyevt(F_ESC | '<'      )) || /* Alt-< (shifted)                      */
  5131.         insertkeymap( tt, 2110, mkkeyevt(F_ESC | '>'      )) || /* Alt-> (shifted)                      */
  5132.         insertkeymap( tt, 2174, mkkeyevt(F_ESC | '~'      )) || /* Alt-~ */
  5133.         insertkeymap( tt, 2143, mkkeyevt(F_ESC | '_'      )) || /* Alt-_ */
  5134.          insertkeymap( tt, 2106, mkkeyevt(F_ESC | ':'      )) || /* Alt-: */
  5135.          insertkeymap( tt, 2107, mkkeyevt(F_ESC | ';'      )) || /* Alt-; */
  5136.  
  5137.         insertkeymap( tt, 2081, mkkeyevt(F_ESC | '!'      )) || /* Alt-!                                */
  5138.         insertkeymap( tt, 2112, mkkeyevt(F_ESC | '@'      )) || /* Alt-@                                */
  5139.         insertkeymap( tt, 2083, mkkeyevt(F_ESC | '#'      )) || /* Alt-#                                */
  5140.         insertkeymap( tt, 2084, mkkeyevt(F_ESC | '$'      )) || /* Alt-$                                */
  5141.         insertkeymap( tt, 2085, mkkeyevt(F_ESC | '%'      )) || /* Alt-%                                */
  5142.         insertkeymap( tt, 2142, mkkeyevt(F_ESC | '^'      )) || /* Alt-^                                */
  5143.         insertkeymap( tt, 2086, mkkeyevt(F_ESC | '&'      )) || /* Alt-&                                */
  5144.         insertkeymap( tt, 2090, mkkeyevt(F_ESC | '*'      )) || /* Alt-*                                */
  5145.         insertkeymap( tt, 2088, mkkeyevt(F_ESC | '('      )) || /* Alt-(                                */
  5146.         insertkeymap( tt, 2089, mkkeyevt(F_ESC | ')'      )) || /* Alt-)                                */
  5147.          insertkeymap( tt, 2091, mkkeyevt(F_ESC | '+'      )) || /* Alt-+                               */
  5148.          insertkeymap( tt, 2095, mkkeyevt(F_ESC | '/'      )) || /* Alt-/                               */
  5149.          insertkeymap( tt, 2109, mkkeyevt(F_ESC | '='      )) || /* Alt-=                               */
  5150.          insertkeymap( tt, 2111, mkkeyevt(F_ESC | '?'      )) || /* Alt-?                               */
  5151.          insertkeymap( tt, 2350, mkkeyevt(F_ESC | DEL      )) || /* Alt-DEL sends Meta-DEL */
  5152.  
  5153.             /* Ctrl-Alt = Ctrl-Meta */
  5154.  
  5155.  
  5156.         insertkeymap( tt, 4030, mkkeyevt(F_ESC | SP    )) || /* Ctrl-Alt-SP sends Meta-SP */
  5157.         insertkeymap( tt, 3393, mkkeyevt(F_ESC | 1     )) || /* Ctrl-Alt-a sends Meta-Ctrl-a (i.e. Esc ^A) */
  5158.         insertkeymap( tt, 3394, mkkeyevt(F_ESC | 2     )) || /* Ctrl-Alt-b sends Meta-Ctrl-b (Esc ^B)   */
  5159.         insertkeymap( tt, 3395, mkkeyevt(F_ESC | 3     )) || /* Ctrl-Alt-c etc etc...                   */
  5160.         insertkeymap( tt, 3396, mkkeyevt(F_ESC | 4     )) || /* Ctrl-Alt-d                                      */
  5161.         insertkeymap( tt, 3397, mkkeyevt(F_ESC | 5     )) || /* Ctrl-Alt-e                                      */
  5162.         insertkeymap( tt, 3398, mkkeyevt(F_ESC | 6     )) || /* Ctrl-Alt-f                                      */
  5163.         insertkeymap( tt, 3399, mkkeyevt(F_ESC | 7     )) || /* Ctrl-Alt-g                                      */
  5164.         insertkeymap( tt, 3400, mkkeyevt(F_ESC | 8     )) || /* Ctrl-Alt-h                                      */
  5165.         insertkeymap( tt, 3401, mkkeyevt(F_ESC | 9     )) || /* Ctrl-Alt-i                                      */
  5166.         insertkeymap( tt, 3402, mkkeyevt(F_ESC | 10    )) || /* Ctrl-Alt-j                                      */
  5167.         insertkeymap( tt, 3403, mkkeyevt(F_ESC | 11    )) || /* Ctrl-Alt-k                                      */
  5168.         insertkeymap( tt, 3404, mkkeyevt(F_ESC | 12    )) || /* Ctrl-Alt-l                                      */
  5169.         insertkeymap( tt, 3405, mkkeyevt(F_ESC | 13    )) || /* Ctrl-Alt-m                                      */
  5170.         insertkeymap( tt, 3406, mkkeyevt(F_ESC | 14    )) || /* Ctrl-Alt-n                                      */
  5171.         insertkeymap( tt, 3407, mkkeyevt(F_ESC | 15    )) || /* Ctrl-Alt-o                                      */
  5172.         insertkeymap( tt, 3408, mkkeyevt(F_ESC | 16    )) || /* Ctrl-Alt-p                                      */
  5173.         insertkeymap( tt, 3409, mkkeyevt(F_ESC | 17    )) || /* Ctrl-Alt-q                                      */
  5174.         insertkeymap( tt, 3410, mkkeyevt(F_ESC | 18    )) || /* Ctrl-Alt-r                                      */
  5175.         insertkeymap( tt, 3411, mkkeyevt(F_ESC | 19    )) || /* Ctrl-Alt-s                                      */
  5176.         insertkeymap( tt, 3412, mkkeyevt(F_ESC | 20    )) || /* Ctrl-Alt-t                                      */
  5177.         insertkeymap( tt, 3413, mkkeyevt(F_ESC | 21    )) || /* Ctrl-Alt-u                                      */
  5178.         insertkeymap( tt, 3414, mkkeyevt(F_ESC | 22    )) || /* Ctrl-Alt-v                                      */
  5179.         insertkeymap( tt, 3415, mkkeyevt(F_ESC | 23    )) || /* Ctrl-Alt-w                                      */
  5180.         insertkeymap( tt, 3416, mkkeyevt(F_ESC | 24    )) || /* Ctrl-Alt-x                                      */
  5181.         insertkeymap( tt, 3417, mkkeyevt(F_ESC | 25    )) || /* Ctrl-Alt-y                                      */
  5182.         insertkeymap( tt, 3418, mkkeyevt(F_ESC | 26    )) || /* Ctrl-Alt-z                                      */
  5183.         insertkeymap( tt, 3547, mkkeyevt(F_ESC | 27    )) || /* Ctrl-Alt-[                                      */
  5184.         insertkeymap( tt, 3548, mkkeyevt(F_ESC | 28    )) || /* Ctrl-Alt-\                                      */
  5185.         insertkeymap( tt, 3549, mkkeyevt(F_ESC | 29    )) || /* Ctrl-Alt-]                                      */
  5186.         insertkeymap( tt, 3894, mkkeyevt(F_ESC | 30    )) || /* Ctrl-Alt-^                                      */
  5187.         insertkeymap( tt, 4029, mkkeyevt(F_ESC | 31    )) || /* Ctrl-Alt-_                                      */
  5188.  
  5189.         insertkeymap( tt, 2312, mkkeyevt(F_ESC | BS    )) || /* Alt-Backspace */
  5190.          insertkeymap( tt, 2609, mkkeyevt(F_ESC | '!'   )) || /* Alt-! */
  5191.          insertkeymap( tt, 2610, mkkeyevt(F_ESC | '@'   )) || /* Alt-@ */
  5192.          insertkeymap( tt, 2611, mkkeyevt(F_ESC | '#'   )) || /* Alt-# */
  5193.          insertkeymap( tt, 2612, mkkeyevt(F_ESC | '$'   )) || /* Alt-$ */
  5194.          insertkeymap( tt, 2613, mkkeyevt(F_ESC | '%'   )) || /* Alt-% */
  5195.          insertkeymap( tt, 2614, mkkeyevt(F_ESC | '^'   )) || /* Alt-^ */
  5196.          insertkeymap( tt, 2615, mkkeyevt(F_ESC | '&'   )) || /* Alt-& */
  5197.          insertkeymap( tt, 2616, mkkeyevt(F_ESC | '*'   )) || /* Alt-* */
  5198.          insertkeymap( tt, 2617, mkkeyevt(F_ESC | '('   )) || /* Alt-( */
  5199.          insertkeymap( tt, 2608, mkkeyevt(F_ESC | ')'   )) || /* Alt-) */
  5200.         insertkeymap( tt, 6446, mkkeyevt(F_ESC | DEL   )) || /* Alt-Gray-Del */
  5201.  
  5202.         insertkeymap( tt, 4397, mkkeyevt(F_KVERB | K_EMACS_OVER )) || /* Insert key toggles insert / overwrite mode */
  5203.  
  5204.         insertkeymap( tt, 4388, mkkeyevt(F_ESC | '<'  )) || /* Home         Home key goes to top screen line      */
  5205.         insertkeymap( tt, 4385, mkkeyevt(F_ESC | 'v'  )) || /* Page up      Page up goes to previous screen       */
  5206.         insertkeymap( tt, 4398, mkkeyevt(127          )) || /* Delete       Delete key sends Delete            */
  5207.         insertkeymap( tt, 4387, mkkeyevt(F_ESC | '>'  )) || /* End          End key goes to bottom screen line    */
  5208.         insertkeymap( tt, 4386, mkkeyevt(22           )) || /* Page down    Page down goes to next screen              */
  5209.         insertkeymap( tt, 4392, mkkeyevt(14           )) || /* Down arrow   Down arrow goes down one line              */
  5210.         insertkeymap( tt, 4389, mkkeyevt(02           )) || /* Left arrow   Left arrow goes left one character    */
  5211.         insertkeymap( tt, 4391, mkkeyevt(06           )) || /* Right arrow  Right arrow goes right one character  */
  5212.         insertkeymap( tt, 4390, mkkeyevt(16           )) /* Up arrow     Up arrow goes up one line             */
  5213.          )
  5214.         return -1;
  5215.     return 0;
  5216. }
  5217.  
  5218. int
  5219. defrussiankm(int tt) {                      /* Russian keyboard mode (CP866) */
  5220.  
  5221. /*  Corresponds to Soviet Union PC keyboard layout. */
  5222.  
  5223.     if (
  5224.     insertkeymap( tt,  35, mkkeyevt(252)) ||                  /* # = Number sign */
  5225.     insertkeymap( tt,  36, mkkeyevt( 37)) ||                  /* $ = %           */
  5226.     insertkeymap( tt,  44, mkkeyevt(161)) ||                  /* , = be          */
  5227.     insertkeymap( tt,  46, mkkeyevt(238)) ||                  /* . = yu          */
  5228.     insertkeymap( tt,  47, mkkeyevt( 46)) ||                  /* / = .           */
  5229.     insertkeymap( tt,  58, mkkeyevt(157)) ||                  /* : = E           */
  5230.     insertkeymap( tt,  59, mkkeyevt(237)) ||                  /* ) || = e           */
  5231.     insertkeymap( tt,  60, mkkeyevt(129)) ||                  /* < = Be          */
  5232.     insertkeymap( tt,  62, mkkeyevt(158)) ||                  /* > = Yu          */
  5233.     insertkeymap( tt,  63, mkkeyevt( 44)) ||                  /* ? = ,           */
  5234.     insertkeymap( tt,  64, mkkeyevt( 34)) ||                  /* @ = "           */
  5235.     insertkeymap( tt,  65, mkkeyevt(148)) ||                  /* A = Ef          */
  5236.     insertkeymap( tt,  66, mkkeyevt(136)) ||                  /* B = I           */
  5237.     insertkeymap( tt,  67, mkkeyevt(145)) ||                  /* C = Es          */
  5238.     insertkeymap( tt,  68, mkkeyevt(130)) ||                  /* D = Ve          */
  5239.     insertkeymap( tt,  69, mkkeyevt(147)) ||                  /* E = U           */
  5240.     insertkeymap( tt,  70, mkkeyevt(128)) ||                  /* F = A           */
  5241.     insertkeymap( tt,  71, mkkeyevt(143)) ||                  /* G = Pe          */
  5242.     insertkeymap( tt,  72, mkkeyevt(144)) ||                  /* H = Er          */
  5243.     insertkeymap( tt,  73, mkkeyevt(152)) ||                  /* I = Sha         */
  5244.     insertkeymap( tt,  74, mkkeyevt(142)) ||                  /* J = O           */
  5245.     insertkeymap( tt,  75, mkkeyevt(139)) ||                  /* K = El          */
  5246.     insertkeymap( tt,  76, mkkeyevt(132)) ||                  /* L = De          */
  5247.     insertkeymap( tt,  77, mkkeyevt(156)) ||                  /* M = Soft Sign   */
  5248.     insertkeymap( tt,  78, mkkeyevt(146)) ||                  /* N = Te          */
  5249.     insertkeymap( tt,  79, mkkeyevt(153)) ||                  /* O = Shcha       */
  5250.     insertkeymap( tt,  80, mkkeyevt(135)) ||                  /* P = Ze          */
  5251.     insertkeymap( tt,  81, mkkeyevt(137)) ||                  /* Q = I-kratkoye  */
  5252.     insertkeymap( tt,  82, mkkeyevt(138)) ||                  /* R = Ka          */
  5253.     insertkeymap( tt,  83, mkkeyevt(155)) ||                  /* S = Yeri        */
  5254.     insertkeymap( tt,  84, mkkeyevt(133)) ||                  /* T = Ie          */
  5255.     insertkeymap( tt,  85, mkkeyevt(131)) ||                  /* U = Ghe         */
  5256.     insertkeymap( tt,  86, mkkeyevt(140)) ||                  /* V = Em          */
  5257.     insertkeymap( tt,  87, mkkeyevt(150)) ||                  /* W = Tse         */
  5258.     insertkeymap( tt,  88, mkkeyevt(151)) ||                  /* X = Che         */
  5259.     insertkeymap( tt,  89, mkkeyevt(141)) ||                  /* Y = En          */
  5260.     insertkeymap( tt,  90, mkkeyevt(159)) ||                  /* Z = Ya          */
  5261.     insertkeymap( tt,  91, mkkeyevt(229)) ||                  /* [ = ha          */
  5262.     insertkeymap( tt,  92, mkkeyevt( 47)) ||                  /* \ = /           */
  5263.     insertkeymap( tt,  93, mkkeyevt(234)) ||                  /* , hard sign   */
  5264.     insertkeymap( tt,  94, mkkeyevt( 58)) ||                  /* ^ = :           */
  5265.     insertkeymap( tt,  96, mkkeyevt(241)) ||                  /* ` = io          */
  5266.     insertkeymap( tt,  97, mkkeyevt(228)) ||                  /* a = ef          */
  5267.     insertkeymap( tt,  98, mkkeyevt(168)) ||                  /* b = i           */
  5268.     insertkeymap( tt,  99, mkkeyevt(225)) ||                  /* c = es          */
  5269.     insertkeymap( tt, 100, mkkeyevt(162)) ||                  /* d = ve          */
  5270.     insertkeymap( tt, 101, mkkeyevt(227)) ||                  /* e = u           */
  5271.     insertkeymap( tt, 102, mkkeyevt(160)) ||                  /* f = a           */
  5272.     insertkeymap( tt, 103, mkkeyevt(175)) ||                  /* g = pe          */
  5273.     insertkeymap( tt, 104, mkkeyevt(224)) ||                  /* h = er          */
  5274.     insertkeymap( tt, 105, mkkeyevt(232)) ||                  /* i = sha         */
  5275.     insertkeymap( tt, 106, mkkeyevt(174)) ||                  /* j = o           */
  5276.     insertkeymap( tt, 107, mkkeyevt(171)) ||                  /* k = el          */
  5277.     insertkeymap( tt, 108, mkkeyevt(164)) ||                  /* l = de          */
  5278.     insertkeymap( tt, 109, mkkeyevt(236)) ||                  /* m = soft sign   */
  5279.     insertkeymap( tt, 110, mkkeyevt(226)) ||                  /* n = te          */
  5280.     insertkeymap( tt, 111, mkkeyevt(233)) ||                  /* o = shcha       */
  5281.     insertkeymap( tt, 112, mkkeyevt(167)) ||                  /* p = ze          */
  5282.     insertkeymap( tt, 113, mkkeyevt(169)) ||                  /* q = i-kratkoye  */
  5283.     insertkeymap( tt, 114, mkkeyevt(170)) ||                  /* r = ka          */
  5284.     insertkeymap( tt, 115, mkkeyevt(235)) ||                  /* s = yeri        */
  5285.     insertkeymap( tt, 116, mkkeyevt(165)) ||                  /* t = ie          */
  5286.     insertkeymap( tt, 117, mkkeyevt(163)) ||                  /* u = ghe         */
  5287.     insertkeymap( tt, 118, mkkeyevt(172)) ||                  /* v = em          */
  5288.     insertkeymap( tt, 119, mkkeyevt(230)) ||                  /* w = tse         */
  5289.     insertkeymap( tt, 120, mkkeyevt(231)) ||                  /* x = che         */
  5290.     insertkeymap( tt, 121, mkkeyevt(173)) ||                  /* y = en          */
  5291.     insertkeymap( tt, 122, mkkeyevt(239)) ||                  /* z = ya          */
  5292.     insertkeymap( tt, 123, mkkeyevt(149)) ||                  /* { = Ha          */
  5293.     insertkeymap( tt, 125, mkkeyevt(154)) ||                  /* } = Hard Sign   */
  5294.     insertkeymap( tt, 126, mkkeyevt(240))                     /* ~ = Io          */
  5295.          )
  5296.         return -1;
  5297.     return 0;
  5298. }
  5299.  
  5300.  
  5301. /*
  5302.   Hebrew keyboard-mode support functions.  These are needed when using a
  5303.   non-Hebrew keyboard to enter Hebrew letters during CONNECT mode.  When
  5304.   the keyboard is in "English" mode, the main keypad acts normally.  When it
  5305.   is in Hebrew mode, the lowerinsertkeymap( tt, letters (and some punctuation marks) are
  5306.   mapped to Hebrew letters.  Keyboard mode is set via the keyboard verbs
  5307.   \KkbHebrew and \KkbHebrew, and also by DECHEBM escape sequences
  5308.   (CSI ? 35 h / l) from the host (handled in vtescape()).  Both methods
  5309.   invoke these routines.
  5310. */
  5311. int
  5312. defhebrewkm(int tt) {                   /* Hebrew keyboard mode (CP862) */
  5313.  
  5314. /*
  5315.   This is the WordPerfect / Windows / Microsoft Word mapping.  If different
  5316.   mappings are needed, we can add them via a parameter to this function,
  5317.   settable by a SET TERMINAL HEBREW-KEYMAP command.  Note that we don't change
  5318.   the keymap by executing a macro (like MS-DOS Kermit's KEYBOARDS/KEYBOARDR
  5319.   macros) since that causes disconcerting and lengthy screen flashes as Kermit
  5320.   pops back and forth between CONNECT and command mode.
  5321. */
  5322.     if (
  5323.     insertkeymap( tt,  39, mkkeyevt( 44)) ||                    /* ' (Apostrophe) = , (Comma) */
  5324.     insertkeymap( tt,  44, mkkeyevt(154)) ||                    /* , (Comma) = Taw */
  5325.     insertkeymap( tt,  46, mkkeyevt(149)) ||                    /* . (Period) = Final Zade */
  5326.     insertkeymap( tt,  47, mkkeyevt( 46)) ||                    /* / (Slash) = . (Period) */
  5327.     insertkeymap( tt,  59, mkkeyevt(147)) ||                    /* ) || (Semicolon) = Terminal Pe */
  5328.     insertkeymap( tt,  97, mkkeyevt(153)) ||                    /* a = Shin */
  5329.     insertkeymap( tt,  98, mkkeyevt(144)) ||                    /* b = Nun */
  5330.     insertkeymap( tt,  99, mkkeyevt(129)) ||                    /* c = Bet */
  5331.     insertkeymap( tt, 100, mkkeyevt(130)) ||                    /* d = Gimel */
  5332.     insertkeymap( tt, 101, mkkeyevt(151)) ||                    /* e = Qoph */
  5333.     insertkeymap( tt, 102, mkkeyevt(139)) ||                    /* f = Kaph */
  5334.     insertkeymap( tt, 103, mkkeyevt(146)) ||                    /* g = Ayin */
  5335.     insertkeymap( tt, 104, mkkeyevt(137)) ||                    /* h = Yod */
  5336.     insertkeymap( tt, 105, mkkeyevt(143)) ||                    /* i = Final Nun */
  5337.     insertkeymap( tt, 106, mkkeyevt(135)) ||                    /* j = Chet */
  5338.     insertkeymap( tt, 107, mkkeyevt(140)) ||                    /* k = Lamed */
  5339.     insertkeymap( tt, 108, mkkeyevt(138)) ||                    /* l = Final Kaph */
  5340.     insertkeymap( tt, 109, mkkeyevt(150)) ||                    /* m = Zade */
  5341.     insertkeymap( tt, 110, mkkeyevt(142)) ||                    /* n = Mem */
  5342.     insertkeymap( tt, 111, mkkeyevt(141)) ||                    /* o = Final Mem */
  5343.     insertkeymap( tt, 112, mkkeyevt(148)) ||                    /* p = Pe */
  5344.     insertkeymap( tt, 113, mkkeyevt( 47)) ||                    /* q = / (slash) */
  5345.     insertkeymap( tt, 114, mkkeyevt(152)) ||                    /* r = Resh */
  5346.     insertkeymap( tt, 115, mkkeyevt(131)) ||                    /* s = Dalet */
  5347.     insertkeymap( tt, 116, mkkeyevt(128)) ||                    /* t = Aleph */
  5348.     insertkeymap( tt, 117, mkkeyevt(133)) ||                    /* u = Waw */
  5349.     insertkeymap( tt, 118, mkkeyevt(132)) ||                    /* v = He */
  5350.     insertkeymap( tt, 119, mkkeyevt( 39)) ||                    /* w = ' (Apostrophe) */
  5351.     insertkeymap( tt, 120, mkkeyevt(145)) ||                    /* x = Samech */
  5352.     insertkeymap( tt, 121, mkkeyevt(136)) ||                    /* y = Tet */
  5353.     insertkeymap( tt, 122, mkkeyevt(134))                       /* z = Zain */
  5354.          )
  5355.         return -1;
  5356.     return 0;
  5357. }
  5358.  
  5359. int
  5360. defvt100km( int tt )
  5361. {
  5362.  
  5363.     if ( defbasekm( tt ) ||
  5364.     /* Ctrl characters */
  5365.  
  5366.     /* Arrow keys */
  5367.     insertkeymap( tt, KEY_SCAN | KEY_ENHANCED | 38, mkkeyevt(F_KVERB | K_UPARR)) ||     /* Up Arrow    Gray */
  5368.     insertkeymap( tt, KEY_SCAN | 38               , mkkeyevt(F_KVERB | K_UPARR)) ||     /* Up Arrow    Numeric */
  5369.     insertkeymap( tt, KEY_SCAN | KEY_ENHANCED | 37, mkkeyevt(F_KVERB | K_LFARR)) ||     /* Left Arrow  Gray */
  5370.     insertkeymap( tt, KEY_SCAN | 37               , mkkeyevt(F_KVERB | K_LFARR)) ||     /* Left Arrow  Numeric*/
  5371.     insertkeymap( tt, KEY_SCAN | KEY_ENHANCED | 39, mkkeyevt(F_KVERB | K_RTARR)) ||     /* Right Arrow Gray */
  5372.     insertkeymap( tt, KEY_SCAN | 39               , mkkeyevt(F_KVERB | K_RTARR)) ||     /* Right Arrow Numeric */
  5373.     insertkeymap( tt, KEY_SCAN | KEY_ENHANCED | 40, mkkeyevt(F_KVERB | K_DNARR)) ||     /* Down Arrow  Gray */
  5374.     insertkeymap( tt, KEY_SCAN | 40               , mkkeyevt(F_KVERB | K_DNARR)) ||     /* Down Arrow  Numeric */
  5375.  
  5376.     /* Function keys */
  5377.     insertkeymap( tt, KEY_SCAN | 112, mkkeyevt(F_KVERB | K_PF1)) ||     /* F1 return DEC PF1 */
  5378.     insertkeymap( tt, KEY_SCAN | 113, mkkeyevt(F_KVERB | K_PF2)) ||     /* F2 return DEC PF2 */
  5379.     insertkeymap( tt, KEY_SCAN | 114, mkkeyevt(F_KVERB | K_PF3)) ||     /* F3 return DEC PF3 */
  5380.     insertkeymap( tt, KEY_SCAN | 115, mkkeyevt(F_KVERB | K_PF4)) ||     /* F4 return DEC PF4 */
  5381.  
  5382.     insertkeymap( tt, KEY_ALT | 49, mkkeyevt(F_KVERB | K_KP1)) ||       /* Alt-1, Top Rank return DEC Keypad 1 */
  5383.     insertkeymap( tt, KEY_ALT | 50, mkkeyevt(F_KVERB | K_KP2)) ||       /* Alt-2, Top Rank return DEC Keypad 2 */
  5384.     insertkeymap( tt, KEY_ALT | 51, mkkeyevt(F_KVERB | K_KP3)) ||       /* Alt-3, Top Rank return DEC Keypad 3 */
  5385.     insertkeymap( tt, KEY_ALT | 52, mkkeyevt(F_KVERB | K_KP4)) ||       /* Alt-4, Top Rank return DEC Keypad 4 */
  5386.     insertkeymap( tt, KEY_ALT | 53, mkkeyevt(F_KVERB | K_KP5)) ||       /* Alt-5, Top Rank return DEC Keypad 5 */
  5387.     insertkeymap( tt, KEY_ALT | 54, mkkeyevt(F_KVERB | K_KP6)) ||       /* Alt-6, Top Rank return DEC Keypad 6 */
  5388.     insertkeymap( tt, KEY_ALT | 55, mkkeyevt(F_KVERB | K_KP7)) ||       /* Alt-7, Top Rank return DEC Keypad 7 */
  5389.     insertkeymap( tt, KEY_ALT | 56, mkkeyevt(F_KVERB | K_KP8)) ||       /* Alt-8, Top Rank return DEC Keypad 8 */
  5390.     insertkeymap( tt, KEY_ALT | 57, mkkeyevt(F_KVERB | K_KP9)) ||       /* Alt-9, Top Rank return DEC Keypad 9 */
  5391.     insertkeymap( tt, KEY_ALT | 48, mkkeyevt(F_KVERB | K_KP0)) ||       /* Alt-0, Top Rank return DEC Keypad 0 */
  5392.  
  5393.     insertkeymap( tt, KEY_ALT | 45, mkkeyevt(F_KVERB | K_KPMINUS)) ||/* Alt -, Top Rank return DEC Keypad - */
  5394.     insertkeymap( tt, KEY_ALT | 44, mkkeyevt(F_KVERB | K_KPCOMA)) ||    /* Alt-Comma return DEC Keypad comma   */
  5395.     insertkeymap( tt, KEY_ALT | 46, mkkeyevt(F_KVERB | K_KPDOT)) ||     /* Alt-Period return DEC Keypad period */
  5396.     insertkeymap( tt, KEY_SCAN | KEY_SHIFT | KEY_CTRL | 13,
  5397.                     mkkeyevt(F_KVERB | K_KPENTER)) || /* Ctrl-Shift-Enter  return DEC Keypad Enter  */
  5398.  
  5399.     /* Scan  Kverb                              DEC Key            PC Key           PC Key Group */
  5400.     insertkeymap( tt,  400, mkkeyevt(F_KVERB | K_PF1 )) ||      /* PF1 (Gold) 95      Num Lock         Numeric keypad */
  5401.     insertkeymap( tt, 4496, mkkeyevt(F_KVERB | K_PF1 )) ||      /* PF1 (Gold) NT      Num Lock         Numeric keypad */
  5402.     insertkeymap( tt, 4143, mkkeyevt(F_KVERB | K_PF2 )) ||      /* PF2        95      Keypad /         Numeric keypad */
  5403.     insertkeymap( tt, 4543, mkkeyevt(F_KVERB | K_PF2 )) ||      /* PF2        95      Keypad /         Numeric keypad */
  5404.     insertkeymap( tt, 4463, mkkeyevt(F_KVERB | K_PF2 )) ||      /* PF2        NT      Keypad /         Numeric keypad */
  5405.     insertkeymap( tt,  362, mkkeyevt(F_KVERB | K_PF3 )) ||      /* PF3                Keypad *         Numeric keypad */
  5406.     insertkeymap( tt,  365, mkkeyevt(F_KVERB | K_PF4 )) ||      /* PF4                Keypad -         Numeric keypad */
  5407.  
  5408.     /*
  5409.     * DEC auxiliary keypad digit keys (two each, for Num Lock On and Off).
  5410.     */
  5411.     insertkeymap( tt, 352 , mkkeyevt(F_KVERB | K_KP0 )) || /* KP 0               Keypad 0         Numeric keypad */
  5412.     insertkeymap( tt, 301 , mkkeyevt(F_KVERB | K_KP0 )) || /* KP 0               Keypad 0         Numeric keypad */
  5413.     insertkeymap( tt, 353 , mkkeyevt(F_KVERB | K_KP1 )) || /* KP 1               Keypad 1         Numeric keypad */
  5414.     insertkeymap( tt, 291 , mkkeyevt(F_KVERB | K_KP1 )) || /* KP 1               Keypad 1         Numeric keypad */
  5415.     insertkeymap( tt, 354 , mkkeyevt(F_KVERB | K_KP2 )) || /* KP 2               Keypad 2         Numeric keypad */
  5416.     insertkeymap( tt, 296 , mkkeyevt(F_KVERB | K_KP2 )) || /* KP 2               Keypad 2         Numeric keypad */
  5417.     insertkeymap( tt, 355 , mkkeyevt(F_KVERB | K_KP3 )) || /* KP 3               Keypad 3         Numeric keypad */
  5418.     insertkeymap( tt, 290 , mkkeyevt(F_KVERB | K_KP3 )) || /* KP 3               Keypad 3         Numeric keypad */
  5419.     insertkeymap( tt, 356 , mkkeyevt(F_KVERB | K_KP4 )) || /* KP 4               Keypad 4         Numeric keypad */
  5420.     insertkeymap( tt, 293 , mkkeyevt(F_KVERB | K_KP4 )) || /* KP 4               Keypad 4         Numeric keypad */
  5421.     insertkeymap( tt, 357 , mkkeyevt(F_KVERB | K_KP5 )) || /* KP 5               Keypad 5         Numeric keypad */
  5422.     insertkeymap( tt, 268 , mkkeyevt(F_KVERB | K_KP5 )) || /* KP 5               Keypad 5         Numeric keypad */
  5423.     insertkeymap( tt, 358 , mkkeyevt(F_KVERB | K_KP6 )) || /* KP 6               Keypad 6         Numeric keypad */
  5424.     insertkeymap( tt, 295 , mkkeyevt(F_KVERB | K_KP6 )) || /* KP 6               Keypad 6         Numeric keypad */
  5425.     insertkeymap( tt, 359 , mkkeyevt(F_KVERB | K_KP7 )) || /* KP 7               Keypad 7         Numeric keypad */
  5426.     insertkeymap( tt, 292 , mkkeyevt(F_KVERB | K_KP7 )) || /* KP 7               Keypad 7         Numeric keypad */
  5427.     insertkeymap( tt, 360 , mkkeyevt(F_KVERB | K_KP8 )) || /* KP 8               Keypad 8         Numeric keypad */
  5428.     insertkeymap( tt, 294 , mkkeyevt(F_KVERB | K_KP8 )) || /* KP 8               Keypad 8         Numeric keypad */
  5429.     insertkeymap( tt, 361 , mkkeyevt(F_KVERB | K_KP9 )) || /* KP 9               Keypad 9         Numeric keypad */
  5430.     insertkeymap( tt, 289 , mkkeyevt(F_KVERB | K_KP9 )) || /* KP 9               Keypad 9         Numeric keypad */
  5431.     /*
  5432.     ) || DEC auxiliary keypad punctuation and other keys.  Note that DEC keypads have
  5433.     ) || four keys on the right, whereas IBM keypads have only three.  Thus the
  5434.     ) || need for an Alt-key modifier on one of them.  Also note that while it might
  5435.     ) || seem to make more sense to map DEC Keypad Minus to IBM Keypad Minus, most
  5436.     ) || DEC users are accustomed to having PF1-PF4 across the top keypad row.
  5437.     ) ||
  5438.     ) ||   NOTE: In Windows 95, KP period with Num Lock on does not
  5439.     ) ||   return a unique scan code.
  5440.     */
  5441.     insertkeymap( tt, 366 , mkkeyevt(F_KVERB | K_KPDOT   )) || /* KP Period          Keypad Period    Numeric keypad */
  5442.     insertkeymap( tt, 302 , mkkeyevt(F_KVERB | K_KPDOT   )) || /* KP Period          Keypad Period    Numeric keypad */
  5443.     insertkeymap( tt, 4365, mkkeyevt(F_KVERB | K_KPENTER )) || /* KP Enter           Keypad Enter     Numeric keypad */
  5444.     insertkeymap( tt, 2411, mkkeyevt(F_KVERB | K_KPMINUS )) || /* KP Minus           Alt-Keypad-Plus  Numeric keypad */
  5445.     insertkeymap( tt, 363 , mkkeyevt(F_KVERB | K_KPCOMA  ))    /* KP Comma           Keypad Plus      Numeric keypad */
  5446.          )
  5447.         return -1;
  5448.     return 0;
  5449. }
  5450.  
  5451. int
  5452. defvt200km( int tt )
  5453. {
  5454.     if ( defvt100km( tt ) ||
  5455. #ifdef COMMENT
  5456.         /* Scan  Kverb                          DEC Key            PC Key           PC Key Group */
  5457.     insertkeymap( tt,  400, mkkeyevt(F_KVERB | K_PF1 )) ||      /* PF1 (Gold) 95      Num Lock         Numeric keypad */
  5458.     insertkeymap( tt, 4496, mkkeyevt(F_KVERB | K_PF1 )) ||      /* PF1 (Gold) NT      Num Lock         Numeric keypad */
  5459.     insertkeymap( tt, 4143, mkkeyevt(F_KVERB | K_PF2 )) ||      /* PF2        95      Keypad /         Numeric keypad */
  5460.     insertkeymap( tt, 4543, mkkeyevt(F_KVERB | K_PF2 )) ||      /* PF2        95      Keypad /         Numeric keypad */
  5461.     insertkeymap( tt, 4463, mkkeyevt(F_KVERB | K_PF2 )) ||      /* PF2        NT      Keypad /         Numeric keypad */
  5462.     insertkeymap( tt,  362, mkkeyevt(F_KVERB | K_PF3 )) ||      /* PF3                Keypad *         Numeric keypad */
  5463.     insertkeymap( tt,  365, mkkeyevt(F_KVERB | K_PF4 )) ||      /* PF4                Keypad -         Numeric keypad */
  5464.  
  5465.         /*
  5466.         * DEC PF1-PF4 also assigned to PC F1-F4.
  5467.         */
  5468.     insertkeymap( tt, 368 , mkkeyevt(F_KVERB | K_PF1 )) || /* PF1 (Gold)         F1               Top Rank F key */
  5469.     insertkeymap( tt, 369 , mkkeyevt(F_KVERB | K_PF2 )) || /* PF2                F2               Top Rank F key */
  5470.     insertkeymap( tt, 370 , mkkeyevt(F_KVERB | K_PF3 )) || /* PF3                F3               Top Rank F key */
  5471.     insertkeymap( tt, 371 , mkkeyevt(F_KVERB | K_PF4 )) || /* PF4                F4               Top Rank F key */
  5472.     /*
  5473.     * DEC auxiliary keypad digit keys (two each, for Num Lock On and Off).
  5474.     */
  5475.     insertkeymap( tt, 352 , mkkeyevt(F_KVERB | K_KP0 )) || /* KP 0               Keypad 0         Numeric keypad */
  5476.     insertkeymap( tt, 301 , mkkeyevt(F_KVERB | K_KP0 )) || /* KP 0               Keypad 0         Numeric keypad */
  5477.     insertkeymap( tt, 353 , mkkeyevt(F_KVERB | K_KP1 )) || /* KP 1               Keypad 1         Numeric keypad */
  5478.     insertkeymap( tt, 291 , mkkeyevt(F_KVERB | K_KP1 )) || /* KP 1               Keypad 1         Numeric keypad */
  5479.     insertkeymap( tt, 354 , mkkeyevt(F_KVERB | K_KP2 )) || /* KP 2               Keypad 2         Numeric keypad */
  5480.     insertkeymap( tt, 296 , mkkeyevt(F_KVERB | K_KP2 )) || /* KP 2               Keypad 2         Numeric keypad */
  5481.     insertkeymap( tt, 355 , mkkeyevt(F_KVERB | K_KP3 )) || /* KP 3               Keypad 3         Numeric keypad */
  5482.     insertkeymap( tt, 290 , mkkeyevt(F_KVERB | K_KP3 )) || /* KP 3               Keypad 3         Numeric keypad */
  5483.     insertkeymap( tt, 356 , mkkeyevt(F_KVERB | K_KP4 )) || /* KP 4               Keypad 4         Numeric keypad */
  5484.     insertkeymap( tt, 293 , mkkeyevt(F_KVERB | K_KP4 )) || /* KP 4               Keypad 4         Numeric keypad */
  5485.     insertkeymap( tt, 357 , mkkeyevt(F_KVERB | K_KP5 )) || /* KP 5               Keypad 5         Numeric keypad */
  5486.     insertkeymap( tt, 268 , mkkeyevt(F_KVERB | K_KP5 )) || /* KP 5               Keypad 5         Numeric keypad */
  5487.     insertkeymap( tt, 358 , mkkeyevt(F_KVERB | K_KP6 )) || /* KP 6               Keypad 6         Numeric keypad */
  5488.     insertkeymap( tt, 295 , mkkeyevt(F_KVERB | K_KP6 )) || /* KP 6               Keypad 6         Numeric keypad */
  5489.     insertkeymap( tt, 359 , mkkeyevt(F_KVERB | K_KP7 )) || /* KP 7               Keypad 7         Numeric keypad */
  5490.     insertkeymap( tt, 292 , mkkeyevt(F_KVERB | K_KP7 )) || /* KP 7               Keypad 7         Numeric keypad */
  5491.     insertkeymap( tt, 360 , mkkeyevt(F_KVERB | K_KP8 )) || /* KP 8               Keypad 8         Numeric keypad */
  5492.     insertkeymap( tt, 294 , mkkeyevt(F_KVERB | K_KP8 )) || /* KP 8               Keypad 8         Numeric keypad */
  5493.     insertkeymap( tt, 361 , mkkeyevt(F_KVERB | K_KP9 )) || /* KP 9               Keypad 9         Numeric keypad */
  5494.     insertkeymap( tt, 289 , mkkeyevt(F_KVERB | K_KP9 )) || /* KP 9               Keypad 9         Numeric keypad */
  5495.     /*
  5496.     ) || DEC auxiliary keypad punctuation and other keys.  Note that DEC keypads have
  5497.     ) || four keys on the right, whereas IBM keypads have only three.  Thus the
  5498.     ) || need for an Alt-key modifier on one of them.  Also note that while it might
  5499.     ) || seem to make more sense to map DEC Keypad Minus to IBM Keypad Minus, most
  5500.     ) || DEC users are accustomed to having PF1-PF4 across the top keypad row.
  5501.     ) ||
  5502.     ) ||   NOTE: In Windows 95, KP period with Num Lock on does not
  5503.     ) ||   return a unique scan code.
  5504.     */
  5505.     insertkeymap( tt, 366 , mkkeyevt(F_KVERB | K_KPDOT   )) || /* KP Period          Keypad Period    Numeric keypad */
  5506.     insertkeymap( tt, 302 , mkkeyevt(F_KVERB | K_KPDOT   )) || /* KP Period          Keypad Period    Numeric keypad */
  5507.     insertkeymap( tt, 4365, mkkeyevt(F_KVERB | K_KPENTER )) || /* KP Enter           Keypad Enter     Numeric keypad */
  5508.     insertkeymap( tt, 2411, mkkeyevt(F_KVERB | K_KPMINUS )) || /* KP Minus           Alt-Keypad-Plus  Numeric keypad */
  5509.     insertkeymap( tt, 363 , mkkeyevt(F_KVERB | K_KPCOMA  )) || /* KP Comma           Keypad Plus      Numeric keypad */
  5510. #endif /* COMMENT */
  5511.         /*
  5512.         ) || DEC Cursor keys
  5513.         */
  5514.     insertkeymap( tt, 4390, mkkeyevt(F_KVERB | K_UPARR )) || /* Up Arrow           Up Arrow         Cursor keypad */
  5515.     insertkeymap( tt, 4392, mkkeyevt(F_KVERB | K_DNARR )) || /* Down Arrow         Down Arrow       Cursor keypad */
  5516.     insertkeymap( tt, 4391, mkkeyevt(F_KVERB | K_RTARR )) || /* Right Arrow        Right Arrow      Cursor keypad */
  5517.     insertkeymap( tt, 4389, mkkeyevt(F_KVERB | K_LFARR )) || /* Left Arrow         Left Arrow       Cursor keypad */
  5518.         /*
  5519.         ) || DEC Editing keys, VT220 and above.
  5520.         */
  5521.     insertkeymap( tt, 6445, mkkeyevt(F_KVERB | K_DECFIND   )) || /* Find               Alt-Insert      Gray keypad */
  5522.     insertkeymap( tt, 6436, mkkeyevt(F_KVERB | K_DECINSERT )) || /* Insert             Alt-Home        Gray keypad */
  5523.     insertkeymap( tt, 6433, mkkeyevt(F_KVERB | K_DECREMOVE )) || /* Remove             Alt-Page-Up     Gray keypad */
  5524.     insertkeymap( tt, 6446, mkkeyevt(F_KVERB | K_DECSELECT )) || /* Select             Alt-Delete      Gray keypad */
  5525.     insertkeymap( tt, 6435, mkkeyevt(F_KVERB | K_DECPREV   )) || /* Previous Screen    Alt-End         Gray keypad */
  5526.     insertkeymap( tt, 6434, mkkeyevt(F_KVERB | K_DECNEXT   )) || /* Next Screen        Alt-Page-Down   Gray keypad */
  5527.  
  5528.     insertkeymap( tt, 378 , mkkeyevt(F_KVERB | K_DECHELP   )) || /* Help = F15         F11 (Can't use Print Screen, */
  5529.     insertkeymap( tt, 379 , mkkeyevt(F_KVERB | K_DECDO     )) || /* Do = F16           F12  Scroll Lock, or Pause)       */
  5530.     /*
  5531.     ) || DEC Function keys, VT220 and above.
  5532.     ) ||
  5533.     ) ||   DEC F5-F10 are on PC F5-F10.
  5534.     ) ||   DEC F11-F10 are on PC Alt-F1 through Alt-F10.
  5535.     ) ||   UDK F1-F10 are on PC Shift-F1 - ShiftF10
  5536.     ) ||   UDK F11-F10 are on PC Alt-Shift-F1 through Alt-Shift-F10.
  5537.     */
  5538.     insertkeymap( tt, 372 , mkkeyevt(F_KVERB | K_BREAK  )) || /* F5 /Break          F5               Top Rank F key */
  5539.     insertkeymap( tt, 373 , mkkeyevt(F_KVERB | K_DECF6  )) || /* F6                 F6               Top Rank F key */
  5540.     insertkeymap( tt, 374 , mkkeyevt(F_KVERB | K_DECF7  )) || /* F7                 F7               Top Rank F key */
  5541.     insertkeymap( tt, 375 , mkkeyevt(F_KVERB | K_DECF8  )) || /* F8                 F8               Top Rank F key */
  5542.     insertkeymap( tt, 376 , mkkeyevt(F_KVERB | K_DECF9  )) || /* F9                 F9               Top Rank F key */
  5543.     insertkeymap( tt, 377 , mkkeyevt(F_KVERB | K_DECF10 )) || /* F10                F10              Top Rank F key */
  5544.  
  5545.     insertkeymap( tt, 2416, mkkeyevt(F_KVERB | K_DECF11 )) || /* F11 / Esc          Alt-F1           Top Rank F key */
  5546.     insertkeymap( tt, 2417, mkkeyevt(F_KVERB | K_DECF12 )) || /* F12 / BS           Alt-F2           Top Rank F key */
  5547.     insertkeymap( tt, 2418, mkkeyevt(F_KVERB | K_DECF13 )) || /* F13 / LF           Alt-F3           Top Rank F key */
  5548.     insertkeymap( tt, 2419, mkkeyevt(F_KVERB | K_DECF14 )) || /* F14                Alt-F4           Top Rank F key */
  5549.     insertkeymap( tt, 2420, mkkeyevt(F_KVERB | K_DECF15 )) || /* F15 / Help         Alt-F5           Top Rank F key */
  5550.     insertkeymap( tt, 2421, mkkeyevt(F_KVERB | K_DECF16 )) || /* F16 / Do           Alt-F6           Top Rank F key */
  5551.     insertkeymap( tt, 2422, mkkeyevt(F_KVERB | K_DECF17 )) || /* F17                Alt-F7           Top Rank F key */
  5552.     insertkeymap( tt, 2423, mkkeyevt(F_KVERB | K_DECF18 )) || /* F18                Alt-F8           Top Rank F key */
  5553.     insertkeymap( tt, 2424, mkkeyevt(F_KVERB | K_DECF19 )) || /* F19                Alt-F9           Top Rank F key */
  5554.     insertkeymap( tt, 2425, mkkeyevt(F_KVERB | K_DECF20 )) || /* F20                Alt-F10          Top Rank F key */
  5555.  
  5556.     insertkeymap( tt, 4466, mkkeyevt(F_KVERB | K_DECF13 )) || /* F13 / LF           LK450 F13        Top Rank F key */
  5557.     insertkeymap( tt, 4467, mkkeyevt(F_KVERB | K_DECF14 )) || /* F14                LK450 F14        Top Rank F key */
  5558.     insertkeymap( tt, 4468, mkkeyevt(F_KVERB | K_DECF15 )) || /* F15 / Help         LK450 F15        Top Rank F key */
  5559.     insertkeymap( tt, 4469, mkkeyevt(F_KVERB | K_DECF16 )) || /* F16 / Do           LK450 F16        Top Rank F key */
  5560.     insertkeymap( tt, 4470, mkkeyevt(F_KVERB | K_DECF17 )) || /* F17                LK450 F17        Top Rank F key */
  5561.     insertkeymap( tt, 4471, mkkeyevt(F_KVERB | K_DECF18 )) || /* F18                LK450 F18        Top Rank F key */
  5562.     insertkeymap( tt, 4472, mkkeyevt(F_KVERB | K_DECF19 )) || /* F19                LK450 F19        Top Rank F key */
  5563.     insertkeymap( tt, 4473, mkkeyevt(F_KVERB | K_DECF20 )) || /* F20                LK450 F20        Top Rank F key */
  5564.  
  5565.     insertkeymap( tt, 4476, mkkeyevt(F_KVERB | K_DECF13 )) || /* F13 / LF           LK450 F13        Top Rank F key */
  5566.     insertkeymap( tt, 4477, mkkeyevt(F_KVERB | K_DECF14 )) || /* F14                LK450 F14        Top Rank F key */
  5567.     insertkeymap( tt, 4478, mkkeyevt(F_KVERB | K_DECF15 )) || /* F15 / Help         LK450 F15        Top Rank F key */
  5568.     insertkeymap( tt, 4479, mkkeyevt(F_KVERB | K_DECF16 )) || /* F16 / Do           LK450 F16        Top Rank F key */
  5569.     insertkeymap( tt, 4480, mkkeyevt(F_KVERB | K_DECF17 )) || /* F17                LK450 F17        Top Rank F key */
  5570.     insertkeymap( tt, 4481, mkkeyevt(F_KVERB | K_DECF18 )) || /* F18                LK450 F18        Top Rank F key */
  5571.     insertkeymap( tt, 4482, mkkeyevt(F_KVERB | K_DECF19 )) || /* F19                LK450 F19        Top Rank F key */
  5572.     insertkeymap( tt, 4483, mkkeyevt(F_KVERB | K_DECF20 )) || /* F20                LK450 F20        Top Rank F key */
  5573.  
  5574.     insertkeymap( tt, 880 , mkkeyevt(F_KVERB | K_UDKF1  )) || /* F1                 Shift-F1         Top Rank F key */
  5575.     insertkeymap( tt, 881 , mkkeyevt(F_KVERB | K_UDKF2  )) || /* F2                 Shift-F2         Top Rank F key */
  5576.     insertkeymap( tt, 882 , mkkeyevt(F_KVERB | K_UDKF3  )) || /* F3                 Shift-F3         Top Rank F key */
  5577.     insertkeymap( tt, 883 , mkkeyevt(F_KVERB | K_UDKF4  )) || /* F4                 Shift-F4         Top Rank F key */
  5578.     insertkeymap( tt, 884 , mkkeyevt(F_KVERB | K_UDKF5  )) || /* F5                 Shift-F5         Top Rank F key */
  5579.  
  5580.     insertkeymap( tt, 885 , mkkeyevt(F_KVERB | K_UDKF6  )) || /* F6                 Shift-F6         Top Rank F key */
  5581.     insertkeymap( tt, 886 , mkkeyevt(F_KVERB | K_UDKF7  )) || /* F7                 Shift-F7         Top Rank F key */
  5582.     insertkeymap( tt, 887 , mkkeyevt(F_KVERB | K_UDKF8  )) || /* F8                 Shift-F8         Top Rank F key */
  5583.     insertkeymap( tt, 888 , mkkeyevt(F_KVERB | K_UDKF9  )) || /* F9                 Shift-F9         Top Rank F key */
  5584.     insertkeymap( tt, 889 , mkkeyevt(F_KVERB | K_UDKF10 )) || /* F10                Shift-F10        Top Rank F key */
  5585.  
  5586.     insertkeymap( tt, 2928, mkkeyevt(F_KVERB | K_UDKF11 )) || /* F11 / Esc          Alt-Shift-F1     Top Rank F key */
  5587.     insertkeymap( tt, 2929, mkkeyevt(F_KVERB | K_UDKF12 )) || /* F12 / BS           Alt-Shift-F2     Top Rank F key */
  5588.     insertkeymap( tt, 2930, mkkeyevt(F_KVERB | K_UDKF13 )) || /* F13 / LF           Alt-Shift-F3     Top Rank F key */
  5589.     insertkeymap( tt, 2931, mkkeyevt(F_KVERB | K_UDKF14 )) || /* F14                Alt-Shift-F4     Top Rank F key */
  5590.     insertkeymap( tt, 2932, mkkeyevt(F_KVERB | K_UDKF15 )) || /* F15 / Help         Alt-Shift-F5     Top Rank F key */
  5591.     insertkeymap( tt, 2933, mkkeyevt(F_KVERB | K_UDKF16 )) || /* F16 / Do           Alt-Shift-F6     Top Rank F key */
  5592.     insertkeymap( tt, 2934, mkkeyevt(F_KVERB | K_UDKF17 )) || /* F17                Alt-Shift-F7     Top Rank F key */
  5593.     insertkeymap( tt, 2935, mkkeyevt(F_KVERB | K_UDKF18 )) || /* F18                Alt-Shift-F8     Top Rank F key */
  5594.     insertkeymap( tt, 2936, mkkeyevt(F_KVERB | K_UDKF19 )) || /* F19                Alt-Shift-F9     Top Rank F key */
  5595.     insertkeymap( tt, 2937, mkkeyevt(F_KVERB | K_UDKF20 )) || /* F20                Alt-Shift-F10    Top Rank F key */
  5596.  
  5597.     insertkeymap( tt, 4978, mkkeyevt(F_KVERB | K_UDKF13 )) || /* F13 / LF           LK450 Shift-F13  Top Rank F key */
  5598.     insertkeymap( tt, 4979, mkkeyevt(F_KVERB | K_UDKF14 )) || /* F14                LK450 Shift-F14  Top Rank F key */
  5599.     insertkeymap( tt, 4980, mkkeyevt(F_KVERB | K_UDKF15 )) || /* F15 / Help         LK450 Shift-F15  Top Rank F key */
  5600.     insertkeymap( tt, 4981, mkkeyevt(F_KVERB | K_UDKF16 )) || /* F16 / Do           LK450 Shift-F16  Top Rank F key */
  5601.     insertkeymap( tt, 4982, mkkeyevt(F_KVERB | K_UDKF17 )) || /* F17                LK450 Shift-F17  Top Rank F key */
  5602.     insertkeymap( tt, 4983, mkkeyevt(F_KVERB | K_UDKF18 )) || /* F18                LK450 Shift-F18  Top Rank F key */
  5603.     insertkeymap( tt, 4984, mkkeyevt(F_KVERB | K_UDKF19 )) || /* F19                LK450 Shift-F19  Top Rank F key */
  5604.     insertkeymap( tt, 4985, mkkeyevt(F_KVERB | K_UDKF20 )) || /* F20                LK450 Shift-F20  Top Rank F key */
  5605.  
  5606.     insertkeymap( tt, 4988, mkkeyevt(F_KVERB | K_UDKF13 )) || /* F13 / LF           LK450 Shift-F13  Top Rank F key */
  5607.     insertkeymap( tt, 4989, mkkeyevt(F_KVERB | K_UDKF14 )) || /* F14                LK450 Shift-F14  Top Rank F key */
  5608.     insertkeymap( tt, 4990, mkkeyevt(F_KVERB | K_UDKF15 )) || /* F15 / Help         LK450 Shift-F15  Top Rank F key */
  5609.     insertkeymap( tt, 4991, mkkeyevt(F_KVERB | K_UDKF16 )) || /* F16 / Do           LK450 Shift-F16  Top Rank F key */
  5610.     insertkeymap( tt, 4992, mkkeyevt(F_KVERB | K_UDKF17 )) || /* F17                LK450 Shift-F17  Top Rank F key */
  5611.     insertkeymap( tt, 4993, mkkeyevt(F_KVERB | K_UDKF18 )) || /* F18                LK450 Shift-F18  Top Rank F key */
  5612.     insertkeymap( tt, 4994, mkkeyevt(F_KVERB | K_UDKF19 )) || /* F19                LK450 Shift-F19  Top Rank F key */
  5613.     insertkeymap( tt, 4995, mkkeyevt(F_KVERB | K_UDKF20 )) || /* F20                LK450 Shift-F20  Top Rank F key */
  5614.  
  5615.     insertkeymap( tt, 4361, mkkeyevt(F_KVERB | K_COMPOSE )) || /* Compose           LK450 Compose */
  5616.     insertkeymap( tt, 4459, mkkeyevt(F_KVERB | K_KPMINUS ))    /* Kp-Minus          LK450 Minus   */
  5617.         )
  5618.         return -1;
  5619.     return 0;
  5620. }
  5621.  
  5622. int
  5623. defvtpckm( int tt )
  5624. {
  5625.     if ( defvt200km( tt ) ||
  5626.          insertkeymap( tt, 368 , mkkeyevt(F_KVERB | K_DECF1  )) || /* F1 */
  5627.          insertkeymap( tt, 369 , mkkeyevt(F_KVERB | K_DECF2  )) || /* F2 */
  5628.          insertkeymap( tt, 370 , mkkeyevt(F_KVERB | K_DECF3  )) || /* F3 */
  5629.          insertkeymap( tt, 371 , mkkeyevt(F_KVERB | K_DECF4  )) || /* F4 */
  5630.          insertkeymap( tt, 372 , mkkeyevt(F_KVERB | K_DECF5  )) || /* F5 */
  5631.          insertkeymap( tt, 4397, mkkeyevt(F_KVERB | K_DECINSERT )) ||
  5632.          insertkeymap( tt, 4388, mkkeyevt(F_KVERB | K_DECHOME )) ||
  5633.          insertkeymap( tt, 4386, mkkeyevt(F_KVERB | K_DECNEXT )) ||
  5634.          insertkeymap( tt, 4385, mkkeyevt(F_KVERB | K_DECPREV )) ||
  5635.          insertkeymap( tt, 4387, mkkeyevt(F_KVERB | K_DECFIND ))
  5636.          )
  5637.        return(-1);
  5638.  
  5639.     return(0);
  5640. }
  5641.  
  5642. int
  5643. defdgkm( int tt )
  5644. {
  5645.     if ( defbasekm(tt) ||
  5646.         /* Scan  Kverb                     DG Key           PC Key           PC Key Group */
  5647.  
  5648.         /*
  5649.         DG Cursor keys
  5650.         */
  5651.          insertkeymap( tt, KEY_SCAN | KEY_ENHANCED | 38, mkkeyevt(F_KVERB | K_UPARR)) ||        /* Up Arrow    Gray */
  5652.          insertkeymap( tt, KEY_SCAN | 38               , mkkeyevt(F_KVERB | K_UPARR)) ||        /* Up Arrow    Numeric */
  5653.          insertkeymap( tt, KEY_SCAN | KEY_ENHANCED | 37, mkkeyevt(F_KVERB | K_LFARR)) ||        /* Left Arrow  Gray */
  5654.          insertkeymap( tt, KEY_SCAN | 37               , mkkeyevt(F_KVERB | K_LFARR)) ||        /* Left Arrow  Numeric*/
  5655.          insertkeymap( tt, KEY_SCAN | KEY_ENHANCED | 39, mkkeyevt(F_KVERB | K_RTARR)) ||        /* Right Arrow Gray */
  5656.          insertkeymap( tt, KEY_SCAN | 39               , mkkeyevt(F_KVERB | K_RTARR)) ||        /* Right Arrow Numeric */
  5657.          insertkeymap( tt, KEY_SCAN | KEY_ENHANCED | 40, mkkeyevt(F_KVERB | K_DNARR)) ||        /* Down Arrow  Gray */
  5658.          insertkeymap( tt, KEY_SCAN | 40               , mkkeyevt(F_KVERB | K_DNARR)) ||        /* Down Arrow  Numeric */
  5659.          /*
  5660.         DG Cursor keys (shifted)
  5661.         */
  5662.          insertkeymap( tt, 4902, mkkeyevt(F_KVERB | K_DGSUPARR )) || /* Up Arrow     Shift-Up Arrow    Cursor keypad */
  5663.          insertkeymap( tt, 4904, mkkeyevt(F_KVERB | K_DGSDNARR )) || /* Down Arrow   Shift-Down Arrow  Cursor keypad */
  5664.          insertkeymap( tt, 4903, mkkeyevt(F_KVERB | K_DGSRTARR )) || /* Right Arrow  Shift-Right Arrow Cursor keypad */
  5665.          insertkeymap( tt, 4901, mkkeyevt(F_KVERB | K_DGSLFARR )) || /* Left Arrow   Shift-Left Arrow  Cursor keypad */
  5666.          insertkeymap( tt, 808, mkkeyevt(F_KVERB | K_DGSDNARR)) ||           /* Shift-DnArr        */
  5667.          insertkeymap( tt, 806, mkkeyevt(F_KVERB | K_DGSUPARR)) ||              /* Shift-UpArr  */
  5668.          insertkeymap( tt, 807, mkkeyevt(F_KVERB | K_DGSRTARR)) ||           /* Shift-RtArr     */
  5669.          insertkeymap( tt, 805, mkkeyevt(F_KVERB | K_DGSLFARR)) ||             /* Shift-LfArr   */
  5670.          /*
  5671.         ) || DG Function keys.
  5672.         ) ||
  5673.         ) ||   DG F1-F10 are on PC F1-F10.
  5674.         ) ||   DG F11-F15 are on PC Alt-F1 through Alt-F6.
  5675.         ) ||   DG Shift F1-F10 are on PC Shift-F1 - Shift-F10
  5676.         ) ||   DG Shift F11-F15 are on PC Alt-Shift-F1 through Alt-Shift-F15.
  5677.         ) ||   DG Control F1-F10 are on PC Ctrl-F1 - Ctrl-F10
  5678.         ) ||   DG Control F11-F15 are on PC Ctrl-Alt-F1 through Ctrl-Alt-F15.
  5679.         ) ||   DG Control Shift F1-F10 are on PC Ctrl-Shift-F1 - Ctrl-Shift-F10
  5680.         ) ||   DG Control F11-F15 are on PC Ctrl-Alt-Shift-F1 through Ctrl-Alt-Shift-F15.
  5681.         */
  5682.     insertkeymap( tt, 368 , mkkeyevt(F_KVERB | K_DGF01 )) || /* F1               F1               Top Rank F key */
  5683.     insertkeymap( tt, 369 , mkkeyevt(F_KVERB | K_DGF02 )) || /* F2               F2               Top Rank F key */
  5684.     insertkeymap( tt, 370 , mkkeyevt(F_KVERB | K_DGF03 )) || /* F3               F3               Top Rank F key */
  5685.     insertkeymap( tt, 371 , mkkeyevt(F_KVERB | K_DGF04 )) || /* F4               F4               Top Rank F key */
  5686.     insertkeymap( tt, 372 , mkkeyevt(F_KVERB | K_DGF05 )) || /* F5               F5               Top Rank F key */
  5687.     insertkeymap( tt, 373 , mkkeyevt(F_KVERB | K_DGF06 )) || /* F6               F6               Top Rank F key */
  5688.     insertkeymap( tt, 374 , mkkeyevt(F_KVERB | K_DGF07 )) || /* F7               F7               Top Rank F key */
  5689.     insertkeymap( tt, 375 , mkkeyevt(F_KVERB | K_DGF08 )) || /* F8               F8               Top Rank F key */
  5690.     insertkeymap( tt, 376 , mkkeyevt(F_KVERB | K_DGF09 )) || /* F9               F9               Top Rank F key */
  5691.     insertkeymap( tt, 377 , mkkeyevt(F_KVERB | K_DGF10 )) || /* F10              F10              Top Rank F key */
  5692.     insertkeymap( tt, 378 , mkkeyevt(F_KVERB | K_DGF11 )) || /* F11              F11              Top Rank F key */
  5693.     insertkeymap( tt, 379 , mkkeyevt(F_KVERB | K_DGF12 )) || /* F12              F12              Top Rank F key */
  5694.  
  5695.     insertkeymap( tt, 2416, mkkeyevt(F_KVERB | K_DGF11 )) || /* F11               Alt-F1           Top Rank F key */
  5696.     insertkeymap( tt, 2417, mkkeyevt(F_KVERB | K_DGF12 )) || /* F12               Alt-F2           Top Rank F key */
  5697.     insertkeymap( tt, 2418, mkkeyevt(F_KVERB | K_DGF13 )) || /* F13               Alt-F3           Top Rank F key */
  5698.     insertkeymap( tt, 2419, mkkeyevt(F_KVERB | K_DGF14 )) || /* F14               Alt-F4           Top Rank F key */
  5699.     insertkeymap( tt, 2420, mkkeyevt(F_KVERB | K_DGF15 )) || /* F15               Alt-F5           Top Rank F key */
  5700.  
  5701.     insertkeymap( tt, 4466, mkkeyevt(F_KVERB | K_DGF13 )) || /* F13               LK450 F13        Top Rank F key */
  5702.     insertkeymap( tt, 4467, mkkeyevt(F_KVERB | K_DGF14 )) || /* F14               LK450 F14        Top Rank F key */
  5703.     insertkeymap( tt, 4468, mkkeyevt(F_KVERB | K_DGF15 )) || /* F15               LK450 F15        Top Rank F key */
  5704.  
  5705.     insertkeymap( tt, 4479, mkkeyevt(F_KVERB | K_DGF13 )) || /* F13               LK450 F13        Top Rank F key */
  5706.     insertkeymap( tt, 4480, mkkeyevt(F_KVERB | K_DGF14 )) || /* F14               LK450 F14        Top Rank F key */
  5707.     insertkeymap( tt, 4481, mkkeyevt(F_KVERB | K_DGF15 )) || /* F15               LK450 F15        Top Rank F key */
  5708.  
  5709.     insertkeymap( tt, 880 , mkkeyevt(F_KVERB | K_DGSF01 )) || /* Shift-F1         Shift-F1         Top Rank F key */
  5710.     insertkeymap( tt, 881 , mkkeyevt(F_KVERB | K_DGSF02 )) || /* Shift-F2         Shift-F2         Top Rank F key */
  5711.     insertkeymap( tt, 882 , mkkeyevt(F_KVERB | K_DGSF03 )) || /* Shift-F3         Shift-F3         Top Rank F key */
  5712.     insertkeymap( tt, 883 , mkkeyevt(F_KVERB | K_DGSF04 )) || /* Shift-F4         Shift-F4         Top Rank F key */
  5713.     insertkeymap( tt, 884 , mkkeyevt(F_KVERB | K_DGSF05 )) || /* Shift-F5         Shift-F5         Top Rank F key */
  5714.     insertkeymap( tt, 885 , mkkeyevt(F_KVERB | K_DGSF06 )) || /* Shift-F6         Shift-F6         Top Rank F key */
  5715.     insertkeymap( tt, 886 , mkkeyevt(F_KVERB | K_DGSF07 )) || /* Shift-F7         Shift-F7         Top Rank F key */
  5716.     insertkeymap( tt, 887 , mkkeyevt(F_KVERB | K_DGSF08 )) || /* Shift-F8         Shift-F8         Top Rank F key */
  5717.     insertkeymap( tt, 888 , mkkeyevt(F_KVERB | K_DGSF09 )) || /* Shift-F9         Shift-F9         Top Rank F key */
  5718.     insertkeymap( tt, 889 , mkkeyevt(F_KVERB | K_DGSF10 )) || /* Shift-F10        Shift-F10        Top Rank F key */
  5719.     insertkeymap( tt, 890 , mkkeyevt(F_KVERB | K_DGSF11 )) || /* Shift-F11        Shift-F11        Top Rank F key */
  5720.     insertkeymap( tt, 891 , mkkeyevt(F_KVERB | K_DGSF12 )) || /* Shift-F12        Shift-F12        Top Rank F key */
  5721.  
  5722.     insertkeymap( tt, 2928, mkkeyevt(F_KVERB | K_DGSF11 )) || /* Shift-F11         Alt-Shift-F1     Top Rank F key */
  5723.     insertkeymap( tt, 2929, mkkeyevt(F_KVERB | K_DGSF12 )) || /* Shift-F12         Alt-Shift-F2     Top Rank F key */
  5724.     insertkeymap( tt, 2930, mkkeyevt(F_KVERB | K_DGSF13 )) || /* Shift-F13         Alt-Shift-F3     Top Rank F key */
  5725.     insertkeymap( tt, 2931, mkkeyevt(F_KVERB | K_DGSF14 )) || /* Shift-F14         Alt-Shift-F4     Top Rank F key */
  5726.     insertkeymap( tt, 2932, mkkeyevt(F_KVERB | K_DGSF15 )) || /* Shift-F15         Alt-Shift-F5     Top Rank F key */
  5727.  
  5728.     insertkeymap( tt, 4978, mkkeyevt(F_KVERB | K_DGSF13 )) || /* Shift-F13         LK450 Shift-F13  Top Rank F key */
  5729.     insertkeymap( tt, 4979, mkkeyevt(F_KVERB | K_DGSF14 )) || /* Shift-F14         LK450 Shift-F14  Top Rank F key */
  5730.     insertkeymap( tt, 4980, mkkeyevt(F_KVERB | K_DGSF15 )) || /* Shift-F15         LK450 Shift-F15  Top Rank F key */
  5731.  
  5732.     insertkeymap( tt, 4988, mkkeyevt(F_KVERB | K_DGSF13 )) || /* Shift-F13         LK450 Shift-F13  Top Rank F key */
  5733.     insertkeymap( tt, 4989, mkkeyevt(F_KVERB | K_DGSF14 )) || /* Shift-F14         LK450 Shift-F14  Top Rank F key */
  5734.     insertkeymap( tt, 4990, mkkeyevt(F_KVERB | K_DGSF15 )) || /* Shift-F15         LK450 Shift-F15  Top Rank F key */
  5735.  
  5736.     insertkeymap( tt, 1392, mkkeyevt(F_KVERB | K_DGCF01 )) || /* Ctrl-F1          Ctrl-F1           Top Rank F key */
  5737.     insertkeymap( tt, 1393, mkkeyevt(F_KVERB | K_DGCF02 )) || /* Ctrl-F2          Ctrl-F2           Top Rank F key */
  5738.     insertkeymap( tt, 1394, mkkeyevt(F_KVERB | K_DGCF03 )) || /* Ctrl-F3          Ctrl-F3           Top Rank F key */
  5739.     insertkeymap( tt, 1395, mkkeyevt(F_KVERB | K_DGCF04 )) || /* Ctrl-F4          Ctrl-F4           Top Rank F key */
  5740.     insertkeymap( tt, 1396, mkkeyevt(F_KVERB | K_DGCF05 )) || /* Ctrl-F5          Ctrl-F5           Top Rank F key */
  5741.     insertkeymap( tt, 1397, mkkeyevt(F_KVERB | K_DGCF06 )) || /* Ctrl-F6          Ctrl-F6           Top Rank F key */
  5742.     insertkeymap( tt, 1398, mkkeyevt(F_KVERB | K_DGCF07 )) || /* Ctrl-F7          Ctrl-F7           Top Rank F key */
  5743.     insertkeymap( tt, 1399, mkkeyevt(F_KVERB | K_DGCF08 )) || /* Ctrl-F8          Ctrl-F8           Top Rank F key */
  5744.     insertkeymap( tt, 1400, mkkeyevt(F_KVERB | K_DGCF09 )) || /* Ctrl-F9          Ctrl-F9           Top Rank F key */
  5745.     insertkeymap( tt, 1401, mkkeyevt(F_KVERB | K_DGCF10 )) || /* Ctrl-F10         Ctrl-F10          Top Rank F key */
  5746.     insertkeymap( tt, 1402, mkkeyevt(F_KVERB | K_DGCF11 )) || /* Ctrl-F11         Ctrl-F11          Top Rank F key */
  5747.     insertkeymap( tt, 1403, mkkeyevt(F_KVERB | K_DGCF12 )) || /* Ctrl-F12         Ctrl-F12          Top Rank F key */
  5748.  
  5749.     insertkeymap( tt, 3440, mkkeyevt(F_KVERB | K_DGCF11)) || /* Ctrl-F11          Ctrl-Alt-F1       Top Rank F key */
  5750.     insertkeymap( tt, 3441, mkkeyevt(F_KVERB | K_DGCF12)) || /* Ctrl-F12          Ctrl-Alt-F2       Top Rank F key */
  5751.     insertkeymap( tt, 3442, mkkeyevt(F_KVERB | K_DGCF13)) || /* Ctrl-F13          Ctrl-Alt-F3       Top Rank F key */
  5752.     insertkeymap( tt, 3443, mkkeyevt(F_KVERB | K_DGCF14)) || /* Ctrl-F14          Ctrl-Alt-F4       Top Rank F key */
  5753.     insertkeymap( tt, 3444, mkkeyevt(F_KVERB | K_DGCF15)) || /* Ctrl-F15          Ctrl-Alt-F5       Top Rank F key */
  5754.  
  5755.     insertkeymap( tt, 5490, mkkeyevt(F_KVERB | K_DGCF13)) || /* Ctrl-F13          LK450 Ctrl-F13    Top Rank F key */
  5756.     insertkeymap( tt, 5491, mkkeyevt(F_KVERB | K_DGCF14)) || /* Ctrl-F14          LK450 Ctrl-F14    Top Rank F key */
  5757.     insertkeymap( tt, 5492, mkkeyevt(F_KVERB | K_DGCF15)) || /* Ctrl-F15          LK450 Ctrl-F15    Top Rank F key */
  5758.  
  5759.     insertkeymap( tt, 5500, mkkeyevt(F_KVERB | K_DGCF13)) || /* Ctrl-F13          LK450 Ctrl-F13    Top Rank F key */
  5760.     insertkeymap( tt, 5501, mkkeyevt(F_KVERB | K_DGCF14)) || /* Ctrl-F14          LK450 Ctrl-F14    Top Rank F key */
  5761.     insertkeymap( tt, 5502, mkkeyevt(F_KVERB | K_DGCF15)) || /* Ctrl-F15          LK450 Ctrl-F15    Top Rank F key */
  5762.  
  5763.     insertkeymap( tt, 1904, mkkeyevt(F_KVERB | K_DGCSF01)) || /* Ctrl-Shift-F1    Ctrl-Shift-F1     Top Rank F key */
  5764.     insertkeymap( tt, 1905, mkkeyevt(F_KVERB | K_DGCSF02)) || /* Ctrl-Shift-F2    Ctrl-Shift-F2     Top Rank F key */
  5765.     insertkeymap( tt, 1906, mkkeyevt(F_KVERB | K_DGCSF03)) || /* Ctrl-Shift-F3    Ctrl-Shift-F3     Top Rank F key */
  5766.     insertkeymap( tt, 1907, mkkeyevt(F_KVERB | K_DGCSF04)) || /* Ctrl-Shift-F4    Ctrl-Shift-F4     Top Rank F key */
  5767.     insertkeymap( tt, 1908, mkkeyevt(F_KVERB | K_DGCSF05)) || /* Ctrl-Shift-F5    Ctrl-Shift-F5     Top Rank F key */
  5768.     insertkeymap( tt, 1909, mkkeyevt(F_KVERB | K_DGCSF06)) || /* Ctrl-Shift-F6    Ctrl-Shift-F6     Top Rank F key */
  5769.     insertkeymap( tt, 1910, mkkeyevt(F_KVERB | K_DGCSF07)) || /* Ctrl-Shift-F7    Ctrl-Shift-F7     Top Rank F key */
  5770.     insertkeymap( tt, 1911, mkkeyevt(F_KVERB | K_DGCSF08)) || /* Ctrl-Shift-F8    Ctrl-Shift-F8     Top Rank F key */
  5771.     insertkeymap( tt, 1912, mkkeyevt(F_KVERB | K_DGCSF09)) || /* Ctrl-Shift-F9    Ctrl-Shift-F9     Top Rank F key */
  5772.     insertkeymap( tt, 1913, mkkeyevt(F_KVERB | K_DGCSF10)) || /* Ctrl-Shift-F10   Ctrl-Shift-F10    Top Rank F key */
  5773.     insertkeymap( tt, 1914, mkkeyevt(F_KVERB | K_DGCSF11)) || /* Ctrl-Shift-F11   Ctrl-Shift-F11    Top Rank F key */
  5774.     insertkeymap( tt, 1915, mkkeyevt(F_KVERB | K_DGCSF12)) || /* Ctrl-Shift-F12   Ctrl-Shift-F12    Top Rank F key */
  5775.  
  5776.     insertkeymap( tt, 3952, mkkeyevt(F_KVERB | K_DGCSF11)) || /* Ctrl-Shift-F11    Ctrl-Alt-Shift-F1 Top Rank F key */
  5777.     insertkeymap( tt, 3953, mkkeyevt(F_KVERB | K_DGCSF12)) || /* Ctrl-Shift-F12    Ctrl-Alt-Shift-F2 Top Rank F key */
  5778.     insertkeymap( tt, 3954, mkkeyevt(F_KVERB | K_DGCSF13)) || /* Ctrl-Shift-F13    Ctrl-Alt-Shift-F3 Top Rank F key */
  5779.     insertkeymap( tt, 3955, mkkeyevt(F_KVERB | K_DGCSF14)) || /* Ctrl-Shift-F14    Ctrl-Alt-Shift-F4 Top Rank F key */
  5780.     insertkeymap( tt, 3956, mkkeyevt(F_KVERB | K_DGCSF15)) ||  /* Ctrl-Shift-F15    Ctrl-Alt-Shift-F5 Top Rank F key */
  5781.  
  5782.     insertkeymap( tt, 6002, mkkeyevt(F_KVERB | K_DGCSF13)) || /* Ctrl-Shift-F13    LK450 Ctrl-Shift-F13 Top Rank F key */
  5783.     insertkeymap( tt, 6003, mkkeyevt(F_KVERB | K_DGCSF14)) || /* Ctrl-Shift-F14    LK450 Ctrl-Shift-F14 Top Rank F key */
  5784.     insertkeymap( tt, 6004, mkkeyevt(F_KVERB | K_DGCSF15)) ||  /* Ctrl-Shift-F15    LK450 Ctrl-Shift-F15 Top Rank F key */
  5785.  
  5786.     insertkeymap( tt, 6012, mkkeyevt(F_KVERB | K_DGCSF13)) || /* Ctrl-Shift-F13    LK450 Ctrl-Shift-F13 Top Rank F key */
  5787.     insertkeymap( tt, 6013, mkkeyevt(F_KVERB | K_DGCSF14)) || /* Ctrl-Shift-F14    LK450 Ctrl-Shift-F14 Top Rank F key */
  5788.     insertkeymap( tt, 6014, mkkeyevt(F_KVERB | K_DGCSF15)) ||  /* Ctrl-Shift-F15    LK450 Ctrl-Shift-F15 Top Rank F key */
  5789.  
  5790.     insertkeymap( tt, 269,  mkkeyevt(LF )) ||   /* Enter */
  5791.     insertkeymap( tt, 264,  mkkeyevt(F_KVERB | K_DGBS)) ||      /* Backspace */
  5792.     insertkeymap( tt, 776,  mkkeyevt(F_KVERB | K_DGBS )) ||     /* Shift-Backspace */
  5793.     insertkeymap( tt, 265,  mkkeyevt(HT)) ||    /* Tab                  Tab */
  5794.     insertkeymap( tt, 4365, mkkeyevt(LF)) ||    /* Keypad-Enter         Gray-Enter */
  5795.  
  5796.     insertkeymap( tt, 4397, mkkeyevt(F_KVERB | K_DGERASEPAGE)) ||       /* ErasePage    Gray-Insert */
  5797.     insertkeymap( tt, 4388, mkkeyevt(F_KVERB | K_DGC1)) ||              /* C1           Gray-Home */
  5798.     insertkeymap( tt, 4385, mkkeyevt(F_KVERB | K_DGC2)) ||              /* C2           Gray-PgUp */
  5799.     insertkeymap( tt, 4398, mkkeyevt(F_KVERB | K_DGERASEEOL)) ||        /* EraseEOL     Gray-Delete */
  5800.     insertkeymap( tt, 4387, mkkeyevt(F_KVERB | K_DGC3)) ||              /* C3           Gray-End */
  5801.     insertkeymap( tt, 4386, mkkeyevt(F_KVERB | K_DGC4)) ||              /* C4           Gray-PgDn */
  5802.  
  5803.     insertkeymap( tt, 4909, mkkeyevt(F_KVERB | K_DGSERASEPAGE)) ||      /* Shift-ErasePage    Gray-Shift-Insert */
  5804.     insertkeymap( tt, 4900, mkkeyevt(F_KVERB | K_DGSC1)) ||             /* Shift-C1           Gray-Shift-Home */
  5805.     insertkeymap( tt, 4897, mkkeyevt(F_KVERB | K_DGSC2)) ||             /* Shift-C2           Gray-Shift-PgUp */
  5806.     insertkeymap( tt, 4910, mkkeyevt(F_KVERB | K_DGSERASEEOL)) ||       /* Shift-EraseEOL     Gray-Shift-Delete */
  5807.     insertkeymap( tt, 4899, mkkeyevt(F_KVERB | K_DGSC3)) ||             /* Shift-C3           Gray-Shift-End */
  5808.     insertkeymap( tt, 4898, mkkeyevt(F_KVERB | K_DGSC4)) ||             /* Shift-C4           Gray-Shift-PgDn */
  5809.  
  5810.     insertkeymap( tt, 301, mkkeyevt(F_KVERB | K_DGERASEPAGE)) ||        /* ErasePage    Insert */
  5811.     insertkeymap( tt, 292, mkkeyevt(F_KVERB | K_DGC1)) ||               /* C1           Home */
  5812.     insertkeymap( tt, 289, mkkeyevt(F_KVERB | K_DGC2)) ||               /* C2           PgUp */
  5813.     insertkeymap( tt, 302, mkkeyevt(F_KVERB | K_DGERASEEOL)) ||         /* EraseEOL     Delete */
  5814.     insertkeymap( tt, 291, mkkeyevt(F_KVERB | K_DGC3)) ||               /* C3           End */
  5815.     insertkeymap( tt, 290, mkkeyevt(F_KVERB | K_DGC4)) ||               /* C4           PgDn */
  5816.     insertkeymap( tt, 268, mkkeyevt(F_KVERB | K_DGHOME)) ||             /* Home         Clear */
  5817.  
  5818.     insertkeymap( tt, 813, mkkeyevt(F_KVERB | K_DGSERASEPAGE)) ||       /* Shift-ErasePage    Gray-Shift-Insert */
  5819.     insertkeymap( tt, 804, mkkeyevt(F_KVERB | K_DGSC1)) ||              /* Shift-C1           Gray-Shift-Home */
  5820.     insertkeymap( tt, 801, mkkeyevt(F_KVERB | K_DGSC2)) ||              /* Shift-C2           Gray-Shift-PgUp */
  5821.     insertkeymap( tt, 814, mkkeyevt(F_KVERB | K_DGSERASEEOL)) ||        /* Shift-EraseEOL     Gray-Shift-Delete */
  5822.     insertkeymap( tt, 803, mkkeyevt(F_KVERB | K_DGSC3)) ||              /* Shift-C3           Gray-Shift-End */
  5823.     insertkeymap( tt, 802, mkkeyevt(F_KVERB | K_DGSC4)) ||              /* Shift-C4           Gray-Shift-PgDn */
  5824.     insertkeymap( tt, 780, mkkeyevt(F_KVERB | K_DGSHOME))             /* Shift-Home     Shift-Clear */
  5825.          )
  5826.         return -1;
  5827.     return 0;
  5828. }
  5829.  
  5830. int
  5831. defvckm( int tt )
  5832. {
  5833.     if ( defbasekm(tt) ||
  5834.         /* Scan  Kverb                     VC Key           PC Key           PC Key Group */
  5835.  
  5836.         /*
  5837.         VC Cursor keys
  5838.         */
  5839.     insertkeymap( tt, 4390, mkkeyevt(F_KVERB | K_UPARR )) || /* Up Arrow           Up Arrow         Cursor keypad */
  5840.     insertkeymap( tt, 4392, mkkeyevt(F_KVERB | K_DNARR )) || /* Down Arrow         Down Arrow       Cursor keypad */
  5841.     insertkeymap( tt, 4391, mkkeyevt(F_KVERB | K_RTARR )) || /* Right Arrow        Right Arrow      Cursor keypad */
  5842.     insertkeymap( tt, 4389, mkkeyevt(F_KVERB | K_LFARR )) || /* Left Arrow         Left Arrow       Cursor keypad */
  5843.         /*
  5844.         VC Function keys.
  5845.  
  5846.           VC F1-F10 are on PC F1-F10.
  5847.         */
  5848.     insertkeymap( tt, 368 , mkkeyevt(SOH)) || /* F1               F1               Top Rank F key */
  5849.     insertkeymap( tt, 369 , mkkeyevt(STX)) || /* F2               F2               Top Rank F key */
  5850.     insertkeymap( tt, 370 , mkkeyevt(ETX)) || /* F3               F3               Top Rank F key */
  5851.     insertkeymap( tt, 371 , mkkeyevt(EOT)) || /* F4               F4               Top Rank F key */
  5852.     insertkeymap( tt, 372 , mkkeyevt(ENQ)) || /* F5               F5               Top Rank F key */
  5853.     insertkeymap( tt, 373 , mkkeyevt(ACK)) || /* F6               F6               Top Rank F key */
  5854.     insertkeymap( tt, 374 , mkkeyevt(DC2)) || /* F7               F7               Top Rank F key */
  5855.     insertkeymap( tt, 375 , mkkeyevt(DC4)) || /* F8               F8               Top Rank F key */
  5856.     insertkeymap( tt, 376 , mkkeyevt(XFS)) || /* F9               F9               Top Rank F key */
  5857.     insertkeymap( tt, 377 , mkkeyevt(XGS)) || /* F10              F10              Top Rank F key */
  5858.     insertkeymap( tt, 378 , mkkeyevt(XRS)) || /* F11              F11              Top Rank F key */
  5859.     insertkeymap( tt, 379 , mkkeyevt(US))  || /* F12              F12              Top Rank F key */
  5860.  
  5861.     insertkeymap( tt, 264, mkkeyevt(BS )) ||            /* Backspace */
  5862.     insertkeymap( tt, 777, mkkeyevt(F_ESC | HT )) ||    /* Shift-Tab */
  5863.     insertkeymap( tt, 265, mkkeyevt(HT )) ||            /* Tab */
  5864.     insertkeymap( tt, 4398, mkkeyevt(F_ESC | 'd' )) ||  /* Del */
  5865.     insertkeymap( tt, 4397, mkkeyevt(F_ESC | 'i' ))     /* Ins          Gray-Insert */
  5866.          )
  5867.         return -1;
  5868.     return 0;
  5869. }
  5870.  
  5871. int
  5872. defhpkm( int tt )
  5873. {
  5874.     if ( defbasekm(tt) ||
  5875.         /* Scan  Kverb                     HP Key           PC Key           PC Key Group */
  5876.  
  5877.         /*
  5878.         HP Cursor keys
  5879.         */
  5880.     insertkeymap( tt, 4390, mkkeyevt(F_KVERB | K_UPARR )) || /* Up Arrow           Up Arrow         Cursor keypad */
  5881.     insertkeymap( tt, 4392, mkkeyevt(F_KVERB | K_DNARR )) || /* Down Arrow         Down Arrow       Cursor keypad */
  5882.     insertkeymap( tt, 4391, mkkeyevt(F_KVERB | K_RTARR )) || /* Right Arrow        Right Arrow      Cursor keypad */
  5883.     insertkeymap( tt, 4389, mkkeyevt(F_KVERB | K_LFARR )) || /* Left Arrow         Left Arrow       Cursor keypad */
  5884.         /*
  5885.         HP Function keys.
  5886.  
  5887.           HP F1-F8 are on PC F1-F8.
  5888.         */
  5889.     insertkeymap( tt, 368 , mkkeyevt(F_KVERB | K_HPF01)) || /* F1               F1               Top Rank F key */
  5890.     insertkeymap( tt, 369 , mkkeyevt(F_KVERB | K_HPF02)) || /* F2               F2               Top Rank F key */
  5891.     insertkeymap( tt, 370 , mkkeyevt(F_KVERB | K_HPF03)) || /* F3               F3               Top Rank F key */
  5892.     insertkeymap( tt, 371 , mkkeyevt(F_KVERB | K_HPF04)) || /* F4               F4               Top Rank F key */
  5893.     insertkeymap( tt, 372 , mkkeyevt(F_KVERB | K_HPF05)) || /* F5               F5               Top Rank F key */
  5894.     insertkeymap( tt, 373 , mkkeyevt(F_KVERB | K_HPF06)) || /* F6               F6               Top Rank F key */
  5895.     insertkeymap( tt, 374 , mkkeyevt(F_KVERB | K_HPF07)) || /* F7               F7               Top Rank F key */
  5896.     insertkeymap( tt, 375 , mkkeyevt(F_KVERB | K_HPF08)) || /* F8               F8               Top Rank F key */
  5897.     insertkeymap( tt, 376 , mkkeyevt(F_KVERB | K_HPF09)) || /* F1               F1               Top Rank F key */
  5898.     insertkeymap( tt, 377 , mkkeyevt(F_KVERB | K_HPF10)) || /* F2               F2               Top Rank F key */
  5899.     insertkeymap( tt, 378 , mkkeyevt(F_KVERB | K_HPF11)) || /* F3               F3               Top Rank F key */
  5900.     insertkeymap( tt, 379 , mkkeyevt(F_KVERB | K_HPF12)) || /* F4               F4               Top Rank F key */
  5901.     insertkeymap( tt, 880 , mkkeyevt(F_KVERB | K_HPF09)) || /* F1               F1               Top Rank F key */
  5902.     insertkeymap( tt, 881 , mkkeyevt(F_KVERB | K_HPF10)) || /* F2               F2               Top Rank F key */
  5903.     insertkeymap( tt, 882 , mkkeyevt(F_KVERB | K_HPF11)) || /* F3               F3               Top Rank F key */
  5904.     insertkeymap( tt, 883 , mkkeyevt(F_KVERB | K_HPF12)) || /* F4               F4               Top Rank F key */
  5905.     insertkeymap( tt, 884 , mkkeyevt(F_KVERB | K_HPF13)) || /* F5               F5               Top Rank F key */
  5906.     insertkeymap( tt, 885 , mkkeyevt(F_KVERB | K_HPF14)) || /* F6               F6               Top Rank F key */
  5907.     insertkeymap( tt, 886 , mkkeyevt(F_KVERB | K_HPF15)) || /* F7               F7               Top Rank F key */
  5908.     insertkeymap( tt, 887 , mkkeyevt(F_KVERB | K_HPF16)) || /* F8               F8               Top Rank F key */
  5909.  
  5910.     insertkeymap( tt, 269,  mkkeyevt(F_KVERB | K_HPRETURN))   || /* Return */
  5911.     insertkeymap( tt, 4365, mkkeyevt(F_KVERB | K_HPENTER))    || /* Kp Enter */
  5912.     insertkeymap( tt, 777,  mkkeyevt(F_KVERB | K_HPBACKTAB))  || /* Back Tab */
  5913.     insertkeymap( tt, 264,  mkkeyevt(BS )) ||                /* Backspace */
  5914.     insertkeymap( tt, 265,  mkkeyevt(HT )) ||                /* Tab */
  5915.     insertkeymap( tt, 4398, mkkeyevt(DEL))                   /* Del */
  5916.          )
  5917.         return -1;
  5918.     return 0;
  5919. }
  5920.  
  5921. int
  5922. defbetermkm( int tt )
  5923. {
  5924.     defbasekm(tt);
  5925.  
  5926.     insertkeymap( tt, 368 , mkliteralevt("\033[11~")); /* F1   */
  5927.     insertkeymap( tt, 369 , mkliteralevt("\033[12~")); /* F2   */
  5928.     insertkeymap( tt, 370 , mkliteralevt("\033[13~")); /* F3   */
  5929.     insertkeymap( tt, 371 , mkliteralevt("\033[14~")); /* F4   */
  5930.     insertkeymap( tt, 372 , mkliteralevt("\033[15~")); /* F5   */
  5931.     insertkeymap( tt, 373 , mkliteralevt("\033[16~")); /* F6   */
  5932.     insertkeymap( tt, 374 , mkliteralevt("\033[17~")); /* F7   */
  5933.     insertkeymap( tt, 375 , mkliteralevt("\033[18~")); /* F8   */
  5934.     insertkeymap( tt, 376 , mkliteralevt("\033[19~")); /* F9   */
  5935.     insertkeymap( tt, 377 , mkliteralevt("\033[20~")); /* F10  */
  5936.     insertkeymap( tt, 378 , mkliteralevt("\033[21~")); /* F11  */
  5937.     insertkeymap( tt, 379 , mkliteralevt("\033[22~")); /* F12  */
  5938.     insertkeymap( tt, 264,  mkkeyevt(BS )); /* Backspace */
  5939.     insertkeymap( tt, 265,  mkkeyevt(HT )); /* Tab */
  5940.     insertkeymap( tt, 777,  mkkeyevt(HT));  /* Back Tab */
  5941.     insertkeymap( tt, 4398, mkkeyevt(DEL)); /* Del */
  5942.  
  5943.     insertkeymap( tt, 4388, mkliteralevt("\033[1~"));  /* home         */
  5944.     insertkeymap( tt, 4385, mkliteralevt("\033[5~")); /* page up               */
  5945.     insertkeymap( tt, 4387, mkliteralevt("\033[4~"));  /* end          */
  5946.     insertkeymap( tt, 4386, mkliteralevt("\033[6~")); /* page down             */
  5947.     insertkeymap( tt, 4397, mkliteralevt("\033[2~"));  /* insert               */
  5948.  
  5949.     insertkeymap( tt, 268,  mkliteralevt("\033[G"));  /* Clear key */
  5950.     insertkeymap( tt, 301, mkkeyevt(ENQ));
  5951.     insertkeymap( tt, 302, mkkeyevt(DEL));
  5952.     insertkeymap( tt, 291, mkkeyevt(EOT));
  5953.     insertkeymap( tt, 296, mkkeyevt(US));
  5954.     insertkeymap( tt, 290, mkkeyevt(FF));
  5955.     insertkeymap( tt, 293, mkkeyevt(XFS));
  5956.     insertkeymap( tt, 295, mkkeyevt(XGS));
  5957.     insertkeymap( tt, 292, mkkeyevt(SOH));
  5958.     insertkeymap( tt, 294, mkkeyevt(XRS));
  5959.     insertkeymap( tt, 289, mkkeyevt(VT));
  5960.  
  5961.     return 0;
  5962. }
  5963.  
  5964. int
  5965. defhzlkm( int tt )
  5966. {
  5967.     if ( defbasekm(tt) ||
  5968.         /* Scan  Kverb                     VC Key           PC Key           PC Key Group */
  5969.  
  5970.         /*
  5971.         VC Cursor keys
  5972.         */
  5973.     insertkeymap( tt, 4390, mkkeyevt(F_KVERB | K_UPARR )) || /* Up Arrow           Up Arrow         Cursor keypad */
  5974.     insertkeymap( tt, 4392, mkkeyevt(F_KVERB | K_DNARR )) || /* Down Arrow         Down Arrow       Cursor keypad */
  5975.     insertkeymap( tt, 4391, mkkeyevt(F_KVERB | K_RTARR )) || /* Right Arrow        Right Arrow      Cursor keypad */
  5976.     insertkeymap( tt, 4389, mkkeyevt(F_KVERB | K_LFARR )) || /* Left Arrow         Left Arrow       Cursor keypad */
  5977.         /*
  5978.         VC Function keys.
  5979.  
  5980.           VC F1-F10 are on PC F1-F10.
  5981.         */
  5982.     insertkeymap( tt, 368 , mkkeyevt(SOH)) || /* F1               F1               Top Rank F key */
  5983.     insertkeymap( tt, 369 , mkkeyevt(STX)) || /* F2               F2               Top Rank F key */
  5984.     insertkeymap( tt, 370 , mkkeyevt(ETX)) || /* F3               F3               Top Rank F key */
  5985.     insertkeymap( tt, 371 , mkkeyevt(EOT)) || /* F4               F4               Top Rank F key */
  5986.     insertkeymap( tt, 372 , mkkeyevt(ENQ)) || /* F5               F5               Top Rank F key */
  5987.     insertkeymap( tt, 373 , mkkeyevt(ACK)) || /* F6               F6               Top Rank F key */
  5988.     insertkeymap( tt, 374 , mkkeyevt(DC2)) || /* F7               F7               Top Rank F key */
  5989.     insertkeymap( tt, 375 , mkkeyevt(DC4)) || /* F8               F8               Top Rank F key */
  5990.     insertkeymap( tt, 376 , mkkeyevt(XFS)) || /* F9               F9               Top Rank F key */
  5991.     insertkeymap( tt, 377 , mkkeyevt(XGS)) || /* F10              F10              Top Rank F key */
  5992.     insertkeymap( tt, 378 , mkkeyevt(XRS)) || /* F11              F11              Top Rank F key */
  5993.     insertkeymap( tt, 379 , mkkeyevt(US))  || /* F12              F12              Top Rank F key */
  5994.  
  5995.     insertkeymap( tt, 264,  mkkeyevt(BS)) ||            /* Backspace */
  5996.     insertkeymap( tt, 777,  mkliteralevt("~\x09")) ||   /* Shift-Tab */
  5997.     insertkeymap( tt, 265,  mkkeyevt(HT)) ||            /* Tab */
  5998.     insertkeymap( tt, 4398, mkkeyevt(STX)) ||           /* Del */
  5999.     insertkeymap( tt, 4397, mkkeyevt(NAK)) ||           /* Ins          Gray-Insert */
  6000.     insertkeymap( tt, 4388, mkliteralevt("~\x12")) ||   /* Home                 Gray-Home */
  6001.     insertkeymap( tt, 4387, mkliteralevt("~\x0F")) ||   /* End          Gray-End */
  6002.     insertkeymap( tt, 4385, mkkeyevt(ENQ)) ||           /* PgUp                 Gray-PgUp */
  6003.     insertkeymap( tt, 4386, mkkeyevt(SOH)) ||           /* PgDn                 Gray-PgDn */
  6004.  
  6005.     insertkeymap( tt, 302, mkkeyevt(DEL)) ||            /* KpDel                Kp-Del */
  6006.     insertkeymap( tt, 301, mkkeyevt(EOT))               /* KpIns                Kp-Ins */
  6007.          )
  6008.         return -1;
  6009.     return 0;
  6010. }
  6011.  
  6012. int
  6013. defwyseasciikm( int tt )
  6014. {
  6015.     if ( defbasekm(tt) ||
  6016.          /*
  6017.         ; WYSE Cursor keys
  6018.         */
  6019.     insertkeymap( tt, 4390, mkkeyevt(F_KVERB | K_UPARR )) || /* Up Arrow           Up Arrow         Cursor keypad */
  6020.     insertkeymap( tt, 4392, mkkeyevt(F_KVERB | K_DNARR )) || /* Down Arrow         Down Arrow       Cursor keypad */
  6021.     insertkeymap( tt, 4391, mkkeyevt(F_KVERB | K_RTARR )) || /* Right Arrow        Right Arrow      Cursor keypad */
  6022.     insertkeymap( tt, 4389, mkkeyevt(F_KVERB | K_LFARR )) || /* Left Arrow         Left Arrow       Cursor keypad */
  6023.  
  6024.     insertkeymap( tt, 294, mkkeyevt(F_KVERB | K_UPARR )) || /* Kp-Up Arrow     */
  6025.     insertkeymap( tt, 296, mkkeyevt(F_KVERB | K_DNARR )) || /* Kp-Down Arrow   */
  6026.     insertkeymap( tt, 295, mkkeyevt(F_KVERB | K_RTARR )) || /* Kp-Right Arrow  */
  6027.     insertkeymap( tt, 293, mkkeyevt(F_KVERB | K_LFARR )) || /* Kp-Left Arrow   */
  6028.  
  6029.         /*
  6030.         ) || WYSE Function keys, WY30, WY50 and WY60 and above.
  6031.         ) ||
  6032.         ) ||   WYSE F1-F10 are on PC F1-F10.
  6033.         ) ||   WYSE F11-F16 are on PC Alt-F1 through Alt-F6.
  6034.         ) ||   WYSE Shift F1-F10 are on PC Shift-F1 - ShiftF10
  6035.         ) ||   WYSE Shift F11-F16 are on PC Alt-Shift-F1 through Alt-Shift-F16.
  6036.         */
  6037.     insertkeymap( tt, 368 , mkkeyevt(F_KVERB | K_WYF01  )) || /* F1                 F1              Top Rank F key */
  6038.     insertkeymap( tt, 369 , mkkeyevt(F_KVERB | K_WYF02  )) || /* F2                 F2              Top Rank F key */
  6039.     insertkeymap( tt, 370 , mkkeyevt(F_KVERB | K_WYF03  )) || /* F3                 F3              Top Rank F key */
  6040.     insertkeymap( tt, 371 , mkkeyevt(F_KVERB | K_WYF04  )) || /* F4                 F4              Top Rank F key */
  6041.     insertkeymap( tt, 372 , mkkeyevt(F_KVERB | K_WYF05  )) || /* F5                 F5              Top Rank F key */
  6042.     insertkeymap( tt, 373 , mkkeyevt(F_KVERB | K_WYF06  )) || /* F6                 F6              Top Rank F key */
  6043.     insertkeymap( tt, 374 , mkkeyevt(F_KVERB | K_WYF07  )) || /* F7                 F7              Top Rank F key */
  6044.     insertkeymap( tt, 375 , mkkeyevt(F_KVERB | K_WYF08  )) || /* F8                 F8              Top Rank F key */
  6045.     insertkeymap( tt, 376 , mkkeyevt(F_KVERB | K_WYF09  )) || /* F9                 F9              Top Rank F key */
  6046.     insertkeymap( tt, 377 , mkkeyevt(F_KVERB | K_WYF10  )) || /* F10                F10             Top Rank F key */
  6047.     insertkeymap( tt, 378 , mkkeyevt(F_KVERB | K_WYF11 )) || /* F11                 F11             Top Rank F key */
  6048.     insertkeymap( tt, 379 , mkkeyevt(F_KVERB | K_WYF12 )) || /* F12                 F12             Top Rank F key */
  6049.  
  6050.     insertkeymap( tt, 2416, mkkeyevt(F_KVERB | K_WYF11 )) || /* F11                Alt-F1           Top Rank F key */
  6051.     insertkeymap( tt, 2417, mkkeyevt(F_KVERB | K_WYF12 )) || /* F12                Alt-F2           Top Rank F key */
  6052.     insertkeymap( tt, 2418, mkkeyevt(F_KVERB | K_WYF13 )) || /* F13                Alt-F3           Top Rank F key */
  6053.     insertkeymap( tt, 2419, mkkeyevt(F_KVERB | K_WYF14 )) || /* F14                Alt-F4           Top Rank F key */
  6054.     insertkeymap( tt, 2420, mkkeyevt(F_KVERB | K_WYF15 )) || /* F15                Alt-F5           Top Rank F key */
  6055.     insertkeymap( tt, 2421, mkkeyevt(F_KVERB | K_WYF16 )) || /* F16                Alt-F6           Top Rank F key */
  6056.  
  6057.     insertkeymap( tt, 4466, mkkeyevt(F_KVERB | K_WYF13 )) || /* F13                LK450 F13        Top Rank F key */
  6058.     insertkeymap( tt, 4467, mkkeyevt(F_KVERB | K_WYF14 )) || /* F14                LK450 F14        Top Rank F key */
  6059.     insertkeymap( tt, 4468, mkkeyevt(F_KVERB | K_WYF15 )) || /* F15                LK450 F15        Top Rank F key */
  6060.     insertkeymap( tt, 4469, mkkeyevt(F_KVERB | K_WYF16 )) || /* F16                LK450 F16        Top Rank F key */
  6061.  
  6062.     insertkeymap( tt, 4476, mkkeyevt(F_KVERB | K_WYF13 )) || /* F13                LK450 F13        Top Rank F key */
  6063.     insertkeymap( tt, 4477, mkkeyevt(F_KVERB | K_WYF14 )) || /* F14                LK450 F14        Top Rank F key */
  6064.     insertkeymap( tt, 4478, mkkeyevt(F_KVERB | K_WYF15 )) || /* F15                LK450 F15        Top Rank F key */
  6065.     insertkeymap( tt, 4479, mkkeyevt(F_KVERB | K_WYF16 )) || /* F16                LK450 F16        Top Rank F key */
  6066.  
  6067.     insertkeymap( tt, 880 , mkkeyevt(F_KVERB | K_WYSF01  )) || /* Shift-F1         Shift-F1         Top Rank F key */
  6068.     insertkeymap( tt, 881 , mkkeyevt(F_KVERB | K_WYSF02  )) || /* Shift-F2         Shift-F2         Top Rank F key */
  6069.     insertkeymap( tt, 882 , mkkeyevt(F_KVERB | K_WYSF03  )) || /* Shift-F3         Shift-F3         Top Rank F key */
  6070.     insertkeymap( tt, 883 , mkkeyevt(F_KVERB | K_WYSF04  )) || /* Shift-F4         Shift-F4         Top Rank F key */
  6071.     insertkeymap( tt, 884 , mkkeyevt(F_KVERB | K_WYSF05  )) || /* Shift-F5         Shift-F5         Top Rank F key */
  6072.     insertkeymap( tt, 885 , mkkeyevt(F_KVERB | K_WYSF06  )) || /* Shift-F6         Shift-F6         Top Rank F key */
  6073.     insertkeymap( tt, 886 , mkkeyevt(F_KVERB | K_WYSF07  )) || /* Shift-F7         Shift-F7         Top Rank F key */
  6074.     insertkeymap( tt, 887 , mkkeyevt(F_KVERB | K_WYSF08  )) || /* Shift-F8         Shift-F8         Top Rank F key */
  6075.     insertkeymap( tt, 888 , mkkeyevt(F_KVERB | K_WYSF09  )) || /* Shift-F9         Shift-F9         Top Rank F key */
  6076.     insertkeymap( tt, 889 , mkkeyevt(F_KVERB | K_WYSF10  )) || /* Shift-F10        Shift-F10        Top Rank F key */
  6077.     insertkeymap( tt, 890 , mkkeyevt(F_KVERB | K_WYSF11  )) || /* Shift-F11        Shift-F11     Top Rank F key */
  6078.     insertkeymap( tt, 891 , mkkeyevt(F_KVERB | K_WYSF12  )) || /* Shift-F12        Shift-F12     Top Rank F key */
  6079.  
  6080.     insertkeymap( tt, 2928, mkkeyevt(F_KVERB | K_WYSF11 )) || /* Shift-F11         Alt-Shift-F1     Top Rank F key */
  6081.     insertkeymap( tt, 2929, mkkeyevt(F_KVERB | K_WYSF12 )) || /* Shift-F12         Alt-Shift-F2     Top Rank F key */
  6082.     insertkeymap( tt, 2930, mkkeyevt(F_KVERB | K_WYSF13 )) || /* Shift-F13         Alt-Shift-F3     Top Rank F key */
  6083.     insertkeymap( tt, 2931, mkkeyevt(F_KVERB | K_WYSF14 )) || /* Shift-F14         Alt-Shift-F4     Top Rank F key */
  6084.     insertkeymap( tt, 2932, mkkeyevt(F_KVERB | K_WYSF15 )) || /* Shift-F15         Alt-Shift-F5     Top Rank F key */
  6085.     insertkeymap( tt, 2933, mkkeyevt(F_KVERB | K_WYSF16 )) || /* Shift-F16         Alt-Shift-F6     Top Rank F key */
  6086.  
  6087.     insertkeymap( tt, 4978, mkkeyevt(F_KVERB | K_WYSF13 )) || /* Shift-F13         LK450 Shift-F13  Top Rank F key */
  6088.     insertkeymap( tt, 4979, mkkeyevt(F_KVERB | K_WYSF14 )) || /* Shift-F14         LK450 Shift-F14  Top Rank F key */
  6089.     insertkeymap( tt, 4980, mkkeyevt(F_KVERB | K_WYSF15 )) || /* Shift-F15         LK450 Shift-F15  Top Rank F key */
  6090.     insertkeymap( tt, 4981, mkkeyevt(F_KVERB | K_WYSF16 )) || /* Shift-F16         LK450 Shift-F16  Top Rank F key */
  6091.  
  6092.     insertkeymap( tt, 4988, mkkeyevt(F_KVERB | K_WYSF13 )) || /* Shift-F13         LK450 Shift-F13  Top Rank F key */
  6093.     insertkeymap( tt, 4989, mkkeyevt(F_KVERB | K_WYSF14 )) || /* Shift-F14         LK450 Shift-F14  Top Rank F key */
  6094.     insertkeymap( tt, 4990, mkkeyevt(F_KVERB | K_WYSF15 )) || /* Shift-F15         LK450 Shift-F15  Top Rank F key */
  6095.     insertkeymap( tt, 4991, mkkeyevt(F_KVERB | K_WYSF16 )) || /* Shift-F16         LK450 Shift-F16  Top Rank F key */
  6096.  
  6097.     insertkeymap( tt, 264,  mkkeyevt(F_KVERB | K_WYBS    )) ||  /* Backspace */
  6098.     insertkeymap( tt, 776,  mkkeyevt(F_KVERB | K_WYSBS   )) ||  /* Shift-Backspace */
  6099.     insertkeymap( tt, 27,   mkkeyevt(F_KVERB | K_WYESC   )) ||  /* Esc */
  6100.     insertkeymap( tt, 539,  mkkeyevt(F_KVERB | K_WYSESC   )) ||  /* Shift-Esc */
  6101.     insertkeymap( tt, 302,  mkkeyevt(DEL )) ||              /* Kp-Del */
  6102.     insertkeymap( tt, 4398, mkkeyevt(F_KVERB | K_WYDELCHAR )) ||        /* Gray-Del */
  6103.     insertkeymap( tt, 4910, mkkeyevt(F_KVERB | K_WYDELLN )) || /* Shift-Gray-Del */
  6104.     insertkeymap( tt, 4387, mkkeyevt(F_KVERB | K_WYCLRLN )) || /* Gray-End */
  6105.     insertkeymap( tt, 291,  mkkeyevt(F_KVERB | K_WYCLRLN )) || /* End */
  6106.     insertkeymap( tt, 4899, mkkeyevt(F_KVERB | K_WYCLRPG )) || /* Shift-Gray-End */
  6107.     insertkeymap( tt, 4365, mkkeyevt(F_KVERB | K_WYENTER )) || /* Gray-Enter */
  6108.     insertkeymap( tt, 4877, mkkeyevt(F_KVERB | K_WYSENTER )) || /* Shift-Gray-Enter */
  6109.     insertkeymap( tt, 269,  mkkeyevt(F_KVERB | K_WYRETURN )) || /* Enter */
  6110.     insertkeymap( tt, 781,  mkkeyevt(F_KVERB | K_WYSRETURN )) || /* Shift-Enter */
  6111.     insertkeymap( tt, 292,  mkkeyevt(F_KVERB | K_WYHOME )) ||  /* Kp-Home */
  6112.     insertkeymap( tt, 804,  mkkeyevt(F_KVERB | K_WYSHOME )) || /* Shift-Kp-Home */
  6113.     insertkeymap( tt, 4388, mkkeyevt(F_KVERB | K_WYHOME )) ||  /* Gray-Home */
  6114.     insertkeymap( tt, 4900, mkkeyevt(F_KVERB | K_WYSHOME )) || /* Shift-Gray-Home */
  6115.     insertkeymap( tt, 301,  mkkeyevt(F_KVERB | K_WYREPLACE )) || /* Kp-Ins */
  6116.     insertkeymap( tt, 813,  mkkeyevt(F_KVERB | K_WYINSERT )) ||  /* Shift-Kp-Ins */
  6117.     insertkeymap( tt, 4397, mkkeyevt(F_KVERB | K_WYINSERT )) || /* Gray-Insert */
  6118.     insertkeymap( tt, 4909, mkkeyevt(F_KVERB | K_WYREPLACE )) ||  /* Shift-Gray-Insert */
  6119.     insertkeymap( tt, 290,  mkkeyevt(F_KVERB | K_WYPGNEXT )) ||  /* Kp-PgDn */
  6120.     insertkeymap( tt, 4386, mkkeyevt(F_KVERB | K_WYPGNEXT )) ||  /* Gray-PgDn */
  6121.     insertkeymap( tt, 289,  mkkeyevt(F_KVERB | K_WYPGPREV )) ||  /* Kp-PgUp */
  6122.     insertkeymap( tt, 4385, mkkeyevt(F_KVERB | K_WYPGPREV )) ||  /* Kp-PgUp */
  6123.     insertkeymap( tt, 265,  mkkeyevt(F_KVERB | K_WYTAB )) ||     /* Tab */
  6124.     insertkeymap( tt, 777,  mkkeyevt(F_KVERB | K_WYSTAB ))    /* Shift-Tab */
  6125.     )
  6126.         return -1;
  6127.     return 0;
  6128. }
  6129.  
  6130. int
  6131. deftviasciikm(int tt)
  6132. {
  6133.     if ( defbasekm(tt) ||
  6134.         /*
  6135.         ; Televideo Cursor keys
  6136.         */
  6137.     insertkeymap( tt, 4390, mkkeyevt(F_KVERB | K_UPARR )) || /* Up Arrow       */
  6138.     insertkeymap( tt, 4392, mkkeyevt(F_KVERB | K_DNARR )) || /* Down Arrow     */
  6139.     insertkeymap( tt, 4391, mkkeyevt(F_KVERB | K_RTARR )) || /* Right Arrow    */
  6140.     insertkeymap( tt, 4389, mkkeyevt(F_KVERB | K_LFARR )) || /* Left Arrow     */
  6141.  
  6142.     insertkeymap( tt, 4902, mkkeyevt(F_ESC | 'j' )) ||  /* Shift-Gray-UpArrow */
  6143.     insertkeymap( tt, 4904, mkkeyevt(LF )) ||           /* Shift-Gray-DnArrow */
  6144.     insertkeymap( tt, 4903, mkkeyevt(FF )) ||           /* Shift-Gray-RightArrow */
  6145.     insertkeymap( tt, 4901, mkkeyevt(BS )) ||           /* Shift-Gray-LeftArrow */
  6146.  
  6147.     insertkeymap( tt, 294, mkkeyevt(F_KVERB | K_UPARR )) || /* Kp-Up Arrow     */
  6148.     insertkeymap( tt, 296, mkkeyevt(F_KVERB | K_DNARR )) || /* Kp-Down Arrow   */
  6149.     insertkeymap( tt, 295, mkkeyevt(F_KVERB | K_RTARR )) || /* Kp-Right Arrow  */
  6150.     insertkeymap( tt, 293, mkkeyevt(F_KVERB | K_LFARR )) || /* Kp-Left Arrow   */
  6151.  
  6152.     insertkeymap( tt, 806, mkkeyevt(F_ESC | 'j' )) ||   /* Shift-Kp-UpArrow */
  6153.     insertkeymap( tt, 808, mkkeyevt(LF )) ||            /* Shift-Kp-DnArrow */
  6154.     insertkeymap( tt, 807, mkkeyevt(FF )) ||            /* Shift-Kp-RightArrow */
  6155.     insertkeymap( tt, 805, mkkeyevt(BS )) ||            /* Shift-Kp-LeftArrow */
  6156.  
  6157.         /*
  6158.         ) || Televideo Function keys
  6159.         ) ||
  6160.         ) ||   Televideo F1-F10 are on PC F1-F10.
  6161.         ) ||   Televideo F11-F16 are on PC Alt-F1 through Alt-F6.
  6162.         ) ||   Televideo Shift F1-F10 are on PC Shift-F1 - ShiftF10
  6163.         ) ||   Televideo Shift F11-F16 are on PC Alt-Shift-F1 through Alt-Shift-F16.
  6164.         */
  6165.     insertkeymap( tt, 368 , mkkeyevt(F_KVERB | K_TVIF01  )) || /* F1                 F1              Top Rank F key */
  6166.     insertkeymap( tt, 369 , mkkeyevt(F_KVERB | K_TVIF02  )) || /* F2                 F2              Top Rank F key */
  6167.     insertkeymap( tt, 370 , mkkeyevt(F_KVERB | K_TVIF03  )) || /* F3                 F3              Top Rank F key */
  6168.     insertkeymap( tt, 371 , mkkeyevt(F_KVERB | K_TVIF04  )) || /* F4                 F4              Top Rank F key */
  6169.     insertkeymap( tt, 372 , mkkeyevt(F_KVERB | K_TVIF05  )) || /* F5                 F5              Top Rank F key */
  6170.     insertkeymap( tt, 373 , mkkeyevt(F_KVERB | K_TVIF06  )) || /* F6                 F6              Top Rank F key */
  6171.     insertkeymap( tt, 374 , mkkeyevt(F_KVERB | K_TVIF07  )) || /* F7                 F7              Top Rank F key */
  6172.     insertkeymap( tt, 375 , mkkeyevt(F_KVERB | K_TVIF08  )) || /* F8                 F8              Top Rank F key */
  6173.     insertkeymap( tt, 376 , mkkeyevt(F_KVERB | K_TVIF09  )) || /* F9                 F9              Top Rank F key */
  6174.     insertkeymap( tt, 377 , mkkeyevt(F_KVERB | K_TVIF10  )) || /* F10                F10             Top Rank F key */
  6175.     insertkeymap( tt, 378 , mkkeyevt(F_KVERB | K_TVIF11 )) || /* F11                 F11             Top Rank F key */
  6176.     insertkeymap( tt, 379 , mkkeyevt(F_KVERB | K_TVIF12 )) || /* F12                 F12             Top Rank F key */
  6177.  
  6178.     insertkeymap( tt, 2416, mkkeyevt(F_KVERB | K_TVIF11 )) || /* F11                Alt-F1           Top Rank F key */
  6179.     insertkeymap( tt, 2417, mkkeyevt(F_KVERB | K_TVIF12 )) || /* F12                Alt-F2           Top Rank F key */
  6180.     insertkeymap( tt, 2418, mkkeyevt(F_KVERB | K_TVIF13 )) || /* F13                Alt-F3           Top Rank F key */
  6181.     insertkeymap( tt, 2419, mkkeyevt(F_KVERB | K_TVIF14 )) || /* F14                Alt-F4           Top Rank F key */
  6182.     insertkeymap( tt, 2420, mkkeyevt(F_KVERB | K_TVIF15 )) || /* F15                Alt-F5           Top Rank F key */
  6183.     insertkeymap( tt, 2421, mkkeyevt(F_KVERB | K_TVIF16 )) || /* F16                Alt-F6           Top Rank F key */
  6184.  
  6185.     insertkeymap( tt, 4466, mkkeyevt(F_KVERB | K_TVIF13 )) || /* F13                LK450 F13        Top Rank F key */
  6186.     insertkeymap( tt, 4467, mkkeyevt(F_KVERB | K_TVIF14 )) || /* F14                LK450 F14        Top Rank F key */
  6187.     insertkeymap( tt, 4468, mkkeyevt(F_KVERB | K_TVIF15 )) || /* F15                LK450 F15        Top Rank F key */
  6188.     insertkeymap( tt, 4469, mkkeyevt(F_KVERB | K_TVIF16 )) || /* F16                LK450 F16        Top Rank F key */
  6189.  
  6190.     insertkeymap( tt, 4476, mkkeyevt(F_KVERB | K_TVIF13 )) || /* F13                LK450 F13        Top Rank F key */
  6191.     insertkeymap( tt, 4477, mkkeyevt(F_KVERB | K_TVIF14 )) || /* F14                LK450 F14        Top Rank F key */
  6192.     insertkeymap( tt, 4478, mkkeyevt(F_KVERB | K_TVIF15 )) || /* F15                LK450 F15        Top Rank F key */
  6193.     insertkeymap( tt, 4479, mkkeyevt(F_KVERB | K_TVIF16 )) || /* F16                LK450 F16        Top Rank F key */
  6194.  
  6195.     insertkeymap( tt, 880 , mkkeyevt(F_KVERB | K_TVISF01  )) || /* Shift-F1         Shift-F1         Top Rank F key */
  6196.     insertkeymap( tt, 881 , mkkeyevt(F_KVERB | K_TVISF02  )) || /* Shift-F2         Shift-F2         Top Rank F key */
  6197.     insertkeymap( tt, 882 , mkkeyevt(F_KVERB | K_TVISF03  )) || /* Shift-F3         Shift-F3         Top Rank F key */
  6198.     insertkeymap( tt, 883 , mkkeyevt(F_KVERB | K_TVISF04  )) || /* Shift-F4         Shift-F4         Top Rank F key */
  6199.     insertkeymap( tt, 884 , mkkeyevt(F_KVERB | K_TVISF05  )) || /* Shift-F5         Shift-F5         Top Rank F key */
  6200.     insertkeymap( tt, 885 , mkkeyevt(F_KVERB | K_TVISF06  )) || /* Shift-F6         Shift-F6         Top Rank F key */
  6201.     insertkeymap( tt, 886 , mkkeyevt(F_KVERB | K_TVISF07  )) || /* Shift-F7         Shift-F7         Top Rank F key */
  6202.     insertkeymap( tt, 887 , mkkeyevt(F_KVERB | K_TVISF08  )) || /* Shift-F8         Shift-F8         Top Rank F key */
  6203.     insertkeymap( tt, 888 , mkkeyevt(F_KVERB | K_TVISF09  )) || /* Shift-F9         Shift-F9         Top Rank F key */
  6204.     insertkeymap( tt, 889 , mkkeyevt(F_KVERB | K_TVISF10  )) || /* Shift-F10        Shift-F10        Top Rank F key */
  6205.     insertkeymap( tt, 890 , mkkeyevt(F_KVERB | K_TVISF11  )) || /* Shift-F11        Shift-F11     Top Rank F key */
  6206.     insertkeymap( tt, 891 , mkkeyevt(F_KVERB | K_TVISF12  )) || /* Shift-F12        Shift-F12     Top Rank F key */
  6207.  
  6208.     insertkeymap( tt, 2928, mkkeyevt(F_KVERB | K_TVISF11 )) || /* Shift-F11         Alt-Shift-F1     Top Rank F key */
  6209.     insertkeymap( tt, 2929, mkkeyevt(F_KVERB | K_TVISF12 )) || /* Shift-F12         Alt-Shift-F2     Top Rank F key */
  6210.     insertkeymap( tt, 2930, mkkeyevt(F_KVERB | K_TVISF13 )) || /* Shift-F13         Alt-Shift-F3     Top Rank F key */
  6211.     insertkeymap( tt, 2931, mkkeyevt(F_KVERB | K_TVISF14 )) || /* Shift-F14         Alt-Shift-F4     Top Rank F key */
  6212.     insertkeymap( tt, 2932, mkkeyevt(F_KVERB | K_TVISF15 )) || /* Shift-F15         Alt-Shift-F5     Top Rank F key */
  6213.     insertkeymap( tt, 2933, mkkeyevt(F_KVERB | K_TVISF16 )) || /* Shift-F16         Alt-Shift-F6     Top Rank F key */
  6214.  
  6215.     insertkeymap( tt, 4978, mkkeyevt(F_KVERB | K_TVISF13 )) || /* Shift-F13         LK450 Shift-F13  Top Rank F key */
  6216.     insertkeymap( tt, 4979, mkkeyevt(F_KVERB | K_TVISF14 )) || /* Shift-F14         LK450 Shift-F14  Top Rank F key */
  6217.     insertkeymap( tt, 4980, mkkeyevt(F_KVERB | K_TVISF15 )) || /* Shift-F15         LK450 Shift-F15  Top Rank F key */
  6218.     insertkeymap( tt, 4981, mkkeyevt(F_KVERB | K_TVISF16 )) || /* Shift-F16         LK450 Shift-F16  Top Rank F key */
  6219.  
  6220.     insertkeymap( tt, 4988, mkkeyevt(F_KVERB | K_TVISF13 )) || /* Shift-F13         LK450 Shift-F13  Top Rank F key */
  6221.     insertkeymap( tt, 4989, mkkeyevt(F_KVERB | K_TVISF14 )) || /* Shift-F14         LK450 Shift-F14  Top Rank F key */
  6222.     insertkeymap( tt, 4990, mkkeyevt(F_KVERB | K_TVISF15 )) || /* Shift-F15         LK450 Shift-F15  Top Rank F key */
  6223.     insertkeymap( tt, 4991, mkkeyevt(F_KVERB | K_TVISF16 )) || /* Shift-F16         LK450 Shift-F16  Top Rank F key */
  6224.  
  6225.     insertkeymap( tt, 264,  mkkeyevt(F_KVERB | K_TVIBS   )) ||  /* Backspace */
  6226.     insertkeymap( tt, 302,  mkkeyevt(DEL )) ||              /* Kp-Del */
  6227.     insertkeymap( tt, 4398, mkkeyevt(F_KVERB | K_TVIDELCHAR )) ||       /* Gray-Del */
  6228.     insertkeymap( tt, 4910, mkkeyevt(F_KVERB | K_TVIDELLN )) || /* Shift-Gray-Del */
  6229.     insertkeymap( tt, 4387, mkkeyevt(F_KVERB | K_TVICLRLN )) || /* Gray-End */
  6230.     insertkeymap( tt, 291,  mkkeyevt(F_KVERB | K_TVICLRLN )) || /* End */
  6231.     insertkeymap( tt, 4899, mkkeyevt(F_KVERB | K_TVICLRPG )) || /* Shift-Gray-End */
  6232.     insertkeymap( tt, 4365, mkkeyevt(F_KVERB | K_TVIENTER )) || /* Gray-Enter */
  6233.     insertkeymap( tt, 269,  mkkeyevt(F_KVERB | K_TVIRETURN )) || /* Enter */
  6234.     insertkeymap( tt, 292,  mkkeyevt(F_KVERB | K_TVIHOME )) ||  /* Kp-Home */
  6235.     insertkeymap( tt, 804,  mkkeyevt(F_KVERB | K_TVISHOME )) || /* Shift-Kp-Home */
  6236.     insertkeymap( tt, 4388, mkkeyevt(F_KVERB | K_TVIHOME )) ||  /* Gray-Home */
  6237.     insertkeymap( tt, 4900, mkkeyevt(F_KVERB | K_TVISHOME )) || /* Shift-Gray-Home */
  6238.     insertkeymap( tt, 301,  mkkeyevt(F_KVERB | K_TVIREPLACE )) || /* Kp-Ins */
  6239.     insertkeymap( tt, 813,  mkkeyevt(F_KVERB | K_TVIINSERT )) ||  /* Shift-Kp-Ins */
  6240.     insertkeymap( tt, 4397, mkkeyevt(F_KVERB | K_TVIREPLACE )) || /* Gray-Insert */
  6241.     insertkeymap( tt, 4909, mkkeyevt(F_KVERB | K_TVIINSERT )) ||  /* Shift-Gray-Insert */
  6242.     insertkeymap( tt, 290,  mkkeyevt(F_KVERB | K_TVIPGNEXT )) ||  /* Kp-PgDn */
  6243.     insertkeymap( tt, 4386, mkkeyevt(F_KVERB | K_TVIPGNEXT )) ||  /* Gray-PgDn */
  6244.     insertkeymap( tt, 289,  mkkeyevt(F_KVERB | K_TVIPGPREV )) ||  /* Kp-PgUp */
  6245.     insertkeymap( tt, 4385, mkkeyevt(F_KVERB | K_TVIPGPREV )) ||  /* Kp-PgUp */
  6246.     insertkeymap( tt, 265,  mkkeyevt(F_KVERB | K_TVITAB )) ||     /* Tab */
  6247.     insertkeymap( tt, 777,  mkkeyevt(F_KVERB | K_TVISTAB ))    /* Shift-Tab */
  6248.     )
  6249.         return -1;
  6250.  
  6251.     if ( tt == TT_TVI950 ) {
  6252.         insertkeymap( tt, 379 , mkkeyevt(F_KVERB | K_TVISEND ));
  6253.         insertkeymap( tt, 2929, mkkeyevt(F_KVERB | K_TVISSEND ));
  6254.     }
  6255.     return 0;
  6256. }
  6257.  
  6258. int
  6259. deflinuxkm( int tt )
  6260. {
  6261.     if ( defbasekm(tt) ||
  6262.     insertkeymap( tt, 368, mkkeyevt(F_KVERB | K_ANSIF01 )) || /* f1                    */
  6263.     insertkeymap( tt, 369, mkkeyevt(F_KVERB | K_ANSIF02 )) || /* f2                    */
  6264.     insertkeymap( tt, 370, mkkeyevt(F_KVERB | K_ANSIF03 )) || /* f3                    */
  6265.     insertkeymap( tt, 371, mkkeyevt(F_KVERB | K_ANSIF04 )) || /* f4                    */
  6266.     insertkeymap( tt, 372, mkkeyevt(F_KVERB | K_ANSIF05 )) || /* f5                    */
  6267.     insertkeymap( tt, 373, mkkeyevt(F_KVERB | K_ANSIF06 )) || /* f6                    */
  6268.     insertkeymap( tt, 374, mkkeyevt(F_KVERB | K_ANSIF07 )) || /* f7                    */
  6269.     insertkeymap( tt, 375, mkkeyevt(F_KVERB | K_ANSIF08 )) || /* f8                    */
  6270.     insertkeymap( tt, 376, mkkeyevt(F_KVERB | K_ANSIF09 )) || /* f9                    */
  6271.     insertkeymap( tt, 377, mkkeyevt(F_KVERB | K_ANSIF10 )) || /* f10           */
  6272.     insertkeymap( tt, 378, mkkeyevt(F_KVERB | K_ANSIF11 )) || /* f11           */
  6273.     insertkeymap( tt, 379, mkkeyevt(F_KVERB | K_ANSIF12 )) || /* f12           */
  6274.  
  6275.     insertkeymap( tt, 880, mkkeyevt(F_KVERB | K_ANSIF13 )) || /* shift f1              */
  6276.     insertkeymap( tt, 881, mkkeyevt(F_KVERB | K_ANSIF14 )) || /* shift f2              */
  6277.     insertkeymap( tt, 882, mkkeyevt(F_KVERB | K_ANSIF15 )) || /* shift f3              */
  6278.     insertkeymap( tt, 883, mkkeyevt(F_KVERB | K_ANSIF16 )) || /* shift f4              */
  6279.     insertkeymap( tt, 884, mkkeyevt(F_KVERB | K_ANSIF17 )) || /* shift f5              */
  6280.     insertkeymap( tt, 885, mkkeyevt(F_KVERB | K_ANSIF18 )) || /* shift f6              */
  6281.     insertkeymap( tt, 886, mkkeyevt(F_KVERB | K_ANSIF19 )) || /* shift f7              */
  6282.     insertkeymap( tt, 887, mkkeyevt(F_KVERB | K_ANSIF20 )) || /* shift f8              */
  6283.     insertkeymap( tt, 888, mkkeyevt(F_KVERB | K_ANSIF21 )) || /* shift f9              */
  6284.     insertkeymap( tt, 889, mkkeyevt(F_KVERB | K_ANSIF22 )) || /* shift f10        */
  6285.     insertkeymap( tt, 890, mkkeyevt(F_KVERB | K_ANSIF23 )) || /* shift f11        */
  6286.     insertkeymap( tt, 891, mkkeyevt(F_KVERB | K_ANSIF24 )) || /* shift f12        */
  6287.  
  6288.     insertkeymap( tt, 1392, mkkeyevt(F_KVERB | K_ANSIF25 )) || /* control f1      */
  6289.     insertkeymap( tt, 1393, mkkeyevt(F_KVERB | K_ANSIF26 )) || /* control f2      */
  6290.     insertkeymap( tt, 1394, mkkeyevt(F_KVERB | K_ANSIF27 )) || /* control f3      */
  6291.     insertkeymap( tt, 1395, mkkeyevt(F_KVERB | K_ANSIF28 )) || /* control f4      */
  6292.     insertkeymap( tt, 1396, mkkeyevt(F_KVERB | K_ANSIF29 )) || /* control f5      */
  6293.     insertkeymap( tt, 1397, mkkeyevt(F_KVERB | K_ANSIF30 )) || /* control f6      */
  6294.     insertkeymap( tt, 1398, mkkeyevt(F_KVERB | K_ANSIF31 )) || /* control f7      */
  6295.     insertkeymap( tt, 1399, mkkeyevt(F_KVERB | K_ANSIF32 )) || /* control f8      */
  6296.     insertkeymap( tt, 1400, mkkeyevt(F_KVERB | K_ANSIF33 )) || /* control f9      */
  6297.     insertkeymap( tt, 1401, mkkeyevt(F_KVERB | K_ANSIF34 )) || /* control f10       */
  6298.     insertkeymap( tt, 1402, mkkeyevt(F_KVERB | K_ANSIF35 )) || /* control f11       */
  6299.     insertkeymap( tt, 1403, mkkeyevt(F_KVERB | K_ANSIF36 )) || /* control f12       */
  6300.  
  6301.     insertkeymap( tt, 1904, mkkeyevt(F_KVERB | K_ANSIF37 )) || /* control shift f1  */
  6302.     insertkeymap( tt, 1905, mkkeyevt(F_KVERB | K_ANSIF38 )) || /* control shift f2  */
  6303.     insertkeymap( tt, 1906, mkkeyevt(F_KVERB | K_ANSIF39 )) || /* control shift f3  */
  6304.     insertkeymap( tt, 1907, mkkeyevt(F_KVERB | K_ANSIF40 )) || /* control shift f4  */
  6305.     insertkeymap( tt, 1908, mkkeyevt(F_KVERB | K_ANSIF41 )) || /* control shift f5  */
  6306.     insertkeymap( tt, 1909, mkkeyevt(F_KVERB | K_ANSIF42 )) || /* control shift f6  */
  6307.     insertkeymap( tt, 1910, mkkeyevt(F_KVERB | K_ANSIF43 )) || /* control shift f7  */
  6308.     insertkeymap( tt, 1911, mkkeyevt(F_KVERB | K_ANSIF44 )) || /* control shift f8  */
  6309.     insertkeymap( tt, 1912, mkkeyevt(F_KVERB | K_ANSIF45 )) || /* control shift f9  */
  6310.     insertkeymap( tt, 1913, mkkeyevt(F_KVERB | K_ANSIF46 )) || /* control shift f10 */
  6311.     insertkeymap( tt, 1914, mkkeyevt(F_KVERB | K_ANSIF47 )) || /* control shift f11 */
  6312.     insertkeymap( tt, 1915, mkkeyevt(F_KVERB | K_ANSIF48 )) || /* control shift f12 */
  6313.  
  6314.     insertkeymap( tt, 264, mkkeyevt(8)) ||                  /* backspace               */
  6315.  
  6316.     insertkeymap( tt, 777, mkliteralevt("\x1B[Z"))          || /* shift tab            */
  6317.  
  6318.     insertkeymap( tt, 4388, mkkeyevt(F_KVERB | K_ANSIF49 )) || /* home         */
  6319.     insertkeymap( tt, 4385, mkkeyevt(F_KVERB | K_ANSIF51 )) || /* page up              */
  6320.     insertkeymap( tt, 4387, mkkeyevt(F_KVERB | K_ANSIF57 )) || /* end          */
  6321.     insertkeymap( tt, 4386, mkkeyevt(F_KVERB | K_ANSIF59 )) || /* page down            */
  6322.     insertkeymap( tt, 4397, mkkeyevt(F_KVERB | K_ANSIF60 )) || /* insert               */
  6323.     insertkeymap( tt, 4398, mkkeyevt(F_KVERB | K_ANSIF61 )) || /* delete               */
  6324.  
  6325.     insertkeymap( tt, 4390, mkkeyevt(F_KVERB | K_ANSIF50 )) || /* Up Arrow           Up Arrow         Cursor keypad */
  6326.     insertkeymap( tt, 4392, mkkeyevt(F_KVERB | K_ANSIF58 )) || /* Down Arrow         Down Arrow       Cursor keypad */
  6327.     insertkeymap( tt, 4391, mkkeyevt(F_KVERB | K_ANSIF55 )) || /* Right Arrow        Right Arrow      Cursor keypad */
  6328.     insertkeymap( tt, 4389, mkkeyevt(F_KVERB | K_ANSIF53 )) || /* Left Arrow         Left Arrow       Cursor keypad */
  6329.  
  6330.     insertkeymap( tt, 301 , mkkeyevt(F_KVERB | K_ANSIF60 )) || /* KP 0               Keypad 0         Numeric keypad */
  6331.     insertkeymap( tt, 291 , mkkeyevt(F_KVERB | K_ANSIF57 )) || /* KP 1               Keypad 1         Numeric keypad */
  6332.     insertkeymap( tt, 296 , mkkeyevt(F_KVERB | K_ANSIF58 )) || /* KP 2               Keypad 2         Numeric keypad */
  6333.     insertkeymap( tt, 290 , mkkeyevt(F_KVERB | K_ANSIF59 )) || /* KP 3               Keypad 3         Numeric keypad */
  6334.     insertkeymap( tt, 293 , mkkeyevt(F_KVERB | K_ANSIF53 )) || /* KP 4               Keypad 4         Numeric keypad */
  6335.     insertkeymap( tt, 268 , mkkeyevt(F_KVERB | K_ANSIF54 )) || /* KP 5               Keypad 5         Numeric keypad */
  6336.     insertkeymap( tt, 295 , mkkeyevt(F_KVERB | K_ANSIF55 )) || /* KP 6               Keypad 6         Numeric keypad */
  6337.     insertkeymap( tt, 292 , mkkeyevt(F_KVERB | K_ANSIF49 )) || /* KP 7               Keypad 7         Numeric keypad */
  6338.     insertkeymap( tt, 294 , mkkeyevt(F_KVERB | K_ANSIF50 )) || /* KP 8               Keypad 8         Numeric keypad */
  6339.     insertkeymap( tt, 289 , mkkeyevt(F_KVERB | K_ANSIF51 )) || /* KP 9               Keypad 9         Numeric keypad */
  6340.  
  6341.     insertkeymap( tt, 302 , mkkeyevt(F_KVERB | K_ANSIF61 )) || /* keypad delete */
  6342.     insertkeymap( tt, 877 , mkkeyevt(F_KVERB | K_ANSIF52 )) || /* Shift-keypad minus  */
  6343.     insertkeymap( tt, 875 , mkkeyevt(F_KVERB | K_ANSIF56 )) || /* Shift-keypad add    */
  6344.     insertkeymap( tt, 1901, mkkeyevt(F_KVERB | K_ANSIF52 )) || /* Ctrl-Shift-keypad minus  */
  6345.     insertkeymap( tt, 1899, mkkeyevt(F_KVERB | K_ANSIF56 ))    /* Ctrl-Shift-keypad add    */
  6346.     )
  6347.         return -1;
  6348.     return 0;
  6349. }
  6350.  
  6351. int
  6352. defannarbor( int tt )
  6353. {
  6354.     defbasekm(tt);
  6355.     return 0;
  6356. }
  6357.  
  6358. int
  6359. defscoansikm( int tt )
  6360. {
  6361.     if ( defbasekm(tt) ||
  6362.     insertkeymap( tt, 368, mkkeyevt(F_KVERB | K_ANSIF01 )) || /* f1                    */
  6363.     insertkeymap( tt, 369, mkkeyevt(F_KVERB | K_ANSIF02 )) || /* f2                    */
  6364.     insertkeymap( tt, 370, mkkeyevt(F_KVERB | K_ANSIF03 )) || /* f3                    */
  6365.     insertkeymap( tt, 371, mkkeyevt(F_KVERB | K_ANSIF04 )) || /* f4                    */
  6366.     insertkeymap( tt, 372, mkkeyevt(F_KVERB | K_ANSIF05 )) || /* f5                    */
  6367.     insertkeymap( tt, 373, mkkeyevt(F_KVERB | K_ANSIF06 )) || /* f6                    */
  6368.     insertkeymap( tt, 374, mkkeyevt(F_KVERB | K_ANSIF07 )) || /* f7                    */
  6369.     insertkeymap( tt, 375, mkkeyevt(F_KVERB | K_ANSIF08 )) || /* f8                    */
  6370.     insertkeymap( tt, 376, mkkeyevt(F_KVERB | K_ANSIF09 )) || /* f9                    */
  6371.     insertkeymap( tt, 377, mkkeyevt(F_KVERB | K_ANSIF10 )) || /* f10           */
  6372.     insertkeymap( tt, 378, mkkeyevt(F_KVERB | K_ANSIF11 )) || /* f11           */
  6373.     insertkeymap( tt, 379, mkkeyevt(F_KVERB | K_ANSIF12 )) || /* f12           */
  6374.  
  6375.     insertkeymap( tt, 880, mkkeyevt(F_KVERB | K_ANSIF13 )) || /* shift f1              */
  6376.     insertkeymap( tt, 881, mkkeyevt(F_KVERB | K_ANSIF14 )) || /* shift f2              */
  6377.     insertkeymap( tt, 882, mkkeyevt(F_KVERB | K_ANSIF15 )) || /* shift f3              */
  6378.     insertkeymap( tt, 883, mkkeyevt(F_KVERB | K_ANSIF16 )) || /* shift f4              */
  6379.     insertkeymap( tt, 884, mkkeyevt(F_KVERB | K_ANSIF17 )) || /* shift f5              */
  6380.     insertkeymap( tt, 885, mkkeyevt(F_KVERB | K_ANSIF18 )) || /* shift f6              */
  6381.     insertkeymap( tt, 886, mkkeyevt(F_KVERB | K_ANSIF19 )) || /* shift f7              */
  6382.     insertkeymap( tt, 887, mkkeyevt(F_KVERB | K_ANSIF20 )) || /* shift f8              */
  6383.     insertkeymap( tt, 888, mkkeyevt(F_KVERB | K_ANSIF21 )) || /* shift f9              */
  6384.     insertkeymap( tt, 889, mkkeyevt(F_KVERB | K_ANSIF22 )) || /* shift f10        */
  6385.     insertkeymap( tt, 890, mkkeyevt(F_KVERB | K_ANSIF23 )) || /* shift f11        */
  6386.     insertkeymap( tt, 891, mkkeyevt(F_KVERB | K_ANSIF24 )) || /* shift f12        */
  6387.  
  6388.     insertkeymap( tt, 1392, mkkeyevt(F_KVERB | K_ANSIF25 )) || /* control f1      */
  6389.     insertkeymap( tt, 1393, mkkeyevt(F_KVERB | K_ANSIF26 )) || /* control f2      */
  6390.     insertkeymap( tt, 1394, mkkeyevt(F_KVERB | K_ANSIF27 )) || /* control f3      */
  6391.     insertkeymap( tt, 1395, mkkeyevt(F_KVERB | K_ANSIF28 )) || /* control f4      */
  6392.     insertkeymap( tt, 1396, mkkeyevt(F_KVERB | K_ANSIF29 )) || /* control f5      */
  6393.     insertkeymap( tt, 1397, mkkeyevt(F_KVERB | K_ANSIF30 )) || /* control f6      */
  6394.     insertkeymap( tt, 1398, mkkeyevt(F_KVERB | K_ANSIF31 )) || /* control f7      */
  6395.     insertkeymap( tt, 1399, mkkeyevt(F_KVERB | K_ANSIF32 )) || /* control f8      */
  6396.     insertkeymap( tt, 1400, mkkeyevt(F_KVERB | K_ANSIF33 )) || /* control f9      */
  6397.     insertkeymap( tt, 1401, mkkeyevt(F_KVERB | K_ANSIF34 )) || /* control f10       */
  6398.     insertkeymap( tt, 1402, mkkeyevt(F_KVERB | K_ANSIF35 )) || /* control f11       */
  6399.     insertkeymap( tt, 1403, mkkeyevt(F_KVERB | K_ANSIF36 )) || /* control f12       */
  6400.  
  6401.     insertkeymap( tt, 1904, mkkeyevt(F_KVERB | K_ANSIF37 )) || /* control shift f1  */
  6402.     insertkeymap( tt, 1905, mkkeyevt(F_KVERB | K_ANSIF38 )) || /* control shift f2  */
  6403.     insertkeymap( tt, 1906, mkkeyevt(F_KVERB | K_ANSIF39 )) || /* control shift f3  */
  6404.     insertkeymap( tt, 1907, mkkeyevt(F_KVERB | K_ANSIF40 )) || /* control shift f4  */
  6405.     insertkeymap( tt, 1908, mkkeyevt(F_KVERB | K_ANSIF41 )) || /* control shift f5  */
  6406.     insertkeymap( tt, 1909, mkkeyevt(F_KVERB | K_ANSIF42 )) || /* control shift f6  */
  6407.     insertkeymap( tt, 1910, mkkeyevt(F_KVERB | K_ANSIF43 )) || /* control shift f7  */
  6408.     insertkeymap( tt, 1911, mkkeyevt(F_KVERB | K_ANSIF44 )) || /* control shift f8  */
  6409.     insertkeymap( tt, 1912, mkkeyevt(F_KVERB | K_ANSIF45 )) || /* control shift f9  */
  6410.     insertkeymap( tt, 1913, mkkeyevt(F_KVERB | K_ANSIF46 )) || /* control shift f10 */
  6411.     insertkeymap( tt, 1914, mkkeyevt(F_KVERB | K_ANSIF47 )) || /* control shift f11 */
  6412.     insertkeymap( tt, 1915, mkkeyevt(F_KVERB | K_ANSIF48 )) || /* control shift f12 */
  6413.  
  6414.     insertkeymap( tt, 264, mkkeyevt(8                    )) || /* backspace            */
  6415.  
  6416.     insertkeymap( tt, 777, mkkeyevt(F_KVERB | K_ANSIF14  )) || /* shift tab            */
  6417.  
  6418.     insertkeymap( tt, 4388, mkkeyevt(F_KVERB | K_ANSIF49 )) || /* home         */
  6419.     insertkeymap( tt, 4385, mkkeyevt(F_KVERB | K_ANSIF51 )) || /* page up              */
  6420.     insertkeymap( tt, 4387, mkkeyevt(F_KVERB | K_ANSIF57 )) || /* end          */
  6421.     insertkeymap( tt, 4386, mkkeyevt(F_KVERB | K_ANSIF59 )) || /* page down            */
  6422.     insertkeymap( tt, 4397, mkkeyevt(F_KVERB | K_ANSIF60 )) || /* insert               */
  6423.     insertkeymap( tt, 4398, mkkeyevt(DEL                 )) || /* delete               */
  6424.  
  6425.     insertkeymap( tt, 4390, mkkeyevt(F_KVERB | K_ANSIF50 )) || /* Up Arrow           Up Arrow         Cursor keypad */
  6426.     insertkeymap( tt, 4392, mkkeyevt(F_KVERB | K_ANSIF58 )) || /* Down Arrow         Down Arrow       Cursor keypad */
  6427.     insertkeymap( tt, 4391, mkkeyevt(F_KVERB | K_ANSIF55 )) || /* Right Arrow        Right Arrow      Cursor keypad */
  6428.     insertkeymap( tt, 4389, mkkeyevt(F_KVERB | K_ANSIF53 )) || /* Left Arrow         Left Arrow       Cursor keypad */
  6429.  
  6430.     insertkeymap( tt, 301 , mkkeyevt(F_KVERB | K_ANSIF60 )) || /* KP 0               Keypad 0         Numeric keypad */
  6431.     insertkeymap( tt, 291 , mkkeyevt(F_KVERB | K_ANSIF57 )) || /* KP 1               Keypad 1         Numeric keypad */
  6432.     insertkeymap( tt, 296 , mkkeyevt(F_KVERB | K_ANSIF58 )) || /* KP 2               Keypad 2         Numeric keypad */
  6433.     insertkeymap( tt, 290 , mkkeyevt(F_KVERB | K_ANSIF59 )) || /* KP 3               Keypad 3         Numeric keypad */
  6434.     insertkeymap( tt, 293 , mkkeyevt(F_KVERB | K_ANSIF53 )) || /* KP 4               Keypad 4         Numeric keypad */
  6435.     insertkeymap( tt, 268 , mkkeyevt(F_KVERB | K_ANSIF54 )) || /* KP 5               Keypad 5         Numeric keypad */
  6436.     insertkeymap( tt, 295 , mkkeyevt(F_KVERB | K_ANSIF55 )) || /* KP 6               Keypad 6         Numeric keypad */
  6437.     insertkeymap( tt, 292 , mkkeyevt(F_KVERB | K_ANSIF49 )) || /* KP 7               Keypad 7         Numeric keypad */
  6438.     insertkeymap( tt, 294 , mkkeyevt(F_KVERB | K_ANSIF50 )) || /* KP 8               Keypad 8         Numeric keypad */
  6439.     insertkeymap( tt, 289 , mkkeyevt(F_KVERB | K_ANSIF51 )) || /* KP 9               Keypad 9         Numeric keypad */
  6440.  
  6441.     insertkeymap( tt, 302 , mkkeyevt(DEL                 )) || /* keypad delete */
  6442.     insertkeymap( tt, 877 , mkkeyevt(F_KVERB | K_ANSIF52 )) || /* Shift-keypad minus  */
  6443.     insertkeymap( tt, 875 , mkkeyevt(F_KVERB | K_ANSIF56 )) || /* Shift-keypad add    */
  6444.     insertkeymap( tt, 1901, mkkeyevt(F_KVERB | K_ANSIF52 )) || /* Ctrl-Shift-keypad minus  */
  6445.     insertkeymap( tt, 1899, mkkeyevt(F_KVERB | K_ANSIF56 ))    /* Ctrl-Shift-keypad add    */
  6446.     )
  6447.         return -1;
  6448.     return 0;
  6449. }
  6450.  
  6451. int
  6452. defat386km( int tt )
  6453. {
  6454.     if ( defbasekm(tt) ||
  6455.     insertkeymap( tt, 368, mkkeyevt(F_KVERB | K_ANSIF01 )) || /* f1                    */
  6456.     insertkeymap( tt, 369, mkkeyevt(F_KVERB | K_ANSIF02 )) || /* f2                    */
  6457.     insertkeymap( tt, 370, mkkeyevt(F_KVERB | K_ANSIF03 )) || /* f3                    */
  6458.     insertkeymap( tt, 371, mkkeyevt(F_KVERB | K_ANSIF04 )) || /* f4                    */
  6459.     insertkeymap( tt, 372, mkkeyevt(F_KVERB | K_ANSIF05 )) || /* f5                    */
  6460.     insertkeymap( tt, 373, mkkeyevt(F_KVERB | K_ANSIF06 )) || /* f6                    */
  6461.     insertkeymap( tt, 374, mkkeyevt(F_KVERB | K_ANSIF07 )) || /* f7                    */
  6462.     insertkeymap( tt, 375, mkkeyevt(F_KVERB | K_ANSIF08 )) || /* f8                    */
  6463.     insertkeymap( tt, 376, mkkeyevt(F_KVERB | K_ANSIF09 )) || /* f9                    */
  6464.     insertkeymap( tt, 377, mkkeyevt(F_KVERB | K_ANSIF10 )) || /* f10           */
  6465.     insertkeymap( tt, 378, mkkeyevt(F_KVERB | K_ANSIF11 )) || /* f11           */
  6466.     insertkeymap( tt, 379, mkkeyevt(F_KVERB | K_ANSIF12 )) || /* f12           */
  6467.  
  6468.     insertkeymap( tt, 880, mkkeyevt(F_KVERB | K_ANSIF13 )) || /* shift f1              */
  6469.     insertkeymap( tt, 881, mkkeyevt(F_KVERB | K_ANSIF14 )) || /* shift f2              */
  6470.     insertkeymap( tt, 882, mkkeyevt(F_KVERB | K_ANSIF15 )) || /* shift f3              */
  6471.     insertkeymap( tt, 883, mkkeyevt(F_KVERB | K_ANSIF16 )) || /* shift f4              */
  6472.     insertkeymap( tt, 884, mkkeyevt(F_KVERB | K_ANSIF17 )) || /* shift f5              */
  6473.     insertkeymap( tt, 885, mkkeyevt(F_KVERB | K_ANSIF18 )) || /* shift f6              */
  6474.     insertkeymap( tt, 886, mkkeyevt(F_KVERB | K_ANSIF19 )) || /* shift f7              */
  6475.     insertkeymap( tt, 887, mkkeyevt(F_KVERB | K_ANSIF20 )) || /* shift f8              */
  6476.     insertkeymap( tt, 888, mkkeyevt(F_KVERB | K_ANSIF21 )) || /* shift f9              */
  6477.     insertkeymap( tt, 889, mkkeyevt(F_KVERB | K_ANSIF22 )) || /* shift f10        */
  6478.     insertkeymap( tt, 890, mkkeyevt(F_KVERB | K_ANSIF23 )) || /* shift f11        */
  6479.     insertkeymap( tt, 891, mkkeyevt(F_KVERB | K_ANSIF24 )) || /* shift f12        */
  6480.  
  6481.     insertkeymap( tt, 1392, mkkeyevt(F_KVERB | K_ANSIF25 )) || /* control f1      */
  6482.     insertkeymap( tt, 1393, mkkeyevt(F_KVERB | K_ANSIF26 )) || /* control f2      */
  6483.     insertkeymap( tt, 1394, mkkeyevt(F_KVERB | K_ANSIF27 )) || /* control f3      */
  6484.     insertkeymap( tt, 1395, mkkeyevt(F_KVERB | K_ANSIF28 )) || /* control f4      */
  6485.     insertkeymap( tt, 1396, mkkeyevt(F_KVERB | K_ANSIF29 )) || /* control f5      */
  6486.     insertkeymap( tt, 1397, mkkeyevt(F_KVERB | K_ANSIF30 )) || /* control f6      */
  6487.     insertkeymap( tt, 1398, mkkeyevt(F_KVERB | K_ANSIF31 )) || /* control f7      */
  6488.     insertkeymap( tt, 1399, mkkeyevt(F_KVERB | K_ANSIF32 )) || /* control f8      */
  6489.     insertkeymap( tt, 1400, mkkeyevt(F_KVERB | K_ANSIF33 )) || /* control f9      */
  6490.     insertkeymap( tt, 1401, mkkeyevt(F_KVERB | K_ANSIF34 )) || /* control f10       */
  6491.     insertkeymap( tt, 1402, mkkeyevt(F_KVERB | K_ANSIF35 )) || /* control f11       */
  6492.     insertkeymap( tt, 1403, mkkeyevt(F_KVERB | K_ANSIF36 )) || /* control f12       */
  6493.  
  6494.     insertkeymap( tt, 1904, mkkeyevt(F_KVERB | K_ANSIF37 )) || /* control shift f1  */
  6495.     insertkeymap( tt, 1905, mkkeyevt(F_KVERB | K_ANSIF38 )) || /* control shift f2  */
  6496.     insertkeymap( tt, 1906, mkkeyevt(F_KVERB | K_ANSIF39 )) || /* control shift f3  */
  6497.     insertkeymap( tt, 1907, mkkeyevt(F_KVERB | K_ANSIF40 )) || /* control shift f4  */
  6498.     insertkeymap( tt, 1908, mkkeyevt(F_KVERB | K_ANSIF41 )) || /* control shift f5  */
  6499.     insertkeymap( tt, 1909, mkkeyevt(F_KVERB | K_ANSIF42 )) || /* control shift f6  */
  6500.     insertkeymap( tt, 1910, mkkeyevt(F_KVERB | K_ANSIF43 )) || /* control shift f7  */
  6501.     insertkeymap( tt, 1911, mkkeyevt(F_KVERB | K_ANSIF44 )) || /* control shift f8  */
  6502.     insertkeymap( tt, 1912, mkkeyevt(F_KVERB | K_ANSIF45 )) || /* control shift f9  */
  6503.     insertkeymap( tt, 1913, mkkeyevt(F_KVERB | K_ANSIF46 )) || /* control shift f10 */
  6504.     insertkeymap( tt, 1914, mkkeyevt(F_KVERB | K_ANSIF47 )) || /* control shift f11 */
  6505.     insertkeymap( tt, 1915, mkkeyevt(F_KVERB | K_ANSIF48 )) || /* control shift f12 */
  6506.  
  6507.     insertkeymap( tt, 264, mkkeyevt(8                   )) || /* backspace             */
  6508.  
  6509. #ifdef COMMENT
  6510.     insertkeymap( tt, 777, mkkeyevt(F_CSI |  'z'        )) || /* shift tab             */
  6511. #else
  6512.         /* As per Pim Zandbergen <pim@cti-software.nl> */
  6513.     insertkeymap( tt, 777, mkkeyevt(29 )) ||            /* shift tab */
  6514. #endif /* COMMENT */
  6515.  
  6516.     insertkeymap( tt, 4388, mkkeyevt(F_KVERB | K_ANSIF49 )) || /* home         */
  6517.     insertkeymap( tt, 4385, mkkeyevt(F_KVERB | K_ANSIF51 )) || /* page up              */
  6518.     insertkeymap( tt, 4387, mkkeyevt(F_KVERB | K_ANSIF57 )) || /* end          */
  6519.     insertkeymap( tt, 4386, mkkeyevt(F_KVERB | K_ANSIF59 )) || /* page down            */
  6520.     insertkeymap( tt, 4397, mkkeyevt(F_KVERB | K_ANSIF60 )) || /* insert               */
  6521.     insertkeymap( tt, 4398, mkkeyevt(DEL                  )) || /* delete              */
  6522.  
  6523.     insertkeymap( tt, 4390, mkkeyevt(F_KVERB | K_ANSIF50 )) || /* Up Arrow           Up Arrow         Cursor keypad */
  6524.     insertkeymap( tt, 4392, mkkeyevt(F_KVERB | K_ANSIF58 )) || /* Down Arrow         Down Arrow       Cursor keypad */
  6525.     insertkeymap( tt, 4391, mkkeyevt(F_KVERB | K_ANSIF55 )) || /* Right Arrow        Right Arrow      Cursor keypad */
  6526.     insertkeymap( tt, 4389, mkkeyevt(F_KVERB | K_ANSIF53 )) || /* Left Arrow         Left Arrow       Cursor keypad */
  6527.  
  6528.     insertkeymap( tt, 301 , mkkeyevt(F_KVERB | K_ANSIF60 )) || /* KP 0               Keypad 0         Numeric keypad */
  6529.     insertkeymap( tt, 291 , mkkeyevt(F_KVERB | K_ANSIF57 )) || /* KP 1               Keypad 1         Numeric keypad */
  6530.     insertkeymap( tt, 296 , mkkeyevt(F_KVERB | K_ANSIF58 )) || /* KP 2               Keypad 2         Numeric keypad */
  6531.     insertkeymap( tt, 290 , mkkeyevt(F_KVERB | K_ANSIF59 )) || /* KP 3               Keypad 3         Numeric keypad */
  6532.     insertkeymap( tt, 293 , mkkeyevt(F_KVERB | K_ANSIF53 )) || /* KP 4               Keypad 4         Numeric keypad */
  6533.     insertkeymap( tt, 268 , mkkeyevt(F_KVERB | K_ANSIF54 )) || /* KP 5               Keypad 5         Numeric keypad */
  6534.     insertkeymap( tt, 295 , mkkeyevt(F_KVERB | K_ANSIF55 )) || /* KP 6               Keypad 6         Numeric keypad */
  6535.     insertkeymap( tt, 292 , mkkeyevt(F_KVERB | K_ANSIF49 )) || /* KP 7               Keypad 7         Numeric keypad */
  6536.     insertkeymap( tt, 294 , mkkeyevt(F_KVERB | K_ANSIF50 )) || /* KP 8               Keypad 8         Numeric keypad */
  6537.     insertkeymap( tt, 289 , mkkeyevt(F_KVERB | K_ANSIF51 )) || /* KP 9               Keypad 9         Numeric keypad */
  6538.  
  6539.     insertkeymap( tt, 302, mkkeyevt(DEL          )) || /* keypad delete */
  6540.     insertkeymap( tt, 877 , mkkeyevt(F_KVERB | K_ANSIF52 )) || /* Shift-keypad minus  */
  6541.     insertkeymap( tt, 875 , mkkeyevt(F_KVERB | K_ANSIF56 )) || /* Shift-keypad add    */
  6542.     insertkeymap( tt, 1901, mkkeyevt(F_KVERB | K_ANSIF52 )) || /* Ctrl-Shift-keypad minus  */
  6543.     insertkeymap( tt, 1899, mkkeyevt(F_KVERB | K_ANSIF56 ))    /* Ctrl-Shift-keypad add    */
  6544.          )
  6545.         return -1;
  6546.     return 0;
  6547. }
  6548.  
  6549. int
  6550. defqnxkm( int tt )
  6551. {
  6552.     defbasekm(tt);
  6553.  
  6554.     insertkeymap( tt, 264, mkkeyevt(DEL));             /* Backspace */
  6555.  
  6556.     insertkeymap( tt, 777, mkliteralevt("\377\200")) ; /* Shift-Tab                    */
  6557.     insertkeymap( tt, 368, mkliteralevt("\377\201")) ; /* f1                   */
  6558.     insertkeymap( tt, 369, mkliteralevt("\377\202")) ; /* f2                   */
  6559.     insertkeymap( tt, 370, mkliteralevt("\377\203")) ; /* f3                   */
  6560.     insertkeymap( tt, 371, mkliteralevt("\377\204")) ; /* f4                   */
  6561.     insertkeymap( tt, 372, mkliteralevt("\377\205")) ; /* f5                   */
  6562.     insertkeymap( tt, 373, mkliteralevt("\377\206")) ; /* f6                   */
  6563.     insertkeymap( tt, 374, mkliteralevt("\377\207")) ; /* f7                   */
  6564.     insertkeymap( tt, 375, mkliteralevt("\377\210")) ; /* f8                   */
  6565.     insertkeymap( tt, 376, mkliteralevt("\377\211")) ; /* f9                   */
  6566.     insertkeymap( tt, 377, mkliteralevt("\377\212")) ; /* f10          */
  6567.  
  6568.     insertkeymap( tt, 880, mkliteralevt("\377\213")) ; /* shift f1             */
  6569.     insertkeymap( tt, 881, mkliteralevt("\377\214")) ; /* shift f2             */
  6570.     insertkeymap( tt, 882, mkliteralevt("\377\215")) ; /* shift f3             */
  6571.     insertkeymap( tt, 883, mkliteralevt("\377\216")) ; /* shift f4             */
  6572.     insertkeymap( tt, 884, mkliteralevt("\377\217")) ; /* shift f5             */
  6573.     insertkeymap( tt, 885, mkliteralevt("\377\220")) ; /* shift f6             */
  6574.     insertkeymap( tt, 886, mkliteralevt("\377\221")) ; /* shift f7             */
  6575.     insertkeymap( tt, 887, mkliteralevt("\377\222")) ; /* shift f8             */
  6576.     insertkeymap( tt, 888, mkliteralevt("\377\223")) ; /* shift f9             */
  6577.     insertkeymap( tt, 889, mkliteralevt("\377\224")) ; /* shift f10       */
  6578.  
  6579.     insertkeymap( tt, 1392, mkliteralevt("\377\225" )) ; /* control f1    */
  6580.     insertkeymap( tt, 1393, mkliteralevt("\377\226" )) ; /* control f2    */
  6581.     insertkeymap( tt, 1394, mkliteralevt("\377\227" )) ; /* control f3    */
  6582.     insertkeymap( tt, 1395, mkliteralevt("\377\230" )) ; /* control f4    */
  6583.     insertkeymap( tt, 1396, mkliteralevt("\377\231" )) ; /* control f5    */
  6584.     insertkeymap( tt, 1397, mkliteralevt("\377\232" )) ; /* control f6    */
  6585.     insertkeymap( tt, 1398, mkliteralevt("\377\233" )) ; /* control f7    */
  6586.     insertkeymap( tt, 1399, mkliteralevt("\377\234" )) ; /* control f8    */
  6587.     insertkeymap( tt, 1400, mkliteralevt("\377\235" )) ; /* control f9    */
  6588.     insertkeymap( tt, 1401, mkliteralevt("\377\236" )) ; /* control f10       */
  6589.     insertkeymap( tt, 1289, mkliteralevt("\377\237")) ; /* Ctrl-Tab  */
  6590.  
  6591.     insertkeymap( tt, 292, mkliteralevt("\377\240")) ; /* Home */
  6592. /*    insertkeymap( tt, 294, mkliteralevt("\377\241")) ; /* Up */
  6593.     insertkeymap( tt, 289, mkliteralevt("\377\242")) ; /* PgUp */
  6594.     insertkeymap( tt, 365, mkliteralevt("\377\243")) ; /* Minus */
  6595. /*    insertkeymap( tt, 293, mkliteralevt("\377\244")) ; /* Left */
  6596.     insertkeymap( tt, 268, mkliteralevt("\377\245")) ; /* Blank */
  6597. /*    insertkeymap( tt, 295, mkliteralevt("\377\246")) ; /* Right */
  6598.     insertkeymap( tt, 363, mkliteralevt("\377\247")) ; /* Plus */
  6599.     insertkeymap( tt, 291, mkliteralevt("\377\250")) ; /* End */
  6600. /*    insertkeymap( tt, 296, mkliteralevt("\377\251")) ; /* Down */
  6601.     insertkeymap( tt, 290, mkliteralevt("\377\252")) ; /* PgDn */
  6602.     insertkeymap( tt, 301, mkliteralevt("\377\253")) ; /* Ins */
  6603.     insertkeymap( tt, 302, mkliteralevt("\377\254")) ; /* Del */
  6604.     insertkeymap( tt, 298, mkliteralevt("\377\255")) ; /* PrtScrn */
  6605.     insertkeymap( tt, 378, mkliteralevt("\377\256")) ; /* f11          */
  6606.     insertkeymap( tt, 379, mkliteralevt("\377\257")) ; /* f12          */
  6607.  
  6608.     insertkeymap( tt, 1316, mkliteralevt("\377\260")) ; /* Ctrl-Home */
  6609.     insertkeymap( tt, 1318, mkliteralevt("\377\261")) ; /* Ctrl-Up */
  6610.     insertkeymap( tt, 1313, mkliteralevt("\377\262")) ; /* Ctrl-PgUp */
  6611.     insertkeymap( tt, 1389, mkliteralevt("\377\263")) ; /* Ctrl-Minus */
  6612.     insertkeymap( tt, 1317, mkliteralevt("\377\264")) ; /* Ctrl-Left */
  6613.     insertkeymap( tt, 1292, mkliteralevt("\377\265")) ; /* Ctrl-Blank */
  6614.     insertkeymap( tt, 1319, mkliteralevt("\377\266")) ; /* Ctrl-Right */
  6615.     insertkeymap( tt, 1387, mkliteralevt("\377\267")) ; /* Ctrl-Plus */
  6616.     insertkeymap( tt, 1315, mkliteralevt("\377\270")) ; /* Ctrl-End */
  6617.     insertkeymap( tt, 1320, mkliteralevt("\377\271")) ; /* Ctrl-Down */
  6618.     insertkeymap( tt, 1314, mkliteralevt("\377\272")) ; /* Ctrl-PgDn */
  6619.     insertkeymap( tt, 1325, mkliteralevt("\377\273")) ; /* Ctrl-Ins */
  6620.     insertkeymap( tt, 1326, mkliteralevt("\377\274")) ; /* Ctrl-Del */
  6621.     insertkeymap( tt, 1322, mkliteralevt("\377\275")) ; /* Ctrl-PrtScrn */
  6622.     insertkeymap( tt, 1402, mkliteralevt("\377\276")) ; /* Ctrl-f11            */
  6623.     insertkeymap( tt, 1403, mkliteralevt("\377\277")) ; /* Ctrl-f12            */
  6624.  
  6625.     insertkeymap( tt, 2340, mkliteralevt("\377\300")) ; /* Alt-Home */
  6626.     insertkeymap( tt, 2342, mkliteralevt("\377\301")) ; /* Alt-Up */
  6627.     insertkeymap( tt, 2337, mkliteralevt("\377\302")) ; /* Alt-PgUp */
  6628.     insertkeymap( tt, 2413, mkliteralevt("\377\303")) ; /* Alt-Minus */
  6629.     insertkeymap( tt, 2341, mkliteralevt("\377\304")) ; /* Alt-Left */
  6630.     insertkeymap( tt, 2316, mkliteralevt("\377\305")) ; /* Alt-Blank */
  6631.     insertkeymap( tt, 2343, mkliteralevt("\377\306")) ; /* Alt-Right */
  6632.     insertkeymap( tt, 2411, mkliteralevt("\377\307")) ; /* Alt-Plus */
  6633.     insertkeymap( tt, 2339, mkliteralevt("\377\310")) ; /* Alt-End */
  6634.     insertkeymap( tt, 2344, mkliteralevt("\377\311")) ; /* Alt-Down */
  6635.     insertkeymap( tt, 2338, mkliteralevt("\377\312")) ; /* Alt-PgDn */
  6636.     insertkeymap( tt, 2349, mkliteralevt("\377\313")) ; /* Alt-Ins */
  6637.     insertkeymap( tt, 2350, mkliteralevt("\377\314")) ; /* Alt-Del */
  6638.     insertkeymap( tt, 2410, mkliteralevt("\377\315")) ; /* Alt-* */
  6639.     insertkeymap( tt, 2426, mkliteralevt("\377\316")) ; /* Alt-f11             */
  6640.     insertkeymap( tt, 2427, mkliteralevt("\377\317")) ; /* Alt-f12             */
  6641.  
  6642.  
  6643.     insertkeymap( tt, 1293, mkliteralevt("\377\320" )) ; /* ctrl enter  */
  6644.     insertkeymap( tt, 2416, mkliteralevt("\377\321" )) ; /* alt f1  */
  6645.     insertkeymap( tt, 2417, mkliteralevt("\377\322" )) ; /* alt f2  */
  6646.     insertkeymap( tt, 2418, mkliteralevt("\377\323" )) ; /* alt f3  */
  6647.     insertkeymap( tt, 2419, mkliteralevt("\377\324" )) ; /* alt f4  */
  6648.     insertkeymap( tt, 2420, mkliteralevt("\377\325" )) ; /* alt f5  */
  6649.     insertkeymap( tt, 2421, mkliteralevt("\377\326" )) ; /* alt f6  */
  6650.     insertkeymap( tt, 2422, mkliteralevt("\377\327" )) ; /* alt f7  */
  6651.     insertkeymap( tt, 2423, mkliteralevt("\377\330" )) ; /* alt f8  */
  6652.     insertkeymap( tt, 2424, mkliteralevt("\377\331" )) ; /* alt f9  */
  6653.     insertkeymap( tt, 2425, mkliteralevt("\377\332" )) ; /* alt f10 */
  6654.     insertkeymap( tt,  890, mkliteralevt("\377\333" )) ; /* shift f11     */
  6655.     insertkeymap( tt,  891, mkliteralevt("\377\334" )) ; /* shift f12     */
  6656.     insertkeymap( tt, 2346, mkliteralevt("\377\335" )) ; /* SysRq (Alt-PrtScrn)  */
  6657.     insertkeymap( tt, 1151, mkliteralevt("\377\336" )) ; /* Ctrl-BS  */
  6658.     insertkeymap( tt, 2312, mkliteralevt("\377\337" )) ; /* Alt-BS  */
  6659.  
  6660.     insertkeymap( tt, 781, mkliteralevt("\377\340")) ; /* Shift-Enter */
  6661.     insertkeymap( tt, 2145, mkliteralevt("\377\341")) ; /* Alt-a */
  6662.     insertkeymap( tt, 2146, mkliteralevt("\377\342")) ; /* Alt-b */
  6663.     insertkeymap( tt, 2147, mkliteralevt("\377\343")) ; /* Alt-c */
  6664.     insertkeymap( tt, 2148, mkliteralevt("\377\344")) ; /* Alt-d */
  6665.     insertkeymap( tt, 2149, mkliteralevt("\377\345")) ; /* Alt-e */
  6666.     insertkeymap( tt, 2150, mkliteralevt("\377\346")) ; /* Alt-f */
  6667.     insertkeymap( tt, 2151, mkliteralevt("\377\347")) ; /* Alt-g */
  6668.     insertkeymap( tt, 2152, mkliteralevt("\377\350")) ; /* Alt-h */
  6669.     insertkeymap( tt, 2153, mkliteralevt("\377\351")) ; /* Alt-i */
  6670.     insertkeymap( tt, 2154, mkliteralevt("\377\352")) ; /* Alt-j */
  6671.     insertkeymap( tt, 2155, mkliteralevt("\377\353")) ; /* Alt-k */
  6672.     insertkeymap( tt, 2156, mkliteralevt("\377\354")) ; /* Alt-l */
  6673.     insertkeymap( tt, 2157, mkliteralevt("\377\355")) ; /* Alt-m */
  6674.     insertkeymap( tt, 2158, mkliteralevt("\377\356")) ; /* Alt-n */
  6675.     insertkeymap( tt, 2159, mkliteralevt("\377\357")) ; /* Alt-o */
  6676.  
  6677.     insertkeymap( tt, 2160, mkliteralevt("\377\360")) ; /* Alt-p */
  6678.     insertkeymap( tt, 2161, mkliteralevt("\377\361")) ; /* Alt-q */
  6679.     insertkeymap( tt, 2162, mkliteralevt("\377\362")) ; /* Alt-r */
  6680.     insertkeymap( tt, 2163, mkliteralevt("\377\363")) ; /* Alt-s */
  6681.     insertkeymap( tt, 2164, mkliteralevt("\377\364")) ; /* Alt-t */
  6682.     insertkeymap( tt, 2165, mkliteralevt("\377\365")) ; /* Alt-u */
  6683.     insertkeymap( tt, 2166, mkliteralevt("\377\366")) ; /* Alt-v */
  6684.     insertkeymap( tt, 2167, mkliteralevt("\377\367")) ; /* Alt-w */
  6685.     insertkeymap( tt, 2168, mkliteralevt("\377\370")) ; /* Alt-x */
  6686.     insertkeymap( tt, 2169, mkliteralevt("\377\371")) ; /* Alt-y */
  6687.     insertkeymap( tt, 2170, mkliteralevt("\377\372")) ; /* Alt-z */
  6688.     insertkeymap( tt, 2317, mkliteralevt("\377\373")) ; /* Alt-Enter */
  6689.     insertkeymap( tt, 776, mkliteralevt("\377\374")) ; /* Shift-BS */
  6690.  
  6691.     insertkeymap( tt, 5389, mkliteralevt("\377\320" )) ; /* gray-ctrl enter  */
  6692.     insertkeymap( tt, 4877, mkliteralevt("\377\340")) ; /* gray-Shift-Enter */
  6693.     insertkeymap( tt, 6413, mkliteralevt("\377\373")) ; /* gray-Alt-Enter */
  6694.  
  6695.     insertkeymap( tt, 4388, mkliteralevt("\377\240")) ; /* Gray-Home */
  6696. /*    insertkeymap( tt, 4390, mkliteralevt("\377\241")) ; /* Gray-Up */
  6697.     insertkeymap( tt, 4385, mkliteralevt("\377\242")) ; /* Gray-PgUp */
  6698. /*    insertkeymap( tt, 4389, mkliteralevt("\377\244")) ; /* Gray-Left */
  6699. /*    insertkeymap( tt, 4391, mkliteralevt("\377\246")) ; /* Gray-Right */
  6700.     insertkeymap( tt, 4387, mkliteralevt("\377\250")) ; /* Gray-End */
  6701. /*    insertkeymap( tt, 4392, mkliteralevt("\377\251")) ; /* Gray-Down */
  6702.     insertkeymap( tt, 4386, mkliteralevt("\377\252")) ; /* Gray-PgDn */
  6703.     insertkeymap( tt, 4397, mkliteralevt("\377\253")) ; /* Gray-Ins */
  6704.     insertkeymap( tt, 4398, mkliteralevt("\377\254")) ; /* Gray-Del */
  6705.  
  6706.     insertkeymap( tt, 5412, mkliteralevt("\377\260")) ; /* Gray-Ctrl-Home */
  6707.     insertkeymap( tt, 5414, mkliteralevt("\377\261")) ; /* Gray-Ctrl-Up */
  6708.     insertkeymap( tt, 5409, mkliteralevt("\377\262")) ; /* Gray-Ctrl-PgUp */
  6709.     insertkeymap( tt, 5413, mkliteralevt("\377\264")) ; /* Gray-Ctrl-Left */
  6710.     insertkeymap( tt, 5415, mkliteralevt("\377\266")) ; /* Gray-Ctrl-Right */
  6711.     insertkeymap( tt, 5411, mkliteralevt("\377\270")) ; /* Gray-Ctrl-End */
  6712.     insertkeymap( tt, 5416, mkliteralevt("\377\271")) ; /* Gray-Ctrl-Down */
  6713.     insertkeymap( tt, 5410, mkliteralevt("\377\272")) ; /* Gray-Ctrl-PgDn */
  6714.     insertkeymap( tt, 5421, mkliteralevt("\377\273")) ; /* Gray-Ctrl-Ins */
  6715.     insertkeymap( tt, 5422, mkliteralevt("\377\274")) ; /* Gray-Ctrl-Del */
  6716.  
  6717.     insertkeymap( tt, 6436, mkliteralevt("\377\300")) ; /* Gray-Alt-Home */
  6718.     insertkeymap( tt, 6438, mkliteralevt("\377\301")) ; /* Gray-Alt-Up */
  6719.     insertkeymap( tt, 6433, mkliteralevt("\377\302")) ; /* Gray-Alt-PgUp */
  6720.     insertkeymap( tt, 6437, mkliteralevt("\377\304")) ; /* Gray-Alt-Left */
  6721.     insertkeymap( tt, 6439, mkliteralevt("\377\306")) ; /* Gray-Alt-Right */
  6722.     insertkeymap( tt, 6435, mkliteralevt("\377\310")) ; /* Gray-Alt-End */
  6723.     insertkeymap( tt, 6440, mkliteralevt("\377\311")) ; /* Gray-Alt-Down */
  6724.     insertkeymap( tt, 6434, mkliteralevt("\377\312")) ; /* Gray-Alt-PgDn */
  6725.     insertkeymap( tt, 6445, mkliteralevt("\377\313")) ; /* Gray-Alt-Ins */
  6726.     insertkeymap( tt, 6446, mkliteralevt("\377\314")) ; /* Gray-Alt-Del */
  6727.  
  6728.     /* insertkeymap( tt, 875,  mkliteralevt("\377\247"));  /* Shift-Gray-Add */
  6729.     return 0;
  6730. }
  6731.  
  6732. int
  6733. defaixkm( int tt )
  6734. {
  6735.     defbasekm(tt);
  6736.  
  6737.     insertkeymap( tt, 264, mkkeyevt(BS));             /* Backspace             */
  6738.     insertkeymap( tt, 2312, mkliteralevt("\033[071q")); /* Alt-Backspace         */
  6739.     insertkeymap( tt, 1151, mkkeyevt(DEL));           /* Ctrl-Backspace        */
  6740.  
  6741.     insertkeymap( tt, 1289, mkliteralevt("\033[072q")); /* Ctrl-Tab              */
  6742.     insertkeymap( tt, 777, mkliteralevt("\033[Z")) ;    /* Shift-Tab           */
  6743.  
  6744.     insertkeymap( tt, 2317, mkliteralevt("\033[100q")) ; /* Alt-Enter            */
  6745.  
  6746.     insertkeymap( tt, 368, mkliteralevt("\033[001q")) ; /* f1                  */
  6747.     insertkeymap( tt, 369, mkliteralevt("\033[002q")) ; /* f2                  */
  6748.     insertkeymap( tt, 370, mkliteralevt("\033[003q")) ; /* f3                  */
  6749.     insertkeymap( tt, 371, mkliteralevt("\033[004q")) ; /* f4                  */
  6750.     insertkeymap( tt, 372, mkliteralevt("\033[005q")) ; /* f5                  */
  6751.     insertkeymap( tt, 373, mkliteralevt("\033[006q")) ; /* f6                  */
  6752.     insertkeymap( tt, 374, mkliteralevt("\033[007q")) ; /* f7                  */
  6753.     insertkeymap( tt, 375, mkliteralevt("\033[008q")) ; /* f8                  */
  6754.     insertkeymap( tt, 376, mkliteralevt("\033[009q")) ; /* f9                  */
  6755.     insertkeymap( tt, 377, mkliteralevt("\033[010q")) ; /* f10         */
  6756.     insertkeymap( tt, 378, mkliteralevt("\033[011q")) ; /* f11                 */
  6757.     insertkeymap( tt, 379, mkliteralevt("\033[012q")) ; /* f12         */
  6758.  
  6759.     insertkeymap( tt, 880, mkliteralevt("\033[013q")) ; /* shift f1            */
  6760.     insertkeymap( tt, 881, mkliteralevt("\033[014q")) ; /* shift f2            */
  6761.     insertkeymap( tt, 882, mkliteralevt("\033[015q")) ; /* shift f3            */
  6762.     insertkeymap( tt, 883, mkliteralevt("\033[016q")) ; /* shift f4            */
  6763.     insertkeymap( tt, 884, mkliteralevt("\033[017q")) ; /* shift f5            */
  6764.     insertkeymap( tt, 885, mkliteralevt("\033[018q")) ; /* shift f6            */
  6765.     insertkeymap( tt, 886, mkliteralevt("\033[019q")) ; /* shift f7            */
  6766.     insertkeymap( tt, 887, mkliteralevt("\033[020q")) ; /* shift f8            */
  6767.     insertkeymap( tt, 888, mkliteralevt("\033[021q")) ; /* shift f9            */
  6768.     insertkeymap( tt, 889, mkliteralevt("\033[022q")) ; /* shift f10      */
  6769.     insertkeymap( tt, 890, mkliteralevt("\033[023q")) ; /* shift f11           */
  6770.     insertkeymap( tt, 891, mkliteralevt("\033[024q")) ; /* shift f12      */
  6771.  
  6772.     insertkeymap( tt, 1392, mkliteralevt("\033[025q" )) ; /* control f1   */
  6773.     insertkeymap( tt, 1393, mkliteralevt("\033[026q" )) ; /* control f2   */
  6774.     insertkeymap( tt, 1394, mkliteralevt("\033[027q" )) ; /* control f3   */
  6775.     insertkeymap( tt, 1395, mkliteralevt("\033[028q" )) ; /* control f4   */
  6776.     insertkeymap( tt, 1396, mkliteralevt("\033[029q" )) ; /* control f5   */
  6777.     insertkeymap( tt, 1397, mkliteralevt("\033[030q" )) ; /* control f6   */
  6778.     insertkeymap( tt, 1398, mkliteralevt("\033[031q" )) ; /* control f7   */
  6779.     insertkeymap( tt, 1399, mkliteralevt("\033[032q" )) ; /* control f8   */
  6780.     insertkeymap( tt, 1400, mkliteralevt("\033[033q" )) ; /* control f9   */
  6781.     insertkeymap( tt, 1401, mkliteralevt("\033[034q" )) ; /* control f10       */
  6782.     insertkeymap( tt, 1402, mkliteralevt("\033[035q" )) ; /* control f11          */
  6783.     insertkeymap( tt, 1403, mkliteralevt("\033[036q" )) ; /* control f12       */
  6784.  
  6785.     insertkeymap( tt, 2416, mkliteralevt("\033[037q" )) ; /* alt f1       */
  6786.     insertkeymap( tt, 2417, mkliteralevt("\033[038q" )) ; /* alt f2       */
  6787.     insertkeymap( tt, 2418, mkliteralevt("\033[039q" )) ; /* alt f3       */
  6788.     insertkeymap( tt, 2419, mkliteralevt("\033[040q" )) ; /* alt f4       */
  6789.     insertkeymap( tt, 2420, mkliteralevt("\033[041q" )) ; /* alt f5       */
  6790.     insertkeymap( tt, 2421, mkliteralevt("\033[042q" )) ; /* alt f6       */
  6791.     insertkeymap( tt, 2422, mkliteralevt("\033[043q" )) ; /* alt f7       */
  6792.     insertkeymap( tt, 2423, mkliteralevt("\033[044q" )) ; /* alt f8       */
  6793.     insertkeymap( tt, 2424, mkliteralevt("\033[045q" )) ; /* alt f9       */
  6794.     insertkeymap( tt, 2425, mkliteralevt("\033[046q" )) ; /* alt f10       */
  6795.     insertkeymap( tt, 2426, mkliteralevt("\033[047q" )) ; /* alt f11      */
  6796.     insertkeymap( tt, 2427, mkliteralevt("\033[048q" )) ; /* alt f12       */
  6797.  
  6798.     insertkeymap( tt, 4388, mkliteralevt("\033[H")) ; /* Gray-Home */
  6799.     /* insertkeymap( tt, 4390, mkliteralevt("\033[A")) ; /* Gray-Up */
  6800.     insertkeymap( tt, 4385, mkliteralevt("\033[150q")) ; /* Gray-PgUp */
  6801.     /* insertkeymap( tt, 4389, mkliteralevt("\033[D")) ; /* Gray-Left */
  6802.     /* insertkeymap( tt, 4391, mkliteralevt("\033[C")) ; /* Gray-Right */
  6803.     insertkeymap( tt, 4387, mkliteralevt("\033[146q")) ; /* Gray-End */
  6804.     /* insertkeymap( tt, 4392, mkliteralevt("\033[B")) ; /* Gray-Down */
  6805.     insertkeymap( tt, 4386, mkliteralevt("\033[154q")) ; /* Gray-PgDn */
  6806.     insertkeymap( tt, 4397, mkliteralevt("\033[139q")) ; /* Gray-Ins */
  6807.     insertkeymap( tt, 4398, mkliteralevt("\033[P")) ; /* Gray-Del */
  6808.  
  6809.     insertkeymap( tt, 4900, mkliteralevt("\033[143q")) ; /* Gray-Shift-Home */
  6810.     insertkeymap( tt, 4902, mkliteralevt("\033[161q")) ; /* Gray-Shift-Up */
  6811.     insertkeymap( tt, 4897, mkliteralevt("\033[151q")) ; /* Gray-Shift-PgUp */
  6812.     insertkeymap( tt, 4901, mkliteralevt("\033[158q")) ; /* Gray-Shift-Left */
  6813.     insertkeymap( tt, 4903, mkliteralevt("\033[167q")) ; /* Gray-Shift-Right */
  6814.     insertkeymap( tt, 4899, mkliteralevt("\033[147q")) ; /* Gray-Shift-End */
  6815.     insertkeymap( tt, 4904, mkliteralevt("\033[164q")) ; /* Gray-Shift-Down */
  6816.     insertkeymap( tt, 4898, mkliteralevt("\033[155q")) ; /* Gray-Shift-PgDn */
  6817.     insertkeymap( tt, 4909, mkliteralevt("\033[139q")) ; /* Gray-Shift-Ins */
  6818.     insertkeymap( tt, 4910, mkliteralevt("\033[P")) ; /* Gray-Shift-Del */
  6819.  
  6820.     insertkeymap( tt, 5412, mkliteralevt("\033[144q")) ; /* Gray-Ctrl-Home */
  6821.     insertkeymap( tt, 5414, mkliteralevt("\033[162q")) ; /* Gray-Ctrl-Up */
  6822.     insertkeymap( tt, 5409, mkliteralevt("\033[152q")) ; /* Gray-Ctrl-PgUp */
  6823.     insertkeymap( tt, 5413, mkliteralevt("\033[159q")) ; /* Gray-Ctrl-Left */
  6824.     insertkeymap( tt, 5415, mkliteralevt("\033[168q")) ; /* Gray-Ctrl-Right */
  6825.     insertkeymap( tt, 5411, mkliteralevt("\033[148q")) ; /* Gray-Ctrl-End */
  6826.     insertkeymap( tt, 5416, mkliteralevt("\033[165q")) ; /* Gray-Ctrl-Down */
  6827.     insertkeymap( tt, 5410, mkliteralevt("\033[156q")) ; /* Gray-Ctrl-PgDn */
  6828.     insertkeymap( tt, 5421, mkliteralevt("\033[140q")) ; /* Gray-Ctrl-Ins */
  6829.     insertkeymap( tt, 5422, mkliteralevt("\033[142q")) ; /* Gray-Ctrl-Del */
  6830.  
  6831.     insertkeymap( tt, 6436, mkliteralevt("\033[145q")) ; /* Gray-Alt-Home */
  6832.     insertkeymap( tt, 6438, mkliteralevt("\033[162q")) ; /* Gray-Alt-Up */
  6833.     insertkeymap( tt, 6433, mkliteralevt("\033[153q")) ; /* Gray-Alt-PgUp */
  6834.     insertkeymap( tt, 6437, mkliteralevt("\033[160q")) ; /* Gray-Alt-Left */
  6835.     insertkeymap( tt, 6439, mkliteralevt("\033[169q")) ; /* Gray-Alt-Right */
  6836.     insertkeymap( tt, 6435, mkliteralevt("\033[149q")) ; /* Gray-Alt-End */
  6837.     insertkeymap( tt, 6440, mkliteralevt("\033[165q")) ; /* Gray-Alt-Down */
  6838.     insertkeymap( tt, 6434, mkliteralevt("\033[157q")) ; /* Gray-Alt-PgDn */
  6839.     insertkeymap( tt, 6445, mkliteralevt("\033[141q")) ; /* Gray-Alt-Ins */
  6840.     insertkeymap( tt, 6446, mkliteralevt("\033[M")) ; /* Gray-Alt-Del */
  6841.  
  6842.     insertkeymap( tt, 298, mkliteralevt("\033[209q")) ; /* PrtScrn */
  6843.     insertkeymap( tt, 1322, mkliteralevt("\033[211q")) ; /* Ctrl-PrtScrn */
  6844.     insertkeymap( tt, 2346, mkliteralevt("\033[212q" )) ; /* SysRq (Alt-PrtScrn)  */
  6845.  
  6846.     insertkeymap( tt, 1316, mkliteralevt("\033[172q")) ; /* Ctrl-Home */
  6847.     insertkeymap( tt, 1318, mkliteralevt("\033[182q")) ; /* Ctrl-Up */
  6848.     insertkeymap( tt, 1313, mkliteralevt("\033[190q")) ; /* Ctrl-PgUp */
  6849.     insertkeymap( tt, 1389, mkliteralevt("\033[198q")) ; /* Ctrl-Minus */
  6850.     insertkeymap( tt, 1317, mkliteralevt("\033[174q")) ; /* Ctrl-Left */
  6851.     insertkeymap( tt, 1292, mkliteralevt("\033[184q")) ; /* Ctrl-Blank */
  6852.     insertkeymap( tt, 1319, mkliteralevt("\033[192q")) ; /* Ctrl-Right */
  6853.     insertkeymap( tt, 1387, mkliteralevt("\033[200q")) ; /* Ctrl-Plus */
  6854.     insertkeymap( tt, 1315, mkliteralevt("\033[176q")) ; /* Ctrl-End */
  6855.     insertkeymap( tt, 1320, mkliteralevt("\033[186q")) ; /* Ctrl-Down */
  6856.     insertkeymap( tt, 1314, mkliteralevt("\033[194q")) ; /* Ctrl-PgDn */
  6857.     insertkeymap( tt, 1325, mkliteralevt("\033[178q")) ; /* Ctrl-Ins */
  6858.     insertkeymap( tt, 1326, mkliteralevt("\033[196q")) ; /* Ctrl-Del */
  6859.     insertkeymap( tt, 1386, mkliteralevt("\033[187q")) ; /* Ctrl-Multiply */
  6860.     insertkeymap( tt, 5487, mkliteralevt("\033[179q")) ; /* Ctrl-Divide */
  6861.  
  6862.     insertkeymap( tt, 2413, mkliteralevt("\033[199q")) ; /* Alt-Minus */
  6863.     insertkeymap( tt, 2411, mkliteralevt("\033[201q")) ; /* Alt-Plus */
  6864.     insertkeymap( tt, 2350, mkliteralevt("\033[197q")) ; /* Alt-Del */
  6865.     insertkeymap( tt, 2410, mkliteralevt("\033[188q")) ; /* Alt-Multiply */
  6866.     insertkeymap( tt, 6511, mkliteralevt("\033[180q")) ; /* Alt-Divide         */
  6867.  
  6868.     insertkeymap( tt, 1329, mkliteralevt("\033[049q")) ; /* Ctrl-1 */
  6869.     insertkeymap( tt, 1331, mkliteralevt("\033[050q")) ; /* Ctrl-3 */
  6870.     insertkeymap( tt, 1332, mkliteralevt("\033[051q")) ; /* Ctrl-4 */
  6871.     insertkeymap( tt, 1333, mkliteralevt("\033[052q")) ; /* Ctrl-5 */
  6872.     insertkeymap( tt, 1335, mkliteralevt("\033[053q")) ; /* Ctrl-7 */
  6873.     insertkeymap( tt, 1336, mkliteralevt("\033[054q")) ; /* Ctrl-8 */
  6874.     insertkeymap( tt, 1337, mkliteralevt("\033[055q")) ; /* Ctrl-9 */
  6875.     insertkeymap( tt, 1328, mkliteralevt("\033[056q")) ; /* Ctrl-0 */
  6876.     insertkeymap( tt, 1472, mkliteralevt("\033[057q")) ; /* Ctrl-` */
  6877.  
  6878.     insertkeymap( tt, 2097, mkliteralevt("\033[058q")) ; /* Alt-1 */
  6879.     insertkeymap( tt, 2098, mkliteralevt("\033[059q")) ; /* Alt-2 */
  6880.     insertkeymap( tt, 2099, mkliteralevt("\033[060q")) ; /* Alt-3 */
  6881.     insertkeymap( tt, 2100, mkliteralevt("\033[061q")) ; /* Alt-4 */
  6882.     insertkeymap( tt, 2101, mkliteralevt("\033[062q")) ; /* Alt-5 */
  6883.     insertkeymap( tt, 2102, mkliteralevt("\033[063q")) ; /* Alt-6 */
  6884.     insertkeymap( tt, 2103, mkliteralevt("\033[064q")) ; /* Alt-7 */
  6885.     insertkeymap( tt, 2104, mkliteralevt("\033[065q")) ; /* Alt-8 */
  6886.     insertkeymap( tt, 2105, mkliteralevt("\033[066q")) ; /* Alt-9 */
  6887.     insertkeymap( tt, 2096, mkliteralevt("\033[067q")) ; /* Alt-0 */
  6888.  
  6889.     insertkeymap( tt, 2161, mkliteralevt("\033[074q")) ; /* Alt-q */
  6890.     insertkeymap( tt, 2167, mkliteralevt("\033[075q")) ; /* Alt-w */
  6891.     insertkeymap( tt, 2149, mkliteralevt("\033[076q")) ; /* Alt-e */
  6892.     insertkeymap( tt, 2162, mkliteralevt("\033[077q")) ; /* Alt-r */
  6893.     insertkeymap( tt, 2164, mkliteralevt("\033[078q")) ; /* Alt-t */
  6894.     insertkeymap( tt, 2169, mkliteralevt("\033[079q")) ; /* Alt-y */
  6895.     insertkeymap( tt, 2165, mkliteralevt("\033[080q")) ; /* Alt-u */
  6896.     insertkeymap( tt, 2153, mkliteralevt("\033[081q")) ; /* Alt-i */
  6897.     insertkeymap( tt, 2159, mkliteralevt("\033[082q")) ; /* Alt-o */
  6898.     insertkeymap( tt, 2160, mkliteralevt("\033[083q")) ; /* Alt-p */
  6899.  
  6900.     insertkeymap( tt, 2145, mkliteralevt("\033[087q")) ; /* Alt-a */
  6901.     insertkeymap( tt, 2163, mkliteralevt("\033[088q")) ; /* Alt-s */
  6902.     insertkeymap( tt, 2148, mkliteralevt("\033[089q")) ; /* Alt-d */
  6903.     insertkeymap( tt, 2150, mkliteralevt("\033[090q")) ; /* Alt-f */
  6904.     insertkeymap( tt, 2151, mkliteralevt("\033[091q")) ; /* Alt-g */
  6905.     insertkeymap( tt, 2152, mkliteralevt("\033[092q")) ; /* Alt-h */
  6906.     insertkeymap( tt, 2154, mkliteralevt("\033[093q")) ; /* Alt-j */
  6907.     insertkeymap( tt, 2155, mkliteralevt("\033[094q")) ; /* Alt-k */
  6908.     insertkeymap( tt, 2156, mkliteralevt("\033[095q")) ; /* Alt-l */
  6909.  
  6910.     insertkeymap( tt, 2170, mkliteralevt("\033[101q")) ; /* Alt-z */
  6911.     insertkeymap( tt, 2168, mkliteralevt("\033[102q")) ; /* Alt-x */
  6912.     insertkeymap( tt, 2147, mkliteralevt("\033[103q")) ; /* Alt-c */
  6913.     insertkeymap( tt, 2166, mkliteralevt("\033[104q")) ; /* Alt-v */
  6914.     insertkeymap( tt, 2146, mkliteralevt("\033[105q")) ; /* Alt-b */
  6915.     insertkeymap( tt, 2158, mkliteralevt("\033[106q")) ; /* Alt-n */
  6916.     insertkeymap( tt, 2157, mkliteralevt("\033[107q")) ; /* Alt-m */
  6917.  
  6918.     return 0;
  6919. }
  6920.  
  6921.  
  6922. int
  6923. defsunkm( int tt )
  6924. {
  6925.     defbasekm(tt);
  6926.  
  6927.     /* The only ones that I am sure of are F1-F9 from the termcap entry */
  6928.  
  6929.  
  6930.  
  6931.     insertkeymap( tt, 264, mkkeyevt(BS));             /* Backspace             */
  6932.  
  6933.     insertkeymap( tt, 368, mkliteralevt("\033[224z")) ; /* f1          */
  6934.     insertkeymap( tt, 369, mkliteralevt("\033[225z")) ; /* f2          */
  6935.     insertkeymap( tt, 370, mkliteralevt("\033[226z")) ; /* f3          */
  6936.     insertkeymap( tt, 371, mkliteralevt("\033[227z")) ; /* f4          */
  6937.     insertkeymap( tt, 372, mkliteralevt("\033[228z")) ; /* f5          */
  6938.     insertkeymap( tt, 373, mkliteralevt("\033[229z")) ; /* f6          */
  6939.     insertkeymap( tt, 374, mkliteralevt("\033[230z")) ; /* f7          */
  6940.     insertkeymap( tt, 375, mkliteralevt("\033[231z")) ; /* f8          */
  6941.     insertkeymap( tt, 376, mkliteralevt("\033[232z")) ; /* f9          */
  6942.     insertkeymap( tt, 377, mkliteralevt("\033[233z")) ; /* f10         */
  6943.     insertkeymap( tt, 378, mkliteralevt("\033[234z")) ; /* f11         */
  6944.     insertkeymap( tt, 379, mkliteralevt("\033[235z")) ; /* f12         */
  6945.  
  6946.     insertkeymap( tt, 880, mkliteralevt("\033[224z")) ; /* shift f1            */
  6947.     insertkeymap( tt, 881, mkliteralevt("\033[225z")) ; /* shift f2            */
  6948.     insertkeymap( tt, 882, mkliteralevt("\033[226z")) ; /* shift f3            */
  6949.     insertkeymap( tt, 883, mkliteralevt("\033[227z")) ; /* shift f4            */
  6950.     insertkeymap( tt, 884, mkliteralevt("\033[228z")) ; /* shift f5            */
  6951.     insertkeymap( tt, 885, mkliteralevt("\033[229z")) ; /* shift f6            */
  6952.     insertkeymap( tt, 886, mkliteralevt("\033[230z")) ; /* shift f7            */
  6953.     insertkeymap( tt, 887, mkliteralevt("\033[231z")) ; /* shift f8            */
  6954.     insertkeymap( tt, 888, mkliteralevt("\033[232z")) ; /* shift f9            */
  6955.     insertkeymap( tt, 889, mkliteralevt("\033[233z")) ; /* shift f10      */
  6956.     insertkeymap( tt, 890, mkliteralevt("\033[234z")) ; /* shift f11           */
  6957.     insertkeymap( tt, 891, mkliteralevt("\033[235z")) ; /* shift f12      */
  6958.  
  6959.     insertkeymap( tt, 1392, mkliteralevt("\033[224z" )) ; /* control f1   */
  6960.     insertkeymap( tt, 1393, mkliteralevt("\033[225z" )) ; /* control f2   */
  6961.     insertkeymap( tt, 1394, mkliteralevt("\033[226z" )) ; /* control f3   */
  6962.     insertkeymap( tt, 1395, mkliteralevt("\033[227z" )) ; /* control f4   */
  6963.     insertkeymap( tt, 1396, mkliteralevt("\033[228z" )) ; /* control f5   */
  6964.     insertkeymap( tt, 1397, mkliteralevt("\033[229z" )) ; /* control f6   */
  6965.     insertkeymap( tt, 1398, mkliteralevt("\033[230z" )) ; /* control f7   */
  6966.     insertkeymap( tt, 1399, mkliteralevt("\033[231z" )) ; /* control f8   */
  6967.     insertkeymap( tt, 1400, mkliteralevt("\033[232z" )) ; /* control f9   */
  6968.     insertkeymap( tt, 1401, mkliteralevt("\033[233z" )) ; /* control f10       */
  6969.     insertkeymap( tt, 1402, mkliteralevt("\033[234z" )) ; /* control f11          */
  6970.     insertkeymap( tt, 1403, mkliteralevt("\033[235z" )) ; /* control f12       */
  6971.  
  6972.     insertkeymap( tt, 2416, mkliteralevt("\033[224z" )) ; /* alt f1       */
  6973.     insertkeymap( tt, 2417, mkliteralevt("\033[225z" )) ; /* alt f2       */
  6974.     insertkeymap( tt, 2418, mkliteralevt("\033[226z" )) ; /* alt f3       */
  6975.     insertkeymap( tt, 2419, mkliteralevt("\033[227z" )) ; /* alt f4       */
  6976.     insertkeymap( tt, 2420, mkliteralevt("\033[228z" )) ; /* alt f5       */
  6977.     insertkeymap( tt, 2421, mkliteralevt("\033[229z" )) ; /* alt f6       */
  6978.     insertkeymap( tt, 2422, mkliteralevt("\033[230z" )) ; /* alt f7       */
  6979.     insertkeymap( tt, 2423, mkliteralevt("\033[231z" )) ; /* alt f8       */
  6980.     insertkeymap( tt, 2424, mkliteralevt("\033[232z" )) ; /* alt f9       */
  6981.     insertkeymap( tt, 2425, mkliteralevt("\033[233z" )) ; /* alt f10       */
  6982.     insertkeymap( tt, 2426, mkliteralevt("\033[234z" )) ; /* alt f11      */
  6983.     insertkeymap( tt, 2427, mkliteralevt("\033[235z" )) ; /* alt f12       */
  6984.  
  6985.     insertkeymap( tt, 292, mkliteralevt("\033[214z")) ; /* Home */
  6986.     /* insertkeymap( tt, 294, mkliteralevt("\033[A")) ;    /* Up */
  6987.     insertkeymap( tt, 289, mkliteralevt("\033[216z")) ; /* PgUp */
  6988.     insertkeymap( tt, 365, mkliteralevt("\033[254z")) ; /* Minus */
  6989.     /* insertkeymap( tt, 293, mkliteralevt("\033[D")) ;    /* Left */
  6990.     insertkeymap( tt, 268, mkliteralevt("\033[218z")) ; /* Blank */
  6991.     /* insertkeymap( tt, 295, mkliteralevt("\033[C")) ;    /* Right */
  6992.     insertkeymap( tt, 363, mkliteralevt("\033[253z")) ; /* Plus */
  6993.     insertkeymap( tt, 291, mkliteralevt("\033[220z")) ; /* End */
  6994.     /* insertkeymap( tt, 296, mkliteralevt("\033[B")) ;    /* Down */
  6995.     insertkeymap( tt, 290, mkliteralevt("\033[222z")) ; /* PgDn */
  6996.     insertkeymap( tt, 301, mkliteralevt("\033[247z")) ; /* Ins */
  6997.     insertkeymap( tt, 302, mkliteralevt("\033[249z")) ; /* Del */
  6998.     insertkeymap( tt, 362, mkliteralevt("\033[213z")) ; /* Multiply */
  6999.     insertkeymap( tt, 4463, mkliteralevt("\033[212z")) ; /* Divide - NT*/
  7000.     insertkeymap( tt, 4143, mkliteralevt("\033[212z")) ; /* Divide - 95*/
  7001.  
  7002.     insertkeymap( tt, 4388, mkliteralevt("\033[214z")) ; /* Gray-Home */
  7003.     /* insertkeymap( tt, 4390, mkliteralevt("\033[A")) ; /* Gray-Up */
  7004.     insertkeymap( tt, 4385, mkliteralevt("\033[216z")) ; /* Gray-PgUp */
  7005.     /* insertkeymap( tt, 4389, mkliteralevt("\033[D")) ; /* Gray-Left */
  7006.     /* insertkeymap( tt, 4391, mkliteralevt("\033[C")) ; /* Gray-Right */
  7007.     insertkeymap( tt, 4387, mkliteralevt("\033[220z")) ; /* Gray-End */
  7008.     /* insertkeymap( tt, 4392, mkliteralevt("\033[B")) ; /* Gray-Down */
  7009.     insertkeymap( tt, 4386, mkliteralevt("\033[222z")) ; /* Gray-PgDn */
  7010.     insertkeymap( tt, 4397, mkliteralevt("\033[247z")) ; /* Gray-Ins */
  7011.     insertkeymap( tt, 4398, mkkeyevt(DEL)) ;             /* Gray-Del */
  7012.     insertkeymap( tt, 4365, mkkeyevt(LF)) ;              /* Gray-Enter */
  7013.  
  7014.     insertkeymap( tt, 4900, mkliteralevt("\033[214z")) ; /* Gray-Shift-Home */
  7015.     insertkeymap( tt, 4902, mkliteralevt("\033[A")) ;    /* Gray-Shift-Up */
  7016.     insertkeymap( tt, 4897, mkliteralevt("\033[216z")) ; /* Gray-Shift-PgUp */
  7017.     insertkeymap( tt, 4901, mkliteralevt("\033[D")) ;    /* Gray-Shift-Left */
  7018.     insertkeymap( tt, 4903, mkliteralevt("\033[C")) ;    /* Gray-Shift-Right */
  7019.     insertkeymap( tt, 4899, mkliteralevt("\033[220z")) ; /* Gray-Shift-End */
  7020.     insertkeymap( tt, 4904, mkliteralevt("\033[B")) ;    /* Gray-Shift-Down */
  7021.     insertkeymap( tt, 4898, mkliteralevt("\033[222z")) ; /* Gray-Shift-PgDn */
  7022.     insertkeymap( tt, 4909, mkliteralevt("\033[247z")) ; /* Gray-Shift-Ins */
  7023.     insertkeymap( tt, 4910, mkkeyevt(DEL)) ;             /* Gray-Shift-Del */
  7024.  
  7025.     insertkeymap( tt, 5412, mkliteralevt("\033[214z")) ; /* Gray-Ctrl-Home */
  7026.     insertkeymap( tt, 5414, mkliteralevt("\033[A")) ;    /* Gray-Ctrl-Up */
  7027.     insertkeymap( tt, 5409, mkliteralevt("\033[216z")) ; /* Gray-Ctrl-PgUp */
  7028.     insertkeymap( tt, 5413, mkliteralevt("\033[D")) ;    /* Gray-Ctrl-Left */
  7029.     insertkeymap( tt, 5415, mkliteralevt("\033[C")) ;    /* Gray-Ctrl-Right */
  7030.     insertkeymap( tt, 5411, mkliteralevt("\033[220z")) ; /* Gray-Ctrl-End */
  7031.     insertkeymap( tt, 5416, mkliteralevt("\033[B")) ;    /* Gray-Ctrl-Down */
  7032.     insertkeymap( tt, 5410, mkliteralevt("\033[222z")) ; /* Gray-Ctrl-PgDn */
  7033.     insertkeymap( tt, 5421, mkliteralevt("\033[247z")) ; /* Gray-Ctrl-Ins */
  7034.     insertkeymap( tt, 5422, mkkeyevt(DEL)) ;             /* Gray-Ctrl-Del */
  7035.  
  7036.     insertkeymap( tt, 6436, mkliteralevt("\033[214z")) ; /* Gray-Alt-Home */
  7037.     insertkeymap( tt, 6438, mkliteralevt("\033[A")) ;    /* Gray-Alt-Up */
  7038.     insertkeymap( tt, 6433, mkliteralevt("\033[216z")) ; /* Gray-Alt-PgUp */
  7039.     insertkeymap( tt, 6437, mkliteralevt("\033[D")) ;    /* Gray-Alt-Left */
  7040.     insertkeymap( tt, 6439, mkliteralevt("\033[C")) ;    /* Gray-Alt-Right */
  7041.     insertkeymap( tt, 6435, mkliteralevt("\033[220z")) ; /* Gray-Alt-End */
  7042.     insertkeymap( tt, 6440, mkliteralevt("\033[B")) ;    /* Gray-Alt-Down */
  7043.     insertkeymap( tt, 6434, mkliteralevt("\033[222z")) ; /* Gray-Alt-PgDn */
  7044.     insertkeymap( tt, 6445, mkliteralevt("\033[247z")) ; /* Gray-Alt-Ins */
  7045.     insertkeymap( tt, 6446, mkkeyevt(DEL)) ;             /* Gray-Alt-Del */
  7046.  
  7047.     insertkeymap( tt, 298, mkliteralevt("\033[209z")) ; /* PrtScrn */
  7048.     insertkeymap( tt, 1322, mkliteralevt("\033[209z")) ; /* Ctrl-PrtScrn */
  7049.     insertkeymap( tt, 2346, mkliteralevt("\033[209z" )) ; /* SysRq (Alt-PrtScrn)  */
  7050.  
  7051.     insertkeymap( tt, 401, mkliteralevt("\033[210z"));  /* Scroll-Lock */
  7052.     insertkeymap( tt, 275, mkliteralevt("\033[208z"));  /* Pause */
  7053.  
  7054.     insertkeymap( tt, 1316, mkliteralevt("\033[214z")) ; /* Ctrl-Home */
  7055.     insertkeymap( tt, 1318, mkliteralevt("\033[A")) ;    /* Ctrl-Up */
  7056.     insertkeymap( tt, 1313, mkliteralevt("\033[216z")) ; /* Ctrl-PgUp */
  7057.     insertkeymap( tt, 1389, mkliteralevt("\033[254z")) ; /* Ctrl-Minus */
  7058.     insertkeymap( tt, 1317, mkliteralevt("\033[D")) ;    /* Ctrl-Left */
  7059.     insertkeymap( tt, 1292, mkliteralevt("\033[218z")) ; /* Ctrl-Blank */
  7060.     insertkeymap( tt, 1319, mkliteralevt("\033[C")) ;    /* Ctrl-Right */
  7061.     insertkeymap( tt, 1387, mkliteralevt("\033[253z")) ; /* Ctrl-Plus */
  7062.     insertkeymap( tt, 1315, mkliteralevt("\033[220z")) ; /* Ctrl-End */
  7063.     insertkeymap( tt, 1320, mkliteralevt("\033[B")) ;    /* Ctrl-Down */
  7064.     insertkeymap( tt, 1314, mkliteralevt("\033[222z")) ; /* Ctrl-PgDn */
  7065.     insertkeymap( tt, 1325, mkliteralevt("\033[247z")) ; /* Ctrl-Ins */
  7066.     insertkeymap( tt, 1326, mkliteralevt("\033[249z")) ; /* Ctrl-Del */
  7067.     insertkeymap( tt, 1386, mkliteralevt("\033[213z")) ; /* Ctrl-Multiply */
  7068.     insertkeymap( tt, 5487, mkliteralevt("\033[212z")) ; /* Ctrl-Divide */
  7069.  
  7070.     insertkeymap( tt, 2413, mkliteralevt("\033[199q")) ; /* Alt-Minus */
  7071.     insertkeymap( tt, 2411, mkliteralevt("\033[201q")) ; /* Alt-Plus */
  7072.     insertkeymap( tt, 2350, mkliteralevt("\033[197q")) ; /* Alt-Del */
  7073.     insertkeymap( tt, 2410, mkliteralevt("\033[188q")) ; /* Alt-Multiply */
  7074.     insertkeymap( tt, 6511, mkliteralevt("\033[180q")) ; /* Alt-Divide         */
  7075.  
  7076.     insertkeymap( tt, 1329, mkkeyevt(NUL)) ;             /* Ctrl-2 */
  7077.     insertkeymap( tt, 1334, mkkeyevt(XRS)) ;             /* Ctrl-6 */
  7078.     insertkeymap( tt, 1469, mkkeyevt(US)) ;              /* Ctrl-- */
  7079.     insertkeymap( tt, 1471, mkkeyevt(US)) ;              /* Ctrl-? */
  7080.     insertkeymap( tt, 1472, mkkeyevt(XFS)) ;             /* Ctrl-` */
  7081.  
  7082.     return 0;
  7083. }
  7084.  
  7085. int
  7086. defqansikm( int tt )
  7087. {
  7088.     defbasekm(tt);
  7089.  
  7090.     insertkeymap( tt, 264, mkkeyevt(DEL));           /* Backspace              */
  7091.  
  7092.     insertkeymap( tt, 777, mkliteralevt("\033[Z")) ;    /* Shift-Tab           */
  7093.     insertkeymap( tt, 368, mkliteralevt("\033OP")) ; /* f1                     */
  7094.     insertkeymap( tt, 369, mkliteralevt("\033OQ")) ; /* f2                     */
  7095.     insertkeymap( tt, 370, mkliteralevt("\033OR")) ; /* f3                     */
  7096.     insertkeymap( tt, 371, mkliteralevt("\033OS")) ; /* f4                     */
  7097.     insertkeymap( tt, 372, mkliteralevt("\033OT")) ; /* f5                     */
  7098.     insertkeymap( tt, 373, mkliteralevt("\033OU")) ; /* f6                     */
  7099.     insertkeymap( tt, 374, mkliteralevt("\033OV")) ; /* f7                     */
  7100.     insertkeymap( tt, 375, mkliteralevt("\033OW")) ; /* f8                     */
  7101.     insertkeymap( tt, 376, mkliteralevt("\033OX")) ; /* f9                     */
  7102.     insertkeymap( tt, 377, mkliteralevt("\033OY")) ; /* f10            */
  7103.  
  7104. #ifdef COMMENT
  7105.     /* do not know the sequences for Ctrl,Alt,Shift function keys */
  7106.     insertkeymap( tt, 880, mkliteralevt("\033")) ; /* shift f1         */
  7107.     insertkeymap( tt, 881, mkliteralevt("\033")) ; /* shift f2         */
  7108.     insertkeymap( tt, 882, mkliteralevt("\033")) ; /* shift f3         */
  7109.     insertkeymap( tt, 883, mkliteralevt("\033")) ; /* shift f4         */
  7110.     insertkeymap( tt, 884, mkliteralevt("\033")) ; /* shift f5         */
  7111.     insertkeymap( tt, 885, mkliteralevt("\033")) ; /* shift f6         */
  7112.     insertkeymap( tt, 886, mkliteralevt("\033")) ; /* shift f7         */
  7113.     insertkeymap( tt, 887, mkliteralevt("\033")) ; /* shift f8         */
  7114.     insertkeymap( tt, 888, mkliteralevt("\033")) ; /* shift f9         */
  7115.     insertkeymap( tt, 889, mkliteralevt("\033")) ; /* shift f10   */
  7116.  
  7117.     insertkeymap( tt, 1392, mkliteralevt("\033" )) ; /* control f1        */
  7118.     insertkeymap( tt, 1393, mkliteralevt("\033" )) ; /* control f2        */
  7119.     insertkeymap( tt, 1394, mkliteralevt("\033" )) ; /* control f3        */
  7120.     insertkeymap( tt, 1395, mkliteralevt("\033" )) ; /* control f4        */
  7121.     insertkeymap( tt, 1396, mkliteralevt("\033" )) ; /* control f5        */
  7122.     insertkeymap( tt, 1397, mkliteralevt("\033" )) ; /* control f6        */
  7123.     insertkeymap( tt, 1398, mkliteralevt("\033" )) ; /* control f7        */
  7124.     insertkeymap( tt, 1399, mkliteralevt("\033" )) ; /* control f8        */
  7125.     insertkeymap( tt, 1400, mkliteralevt("\033" )) ; /* control f9        */
  7126.     insertkeymap( tt, 1401, mkliteralevt("\033" )) ; /* control f10       */
  7127.     insertkeymap( tt, 1289, mkliteralevt("\033")) ; /* Ctrl-Tab  */
  7128. #endif /* COMMENT */
  7129.  
  7130.     insertkeymap( tt, 292, mkliteralevt("\033[H")) ; /* Home */
  7131. /*    insertkeymap( tt, 294, mkliteralevt("\033[A")) ; /* Up */
  7132.     insertkeymap( tt, 289, mkliteralevt("\033[V")) ; /* PgUp */
  7133. /*    insertkeymap( tt, 365, mkliteralevt("\033")) ; /* Minus */
  7134. /*    insertkeymap( tt, 293, mkliteralevt("\033[D")) ; /* Left */
  7135. /*    insertkeymap( tt, 268, mkliteralevt("\033")) ; /* Blank */
  7136. /*    insertkeymap( tt, 295, mkliteralevt("\033[C")) ; /* Right */
  7137. /*    insertkeymap( tt, 363, mkliteralevt("\033")) ; /* Plus */
  7138. /*    insertkeymap( tt, 291, mkliteralevt("\033")) ; /* End */
  7139. /*    insertkeymap( tt, 296, mkliteralevt("\033\251")) ; /* Down */
  7140.     insertkeymap( tt, 290, mkliteralevt("\033[U")) ; /* PgDn */
  7141.     insertkeymap( tt, 301, mkliteralevt("\033[@")) ; /* Ins */
  7142.     insertkeymap( tt, 302, mkliteralevt("\033[P")) ; /* Del */
  7143.  
  7144. #ifdef COMMENT
  7145.     /* do not know the values to send */
  7146.     insertkeymap( tt, 298, mkliteralevt("\033")) ; /* PrtScrn */
  7147.     insertkeymap( tt, 378, mkliteralevt("\033\256")) ; /* f11          */
  7148.     insertkeymap( tt, 379, mkliteralevt("\033\257")) ; /* f12          */
  7149.  
  7150.  
  7151.     insertkeymap( tt, 1316, mkliteralevt("\033\260")) ; /* Ctrl-Home */
  7152. #endif /* COMMENT */
  7153.  
  7154.     insertkeymap( tt, 1318, mkliteralevt("\033[a")) ; /* Ctrl-Up */
  7155.  
  7156. #ifdef COMMENT
  7157.     insertkeymap( tt, 1313, mkliteralevt("\033\262")) ; /* Ctrl-PgUp */
  7158.     insertkeymap( tt, 1389, mkliteralevt("\033\263")) ; /* Ctrl-Minus */
  7159.     insertkeymap( tt, 1317, mkliteralevt("\033\264")) ; /* Ctrl-Left */
  7160.     insertkeymap( tt, 1292, mkliteralevt("\033\265")) ; /* Ctrl-Blank */
  7161.     insertkeymap( tt, 1319, mkliteralevt("\033\266")) ; /* Ctrl-Right */
  7162.     insertkeymap( tt, 1387, mkliteralevt("\033\267")) ; /* Ctrl-Plus */
  7163.     insertkeymap( tt, 1315, mkliteralevt("\033\270")) ; /* Ctrl-End */
  7164. #endif /* COMMENT */
  7165.  
  7166.     insertkeymap( tt, 1320, mkliteralevt("\033[b")) ; /* Ctrl-Down */
  7167.  
  7168. #ifdef COMMENT
  7169.     insertkeymap( tt, 1314, mkliteralevt("\033\272")) ; /* Ctrl-PgDn */
  7170.     insertkeymap( tt, 1325, mkliteralevt("\033\273")) ; /* Ctrl-Ins */
  7171.     insertkeymap( tt, 1326, mkliteralevt("\033\274")) ; /* Ctrl-Del */
  7172.     insertkeymap( tt, 1322, mkliteralevt("\033\275")) ; /* Ctrl-PrtScrn */
  7173.     insertkeymap( tt, 1402, mkliteralevt("\033\276")) ; /* Ctrl-f11            */
  7174.     insertkeymap( tt, 1403, mkliteralevt("\033\277")) ; /* Ctrl-f12            */
  7175.  
  7176.     insertkeymap( tt, 2340, mkliteralevt("\033\300")) ; /* Alt-Home */
  7177.     insertkeymap( tt, 2342, mkliteralevt("\033\301")) ; /* Alt-Up */
  7178.     insertkeymap( tt, 2337, mkliteralevt("\033\302")) ; /* Alt-PgUp */
  7179.     insertkeymap( tt, 2413, mkliteralevt("\033\303")) ; /* Alt-Minus */
  7180.     insertkeymap( tt, 2341, mkliteralevt("\033\304")) ; /* Alt-Left */
  7181.     insertkeymap( tt, 2316, mkliteralevt("\033\305")) ; /* Alt-Blank */
  7182.     insertkeymap( tt, 2343, mkliteralevt("\033\306")) ; /* Alt-Right */
  7183.     insertkeymap( tt, 2411, mkliteralevt("\033\307")) ; /* Alt-Plus */
  7184.     insertkeymap( tt, 2339, mkliteralevt("\033\310")) ; /* Alt-End */
  7185.     insertkeymap( tt, 2344, mkliteralevt("\033\311")) ; /* Alt-Down */
  7186.     insertkeymap( tt, 2338, mkliteralevt("\033\312")) ; /* Alt-PgDn */
  7187.     insertkeymap( tt, 2349, mkliteralevt("\033\313")) ; /* Alt-Ins */
  7188.     insertkeymap( tt, 2350, mkliteralevt("\033\314")) ; /* Alt-Del */
  7189.     insertkeymap( tt, 2410, mkliteralevt("\033\315")) ; /* Alt-* */
  7190.     insertkeymap( tt, 2426, mkliteralevt("\033\316")) ; /* Alt-f11             */
  7191.     insertkeymap( tt, 2427, mkliteralevt("\033\317")) ; /* Alt-f12             */
  7192.  
  7193.  
  7194.     insertkeymap( tt, 1293, mkliteralevt("\033\320" )) ; /* ctrl enter  */
  7195.     insertkeymap( tt, 2416, mkliteralevt("\033\321" )) ; /* alt f1  */
  7196.     insertkeymap( tt, 2417, mkliteralevt("\033\322" )) ; /* alt f2  */
  7197.     insertkeymap( tt, 2418, mkliteralevt("\033\323" )) ; /* alt f3  */
  7198.     insertkeymap( tt, 2419, mkliteralevt("\033\324" )) ; /* alt f4  */
  7199.     insertkeymap( tt, 2420, mkliteralevt("\033\325" )) ; /* alt f5  */
  7200.     insertkeymap( tt, 2421, mkliteralevt("\033\326" )) ; /* alt f6  */
  7201.     insertkeymap( tt, 2422, mkliteralevt("\033\327" )) ; /* alt f7  */
  7202.     insertkeymap( tt, 2423, mkliteralevt("\033\330" )) ; /* alt f8  */
  7203.     insertkeymap( tt, 2424, mkliteralevt("\033\331" )) ; /* alt f9  */
  7204.     insertkeymap( tt, 2425, mkliteralevt("\033\332" )) ; /* alt f10 */
  7205.     insertkeymap( tt,  890, mkliteralevt("\033\333" )) ; /* shift f11     */
  7206.     insertkeymap( tt,  891, mkliteralevt("\033\334" )) ; /* shift f12     */
  7207.     insertkeymap( tt, 2346, mkliteralevt("\033\335" )) ; /* SysRq (Alt-PrtScrn)  */
  7208.     insertkeymap( tt, 1151, mkliteralevt("\033\336" )) ; /* Ctrl-BS  */
  7209.     insertkeymap( tt, 2312, mkliteralevt("\033\337" )) ; /* Alt-BS  */
  7210.  
  7211.     insertkeymap( tt, 781, mkliteralevt("\033\340")) ; /* Shift-Enter */
  7212. #endif /* COMMENT */
  7213.  
  7214.     insertkeymap( tt, 2145, mkliteralevt("\033Na")) ; /* Alt-a */
  7215.     insertkeymap( tt, 2146, mkliteralevt("\033Nb")) ; /* Alt-b */
  7216.     insertkeymap( tt, 2147, mkliteralevt("\033Nc")) ; /* Alt-c */
  7217.     insertkeymap( tt, 2148, mkliteralevt("\033Nd")) ; /* Alt-d */
  7218.     insertkeymap( tt, 2149, mkliteralevt("\033Ne")) ; /* Alt-e */
  7219.     insertkeymap( tt, 2150, mkliteralevt("\033Nf")) ; /* Alt-f */
  7220.     insertkeymap( tt, 2151, mkliteralevt("\033Ng")) ; /* Alt-g */
  7221.     insertkeymap( tt, 2152, mkliteralevt("\033Nh")) ; /* Alt-h */
  7222.     insertkeymap( tt, 2153, mkliteralevt("\033Ni")) ; /* Alt-i */
  7223.     insertkeymap( tt, 2154, mkliteralevt("\033Nj")) ; /* Alt-j */
  7224.     insertkeymap( tt, 2155, mkliteralevt("\033Nk")) ; /* Alt-k */
  7225.     insertkeymap( tt, 2156, mkliteralevt("\033Nl")) ; /* Alt-l */
  7226.     insertkeymap( tt, 2157, mkliteralevt("\033Nm")) ; /* Alt-m */
  7227.     insertkeymap( tt, 2158, mkliteralevt("\033Nn")) ; /* Alt-n */
  7228.     insertkeymap( tt, 2159, mkliteralevt("\033No")) ; /* Alt-o */
  7229.  
  7230.     insertkeymap( tt, 2160, mkliteralevt("\033Np")) ; /* Alt-p */
  7231.     insertkeymap( tt, 2161, mkliteralevt("\033Nq")) ; /* Alt-q */
  7232.     insertkeymap( tt, 2162, mkliteralevt("\033Nr")) ; /* Alt-r */
  7233.     insertkeymap( tt, 2163, mkliteralevt("\033Ns")) ; /* Alt-s */
  7234.     insertkeymap( tt, 2164, mkliteralevt("\033Nt")) ; /* Alt-t */
  7235.     insertkeymap( tt, 2165, mkliteralevt("\033Nu")) ; /* Alt-u */
  7236.     insertkeymap( tt, 2166, mkliteralevt("\033Nv")) ; /* Alt-v */
  7237.     insertkeymap( tt, 2167, mkliteralevt("\033Nw")) ; /* Alt-w */
  7238.     insertkeymap( tt, 2168, mkliteralevt("\033Nx")) ; /* Alt-x */
  7239.     insertkeymap( tt, 2169, mkliteralevt("\033Ny")) ; /* Alt-y */
  7240.     insertkeymap( tt, 2170, mkliteralevt("\033Nz")) ; /* Alt-z */
  7241.  
  7242. #ifdef COMMENT
  7243.     insertkeymap( tt, 2317, mkliteralevt("\033\373")) ; /* Alt-Enter */
  7244. #endif
  7245.     insertkeymap( tt, 776, mkliteralevt("\033[Z")) ; /* Shift-BS */
  7246.  
  7247. #ifdef COMMENT
  7248.     insertkeymap( tt, 5389, mkliteralevt("\033\320" )) ; /* gray-ctrl enter  */
  7249.     insertkeymap( tt, 4877, mkliteralevt("\033\340")) ; /* gray-Shift-Enter */
  7250.     insertkeymap( tt, 6413, mkliteralevt("\033\373")) ; /* gray-Alt-Enter */
  7251. #endif /* COMMENT */
  7252.  
  7253.     insertkeymap( tt, 4388, mkliteralevt("\033[H")) ; /* Gray-Home */
  7254. /*    insertkeymap( tt, 4390, mkliteralevt("\033[A")) ; /* Gray-Up */
  7255.     insertkeymap( tt, 4385, mkliteralevt("\033[V")) ; /* Gray-PgUp */
  7256. /*    insertkeymap( tt, 4389, mkliteralevt("\033[D")) ; /* Gray-Left */
  7257. /*    insertkeymap( tt, 4391, mkliteralevt("\033[C")) ; /* Gray-Right */
  7258. /*    insertkeymap( tt, 4387, mkliteralevt("\033")) ; /* Gray-End */
  7259. /*    insertkeymap( tt, 4392, mkliteralevt("\033[B")) ; /* Gray-Down */
  7260.     insertkeymap( tt, 4386, mkliteralevt("\033[U")) ; /* Gray-PgDn */
  7261.     insertkeymap( tt, 4397, mkliteralevt("\033[@")) ; /* Gray-Ins */
  7262.     insertkeymap( tt, 4398, mkliteralevt("\033[P")) ; /* Gray-Del */
  7263.  
  7264. /*    insertkeymap( tt, 5412, mkliteralevt("\033\260")) ; /* Gray-Ctrl-Home */
  7265.     insertkeymap( tt, 5414, mkliteralevt("\033[a")) ; /* Gray-Ctrl-Up */
  7266. #ifdef COMMENT
  7267.     insertkeymap( tt, 5409, mkliteralevt("\033\262")) ; /* Gray-Ctrl-PgUp */
  7268.     insertkeymap( tt, 5413, mkliteralevt("\033\264")) ; /* Gray-Ctrl-Left */
  7269.     insertkeymap( tt, 5415, mkliteralevt("\033\266")) ; /* Gray-Ctrl-Right */
  7270.     insertkeymap( tt, 5411, mkliteralevt("\033\270")) ; /* Gray-Ctrl-End */
  7271. #endif
  7272.     insertkeymap( tt, 5416, mkliteralevt("\033[b")) ; /* Gray-Ctrl-Down */
  7273. #ifdef COMMENT
  7274.     insertkeymap( tt, 5410, mkliteralevt("\033\272")) ; /* Gray-Ctrl-PgDn */
  7275.     insertkeymap( tt, 5421, mkliteralevt("\033\273")) ; /* Gray-Ctrl-Ins */
  7276.     insertkeymap( tt, 5422, mkliteralevt("\033\274")) ; /* Gray-Ctrl-Del */
  7277.  
  7278.     insertkeymap( tt, 6436, mkliteralevt("\033\300")) ; /* Gray-Alt-Home */
  7279.     insertkeymap( tt, 6438, mkliteralevt("\033\301")) ; /* Gray-Alt-Up */
  7280.     insertkeymap( tt, 6433, mkliteralevt("\033\302")) ; /* Gray-Alt-PgUp */
  7281.     insertkeymap( tt, 6437, mkliteralevt("\033\304")) ; /* Gray-Alt-Left */
  7282.     insertkeymap( tt, 6439, mkliteralevt("\033\306")) ; /* Gray-Alt-Right */
  7283.     insertkeymap( tt, 6435, mkliteralevt("\033\310")) ; /* Gray-Alt-End */
  7284.     insertkeymap( tt, 6440, mkliteralevt("\033\311")) ; /* Gray-Alt-Down */
  7285.     insertkeymap( tt, 6434, mkliteralevt("\033\312")) ; /* Gray-Alt-PgDn */
  7286.     insertkeymap( tt, 6445, mkliteralevt("\033\313")) ; /* Gray-Alt-Ins */
  7287.     insertkeymap( tt, 6446, mkliteralevt("\033\314")) ; /* Gray-Alt-Del */
  7288. #endif /* COMMENT */
  7289.     return 0;
  7290. }
  7291.  
  7292. int
  7293. defba80km( int tt )
  7294. {
  7295.     defbasekm(tt);
  7296.     insertkeymap( tt, 368 , mkkeyevt(F_KVERB | K_BA80_PA01 )); /* F1               F1     */
  7297.     insertkeymap( tt, 369 , mkkeyevt(F_KVERB | K_BA80_PA02 )); /* F2               F2     */
  7298.     insertkeymap( tt, 370 , mkkeyevt(F_KVERB | K_BA80_PA03 )); /* F3               F3     */
  7299.     insertkeymap( tt, 371 , mkkeyevt(F_KVERB | K_BA80_PA04 )); /* F4               F4     */
  7300.     insertkeymap( tt, 372 , mkkeyevt(F_KVERB | K_BA80_PA05 )); /* F5               F5     */
  7301.     insertkeymap( tt, 373 , mkkeyevt(F_KVERB | K_BA80_PA06 )); /* F6               F6     */
  7302.     insertkeymap( tt, 374 , mkkeyevt(F_KVERB | K_BA80_PA07 )); /* F7               F7     */
  7303.     insertkeymap( tt, 375 , mkkeyevt(F_KVERB | K_BA80_PA08 )); /* F8               F8     */
  7304.     insertkeymap( tt, 376 , mkkeyevt(F_KVERB | K_BA80_PA09 )); /* F9               F9     */
  7305.     insertkeymap( tt, 377 , mkkeyevt(F_KVERB | K_BA80_PA10 )); /* F10              F10    */
  7306.     insertkeymap( tt, 378 , mkkeyevt(F_KVERB | K_BA80_PA11 )); /* F11              F11    */
  7307.     insertkeymap( tt, 379 , mkkeyevt(F_KVERB | K_BA80_PA12 )); /* F12              F12    */
  7308.  
  7309.     insertkeymap( tt, 2416, mkkeyevt(F_KVERB | K_BA80_PA13 )); /* F13               Alt-F13 */
  7310.     insertkeymap( tt, 2417, mkkeyevt(F_KVERB | K_BA80_PA14 )); /* F14               Alt-F14 */
  7311.     insertkeymap( tt, 2418, mkkeyevt(F_KVERB | K_BA80_PA15 )); /* F15               Alt-F15 */
  7312.     insertkeymap( tt, 2419, mkkeyevt(F_KVERB | K_BA80_PA16 )); /* F16               Alt-F16 */
  7313.     insertkeymap( tt, 2420, mkkeyevt(F_KVERB | K_BA80_PA17 )); /* F17               Alt-F17 */
  7314.     insertkeymap( tt, 2421, mkkeyevt(F_KVERB | K_BA80_PA18 )); /* F18               Alt-F18 */
  7315.     insertkeymap( tt, 2422, mkkeyevt(F_KVERB | K_BA80_PA19 )); /* F19               Alt-F19 */
  7316.     insertkeymap( tt, 2423, mkkeyevt(F_KVERB | K_BA80_PA20 )); /* F20               Alt-F20 */
  7317.     insertkeymap( tt, 2424, mkkeyevt(F_KVERB | K_BA80_PA21 )); /* F21               Alt-F21 */
  7318.     insertkeymap( tt, 2425, mkkeyevt(F_KVERB | K_BA80_PA22 )); /* F22               Alt-F22 */
  7319.     insertkeymap( tt, 2426, mkkeyevt(F_KVERB | K_BA80_PA23 )); /* F23               Alt-F23 */
  7320.     insertkeymap( tt, 2427, mkkeyevt(F_KVERB | K_BA80_PA24 )); /* F24               Alt-F24 */
  7321.  
  7322.     insertkeymap( tt, 2097, mkkeyevt(F_KVERB | K_BA80_SOFTKEY1 )); /* Softkey1         Alt-1 */
  7323.     insertkeymap( tt, 2098, mkkeyevt(F_KVERB | K_BA80_SOFTKEY2 )); /* Softkey2         Alt-2 */
  7324.     insertkeymap( tt, 2099, mkkeyevt(F_KVERB | K_BA80_SOFTKEY3 )); /* Softkey3         Alt-3 */
  7325.     insertkeymap( tt, 2100, mkkeyevt(F_KVERB | K_BA80_SOFTKEY4 )); /* Softkey4         Alt-4 */
  7326.     insertkeymap( tt, 2101, mkkeyevt(F_KVERB | K_BA80_SOFTKEY5 )); /* Softkey5         Alt-5 */
  7327.     insertkeymap( tt, 2102, mkkeyevt(F_KVERB | K_BA80_SOFTKEY6 )); /* Softkey6         Alt-6 */
  7328.     insertkeymap( tt, 2103, mkkeyevt(F_KVERB | K_BA80_SOFTKEY7 )); /* Softkey7         Alt-7 */
  7329.     insertkeymap( tt, 2104, mkkeyevt(F_KVERB | K_BA80_SOFTKEY8 )); /* Softkey8         Alt-8 */
  7330.     insertkeymap( tt, 2105, mkkeyevt(F_KVERB | K_BA80_SOFTKEY9 )); /* Softkey9         Alt-9 */
  7331.  
  7332.     insertkeymap( tt, 1025, mkliteralevt("\033"));
  7333.     insertkeymap( tt, 1026, mkliteralevt("\034"));
  7334.     insertkeymap( tt, 1027, mkliteralevt("\035"));
  7335.     insertkeymap( tt, 1028, mkliteralevt("\036"));
  7336.     insertkeymap( tt, 1029, mkliteralevt("\037"));
  7337.     insertkeymap( tt, 1030, mkliteralevt("\177"));
  7338.     insertkeymap( tt, 1031, mkkeyevt(F_KVERB | K_NULL));
  7339.  
  7340.     insertkeymap( tt, 4388,   mkkeyevt(F_KVERB | K_BA80_HOME)) ; /* Gray-Home */
  7341. /*    insertkeymap( tt, 4390, mkkeyevt(F_KVERB | K_BA80_)) ; /* Gray-Up */
  7342.     insertkeymap( tt, 4385,   mkkeyevt(F_KVERB | K_BA80_PGUP)) ; /* Gray-PgUp */
  7343. /*    insertkeymap( tt, 4389, mkkeyevt(F_KVERB | K_BA80_)) ; /* Gray-Left */
  7344. /*    insertkeymap( tt, 4391, mkkeyevt(F_KVERB | K_BA80_)) ; /* Gray-Right */
  7345.     insertkeymap( tt, 4387, mkkeyevt(F_KVERB | K_BA80_END)) ; /* Gray-End  */
  7346. /*    insertkeymap( tt, 4392, mkkeyevt(F_KVERB | K_BA80_)) ; /* Gray-Down */
  7347.     insertkeymap( tt, 4386,   mkkeyevt(F_KVERB | K_BA80_PGDN)) ; /* Gray-PgDn */
  7348.     insertkeymap( tt, 4397,   mkkeyevt(F_KVERB | K_BA80_INS)) ; /* Gray-Ins */
  7349.     insertkeymap( tt, 4398,   mkkeyevt(F_KVERB | K_BA80_DEL)) ; /* Gray-Del */
  7350.  
  7351.     return 0;
  7352. }
  7353.  
  7354. int
  7355. defsnikm( int tt )
  7356. {
  7357.     defbasekm(tt);
  7358.  
  7359.     insertkeymap( tt, 368 , mkkeyevt(F_KVERB | K_SNI_F01 )); /* F1     F1     */
  7360.     insertkeymap( tt, 369 , mkkeyevt(F_KVERB | K_SNI_F02 )); /* F2     F2     */
  7361.     insertkeymap( tt, 370 , mkkeyevt(F_KVERB | K_SNI_F03 )); /* F3     F3     */
  7362.     insertkeymap( tt, 371 , mkkeyevt(F_KVERB | K_SNI_F04 )); /* F4     F4     */
  7363.     insertkeymap( tt, 372 , mkkeyevt(F_KVERB | K_SNI_F05 )); /* F5     F5     */
  7364.     insertkeymap( tt, 373 , mkkeyevt(F_KVERB | K_SNI_F06 )); /* F6     F6     */
  7365.     insertkeymap( tt, 374 , mkkeyevt(F_KVERB | K_SNI_F07 )); /* F7     F7     */
  7366.     insertkeymap( tt, 375 , mkkeyevt(F_KVERB | K_SNI_F08 )); /* F8     F8     */
  7367.     insertkeymap( tt, 376 , mkkeyevt(F_KVERB | K_SNI_F09 )); /* F9     F9     */
  7368.     insertkeymap( tt, 377 , mkkeyevt(F_KVERB | K_SNI_F10 )); /* F10    F10    */
  7369.     insertkeymap( tt, 378 , mkkeyevt(F_KVERB | K_SNI_F11 )); /* F11    F11    */
  7370.     insertkeymap( tt, 379 , mkkeyevt(F_KVERB | K_SNI_F12 )); /* F12    F12    */
  7371.  
  7372.     insertkeymap( tt, 880 , mkkeyevt(F_KVERB | K_SNI_S_F01  )) || /* F1   Shift-F1  */
  7373.     insertkeymap( tt, 881 , mkkeyevt(F_KVERB | K_SNI_S_F02  )) || /* F2   Shift-F2  */
  7374.     insertkeymap( tt, 882 , mkkeyevt(F_KVERB | K_SNI_S_F03  )) || /* F3   Shift-F3  */
  7375.     insertkeymap( tt, 883 , mkkeyevt(F_KVERB | K_SNI_S_F04  )) || /* F4   Shift-F4  */
  7376.     insertkeymap( tt, 884 , mkkeyevt(F_KVERB | K_SNI_S_F05  )) || /* F5   Shift-F5  */
  7377.     insertkeymap( tt, 885 , mkkeyevt(F_KVERB | K_SNI_S_F06  )) || /* F6   Shift-F6  */
  7378.     insertkeymap( tt, 886 , mkkeyevt(F_KVERB | K_SNI_S_F07  )) || /* F7   Shift-F7  */
  7379.     insertkeymap( tt, 887 , mkkeyevt(F_KVERB | K_SNI_S_F08  )) || /* F8   Shift-F8  */
  7380.     insertkeymap( tt, 888 , mkkeyevt(F_KVERB | K_SNI_S_F09  )) || /* F9   Shift-F9  */
  7381.     insertkeymap( tt, 889 , mkkeyevt(F_KVERB | K_SNI_S_F10 ))  || /* F10  Shift-F10 */
  7382.     insertkeymap( tt, 890 , mkkeyevt(F_KVERB | K_SNI_S_F11  )) || /* F11  Shift-F9  */
  7383.     insertkeymap( tt, 891 , mkkeyevt(F_KVERB | K_SNI_S_F12 ))  || /* F12  Shift-F10 */
  7384.  
  7385.     insertkeymap( tt, 1392, mkkeyevt(F_KVERB | K_SNI_F11 ));
  7386.     insertkeymap( tt, 1393, mkkeyevt(F_KVERB | K_SNI_F12 ));
  7387.     insertkeymap( tt, 1394, mkkeyevt(F_KVERB | K_SNI_F13 ));
  7388.     insertkeymap( tt, 1395, mkkeyevt(F_KVERB | K_SNI_F14 ));
  7389.     insertkeymap( tt, 1396, mkkeyevt(F_KVERB | K_SNI_F15 ));
  7390.     insertkeymap( tt, 1397, mkkeyevt(F_KVERB | K_SNI_F16 ));
  7391.     insertkeymap( tt, 1398, mkkeyevt(F_KVERB | K_SNI_F17 ));
  7392.     insertkeymap( tt, 1399, mkkeyevt(F_KVERB | K_SNI_F18 ));
  7393.     insertkeymap( tt, 1400, mkkeyevt(F_KVERB | K_SNI_F19 ));
  7394.     insertkeymap( tt, 1401, mkkeyevt(F_KVERB | K_SNI_F20 ));
  7395.  
  7396.     insertkeymap( tt, 1904 , mkkeyevt(F_KVERB | K_SNI_S_F11  )) || /* F1   Ctrl-Shift-F1  */
  7397.     insertkeymap( tt, 1905 , mkkeyevt(F_KVERB | K_SNI_S_F12  )) || /* F2   Ctrl-Shift-F2  */
  7398.     insertkeymap( tt, 1906 , mkkeyevt(F_KVERB | K_SNI_S_F13  )) || /* F3   Ctrl-Shift-F3  */
  7399.     insertkeymap( tt, 1907 , mkkeyevt(F_KVERB | K_SNI_S_F14  )) || /* F4   Ctrl-Shift-F4  */
  7400.     insertkeymap( tt, 1908 , mkkeyevt(F_KVERB | K_SNI_S_F15  )) || /* F5   Ctrl-Shift-F5  */
  7401.     insertkeymap( tt, 1909 , mkkeyevt(F_KVERB | K_SNI_S_F16  )) || /* F6   Ctrl-Shift-F6  */
  7402.     insertkeymap( tt, 1910 , mkkeyevt(F_KVERB | K_SNI_S_F17  )) || /* F7   Ctrl-Shift-F7  */
  7403.     insertkeymap( tt, 1911 , mkkeyevt(F_KVERB | K_SNI_S_F18  )) || /* F8   Ctrl-Shift-F8  */
  7404.     insertkeymap( tt, 1912 , mkkeyevt(F_KVERB | K_SNI_S_F19  )) || /* F9   Ctrl-Shift-F9  */
  7405.     insertkeymap( tt, 1913 , mkkeyevt(F_KVERB | K_SNI_S_F20 ))  || /* F10  Ctrl-Shift-F10 */
  7406.     insertkeymap( tt, 1914 , mkkeyevt(F_KVERB | K_SNI_S_F19  )) || /* F9   Ctrl-Shift-F11  */
  7407.     insertkeymap( tt, 1915 , mkkeyevt(F_KVERB | K_SNI_S_F20 ))  || /* F10  Ctrl-Shift-F12 */
  7408.  
  7409.     insertkeymap( tt, 2097 , mkkeyevt(F_KVERB | K_SNI_F21  )) ||
  7410.     insertkeymap( tt, 2098 , mkkeyevt(F_KVERB | K_SNI_F22 ))  ||
  7411.     insertkeymap( tt, 2081 , mkkeyevt(F_KVERB | K_SNI_S_F21  )) ||
  7412.     insertkeymap( tt, 2082 , mkkeyevt(F_KVERB | K_SNI_S_F22 ))  ||
  7413.  
  7414.     insertkeymap( tt, 2928, mkkeyevt(F_KVERB | K_SNI_C_F01  )) || /* F1   Shift-F1  */
  7415.     insertkeymap( tt, 2929, mkkeyevt(F_KVERB | K_SNI_C_F02  )) || /* F2   Shift-F2  */
  7416.     insertkeymap( tt, 2930, mkkeyevt(F_KVERB | K_SNI_C_F03  )) || /* F3   Shift-F3  */
  7417.     insertkeymap( tt, 2931, mkkeyevt(F_KVERB | K_SNI_C_F04  )) || /* F4   Shift-F4  */
  7418.     insertkeymap( tt, 2932, mkkeyevt(F_KVERB | K_SNI_C_F05  )) || /* F5   Shift-F5  */
  7419.     insertkeymap( tt, 2933, mkkeyevt(F_KVERB | K_SNI_C_F06  )) || /* F6   Shift-F6  */
  7420.     insertkeymap( tt, 2934, mkkeyevt(F_KVERB | K_SNI_C_F07  )) || /* F7   Shift-F7  */
  7421.     insertkeymap( tt, 2935, mkkeyevt(F_KVERB | K_SNI_C_F08  )) || /* F8   Shift-F8  */
  7422.     insertkeymap( tt, 2936, mkkeyevt(F_KVERB | K_SNI_C_F09  )) || /* F9   Shift-F9  */
  7423.     insertkeymap( tt, 2937, mkkeyevt(F_KVERB | K_SNI_C_F10 ))  || /* F10  Shift-F10 */
  7424.     insertkeymap( tt, 2938, mkkeyevt(F_KVERB | K_SNI_C_F11  )) || /* F11  Shift-F9  */
  7425.     insertkeymap( tt, 2939, mkkeyevt(F_KVERB | K_SNI_C_F12 ))  || /* F12  Shift-F10 */
  7426.  
  7427.     insertkeymap( tt, 3889 , mkkeyevt(F_KVERB | K_SNI_C_F21  )) ||
  7428.     insertkeymap( tt, 3890 , mkkeyevt(F_KVERB | K_SNI_C_F22 ))  ||
  7429.  
  7430.     insertkeymap( tt, 3952, mkkeyevt(F_KVERB | K_SNI_C_F11  )) ||
  7431.     insertkeymap( tt, 3953, mkkeyevt(F_KVERB | K_SNI_C_F12  )) ||
  7432.     insertkeymap( tt, 3954, mkkeyevt(F_KVERB | K_SNI_C_F13  )) ||
  7433.     insertkeymap( tt, 3955, mkkeyevt(F_KVERB | K_SNI_C_F14  )) ||
  7434.     insertkeymap( tt, 3956, mkkeyevt(F_KVERB | K_SNI_C_F15  )) ||
  7435.     insertkeymap( tt, 3957, mkkeyevt(F_KVERB | K_SNI_C_F16  )) ||
  7436.     insertkeymap( tt, 3958, mkkeyevt(F_KVERB | K_SNI_C_F17  )) ||
  7437.     insertkeymap( tt, 3959, mkkeyevt(F_KVERB | K_SNI_C_F18  )) ||
  7438.     insertkeymap( tt, 3960, mkkeyevt(F_KVERB | K_SNI_C_F19  )) ||
  7439.     insertkeymap( tt, 3961, mkkeyevt(F_KVERB | K_SNI_C_F20 ))  ||
  7440.  
  7441.     insertkeymap( tt, 2099, mkkeyevt(F_KVERB | K_SNI_USER1  )) ||
  7442.     insertkeymap( tt, 2100, mkkeyevt(F_KVERB | K_SNI_USER2  )) ||
  7443.     insertkeymap( tt, 2101, mkkeyevt(F_KVERB | K_SNI_USER3  )) ||
  7444.     insertkeymap( tt, 2102, mkkeyevt(F_KVERB | K_SNI_USER4  )) ||
  7445.     insertkeymap( tt, 2103, mkkeyevt(F_KVERB | K_SNI_USER5  )) ||
  7446.  
  7447.     insertkeymap( tt, 4388, mkkeyevt(F_KVERB | K_SNI_HOME)) ; /* Gray-Home */
  7448.     insertkeymap( tt, 4385, mkkeyevt(F_KVERB | K_SNI_SCROLL_UP)) ; /* Gray-PgUp */
  7449.     insertkeymap( tt, 4387, mkkeyevt(F_KVERB | K_SNI_END)) ; /* Gray-End  */
  7450.     insertkeymap( tt, 4386, mkkeyevt(F_KVERB | K_SNI_SCROLL_DOWN)) ; /* Gray-PgDn */
  7451.     insertkeymap( tt, 4397, mkkeyevt(F_KVERB | K_SNI_INSERT_CHAR)) ; /* Gray-Ins */
  7452.     insertkeymap( tt, 4398, mkliteralevt("\177"));
  7453.  
  7454.     insertkeymap( tt, 4900, mkkeyevt(F_KVERB | K_SNI_HOME)) ; /* Gray-Shift-Home */
  7455.     insertkeymap( tt, 4897, mkkeyevt(F_KVERB | K_SNI_SCROLL_UP)) ; /* Gray-Shift-PgUp */
  7456.     insertkeymap( tt, 4899, mkkeyevt(F_KVERB | K_SNI_END)) ; /* Gray-Shift-End  */
  7457.     insertkeymap( tt, 4898, mkkeyevt(F_KVERB | K_SNI_SCROLL_DOWN)) ; /* Gray-Shift-PgDn */
  7458.     insertkeymap( tt, 4909, mkkeyevt(F_KVERB | K_SNI_INSERT_CHAR)) ; /* Gray-Shift-Ins */
  7459.     insertkeymap( tt, 4910, mkkeyevt(F_KVERB | K_SNI_DELETE_CHAR)) ; /* Gray-Shift-Del */
  7460.  
  7461.     insertkeymap( tt,  264, mkkeyevt(BS));
  7462.     insertkeymap( tt,  265, mkkeyevt(F_KVERB | K_SNI_TAB));
  7463.  
  7464.     insertkeymap( tt, 6445, mkkeyevt(F_KVERB | K_SNI_INSERT_LINE));
  7465.     insertkeymap( tt, 6446, mkkeyevt(F_KVERB | K_SNI_DELETE_LINE));
  7466.     insertkeymap( tt, 5421, mkkeyevt(F_KVERB | K_SNI_INSERT_WORD));
  7467.     insertkeymap( tt, 5422, mkkeyevt(F_KVERB | K_SNI_DELETE_WORD));
  7468.     insertkeymap( tt, 6436, mkkeyevt(F_KVERB | K_SNI_CE));
  7469.     insertkeymap( tt, 6433, mkkeyevt(F_KVERB | K_SNI_CH_CODE));
  7470.     insertkeymap( tt, 6435, mkkeyevt(F_KVERB | K_SNI_ENDMARKE));
  7471.  
  7472.     insertkeymap( tt, 1043, mkkeyevt(F_KVERB | K_SNI_START));
  7473.     insertkeymap( tt, 2163, mkkeyevt(F_KVERB | K_SNI_START));
  7474.     insertkeymap( tt, 1040, mkkeyevt(F_KVERB | K_SNI_PRINT));
  7475.     insertkeymap( tt, 2160, mkkeyevt(F_KVERB | K_SNI_PRINT));
  7476.     insertkeymap( tt, 1032, mkkeyevt(F_KVERB | K_SNI_HELP));
  7477.     insertkeymap( tt, 2152, mkkeyevt(F_KVERB | K_SNI_HELP));
  7478.     insertkeymap( tt, 1028, mkkeyevt(F_KVERB | K_SNI_MODE));
  7479.     insertkeymap( tt, 2148, mkkeyevt(F_KVERB | K_SNI_MODE));
  7480.     return 0;
  7481. }
  7482.  
  7483. int
  7484. defi31km( int tt )
  7485. {
  7486.     defbasekm(tt);
  7487.     insertkeymap( tt, 368 , mkkeyevt(F_KVERB | K_I31_F01 )); /* F1   F1     */
  7488.     insertkeymap( tt, 369 , mkkeyevt(F_KVERB | K_I31_F02 )); /* F2   F2     */
  7489.     insertkeymap( tt, 370 , mkkeyevt(F_KVERB | K_I31_F03 )); /* F3   F3     */
  7490.     insertkeymap( tt, 371 , mkkeyevt(F_KVERB | K_I31_F04 )); /* F4   F4     */
  7491.     insertkeymap( tt, 372 , mkkeyevt(F_KVERB | K_I31_F05 )); /* F5   F5     */
  7492.     insertkeymap( tt, 373 , mkkeyevt(F_KVERB | K_I31_F06 )); /* F6   F6     */
  7493.     insertkeymap( tt, 374 , mkkeyevt(F_KVERB | K_I31_F07 )); /* F7   F7     */
  7494.     insertkeymap( tt, 375 , mkkeyevt(F_KVERB | K_I31_F08 )); /* F8   F8     */
  7495.     insertkeymap( tt, 376 , mkkeyevt(F_KVERB | K_I31_F09 )); /* F9   F9     */
  7496.     insertkeymap( tt, 377 , mkkeyevt(F_KVERB | K_I31_F10 )); /* F10  F10    */
  7497.     insertkeymap( tt, 378 , mkkeyevt(F_KVERB | K_I31_F11 )); /* F11  F11    */
  7498.     insertkeymap( tt, 379 , mkkeyevt(F_KVERB | K_I31_F12 )); /* F12  F12    */
  7499.  
  7500.     insertkeymap( tt, 2416, mkkeyevt(F_KVERB | K_I31_F13 )); /* F13   Alt-F1  */
  7501.     insertkeymap( tt, 2417, mkkeyevt(F_KVERB | K_I31_F14 )); /* F14   Alt-F2  */
  7502.     insertkeymap( tt, 2418, mkkeyevt(F_KVERB | K_I31_F15 )); /* F15   Alt-F3  */
  7503.     insertkeymap( tt, 2419, mkkeyevt(F_KVERB | K_I31_F16 )); /* F16   Alt-F4  */
  7504.     insertkeymap( tt, 2420, mkkeyevt(F_KVERB | K_I31_F17 )); /* F17   Alt-F5  */
  7505.     insertkeymap( tt, 2421, mkkeyevt(F_KVERB | K_I31_F18 )); /* F18   Alt-F6  */
  7506.     insertkeymap( tt, 2422, mkkeyevt(F_KVERB | K_I31_F19 )); /* F19   Alt-F7  */
  7507.     insertkeymap( tt, 2423, mkkeyevt(F_KVERB | K_I31_F20 )); /* F20   Alt-F8  */
  7508.     insertkeymap( tt, 2424, mkkeyevt(F_KVERB | K_I31_F21 )); /* F21   Alt-F9  */
  7509.     insertkeymap( tt, 2425, mkkeyevt(F_KVERB | K_I31_F22 )); /* F22   Alt-F10 */
  7510.     insertkeymap( tt, 2426, mkkeyevt(F_KVERB | K_I31_F23 )); /* F23   Alt-F11 */
  7511.     insertkeymap( tt, 2427, mkkeyevt(F_KVERB | K_I31_F24 )); /* F24   Alt-F12 */
  7512.  
  7513.     insertkeymap( tt, 2928, mkkeyevt(F_KVERB | K_I31_F25 )); /* F13   Alt-Shift-F1  */
  7514.     insertkeymap( tt, 2929, mkkeyevt(F_KVERB | K_I31_F26 )); /* F14   Alt-Shift-F2  */
  7515.     insertkeymap( tt, 2930, mkkeyevt(F_KVERB | K_I31_F27 )); /* F15   Alt-Shift-F3  */
  7516.     insertkeymap( tt, 2931, mkkeyevt(F_KVERB | K_I31_F28 )); /* F16   Alt-Shift-F4  */
  7517.     insertkeymap( tt, 2932, mkkeyevt(F_KVERB | K_I31_F29 )); /* F17   Alt-Shift-F5  */
  7518.     insertkeymap( tt, 2933, mkkeyevt(F_KVERB | K_I31_F30 )); /* F18   Alt-Shift-F6  */
  7519.     insertkeymap( tt, 2934, mkkeyevt(F_KVERB | K_I31_F31 )); /* F19   Alt-Shift-F7  */
  7520.     insertkeymap( tt, 2935, mkkeyevt(F_KVERB | K_I31_F32 )); /* F20   Alt-Shift-F8  */
  7521.     insertkeymap( tt, 2936, mkkeyevt(F_KVERB | K_I31_F33 )); /* F21   Alt-Shift-F9  */
  7522.     insertkeymap( tt, 2937, mkkeyevt(F_KVERB | K_I31_F34 )); /* F22   Alt-Shift-F10 */
  7523.     insertkeymap( tt, 2938, mkkeyevt(F_KVERB | K_I31_F35 )); /* F23   Alt-Shift-F11 */
  7524.     insertkeymap( tt, 2939, mkkeyevt(F_KVERB | K_I31_F36 )); /* F24   Alt-Shift-F12 */
  7525.  
  7526.     insertkeymap( tt, 2097, mkkeyevt(F_KVERB | K_I31_PA1 )); /* Softkey1         Alt-1 */
  7527.     insertkeymap( tt, 2098, mkkeyevt(F_KVERB | K_I31_PA2 )); /* Softkey2         Alt-2 */
  7528.     insertkeymap( tt, 2099, mkkeyevt(F_KVERB | K_I31_PA3 )); /* Softkey3         Alt-3 */
  7529.  
  7530.     insertkeymap( tt, 4388,   mkkeyevt(F_KVERB | K_I31_HOME)) ; /* Gray-Home */
  7531. /*    insertkeymap( tt, 4390, mkkeyevt(F_KVERB | K_I31_)) ; /* Gray-Up */
  7532.     insertkeymap( tt, 4385,   mkkeyevt(F_KVERB | K_I31_CLEAR)) ; /* Gray-PgUp */
  7533. /*    insertkeymap( tt, 4389, mkkeyevt(F_KVERB | K_I31_)) ; /* Gray-Left */
  7534. /*    insertkeymap( tt, 4391, mkkeyevt(F_KVERB | K_I31_)) ; /* Gray-Right */
  7535.     insertkeymap( tt, 4387, mkkeyevt(F_KVERB | K_I31_BACK_TAB)) ; /* Gray-End  */
  7536. /*    insertkeymap( tt, 4392, mkkeyevt(F_KVERB | K_I31_)) ; /* Gray-Down */
  7537.     insertkeymap( tt, 4386,   mkkeyevt(F_KVERB | K_I31_ERASE_EOF)) ; /* Gray-PgDn */
  7538.     insertkeymap( tt, 4397,   mkkeyevt(F_KVERB | K_I31_INSERT_CHAR)) ; /* Gray-Ins */
  7539.     insertkeymap( tt, 4398,   mkkeyevt(F_KVERB | K_I31_DELETE)) ; /* Gray-Del */
  7540.  
  7541.     return 0;
  7542. }
  7543.  
  7544. int
  7545. insertkmtolist( struct keynode ** plist, int key, con_event def )
  7546. {
  7547.     if ( *plist == NULL ) {
  7548.         *plist = (struct keynode *) malloc( sizeof(struct keynode) ) ;
  7549.         if ( *plist == NULL )
  7550.             return -1;
  7551.         (*plist)->key = key ;
  7552.         (*plist)->def = def ;
  7553.         (*plist)->next = NULL ;
  7554.         return 0;
  7555.     }
  7556.     else if ( (*plist)->key == key ) {
  7557.         (*plist)->def = def ;
  7558.         return 0;
  7559.     }
  7560.     else if ( (*plist)->key > key ) {
  7561.         struct keynode * pnode = (struct keynode *) malloc( sizeof(struct keynode) ) ;
  7562.         if (pnode) {
  7563.             pnode->key = key ;
  7564.             pnode->def = def ;
  7565.             pnode->next = *plist ;
  7566.             *plist = pnode ;
  7567.             return 0;
  7568.         }
  7569.         return -1;
  7570.     }
  7571.     else
  7572.         return insertkmtolist( &((*plist)->next), key, def );
  7573. }
  7574.  
  7575. int
  7576. insertkeymap( int terminal, int key, con_event def )
  7577. {
  7578.     return insertkmtolist( &(ttkeymap[terminal]), key, def );
  7579. }
  7580.  
  7581. int
  7582. deletekeymap( int terminal, int key )
  7583. {
  7584.     struct keynode ** plist = &(ttkeymap[terminal]) ;
  7585.     while ( *plist ) {
  7586.         if ( (*plist)->key == key ) {
  7587.             struct keynode * pnode = *plist ;
  7588.             *plist = (*plist)->next ;
  7589.             if ( pnode->def.type == macro ) {
  7590.                 free( pnode->def.macro.string );
  7591.             }
  7592.             free(pnode) ;
  7593.             return 0;
  7594.         }
  7595.  
  7596.         plist = &((*plist)->next) ;
  7597.     }
  7598.     return -1;
  7599. }
  7600.  
  7601. int
  7602. clearkeymap( int terminal )
  7603. {
  7604.     struct keynode ** plist = &(ttkeymap[terminal]) ;
  7605.     while ( *plist ) {
  7606.         struct keynode * pnode = *plist ;
  7607.         *plist = (*plist)->next ;
  7608.         free(pnode) ;
  7609.     }
  7610.     return 0;
  7611. }
  7612.  
  7613. int
  7614. findkeymap( int terminal, int key, con_event * def )
  7615. {
  7616.     struct keynode * list = ttkeymap[terminal] ;
  7617.     if ( !def ) {
  7618.         return -2;
  7619.     }
  7620.  
  7621.     while ( list ) {
  7622.         if ( list->key == key ) {
  7623.             *def= list->def ;
  7624.             return 0;
  7625.         }
  7626.         else if ( list->key < key )
  7627.             list = list->next ;
  7628.         else
  7629.             break;
  7630.     }
  7631.     def->type = error ;
  7632.     return -1;
  7633. }
  7634.  
  7635. int
  7636. defaultkeymap( int terminal ) {
  7637.     if ( clearkeymap( terminal ) )
  7638.         return -1;
  7639.  
  7640.     switch ( terminal ) {
  7641.     case WPKM:
  7642.         return defwpkm(terminal) ;
  7643.     case EMACSKM:
  7644.         return defemacskm(terminal) ;
  7645.     case HEBREWKM:
  7646.         return defhebrewkm(terminal);
  7647.     case RUSSIANKM:
  7648.         return defrussiankm(terminal);
  7649.     case TT_VC4404:
  7650.         return defvckm(terminal);
  7651.     case TT_HPTERM:
  7652.     case TT_HP2621:
  7653.         return defhpkm(terminal);
  7654.     case TT_HZL1500:
  7655.         return defhzlkm(terminal);
  7656.     case TT_DG200:
  7657.     case TT_DG210:
  7658.     case TT_DG217:
  7659.         return defdgkm( terminal ) ;
  7660.     case TT_WY30:
  7661.     case TT_WY50:
  7662.     case TT_WY60:
  7663.     case TT_WY160:
  7664.         return defwyseasciikm( terminal ) ;
  7665.     case TT_BA80:
  7666.         return defba80km( terminal );
  7667.     case TT_HFT:
  7668.     case TT_AIXTERM:
  7669.         return defaixkm( terminal );
  7670.     case TT_SUN:
  7671.         return defsunkm( terminal );
  7672.     case TT_VT52:
  7673.     case TT_H19:
  7674.     case TT_ANSI:
  7675.     case TT_VT100:
  7676.     case TT_VT102:
  7677.     case TT_VIP7809:
  7678.         return defvt100km(terminal);
  7679.     case TT_BEOS:
  7680.         return defbetermkm( terminal );
  7681.     case TT_LINUX:
  7682.         return deflinuxkm( terminal );
  7683.     case TT_SCOANSI:
  7684.         return defscoansikm( terminal );
  7685.     case TT_AT386:
  7686.         return defat386km( terminal );
  7687.     case TT_QANSI:
  7688.         return defqansikm( terminal );
  7689.     case TT_AAA:
  7690.         return defannarbor( terminal );
  7691.     case TT_VT220:
  7692.     case TT_VT320:
  7693.     case TT_WY370:
  7694.         return defvt200km( terminal );
  7695.     case TT_VT220PC:
  7696.     case TT_VT320PC:
  7697.         return defvtpckm( terminal );
  7698.     case TT_97801:
  7699.         return defsnikm( terminal );
  7700.     case TT_TVI910:
  7701.     case TT_TVI925:
  7702.     case TT_TVI950:
  7703.         return deftviasciikm(terminal);
  7704.     case TT_QNX:        /* haven't defined this yet */
  7705.         return defqnxkm(terminal);
  7706.     case TT_IBM31:
  7707.         return defi31km(terminal);
  7708.     case TT_NONE:
  7709.     default:
  7710.         return defbasekm(terminal);
  7711.     }
  7712.     return 0;
  7713. }
  7714.  
  7715. con_event
  7716. mapkey( unsigned int c )
  7717. {
  7718.     extern MACRO * macrotab ;
  7719.     extern BYTE vmode ;
  7720.     int rc = -1;
  7721.     con_event event ;
  7722.  
  7723.     event.type = error;
  7724.  
  7725.     if ( vmode == VTERM && tt_kb_mode != KBM_EN ) {
  7726.         switch ( tt_kb_mode ) {
  7727.         case KBM_EM:
  7728.             rc = findkeymap(EMACSKM,c, &event);
  7729.             break;
  7730.         case KBM_HE:
  7731.             rc = findkeymap(HEBREWKM,c,&event);
  7732.             break;
  7733.         case KBM_RU:
  7734.             rc = findkeymap(RUSSIANKM,c,&event);
  7735.             break;
  7736.         case KBM_WP:
  7737.             rc = findkeymap(WPKM,c,&event);
  7738.             break;
  7739.         }
  7740.     }
  7741.     if ( rc == 0 )
  7742.         return(event);
  7743.     else if ( keymap && c < KMSIZE && keymap[c] != c ) {
  7744.         int km = keymap[c] ;
  7745.         if ( IS_KVERB(km) ) {
  7746.             event.type = kverb ;
  7747.             event.kverb.id = km & ~F_KVERB ;
  7748.         }
  7749.         else if ( IS_CSI(km) ) {
  7750.             event.type = csi ;
  7751.             event.csi.key = km & ~F_CSI ;
  7752.         }
  7753.         else if ( IS_ESC(km) ) {
  7754.             event.type = esc ;
  7755.             event.esc.key = km & ~F_ESC ;
  7756.         }
  7757.         else {
  7758.             event.type = key ;
  7759.             event.key.scancode = km;
  7760.         }
  7761.         rc = 0 ;        /* success */
  7762.     }
  7763.     else if ( macrotab && c < KMSIZE && macrotab[c] ) {
  7764.         event.type = macro ;
  7765.         event.macro.string = macrotab[c];
  7766.         rc = 0;         /* success */
  7767.     }
  7768.     else {
  7769.         rc = findkeymap( tt_type, c, &event ) ;
  7770.     }
  7771.     if ( rc < 0 )
  7772.         event.type = error ;
  7773.  
  7774.     return ( event );
  7775. }
  7776.  
  7777. con_event
  7778. maptermkey( int c, int emulation )
  7779. {
  7780.     extern MACRO * macrotab ;
  7781.     extern BYTE vmode ;
  7782.     int rc = -1;
  7783.     con_event event ;
  7784.  
  7785.     rc = findkeymap( emulation, c, &event ) ;
  7786.     if ( rc < 0 )
  7787.         event.type = error ;
  7788.  
  7789.     return ( event );
  7790. }
  7791. #endif /* NOSETKEY */
  7792.  
  7793. #ifndef NOKVERBS
  7794. void
  7795. vikinit( void )
  7796. {
  7797.     /* Initialize Very Important Keys structure */
  7798.     int i,button,event;
  7799.  
  7800.     if ( !initvik )
  7801.         return ;
  7802.  
  7803.     vik.help = 0;
  7804.     vik.exit = 0;
  7805.     vik.quit = 0;
  7806.     vik.upscn = 0;
  7807.     vik.dnscn = 0;
  7808.     vik.upone = 0;
  7809.     vik.dnone = 0;
  7810.     vik.homscn = 0;
  7811.     vik.endscn = 0;
  7812.     vik.lfone = 0;
  7813.     vik.lfpg  = 0;
  7814.     vik.lfall = 0;
  7815.     vik.rtone = 0;
  7816.     vik.rtpg  = 0;
  7817.     vik.rtall = 0;
  7818.     vik.hangup = 0;
  7819.     vik.xbreak = 0;
  7820.     vik.lbreak = 0;
  7821.     vik.dump = 0;
  7822.     vik.prtctrl = 0;
  7823.     vik.prtauto = 0;
  7824.     vik.os2 = 0;
  7825.     vik.printff = 0;
  7826.     vik.flipscn = 0;
  7827.     vik.debug = 0;
  7828.     vik.reset = 0;
  7829.     vik.compose = 0;
  7830.     vik.ucs2 = 0;
  7831.     vik.markstart = 0 ;
  7832.     vik.markcancel = 0 ;
  7833.     vik.copyclip = 0 ;
  7834.     vik.copyhost = 0 ;
  7835.     vik.paste = 0 ;
  7836.     vik.holdscrn = 0 ;
  7837. #ifdef OS2MOUSE
  7838.     vik.mou_curpos   = 0;
  7839.     vik.mou_copyhost = 0 ;
  7840.     vik.mou_copyclip = 0 ;
  7841.     vik.mou_paste    = 0 ;
  7842.     vik.mou_dump     = 0 ;
  7843.     vik.mou_mark     = 0 ;
  7844. #endif /* OS2MOUSE */
  7845.     vik.backsrch = 0;
  7846.     vik.backnext = 0;
  7847.     vik.fwdsrch  = 0;
  7848.     vik.fwdnext  = 0;
  7849.     vik.setbook  = 0;
  7850.     vik.gobook   = 0;
  7851.     vik.xgoto    = 0;
  7852.     vik.fnkeys   = 0;
  7853.     vik.status   = 0;
  7854.     vik.ttype    = 0;
  7855.  
  7856.     for (i = 256; i < KMSIZE; i++) {
  7857.         int km = 0;
  7858.         con_event evt = mapkey(i) ;
  7859.         if ( evt.type != kverb )
  7860.             continue;
  7861.         km = evt.kverb.id & ~F_KVERB ;
  7862.         if (!vik.help && (km == K_HELP))
  7863.           vik.help = i;
  7864.         else if (!vik.exit && (km == K_EXIT))
  7865.           vik.exit = i;
  7866.         else if (!vik.quit && (km == K_QUIT))
  7867.           vik.quit = i;
  7868.         else if (!vik.upscn && km == K_UPSCN)
  7869.           vik.upscn = i;
  7870.         else if (!vik.dnscn && km == K_DNSCN)
  7871.           vik.dnscn = i;
  7872.         else if (!vik.upone && km == K_UPONE)
  7873.           vik.upone = i;
  7874.         else if (!vik.dnone && km == K_DNONE)
  7875.           vik.dnone = i;
  7876.         else if (!vik.homscn && km == K_HOMSCN)
  7877.           vik.homscn = i;
  7878.         else if (!vik.endscn && km == K_ENDSCN)
  7879.           vik.endscn = i;
  7880.         else if (!vik.lfone && km == K_LFONE)
  7881.           vik.lfone = i;
  7882.         else if (!vik.lfpg && km == K_LFPAGE)
  7883.           vik.lfpg = i;
  7884.         else if (!vik.lfall && km == K_LFALL)
  7885.           vik.lfall = i;
  7886.         else if (!vik.rtone && km == K_RTONE)
  7887.           vik.rtone = i;
  7888.         else if (!vik.rtpg && km == K_RTPAGE)
  7889.           vik.rtpg = i;
  7890.         else if (!vik.rtall && km == K_RTALL)
  7891.           vik.rtall = i;
  7892.         else if (!vik.hangup && (km == K_HANGUP))
  7893.           vik.hangup = i;
  7894.         else if (!vik.xbreak && (km == K_BREAK))
  7895.           vik.xbreak = i;
  7896.         else if (!vik.lbreak && (km == K_LBREAK))
  7897.           vik.lbreak = i;
  7898.         else if (!vik.dump && (km == K_DUMP))
  7899.           vik.dump = i;
  7900.         else if (!vik.flipscn && (km == K_FLIPSCN))
  7901.           vik.flipscn = i;
  7902.         else if (!vik.debug && (km == K_DEBUG))
  7903.           vik.debug = i;
  7904. /*
  7905.   By default, Alt-= and Alt-r both get \Kreset, but we want Alt-r to show
  7906.   on the help screen...
  7907.  
  7908.   Too bad, it makes the screen look weird.
  7909. */
  7910.         else if (!vik.reset && (km == K_RESET))
  7911.           vik.reset = i;
  7912.         else if (!vik.os2 && (km == K_DOS))
  7913.           vik.os2 = i;
  7914.         else if (!vik.prtctrl && (km == K_PRTCTRL))
  7915.           vik.prtctrl = i;
  7916.         else if (!vik.prtauto && (km == K_PRTAUTO))
  7917.           vik.prtauto = i;
  7918.         else if (!vik.printff && (km == K_PRINTFF))
  7919.           vik.printff = i;
  7920.         else if (!vik.compose && (km == K_COMPOSE))
  7921.           vik.compose = i;
  7922.         else if (!vik.ucs2 && (km == K_C_UNI16))
  7923.           vik.ucs2 = i;
  7924.         else if (!vik.markcancel && (km == K_MARK_CANCEL))
  7925.           vik.markcancel = i ;
  7926.         else if (!vik.markstart && (km == K_MARK_START))
  7927.           vik.markstart = i ;
  7928.         else if (!vik.copyclip && (km == K_MARK_COPYCLIP))
  7929.           vik.copyclip = i ;
  7930.         else if (!vik.copyhost && (km == K_MARK_COPYHOST))
  7931.           vik.copyhost = i ;
  7932.         else if (!vik.paste && (km == K_PASTE))
  7933.           vik.paste = i ;
  7934.         else if (!vik.holdscrn && (km == K_HOLDSCRN))
  7935.           vik.holdscrn = i ;
  7936.         else if (!vik.backsrch && (km == K_BACKSRCH))
  7937.           vik.backsrch = i ;
  7938.         else if (!vik.backnext && (km == K_BACKNEXT))
  7939.           vik.backnext = i ;
  7940.         else if (!vik.fwdsrch && (km == K_FWDSRCH))
  7941.           vik.fwdsrch = i ;
  7942.         else if (!vik.fwdnext && (km == K_FWDNEXT))
  7943.           vik.fwdnext = i ;
  7944.         else if (!vik.setbook && (km == K_SET_BOOK))
  7945.           vik.setbook = i ;
  7946.         else if (!vik.gobook && (km == K_GO_BOOK))
  7947.           vik.gobook = i ;
  7948.         else if (!vik.xgoto && (km == K_GOTO))
  7949.           vik.xgoto = i ;
  7950.         else if (!vik.fnkeys && (km == K_FNKEYS))
  7951.           vik.fnkeys = i ;
  7952.         else if (!vik.status && (km == K_STATUS))
  7953.           vik.status = i ;
  7954.         else if (!vik.ttype && (km == K_TERMTYPE))
  7955.           vik.ttype = i ;
  7956.     }
  7957. #ifdef OS2MOUSE
  7958.     for ( button = 0 ; button < MMBUTTONMAX ; button++ )
  7959.       for ( event = 0 ; event < MMEVENTSIZE ; event++ )
  7960.         if ( mousemap[button][event].type == kverb ) {
  7961.             switch ( mousemap[button][event].kverb.id ) {
  7962.               case F_KVERB | K_MOUSE_CURPOS :
  7963.                 vik.mou_curpos = (button << 5) | event ;
  7964.                 break;
  7965.               case F_KVERB | K_MARK_COPYCLIP :
  7966.                 vik.mou_copyclip = (button << 5) | event ;
  7967.                 break;
  7968.               case F_KVERB | K_MARK_COPYHOST :
  7969.                 vik.mou_copyhost = (button << 5) | event ;
  7970.                 break;
  7971.               case F_KVERB | K_PASTE :
  7972.                 vik.mou_paste = (button << 5) | event ;
  7973.                 break;
  7974.               case F_KVERB | K_DUMP :
  7975.                 vik.mou_dump = (button << 5) | event ;
  7976.                 break;
  7977.               case F_KVERB | K_MOUSE_MARK :
  7978.                 vik.mou_mark = (button << 5) | event ;
  7979.             case F_KVERB | K_MOUSE_URL :
  7980.                 vik.mou_url = (button << 5) | event ;
  7981.                 break;
  7982.             }
  7983.         }
  7984. #endif /* OS2MOUSE */
  7985.     initvik = FALSE ;
  7986. }
  7987. #endif /* NOKVERBS */
  7988.  
  7989. void
  7990. SetCapsLock( BOOL bState )
  7991. {
  7992. #ifdef NT
  7993.     /* doesn't work for Windows 95 */
  7994.     BYTE keyState[256];
  7995.  
  7996.     GetKeyboardState((LPBYTE)&keyState);
  7997.     if( (bState && !(keyState[VK_CAPITAL] & 1)) ||
  7998.         (!bState && (keyState[VK_CAPITAL] & 1)) )
  7999.     {
  8000.         // Simulate a key press
  8001.         keybd_event( VK_CAPITAL,
  8002.                      0x45,
  8003.                      KEYEVENTF_EXTENDEDKEY | 0,
  8004.                      0 );
  8005.  
  8006.         // Simulate a key release
  8007.         keybd_event( VK_CAPITAL,
  8008.                      0x45,
  8009.                      KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
  8010.                      0);
  8011.    }
  8012. #endif
  8013. }
  8014.  
  8015. void
  8016. SetNumLock( BOOL bState )
  8017. {
  8018. #ifdef NT
  8019.     /* doesn't work for Windows 95 */
  8020.     BYTE keyState[256];
  8021.  
  8022.     GetKeyboardState((LPBYTE)&keyState);
  8023.     if( (bState && !(keyState[VK_NUMLOCK] & 1)) ||
  8024.         (!bState && (keyState[VK_NUMLOCK] & 1)) )
  8025.     {
  8026.         // Simulate a key press
  8027.         keybd_event( VK_NUMLOCK,
  8028.                      0x45,
  8029.                      KEYEVENTF_EXTENDEDKEY | 0,
  8030.                      0 );
  8031.  
  8032.         // Simulate a key release
  8033.         keybd_event( VK_NUMLOCK,
  8034.                      0x45,
  8035.                      KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
  8036.                      0);
  8037.    }
  8038. #endif
  8039. }
  8040.  
  8041. void
  8042. SetScrollLock( BOOL bState )
  8043. {
  8044. #ifdef NT
  8045.    BYTE keyState[256];
  8046.  
  8047.    GetKeyboardState((LPBYTE)&keyState);
  8048.    if( (bState && !(keyState[VK_SCROLL] & 1)) ||
  8049.        (!bState && (keyState[VK_SCROLL] & 1)) )
  8050.    {
  8051.    // Simulate a key press
  8052.       keybd_event( VK_SCROLL,
  8053.                    0x45,
  8054.                    KEYEVENTF_EXTENDEDKEY | 0,
  8055.                    0 );
  8056.  
  8057.    // Simulate a key release
  8058.       keybd_event( VK_SCROLL,
  8059.                    0x45,
  8060.                    KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
  8061.                    0);
  8062.    }
  8063. #endif /* NT */
  8064. }
  8065.  
  8066. #ifdef printf
  8067. #undef printf
  8068. #endif /* printf */
  8069.  
  8070. #ifndef NOLOCAL
  8071. int
  8072. OS2WaitForKey( void ) {
  8073.     printf("\n<Press a Key to continue>");
  8074.     congev( IsConnectMode() ? VTERM : VCMD, -1 );
  8075.     return(0);
  8076. }
  8077. #endif /* NOLOCAL */
  8078.