int gemtk_keybd2ascii( int keybd, int shift) { KEYTAB *key; key = (KEYTAB *)Keytbl( (char*)-1, (char*)-1, (char*)-1); return (shift)?key->shift[keybd>>8]:key->unshift[keybd>>8]; }
void AtariIkbd_InitOSKeymap(_THIS) { int i; SDL_memset(SDL_AtariIkbd_keyboard, KEY_UNDEFINED, ATARIBIOS_MAXKEYS); /* Initialize keymap */ for ( i=0; i<sizeof(keymap); i++ ) keymap[i] = SDLK_UNKNOWN; /* Functions keys */ for ( i = 0; i<10; i++ ) keymap[SCANCODE_F1 + i] = SDLK_F1+i; /* Cursor keypad */ keymap[SCANCODE_HELP] = SDLK_HELP; keymap[SCANCODE_UNDO] = SDLK_UNDO; keymap[SCANCODE_INSERT] = SDLK_INSERT; keymap[SCANCODE_CLRHOME] = SDLK_HOME; keymap[SCANCODE_UP] = SDLK_UP; keymap[SCANCODE_DOWN] = SDLK_DOWN; keymap[SCANCODE_RIGHT] = SDLK_RIGHT; keymap[SCANCODE_LEFT] = SDLK_LEFT; /* Special keys */ keymap[SCANCODE_ESCAPE] = SDLK_ESCAPE; keymap[SCANCODE_BACKSPACE] = SDLK_BACKSPACE; keymap[SCANCODE_TAB] = SDLK_TAB; keymap[SCANCODE_ENTER] = SDLK_RETURN; keymap[SCANCODE_DELETE] = SDLK_DELETE; keymap[SCANCODE_LEFTCONTROL] = SDLK_LCTRL; keymap[SCANCODE_LEFTSHIFT] = SDLK_LSHIFT; keymap[SCANCODE_RIGHTSHIFT] = SDLK_RSHIFT; keymap[SCANCODE_LEFTALT] = SDLK_LALT; keymap[SCANCODE_CAPSLOCK] = SDLK_CAPSLOCK; /* Read XBIOS tables for scancode -> ascii translation */ curtables=Keytbl(KT_NOCHANGE, KT_NOCHANGE, KT_NOCHANGE); tab_unshift=curtables->unshift; tab_shift=curtables->shift; tab_caps=curtables->caps; /* Set Caps lock initial state */ caps_state=(Kbshift(-1) & (1<<K_CAPSLOCK)); /* Now install our handler */ SDL_AtariIkbd_mouseb = SDL_AtariIkbd_mousex = SDL_AtariIkbd_mousey = 0; atari_prevmouseb = 0; Supexec(SDL_AtariIkbdInstall); }
void SDL_Atari_InitInternalKeymap(_THIS) { int i; _KEYTAB *key_tables; /* Read system tables for scancode -> ascii translation */ key_tables = (_KEYTAB *) Keytbl(KT_NOCHANGE, KT_NOCHANGE, KT_NOCHANGE); keytab_normal = key_tables->unshift; /* Initialize keymap */ for ( i=0; i<ATARIBIOS_MAXKEYS; i++ ) keymap[i] = SDLK_UNKNOWN; /* Functions keys */ for ( i = 0; i<10; i++ ) keymap[SCANCODE_F1 + i] = SDLK_F1+i; /* Cursor keypad */ keymap[SCANCODE_HELP] = SDLK_HELP; keymap[SCANCODE_UNDO] = SDLK_UNDO; keymap[SCANCODE_INSERT] = SDLK_INSERT; keymap[SCANCODE_CLRHOME] = SDLK_HOME; keymap[SCANCODE_UP] = SDLK_UP; keymap[SCANCODE_DOWN] = SDLK_DOWN; keymap[SCANCODE_RIGHT] = SDLK_RIGHT; keymap[SCANCODE_LEFT] = SDLK_LEFT; /* Special keys */ keymap[SCANCODE_ESCAPE] = SDLK_ESCAPE; keymap[SCANCODE_BACKSPACE] = SDLK_BACKSPACE; keymap[SCANCODE_TAB] = SDLK_TAB; keymap[SCANCODE_ENTER] = SDLK_RETURN; keymap[SCANCODE_DELETE] = SDLK_DELETE; keymap[SCANCODE_LEFTCONTROL] = SDLK_LCTRL; keymap[SCANCODE_LEFTSHIFT] = SDLK_LSHIFT; keymap[SCANCODE_RIGHTSHIFT] = SDLK_RSHIFT; keymap[SCANCODE_LEFTALT] = SDLK_LALT; keymap[SCANCODE_CAPSLOCK] = SDLK_CAPSLOCK; }
int play() { short c; short ret; short testmove(); short undolock = 1; /* locked for undo */ #if ATARIST /* Mess up keyboard to make cursor keys work */ KEY_TABLES *kbt; KEY_TABLES old_kbt; int i; kbt = Keytbl(-1, -1, -1); old_kbt = *kbt; for (i = 0; i < 128; i++) { unshifted[i] = kbt->unshifted[i]; shifted[i] = kbt->shifted[i]; } unshifted[0x48] = 'k'; /* Up */ unshifted[0x50] = 'j'; /* Down */ unshifted[0x4b] = 'h'; /* Left */ unshifted[0x4d] = 'l'; /* Right */ unshifted[0x61] = 'u'; /* Undo */ unshifted[0x62] = '?'; /* Help */ shifted[0x48] = '\013'; /* Up ^K */ shifted[0x50] = '\012'; /* Down ^J */ shifted[0x4b] = '\010'; /* Left ^H */ shifted[0x4d] = '\014'; /* Right ^L */ shifted[0x61] = 'q'; /* Undo */ Keytbl(unshifted, shifted, -1); #endif showscreen(); tmpsave(); ret = 0; while( ret == 0) { switch( (c = get_char())) { case 'q': /* quit the game */ ret = E_ENDGAME; break; case 's': /* save the games */ if( (ret = savegame()) == 0) ret = E_SAVED; break; case '?': /* show the help file */ showhelp(); showscreen(); break; case CNTL_R: /* refresh the screen */ clear(); showscreen(); break; case 'c': /* temporary save */ tmpsave(); break; case CNTL_U: /* reset to temporary save */ tmpreset(); undolock = 1; showscreen(); break; case 'U': /* undo this level */ moves = pushes = 0; if( (ret = readscreen()) == 0) { showscreen(); undolock = 1; } break; case 'u': /* undo last move */ if(state_num > 0) { undomove(); undolock = 0; /*1*/ } break; case 'k': /* up */ case 'K': /* run up */ case CNTL_K: /* run up, stop before object */ case 'j': /* down */ case 'J': /* run down */ case CNTL_J: /* run down, stop before object */ case 'l': /* right */ case 'L': /* run right */ case CNTL_L: /* run right, stop before object */ case 'h': /* left */ case 'H': /* run left */ case CNTL_H: /* run left, stop before object */ do { if( (action = testmove( c)) != 0) { soko_state *s; s = &state[state_num]; s->action = action; s->ppos = ppos; s->lppc = map[ppos.x][ppos.y]; s->tpos1 = tpos1; s->ltp1c = map[tpos1.x][tpos1.y]; s->tpos2 = tpos2; s->ltp2c = map[tpos2.x][tpos2.y]; domove( s->action); undolock = 0; state_num++; } } while( (action != 0) && (! islower( c)) && (packets != savepack)); break; default: helpmessage(); break; } if( (ret == 0) && (packets == savepack)) { scorelevel = level; scoremoves = moves; scorepushes = pushes; break; } } #if ATARIST kbt = Keytbl(-1, -1, -1); kbt->unshifted = old_kbt.unshifted; kbt->shifted = old_kbt.shifted; /* Keytbl(old_kbt.unshifted, old_kbt.shifted, old_kbt.capslock);*/ #endif return ret; }