Annotation of uae/src/od-win32/keyboard.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * UAE - The Un*x Amiga Emulator
                      3:  *
                      4:  * Additional Win32 helper functions not calling any system routines
                      5:  *
                      6:  * (c) 1997 Mathias Ortmann
                      7:  */
                      8: 
                      9: #include "config.h"
                     10: #include "sysconfig.h"
                     11: 
                     12: #include <assert.h>
                     13: #include <ctype.h>
                     14: #include <signal.h>
                     15: #include <windows.h>
                     16: 
                     17: #include "sysdeps.h"
                     18: #include "uae.h"
                     19: #include "options.h"
                     20: #include "threaddep/penguin.h"
                     21: #include "include/memory.h"
                     22: #include "custom.h"
                     23: #include "readcpu.h"
                     24: #include "newcpu.h"
                     25: #include "keyboard.h"
                     26: #include "xwin.h"
                     27: #include "disk.h"
                     28: #include "keybuf.h"
                     29: #include "gui.h"
                     30: 
                     31: static int keystate[256];
                     32: 
                     33: static int helppressed (void)
                     34: {
                     35:     return GetAsyncKeyState (VK_END) & 0x8000;
                     36: }
                     37: 
                     38: static int shiftpressed (void)
                     39: {
                     40:     return GetAsyncKeyState (VK_SHIFT) & 0x8000 ? 1 : 0;
                     41: }
                     42: 
                     43: static int getcapslock (void)
                     44: {
                     45:     BYTE keyState[256];
                     46: 
                     47:     GetKeyboardState (keyState);
                     48:     return keyState[VK_CAPITAL] & 1;
                     49: }
                     50: 
                     51: 
                     52: /* there's a problem remaining with the semantics of the '#' key on U.S. keyboards */
                     53: static int scancode2amiga (int keycode, int scancode)
                     54: {
                     55:     switch (keycode & 0xff) {
                     56:      case VK_INSERT:
                     57:      case VK_LWIN:
                     58:        return AK_LAMI;
                     59:      case VK_HOME:
                     60:      case VK_RWIN:
                     61:        return AK_RAMI;
                     62:      case VK_DECIMAL:
                     63:        return 0x3c;
                     64:      case VK_SCROLL:
                     65:        return AK_inhibit;
                     66:      case VK_F12:
                     67:      case VK_APPS:
                     68:        return -2;
                     69:      case VK_PAUSE:
                     70:        return -3;
                     71:      case VK_DIVIDE:
                     72:        return AK_NPDIV;
                     73:      case VK_MULTIPLY:
                     74:        return AK_NPMUL;
                     75:      case VK_SUBTRACT:
                     76:        return AK_NPSUB;
                     77:      case VK_ADD:
                     78:        return AK_NPADD;
                     79:      case VK_NUMPAD0:
                     80:        return AK_NP0;
                     81:      case VK_NUMPAD1:
                     82:        return AK_NP1;
                     83:      case VK_NUMPAD2:
                     84:        return AK_NP2;
                     85:      case VK_NUMPAD3:
                     86:        return AK_NP3;
                     87:      case VK_NUMPAD4:
                     88:        return AK_NP4;
                     89:      case VK_NUMPAD5:
                     90:        return AK_NP5;
                     91:      case VK_NUMPAD6:
                     92:        return AK_NP6;
                     93:      case VK_NUMPAD7:
                     94:        return AK_NP7;
                     95:      case VK_NUMPAD8:
                     96:        return AK_NP8;
                     97:      case VK_NUMPAD9:
                     98:        return AK_NP9;
                     99:      case VK_UP:
                    100:        return AK_UP;
                    101:      case VK_DOWN:
                    102:        return AK_DN;
                    103:      case VK_LEFT:
                    104:        return AK_LF;
                    105:      case VK_RIGHT:
                    106:        return AK_RT;
                    107:      case VK_CONTROL:
                    108:        return scancode == 0x11d ? AK_RCTRL : AK_CTRL;
                    109:      case VK_RETURN:
                    110:        return keycode > 0xff ? 0x43 : 0x44;
                    111:      case VK_CAPITAL:
                    112:        return -4;
                    113:      case VK_F1:
                    114:        if (helppressed ())
                    115:            return -10 - shiftpressed ();
                    116:        return 0x50;
                    117:      case VK_F2:
                    118:        if (helppressed ())
                    119:            return -12 - shiftpressed ();
                    120:        return 0x51;
                    121:     case VK_F3:
                    122:        if (helppressed ())
                    123:            return -14 - shiftpressed ();
                    124:        return 0x52;
                    125:     case VK_F4:
                    126:        if (helppressed ())
                    127:            return -16 - shiftpressed ();
                    128:        return 0x53;
                    129:      case VK_F5:
                    130:        return 0x54;
                    131:      case VK_F6:
                    132:        return 0x55;
                    133:      case VK_F7:
                    134:        return 0x56;
                    135:      case VK_F8:
                    136:        return 0x57;
                    137:      case VK_F9:
                    138:        return 0x58;
                    139:      case VK_F10:
                    140:        return 0x59;
                    141:      case VK_NEXT:
                    142:        return 0x5f;
                    143:     }
                    144: 
                    145:     switch (scancode) {
                    146:      case 0x01:
                    147:        return 0x45;
                    148:      case 0x29:
                    149:        return 0x00;
                    150:      case 0x02:
                    151:        return 0x01;
                    152:      case 0x03:
                    153:        return 0x02;
                    154:      case 0x04:
                    155:        return 0x03;
                    156:      case 0x05:
                    157:        return 0x04;
                    158:      case 0x06:
                    159:        return 0x05;
                    160:      case 0x07:
                    161:        return 0x06;
                    162:      case 0x08:
                    163:        return 0x07;
                    164:      case 0x09:
                    165:        return 0x08;
                    166:      case 0x0a:
                    167:        return 0x09;
                    168:      case 0x0b:
                    169:        return 0x0a;
                    170:      case 0x0c:
                    171:        return 0x0b;
                    172:      case 0x0d:
                    173:        return 0x0c;
                    174:      case 0x57:
                    175:        return 0x0d;
                    176:      case 0x0e:
                    177:        return 0x41;
                    178:      case 0x0f:
                    179:        return 0x42;
                    180:      case 0x10:
                    181:        return 0x10;
                    182:      case 0x11:
                    183:        return 0x11;
                    184:      case 0x12:
                    185:        return 0x12;
                    186:      case 0x13:
                    187:        return 0x13;
                    188:      case 0x14:
                    189:        return 0x14;
                    190:      case 0x15:
                    191:        return 0x15;
                    192:      case 0x16:
                    193:        return 0x16;
                    194:      case 0x17:
                    195:        return 0x17;
                    196:      case 0x18:
                    197:        return 0x18;
                    198:      case 0x19:
                    199:        return 0x19;
                    200:      case 0x1a:
                    201:        return 0x1a;
                    202:      case 0x1b:
                    203:        return 0x1b;
                    204:        /* special handling for caps lock: return 0x63*/
                    205:      case 0x3a:
                    206:        return 0x62;
                    207:      case 0x1e:
                    208:        return 0x20;
                    209:      case 0x1f:
                    210:        return 0x21;
                    211:      case 0x20:
                    212:        return 0x22;
                    213:      case 0x21:
                    214:        return 0x23;
                    215:      case 0x22:
                    216:        return 0x24;
                    217:      case 0x23:
                    218:        return 0x25;
                    219:      case 0x24:
                    220:        return 0x26;
                    221:      case 0x25:
                    222:        return 0x27;
                    223:      case 0x26:
                    224:        return 0x28;
                    225:      case 0x27:
                    226:        return 0x29;
                    227:      case 0x28:
                    228:        return 0x2a;
                    229:      case 0x2b:
                    230:        return 0x2b;
                    231:      case 0x2a:
                    232:        return 0x60;
                    233:      case 0x56:
                    234:        return 0x30;
                    235:      case 0x2c:
                    236:        return 0x31;
                    237:      case 0x2d:
                    238:        return 0x32;
                    239:      case 0x2e:
                    240:        return 0x33;
                    241:      case 0x2f:
                    242:        return 0x34;
                    243:      case 0x30:
                    244:        return 0x35;
                    245:      case 0x31:
                    246:        return 0x36;
                    247:      case 0x32:
                    248:        return 0x37;
                    249:      case 0x33:
                    250:        return 0x38;
                    251:      case 0x34:
                    252:        return 0x39;
                    253:      case 0x35:
                    254:        return 0x3a;
                    255:      case 0x36:
                    256:        return 0x61;
                    257:      case 0x38:
                    258:        return 0x64;
                    259:      case 0x39:
                    260:        return 0x40;
                    261:      case 0x153:
                    262:        return 0x46;
                    263:      case 0x51:
                    264:        return 0x5f;
                    265:      case 0x52:
                    266:        return 0x66;
                    267:      case 0x47:
                    268:        return 0x67;
                    269:      case 0x4b:
                    270:        return 0x4f;
                    271:      case 0x50:
                    272:        return 0x4d;
                    273:      case 0x4d:
                    274:        return 0x4e;
                    275:      case 0x48:
                    276:        return 0x4c;
                    277:      case 0x4e:
                    278:        return 0x5e;
                    279:      case 0x4a:
                    280:        return 0x4a;
                    281:      case 0x37:
                    282:        return 0x5d;
                    283:     }
                    284: 
                    285:     return -1;
                    286: }
                    287: 
                    288: int my_kbd_handler (int keycode, int scancode, int newstate)
                    289: {
                    290:     int akey = scancode2amiga (keycode, scancode);
                    291: 
                    292:     if (akey < 0) {
                    293:        switch (akey) {
                    294:         case -2:
                    295:            if (newstate)
                    296:                DisplayGUI ();
                    297: 
                    298:            return 0;
                    299: 
                    300:         case -3:
                    301: #if 0
                    302:            if (newstate)
                    303:                toggle_sound = 1;
                    304: #endif
                    305:            return 0;
                    306:         case -4:
                    307:            if (newstate) {
                    308:                akey = 0x62;
                    309:                newstate = getcapslock ();
                    310:            }
                    311:            break;
                    312:         default:
                    313:            if (newstate && akey >= -17 && akey <= -10) {
                    314:                char tmpbuf[80];
                    315:                akey = -10 - akey;
                    316: 
                    317:                if (akey & 1) {
                    318:                    akey >>= 1;
                    319:                    disk_eject (akey);
                    320:                    return 0;
                    321:                }
                    322:                akey >>= 1;
                    323: 
                    324:                sprintf (tmpbuf, "Insert disk into drive df%d:...", akey);
                    325: 
                    326:                requestfname (tmpbuf, changed_prefs.df[akey]);
                    327: 
                    328:            }
                    329:            return 0;
                    330:        }
                    331:     }
                    332:     if (akey == AK_inhibit) {
                    333:        if (newstate)
                    334:            inhibit_frame ^= 1;
                    335:        return 0;
                    336:     }
                    337:     if (keystate[akey] == newstate)
                    338:        return 0;
                    339:     keystate[akey] = newstate;
                    340: 
                    341:     if (newstate)
                    342:        record_key (akey << 1);
                    343:     else
                    344:        record_key ((akey << 1) + 1);
                    345: 
                    346:     /* "Affengriff" */
                    347:     if (keystate[AK_CTRL] && keystate[AK_LAMI] && keystate[AK_RAMI])
                    348:        uae_reset ();
                    349: 
                    350:     return 0;
                    351: }
                    352: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.