Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Move default keyboard map so that it is shared. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | ams/sdl |
Files: | files | file ages | folders |
SHA3-256: |
7acabec26910a291d6e38809911344e5 |
User & Date: | ams 2024-06-17 08:44:13 |
Context
2024-06-17
| ||
13:47 | Some minor cleaning and stuff ... check-in: c4512a7049 user: ams tags: ams/sdl | |
08:44 | Move default keyboard map so that it is shared. check-in: 7acabec269 user: ams tags: ams/sdl | |
2024-06-12
| ||
11:55 | Minor cleanups. check-in: 8d25295997 user: ams tags: ams/sdl | |
Changes
Changes to cadet.c.
︙ | ︙ | |||
113 114 115 116 117 118 119 | * * Also keep track if we should do an all-up event, and track * the modifiers for later. */ for (int modifier = 0; modifier < 8; modifier++) { int bucky; | | | 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | * * Also keep track if we should do an all-up event, and track * the modifiers for later. */ for (int modifier = 0; modifier < 8; modifier++) { int bucky; bucky = modifier_map[modifier]; for (int i = 0; i < modmap->max_keypermod; i++) { KeyCode keycode; keycode = modmap->modifiermap[modifier * modmap->max_keypermod + i]; if (keymap[keycode / 8] & (1 << keycode % 8)) { keymap[keycode / 8] &= ~(1 << keycode % 8); /* Clear the key in KEYMAP. */ printf("cadet_allup_key() - bucky pressed (%d); keycode = %d\n", bucky, keycode); |
︙ | ︙ | |||
158 159 160 161 162 163 164 | case KBD_HYPER: mods |= CADET_ALLUP_HYPER; break; case KBD_SUPER: mods |= CADET_ALLUP_SUPER; break; default: | | | 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 | case KBD_HYPER: mods |= CADET_ALLUP_HYPER; break; case KBD_SUPER: mods |= CADET_ALLUP_SUPER; break; default: printf("kbd (cadet): unknown bucky key: 0%o\n", modifier_map[modifier]); break; } } } } XFreeModifiermap(modmap); /* |
︙ | ︙ | |||
196 197 198 199 200 201 202 | #elif WITH_SDL2 bool cadet_allup_key(void) { bool allup; int mods; int shifts; | | | | | | | 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 | #elif WITH_SDL2 bool cadet_allup_key(void) { bool allup; int mods; int shifts; int statesize; Uint8 *state; allup = true; mods = 0; shifts = 0; state = SDL_GetKeyboardState(&statesize); for (int i = 0; allup && i < statesize; i++) { int bucky; if (state[i] != 1) continue; bucky = modifier_map[i]; printf("cadet_allup_key() - bucky pressed (%d), i = %d\n", bucky, i); switch (bucky) { case KBD_SHIFT: mods |= CADET_ALLUP_SHIFT; shifts |= (1 << CADET_IX_SHIFT); break; case KBD_TOP: |
︙ | ︙ | |||
249 250 251 252 253 254 255 | case KBD_HYPER: mods |= CADET_ALLUP_HYPER; break; case KBD_SUPER: mods |= CADET_ALLUP_SUPER; break; default: | | | | 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 | case KBD_HYPER: mods |= CADET_ALLUP_HYPER; break; case KBD_SUPER: mods |= CADET_ALLUP_SUPER; break; default: printf("kbd (cadet): unknown bucky key: 0%o\n", modifier_map[i]); /* Hack: ignore modifier key which isn't bound */ // if (i >= SDLK_NUMLOCK && i <= SDLK_COMPOSE) // break; allup = false; break; } } if (allup == true) { printf("cadet_allup_key() - all-up event; mods = 0%o, shifts = 0%o\n", mods, shifts); cadet_shifts = shifts; cadet_allup_event(mods); } return allup; } #endif static void |
︙ | ︙ | |||
291 292 293 294 295 296 297 | } } void cadet_process_key( int keysym, /* keysym, acts as index into kbd_map */ int bi, /* bucky, acts as index into modifier_map */ | | < < | | | 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 | } } void cadet_process_key( int keysym, /* keysym, acts as index into kbd_map */ int bi, /* bucky, acts as index into modifier_map */ int keydown ) { int lmchar; /* Lisp Machine charachter to insert */ int scc; /* Space Cadet scancode. */ int wantshift; /* Index into second column in cadet_kbd_map. */ int shkey; /* Shift key being pressed. */ int oshift; if (!keydown && cadet_allup_key() == true) return; oshift = cadet_shifts; printf("kbd (cadet): keysym = 0%o, bi = %d\n", keysym, bi); if (bi != -1) { int bucky; bucky = modifier_map[bi]; if (bucky == KBD_NoSymbol) { printf("kbd (cadet): unbound modifier (keysym = 0%o)\n", keysym); return; } scc = cadet_modifier_map[bucky]; cadet_process_shift(scc, keydown); |
︙ | ︙ | |||
391 392 393 394 395 396 397 | #define X(lmch, scc, wantshift) \ cadet_kbd_map[LMCH_##lmch][0] = scc; cadet_kbd_map[LMCH_##lmch][1] = wantshift; #include "cadet.defs" /* Hacks... */ #if 0 X(LMCH_bracketleft, 0166, CADET_IX_UNSHIFT); | | | | | 389 390 391 392 393 394 395 396 397 398 399 400 401 402 | #define X(lmch, scc, wantshift) \ cadet_kbd_map[LMCH_##lmch][0] = scc; cadet_kbd_map[LMCH_##lmch][1] = wantshift; #include "cadet.defs" /* Hacks... */ #if 0 X(LMCH_bracketleft, 0166, CADET_IX_UNSHIFT); X(LMCH_bracketright, 0146, CADET_IX_UNSHIFT); X(LMCH_braceleft, 0132, CADET_IX_SHIFT); X(LMCH_braceright, 0137, CADET_IX_SHIFT); #endif #undef X } |
Changes to cadet.h.
1 2 3 4 5 6 7 8 9 | #pragma once #if WITH_X11 #include "x11.h" #elif WITH_SDL1 #include "sdl1.h" #endif extern void cadet_init(void); | | | 1 2 3 4 5 6 7 8 9 10 11 12 | #pragma once #if WITH_X11 #include "x11.h" #elif WITH_SDL1 #include "sdl1.h" #endif extern void cadet_init(void); extern void cadet_process_key(int, int, int); extern void cadet_queue_all_keys_up(void); |
Changes to kbd.c.
︙ | ︙ | |||
16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #define KEY_QUEUE_LEN 10 static int key_queue[KEY_QUEUE_LEN]; static int key_queue_optr; static int key_queue_iptr; static int key_queue_free = KEY_QUEUE_LEN; void kbd_queue_key_event(int ev) { int v; v = (1 << 16) | ev; | > > > > > > > > | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | #define KEY_QUEUE_LEN 10 static int key_queue[KEY_QUEUE_LEN]; static int key_queue_optr; static int key_queue_iptr; static int key_queue_free = KEY_QUEUE_LEN; /* * Translation map for the host keyboard to a corresponding Lisp * Machine character or modifier. */ int kbd_map[65535]; int modifier_map[8]; void kbd_queue_key_event(int ev) { int v; v = (1 << 16) | ev; |
︙ | ︙ | |||
202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 | { for (int i = 0; lmchar_map[i].name; i++) { if (streq(key, lmchar_map[i].name) == true) return lmchar_map[i].lmchar; } return LMCH_NoSymbol; } void kbd_init(void) { if (kbd_type == 0) knight_init(); else cadet_init(); } | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 | { for (int i = 0; lmchar_map[i].name; i++) { if (streq(key, lmchar_map[i].name) == true) return lmchar_map[i].lmchar; } return LMCH_NoSymbol; } #include <X11/keysym.h> // for XK_FOO meh #include <X11/X.h> // for FOOMapIndex meh void kbd_default_map(void) { for (int i = 0; i < (int) NELEM(kbd_map); i++) kbd_map[i] = LMCH_NoSymbol; for (int i = 0; i < (int) NELEM(modifier_map); i++) modifier_map[i] = KBD_NoSymbol; /* *INDENT-OFF* */ /* * Initialize keyboard modifiers */ modifier_map[ShiftMapIndex] = KBD_SHIFT; modifier_map[LockMapIndex] = KBD_SHIFT_LOCK; modifier_map[ControlMapIndex] = KBD_CONTROL; modifier_map[Mod1MapIndex] = KBD_META; modifier_map[Mod2MapIndex] = KBD_NoSymbol; modifier_map[Mod3MapIndex] = KBD_NoSymbol; modifier_map[Mod4MapIndex] = KBD_TOP; modifier_map[Mod5MapIndex] = KBD_NoSymbol; /* * Initialize keyboard mapping. * * We cann't reuse lmch.defs here because the Lisp Machine * charachter set has names and charachters that do not have a * corresponding mapping in X11. */ /* Function keys */ /* * LispM "Escape" is actually Terminal, but in Zmacs this is more * useful. */ kbd_map[XK_Escape] = LMCH_altmode; kbd_map[XK_F1] = LMCH_system; kbd_map[XK_F2] = LMCH_network; kbd_map[XK_F3] = LMCH_status; kbd_map[XK_F4] = LMCH_terminal; kbd_map[XK_F5] = LMCH_help; kbd_map[XK_F6] = LMCH_clear; kbd_map[XK_F7] = LMCH_break; kbd_map[XK_Page_Up] = LMCH_abort; kbd_map[XK_Page_Down] = LMCH_resume; kbd_map[XK_Home] = LMCH_break; /* This is really handy next to the others */ kbd_map[XK_End] = LMCH_end; /* This is natural */ kbd_map[XK_Left] = LMCH_hand_left; kbd_map[XK_Right] = LMCH_hand_right; kbd_map[XK_Up] = LMCH_hand_up; kbd_map[XK_Down] = LMCH_hand_down; /* Unshifted */ kbd_map[XK_grave] = LMCH_grave; kbd_map[XK_1] = LMCH_1; kbd_map[XK_2] = LMCH_2; kbd_map[XK_3] = LMCH_3; kbd_map[XK_4] = LMCH_4; kbd_map[XK_5] = LMCH_5; kbd_map[XK_6] = LMCH_6; kbd_map[XK_7] = LMCH_7; kbd_map[XK_8] = LMCH_8; kbd_map[XK_9] = LMCH_9; kbd_map[XK_0] = LMCH_0; kbd_map[XK_minus] = LMCH_minus; kbd_map[XK_equal] = LMCH_equal; kbd_map[XK_Tab] = LMCH_tab; kbd_map[XK_q] = LMCH_q; kbd_map[XK_w] = LMCH_w; kbd_map[XK_e] = LMCH_e; kbd_map[XK_r] = LMCH_r; kbd_map[XK_t] = LMCH_t; kbd_map[XK_y] = LMCH_y; kbd_map[XK_u] = LMCH_u; kbd_map[XK_i] = LMCH_i; kbd_map[XK_o] = LMCH_o; kbd_map[XK_p] = LMCH_p; kbd_map[XK_bracketleft] = LMCH_bracketleft; kbd_map[XK_bracketright] = LMCH_bracketright; kbd_map[XK_backslash] = LMCH_backslash; kbd_map[XK_BackSpace] = LMCH_rubout; kbd_map[XK_a] = LMCH_a; kbd_map[XK_s] = LMCH_s; kbd_map[XK_d] = LMCH_d; kbd_map[XK_f] = LMCH_f; kbd_map[XK_g] = LMCH_g; kbd_map[XK_h] = LMCH_h; kbd_map[XK_j] = LMCH_j; kbd_map[XK_k] = LMCH_k; kbd_map[XK_l] = LMCH_l; kbd_map[XK_semicolon] = LMCH_semicolon; kbd_map[XK_apostrophe] = LMCH_apostrophe; kbd_map[XK_Return] = LMCH_cr; kbd_map[XK_z] = LMCH_z; kbd_map[XK_x] = LMCH_x; kbd_map[XK_c] = LMCH_c; kbd_map[XK_v] = LMCH_v; kbd_map[XK_b] = LMCH_b; kbd_map[XK_n] = LMCH_n; kbd_map[XK_m] = LMCH_m; kbd_map[XK_comma] = LMCH_comma; kbd_map[XK_period] = LMCH_period; kbd_map[XK_slash] = LMCH_slash; /* Shifted */ kbd_map[XK_asciitilde] = LMCH_asciitilde; kbd_map[XK_exclam] = LMCH_exclam; kbd_map[XK_at] = LMCH_at; kbd_map[XK_numbersign] = LMCH_numbersign; kbd_map[XK_dollar] = LMCH_dollar; kbd_map[XK_percent] = LMCH_percent; kbd_map[XK_asciicircum] = LMCH_asciicircum; kbd_map[XK_ampersand] = LMCH_ampersand; kbd_map[XK_asterisk] = LMCH_asterisk; kbd_map[XK_parenleft] = LMCH_parenleft; kbd_map[XK_parenright] = LMCH_parenright; kbd_map[XK_underscore] = LMCH_underscore; kbd_map[XK_plus] = LMCH_plus; kbd_map[XK_Q] = LMCH_Q; kbd_map[XK_W] = LMCH_W; kbd_map[XK_E] = LMCH_E; kbd_map[XK_R] = LMCH_R; kbd_map[XK_T] = LMCH_T; kbd_map[XK_Y] = LMCH_Y; kbd_map[XK_U] = LMCH_U; kbd_map[XK_I] = LMCH_I; kbd_map[XK_O] = LMCH_O; kbd_map[XK_P] = LMCH_P; kbd_map[XK_braceleft] = LMCH_braceleft; kbd_map[XK_braceright] = LMCH_braceright; kbd_map[XK_bar] = LMCH_bar; kbd_map[XK_A] = LMCH_A; kbd_map[XK_S] = LMCH_S; kbd_map[XK_D] = LMCH_D; kbd_map[XK_F] = LMCH_F; kbd_map[XK_G] = LMCH_G; kbd_map[XK_H] = LMCH_H; kbd_map[XK_J] = LMCH_J; kbd_map[XK_K] = LMCH_K; kbd_map[XK_L] = LMCH_L; kbd_map[XK_colon] = LMCH_colon; kbd_map[XK_quotedbl] = LMCH_quotedbl; kbd_map[XK_Z] = LMCH_Z; kbd_map[XK_X] = LMCH_X; kbd_map[XK_C] = LMCH_C; kbd_map[XK_V] = LMCH_V; kbd_map[XK_B] = LMCH_B; kbd_map[XK_N] = LMCH_N; kbd_map[XK_M] = LMCH_M; kbd_map[XK_less] = LMCH_less; kbd_map[XK_greater] = LMCH_greater; kbd_map[XK_question] = LMCH_question; kbd_map[XK_space] = LMCH_space; /* *INDENT-ON* */ } void kbd_init(void) { // kbd_default_map(); if (kbd_type == 0) knight_init(); else cadet_init(); } |
Changes to kbd.h.
︙ | ︙ | |||
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | #define KBD_ALT_LOCK 8 #define KBD_HYPER 9 #define KBD_SUPER 10 extern int kbd_type; extern uint32_t kbd_scancode; extern void kbd_init(void); extern void kbd_event(int, int); extern void kbd_queue_key_event(int); extern void kbd_dequeue_key_event(void); extern void kbd_warm_boot_key(void); extern int kbd_lmchar(const char *); | > > > > > | 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | #define KBD_ALT_LOCK 8 #define KBD_HYPER 9 #define KBD_SUPER 10 extern int kbd_type; extern uint32_t kbd_scancode; extern int kbd_map[65535]; extern int modifier_map[8]; void kbd_default_map(void); extern void kbd_init(void); extern void kbd_event(int, int); extern void kbd_queue_key_event(int); extern void kbd_dequeue_key_event(void); extern void kbd_warm_boot_key(void); extern int kbd_lmchar(const char *); |
Changes to knight.c.
︙ | ︙ | |||
45 46 47 48 49 50 51 | default: WARNING(TRACE_KBD, "kbd (knight): unknown bucky key: 0%o\n", k); break; } } void | | | 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | default: WARNING(TRACE_KBD, "kbd (knight): unknown bucky key: 0%o\n", k); break; } } void knight_process_key(int keysym, int bi, int keydown) { int kc; /* Knight scancode. */ int lmchar; /* Lisp machine character to insert */ DEBUG(TRACE_KBD, "knight_process_key() - keysym = 0%o, bi = %d\n", keysym, bi); if (bi != -1) { DEBUG(TRACE_KBD, "knight_process_key() - bucky short-circuit\n"); |
︙ | ︙ |
Changes to knight.h.
1 2 3 4 5 6 7 8 9 | #pragma once #if WITH_X11 #include "x11.h" #elif WITH_SDL1 #include "sdl1.h" #endif extern void knight_init(void); | | > | 1 2 3 4 5 6 7 8 9 10 11 | #pragma once #if WITH_X11 #include "x11.h" #elif WITH_SDL1 #include "sdl1.h" #endif extern void knight_init(void); extern void knight_process_key(int, int, int); extern void knight_process_bucky(int k, int *extra); |
Changes to sdl1.c.
︙ | ︙ | |||
8 9 10 11 12 13 14 | #include "tv.h" #include "kbd.h" #include "mouse.h" #include "utrace.h" #include "idle.h" SDL_Surface *screen; | < < < < < < < | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #include "tv.h" #include "kbd.h" #include "mouse.h" #include "utrace.h" #include "idle.h" SDL_Surface *screen; /* * This is shared between x11.c, and sdl1.c ... the only difference is * the hook in send_accumulated_updates. */ unsigned long Background; |
︙ | ︙ | |||
60 61 62 63 64 65 66 | u_minh = 0x7fffffff; u_maxh = 0; u_minv = 0x7fffffff; u_maxv = 0; } static | | | 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | u_minh = 0x7fffffff; u_maxh = 0; u_minv = 0x7fffffff; u_maxv = 0; } static void sdl1_cleanup(void) { SDL_Quit(); } /* * Returns the X11 modifier index of KEYCODE, or -1 if not found. */ |
︙ | ︙ | |||
95 96 97 98 99 100 101 | * the IOB KBD. */ static void process_key(SDL_KeyboardEvent *e, int keydown) { // KeySym keysym; // SDLKey keycode; | | | | | | | | | | | | | | | | | | | 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 | * the IOB KBD. */ static void process_key(SDL_KeyboardEvent *e, int keydown) { // KeySym keysym; // SDLKey keycode; int bi; unsigned char buf[5]; idle_keyboard_activity(); // keycode = SDL_KeysymToKeycode(e->keysym.sym); //if (event->key.code == key) ... // XLookupString(&e->xkey, (char *)buf, sizeof(buf), &keysym, &status); // keycode = x11_keysym_to_keycode(keysym); // if (keycode == NoSymbol || keysym > NELEM(kbd_map)) { // NOTICE(TRACE_USIM, "kbd (cadet): unable to translate to sdl1 keycode (keysym = 0%o)\n", keysym); // return; // } if (kbd_type == 0) { if (!keydown) return; bi = 0; // if (e->xkey.state & ShiftMask) // knight_process_bucky(ShiftMapIndex, &bi); // if (e->xkey.state & LockMask) // knight_process_bucky(LockMapIndex, &bi); // if (e->xkey.state & ControlMask) // knight_process_bucky(ControlMapIndex, &bi); // if (e->xkey.state & Mod1Mask) // knight_process_bucky(Mod1MapIndex, &bi); // if (e->xkey.state & Mod2Mask) // knight_process_bucky(Mod2MapIndex, &bi); // if (e->xkey.state & Mod3Mask) // knight_process_bucky(Mod3MapIndex, &bi); // if (e->xkey.state & Mod4Mask) // knight_process_bucky(Mod4MapIndex, &bi); // if (e->xkey.state & Mod5Mask) // knight_process_bucky(Mod5MapIndex, &bi); knight_process_key(e->keysym.sym, bi, keydown); } else { bi = sdl1_bucky(e->keysym.sym); cadet_process_key(e->keysym.sym, bi, keydown); } } void sdl1_event(void) { SDL_Event ev1, *ev = &ev1; send_accumulated_updates(); kbd_dequeue_key_event(); while (SDL_PollEvent(ev)) { switch (ev->type) { case SDL_VIDEOEXPOSE: SDL_UpdateRect(screen, 0, 0, screen->w, screen->h); break; |
︙ | ︙ | |||
165 166 167 168 169 170 171 | case SDL_MOUSEBUTTONUP: { int x; int y; int dx, dy; int buttons; int state; | | | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | | | 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 | case SDL_MOUSEBUTTONUP: { int x; int y; int dx, dy; int buttons; int state; buttons = 0; state = SDL_GetRelativeMouseState(&dx, &dy); if (state & SDL_BUTTON(SDL_BUTTON_LEFT)) buttons = 1; /* Tail */ if (state & SDL_BUTTON(SDL_BUTTON_MIDDLE)) buttons = 2; /* Middle */ if (state & SDL_BUTTON(SDL_BUTTON_RIGHT)) buttons = 3; /* Head */ state = SDL_GetMouseState(&x, &y); mouse_event(x, y, buttons); break; } case SDL_QUIT: exit(0); break; } } } void sdl1_init(void) { NOTICE(TRACE_USIM, "tv: using SDL backend for monitor and keyboard\n"); Foreground = 0xff; // White Background = 0x00; // Black if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_NOPARACHUTE)) { fprintf(stderr, "SDL_Init(): %s", SDL_GetError()); exit(1); } /* * We still want Ctrl-C to work - undo the SDL redirections. */ signal(SIGINT, SIG_DFL); |
︙ | ︙ |
Changes to sdl1.h.
1 2 3 4 5 | #pragma once #include <SDL.h> extern void sdl1_init(void); | < | 1 2 3 4 5 6 7 8 9 10 11 12 13 | #pragma once #include <SDL.h> extern void sdl1_init(void); extern void sdl1_event(void); extern unsigned long Background; extern unsigned long Foreground; extern void accumulate_update(int, int, int, int); SDL_Surface *screen; |
Changes to sdl2.c.
︙ | ︙ | |||
156 157 158 159 160 161 162 | #define XK_greater 0x003e /* U+003E GREATER-THAN SIGN */ #define XK_question 0x003f /* U+003F QUESTION MARK */ SDL_Window *window; SDL_Renderer *renderer; SDL_Texture *texture; | < < < < < < < | 156 157 158 159 160 161 162 163 164 165 166 167 168 169 | #define XK_greater 0x003e /* U+003E GREATER-THAN SIGN */ #define XK_question 0x003f /* U+003F QUESTION MARK */ SDL_Window *window; SDL_Renderer *renderer; SDL_Texture *texture; /* * This is shared between x11.c, and sdl2.c ... the only difference is * the hook in send_accumulated_updates. */ unsigned long Background; |
︙ | ︙ | |||
305 306 307 308 309 310 311 | } static void process_key(SDL_KeyboardEvent e, int keydown) { // KeySym keysym; // SDLKey keycode; | | < | | | | | | > | | > > > > | < < | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | | | | | 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 | } static void process_key(SDL_KeyboardEvent e, int keydown) { // KeySym keysym; // SDLKey keycode; int bi; int keysym; idle_keyboard_activity(); // keycode = SDL_KeysymToKeycode(e->keysym.sym); //if (event->key.code == key) ... // XLookupString(&e->xkey, (char *)buf, sizeof(buf), &keysym, &status); // keycode = sdl2_keysym_to_keycode(keysym); // if (keycode == NoSymbol || keysym > NELEM(kbd_map)) { // NOTICE(TRACE_USIM, "kbd (cadet): unable to translate to sdl2 keycode (keysym = 0%o)\n", keysym); // return; // } printf("enter process_key ...\n"); if (kbd_type == 0) { if (!keydown) return; bi = 0; // if (e->xkey.state & ShiftMask) // knight_process_bucky(sdl2_modifier_map[ShiftMapIndex], &bi); // if (e->xkey.state & LockMask) // knight_process_bucky(sdl2_modifier_map[LockMapIndex], &bi); // if (e->xkey.state & ControlMask) // knight_process_bucky(sdl2_modifier_map[ControlMapIndex], &bi); // if (e->xkey.state & Mod1Mask) // knight_process_bucky(sdl2_modifier_map[Mod1MapIndex], &bi); // if (e->xkey.state & Mod2Mask) // knight_process_bucky(sdl2_modifier_map[Mod2MapIndex], &bi); // if (e->xkey.state & Mod3Mask) // knight_process_bucky(sdl2_modifier_map[Mod3MapIndex], &bi); // if (e->xkey.state & Mod4Mask) // knight_process_bucky(sdl2_modifier_map[Mod4MapIndex], &bi); // if (e->xkey.state & Mod5Mask) // knight_process_bucky(sdl2_modifier_map[Mod5MapIndex], &bi); knight_process_key(e.keysym.sym, bi, keydown); } else { bi = sdl2_bucky(e.keysym.mod); keysym = sdl2_keysym_to_xk(e); printf("bi = %d, keysym=%c -- 0%o (%c)\n", bi,keysym,keysym,keydown?'d':'u'); if (keysym == 0xffffff) return; cadet_process_key(keysym, bi, keydown); } printf("done process_key ...\n"); } void sdl2_event(void) { SDL_Event ev; send_accumulated_updates(); kbd_dequeue_key_event(); if (is_mouse_warp) { is_mouse_warp = 0; SDL_WarpMouseInWindow(window, mouse_warp_x, mouse_warp_y); } while (SDL_PollEvent(&ev)) { switch (ev.type) { case SDL_WINDOWEVENT: SDL_UpdateTexture(texture, NULL, tv_bitmap, tv_width * sizeof (Uint32)); // flush SDL_RenderClear(renderer); SDL_RenderCopy(renderer, texture, NULL, NULL); SDL_RenderPresent(renderer); break; case SDL_KEYDOWN: process_key(ev.key, 1); break; case SDL_KEYUP: process_key(ev.key, 0); break; case SDL_MOUSEMOTION: case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONUP: // Need to at least go past date prompt for mouse to work. // mouse_event(ev.button.x, ev.button.y, ev.button.button); break; case SDL_QUIT: exit(0); break; } } } void sdl2_init(void) { NOTICE(TRACE_USIM, "tv: using SDL backend for monitor and keyboard\n"); Foreground = 0xffffff; // White Background = 0x000000; // Black SDL_CreateWindowAndRenderer(tv_width, tv_height, SDL_WINDOW_OPENGL, &window, &renderer); SDL_ShowCursor(0); /* Invisible cursor. */ // SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); // SDL_RenderClear(renderer); // SDL_RenderPresent(renderer); SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear"); // make the scaled rendering look smoother. SDL_RenderSetLogicalSize(renderer, tv_width, tv_height); texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, tv_width, tv_height); } |
Changes to sdl2.h.
1 2 3 4 5 | #pragma once #include <SDL2/SDL.h> extern void sdl2_init(void); | < < < < | 1 2 3 4 5 6 7 8 9 10 11 | #pragma once #include <SDL2/SDL.h> extern void sdl2_init(void); extern void sdl2_event(void); extern unsigned long Background; extern unsigned long Foreground; extern void accumulate_update(int, int, int, int); |
Changes to ucfg.c.
︙ | ︙ | |||
42 43 44 45 46 47 48 49 50 51 52 | /* * Change trace defaults; the default in trace.c is to be very * very quiet. */ trace_level = LOG_NOTICE; trace_facilities = TRACE_USIM; trace_stream = stdout; // stderr; #ifdef WITH_X11 /* * Initialize default X11 keybaord translation map. */ | > < < < < < | 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | /* * Change trace defaults; the default in trace.c is to be very * very quiet. */ trace_level = LOG_NOTICE; trace_facilities = TRACE_USIM; trace_stream = stdout; // stderr; kbd_default_map(); #ifdef WITH_X11 /* * Initialize default X11 keybaord translation map. */ x11_grab_keyboard = true; #endif /* * Initialize default idle values. */ idle_cycles = 0x0ffff * 10; idle_quantum = 0x0ffff; idle_timeout = 1000; |
︙ | ︙ | |||
231 232 233 234 235 236 237 | * ---!!! We don't differentiate between left/right on * ---!!! the Lisp Machine side. */ if (streq(value, "")) { warnx("value for %s is empty", name); return 1; } | | | | | | | | | | 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 | * ---!!! We don't differentiate between left/right on * ---!!! the Lisp Machine side. */ if (streq(value, "")) { warnx("value for %s is empty", name); return 1; } if (streq(name, "Shift")) modifier_map[ShiftMapIndex] = lmbucky(value); else if (streq(name, "Lock")) modifier_map[LockMapIndex] = lmbucky(value); else if (streq(name, "Control")) modifier_map[ControlMapIndex] = lmbucky(value); else if (streq(name, "Mod1")) modifier_map[Mod1MapIndex] = lmbucky(value); else if (streq(name, "Mod2")) modifier_map[Mod2MapIndex] = lmbucky(value); else if (streq(name, "Mod3")) modifier_map[Mod3MapIndex] = lmbucky(value); else if (streq(name, "Mod4")) modifier_map[Mod4MapIndex] = lmbucky(value); else if (streq(name, "Mod5")) modifier_map[Mod5MapIndex] = lmbucky(value); else { warnx("unknown x11 modifier: %s", name); return 1; } } #elif WITH_SDL1 #endif |
︙ | ︙ | |||
262 263 264 265 266 267 268 | return 1; } lmchar = kbd_lmchar(value); if (lmchar == LMCH_NoSymbol) { warnx("unknown lisp machine character name: %s", value); return 1; } | | | 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 | return 1; } lmchar = kbd_lmchar(value); if (lmchar == LMCH_NoSymbol) { warnx("unknown lisp machine character name: %s", value); return 1; } kbd_map[xk] = lmchar; } #elif WITH_SDL1 #endif if (streq(section, "idle") == true) { if (streq(name, "cycles")) read_integer_value(name, value, &idle_cycles); else if (streq(name, "quantum")) read_integer_value(name, value, &idle_quantum); |
︙ | ︙ |
Changes to x11.c.
︙ | ︙ | |||
38 39 40 41 42 43 44 | static GC idle_gc; static XImage *ximage; unsigned long Foreground; unsigned long Background; static int old_run_state; bool x11_grab_keyboard; | < < < < < < < | 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | static GC idle_gc; static XImage *ximage; unsigned long Foreground; unsigned long Background; static int old_run_state; bool x11_grab_keyboard; /* Wrappers and utlity functions for X11. */ int x11_query_keymap(char k[32]) { |
︙ | ︙ | |||
100 101 102 103 104 105 106 | process_key(XEvent *e, int keydown) { KeySym keysym; KeyCode keycode; static XComposeStatus status; int bi; unsigned char buf[5]; | | | | | | | | | | | | | | 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 | process_key(XEvent *e, int keydown) { KeySym keysym; KeyCode keycode; static XComposeStatus status; int bi; unsigned char buf[5]; idle_keyboard_activity(); XLookupString(&e->xkey, (char *)buf, sizeof(buf), &keysym, &status); keycode = x11_keysym_to_keycode(keysym); if (keycode == NoSymbol || keysym > NELEM(kbd_map)) { printf("kbd (cadet): unable to translate to x11 keycode (keysym = 0%o)\n", keysym); return; } if (kbd_type == 0) { if (!keydown) return; bi = 0; if (e->xkey.state & ShiftMask) knight_process_bucky(ShiftMapIndex, &bi); if (e->xkey.state & LockMask) knight_process_bucky(LockMapIndex, &bi); if (e->xkey.state & ControlMask) knight_process_bucky(ControlMapIndex, &bi); if (e->xkey.state & Mod1Mask) knight_process_bucky(Mod1MapIndex, &bi); if (e->xkey.state & Mod2Mask) knight_process_bucky(Mod2MapIndex, &bi); if (e->xkey.state & Mod3Mask) knight_process_bucky(Mod3MapIndex, &bi); if (e->xkey.state & Mod4Mask) knight_process_bucky(Mod4MapIndex, &bi); if (e->xkey.state & Mod5Mask) knight_process_bucky(Mod5MapIndex, &bi); knight_process_key(keysym, bi, keydown); } else { bi = x11_bucky(keycode); printf("bi = %d, keysym=%c -- 0%o (%c)\n", bi,keysym,keysym,keydown?'d':'u'); cadet_process_key(keysym, bi, keydown); } } static int u_minh = 0x7fffffff; static int u_maxh; static int u_minv = 0x7fffffff; static int u_maxv; |
︙ | ︙ | |||
236 237 238 239 240 241 242 | break; } } if (old_run_state != !halted) old_run_state = !halted; } | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 229 230 231 232 233 234 235 236 237 238 239 240 241 242 | break; } } if (old_run_state != !halted) old_run_state = !halted; } void x11_init(void) { char *displayname; unsigned long bg_pixel; int xscreen; Window root; |
︙ | ︙ |
Changes to x11.h.
1 2 3 4 5 6 7 8 | #pragma once #include <stdbool.h> #include <X11/Xlib.h> #include <X11/Xutil.h> #include <X11/keysym.h> | < < < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #pragma once #include <stdbool.h> #include <X11/Xlib.h> #include <X11/Xutil.h> #include <X11/keysym.h> extern bool x11_grab_keyboard; extern int x11_query_keymap(char[32]); extern KeyCode x11_keysym_to_keycode(KeySym); extern XModifierKeymap *x11_get_modifier_mapping(void); extern int x11_bucky(KeyCode); extern void x11_init(void); extern void x11_event(void); extern unsigned long Background; extern unsigned long Foreground; extern void accumulate_update(int, int, int, int); |