Annotation of uae/src/od-win32/keyboard.c, revision 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.