16 PF= Spec|0x20, /* num pad function key */
17 View= Spec|0x00, /* view (shift window up) */
18 KF= 0xF000, /* function key (begin Unicode private space) */
45 static Rune vnckeys[] =
47 [0x00] No, No, No, No, No, No, No, No,
48 [0x08] '\b', '\t', '\r', No, No, '\n', No, No,
49 [0x10] No, No, No, No, Scroll, No, No, No,
50 [0x18] No, No, No, Esc, No, No, No, No,
51 [0x20] No, No, No, No, No, No, No, No,
52 [0x28] No, No, No, No, No, No, No, No,
53 [0x30] No, No, No, No, No, No, No, No,
54 [0x38] No, No, No, No, No, No, No, No,
55 [0x40] No, No, No, No, No, No, No, No,
56 [0x48] No, No, No, No, No, No, No, No,
57 [0x50] Home, Left, Up, Right, Down, Pgup, Pgdown, No,
58 [0x58] No, No, No, No, No, No, No, No,
59 [0x60] No, Print, No, Ins, No, No, No, No,
60 [0x68] No, No, No, Break, No, No, No, No,
61 [0x70] No, No, No, No, No, No, No, No,
62 [0x78] No, No, No, No, No, No, No, Num,
63 [0x80] No, No, No, No, No, No, No, No,
64 [0x88] No, No, No, No, No, No, No, No,
65 [0x90] No, No, No, No, No, No, No, No,
66 [0x98] No, No, No, No, No, No, No, No,
67 [0xa0] No, No, No, No, No, No, No, No,
68 [0xa8] No, No, '*', '+', No, '-', '.', '/',
69 [0xb0] '0', '1', '2', '3', '4', '5', '6', '7',
70 [0xb8] '8', '9', No, No, No, '=', No, No,
71 [0xc0] No, No, No, No, No, No, No, No,
72 [0xc8] No, No, No, No, No, No, No, No,
73 [0xd0] No, No, No, No, No, No, No, No,
74 [0xd8] No, No, No, No, No, No, No, No,
75 [0xe0] No, Shift, Shift, Ctrl, Ctrl, Caps, Caps, No,
76 [0xe8] No, Latin, Latin, No, No, No, No, No,
77 [0xf0] No, No, No, No, No, No, No, No,
78 [0xf8] No, No, No, No, No, No, No, Delete,
85 vncputc(int keyup, int c)
88 static int esc1, esc2;
89 static int alt, caps, ctl, num, shift;
90 static int collecting, nk;
93 if(caps && c<='z' && c>='a')
99 if((c & VKSpecial) == VKSpecial){
100 c = vnckeys[c & 0xff];
105 * map an xkeysym onto a utf-8 char
107 if((c & 0xff00) && c < nelem(ksym2utf) && ksym2utf[c] != 0)
111 * keyup only important for shifts
131 if(!(c & (Spec|KF))){
141 if(c < -1) /* need more keystrokes */
143 if(c != -1) /* valid sequence */
145 else /* dump characters */