commit 2b653cf650d457cf21fe6b1ab965b7963173f336 Author: Epic Studios <79816069+epicstudios856@users.noreply.github.com> Date: Wed Nov 8 02:10:23 2023 +0200 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aa724b7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..e81581e --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +Vectras \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..b589d56 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..ae388c2 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,20 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..8978d23 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..3400bfa --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,62 @@ +plugins { + id 'com.android.application' + id 'com.google.gms.google-services' +} + +android { + signingConfigs { + release { + storeFile file('C:\\vectras\\VECTRAS\\vectras.jks') + storePassword 'epicstudios-vectras856' + keyAlias 'Vectras' + keyPassword 'xoureldeen856' + } + } + namespace 'com.epicstudios.vectras' + compileSdk 34 + + defaultConfig { + applicationId "com.epicstudios.vectras" + minSdk 21 + targetSdk 34 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + signingConfig signingConfigs.release + multiDexEnabled true + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 + } + buildFeatures { + viewBinding true + } +} + +dependencies { + implementation 'androidx.appcompat:appcompat:1.5.1' + implementation 'com.google.android.material:material:1.8.0' + implementation 'androidx.legacy:legacy-support-v4:1.0.0' + implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0" + implementation 'androidx.constraintlayout:constraintlayout:2.1.4' + implementation 'androidx.navigation:navigation-fragment:2.5.3' + implementation 'androidx.navigation:navigation-ui:2.5.3' + implementation 'com.github.bumptech.glide:glide:4.16.0' + implementation platform('com.google.firebase:firebase-bom:32.3.1') + implementation 'com.google.firebase:firebase-analytics' + implementation("com.google.firebase:firebase-auth") + implementation("com.google.android.gms:play-services-auth:20.7.0") + implementation 'com.google.android.gms:play-services-ads:22.4.0' + testImplementation 'junit:junit:4.13.2' + androidTestImplementation 'androidx.test.ext:junit:1.1.5' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' +} \ No newline at end of file diff --git a/app/google-services.json b/app/google-services.json new file mode 100644 index 0000000..45399a0 --- /dev/null +++ b/app/google-services.json @@ -0,0 +1,29 @@ +{ + "project_info": { + "project_number": "503162397535", + "project_id": "vectras-1678b", + "storage_bucket": "vectras-1678b.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:503162397535:android:736d8a117fdd7053a24cea", + "android_client_info": { + "package_name": "com.epicstudios.vectras" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyArdgVBdPexxwdZHveVbu5hjf5UnEDwTGs" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..375c1a1 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/assets/roms/QEMU,cgthree.bin b/app/src/main/assets/roms/QEMU,cgthree.bin new file mode 100644 index 0000000..6fec946 Binary files /dev/null and b/app/src/main/assets/roms/QEMU,cgthree.bin differ diff --git a/app/src/main/assets/roms/QEMU,tcx.bin b/app/src/main/assets/roms/QEMU,tcx.bin new file mode 100644 index 0000000..d79cc1f Binary files /dev/null and b/app/src/main/assets/roms/QEMU,tcx.bin differ diff --git a/app/src/main/assets/roms/README b/app/src/main/assets/roms/README new file mode 100644 index 0000000..25fc6ce --- /dev/null +++ b/app/src/main/assets/roms/README @@ -0,0 +1,52 @@ +- SeaBIOS (bios.bin) is the successor of pc bios. + See http://www.seabios.org/ for more information. + +- The VGA BIOS and the Cirrus VGA BIOS come from the LGPL VGA bios + project (http://www.nongnu.org/vgabios/). + +- The PowerPC Open Hack'Ware Open Firmware Compatible BIOS is + available at http://repo.or.cz/w/openhackware.git. + +- OpenBIOS (http://www.openbios.org/) is a free (GPL v2) portable + firmware implementation. The goal is to implement a 100% IEEE + 1275-1994 (referred to as Open Firmware) compliant firmware. + The included images for PowerPC (for 32 and 64 bit PPC CPUs), + Sparc32 (including QEMU,tcx.bin and QEMU,cgthree.bin) and Sparc64 are built + from OpenBIOS SVN revision 1280. + +- SLOF (Slimline Open Firmware) is a free IEEE 1275 Open Firmware + implementation for certain IBM POWER hardware. The sources are at + https://github.com/aik/SLOF, and the image currently in qemu is + built from git tag qemu-slof-20170724. + +- sgabios (the Serial Graphics Adapter option ROM) provides a means for + legacy x86 software to communicate with an attached serial console as + if a video card were attached. The master sources reside in a subversion + repository at http://sgabios.googlecode.com/svn/trunk. A git mirror is + available at git://git.qemu.org/sgabios.git. + +- The PXE roms come from the iPXE project. Built with BANNER_TIME 0. + Sources available at http://ipxe.org. Vendor:Device ID -> ROM mapping: + + 8086:100e -> pxe-e1000.rom + 8086:1209 -> pxe-eepro100.rom + 1050:0940 -> pxe-ne2k_pci.rom + 1022:2000 -> pxe-pcnet.rom + 10ec:8139 -> pxe-rtl8139.rom + 1af4:1000 -> pxe-virtio.rom + +- The sources for the Alpha palcode image is available from: + git://github.com/rth7680/qemu-palcode.git + +- The u-boot binary for e500 comes from the upstream denx u-boot project where + it was compiled using the qemu-ppce500 target. + A git mirror is available at: git://git.qemu.org/u-boot.git + The hash used to compile the current version is: 2072e72 + +- Skiboot (https://github.com/open-power/skiboot/) is an OPAL + (OpenPower Abstraction Layer) firmware for OpenPOWER systems. It can + run an hypervisor OS or simply a host OS on the "baremetal" + platform, also known as the PowerNV (Non-Virtualized) platform. + +- QemuMacDrivers (https://github.com/ozbenh/QemuMacDrivers) is a project to + provide virtualised drivers for PPC MacOS guests. diff --git a/app/src/main/assets/roms/bios-256k.bin b/app/src/main/assets/roms/bios-256k.bin new file mode 100644 index 0000000..e1d6b15 Binary files /dev/null and b/app/src/main/assets/roms/bios-256k.bin differ diff --git a/app/src/main/assets/roms/bios.bin b/app/src/main/assets/roms/bios.bin new file mode 100644 index 0000000..140e33c Binary files /dev/null and b/app/src/main/assets/roms/bios.bin differ diff --git a/app/src/main/assets/roms/efi-e1000.rom b/app/src/main/assets/roms/efi-e1000.rom new file mode 100644 index 0000000..4da9de3 Binary files /dev/null and b/app/src/main/assets/roms/efi-e1000.rom differ diff --git a/app/src/main/assets/roms/efi-e1000e.rom b/app/src/main/assets/roms/efi-e1000e.rom new file mode 100644 index 0000000..c2474a8 Binary files /dev/null and b/app/src/main/assets/roms/efi-e1000e.rom differ diff --git a/app/src/main/assets/roms/efi-eepro100.rom b/app/src/main/assets/roms/efi-eepro100.rom new file mode 100644 index 0000000..7950faf Binary files /dev/null and b/app/src/main/assets/roms/efi-eepro100.rom differ diff --git a/app/src/main/assets/roms/efi-ne2k_pci.rom b/app/src/main/assets/roms/efi-ne2k_pci.rom new file mode 100644 index 0000000..30edb13 Binary files /dev/null and b/app/src/main/assets/roms/efi-ne2k_pci.rom differ diff --git a/app/src/main/assets/roms/efi-pcnet.rom b/app/src/main/assets/roms/efi-pcnet.rom new file mode 100644 index 0000000..23057c5 Binary files /dev/null and b/app/src/main/assets/roms/efi-pcnet.rom differ diff --git a/app/src/main/assets/roms/efi-rtl8139.rom b/app/src/main/assets/roms/efi-rtl8139.rom new file mode 100644 index 0000000..beb9301 Binary files /dev/null and b/app/src/main/assets/roms/efi-rtl8139.rom differ diff --git a/app/src/main/assets/roms/efi-virtio.rom b/app/src/main/assets/roms/efi-virtio.rom new file mode 100644 index 0000000..f4de595 Binary files /dev/null and b/app/src/main/assets/roms/efi-virtio.rom differ diff --git a/app/src/main/assets/roms/efi-vmxnet3.rom b/app/src/main/assets/roms/efi-vmxnet3.rom new file mode 100644 index 0000000..7501477 Binary files /dev/null and b/app/src/main/assets/roms/efi-vmxnet3.rom differ diff --git a/app/src/main/assets/roms/etc/resolv.conf b/app/src/main/assets/roms/etc/resolv.conf new file mode 100644 index 0000000..cae093a --- /dev/null +++ b/app/src/main/assets/roms/etc/resolv.conf @@ -0,0 +1 @@ +nameserver 8.8.8.8 diff --git a/app/src/main/assets/roms/keymaps/Makefile b/app/src/main/assets/roms/keymaps/Makefile new file mode 100644 index 0000000..f0e44fd --- /dev/null +++ b/app/src/main/assets/roms/keymaps/Makefile @@ -0,0 +1,56 @@ + +KEYMAP := $(shell which qemu-keymap 2>/dev/null) + +MAPS := ar bepo cz da de de-ch en-us en-gb es et fi fo \ + fr fr-be fr-ca fr-ch \ + hr hu is it ja lt lv mk nl no pl pt pt-br ru th tr + +ar : MAP_FLAGS := -l ar +bepo : MAP_FLAGS := -l fr -v dvorak +cz : MAP_FLAGS := -l cz +da : MAP_FLAGS := -l dk +de : MAP_FLAGS := -l de +de-ch : MAP_FLAGS := -l ch +en-us : MAP_FLAGS := -l us +en-gb : MAP_FLAGS := -l gb +es : MAP_FLAGS := -l es +et : MAP_FLAGS := -l et +fi : MAP_FLAGS := -l fi +fo : MAP_FLAGS := -l fo +fr : MAP_FLAGS := -l fr +fr-be : MAP_FLAGS := -l be +fr-ca : MAP_FLAGS := -l ca -v fr +fr-ch : MAP_FLAGS := -l ch -v fr +hr : MAP_FLAGS := -l hr +hu : MAP_FLAGS := -l hu +is : MAP_FLAGS := -l is +it : MAP_FLAGS := -l it +ja : MAP_FLAGS := -l jp -m jp106 +lt : MAP_FLAGS := -l lt +lv : MAP_FLAGS := -l lv +mk : MAP_FLAGS := -l mk +nl : MAP_FLAGS := -l nl +no : MAP_FLAGS := -l no +pl : MAP_FLAGS := -l pl +pt : MAP_FLAGS := -l pt +pt-br : MAP_FLAGS := -l br +ru : MAP_FLAGS := -l ru +th : MAP_FLAGS := -l th +tr : MAP_FLAGS := -l tr + +ifeq ($(KEYMAP),) + +all: + @echo "nothing to do (qemu-keymap not found)" + +else + +all: $(MAPS) + +clean: + rm -f $(MAPS) + +$(MAPS): $(KEYMAP) Makefile + $(KEYMAP) -f $@ $(MAP_FLAGS) + +endif diff --git a/app/src/main/assets/roms/keymaps/ar b/app/src/main/assets/roms/keymaps/ar new file mode 100644 index 0000000..a763c9a --- /dev/null +++ b/app/src/main/assets/roms/keymaps/ar @@ -0,0 +1,753 @@ +# +# generated by qemu-keymap +# model : pc105 +# layout : ar +# variant : - +# options : - + +# name: "Arabic" + +# modifiers +# 0: Shift +# 1: Lock +# 2: Control +# 3: Mod1 +# 4: Mod2 +# 5: Mod3 +# 6: Mod4 +# 7: Mod5 +# 8: NumLock +# 9: Alt +# 10: LevelThree +# 11: LAlt +# 12: RAlt +# 13: RControl +# 14: LControl +# 15: ScrollLock +# 16: LevelFive +# 17: AltGr +# 18: Meta +# 19: Super +# 20: Hyper + +# evdev 1 (0x1), QKeyCode "esc", number 0x1 +Escape 0x01 + +# evdev 2 (0x2), QKeyCode "1", number 0x2 +1 0x02 +exclam 0x02 shift + +# evdev 3 (0x3), QKeyCode "2", number 0x3 +2 0x03 +at 0x03 shift + +# evdev 4 (0x4), QKeyCode "3", number 0x4 +3 0x04 +numbersign 0x04 shift + +# evdev 5 (0x5), QKeyCode "4", number 0x5 +4 0x05 +dollar 0x05 shift + +# evdev 6 (0x6), QKeyCode "5", number 0x6 +5 0x06 +percent 0x06 shift + +# evdev 7 (0x7), QKeyCode "6", number 0x7 +6 0x07 +asciicircum 0x07 shift + +# evdev 8 (0x8), QKeyCode "7", number 0x8 +7 0x08 +ampersand 0x08 shift + +# evdev 9 (0x9), QKeyCode "8", number 0x9 +8 0x09 +asterisk 0x09 shift + +# evdev 10 (0xa), QKeyCode "9", number 0xa +9 0x0a +parenright 0x0a shift + +# evdev 11 (0xb), QKeyCode "0", number 0xb +0 0x0b +parenleft 0x0b shift + +# evdev 12 (0xc), QKeyCode "minus", number 0xc +minus 0x0c +underscore 0x0c shift + +# evdev 13 (0xd), QKeyCode "equal", number 0xd +equal 0x0d +plus 0x0d shift + +# evdev 14 (0xe), QKeyCode "backspace", number 0xe +BackSpace 0x0e + +# evdev 15 (0xf), QKeyCode "tab", number 0xf +Tab 0x0f +ISO_Left_Tab 0x0f shift + +# evdev 16 (0x10), QKeyCode "q", number 0x10 +Arabic_dad 0x10 +Arabic_fatha 0x10 shift + +# evdev 17 (0x11), QKeyCode "w", number 0x11 +Arabic_sad 0x11 +Arabic_fathatan 0x11 shift + +# evdev 18 (0x12), QKeyCode "e", number 0x12 +Arabic_theh 0x12 +Arabic_damma 0x12 shift + +# evdev 19 (0x13), QKeyCode "r", number 0x13 +Arabic_qaf 0x13 +Arabic_dammatan 0x13 shift + +# evdev 20 (0x14), QKeyCode "t", number 0x14 +Arabic_feh 0x14 +UFEF9 0x14 shift +Arabic_veh 0x14 altgr + +# evdev 21 (0x15), QKeyCode "y", number 0x15 +Arabic_ghain 0x15 +Arabic_hamzaunderalef 0x15 shift + +# evdev 22 (0x16), QKeyCode "u", number 0x16 +Arabic_ain 0x16 +grave 0x16 shift + +# evdev 23 (0x17), QKeyCode "i", number 0x17 +Arabic_ha 0x17 +division 0x17 shift + +# evdev 24 (0x18), QKeyCode "o", number 0x18 +Arabic_khah 0x18 +multiply 0x18 shift + +# evdev 25 (0x19), QKeyCode "p", number 0x19 +Arabic_hah 0x19 +Arabic_semicolon 0x19 shift + +# evdev 26 (0x1a), QKeyCode "bracket_left", number 0x1a +Arabic_jeem 0x1a +less 0x1a shift +Arabic_tcheh 0x1a altgr + +# evdev 27 (0x1b), QKeyCode "bracket_right", number 0x1b +Arabic_dal 0x1b +greater 0x1b shift + +# evdev 28 (0x1c), QKeyCode "ret", number 0x1c +Return 0x1c + +# evdev 29 (0x1d), QKeyCode "ctrl", number 0x1d +Control_L 0x1d + +# evdev 30 (0x1e), QKeyCode "a", number 0x1e +Arabic_sheen 0x1e +Arabic_kasra 0x1e shift + +# evdev 31 (0x1f), QKeyCode "s", number 0x1f +Arabic_seen 0x1f +Arabic_kasratan 0x1f shift + +# evdev 32 (0x20), QKeyCode "d", number 0x20 +Arabic_yeh 0x20 +bracketright 0x20 shift + +# evdev 33 (0x21), QKeyCode "f", number 0x21 +Arabic_beh 0x21 +bracketleft 0x21 shift +Arabic_peh 0x21 altgr + +# evdev 34 (0x22), QKeyCode "g", number 0x22 +Arabic_lam 0x22 +UFEF7 0x22 shift + +# evdev 35 (0x23), QKeyCode "h", number 0x23 +Arabic_alef 0x23 +Arabic_hamzaonalef 0x23 shift +U0671 0x23 altgr + +# evdev 36 (0x24), QKeyCode "j", number 0x24 +Arabic_teh 0x24 +Arabic_tatweel 0x24 shift + +# evdev 37 (0x25), QKeyCode "k", number 0x25 +Arabic_noon 0x25 +Arabic_comma 0x25 shift + +# evdev 38 (0x26), QKeyCode "l", number 0x26 +Arabic_meem 0x26 +slash 0x26 shift + +# evdev 39 (0x27), QKeyCode "semicolon", number 0x27 +Arabic_kaf 0x27 +colon 0x27 shift +Arabic_gaf 0x27 altgr + +# evdev 40 (0x28), QKeyCode "apostrophe", number 0x28 +Arabic_tah 0x28 +quotedbl 0x28 shift + +# evdev 41 (0x29), QKeyCode "grave_accent", number 0x29 +Arabic_thal 0x29 +Arabic_shadda 0x29 shift + +# evdev 42 (0x2a), QKeyCode "shift", number 0x2a +Shift_L 0x2a + +# evdev 43 (0x2b), QKeyCode "backslash", number 0x2b +backslash 0x2b +bar 0x2b shift + +# evdev 44 (0x2c), QKeyCode "z", number 0x2c +Arabic_hamzaonyeh 0x2c +asciitilde 0x2c shift +guillemotright 0x2c altgr + +# evdev 45 (0x2d), QKeyCode "x", number 0x2d +Arabic_hamza 0x2d +Arabic_sukun 0x2d shift +guillemotleft 0x2d altgr + +# evdev 46 (0x2e), QKeyCode "c", number 0x2e +Arabic_hamzaonwaw 0x2e +braceright 0x2e shift + +# evdev 47 (0x2f), QKeyCode "v", number 0x2f +Arabic_ra 0x2f +braceleft 0x2f shift + +# evdev 48 (0x30), QKeyCode "b", number 0x30 +UFEFB 0x30 +UFEF5 0x30 shift + +# evdev 49 (0x31), QKeyCode "n", number 0x31 +Arabic_alefmaksura 0x31 +Arabic_maddaonalef 0x31 shift +Arabic_superscript_alef 0x31 altgr + +# evdev 50 (0x32), QKeyCode "m", number 0x32 +Arabic_tehmarbuta 0x32 +apostrophe 0x32 shift + +# evdev 51 (0x33), QKeyCode "comma", number 0x33 +Arabic_waw 0x33 +comma 0x33 shift + +# evdev 52 (0x34), QKeyCode "dot", number 0x34 +Arabic_zain 0x34 +period 0x34 shift + +# evdev 53 (0x35), QKeyCode "slash", number 0x35 +Arabic_zah 0x35 +Arabic_question_mark 0x35 shift + +# evdev 54 (0x36), QKeyCode "shift_r", number 0x36 +Shift_R 0x36 + +# evdev 55 (0x37), QKeyCode "kp_multiply", number 0x37 +KP_Multiply 0x37 + +# evdev 56 (0x38), QKeyCode "alt", number 0x38 +Alt_L 0x38 +Meta_L 0x38 shift + +# evdev 57 (0x39), QKeyCode "spc", number 0x39 +space 0x39 + +# evdev 58 (0x3a), QKeyCode "caps_lock", number 0x3a +Caps_Lock 0x3a + +# evdev 59 (0x3b), QKeyCode "f1", number 0x3b +F1 0x3b + +# evdev 60 (0x3c), QKeyCode "f2", number 0x3c +F2 0x3c + +# evdev 61 (0x3d), QKeyCode "f3", number 0x3d +F3 0x3d + +# evdev 62 (0x3e), QKeyCode "f4", number 0x3e +F4 0x3e + +# evdev 63 (0x3f), QKeyCode "f5", number 0x3f +F5 0x3f + +# evdev 64 (0x40), QKeyCode "f6", number 0x40 +F6 0x40 + +# evdev 65 (0x41), QKeyCode "f7", number 0x41 +F7 0x41 + +# evdev 66 (0x42), QKeyCode "f8", number 0x42 +F8 0x42 + +# evdev 67 (0x43), QKeyCode "f9", number 0x43 +F9 0x43 + +# evdev 68 (0x44), QKeyCode "f10", number 0x44 +F10 0x44 + +# evdev 69 (0x45), QKeyCode "num_lock", number 0x45 +Num_Lock 0x45 + +# evdev 70 (0x46), QKeyCode "scroll_lock", number 0x46 +Scroll_Lock 0x46 + +# evdev 71 (0x47), QKeyCode "kp_7", number 0x47 +KP_Home 0x47 +KP_7 0x47 numlock + +# evdev 72 (0x48), QKeyCode "kp_8", number 0x48 +KP_Up 0x48 +KP_8 0x48 numlock + +# evdev 73 (0x49), QKeyCode "kp_9", number 0x49 +KP_Prior 0x49 +KP_9 0x49 numlock + +# evdev 74 (0x4a), QKeyCode "kp_subtract", number 0x4a +KP_Subtract 0x4a + +# evdev 75 (0x4b), QKeyCode "kp_4", number 0x4b +KP_Left 0x4b +KP_4 0x4b numlock + +# evdev 76 (0x4c), QKeyCode "kp_5", number 0x4c +KP_Begin 0x4c +KP_5 0x4c numlock + +# evdev 77 (0x4d), QKeyCode "kp_6", number 0x4d +KP_Right 0x4d +KP_6 0x4d numlock + +# evdev 78 (0x4e), QKeyCode "kp_add", number 0x4e +KP_Add 0x4e + +# evdev 79 (0x4f), QKeyCode "kp_1", number 0x4f +KP_End 0x4f +KP_1 0x4f numlock + +# evdev 80 (0x50), QKeyCode "kp_2", number 0x50 +KP_Down 0x50 +KP_2 0x50 numlock + +# evdev 81 (0x51), QKeyCode "kp_3", number 0x51 +KP_Next 0x51 +KP_3 0x51 numlock + +# evdev 82 (0x52), QKeyCode "kp_0", number 0x52 +KP_Insert 0x52 +KP_0 0x52 numlock + +# evdev 83 (0x53), QKeyCode "kp_decimal", number 0x53 +KP_Delete 0x53 +KP_Decimal 0x53 numlock + +# evdev 84 (0x54): no evdev -> QKeyCode mapping (xkb keysym ISO_Level3_Shift) + +# evdev 85 (0x55): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 86 (0x56), QKeyCode "less", number 0x56 +bar 0x56 +brokenbar 0x56 shift + +# evdev 87 (0x57), QKeyCode "f11", number 0x57 +F11 0x57 + +# evdev 88 (0x58), QKeyCode "f12", number 0x58 +F12 0x58 + +# evdev 89 (0x59), QKeyCode "ro", number 0x73 + +# evdev 90 (0x5a): no evdev -> QKeyCode mapping (xkb keysym Katakana) + +# evdev 91 (0x5b), QKeyCode "hiragana", number 0x77 +Hiragana 0x77 + +# evdev 92 (0x5c), QKeyCode "henkan", number 0x79 +Henkan_Mode 0x79 + +# evdev 93 (0x5d): no evdev -> QKeyCode mapping (xkb keysym Hiragana_Katakana) + +# evdev 94 (0x5e): no evdev -> QKeyCode mapping (xkb keysym Muhenkan) + +# evdev 95 (0x5f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 96 (0x60), QKeyCode "kp_enter", number 0x9c +KP_Enter 0x9c + +# evdev 97 (0x61), QKeyCode "ctrl_r", number 0x9d +Control_R 0x9d + +# evdev 98 (0x62), QKeyCode "kp_divide", number 0xb5 +KP_Divide 0xb5 + +# evdev 99 (0x63), QKeyCode "sysrq", number 0x54 +Print 0x54 + +# evdev 100 (0x64), QKeyCode "alt_r", number 0xb8 +Alt_R 0xb8 +Meta_R 0xb8 shift + +# evdev 101 (0x65), QKeyCode "lf", number 0x5b +Linefeed 0x5b + +# evdev 102 (0x66), QKeyCode "home", number 0xc7 +Home 0xc7 + +# evdev 103 (0x67), QKeyCode "up", number 0xc8 +Up 0xc8 + +# evdev 104 (0x68), QKeyCode "pgup", number 0xc9 +Prior 0xc9 + +# evdev 105 (0x69), QKeyCode "left", number 0xcb +Left 0xcb + +# evdev 106 (0x6a), QKeyCode "right", number 0xcd +Right 0xcd + +# evdev 107 (0x6b), QKeyCode "end", number 0xcf +End 0xcf + +# evdev 108 (0x6c), QKeyCode "down", number 0xd0 +Down 0xd0 + +# evdev 109 (0x6d), QKeyCode "pgdn", number 0xd1 +Next 0xd1 + +# evdev 110 (0x6e), QKeyCode "insert", number 0xd2 +Insert 0xd2 + +# evdev 111 (0x6f), QKeyCode "delete", number 0xd3 +Delete 0xd3 + +# evdev 112 (0x70): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 113 (0x71), QKeyCode "audiomute", number 0xa0 +XF86AudioMute 0xa0 + +# evdev 114 (0x72), QKeyCode "volumedown", number 0xae +XF86AudioLowerVolume 0xae + +# evdev 115 (0x73), QKeyCode "volumeup", number 0xb0 +XF86AudioRaiseVolume 0xb0 + +# evdev 116 (0x74), QKeyCode "power", number 0xde +XF86PowerOff 0xde + +# evdev 117 (0x75), QKeyCode "kp_equals", number 0x59 +KP_Equal 0x59 + +# evdev 118 (0x76): no evdev -> QKeyCode mapping (xkb keysym plusminus) + +# evdev 119 (0x77), QKeyCode "pause", number 0xc6 +Pause 0xc6 + +# evdev 120 (0x78): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchA) + +# evdev 121 (0x79), QKeyCode "kp_comma", number 0x7e +KP_Decimal 0x7e + +# evdev 122 (0x7a): no evdev -> QKeyCode mapping (xkb keysym Hangul) + +# evdev 123 (0x7b): no evdev -> QKeyCode mapping (xkb keysym Hangul_Hanja) + +# evdev 124 (0x7c), QKeyCode "yen", number 0x7d + +# evdev 125 (0x7d), QKeyCode "meta_l", number 0xdb +Super_L 0xdb + +# evdev 126 (0x7e), QKeyCode "meta_r", number 0xdc +Super_R 0xdc + +# evdev 127 (0x7f), QKeyCode "compose", number 0xdd +Menu 0xdd + +# evdev 128 (0x80), QKeyCode "stop", number 0xe8 +Cancel 0xe8 + +# evdev 129 (0x81), QKeyCode "again", number 0x85 +Redo 0x85 + +# evdev 130 (0x82), QKeyCode "props", number 0x86 +SunProps 0x86 + +# evdev 131 (0x83), QKeyCode "undo", number 0x87 +Undo 0x87 + +# evdev 132 (0x84), QKeyCode "front", number 0x8c +SunFront 0x8c + +# evdev 133 (0x85), QKeyCode "copy", number 0xf8 +XF86Copy 0xf8 + +# evdev 134 (0x86), QKeyCode "open", number 0x64 +XF86Open 0x64 + +# evdev 135 (0x87), QKeyCode "paste", number 0x65 +XF86Paste 0x65 + +# evdev 136 (0x88), QKeyCode "find", number 0xc1 +Find 0xc1 + +# evdev 137 (0x89), QKeyCode "cut", number 0xbc +XF86Cut 0xbc + +# evdev 138 (0x8a), QKeyCode "help", number 0xf5 +Help 0xf5 + +# evdev 139 (0x8b), QKeyCode "menu", number 0x9e +XF86MenuKB 0x9e + +# evdev 140 (0x8c), QKeyCode "calculator", number 0xa1 +XF86Calculator 0xa1 + +# evdev 141 (0x8d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 142 (0x8e), QKeyCode "sleep", number 0xdf +XF86Sleep 0xdf + +# evdev 143 (0x8f), QKeyCode "wake", number 0xe3 +XF86WakeUp 0xe3 + +# evdev 144 (0x90): no evdev -> QKeyCode mapping (xkb keysym XF86Explorer) + +# evdev 145 (0x91): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 146 (0x92): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 147 (0x93): no evdev -> QKeyCode mapping (xkb keysym XF86Xfer) + +# evdev 148 (0x94): no evdev -> QKeyCode mapping (xkb keysym XF86Launch1) + +# evdev 149 (0x95): no evdev -> QKeyCode mapping (xkb keysym XF86Launch2) + +# evdev 150 (0x96): no evdev -> QKeyCode mapping (xkb keysym XF86WWW) + +# evdev 151 (0x97): no evdev -> QKeyCode mapping (xkb keysym XF86DOS) + +# evdev 152 (0x98): no evdev -> QKeyCode mapping (xkb keysym XF86ScreenSaver) + +# evdev 153 (0x99): no evdev -> QKeyCode mapping (xkb keysym XF86RotateWindows) + +# evdev 154 (0x9a): no evdev -> QKeyCode mapping (xkb keysym XF86TaskPane) + +# evdev 155 (0x9b), QKeyCode "mail", number 0xec +XF86Mail 0xec + +# evdev 156 (0x9c), QKeyCode "ac_bookmarks", number 0xe6 +XF86Favorites 0xe6 + +# evdev 157 (0x9d), QKeyCode "computer", number 0xeb +XF86MyComputer 0xeb + +# evdev 158 (0x9e), QKeyCode "ac_back", number 0xea +XF86Back 0xea + +# evdev 159 (0x9f), QKeyCode "ac_forward", number 0xe9 +XF86Forward 0xe9 + +# evdev 160 (0xa0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 161 (0xa1): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 162 (0xa2): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 163 (0xa3), QKeyCode "audionext", number 0x99 +XF86AudioNext 0x99 + +# evdev 164 (0xa4), QKeyCode "audioplay", number 0xa2 +XF86AudioPlay 0xa2 +XF86AudioPause 0xa2 shift + +# evdev 165 (0xa5), QKeyCode "audioprev", number 0x90 +XF86AudioPrev 0x90 + +# evdev 166 (0xa6), QKeyCode "audiostop", number 0xa4 +XF86AudioStop 0xa4 +XF86Eject 0xa4 shift + +# evdev 167 (0xa7): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRecord) + +# evdev 168 (0xa8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRewind) + +# evdev 169 (0xa9): no evdev -> QKeyCode mapping (xkb keysym XF86Phone) + +# evdev 170 (0xaa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 171 (0xab): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 172 (0xac), QKeyCode "ac_home", number 0xb2 +XF86HomePage 0xb2 + +# evdev 173 (0xad), QKeyCode "ac_refresh", number 0xe7 +XF86Reload 0xe7 + +# evdev 174 (0xae): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 175 (0xaf): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 176 (0xb0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 177 (0xb1): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollUp) + +# evdev 178 (0xb2): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollDown) + +# evdev 179 (0xb3): no evdev -> QKeyCode mapping (xkb keysym parenleft) + +# evdev 180 (0xb4): no evdev -> QKeyCode mapping (xkb keysym parenright) + +# evdev 181 (0xb5): no evdev -> QKeyCode mapping (xkb keysym XF86New) + +# evdev 182 (0xb6): no evdev -> QKeyCode mapping (xkb keysym Redo) + +# evdev 183 (0xb7): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 184 (0xb8): no evdev -> QKeyCode mapping (xkb keysym XF86Launch5) + +# evdev 185 (0xb9): no evdev -> QKeyCode mapping (xkb keysym XF86Launch6) + +# evdev 186 (0xba): no evdev -> QKeyCode mapping (xkb keysym XF86Launch7) + +# evdev 187 (0xbb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch8) + +# evdev 188 (0xbc): no evdev -> QKeyCode mapping (xkb keysym XF86Launch9) + +# evdev 189 (0xbd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 190 (0xbe): no evdev -> QKeyCode mapping (xkb keysym XF86AudioMicMute) + +# evdev 191 (0xbf): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadToggle) + +# evdev 192 (0xc0): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOn) + +# evdev 193 (0xc1): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOff) + +# evdev 194 (0xc2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 195 (0xc3): no evdev -> QKeyCode mapping (xkb keysym Mode_switch) + +# evdev 196 (0xc4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 197 (0xc5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 198 (0xc6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 199 (0xc7): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 200 (0xc8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 201 (0xc9): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPause) + +# evdev 202 (0xca): no evdev -> QKeyCode mapping (xkb keysym XF86Launch3) + +# evdev 203 (0xcb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch4) + +# evdev 204 (0xcc): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchB) + +# evdev 205 (0xcd): no evdev -> QKeyCode mapping (xkb keysym XF86Suspend) + +# evdev 206 (0xce): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 207 (0xcf): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 208 (0xd0): no evdev -> QKeyCode mapping (xkb keysym XF86AudioForward) + +# evdev 209 (0xd1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 210 (0xd2): no evdev -> QKeyCode mapping (xkb keysym Print) + +# evdev 211 (0xd3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 212 (0xd4): no evdev -> QKeyCode mapping (xkb keysym XF86WebCam) + +# evdev 213 (0xd5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 214 (0xd6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 215 (0xd7): no evdev -> QKeyCode mapping (xkb keysym XF86Mail) + +# evdev 216 (0xd8): no evdev -> QKeyCode mapping (xkb keysym XF86Messenger) + +# evdev 217 (0xd9): no evdev -> QKeyCode mapping (xkb keysym XF86Search) + +# evdev 218 (0xda): no evdev -> QKeyCode mapping (xkb keysym XF86Go) + +# evdev 219 (0xdb): no evdev -> QKeyCode mapping (xkb keysym XF86Finance) + +# evdev 220 (0xdc): no evdev -> QKeyCode mapping (xkb keysym XF86Game) + +# evdev 221 (0xdd): no evdev -> QKeyCode mapping (xkb keysym XF86Shop) + +# evdev 222 (0xde): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 223 (0xdf): no evdev -> QKeyCode mapping (xkb keysym Cancel) + +# evdev 224 (0xe0): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessDown) + +# evdev 225 (0xe1): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessUp) + +# evdev 226 (0xe2), QKeyCode "mediaselect", number 0xed +XF86AudioMedia 0xed + +# evdev 227 (0xe3): no evdev -> QKeyCode mapping (xkb keysym XF86Display) + +# evdev 228 (0xe4): no evdev -> QKeyCode mapping (xkb keysym XF86KbdLightOnOff) + +# evdev 229 (0xe5): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessDown) + +# evdev 230 (0xe6): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessUp) + +# evdev 231 (0xe7): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 232 (0xe8): no evdev -> QKeyCode mapping (xkb keysym XF86Reply) + +# evdev 233 (0xe9): no evdev -> QKeyCode mapping (xkb keysym XF86MailForward) + +# evdev 234 (0xea): no evdev -> QKeyCode mapping (xkb keysym XF86Save) + +# evdev 235 (0xeb): no evdev -> QKeyCode mapping (xkb keysym XF86Documents) + +# evdev 236 (0xec): no evdev -> QKeyCode mapping (xkb keysym XF86Battery) + +# evdev 237 (0xed): no evdev -> QKeyCode mapping (xkb keysym XF86Bluetooth) + +# evdev 238 (0xee): no evdev -> QKeyCode mapping (xkb keysym XF86WLAN) + +# evdev 239 (0xef): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 240 (0xf0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 241 (0xf1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 242 (0xf2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 243 (0xf3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 244 (0xf4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# +# quirks section start +# +# Sometimes multiple keysyms map to the same keycodes. +# The keycode -> keysym lookup finds only one of the +# keysyms. So append them here. +# + +Print 0x54 +Sys_Req 0x54 +Execute 0x54 +KP_Decimal 0x53 numlock +KP_Separator 0x53 numlock +Alt_R 0xb8 +ISO_Level3_Shift 0xb8 +Mode_switch 0xb8 + +# quirks section end diff --git a/app/src/main/assets/roms/keymaps/bepo b/app/src/main/assets/roms/keymaps/bepo new file mode 100644 index 0000000..dbe8daa --- /dev/null +++ b/app/src/main/assets/roms/keymaps/bepo @@ -0,0 +1,781 @@ +# +# generated by qemu-keymap +# model : pc105 +# layout : fr +# variant : dvorak +# options : - + +# name: "French (Dvorak)" + +# modifiers +# 0: Shift +# 1: Lock +# 2: Control +# 3: Mod1 +# 4: Mod2 +# 5: Mod3 +# 6: Mod4 +# 7: Mod5 +# 8: NumLock +# 9: Alt +# 10: LevelThree +# 11: LAlt +# 12: RAlt +# 13: RControl +# 14: LControl +# 15: ScrollLock +# 16: LevelFive +# 17: AltGr +# 18: Meta +# 19: Super +# 20: Hyper + +# evdev 1 (0x1), QKeyCode "esc", number 0x1 +Escape 0x01 + +# evdev 2 (0x2), QKeyCode "1", number 0x2 +equal 0x02 +1 0x02 shift + +# evdev 3 (0x3), QKeyCode "2", number 0x3 +slash 0x03 +2 0x03 shift +plusminus 0x03 altgr + +# evdev 4 (0x4), QKeyCode "3", number 0x4 +minus 0x04 +3 0x04 shift +onequarter 0x04 altgr + +# evdev 5 (0x5), QKeyCode "4", number 0x5 +egrave 0x05 +4 0x05 shift +onehalf 0x05 altgr + +# evdev 6 (0x6), QKeyCode "5", number 0x6 +backslash 0x06 +5 0x06 shift +threequarters 0x06 altgr + +# evdev 7 (0x7), QKeyCode "6", number 0x7 +dead_circumflex 0x07 +6 0x07 shift + +# evdev 8 (0x8), QKeyCode "7", number 0x8 +parenleft 0x08 +7 0x08 shift + +# evdev 9 (0x9), QKeyCode "8", number 0x9 +ISO_Level3_Latch 0x09 +8 0x09 shift +grave 0x09 altgr + +# evdev 10 (0xa), QKeyCode "9", number 0xa +parenright 0x0a +9 0x0a shift + +# evdev 11 (0xb), QKeyCode "0", number 0xb +quotedbl 0x0b +0 0x0b shift + +# evdev 12 (0xc), QKeyCode "minus", number 0xc +bracketleft 0x0c +plus 0x0c shift + +# evdev 13 (0xd), QKeyCode "equal", number 0xd +bracketright 0x0d +percent 0x0d shift + +# evdev 14 (0xe), QKeyCode "backspace", number 0xe +BackSpace 0x0e + +# evdev 15 (0xf), QKeyCode "tab", number 0xf +Tab 0x0f +ISO_Left_Tab 0x0f shift + +# evdev 16 (0x10), QKeyCode "q", number 0x10 +colon 0x10 +question 0x10 shift +ae 0x10 altgr +AE 0x10 shift altgr + +# evdev 17 (0x11), QKeyCode "w", number 0x11 +apostrophe 0x11 +less 0x11 shift +dollar 0x11 altgr + +# evdev 18 (0x12), QKeyCode "e", number 0x12 +eacute 0x12 +greater 0x12 shift +Eacute 0x12 altgr + +# evdev 19 (0x13), QKeyCode "r", number 0x13 +g 0x13 +G 0x13 shift +EuroSign 0x13 altgr + +# evdev 20 (0x14), QKeyCode "t", number 0x14 +period 0x14 +exclam 0x14 shift +degree 0x14 altgr + +# evdev 21 (0x15), QKeyCode "y", number 0x15 +h 0x15 +H 0x15 shift + +# evdev 22 (0x16), QKeyCode "u", number 0x16 +v 0x16 +V 0x16 shift + +# evdev 23 (0x17), QKeyCode "i", number 0x17 +c 0x17 +C 0x17 shift +ccedilla 0x17 altgr +Ccedilla 0x17 shift altgr + +# evdev 24 (0x18), QKeyCode "o", number 0x18 +m 0x18 +M 0x18 shift +mu 0x18 altgr + +# evdev 25 (0x19), QKeyCode "p", number 0x19 +k 0x19 +K 0x19 shift + +# evdev 26 (0x1a), QKeyCode "bracket_left", number 0x1a +z 0x1a +Z 0x1a shift + +# evdev 27 (0x1b), QKeyCode "bracket_right", number 0x1b +dead_diaeresis 0x1b +ampersand 0x1b shift + +# evdev 28 (0x1c), QKeyCode "ret", number 0x1c +Return 0x1c + +# evdev 29 (0x1d), QKeyCode "ctrl", number 0x1d +Control_L 0x1d + +# evdev 30 (0x1e), QKeyCode "a", number 0x1e +o 0x1e +O 0x1e shift +ograve 0x1e altgr +Ograve 0x1e shift altgr + +# evdev 31 (0x1f), QKeyCode "s", number 0x1f +a 0x1f +A 0x1f shift +agrave 0x1f altgr +Agrave 0x1f shift altgr + +# evdev 32 (0x20), QKeyCode "d", number 0x20 +u 0x20 +U 0x20 shift +ugrave 0x20 altgr +Ugrave 0x20 shift altgr + +# evdev 33 (0x21), QKeyCode "f", number 0x21 +e 0x21 +E 0x21 shift +egrave 0x21 altgr +Egrave 0x21 shift altgr + +# evdev 34 (0x22), QKeyCode "g", number 0x22 +b 0x22 +B 0x22 shift + +# evdev 35 (0x23), QKeyCode "h", number 0x23 +f 0x23 +F 0x23 shift + +# evdev 36 (0x24), QKeyCode "j", number 0x24 +s 0x24 +S 0x24 shift +guillemotleft 0x24 altgr + +# evdev 37 (0x25), QKeyCode "k", number 0x25 +t 0x25 +T 0x25 shift + +# evdev 38 (0x26), QKeyCode "l", number 0x26 +n 0x26 +N 0x26 shift +guillemotright 0x26 altgr + +# evdev 39 (0x27), QKeyCode "semicolon", number 0x27 +d 0x27 +D 0x27 shift + +# evdev 40 (0x28), QKeyCode "apostrophe", number 0x28 +w 0x28 +W 0x28 shift + +# evdev 41 (0x29), QKeyCode "grave_accent", number 0x29 +underscore 0x29 +asterisk 0x29 shift + +# evdev 42 (0x2a), QKeyCode "shift", number 0x2a +Shift_L 0x2a + +# evdev 43 (0x2b), QKeyCode "backslash", number 0x2b +asciitilde 0x2b +numbersign 0x2b shift + +# evdev 44 (0x2c), QKeyCode "z", number 0x2c +semicolon 0x2c +bar 0x2c shift +oe 0x2c altgr +OE 0x2c shift altgr + +# evdev 45 (0x2d), QKeyCode "x", number 0x2d +q 0x2d +Q 0x2d shift +braceleft 0x2d altgr + +# evdev 46 (0x2e), QKeyCode "c", number 0x2e +comma 0x2e +at 0x2e shift +braceright 0x2e altgr + +# evdev 47 (0x2f), QKeyCode "v", number 0x2f +i 0x2f +I 0x2f shift +igrave 0x2f altgr +Igrave 0x2f shift altgr + +# evdev 48 (0x30), QKeyCode "b", number 0x30 +y 0x30 +Y 0x30 shift +sterling 0x30 altgr + +# evdev 49 (0x31), QKeyCode "n", number 0x31 +x 0x31 +X 0x31 shift + +# evdev 50 (0x32), QKeyCode "m", number 0x32 +r 0x32 +R 0x32 shift +masculine 0x32 altgr + +# evdev 51 (0x33), QKeyCode "comma", number 0x33 +l 0x33 +L 0x33 shift + +# evdev 52 (0x34), QKeyCode "dot", number 0x34 +p 0x34 +P 0x34 shift +section 0x34 altgr + +# evdev 53 (0x35), QKeyCode "slash", number 0x35 +j 0x35 +J 0x35 shift + +# evdev 54 (0x36), QKeyCode "shift_r", number 0x36 +Shift_R 0x36 + +# evdev 55 (0x37), QKeyCode "kp_multiply", number 0x37 +KP_Multiply 0x37 + +# evdev 56 (0x38), QKeyCode "alt", number 0x38 +Alt_L 0x38 +Meta_L 0x38 shift + +# evdev 57 (0x39), QKeyCode "spc", number 0x39 +space 0x39 +nobreakspace 0x39 altgr + +# evdev 58 (0x3a), QKeyCode "caps_lock", number 0x3a +Caps_Lock 0x3a + +# evdev 59 (0x3b), QKeyCode "f1", number 0x3b +F1 0x3b + +# evdev 60 (0x3c), QKeyCode "f2", number 0x3c +F2 0x3c + +# evdev 61 (0x3d), QKeyCode "f3", number 0x3d +F3 0x3d + +# evdev 62 (0x3e), QKeyCode "f4", number 0x3e +F4 0x3e + +# evdev 63 (0x3f), QKeyCode "f5", number 0x3f +F5 0x3f + +# evdev 64 (0x40), QKeyCode "f6", number 0x40 +F6 0x40 + +# evdev 65 (0x41), QKeyCode "f7", number 0x41 +F7 0x41 + +# evdev 66 (0x42), QKeyCode "f8", number 0x42 +F8 0x42 + +# evdev 67 (0x43), QKeyCode "f9", number 0x43 +F9 0x43 + +# evdev 68 (0x44), QKeyCode "f10", number 0x44 +F10 0x44 + +# evdev 69 (0x45), QKeyCode "num_lock", number 0x45 +Num_Lock 0x45 + +# evdev 70 (0x46), QKeyCode "scroll_lock", number 0x46 +Scroll_Lock 0x46 + +# evdev 71 (0x47), QKeyCode "kp_7", number 0x47 +KP_Home 0x47 +KP_7 0x47 numlock + +# evdev 72 (0x48), QKeyCode "kp_8", number 0x48 +KP_Up 0x48 +KP_8 0x48 numlock + +# evdev 73 (0x49), QKeyCode "kp_9", number 0x49 +KP_Prior 0x49 +KP_9 0x49 numlock + +# evdev 74 (0x4a), QKeyCode "kp_subtract", number 0x4a +KP_Subtract 0x4a + +# evdev 75 (0x4b), QKeyCode "kp_4", number 0x4b +KP_Left 0x4b +KP_4 0x4b numlock + +# evdev 76 (0x4c), QKeyCode "kp_5", number 0x4c +KP_Begin 0x4c +KP_5 0x4c numlock + +# evdev 77 (0x4d), QKeyCode "kp_6", number 0x4d +KP_Right 0x4d +KP_6 0x4d numlock + +# evdev 78 (0x4e), QKeyCode "kp_add", number 0x4e +KP_Add 0x4e + +# evdev 79 (0x4f), QKeyCode "kp_1", number 0x4f +KP_End 0x4f +KP_1 0x4f numlock + +# evdev 80 (0x50), QKeyCode "kp_2", number 0x50 +KP_Down 0x50 +KP_2 0x50 numlock + +# evdev 81 (0x51), QKeyCode "kp_3", number 0x51 +KP_Next 0x51 +KP_3 0x51 numlock + +# evdev 82 (0x52), QKeyCode "kp_0", number 0x52 +KP_Insert 0x52 +KP_0 0x52 numlock + +# evdev 83 (0x53), QKeyCode "kp_decimal", number 0x53 +KP_Delete 0x53 +KP_Decimal 0x53 numlock + +# evdev 84 (0x54): no evdev -> QKeyCode mapping (xkb keysym ISO_Level3_Shift) + +# evdev 85 (0x55): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 86 (0x56), QKeyCode "less", number 0x56 +agrave 0x56 +ccedilla 0x56 shift +Agrave 0x56 altgr +Ccedilla 0x56 shift altgr + +# evdev 87 (0x57), QKeyCode "f11", number 0x57 +F11 0x57 + +# evdev 88 (0x58), QKeyCode "f12", number 0x58 +F12 0x58 + +# evdev 89 (0x59), QKeyCode "ro", number 0x73 + +# evdev 90 (0x5a): no evdev -> QKeyCode mapping (xkb keysym Katakana) + +# evdev 91 (0x5b), QKeyCode "hiragana", number 0x77 +Hiragana 0x77 + +# evdev 92 (0x5c), QKeyCode "henkan", number 0x79 +Henkan_Mode 0x79 + +# evdev 93 (0x5d): no evdev -> QKeyCode mapping (xkb keysym Hiragana_Katakana) + +# evdev 94 (0x5e): no evdev -> QKeyCode mapping (xkb keysym Muhenkan) + +# evdev 95 (0x5f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 96 (0x60), QKeyCode "kp_enter", number 0x9c +KP_Enter 0x9c + +# evdev 97 (0x61), QKeyCode "ctrl_r", number 0x9d +Control_R 0x9d + +# evdev 98 (0x62), QKeyCode "kp_divide", number 0xb5 +KP_Divide 0xb5 + +# evdev 99 (0x63), QKeyCode "sysrq", number 0x54 +Print 0x54 + +# evdev 100 (0x64), QKeyCode "alt_r", number 0xb8 +Alt_R 0xb8 +Meta_R 0xb8 shift + +# evdev 101 (0x65), QKeyCode "lf", number 0x5b +Linefeed 0x5b + +# evdev 102 (0x66), QKeyCode "home", number 0xc7 +Home 0xc7 + +# evdev 103 (0x67), QKeyCode "up", number 0xc8 +Up 0xc8 + +# evdev 104 (0x68), QKeyCode "pgup", number 0xc9 +Prior 0xc9 + +# evdev 105 (0x69), QKeyCode "left", number 0xcb +Left 0xcb + +# evdev 106 (0x6a), QKeyCode "right", number 0xcd +Right 0xcd + +# evdev 107 (0x6b), QKeyCode "end", number 0xcf +End 0xcf + +# evdev 108 (0x6c), QKeyCode "down", number 0xd0 +Down 0xd0 + +# evdev 109 (0x6d), QKeyCode "pgdn", number 0xd1 +Next 0xd1 + +# evdev 110 (0x6e), QKeyCode "insert", number 0xd2 +Insert 0xd2 + +# evdev 111 (0x6f), QKeyCode "delete", number 0xd3 +Delete 0xd3 + +# evdev 112 (0x70): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 113 (0x71), QKeyCode "audiomute", number 0xa0 +XF86AudioMute 0xa0 + +# evdev 114 (0x72), QKeyCode "volumedown", number 0xae +XF86AudioLowerVolume 0xae + +# evdev 115 (0x73), QKeyCode "volumeup", number 0xb0 +XF86AudioRaiseVolume 0xb0 + +# evdev 116 (0x74), QKeyCode "power", number 0xde +XF86PowerOff 0xde + +# evdev 117 (0x75), QKeyCode "kp_equals", number 0x59 +KP_Equal 0x59 + +# evdev 118 (0x76): no evdev -> QKeyCode mapping (xkb keysym plusminus) + +# evdev 119 (0x77), QKeyCode "pause", number 0xc6 +Pause 0xc6 + +# evdev 120 (0x78): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchA) + +# evdev 121 (0x79), QKeyCode "kp_comma", number 0x7e +KP_Decimal 0x7e + +# evdev 122 (0x7a): no evdev -> QKeyCode mapping (xkb keysym Hangul) + +# evdev 123 (0x7b): no evdev -> QKeyCode mapping (xkb keysym Hangul_Hanja) + +# evdev 124 (0x7c), QKeyCode "yen", number 0x7d + +# evdev 125 (0x7d), QKeyCode "meta_l", number 0xdb +Super_L 0xdb + +# evdev 126 (0x7e), QKeyCode "meta_r", number 0xdc +Super_R 0xdc + +# evdev 127 (0x7f), QKeyCode "compose", number 0xdd +Menu 0xdd + +# evdev 128 (0x80), QKeyCode "stop", number 0xe8 +Cancel 0xe8 + +# evdev 129 (0x81), QKeyCode "again", number 0x85 +Redo 0x85 + +# evdev 130 (0x82), QKeyCode "props", number 0x86 +SunProps 0x86 + +# evdev 131 (0x83), QKeyCode "undo", number 0x87 +Undo 0x87 + +# evdev 132 (0x84), QKeyCode "front", number 0x8c +SunFront 0x8c + +# evdev 133 (0x85), QKeyCode "copy", number 0xf8 +XF86Copy 0xf8 + +# evdev 134 (0x86), QKeyCode "open", number 0x64 +XF86Open 0x64 + +# evdev 135 (0x87), QKeyCode "paste", number 0x65 +XF86Paste 0x65 + +# evdev 136 (0x88), QKeyCode "find", number 0xc1 +Find 0xc1 + +# evdev 137 (0x89), QKeyCode "cut", number 0xbc +XF86Cut 0xbc + +# evdev 138 (0x8a), QKeyCode "help", number 0xf5 +Help 0xf5 + +# evdev 139 (0x8b), QKeyCode "menu", number 0x9e +XF86MenuKB 0x9e + +# evdev 140 (0x8c), QKeyCode "calculator", number 0xa1 +XF86Calculator 0xa1 + +# evdev 141 (0x8d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 142 (0x8e), QKeyCode "sleep", number 0xdf +XF86Sleep 0xdf + +# evdev 143 (0x8f), QKeyCode "wake", number 0xe3 +XF86WakeUp 0xe3 + +# evdev 144 (0x90): no evdev -> QKeyCode mapping (xkb keysym XF86Explorer) + +# evdev 145 (0x91): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 146 (0x92): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 147 (0x93): no evdev -> QKeyCode mapping (xkb keysym XF86Xfer) + +# evdev 148 (0x94): no evdev -> QKeyCode mapping (xkb keysym XF86Launch1) + +# evdev 149 (0x95): no evdev -> QKeyCode mapping (xkb keysym XF86Launch2) + +# evdev 150 (0x96): no evdev -> QKeyCode mapping (xkb keysym XF86WWW) + +# evdev 151 (0x97): no evdev -> QKeyCode mapping (xkb keysym XF86DOS) + +# evdev 152 (0x98): no evdev -> QKeyCode mapping (xkb keysym XF86ScreenSaver) + +# evdev 153 (0x99): no evdev -> QKeyCode mapping (xkb keysym XF86RotateWindows) + +# evdev 154 (0x9a): no evdev -> QKeyCode mapping (xkb keysym XF86TaskPane) + +# evdev 155 (0x9b), QKeyCode "mail", number 0xec +XF86Mail 0xec + +# evdev 156 (0x9c), QKeyCode "ac_bookmarks", number 0xe6 +XF86Favorites 0xe6 + +# evdev 157 (0x9d), QKeyCode "computer", number 0xeb +XF86MyComputer 0xeb + +# evdev 158 (0x9e), QKeyCode "ac_back", number 0xea +XF86Back 0xea + +# evdev 159 (0x9f), QKeyCode "ac_forward", number 0xe9 +XF86Forward 0xe9 + +# evdev 160 (0xa0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 161 (0xa1): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 162 (0xa2): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 163 (0xa3), QKeyCode "audionext", number 0x99 +XF86AudioNext 0x99 + +# evdev 164 (0xa4), QKeyCode "audioplay", number 0xa2 +XF86AudioPlay 0xa2 +XF86AudioPause 0xa2 shift + +# evdev 165 (0xa5), QKeyCode "audioprev", number 0x90 +XF86AudioPrev 0x90 + +# evdev 166 (0xa6), QKeyCode "audiostop", number 0xa4 +XF86AudioStop 0xa4 +XF86Eject 0xa4 shift + +# evdev 167 (0xa7): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRecord) + +# evdev 168 (0xa8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRewind) + +# evdev 169 (0xa9): no evdev -> QKeyCode mapping (xkb keysym XF86Phone) + +# evdev 170 (0xaa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 171 (0xab): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 172 (0xac), QKeyCode "ac_home", number 0xb2 +XF86HomePage 0xb2 + +# evdev 173 (0xad), QKeyCode "ac_refresh", number 0xe7 +XF86Reload 0xe7 + +# evdev 174 (0xae): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 175 (0xaf): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 176 (0xb0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 177 (0xb1): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollUp) + +# evdev 178 (0xb2): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollDown) + +# evdev 179 (0xb3): no evdev -> QKeyCode mapping (xkb keysym parenleft) + +# evdev 180 (0xb4): no evdev -> QKeyCode mapping (xkb keysym parenright) + +# evdev 181 (0xb5): no evdev -> QKeyCode mapping (xkb keysym XF86New) + +# evdev 182 (0xb6): no evdev -> QKeyCode mapping (xkb keysym Redo) + +# evdev 183 (0xb7): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 184 (0xb8): no evdev -> QKeyCode mapping (xkb keysym XF86Launch5) + +# evdev 185 (0xb9): no evdev -> QKeyCode mapping (xkb keysym XF86Launch6) + +# evdev 186 (0xba): no evdev -> QKeyCode mapping (xkb keysym XF86Launch7) + +# evdev 187 (0xbb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch8) + +# evdev 188 (0xbc): no evdev -> QKeyCode mapping (xkb keysym XF86Launch9) + +# evdev 189 (0xbd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 190 (0xbe): no evdev -> QKeyCode mapping (xkb keysym XF86AudioMicMute) + +# evdev 191 (0xbf): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadToggle) + +# evdev 192 (0xc0): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOn) + +# evdev 193 (0xc1): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOff) + +# evdev 194 (0xc2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 195 (0xc3): no evdev -> QKeyCode mapping (xkb keysym Mode_switch) + +# evdev 196 (0xc4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 197 (0xc5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 198 (0xc6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 199 (0xc7): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 200 (0xc8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 201 (0xc9): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPause) + +# evdev 202 (0xca): no evdev -> QKeyCode mapping (xkb keysym XF86Launch3) + +# evdev 203 (0xcb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch4) + +# evdev 204 (0xcc): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchB) + +# evdev 205 (0xcd): no evdev -> QKeyCode mapping (xkb keysym XF86Suspend) + +# evdev 206 (0xce): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 207 (0xcf): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 208 (0xd0): no evdev -> QKeyCode mapping (xkb keysym XF86AudioForward) + +# evdev 209 (0xd1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 210 (0xd2): no evdev -> QKeyCode mapping (xkb keysym Print) + +# evdev 211 (0xd3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 212 (0xd4): no evdev -> QKeyCode mapping (xkb keysym XF86WebCam) + +# evdev 213 (0xd5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 214 (0xd6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 215 (0xd7): no evdev -> QKeyCode mapping (xkb keysym XF86Mail) + +# evdev 216 (0xd8): no evdev -> QKeyCode mapping (xkb keysym XF86Messenger) + +# evdev 217 (0xd9): no evdev -> QKeyCode mapping (xkb keysym XF86Search) + +# evdev 218 (0xda): no evdev -> QKeyCode mapping (xkb keysym XF86Go) + +# evdev 219 (0xdb): no evdev -> QKeyCode mapping (xkb keysym XF86Finance) + +# evdev 220 (0xdc): no evdev -> QKeyCode mapping (xkb keysym XF86Game) + +# evdev 221 (0xdd): no evdev -> QKeyCode mapping (xkb keysym XF86Shop) + +# evdev 222 (0xde): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 223 (0xdf): no evdev -> QKeyCode mapping (xkb keysym Cancel) + +# evdev 224 (0xe0): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessDown) + +# evdev 225 (0xe1): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessUp) + +# evdev 226 (0xe2), QKeyCode "mediaselect", number 0xed +XF86AudioMedia 0xed + +# evdev 227 (0xe3): no evdev -> QKeyCode mapping (xkb keysym XF86Display) + +# evdev 228 (0xe4): no evdev -> QKeyCode mapping (xkb keysym XF86KbdLightOnOff) + +# evdev 229 (0xe5): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessDown) + +# evdev 230 (0xe6): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessUp) + +# evdev 231 (0xe7): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 232 (0xe8): no evdev -> QKeyCode mapping (xkb keysym XF86Reply) + +# evdev 233 (0xe9): no evdev -> QKeyCode mapping (xkb keysym XF86MailForward) + +# evdev 234 (0xea): no evdev -> QKeyCode mapping (xkb keysym XF86Save) + +# evdev 235 (0xeb): no evdev -> QKeyCode mapping (xkb keysym XF86Documents) + +# evdev 236 (0xec): no evdev -> QKeyCode mapping (xkb keysym XF86Battery) + +# evdev 237 (0xed): no evdev -> QKeyCode mapping (xkb keysym XF86Bluetooth) + +# evdev 238 (0xee): no evdev -> QKeyCode mapping (xkb keysym XF86WLAN) + +# evdev 239 (0xef): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 240 (0xf0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 241 (0xf1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 242 (0xf2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 243 (0xf3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 244 (0xf4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# +# quirks section start +# +# Sometimes multiple keysyms map to the same keycodes. +# The keycode -> keysym lookup finds only one of the +# keysyms. So append them here. +# + +Print 0x54 +Sys_Req 0x54 +Execute 0x54 +KP_Decimal 0x53 numlock +KP_Separator 0x53 numlock +Alt_R 0xb8 +ISO_Level3_Shift 0xb8 +Mode_switch 0xb8 + +# quirks section end diff --git a/app/src/main/assets/roms/keymaps/common b/app/src/main/assets/roms/keymaps/common new file mode 100644 index 0000000..adc56c7 --- /dev/null +++ b/app/src/main/assets/roms/keymaps/common @@ -0,0 +1,157 @@ +include modifiers + +# +# Top row +# +1 0x2 +2 0x3 +3 0x4 +4 0x5 +5 0x6 +6 0x7 +7 0x8 +8 0x9 +9 0xa +0 0xb +BackSpace 0xe + +# +# QWERTY first row +# +Tab 0xf localstate +ISO_Left_Tab 0xf shift +q 0x10 addupper +w 0x11 addupper +e 0x12 addupper +r 0x13 addupper +t 0x14 addupper +y 0x15 addupper +u 0x16 addupper +i 0x17 addupper +o 0x18 addupper +p 0x19 addupper + +# +# QWERTY second row +# +a 0x1e addupper +s 0x1f addupper +d 0x20 addupper +f 0x21 addupper +g 0x22 addupper +h 0x23 addupper +j 0x24 addupper +k 0x25 addupper +l 0x26 addupper +Return 0x1c localstate + +# +# QWERTY third row +# +z 0x2c addupper +x 0x2d addupper +c 0x2e addupper +v 0x2f addupper +b 0x30 addupper +n 0x31 addupper +m 0x32 addupper + +space 0x39 localstate + +less 0x56 +greater 0x56 shift +bar 0x56 altgr +brokenbar 0x56 shift altgr + +# +# Esc and Function keys +# +Escape 0x1 localstate +F1 0x3b localstate +F2 0x3c localstate +F3 0x3d localstate +F4 0x3e localstate +F5 0x3f localstate +F6 0x40 localstate +F7 0x41 localstate +F8 0x42 localstate +F9 0x43 localstate +F10 0x44 localstate +F11 0x57 localstate +F12 0x58 localstate + +# Printscreen, Scrollock and Pause +# Printscreen really requires four scancodes (0xe0, 0x2a, 0xe0, 0x37), +# but (0xe0, 0x37) seems to work. +Print 0xb7 localstate +Sys_Req 0xb7 localstate +Execute 0xb7 localstate +Scroll_Lock 0x46 + +# +# Insert - PgDown +# +Insert 0xd2 localstate +Delete 0xd3 localstate +Home 0xc7 localstate +End 0xcf localstate +Page_Up 0xc9 localstate +Page_Down 0xd1 localstate + +# +# Arrow keys +# +Left 0xcb localstate +Up 0xc8 localstate +Down 0xd0 localstate +Right 0xcd localstate + +# +# Numpad +# +Num_Lock 0x45 +KP_Divide 0xb5 +KP_Multiply 0x37 +KP_Subtract 0x4a +KP_Add 0x4e +KP_Enter 0x9c + +KP_Decimal 0x53 numlock +KP_Separator 0x53 numlock +KP_Delete 0x53 + +KP_0 0x52 numlock +KP_Insert 0x52 + +KP_1 0x4f numlock +KP_End 0x4f + +KP_2 0x50 numlock +KP_Down 0x50 + +KP_3 0x51 numlock +KP_Next 0x51 + +KP_4 0x4b numlock +KP_Left 0x4b + +KP_5 0x4c numlock +KP_Begin 0x4c + +KP_6 0x4d numlock +KP_Right 0x4d + +KP_7 0x47 numlock +KP_Home 0x47 + +KP_8 0x48 numlock +KP_Up 0x48 + +KP_9 0x49 numlock +KP_Prior 0x49 + +Caps_Lock 0x3a +# +# Inhibited keys +# +Multi_key 0x0 inhibit diff --git a/app/src/main/assets/roms/keymaps/cz b/app/src/main/assets/roms/keymaps/cz new file mode 100644 index 0000000..46b3775 --- /dev/null +++ b/app/src/main/assets/roms/keymaps/cz @@ -0,0 +1,837 @@ +# +# generated by qemu-keymap +# model : pc105 +# layout : cz +# variant : - +# options : - + +# name: "Czech" + +# modifiers +# 0: Shift +# 1: Lock +# 2: Control +# 3: Mod1 +# 4: Mod2 +# 5: Mod3 +# 6: Mod4 +# 7: Mod5 +# 8: NumLock +# 9: Alt +# 10: LevelThree +# 11: LAlt +# 12: RAlt +# 13: RControl +# 14: LControl +# 15: ScrollLock +# 16: LevelFive +# 17: AltGr +# 18: Meta +# 19: Super +# 20: Hyper + +# evdev 1 (0x1), QKeyCode "esc", number 0x1 +Escape 0x01 + +# evdev 2 (0x2), QKeyCode "1", number 0x2 +plus 0x02 +1 0x02 shift +exclam 0x02 altgr +dead_tilde 0x02 shift altgr + +# evdev 3 (0x3), QKeyCode "2", number 0x3 +ecaron 0x03 +2 0x03 shift +at 0x03 altgr +dead_caron 0x03 shift altgr + +# evdev 4 (0x4), QKeyCode "3", number 0x4 +scaron 0x04 +3 0x04 shift +numbersign 0x04 altgr +dead_circumflex 0x04 shift altgr + +# evdev 5 (0x5), QKeyCode "4", number 0x5 +ccaron 0x05 +4 0x05 shift +dollar 0x05 altgr +dead_breve 0x05 shift altgr + +# evdev 6 (0x6), QKeyCode "5", number 0x6 +rcaron 0x06 +5 0x06 shift +percent 0x06 altgr +dead_abovering 0x06 shift altgr + +# evdev 7 (0x7), QKeyCode "6", number 0x7 +zcaron 0x07 +6 0x07 shift +asciicircum 0x07 altgr +dead_ogonek 0x07 shift altgr + +# evdev 8 (0x8), QKeyCode "7", number 0x8 +yacute 0x08 +7 0x08 shift +ampersand 0x08 altgr +dead_grave 0x08 shift altgr + +# evdev 9 (0x9), QKeyCode "8", number 0x9 +aacute 0x09 +8 0x09 shift +asterisk 0x09 altgr +dead_abovedot 0x09 shift altgr + +# evdev 10 (0xa), QKeyCode "9", number 0xa +iacute 0x0a +9 0x0a shift +braceleft 0x0a altgr +dead_acute 0x0a shift altgr + +# evdev 11 (0xb), QKeyCode "0", number 0xb +eacute 0x0b +0 0x0b shift +braceright 0x0b altgr +dead_doubleacute 0x0b shift altgr + +# evdev 12 (0xc), QKeyCode "minus", number 0xc +equal 0x0c +percent 0x0c shift +backslash 0x0c altgr +dead_diaeresis 0x0c shift altgr + +# evdev 13 (0xd), QKeyCode "equal", number 0xd +dead_acute 0x0d +dead_caron 0x0d shift +dead_macron 0x0d altgr +dead_cedilla 0x0d shift altgr + +# evdev 14 (0xe), QKeyCode "backspace", number 0xe +BackSpace 0x0e + +# evdev 15 (0xf), QKeyCode "tab", number 0xf +Tab 0x0f +ISO_Left_Tab 0x0f shift + +# evdev 16 (0x10), QKeyCode "q", number 0x10 +q 0x10 +Q 0x10 shift +backslash 0x10 altgr +Greek_OMEGA 0x10 shift altgr + +# evdev 17 (0x11), QKeyCode "w", number 0x11 +w 0x11 +W 0x11 shift +bar 0x11 altgr +Lstroke 0x11 shift altgr + +# evdev 18 (0x12), QKeyCode "e", number 0x12 +e 0x12 +E 0x12 shift +EuroSign 0x12 altgr + +# evdev 19 (0x13), QKeyCode "r", number 0x13 +r 0x13 +R 0x13 shift +paragraph 0x13 altgr +registered 0x13 shift altgr + +# evdev 20 (0x14), QKeyCode "t", number 0x14 +t 0x14 +T 0x14 shift +tslash 0x14 altgr +Tslash 0x14 shift altgr + +# evdev 21 (0x15), QKeyCode "y", number 0x15 +z 0x15 +Z 0x15 shift +leftarrow 0x15 altgr +yen 0x15 shift altgr + +# evdev 22 (0x16), QKeyCode "u", number 0x16 +u 0x16 +U 0x16 shift +downarrow 0x16 altgr +uparrow 0x16 shift altgr + +# evdev 23 (0x17), QKeyCode "i", number 0x17 +i 0x17 +I 0x17 shift +rightarrow 0x17 altgr +idotless 0x17 shift altgr + +# evdev 24 (0x18), QKeyCode "o", number 0x18 +o 0x18 +O 0x18 shift +oslash 0x18 altgr +Oslash 0x18 shift altgr + +# evdev 25 (0x19), QKeyCode "p", number 0x19 +p 0x19 +P 0x19 shift +thorn 0x19 altgr +THORN 0x19 shift altgr + +# evdev 26 (0x1a), QKeyCode "bracket_left", number 0x1a +uacute 0x1a +slash 0x1a shift +bracketleft 0x1a altgr +division 0x1a shift altgr + +# evdev 27 (0x1b), QKeyCode "bracket_right", number 0x1b +parenright 0x1b +parenleft 0x1b shift +bracketright 0x1b altgr +multiply 0x1b shift altgr + +# evdev 28 (0x1c), QKeyCode "ret", number 0x1c +Return 0x1c + +# evdev 29 (0x1d), QKeyCode "ctrl", number 0x1d +Control_L 0x1d + +# evdev 30 (0x1e), QKeyCode "a", number 0x1e +a 0x1e +A 0x1e shift +asciitilde 0x1e altgr +AE 0x1e shift altgr + +# evdev 31 (0x1f), QKeyCode "s", number 0x1f +s 0x1f +S 0x1f shift +dstroke 0x1f altgr +section 0x1f shift altgr + +# evdev 32 (0x20), QKeyCode "d", number 0x20 +d 0x20 +D 0x20 shift +Dstroke 0x20 altgr +ETH 0x20 shift altgr + +# evdev 33 (0x21), QKeyCode "f", number 0x21 +f 0x21 +F 0x21 shift +bracketleft 0x21 altgr +ordfeminine 0x21 shift altgr + +# evdev 34 (0x22), QKeyCode "g", number 0x22 +g 0x22 +G 0x22 shift +bracketright 0x22 altgr +ENG 0x22 shift altgr + +# evdev 35 (0x23), QKeyCode "h", number 0x23 +h 0x23 +H 0x23 shift +grave 0x23 altgr +Hstroke 0x23 shift altgr + +# evdev 36 (0x24), QKeyCode "j", number 0x24 +j 0x24 +J 0x24 shift +apostrophe 0x24 altgr +dead_horn 0x24 shift altgr + +# evdev 37 (0x25), QKeyCode "k", number 0x25 +k 0x25 +K 0x25 shift +lstroke 0x25 altgr +ampersand 0x25 shift altgr + +# evdev 38 (0x26), QKeyCode "l", number 0x26 +l 0x26 +L 0x26 shift +Lstroke 0x26 altgr + +# evdev 39 (0x27), QKeyCode "semicolon", number 0x27 +uring 0x27 +quotedbl 0x27 shift +dollar 0x27 altgr +dead_doubleacute 0x27 shift altgr + +# evdev 40 (0x28), QKeyCode "apostrophe", number 0x28 +section 0x28 +exclam 0x28 shift +apostrophe 0x28 altgr +ssharp 0x28 shift altgr + +# evdev 41 (0x29), QKeyCode "grave_accent", number 0x29 +semicolon 0x29 +dead_abovering 0x29 shift +grave 0x29 altgr +asciitilde 0x29 shift altgr + +# evdev 42 (0x2a), QKeyCode "shift", number 0x2a +Shift_L 0x2a + +# evdev 43 (0x2b), QKeyCode "backslash", number 0x2b +dead_diaeresis 0x2b +apostrophe 0x2b shift +backslash 0x2b altgr +bar 0x2b shift altgr + +# evdev 44 (0x2c), QKeyCode "z", number 0x2c +y 0x2c +Y 0x2c shift +degree 0x2c altgr +less 0x2c shift altgr + +# evdev 45 (0x2d), QKeyCode "x", number 0x2d +x 0x2d +X 0x2d shift +numbersign 0x2d altgr +greater 0x2d shift altgr + +# evdev 46 (0x2e), QKeyCode "c", number 0x2e +c 0x2e +C 0x2e shift +ampersand 0x2e altgr +copyright 0x2e shift altgr + +# evdev 47 (0x2f), QKeyCode "v", number 0x2f +v 0x2f +V 0x2f shift +at 0x2f altgr +leftsinglequotemark 0x2f shift altgr + +# evdev 48 (0x30), QKeyCode "b", number 0x30 +b 0x30 +B 0x30 shift +braceleft 0x30 altgr +rightsinglequotemark 0x30 shift altgr + +# evdev 49 (0x31), QKeyCode "n", number 0x31 +n 0x31 +N 0x31 shift +braceright 0x31 altgr + +# evdev 50 (0x32), QKeyCode "m", number 0x32 +m 0x32 +M 0x32 shift +asciicircum 0x32 altgr +masculine 0x32 shift altgr + +# evdev 51 (0x33), QKeyCode "comma", number 0x33 +comma 0x33 +question 0x33 shift +less 0x33 altgr +multiply 0x33 shift altgr + +# evdev 52 (0x34), QKeyCode "dot", number 0x34 +period 0x34 +colon 0x34 shift +greater 0x34 altgr +division 0x34 shift altgr + +# evdev 53 (0x35), QKeyCode "slash", number 0x35 +minus 0x35 +underscore 0x35 shift +asterisk 0x35 altgr +dead_abovedot 0x35 shift altgr + +# evdev 54 (0x36), QKeyCode "shift_r", number 0x36 +Shift_R 0x36 + +# evdev 55 (0x37), QKeyCode "kp_multiply", number 0x37 +KP_Multiply 0x37 + +# evdev 56 (0x38), QKeyCode "alt", number 0x38 +Alt_L 0x38 +Meta_L 0x38 shift + +# evdev 57 (0x39), QKeyCode "spc", number 0x39 +space 0x39 + +# evdev 58 (0x3a), QKeyCode "caps_lock", number 0x3a +Caps_Lock 0x3a + +# evdev 59 (0x3b), QKeyCode "f1", number 0x3b +F1 0x3b + +# evdev 60 (0x3c), QKeyCode "f2", number 0x3c +F2 0x3c + +# evdev 61 (0x3d), QKeyCode "f3", number 0x3d +F3 0x3d + +# evdev 62 (0x3e), QKeyCode "f4", number 0x3e +F4 0x3e + +# evdev 63 (0x3f), QKeyCode "f5", number 0x3f +F5 0x3f + +# evdev 64 (0x40), QKeyCode "f6", number 0x40 +F6 0x40 + +# evdev 65 (0x41), QKeyCode "f7", number 0x41 +F7 0x41 + +# evdev 66 (0x42), QKeyCode "f8", number 0x42 +F8 0x42 + +# evdev 67 (0x43), QKeyCode "f9", number 0x43 +F9 0x43 + +# evdev 68 (0x44), QKeyCode "f10", number 0x44 +F10 0x44 + +# evdev 69 (0x45), QKeyCode "num_lock", number 0x45 +Num_Lock 0x45 + +# evdev 70 (0x46), QKeyCode "scroll_lock", number 0x46 +Scroll_Lock 0x46 + +# evdev 71 (0x47), QKeyCode "kp_7", number 0x47 +KP_Home 0x47 +KP_7 0x47 numlock + +# evdev 72 (0x48), QKeyCode "kp_8", number 0x48 +KP_Up 0x48 +KP_8 0x48 numlock + +# evdev 73 (0x49), QKeyCode "kp_9", number 0x49 +KP_Prior 0x49 +KP_9 0x49 numlock + +# evdev 74 (0x4a), QKeyCode "kp_subtract", number 0x4a +KP_Subtract 0x4a + +# evdev 75 (0x4b), QKeyCode "kp_4", number 0x4b +KP_Left 0x4b +KP_4 0x4b numlock + +# evdev 76 (0x4c), QKeyCode "kp_5", number 0x4c +KP_Begin 0x4c +KP_5 0x4c numlock + +# evdev 77 (0x4d), QKeyCode "kp_6", number 0x4d +KP_Right 0x4d +KP_6 0x4d numlock + +# evdev 78 (0x4e), QKeyCode "kp_add", number 0x4e +KP_Add 0x4e + +# evdev 79 (0x4f), QKeyCode "kp_1", number 0x4f +KP_End 0x4f +KP_1 0x4f numlock + +# evdev 80 (0x50), QKeyCode "kp_2", number 0x50 +KP_Down 0x50 +KP_2 0x50 numlock + +# evdev 81 (0x51), QKeyCode "kp_3", number 0x51 +KP_Next 0x51 +KP_3 0x51 numlock + +# evdev 82 (0x52), QKeyCode "kp_0", number 0x52 +KP_Insert 0x52 +KP_0 0x52 numlock + +# evdev 83 (0x53), QKeyCode "kp_decimal", number 0x53 +KP_Delete 0x53 +KP_Decimal 0x53 numlock + +# evdev 84 (0x54): no evdev -> QKeyCode mapping (xkb keysym ISO_Level3_Shift) + +# evdev 85 (0x55): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 86 (0x56), QKeyCode "less", number 0x56 +backslash 0x56 +bar 0x56 shift +slash 0x56 altgr +brokenbar 0x56 shift altgr + +# evdev 87 (0x57), QKeyCode "f11", number 0x57 +F11 0x57 + +# evdev 88 (0x58), QKeyCode "f12", number 0x58 +F12 0x58 + +# evdev 89 (0x59), QKeyCode "ro", number 0x73 + +# evdev 90 (0x5a): no evdev -> QKeyCode mapping (xkb keysym Katakana) + +# evdev 91 (0x5b), QKeyCode "hiragana", number 0x77 +Hiragana 0x77 + +# evdev 92 (0x5c), QKeyCode "henkan", number 0x79 +Henkan_Mode 0x79 + +# evdev 93 (0x5d): no evdev -> QKeyCode mapping (xkb keysym Hiragana_Katakana) + +# evdev 94 (0x5e): no evdev -> QKeyCode mapping (xkb keysym Muhenkan) + +# evdev 95 (0x5f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 96 (0x60), QKeyCode "kp_enter", number 0x9c +KP_Enter 0x9c + +# evdev 97 (0x61), QKeyCode "ctrl_r", number 0x9d +Control_R 0x9d + +# evdev 98 (0x62), QKeyCode "kp_divide", number 0xb5 +KP_Divide 0xb5 + +# evdev 99 (0x63), QKeyCode "sysrq", number 0x54 +Print 0x54 + +# evdev 100 (0x64), QKeyCode "alt_r", number 0xb8 +ISO_Level3_Shift 0xb8 + +# evdev 101 (0x65), QKeyCode "lf", number 0x5b +Linefeed 0x5b + +# evdev 102 (0x66), QKeyCode "home", number 0xc7 +Home 0xc7 + +# evdev 103 (0x67), QKeyCode "up", number 0xc8 +Up 0xc8 + +# evdev 104 (0x68), QKeyCode "pgup", number 0xc9 +Prior 0xc9 + +# evdev 105 (0x69), QKeyCode "left", number 0xcb +Left 0xcb + +# evdev 106 (0x6a), QKeyCode "right", number 0xcd +Right 0xcd + +# evdev 107 (0x6b), QKeyCode "end", number 0xcf +End 0xcf + +# evdev 108 (0x6c), QKeyCode "down", number 0xd0 +Down 0xd0 + +# evdev 109 (0x6d), QKeyCode "pgdn", number 0xd1 +Next 0xd1 + +# evdev 110 (0x6e), QKeyCode "insert", number 0xd2 +Insert 0xd2 + +# evdev 111 (0x6f), QKeyCode "delete", number 0xd3 +Delete 0xd3 + +# evdev 112 (0x70): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 113 (0x71), QKeyCode "audiomute", number 0xa0 +XF86AudioMute 0xa0 + +# evdev 114 (0x72), QKeyCode "volumedown", number 0xae +XF86AudioLowerVolume 0xae + +# evdev 115 (0x73), QKeyCode "volumeup", number 0xb0 +XF86AudioRaiseVolume 0xb0 + +# evdev 116 (0x74), QKeyCode "power", number 0xde +XF86PowerOff 0xde + +# evdev 117 (0x75), QKeyCode "kp_equals", number 0x59 +KP_Equal 0x59 + +# evdev 118 (0x76): no evdev -> QKeyCode mapping (xkb keysym plusminus) + +# evdev 119 (0x77), QKeyCode "pause", number 0xc6 +Pause 0xc6 + +# evdev 120 (0x78): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchA) + +# evdev 121 (0x79), QKeyCode "kp_comma", number 0x7e +KP_Decimal 0x7e + +# evdev 122 (0x7a): no evdev -> QKeyCode mapping (xkb keysym Hangul) + +# evdev 123 (0x7b): no evdev -> QKeyCode mapping (xkb keysym Hangul_Hanja) + +# evdev 124 (0x7c), QKeyCode "yen", number 0x7d + +# evdev 125 (0x7d), QKeyCode "meta_l", number 0xdb +Super_L 0xdb + +# evdev 126 (0x7e), QKeyCode "meta_r", number 0xdc +Super_R 0xdc + +# evdev 127 (0x7f), QKeyCode "compose", number 0xdd +Menu 0xdd + +# evdev 128 (0x80), QKeyCode "stop", number 0xe8 +Cancel 0xe8 + +# evdev 129 (0x81), QKeyCode "again", number 0x85 +Redo 0x85 + +# evdev 130 (0x82), QKeyCode "props", number 0x86 +SunProps 0x86 + +# evdev 131 (0x83), QKeyCode "undo", number 0x87 +Undo 0x87 + +# evdev 132 (0x84), QKeyCode "front", number 0x8c +SunFront 0x8c + +# evdev 133 (0x85), QKeyCode "copy", number 0xf8 +XF86Copy 0xf8 + +# evdev 134 (0x86), QKeyCode "open", number 0x64 +XF86Open 0x64 + +# evdev 135 (0x87), QKeyCode "paste", number 0x65 +XF86Paste 0x65 + +# evdev 136 (0x88), QKeyCode "find", number 0xc1 +Find 0xc1 + +# evdev 137 (0x89), QKeyCode "cut", number 0xbc +XF86Cut 0xbc + +# evdev 138 (0x8a), QKeyCode "help", number 0xf5 +Help 0xf5 + +# evdev 139 (0x8b), QKeyCode "menu", number 0x9e +XF86MenuKB 0x9e + +# evdev 140 (0x8c), QKeyCode "calculator", number 0xa1 +XF86Calculator 0xa1 + +# evdev 141 (0x8d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 142 (0x8e), QKeyCode "sleep", number 0xdf +XF86Sleep 0xdf + +# evdev 143 (0x8f), QKeyCode "wake", number 0xe3 +XF86WakeUp 0xe3 + +# evdev 144 (0x90): no evdev -> QKeyCode mapping (xkb keysym XF86Explorer) + +# evdev 145 (0x91): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 146 (0x92): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 147 (0x93): no evdev -> QKeyCode mapping (xkb keysym XF86Xfer) + +# evdev 148 (0x94): no evdev -> QKeyCode mapping (xkb keysym XF86Launch1) + +# evdev 149 (0x95): no evdev -> QKeyCode mapping (xkb keysym XF86Launch2) + +# evdev 150 (0x96): no evdev -> QKeyCode mapping (xkb keysym XF86WWW) + +# evdev 151 (0x97): no evdev -> QKeyCode mapping (xkb keysym XF86DOS) + +# evdev 152 (0x98): no evdev -> QKeyCode mapping (xkb keysym XF86ScreenSaver) + +# evdev 153 (0x99): no evdev -> QKeyCode mapping (xkb keysym XF86RotateWindows) + +# evdev 154 (0x9a): no evdev -> QKeyCode mapping (xkb keysym XF86TaskPane) + +# evdev 155 (0x9b), QKeyCode "mail", number 0xec +XF86Mail 0xec + +# evdev 156 (0x9c), QKeyCode "ac_bookmarks", number 0xe6 +XF86Favorites 0xe6 + +# evdev 157 (0x9d), QKeyCode "computer", number 0xeb +XF86MyComputer 0xeb + +# evdev 158 (0x9e), QKeyCode "ac_back", number 0xea +XF86Back 0xea + +# evdev 159 (0x9f), QKeyCode "ac_forward", number 0xe9 +XF86Forward 0xe9 + +# evdev 160 (0xa0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 161 (0xa1): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 162 (0xa2): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 163 (0xa3), QKeyCode "audionext", number 0x99 +XF86AudioNext 0x99 + +# evdev 164 (0xa4), QKeyCode "audioplay", number 0xa2 +XF86AudioPlay 0xa2 +XF86AudioPause 0xa2 shift + +# evdev 165 (0xa5), QKeyCode "audioprev", number 0x90 +XF86AudioPrev 0x90 + +# evdev 166 (0xa6), QKeyCode "audiostop", number 0xa4 +XF86AudioStop 0xa4 +XF86Eject 0xa4 shift + +# evdev 167 (0xa7): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRecord) + +# evdev 168 (0xa8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRewind) + +# evdev 169 (0xa9): no evdev -> QKeyCode mapping (xkb keysym XF86Phone) + +# evdev 170 (0xaa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 171 (0xab): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 172 (0xac), QKeyCode "ac_home", number 0xb2 +XF86HomePage 0xb2 + +# evdev 173 (0xad), QKeyCode "ac_refresh", number 0xe7 +XF86Reload 0xe7 + +# evdev 174 (0xae): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 175 (0xaf): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 176 (0xb0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 177 (0xb1): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollUp) + +# evdev 178 (0xb2): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollDown) + +# evdev 179 (0xb3): no evdev -> QKeyCode mapping (xkb keysym parenleft) + +# evdev 180 (0xb4): no evdev -> QKeyCode mapping (xkb keysym parenright) + +# evdev 181 (0xb5): no evdev -> QKeyCode mapping (xkb keysym XF86New) + +# evdev 182 (0xb6): no evdev -> QKeyCode mapping (xkb keysym Redo) + +# evdev 183 (0xb7): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 184 (0xb8): no evdev -> QKeyCode mapping (xkb keysym XF86Launch5) + +# evdev 185 (0xb9): no evdev -> QKeyCode mapping (xkb keysym XF86Launch6) + +# evdev 186 (0xba): no evdev -> QKeyCode mapping (xkb keysym XF86Launch7) + +# evdev 187 (0xbb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch8) + +# evdev 188 (0xbc): no evdev -> QKeyCode mapping (xkb keysym XF86Launch9) + +# evdev 189 (0xbd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 190 (0xbe): no evdev -> QKeyCode mapping (xkb keysym XF86AudioMicMute) + +# evdev 191 (0xbf): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadToggle) + +# evdev 192 (0xc0): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOn) + +# evdev 193 (0xc1): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOff) + +# evdev 194 (0xc2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 195 (0xc3): no evdev -> QKeyCode mapping (xkb keysym Mode_switch) + +# evdev 196 (0xc4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 197 (0xc5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 198 (0xc6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 199 (0xc7): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 200 (0xc8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 201 (0xc9): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPause) + +# evdev 202 (0xca): no evdev -> QKeyCode mapping (xkb keysym XF86Launch3) + +# evdev 203 (0xcb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch4) + +# evdev 204 (0xcc): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchB) + +# evdev 205 (0xcd): no evdev -> QKeyCode mapping (xkb keysym XF86Suspend) + +# evdev 206 (0xce): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 207 (0xcf): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 208 (0xd0): no evdev -> QKeyCode mapping (xkb keysym XF86AudioForward) + +# evdev 209 (0xd1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 210 (0xd2): no evdev -> QKeyCode mapping (xkb keysym Print) + +# evdev 211 (0xd3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 212 (0xd4): no evdev -> QKeyCode mapping (xkb keysym XF86WebCam) + +# evdev 213 (0xd5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 214 (0xd6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 215 (0xd7): no evdev -> QKeyCode mapping (xkb keysym XF86Mail) + +# evdev 216 (0xd8): no evdev -> QKeyCode mapping (xkb keysym XF86Messenger) + +# evdev 217 (0xd9): no evdev -> QKeyCode mapping (xkb keysym XF86Search) + +# evdev 218 (0xda): no evdev -> QKeyCode mapping (xkb keysym XF86Go) + +# evdev 219 (0xdb): no evdev -> QKeyCode mapping (xkb keysym XF86Finance) + +# evdev 220 (0xdc): no evdev -> QKeyCode mapping (xkb keysym XF86Game) + +# evdev 221 (0xdd): no evdev -> QKeyCode mapping (xkb keysym XF86Shop) + +# evdev 222 (0xde): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 223 (0xdf): no evdev -> QKeyCode mapping (xkb keysym Cancel) + +# evdev 224 (0xe0): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessDown) + +# evdev 225 (0xe1): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessUp) + +# evdev 226 (0xe2), QKeyCode "mediaselect", number 0xed +XF86AudioMedia 0xed + +# evdev 227 (0xe3): no evdev -> QKeyCode mapping (xkb keysym XF86Display) + +# evdev 228 (0xe4): no evdev -> QKeyCode mapping (xkb keysym XF86KbdLightOnOff) + +# evdev 229 (0xe5): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessDown) + +# evdev 230 (0xe6): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessUp) + +# evdev 231 (0xe7): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 232 (0xe8): no evdev -> QKeyCode mapping (xkb keysym XF86Reply) + +# evdev 233 (0xe9): no evdev -> QKeyCode mapping (xkb keysym XF86MailForward) + +# evdev 234 (0xea): no evdev -> QKeyCode mapping (xkb keysym XF86Save) + +# evdev 235 (0xeb): no evdev -> QKeyCode mapping (xkb keysym XF86Documents) + +# evdev 236 (0xec): no evdev -> QKeyCode mapping (xkb keysym XF86Battery) + +# evdev 237 (0xed): no evdev -> QKeyCode mapping (xkb keysym XF86Bluetooth) + +# evdev 238 (0xee): no evdev -> QKeyCode mapping (xkb keysym XF86WLAN) + +# evdev 239 (0xef): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 240 (0xf0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 241 (0xf1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 242 (0xf2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 243 (0xf3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 244 (0xf4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# +# quirks section start +# +# Sometimes multiple keysyms map to the same keycodes. +# The keycode -> keysym lookup finds only one of the +# keysyms. So append them here. +# + +Print 0x54 +Sys_Req 0x54 +Execute 0x54 +KP_Decimal 0x53 numlock +KP_Separator 0x53 numlock +Alt_R 0xb8 +ISO_Level3_Shift 0xb8 +Mode_switch 0xb8 + +# quirks section end diff --git a/app/src/main/assets/roms/keymaps/da b/app/src/main/assets/roms/keymaps/da new file mode 100644 index 0000000..f7cdad7 --- /dev/null +++ b/app/src/main/assets/roms/keymaps/da @@ -0,0 +1,836 @@ +# +# generated by qemu-keymap +# model : pc105 +# layout : dk +# variant : - +# options : - + +# name: "Danish" + +# modifiers +# 0: Shift +# 1: Lock +# 2: Control +# 3: Mod1 +# 4: Mod2 +# 5: Mod3 +# 6: Mod4 +# 7: Mod5 +# 8: NumLock +# 9: Alt +# 10: LevelThree +# 11: LAlt +# 12: RAlt +# 13: RControl +# 14: LControl +# 15: ScrollLock +# 16: LevelFive +# 17: AltGr +# 18: Meta +# 19: Super +# 20: Hyper + +# evdev 1 (0x1), QKeyCode "esc", number 0x1 +Escape 0x01 + +# evdev 2 (0x2), QKeyCode "1", number 0x2 +1 0x02 +exclam 0x02 shift +exclamdown 0x02 altgr +onesuperior 0x02 shift altgr + +# evdev 3 (0x3), QKeyCode "2", number 0x3 +2 0x03 +quotedbl 0x03 shift +at 0x03 altgr +twosuperior 0x03 shift altgr + +# evdev 4 (0x4), QKeyCode "3", number 0x4 +3 0x04 +numbersign 0x04 shift +sterling 0x04 altgr +threesuperior 0x04 shift altgr + +# evdev 5 (0x5), QKeyCode "4", number 0x5 +4 0x05 +currency 0x05 shift +dollar 0x05 altgr +onequarter 0x05 shift altgr + +# evdev 6 (0x6), QKeyCode "5", number 0x6 +5 0x06 +percent 0x06 shift +onehalf 0x06 altgr +cent 0x06 shift altgr + +# evdev 7 (0x7), QKeyCode "6", number 0x7 +6 0x07 +ampersand 0x07 shift +yen 0x07 altgr +fiveeighths 0x07 shift altgr + +# evdev 8 (0x8), QKeyCode "7", number 0x8 +7 0x08 +slash 0x08 shift +braceleft 0x08 altgr +division 0x08 shift altgr + +# evdev 9 (0x9), QKeyCode "8", number 0x9 +8 0x09 +parenleft 0x09 shift +bracketleft 0x09 altgr +guillemotleft 0x09 shift altgr + +# evdev 10 (0xa), QKeyCode "9", number 0xa +9 0x0a +parenright 0x0a shift +bracketright 0x0a altgr +guillemotright 0x0a shift altgr + +# evdev 11 (0xb), QKeyCode "0", number 0xb +0 0x0b +equal 0x0b shift +braceright 0x0b altgr +degree 0x0b shift altgr + +# evdev 12 (0xc), QKeyCode "minus", number 0xc +plus 0x0c +question 0x0c shift +plusminus 0x0c altgr +questiondown 0x0c shift altgr + +# evdev 13 (0xd), QKeyCode "equal", number 0xd +dead_acute 0x0d +dead_grave 0x0d shift +bar 0x0d altgr +brokenbar 0x0d shift altgr + +# evdev 14 (0xe), QKeyCode "backspace", number 0xe +BackSpace 0x0e + +# evdev 15 (0xf), QKeyCode "tab", number 0xf +Tab 0x0f +ISO_Left_Tab 0x0f shift + +# evdev 16 (0x10), QKeyCode "q", number 0x10 +q 0x10 +Q 0x10 shift +at 0x10 altgr +Greek_OMEGA 0x10 shift altgr + +# evdev 17 (0x11), QKeyCode "w", number 0x11 +w 0x11 +W 0x11 shift +lstroke 0x11 altgr +Lstroke 0x11 shift altgr + +# evdev 18 (0x12), QKeyCode "e", number 0x12 +e 0x12 +E 0x12 shift +EuroSign 0x12 altgr +cent 0x12 shift altgr + +# evdev 19 (0x13), QKeyCode "r", number 0x13 +r 0x13 +R 0x13 shift +registered 0x13 altgr + +# evdev 20 (0x14), QKeyCode "t", number 0x14 +t 0x14 +T 0x14 shift +thorn 0x14 altgr +THORN 0x14 shift altgr + +# evdev 21 (0x15), QKeyCode "y", number 0x15 +y 0x15 +Y 0x15 shift +leftarrow 0x15 altgr +yen 0x15 shift altgr + +# evdev 22 (0x16), QKeyCode "u", number 0x16 +u 0x16 +U 0x16 shift +downarrow 0x16 altgr +uparrow 0x16 shift altgr + +# evdev 23 (0x17), QKeyCode "i", number 0x17 +i 0x17 +I 0x17 shift +rightarrow 0x17 altgr +idotless 0x17 shift altgr + +# evdev 24 (0x18), QKeyCode "o", number 0x18 +o 0x18 +O 0x18 shift +oe 0x18 altgr +OE 0x18 shift altgr + +# evdev 25 (0x19), QKeyCode "p", number 0x19 +p 0x19 +P 0x19 shift +thorn 0x19 altgr +THORN 0x19 shift altgr + +# evdev 26 (0x1a), QKeyCode "bracket_left", number 0x1a +aring 0x1a +Aring 0x1a shift +dead_diaeresis 0x1a altgr +dead_abovering 0x1a shift altgr + +# evdev 27 (0x1b), QKeyCode "bracket_right", number 0x1b +dead_diaeresis 0x1b +dead_circumflex 0x1b shift +dead_tilde 0x1b altgr +dead_caron 0x1b shift altgr + +# evdev 28 (0x1c), QKeyCode "ret", number 0x1c +Return 0x1c + +# evdev 29 (0x1d), QKeyCode "ctrl", number 0x1d +Control_L 0x1d + +# evdev 30 (0x1e), QKeyCode "a", number 0x1e +a 0x1e +A 0x1e shift +ordfeminine 0x1e altgr +masculine 0x1e shift altgr + +# evdev 31 (0x1f), QKeyCode "s", number 0x1f +s 0x1f +S 0x1f shift +ssharp 0x1f altgr +section 0x1f shift altgr + +# evdev 32 (0x20), QKeyCode "d", number 0x20 +d 0x20 +D 0x20 shift +eth 0x20 altgr +ETH 0x20 shift altgr + +# evdev 33 (0x21), QKeyCode "f", number 0x21 +f 0x21 +F 0x21 shift +dstroke 0x21 altgr +ordfeminine 0x21 shift altgr + +# evdev 34 (0x22), QKeyCode "g", number 0x22 +g 0x22 +G 0x22 shift +eng 0x22 altgr +ENG 0x22 shift altgr + +# evdev 35 (0x23), QKeyCode "h", number 0x23 +h 0x23 +H 0x23 shift +hstroke 0x23 altgr +Hstroke 0x23 shift altgr + +# evdev 36 (0x24), QKeyCode "j", number 0x24 +j 0x24 +J 0x24 shift +dead_hook 0x24 altgr +dead_horn 0x24 shift altgr + +# evdev 37 (0x25), QKeyCode "k", number 0x25 +k 0x25 +K 0x25 shift +kra 0x25 altgr +ampersand 0x25 shift altgr + +# evdev 38 (0x26), QKeyCode "l", number 0x26 +l 0x26 +L 0x26 shift +lstroke 0x26 altgr +Lstroke 0x26 shift altgr + +# evdev 39 (0x27), QKeyCode "semicolon", number 0x27 +ae 0x27 +AE 0x27 shift +dead_acute 0x27 altgr +dead_doubleacute 0x27 shift altgr + +# evdev 40 (0x28), QKeyCode "apostrophe", number 0x28 +oslash 0x28 +Oslash 0x28 shift +dead_circumflex 0x28 altgr +dead_caron 0x28 shift altgr + +# evdev 41 (0x29), QKeyCode "grave_accent", number 0x29 +onehalf 0x29 +section 0x29 shift +threequarters 0x29 altgr +paragraph 0x29 shift altgr + +# evdev 42 (0x2a), QKeyCode "shift", number 0x2a +Shift_L 0x2a + +# evdev 43 (0x2b), QKeyCode "backslash", number 0x2b +apostrophe 0x2b +asterisk 0x2b shift +dead_doubleacute 0x2b altgr +multiply 0x2b shift altgr + +# evdev 44 (0x2c), QKeyCode "z", number 0x2c +z 0x2c +Z 0x2c shift +guillemotleft 0x2c altgr +less 0x2c shift altgr + +# evdev 45 (0x2d), QKeyCode "x", number 0x2d +x 0x2d +X 0x2d shift +guillemotright 0x2d altgr +greater 0x2d shift altgr + +# evdev 46 (0x2e), QKeyCode "c", number 0x2e +c 0x2e +C 0x2e shift +copyright 0x2e altgr + +# evdev 47 (0x2f), QKeyCode "v", number 0x2f +v 0x2f +V 0x2f shift +leftdoublequotemark 0x2f altgr +leftsinglequotemark 0x2f shift altgr + +# evdev 48 (0x30), QKeyCode "b", number 0x30 +b 0x30 +B 0x30 shift +rightdoublequotemark 0x30 altgr +rightsinglequotemark 0x30 shift altgr + +# evdev 49 (0x31), QKeyCode "n", number 0x31 +n 0x31 +N 0x31 shift + +# evdev 50 (0x32), QKeyCode "m", number 0x32 +m 0x32 +M 0x32 shift +mu 0x32 altgr +masculine 0x32 shift altgr + +# evdev 51 (0x33), QKeyCode "comma", number 0x33 +comma 0x33 +semicolon 0x33 shift +dead_cedilla 0x33 altgr +dead_ogonek 0x33 shift altgr + +# evdev 52 (0x34), QKeyCode "dot", number 0x34 +period 0x34 +colon 0x34 shift +periodcentered 0x34 altgr +dead_abovedot 0x34 shift altgr + +# evdev 53 (0x35), QKeyCode "slash", number 0x35 +minus 0x35 +underscore 0x35 shift +dead_belowdot 0x35 altgr +dead_abovedot 0x35 shift altgr + +# evdev 54 (0x36), QKeyCode "shift_r", number 0x36 +Shift_R 0x36 + +# evdev 55 (0x37), QKeyCode "kp_multiply", number 0x37 +KP_Multiply 0x37 + +# evdev 56 (0x38), QKeyCode "alt", number 0x38 +Alt_L 0x38 +Meta_L 0x38 shift + +# evdev 57 (0x39), QKeyCode "spc", number 0x39 +space 0x39 + +# evdev 58 (0x3a), QKeyCode "caps_lock", number 0x3a +Caps_Lock 0x3a + +# evdev 59 (0x3b), QKeyCode "f1", number 0x3b +F1 0x3b + +# evdev 60 (0x3c), QKeyCode "f2", number 0x3c +F2 0x3c + +# evdev 61 (0x3d), QKeyCode "f3", number 0x3d +F3 0x3d + +# evdev 62 (0x3e), QKeyCode "f4", number 0x3e +F4 0x3e + +# evdev 63 (0x3f), QKeyCode "f5", number 0x3f +F5 0x3f + +# evdev 64 (0x40), QKeyCode "f6", number 0x40 +F6 0x40 + +# evdev 65 (0x41), QKeyCode "f7", number 0x41 +F7 0x41 + +# evdev 66 (0x42), QKeyCode "f8", number 0x42 +F8 0x42 + +# evdev 67 (0x43), QKeyCode "f9", number 0x43 +F9 0x43 + +# evdev 68 (0x44), QKeyCode "f10", number 0x44 +F10 0x44 + +# evdev 69 (0x45), QKeyCode "num_lock", number 0x45 +Num_Lock 0x45 + +# evdev 70 (0x46), QKeyCode "scroll_lock", number 0x46 +Scroll_Lock 0x46 + +# evdev 71 (0x47), QKeyCode "kp_7", number 0x47 +KP_Home 0x47 +KP_7 0x47 numlock + +# evdev 72 (0x48), QKeyCode "kp_8", number 0x48 +KP_Up 0x48 +KP_8 0x48 numlock + +# evdev 73 (0x49), QKeyCode "kp_9", number 0x49 +KP_Prior 0x49 +KP_9 0x49 numlock + +# evdev 74 (0x4a), QKeyCode "kp_subtract", number 0x4a +KP_Subtract 0x4a + +# evdev 75 (0x4b), QKeyCode "kp_4", number 0x4b +KP_Left 0x4b +KP_4 0x4b numlock + +# evdev 76 (0x4c), QKeyCode "kp_5", number 0x4c +KP_Begin 0x4c +KP_5 0x4c numlock + +# evdev 77 (0x4d), QKeyCode "kp_6", number 0x4d +KP_Right 0x4d +KP_6 0x4d numlock + +# evdev 78 (0x4e), QKeyCode "kp_add", number 0x4e +KP_Add 0x4e + +# evdev 79 (0x4f), QKeyCode "kp_1", number 0x4f +KP_End 0x4f +KP_1 0x4f numlock + +# evdev 80 (0x50), QKeyCode "kp_2", number 0x50 +KP_Down 0x50 +KP_2 0x50 numlock + +# evdev 81 (0x51), QKeyCode "kp_3", number 0x51 +KP_Next 0x51 +KP_3 0x51 numlock + +# evdev 82 (0x52), QKeyCode "kp_0", number 0x52 +KP_Insert 0x52 +KP_0 0x52 numlock + +# evdev 83 (0x53), QKeyCode "kp_decimal", number 0x53 +KP_Delete 0x53 +KP_Separator 0x53 numlock + +# evdev 84 (0x54): no evdev -> QKeyCode mapping (xkb keysym ISO_Level3_Shift) + +# evdev 85 (0x55): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 86 (0x56), QKeyCode "less", number 0x56 +less 0x56 +greater 0x56 shift +backslash 0x56 altgr +notsign 0x56 shift altgr + +# evdev 87 (0x57), QKeyCode "f11", number 0x57 +F11 0x57 + +# evdev 88 (0x58), QKeyCode "f12", number 0x58 +F12 0x58 + +# evdev 89 (0x59), QKeyCode "ro", number 0x73 + +# evdev 90 (0x5a): no evdev -> QKeyCode mapping (xkb keysym Katakana) + +# evdev 91 (0x5b), QKeyCode "hiragana", number 0x77 +Hiragana 0x77 + +# evdev 92 (0x5c), QKeyCode "henkan", number 0x79 +Henkan_Mode 0x79 + +# evdev 93 (0x5d): no evdev -> QKeyCode mapping (xkb keysym Hiragana_Katakana) + +# evdev 94 (0x5e): no evdev -> QKeyCode mapping (xkb keysym Muhenkan) + +# evdev 95 (0x5f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 96 (0x60), QKeyCode "kp_enter", number 0x9c +KP_Enter 0x9c + +# evdev 97 (0x61), QKeyCode "ctrl_r", number 0x9d +Control_R 0x9d + +# evdev 98 (0x62), QKeyCode "kp_divide", number 0xb5 +KP_Divide 0xb5 + +# evdev 99 (0x63), QKeyCode "sysrq", number 0x54 +Print 0x54 + +# evdev 100 (0x64), QKeyCode "alt_r", number 0xb8 +ISO_Level3_Shift 0xb8 + +# evdev 101 (0x65), QKeyCode "lf", number 0x5b +Linefeed 0x5b + +# evdev 102 (0x66), QKeyCode "home", number 0xc7 +Home 0xc7 + +# evdev 103 (0x67), QKeyCode "up", number 0xc8 +Up 0xc8 + +# evdev 104 (0x68), QKeyCode "pgup", number 0xc9 +Prior 0xc9 + +# evdev 105 (0x69), QKeyCode "left", number 0xcb +Left 0xcb + +# evdev 106 (0x6a), QKeyCode "right", number 0xcd +Right 0xcd + +# evdev 107 (0x6b), QKeyCode "end", number 0xcf +End 0xcf + +# evdev 108 (0x6c), QKeyCode "down", number 0xd0 +Down 0xd0 + +# evdev 109 (0x6d), QKeyCode "pgdn", number 0xd1 +Next 0xd1 + +# evdev 110 (0x6e), QKeyCode "insert", number 0xd2 +Insert 0xd2 + +# evdev 111 (0x6f), QKeyCode "delete", number 0xd3 +Delete 0xd3 + +# evdev 112 (0x70): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 113 (0x71), QKeyCode "audiomute", number 0xa0 +XF86AudioMute 0xa0 + +# evdev 114 (0x72), QKeyCode "volumedown", number 0xae +XF86AudioLowerVolume 0xae + +# evdev 115 (0x73), QKeyCode "volumeup", number 0xb0 +XF86AudioRaiseVolume 0xb0 + +# evdev 116 (0x74), QKeyCode "power", number 0xde +XF86PowerOff 0xde + +# evdev 117 (0x75), QKeyCode "kp_equals", number 0x59 +KP_Equal 0x59 + +# evdev 118 (0x76): no evdev -> QKeyCode mapping (xkb keysym plusminus) + +# evdev 119 (0x77), QKeyCode "pause", number 0xc6 +Pause 0xc6 + +# evdev 120 (0x78): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchA) + +# evdev 121 (0x79), QKeyCode "kp_comma", number 0x7e +KP_Decimal 0x7e + +# evdev 122 (0x7a): no evdev -> QKeyCode mapping (xkb keysym Hangul) + +# evdev 123 (0x7b): no evdev -> QKeyCode mapping (xkb keysym Hangul_Hanja) + +# evdev 124 (0x7c), QKeyCode "yen", number 0x7d + +# evdev 125 (0x7d), QKeyCode "meta_l", number 0xdb +Super_L 0xdb + +# evdev 126 (0x7e), QKeyCode "meta_r", number 0xdc +Super_R 0xdc + +# evdev 127 (0x7f), QKeyCode "compose", number 0xdd +Menu 0xdd + +# evdev 128 (0x80), QKeyCode "stop", number 0xe8 +Cancel 0xe8 + +# evdev 129 (0x81), QKeyCode "again", number 0x85 +Redo 0x85 + +# evdev 130 (0x82), QKeyCode "props", number 0x86 +SunProps 0x86 + +# evdev 131 (0x83), QKeyCode "undo", number 0x87 +Undo 0x87 + +# evdev 132 (0x84), QKeyCode "front", number 0x8c +SunFront 0x8c + +# evdev 133 (0x85), QKeyCode "copy", number 0xf8 +XF86Copy 0xf8 + +# evdev 134 (0x86), QKeyCode "open", number 0x64 +XF86Open 0x64 + +# evdev 135 (0x87), QKeyCode "paste", number 0x65 +XF86Paste 0x65 + +# evdev 136 (0x88), QKeyCode "find", number 0xc1 +Find 0xc1 + +# evdev 137 (0x89), QKeyCode "cut", number 0xbc +XF86Cut 0xbc + +# evdev 138 (0x8a), QKeyCode "help", number 0xf5 +Help 0xf5 + +# evdev 139 (0x8b), QKeyCode "menu", number 0x9e +XF86MenuKB 0x9e + +# evdev 140 (0x8c), QKeyCode "calculator", number 0xa1 +XF86Calculator 0xa1 + +# evdev 141 (0x8d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 142 (0x8e), QKeyCode "sleep", number 0xdf +XF86Sleep 0xdf + +# evdev 143 (0x8f), QKeyCode "wake", number 0xe3 +XF86WakeUp 0xe3 + +# evdev 144 (0x90): no evdev -> QKeyCode mapping (xkb keysym XF86Explorer) + +# evdev 145 (0x91): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 146 (0x92): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 147 (0x93): no evdev -> QKeyCode mapping (xkb keysym XF86Xfer) + +# evdev 148 (0x94): no evdev -> QKeyCode mapping (xkb keysym XF86Launch1) + +# evdev 149 (0x95): no evdev -> QKeyCode mapping (xkb keysym XF86Launch2) + +# evdev 150 (0x96): no evdev -> QKeyCode mapping (xkb keysym XF86WWW) + +# evdev 151 (0x97): no evdev -> QKeyCode mapping (xkb keysym XF86DOS) + +# evdev 152 (0x98): no evdev -> QKeyCode mapping (xkb keysym XF86ScreenSaver) + +# evdev 153 (0x99): no evdev -> QKeyCode mapping (xkb keysym XF86RotateWindows) + +# evdev 154 (0x9a): no evdev -> QKeyCode mapping (xkb keysym XF86TaskPane) + +# evdev 155 (0x9b), QKeyCode "mail", number 0xec +XF86Mail 0xec + +# evdev 156 (0x9c), QKeyCode "ac_bookmarks", number 0xe6 +XF86Favorites 0xe6 + +# evdev 157 (0x9d), QKeyCode "computer", number 0xeb +XF86MyComputer 0xeb + +# evdev 158 (0x9e), QKeyCode "ac_back", number 0xea +XF86Back 0xea + +# evdev 159 (0x9f), QKeyCode "ac_forward", number 0xe9 +XF86Forward 0xe9 + +# evdev 160 (0xa0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 161 (0xa1): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 162 (0xa2): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 163 (0xa3), QKeyCode "audionext", number 0x99 +XF86AudioNext 0x99 + +# evdev 164 (0xa4), QKeyCode "audioplay", number 0xa2 +XF86AudioPlay 0xa2 +XF86AudioPause 0xa2 shift + +# evdev 165 (0xa5), QKeyCode "audioprev", number 0x90 +XF86AudioPrev 0x90 + +# evdev 166 (0xa6), QKeyCode "audiostop", number 0xa4 +XF86AudioStop 0xa4 +XF86Eject 0xa4 shift + +# evdev 167 (0xa7): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRecord) + +# evdev 168 (0xa8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRewind) + +# evdev 169 (0xa9): no evdev -> QKeyCode mapping (xkb keysym XF86Phone) + +# evdev 170 (0xaa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 171 (0xab): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 172 (0xac), QKeyCode "ac_home", number 0xb2 +XF86HomePage 0xb2 + +# evdev 173 (0xad), QKeyCode "ac_refresh", number 0xe7 +XF86Reload 0xe7 + +# evdev 174 (0xae): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 175 (0xaf): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 176 (0xb0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 177 (0xb1): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollUp) + +# evdev 178 (0xb2): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollDown) + +# evdev 179 (0xb3): no evdev -> QKeyCode mapping (xkb keysym parenleft) + +# evdev 180 (0xb4): no evdev -> QKeyCode mapping (xkb keysym parenright) + +# evdev 181 (0xb5): no evdev -> QKeyCode mapping (xkb keysym XF86New) + +# evdev 182 (0xb6): no evdev -> QKeyCode mapping (xkb keysym Redo) + +# evdev 183 (0xb7): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 184 (0xb8): no evdev -> QKeyCode mapping (xkb keysym XF86Launch5) + +# evdev 185 (0xb9): no evdev -> QKeyCode mapping (xkb keysym XF86Launch6) + +# evdev 186 (0xba): no evdev -> QKeyCode mapping (xkb keysym XF86Launch7) + +# evdev 187 (0xbb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch8) + +# evdev 188 (0xbc): no evdev -> QKeyCode mapping (xkb keysym XF86Launch9) + +# evdev 189 (0xbd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 190 (0xbe): no evdev -> QKeyCode mapping (xkb keysym XF86AudioMicMute) + +# evdev 191 (0xbf): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadToggle) + +# evdev 192 (0xc0): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOn) + +# evdev 193 (0xc1): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOff) + +# evdev 194 (0xc2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 195 (0xc3): no evdev -> QKeyCode mapping (xkb keysym Mode_switch) + +# evdev 196 (0xc4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 197 (0xc5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 198 (0xc6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 199 (0xc7): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 200 (0xc8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 201 (0xc9): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPause) + +# evdev 202 (0xca): no evdev -> QKeyCode mapping (xkb keysym XF86Launch3) + +# evdev 203 (0xcb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch4) + +# evdev 204 (0xcc): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchB) + +# evdev 205 (0xcd): no evdev -> QKeyCode mapping (xkb keysym XF86Suspend) + +# evdev 206 (0xce): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 207 (0xcf): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 208 (0xd0): no evdev -> QKeyCode mapping (xkb keysym XF86AudioForward) + +# evdev 209 (0xd1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 210 (0xd2): no evdev -> QKeyCode mapping (xkb keysym Print) + +# evdev 211 (0xd3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 212 (0xd4): no evdev -> QKeyCode mapping (xkb keysym XF86WebCam) + +# evdev 213 (0xd5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 214 (0xd6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 215 (0xd7): no evdev -> QKeyCode mapping (xkb keysym XF86Mail) + +# evdev 216 (0xd8): no evdev -> QKeyCode mapping (xkb keysym XF86Messenger) + +# evdev 217 (0xd9): no evdev -> QKeyCode mapping (xkb keysym XF86Search) + +# evdev 218 (0xda): no evdev -> QKeyCode mapping (xkb keysym XF86Go) + +# evdev 219 (0xdb): no evdev -> QKeyCode mapping (xkb keysym XF86Finance) + +# evdev 220 (0xdc): no evdev -> QKeyCode mapping (xkb keysym XF86Game) + +# evdev 221 (0xdd): no evdev -> QKeyCode mapping (xkb keysym XF86Shop) + +# evdev 222 (0xde): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 223 (0xdf): no evdev -> QKeyCode mapping (xkb keysym Cancel) + +# evdev 224 (0xe0): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessDown) + +# evdev 225 (0xe1): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessUp) + +# evdev 226 (0xe2), QKeyCode "mediaselect", number 0xed +XF86AudioMedia 0xed + +# evdev 227 (0xe3): no evdev -> QKeyCode mapping (xkb keysym XF86Display) + +# evdev 228 (0xe4): no evdev -> QKeyCode mapping (xkb keysym XF86KbdLightOnOff) + +# evdev 229 (0xe5): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessDown) + +# evdev 230 (0xe6): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessUp) + +# evdev 231 (0xe7): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 232 (0xe8): no evdev -> QKeyCode mapping (xkb keysym XF86Reply) + +# evdev 233 (0xe9): no evdev -> QKeyCode mapping (xkb keysym XF86MailForward) + +# evdev 234 (0xea): no evdev -> QKeyCode mapping (xkb keysym XF86Save) + +# evdev 235 (0xeb): no evdev -> QKeyCode mapping (xkb keysym XF86Documents) + +# evdev 236 (0xec): no evdev -> QKeyCode mapping (xkb keysym XF86Battery) + +# evdev 237 (0xed): no evdev -> QKeyCode mapping (xkb keysym XF86Bluetooth) + +# evdev 238 (0xee): no evdev -> QKeyCode mapping (xkb keysym XF86WLAN) + +# evdev 239 (0xef): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 240 (0xf0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 241 (0xf1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 242 (0xf2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 243 (0xf3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 244 (0xf4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# +# quirks section start +# +# Sometimes multiple keysyms map to the same keycodes. +# The keycode -> keysym lookup finds only one of the +# keysyms. So append them here. +# + +Print 0x54 +Sys_Req 0x54 +Execute 0x54 +KP_Decimal 0x53 numlock +KP_Separator 0x53 numlock +Alt_R 0xb8 +ISO_Level3_Shift 0xb8 +Mode_switch 0xb8 + +# quirks section end diff --git a/app/src/main/assets/roms/keymaps/de b/app/src/main/assets/roms/keymaps/de new file mode 100644 index 0000000..d0b4715 --- /dev/null +++ b/app/src/main/assets/roms/keymaps/de @@ -0,0 +1,839 @@ +# +# generated by qemu-keymap +# model : pc105 +# layout : de +# variant : - +# options : - + +# name: "German" + +# modifiers +# 0: Shift +# 1: Lock +# 2: Control +# 3: Mod1 +# 4: Mod2 +# 5: Mod3 +# 6: Mod4 +# 7: Mod5 +# 8: NumLock +# 9: Alt +# 10: LevelThree +# 11: LAlt +# 12: RAlt +# 13: RControl +# 14: LControl +# 15: ScrollLock +# 16: LevelFive +# 17: AltGr +# 18: Meta +# 19: Super +# 20: Hyper + +# evdev 1 (0x1), QKeyCode "esc", number 0x1 +Escape 0x01 + +# evdev 2 (0x2), QKeyCode "1", number 0x2 +1 0x02 +exclam 0x02 shift +onesuperior 0x02 altgr +exclamdown 0x02 shift altgr + +# evdev 3 (0x3), QKeyCode "2", number 0x3 +2 0x03 +quotedbl 0x03 shift +twosuperior 0x03 altgr +oneeighth 0x03 shift altgr + +# evdev 4 (0x4), QKeyCode "3", number 0x4 +3 0x04 +section 0x04 shift +threesuperior 0x04 altgr +sterling 0x04 shift altgr + +# evdev 5 (0x5), QKeyCode "4", number 0x5 +4 0x05 +dollar 0x05 shift +onequarter 0x05 altgr +currency 0x05 shift altgr + +# evdev 6 (0x6), QKeyCode "5", number 0x6 +5 0x06 +percent 0x06 shift +onehalf 0x06 altgr +threeeighths 0x06 shift altgr + +# evdev 7 (0x7), QKeyCode "6", number 0x7 +6 0x07 +ampersand 0x07 shift +notsign 0x07 altgr +fiveeighths 0x07 shift altgr + +# evdev 8 (0x8), QKeyCode "7", number 0x8 +7 0x08 +slash 0x08 shift +braceleft 0x08 altgr +seveneighths 0x08 shift altgr + +# evdev 9 (0x9), QKeyCode "8", number 0x9 +8 0x09 +parenleft 0x09 shift +bracketleft 0x09 altgr +trademark 0x09 shift altgr + +# evdev 10 (0xa), QKeyCode "9", number 0xa +9 0x0a +parenright 0x0a shift +bracketright 0x0a altgr +plusminus 0x0a shift altgr + +# evdev 11 (0xb), QKeyCode "0", number 0xb +0 0x0b +equal 0x0b shift +braceright 0x0b altgr +degree 0x0b shift altgr + +# evdev 12 (0xc), QKeyCode "minus", number 0xc +ssharp 0x0c +question 0x0c shift +backslash 0x0c altgr +questiondown 0x0c shift altgr + +# evdev 13 (0xd), QKeyCode "equal", number 0xd +dead_acute 0x0d +dead_grave 0x0d shift +dead_cedilla 0x0d altgr +dead_ogonek 0x0d shift altgr + +# evdev 14 (0xe), QKeyCode "backspace", number 0xe +BackSpace 0x0e + +# evdev 15 (0xf), QKeyCode "tab", number 0xf +Tab 0x0f +ISO_Left_Tab 0x0f shift + +# evdev 16 (0x10), QKeyCode "q", number 0x10 +q 0x10 +Q 0x10 shift +at 0x10 altgr +Greek_OMEGA 0x10 shift altgr + +# evdev 17 (0x11), QKeyCode "w", number 0x11 +w 0x11 +W 0x11 shift +lstroke 0x11 altgr +Lstroke 0x11 shift altgr + +# evdev 18 (0x12), QKeyCode "e", number 0x12 +e 0x12 +E 0x12 shift +EuroSign 0x12 altgr + +# evdev 19 (0x13), QKeyCode "r", number 0x13 +r 0x13 +R 0x13 shift +paragraph 0x13 altgr +registered 0x13 shift altgr + +# evdev 20 (0x14), QKeyCode "t", number 0x14 +t 0x14 +T 0x14 shift +tslash 0x14 altgr +Tslash 0x14 shift altgr + +# evdev 21 (0x15), QKeyCode "y", number 0x15 +z 0x15 +Z 0x15 shift +leftarrow 0x15 altgr +yen 0x15 shift altgr + +# evdev 22 (0x16), QKeyCode "u", number 0x16 +u 0x16 +U 0x16 shift +downarrow 0x16 altgr +uparrow 0x16 shift altgr + +# evdev 23 (0x17), QKeyCode "i", number 0x17 +i 0x17 +I 0x17 shift +rightarrow 0x17 altgr +idotless 0x17 shift altgr + +# evdev 24 (0x18), QKeyCode "o", number 0x18 +o 0x18 +O 0x18 shift +oslash 0x18 altgr +Oslash 0x18 shift altgr + +# evdev 25 (0x19), QKeyCode "p", number 0x19 +p 0x19 +P 0x19 shift +thorn 0x19 altgr +THORN 0x19 shift altgr + +# evdev 26 (0x1a), QKeyCode "bracket_left", number 0x1a +udiaeresis 0x1a +Udiaeresis 0x1a shift +dead_diaeresis 0x1a altgr +dead_abovering 0x1a shift altgr + +# evdev 27 (0x1b), QKeyCode "bracket_right", number 0x1b +plus 0x1b +asterisk 0x1b shift +asciitilde 0x1b altgr +macron 0x1b shift altgr + +# evdev 28 (0x1c), QKeyCode "ret", number 0x1c +Return 0x1c + +# evdev 29 (0x1d), QKeyCode "ctrl", number 0x1d +Control_L 0x1d + +# evdev 30 (0x1e), QKeyCode "a", number 0x1e +a 0x1e +A 0x1e shift +ae 0x1e altgr +AE 0x1e shift altgr + +# evdev 31 (0x1f), QKeyCode "s", number 0x1f +s 0x1f +S 0x1f shift +U017F 0x1f altgr +U1E9E 0x1f shift altgr + +# evdev 32 (0x20), QKeyCode "d", number 0x20 +d 0x20 +D 0x20 shift +eth 0x20 altgr +ETH 0x20 shift altgr + +# evdev 33 (0x21), QKeyCode "f", number 0x21 +f 0x21 +F 0x21 shift +dstroke 0x21 altgr +ordfeminine 0x21 shift altgr + +# evdev 34 (0x22), QKeyCode "g", number 0x22 +g 0x22 +G 0x22 shift +eng 0x22 altgr +ENG 0x22 shift altgr + +# evdev 35 (0x23), QKeyCode "h", number 0x23 +h 0x23 +H 0x23 shift +hstroke 0x23 altgr +Hstroke 0x23 shift altgr + +# evdev 36 (0x24), QKeyCode "j", number 0x24 +j 0x24 +J 0x24 shift +dead_belowdot 0x24 altgr +dead_abovedot 0x24 shift altgr + +# evdev 37 (0x25), QKeyCode "k", number 0x25 +k 0x25 +K 0x25 shift +kra 0x25 altgr +ampersand 0x25 shift altgr + +# evdev 38 (0x26), QKeyCode "l", number 0x26 +l 0x26 +L 0x26 shift +lstroke 0x26 altgr +Lstroke 0x26 shift altgr + +# evdev 39 (0x27), QKeyCode "semicolon", number 0x27 +odiaeresis 0x27 +Odiaeresis 0x27 shift +dead_doubleacute 0x27 altgr +dead_belowdot 0x27 shift altgr + +# evdev 40 (0x28), QKeyCode "apostrophe", number 0x28 +adiaeresis 0x28 +Adiaeresis 0x28 shift +dead_circumflex 0x28 altgr +dead_caron 0x28 shift altgr + +# evdev 41 (0x29), QKeyCode "grave_accent", number 0x29 +dead_circumflex 0x29 +degree 0x29 shift +U2032 0x29 altgr +U2033 0x29 shift altgr + +# evdev 42 (0x2a), QKeyCode "shift", number 0x2a +Shift_L 0x2a + +# evdev 43 (0x2b), QKeyCode "backslash", number 0x2b +numbersign 0x2b +apostrophe 0x2b shift +rightsinglequotemark 0x2b altgr +dead_breve 0x2b shift altgr + +# evdev 44 (0x2c), QKeyCode "z", number 0x2c +y 0x2c +Y 0x2c shift +guillemotright 0x2c altgr +U203A 0x2c shift altgr + +# evdev 45 (0x2d), QKeyCode "x", number 0x2d +x 0x2d +X 0x2d shift +guillemotleft 0x2d altgr +U2039 0x2d shift altgr + +# evdev 46 (0x2e), QKeyCode "c", number 0x2e +c 0x2e +C 0x2e shift +cent 0x2e altgr +copyright 0x2e shift altgr + +# evdev 47 (0x2f), QKeyCode "v", number 0x2f +v 0x2f +V 0x2f shift +doublelowquotemark 0x2f altgr +singlelowquotemark 0x2f shift altgr + +# evdev 48 (0x30), QKeyCode "b", number 0x30 +b 0x30 +B 0x30 shift +leftdoublequotemark 0x30 altgr +leftsinglequotemark 0x30 shift altgr + +# evdev 49 (0x31), QKeyCode "n", number 0x31 +n 0x31 +N 0x31 shift +rightdoublequotemark 0x31 altgr +rightsinglequotemark 0x31 shift altgr + +# evdev 50 (0x32), QKeyCode "m", number 0x32 +m 0x32 +M 0x32 shift +mu 0x32 altgr +masculine 0x32 shift altgr + +# evdev 51 (0x33), QKeyCode "comma", number 0x33 +comma 0x33 +semicolon 0x33 shift +periodcentered 0x33 altgr +multiply 0x33 shift altgr + +# evdev 52 (0x34), QKeyCode "dot", number 0x34 +period 0x34 +colon 0x34 shift +U2026 0x34 altgr +division 0x34 shift altgr + +# evdev 53 (0x35), QKeyCode "slash", number 0x35 +minus 0x35 +underscore 0x35 shift +endash 0x35 altgr +emdash 0x35 shift altgr + +# evdev 54 (0x36), QKeyCode "shift_r", number 0x36 +Shift_R 0x36 + +# evdev 55 (0x37), QKeyCode "kp_multiply", number 0x37 +KP_Multiply 0x37 + +# evdev 56 (0x38), QKeyCode "alt", number 0x38 +Alt_L 0x38 +Meta_L 0x38 shift + +# evdev 57 (0x39), QKeyCode "spc", number 0x39 +space 0x39 + +# evdev 58 (0x3a), QKeyCode "caps_lock", number 0x3a +Caps_Lock 0x3a + +# evdev 59 (0x3b), QKeyCode "f1", number 0x3b +F1 0x3b + +# evdev 60 (0x3c), QKeyCode "f2", number 0x3c +F2 0x3c + +# evdev 61 (0x3d), QKeyCode "f3", number 0x3d +F3 0x3d + +# evdev 62 (0x3e), QKeyCode "f4", number 0x3e +F4 0x3e + +# evdev 63 (0x3f), QKeyCode "f5", number 0x3f +F5 0x3f + +# evdev 64 (0x40), QKeyCode "f6", number 0x40 +F6 0x40 + +# evdev 65 (0x41), QKeyCode "f7", number 0x41 +F7 0x41 + +# evdev 66 (0x42), QKeyCode "f8", number 0x42 +F8 0x42 + +# evdev 67 (0x43), QKeyCode "f9", number 0x43 +F9 0x43 + +# evdev 68 (0x44), QKeyCode "f10", number 0x44 +F10 0x44 + +# evdev 69 (0x45), QKeyCode "num_lock", number 0x45 +Num_Lock 0x45 + +# evdev 70 (0x46), QKeyCode "scroll_lock", number 0x46 +Scroll_Lock 0x46 + +# evdev 71 (0x47), QKeyCode "kp_7", number 0x47 +KP_Home 0x47 +KP_7 0x47 numlock + +# evdev 72 (0x48), QKeyCode "kp_8", number 0x48 +KP_Up 0x48 +KP_8 0x48 numlock + +# evdev 73 (0x49), QKeyCode "kp_9", number 0x49 +KP_Prior 0x49 +KP_9 0x49 numlock + +# evdev 74 (0x4a), QKeyCode "kp_subtract", number 0x4a +KP_Subtract 0x4a + +# evdev 75 (0x4b), QKeyCode "kp_4", number 0x4b +KP_Left 0x4b +KP_4 0x4b numlock + +# evdev 76 (0x4c), QKeyCode "kp_5", number 0x4c +KP_Begin 0x4c +KP_5 0x4c numlock + +# evdev 77 (0x4d), QKeyCode "kp_6", number 0x4d +KP_Right 0x4d +KP_6 0x4d numlock + +# evdev 78 (0x4e), QKeyCode "kp_add", number 0x4e +KP_Add 0x4e + +# evdev 79 (0x4f), QKeyCode "kp_1", number 0x4f +KP_End 0x4f +KP_1 0x4f numlock + +# evdev 80 (0x50), QKeyCode "kp_2", number 0x50 +KP_Down 0x50 +KP_2 0x50 numlock + +# evdev 81 (0x51), QKeyCode "kp_3", number 0x51 +KP_Next 0x51 +KP_3 0x51 numlock + +# evdev 82 (0x52), QKeyCode "kp_0", number 0x52 +KP_Insert 0x52 +KP_0 0x52 numlock + +# evdev 83 (0x53), QKeyCode "kp_decimal", number 0x53 +KP_Delete 0x53 +KP_Separator 0x53 numlock + +# evdev 84 (0x54): no evdev -> QKeyCode mapping (xkb keysym ISO_Level3_Shift) + +# evdev 85 (0x55): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 86 (0x56), QKeyCode "less", number 0x56 +less 0x56 +greater 0x56 shift +bar 0x56 altgr +brokenbar 0x56 shift altgr + +# evdev 87 (0x57), QKeyCode "f11", number 0x57 +F11 0x57 + +# evdev 88 (0x58), QKeyCode "f12", number 0x58 +F12 0x58 + +# evdev 89 (0x59), QKeyCode "ro", number 0x73 + +# evdev 90 (0x5a): no evdev -> QKeyCode mapping (xkb keysym Katakana) + +# evdev 91 (0x5b), QKeyCode "hiragana", number 0x77 +Hiragana 0x77 + +# evdev 92 (0x5c), QKeyCode "henkan", number 0x79 +Henkan_Mode 0x79 + +# evdev 93 (0x5d): no evdev -> QKeyCode mapping (xkb keysym Hiragana_Katakana) + +# evdev 94 (0x5e): no evdev -> QKeyCode mapping (xkb keysym Muhenkan) + +# evdev 95 (0x5f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 96 (0x60), QKeyCode "kp_enter", number 0x9c +KP_Enter 0x9c + +# evdev 97 (0x61), QKeyCode "ctrl_r", number 0x9d +Control_R 0x9d + +# evdev 98 (0x62), QKeyCode "kp_divide", number 0xb5 +KP_Divide 0xb5 + +# evdev 99 (0x63), QKeyCode "sysrq", number 0x54 +Print 0x54 + +# evdev 100 (0x64), QKeyCode "alt_r", number 0xb8 +ISO_Level3_Shift 0xb8 + +# evdev 101 (0x65), QKeyCode "lf", number 0x5b +Linefeed 0x5b + +# evdev 102 (0x66), QKeyCode "home", number 0xc7 +Home 0xc7 + +# evdev 103 (0x67), QKeyCode "up", number 0xc8 +Up 0xc8 + +# evdev 104 (0x68), QKeyCode "pgup", number 0xc9 +Prior 0xc9 + +# evdev 105 (0x69), QKeyCode "left", number 0xcb +Left 0xcb + +# evdev 106 (0x6a), QKeyCode "right", number 0xcd +Right 0xcd + +# evdev 107 (0x6b), QKeyCode "end", number 0xcf +End 0xcf + +# evdev 108 (0x6c), QKeyCode "down", number 0xd0 +Down 0xd0 + +# evdev 109 (0x6d), QKeyCode "pgdn", number 0xd1 +Next 0xd1 + +# evdev 110 (0x6e), QKeyCode "insert", number 0xd2 +Insert 0xd2 + +# evdev 111 (0x6f), QKeyCode "delete", number 0xd3 +Delete 0xd3 + +# evdev 112 (0x70): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 113 (0x71), QKeyCode "audiomute", number 0xa0 +XF86AudioMute 0xa0 + +# evdev 114 (0x72), QKeyCode "volumedown", number 0xae +XF86AudioLowerVolume 0xae + +# evdev 115 (0x73), QKeyCode "volumeup", number 0xb0 +XF86AudioRaiseVolume 0xb0 + +# evdev 116 (0x74), QKeyCode "power", number 0xde +XF86PowerOff 0xde + +# evdev 117 (0x75), QKeyCode "kp_equals", number 0x59 +KP_Equal 0x59 + +# evdev 118 (0x76): no evdev -> QKeyCode mapping (xkb keysym plusminus) + +# evdev 119 (0x77), QKeyCode "pause", number 0xc6 +Pause 0xc6 + +# evdev 120 (0x78): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchA) + +# evdev 121 (0x79), QKeyCode "kp_comma", number 0x7e +KP_Decimal 0x7e + +# evdev 122 (0x7a): no evdev -> QKeyCode mapping (xkb keysym Hangul) + +# evdev 123 (0x7b): no evdev -> QKeyCode mapping (xkb keysym Hangul_Hanja) + +# evdev 124 (0x7c), QKeyCode "yen", number 0x7d + +# evdev 125 (0x7d), QKeyCode "meta_l", number 0xdb +Super_L 0xdb + +# evdev 126 (0x7e), QKeyCode "meta_r", number 0xdc +Super_R 0xdc + +# evdev 127 (0x7f), QKeyCode "compose", number 0xdd +Menu 0xdd + +# evdev 128 (0x80), QKeyCode "stop", number 0xe8 +Cancel 0xe8 + +# evdev 129 (0x81), QKeyCode "again", number 0x85 +Redo 0x85 + +# evdev 130 (0x82), QKeyCode "props", number 0x86 +SunProps 0x86 + +# evdev 131 (0x83), QKeyCode "undo", number 0x87 +Undo 0x87 + +# evdev 132 (0x84), QKeyCode "front", number 0x8c +SunFront 0x8c + +# evdev 133 (0x85), QKeyCode "copy", number 0xf8 +XF86Copy 0xf8 + +# evdev 134 (0x86), QKeyCode "open", number 0x64 +XF86Open 0x64 + +# evdev 135 (0x87), QKeyCode "paste", number 0x65 +XF86Paste 0x65 + +# evdev 136 (0x88), QKeyCode "find", number 0xc1 +Find 0xc1 + +# evdev 137 (0x89), QKeyCode "cut", number 0xbc +XF86Cut 0xbc + +# evdev 138 (0x8a), QKeyCode "help", number 0xf5 +Help 0xf5 + +# evdev 139 (0x8b), QKeyCode "menu", number 0x9e +XF86MenuKB 0x9e + +# evdev 140 (0x8c), QKeyCode "calculator", number 0xa1 +XF86Calculator 0xa1 + +# evdev 141 (0x8d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 142 (0x8e), QKeyCode "sleep", number 0xdf +XF86Sleep 0xdf + +# evdev 143 (0x8f), QKeyCode "wake", number 0xe3 +XF86WakeUp 0xe3 + +# evdev 144 (0x90): no evdev -> QKeyCode mapping (xkb keysym XF86Explorer) + +# evdev 145 (0x91): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 146 (0x92): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 147 (0x93): no evdev -> QKeyCode mapping (xkb keysym XF86Xfer) + +# evdev 148 (0x94): no evdev -> QKeyCode mapping (xkb keysym XF86Launch1) + +# evdev 149 (0x95): no evdev -> QKeyCode mapping (xkb keysym XF86Launch2) + +# evdev 150 (0x96): no evdev -> QKeyCode mapping (xkb keysym XF86WWW) + +# evdev 151 (0x97): no evdev -> QKeyCode mapping (xkb keysym XF86DOS) + +# evdev 152 (0x98): no evdev -> QKeyCode mapping (xkb keysym XF86ScreenSaver) + +# evdev 153 (0x99): no evdev -> QKeyCode mapping (xkb keysym XF86RotateWindows) + +# evdev 154 (0x9a): no evdev -> QKeyCode mapping (xkb keysym XF86TaskPane) + +# evdev 155 (0x9b), QKeyCode "mail", number 0xec +XF86Mail 0xec + +# evdev 156 (0x9c), QKeyCode "ac_bookmarks", number 0xe6 +XF86Favorites 0xe6 + +# evdev 157 (0x9d), QKeyCode "computer", number 0xeb +XF86MyComputer 0xeb + +# evdev 158 (0x9e), QKeyCode "ac_back", number 0xea +XF86Back 0xea + +# evdev 159 (0x9f), QKeyCode "ac_forward", number 0xe9 +XF86Forward 0xe9 + +# evdev 160 (0xa0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 161 (0xa1): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 162 (0xa2): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 163 (0xa3), QKeyCode "audionext", number 0x99 +XF86AudioNext 0x99 + +# evdev 164 (0xa4), QKeyCode "audioplay", number 0xa2 +XF86AudioPlay 0xa2 +XF86AudioPause 0xa2 shift + +# evdev 165 (0xa5), QKeyCode "audioprev", number 0x90 +XF86AudioPrev 0x90 + +# evdev 166 (0xa6), QKeyCode "audiostop", number 0xa4 +XF86AudioStop 0xa4 +XF86Eject 0xa4 shift + +# evdev 167 (0xa7): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRecord) + +# evdev 168 (0xa8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRewind) + +# evdev 169 (0xa9): no evdev -> QKeyCode mapping (xkb keysym XF86Phone) + +# evdev 170 (0xaa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 171 (0xab): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 172 (0xac), QKeyCode "ac_home", number 0xb2 +XF86HomePage 0xb2 + +# evdev 173 (0xad), QKeyCode "ac_refresh", number 0xe7 +XF86Reload 0xe7 + +# evdev 174 (0xae): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 175 (0xaf): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 176 (0xb0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 177 (0xb1): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollUp) + +# evdev 178 (0xb2): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollDown) + +# evdev 179 (0xb3): no evdev -> QKeyCode mapping (xkb keysym parenleft) + +# evdev 180 (0xb4): no evdev -> QKeyCode mapping (xkb keysym parenright) + +# evdev 181 (0xb5): no evdev -> QKeyCode mapping (xkb keysym XF86New) + +# evdev 182 (0xb6): no evdev -> QKeyCode mapping (xkb keysym Redo) + +# evdev 183 (0xb7): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 184 (0xb8): no evdev -> QKeyCode mapping (xkb keysym XF86Launch5) + +# evdev 185 (0xb9): no evdev -> QKeyCode mapping (xkb keysym XF86Launch6) + +# evdev 186 (0xba): no evdev -> QKeyCode mapping (xkb keysym XF86Launch7) + +# evdev 187 (0xbb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch8) + +# evdev 188 (0xbc): no evdev -> QKeyCode mapping (xkb keysym XF86Launch9) + +# evdev 189 (0xbd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 190 (0xbe): no evdev -> QKeyCode mapping (xkb keysym XF86AudioMicMute) + +# evdev 191 (0xbf): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadToggle) + +# evdev 192 (0xc0): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOn) + +# evdev 193 (0xc1): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOff) + +# evdev 194 (0xc2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 195 (0xc3): no evdev -> QKeyCode mapping (xkb keysym Mode_switch) + +# evdev 196 (0xc4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 197 (0xc5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 198 (0xc6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 199 (0xc7): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 200 (0xc8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 201 (0xc9): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPause) + +# evdev 202 (0xca): no evdev -> QKeyCode mapping (xkb keysym XF86Launch3) + +# evdev 203 (0xcb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch4) + +# evdev 204 (0xcc): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchB) + +# evdev 205 (0xcd): no evdev -> QKeyCode mapping (xkb keysym XF86Suspend) + +# evdev 206 (0xce): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 207 (0xcf): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 208 (0xd0): no evdev -> QKeyCode mapping (xkb keysym XF86AudioForward) + +# evdev 209 (0xd1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 210 (0xd2): no evdev -> QKeyCode mapping (xkb keysym Print) + +# evdev 211 (0xd3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 212 (0xd4): no evdev -> QKeyCode mapping (xkb keysym XF86WebCam) + +# evdev 213 (0xd5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 214 (0xd6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 215 (0xd7): no evdev -> QKeyCode mapping (xkb keysym XF86Mail) + +# evdev 216 (0xd8): no evdev -> QKeyCode mapping (xkb keysym XF86Messenger) + +# evdev 217 (0xd9): no evdev -> QKeyCode mapping (xkb keysym XF86Search) + +# evdev 218 (0xda): no evdev -> QKeyCode mapping (xkb keysym XF86Go) + +# evdev 219 (0xdb): no evdev -> QKeyCode mapping (xkb keysym XF86Finance) + +# evdev 220 (0xdc): no evdev -> QKeyCode mapping (xkb keysym XF86Game) + +# evdev 221 (0xdd): no evdev -> QKeyCode mapping (xkb keysym XF86Shop) + +# evdev 222 (0xde): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 223 (0xdf): no evdev -> QKeyCode mapping (xkb keysym Cancel) + +# evdev 224 (0xe0): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessDown) + +# evdev 225 (0xe1): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessUp) + +# evdev 226 (0xe2), QKeyCode "mediaselect", number 0xed +XF86AudioMedia 0xed + +# evdev 227 (0xe3): no evdev -> QKeyCode mapping (xkb keysym XF86Display) + +# evdev 228 (0xe4): no evdev -> QKeyCode mapping (xkb keysym XF86KbdLightOnOff) + +# evdev 229 (0xe5): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessDown) + +# evdev 230 (0xe6): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessUp) + +# evdev 231 (0xe7): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 232 (0xe8): no evdev -> QKeyCode mapping (xkb keysym XF86Reply) + +# evdev 233 (0xe9): no evdev -> QKeyCode mapping (xkb keysym XF86MailForward) + +# evdev 234 (0xea): no evdev -> QKeyCode mapping (xkb keysym XF86Save) + +# evdev 235 (0xeb): no evdev -> QKeyCode mapping (xkb keysym XF86Documents) + +# evdev 236 (0xec): no evdev -> QKeyCode mapping (xkb keysym XF86Battery) + +# evdev 237 (0xed): no evdev -> QKeyCode mapping (xkb keysym XF86Bluetooth) + +# evdev 238 (0xee): no evdev -> QKeyCode mapping (xkb keysym XF86WLAN) + +# evdev 239 (0xef): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 240 (0xf0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 241 (0xf1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 242 (0xf2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 243 (0xf3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 244 (0xf4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# +# quirks section start +# +# Sometimes multiple keysyms map to the same keycodes. +# The keycode -> keysym lookup finds only one of the +# keysyms. So append them here. +# + +Print 0x54 +Sys_Req 0x54 +Execute 0x54 +KP_Decimal 0x53 numlock +KP_Separator 0x53 numlock +Alt_R 0xb8 +ISO_Level3_Shift 0xb8 +Mode_switch 0xb8 + +# quirks section end diff --git a/app/src/main/assets/roms/keymaps/de-ch b/app/src/main/assets/roms/keymaps/de-ch new file mode 100644 index 0000000..ad37f6c --- /dev/null +++ b/app/src/main/assets/roms/keymaps/de-ch @@ -0,0 +1,836 @@ +# +# generated by qemu-keymap +# model : pc105 +# layout : ch +# variant : - +# options : - + +# name: "German (Switzerland)" + +# modifiers +# 0: Shift +# 1: Lock +# 2: Control +# 3: Mod1 +# 4: Mod2 +# 5: Mod3 +# 6: Mod4 +# 7: Mod5 +# 8: NumLock +# 9: Alt +# 10: LevelThree +# 11: LAlt +# 12: RAlt +# 13: RControl +# 14: LControl +# 15: ScrollLock +# 16: LevelFive +# 17: AltGr +# 18: Meta +# 19: Super +# 20: Hyper + +# evdev 1 (0x1), QKeyCode "esc", number 0x1 +Escape 0x01 + +# evdev 2 (0x2), QKeyCode "1", number 0x2 +1 0x02 +plus 0x02 shift +bar 0x02 altgr +exclamdown 0x02 shift altgr + +# evdev 3 (0x3), QKeyCode "2", number 0x3 +2 0x03 +quotedbl 0x03 shift +at 0x03 altgr +oneeighth 0x03 shift altgr + +# evdev 4 (0x4), QKeyCode "3", number 0x4 +3 0x04 +asterisk 0x04 shift +numbersign 0x04 altgr +sterling 0x04 shift altgr + +# evdev 5 (0x5), QKeyCode "4", number 0x5 +4 0x05 +ccedilla 0x05 shift +onequarter 0x05 altgr +dollar 0x05 shift altgr + +# evdev 6 (0x6), QKeyCode "5", number 0x6 +5 0x06 +percent 0x06 shift +onehalf 0x06 altgr +threeeighths 0x06 shift altgr + +# evdev 7 (0x7), QKeyCode "6", number 0x7 +6 0x07 +ampersand 0x07 shift +notsign 0x07 altgr +fiveeighths 0x07 shift altgr + +# evdev 8 (0x8), QKeyCode "7", number 0x8 +7 0x08 +slash 0x08 shift +bar 0x08 altgr +seveneighths 0x08 shift altgr + +# evdev 9 (0x9), QKeyCode "8", number 0x9 +8 0x09 +parenleft 0x09 shift +cent 0x09 altgr +trademark 0x09 shift altgr + +# evdev 10 (0xa), QKeyCode "9", number 0xa +9 0x0a +parenright 0x0a shift +bracketright 0x0a altgr +plusminus 0x0a shift altgr + +# evdev 11 (0xb), QKeyCode "0", number 0xb +0 0x0b +equal 0x0b shift +braceright 0x0b altgr +degree 0x0b shift altgr + +# evdev 12 (0xc), QKeyCode "minus", number 0xc +apostrophe 0x0c +question 0x0c shift +dead_acute 0x0c altgr +questiondown 0x0c shift altgr + +# evdev 13 (0xd), QKeyCode "equal", number 0xd +dead_circumflex 0x0d +dead_grave 0x0d shift +dead_tilde 0x0d altgr +dead_ogonek 0x0d shift altgr + +# evdev 14 (0xe), QKeyCode "backspace", number 0xe +BackSpace 0x0e + +# evdev 15 (0xf), QKeyCode "tab", number 0xf +Tab 0x0f +ISO_Left_Tab 0x0f shift + +# evdev 16 (0x10), QKeyCode "q", number 0x10 +q 0x10 +Q 0x10 shift +at 0x10 altgr +Greek_OMEGA 0x10 shift altgr + +# evdev 17 (0x11), QKeyCode "w", number 0x11 +w 0x11 +W 0x11 shift +lstroke 0x11 altgr +Lstroke 0x11 shift altgr + +# evdev 18 (0x12), QKeyCode "e", number 0x12 +e 0x12 +E 0x12 shift +EuroSign 0x12 altgr + +# evdev 19 (0x13), QKeyCode "r", number 0x13 +r 0x13 +R 0x13 shift +paragraph 0x13 altgr +registered 0x13 shift altgr + +# evdev 20 (0x14), QKeyCode "t", number 0x14 +t 0x14 +T 0x14 shift +tslash 0x14 altgr +Tslash 0x14 shift altgr + +# evdev 21 (0x15), QKeyCode "y", number 0x15 +z 0x15 +Z 0x15 shift +leftarrow 0x15 altgr +yen 0x15 shift altgr + +# evdev 22 (0x16), QKeyCode "u", number 0x16 +u 0x16 +U 0x16 shift +downarrow 0x16 altgr +uparrow 0x16 shift altgr + +# evdev 23 (0x17), QKeyCode "i", number 0x17 +i 0x17 +I 0x17 shift +rightarrow 0x17 altgr +idotless 0x17 shift altgr + +# evdev 24 (0x18), QKeyCode "o", number 0x18 +o 0x18 +O 0x18 shift +oe 0x18 altgr +OE 0x18 shift altgr + +# evdev 25 (0x19), QKeyCode "p", number 0x19 +p 0x19 +P 0x19 shift +thorn 0x19 altgr +THORN 0x19 shift altgr + +# evdev 26 (0x1a), QKeyCode "bracket_left", number 0x1a +udiaeresis 0x1a +egrave 0x1a shift +bracketleft 0x1a altgr +dead_abovering 0x1a shift altgr + +# evdev 27 (0x1b), QKeyCode "bracket_right", number 0x1b +dead_diaeresis 0x1b +exclam 0x1b shift +bracketright 0x1b altgr +dead_macron 0x1b shift altgr + +# evdev 28 (0x1c), QKeyCode "ret", number 0x1c +Return 0x1c + +# evdev 29 (0x1d), QKeyCode "ctrl", number 0x1d +Control_L 0x1d + +# evdev 30 (0x1e), QKeyCode "a", number 0x1e +a 0x1e +A 0x1e shift +ae 0x1e altgr +AE 0x1e shift altgr + +# evdev 31 (0x1f), QKeyCode "s", number 0x1f +s 0x1f +S 0x1f shift +ssharp 0x1f altgr +section 0x1f shift altgr + +# evdev 32 (0x20), QKeyCode "d", number 0x20 +d 0x20 +D 0x20 shift +eth 0x20 altgr +ETH 0x20 shift altgr + +# evdev 33 (0x21), QKeyCode "f", number 0x21 +f 0x21 +F 0x21 shift +dstroke 0x21 altgr +ordfeminine 0x21 shift altgr + +# evdev 34 (0x22), QKeyCode "g", number 0x22 +g 0x22 +G 0x22 shift +eng 0x22 altgr +ENG 0x22 shift altgr + +# evdev 35 (0x23), QKeyCode "h", number 0x23 +h 0x23 +H 0x23 shift +hstroke 0x23 altgr +Hstroke 0x23 shift altgr + +# evdev 36 (0x24), QKeyCode "j", number 0x24 +j 0x24 +J 0x24 shift +dead_hook 0x24 altgr +dead_horn 0x24 shift altgr + +# evdev 37 (0x25), QKeyCode "k", number 0x25 +k 0x25 +K 0x25 shift +kra 0x25 altgr +ampersand 0x25 shift altgr + +# evdev 38 (0x26), QKeyCode "l", number 0x26 +l 0x26 +L 0x26 shift +lstroke 0x26 altgr +Lstroke 0x26 shift altgr + +# evdev 39 (0x27), QKeyCode "semicolon", number 0x27 +odiaeresis 0x27 +eacute 0x27 shift +dead_acute 0x27 altgr +dead_doubleacute 0x27 shift altgr + +# evdev 40 (0x28), QKeyCode "apostrophe", number 0x28 +adiaeresis 0x28 +agrave 0x28 shift +braceleft 0x28 altgr +dead_caron 0x28 shift altgr + +# evdev 41 (0x29), QKeyCode "grave_accent", number 0x29 +section 0x29 +degree 0x29 shift +notsign 0x29 altgr + +# evdev 42 (0x2a), QKeyCode "shift", number 0x2a +Shift_L 0x2a + +# evdev 43 (0x2b), QKeyCode "backslash", number 0x2b +dollar 0x2b +sterling 0x2b shift +braceright 0x2b altgr +dead_breve 0x2b shift altgr + +# evdev 44 (0x2c), QKeyCode "z", number 0x2c +y 0x2c +Y 0x2c shift +guillemotleft 0x2c altgr +less 0x2c shift altgr + +# evdev 45 (0x2d), QKeyCode "x", number 0x2d +x 0x2d +X 0x2d shift +guillemotright 0x2d altgr +greater 0x2d shift altgr + +# evdev 46 (0x2e), QKeyCode "c", number 0x2e +c 0x2e +C 0x2e shift +cent 0x2e altgr +copyright 0x2e shift altgr + +# evdev 47 (0x2f), QKeyCode "v", number 0x2f +v 0x2f +V 0x2f shift +leftdoublequotemark 0x2f altgr +leftsinglequotemark 0x2f shift altgr + +# evdev 48 (0x30), QKeyCode "b", number 0x30 +b 0x30 +B 0x30 shift +rightdoublequotemark 0x30 altgr +rightsinglequotemark 0x30 shift altgr + +# evdev 49 (0x31), QKeyCode "n", number 0x31 +n 0x31 +N 0x31 shift + +# evdev 50 (0x32), QKeyCode "m", number 0x32 +m 0x32 +M 0x32 shift +mu 0x32 altgr +masculine 0x32 shift altgr + +# evdev 51 (0x33), QKeyCode "comma", number 0x33 +comma 0x33 +semicolon 0x33 shift +horizconnector 0x33 altgr +multiply 0x33 shift altgr + +# evdev 52 (0x34), QKeyCode "dot", number 0x34 +period 0x34 +colon 0x34 shift +periodcentered 0x34 altgr +division 0x34 shift altgr + +# evdev 53 (0x35), QKeyCode "slash", number 0x35 +minus 0x35 +underscore 0x35 shift +dead_belowdot 0x35 altgr +dead_abovedot 0x35 shift altgr + +# evdev 54 (0x36), QKeyCode "shift_r", number 0x36 +Shift_R 0x36 + +# evdev 55 (0x37), QKeyCode "kp_multiply", number 0x37 +KP_Multiply 0x37 + +# evdev 56 (0x38), QKeyCode "alt", number 0x38 +Alt_L 0x38 +Meta_L 0x38 shift + +# evdev 57 (0x39), QKeyCode "spc", number 0x39 +space 0x39 + +# evdev 58 (0x3a), QKeyCode "caps_lock", number 0x3a +Caps_Lock 0x3a + +# evdev 59 (0x3b), QKeyCode "f1", number 0x3b +F1 0x3b + +# evdev 60 (0x3c), QKeyCode "f2", number 0x3c +F2 0x3c + +# evdev 61 (0x3d), QKeyCode "f3", number 0x3d +F3 0x3d + +# evdev 62 (0x3e), QKeyCode "f4", number 0x3e +F4 0x3e + +# evdev 63 (0x3f), QKeyCode "f5", number 0x3f +F5 0x3f + +# evdev 64 (0x40), QKeyCode "f6", number 0x40 +F6 0x40 + +# evdev 65 (0x41), QKeyCode "f7", number 0x41 +F7 0x41 + +# evdev 66 (0x42), QKeyCode "f8", number 0x42 +F8 0x42 + +# evdev 67 (0x43), QKeyCode "f9", number 0x43 +F9 0x43 + +# evdev 68 (0x44), QKeyCode "f10", number 0x44 +F10 0x44 + +# evdev 69 (0x45), QKeyCode "num_lock", number 0x45 +Num_Lock 0x45 + +# evdev 70 (0x46), QKeyCode "scroll_lock", number 0x46 +Scroll_Lock 0x46 + +# evdev 71 (0x47), QKeyCode "kp_7", number 0x47 +KP_Home 0x47 +KP_7 0x47 numlock + +# evdev 72 (0x48), QKeyCode "kp_8", number 0x48 +KP_Up 0x48 +KP_8 0x48 numlock + +# evdev 73 (0x49), QKeyCode "kp_9", number 0x49 +KP_Prior 0x49 +KP_9 0x49 numlock + +# evdev 74 (0x4a), QKeyCode "kp_subtract", number 0x4a +KP_Subtract 0x4a + +# evdev 75 (0x4b), QKeyCode "kp_4", number 0x4b +KP_Left 0x4b +KP_4 0x4b numlock + +# evdev 76 (0x4c), QKeyCode "kp_5", number 0x4c +KP_Begin 0x4c +KP_5 0x4c numlock + +# evdev 77 (0x4d), QKeyCode "kp_6", number 0x4d +KP_Right 0x4d +KP_6 0x4d numlock + +# evdev 78 (0x4e), QKeyCode "kp_add", number 0x4e +KP_Add 0x4e + +# evdev 79 (0x4f), QKeyCode "kp_1", number 0x4f +KP_End 0x4f +KP_1 0x4f numlock + +# evdev 80 (0x50), QKeyCode "kp_2", number 0x50 +KP_Down 0x50 +KP_2 0x50 numlock + +# evdev 81 (0x51), QKeyCode "kp_3", number 0x51 +KP_Next 0x51 +KP_3 0x51 numlock + +# evdev 82 (0x52), QKeyCode "kp_0", number 0x52 +KP_Insert 0x52 +KP_0 0x52 numlock + +# evdev 83 (0x53), QKeyCode "kp_decimal", number 0x53 +KP_Delete 0x53 +KP_Decimal 0x53 numlock + +# evdev 84 (0x54): no evdev -> QKeyCode mapping (xkb keysym ISO_Level3_Shift) + +# evdev 85 (0x55): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 86 (0x56), QKeyCode "less", number 0x56 +less 0x56 +greater 0x56 shift +backslash 0x56 altgr +brokenbar 0x56 shift altgr + +# evdev 87 (0x57), QKeyCode "f11", number 0x57 +F11 0x57 + +# evdev 88 (0x58), QKeyCode "f12", number 0x58 +F12 0x58 + +# evdev 89 (0x59), QKeyCode "ro", number 0x73 + +# evdev 90 (0x5a): no evdev -> QKeyCode mapping (xkb keysym Katakana) + +# evdev 91 (0x5b), QKeyCode "hiragana", number 0x77 +Hiragana 0x77 + +# evdev 92 (0x5c), QKeyCode "henkan", number 0x79 +Henkan_Mode 0x79 + +# evdev 93 (0x5d): no evdev -> QKeyCode mapping (xkb keysym Hiragana_Katakana) + +# evdev 94 (0x5e): no evdev -> QKeyCode mapping (xkb keysym Muhenkan) + +# evdev 95 (0x5f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 96 (0x60), QKeyCode "kp_enter", number 0x9c +KP_Enter 0x9c + +# evdev 97 (0x61), QKeyCode "ctrl_r", number 0x9d +Control_R 0x9d + +# evdev 98 (0x62), QKeyCode "kp_divide", number 0xb5 +KP_Divide 0xb5 + +# evdev 99 (0x63), QKeyCode "sysrq", number 0x54 +Print 0x54 + +# evdev 100 (0x64), QKeyCode "alt_r", number 0xb8 +ISO_Level3_Shift 0xb8 + +# evdev 101 (0x65), QKeyCode "lf", number 0x5b +Linefeed 0x5b + +# evdev 102 (0x66), QKeyCode "home", number 0xc7 +Home 0xc7 + +# evdev 103 (0x67), QKeyCode "up", number 0xc8 +Up 0xc8 + +# evdev 104 (0x68), QKeyCode "pgup", number 0xc9 +Prior 0xc9 + +# evdev 105 (0x69), QKeyCode "left", number 0xcb +Left 0xcb + +# evdev 106 (0x6a), QKeyCode "right", number 0xcd +Right 0xcd + +# evdev 107 (0x6b), QKeyCode "end", number 0xcf +End 0xcf + +# evdev 108 (0x6c), QKeyCode "down", number 0xd0 +Down 0xd0 + +# evdev 109 (0x6d), QKeyCode "pgdn", number 0xd1 +Next 0xd1 + +# evdev 110 (0x6e), QKeyCode "insert", number 0xd2 +Insert 0xd2 + +# evdev 111 (0x6f), QKeyCode "delete", number 0xd3 +Delete 0xd3 + +# evdev 112 (0x70): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 113 (0x71), QKeyCode "audiomute", number 0xa0 +XF86AudioMute 0xa0 + +# evdev 114 (0x72), QKeyCode "volumedown", number 0xae +XF86AudioLowerVolume 0xae + +# evdev 115 (0x73), QKeyCode "volumeup", number 0xb0 +XF86AudioRaiseVolume 0xb0 + +# evdev 116 (0x74), QKeyCode "power", number 0xde +XF86PowerOff 0xde + +# evdev 117 (0x75), QKeyCode "kp_equals", number 0x59 +KP_Equal 0x59 + +# evdev 118 (0x76): no evdev -> QKeyCode mapping (xkb keysym plusminus) + +# evdev 119 (0x77), QKeyCode "pause", number 0xc6 +Pause 0xc6 + +# evdev 120 (0x78): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchA) + +# evdev 121 (0x79), QKeyCode "kp_comma", number 0x7e +KP_Decimal 0x7e + +# evdev 122 (0x7a): no evdev -> QKeyCode mapping (xkb keysym Hangul) + +# evdev 123 (0x7b): no evdev -> QKeyCode mapping (xkb keysym Hangul_Hanja) + +# evdev 124 (0x7c), QKeyCode "yen", number 0x7d + +# evdev 125 (0x7d), QKeyCode "meta_l", number 0xdb +Super_L 0xdb + +# evdev 126 (0x7e), QKeyCode "meta_r", number 0xdc +Super_R 0xdc + +# evdev 127 (0x7f), QKeyCode "compose", number 0xdd +Menu 0xdd + +# evdev 128 (0x80), QKeyCode "stop", number 0xe8 +Cancel 0xe8 + +# evdev 129 (0x81), QKeyCode "again", number 0x85 +Redo 0x85 + +# evdev 130 (0x82), QKeyCode "props", number 0x86 +SunProps 0x86 + +# evdev 131 (0x83), QKeyCode "undo", number 0x87 +Undo 0x87 + +# evdev 132 (0x84), QKeyCode "front", number 0x8c +SunFront 0x8c + +# evdev 133 (0x85), QKeyCode "copy", number 0xf8 +XF86Copy 0xf8 + +# evdev 134 (0x86), QKeyCode "open", number 0x64 +XF86Open 0x64 + +# evdev 135 (0x87), QKeyCode "paste", number 0x65 +XF86Paste 0x65 + +# evdev 136 (0x88), QKeyCode "find", number 0xc1 +Find 0xc1 + +# evdev 137 (0x89), QKeyCode "cut", number 0xbc +XF86Cut 0xbc + +# evdev 138 (0x8a), QKeyCode "help", number 0xf5 +Help 0xf5 + +# evdev 139 (0x8b), QKeyCode "menu", number 0x9e +XF86MenuKB 0x9e + +# evdev 140 (0x8c), QKeyCode "calculator", number 0xa1 +XF86Calculator 0xa1 + +# evdev 141 (0x8d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 142 (0x8e), QKeyCode "sleep", number 0xdf +XF86Sleep 0xdf + +# evdev 143 (0x8f), QKeyCode "wake", number 0xe3 +XF86WakeUp 0xe3 + +# evdev 144 (0x90): no evdev -> QKeyCode mapping (xkb keysym XF86Explorer) + +# evdev 145 (0x91): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 146 (0x92): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 147 (0x93): no evdev -> QKeyCode mapping (xkb keysym XF86Xfer) + +# evdev 148 (0x94): no evdev -> QKeyCode mapping (xkb keysym XF86Launch1) + +# evdev 149 (0x95): no evdev -> QKeyCode mapping (xkb keysym XF86Launch2) + +# evdev 150 (0x96): no evdev -> QKeyCode mapping (xkb keysym XF86WWW) + +# evdev 151 (0x97): no evdev -> QKeyCode mapping (xkb keysym XF86DOS) + +# evdev 152 (0x98): no evdev -> QKeyCode mapping (xkb keysym XF86ScreenSaver) + +# evdev 153 (0x99): no evdev -> QKeyCode mapping (xkb keysym XF86RotateWindows) + +# evdev 154 (0x9a): no evdev -> QKeyCode mapping (xkb keysym XF86TaskPane) + +# evdev 155 (0x9b), QKeyCode "mail", number 0xec +XF86Mail 0xec + +# evdev 156 (0x9c), QKeyCode "ac_bookmarks", number 0xe6 +XF86Favorites 0xe6 + +# evdev 157 (0x9d), QKeyCode "computer", number 0xeb +XF86MyComputer 0xeb + +# evdev 158 (0x9e), QKeyCode "ac_back", number 0xea +XF86Back 0xea + +# evdev 159 (0x9f), QKeyCode "ac_forward", number 0xe9 +XF86Forward 0xe9 + +# evdev 160 (0xa0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 161 (0xa1): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 162 (0xa2): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 163 (0xa3), QKeyCode "audionext", number 0x99 +XF86AudioNext 0x99 + +# evdev 164 (0xa4), QKeyCode "audioplay", number 0xa2 +XF86AudioPlay 0xa2 +XF86AudioPause 0xa2 shift + +# evdev 165 (0xa5), QKeyCode "audioprev", number 0x90 +XF86AudioPrev 0x90 + +# evdev 166 (0xa6), QKeyCode "audiostop", number 0xa4 +XF86AudioStop 0xa4 +XF86Eject 0xa4 shift + +# evdev 167 (0xa7): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRecord) + +# evdev 168 (0xa8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRewind) + +# evdev 169 (0xa9): no evdev -> QKeyCode mapping (xkb keysym XF86Phone) + +# evdev 170 (0xaa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 171 (0xab): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 172 (0xac), QKeyCode "ac_home", number 0xb2 +XF86HomePage 0xb2 + +# evdev 173 (0xad), QKeyCode "ac_refresh", number 0xe7 +XF86Reload 0xe7 + +# evdev 174 (0xae): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 175 (0xaf): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 176 (0xb0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 177 (0xb1): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollUp) + +# evdev 178 (0xb2): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollDown) + +# evdev 179 (0xb3): no evdev -> QKeyCode mapping (xkb keysym parenleft) + +# evdev 180 (0xb4): no evdev -> QKeyCode mapping (xkb keysym parenright) + +# evdev 181 (0xb5): no evdev -> QKeyCode mapping (xkb keysym XF86New) + +# evdev 182 (0xb6): no evdev -> QKeyCode mapping (xkb keysym Redo) + +# evdev 183 (0xb7): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 184 (0xb8): no evdev -> QKeyCode mapping (xkb keysym XF86Launch5) + +# evdev 185 (0xb9): no evdev -> QKeyCode mapping (xkb keysym XF86Launch6) + +# evdev 186 (0xba): no evdev -> QKeyCode mapping (xkb keysym XF86Launch7) + +# evdev 187 (0xbb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch8) + +# evdev 188 (0xbc): no evdev -> QKeyCode mapping (xkb keysym XF86Launch9) + +# evdev 189 (0xbd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 190 (0xbe): no evdev -> QKeyCode mapping (xkb keysym XF86AudioMicMute) + +# evdev 191 (0xbf): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadToggle) + +# evdev 192 (0xc0): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOn) + +# evdev 193 (0xc1): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOff) + +# evdev 194 (0xc2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 195 (0xc3): no evdev -> QKeyCode mapping (xkb keysym Mode_switch) + +# evdev 196 (0xc4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 197 (0xc5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 198 (0xc6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 199 (0xc7): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 200 (0xc8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 201 (0xc9): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPause) + +# evdev 202 (0xca): no evdev -> QKeyCode mapping (xkb keysym XF86Launch3) + +# evdev 203 (0xcb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch4) + +# evdev 204 (0xcc): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchB) + +# evdev 205 (0xcd): no evdev -> QKeyCode mapping (xkb keysym XF86Suspend) + +# evdev 206 (0xce): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 207 (0xcf): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 208 (0xd0): no evdev -> QKeyCode mapping (xkb keysym XF86AudioForward) + +# evdev 209 (0xd1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 210 (0xd2): no evdev -> QKeyCode mapping (xkb keysym Print) + +# evdev 211 (0xd3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 212 (0xd4): no evdev -> QKeyCode mapping (xkb keysym XF86WebCam) + +# evdev 213 (0xd5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 214 (0xd6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 215 (0xd7): no evdev -> QKeyCode mapping (xkb keysym XF86Mail) + +# evdev 216 (0xd8): no evdev -> QKeyCode mapping (xkb keysym XF86Messenger) + +# evdev 217 (0xd9): no evdev -> QKeyCode mapping (xkb keysym XF86Search) + +# evdev 218 (0xda): no evdev -> QKeyCode mapping (xkb keysym XF86Go) + +# evdev 219 (0xdb): no evdev -> QKeyCode mapping (xkb keysym XF86Finance) + +# evdev 220 (0xdc): no evdev -> QKeyCode mapping (xkb keysym XF86Game) + +# evdev 221 (0xdd): no evdev -> QKeyCode mapping (xkb keysym XF86Shop) + +# evdev 222 (0xde): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 223 (0xdf): no evdev -> QKeyCode mapping (xkb keysym Cancel) + +# evdev 224 (0xe0): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessDown) + +# evdev 225 (0xe1): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessUp) + +# evdev 226 (0xe2), QKeyCode "mediaselect", number 0xed +XF86AudioMedia 0xed + +# evdev 227 (0xe3): no evdev -> QKeyCode mapping (xkb keysym XF86Display) + +# evdev 228 (0xe4): no evdev -> QKeyCode mapping (xkb keysym XF86KbdLightOnOff) + +# evdev 229 (0xe5): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessDown) + +# evdev 230 (0xe6): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessUp) + +# evdev 231 (0xe7): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 232 (0xe8): no evdev -> QKeyCode mapping (xkb keysym XF86Reply) + +# evdev 233 (0xe9): no evdev -> QKeyCode mapping (xkb keysym XF86MailForward) + +# evdev 234 (0xea): no evdev -> QKeyCode mapping (xkb keysym XF86Save) + +# evdev 235 (0xeb): no evdev -> QKeyCode mapping (xkb keysym XF86Documents) + +# evdev 236 (0xec): no evdev -> QKeyCode mapping (xkb keysym XF86Battery) + +# evdev 237 (0xed): no evdev -> QKeyCode mapping (xkb keysym XF86Bluetooth) + +# evdev 238 (0xee): no evdev -> QKeyCode mapping (xkb keysym XF86WLAN) + +# evdev 239 (0xef): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 240 (0xf0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 241 (0xf1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 242 (0xf2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 243 (0xf3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 244 (0xf4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# +# quirks section start +# +# Sometimes multiple keysyms map to the same keycodes. +# The keycode -> keysym lookup finds only one of the +# keysyms. So append them here. +# + +Print 0x54 +Sys_Req 0x54 +Execute 0x54 +KP_Decimal 0x53 numlock +KP_Separator 0x53 numlock +Alt_R 0xb8 +ISO_Level3_Shift 0xb8 +Mode_switch 0xb8 + +# quirks section end diff --git a/app/src/main/assets/roms/keymaps/en-gb b/app/src/main/assets/roms/keymaps/en-gb new file mode 100644 index 0000000..999cca7 --- /dev/null +++ b/app/src/main/assets/roms/keymaps/en-gb @@ -0,0 +1,835 @@ +# +# generated by qemu-keymap +# model : pc105 +# layout : gb +# variant : - +# options : - + +# name: "English (UK)" + +# modifiers +# 0: Shift +# 1: Lock +# 2: Control +# 3: Mod1 +# 4: Mod2 +# 5: Mod3 +# 6: Mod4 +# 7: Mod5 +# 8: NumLock +# 9: Alt +# 10: LevelThree +# 11: LAlt +# 12: RAlt +# 13: RControl +# 14: LControl +# 15: ScrollLock +# 16: LevelFive +# 17: AltGr +# 18: Meta +# 19: Super +# 20: Hyper + +# evdev 1 (0x1), QKeyCode "esc", number 0x1 +Escape 0x01 + +# evdev 2 (0x2), QKeyCode "1", number 0x2 +1 0x02 +exclam 0x02 shift +onesuperior 0x02 altgr +exclamdown 0x02 shift altgr + +# evdev 3 (0x3), QKeyCode "2", number 0x3 +2 0x03 +quotedbl 0x03 shift +twosuperior 0x03 altgr +oneeighth 0x03 shift altgr + +# evdev 4 (0x4), QKeyCode "3", number 0x4 +3 0x04 +sterling 0x04 shift +threesuperior 0x04 altgr + +# evdev 5 (0x5), QKeyCode "4", number 0x5 +4 0x05 +dollar 0x05 shift +EuroSign 0x05 altgr +onequarter 0x05 shift altgr + +# evdev 6 (0x6), QKeyCode "5", number 0x6 +5 0x06 +percent 0x06 shift +onehalf 0x06 altgr +threeeighths 0x06 shift altgr + +# evdev 7 (0x7), QKeyCode "6", number 0x7 +6 0x07 +asciicircum 0x07 shift +threequarters 0x07 altgr +fiveeighths 0x07 shift altgr + +# evdev 8 (0x8), QKeyCode "7", number 0x8 +7 0x08 +ampersand 0x08 shift +braceleft 0x08 altgr +seveneighths 0x08 shift altgr + +# evdev 9 (0x9), QKeyCode "8", number 0x9 +8 0x09 +asterisk 0x09 shift +bracketleft 0x09 altgr +trademark 0x09 shift altgr + +# evdev 10 (0xa), QKeyCode "9", number 0xa +9 0x0a +parenleft 0x0a shift +bracketright 0x0a altgr +plusminus 0x0a shift altgr + +# evdev 11 (0xb), QKeyCode "0", number 0xb +0 0x0b +parenright 0x0b shift +braceright 0x0b altgr +degree 0x0b shift altgr + +# evdev 12 (0xc), QKeyCode "minus", number 0xc +minus 0x0c +underscore 0x0c shift +backslash 0x0c altgr +questiondown 0x0c shift altgr + +# evdev 13 (0xd), QKeyCode "equal", number 0xd +equal 0x0d +plus 0x0d shift +dead_cedilla 0x0d altgr +dead_ogonek 0x0d shift altgr + +# evdev 14 (0xe), QKeyCode "backspace", number 0xe +BackSpace 0x0e + +# evdev 15 (0xf), QKeyCode "tab", number 0xf +Tab 0x0f +ISO_Left_Tab 0x0f shift + +# evdev 16 (0x10), QKeyCode "q", number 0x10 +q 0x10 +Q 0x10 shift +at 0x10 altgr +Greek_OMEGA 0x10 shift altgr + +# evdev 17 (0x11), QKeyCode "w", number 0x11 +w 0x11 +W 0x11 shift +lstroke 0x11 altgr +Lstroke 0x11 shift altgr + +# evdev 18 (0x12), QKeyCode "e", number 0x12 +e 0x12 +E 0x12 shift + +# evdev 19 (0x13), QKeyCode "r", number 0x13 +r 0x13 +R 0x13 shift +paragraph 0x13 altgr +registered 0x13 shift altgr + +# evdev 20 (0x14), QKeyCode "t", number 0x14 +t 0x14 +T 0x14 shift +tslash 0x14 altgr +Tslash 0x14 shift altgr + +# evdev 21 (0x15), QKeyCode "y", number 0x15 +y 0x15 +Y 0x15 shift +leftarrow 0x15 altgr +yen 0x15 shift altgr + +# evdev 22 (0x16), QKeyCode "u", number 0x16 +u 0x16 +U 0x16 shift +downarrow 0x16 altgr +uparrow 0x16 shift altgr + +# evdev 23 (0x17), QKeyCode "i", number 0x17 +i 0x17 +I 0x17 shift +rightarrow 0x17 altgr +idotless 0x17 shift altgr + +# evdev 24 (0x18), QKeyCode "o", number 0x18 +o 0x18 +O 0x18 shift +oslash 0x18 altgr +Oslash 0x18 shift altgr + +# evdev 25 (0x19), QKeyCode "p", number 0x19 +p 0x19 +P 0x19 shift +thorn 0x19 altgr +THORN 0x19 shift altgr + +# evdev 26 (0x1a), QKeyCode "bracket_left", number 0x1a +bracketleft 0x1a +braceleft 0x1a shift +dead_diaeresis 0x1a altgr +dead_abovering 0x1a shift altgr + +# evdev 27 (0x1b), QKeyCode "bracket_right", number 0x1b +bracketright 0x1b +braceright 0x1b shift +dead_tilde 0x1b altgr +dead_macron 0x1b shift altgr + +# evdev 28 (0x1c), QKeyCode "ret", number 0x1c +Return 0x1c + +# evdev 29 (0x1d), QKeyCode "ctrl", number 0x1d +Control_L 0x1d + +# evdev 30 (0x1e), QKeyCode "a", number 0x1e +a 0x1e +A 0x1e shift +ae 0x1e altgr +AE 0x1e shift altgr + +# evdev 31 (0x1f), QKeyCode "s", number 0x1f +s 0x1f +S 0x1f shift +ssharp 0x1f altgr +section 0x1f shift altgr + +# evdev 32 (0x20), QKeyCode "d", number 0x20 +d 0x20 +D 0x20 shift +eth 0x20 altgr +ETH 0x20 shift altgr + +# evdev 33 (0x21), QKeyCode "f", number 0x21 +f 0x21 +F 0x21 shift +dstroke 0x21 altgr +ordfeminine 0x21 shift altgr + +# evdev 34 (0x22), QKeyCode "g", number 0x22 +g 0x22 +G 0x22 shift +eng 0x22 altgr +ENG 0x22 shift altgr + +# evdev 35 (0x23), QKeyCode "h", number 0x23 +h 0x23 +H 0x23 shift +hstroke 0x23 altgr +Hstroke 0x23 shift altgr + +# evdev 36 (0x24), QKeyCode "j", number 0x24 +j 0x24 +J 0x24 shift +dead_hook 0x24 altgr +dead_horn 0x24 shift altgr + +# evdev 37 (0x25), QKeyCode "k", number 0x25 +k 0x25 +K 0x25 shift +kra 0x25 altgr +ampersand 0x25 shift altgr + +# evdev 38 (0x26), QKeyCode "l", number 0x26 +l 0x26 +L 0x26 shift +lstroke 0x26 altgr +Lstroke 0x26 shift altgr + +# evdev 39 (0x27), QKeyCode "semicolon", number 0x27 +semicolon 0x27 +colon 0x27 shift +dead_acute 0x27 altgr +dead_doubleacute 0x27 shift altgr + +# evdev 40 (0x28), QKeyCode "apostrophe", number 0x28 +apostrophe 0x28 +at 0x28 shift +dead_circumflex 0x28 altgr +dead_caron 0x28 shift altgr + +# evdev 41 (0x29), QKeyCode "grave_accent", number 0x29 +grave 0x29 +notsign 0x29 shift +bar 0x29 altgr + +# evdev 42 (0x2a), QKeyCode "shift", number 0x2a +Shift_L 0x2a + +# evdev 43 (0x2b), QKeyCode "backslash", number 0x2b +numbersign 0x2b +asciitilde 0x2b shift +dead_grave 0x2b altgr +dead_breve 0x2b shift altgr + +# evdev 44 (0x2c), QKeyCode "z", number 0x2c +z 0x2c +Z 0x2c shift +guillemotleft 0x2c altgr +less 0x2c shift altgr + +# evdev 45 (0x2d), QKeyCode "x", number 0x2d +x 0x2d +X 0x2d shift +guillemotright 0x2d altgr +greater 0x2d shift altgr + +# evdev 46 (0x2e), QKeyCode "c", number 0x2e +c 0x2e +C 0x2e shift +cent 0x2e altgr +copyright 0x2e shift altgr + +# evdev 47 (0x2f), QKeyCode "v", number 0x2f +v 0x2f +V 0x2f shift +leftdoublequotemark 0x2f altgr +leftsinglequotemark 0x2f shift altgr + +# evdev 48 (0x30), QKeyCode "b", number 0x30 +b 0x30 +B 0x30 shift +rightdoublequotemark 0x30 altgr +rightsinglequotemark 0x30 shift altgr + +# evdev 49 (0x31), QKeyCode "n", number 0x31 +n 0x31 +N 0x31 shift + +# evdev 50 (0x32), QKeyCode "m", number 0x32 +m 0x32 +M 0x32 shift +mu 0x32 altgr +masculine 0x32 shift altgr + +# evdev 51 (0x33), QKeyCode "comma", number 0x33 +comma 0x33 +less 0x33 shift +horizconnector 0x33 altgr +multiply 0x33 shift altgr + +# evdev 52 (0x34), QKeyCode "dot", number 0x34 +period 0x34 +greater 0x34 shift +periodcentered 0x34 altgr +division 0x34 shift altgr + +# evdev 53 (0x35), QKeyCode "slash", number 0x35 +slash 0x35 +question 0x35 shift +dead_belowdot 0x35 altgr +dead_abovedot 0x35 shift altgr + +# evdev 54 (0x36), QKeyCode "shift_r", number 0x36 +Shift_R 0x36 + +# evdev 55 (0x37), QKeyCode "kp_multiply", number 0x37 +KP_Multiply 0x37 + +# evdev 56 (0x38), QKeyCode "alt", number 0x38 +Alt_L 0x38 +Meta_L 0x38 shift + +# evdev 57 (0x39), QKeyCode "spc", number 0x39 +space 0x39 + +# evdev 58 (0x3a), QKeyCode "caps_lock", number 0x3a +Caps_Lock 0x3a + +# evdev 59 (0x3b), QKeyCode "f1", number 0x3b +F1 0x3b + +# evdev 60 (0x3c), QKeyCode "f2", number 0x3c +F2 0x3c + +# evdev 61 (0x3d), QKeyCode "f3", number 0x3d +F3 0x3d + +# evdev 62 (0x3e), QKeyCode "f4", number 0x3e +F4 0x3e + +# evdev 63 (0x3f), QKeyCode "f5", number 0x3f +F5 0x3f + +# evdev 64 (0x40), QKeyCode "f6", number 0x40 +F6 0x40 + +# evdev 65 (0x41), QKeyCode "f7", number 0x41 +F7 0x41 + +# evdev 66 (0x42), QKeyCode "f8", number 0x42 +F8 0x42 + +# evdev 67 (0x43), QKeyCode "f9", number 0x43 +F9 0x43 + +# evdev 68 (0x44), QKeyCode "f10", number 0x44 +F10 0x44 + +# evdev 69 (0x45), QKeyCode "num_lock", number 0x45 +Num_Lock 0x45 + +# evdev 70 (0x46), QKeyCode "scroll_lock", number 0x46 +Scroll_Lock 0x46 + +# evdev 71 (0x47), QKeyCode "kp_7", number 0x47 +KP_Home 0x47 +KP_7 0x47 numlock + +# evdev 72 (0x48), QKeyCode "kp_8", number 0x48 +KP_Up 0x48 +KP_8 0x48 numlock + +# evdev 73 (0x49), QKeyCode "kp_9", number 0x49 +KP_Prior 0x49 +KP_9 0x49 numlock + +# evdev 74 (0x4a), QKeyCode "kp_subtract", number 0x4a +KP_Subtract 0x4a + +# evdev 75 (0x4b), QKeyCode "kp_4", number 0x4b +KP_Left 0x4b +KP_4 0x4b numlock + +# evdev 76 (0x4c), QKeyCode "kp_5", number 0x4c +KP_Begin 0x4c +KP_5 0x4c numlock + +# evdev 77 (0x4d), QKeyCode "kp_6", number 0x4d +KP_Right 0x4d +KP_6 0x4d numlock + +# evdev 78 (0x4e), QKeyCode "kp_add", number 0x4e +KP_Add 0x4e + +# evdev 79 (0x4f), QKeyCode "kp_1", number 0x4f +KP_End 0x4f +KP_1 0x4f numlock + +# evdev 80 (0x50), QKeyCode "kp_2", number 0x50 +KP_Down 0x50 +KP_2 0x50 numlock + +# evdev 81 (0x51), QKeyCode "kp_3", number 0x51 +KP_Next 0x51 +KP_3 0x51 numlock + +# evdev 82 (0x52), QKeyCode "kp_0", number 0x52 +KP_Insert 0x52 +KP_0 0x52 numlock + +# evdev 83 (0x53), QKeyCode "kp_decimal", number 0x53 +KP_Delete 0x53 +KP_Decimal 0x53 numlock + +# evdev 84 (0x54): no evdev -> QKeyCode mapping (xkb keysym ISO_Level3_Shift) + +# evdev 85 (0x55): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 86 (0x56), QKeyCode "less", number 0x56 +backslash 0x56 +bar 0x56 shift +bar 0x56 altgr +brokenbar 0x56 shift altgr + +# evdev 87 (0x57), QKeyCode "f11", number 0x57 +F11 0x57 + +# evdev 88 (0x58), QKeyCode "f12", number 0x58 +F12 0x58 + +# evdev 89 (0x59), QKeyCode "ro", number 0x73 + +# evdev 90 (0x5a): no evdev -> QKeyCode mapping (xkb keysym Katakana) + +# evdev 91 (0x5b), QKeyCode "hiragana", number 0x77 +Hiragana 0x77 + +# evdev 92 (0x5c), QKeyCode "henkan", number 0x79 +Henkan_Mode 0x79 + +# evdev 93 (0x5d): no evdev -> QKeyCode mapping (xkb keysym Hiragana_Katakana) + +# evdev 94 (0x5e): no evdev -> QKeyCode mapping (xkb keysym Muhenkan) + +# evdev 95 (0x5f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 96 (0x60), QKeyCode "kp_enter", number 0x9c +KP_Enter 0x9c + +# evdev 97 (0x61), QKeyCode "ctrl_r", number 0x9d +Control_R 0x9d + +# evdev 98 (0x62), QKeyCode "kp_divide", number 0xb5 +KP_Divide 0xb5 + +# evdev 99 (0x63), QKeyCode "sysrq", number 0x54 +Print 0x54 + +# evdev 100 (0x64), QKeyCode "alt_r", number 0xb8 +ISO_Level3_Shift 0xb8 +Multi_key 0xb8 shift + +# evdev 101 (0x65), QKeyCode "lf", number 0x5b +Linefeed 0x5b + +# evdev 102 (0x66), QKeyCode "home", number 0xc7 +Home 0xc7 + +# evdev 103 (0x67), QKeyCode "up", number 0xc8 +Up 0xc8 + +# evdev 104 (0x68), QKeyCode "pgup", number 0xc9 +Prior 0xc9 + +# evdev 105 (0x69), QKeyCode "left", number 0xcb +Left 0xcb + +# evdev 106 (0x6a), QKeyCode "right", number 0xcd +Right 0xcd + +# evdev 107 (0x6b), QKeyCode "end", number 0xcf +End 0xcf + +# evdev 108 (0x6c), QKeyCode "down", number 0xd0 +Down 0xd0 + +# evdev 109 (0x6d), QKeyCode "pgdn", number 0xd1 +Next 0xd1 + +# evdev 110 (0x6e), QKeyCode "insert", number 0xd2 +Insert 0xd2 + +# evdev 111 (0x6f), QKeyCode "delete", number 0xd3 +Delete 0xd3 + +# evdev 112 (0x70): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 113 (0x71), QKeyCode "audiomute", number 0xa0 +XF86AudioMute 0xa0 + +# evdev 114 (0x72), QKeyCode "volumedown", number 0xae +XF86AudioLowerVolume 0xae + +# evdev 115 (0x73), QKeyCode "volumeup", number 0xb0 +XF86AudioRaiseVolume 0xb0 + +# evdev 116 (0x74), QKeyCode "power", number 0xde +XF86PowerOff 0xde + +# evdev 117 (0x75), QKeyCode "kp_equals", number 0x59 +KP_Equal 0x59 + +# evdev 118 (0x76): no evdev -> QKeyCode mapping (xkb keysym plusminus) + +# evdev 119 (0x77), QKeyCode "pause", number 0xc6 +Pause 0xc6 + +# evdev 120 (0x78): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchA) + +# evdev 121 (0x79), QKeyCode "kp_comma", number 0x7e +KP_Decimal 0x7e + +# evdev 122 (0x7a): no evdev -> QKeyCode mapping (xkb keysym Hangul) + +# evdev 123 (0x7b): no evdev -> QKeyCode mapping (xkb keysym Hangul_Hanja) + +# evdev 124 (0x7c), QKeyCode "yen", number 0x7d + +# evdev 125 (0x7d), QKeyCode "meta_l", number 0xdb +Super_L 0xdb + +# evdev 126 (0x7e), QKeyCode "meta_r", number 0xdc +Super_R 0xdc + +# evdev 127 (0x7f), QKeyCode "compose", number 0xdd +Menu 0xdd + +# evdev 128 (0x80), QKeyCode "stop", number 0xe8 +Cancel 0xe8 + +# evdev 129 (0x81), QKeyCode "again", number 0x85 +Redo 0x85 + +# evdev 130 (0x82), QKeyCode "props", number 0x86 +SunProps 0x86 + +# evdev 131 (0x83), QKeyCode "undo", number 0x87 +Undo 0x87 + +# evdev 132 (0x84), QKeyCode "front", number 0x8c +SunFront 0x8c + +# evdev 133 (0x85), QKeyCode "copy", number 0xf8 +XF86Copy 0xf8 + +# evdev 134 (0x86), QKeyCode "open", number 0x64 +XF86Open 0x64 + +# evdev 135 (0x87), QKeyCode "paste", number 0x65 +XF86Paste 0x65 + +# evdev 136 (0x88), QKeyCode "find", number 0xc1 +Find 0xc1 + +# evdev 137 (0x89), QKeyCode "cut", number 0xbc +XF86Cut 0xbc + +# evdev 138 (0x8a), QKeyCode "help", number 0xf5 +Help 0xf5 + +# evdev 139 (0x8b), QKeyCode "menu", number 0x9e +XF86MenuKB 0x9e + +# evdev 140 (0x8c), QKeyCode "calculator", number 0xa1 +XF86Calculator 0xa1 + +# evdev 141 (0x8d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 142 (0x8e), QKeyCode "sleep", number 0xdf +XF86Sleep 0xdf + +# evdev 143 (0x8f), QKeyCode "wake", number 0xe3 +XF86WakeUp 0xe3 + +# evdev 144 (0x90): no evdev -> QKeyCode mapping (xkb keysym XF86Explorer) + +# evdev 145 (0x91): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 146 (0x92): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 147 (0x93): no evdev -> QKeyCode mapping (xkb keysym XF86Xfer) + +# evdev 148 (0x94): no evdev -> QKeyCode mapping (xkb keysym XF86Launch1) + +# evdev 149 (0x95): no evdev -> QKeyCode mapping (xkb keysym XF86Launch2) + +# evdev 150 (0x96): no evdev -> QKeyCode mapping (xkb keysym XF86WWW) + +# evdev 151 (0x97): no evdev -> QKeyCode mapping (xkb keysym XF86DOS) + +# evdev 152 (0x98): no evdev -> QKeyCode mapping (xkb keysym XF86ScreenSaver) + +# evdev 153 (0x99): no evdev -> QKeyCode mapping (xkb keysym XF86RotateWindows) + +# evdev 154 (0x9a): no evdev -> QKeyCode mapping (xkb keysym XF86TaskPane) + +# evdev 155 (0x9b), QKeyCode "mail", number 0xec +XF86Mail 0xec + +# evdev 156 (0x9c), QKeyCode "ac_bookmarks", number 0xe6 +XF86Favorites 0xe6 + +# evdev 157 (0x9d), QKeyCode "computer", number 0xeb +XF86MyComputer 0xeb + +# evdev 158 (0x9e), QKeyCode "ac_back", number 0xea +XF86Back 0xea + +# evdev 159 (0x9f), QKeyCode "ac_forward", number 0xe9 +XF86Forward 0xe9 + +# evdev 160 (0xa0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 161 (0xa1): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 162 (0xa2): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 163 (0xa3), QKeyCode "audionext", number 0x99 +XF86AudioNext 0x99 + +# evdev 164 (0xa4), QKeyCode "audioplay", number 0xa2 +XF86AudioPlay 0xa2 +XF86AudioPause 0xa2 shift + +# evdev 165 (0xa5), QKeyCode "audioprev", number 0x90 +XF86AudioPrev 0x90 + +# evdev 166 (0xa6), QKeyCode "audiostop", number 0xa4 +XF86AudioStop 0xa4 +XF86Eject 0xa4 shift + +# evdev 167 (0xa7): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRecord) + +# evdev 168 (0xa8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRewind) + +# evdev 169 (0xa9): no evdev -> QKeyCode mapping (xkb keysym XF86Phone) + +# evdev 170 (0xaa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 171 (0xab): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 172 (0xac), QKeyCode "ac_home", number 0xb2 +XF86HomePage 0xb2 + +# evdev 173 (0xad), QKeyCode "ac_refresh", number 0xe7 +XF86Reload 0xe7 + +# evdev 174 (0xae): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 175 (0xaf): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 176 (0xb0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 177 (0xb1): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollUp) + +# evdev 178 (0xb2): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollDown) + +# evdev 179 (0xb3): no evdev -> QKeyCode mapping (xkb keysym parenleft) + +# evdev 180 (0xb4): no evdev -> QKeyCode mapping (xkb keysym parenright) + +# evdev 181 (0xb5): no evdev -> QKeyCode mapping (xkb keysym XF86New) + +# evdev 182 (0xb6): no evdev -> QKeyCode mapping (xkb keysym Redo) + +# evdev 183 (0xb7): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 184 (0xb8): no evdev -> QKeyCode mapping (xkb keysym XF86Launch5) + +# evdev 185 (0xb9): no evdev -> QKeyCode mapping (xkb keysym XF86Launch6) + +# evdev 186 (0xba): no evdev -> QKeyCode mapping (xkb keysym XF86Launch7) + +# evdev 187 (0xbb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch8) + +# evdev 188 (0xbc): no evdev -> QKeyCode mapping (xkb keysym XF86Launch9) + +# evdev 189 (0xbd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 190 (0xbe): no evdev -> QKeyCode mapping (xkb keysym XF86AudioMicMute) + +# evdev 191 (0xbf): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadToggle) + +# evdev 192 (0xc0): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOn) + +# evdev 193 (0xc1): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOff) + +# evdev 194 (0xc2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 195 (0xc3): no evdev -> QKeyCode mapping (xkb keysym Mode_switch) + +# evdev 196 (0xc4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 197 (0xc5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 198 (0xc6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 199 (0xc7): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 200 (0xc8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 201 (0xc9): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPause) + +# evdev 202 (0xca): no evdev -> QKeyCode mapping (xkb keysym XF86Launch3) + +# evdev 203 (0xcb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch4) + +# evdev 204 (0xcc): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchB) + +# evdev 205 (0xcd): no evdev -> QKeyCode mapping (xkb keysym XF86Suspend) + +# evdev 206 (0xce): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 207 (0xcf): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 208 (0xd0): no evdev -> QKeyCode mapping (xkb keysym XF86AudioForward) + +# evdev 209 (0xd1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 210 (0xd2): no evdev -> QKeyCode mapping (xkb keysym Print) + +# evdev 211 (0xd3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 212 (0xd4): no evdev -> QKeyCode mapping (xkb keysym XF86WebCam) + +# evdev 213 (0xd5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 214 (0xd6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 215 (0xd7): no evdev -> QKeyCode mapping (xkb keysym XF86Mail) + +# evdev 216 (0xd8): no evdev -> QKeyCode mapping (xkb keysym XF86Messenger) + +# evdev 217 (0xd9): no evdev -> QKeyCode mapping (xkb keysym XF86Search) + +# evdev 218 (0xda): no evdev -> QKeyCode mapping (xkb keysym XF86Go) + +# evdev 219 (0xdb): no evdev -> QKeyCode mapping (xkb keysym XF86Finance) + +# evdev 220 (0xdc): no evdev -> QKeyCode mapping (xkb keysym XF86Game) + +# evdev 221 (0xdd): no evdev -> QKeyCode mapping (xkb keysym XF86Shop) + +# evdev 222 (0xde): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 223 (0xdf): no evdev -> QKeyCode mapping (xkb keysym Cancel) + +# evdev 224 (0xe0): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessDown) + +# evdev 225 (0xe1): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessUp) + +# evdev 226 (0xe2), QKeyCode "mediaselect", number 0xed +XF86AudioMedia 0xed + +# evdev 227 (0xe3): no evdev -> QKeyCode mapping (xkb keysym XF86Display) + +# evdev 228 (0xe4): no evdev -> QKeyCode mapping (xkb keysym XF86KbdLightOnOff) + +# evdev 229 (0xe5): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessDown) + +# evdev 230 (0xe6): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessUp) + +# evdev 231 (0xe7): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 232 (0xe8): no evdev -> QKeyCode mapping (xkb keysym XF86Reply) + +# evdev 233 (0xe9): no evdev -> QKeyCode mapping (xkb keysym XF86MailForward) + +# evdev 234 (0xea): no evdev -> QKeyCode mapping (xkb keysym XF86Save) + +# evdev 235 (0xeb): no evdev -> QKeyCode mapping (xkb keysym XF86Documents) + +# evdev 236 (0xec): no evdev -> QKeyCode mapping (xkb keysym XF86Battery) + +# evdev 237 (0xed): no evdev -> QKeyCode mapping (xkb keysym XF86Bluetooth) + +# evdev 238 (0xee): no evdev -> QKeyCode mapping (xkb keysym XF86WLAN) + +# evdev 239 (0xef): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 240 (0xf0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 241 (0xf1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 242 (0xf2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 243 (0xf3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 244 (0xf4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# +# quirks section start +# +# Sometimes multiple keysyms map to the same keycodes. +# The keycode -> keysym lookup finds only one of the +# keysyms. So append them here. +# + +Print 0x54 +Sys_Req 0x54 +Execute 0x54 +KP_Decimal 0x53 numlock +KP_Separator 0x53 numlock +Alt_R 0xb8 +ISO_Level3_Shift 0xb8 +Mode_switch 0xb8 + +# quirks section end diff --git a/app/src/main/assets/roms/keymaps/en-us b/app/src/main/assets/roms/keymaps/en-us new file mode 100644 index 0000000..a70e03a --- /dev/null +++ b/app/src/main/assets/roms/keymaps/en-us @@ -0,0 +1,747 @@ +# +# generated by qemu-keymap +# model : pc105 +# layout : us +# variant : - +# options : - + +# name: "English (US)" + +# modifiers +# 0: Shift +# 1: Lock +# 2: Control +# 3: Mod1 +# 4: Mod2 +# 5: Mod3 +# 6: Mod4 +# 7: Mod5 +# 8: NumLock +# 9: Alt +# 10: LevelThree +# 11: LAlt +# 12: RAlt +# 13: RControl +# 14: LControl +# 15: ScrollLock +# 16: LevelFive +# 17: AltGr +# 18: Meta +# 19: Super +# 20: Hyper + +# evdev 1 (0x1), QKeyCode "esc", number 0x1 +Escape 0x01 + +# evdev 2 (0x2), QKeyCode "1", number 0x2 +1 0x02 +exclam 0x02 shift + +# evdev 3 (0x3), QKeyCode "2", number 0x3 +2 0x03 +at 0x03 shift + +# evdev 4 (0x4), QKeyCode "3", number 0x4 +3 0x04 +numbersign 0x04 shift + +# evdev 5 (0x5), QKeyCode "4", number 0x5 +4 0x05 +dollar 0x05 shift + +# evdev 6 (0x6), QKeyCode "5", number 0x6 +5 0x06 +percent 0x06 shift + +# evdev 7 (0x7), QKeyCode "6", number 0x7 +6 0x07 +asciicircum 0x07 shift + +# evdev 8 (0x8), QKeyCode "7", number 0x8 +7 0x08 +ampersand 0x08 shift + +# evdev 9 (0x9), QKeyCode "8", number 0x9 +8 0x09 +asterisk 0x09 shift + +# evdev 10 (0xa), QKeyCode "9", number 0xa +9 0x0a +parenleft 0x0a shift + +# evdev 11 (0xb), QKeyCode "0", number 0xb +0 0x0b +parenright 0x0b shift + +# evdev 12 (0xc), QKeyCode "minus", number 0xc +minus 0x0c +underscore 0x0c shift + +# evdev 13 (0xd), QKeyCode "equal", number 0xd +equal 0x0d +plus 0x0d shift + +# evdev 14 (0xe), QKeyCode "backspace", number 0xe +BackSpace 0x0e + +# evdev 15 (0xf), QKeyCode "tab", number 0xf +Tab 0x0f +ISO_Left_Tab 0x0f shift + +# evdev 16 (0x10), QKeyCode "q", number 0x10 +q 0x10 +Q 0x10 shift + +# evdev 17 (0x11), QKeyCode "w", number 0x11 +w 0x11 +W 0x11 shift + +# evdev 18 (0x12), QKeyCode "e", number 0x12 +e 0x12 +E 0x12 shift + +# evdev 19 (0x13), QKeyCode "r", number 0x13 +r 0x13 +R 0x13 shift + +# evdev 20 (0x14), QKeyCode "t", number 0x14 +t 0x14 +T 0x14 shift + +# evdev 21 (0x15), QKeyCode "y", number 0x15 +y 0x15 +Y 0x15 shift + +# evdev 22 (0x16), QKeyCode "u", number 0x16 +u 0x16 +U 0x16 shift + +# evdev 23 (0x17), QKeyCode "i", number 0x17 +i 0x17 +I 0x17 shift + +# evdev 24 (0x18), QKeyCode "o", number 0x18 +o 0x18 +O 0x18 shift + +# evdev 25 (0x19), QKeyCode "p", number 0x19 +p 0x19 +P 0x19 shift + +# evdev 26 (0x1a), QKeyCode "bracket_left", number 0x1a +bracketleft 0x1a +braceleft 0x1a shift + +# evdev 27 (0x1b), QKeyCode "bracket_right", number 0x1b +bracketright 0x1b +braceright 0x1b shift + +# evdev 28 (0x1c), QKeyCode "ret", number 0x1c +Return 0x1c + +# evdev 29 (0x1d), QKeyCode "ctrl", number 0x1d +Control_L 0x1d + +# evdev 30 (0x1e), QKeyCode "a", number 0x1e +a 0x1e +A 0x1e shift + +# evdev 31 (0x1f), QKeyCode "s", number 0x1f +s 0x1f +S 0x1f shift + +# evdev 32 (0x20), QKeyCode "d", number 0x20 +d 0x20 +D 0x20 shift + +# evdev 33 (0x21), QKeyCode "f", number 0x21 +f 0x21 +F 0x21 shift + +# evdev 34 (0x22), QKeyCode "g", number 0x22 +g 0x22 +G 0x22 shift + +# evdev 35 (0x23), QKeyCode "h", number 0x23 +h 0x23 +H 0x23 shift + +# evdev 36 (0x24), QKeyCode "j", number 0x24 +j 0x24 +J 0x24 shift + +# evdev 37 (0x25), QKeyCode "k", number 0x25 +k 0x25 +K 0x25 shift + +# evdev 38 (0x26), QKeyCode "l", number 0x26 +l 0x26 +L 0x26 shift + +# evdev 39 (0x27), QKeyCode "semicolon", number 0x27 +semicolon 0x27 +colon 0x27 shift + +# evdev 40 (0x28), QKeyCode "apostrophe", number 0x28 +apostrophe 0x28 +quotedbl 0x28 shift + +# evdev 41 (0x29), QKeyCode "grave_accent", number 0x29 +grave 0x29 +asciitilde 0x29 shift + +# evdev 42 (0x2a), QKeyCode "shift", number 0x2a +Shift_L 0x2a + +# evdev 43 (0x2b), QKeyCode "backslash", number 0x2b +backslash 0x2b +bar 0x2b shift + +# evdev 44 (0x2c), QKeyCode "z", number 0x2c +z 0x2c +Z 0x2c shift + +# evdev 45 (0x2d), QKeyCode "x", number 0x2d +x 0x2d +X 0x2d shift + +# evdev 46 (0x2e), QKeyCode "c", number 0x2e +c 0x2e +C 0x2e shift + +# evdev 47 (0x2f), QKeyCode "v", number 0x2f +v 0x2f +V 0x2f shift + +# evdev 48 (0x30), QKeyCode "b", number 0x30 +b 0x30 +B 0x30 shift + +# evdev 49 (0x31), QKeyCode "n", number 0x31 +n 0x31 +N 0x31 shift + +# evdev 50 (0x32), QKeyCode "m", number 0x32 +m 0x32 +M 0x32 shift + +# evdev 51 (0x33), QKeyCode "comma", number 0x33 +comma 0x33 +less 0x33 shift + +# evdev 52 (0x34), QKeyCode "dot", number 0x34 +period 0x34 +greater 0x34 shift + +# evdev 53 (0x35), QKeyCode "slash", number 0x35 +slash 0x35 +question 0x35 shift + +# evdev 54 (0x36), QKeyCode "shift_r", number 0x36 +Shift_R 0x36 + +# evdev 55 (0x37), QKeyCode "kp_multiply", number 0x37 +KP_Multiply 0x37 + +# evdev 56 (0x38), QKeyCode "alt", number 0x38 +Alt_L 0x38 +Meta_L 0x38 shift + +# evdev 57 (0x39), QKeyCode "spc", number 0x39 +space 0x39 + +# evdev 58 (0x3a), QKeyCode "caps_lock", number 0x3a +Caps_Lock 0x3a + +# evdev 59 (0x3b), QKeyCode "f1", number 0x3b +F1 0x3b + +# evdev 60 (0x3c), QKeyCode "f2", number 0x3c +F2 0x3c + +# evdev 61 (0x3d), QKeyCode "f3", number 0x3d +F3 0x3d + +# evdev 62 (0x3e), QKeyCode "f4", number 0x3e +F4 0x3e + +# evdev 63 (0x3f), QKeyCode "f5", number 0x3f +F5 0x3f + +# evdev 64 (0x40), QKeyCode "f6", number 0x40 +F6 0x40 + +# evdev 65 (0x41), QKeyCode "f7", number 0x41 +F7 0x41 + +# evdev 66 (0x42), QKeyCode "f8", number 0x42 +F8 0x42 + +# evdev 67 (0x43), QKeyCode "f9", number 0x43 +F9 0x43 + +# evdev 68 (0x44), QKeyCode "f10", number 0x44 +F10 0x44 + +# evdev 69 (0x45), QKeyCode "num_lock", number 0x45 +Num_Lock 0x45 + +# evdev 70 (0x46), QKeyCode "scroll_lock", number 0x46 +Scroll_Lock 0x46 + +# evdev 71 (0x47), QKeyCode "kp_7", number 0x47 +KP_Home 0x47 +KP_7 0x47 numlock + +# evdev 72 (0x48), QKeyCode "kp_8", number 0x48 +KP_Up 0x48 +KP_8 0x48 numlock + +# evdev 73 (0x49), QKeyCode "kp_9", number 0x49 +KP_Prior 0x49 +KP_9 0x49 numlock + +# evdev 74 (0x4a), QKeyCode "kp_subtract", number 0x4a +KP_Subtract 0x4a + +# evdev 75 (0x4b), QKeyCode "kp_4", number 0x4b +KP_Left 0x4b +KP_4 0x4b numlock + +# evdev 76 (0x4c), QKeyCode "kp_5", number 0x4c +KP_Begin 0x4c +KP_5 0x4c numlock + +# evdev 77 (0x4d), QKeyCode "kp_6", number 0x4d +KP_Right 0x4d +KP_6 0x4d numlock + +# evdev 78 (0x4e), QKeyCode "kp_add", number 0x4e +KP_Add 0x4e + +# evdev 79 (0x4f), QKeyCode "kp_1", number 0x4f +KP_End 0x4f +KP_1 0x4f numlock + +# evdev 80 (0x50), QKeyCode "kp_2", number 0x50 +KP_Down 0x50 +KP_2 0x50 numlock + +# evdev 81 (0x51), QKeyCode "kp_3", number 0x51 +KP_Next 0x51 +KP_3 0x51 numlock + +# evdev 82 (0x52), QKeyCode "kp_0", number 0x52 +KP_Insert 0x52 +KP_0 0x52 numlock + +# evdev 83 (0x53), QKeyCode "kp_decimal", number 0x53 +KP_Delete 0x53 +KP_Decimal 0x53 numlock + +# evdev 84 (0x54): no evdev -> QKeyCode mapping (xkb keysym ISO_Level3_Shift) + +# evdev 85 (0x55): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 86 (0x56), QKeyCode "less", number 0x56 +less 0x56 +greater 0x56 shift +bar 0x56 altgr +brokenbar 0x56 shift altgr + +# evdev 87 (0x57), QKeyCode "f11", number 0x57 +F11 0x57 + +# evdev 88 (0x58), QKeyCode "f12", number 0x58 +F12 0x58 + +# evdev 89 (0x59), QKeyCode "ro", number 0x73 + +# evdev 90 (0x5a): no evdev -> QKeyCode mapping (xkb keysym Katakana) + +# evdev 91 (0x5b), QKeyCode "hiragana", number 0x77 +Hiragana 0x77 + +# evdev 92 (0x5c), QKeyCode "henkan", number 0x79 +Henkan_Mode 0x79 + +# evdev 93 (0x5d): no evdev -> QKeyCode mapping (xkb keysym Hiragana_Katakana) + +# evdev 94 (0x5e): no evdev -> QKeyCode mapping (xkb keysym Muhenkan) + +# evdev 95 (0x5f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 96 (0x60), QKeyCode "kp_enter", number 0x9c +KP_Enter 0x9c + +# evdev 97 (0x61), QKeyCode "ctrl_r", number 0x9d +Control_R 0x9d + +# evdev 98 (0x62), QKeyCode "kp_divide", number 0xb5 +KP_Divide 0xb5 + +# evdev 99 (0x63), QKeyCode "sysrq", number 0x54 +Print 0x54 + +# evdev 100 (0x64), QKeyCode "alt_r", number 0xb8 +Alt_R 0xb8 +Meta_R 0xb8 shift + +# evdev 101 (0x65), QKeyCode "lf", number 0x5b +Linefeed 0x5b + +# evdev 102 (0x66), QKeyCode "home", number 0xc7 +Home 0xc7 + +# evdev 103 (0x67), QKeyCode "up", number 0xc8 +Up 0xc8 + +# evdev 104 (0x68), QKeyCode "pgup", number 0xc9 +Prior 0xc9 + +# evdev 105 (0x69), QKeyCode "left", number 0xcb +Left 0xcb + +# evdev 106 (0x6a), QKeyCode "right", number 0xcd +Right 0xcd + +# evdev 107 (0x6b), QKeyCode "end", number 0xcf +End 0xcf + +# evdev 108 (0x6c), QKeyCode "down", number 0xd0 +Down 0xd0 + +# evdev 109 (0x6d), QKeyCode "pgdn", number 0xd1 +Next 0xd1 + +# evdev 110 (0x6e), QKeyCode "insert", number 0xd2 +Insert 0xd2 + +# evdev 111 (0x6f), QKeyCode "delete", number 0xd3 +Delete 0xd3 + +# evdev 112 (0x70): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 113 (0x71), QKeyCode "audiomute", number 0xa0 +XF86AudioMute 0xa0 + +# evdev 114 (0x72), QKeyCode "volumedown", number 0xae +XF86AudioLowerVolume 0xae + +# evdev 115 (0x73), QKeyCode "volumeup", number 0xb0 +XF86AudioRaiseVolume 0xb0 + +# evdev 116 (0x74), QKeyCode "power", number 0xde +XF86PowerOff 0xde + +# evdev 117 (0x75), QKeyCode "kp_equals", number 0x59 +KP_Equal 0x59 + +# evdev 118 (0x76): no evdev -> QKeyCode mapping (xkb keysym plusminus) + +# evdev 119 (0x77), QKeyCode "pause", number 0xc6 +Pause 0xc6 + +# evdev 120 (0x78): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchA) + +# evdev 121 (0x79), QKeyCode "kp_comma", number 0x7e +KP_Decimal 0x7e + +# evdev 122 (0x7a): no evdev -> QKeyCode mapping (xkb keysym Hangul) + +# evdev 123 (0x7b): no evdev -> QKeyCode mapping (xkb keysym Hangul_Hanja) + +# evdev 124 (0x7c), QKeyCode "yen", number 0x7d + +# evdev 125 (0x7d), QKeyCode "meta_l", number 0xdb +Super_L 0xdb + +# evdev 126 (0x7e), QKeyCode "meta_r", number 0xdc +Super_R 0xdc + +# evdev 127 (0x7f), QKeyCode "compose", number 0xdd +Menu 0xdd + +# evdev 128 (0x80), QKeyCode "stop", number 0xe8 +Cancel 0xe8 + +# evdev 129 (0x81), QKeyCode "again", number 0x85 +Redo 0x85 + +# evdev 130 (0x82), QKeyCode "props", number 0x86 +SunProps 0x86 + +# evdev 131 (0x83), QKeyCode "undo", number 0x87 +Undo 0x87 + +# evdev 132 (0x84), QKeyCode "front", number 0x8c +SunFront 0x8c + +# evdev 133 (0x85), QKeyCode "copy", number 0xf8 +XF86Copy 0xf8 + +# evdev 134 (0x86), QKeyCode "open", number 0x64 +XF86Open 0x64 + +# evdev 135 (0x87), QKeyCode "paste", number 0x65 +XF86Paste 0x65 + +# evdev 136 (0x88), QKeyCode "find", number 0xc1 +Find 0xc1 + +# evdev 137 (0x89), QKeyCode "cut", number 0xbc +XF86Cut 0xbc + +# evdev 138 (0x8a), QKeyCode "help", number 0xf5 +Help 0xf5 + +# evdev 139 (0x8b), QKeyCode "menu", number 0x9e +XF86MenuKB 0x9e + +# evdev 140 (0x8c), QKeyCode "calculator", number 0xa1 +XF86Calculator 0xa1 + +# evdev 141 (0x8d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 142 (0x8e), QKeyCode "sleep", number 0xdf +XF86Sleep 0xdf + +# evdev 143 (0x8f), QKeyCode "wake", number 0xe3 +XF86WakeUp 0xe3 + +# evdev 144 (0x90): no evdev -> QKeyCode mapping (xkb keysym XF86Explorer) + +# evdev 145 (0x91): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 146 (0x92): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 147 (0x93): no evdev -> QKeyCode mapping (xkb keysym XF86Xfer) + +# evdev 148 (0x94): no evdev -> QKeyCode mapping (xkb keysym XF86Launch1) + +# evdev 149 (0x95): no evdev -> QKeyCode mapping (xkb keysym XF86Launch2) + +# evdev 150 (0x96): no evdev -> QKeyCode mapping (xkb keysym XF86WWW) + +# evdev 151 (0x97): no evdev -> QKeyCode mapping (xkb keysym XF86DOS) + +# evdev 152 (0x98): no evdev -> QKeyCode mapping (xkb keysym XF86ScreenSaver) + +# evdev 153 (0x99): no evdev -> QKeyCode mapping (xkb keysym XF86RotateWindows) + +# evdev 154 (0x9a): no evdev -> QKeyCode mapping (xkb keysym XF86TaskPane) + +# evdev 155 (0x9b), QKeyCode "mail", number 0xec +XF86Mail 0xec + +# evdev 156 (0x9c), QKeyCode "ac_bookmarks", number 0xe6 +XF86Favorites 0xe6 + +# evdev 157 (0x9d), QKeyCode "computer", number 0xeb +XF86MyComputer 0xeb + +# evdev 158 (0x9e), QKeyCode "ac_back", number 0xea +XF86Back 0xea + +# evdev 159 (0x9f), QKeyCode "ac_forward", number 0xe9 +XF86Forward 0xe9 + +# evdev 160 (0xa0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 161 (0xa1): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 162 (0xa2): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 163 (0xa3), QKeyCode "audionext", number 0x99 +XF86AudioNext 0x99 + +# evdev 164 (0xa4), QKeyCode "audioplay", number 0xa2 +XF86AudioPlay 0xa2 +XF86AudioPause 0xa2 shift + +# evdev 165 (0xa5), QKeyCode "audioprev", number 0x90 +XF86AudioPrev 0x90 + +# evdev 166 (0xa6), QKeyCode "audiostop", number 0xa4 +XF86AudioStop 0xa4 +XF86Eject 0xa4 shift + +# evdev 167 (0xa7): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRecord) + +# evdev 168 (0xa8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRewind) + +# evdev 169 (0xa9): no evdev -> QKeyCode mapping (xkb keysym XF86Phone) + +# evdev 170 (0xaa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 171 (0xab): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 172 (0xac), QKeyCode "ac_home", number 0xb2 +XF86HomePage 0xb2 + +# evdev 173 (0xad), QKeyCode "ac_refresh", number 0xe7 +XF86Reload 0xe7 + +# evdev 174 (0xae): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 175 (0xaf): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 176 (0xb0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 177 (0xb1): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollUp) + +# evdev 178 (0xb2): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollDown) + +# evdev 179 (0xb3): no evdev -> QKeyCode mapping (xkb keysym parenleft) + +# evdev 180 (0xb4): no evdev -> QKeyCode mapping (xkb keysym parenright) + +# evdev 181 (0xb5): no evdev -> QKeyCode mapping (xkb keysym XF86New) + +# evdev 182 (0xb6): no evdev -> QKeyCode mapping (xkb keysym Redo) + +# evdev 183 (0xb7): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 184 (0xb8): no evdev -> QKeyCode mapping (xkb keysym XF86Launch5) + +# evdev 185 (0xb9): no evdev -> QKeyCode mapping (xkb keysym XF86Launch6) + +# evdev 186 (0xba): no evdev -> QKeyCode mapping (xkb keysym XF86Launch7) + +# evdev 187 (0xbb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch8) + +# evdev 188 (0xbc): no evdev -> QKeyCode mapping (xkb keysym XF86Launch9) + +# evdev 189 (0xbd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 190 (0xbe): no evdev -> QKeyCode mapping (xkb keysym XF86AudioMicMute) + +# evdev 191 (0xbf): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadToggle) + +# evdev 192 (0xc0): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOn) + +# evdev 193 (0xc1): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOff) + +# evdev 194 (0xc2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 195 (0xc3): no evdev -> QKeyCode mapping (xkb keysym Mode_switch) + +# evdev 196 (0xc4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 197 (0xc5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 198 (0xc6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 199 (0xc7): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 200 (0xc8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 201 (0xc9): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPause) + +# evdev 202 (0xca): no evdev -> QKeyCode mapping (xkb keysym XF86Launch3) + +# evdev 203 (0xcb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch4) + +# evdev 204 (0xcc): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchB) + +# evdev 205 (0xcd): no evdev -> QKeyCode mapping (xkb keysym XF86Suspend) + +# evdev 206 (0xce): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 207 (0xcf): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 208 (0xd0): no evdev -> QKeyCode mapping (xkb keysym XF86AudioForward) + +# evdev 209 (0xd1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 210 (0xd2): no evdev -> QKeyCode mapping (xkb keysym Print) + +# evdev 211 (0xd3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 212 (0xd4): no evdev -> QKeyCode mapping (xkb keysym XF86WebCam) + +# evdev 213 (0xd5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 214 (0xd6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 215 (0xd7): no evdev -> QKeyCode mapping (xkb keysym XF86Mail) + +# evdev 216 (0xd8): no evdev -> QKeyCode mapping (xkb keysym XF86Messenger) + +# evdev 217 (0xd9): no evdev -> QKeyCode mapping (xkb keysym XF86Search) + +# evdev 218 (0xda): no evdev -> QKeyCode mapping (xkb keysym XF86Go) + +# evdev 219 (0xdb): no evdev -> QKeyCode mapping (xkb keysym XF86Finance) + +# evdev 220 (0xdc): no evdev -> QKeyCode mapping (xkb keysym XF86Game) + +# evdev 221 (0xdd): no evdev -> QKeyCode mapping (xkb keysym XF86Shop) + +# evdev 222 (0xde): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 223 (0xdf): no evdev -> QKeyCode mapping (xkb keysym Cancel) + +# evdev 224 (0xe0): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessDown) + +# evdev 225 (0xe1): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessUp) + +# evdev 226 (0xe2), QKeyCode "mediaselect", number 0xed +XF86AudioMedia 0xed + +# evdev 227 (0xe3): no evdev -> QKeyCode mapping (xkb keysym XF86Display) + +# evdev 228 (0xe4): no evdev -> QKeyCode mapping (xkb keysym XF86KbdLightOnOff) + +# evdev 229 (0xe5): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessDown) + +# evdev 230 (0xe6): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessUp) + +# evdev 231 (0xe7): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 232 (0xe8): no evdev -> QKeyCode mapping (xkb keysym XF86Reply) + +# evdev 233 (0xe9): no evdev -> QKeyCode mapping (xkb keysym XF86MailForward) + +# evdev 234 (0xea): no evdev -> QKeyCode mapping (xkb keysym XF86Save) + +# evdev 235 (0xeb): no evdev -> QKeyCode mapping (xkb keysym XF86Documents) + +# evdev 236 (0xec): no evdev -> QKeyCode mapping (xkb keysym XF86Battery) + +# evdev 237 (0xed): no evdev -> QKeyCode mapping (xkb keysym XF86Bluetooth) + +# evdev 238 (0xee): no evdev -> QKeyCode mapping (xkb keysym XF86WLAN) + +# evdev 239 (0xef): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 240 (0xf0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 241 (0xf1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 242 (0xf2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 243 (0xf3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 244 (0xf4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# +# quirks section start +# +# Sometimes multiple keysyms map to the same keycodes. +# The keycode -> keysym lookup finds only one of the +# keysyms. So append them here. +# + +Print 0x54 +Sys_Req 0x54 +Execute 0x54 +KP_Decimal 0x53 numlock +KP_Separator 0x53 numlock +Alt_R 0xb8 +ISO_Level3_Shift 0xb8 +Mode_switch 0xb8 + +# quirks section end diff --git a/app/src/main/assets/roms/keymaps/es b/app/src/main/assets/roms/keymaps/es new file mode 100644 index 0000000..53e66e8 --- /dev/null +++ b/app/src/main/assets/roms/keymaps/es @@ -0,0 +1,835 @@ +# +# generated by qemu-keymap +# model : pc105 +# layout : es +# variant : - +# options : - + +# name: "Spanish" + +# modifiers +# 0: Shift +# 1: Lock +# 2: Control +# 3: Mod1 +# 4: Mod2 +# 5: Mod3 +# 6: Mod4 +# 7: Mod5 +# 8: NumLock +# 9: Alt +# 10: LevelThree +# 11: LAlt +# 12: RAlt +# 13: RControl +# 14: LControl +# 15: ScrollLock +# 16: LevelFive +# 17: AltGr +# 18: Meta +# 19: Super +# 20: Hyper + +# evdev 1 (0x1), QKeyCode "esc", number 0x1 +Escape 0x01 + +# evdev 2 (0x2), QKeyCode "1", number 0x2 +1 0x02 +exclam 0x02 shift +bar 0x02 altgr +exclamdown 0x02 shift altgr + +# evdev 3 (0x3), QKeyCode "2", number 0x3 +2 0x03 +quotedbl 0x03 shift +at 0x03 altgr +oneeighth 0x03 shift altgr + +# evdev 4 (0x4), QKeyCode "3", number 0x4 +3 0x04 +periodcentered 0x04 shift +numbersign 0x04 altgr +sterling 0x04 shift altgr + +# evdev 5 (0x5), QKeyCode "4", number 0x5 +4 0x05 +dollar 0x05 shift +asciitilde 0x05 altgr + +# evdev 6 (0x6), QKeyCode "5", number 0x6 +5 0x06 +percent 0x06 shift +onehalf 0x06 altgr +threeeighths 0x06 shift altgr + +# evdev 7 (0x7), QKeyCode "6", number 0x7 +6 0x07 +ampersand 0x07 shift +notsign 0x07 altgr +fiveeighths 0x07 shift altgr + +# evdev 8 (0x8), QKeyCode "7", number 0x8 +7 0x08 +slash 0x08 shift +braceleft 0x08 altgr +seveneighths 0x08 shift altgr + +# evdev 9 (0x9), QKeyCode "8", number 0x9 +8 0x09 +parenleft 0x09 shift +bracketleft 0x09 altgr +trademark 0x09 shift altgr + +# evdev 10 (0xa), QKeyCode "9", number 0xa +9 0x0a +parenright 0x0a shift +bracketright 0x0a altgr +plusminus 0x0a shift altgr + +# evdev 11 (0xb), QKeyCode "0", number 0xb +0 0x0b +equal 0x0b shift +braceright 0x0b altgr +degree 0x0b shift altgr + +# evdev 12 (0xc), QKeyCode "minus", number 0xc +apostrophe 0x0c +question 0x0c shift +backslash 0x0c altgr +questiondown 0x0c shift altgr + +# evdev 13 (0xd), QKeyCode "equal", number 0xd +exclamdown 0x0d +questiondown 0x0d shift +dead_tilde 0x0d altgr +asciitilde 0x0d shift altgr + +# evdev 14 (0xe), QKeyCode "backspace", number 0xe +BackSpace 0x0e + +# evdev 15 (0xf), QKeyCode "tab", number 0xf +Tab 0x0f +ISO_Left_Tab 0x0f shift + +# evdev 16 (0x10), QKeyCode "q", number 0x10 +q 0x10 +Q 0x10 shift +at 0x10 altgr +Greek_OMEGA 0x10 shift altgr + +# evdev 17 (0x11), QKeyCode "w", number 0x11 +w 0x11 +W 0x11 shift +lstroke 0x11 altgr +Lstroke 0x11 shift altgr + +# evdev 18 (0x12), QKeyCode "e", number 0x12 +e 0x12 +E 0x12 shift +EuroSign 0x12 altgr +cent 0x12 shift altgr + +# evdev 19 (0x13), QKeyCode "r", number 0x13 +r 0x13 +R 0x13 shift +paragraph 0x13 altgr +registered 0x13 shift altgr + +# evdev 20 (0x14), QKeyCode "t", number 0x14 +t 0x14 +T 0x14 shift +tslash 0x14 altgr +Tslash 0x14 shift altgr + +# evdev 21 (0x15), QKeyCode "y", number 0x15 +y 0x15 +Y 0x15 shift +leftarrow 0x15 altgr +yen 0x15 shift altgr + +# evdev 22 (0x16), QKeyCode "u", number 0x16 +u 0x16 +U 0x16 shift +downarrow 0x16 altgr +uparrow 0x16 shift altgr + +# evdev 23 (0x17), QKeyCode "i", number 0x17 +i 0x17 +I 0x17 shift +rightarrow 0x17 altgr +idotless 0x17 shift altgr + +# evdev 24 (0x18), QKeyCode "o", number 0x18 +o 0x18 +O 0x18 shift +oslash 0x18 altgr +Oslash 0x18 shift altgr + +# evdev 25 (0x19), QKeyCode "p", number 0x19 +p 0x19 +P 0x19 shift +thorn 0x19 altgr +THORN 0x19 shift altgr + +# evdev 26 (0x1a), QKeyCode "bracket_left", number 0x1a +dead_grave 0x1a +dead_circumflex 0x1a shift +bracketleft 0x1a altgr +dead_abovering 0x1a shift altgr + +# evdev 27 (0x1b), QKeyCode "bracket_right", number 0x1b +plus 0x1b +asterisk 0x1b shift +bracketright 0x1b altgr +dead_macron 0x1b shift altgr + +# evdev 28 (0x1c), QKeyCode "ret", number 0x1c +Return 0x1c + +# evdev 29 (0x1d), QKeyCode "ctrl", number 0x1d +Control_L 0x1d + +# evdev 30 (0x1e), QKeyCode "a", number 0x1e +a 0x1e +A 0x1e shift +ae 0x1e altgr +AE 0x1e shift altgr + +# evdev 31 (0x1f), QKeyCode "s", number 0x1f +s 0x1f +S 0x1f shift +ssharp 0x1f altgr +section 0x1f shift altgr + +# evdev 32 (0x20), QKeyCode "d", number 0x20 +d 0x20 +D 0x20 shift +eth 0x20 altgr +ETH 0x20 shift altgr + +# evdev 33 (0x21), QKeyCode "f", number 0x21 +f 0x21 +F 0x21 shift +dstroke 0x21 altgr +ordfeminine 0x21 shift altgr + +# evdev 34 (0x22), QKeyCode "g", number 0x22 +g 0x22 +G 0x22 shift +eng 0x22 altgr +ENG 0x22 shift altgr + +# evdev 35 (0x23), QKeyCode "h", number 0x23 +h 0x23 +H 0x23 shift +hstroke 0x23 altgr +Hstroke 0x23 shift altgr + +# evdev 36 (0x24), QKeyCode "j", number 0x24 +j 0x24 +J 0x24 shift +dead_hook 0x24 altgr +dead_horn 0x24 shift altgr + +# evdev 37 (0x25), QKeyCode "k", number 0x25 +k 0x25 +K 0x25 shift +kra 0x25 altgr +ampersand 0x25 shift altgr + +# evdev 38 (0x26), QKeyCode "l", number 0x26 +l 0x26 +L 0x26 shift +lstroke 0x26 altgr +Lstroke 0x26 shift altgr + +# evdev 39 (0x27), QKeyCode "semicolon", number 0x27 +ntilde 0x27 +Ntilde 0x27 shift +asciitilde 0x27 altgr +dead_doubleacute 0x27 shift altgr + +# evdev 40 (0x28), QKeyCode "apostrophe", number 0x28 +dead_acute 0x28 +dead_diaeresis 0x28 shift +braceleft 0x28 altgr + +# evdev 41 (0x29), QKeyCode "grave_accent", number 0x29 +masculine 0x29 +ordfeminine 0x29 shift +backslash 0x29 altgr + +# evdev 42 (0x2a), QKeyCode "shift", number 0x2a +Shift_L 0x2a + +# evdev 43 (0x2b), QKeyCode "backslash", number 0x2b +ccedilla 0x2b +Ccedilla 0x2b shift +braceright 0x2b altgr +dead_breve 0x2b shift altgr + +# evdev 44 (0x2c), QKeyCode "z", number 0x2c +z 0x2c +Z 0x2c shift +guillemotleft 0x2c altgr +less 0x2c shift altgr + +# evdev 45 (0x2d), QKeyCode "x", number 0x2d +x 0x2d +X 0x2d shift +guillemotright 0x2d altgr +greater 0x2d shift altgr + +# evdev 46 (0x2e), QKeyCode "c", number 0x2e +c 0x2e +C 0x2e shift +cent 0x2e altgr +copyright 0x2e shift altgr + +# evdev 47 (0x2f), QKeyCode "v", number 0x2f +v 0x2f +V 0x2f shift +leftdoublequotemark 0x2f altgr +leftsinglequotemark 0x2f shift altgr + +# evdev 48 (0x30), QKeyCode "b", number 0x30 +b 0x30 +B 0x30 shift +rightdoublequotemark 0x30 altgr +rightsinglequotemark 0x30 shift altgr + +# evdev 49 (0x31), QKeyCode "n", number 0x31 +n 0x31 +N 0x31 shift + +# evdev 50 (0x32), QKeyCode "m", number 0x32 +m 0x32 +M 0x32 shift +mu 0x32 altgr +masculine 0x32 shift altgr + +# evdev 51 (0x33), QKeyCode "comma", number 0x33 +comma 0x33 +semicolon 0x33 shift +horizconnector 0x33 altgr +multiply 0x33 shift altgr + +# evdev 52 (0x34), QKeyCode "dot", number 0x34 +period 0x34 +colon 0x34 shift +periodcentered 0x34 altgr +division 0x34 shift altgr + +# evdev 53 (0x35), QKeyCode "slash", number 0x35 +minus 0x35 +underscore 0x35 shift +dead_belowdot 0x35 altgr +dead_abovedot 0x35 shift altgr + +# evdev 54 (0x36), QKeyCode "shift_r", number 0x36 +Shift_R 0x36 + +# evdev 55 (0x37), QKeyCode "kp_multiply", number 0x37 +KP_Multiply 0x37 + +# evdev 56 (0x38), QKeyCode "alt", number 0x38 +Alt_L 0x38 +Meta_L 0x38 shift + +# evdev 57 (0x39), QKeyCode "spc", number 0x39 +space 0x39 + +# evdev 58 (0x3a), QKeyCode "caps_lock", number 0x3a +Caps_Lock 0x3a + +# evdev 59 (0x3b), QKeyCode "f1", number 0x3b +F1 0x3b + +# evdev 60 (0x3c), QKeyCode "f2", number 0x3c +F2 0x3c + +# evdev 61 (0x3d), QKeyCode "f3", number 0x3d +F3 0x3d + +# evdev 62 (0x3e), QKeyCode "f4", number 0x3e +F4 0x3e + +# evdev 63 (0x3f), QKeyCode "f5", number 0x3f +F5 0x3f + +# evdev 64 (0x40), QKeyCode "f6", number 0x40 +F6 0x40 + +# evdev 65 (0x41), QKeyCode "f7", number 0x41 +F7 0x41 + +# evdev 66 (0x42), QKeyCode "f8", number 0x42 +F8 0x42 + +# evdev 67 (0x43), QKeyCode "f9", number 0x43 +F9 0x43 + +# evdev 68 (0x44), QKeyCode "f10", number 0x44 +F10 0x44 + +# evdev 69 (0x45), QKeyCode "num_lock", number 0x45 +Num_Lock 0x45 + +# evdev 70 (0x46), QKeyCode "scroll_lock", number 0x46 +Scroll_Lock 0x46 + +# evdev 71 (0x47), QKeyCode "kp_7", number 0x47 +KP_Home 0x47 +KP_7 0x47 numlock + +# evdev 72 (0x48), QKeyCode "kp_8", number 0x48 +KP_Up 0x48 +KP_8 0x48 numlock + +# evdev 73 (0x49), QKeyCode "kp_9", number 0x49 +KP_Prior 0x49 +KP_9 0x49 numlock + +# evdev 74 (0x4a), QKeyCode "kp_subtract", number 0x4a +KP_Subtract 0x4a + +# evdev 75 (0x4b), QKeyCode "kp_4", number 0x4b +KP_Left 0x4b +KP_4 0x4b numlock + +# evdev 76 (0x4c), QKeyCode "kp_5", number 0x4c +KP_Begin 0x4c +KP_5 0x4c numlock + +# evdev 77 (0x4d), QKeyCode "kp_6", number 0x4d +KP_Right 0x4d +KP_6 0x4d numlock + +# evdev 78 (0x4e), QKeyCode "kp_add", number 0x4e +KP_Add 0x4e + +# evdev 79 (0x4f), QKeyCode "kp_1", number 0x4f +KP_End 0x4f +KP_1 0x4f numlock + +# evdev 80 (0x50), QKeyCode "kp_2", number 0x50 +KP_Down 0x50 +KP_2 0x50 numlock + +# evdev 81 (0x51), QKeyCode "kp_3", number 0x51 +KP_Next 0x51 +KP_3 0x51 numlock + +# evdev 82 (0x52), QKeyCode "kp_0", number 0x52 +KP_Insert 0x52 +KP_0 0x52 numlock + +# evdev 83 (0x53), QKeyCode "kp_decimal", number 0x53 +KP_Delete 0x53 +KP_Decimal 0x53 numlock + +# evdev 84 (0x54): no evdev -> QKeyCode mapping (xkb keysym ISO_Level3_Shift) + +# evdev 85 (0x55): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 86 (0x56), QKeyCode "less", number 0x56 +less 0x56 +greater 0x56 shift +bar 0x56 altgr +brokenbar 0x56 shift altgr + +# evdev 87 (0x57), QKeyCode "f11", number 0x57 +F11 0x57 + +# evdev 88 (0x58), QKeyCode "f12", number 0x58 +F12 0x58 + +# evdev 89 (0x59), QKeyCode "ro", number 0x73 + +# evdev 90 (0x5a): no evdev -> QKeyCode mapping (xkb keysym Katakana) + +# evdev 91 (0x5b), QKeyCode "hiragana", number 0x77 +Hiragana 0x77 + +# evdev 92 (0x5c), QKeyCode "henkan", number 0x79 +Henkan_Mode 0x79 + +# evdev 93 (0x5d): no evdev -> QKeyCode mapping (xkb keysym Hiragana_Katakana) + +# evdev 94 (0x5e): no evdev -> QKeyCode mapping (xkb keysym Muhenkan) + +# evdev 95 (0x5f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 96 (0x60), QKeyCode "kp_enter", number 0x9c +KP_Enter 0x9c + +# evdev 97 (0x61), QKeyCode "ctrl_r", number 0x9d +Control_R 0x9d + +# evdev 98 (0x62), QKeyCode "kp_divide", number 0xb5 +KP_Divide 0xb5 + +# evdev 99 (0x63), QKeyCode "sysrq", number 0x54 +Print 0x54 + +# evdev 100 (0x64), QKeyCode "alt_r", number 0xb8 +ISO_Level3_Shift 0xb8 + +# evdev 101 (0x65), QKeyCode "lf", number 0x5b +Linefeed 0x5b + +# evdev 102 (0x66), QKeyCode "home", number 0xc7 +Home 0xc7 + +# evdev 103 (0x67), QKeyCode "up", number 0xc8 +Up 0xc8 + +# evdev 104 (0x68), QKeyCode "pgup", number 0xc9 +Prior 0xc9 + +# evdev 105 (0x69), QKeyCode "left", number 0xcb +Left 0xcb + +# evdev 106 (0x6a), QKeyCode "right", number 0xcd +Right 0xcd + +# evdev 107 (0x6b), QKeyCode "end", number 0xcf +End 0xcf + +# evdev 108 (0x6c), QKeyCode "down", number 0xd0 +Down 0xd0 + +# evdev 109 (0x6d), QKeyCode "pgdn", number 0xd1 +Next 0xd1 + +# evdev 110 (0x6e), QKeyCode "insert", number 0xd2 +Insert 0xd2 + +# evdev 111 (0x6f), QKeyCode "delete", number 0xd3 +Delete 0xd3 + +# evdev 112 (0x70): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 113 (0x71), QKeyCode "audiomute", number 0xa0 +XF86AudioMute 0xa0 + +# evdev 114 (0x72), QKeyCode "volumedown", number 0xae +XF86AudioLowerVolume 0xae + +# evdev 115 (0x73), QKeyCode "volumeup", number 0xb0 +XF86AudioRaiseVolume 0xb0 + +# evdev 116 (0x74), QKeyCode "power", number 0xde +XF86PowerOff 0xde + +# evdev 117 (0x75), QKeyCode "kp_equals", number 0x59 +KP_Equal 0x59 + +# evdev 118 (0x76): no evdev -> QKeyCode mapping (xkb keysym plusminus) + +# evdev 119 (0x77), QKeyCode "pause", number 0xc6 +Pause 0xc6 + +# evdev 120 (0x78): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchA) + +# evdev 121 (0x79), QKeyCode "kp_comma", number 0x7e +KP_Decimal 0x7e + +# evdev 122 (0x7a): no evdev -> QKeyCode mapping (xkb keysym Hangul) + +# evdev 123 (0x7b): no evdev -> QKeyCode mapping (xkb keysym Hangul_Hanja) + +# evdev 124 (0x7c), QKeyCode "yen", number 0x7d + +# evdev 125 (0x7d), QKeyCode "meta_l", number 0xdb +Super_L 0xdb + +# evdev 126 (0x7e), QKeyCode "meta_r", number 0xdc +Super_R 0xdc + +# evdev 127 (0x7f), QKeyCode "compose", number 0xdd +Menu 0xdd + +# evdev 128 (0x80), QKeyCode "stop", number 0xe8 +Cancel 0xe8 + +# evdev 129 (0x81), QKeyCode "again", number 0x85 +Redo 0x85 + +# evdev 130 (0x82), QKeyCode "props", number 0x86 +SunProps 0x86 + +# evdev 131 (0x83), QKeyCode "undo", number 0x87 +Undo 0x87 + +# evdev 132 (0x84), QKeyCode "front", number 0x8c +SunFront 0x8c + +# evdev 133 (0x85), QKeyCode "copy", number 0xf8 +XF86Copy 0xf8 + +# evdev 134 (0x86), QKeyCode "open", number 0x64 +XF86Open 0x64 + +# evdev 135 (0x87), QKeyCode "paste", number 0x65 +XF86Paste 0x65 + +# evdev 136 (0x88), QKeyCode "find", number 0xc1 +Find 0xc1 + +# evdev 137 (0x89), QKeyCode "cut", number 0xbc +XF86Cut 0xbc + +# evdev 138 (0x8a), QKeyCode "help", number 0xf5 +Help 0xf5 + +# evdev 139 (0x8b), QKeyCode "menu", number 0x9e +XF86MenuKB 0x9e + +# evdev 140 (0x8c), QKeyCode "calculator", number 0xa1 +XF86Calculator 0xa1 + +# evdev 141 (0x8d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 142 (0x8e), QKeyCode "sleep", number 0xdf +XF86Sleep 0xdf + +# evdev 143 (0x8f), QKeyCode "wake", number 0xe3 +XF86WakeUp 0xe3 + +# evdev 144 (0x90): no evdev -> QKeyCode mapping (xkb keysym XF86Explorer) + +# evdev 145 (0x91): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 146 (0x92): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 147 (0x93): no evdev -> QKeyCode mapping (xkb keysym XF86Xfer) + +# evdev 148 (0x94): no evdev -> QKeyCode mapping (xkb keysym XF86Launch1) + +# evdev 149 (0x95): no evdev -> QKeyCode mapping (xkb keysym XF86Launch2) + +# evdev 150 (0x96): no evdev -> QKeyCode mapping (xkb keysym XF86WWW) + +# evdev 151 (0x97): no evdev -> QKeyCode mapping (xkb keysym XF86DOS) + +# evdev 152 (0x98): no evdev -> QKeyCode mapping (xkb keysym XF86ScreenSaver) + +# evdev 153 (0x99): no evdev -> QKeyCode mapping (xkb keysym XF86RotateWindows) + +# evdev 154 (0x9a): no evdev -> QKeyCode mapping (xkb keysym XF86TaskPane) + +# evdev 155 (0x9b), QKeyCode "mail", number 0xec +XF86Mail 0xec + +# evdev 156 (0x9c), QKeyCode "ac_bookmarks", number 0xe6 +XF86Favorites 0xe6 + +# evdev 157 (0x9d), QKeyCode "computer", number 0xeb +XF86MyComputer 0xeb + +# evdev 158 (0x9e), QKeyCode "ac_back", number 0xea +XF86Back 0xea + +# evdev 159 (0x9f), QKeyCode "ac_forward", number 0xe9 +XF86Forward 0xe9 + +# evdev 160 (0xa0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 161 (0xa1): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 162 (0xa2): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 163 (0xa3), QKeyCode "audionext", number 0x99 +XF86AudioNext 0x99 + +# evdev 164 (0xa4), QKeyCode "audioplay", number 0xa2 +XF86AudioPlay 0xa2 +XF86AudioPause 0xa2 shift + +# evdev 165 (0xa5), QKeyCode "audioprev", number 0x90 +XF86AudioPrev 0x90 + +# evdev 166 (0xa6), QKeyCode "audiostop", number 0xa4 +XF86AudioStop 0xa4 +XF86Eject 0xa4 shift + +# evdev 167 (0xa7): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRecord) + +# evdev 168 (0xa8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRewind) + +# evdev 169 (0xa9): no evdev -> QKeyCode mapping (xkb keysym XF86Phone) + +# evdev 170 (0xaa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 171 (0xab): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 172 (0xac), QKeyCode "ac_home", number 0xb2 +XF86HomePage 0xb2 + +# evdev 173 (0xad), QKeyCode "ac_refresh", number 0xe7 +XF86Reload 0xe7 + +# evdev 174 (0xae): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 175 (0xaf): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 176 (0xb0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 177 (0xb1): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollUp) + +# evdev 178 (0xb2): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollDown) + +# evdev 179 (0xb3): no evdev -> QKeyCode mapping (xkb keysym parenleft) + +# evdev 180 (0xb4): no evdev -> QKeyCode mapping (xkb keysym parenright) + +# evdev 181 (0xb5): no evdev -> QKeyCode mapping (xkb keysym XF86New) + +# evdev 182 (0xb6): no evdev -> QKeyCode mapping (xkb keysym Redo) + +# evdev 183 (0xb7): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 184 (0xb8): no evdev -> QKeyCode mapping (xkb keysym XF86Launch5) + +# evdev 185 (0xb9): no evdev -> QKeyCode mapping (xkb keysym XF86Launch6) + +# evdev 186 (0xba): no evdev -> QKeyCode mapping (xkb keysym XF86Launch7) + +# evdev 187 (0xbb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch8) + +# evdev 188 (0xbc): no evdev -> QKeyCode mapping (xkb keysym XF86Launch9) + +# evdev 189 (0xbd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 190 (0xbe): no evdev -> QKeyCode mapping (xkb keysym XF86AudioMicMute) + +# evdev 191 (0xbf): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadToggle) + +# evdev 192 (0xc0): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOn) + +# evdev 193 (0xc1): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOff) + +# evdev 194 (0xc2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 195 (0xc3): no evdev -> QKeyCode mapping (xkb keysym Mode_switch) + +# evdev 196 (0xc4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 197 (0xc5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 198 (0xc6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 199 (0xc7): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 200 (0xc8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 201 (0xc9): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPause) + +# evdev 202 (0xca): no evdev -> QKeyCode mapping (xkb keysym XF86Launch3) + +# evdev 203 (0xcb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch4) + +# evdev 204 (0xcc): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchB) + +# evdev 205 (0xcd): no evdev -> QKeyCode mapping (xkb keysym XF86Suspend) + +# evdev 206 (0xce): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 207 (0xcf): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 208 (0xd0): no evdev -> QKeyCode mapping (xkb keysym XF86AudioForward) + +# evdev 209 (0xd1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 210 (0xd2): no evdev -> QKeyCode mapping (xkb keysym Print) + +# evdev 211 (0xd3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 212 (0xd4): no evdev -> QKeyCode mapping (xkb keysym XF86WebCam) + +# evdev 213 (0xd5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 214 (0xd6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 215 (0xd7): no evdev -> QKeyCode mapping (xkb keysym XF86Mail) + +# evdev 216 (0xd8): no evdev -> QKeyCode mapping (xkb keysym XF86Messenger) + +# evdev 217 (0xd9): no evdev -> QKeyCode mapping (xkb keysym XF86Search) + +# evdev 218 (0xda): no evdev -> QKeyCode mapping (xkb keysym XF86Go) + +# evdev 219 (0xdb): no evdev -> QKeyCode mapping (xkb keysym XF86Finance) + +# evdev 220 (0xdc): no evdev -> QKeyCode mapping (xkb keysym XF86Game) + +# evdev 221 (0xdd): no evdev -> QKeyCode mapping (xkb keysym XF86Shop) + +# evdev 222 (0xde): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 223 (0xdf): no evdev -> QKeyCode mapping (xkb keysym Cancel) + +# evdev 224 (0xe0): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessDown) + +# evdev 225 (0xe1): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessUp) + +# evdev 226 (0xe2), QKeyCode "mediaselect", number 0xed +XF86AudioMedia 0xed + +# evdev 227 (0xe3): no evdev -> QKeyCode mapping (xkb keysym XF86Display) + +# evdev 228 (0xe4): no evdev -> QKeyCode mapping (xkb keysym XF86KbdLightOnOff) + +# evdev 229 (0xe5): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessDown) + +# evdev 230 (0xe6): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessUp) + +# evdev 231 (0xe7): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 232 (0xe8): no evdev -> QKeyCode mapping (xkb keysym XF86Reply) + +# evdev 233 (0xe9): no evdev -> QKeyCode mapping (xkb keysym XF86MailForward) + +# evdev 234 (0xea): no evdev -> QKeyCode mapping (xkb keysym XF86Save) + +# evdev 235 (0xeb): no evdev -> QKeyCode mapping (xkb keysym XF86Documents) + +# evdev 236 (0xec): no evdev -> QKeyCode mapping (xkb keysym XF86Battery) + +# evdev 237 (0xed): no evdev -> QKeyCode mapping (xkb keysym XF86Bluetooth) + +# evdev 238 (0xee): no evdev -> QKeyCode mapping (xkb keysym XF86WLAN) + +# evdev 239 (0xef): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 240 (0xf0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 241 (0xf1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 242 (0xf2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 243 (0xf3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 244 (0xf4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# +# quirks section start +# +# Sometimes multiple keysyms map to the same keycodes. +# The keycode -> keysym lookup finds only one of the +# keysyms. So append them here. +# + +Print 0x54 +Sys_Req 0x54 +Execute 0x54 +KP_Decimal 0x53 numlock +KP_Separator 0x53 numlock +Alt_R 0xb8 +ISO_Level3_Shift 0xb8 +Mode_switch 0xb8 + +# quirks section end diff --git a/app/src/main/assets/roms/keymaps/et b/app/src/main/assets/roms/keymaps/et new file mode 100644 index 0000000..7bed679 --- /dev/null +++ b/app/src/main/assets/roms/keymaps/et @@ -0,0 +1,745 @@ +# +# generated by qemu-keymap +# model : pc105 +# layout : et +# variant : - +# options : - + +# name: "Amharic" + +# modifiers +# 0: Shift +# 1: Lock +# 2: Control +# 3: Mod1 +# 4: Mod2 +# 5: Mod3 +# 6: Mod4 +# 7: Mod5 +# 8: NumLock +# 9: Alt +# 10: LevelThree +# 11: LAlt +# 12: RAlt +# 13: RControl +# 14: LControl +# 15: ScrollLock +# 16: LevelFive +# 17: AltGr +# 18: Meta +# 19: Super +# 20: Hyper + +# evdev 1 (0x1), QKeyCode "esc", number 0x1 +Escape 0x01 + +# evdev 2 (0x2), QKeyCode "1", number 0x2 +U1369 0x02 +U1372 0x02 shift + +# evdev 3 (0x3), QKeyCode "2", number 0x3 +U136A 0x03 +U1373 0x03 shift + +# evdev 4 (0x4), QKeyCode "3", number 0x4 +U136B 0x04 +U1374 0x04 shift + +# evdev 5 (0x5), QKeyCode "4", number 0x5 +U136C 0x05 +U1375 0x05 shift + +# evdev 6 (0x6), QKeyCode "5", number 0x6 +U136D 0x06 +U1376 0x06 shift + +# evdev 7 (0x7), QKeyCode "6", number 0x7 +U136E 0x07 +U1377 0x07 shift + +# evdev 8 (0x8), QKeyCode "7", number 0x8 +U136F 0x08 +U1378 0x08 shift + +# evdev 9 (0x9), QKeyCode "8", number 0x9 +U1370 0x09 +U1379 0x09 shift + +# evdev 10 (0xa), QKeyCode "9", number 0xa +U1371 0x0a +U137A 0x0a shift + +# evdev 11 (0xb), QKeyCode "0", number 0xb +U137B 0x0b +U137C 0x0b shift + +# evdev 12 (0xc), QKeyCode "minus", number 0xc +minus 0x0c +underscore 0x0c shift + +# evdev 13 (0xd), QKeyCode "equal", number 0xd +equal 0x0d +plus 0x0d shift + +# evdev 14 (0xe), QKeyCode "backspace", number 0xe +BackSpace 0x0e + +# evdev 15 (0xf), QKeyCode "tab", number 0xf +Tab 0x0f +ISO_Left_Tab 0x0f shift + +# evdev 16 (0x10), QKeyCode "q", number 0x10 +U1240 0x10 +U1250 0x10 shift + +# evdev 17 (0x11), QKeyCode "w", number 0x11 +U12C8 0x11 +VoidSymbol 0x11 shift + +# evdev 18 (0x12), QKeyCode "e", number 0x12 +UFE69 0x12 +UFE70 0x12 shift + +# evdev 19 (0x13), QKeyCode "r", number 0x13 +U1228 0x13 +VoidSymbol 0x13 shift + +# evdev 20 (0x14), QKeyCode "t", number 0x14 +U1270 0x14 +U1320 0x14 shift + +# evdev 21 (0x15), QKeyCode "y", number 0x15 +U12E8 0x15 +VoidSymbol 0x15 shift + +# evdev 22 (0x16), QKeyCode "u", number 0x16 +UFE75 0x16 +UFE76 0x16 shift + +# evdev 23 (0x17), QKeyCode "i", number 0x17 +UFE71 0x17 +UFE72 0x17 shift + +# evdev 24 (0x18), QKeyCode "o", number 0x18 +UFE73 0x18 +UFE74 0x18 shift + +# evdev 25 (0x19), QKeyCode "p", number 0x19 +U1350 0x19 +U1330 0x19 shift + +# evdev 26 (0x1a), QKeyCode "bracket_left", number 0x1a +U1340 0x1a +U1338 0x1a shift + +# evdev 27 (0x1b), QKeyCode "bracket_right", number 0x1b +U1328 0x1b +U1280 0x1b shift + +# evdev 28 (0x1c), QKeyCode "ret", number 0x1c +Return 0x1c + +# evdev 29 (0x1d), QKeyCode "ctrl", number 0x1d +Control_L 0x1d + +# evdev 30 (0x1e), QKeyCode "a", number 0x1e +UFE67 0x1e +UFE68 0x1e shift + +# evdev 31 (0x1f), QKeyCode "s", number 0x1f +U1230 0x1f +U1220 0x1f shift + +# evdev 32 (0x20), QKeyCode "d", number 0x20 +U12F0 0x20 +U12F8 0x20 shift + +# evdev 33 (0x21), QKeyCode "f", number 0x21 +U1348 0x21 +VoidSymbol 0x21 shift + +# evdev 34 (0x22), QKeyCode "g", number 0x22 +U1308 0x22 +U1318 0x22 shift + +# evdev 35 (0x23), QKeyCode "h", number 0x23 +U1200 0x23 +U1210 0x23 shift + +# evdev 36 (0x24), QKeyCode "j", number 0x24 +U1300 0x24 +VoidSymbol 0x24 shift + +# evdev 37 (0x25), QKeyCode "k", number 0x25 +U12A8 0x25 +U12B8 0x25 shift + +# evdev 38 (0x26), QKeyCode "l", number 0x26 +U1208 0x26 +VoidSymbol 0x26 shift + +# evdev 39 (0x27), QKeyCode "semicolon", number 0x27 +U1362 0x27 +U1361 0x27 shift + +# evdev 40 (0x28), QKeyCode "apostrophe", number 0x28 +U1366 0x28 +U1365 0x28 shift + +# evdev 41 (0x29), QKeyCode "grave_accent", number 0x29 + +# evdev 42 (0x2a), QKeyCode "shift", number 0x2a +Shift_L 0x2a + +# evdev 43 (0x2b), QKeyCode "backslash", number 0x2b +VoidSymbol 0x2b +U2010 0x2b shift + +# evdev 44 (0x2c), QKeyCode "z", number 0x2c +U12D8 0x2c +U12E0 0x2c shift + +# evdev 45 (0x2d), QKeyCode "x", number 0x2d +U12A0 0x2d +U12D0 0x2d shift + +# evdev 46 (0x2e), QKeyCode "c", number 0x2e +U1278 0x2e +UFE78 0x2e shift + +# evdev 47 (0x2f), QKeyCode "v", number 0x2f +U1238 0x2f +U1268 0x2f shift + +# evdev 48 (0x30), QKeyCode "b", number 0x30 +U1260 0x30 +VoidSymbol 0x30 shift + +# evdev 49 (0x31), QKeyCode "n", number 0x31 +U1290 0x31 +U1298 0x31 shift + +# evdev 50 (0x32), QKeyCode "m", number 0x32 +U1218 0x32 +VoidSymbol 0x32 shift + +# evdev 51 (0x33), QKeyCode "comma", number 0x33 +U1363 0x33 +VoidSymbol 0x33 shift + +# evdev 52 (0x34), QKeyCode "dot", number 0x34 +U1364 0x34 +VoidSymbol 0x34 shift + +# evdev 53 (0x35), QKeyCode "slash", number 0x35 +U1367 0x35 +question 0x35 shift + +# evdev 54 (0x36), QKeyCode "shift_r", number 0x36 +Shift_R 0x36 + +# evdev 55 (0x37), QKeyCode "kp_multiply", number 0x37 +KP_Multiply 0x37 + +# evdev 56 (0x38), QKeyCode "alt", number 0x38 +Alt_L 0x38 +Meta_L 0x38 shift + +# evdev 57 (0x39), QKeyCode "spc", number 0x39 +space 0x39 + +# evdev 58 (0x3a), QKeyCode "caps_lock", number 0x3a +Caps_Lock 0x3a + +# evdev 59 (0x3b), QKeyCode "f1", number 0x3b +F1 0x3b + +# evdev 60 (0x3c), QKeyCode "f2", number 0x3c +F2 0x3c + +# evdev 61 (0x3d), QKeyCode "f3", number 0x3d +F3 0x3d + +# evdev 62 (0x3e), QKeyCode "f4", number 0x3e +F4 0x3e + +# evdev 63 (0x3f), QKeyCode "f5", number 0x3f +F5 0x3f + +# evdev 64 (0x40), QKeyCode "f6", number 0x40 +F6 0x40 + +# evdev 65 (0x41), QKeyCode "f7", number 0x41 +F7 0x41 + +# evdev 66 (0x42), QKeyCode "f8", number 0x42 +F8 0x42 + +# evdev 67 (0x43), QKeyCode "f9", number 0x43 +F9 0x43 + +# evdev 68 (0x44), QKeyCode "f10", number 0x44 +F10 0x44 + +# evdev 69 (0x45), QKeyCode "num_lock", number 0x45 +Num_Lock 0x45 + +# evdev 70 (0x46), QKeyCode "scroll_lock", number 0x46 +Scroll_Lock 0x46 + +# evdev 71 (0x47), QKeyCode "kp_7", number 0x47 +KP_Home 0x47 +KP_7 0x47 numlock + +# evdev 72 (0x48), QKeyCode "kp_8", number 0x48 +KP_Up 0x48 +KP_8 0x48 numlock + +# evdev 73 (0x49), QKeyCode "kp_9", number 0x49 +KP_Prior 0x49 +KP_9 0x49 numlock + +# evdev 74 (0x4a), QKeyCode "kp_subtract", number 0x4a +KP_Subtract 0x4a + +# evdev 75 (0x4b), QKeyCode "kp_4", number 0x4b +KP_Left 0x4b +KP_4 0x4b numlock + +# evdev 76 (0x4c), QKeyCode "kp_5", number 0x4c +KP_Begin 0x4c +KP_5 0x4c numlock + +# evdev 77 (0x4d), QKeyCode "kp_6", number 0x4d +KP_Right 0x4d +KP_6 0x4d numlock + +# evdev 78 (0x4e), QKeyCode "kp_add", number 0x4e +KP_Add 0x4e + +# evdev 79 (0x4f), QKeyCode "kp_1", number 0x4f +KP_End 0x4f +KP_1 0x4f numlock + +# evdev 80 (0x50), QKeyCode "kp_2", number 0x50 +KP_Down 0x50 +KP_2 0x50 numlock + +# evdev 81 (0x51), QKeyCode "kp_3", number 0x51 +KP_Next 0x51 +KP_3 0x51 numlock + +# evdev 82 (0x52), QKeyCode "kp_0", number 0x52 +KP_Insert 0x52 +KP_0 0x52 numlock + +# evdev 83 (0x53), QKeyCode "kp_decimal", number 0x53 +KP_Delete 0x53 +KP_Decimal 0x53 numlock + +# evdev 84 (0x54): no evdev -> QKeyCode mapping (xkb keysym ISO_Level3_Shift) + +# evdev 85 (0x55): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 86 (0x56), QKeyCode "less", number 0x56 +less 0x56 +greater 0x56 shift +bar 0x56 altgr +brokenbar 0x56 shift altgr + +# evdev 87 (0x57), QKeyCode "f11", number 0x57 +F11 0x57 + +# evdev 88 (0x58), QKeyCode "f12", number 0x58 +F12 0x58 + +# evdev 89 (0x59), QKeyCode "ro", number 0x73 + +# evdev 90 (0x5a): no evdev -> QKeyCode mapping (xkb keysym Katakana) + +# evdev 91 (0x5b), QKeyCode "hiragana", number 0x77 +Hiragana 0x77 + +# evdev 92 (0x5c), QKeyCode "henkan", number 0x79 +Henkan_Mode 0x79 + +# evdev 93 (0x5d): no evdev -> QKeyCode mapping (xkb keysym Hiragana_Katakana) + +# evdev 94 (0x5e): no evdev -> QKeyCode mapping (xkb keysym Muhenkan) + +# evdev 95 (0x5f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 96 (0x60), QKeyCode "kp_enter", number 0x9c +KP_Enter 0x9c + +# evdev 97 (0x61), QKeyCode "ctrl_r", number 0x9d +Control_R 0x9d + +# evdev 98 (0x62), QKeyCode "kp_divide", number 0xb5 +KP_Divide 0xb5 + +# evdev 99 (0x63), QKeyCode "sysrq", number 0x54 +Print 0x54 + +# evdev 100 (0x64), QKeyCode "alt_r", number 0xb8 +Alt_R 0xb8 +Meta_R 0xb8 shift + +# evdev 101 (0x65), QKeyCode "lf", number 0x5b +Linefeed 0x5b + +# evdev 102 (0x66), QKeyCode "home", number 0xc7 +Home 0xc7 + +# evdev 103 (0x67), QKeyCode "up", number 0xc8 +Up 0xc8 + +# evdev 104 (0x68), QKeyCode "pgup", number 0xc9 +Prior 0xc9 + +# evdev 105 (0x69), QKeyCode "left", number 0xcb +Left 0xcb + +# evdev 106 (0x6a), QKeyCode "right", number 0xcd +Right 0xcd + +# evdev 107 (0x6b), QKeyCode "end", number 0xcf +End 0xcf + +# evdev 108 (0x6c), QKeyCode "down", number 0xd0 +Down 0xd0 + +# evdev 109 (0x6d), QKeyCode "pgdn", number 0xd1 +Next 0xd1 + +# evdev 110 (0x6e), QKeyCode "insert", number 0xd2 +Insert 0xd2 + +# evdev 111 (0x6f), QKeyCode "delete", number 0xd3 +Delete 0xd3 + +# evdev 112 (0x70): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 113 (0x71), QKeyCode "audiomute", number 0xa0 +XF86AudioMute 0xa0 + +# evdev 114 (0x72), QKeyCode "volumedown", number 0xae +XF86AudioLowerVolume 0xae + +# evdev 115 (0x73), QKeyCode "volumeup", number 0xb0 +XF86AudioRaiseVolume 0xb0 + +# evdev 116 (0x74), QKeyCode "power", number 0xde +XF86PowerOff 0xde + +# evdev 117 (0x75), QKeyCode "kp_equals", number 0x59 +KP_Equal 0x59 + +# evdev 118 (0x76): no evdev -> QKeyCode mapping (xkb keysym plusminus) + +# evdev 119 (0x77), QKeyCode "pause", number 0xc6 +Pause 0xc6 + +# evdev 120 (0x78): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchA) + +# evdev 121 (0x79), QKeyCode "kp_comma", number 0x7e +KP_Decimal 0x7e + +# evdev 122 (0x7a): no evdev -> QKeyCode mapping (xkb keysym Hangul) + +# evdev 123 (0x7b): no evdev -> QKeyCode mapping (xkb keysym Hangul_Hanja) + +# evdev 124 (0x7c), QKeyCode "yen", number 0x7d + +# evdev 125 (0x7d), QKeyCode "meta_l", number 0xdb +Super_L 0xdb + +# evdev 126 (0x7e), QKeyCode "meta_r", number 0xdc +Super_R 0xdc + +# evdev 127 (0x7f), QKeyCode "compose", number 0xdd +Menu 0xdd + +# evdev 128 (0x80), QKeyCode "stop", number 0xe8 +Cancel 0xe8 + +# evdev 129 (0x81), QKeyCode "again", number 0x85 +Redo 0x85 + +# evdev 130 (0x82), QKeyCode "props", number 0x86 +SunProps 0x86 + +# evdev 131 (0x83), QKeyCode "undo", number 0x87 +Undo 0x87 + +# evdev 132 (0x84), QKeyCode "front", number 0x8c +SunFront 0x8c + +# evdev 133 (0x85), QKeyCode "copy", number 0xf8 +XF86Copy 0xf8 + +# evdev 134 (0x86), QKeyCode "open", number 0x64 +XF86Open 0x64 + +# evdev 135 (0x87), QKeyCode "paste", number 0x65 +XF86Paste 0x65 + +# evdev 136 (0x88), QKeyCode "find", number 0xc1 +Find 0xc1 + +# evdev 137 (0x89), QKeyCode "cut", number 0xbc +XF86Cut 0xbc + +# evdev 138 (0x8a), QKeyCode "help", number 0xf5 +Help 0xf5 + +# evdev 139 (0x8b), QKeyCode "menu", number 0x9e +XF86MenuKB 0x9e + +# evdev 140 (0x8c), QKeyCode "calculator", number 0xa1 +XF86Calculator 0xa1 + +# evdev 141 (0x8d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 142 (0x8e), QKeyCode "sleep", number 0xdf +XF86Sleep 0xdf + +# evdev 143 (0x8f), QKeyCode "wake", number 0xe3 +XF86WakeUp 0xe3 + +# evdev 144 (0x90): no evdev -> QKeyCode mapping (xkb keysym XF86Explorer) + +# evdev 145 (0x91): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 146 (0x92): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 147 (0x93): no evdev -> QKeyCode mapping (xkb keysym XF86Xfer) + +# evdev 148 (0x94): no evdev -> QKeyCode mapping (xkb keysym XF86Launch1) + +# evdev 149 (0x95): no evdev -> QKeyCode mapping (xkb keysym XF86Launch2) + +# evdev 150 (0x96): no evdev -> QKeyCode mapping (xkb keysym XF86WWW) + +# evdev 151 (0x97): no evdev -> QKeyCode mapping (xkb keysym XF86DOS) + +# evdev 152 (0x98): no evdev -> QKeyCode mapping (xkb keysym XF86ScreenSaver) + +# evdev 153 (0x99): no evdev -> QKeyCode mapping (xkb keysym XF86RotateWindows) + +# evdev 154 (0x9a): no evdev -> QKeyCode mapping (xkb keysym XF86TaskPane) + +# evdev 155 (0x9b), QKeyCode "mail", number 0xec +XF86Mail 0xec + +# evdev 156 (0x9c), QKeyCode "ac_bookmarks", number 0xe6 +XF86Favorites 0xe6 + +# evdev 157 (0x9d), QKeyCode "computer", number 0xeb +XF86MyComputer 0xeb + +# evdev 158 (0x9e), QKeyCode "ac_back", number 0xea +XF86Back 0xea + +# evdev 159 (0x9f), QKeyCode "ac_forward", number 0xe9 +XF86Forward 0xe9 + +# evdev 160 (0xa0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 161 (0xa1): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 162 (0xa2): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 163 (0xa3), QKeyCode "audionext", number 0x99 +XF86AudioNext 0x99 + +# evdev 164 (0xa4), QKeyCode "audioplay", number 0xa2 +XF86AudioPlay 0xa2 +XF86AudioPause 0xa2 shift + +# evdev 165 (0xa5), QKeyCode "audioprev", number 0x90 +XF86AudioPrev 0x90 + +# evdev 166 (0xa6), QKeyCode "audiostop", number 0xa4 +XF86AudioStop 0xa4 +XF86Eject 0xa4 shift + +# evdev 167 (0xa7): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRecord) + +# evdev 168 (0xa8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRewind) + +# evdev 169 (0xa9): no evdev -> QKeyCode mapping (xkb keysym XF86Phone) + +# evdev 170 (0xaa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 171 (0xab): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 172 (0xac), QKeyCode "ac_home", number 0xb2 +XF86HomePage 0xb2 + +# evdev 173 (0xad), QKeyCode "ac_refresh", number 0xe7 +XF86Reload 0xe7 + +# evdev 174 (0xae): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 175 (0xaf): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 176 (0xb0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 177 (0xb1): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollUp) + +# evdev 178 (0xb2): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollDown) + +# evdev 179 (0xb3): no evdev -> QKeyCode mapping (xkb keysym parenleft) + +# evdev 180 (0xb4): no evdev -> QKeyCode mapping (xkb keysym parenright) + +# evdev 181 (0xb5): no evdev -> QKeyCode mapping (xkb keysym XF86New) + +# evdev 182 (0xb6): no evdev -> QKeyCode mapping (xkb keysym Redo) + +# evdev 183 (0xb7): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 184 (0xb8): no evdev -> QKeyCode mapping (xkb keysym XF86Launch5) + +# evdev 185 (0xb9): no evdev -> QKeyCode mapping (xkb keysym XF86Launch6) + +# evdev 186 (0xba): no evdev -> QKeyCode mapping (xkb keysym XF86Launch7) + +# evdev 187 (0xbb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch8) + +# evdev 188 (0xbc): no evdev -> QKeyCode mapping (xkb keysym XF86Launch9) + +# evdev 189 (0xbd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 190 (0xbe): no evdev -> QKeyCode mapping (xkb keysym XF86AudioMicMute) + +# evdev 191 (0xbf): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadToggle) + +# evdev 192 (0xc0): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOn) + +# evdev 193 (0xc1): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOff) + +# evdev 194 (0xc2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 195 (0xc3): no evdev -> QKeyCode mapping (xkb keysym Mode_switch) + +# evdev 196 (0xc4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 197 (0xc5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 198 (0xc6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 199 (0xc7): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 200 (0xc8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 201 (0xc9): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPause) + +# evdev 202 (0xca): no evdev -> QKeyCode mapping (xkb keysym XF86Launch3) + +# evdev 203 (0xcb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch4) + +# evdev 204 (0xcc): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchB) + +# evdev 205 (0xcd): no evdev -> QKeyCode mapping (xkb keysym XF86Suspend) + +# evdev 206 (0xce): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 207 (0xcf): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 208 (0xd0): no evdev -> QKeyCode mapping (xkb keysym XF86AudioForward) + +# evdev 209 (0xd1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 210 (0xd2): no evdev -> QKeyCode mapping (xkb keysym Print) + +# evdev 211 (0xd3): no evdev -> QKeyCode mapping (xkb keysym ISO_Next_Group) + +# evdev 212 (0xd4): no evdev -> QKeyCode mapping (xkb keysym XF86WebCam) + +# evdev 213 (0xd5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 214 (0xd6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 215 (0xd7): no evdev -> QKeyCode mapping (xkb keysym XF86Mail) + +# evdev 216 (0xd8): no evdev -> QKeyCode mapping (xkb keysym XF86Messenger) + +# evdev 217 (0xd9): no evdev -> QKeyCode mapping (xkb keysym XF86Search) + +# evdev 218 (0xda): no evdev -> QKeyCode mapping (xkb keysym XF86Go) + +# evdev 219 (0xdb): no evdev -> QKeyCode mapping (xkb keysym XF86Finance) + +# evdev 220 (0xdc): no evdev -> QKeyCode mapping (xkb keysym XF86Game) + +# evdev 221 (0xdd): no evdev -> QKeyCode mapping (xkb keysym XF86Shop) + +# evdev 222 (0xde): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 223 (0xdf): no evdev -> QKeyCode mapping (xkb keysym Cancel) + +# evdev 224 (0xe0): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessDown) + +# evdev 225 (0xe1): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessUp) + +# evdev 226 (0xe2), QKeyCode "mediaselect", number 0xed +XF86AudioMedia 0xed + +# evdev 227 (0xe3): no evdev -> QKeyCode mapping (xkb keysym XF86Display) + +# evdev 228 (0xe4): no evdev -> QKeyCode mapping (xkb keysym XF86KbdLightOnOff) + +# evdev 229 (0xe5): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessDown) + +# evdev 230 (0xe6): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessUp) + +# evdev 231 (0xe7): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 232 (0xe8): no evdev -> QKeyCode mapping (xkb keysym XF86Reply) + +# evdev 233 (0xe9): no evdev -> QKeyCode mapping (xkb keysym XF86MailForward) + +# evdev 234 (0xea): no evdev -> QKeyCode mapping (xkb keysym XF86Save) + +# evdev 235 (0xeb): no evdev -> QKeyCode mapping (xkb keysym XF86Documents) + +# evdev 236 (0xec): no evdev -> QKeyCode mapping (xkb keysym XF86Battery) + +# evdev 237 (0xed): no evdev -> QKeyCode mapping (xkb keysym XF86Bluetooth) + +# evdev 238 (0xee): no evdev -> QKeyCode mapping (xkb keysym XF86WLAN) + +# evdev 239 (0xef): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 240 (0xf0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 241 (0xf1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 242 (0xf2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 243 (0xf3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 244 (0xf4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# +# quirks section start +# +# Sometimes multiple keysyms map to the same keycodes. +# The keycode -> keysym lookup finds only one of the +# keysyms. So append them here. +# + +Print 0x54 +Sys_Req 0x54 +Execute 0x54 +KP_Decimal 0x53 numlock +KP_Separator 0x53 numlock +Alt_R 0xb8 +ISO_Level3_Shift 0xb8 +Mode_switch 0xb8 + +# quirks section end diff --git a/app/src/main/assets/roms/keymaps/fi b/app/src/main/assets/roms/keymaps/fi new file mode 100644 index 0000000..1c7653d --- /dev/null +++ b/app/src/main/assets/roms/keymaps/fi @@ -0,0 +1,810 @@ +# +# generated by qemu-keymap +# model : pc105 +# layout : fi +# variant : - +# options : - + +# name: "Finnish" + +# modifiers +# 0: Shift +# 1: Lock +# 2: Control +# 3: Mod1 +# 4: Mod2 +# 5: Mod3 +# 6: Mod4 +# 7: Mod5 +# 8: NumLock +# 9: Alt +# 10: LevelThree +# 11: LAlt +# 12: RAlt +# 13: RControl +# 14: LControl +# 15: ScrollLock +# 16: LevelFive +# 17: AltGr +# 18: Meta +# 19: Super +# 20: Hyper + +# evdev 1 (0x1), QKeyCode "esc", number 0x1 +Escape 0x01 + +# evdev 2 (0x2), QKeyCode "1", number 0x2 +1 0x02 +exclam 0x02 shift +exclamdown 0x02 shift altgr + +# evdev 3 (0x3), QKeyCode "2", number 0x3 +2 0x03 +quotedbl 0x03 shift +at 0x03 altgr +rightdoublequotemark 0x03 shift altgr + +# evdev 4 (0x4), QKeyCode "3", number 0x4 +3 0x04 +numbersign 0x04 shift +sterling 0x04 altgr +guillemotright 0x04 shift altgr + +# evdev 5 (0x5), QKeyCode "4", number 0x5 +4 0x05 +currency 0x05 shift +dollar 0x05 altgr +guillemotleft 0x05 shift altgr + +# evdev 6 (0x6), QKeyCode "5", number 0x6 +5 0x06 +percent 0x06 shift +permille 0x06 altgr +leftdoublequotemark 0x06 shift altgr + +# evdev 7 (0x7), QKeyCode "6", number 0x7 +6 0x07 +ampersand 0x07 shift +singlelowquotemark 0x07 altgr +doublelowquotemark 0x07 shift altgr + +# evdev 8 (0x8), QKeyCode "7", number 0x8 +7 0x08 +slash 0x08 shift +braceleft 0x08 altgr + +# evdev 9 (0x9), QKeyCode "8", number 0x9 +8 0x09 +parenleft 0x09 shift +bracketleft 0x09 altgr +less 0x09 shift altgr + +# evdev 10 (0xa), QKeyCode "9", number 0xa +9 0x0a +parenright 0x0a shift +bracketright 0x0a altgr +greater 0x0a shift altgr + +# evdev 11 (0xb), QKeyCode "0", number 0xb +0 0x0b +equal 0x0b shift +braceright 0x0b altgr +degree 0x0b shift altgr + +# evdev 12 (0xc), QKeyCode "minus", number 0xc +plus 0x0c +question 0x0c shift +backslash 0x0c altgr +questiondown 0x0c shift altgr + +# evdev 13 (0xd), QKeyCode "equal", number 0xd +dead_acute 0x0d +dead_grave 0x0d shift +dead_cedilla 0x0d altgr +dead_ogonek 0x0d shift altgr + +# evdev 14 (0xe), QKeyCode "backspace", number 0xe +BackSpace 0x0e + +# evdev 15 (0xf), QKeyCode "tab", number 0xf +Tab 0x0f +ISO_Left_Tab 0x0f shift + +# evdev 16 (0x10), QKeyCode "q", number 0x10 +q 0x10 +Q 0x10 shift + +# evdev 17 (0x11), QKeyCode "w", number 0x11 +w 0x11 +W 0x11 shift + +# evdev 18 (0x12), QKeyCode "e", number 0x12 +e 0x12 +E 0x12 shift +EuroSign 0x12 altgr + +# evdev 19 (0x13), QKeyCode "r", number 0x13 +r 0x13 +R 0x13 shift + +# evdev 20 (0x14), QKeyCode "t", number 0x14 +t 0x14 +T 0x14 shift +thorn 0x14 altgr +THORN 0x14 shift altgr + +# evdev 21 (0x15), QKeyCode "y", number 0x15 +y 0x15 +Y 0x15 shift + +# evdev 22 (0x16), QKeyCode "u", number 0x16 +u 0x16 +U 0x16 shift + +# evdev 23 (0x17), QKeyCode "i", number 0x17 +i 0x17 +I 0x17 shift +idotless 0x17 altgr +bar 0x17 shift altgr + +# evdev 24 (0x18), QKeyCode "o", number 0x18 +o 0x18 +O 0x18 shift +oe 0x18 altgr +OE 0x18 shift altgr + +# evdev 25 (0x19), QKeyCode "p", number 0x19 +p 0x19 +P 0x19 shift +dead_horn 0x19 altgr +dead_hook 0x19 shift altgr + +# evdev 26 (0x1a), QKeyCode "bracket_left", number 0x1a +aring 0x1a +Aring 0x1a shift +dead_doubleacute 0x1a altgr +dead_abovering 0x1a shift altgr + +# evdev 27 (0x1b), QKeyCode "bracket_right", number 0x1b +dead_diaeresis 0x1b +dead_circumflex 0x1b shift +dead_tilde 0x1b altgr +dead_macron 0x1b shift altgr + +# evdev 28 (0x1c), QKeyCode "ret", number 0x1c +Return 0x1c + +# evdev 29 (0x1d), QKeyCode "ctrl", number 0x1d +Control_L 0x1d + +# evdev 30 (0x1e), QKeyCode "a", number 0x1e +a 0x1e +A 0x1e shift +schwa 0x1e altgr +SCHWA 0x1e shift altgr + +# evdev 31 (0x1f), QKeyCode "s", number 0x1f +s 0x1f +S 0x1f shift +ssharp 0x1f altgr + +# evdev 32 (0x20), QKeyCode "d", number 0x20 +d 0x20 +D 0x20 shift +eth 0x20 altgr +ETH 0x20 shift altgr + +# evdev 33 (0x21), QKeyCode "f", number 0x21 +f 0x21 +F 0x21 shift + +# evdev 34 (0x22), QKeyCode "g", number 0x22 +g 0x22 +G 0x22 shift + +# evdev 35 (0x23), QKeyCode "h", number 0x23 +h 0x23 +H 0x23 shift + +# evdev 36 (0x24), QKeyCode "j", number 0x24 +j 0x24 +J 0x24 shift + +# evdev 37 (0x25), QKeyCode "k", number 0x25 +k 0x25 +K 0x25 shift +kra 0x25 altgr + +# evdev 38 (0x26), QKeyCode "l", number 0x26 +l 0x26 +L 0x26 shift +dead_stroke 0x26 altgr + +# evdev 39 (0x27), QKeyCode "semicolon", number 0x27 +odiaeresis 0x27 +Odiaeresis 0x27 shift +oslash 0x27 altgr +Oslash 0x27 shift altgr + +# evdev 40 (0x28), QKeyCode "apostrophe", number 0x28 +adiaeresis 0x28 +Adiaeresis 0x28 shift +ae 0x28 altgr +AE 0x28 shift altgr + +# evdev 41 (0x29), QKeyCode "grave_accent", number 0x29 +section 0x29 +onehalf 0x29 shift +dead_stroke 0x29 altgr + +# evdev 42 (0x2a), QKeyCode "shift", number 0x2a +Shift_L 0x2a + +# evdev 43 (0x2b), QKeyCode "backslash", number 0x2b +apostrophe 0x2b +asterisk 0x2b shift +dead_caron 0x2b altgr +dead_breve 0x2b shift altgr + +# evdev 44 (0x2c), QKeyCode "z", number 0x2c +z 0x2c +Z 0x2c shift +ezh 0x2c altgr +EZH 0x2c shift altgr + +# evdev 45 (0x2d), QKeyCode "x", number 0x2d +x 0x2d +X 0x2d shift +multiply 0x2d altgr +periodcentered 0x2d shift altgr + +# evdev 46 (0x2e), QKeyCode "c", number 0x2e +c 0x2e +C 0x2e shift + +# evdev 47 (0x2f), QKeyCode "v", number 0x2f +v 0x2f +V 0x2f shift + +# evdev 48 (0x30), QKeyCode "b", number 0x30 +b 0x30 +B 0x30 shift + +# evdev 49 (0x31), QKeyCode "n", number 0x31 +n 0x31 +N 0x31 shift +eng 0x31 altgr +ENG 0x31 shift altgr + +# evdev 50 (0x32), QKeyCode "m", number 0x32 +m 0x32 +M 0x32 shift +mu 0x32 altgr +emdash 0x32 shift altgr + +# evdev 51 (0x33), QKeyCode "comma", number 0x33 +comma 0x33 +semicolon 0x33 shift +rightsinglequotemark 0x33 altgr +leftsinglequotemark 0x33 shift altgr + +# evdev 52 (0x34), QKeyCode "dot", number 0x34 +period 0x34 +colon 0x34 shift +dead_belowdot 0x34 altgr +dead_abovedot 0x34 shift altgr + +# evdev 53 (0x35), QKeyCode "slash", number 0x35 +minus 0x35 +underscore 0x35 shift +endash 0x35 altgr +dead_belowcomma 0x35 shift altgr + +# evdev 54 (0x36), QKeyCode "shift_r", number 0x36 +Shift_R 0x36 + +# evdev 55 (0x37), QKeyCode "kp_multiply", number 0x37 +KP_Multiply 0x37 + +# evdev 56 (0x38), QKeyCode "alt", number 0x38 +Alt_L 0x38 +Meta_L 0x38 shift + +# evdev 57 (0x39), QKeyCode "spc", number 0x39 +space 0x39 +nobreakspace 0x39 altgr + +# evdev 58 (0x3a), QKeyCode "caps_lock", number 0x3a +Caps_Lock 0x3a + +# evdev 59 (0x3b), QKeyCode "f1", number 0x3b +F1 0x3b + +# evdev 60 (0x3c), QKeyCode "f2", number 0x3c +F2 0x3c + +# evdev 61 (0x3d), QKeyCode "f3", number 0x3d +F3 0x3d + +# evdev 62 (0x3e), QKeyCode "f4", number 0x3e +F4 0x3e + +# evdev 63 (0x3f), QKeyCode "f5", number 0x3f +F5 0x3f + +# evdev 64 (0x40), QKeyCode "f6", number 0x40 +F6 0x40 + +# evdev 65 (0x41), QKeyCode "f7", number 0x41 +F7 0x41 + +# evdev 66 (0x42), QKeyCode "f8", number 0x42 +F8 0x42 + +# evdev 67 (0x43), QKeyCode "f9", number 0x43 +F9 0x43 + +# evdev 68 (0x44), QKeyCode "f10", number 0x44 +F10 0x44 + +# evdev 69 (0x45), QKeyCode "num_lock", number 0x45 +Num_Lock 0x45 + +# evdev 70 (0x46), QKeyCode "scroll_lock", number 0x46 +Scroll_Lock 0x46 + +# evdev 71 (0x47), QKeyCode "kp_7", number 0x47 +KP_Home 0x47 +KP_7 0x47 numlock + +# evdev 72 (0x48), QKeyCode "kp_8", number 0x48 +KP_Up 0x48 +KP_8 0x48 numlock + +# evdev 73 (0x49), QKeyCode "kp_9", number 0x49 +KP_Prior 0x49 +KP_9 0x49 numlock + +# evdev 74 (0x4a), QKeyCode "kp_subtract", number 0x4a +KP_Subtract 0x4a + +# evdev 75 (0x4b), QKeyCode "kp_4", number 0x4b +KP_Left 0x4b +KP_4 0x4b numlock + +# evdev 76 (0x4c), QKeyCode "kp_5", number 0x4c +KP_Begin 0x4c +KP_5 0x4c numlock + +# evdev 77 (0x4d), QKeyCode "kp_6", number 0x4d +KP_Right 0x4d +KP_6 0x4d numlock + +# evdev 78 (0x4e), QKeyCode "kp_add", number 0x4e +KP_Add 0x4e + +# evdev 79 (0x4f), QKeyCode "kp_1", number 0x4f +KP_End 0x4f +KP_1 0x4f numlock + +# evdev 80 (0x50), QKeyCode "kp_2", number 0x50 +KP_Down 0x50 +KP_2 0x50 numlock + +# evdev 81 (0x51), QKeyCode "kp_3", number 0x51 +KP_Next 0x51 +KP_3 0x51 numlock + +# evdev 82 (0x52), QKeyCode "kp_0", number 0x52 +KP_Insert 0x52 +KP_0 0x52 numlock + +# evdev 83 (0x53), QKeyCode "kp_decimal", number 0x53 +KP_Delete 0x53 +KP_Separator 0x53 numlock + +# evdev 84 (0x54): no evdev -> QKeyCode mapping (xkb keysym ISO_Level3_Shift) + +# evdev 85 (0x55): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 86 (0x56), QKeyCode "less", number 0x56 +less 0x56 +greater 0x56 shift +bar 0x56 altgr +brokenbar 0x56 shift altgr + +# evdev 87 (0x57), QKeyCode "f11", number 0x57 +F11 0x57 + +# evdev 88 (0x58), QKeyCode "f12", number 0x58 +F12 0x58 + +# evdev 89 (0x59), QKeyCode "ro", number 0x73 + +# evdev 90 (0x5a): no evdev -> QKeyCode mapping (xkb keysym Katakana) + +# evdev 91 (0x5b), QKeyCode "hiragana", number 0x77 +Hiragana 0x77 + +# evdev 92 (0x5c), QKeyCode "henkan", number 0x79 +Henkan_Mode 0x79 + +# evdev 93 (0x5d): no evdev -> QKeyCode mapping (xkb keysym Hiragana_Katakana) + +# evdev 94 (0x5e): no evdev -> QKeyCode mapping (xkb keysym Muhenkan) + +# evdev 95 (0x5f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 96 (0x60), QKeyCode "kp_enter", number 0x9c +KP_Enter 0x9c + +# evdev 97 (0x61), QKeyCode "ctrl_r", number 0x9d +Control_R 0x9d + +# evdev 98 (0x62), QKeyCode "kp_divide", number 0xb5 +KP_Divide 0xb5 + +# evdev 99 (0x63), QKeyCode "sysrq", number 0x54 +Print 0x54 + +# evdev 100 (0x64), QKeyCode "alt_r", number 0xb8 +ISO_Level3_Shift 0xb8 + +# evdev 101 (0x65), QKeyCode "lf", number 0x5b +Linefeed 0x5b + +# evdev 102 (0x66), QKeyCode "home", number 0xc7 +Home 0xc7 + +# evdev 103 (0x67), QKeyCode "up", number 0xc8 +Up 0xc8 + +# evdev 104 (0x68), QKeyCode "pgup", number 0xc9 +Prior 0xc9 + +# evdev 105 (0x69), QKeyCode "left", number 0xcb +Left 0xcb + +# evdev 106 (0x6a), QKeyCode "right", number 0xcd +Right 0xcd + +# evdev 107 (0x6b), QKeyCode "end", number 0xcf +End 0xcf + +# evdev 108 (0x6c), QKeyCode "down", number 0xd0 +Down 0xd0 + +# evdev 109 (0x6d), QKeyCode "pgdn", number 0xd1 +Next 0xd1 + +# evdev 110 (0x6e), QKeyCode "insert", number 0xd2 +Insert 0xd2 + +# evdev 111 (0x6f), QKeyCode "delete", number 0xd3 +Delete 0xd3 + +# evdev 112 (0x70): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 113 (0x71), QKeyCode "audiomute", number 0xa0 +XF86AudioMute 0xa0 + +# evdev 114 (0x72), QKeyCode "volumedown", number 0xae +XF86AudioLowerVolume 0xae + +# evdev 115 (0x73), QKeyCode "volumeup", number 0xb0 +XF86AudioRaiseVolume 0xb0 + +# evdev 116 (0x74), QKeyCode "power", number 0xde +XF86PowerOff 0xde + +# evdev 117 (0x75), QKeyCode "kp_equals", number 0x59 +KP_Equal 0x59 + +# evdev 118 (0x76): no evdev -> QKeyCode mapping (xkb keysym plusminus) + +# evdev 119 (0x77), QKeyCode "pause", number 0xc6 +Pause 0xc6 + +# evdev 120 (0x78): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchA) + +# evdev 121 (0x79), QKeyCode "kp_comma", number 0x7e +KP_Decimal 0x7e + +# evdev 122 (0x7a): no evdev -> QKeyCode mapping (xkb keysym Hangul) + +# evdev 123 (0x7b): no evdev -> QKeyCode mapping (xkb keysym Hangul_Hanja) + +# evdev 124 (0x7c), QKeyCode "yen", number 0x7d + +# evdev 125 (0x7d), QKeyCode "meta_l", number 0xdb +Super_L 0xdb + +# evdev 126 (0x7e), QKeyCode "meta_r", number 0xdc +Super_R 0xdc + +# evdev 127 (0x7f), QKeyCode "compose", number 0xdd +Menu 0xdd + +# evdev 128 (0x80), QKeyCode "stop", number 0xe8 +Cancel 0xe8 + +# evdev 129 (0x81), QKeyCode "again", number 0x85 +Redo 0x85 + +# evdev 130 (0x82), QKeyCode "props", number 0x86 +SunProps 0x86 + +# evdev 131 (0x83), QKeyCode "undo", number 0x87 +Undo 0x87 + +# evdev 132 (0x84), QKeyCode "front", number 0x8c +SunFront 0x8c + +# evdev 133 (0x85), QKeyCode "copy", number 0xf8 +XF86Copy 0xf8 + +# evdev 134 (0x86), QKeyCode "open", number 0x64 +XF86Open 0x64 + +# evdev 135 (0x87), QKeyCode "paste", number 0x65 +XF86Paste 0x65 + +# evdev 136 (0x88), QKeyCode "find", number 0xc1 +Find 0xc1 + +# evdev 137 (0x89), QKeyCode "cut", number 0xbc +XF86Cut 0xbc + +# evdev 138 (0x8a), QKeyCode "help", number 0xf5 +Help 0xf5 + +# evdev 139 (0x8b), QKeyCode "menu", number 0x9e +XF86MenuKB 0x9e + +# evdev 140 (0x8c), QKeyCode "calculator", number 0xa1 +XF86Calculator 0xa1 + +# evdev 141 (0x8d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 142 (0x8e), QKeyCode "sleep", number 0xdf +XF86Sleep 0xdf + +# evdev 143 (0x8f), QKeyCode "wake", number 0xe3 +XF86WakeUp 0xe3 + +# evdev 144 (0x90): no evdev -> QKeyCode mapping (xkb keysym XF86Explorer) + +# evdev 145 (0x91): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 146 (0x92): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 147 (0x93): no evdev -> QKeyCode mapping (xkb keysym XF86Xfer) + +# evdev 148 (0x94): no evdev -> QKeyCode mapping (xkb keysym XF86Launch1) + +# evdev 149 (0x95): no evdev -> QKeyCode mapping (xkb keysym XF86Launch2) + +# evdev 150 (0x96): no evdev -> QKeyCode mapping (xkb keysym XF86WWW) + +# evdev 151 (0x97): no evdev -> QKeyCode mapping (xkb keysym XF86DOS) + +# evdev 152 (0x98): no evdev -> QKeyCode mapping (xkb keysym XF86ScreenSaver) + +# evdev 153 (0x99): no evdev -> QKeyCode mapping (xkb keysym XF86RotateWindows) + +# evdev 154 (0x9a): no evdev -> QKeyCode mapping (xkb keysym XF86TaskPane) + +# evdev 155 (0x9b), QKeyCode "mail", number 0xec +XF86Mail 0xec + +# evdev 156 (0x9c), QKeyCode "ac_bookmarks", number 0xe6 +XF86Favorites 0xe6 + +# evdev 157 (0x9d), QKeyCode "computer", number 0xeb +XF86MyComputer 0xeb + +# evdev 158 (0x9e), QKeyCode "ac_back", number 0xea +XF86Back 0xea + +# evdev 159 (0x9f), QKeyCode "ac_forward", number 0xe9 +XF86Forward 0xe9 + +# evdev 160 (0xa0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 161 (0xa1): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 162 (0xa2): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 163 (0xa3), QKeyCode "audionext", number 0x99 +XF86AudioNext 0x99 + +# evdev 164 (0xa4), QKeyCode "audioplay", number 0xa2 +XF86AudioPlay 0xa2 +XF86AudioPause 0xa2 shift + +# evdev 165 (0xa5), QKeyCode "audioprev", number 0x90 +XF86AudioPrev 0x90 + +# evdev 166 (0xa6), QKeyCode "audiostop", number 0xa4 +XF86AudioStop 0xa4 +XF86Eject 0xa4 shift + +# evdev 167 (0xa7): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRecord) + +# evdev 168 (0xa8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRewind) + +# evdev 169 (0xa9): no evdev -> QKeyCode mapping (xkb keysym XF86Phone) + +# evdev 170 (0xaa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 171 (0xab): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 172 (0xac), QKeyCode "ac_home", number 0xb2 +XF86HomePage 0xb2 + +# evdev 173 (0xad), QKeyCode "ac_refresh", number 0xe7 +XF86Reload 0xe7 + +# evdev 174 (0xae): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 175 (0xaf): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 176 (0xb0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 177 (0xb1): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollUp) + +# evdev 178 (0xb2): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollDown) + +# evdev 179 (0xb3): no evdev -> QKeyCode mapping (xkb keysym parenleft) + +# evdev 180 (0xb4): no evdev -> QKeyCode mapping (xkb keysym parenright) + +# evdev 181 (0xb5): no evdev -> QKeyCode mapping (xkb keysym XF86New) + +# evdev 182 (0xb6): no evdev -> QKeyCode mapping (xkb keysym Redo) + +# evdev 183 (0xb7): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 184 (0xb8): no evdev -> QKeyCode mapping (xkb keysym XF86Launch5) + +# evdev 185 (0xb9): no evdev -> QKeyCode mapping (xkb keysym XF86Launch6) + +# evdev 186 (0xba): no evdev -> QKeyCode mapping (xkb keysym XF86Launch7) + +# evdev 187 (0xbb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch8) + +# evdev 188 (0xbc): no evdev -> QKeyCode mapping (xkb keysym XF86Launch9) + +# evdev 189 (0xbd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 190 (0xbe): no evdev -> QKeyCode mapping (xkb keysym XF86AudioMicMute) + +# evdev 191 (0xbf): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadToggle) + +# evdev 192 (0xc0): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOn) + +# evdev 193 (0xc1): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOff) + +# evdev 194 (0xc2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 195 (0xc3): no evdev -> QKeyCode mapping (xkb keysym Mode_switch) + +# evdev 196 (0xc4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 197 (0xc5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 198 (0xc6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 199 (0xc7): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 200 (0xc8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 201 (0xc9): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPause) + +# evdev 202 (0xca): no evdev -> QKeyCode mapping (xkb keysym XF86Launch3) + +# evdev 203 (0xcb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch4) + +# evdev 204 (0xcc): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchB) + +# evdev 205 (0xcd): no evdev -> QKeyCode mapping (xkb keysym XF86Suspend) + +# evdev 206 (0xce): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 207 (0xcf): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 208 (0xd0): no evdev -> QKeyCode mapping (xkb keysym XF86AudioForward) + +# evdev 209 (0xd1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 210 (0xd2): no evdev -> QKeyCode mapping (xkb keysym Print) + +# evdev 211 (0xd3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 212 (0xd4): no evdev -> QKeyCode mapping (xkb keysym XF86WebCam) + +# evdev 213 (0xd5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 214 (0xd6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 215 (0xd7): no evdev -> QKeyCode mapping (xkb keysym XF86Mail) + +# evdev 216 (0xd8): no evdev -> QKeyCode mapping (xkb keysym XF86Messenger) + +# evdev 217 (0xd9): no evdev -> QKeyCode mapping (xkb keysym XF86Search) + +# evdev 218 (0xda): no evdev -> QKeyCode mapping (xkb keysym XF86Go) + +# evdev 219 (0xdb): no evdev -> QKeyCode mapping (xkb keysym XF86Finance) + +# evdev 220 (0xdc): no evdev -> QKeyCode mapping (xkb keysym XF86Game) + +# evdev 221 (0xdd): no evdev -> QKeyCode mapping (xkb keysym XF86Shop) + +# evdev 222 (0xde): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 223 (0xdf): no evdev -> QKeyCode mapping (xkb keysym Cancel) + +# evdev 224 (0xe0): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessDown) + +# evdev 225 (0xe1): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessUp) + +# evdev 226 (0xe2), QKeyCode "mediaselect", number 0xed +XF86AudioMedia 0xed + +# evdev 227 (0xe3): no evdev -> QKeyCode mapping (xkb keysym XF86Display) + +# evdev 228 (0xe4): no evdev -> QKeyCode mapping (xkb keysym XF86KbdLightOnOff) + +# evdev 229 (0xe5): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessDown) + +# evdev 230 (0xe6): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessUp) + +# evdev 231 (0xe7): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 232 (0xe8): no evdev -> QKeyCode mapping (xkb keysym XF86Reply) + +# evdev 233 (0xe9): no evdev -> QKeyCode mapping (xkb keysym XF86MailForward) + +# evdev 234 (0xea): no evdev -> QKeyCode mapping (xkb keysym XF86Save) + +# evdev 235 (0xeb): no evdev -> QKeyCode mapping (xkb keysym XF86Documents) + +# evdev 236 (0xec): no evdev -> QKeyCode mapping (xkb keysym XF86Battery) + +# evdev 237 (0xed): no evdev -> QKeyCode mapping (xkb keysym XF86Bluetooth) + +# evdev 238 (0xee): no evdev -> QKeyCode mapping (xkb keysym XF86WLAN) + +# evdev 239 (0xef): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 240 (0xf0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 241 (0xf1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 242 (0xf2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 243 (0xf3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 244 (0xf4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# +# quirks section start +# +# Sometimes multiple keysyms map to the same keycodes. +# The keycode -> keysym lookup finds only one of the +# keysyms. So append them here. +# + +Print 0x54 +Sys_Req 0x54 +Execute 0x54 +KP_Decimal 0x53 numlock +KP_Separator 0x53 numlock +Alt_R 0xb8 +ISO_Level3_Shift 0xb8 +Mode_switch 0xb8 + +# quirks section end diff --git a/app/src/main/assets/roms/keymaps/fo b/app/src/main/assets/roms/keymaps/fo new file mode 100644 index 0000000..e69575b --- /dev/null +++ b/app/src/main/assets/roms/keymaps/fo @@ -0,0 +1,837 @@ +# +# generated by qemu-keymap +# model : pc105 +# layout : fo +# variant : - +# options : - + +# name: "Faroese" + +# modifiers +# 0: Shift +# 1: Lock +# 2: Control +# 3: Mod1 +# 4: Mod2 +# 5: Mod3 +# 6: Mod4 +# 7: Mod5 +# 8: NumLock +# 9: Alt +# 10: LevelThree +# 11: LAlt +# 12: RAlt +# 13: RControl +# 14: LControl +# 15: ScrollLock +# 16: LevelFive +# 17: AltGr +# 18: Meta +# 19: Super +# 20: Hyper + +# evdev 1 (0x1), QKeyCode "esc", number 0x1 +Escape 0x01 + +# evdev 2 (0x2), QKeyCode "1", number 0x2 +1 0x02 +exclam 0x02 shift +exclamdown 0x02 altgr +onesuperior 0x02 shift altgr + +# evdev 3 (0x3), QKeyCode "2", number 0x3 +2 0x03 +quotedbl 0x03 shift +at 0x03 altgr +twosuperior 0x03 shift altgr + +# evdev 4 (0x4), QKeyCode "3", number 0x4 +3 0x04 +numbersign 0x04 shift +sterling 0x04 altgr +threesuperior 0x04 shift altgr + +# evdev 5 (0x5), QKeyCode "4", number 0x5 +4 0x05 +currency 0x05 shift +dollar 0x05 altgr +onequarter 0x05 shift altgr + +# evdev 6 (0x6), QKeyCode "5", number 0x6 +5 0x06 +percent 0x06 shift +onehalf 0x06 altgr +cent 0x06 shift altgr + +# evdev 7 (0x7), QKeyCode "6", number 0x7 +6 0x07 +ampersand 0x07 shift +yen 0x07 altgr +fiveeighths 0x07 shift altgr + +# evdev 8 (0x8), QKeyCode "7", number 0x8 +7 0x08 +slash 0x08 shift +braceleft 0x08 altgr +division 0x08 shift altgr + +# evdev 9 (0x9), QKeyCode "8", number 0x9 +8 0x09 +parenleft 0x09 shift +bracketleft 0x09 altgr +guillemotleft 0x09 shift altgr + +# evdev 10 (0xa), QKeyCode "9", number 0xa +9 0x0a +parenright 0x0a shift +bracketright 0x0a altgr +guillemotright 0x0a shift altgr + +# evdev 11 (0xb), QKeyCode "0", number 0xb +0 0x0b +equal 0x0b shift +braceright 0x0b altgr +degree 0x0b shift altgr + +# evdev 12 (0xc), QKeyCode "minus", number 0xc +plus 0x0c +question 0x0c shift +plusminus 0x0c altgr +questiondown 0x0c shift altgr + +# evdev 13 (0xd), QKeyCode "equal", number 0xd +dead_acute 0x0d +dead_grave 0x0d shift +bar 0x0d altgr +brokenbar 0x0d shift altgr + +# evdev 14 (0xe), QKeyCode "backspace", number 0xe +BackSpace 0x0e + +# evdev 15 (0xf), QKeyCode "tab", number 0xf +Tab 0x0f +ISO_Left_Tab 0x0f shift + +# evdev 16 (0x10), QKeyCode "q", number 0x10 +q 0x10 +Q 0x10 shift +at 0x10 altgr +Greek_OMEGA 0x10 shift altgr + +# evdev 17 (0x11), QKeyCode "w", number 0x11 +w 0x11 +W 0x11 shift +lstroke 0x11 altgr +Lstroke 0x11 shift altgr + +# evdev 18 (0x12), QKeyCode "e", number 0x12 +e 0x12 +E 0x12 shift +EuroSign 0x12 altgr +cent 0x12 shift altgr + +# evdev 19 (0x13), QKeyCode "r", number 0x13 +r 0x13 +R 0x13 shift +registered 0x13 altgr + +# evdev 20 (0x14), QKeyCode "t", number 0x14 +t 0x14 +T 0x14 shift +thorn 0x14 altgr +THORN 0x14 shift altgr + +# evdev 21 (0x15), QKeyCode "y", number 0x15 +y 0x15 +Y 0x15 shift +leftarrow 0x15 altgr +yen 0x15 shift altgr + +# evdev 22 (0x16), QKeyCode "u", number 0x16 +u 0x16 +U 0x16 shift +downarrow 0x16 altgr +uparrow 0x16 shift altgr + +# evdev 23 (0x17), QKeyCode "i", number 0x17 +i 0x17 +I 0x17 shift +rightarrow 0x17 altgr +idotless 0x17 shift altgr + +# evdev 24 (0x18), QKeyCode "o", number 0x18 +o 0x18 +O 0x18 shift +oe 0x18 altgr +OE 0x18 shift altgr + +# evdev 25 (0x19), QKeyCode "p", number 0x19 +p 0x19 +P 0x19 shift +thorn 0x19 altgr +THORN 0x19 shift altgr + +# evdev 26 (0x1a), QKeyCode "bracket_left", number 0x1a +aring 0x1a +Aring 0x1a shift +dead_diaeresis 0x1a altgr +dead_circumflex 0x1a shift altgr + +# evdev 27 (0x1b), QKeyCode "bracket_right", number 0x1b +eth 0x1b +ETH 0x1b shift +dead_tilde 0x1b altgr +dead_caron 0x1b shift altgr + +# evdev 28 (0x1c), QKeyCode "ret", number 0x1c +Return 0x1c + +# evdev 29 (0x1d), QKeyCode "ctrl", number 0x1d +Control_L 0x1d + +# evdev 30 (0x1e), QKeyCode "a", number 0x1e +a 0x1e +A 0x1e shift +ordfeminine 0x1e altgr +masculine 0x1e shift altgr + +# evdev 31 (0x1f), QKeyCode "s", number 0x1f +s 0x1f +S 0x1f shift +ssharp 0x1f altgr +section 0x1f shift altgr + +# evdev 32 (0x20), QKeyCode "d", number 0x20 +d 0x20 +D 0x20 shift +eth 0x20 altgr +ETH 0x20 shift altgr + +# evdev 33 (0x21), QKeyCode "f", number 0x21 +f 0x21 +F 0x21 shift +dstroke 0x21 altgr +ordfeminine 0x21 shift altgr + +# evdev 34 (0x22), QKeyCode "g", number 0x22 +g 0x22 +G 0x22 shift +eng 0x22 altgr +ENG 0x22 shift altgr + +# evdev 35 (0x23), QKeyCode "h", number 0x23 +h 0x23 +H 0x23 shift +hstroke 0x23 altgr +Hstroke 0x23 shift altgr + +# evdev 36 (0x24), QKeyCode "j", number 0x24 +j 0x24 +J 0x24 shift +dead_hook 0x24 altgr +dead_horn 0x24 shift altgr + +# evdev 37 (0x25), QKeyCode "k", number 0x25 +k 0x25 +K 0x25 shift +kra 0x25 altgr +ampersand 0x25 shift altgr + +# evdev 38 (0x26), QKeyCode "l", number 0x26 +l 0x26 +L 0x26 shift +lstroke 0x26 altgr +Lstroke 0x26 shift altgr + +# evdev 39 (0x27), QKeyCode "semicolon", number 0x27 +ae 0x27 +AE 0x27 shift +dead_acute 0x27 altgr +dead_doubleacute 0x27 shift altgr + +# evdev 40 (0x28), QKeyCode "apostrophe", number 0x28 +oslash 0x28 +Oslash 0x28 shift +dead_circumflex 0x28 altgr +dead_caron 0x28 shift altgr + +# evdev 41 (0x29), QKeyCode "grave_accent", number 0x29 +onehalf 0x29 +section 0x29 shift +threequarters 0x29 altgr +paragraph 0x29 shift altgr + +# evdev 42 (0x2a), QKeyCode "shift", number 0x2a +Shift_L 0x2a + +# evdev 43 (0x2b), QKeyCode "backslash", number 0x2b +apostrophe 0x2b +asterisk 0x2b shift +dead_doubleacute 0x2b altgr +multiply 0x2b shift altgr + +# evdev 44 (0x2c), QKeyCode "z", number 0x2c +z 0x2c +Z 0x2c shift +guillemotleft 0x2c altgr +less 0x2c shift altgr + +# evdev 45 (0x2d), QKeyCode "x", number 0x2d +x 0x2d +X 0x2d shift +guillemotright 0x2d altgr +greater 0x2d shift altgr + +# evdev 46 (0x2e), QKeyCode "c", number 0x2e +c 0x2e +C 0x2e shift +copyright 0x2e altgr + +# evdev 47 (0x2f), QKeyCode "v", number 0x2f +v 0x2f +V 0x2f shift +leftdoublequotemark 0x2f altgr +leftsinglequotemark 0x2f shift altgr + +# evdev 48 (0x30), QKeyCode "b", number 0x30 +b 0x30 +B 0x30 shift +rightdoublequotemark 0x30 altgr +rightsinglequotemark 0x30 shift altgr + +# evdev 49 (0x31), QKeyCode "n", number 0x31 +n 0x31 +N 0x31 shift + +# evdev 50 (0x32), QKeyCode "m", number 0x32 +m 0x32 +M 0x32 shift +mu 0x32 altgr +masculine 0x32 shift altgr + +# evdev 51 (0x33), QKeyCode "comma", number 0x33 +comma 0x33 +semicolon 0x33 shift +dead_cedilla 0x33 altgr +dead_ogonek 0x33 shift altgr + +# evdev 52 (0x34), QKeyCode "dot", number 0x34 +period 0x34 +colon 0x34 shift +periodcentered 0x34 altgr +dead_abovedot 0x34 shift altgr + +# evdev 53 (0x35), QKeyCode "slash", number 0x35 +minus 0x35 +underscore 0x35 shift +hyphen 0x35 altgr +macron 0x35 shift altgr + +# evdev 54 (0x36), QKeyCode "shift_r", number 0x36 +Shift_R 0x36 + +# evdev 55 (0x37), QKeyCode "kp_multiply", number 0x37 +KP_Multiply 0x37 + +# evdev 56 (0x38), QKeyCode "alt", number 0x38 +Alt_L 0x38 +Meta_L 0x38 shift + +# evdev 57 (0x39), QKeyCode "spc", number 0x39 +space 0x39 +nobreakspace 0x39 altgr + +# evdev 58 (0x3a), QKeyCode "caps_lock", number 0x3a +Caps_Lock 0x3a + +# evdev 59 (0x3b), QKeyCode "f1", number 0x3b +F1 0x3b + +# evdev 60 (0x3c), QKeyCode "f2", number 0x3c +F2 0x3c + +# evdev 61 (0x3d), QKeyCode "f3", number 0x3d +F3 0x3d + +# evdev 62 (0x3e), QKeyCode "f4", number 0x3e +F4 0x3e + +# evdev 63 (0x3f), QKeyCode "f5", number 0x3f +F5 0x3f + +# evdev 64 (0x40), QKeyCode "f6", number 0x40 +F6 0x40 + +# evdev 65 (0x41), QKeyCode "f7", number 0x41 +F7 0x41 + +# evdev 66 (0x42), QKeyCode "f8", number 0x42 +F8 0x42 + +# evdev 67 (0x43), QKeyCode "f9", number 0x43 +F9 0x43 + +# evdev 68 (0x44), QKeyCode "f10", number 0x44 +F10 0x44 + +# evdev 69 (0x45), QKeyCode "num_lock", number 0x45 +Num_Lock 0x45 + +# evdev 70 (0x46), QKeyCode "scroll_lock", number 0x46 +Scroll_Lock 0x46 + +# evdev 71 (0x47), QKeyCode "kp_7", number 0x47 +KP_Home 0x47 +KP_7 0x47 numlock + +# evdev 72 (0x48), QKeyCode "kp_8", number 0x48 +KP_Up 0x48 +KP_8 0x48 numlock + +# evdev 73 (0x49), QKeyCode "kp_9", number 0x49 +KP_Prior 0x49 +KP_9 0x49 numlock + +# evdev 74 (0x4a), QKeyCode "kp_subtract", number 0x4a +KP_Subtract 0x4a + +# evdev 75 (0x4b), QKeyCode "kp_4", number 0x4b +KP_Left 0x4b +KP_4 0x4b numlock + +# evdev 76 (0x4c), QKeyCode "kp_5", number 0x4c +KP_Begin 0x4c +KP_5 0x4c numlock + +# evdev 77 (0x4d), QKeyCode "kp_6", number 0x4d +KP_Right 0x4d +KP_6 0x4d numlock + +# evdev 78 (0x4e), QKeyCode "kp_add", number 0x4e +KP_Add 0x4e + +# evdev 79 (0x4f), QKeyCode "kp_1", number 0x4f +KP_End 0x4f +KP_1 0x4f numlock + +# evdev 80 (0x50), QKeyCode "kp_2", number 0x50 +KP_Down 0x50 +KP_2 0x50 numlock + +# evdev 81 (0x51), QKeyCode "kp_3", number 0x51 +KP_Next 0x51 +KP_3 0x51 numlock + +# evdev 82 (0x52), QKeyCode "kp_0", number 0x52 +KP_Insert 0x52 +KP_0 0x52 numlock + +# evdev 83 (0x53), QKeyCode "kp_decimal", number 0x53 +KP_Delete 0x53 +KP_Decimal 0x53 numlock + +# evdev 84 (0x54): no evdev -> QKeyCode mapping (xkb keysym ISO_Level3_Shift) + +# evdev 85 (0x55): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 86 (0x56), QKeyCode "less", number 0x56 +less 0x56 +greater 0x56 shift +backslash 0x56 altgr +notsign 0x56 shift altgr + +# evdev 87 (0x57), QKeyCode "f11", number 0x57 +F11 0x57 + +# evdev 88 (0x58), QKeyCode "f12", number 0x58 +F12 0x58 + +# evdev 89 (0x59), QKeyCode "ro", number 0x73 + +# evdev 90 (0x5a): no evdev -> QKeyCode mapping (xkb keysym Katakana) + +# evdev 91 (0x5b), QKeyCode "hiragana", number 0x77 +Hiragana 0x77 + +# evdev 92 (0x5c), QKeyCode "henkan", number 0x79 +Henkan_Mode 0x79 + +# evdev 93 (0x5d): no evdev -> QKeyCode mapping (xkb keysym Hiragana_Katakana) + +# evdev 94 (0x5e): no evdev -> QKeyCode mapping (xkb keysym Muhenkan) + +# evdev 95 (0x5f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 96 (0x60), QKeyCode "kp_enter", number 0x9c +KP_Enter 0x9c + +# evdev 97 (0x61), QKeyCode "ctrl_r", number 0x9d +Control_R 0x9d + +# evdev 98 (0x62), QKeyCode "kp_divide", number 0xb5 +KP_Divide 0xb5 + +# evdev 99 (0x63), QKeyCode "sysrq", number 0x54 +Print 0x54 + +# evdev 100 (0x64), QKeyCode "alt_r", number 0xb8 +ISO_Level3_Shift 0xb8 + +# evdev 101 (0x65), QKeyCode "lf", number 0x5b +Linefeed 0x5b + +# evdev 102 (0x66), QKeyCode "home", number 0xc7 +Home 0xc7 + +# evdev 103 (0x67), QKeyCode "up", number 0xc8 +Up 0xc8 + +# evdev 104 (0x68), QKeyCode "pgup", number 0xc9 +Prior 0xc9 + +# evdev 105 (0x69), QKeyCode "left", number 0xcb +Left 0xcb + +# evdev 106 (0x6a), QKeyCode "right", number 0xcd +Right 0xcd + +# evdev 107 (0x6b), QKeyCode "end", number 0xcf +End 0xcf + +# evdev 108 (0x6c), QKeyCode "down", number 0xd0 +Down 0xd0 + +# evdev 109 (0x6d), QKeyCode "pgdn", number 0xd1 +Next 0xd1 + +# evdev 110 (0x6e), QKeyCode "insert", number 0xd2 +Insert 0xd2 + +# evdev 111 (0x6f), QKeyCode "delete", number 0xd3 +Delete 0xd3 + +# evdev 112 (0x70): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 113 (0x71), QKeyCode "audiomute", number 0xa0 +XF86AudioMute 0xa0 + +# evdev 114 (0x72), QKeyCode "volumedown", number 0xae +XF86AudioLowerVolume 0xae + +# evdev 115 (0x73), QKeyCode "volumeup", number 0xb0 +XF86AudioRaiseVolume 0xb0 + +# evdev 116 (0x74), QKeyCode "power", number 0xde +XF86PowerOff 0xde + +# evdev 117 (0x75), QKeyCode "kp_equals", number 0x59 +KP_Equal 0x59 + +# evdev 118 (0x76): no evdev -> QKeyCode mapping (xkb keysym plusminus) + +# evdev 119 (0x77), QKeyCode "pause", number 0xc6 +Pause 0xc6 + +# evdev 120 (0x78): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchA) + +# evdev 121 (0x79), QKeyCode "kp_comma", number 0x7e +KP_Decimal 0x7e + +# evdev 122 (0x7a): no evdev -> QKeyCode mapping (xkb keysym Hangul) + +# evdev 123 (0x7b): no evdev -> QKeyCode mapping (xkb keysym Hangul_Hanja) + +# evdev 124 (0x7c), QKeyCode "yen", number 0x7d + +# evdev 125 (0x7d), QKeyCode "meta_l", number 0xdb +Super_L 0xdb + +# evdev 126 (0x7e), QKeyCode "meta_r", number 0xdc +Super_R 0xdc + +# evdev 127 (0x7f), QKeyCode "compose", number 0xdd +Menu 0xdd + +# evdev 128 (0x80), QKeyCode "stop", number 0xe8 +Cancel 0xe8 + +# evdev 129 (0x81), QKeyCode "again", number 0x85 +Redo 0x85 + +# evdev 130 (0x82), QKeyCode "props", number 0x86 +SunProps 0x86 + +# evdev 131 (0x83), QKeyCode "undo", number 0x87 +Undo 0x87 + +# evdev 132 (0x84), QKeyCode "front", number 0x8c +SunFront 0x8c + +# evdev 133 (0x85), QKeyCode "copy", number 0xf8 +XF86Copy 0xf8 + +# evdev 134 (0x86), QKeyCode "open", number 0x64 +XF86Open 0x64 + +# evdev 135 (0x87), QKeyCode "paste", number 0x65 +XF86Paste 0x65 + +# evdev 136 (0x88), QKeyCode "find", number 0xc1 +Find 0xc1 + +# evdev 137 (0x89), QKeyCode "cut", number 0xbc +XF86Cut 0xbc + +# evdev 138 (0x8a), QKeyCode "help", number 0xf5 +Help 0xf5 + +# evdev 139 (0x8b), QKeyCode "menu", number 0x9e +XF86MenuKB 0x9e + +# evdev 140 (0x8c), QKeyCode "calculator", number 0xa1 +XF86Calculator 0xa1 + +# evdev 141 (0x8d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 142 (0x8e), QKeyCode "sleep", number 0xdf +XF86Sleep 0xdf + +# evdev 143 (0x8f), QKeyCode "wake", number 0xe3 +XF86WakeUp 0xe3 + +# evdev 144 (0x90): no evdev -> QKeyCode mapping (xkb keysym XF86Explorer) + +# evdev 145 (0x91): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 146 (0x92): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 147 (0x93): no evdev -> QKeyCode mapping (xkb keysym XF86Xfer) + +# evdev 148 (0x94): no evdev -> QKeyCode mapping (xkb keysym XF86Launch1) + +# evdev 149 (0x95): no evdev -> QKeyCode mapping (xkb keysym XF86Launch2) + +# evdev 150 (0x96): no evdev -> QKeyCode mapping (xkb keysym XF86WWW) + +# evdev 151 (0x97): no evdev -> QKeyCode mapping (xkb keysym XF86DOS) + +# evdev 152 (0x98): no evdev -> QKeyCode mapping (xkb keysym XF86ScreenSaver) + +# evdev 153 (0x99): no evdev -> QKeyCode mapping (xkb keysym XF86RotateWindows) + +# evdev 154 (0x9a): no evdev -> QKeyCode mapping (xkb keysym XF86TaskPane) + +# evdev 155 (0x9b), QKeyCode "mail", number 0xec +XF86Mail 0xec + +# evdev 156 (0x9c), QKeyCode "ac_bookmarks", number 0xe6 +XF86Favorites 0xe6 + +# evdev 157 (0x9d), QKeyCode "computer", number 0xeb +XF86MyComputer 0xeb + +# evdev 158 (0x9e), QKeyCode "ac_back", number 0xea +XF86Back 0xea + +# evdev 159 (0x9f), QKeyCode "ac_forward", number 0xe9 +XF86Forward 0xe9 + +# evdev 160 (0xa0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 161 (0xa1): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 162 (0xa2): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 163 (0xa3), QKeyCode "audionext", number 0x99 +XF86AudioNext 0x99 + +# evdev 164 (0xa4), QKeyCode "audioplay", number 0xa2 +XF86AudioPlay 0xa2 +XF86AudioPause 0xa2 shift + +# evdev 165 (0xa5), QKeyCode "audioprev", number 0x90 +XF86AudioPrev 0x90 + +# evdev 166 (0xa6), QKeyCode "audiostop", number 0xa4 +XF86AudioStop 0xa4 +XF86Eject 0xa4 shift + +# evdev 167 (0xa7): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRecord) + +# evdev 168 (0xa8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRewind) + +# evdev 169 (0xa9): no evdev -> QKeyCode mapping (xkb keysym XF86Phone) + +# evdev 170 (0xaa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 171 (0xab): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 172 (0xac), QKeyCode "ac_home", number 0xb2 +XF86HomePage 0xb2 + +# evdev 173 (0xad), QKeyCode "ac_refresh", number 0xe7 +XF86Reload 0xe7 + +# evdev 174 (0xae): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 175 (0xaf): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 176 (0xb0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 177 (0xb1): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollUp) + +# evdev 178 (0xb2): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollDown) + +# evdev 179 (0xb3): no evdev -> QKeyCode mapping (xkb keysym parenleft) + +# evdev 180 (0xb4): no evdev -> QKeyCode mapping (xkb keysym parenright) + +# evdev 181 (0xb5): no evdev -> QKeyCode mapping (xkb keysym XF86New) + +# evdev 182 (0xb6): no evdev -> QKeyCode mapping (xkb keysym Redo) + +# evdev 183 (0xb7): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 184 (0xb8): no evdev -> QKeyCode mapping (xkb keysym XF86Launch5) + +# evdev 185 (0xb9): no evdev -> QKeyCode mapping (xkb keysym XF86Launch6) + +# evdev 186 (0xba): no evdev -> QKeyCode mapping (xkb keysym XF86Launch7) + +# evdev 187 (0xbb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch8) + +# evdev 188 (0xbc): no evdev -> QKeyCode mapping (xkb keysym XF86Launch9) + +# evdev 189 (0xbd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 190 (0xbe): no evdev -> QKeyCode mapping (xkb keysym XF86AudioMicMute) + +# evdev 191 (0xbf): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadToggle) + +# evdev 192 (0xc0): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOn) + +# evdev 193 (0xc1): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOff) + +# evdev 194 (0xc2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 195 (0xc3): no evdev -> QKeyCode mapping (xkb keysym Mode_switch) + +# evdev 196 (0xc4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 197 (0xc5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 198 (0xc6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 199 (0xc7): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 200 (0xc8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 201 (0xc9): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPause) + +# evdev 202 (0xca): no evdev -> QKeyCode mapping (xkb keysym XF86Launch3) + +# evdev 203 (0xcb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch4) + +# evdev 204 (0xcc): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchB) + +# evdev 205 (0xcd): no evdev -> QKeyCode mapping (xkb keysym XF86Suspend) + +# evdev 206 (0xce): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 207 (0xcf): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 208 (0xd0): no evdev -> QKeyCode mapping (xkb keysym XF86AudioForward) + +# evdev 209 (0xd1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 210 (0xd2): no evdev -> QKeyCode mapping (xkb keysym Print) + +# evdev 211 (0xd3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 212 (0xd4): no evdev -> QKeyCode mapping (xkb keysym XF86WebCam) + +# evdev 213 (0xd5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 214 (0xd6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 215 (0xd7): no evdev -> QKeyCode mapping (xkb keysym XF86Mail) + +# evdev 216 (0xd8): no evdev -> QKeyCode mapping (xkb keysym XF86Messenger) + +# evdev 217 (0xd9): no evdev -> QKeyCode mapping (xkb keysym XF86Search) + +# evdev 218 (0xda): no evdev -> QKeyCode mapping (xkb keysym XF86Go) + +# evdev 219 (0xdb): no evdev -> QKeyCode mapping (xkb keysym XF86Finance) + +# evdev 220 (0xdc): no evdev -> QKeyCode mapping (xkb keysym XF86Game) + +# evdev 221 (0xdd): no evdev -> QKeyCode mapping (xkb keysym XF86Shop) + +# evdev 222 (0xde): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 223 (0xdf): no evdev -> QKeyCode mapping (xkb keysym Cancel) + +# evdev 224 (0xe0): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessDown) + +# evdev 225 (0xe1): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessUp) + +# evdev 226 (0xe2), QKeyCode "mediaselect", number 0xed +XF86AudioMedia 0xed + +# evdev 227 (0xe3): no evdev -> QKeyCode mapping (xkb keysym XF86Display) + +# evdev 228 (0xe4): no evdev -> QKeyCode mapping (xkb keysym XF86KbdLightOnOff) + +# evdev 229 (0xe5): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessDown) + +# evdev 230 (0xe6): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessUp) + +# evdev 231 (0xe7): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 232 (0xe8): no evdev -> QKeyCode mapping (xkb keysym XF86Reply) + +# evdev 233 (0xe9): no evdev -> QKeyCode mapping (xkb keysym XF86MailForward) + +# evdev 234 (0xea): no evdev -> QKeyCode mapping (xkb keysym XF86Save) + +# evdev 235 (0xeb): no evdev -> QKeyCode mapping (xkb keysym XF86Documents) + +# evdev 236 (0xec): no evdev -> QKeyCode mapping (xkb keysym XF86Battery) + +# evdev 237 (0xed): no evdev -> QKeyCode mapping (xkb keysym XF86Bluetooth) + +# evdev 238 (0xee): no evdev -> QKeyCode mapping (xkb keysym XF86WLAN) + +# evdev 239 (0xef): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 240 (0xf0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 241 (0xf1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 242 (0xf2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 243 (0xf3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 244 (0xf4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# +# quirks section start +# +# Sometimes multiple keysyms map to the same keycodes. +# The keycode -> keysym lookup finds only one of the +# keysyms. So append them here. +# + +Print 0x54 +Sys_Req 0x54 +Execute 0x54 +KP_Decimal 0x53 numlock +KP_Separator 0x53 numlock +Alt_R 0xb8 +ISO_Level3_Shift 0xb8 +Mode_switch 0xb8 + +# quirks section end diff --git a/app/src/main/assets/roms/keymaps/fr b/app/src/main/assets/roms/keymaps/fr new file mode 100644 index 0000000..5b25227 --- /dev/null +++ b/app/src/main/assets/roms/keymaps/fr @@ -0,0 +1,837 @@ +# +# generated by qemu-keymap +# model : pc105 +# layout : fr +# variant : - +# options : - + +# name: "French" + +# modifiers +# 0: Shift +# 1: Lock +# 2: Control +# 3: Mod1 +# 4: Mod2 +# 5: Mod3 +# 6: Mod4 +# 7: Mod5 +# 8: NumLock +# 9: Alt +# 10: LevelThree +# 11: LAlt +# 12: RAlt +# 13: RControl +# 14: LControl +# 15: ScrollLock +# 16: LevelFive +# 17: AltGr +# 18: Meta +# 19: Super +# 20: Hyper + +# evdev 1 (0x1), QKeyCode "esc", number 0x1 +Escape 0x01 + +# evdev 2 (0x2), QKeyCode "1", number 0x2 +ampersand 0x02 +1 0x02 shift +onesuperior 0x02 altgr +exclamdown 0x02 shift altgr + +# evdev 3 (0x3), QKeyCode "2", number 0x3 +eacute 0x03 +2 0x03 shift +asciitilde 0x03 altgr +oneeighth 0x03 shift altgr + +# evdev 4 (0x4), QKeyCode "3", number 0x4 +quotedbl 0x04 +3 0x04 shift +numbersign 0x04 altgr +sterling 0x04 shift altgr + +# evdev 5 (0x5), QKeyCode "4", number 0x5 +apostrophe 0x05 +4 0x05 shift +braceleft 0x05 altgr +dollar 0x05 shift altgr + +# evdev 6 (0x6), QKeyCode "5", number 0x6 +parenleft 0x06 +5 0x06 shift +bracketleft 0x06 altgr +threeeighths 0x06 shift altgr + +# evdev 7 (0x7), QKeyCode "6", number 0x7 +minus 0x07 +6 0x07 shift +bar 0x07 altgr +fiveeighths 0x07 shift altgr + +# evdev 8 (0x8), QKeyCode "7", number 0x8 +egrave 0x08 +7 0x08 shift +grave 0x08 altgr +seveneighths 0x08 shift altgr + +# evdev 9 (0x9), QKeyCode "8", number 0x9 +underscore 0x09 +8 0x09 shift +backslash 0x09 altgr +trademark 0x09 shift altgr + +# evdev 10 (0xa), QKeyCode "9", number 0xa +ccedilla 0x0a +9 0x0a shift +asciicircum 0x0a altgr +plusminus 0x0a shift altgr + +# evdev 11 (0xb), QKeyCode "0", number 0xb +agrave 0x0b +0 0x0b shift +at 0x0b altgr +degree 0x0b shift altgr + +# evdev 12 (0xc), QKeyCode "minus", number 0xc +parenright 0x0c +degree 0x0c shift +bracketright 0x0c altgr +questiondown 0x0c shift altgr + +# evdev 13 (0xd), QKeyCode "equal", number 0xd +equal 0x0d +plus 0x0d shift +braceright 0x0d altgr +dead_ogonek 0x0d shift altgr + +# evdev 14 (0xe), QKeyCode "backspace", number 0xe +BackSpace 0x0e + +# evdev 15 (0xf), QKeyCode "tab", number 0xf +Tab 0x0f +ISO_Left_Tab 0x0f shift + +# evdev 16 (0x10), QKeyCode "q", number 0x10 +a 0x10 +A 0x10 shift +ae 0x10 altgr +AE 0x10 shift altgr + +# evdev 17 (0x11), QKeyCode "w", number 0x11 +z 0x11 +Z 0x11 shift +guillemotleft 0x11 altgr +less 0x11 shift altgr + +# evdev 18 (0x12), QKeyCode "e", number 0x12 +e 0x12 +E 0x12 shift +EuroSign 0x12 altgr +cent 0x12 shift altgr + +# evdev 19 (0x13), QKeyCode "r", number 0x13 +r 0x13 +R 0x13 shift +paragraph 0x13 altgr +registered 0x13 shift altgr + +# evdev 20 (0x14), QKeyCode "t", number 0x14 +t 0x14 +T 0x14 shift +tslash 0x14 altgr +Tslash 0x14 shift altgr + +# evdev 21 (0x15), QKeyCode "y", number 0x15 +y 0x15 +Y 0x15 shift +leftarrow 0x15 altgr +yen 0x15 shift altgr + +# evdev 22 (0x16), QKeyCode "u", number 0x16 +u 0x16 +U 0x16 shift +downarrow 0x16 altgr +uparrow 0x16 shift altgr + +# evdev 23 (0x17), QKeyCode "i", number 0x17 +i 0x17 +I 0x17 shift +rightarrow 0x17 altgr +idotless 0x17 shift altgr + +# evdev 24 (0x18), QKeyCode "o", number 0x18 +o 0x18 +O 0x18 shift +oslash 0x18 altgr +Oslash 0x18 shift altgr + +# evdev 25 (0x19), QKeyCode "p", number 0x19 +p 0x19 +P 0x19 shift +thorn 0x19 altgr +THORN 0x19 shift altgr + +# evdev 26 (0x1a), QKeyCode "bracket_left", number 0x1a +dead_circumflex 0x1a +dead_diaeresis 0x1a shift +dead_diaeresis 0x1a altgr +dead_abovering 0x1a shift altgr + +# evdev 27 (0x1b), QKeyCode "bracket_right", number 0x1b +dollar 0x1b +sterling 0x1b shift +currency 0x1b altgr +dead_macron 0x1b shift altgr + +# evdev 28 (0x1c), QKeyCode "ret", number 0x1c +Return 0x1c + +# evdev 29 (0x1d), QKeyCode "ctrl", number 0x1d +Control_L 0x1d + +# evdev 30 (0x1e), QKeyCode "a", number 0x1e +q 0x1e +Q 0x1e shift +at 0x1e altgr +Greek_OMEGA 0x1e shift altgr + +# evdev 31 (0x1f), QKeyCode "s", number 0x1f +s 0x1f +S 0x1f shift +ssharp 0x1f altgr +section 0x1f shift altgr + +# evdev 32 (0x20), QKeyCode "d", number 0x20 +d 0x20 +D 0x20 shift +eth 0x20 altgr +ETH 0x20 shift altgr + +# evdev 33 (0x21), QKeyCode "f", number 0x21 +f 0x21 +F 0x21 shift +dstroke 0x21 altgr +ordfeminine 0x21 shift altgr + +# evdev 34 (0x22), QKeyCode "g", number 0x22 +g 0x22 +G 0x22 shift +eng 0x22 altgr +ENG 0x22 shift altgr + +# evdev 35 (0x23), QKeyCode "h", number 0x23 +h 0x23 +H 0x23 shift +hstroke 0x23 altgr +Hstroke 0x23 shift altgr + +# evdev 36 (0x24), QKeyCode "j", number 0x24 +j 0x24 +J 0x24 shift +dead_hook 0x24 altgr +dead_horn 0x24 shift altgr + +# evdev 37 (0x25), QKeyCode "k", number 0x25 +k 0x25 +K 0x25 shift +kra 0x25 altgr +ampersand 0x25 shift altgr + +# evdev 38 (0x26), QKeyCode "l", number 0x26 +l 0x26 +L 0x26 shift +lstroke 0x26 altgr +Lstroke 0x26 shift altgr + +# evdev 39 (0x27), QKeyCode "semicolon", number 0x27 +m 0x27 +M 0x27 shift +mu 0x27 altgr +masculine 0x27 shift altgr + +# evdev 40 (0x28), QKeyCode "apostrophe", number 0x28 +ugrave 0x28 +percent 0x28 shift +dead_circumflex 0x28 altgr +dead_caron 0x28 shift altgr + +# evdev 41 (0x29), QKeyCode "grave_accent", number 0x29 +twosuperior 0x29 +asciitilde 0x29 shift +notsign 0x29 altgr + +# evdev 42 (0x2a), QKeyCode "shift", number 0x2a +Shift_L 0x2a + +# evdev 43 (0x2b), QKeyCode "backslash", number 0x2b +asterisk 0x2b +mu 0x2b shift +dead_grave 0x2b altgr +dead_breve 0x2b shift altgr + +# evdev 44 (0x2c), QKeyCode "z", number 0x2c +w 0x2c +W 0x2c shift +lstroke 0x2c altgr +Lstroke 0x2c shift altgr + +# evdev 45 (0x2d), QKeyCode "x", number 0x2d +x 0x2d +X 0x2d shift +guillemotright 0x2d altgr +greater 0x2d shift altgr + +# evdev 46 (0x2e), QKeyCode "c", number 0x2e +c 0x2e +C 0x2e shift +cent 0x2e altgr +copyright 0x2e shift altgr + +# evdev 47 (0x2f), QKeyCode "v", number 0x2f +v 0x2f +V 0x2f shift +leftdoublequotemark 0x2f altgr +leftsinglequotemark 0x2f shift altgr + +# evdev 48 (0x30), QKeyCode "b", number 0x30 +b 0x30 +B 0x30 shift +rightdoublequotemark 0x30 altgr +rightsinglequotemark 0x30 shift altgr + +# evdev 49 (0x31), QKeyCode "n", number 0x31 +n 0x31 +N 0x31 shift + +# evdev 50 (0x32), QKeyCode "m", number 0x32 +comma 0x32 +question 0x32 shift +dead_acute 0x32 altgr +dead_doubleacute 0x32 shift altgr + +# evdev 51 (0x33), QKeyCode "comma", number 0x33 +semicolon 0x33 +period 0x33 shift +horizconnector 0x33 altgr +multiply 0x33 shift altgr + +# evdev 52 (0x34), QKeyCode "dot", number 0x34 +colon 0x34 +slash 0x34 shift +periodcentered 0x34 altgr +division 0x34 shift altgr + +# evdev 53 (0x35), QKeyCode "slash", number 0x35 +exclam 0x35 +section 0x35 shift +dead_belowdot 0x35 altgr +dead_abovedot 0x35 shift altgr + +# evdev 54 (0x36), QKeyCode "shift_r", number 0x36 +Shift_R 0x36 + +# evdev 55 (0x37), QKeyCode "kp_multiply", number 0x37 +KP_Multiply 0x37 + +# evdev 56 (0x38), QKeyCode "alt", number 0x38 +Alt_L 0x38 +Meta_L 0x38 shift + +# evdev 57 (0x39), QKeyCode "spc", number 0x39 +space 0x39 + +# evdev 58 (0x3a), QKeyCode "caps_lock", number 0x3a +Caps_Lock 0x3a + +# evdev 59 (0x3b), QKeyCode "f1", number 0x3b +F1 0x3b + +# evdev 60 (0x3c), QKeyCode "f2", number 0x3c +F2 0x3c + +# evdev 61 (0x3d), QKeyCode "f3", number 0x3d +F3 0x3d + +# evdev 62 (0x3e), QKeyCode "f4", number 0x3e +F4 0x3e + +# evdev 63 (0x3f), QKeyCode "f5", number 0x3f +F5 0x3f + +# evdev 64 (0x40), QKeyCode "f6", number 0x40 +F6 0x40 + +# evdev 65 (0x41), QKeyCode "f7", number 0x41 +F7 0x41 + +# evdev 66 (0x42), QKeyCode "f8", number 0x42 +F8 0x42 + +# evdev 67 (0x43), QKeyCode "f9", number 0x43 +F9 0x43 + +# evdev 68 (0x44), QKeyCode "f10", number 0x44 +F10 0x44 + +# evdev 69 (0x45), QKeyCode "num_lock", number 0x45 +Num_Lock 0x45 + +# evdev 70 (0x46), QKeyCode "scroll_lock", number 0x46 +Scroll_Lock 0x46 + +# evdev 71 (0x47), QKeyCode "kp_7", number 0x47 +KP_Home 0x47 +KP_7 0x47 numlock + +# evdev 72 (0x48), QKeyCode "kp_8", number 0x48 +KP_Up 0x48 +KP_8 0x48 numlock + +# evdev 73 (0x49), QKeyCode "kp_9", number 0x49 +KP_Prior 0x49 +KP_9 0x49 numlock + +# evdev 74 (0x4a), QKeyCode "kp_subtract", number 0x4a +KP_Subtract 0x4a + +# evdev 75 (0x4b), QKeyCode "kp_4", number 0x4b +KP_Left 0x4b +KP_4 0x4b numlock + +# evdev 76 (0x4c), QKeyCode "kp_5", number 0x4c +KP_Begin 0x4c +KP_5 0x4c numlock + +# evdev 77 (0x4d), QKeyCode "kp_6", number 0x4d +KP_Right 0x4d +KP_6 0x4d numlock + +# evdev 78 (0x4e), QKeyCode "kp_add", number 0x4e +KP_Add 0x4e + +# evdev 79 (0x4f), QKeyCode "kp_1", number 0x4f +KP_End 0x4f +KP_1 0x4f numlock + +# evdev 80 (0x50), QKeyCode "kp_2", number 0x50 +KP_Down 0x50 +KP_2 0x50 numlock + +# evdev 81 (0x51), QKeyCode "kp_3", number 0x51 +KP_Next 0x51 +KP_3 0x51 numlock + +# evdev 82 (0x52), QKeyCode "kp_0", number 0x52 +KP_Insert 0x52 +KP_0 0x52 numlock + +# evdev 83 (0x53), QKeyCode "kp_decimal", number 0x53 +KP_Delete 0x53 +KP_Decimal 0x53 numlock + +# evdev 84 (0x54): no evdev -> QKeyCode mapping (xkb keysym ISO_Level3_Shift) + +# evdev 85 (0x55): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 86 (0x56), QKeyCode "less", number 0x56 +less 0x56 +greater 0x56 shift +bar 0x56 altgr +brokenbar 0x56 shift altgr + +# evdev 87 (0x57), QKeyCode "f11", number 0x57 +F11 0x57 + +# evdev 88 (0x58), QKeyCode "f12", number 0x58 +F12 0x58 + +# evdev 89 (0x59), QKeyCode "ro", number 0x73 + +# evdev 90 (0x5a): no evdev -> QKeyCode mapping (xkb keysym Katakana) + +# evdev 91 (0x5b), QKeyCode "hiragana", number 0x77 +Hiragana 0x77 + +# evdev 92 (0x5c), QKeyCode "henkan", number 0x79 +Henkan_Mode 0x79 + +# evdev 93 (0x5d): no evdev -> QKeyCode mapping (xkb keysym Hiragana_Katakana) + +# evdev 94 (0x5e): no evdev -> QKeyCode mapping (xkb keysym Muhenkan) + +# evdev 95 (0x5f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 96 (0x60), QKeyCode "kp_enter", number 0x9c +KP_Enter 0x9c + +# evdev 97 (0x61), QKeyCode "ctrl_r", number 0x9d +Control_R 0x9d + +# evdev 98 (0x62), QKeyCode "kp_divide", number 0xb5 +KP_Divide 0xb5 + +# evdev 99 (0x63), QKeyCode "sysrq", number 0x54 +Print 0x54 + +# evdev 100 (0x64), QKeyCode "alt_r", number 0xb8 +ISO_Level3_Shift 0xb8 + +# evdev 101 (0x65), QKeyCode "lf", number 0x5b +Linefeed 0x5b + +# evdev 102 (0x66), QKeyCode "home", number 0xc7 +Home 0xc7 + +# evdev 103 (0x67), QKeyCode "up", number 0xc8 +Up 0xc8 + +# evdev 104 (0x68), QKeyCode "pgup", number 0xc9 +Prior 0xc9 + +# evdev 105 (0x69), QKeyCode "left", number 0xcb +Left 0xcb + +# evdev 106 (0x6a), QKeyCode "right", number 0xcd +Right 0xcd + +# evdev 107 (0x6b), QKeyCode "end", number 0xcf +End 0xcf + +# evdev 108 (0x6c), QKeyCode "down", number 0xd0 +Down 0xd0 + +# evdev 109 (0x6d), QKeyCode "pgdn", number 0xd1 +Next 0xd1 + +# evdev 110 (0x6e), QKeyCode "insert", number 0xd2 +Insert 0xd2 + +# evdev 111 (0x6f), QKeyCode "delete", number 0xd3 +Delete 0xd3 + +# evdev 112 (0x70): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 113 (0x71), QKeyCode "audiomute", number 0xa0 +XF86AudioMute 0xa0 + +# evdev 114 (0x72), QKeyCode "volumedown", number 0xae +XF86AudioLowerVolume 0xae + +# evdev 115 (0x73), QKeyCode "volumeup", number 0xb0 +XF86AudioRaiseVolume 0xb0 + +# evdev 116 (0x74), QKeyCode "power", number 0xde +XF86PowerOff 0xde + +# evdev 117 (0x75), QKeyCode "kp_equals", number 0x59 +KP_Equal 0x59 + +# evdev 118 (0x76): no evdev -> QKeyCode mapping (xkb keysym plusminus) + +# evdev 119 (0x77), QKeyCode "pause", number 0xc6 +Pause 0xc6 + +# evdev 120 (0x78): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchA) + +# evdev 121 (0x79), QKeyCode "kp_comma", number 0x7e +KP_Decimal 0x7e + +# evdev 122 (0x7a): no evdev -> QKeyCode mapping (xkb keysym Hangul) + +# evdev 123 (0x7b): no evdev -> QKeyCode mapping (xkb keysym Hangul_Hanja) + +# evdev 124 (0x7c), QKeyCode "yen", number 0x7d + +# evdev 125 (0x7d), QKeyCode "meta_l", number 0xdb +Super_L 0xdb + +# evdev 126 (0x7e), QKeyCode "meta_r", number 0xdc +Super_R 0xdc + +# evdev 127 (0x7f), QKeyCode "compose", number 0xdd +Menu 0xdd + +# evdev 128 (0x80), QKeyCode "stop", number 0xe8 +Cancel 0xe8 + +# evdev 129 (0x81), QKeyCode "again", number 0x85 +Redo 0x85 + +# evdev 130 (0x82), QKeyCode "props", number 0x86 +SunProps 0x86 + +# evdev 131 (0x83), QKeyCode "undo", number 0x87 +Undo 0x87 + +# evdev 132 (0x84), QKeyCode "front", number 0x8c +SunFront 0x8c + +# evdev 133 (0x85), QKeyCode "copy", number 0xf8 +XF86Copy 0xf8 + +# evdev 134 (0x86), QKeyCode "open", number 0x64 +XF86Open 0x64 + +# evdev 135 (0x87), QKeyCode "paste", number 0x65 +XF86Paste 0x65 + +# evdev 136 (0x88), QKeyCode "find", number 0xc1 +Find 0xc1 + +# evdev 137 (0x89), QKeyCode "cut", number 0xbc +XF86Cut 0xbc + +# evdev 138 (0x8a), QKeyCode "help", number 0xf5 +Help 0xf5 + +# evdev 139 (0x8b), QKeyCode "menu", number 0x9e +XF86MenuKB 0x9e + +# evdev 140 (0x8c), QKeyCode "calculator", number 0xa1 +XF86Calculator 0xa1 + +# evdev 141 (0x8d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 142 (0x8e), QKeyCode "sleep", number 0xdf +XF86Sleep 0xdf + +# evdev 143 (0x8f), QKeyCode "wake", number 0xe3 +XF86WakeUp 0xe3 + +# evdev 144 (0x90): no evdev -> QKeyCode mapping (xkb keysym XF86Explorer) + +# evdev 145 (0x91): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 146 (0x92): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 147 (0x93): no evdev -> QKeyCode mapping (xkb keysym XF86Xfer) + +# evdev 148 (0x94): no evdev -> QKeyCode mapping (xkb keysym XF86Launch1) + +# evdev 149 (0x95): no evdev -> QKeyCode mapping (xkb keysym XF86Launch2) + +# evdev 150 (0x96): no evdev -> QKeyCode mapping (xkb keysym XF86WWW) + +# evdev 151 (0x97): no evdev -> QKeyCode mapping (xkb keysym XF86DOS) + +# evdev 152 (0x98): no evdev -> QKeyCode mapping (xkb keysym XF86ScreenSaver) + +# evdev 153 (0x99): no evdev -> QKeyCode mapping (xkb keysym XF86RotateWindows) + +# evdev 154 (0x9a): no evdev -> QKeyCode mapping (xkb keysym XF86TaskPane) + +# evdev 155 (0x9b), QKeyCode "mail", number 0xec +XF86Mail 0xec + +# evdev 156 (0x9c), QKeyCode "ac_bookmarks", number 0xe6 +XF86Favorites 0xe6 + +# evdev 157 (0x9d), QKeyCode "computer", number 0xeb +XF86MyComputer 0xeb + +# evdev 158 (0x9e), QKeyCode "ac_back", number 0xea +XF86Back 0xea + +# evdev 159 (0x9f), QKeyCode "ac_forward", number 0xe9 +XF86Forward 0xe9 + +# evdev 160 (0xa0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 161 (0xa1): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 162 (0xa2): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 163 (0xa3), QKeyCode "audionext", number 0x99 +XF86AudioNext 0x99 + +# evdev 164 (0xa4), QKeyCode "audioplay", number 0xa2 +XF86AudioPlay 0xa2 +XF86AudioPause 0xa2 shift + +# evdev 165 (0xa5), QKeyCode "audioprev", number 0x90 +XF86AudioPrev 0x90 + +# evdev 166 (0xa6), QKeyCode "audiostop", number 0xa4 +XF86AudioStop 0xa4 +XF86Eject 0xa4 shift + +# evdev 167 (0xa7): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRecord) + +# evdev 168 (0xa8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRewind) + +# evdev 169 (0xa9): no evdev -> QKeyCode mapping (xkb keysym XF86Phone) + +# evdev 170 (0xaa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 171 (0xab): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 172 (0xac), QKeyCode "ac_home", number 0xb2 +XF86HomePage 0xb2 + +# evdev 173 (0xad), QKeyCode "ac_refresh", number 0xe7 +XF86Reload 0xe7 + +# evdev 174 (0xae): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 175 (0xaf): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 176 (0xb0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 177 (0xb1): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollUp) + +# evdev 178 (0xb2): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollDown) + +# evdev 179 (0xb3): no evdev -> QKeyCode mapping (xkb keysym parenleft) + +# evdev 180 (0xb4): no evdev -> QKeyCode mapping (xkb keysym parenright) + +# evdev 181 (0xb5): no evdev -> QKeyCode mapping (xkb keysym XF86New) + +# evdev 182 (0xb6): no evdev -> QKeyCode mapping (xkb keysym Redo) + +# evdev 183 (0xb7): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 184 (0xb8): no evdev -> QKeyCode mapping (xkb keysym XF86Launch5) + +# evdev 185 (0xb9): no evdev -> QKeyCode mapping (xkb keysym XF86Launch6) + +# evdev 186 (0xba): no evdev -> QKeyCode mapping (xkb keysym XF86Launch7) + +# evdev 187 (0xbb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch8) + +# evdev 188 (0xbc): no evdev -> QKeyCode mapping (xkb keysym XF86Launch9) + +# evdev 189 (0xbd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 190 (0xbe): no evdev -> QKeyCode mapping (xkb keysym XF86AudioMicMute) + +# evdev 191 (0xbf): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadToggle) + +# evdev 192 (0xc0): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOn) + +# evdev 193 (0xc1): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOff) + +# evdev 194 (0xc2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 195 (0xc3): no evdev -> QKeyCode mapping (xkb keysym Mode_switch) + +# evdev 196 (0xc4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 197 (0xc5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 198 (0xc6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 199 (0xc7): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 200 (0xc8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 201 (0xc9): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPause) + +# evdev 202 (0xca): no evdev -> QKeyCode mapping (xkb keysym XF86Launch3) + +# evdev 203 (0xcb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch4) + +# evdev 204 (0xcc): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchB) + +# evdev 205 (0xcd): no evdev -> QKeyCode mapping (xkb keysym XF86Suspend) + +# evdev 206 (0xce): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 207 (0xcf): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 208 (0xd0): no evdev -> QKeyCode mapping (xkb keysym XF86AudioForward) + +# evdev 209 (0xd1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 210 (0xd2): no evdev -> QKeyCode mapping (xkb keysym Print) + +# evdev 211 (0xd3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 212 (0xd4): no evdev -> QKeyCode mapping (xkb keysym XF86WebCam) + +# evdev 213 (0xd5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 214 (0xd6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 215 (0xd7): no evdev -> QKeyCode mapping (xkb keysym XF86Mail) + +# evdev 216 (0xd8): no evdev -> QKeyCode mapping (xkb keysym XF86Messenger) + +# evdev 217 (0xd9): no evdev -> QKeyCode mapping (xkb keysym XF86Search) + +# evdev 218 (0xda): no evdev -> QKeyCode mapping (xkb keysym XF86Go) + +# evdev 219 (0xdb): no evdev -> QKeyCode mapping (xkb keysym XF86Finance) + +# evdev 220 (0xdc): no evdev -> QKeyCode mapping (xkb keysym XF86Game) + +# evdev 221 (0xdd): no evdev -> QKeyCode mapping (xkb keysym XF86Shop) + +# evdev 222 (0xde): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 223 (0xdf): no evdev -> QKeyCode mapping (xkb keysym Cancel) + +# evdev 224 (0xe0): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessDown) + +# evdev 225 (0xe1): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessUp) + +# evdev 226 (0xe2), QKeyCode "mediaselect", number 0xed +XF86AudioMedia 0xed + +# evdev 227 (0xe3): no evdev -> QKeyCode mapping (xkb keysym XF86Display) + +# evdev 228 (0xe4): no evdev -> QKeyCode mapping (xkb keysym XF86KbdLightOnOff) + +# evdev 229 (0xe5): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessDown) + +# evdev 230 (0xe6): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessUp) + +# evdev 231 (0xe7): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 232 (0xe8): no evdev -> QKeyCode mapping (xkb keysym XF86Reply) + +# evdev 233 (0xe9): no evdev -> QKeyCode mapping (xkb keysym XF86MailForward) + +# evdev 234 (0xea): no evdev -> QKeyCode mapping (xkb keysym XF86Save) + +# evdev 235 (0xeb): no evdev -> QKeyCode mapping (xkb keysym XF86Documents) + +# evdev 236 (0xec): no evdev -> QKeyCode mapping (xkb keysym XF86Battery) + +# evdev 237 (0xed): no evdev -> QKeyCode mapping (xkb keysym XF86Bluetooth) + +# evdev 238 (0xee): no evdev -> QKeyCode mapping (xkb keysym XF86WLAN) + +# evdev 239 (0xef): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 240 (0xf0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 241 (0xf1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 242 (0xf2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 243 (0xf3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 244 (0xf4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# +# quirks section start +# +# Sometimes multiple keysyms map to the same keycodes. +# The keycode -> keysym lookup finds only one of the +# keysyms. So append them here. +# + +Print 0x54 +Sys_Req 0x54 +Execute 0x54 +KP_Decimal 0x53 numlock +KP_Separator 0x53 numlock +Alt_R 0xb8 +ISO_Level3_Shift 0xb8 +Mode_switch 0xb8 + +# quirks section end diff --git a/app/src/main/assets/roms/keymaps/fr-be b/app/src/main/assets/roms/keymaps/fr-be new file mode 100644 index 0000000..9d2ac5d --- /dev/null +++ b/app/src/main/assets/roms/keymaps/fr-be @@ -0,0 +1,836 @@ +# +# generated by qemu-keymap +# model : pc105 +# layout : be +# variant : - +# options : - + +# name: "Belgian" + +# modifiers +# 0: Shift +# 1: Lock +# 2: Control +# 3: Mod1 +# 4: Mod2 +# 5: Mod3 +# 6: Mod4 +# 7: Mod5 +# 8: NumLock +# 9: Alt +# 10: LevelThree +# 11: LAlt +# 12: RAlt +# 13: RControl +# 14: LControl +# 15: ScrollLock +# 16: LevelFive +# 17: AltGr +# 18: Meta +# 19: Super +# 20: Hyper + +# evdev 1 (0x1), QKeyCode "esc", number 0x1 +Escape 0x01 + +# evdev 2 (0x2), QKeyCode "1", number 0x2 +ampersand 0x02 +1 0x02 shift +bar 0x02 altgr +exclamdown 0x02 shift altgr + +# evdev 3 (0x3), QKeyCode "2", number 0x3 +eacute 0x03 +2 0x03 shift +at 0x03 altgr +oneeighth 0x03 shift altgr + +# evdev 4 (0x4), QKeyCode "3", number 0x4 +quotedbl 0x04 +3 0x04 shift +numbersign 0x04 altgr +sterling 0x04 shift altgr + +# evdev 5 (0x5), QKeyCode "4", number 0x5 +apostrophe 0x05 +4 0x05 shift +onequarter 0x05 altgr +dollar 0x05 shift altgr + +# evdev 6 (0x6), QKeyCode "5", number 0x6 +parenleft 0x06 +5 0x06 shift +onehalf 0x06 altgr +threeeighths 0x06 shift altgr + +# evdev 7 (0x7), QKeyCode "6", number 0x7 +section 0x07 +6 0x07 shift +asciicircum 0x07 altgr +fiveeighths 0x07 shift altgr + +# evdev 8 (0x8), QKeyCode "7", number 0x8 +egrave 0x08 +7 0x08 shift +braceleft 0x08 altgr +seveneighths 0x08 shift altgr + +# evdev 9 (0x9), QKeyCode "8", number 0x9 +exclam 0x09 +8 0x09 shift +bracketleft 0x09 altgr +trademark 0x09 shift altgr + +# evdev 10 (0xa), QKeyCode "9", number 0xa +ccedilla 0x0a +9 0x0a shift +braceleft 0x0a altgr +plusminus 0x0a shift altgr + +# evdev 11 (0xb), QKeyCode "0", number 0xb +agrave 0x0b +0 0x0b shift +braceright 0x0b altgr +degree 0x0b shift altgr + +# evdev 12 (0xc), QKeyCode "minus", number 0xc +parenright 0x0c +degree 0x0c shift +backslash 0x0c altgr +questiondown 0x0c shift altgr + +# evdev 13 (0xd), QKeyCode "equal", number 0xd +minus 0x0d +underscore 0x0d shift +dead_cedilla 0x0d altgr +dead_ogonek 0x0d shift altgr + +# evdev 14 (0xe), QKeyCode "backspace", number 0xe +BackSpace 0x0e + +# evdev 15 (0xf), QKeyCode "tab", number 0xf +Tab 0x0f +ISO_Left_Tab 0x0f shift + +# evdev 16 (0x10), QKeyCode "q", number 0x10 +a 0x10 +A 0x10 shift +at 0x10 altgr +Greek_OMEGA 0x10 shift altgr + +# evdev 17 (0x11), QKeyCode "w", number 0x11 +z 0x11 +Z 0x11 shift +lstroke 0x11 altgr +Lstroke 0x11 shift altgr + +# evdev 18 (0x12), QKeyCode "e", number 0x12 +e 0x12 +E 0x12 shift +EuroSign 0x12 altgr +cent 0x12 shift altgr + +# evdev 19 (0x13), QKeyCode "r", number 0x13 +r 0x13 +R 0x13 shift +paragraph 0x13 altgr +registered 0x13 shift altgr + +# evdev 20 (0x14), QKeyCode "t", number 0x14 +t 0x14 +T 0x14 shift +tslash 0x14 altgr +Tslash 0x14 shift altgr + +# evdev 21 (0x15), QKeyCode "y", number 0x15 +y 0x15 +Y 0x15 shift +leftarrow 0x15 altgr +yen 0x15 shift altgr + +# evdev 22 (0x16), QKeyCode "u", number 0x16 +u 0x16 +U 0x16 shift +downarrow 0x16 altgr +uparrow 0x16 shift altgr + +# evdev 23 (0x17), QKeyCode "i", number 0x17 +i 0x17 +I 0x17 shift +rightarrow 0x17 altgr +idotless 0x17 shift altgr + +# evdev 24 (0x18), QKeyCode "o", number 0x18 +o 0x18 +O 0x18 shift +oe 0x18 altgr +OE 0x18 shift altgr + +# evdev 25 (0x19), QKeyCode "p", number 0x19 +p 0x19 +P 0x19 shift +thorn 0x19 altgr +THORN 0x19 shift altgr + +# evdev 26 (0x1a), QKeyCode "bracket_left", number 0x1a +dead_circumflex 0x1a +dead_diaeresis 0x1a shift +bracketleft 0x1a altgr +dead_abovering 0x1a shift altgr + +# evdev 27 (0x1b), QKeyCode "bracket_right", number 0x1b +dollar 0x1b +asterisk 0x1b shift +bracketright 0x1b altgr +dead_macron 0x1b shift altgr + +# evdev 28 (0x1c), QKeyCode "ret", number 0x1c +Return 0x1c + +# evdev 29 (0x1d), QKeyCode "ctrl", number 0x1d +Control_L 0x1d + +# evdev 30 (0x1e), QKeyCode "a", number 0x1e +q 0x1e +Q 0x1e shift +ae 0x1e altgr +AE 0x1e shift altgr + +# evdev 31 (0x1f), QKeyCode "s", number 0x1f +s 0x1f +S 0x1f shift +ssharp 0x1f altgr +section 0x1f shift altgr + +# evdev 32 (0x20), QKeyCode "d", number 0x20 +d 0x20 +D 0x20 shift +eth 0x20 altgr +ETH 0x20 shift altgr + +# evdev 33 (0x21), QKeyCode "f", number 0x21 +f 0x21 +F 0x21 shift +dstroke 0x21 altgr +ordfeminine 0x21 shift altgr + +# evdev 34 (0x22), QKeyCode "g", number 0x22 +g 0x22 +G 0x22 shift +eng 0x22 altgr +ENG 0x22 shift altgr + +# evdev 35 (0x23), QKeyCode "h", number 0x23 +h 0x23 +H 0x23 shift +hstroke 0x23 altgr +Hstroke 0x23 shift altgr + +# evdev 36 (0x24), QKeyCode "j", number 0x24 +j 0x24 +J 0x24 shift +dead_hook 0x24 altgr +dead_horn 0x24 shift altgr + +# evdev 37 (0x25), QKeyCode "k", number 0x25 +k 0x25 +K 0x25 shift +kra 0x25 altgr +ampersand 0x25 shift altgr + +# evdev 38 (0x26), QKeyCode "l", number 0x26 +l 0x26 +L 0x26 shift +lstroke 0x26 altgr +Lstroke 0x26 shift altgr + +# evdev 39 (0x27), QKeyCode "semicolon", number 0x27 +m 0x27 +M 0x27 shift +dead_acute 0x27 altgr +dead_doubleacute 0x27 shift altgr + +# evdev 40 (0x28), QKeyCode "apostrophe", number 0x28 +ugrave 0x28 +percent 0x28 shift +dead_acute 0x28 altgr +dead_caron 0x28 shift altgr + +# evdev 41 (0x29), QKeyCode "grave_accent", number 0x29 +twosuperior 0x29 +threesuperior 0x29 shift +notsign 0x29 altgr + +# evdev 42 (0x2a), QKeyCode "shift", number 0x2a +Shift_L 0x2a + +# evdev 43 (0x2b), QKeyCode "backslash", number 0x2b +mu 0x2b +sterling 0x2b shift +dead_grave 0x2b altgr +dead_breve 0x2b shift altgr + +# evdev 44 (0x2c), QKeyCode "z", number 0x2c +w 0x2c +W 0x2c shift +guillemotleft 0x2c altgr +less 0x2c shift altgr + +# evdev 45 (0x2d), QKeyCode "x", number 0x2d +x 0x2d +X 0x2d shift +guillemotright 0x2d altgr +greater 0x2d shift altgr + +# evdev 46 (0x2e), QKeyCode "c", number 0x2e +c 0x2e +C 0x2e shift +cent 0x2e altgr +copyright 0x2e shift altgr + +# evdev 47 (0x2f), QKeyCode "v", number 0x2f +v 0x2f +V 0x2f shift +leftdoublequotemark 0x2f altgr +leftsinglequotemark 0x2f shift altgr + +# evdev 48 (0x30), QKeyCode "b", number 0x30 +b 0x30 +B 0x30 shift +rightdoublequotemark 0x30 altgr +rightsinglequotemark 0x30 shift altgr + +# evdev 49 (0x31), QKeyCode "n", number 0x31 +n 0x31 +N 0x31 shift + +# evdev 50 (0x32), QKeyCode "m", number 0x32 +comma 0x32 +question 0x32 shift +dead_cedilla 0x32 altgr +masculine 0x32 shift altgr + +# evdev 51 (0x33), QKeyCode "comma", number 0x33 +semicolon 0x33 +period 0x33 shift +horizconnector 0x33 altgr +multiply 0x33 shift altgr + +# evdev 52 (0x34), QKeyCode "dot", number 0x34 +colon 0x34 +slash 0x34 shift +periodcentered 0x34 altgr +division 0x34 shift altgr + +# evdev 53 (0x35), QKeyCode "slash", number 0x35 +equal 0x35 +plus 0x35 shift +dead_tilde 0x35 altgr +dead_abovedot 0x35 shift altgr + +# evdev 54 (0x36), QKeyCode "shift_r", number 0x36 +Shift_R 0x36 + +# evdev 55 (0x37), QKeyCode "kp_multiply", number 0x37 +KP_Multiply 0x37 + +# evdev 56 (0x38), QKeyCode "alt", number 0x38 +Alt_L 0x38 +Meta_L 0x38 shift + +# evdev 57 (0x39), QKeyCode "spc", number 0x39 +space 0x39 + +# evdev 58 (0x3a), QKeyCode "caps_lock", number 0x3a +Caps_Lock 0x3a + +# evdev 59 (0x3b), QKeyCode "f1", number 0x3b +F1 0x3b + +# evdev 60 (0x3c), QKeyCode "f2", number 0x3c +F2 0x3c + +# evdev 61 (0x3d), QKeyCode "f3", number 0x3d +F3 0x3d + +# evdev 62 (0x3e), QKeyCode "f4", number 0x3e +F4 0x3e + +# evdev 63 (0x3f), QKeyCode "f5", number 0x3f +F5 0x3f + +# evdev 64 (0x40), QKeyCode "f6", number 0x40 +F6 0x40 + +# evdev 65 (0x41), QKeyCode "f7", number 0x41 +F7 0x41 + +# evdev 66 (0x42), QKeyCode "f8", number 0x42 +F8 0x42 + +# evdev 67 (0x43), QKeyCode "f9", number 0x43 +F9 0x43 + +# evdev 68 (0x44), QKeyCode "f10", number 0x44 +F10 0x44 + +# evdev 69 (0x45), QKeyCode "num_lock", number 0x45 +Num_Lock 0x45 + +# evdev 70 (0x46), QKeyCode "scroll_lock", number 0x46 +Scroll_Lock 0x46 + +# evdev 71 (0x47), QKeyCode "kp_7", number 0x47 +KP_Home 0x47 +KP_7 0x47 numlock + +# evdev 72 (0x48), QKeyCode "kp_8", number 0x48 +KP_Up 0x48 +KP_8 0x48 numlock + +# evdev 73 (0x49), QKeyCode "kp_9", number 0x49 +KP_Prior 0x49 +KP_9 0x49 numlock + +# evdev 74 (0x4a), QKeyCode "kp_subtract", number 0x4a +KP_Subtract 0x4a + +# evdev 75 (0x4b), QKeyCode "kp_4", number 0x4b +KP_Left 0x4b +KP_4 0x4b numlock + +# evdev 76 (0x4c), QKeyCode "kp_5", number 0x4c +KP_Begin 0x4c +KP_5 0x4c numlock + +# evdev 77 (0x4d), QKeyCode "kp_6", number 0x4d +KP_Right 0x4d +KP_6 0x4d numlock + +# evdev 78 (0x4e), QKeyCode "kp_add", number 0x4e +KP_Add 0x4e + +# evdev 79 (0x4f), QKeyCode "kp_1", number 0x4f +KP_End 0x4f +KP_1 0x4f numlock + +# evdev 80 (0x50), QKeyCode "kp_2", number 0x50 +KP_Down 0x50 +KP_2 0x50 numlock + +# evdev 81 (0x51), QKeyCode "kp_3", number 0x51 +KP_Next 0x51 +KP_3 0x51 numlock + +# evdev 82 (0x52), QKeyCode "kp_0", number 0x52 +KP_Insert 0x52 +KP_0 0x52 numlock + +# evdev 83 (0x53), QKeyCode "kp_decimal", number 0x53 +KP_Delete 0x53 +KP_Decimal 0x53 numlock + +# evdev 84 (0x54): no evdev -> QKeyCode mapping (xkb keysym ISO_Level3_Shift) + +# evdev 85 (0x55): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 86 (0x56), QKeyCode "less", number 0x56 +less 0x56 +greater 0x56 shift +backslash 0x56 altgr + +# evdev 87 (0x57), QKeyCode "f11", number 0x57 +F11 0x57 + +# evdev 88 (0x58), QKeyCode "f12", number 0x58 +F12 0x58 + +# evdev 89 (0x59), QKeyCode "ro", number 0x73 + +# evdev 90 (0x5a): no evdev -> QKeyCode mapping (xkb keysym Katakana) + +# evdev 91 (0x5b), QKeyCode "hiragana", number 0x77 +Hiragana 0x77 + +# evdev 92 (0x5c), QKeyCode "henkan", number 0x79 +Henkan_Mode 0x79 + +# evdev 93 (0x5d): no evdev -> QKeyCode mapping (xkb keysym Hiragana_Katakana) + +# evdev 94 (0x5e): no evdev -> QKeyCode mapping (xkb keysym Muhenkan) + +# evdev 95 (0x5f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 96 (0x60), QKeyCode "kp_enter", number 0x9c +KP_Enter 0x9c + +# evdev 97 (0x61), QKeyCode "ctrl_r", number 0x9d +Control_R 0x9d + +# evdev 98 (0x62), QKeyCode "kp_divide", number 0xb5 +KP_Divide 0xb5 + +# evdev 99 (0x63), QKeyCode "sysrq", number 0x54 +Print 0x54 + +# evdev 100 (0x64), QKeyCode "alt_r", number 0xb8 +ISO_Level3_Shift 0xb8 + +# evdev 101 (0x65), QKeyCode "lf", number 0x5b +Linefeed 0x5b + +# evdev 102 (0x66), QKeyCode "home", number 0xc7 +Home 0xc7 + +# evdev 103 (0x67), QKeyCode "up", number 0xc8 +Up 0xc8 + +# evdev 104 (0x68), QKeyCode "pgup", number 0xc9 +Prior 0xc9 + +# evdev 105 (0x69), QKeyCode "left", number 0xcb +Left 0xcb + +# evdev 106 (0x6a), QKeyCode "right", number 0xcd +Right 0xcd + +# evdev 107 (0x6b), QKeyCode "end", number 0xcf +End 0xcf + +# evdev 108 (0x6c), QKeyCode "down", number 0xd0 +Down 0xd0 + +# evdev 109 (0x6d), QKeyCode "pgdn", number 0xd1 +Next 0xd1 + +# evdev 110 (0x6e), QKeyCode "insert", number 0xd2 +Insert 0xd2 + +# evdev 111 (0x6f), QKeyCode "delete", number 0xd3 +Delete 0xd3 + +# evdev 112 (0x70): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 113 (0x71), QKeyCode "audiomute", number 0xa0 +XF86AudioMute 0xa0 + +# evdev 114 (0x72), QKeyCode "volumedown", number 0xae +XF86AudioLowerVolume 0xae + +# evdev 115 (0x73), QKeyCode "volumeup", number 0xb0 +XF86AudioRaiseVolume 0xb0 + +# evdev 116 (0x74), QKeyCode "power", number 0xde +XF86PowerOff 0xde + +# evdev 117 (0x75), QKeyCode "kp_equals", number 0x59 +KP_Equal 0x59 + +# evdev 118 (0x76): no evdev -> QKeyCode mapping (xkb keysym plusminus) + +# evdev 119 (0x77), QKeyCode "pause", number 0xc6 +Pause 0xc6 + +# evdev 120 (0x78): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchA) + +# evdev 121 (0x79), QKeyCode "kp_comma", number 0x7e +KP_Decimal 0x7e + +# evdev 122 (0x7a): no evdev -> QKeyCode mapping (xkb keysym Hangul) + +# evdev 123 (0x7b): no evdev -> QKeyCode mapping (xkb keysym Hangul_Hanja) + +# evdev 124 (0x7c), QKeyCode "yen", number 0x7d + +# evdev 125 (0x7d), QKeyCode "meta_l", number 0xdb +Super_L 0xdb + +# evdev 126 (0x7e), QKeyCode "meta_r", number 0xdc +Super_R 0xdc + +# evdev 127 (0x7f), QKeyCode "compose", number 0xdd +Menu 0xdd + +# evdev 128 (0x80), QKeyCode "stop", number 0xe8 +Cancel 0xe8 + +# evdev 129 (0x81), QKeyCode "again", number 0x85 +Redo 0x85 + +# evdev 130 (0x82), QKeyCode "props", number 0x86 +SunProps 0x86 + +# evdev 131 (0x83), QKeyCode "undo", number 0x87 +Undo 0x87 + +# evdev 132 (0x84), QKeyCode "front", number 0x8c +SunFront 0x8c + +# evdev 133 (0x85), QKeyCode "copy", number 0xf8 +XF86Copy 0xf8 + +# evdev 134 (0x86), QKeyCode "open", number 0x64 +XF86Open 0x64 + +# evdev 135 (0x87), QKeyCode "paste", number 0x65 +XF86Paste 0x65 + +# evdev 136 (0x88), QKeyCode "find", number 0xc1 +Find 0xc1 + +# evdev 137 (0x89), QKeyCode "cut", number 0xbc +XF86Cut 0xbc + +# evdev 138 (0x8a), QKeyCode "help", number 0xf5 +Help 0xf5 + +# evdev 139 (0x8b), QKeyCode "menu", number 0x9e +XF86MenuKB 0x9e + +# evdev 140 (0x8c), QKeyCode "calculator", number 0xa1 +XF86Calculator 0xa1 + +# evdev 141 (0x8d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 142 (0x8e), QKeyCode "sleep", number 0xdf +XF86Sleep 0xdf + +# evdev 143 (0x8f), QKeyCode "wake", number 0xe3 +XF86WakeUp 0xe3 + +# evdev 144 (0x90): no evdev -> QKeyCode mapping (xkb keysym XF86Explorer) + +# evdev 145 (0x91): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 146 (0x92): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 147 (0x93): no evdev -> QKeyCode mapping (xkb keysym XF86Xfer) + +# evdev 148 (0x94): no evdev -> QKeyCode mapping (xkb keysym XF86Launch1) + +# evdev 149 (0x95): no evdev -> QKeyCode mapping (xkb keysym XF86Launch2) + +# evdev 150 (0x96): no evdev -> QKeyCode mapping (xkb keysym XF86WWW) + +# evdev 151 (0x97): no evdev -> QKeyCode mapping (xkb keysym XF86DOS) + +# evdev 152 (0x98): no evdev -> QKeyCode mapping (xkb keysym XF86ScreenSaver) + +# evdev 153 (0x99): no evdev -> QKeyCode mapping (xkb keysym XF86RotateWindows) + +# evdev 154 (0x9a): no evdev -> QKeyCode mapping (xkb keysym XF86TaskPane) + +# evdev 155 (0x9b), QKeyCode "mail", number 0xec +XF86Mail 0xec + +# evdev 156 (0x9c), QKeyCode "ac_bookmarks", number 0xe6 +XF86Favorites 0xe6 + +# evdev 157 (0x9d), QKeyCode "computer", number 0xeb +XF86MyComputer 0xeb + +# evdev 158 (0x9e), QKeyCode "ac_back", number 0xea +XF86Back 0xea + +# evdev 159 (0x9f), QKeyCode "ac_forward", number 0xe9 +XF86Forward 0xe9 + +# evdev 160 (0xa0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 161 (0xa1): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 162 (0xa2): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 163 (0xa3), QKeyCode "audionext", number 0x99 +XF86AudioNext 0x99 + +# evdev 164 (0xa4), QKeyCode "audioplay", number 0xa2 +XF86AudioPlay 0xa2 +XF86AudioPause 0xa2 shift + +# evdev 165 (0xa5), QKeyCode "audioprev", number 0x90 +XF86AudioPrev 0x90 + +# evdev 166 (0xa6), QKeyCode "audiostop", number 0xa4 +XF86AudioStop 0xa4 +XF86Eject 0xa4 shift + +# evdev 167 (0xa7): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRecord) + +# evdev 168 (0xa8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRewind) + +# evdev 169 (0xa9): no evdev -> QKeyCode mapping (xkb keysym XF86Phone) + +# evdev 170 (0xaa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 171 (0xab): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 172 (0xac), QKeyCode "ac_home", number 0xb2 +XF86HomePage 0xb2 + +# evdev 173 (0xad), QKeyCode "ac_refresh", number 0xe7 +XF86Reload 0xe7 + +# evdev 174 (0xae): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 175 (0xaf): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 176 (0xb0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 177 (0xb1): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollUp) + +# evdev 178 (0xb2): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollDown) + +# evdev 179 (0xb3): no evdev -> QKeyCode mapping (xkb keysym parenleft) + +# evdev 180 (0xb4): no evdev -> QKeyCode mapping (xkb keysym parenright) + +# evdev 181 (0xb5): no evdev -> QKeyCode mapping (xkb keysym XF86New) + +# evdev 182 (0xb6): no evdev -> QKeyCode mapping (xkb keysym Redo) + +# evdev 183 (0xb7): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 184 (0xb8): no evdev -> QKeyCode mapping (xkb keysym XF86Launch5) + +# evdev 185 (0xb9): no evdev -> QKeyCode mapping (xkb keysym XF86Launch6) + +# evdev 186 (0xba): no evdev -> QKeyCode mapping (xkb keysym XF86Launch7) + +# evdev 187 (0xbb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch8) + +# evdev 188 (0xbc): no evdev -> QKeyCode mapping (xkb keysym XF86Launch9) + +# evdev 189 (0xbd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 190 (0xbe): no evdev -> QKeyCode mapping (xkb keysym XF86AudioMicMute) + +# evdev 191 (0xbf): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadToggle) + +# evdev 192 (0xc0): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOn) + +# evdev 193 (0xc1): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOff) + +# evdev 194 (0xc2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 195 (0xc3): no evdev -> QKeyCode mapping (xkb keysym Mode_switch) + +# evdev 196 (0xc4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 197 (0xc5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 198 (0xc6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 199 (0xc7): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 200 (0xc8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 201 (0xc9): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPause) + +# evdev 202 (0xca): no evdev -> QKeyCode mapping (xkb keysym XF86Launch3) + +# evdev 203 (0xcb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch4) + +# evdev 204 (0xcc): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchB) + +# evdev 205 (0xcd): no evdev -> QKeyCode mapping (xkb keysym XF86Suspend) + +# evdev 206 (0xce): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 207 (0xcf): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 208 (0xd0): no evdev -> QKeyCode mapping (xkb keysym XF86AudioForward) + +# evdev 209 (0xd1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 210 (0xd2): no evdev -> QKeyCode mapping (xkb keysym Print) + +# evdev 211 (0xd3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 212 (0xd4): no evdev -> QKeyCode mapping (xkb keysym XF86WebCam) + +# evdev 213 (0xd5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 214 (0xd6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 215 (0xd7): no evdev -> QKeyCode mapping (xkb keysym XF86Mail) + +# evdev 216 (0xd8): no evdev -> QKeyCode mapping (xkb keysym XF86Messenger) + +# evdev 217 (0xd9): no evdev -> QKeyCode mapping (xkb keysym XF86Search) + +# evdev 218 (0xda): no evdev -> QKeyCode mapping (xkb keysym XF86Go) + +# evdev 219 (0xdb): no evdev -> QKeyCode mapping (xkb keysym XF86Finance) + +# evdev 220 (0xdc): no evdev -> QKeyCode mapping (xkb keysym XF86Game) + +# evdev 221 (0xdd): no evdev -> QKeyCode mapping (xkb keysym XF86Shop) + +# evdev 222 (0xde): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 223 (0xdf): no evdev -> QKeyCode mapping (xkb keysym Cancel) + +# evdev 224 (0xe0): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessDown) + +# evdev 225 (0xe1): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessUp) + +# evdev 226 (0xe2), QKeyCode "mediaselect", number 0xed +XF86AudioMedia 0xed + +# evdev 227 (0xe3): no evdev -> QKeyCode mapping (xkb keysym XF86Display) + +# evdev 228 (0xe4): no evdev -> QKeyCode mapping (xkb keysym XF86KbdLightOnOff) + +# evdev 229 (0xe5): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessDown) + +# evdev 230 (0xe6): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessUp) + +# evdev 231 (0xe7): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 232 (0xe8): no evdev -> QKeyCode mapping (xkb keysym XF86Reply) + +# evdev 233 (0xe9): no evdev -> QKeyCode mapping (xkb keysym XF86MailForward) + +# evdev 234 (0xea): no evdev -> QKeyCode mapping (xkb keysym XF86Save) + +# evdev 235 (0xeb): no evdev -> QKeyCode mapping (xkb keysym XF86Documents) + +# evdev 236 (0xec): no evdev -> QKeyCode mapping (xkb keysym XF86Battery) + +# evdev 237 (0xed): no evdev -> QKeyCode mapping (xkb keysym XF86Bluetooth) + +# evdev 238 (0xee): no evdev -> QKeyCode mapping (xkb keysym XF86WLAN) + +# evdev 239 (0xef): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 240 (0xf0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 241 (0xf1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 242 (0xf2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 243 (0xf3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 244 (0xf4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# +# quirks section start +# +# Sometimes multiple keysyms map to the same keycodes. +# The keycode -> keysym lookup finds only one of the +# keysyms. So append them here. +# + +Print 0x54 +Sys_Req 0x54 +Execute 0x54 +KP_Decimal 0x53 numlock +KP_Separator 0x53 numlock +Alt_R 0xb8 +ISO_Level3_Shift 0xb8 +Mode_switch 0xb8 + +# quirks section end diff --git a/app/src/main/assets/roms/keymaps/fr-ca b/app/src/main/assets/roms/keymaps/fr-ca new file mode 100644 index 0000000..736897b --- /dev/null +++ b/app/src/main/assets/roms/keymaps/fr-ca @@ -0,0 +1,768 @@ +# +# generated by qemu-keymap +# model : pc105 +# layout : ca +# variant : fr +# options : - + +# name: "French (Canada)" + +# modifiers +# 0: Shift +# 1: Lock +# 2: Control +# 3: Mod1 +# 4: Mod2 +# 5: Mod3 +# 6: Mod4 +# 7: Mod5 +# 8: NumLock +# 9: Alt +# 10: LevelThree +# 11: LAlt +# 12: RAlt +# 13: RControl +# 14: LControl +# 15: ScrollLock +# 16: LevelFive +# 17: AltGr +# 18: Meta +# 19: Super +# 20: Hyper + +# evdev 1 (0x1), QKeyCode "esc", number 0x1 +Escape 0x01 + +# evdev 2 (0x2), QKeyCode "1", number 0x2 +1 0x02 +exclam 0x02 shift +plusminus 0x02 altgr + +# evdev 3 (0x3), QKeyCode "2", number 0x3 +2 0x03 +quotedbl 0x03 shift +at 0x03 altgr + +# evdev 4 (0x4), QKeyCode "3", number 0x4 +3 0x04 +slash 0x04 shift +sterling 0x04 altgr + +# evdev 5 (0x5), QKeyCode "4", number 0x5 +4 0x05 +dollar 0x05 shift +cent 0x05 altgr + +# evdev 6 (0x6), QKeyCode "5", number 0x6 +5 0x06 +percent 0x06 shift +currency 0x06 altgr + +# evdev 7 (0x7), QKeyCode "6", number 0x7 +6 0x07 +question 0x07 shift +notsign 0x07 altgr + +# evdev 8 (0x8), QKeyCode "7", number 0x8 +7 0x08 +ampersand 0x08 shift +brokenbar 0x08 altgr + +# evdev 9 (0x9), QKeyCode "8", number 0x9 +8 0x09 +asterisk 0x09 shift +twosuperior 0x09 altgr + +# evdev 10 (0xa), QKeyCode "9", number 0xa +9 0x0a +parenleft 0x0a shift +threesuperior 0x0a altgr + +# evdev 11 (0xb), QKeyCode "0", number 0xb +0 0x0b +parenright 0x0b shift +onequarter 0x0b altgr + +# evdev 12 (0xc), QKeyCode "minus", number 0xc +minus 0x0c +underscore 0x0c shift +onehalf 0x0c altgr + +# evdev 13 (0xd), QKeyCode "equal", number 0xd +equal 0x0d +plus 0x0d shift +threequarters 0x0d altgr + +# evdev 14 (0xe), QKeyCode "backspace", number 0xe +BackSpace 0x0e + +# evdev 15 (0xf), QKeyCode "tab", number 0xf +Tab 0x0f +ISO_Left_Tab 0x0f shift + +# evdev 16 (0x10), QKeyCode "q", number 0x10 +q 0x10 +Q 0x10 shift + +# evdev 17 (0x11), QKeyCode "w", number 0x11 +w 0x11 +W 0x11 shift + +# evdev 18 (0x12), QKeyCode "e", number 0x12 +e 0x12 +E 0x12 shift + +# evdev 19 (0x13), QKeyCode "r", number 0x13 +r 0x13 +R 0x13 shift + +# evdev 20 (0x14), QKeyCode "t", number 0x14 +t 0x14 +T 0x14 shift + +# evdev 21 (0x15), QKeyCode "y", number 0x15 +y 0x15 +Y 0x15 shift + +# evdev 22 (0x16), QKeyCode "u", number 0x16 +u 0x16 +U 0x16 shift + +# evdev 23 (0x17), QKeyCode "i", number 0x17 +i 0x17 +I 0x17 shift + +# evdev 24 (0x18), QKeyCode "o", number 0x18 +o 0x18 +O 0x18 shift +section 0x18 altgr + +# evdev 25 (0x19), QKeyCode "p", number 0x19 +p 0x19 +P 0x19 shift +paragraph 0x19 altgr + +# evdev 26 (0x1a), QKeyCode "bracket_left", number 0x1a +dead_circumflex 0x1a +bracketleft 0x1a altgr + +# evdev 27 (0x1b), QKeyCode "bracket_right", number 0x1b +dead_cedilla 0x1b +dead_diaeresis 0x1b shift +bracketright 0x1b altgr + +# evdev 28 (0x1c), QKeyCode "ret", number 0x1c +Return 0x1c + +# evdev 29 (0x1d), QKeyCode "ctrl", number 0x1d +Control_L 0x1d + +# evdev 30 (0x1e), QKeyCode "a", number 0x1e +a 0x1e +A 0x1e shift + +# evdev 31 (0x1f), QKeyCode "s", number 0x1f +s 0x1f +S 0x1f shift + +# evdev 32 (0x20), QKeyCode "d", number 0x20 +d 0x20 +D 0x20 shift + +# evdev 33 (0x21), QKeyCode "f", number 0x21 +f 0x21 +F 0x21 shift + +# evdev 34 (0x22), QKeyCode "g", number 0x22 +g 0x22 +G 0x22 shift + +# evdev 35 (0x23), QKeyCode "h", number 0x23 +h 0x23 +H 0x23 shift + +# evdev 36 (0x24), QKeyCode "j", number 0x24 +j 0x24 +J 0x24 shift + +# evdev 37 (0x25), QKeyCode "k", number 0x25 +k 0x25 +K 0x25 shift + +# evdev 38 (0x26), QKeyCode "l", number 0x26 +l 0x26 +L 0x26 shift + +# evdev 39 (0x27), QKeyCode "semicolon", number 0x27 +semicolon 0x27 +colon 0x27 shift +asciitilde 0x27 altgr + +# evdev 40 (0x28), QKeyCode "apostrophe", number 0x28 +dead_grave 0x28 +braceleft 0x28 altgr + +# evdev 41 (0x29), QKeyCode "grave_accent", number 0x29 +numbersign 0x29 +bar 0x29 shift +backslash 0x29 altgr + +# evdev 42 (0x2a), QKeyCode "shift", number 0x2a +Shift_L 0x2a + +# evdev 43 (0x2b), QKeyCode "backslash", number 0x2b +less 0x2b +greater 0x2b shift +braceright 0x2b altgr + +# evdev 44 (0x2c), QKeyCode "z", number 0x2c +z 0x2c +Z 0x2c shift + +# evdev 45 (0x2d), QKeyCode "x", number 0x2d +x 0x2d +X 0x2d shift + +# evdev 46 (0x2e), QKeyCode "c", number 0x2e +c 0x2e +C 0x2e shift + +# evdev 47 (0x2f), QKeyCode "v", number 0x2f +v 0x2f +V 0x2f shift + +# evdev 48 (0x30), QKeyCode "b", number 0x30 +b 0x30 +B 0x30 shift + +# evdev 49 (0x31), QKeyCode "n", number 0x31 +n 0x31 +N 0x31 shift + +# evdev 50 (0x32), QKeyCode "m", number 0x32 +m 0x32 +M 0x32 shift +mu 0x32 altgr + +# evdev 51 (0x33), QKeyCode "comma", number 0x33 +comma 0x33 +apostrophe 0x33 shift +macron 0x33 altgr + +# evdev 52 (0x34), QKeyCode "dot", number 0x34 +period 0x34 +hyphen 0x34 altgr + +# evdev 53 (0x35), QKeyCode "slash", number 0x35 +eacute 0x35 +Eacute 0x35 shift +dead_acute 0x35 altgr + +# evdev 54 (0x36), QKeyCode "shift_r", number 0x36 +Shift_R 0x36 + +# evdev 55 (0x37), QKeyCode "kp_multiply", number 0x37 +KP_Multiply 0x37 + +# evdev 56 (0x38), QKeyCode "alt", number 0x38 +Alt_L 0x38 +Meta_L 0x38 shift + +# evdev 57 (0x39), QKeyCode "spc", number 0x39 +space 0x39 +nobreakspace 0x39 altgr + +# evdev 58 (0x3a), QKeyCode "caps_lock", number 0x3a +Caps_Lock 0x3a + +# evdev 59 (0x3b), QKeyCode "f1", number 0x3b +F1 0x3b + +# evdev 60 (0x3c), QKeyCode "f2", number 0x3c +F2 0x3c + +# evdev 61 (0x3d), QKeyCode "f3", number 0x3d +F3 0x3d + +# evdev 62 (0x3e), QKeyCode "f4", number 0x3e +F4 0x3e + +# evdev 63 (0x3f), QKeyCode "f5", number 0x3f +F5 0x3f + +# evdev 64 (0x40), QKeyCode "f6", number 0x40 +F6 0x40 + +# evdev 65 (0x41), QKeyCode "f7", number 0x41 +F7 0x41 + +# evdev 66 (0x42), QKeyCode "f8", number 0x42 +F8 0x42 + +# evdev 67 (0x43), QKeyCode "f9", number 0x43 +F9 0x43 + +# evdev 68 (0x44), QKeyCode "f10", number 0x44 +F10 0x44 + +# evdev 69 (0x45), QKeyCode "num_lock", number 0x45 +Num_Lock 0x45 + +# evdev 70 (0x46), QKeyCode "scroll_lock", number 0x46 +Scroll_Lock 0x46 + +# evdev 71 (0x47), QKeyCode "kp_7", number 0x47 +KP_Home 0x47 +KP_7 0x47 numlock + +# evdev 72 (0x48), QKeyCode "kp_8", number 0x48 +KP_Up 0x48 +KP_8 0x48 numlock + +# evdev 73 (0x49), QKeyCode "kp_9", number 0x49 +KP_Prior 0x49 +KP_9 0x49 numlock + +# evdev 74 (0x4a), QKeyCode "kp_subtract", number 0x4a +KP_Subtract 0x4a + +# evdev 75 (0x4b), QKeyCode "kp_4", number 0x4b +KP_Left 0x4b +KP_4 0x4b numlock + +# evdev 76 (0x4c), QKeyCode "kp_5", number 0x4c +KP_Begin 0x4c +KP_5 0x4c numlock + +# evdev 77 (0x4d), QKeyCode "kp_6", number 0x4d +KP_Right 0x4d +KP_6 0x4d numlock + +# evdev 78 (0x4e), QKeyCode "kp_add", number 0x4e +KP_Add 0x4e + +# evdev 79 (0x4f), QKeyCode "kp_1", number 0x4f +KP_End 0x4f +KP_1 0x4f numlock + +# evdev 80 (0x50), QKeyCode "kp_2", number 0x50 +KP_Down 0x50 +KP_2 0x50 numlock + +# evdev 81 (0x51), QKeyCode "kp_3", number 0x51 +KP_Next 0x51 +KP_3 0x51 numlock + +# evdev 82 (0x52), QKeyCode "kp_0", number 0x52 +KP_Insert 0x52 +KP_0 0x52 numlock + +# evdev 83 (0x53), QKeyCode "kp_decimal", number 0x53 +KP_Delete 0x53 +KP_Decimal 0x53 numlock + +# evdev 84 (0x54): no evdev -> QKeyCode mapping (xkb keysym ISO_Level3_Shift) + +# evdev 85 (0x55): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 86 (0x56), QKeyCode "less", number 0x56 +guillemotleft 0x56 +guillemotright 0x56 shift +degree 0x56 altgr +brokenbar 0x56 shift altgr + +# evdev 87 (0x57), QKeyCode "f11", number 0x57 +F11 0x57 + +# evdev 88 (0x58), QKeyCode "f12", number 0x58 +F12 0x58 + +# evdev 89 (0x59), QKeyCode "ro", number 0x73 + +# evdev 90 (0x5a): no evdev -> QKeyCode mapping (xkb keysym Katakana) + +# evdev 91 (0x5b), QKeyCode "hiragana", number 0x77 +Hiragana 0x77 + +# evdev 92 (0x5c), QKeyCode "henkan", number 0x79 +Henkan_Mode 0x79 + +# evdev 93 (0x5d): no evdev -> QKeyCode mapping (xkb keysym Hiragana_Katakana) + +# evdev 94 (0x5e): no evdev -> QKeyCode mapping (xkb keysym Muhenkan) + +# evdev 95 (0x5f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 96 (0x60), QKeyCode "kp_enter", number 0x9c +KP_Enter 0x9c + +# evdev 97 (0x61), QKeyCode "ctrl_r", number 0x9d +Control_R 0x9d + +# evdev 98 (0x62), QKeyCode "kp_divide", number 0xb5 +KP_Divide 0xb5 + +# evdev 99 (0x63), QKeyCode "sysrq", number 0x54 +Print 0x54 + +# evdev 100 (0x64), QKeyCode "alt_r", number 0xb8 +ISO_Level3_Shift 0xb8 + +# evdev 101 (0x65), QKeyCode "lf", number 0x5b +Linefeed 0x5b + +# evdev 102 (0x66), QKeyCode "home", number 0xc7 +Home 0xc7 + +# evdev 103 (0x67), QKeyCode "up", number 0xc8 +Up 0xc8 + +# evdev 104 (0x68), QKeyCode "pgup", number 0xc9 +Prior 0xc9 + +# evdev 105 (0x69), QKeyCode "left", number 0xcb +Left 0xcb + +# evdev 106 (0x6a), QKeyCode "right", number 0xcd +Right 0xcd + +# evdev 107 (0x6b), QKeyCode "end", number 0xcf +End 0xcf + +# evdev 108 (0x6c), QKeyCode "down", number 0xd0 +Down 0xd0 + +# evdev 109 (0x6d), QKeyCode "pgdn", number 0xd1 +Next 0xd1 + +# evdev 110 (0x6e), QKeyCode "insert", number 0xd2 +Insert 0xd2 + +# evdev 111 (0x6f), QKeyCode "delete", number 0xd3 +Delete 0xd3 + +# evdev 112 (0x70): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 113 (0x71), QKeyCode "audiomute", number 0xa0 +XF86AudioMute 0xa0 + +# evdev 114 (0x72), QKeyCode "volumedown", number 0xae +XF86AudioLowerVolume 0xae + +# evdev 115 (0x73), QKeyCode "volumeup", number 0xb0 +XF86AudioRaiseVolume 0xb0 + +# evdev 116 (0x74), QKeyCode "power", number 0xde +XF86PowerOff 0xde + +# evdev 117 (0x75), QKeyCode "kp_equals", number 0x59 +KP_Equal 0x59 + +# evdev 118 (0x76): no evdev -> QKeyCode mapping (xkb keysym plusminus) + +# evdev 119 (0x77), QKeyCode "pause", number 0xc6 +Pause 0xc6 + +# evdev 120 (0x78): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchA) + +# evdev 121 (0x79), QKeyCode "kp_comma", number 0x7e +KP_Decimal 0x7e + +# evdev 122 (0x7a): no evdev -> QKeyCode mapping (xkb keysym Hangul) + +# evdev 123 (0x7b): no evdev -> QKeyCode mapping (xkb keysym Hangul_Hanja) + +# evdev 124 (0x7c), QKeyCode "yen", number 0x7d + +# evdev 125 (0x7d), QKeyCode "meta_l", number 0xdb +Super_L 0xdb + +# evdev 126 (0x7e), QKeyCode "meta_r", number 0xdc +Super_R 0xdc + +# evdev 127 (0x7f), QKeyCode "compose", number 0xdd +Menu 0xdd + +# evdev 128 (0x80), QKeyCode "stop", number 0xe8 +Cancel 0xe8 + +# evdev 129 (0x81), QKeyCode "again", number 0x85 +Redo 0x85 + +# evdev 130 (0x82), QKeyCode "props", number 0x86 +SunProps 0x86 + +# evdev 131 (0x83), QKeyCode "undo", number 0x87 +Undo 0x87 + +# evdev 132 (0x84), QKeyCode "front", number 0x8c +SunFront 0x8c + +# evdev 133 (0x85), QKeyCode "copy", number 0xf8 +XF86Copy 0xf8 + +# evdev 134 (0x86), QKeyCode "open", number 0x64 +XF86Open 0x64 + +# evdev 135 (0x87), QKeyCode "paste", number 0x65 +XF86Paste 0x65 + +# evdev 136 (0x88), QKeyCode "find", number 0xc1 +Find 0xc1 + +# evdev 137 (0x89), QKeyCode "cut", number 0xbc +XF86Cut 0xbc + +# evdev 138 (0x8a), QKeyCode "help", number 0xf5 +Help 0xf5 + +# evdev 139 (0x8b), QKeyCode "menu", number 0x9e +XF86MenuKB 0x9e + +# evdev 140 (0x8c), QKeyCode "calculator", number 0xa1 +XF86Calculator 0xa1 + +# evdev 141 (0x8d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 142 (0x8e), QKeyCode "sleep", number 0xdf +XF86Sleep 0xdf + +# evdev 143 (0x8f), QKeyCode "wake", number 0xe3 +XF86WakeUp 0xe3 + +# evdev 144 (0x90): no evdev -> QKeyCode mapping (xkb keysym XF86Explorer) + +# evdev 145 (0x91): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 146 (0x92): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 147 (0x93): no evdev -> QKeyCode mapping (xkb keysym XF86Xfer) + +# evdev 148 (0x94): no evdev -> QKeyCode mapping (xkb keysym XF86Launch1) + +# evdev 149 (0x95): no evdev -> QKeyCode mapping (xkb keysym XF86Launch2) + +# evdev 150 (0x96): no evdev -> QKeyCode mapping (xkb keysym XF86WWW) + +# evdev 151 (0x97): no evdev -> QKeyCode mapping (xkb keysym XF86DOS) + +# evdev 152 (0x98): no evdev -> QKeyCode mapping (xkb keysym XF86ScreenSaver) + +# evdev 153 (0x99): no evdev -> QKeyCode mapping (xkb keysym XF86RotateWindows) + +# evdev 154 (0x9a): no evdev -> QKeyCode mapping (xkb keysym XF86TaskPane) + +# evdev 155 (0x9b), QKeyCode "mail", number 0xec +XF86Mail 0xec + +# evdev 156 (0x9c), QKeyCode "ac_bookmarks", number 0xe6 +XF86Favorites 0xe6 + +# evdev 157 (0x9d), QKeyCode "computer", number 0xeb +XF86MyComputer 0xeb + +# evdev 158 (0x9e), QKeyCode "ac_back", number 0xea +XF86Back 0xea + +# evdev 159 (0x9f), QKeyCode "ac_forward", number 0xe9 +XF86Forward 0xe9 + +# evdev 160 (0xa0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 161 (0xa1): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 162 (0xa2): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 163 (0xa3), QKeyCode "audionext", number 0x99 +XF86AudioNext 0x99 + +# evdev 164 (0xa4), QKeyCode "audioplay", number 0xa2 +XF86AudioPlay 0xa2 +XF86AudioPause 0xa2 shift + +# evdev 165 (0xa5), QKeyCode "audioprev", number 0x90 +XF86AudioPrev 0x90 + +# evdev 166 (0xa6), QKeyCode "audiostop", number 0xa4 +XF86AudioStop 0xa4 +XF86Eject 0xa4 shift + +# evdev 167 (0xa7): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRecord) + +# evdev 168 (0xa8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRewind) + +# evdev 169 (0xa9): no evdev -> QKeyCode mapping (xkb keysym XF86Phone) + +# evdev 170 (0xaa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 171 (0xab): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 172 (0xac), QKeyCode "ac_home", number 0xb2 +XF86HomePage 0xb2 + +# evdev 173 (0xad), QKeyCode "ac_refresh", number 0xe7 +XF86Reload 0xe7 + +# evdev 174 (0xae): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 175 (0xaf): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 176 (0xb0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 177 (0xb1): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollUp) + +# evdev 178 (0xb2): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollDown) + +# evdev 179 (0xb3): no evdev -> QKeyCode mapping (xkb keysym parenleft) + +# evdev 180 (0xb4): no evdev -> QKeyCode mapping (xkb keysym parenright) + +# evdev 181 (0xb5): no evdev -> QKeyCode mapping (xkb keysym XF86New) + +# evdev 182 (0xb6): no evdev -> QKeyCode mapping (xkb keysym Redo) + +# evdev 183 (0xb7): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 184 (0xb8): no evdev -> QKeyCode mapping (xkb keysym XF86Launch5) + +# evdev 185 (0xb9): no evdev -> QKeyCode mapping (xkb keysym XF86Launch6) + +# evdev 186 (0xba): no evdev -> QKeyCode mapping (xkb keysym XF86Launch7) + +# evdev 187 (0xbb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch8) + +# evdev 188 (0xbc): no evdev -> QKeyCode mapping (xkb keysym XF86Launch9) + +# evdev 189 (0xbd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 190 (0xbe): no evdev -> QKeyCode mapping (xkb keysym XF86AudioMicMute) + +# evdev 191 (0xbf): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadToggle) + +# evdev 192 (0xc0): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOn) + +# evdev 193 (0xc1): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOff) + +# evdev 194 (0xc2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 195 (0xc3): no evdev -> QKeyCode mapping (xkb keysym Mode_switch) + +# evdev 196 (0xc4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 197 (0xc5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 198 (0xc6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 199 (0xc7): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 200 (0xc8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 201 (0xc9): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPause) + +# evdev 202 (0xca): no evdev -> QKeyCode mapping (xkb keysym XF86Launch3) + +# evdev 203 (0xcb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch4) + +# evdev 204 (0xcc): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchB) + +# evdev 205 (0xcd): no evdev -> QKeyCode mapping (xkb keysym XF86Suspend) + +# evdev 206 (0xce): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 207 (0xcf): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 208 (0xd0): no evdev -> QKeyCode mapping (xkb keysym XF86AudioForward) + +# evdev 209 (0xd1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 210 (0xd2): no evdev -> QKeyCode mapping (xkb keysym Print) + +# evdev 211 (0xd3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 212 (0xd4): no evdev -> QKeyCode mapping (xkb keysym XF86WebCam) + +# evdev 213 (0xd5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 214 (0xd6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 215 (0xd7): no evdev -> QKeyCode mapping (xkb keysym XF86Mail) + +# evdev 216 (0xd8): no evdev -> QKeyCode mapping (xkb keysym XF86Messenger) + +# evdev 217 (0xd9): no evdev -> QKeyCode mapping (xkb keysym XF86Search) + +# evdev 218 (0xda): no evdev -> QKeyCode mapping (xkb keysym XF86Go) + +# evdev 219 (0xdb): no evdev -> QKeyCode mapping (xkb keysym XF86Finance) + +# evdev 220 (0xdc): no evdev -> QKeyCode mapping (xkb keysym XF86Game) + +# evdev 221 (0xdd): no evdev -> QKeyCode mapping (xkb keysym XF86Shop) + +# evdev 222 (0xde): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 223 (0xdf): no evdev -> QKeyCode mapping (xkb keysym Cancel) + +# evdev 224 (0xe0): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessDown) + +# evdev 225 (0xe1): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessUp) + +# evdev 226 (0xe2), QKeyCode "mediaselect", number 0xed +XF86AudioMedia 0xed + +# evdev 227 (0xe3): no evdev -> QKeyCode mapping (xkb keysym XF86Display) + +# evdev 228 (0xe4): no evdev -> QKeyCode mapping (xkb keysym XF86KbdLightOnOff) + +# evdev 229 (0xe5): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessDown) + +# evdev 230 (0xe6): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessUp) + +# evdev 231 (0xe7): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 232 (0xe8): no evdev -> QKeyCode mapping (xkb keysym XF86Reply) + +# evdev 233 (0xe9): no evdev -> QKeyCode mapping (xkb keysym XF86MailForward) + +# evdev 234 (0xea): no evdev -> QKeyCode mapping (xkb keysym XF86Save) + +# evdev 235 (0xeb): no evdev -> QKeyCode mapping (xkb keysym XF86Documents) + +# evdev 236 (0xec): no evdev -> QKeyCode mapping (xkb keysym XF86Battery) + +# evdev 237 (0xed): no evdev -> QKeyCode mapping (xkb keysym XF86Bluetooth) + +# evdev 238 (0xee): no evdev -> QKeyCode mapping (xkb keysym XF86WLAN) + +# evdev 239 (0xef): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 240 (0xf0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 241 (0xf1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 242 (0xf2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 243 (0xf3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 244 (0xf4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# +# quirks section start +# +# Sometimes multiple keysyms map to the same keycodes. +# The keycode -> keysym lookup finds only one of the +# keysyms. So append them here. +# + +Print 0x54 +Sys_Req 0x54 +Execute 0x54 +KP_Decimal 0x53 numlock +KP_Separator 0x53 numlock +Alt_R 0xb8 +ISO_Level3_Shift 0xb8 +Mode_switch 0xb8 + +# quirks section end diff --git a/app/src/main/assets/roms/keymaps/fr-ch b/app/src/main/assets/roms/keymaps/fr-ch new file mode 100644 index 0000000..40e1fef --- /dev/null +++ b/app/src/main/assets/roms/keymaps/fr-ch @@ -0,0 +1,836 @@ +# +# generated by qemu-keymap +# model : pc105 +# layout : ch +# variant : fr +# options : - + +# name: "French (Switzerland)" + +# modifiers +# 0: Shift +# 1: Lock +# 2: Control +# 3: Mod1 +# 4: Mod2 +# 5: Mod3 +# 6: Mod4 +# 7: Mod5 +# 8: NumLock +# 9: Alt +# 10: LevelThree +# 11: LAlt +# 12: RAlt +# 13: RControl +# 14: LControl +# 15: ScrollLock +# 16: LevelFive +# 17: AltGr +# 18: Meta +# 19: Super +# 20: Hyper + +# evdev 1 (0x1), QKeyCode "esc", number 0x1 +Escape 0x01 + +# evdev 2 (0x2), QKeyCode "1", number 0x2 +1 0x02 +plus 0x02 shift +bar 0x02 altgr +exclamdown 0x02 shift altgr + +# evdev 3 (0x3), QKeyCode "2", number 0x3 +2 0x03 +quotedbl 0x03 shift +at 0x03 altgr +oneeighth 0x03 shift altgr + +# evdev 4 (0x4), QKeyCode "3", number 0x4 +3 0x04 +asterisk 0x04 shift +numbersign 0x04 altgr +sterling 0x04 shift altgr + +# evdev 5 (0x5), QKeyCode "4", number 0x5 +4 0x05 +ccedilla 0x05 shift +onequarter 0x05 altgr +dollar 0x05 shift altgr + +# evdev 6 (0x6), QKeyCode "5", number 0x6 +5 0x06 +percent 0x06 shift +onehalf 0x06 altgr +threeeighths 0x06 shift altgr + +# evdev 7 (0x7), QKeyCode "6", number 0x7 +6 0x07 +ampersand 0x07 shift +notsign 0x07 altgr +fiveeighths 0x07 shift altgr + +# evdev 8 (0x8), QKeyCode "7", number 0x8 +7 0x08 +slash 0x08 shift +bar 0x08 altgr +seveneighths 0x08 shift altgr + +# evdev 9 (0x9), QKeyCode "8", number 0x9 +8 0x09 +parenleft 0x09 shift +cent 0x09 altgr +trademark 0x09 shift altgr + +# evdev 10 (0xa), QKeyCode "9", number 0xa +9 0x0a +parenright 0x0a shift +bracketright 0x0a altgr +plusminus 0x0a shift altgr + +# evdev 11 (0xb), QKeyCode "0", number 0xb +0 0x0b +equal 0x0b shift +braceright 0x0b altgr +degree 0x0b shift altgr + +# evdev 12 (0xc), QKeyCode "minus", number 0xc +apostrophe 0x0c +question 0x0c shift +dead_acute 0x0c altgr +questiondown 0x0c shift altgr + +# evdev 13 (0xd), QKeyCode "equal", number 0xd +dead_circumflex 0x0d +dead_grave 0x0d shift +dead_tilde 0x0d altgr +dead_ogonek 0x0d shift altgr + +# evdev 14 (0xe), QKeyCode "backspace", number 0xe +BackSpace 0x0e + +# evdev 15 (0xf), QKeyCode "tab", number 0xf +Tab 0x0f +ISO_Left_Tab 0x0f shift + +# evdev 16 (0x10), QKeyCode "q", number 0x10 +q 0x10 +Q 0x10 shift +at 0x10 altgr +Greek_OMEGA 0x10 shift altgr + +# evdev 17 (0x11), QKeyCode "w", number 0x11 +w 0x11 +W 0x11 shift +lstroke 0x11 altgr +Lstroke 0x11 shift altgr + +# evdev 18 (0x12), QKeyCode "e", number 0x12 +e 0x12 +E 0x12 shift +EuroSign 0x12 altgr + +# evdev 19 (0x13), QKeyCode "r", number 0x13 +r 0x13 +R 0x13 shift +paragraph 0x13 altgr +registered 0x13 shift altgr + +# evdev 20 (0x14), QKeyCode "t", number 0x14 +t 0x14 +T 0x14 shift +tslash 0x14 altgr +Tslash 0x14 shift altgr + +# evdev 21 (0x15), QKeyCode "y", number 0x15 +z 0x15 +Z 0x15 shift +leftarrow 0x15 altgr +yen 0x15 shift altgr + +# evdev 22 (0x16), QKeyCode "u", number 0x16 +u 0x16 +U 0x16 shift +downarrow 0x16 altgr +uparrow 0x16 shift altgr + +# evdev 23 (0x17), QKeyCode "i", number 0x17 +i 0x17 +I 0x17 shift +rightarrow 0x17 altgr +idotless 0x17 shift altgr + +# evdev 24 (0x18), QKeyCode "o", number 0x18 +o 0x18 +O 0x18 shift +oe 0x18 altgr +OE 0x18 shift altgr + +# evdev 25 (0x19), QKeyCode "p", number 0x19 +p 0x19 +P 0x19 shift +thorn 0x19 altgr +THORN 0x19 shift altgr + +# evdev 26 (0x1a), QKeyCode "bracket_left", number 0x1a +egrave 0x1a +udiaeresis 0x1a shift +bracketleft 0x1a altgr +dead_abovering 0x1a shift altgr + +# evdev 27 (0x1b), QKeyCode "bracket_right", number 0x1b +dead_diaeresis 0x1b +exclam 0x1b shift +bracketright 0x1b altgr +dead_macron 0x1b shift altgr + +# evdev 28 (0x1c), QKeyCode "ret", number 0x1c +Return 0x1c + +# evdev 29 (0x1d), QKeyCode "ctrl", number 0x1d +Control_L 0x1d + +# evdev 30 (0x1e), QKeyCode "a", number 0x1e +a 0x1e +A 0x1e shift +ae 0x1e altgr +AE 0x1e shift altgr + +# evdev 31 (0x1f), QKeyCode "s", number 0x1f +s 0x1f +S 0x1f shift +ssharp 0x1f altgr +section 0x1f shift altgr + +# evdev 32 (0x20), QKeyCode "d", number 0x20 +d 0x20 +D 0x20 shift +eth 0x20 altgr +ETH 0x20 shift altgr + +# evdev 33 (0x21), QKeyCode "f", number 0x21 +f 0x21 +F 0x21 shift +dstroke 0x21 altgr +ordfeminine 0x21 shift altgr + +# evdev 34 (0x22), QKeyCode "g", number 0x22 +g 0x22 +G 0x22 shift +eng 0x22 altgr +ENG 0x22 shift altgr + +# evdev 35 (0x23), QKeyCode "h", number 0x23 +h 0x23 +H 0x23 shift +hstroke 0x23 altgr +Hstroke 0x23 shift altgr + +# evdev 36 (0x24), QKeyCode "j", number 0x24 +j 0x24 +J 0x24 shift +dead_hook 0x24 altgr +dead_horn 0x24 shift altgr + +# evdev 37 (0x25), QKeyCode "k", number 0x25 +k 0x25 +K 0x25 shift +kra 0x25 altgr +ampersand 0x25 shift altgr + +# evdev 38 (0x26), QKeyCode "l", number 0x26 +l 0x26 +L 0x26 shift +lstroke 0x26 altgr +Lstroke 0x26 shift altgr + +# evdev 39 (0x27), QKeyCode "semicolon", number 0x27 +eacute 0x27 +odiaeresis 0x27 shift +dead_acute 0x27 altgr +dead_doubleacute 0x27 shift altgr + +# evdev 40 (0x28), QKeyCode "apostrophe", number 0x28 +agrave 0x28 +adiaeresis 0x28 shift +braceleft 0x28 altgr +dead_caron 0x28 shift altgr + +# evdev 41 (0x29), QKeyCode "grave_accent", number 0x29 +section 0x29 +degree 0x29 shift +notsign 0x29 altgr + +# evdev 42 (0x2a), QKeyCode "shift", number 0x2a +Shift_L 0x2a + +# evdev 43 (0x2b), QKeyCode "backslash", number 0x2b +dollar 0x2b +sterling 0x2b shift +braceright 0x2b altgr +dead_breve 0x2b shift altgr + +# evdev 44 (0x2c), QKeyCode "z", number 0x2c +y 0x2c +Y 0x2c shift +guillemotleft 0x2c altgr +less 0x2c shift altgr + +# evdev 45 (0x2d), QKeyCode "x", number 0x2d +x 0x2d +X 0x2d shift +guillemotright 0x2d altgr +greater 0x2d shift altgr + +# evdev 46 (0x2e), QKeyCode "c", number 0x2e +c 0x2e +C 0x2e shift +cent 0x2e altgr +copyright 0x2e shift altgr + +# evdev 47 (0x2f), QKeyCode "v", number 0x2f +v 0x2f +V 0x2f shift +leftdoublequotemark 0x2f altgr +leftsinglequotemark 0x2f shift altgr + +# evdev 48 (0x30), QKeyCode "b", number 0x30 +b 0x30 +B 0x30 shift +rightdoublequotemark 0x30 altgr +rightsinglequotemark 0x30 shift altgr + +# evdev 49 (0x31), QKeyCode "n", number 0x31 +n 0x31 +N 0x31 shift + +# evdev 50 (0x32), QKeyCode "m", number 0x32 +m 0x32 +M 0x32 shift +mu 0x32 altgr +masculine 0x32 shift altgr + +# evdev 51 (0x33), QKeyCode "comma", number 0x33 +comma 0x33 +semicolon 0x33 shift +horizconnector 0x33 altgr +multiply 0x33 shift altgr + +# evdev 52 (0x34), QKeyCode "dot", number 0x34 +period 0x34 +colon 0x34 shift +periodcentered 0x34 altgr +division 0x34 shift altgr + +# evdev 53 (0x35), QKeyCode "slash", number 0x35 +minus 0x35 +underscore 0x35 shift +dead_belowdot 0x35 altgr +dead_abovedot 0x35 shift altgr + +# evdev 54 (0x36), QKeyCode "shift_r", number 0x36 +Shift_R 0x36 + +# evdev 55 (0x37), QKeyCode "kp_multiply", number 0x37 +KP_Multiply 0x37 + +# evdev 56 (0x38), QKeyCode "alt", number 0x38 +Alt_L 0x38 +Meta_L 0x38 shift + +# evdev 57 (0x39), QKeyCode "spc", number 0x39 +space 0x39 + +# evdev 58 (0x3a), QKeyCode "caps_lock", number 0x3a +Caps_Lock 0x3a + +# evdev 59 (0x3b), QKeyCode "f1", number 0x3b +F1 0x3b + +# evdev 60 (0x3c), QKeyCode "f2", number 0x3c +F2 0x3c + +# evdev 61 (0x3d), QKeyCode "f3", number 0x3d +F3 0x3d + +# evdev 62 (0x3e), QKeyCode "f4", number 0x3e +F4 0x3e + +# evdev 63 (0x3f), QKeyCode "f5", number 0x3f +F5 0x3f + +# evdev 64 (0x40), QKeyCode "f6", number 0x40 +F6 0x40 + +# evdev 65 (0x41), QKeyCode "f7", number 0x41 +F7 0x41 + +# evdev 66 (0x42), QKeyCode "f8", number 0x42 +F8 0x42 + +# evdev 67 (0x43), QKeyCode "f9", number 0x43 +F9 0x43 + +# evdev 68 (0x44), QKeyCode "f10", number 0x44 +F10 0x44 + +# evdev 69 (0x45), QKeyCode "num_lock", number 0x45 +Num_Lock 0x45 + +# evdev 70 (0x46), QKeyCode "scroll_lock", number 0x46 +Scroll_Lock 0x46 + +# evdev 71 (0x47), QKeyCode "kp_7", number 0x47 +KP_Home 0x47 +KP_7 0x47 numlock + +# evdev 72 (0x48), QKeyCode "kp_8", number 0x48 +KP_Up 0x48 +KP_8 0x48 numlock + +# evdev 73 (0x49), QKeyCode "kp_9", number 0x49 +KP_Prior 0x49 +KP_9 0x49 numlock + +# evdev 74 (0x4a), QKeyCode "kp_subtract", number 0x4a +KP_Subtract 0x4a + +# evdev 75 (0x4b), QKeyCode "kp_4", number 0x4b +KP_Left 0x4b +KP_4 0x4b numlock + +# evdev 76 (0x4c), QKeyCode "kp_5", number 0x4c +KP_Begin 0x4c +KP_5 0x4c numlock + +# evdev 77 (0x4d), QKeyCode "kp_6", number 0x4d +KP_Right 0x4d +KP_6 0x4d numlock + +# evdev 78 (0x4e), QKeyCode "kp_add", number 0x4e +KP_Add 0x4e + +# evdev 79 (0x4f), QKeyCode "kp_1", number 0x4f +KP_End 0x4f +KP_1 0x4f numlock + +# evdev 80 (0x50), QKeyCode "kp_2", number 0x50 +KP_Down 0x50 +KP_2 0x50 numlock + +# evdev 81 (0x51), QKeyCode "kp_3", number 0x51 +KP_Next 0x51 +KP_3 0x51 numlock + +# evdev 82 (0x52), QKeyCode "kp_0", number 0x52 +KP_Insert 0x52 +KP_0 0x52 numlock + +# evdev 83 (0x53), QKeyCode "kp_decimal", number 0x53 +KP_Delete 0x53 +KP_Decimal 0x53 numlock + +# evdev 84 (0x54): no evdev -> QKeyCode mapping (xkb keysym ISO_Level3_Shift) + +# evdev 85 (0x55): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 86 (0x56), QKeyCode "less", number 0x56 +less 0x56 +greater 0x56 shift +backslash 0x56 altgr +brokenbar 0x56 shift altgr + +# evdev 87 (0x57), QKeyCode "f11", number 0x57 +F11 0x57 + +# evdev 88 (0x58), QKeyCode "f12", number 0x58 +F12 0x58 + +# evdev 89 (0x59), QKeyCode "ro", number 0x73 + +# evdev 90 (0x5a): no evdev -> QKeyCode mapping (xkb keysym Katakana) + +# evdev 91 (0x5b), QKeyCode "hiragana", number 0x77 +Hiragana 0x77 + +# evdev 92 (0x5c), QKeyCode "henkan", number 0x79 +Henkan_Mode 0x79 + +# evdev 93 (0x5d): no evdev -> QKeyCode mapping (xkb keysym Hiragana_Katakana) + +# evdev 94 (0x5e): no evdev -> QKeyCode mapping (xkb keysym Muhenkan) + +# evdev 95 (0x5f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 96 (0x60), QKeyCode "kp_enter", number 0x9c +KP_Enter 0x9c + +# evdev 97 (0x61), QKeyCode "ctrl_r", number 0x9d +Control_R 0x9d + +# evdev 98 (0x62), QKeyCode "kp_divide", number 0xb5 +KP_Divide 0xb5 + +# evdev 99 (0x63), QKeyCode "sysrq", number 0x54 +Print 0x54 + +# evdev 100 (0x64), QKeyCode "alt_r", number 0xb8 +ISO_Level3_Shift 0xb8 + +# evdev 101 (0x65), QKeyCode "lf", number 0x5b +Linefeed 0x5b + +# evdev 102 (0x66), QKeyCode "home", number 0xc7 +Home 0xc7 + +# evdev 103 (0x67), QKeyCode "up", number 0xc8 +Up 0xc8 + +# evdev 104 (0x68), QKeyCode "pgup", number 0xc9 +Prior 0xc9 + +# evdev 105 (0x69), QKeyCode "left", number 0xcb +Left 0xcb + +# evdev 106 (0x6a), QKeyCode "right", number 0xcd +Right 0xcd + +# evdev 107 (0x6b), QKeyCode "end", number 0xcf +End 0xcf + +# evdev 108 (0x6c), QKeyCode "down", number 0xd0 +Down 0xd0 + +# evdev 109 (0x6d), QKeyCode "pgdn", number 0xd1 +Next 0xd1 + +# evdev 110 (0x6e), QKeyCode "insert", number 0xd2 +Insert 0xd2 + +# evdev 111 (0x6f), QKeyCode "delete", number 0xd3 +Delete 0xd3 + +# evdev 112 (0x70): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 113 (0x71), QKeyCode "audiomute", number 0xa0 +XF86AudioMute 0xa0 + +# evdev 114 (0x72), QKeyCode "volumedown", number 0xae +XF86AudioLowerVolume 0xae + +# evdev 115 (0x73), QKeyCode "volumeup", number 0xb0 +XF86AudioRaiseVolume 0xb0 + +# evdev 116 (0x74), QKeyCode "power", number 0xde +XF86PowerOff 0xde + +# evdev 117 (0x75), QKeyCode "kp_equals", number 0x59 +KP_Equal 0x59 + +# evdev 118 (0x76): no evdev -> QKeyCode mapping (xkb keysym plusminus) + +# evdev 119 (0x77), QKeyCode "pause", number 0xc6 +Pause 0xc6 + +# evdev 120 (0x78): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchA) + +# evdev 121 (0x79), QKeyCode "kp_comma", number 0x7e +KP_Decimal 0x7e + +# evdev 122 (0x7a): no evdev -> QKeyCode mapping (xkb keysym Hangul) + +# evdev 123 (0x7b): no evdev -> QKeyCode mapping (xkb keysym Hangul_Hanja) + +# evdev 124 (0x7c), QKeyCode "yen", number 0x7d + +# evdev 125 (0x7d), QKeyCode "meta_l", number 0xdb +Super_L 0xdb + +# evdev 126 (0x7e), QKeyCode "meta_r", number 0xdc +Super_R 0xdc + +# evdev 127 (0x7f), QKeyCode "compose", number 0xdd +Menu 0xdd + +# evdev 128 (0x80), QKeyCode "stop", number 0xe8 +Cancel 0xe8 + +# evdev 129 (0x81), QKeyCode "again", number 0x85 +Redo 0x85 + +# evdev 130 (0x82), QKeyCode "props", number 0x86 +SunProps 0x86 + +# evdev 131 (0x83), QKeyCode "undo", number 0x87 +Undo 0x87 + +# evdev 132 (0x84), QKeyCode "front", number 0x8c +SunFront 0x8c + +# evdev 133 (0x85), QKeyCode "copy", number 0xf8 +XF86Copy 0xf8 + +# evdev 134 (0x86), QKeyCode "open", number 0x64 +XF86Open 0x64 + +# evdev 135 (0x87), QKeyCode "paste", number 0x65 +XF86Paste 0x65 + +# evdev 136 (0x88), QKeyCode "find", number 0xc1 +Find 0xc1 + +# evdev 137 (0x89), QKeyCode "cut", number 0xbc +XF86Cut 0xbc + +# evdev 138 (0x8a), QKeyCode "help", number 0xf5 +Help 0xf5 + +# evdev 139 (0x8b), QKeyCode "menu", number 0x9e +XF86MenuKB 0x9e + +# evdev 140 (0x8c), QKeyCode "calculator", number 0xa1 +XF86Calculator 0xa1 + +# evdev 141 (0x8d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 142 (0x8e), QKeyCode "sleep", number 0xdf +XF86Sleep 0xdf + +# evdev 143 (0x8f), QKeyCode "wake", number 0xe3 +XF86WakeUp 0xe3 + +# evdev 144 (0x90): no evdev -> QKeyCode mapping (xkb keysym XF86Explorer) + +# evdev 145 (0x91): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 146 (0x92): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 147 (0x93): no evdev -> QKeyCode mapping (xkb keysym XF86Xfer) + +# evdev 148 (0x94): no evdev -> QKeyCode mapping (xkb keysym XF86Launch1) + +# evdev 149 (0x95): no evdev -> QKeyCode mapping (xkb keysym XF86Launch2) + +# evdev 150 (0x96): no evdev -> QKeyCode mapping (xkb keysym XF86WWW) + +# evdev 151 (0x97): no evdev -> QKeyCode mapping (xkb keysym XF86DOS) + +# evdev 152 (0x98): no evdev -> QKeyCode mapping (xkb keysym XF86ScreenSaver) + +# evdev 153 (0x99): no evdev -> QKeyCode mapping (xkb keysym XF86RotateWindows) + +# evdev 154 (0x9a): no evdev -> QKeyCode mapping (xkb keysym XF86TaskPane) + +# evdev 155 (0x9b), QKeyCode "mail", number 0xec +XF86Mail 0xec + +# evdev 156 (0x9c), QKeyCode "ac_bookmarks", number 0xe6 +XF86Favorites 0xe6 + +# evdev 157 (0x9d), QKeyCode "computer", number 0xeb +XF86MyComputer 0xeb + +# evdev 158 (0x9e), QKeyCode "ac_back", number 0xea +XF86Back 0xea + +# evdev 159 (0x9f), QKeyCode "ac_forward", number 0xe9 +XF86Forward 0xe9 + +# evdev 160 (0xa0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 161 (0xa1): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 162 (0xa2): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 163 (0xa3), QKeyCode "audionext", number 0x99 +XF86AudioNext 0x99 + +# evdev 164 (0xa4), QKeyCode "audioplay", number 0xa2 +XF86AudioPlay 0xa2 +XF86AudioPause 0xa2 shift + +# evdev 165 (0xa5), QKeyCode "audioprev", number 0x90 +XF86AudioPrev 0x90 + +# evdev 166 (0xa6), QKeyCode "audiostop", number 0xa4 +XF86AudioStop 0xa4 +XF86Eject 0xa4 shift + +# evdev 167 (0xa7): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRecord) + +# evdev 168 (0xa8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRewind) + +# evdev 169 (0xa9): no evdev -> QKeyCode mapping (xkb keysym XF86Phone) + +# evdev 170 (0xaa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 171 (0xab): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 172 (0xac), QKeyCode "ac_home", number 0xb2 +XF86HomePage 0xb2 + +# evdev 173 (0xad), QKeyCode "ac_refresh", number 0xe7 +XF86Reload 0xe7 + +# evdev 174 (0xae): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 175 (0xaf): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 176 (0xb0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 177 (0xb1): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollUp) + +# evdev 178 (0xb2): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollDown) + +# evdev 179 (0xb3): no evdev -> QKeyCode mapping (xkb keysym parenleft) + +# evdev 180 (0xb4): no evdev -> QKeyCode mapping (xkb keysym parenright) + +# evdev 181 (0xb5): no evdev -> QKeyCode mapping (xkb keysym XF86New) + +# evdev 182 (0xb6): no evdev -> QKeyCode mapping (xkb keysym Redo) + +# evdev 183 (0xb7): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 184 (0xb8): no evdev -> QKeyCode mapping (xkb keysym XF86Launch5) + +# evdev 185 (0xb9): no evdev -> QKeyCode mapping (xkb keysym XF86Launch6) + +# evdev 186 (0xba): no evdev -> QKeyCode mapping (xkb keysym XF86Launch7) + +# evdev 187 (0xbb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch8) + +# evdev 188 (0xbc): no evdev -> QKeyCode mapping (xkb keysym XF86Launch9) + +# evdev 189 (0xbd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 190 (0xbe): no evdev -> QKeyCode mapping (xkb keysym XF86AudioMicMute) + +# evdev 191 (0xbf): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadToggle) + +# evdev 192 (0xc0): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOn) + +# evdev 193 (0xc1): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOff) + +# evdev 194 (0xc2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 195 (0xc3): no evdev -> QKeyCode mapping (xkb keysym Mode_switch) + +# evdev 196 (0xc4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 197 (0xc5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 198 (0xc6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 199 (0xc7): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 200 (0xc8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 201 (0xc9): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPause) + +# evdev 202 (0xca): no evdev -> QKeyCode mapping (xkb keysym XF86Launch3) + +# evdev 203 (0xcb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch4) + +# evdev 204 (0xcc): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchB) + +# evdev 205 (0xcd): no evdev -> QKeyCode mapping (xkb keysym XF86Suspend) + +# evdev 206 (0xce): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 207 (0xcf): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 208 (0xd0): no evdev -> QKeyCode mapping (xkb keysym XF86AudioForward) + +# evdev 209 (0xd1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 210 (0xd2): no evdev -> QKeyCode mapping (xkb keysym Print) + +# evdev 211 (0xd3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 212 (0xd4): no evdev -> QKeyCode mapping (xkb keysym XF86WebCam) + +# evdev 213 (0xd5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 214 (0xd6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 215 (0xd7): no evdev -> QKeyCode mapping (xkb keysym XF86Mail) + +# evdev 216 (0xd8): no evdev -> QKeyCode mapping (xkb keysym XF86Messenger) + +# evdev 217 (0xd9): no evdev -> QKeyCode mapping (xkb keysym XF86Search) + +# evdev 218 (0xda): no evdev -> QKeyCode mapping (xkb keysym XF86Go) + +# evdev 219 (0xdb): no evdev -> QKeyCode mapping (xkb keysym XF86Finance) + +# evdev 220 (0xdc): no evdev -> QKeyCode mapping (xkb keysym XF86Game) + +# evdev 221 (0xdd): no evdev -> QKeyCode mapping (xkb keysym XF86Shop) + +# evdev 222 (0xde): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 223 (0xdf): no evdev -> QKeyCode mapping (xkb keysym Cancel) + +# evdev 224 (0xe0): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessDown) + +# evdev 225 (0xe1): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessUp) + +# evdev 226 (0xe2), QKeyCode "mediaselect", number 0xed +XF86AudioMedia 0xed + +# evdev 227 (0xe3): no evdev -> QKeyCode mapping (xkb keysym XF86Display) + +# evdev 228 (0xe4): no evdev -> QKeyCode mapping (xkb keysym XF86KbdLightOnOff) + +# evdev 229 (0xe5): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessDown) + +# evdev 230 (0xe6): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessUp) + +# evdev 231 (0xe7): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 232 (0xe8): no evdev -> QKeyCode mapping (xkb keysym XF86Reply) + +# evdev 233 (0xe9): no evdev -> QKeyCode mapping (xkb keysym XF86MailForward) + +# evdev 234 (0xea): no evdev -> QKeyCode mapping (xkb keysym XF86Save) + +# evdev 235 (0xeb): no evdev -> QKeyCode mapping (xkb keysym XF86Documents) + +# evdev 236 (0xec): no evdev -> QKeyCode mapping (xkb keysym XF86Battery) + +# evdev 237 (0xed): no evdev -> QKeyCode mapping (xkb keysym XF86Bluetooth) + +# evdev 238 (0xee): no evdev -> QKeyCode mapping (xkb keysym XF86WLAN) + +# evdev 239 (0xef): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 240 (0xf0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 241 (0xf1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 242 (0xf2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 243 (0xf3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 244 (0xf4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# +# quirks section start +# +# Sometimes multiple keysyms map to the same keycodes. +# The keycode -> keysym lookup finds only one of the +# keysyms. So append them here. +# + +Print 0x54 +Sys_Req 0x54 +Execute 0x54 +KP_Decimal 0x53 numlock +KP_Separator 0x53 numlock +Alt_R 0xb8 +ISO_Level3_Shift 0xb8 +Mode_switch 0xb8 + +# quirks section end diff --git a/app/src/main/assets/roms/keymaps/hr b/app/src/main/assets/roms/keymaps/hr new file mode 100644 index 0000000..6b89f09 --- /dev/null +++ b/app/src/main/assets/roms/keymaps/hr @@ -0,0 +1,837 @@ +# +# generated by qemu-keymap +# model : pc105 +# layout : hr +# variant : - +# options : - + +# name: "Croatian" + +# modifiers +# 0: Shift +# 1: Lock +# 2: Control +# 3: Mod1 +# 4: Mod2 +# 5: Mod3 +# 6: Mod4 +# 7: Mod5 +# 8: NumLock +# 9: Alt +# 10: LevelThree +# 11: LAlt +# 12: RAlt +# 13: RControl +# 14: LControl +# 15: ScrollLock +# 16: LevelFive +# 17: AltGr +# 18: Meta +# 19: Super +# 20: Hyper + +# evdev 1 (0x1), QKeyCode "esc", number 0x1 +Escape 0x01 + +# evdev 2 (0x2), QKeyCode "1", number 0x2 +1 0x02 +exclam 0x02 shift +asciitilde 0x02 altgr +dead_tilde 0x02 shift altgr + +# evdev 3 (0x3), QKeyCode "2", number 0x3 +2 0x03 +quotedbl 0x03 shift +dead_caron 0x03 altgr +caron 0x03 shift altgr + +# evdev 4 (0x4), QKeyCode "3", number 0x4 +3 0x04 +numbersign 0x04 shift +asciicircum 0x04 altgr +dead_circumflex 0x04 shift altgr + +# evdev 5 (0x5), QKeyCode "4", number 0x5 +4 0x05 +dollar 0x05 shift +dead_breve 0x05 altgr +breve 0x05 shift altgr + +# evdev 6 (0x6), QKeyCode "5", number 0x6 +5 0x06 +percent 0x06 shift +degree 0x06 altgr +dead_abovering 0x06 shift altgr + +# evdev 7 (0x7), QKeyCode "6", number 0x7 +6 0x07 +ampersand 0x07 shift +dead_ogonek 0x07 altgr +ogonek 0x07 shift altgr + +# evdev 8 (0x8), QKeyCode "7", number 0x8 +7 0x08 +slash 0x08 shift +grave 0x08 altgr +dead_grave 0x08 shift altgr + +# evdev 9 (0x9), QKeyCode "8", number 0x9 +8 0x09 +parenleft 0x09 shift +dead_abovedot 0x09 altgr +abovedot 0x09 shift altgr + +# evdev 10 (0xa), QKeyCode "9", number 0xa +9 0x0a +parenright 0x0a shift +dead_acute 0x0a altgr +apostrophe 0x0a shift altgr + +# evdev 11 (0xb), QKeyCode "0", number 0xb +0 0x0b +equal 0x0b shift +dead_doubleacute 0x0b altgr +doubleacute 0x0b shift altgr + +# evdev 12 (0xc), QKeyCode "minus", number 0xc +apostrophe 0x0c +question 0x0c shift +dead_diaeresis 0x0c altgr +diaeresis 0x0c shift altgr + +# evdev 13 (0xd), QKeyCode "equal", number 0xd +plus 0x0d +asterisk 0x0d shift +dead_cedilla 0x0d altgr +cedilla 0x0d shift altgr + +# evdev 14 (0xe), QKeyCode "backspace", number 0xe +BackSpace 0x0e + +# evdev 15 (0xf), QKeyCode "tab", number 0xf +Tab 0x0f +ISO_Left_Tab 0x0f shift + +# evdev 16 (0x10), QKeyCode "q", number 0x10 +q 0x10 +Q 0x10 shift +backslash 0x10 altgr +Greek_OMEGA 0x10 shift altgr + +# evdev 17 (0x11), QKeyCode "w", number 0x11 +w 0x11 +W 0x11 shift +bar 0x11 altgr +Lstroke 0x11 shift altgr + +# evdev 18 (0x12), QKeyCode "e", number 0x12 +e 0x12 +E 0x12 shift +EuroSign 0x12 altgr + +# evdev 19 (0x13), QKeyCode "r", number 0x13 +r 0x13 +R 0x13 shift +paragraph 0x13 altgr +registered 0x13 shift altgr + +# evdev 20 (0x14), QKeyCode "t", number 0x14 +t 0x14 +T 0x14 shift +tslash 0x14 altgr +Tslash 0x14 shift altgr + +# evdev 21 (0x15), QKeyCode "y", number 0x15 +z 0x15 +Z 0x15 shift +leftarrow 0x15 altgr +yen 0x15 shift altgr + +# evdev 22 (0x16), QKeyCode "u", number 0x16 +u 0x16 +U 0x16 shift +downarrow 0x16 altgr +uparrow 0x16 shift altgr + +# evdev 23 (0x17), QKeyCode "i", number 0x17 +i 0x17 +I 0x17 shift +rightarrow 0x17 altgr +idotless 0x17 shift altgr + +# evdev 24 (0x18), QKeyCode "o", number 0x18 +o 0x18 +O 0x18 shift +oslash 0x18 altgr +Oslash 0x18 shift altgr + +# evdev 25 (0x19), QKeyCode "p", number 0x19 +p 0x19 +P 0x19 shift +thorn 0x19 altgr +THORN 0x19 shift altgr + +# evdev 26 (0x1a), QKeyCode "bracket_left", number 0x1a +scaron 0x1a +Scaron 0x1a shift +division 0x1a altgr +dead_abovering 0x1a shift altgr + +# evdev 27 (0x1b), QKeyCode "bracket_right", number 0x1b +dstroke 0x1b +Dstroke 0x1b shift +multiply 0x1b altgr +dead_macron 0x1b shift altgr + +# evdev 28 (0x1c), QKeyCode "ret", number 0x1c +Return 0x1c + +# evdev 29 (0x1d), QKeyCode "ctrl", number 0x1d +Control_L 0x1d + +# evdev 30 (0x1e), QKeyCode "a", number 0x1e +a 0x1e +A 0x1e shift +ae 0x1e altgr +AE 0x1e shift altgr + +# evdev 31 (0x1f), QKeyCode "s", number 0x1f +s 0x1f +S 0x1f shift +doublelowquotemark 0x1f altgr +guillemotright 0x1f shift altgr + +# evdev 32 (0x20), QKeyCode "d", number 0x20 +d 0x20 +D 0x20 shift +leftdoublequotemark 0x20 altgr +guillemotleft 0x20 shift altgr + +# evdev 33 (0x21), QKeyCode "f", number 0x21 +f 0x21 +F 0x21 shift +bracketleft 0x21 altgr +ordfeminine 0x21 shift altgr + +# evdev 34 (0x22), QKeyCode "g", number 0x22 +g 0x22 +G 0x22 shift +bracketright 0x22 altgr +ENG 0x22 shift altgr + +# evdev 35 (0x23), QKeyCode "h", number 0x23 +h 0x23 +H 0x23 shift +hstroke 0x23 altgr +Hstroke 0x23 shift altgr + +# evdev 36 (0x24), QKeyCode "j", number 0x24 +j 0x24 +J 0x24 shift +dead_hook 0x24 altgr +dead_horn 0x24 shift altgr + +# evdev 37 (0x25), QKeyCode "k", number 0x25 +k 0x25 +K 0x25 shift +lstroke 0x25 altgr +ampersand 0x25 shift altgr + +# evdev 38 (0x26), QKeyCode "l", number 0x26 +l 0x26 +L 0x26 shift +lstroke 0x26 altgr +Lstroke 0x26 shift altgr + +# evdev 39 (0x27), QKeyCode "semicolon", number 0x27 +ccaron 0x27 +Ccaron 0x27 shift +dead_acute 0x27 altgr +dead_doubleacute 0x27 shift altgr + +# evdev 40 (0x28), QKeyCode "apostrophe", number 0x28 +cacute 0x28 +Cacute 0x28 shift +ssharp 0x28 altgr +dead_caron 0x28 shift altgr + +# evdev 41 (0x29), QKeyCode "grave_accent", number 0x29 +grave 0x29 +asciitilde 0x29 shift +notsign 0x29 altgr + +# evdev 42 (0x2a), QKeyCode "shift", number 0x2a +Shift_L 0x2a + +# evdev 43 (0x2b), QKeyCode "backslash", number 0x2b +zcaron 0x2b +Zcaron 0x2b shift +currency 0x2b altgr +dead_breve 0x2b shift altgr + +# evdev 44 (0x2c), QKeyCode "z", number 0x2c +y 0x2c +Y 0x2c shift +leftsinglequotemark 0x2c altgr +guillemotright 0x2c shift altgr + +# evdev 45 (0x2d), QKeyCode "x", number 0x2d +x 0x2d +X 0x2d shift +rightsinglequotemark 0x2d altgr +guillemotleft 0x2d shift altgr + +# evdev 46 (0x2e), QKeyCode "c", number 0x2e +c 0x2e +C 0x2e shift +cent 0x2e altgr +copyright 0x2e shift altgr + +# evdev 47 (0x2f), QKeyCode "v", number 0x2f +v 0x2f +V 0x2f shift +at 0x2f altgr +grave 0x2f shift altgr + +# evdev 48 (0x30), QKeyCode "b", number 0x30 +b 0x30 +B 0x30 shift +braceleft 0x30 altgr +apostrophe 0x30 shift altgr + +# evdev 49 (0x31), QKeyCode "n", number 0x31 +n 0x31 +N 0x31 shift +braceright 0x31 altgr + +# evdev 50 (0x32), QKeyCode "m", number 0x32 +m 0x32 +M 0x32 shift +asciicircum 0x32 altgr +masculine 0x32 shift altgr + +# evdev 51 (0x33), QKeyCode "comma", number 0x33 +comma 0x33 +semicolon 0x33 shift +less 0x33 altgr +multiply 0x33 shift altgr + +# evdev 52 (0x34), QKeyCode "dot", number 0x34 +period 0x34 +colon 0x34 shift +greater 0x34 altgr +division 0x34 shift altgr + +# evdev 53 (0x35), QKeyCode "slash", number 0x35 +minus 0x35 +underscore 0x35 shift +dead_belowdot 0x35 altgr +dead_abovedot 0x35 shift altgr + +# evdev 54 (0x36), QKeyCode "shift_r", number 0x36 +Shift_R 0x36 + +# evdev 55 (0x37), QKeyCode "kp_multiply", number 0x37 +KP_Multiply 0x37 + +# evdev 56 (0x38), QKeyCode "alt", number 0x38 +Alt_L 0x38 +Meta_L 0x38 shift + +# evdev 57 (0x39), QKeyCode "spc", number 0x39 +space 0x39 + +# evdev 58 (0x3a), QKeyCode "caps_lock", number 0x3a +Caps_Lock 0x3a + +# evdev 59 (0x3b), QKeyCode "f1", number 0x3b +F1 0x3b + +# evdev 60 (0x3c), QKeyCode "f2", number 0x3c +F2 0x3c + +# evdev 61 (0x3d), QKeyCode "f3", number 0x3d +F3 0x3d + +# evdev 62 (0x3e), QKeyCode "f4", number 0x3e +F4 0x3e + +# evdev 63 (0x3f), QKeyCode "f5", number 0x3f +F5 0x3f + +# evdev 64 (0x40), QKeyCode "f6", number 0x40 +F6 0x40 + +# evdev 65 (0x41), QKeyCode "f7", number 0x41 +F7 0x41 + +# evdev 66 (0x42), QKeyCode "f8", number 0x42 +F8 0x42 + +# evdev 67 (0x43), QKeyCode "f9", number 0x43 +F9 0x43 + +# evdev 68 (0x44), QKeyCode "f10", number 0x44 +F10 0x44 + +# evdev 69 (0x45), QKeyCode "num_lock", number 0x45 +Num_Lock 0x45 + +# evdev 70 (0x46), QKeyCode "scroll_lock", number 0x46 +Scroll_Lock 0x46 + +# evdev 71 (0x47), QKeyCode "kp_7", number 0x47 +KP_Home 0x47 +KP_7 0x47 numlock + +# evdev 72 (0x48), QKeyCode "kp_8", number 0x48 +KP_Up 0x48 +KP_8 0x48 numlock + +# evdev 73 (0x49), QKeyCode "kp_9", number 0x49 +KP_Prior 0x49 +KP_9 0x49 numlock + +# evdev 74 (0x4a), QKeyCode "kp_subtract", number 0x4a +KP_Subtract 0x4a + +# evdev 75 (0x4b), QKeyCode "kp_4", number 0x4b +KP_Left 0x4b +KP_4 0x4b numlock + +# evdev 76 (0x4c), QKeyCode "kp_5", number 0x4c +KP_Begin 0x4c +KP_5 0x4c numlock + +# evdev 77 (0x4d), QKeyCode "kp_6", number 0x4d +KP_Right 0x4d +KP_6 0x4d numlock + +# evdev 78 (0x4e), QKeyCode "kp_add", number 0x4e +KP_Add 0x4e + +# evdev 79 (0x4f), QKeyCode "kp_1", number 0x4f +KP_End 0x4f +KP_1 0x4f numlock + +# evdev 80 (0x50), QKeyCode "kp_2", number 0x50 +KP_Down 0x50 +KP_2 0x50 numlock + +# evdev 81 (0x51), QKeyCode "kp_3", number 0x51 +KP_Next 0x51 +KP_3 0x51 numlock + +# evdev 82 (0x52), QKeyCode "kp_0", number 0x52 +KP_Insert 0x52 +KP_0 0x52 numlock + +# evdev 83 (0x53), QKeyCode "kp_decimal", number 0x53 +KP_Delete 0x53 +KP_Separator 0x53 numlock + +# evdev 84 (0x54): no evdev -> QKeyCode mapping (xkb keysym ISO_Level3_Shift) + +# evdev 85 (0x55): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 86 (0x56), QKeyCode "less", number 0x56 +less 0x56 +greater 0x56 shift +bar 0x56 altgr +brokenbar 0x56 shift altgr + +# evdev 87 (0x57), QKeyCode "f11", number 0x57 +F11 0x57 + +# evdev 88 (0x58), QKeyCode "f12", number 0x58 +F12 0x58 + +# evdev 89 (0x59), QKeyCode "ro", number 0x73 + +# evdev 90 (0x5a): no evdev -> QKeyCode mapping (xkb keysym Katakana) + +# evdev 91 (0x5b), QKeyCode "hiragana", number 0x77 +Hiragana 0x77 + +# evdev 92 (0x5c), QKeyCode "henkan", number 0x79 +Henkan_Mode 0x79 + +# evdev 93 (0x5d): no evdev -> QKeyCode mapping (xkb keysym Hiragana_Katakana) + +# evdev 94 (0x5e): no evdev -> QKeyCode mapping (xkb keysym Muhenkan) + +# evdev 95 (0x5f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 96 (0x60), QKeyCode "kp_enter", number 0x9c +KP_Enter 0x9c + +# evdev 97 (0x61), QKeyCode "ctrl_r", number 0x9d +Control_R 0x9d + +# evdev 98 (0x62), QKeyCode "kp_divide", number 0xb5 +KP_Divide 0xb5 + +# evdev 99 (0x63), QKeyCode "sysrq", number 0x54 +Print 0x54 + +# evdev 100 (0x64), QKeyCode "alt_r", number 0xb8 +ISO_Level3_Shift 0xb8 + +# evdev 101 (0x65), QKeyCode "lf", number 0x5b +Linefeed 0x5b + +# evdev 102 (0x66), QKeyCode "home", number 0xc7 +Home 0xc7 + +# evdev 103 (0x67), QKeyCode "up", number 0xc8 +Up 0xc8 + +# evdev 104 (0x68), QKeyCode "pgup", number 0xc9 +Prior 0xc9 + +# evdev 105 (0x69), QKeyCode "left", number 0xcb +Left 0xcb + +# evdev 106 (0x6a), QKeyCode "right", number 0xcd +Right 0xcd + +# evdev 107 (0x6b), QKeyCode "end", number 0xcf +End 0xcf + +# evdev 108 (0x6c), QKeyCode "down", number 0xd0 +Down 0xd0 + +# evdev 109 (0x6d), QKeyCode "pgdn", number 0xd1 +Next 0xd1 + +# evdev 110 (0x6e), QKeyCode "insert", number 0xd2 +Insert 0xd2 + +# evdev 111 (0x6f), QKeyCode "delete", number 0xd3 +Delete 0xd3 + +# evdev 112 (0x70): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 113 (0x71), QKeyCode "audiomute", number 0xa0 +XF86AudioMute 0xa0 + +# evdev 114 (0x72), QKeyCode "volumedown", number 0xae +XF86AudioLowerVolume 0xae + +# evdev 115 (0x73), QKeyCode "volumeup", number 0xb0 +XF86AudioRaiseVolume 0xb0 + +# evdev 116 (0x74), QKeyCode "power", number 0xde +XF86PowerOff 0xde + +# evdev 117 (0x75), QKeyCode "kp_equals", number 0x59 +KP_Equal 0x59 + +# evdev 118 (0x76): no evdev -> QKeyCode mapping (xkb keysym plusminus) + +# evdev 119 (0x77), QKeyCode "pause", number 0xc6 +Pause 0xc6 + +# evdev 120 (0x78): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchA) + +# evdev 121 (0x79), QKeyCode "kp_comma", number 0x7e +KP_Decimal 0x7e + +# evdev 122 (0x7a): no evdev -> QKeyCode mapping (xkb keysym Hangul) + +# evdev 123 (0x7b): no evdev -> QKeyCode mapping (xkb keysym Hangul_Hanja) + +# evdev 124 (0x7c), QKeyCode "yen", number 0x7d + +# evdev 125 (0x7d), QKeyCode "meta_l", number 0xdb +Super_L 0xdb + +# evdev 126 (0x7e), QKeyCode "meta_r", number 0xdc +Super_R 0xdc + +# evdev 127 (0x7f), QKeyCode "compose", number 0xdd +Menu 0xdd + +# evdev 128 (0x80), QKeyCode "stop", number 0xe8 +Cancel 0xe8 + +# evdev 129 (0x81), QKeyCode "again", number 0x85 +Redo 0x85 + +# evdev 130 (0x82), QKeyCode "props", number 0x86 +SunProps 0x86 + +# evdev 131 (0x83), QKeyCode "undo", number 0x87 +Undo 0x87 + +# evdev 132 (0x84), QKeyCode "front", number 0x8c +SunFront 0x8c + +# evdev 133 (0x85), QKeyCode "copy", number 0xf8 +XF86Copy 0xf8 + +# evdev 134 (0x86), QKeyCode "open", number 0x64 +XF86Open 0x64 + +# evdev 135 (0x87), QKeyCode "paste", number 0x65 +XF86Paste 0x65 + +# evdev 136 (0x88), QKeyCode "find", number 0xc1 +Find 0xc1 + +# evdev 137 (0x89), QKeyCode "cut", number 0xbc +XF86Cut 0xbc + +# evdev 138 (0x8a), QKeyCode "help", number 0xf5 +Help 0xf5 + +# evdev 139 (0x8b), QKeyCode "menu", number 0x9e +XF86MenuKB 0x9e + +# evdev 140 (0x8c), QKeyCode "calculator", number 0xa1 +XF86Calculator 0xa1 + +# evdev 141 (0x8d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 142 (0x8e), QKeyCode "sleep", number 0xdf +XF86Sleep 0xdf + +# evdev 143 (0x8f), QKeyCode "wake", number 0xe3 +XF86WakeUp 0xe3 + +# evdev 144 (0x90): no evdev -> QKeyCode mapping (xkb keysym XF86Explorer) + +# evdev 145 (0x91): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 146 (0x92): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 147 (0x93): no evdev -> QKeyCode mapping (xkb keysym XF86Xfer) + +# evdev 148 (0x94): no evdev -> QKeyCode mapping (xkb keysym XF86Launch1) + +# evdev 149 (0x95): no evdev -> QKeyCode mapping (xkb keysym XF86Launch2) + +# evdev 150 (0x96): no evdev -> QKeyCode mapping (xkb keysym XF86WWW) + +# evdev 151 (0x97): no evdev -> QKeyCode mapping (xkb keysym XF86DOS) + +# evdev 152 (0x98): no evdev -> QKeyCode mapping (xkb keysym XF86ScreenSaver) + +# evdev 153 (0x99): no evdev -> QKeyCode mapping (xkb keysym XF86RotateWindows) + +# evdev 154 (0x9a): no evdev -> QKeyCode mapping (xkb keysym XF86TaskPane) + +# evdev 155 (0x9b), QKeyCode "mail", number 0xec +XF86Mail 0xec + +# evdev 156 (0x9c), QKeyCode "ac_bookmarks", number 0xe6 +XF86Favorites 0xe6 + +# evdev 157 (0x9d), QKeyCode "computer", number 0xeb +XF86MyComputer 0xeb + +# evdev 158 (0x9e), QKeyCode "ac_back", number 0xea +XF86Back 0xea + +# evdev 159 (0x9f), QKeyCode "ac_forward", number 0xe9 +XF86Forward 0xe9 + +# evdev 160 (0xa0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 161 (0xa1): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 162 (0xa2): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 163 (0xa3), QKeyCode "audionext", number 0x99 +XF86AudioNext 0x99 + +# evdev 164 (0xa4), QKeyCode "audioplay", number 0xa2 +XF86AudioPlay 0xa2 +XF86AudioPause 0xa2 shift + +# evdev 165 (0xa5), QKeyCode "audioprev", number 0x90 +XF86AudioPrev 0x90 + +# evdev 166 (0xa6), QKeyCode "audiostop", number 0xa4 +XF86AudioStop 0xa4 +XF86Eject 0xa4 shift + +# evdev 167 (0xa7): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRecord) + +# evdev 168 (0xa8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRewind) + +# evdev 169 (0xa9): no evdev -> QKeyCode mapping (xkb keysym XF86Phone) + +# evdev 170 (0xaa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 171 (0xab): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 172 (0xac), QKeyCode "ac_home", number 0xb2 +XF86HomePage 0xb2 + +# evdev 173 (0xad), QKeyCode "ac_refresh", number 0xe7 +XF86Reload 0xe7 + +# evdev 174 (0xae): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 175 (0xaf): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 176 (0xb0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 177 (0xb1): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollUp) + +# evdev 178 (0xb2): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollDown) + +# evdev 179 (0xb3): no evdev -> QKeyCode mapping (xkb keysym parenleft) + +# evdev 180 (0xb4): no evdev -> QKeyCode mapping (xkb keysym parenright) + +# evdev 181 (0xb5): no evdev -> QKeyCode mapping (xkb keysym XF86New) + +# evdev 182 (0xb6): no evdev -> QKeyCode mapping (xkb keysym Redo) + +# evdev 183 (0xb7): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 184 (0xb8): no evdev -> QKeyCode mapping (xkb keysym XF86Launch5) + +# evdev 185 (0xb9): no evdev -> QKeyCode mapping (xkb keysym XF86Launch6) + +# evdev 186 (0xba): no evdev -> QKeyCode mapping (xkb keysym XF86Launch7) + +# evdev 187 (0xbb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch8) + +# evdev 188 (0xbc): no evdev -> QKeyCode mapping (xkb keysym XF86Launch9) + +# evdev 189 (0xbd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 190 (0xbe): no evdev -> QKeyCode mapping (xkb keysym XF86AudioMicMute) + +# evdev 191 (0xbf): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadToggle) + +# evdev 192 (0xc0): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOn) + +# evdev 193 (0xc1): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOff) + +# evdev 194 (0xc2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 195 (0xc3): no evdev -> QKeyCode mapping (xkb keysym Mode_switch) + +# evdev 196 (0xc4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 197 (0xc5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 198 (0xc6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 199 (0xc7): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 200 (0xc8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 201 (0xc9): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPause) + +# evdev 202 (0xca): no evdev -> QKeyCode mapping (xkb keysym XF86Launch3) + +# evdev 203 (0xcb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch4) + +# evdev 204 (0xcc): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchB) + +# evdev 205 (0xcd): no evdev -> QKeyCode mapping (xkb keysym XF86Suspend) + +# evdev 206 (0xce): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 207 (0xcf): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 208 (0xd0): no evdev -> QKeyCode mapping (xkb keysym XF86AudioForward) + +# evdev 209 (0xd1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 210 (0xd2): no evdev -> QKeyCode mapping (xkb keysym Print) + +# evdev 211 (0xd3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 212 (0xd4): no evdev -> QKeyCode mapping (xkb keysym XF86WebCam) + +# evdev 213 (0xd5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 214 (0xd6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 215 (0xd7): no evdev -> QKeyCode mapping (xkb keysym XF86Mail) + +# evdev 216 (0xd8): no evdev -> QKeyCode mapping (xkb keysym XF86Messenger) + +# evdev 217 (0xd9): no evdev -> QKeyCode mapping (xkb keysym XF86Search) + +# evdev 218 (0xda): no evdev -> QKeyCode mapping (xkb keysym XF86Go) + +# evdev 219 (0xdb): no evdev -> QKeyCode mapping (xkb keysym XF86Finance) + +# evdev 220 (0xdc): no evdev -> QKeyCode mapping (xkb keysym XF86Game) + +# evdev 221 (0xdd): no evdev -> QKeyCode mapping (xkb keysym XF86Shop) + +# evdev 222 (0xde): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 223 (0xdf): no evdev -> QKeyCode mapping (xkb keysym Cancel) + +# evdev 224 (0xe0): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessDown) + +# evdev 225 (0xe1): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessUp) + +# evdev 226 (0xe2), QKeyCode "mediaselect", number 0xed +XF86AudioMedia 0xed + +# evdev 227 (0xe3): no evdev -> QKeyCode mapping (xkb keysym XF86Display) + +# evdev 228 (0xe4): no evdev -> QKeyCode mapping (xkb keysym XF86KbdLightOnOff) + +# evdev 229 (0xe5): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessDown) + +# evdev 230 (0xe6): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessUp) + +# evdev 231 (0xe7): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 232 (0xe8): no evdev -> QKeyCode mapping (xkb keysym XF86Reply) + +# evdev 233 (0xe9): no evdev -> QKeyCode mapping (xkb keysym XF86MailForward) + +# evdev 234 (0xea): no evdev -> QKeyCode mapping (xkb keysym XF86Save) + +# evdev 235 (0xeb): no evdev -> QKeyCode mapping (xkb keysym XF86Documents) + +# evdev 236 (0xec): no evdev -> QKeyCode mapping (xkb keysym XF86Battery) + +# evdev 237 (0xed): no evdev -> QKeyCode mapping (xkb keysym XF86Bluetooth) + +# evdev 238 (0xee): no evdev -> QKeyCode mapping (xkb keysym XF86WLAN) + +# evdev 239 (0xef): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 240 (0xf0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 241 (0xf1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 242 (0xf2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 243 (0xf3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 244 (0xf4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# +# quirks section start +# +# Sometimes multiple keysyms map to the same keycodes. +# The keycode -> keysym lookup finds only one of the +# keysyms. So append them here. +# + +Print 0x54 +Sys_Req 0x54 +Execute 0x54 +KP_Decimal 0x53 numlock +KP_Separator 0x53 numlock +Alt_R 0xb8 +ISO_Level3_Shift 0xb8 +Mode_switch 0xb8 + +# quirks section end diff --git a/app/src/main/assets/roms/keymaps/hu b/app/src/main/assets/roms/keymaps/hu new file mode 100644 index 0000000..a6bd66d --- /dev/null +++ b/app/src/main/assets/roms/keymaps/hu @@ -0,0 +1,836 @@ +# +# generated by qemu-keymap +# model : pc105 +# layout : hu +# variant : - +# options : - + +# name: "Hungarian" + +# modifiers +# 0: Shift +# 1: Lock +# 2: Control +# 3: Mod1 +# 4: Mod2 +# 5: Mod3 +# 6: Mod4 +# 7: Mod5 +# 8: NumLock +# 9: Alt +# 10: LevelThree +# 11: LAlt +# 12: RAlt +# 13: RControl +# 14: LControl +# 15: ScrollLock +# 16: LevelFive +# 17: AltGr +# 18: Meta +# 19: Super +# 20: Hyper + +# evdev 1 (0x1), QKeyCode "esc", number 0x1 +Escape 0x01 + +# evdev 2 (0x2), QKeyCode "1", number 0x2 +1 0x02 +apostrophe 0x02 shift +asciitilde 0x02 altgr +dead_tilde 0x02 shift altgr + +# evdev 3 (0x3), QKeyCode "2", number 0x3 +2 0x03 +quotedbl 0x03 shift +dead_caron 0x03 altgr +caron 0x03 shift altgr + +# evdev 4 (0x4), QKeyCode "3", number 0x4 +3 0x04 +plus 0x04 shift +asciicircum 0x04 altgr +dead_circumflex 0x04 shift altgr + +# evdev 5 (0x5), QKeyCode "4", number 0x5 +4 0x05 +exclam 0x05 shift +dead_breve 0x05 altgr +breve 0x05 shift altgr + +# evdev 6 (0x6), QKeyCode "5", number 0x6 +5 0x06 +percent 0x06 shift +dead_abovering 0x06 altgr +degree 0x06 shift altgr + +# evdev 7 (0x7), QKeyCode "6", number 0x7 +6 0x07 +slash 0x07 shift +dead_ogonek 0x07 altgr +ogonek 0x07 shift altgr + +# evdev 8 (0x8), QKeyCode "7", number 0x8 +7 0x08 +equal 0x08 shift +grave 0x08 altgr +dead_grave 0x08 shift altgr + +# evdev 9 (0x9), QKeyCode "8", number 0x9 +8 0x09 +parenleft 0x09 shift +dead_abovedot 0x09 altgr +abovedot 0x09 shift altgr + +# evdev 10 (0xa), QKeyCode "9", number 0xa +9 0x0a +parenright 0x0a shift +dead_acute 0x0a altgr +acute 0x0a shift altgr + +# evdev 11 (0xb), QKeyCode "0", number 0xb +odiaeresis 0x0b +Odiaeresis 0x0b shift +dead_doubleacute 0x0b altgr +doubleacute 0x0b shift altgr + +# evdev 12 (0xc), QKeyCode "minus", number 0xc +udiaeresis 0x0c +Udiaeresis 0x0c shift +dead_diaeresis 0x0c altgr +diaeresis 0x0c shift altgr + +# evdev 13 (0xd), QKeyCode "equal", number 0xd +oacute 0x0d +Oacute 0x0d shift +dead_cedilla 0x0d altgr +cedilla 0x0d shift altgr + +# evdev 14 (0xe), QKeyCode "backspace", number 0xe +BackSpace 0x0e + +# evdev 15 (0xf), QKeyCode "tab", number 0xf +Tab 0x0f +ISO_Left_Tab 0x0f shift + +# evdev 16 (0x10), QKeyCode "q", number 0x10 +q 0x10 +Q 0x10 shift +backslash 0x10 altgr +Greek_OMEGA 0x10 shift altgr + +# evdev 17 (0x11), QKeyCode "w", number 0x11 +w 0x11 +W 0x11 shift +bar 0x11 altgr +Lstroke 0x11 shift altgr + +# evdev 18 (0x12), QKeyCode "e", number 0x12 +e 0x12 +E 0x12 shift +Adiaeresis 0x12 altgr + +# evdev 19 (0x13), QKeyCode "r", number 0x13 +r 0x13 +R 0x13 shift +paragraph 0x13 altgr +registered 0x13 shift altgr + +# evdev 20 (0x14), QKeyCode "t", number 0x14 +t 0x14 +T 0x14 shift +tslash 0x14 altgr +Tslash 0x14 shift altgr + +# evdev 21 (0x15), QKeyCode "y", number 0x15 +z 0x15 +Z 0x15 shift +endash 0x15 altgr +yen 0x15 shift altgr + +# evdev 22 (0x16), QKeyCode "u", number 0x16 +u 0x16 +U 0x16 shift +EuroSign 0x16 altgr +uparrow 0x16 shift altgr + +# evdev 23 (0x17), QKeyCode "i", number 0x17 +i 0x17 +I 0x17 shift +Iacute 0x17 altgr +iacute 0x17 shift altgr + +# evdev 24 (0x18), QKeyCode "o", number 0x18 +o 0x18 +O 0x18 shift +doublelowquotemark 0x18 altgr +Oslash 0x18 shift altgr + +# evdev 25 (0x19), QKeyCode "p", number 0x19 +p 0x19 +P 0x19 shift +rightdoublequotemark 0x19 altgr +THORN 0x19 shift altgr + +# evdev 26 (0x1a), QKeyCode "bracket_left", number 0x1a +odoubleacute 0x1a +Odoubleacute 0x1a shift +division 0x1a altgr +dead_abovering 0x1a shift altgr + +# evdev 27 (0x1b), QKeyCode "bracket_right", number 0x1b +uacute 0x1b +Uacute 0x1b shift +multiply 0x1b altgr +dead_macron 0x1b shift altgr + +# evdev 28 (0x1c), QKeyCode "ret", number 0x1c +Return 0x1c + +# evdev 29 (0x1d), QKeyCode "ctrl", number 0x1d +Control_L 0x1d + +# evdev 30 (0x1e), QKeyCode "a", number 0x1e +a 0x1e +A 0x1e shift +adiaeresis 0x1e altgr +Adiaeresis 0x1e shift altgr + +# evdev 31 (0x1f), QKeyCode "s", number 0x1f +s 0x1f +S 0x1f shift +dstroke 0x1f altgr +section 0x1f shift altgr + +# evdev 32 (0x20), QKeyCode "d", number 0x20 +d 0x20 +D 0x20 shift +Dstroke 0x20 altgr +ETH 0x20 shift altgr + +# evdev 33 (0x21), QKeyCode "f", number 0x21 +f 0x21 +F 0x21 shift +bracketleft 0x21 altgr +ordfeminine 0x21 shift altgr + +# evdev 34 (0x22), QKeyCode "g", number 0x22 +g 0x22 +G 0x22 shift +bracketright 0x22 altgr +ENG 0x22 shift altgr + +# evdev 35 (0x23), QKeyCode "h", number 0x23 +h 0x23 +H 0x23 shift +hstroke 0x23 altgr +Hstroke 0x23 shift altgr + +# evdev 36 (0x24), QKeyCode "j", number 0x24 +j 0x24 +J 0x24 shift +iacute 0x24 altgr +Iacute 0x24 shift altgr + +# evdev 37 (0x25), QKeyCode "k", number 0x25 +k 0x25 +K 0x25 shift +lstroke 0x25 altgr +ampersand 0x25 shift altgr + +# evdev 38 (0x26), QKeyCode "l", number 0x26 +l 0x26 +L 0x26 shift +Lstroke 0x26 altgr + +# evdev 39 (0x27), QKeyCode "semicolon", number 0x27 +eacute 0x27 +Eacute 0x27 shift +dollar 0x27 altgr +cent 0x27 shift altgr + +# evdev 40 (0x28), QKeyCode "apostrophe", number 0x28 +aacute 0x28 +Aacute 0x28 shift +ssharp 0x28 altgr +dead_caron 0x28 shift altgr + +# evdev 41 (0x29), QKeyCode "grave_accent", number 0x29 +0 0x29 +section 0x29 shift +notsign 0x29 altgr + +# evdev 42 (0x2a), QKeyCode "shift", number 0x2a +Shift_L 0x2a + +# evdev 43 (0x2b), QKeyCode "backslash", number 0x2b +udoubleacute 0x2b +Udoubleacute 0x2b shift +currency 0x2b altgr +dead_breve 0x2b shift altgr + +# evdev 44 (0x2c), QKeyCode "z", number 0x2c +y 0x2c +Y 0x2c shift +greater 0x2c altgr +less 0x2c shift altgr + +# evdev 45 (0x2d), QKeyCode "x", number 0x2d +x 0x2d +X 0x2d shift +numbersign 0x2d altgr +greater 0x2d shift altgr + +# evdev 46 (0x2e), QKeyCode "c", number 0x2e +c 0x2e +C 0x2e shift +ampersand 0x2e altgr +copyright 0x2e shift altgr + +# evdev 47 (0x2f), QKeyCode "v", number 0x2f +v 0x2f +V 0x2f shift +at 0x2f altgr +leftsinglequotemark 0x2f shift altgr + +# evdev 48 (0x30), QKeyCode "b", number 0x30 +b 0x30 +B 0x30 shift +braceleft 0x30 altgr +rightsinglequotemark 0x30 shift altgr + +# evdev 49 (0x31), QKeyCode "n", number 0x31 +n 0x31 +N 0x31 shift +braceright 0x31 altgr + +# evdev 50 (0x32), QKeyCode "m", number 0x32 +m 0x32 +M 0x32 shift +less 0x32 altgr +masculine 0x32 shift altgr + +# evdev 51 (0x33), QKeyCode "comma", number 0x33 +comma 0x33 +question 0x33 shift +semicolon 0x33 altgr +multiply 0x33 shift altgr + +# evdev 52 (0x34), QKeyCode "dot", number 0x34 +period 0x34 +colon 0x34 shift +greater 0x34 altgr +division 0x34 shift altgr + +# evdev 53 (0x35), QKeyCode "slash", number 0x35 +minus 0x35 +underscore 0x35 shift +asterisk 0x35 altgr +dead_abovedot 0x35 shift altgr + +# evdev 54 (0x36), QKeyCode "shift_r", number 0x36 +Shift_R 0x36 + +# evdev 55 (0x37), QKeyCode "kp_multiply", number 0x37 +KP_Multiply 0x37 + +# evdev 56 (0x38), QKeyCode "alt", number 0x38 +Alt_L 0x38 +Meta_L 0x38 shift + +# evdev 57 (0x39), QKeyCode "spc", number 0x39 +space 0x39 + +# evdev 58 (0x3a), QKeyCode "caps_lock", number 0x3a +Caps_Lock 0x3a + +# evdev 59 (0x3b), QKeyCode "f1", number 0x3b +F1 0x3b + +# evdev 60 (0x3c), QKeyCode "f2", number 0x3c +F2 0x3c + +# evdev 61 (0x3d), QKeyCode "f3", number 0x3d +F3 0x3d + +# evdev 62 (0x3e), QKeyCode "f4", number 0x3e +F4 0x3e + +# evdev 63 (0x3f), QKeyCode "f5", number 0x3f +F5 0x3f + +# evdev 64 (0x40), QKeyCode "f6", number 0x40 +F6 0x40 + +# evdev 65 (0x41), QKeyCode "f7", number 0x41 +F7 0x41 + +# evdev 66 (0x42), QKeyCode "f8", number 0x42 +F8 0x42 + +# evdev 67 (0x43), QKeyCode "f9", number 0x43 +F9 0x43 + +# evdev 68 (0x44), QKeyCode "f10", number 0x44 +F10 0x44 + +# evdev 69 (0x45), QKeyCode "num_lock", number 0x45 +Num_Lock 0x45 + +# evdev 70 (0x46), QKeyCode "scroll_lock", number 0x46 +Scroll_Lock 0x46 + +# evdev 71 (0x47), QKeyCode "kp_7", number 0x47 +KP_Home 0x47 +KP_7 0x47 numlock + +# evdev 72 (0x48), QKeyCode "kp_8", number 0x48 +KP_Up 0x48 +KP_8 0x48 numlock + +# evdev 73 (0x49), QKeyCode "kp_9", number 0x49 +KP_Prior 0x49 +KP_9 0x49 numlock + +# evdev 74 (0x4a), QKeyCode "kp_subtract", number 0x4a +KP_Subtract 0x4a + +# evdev 75 (0x4b), QKeyCode "kp_4", number 0x4b +KP_Left 0x4b +KP_4 0x4b numlock + +# evdev 76 (0x4c), QKeyCode "kp_5", number 0x4c +KP_Begin 0x4c +KP_5 0x4c numlock + +# evdev 77 (0x4d), QKeyCode "kp_6", number 0x4d +KP_Right 0x4d +KP_6 0x4d numlock + +# evdev 78 (0x4e), QKeyCode "kp_add", number 0x4e +KP_Add 0x4e + +# evdev 79 (0x4f), QKeyCode "kp_1", number 0x4f +KP_End 0x4f +KP_1 0x4f numlock + +# evdev 80 (0x50), QKeyCode "kp_2", number 0x50 +KP_Down 0x50 +KP_2 0x50 numlock + +# evdev 81 (0x51), QKeyCode "kp_3", number 0x51 +KP_Next 0x51 +KP_3 0x51 numlock + +# evdev 82 (0x52), QKeyCode "kp_0", number 0x52 +KP_Insert 0x52 +KP_0 0x52 numlock + +# evdev 83 (0x53), QKeyCode "kp_decimal", number 0x53 +KP_Delete 0x53 +KP_Separator 0x53 numlock + +# evdev 84 (0x54): no evdev -> QKeyCode mapping (xkb keysym ISO_Level3_Shift) + +# evdev 85 (0x55): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 86 (0x56), QKeyCode "less", number 0x56 +iacute 0x56 +Iacute 0x56 shift +less 0x56 altgr +greater 0x56 shift altgr + +# evdev 87 (0x57), QKeyCode "f11", number 0x57 +F11 0x57 + +# evdev 88 (0x58), QKeyCode "f12", number 0x58 +F12 0x58 + +# evdev 89 (0x59), QKeyCode "ro", number 0x73 + +# evdev 90 (0x5a): no evdev -> QKeyCode mapping (xkb keysym Katakana) + +# evdev 91 (0x5b), QKeyCode "hiragana", number 0x77 +Hiragana 0x77 + +# evdev 92 (0x5c), QKeyCode "henkan", number 0x79 +Henkan_Mode 0x79 + +# evdev 93 (0x5d): no evdev -> QKeyCode mapping (xkb keysym Hiragana_Katakana) + +# evdev 94 (0x5e): no evdev -> QKeyCode mapping (xkb keysym Muhenkan) + +# evdev 95 (0x5f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 96 (0x60), QKeyCode "kp_enter", number 0x9c +KP_Enter 0x9c + +# evdev 97 (0x61), QKeyCode "ctrl_r", number 0x9d +Control_R 0x9d + +# evdev 98 (0x62), QKeyCode "kp_divide", number 0xb5 +KP_Divide 0xb5 + +# evdev 99 (0x63), QKeyCode "sysrq", number 0x54 +Print 0x54 + +# evdev 100 (0x64), QKeyCode "alt_r", number 0xb8 +ISO_Level3_Shift 0xb8 + +# evdev 101 (0x65), QKeyCode "lf", number 0x5b +Linefeed 0x5b + +# evdev 102 (0x66), QKeyCode "home", number 0xc7 +Home 0xc7 + +# evdev 103 (0x67), QKeyCode "up", number 0xc8 +Up 0xc8 + +# evdev 104 (0x68), QKeyCode "pgup", number 0xc9 +Prior 0xc9 + +# evdev 105 (0x69), QKeyCode "left", number 0xcb +Left 0xcb + +# evdev 106 (0x6a), QKeyCode "right", number 0xcd +Right 0xcd + +# evdev 107 (0x6b), QKeyCode "end", number 0xcf +End 0xcf + +# evdev 108 (0x6c), QKeyCode "down", number 0xd0 +Down 0xd0 + +# evdev 109 (0x6d), QKeyCode "pgdn", number 0xd1 +Next 0xd1 + +# evdev 110 (0x6e), QKeyCode "insert", number 0xd2 +Insert 0xd2 + +# evdev 111 (0x6f), QKeyCode "delete", number 0xd3 +Delete 0xd3 + +# evdev 112 (0x70): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 113 (0x71), QKeyCode "audiomute", number 0xa0 +XF86AudioMute 0xa0 + +# evdev 114 (0x72), QKeyCode "volumedown", number 0xae +XF86AudioLowerVolume 0xae + +# evdev 115 (0x73), QKeyCode "volumeup", number 0xb0 +XF86AudioRaiseVolume 0xb0 + +# evdev 116 (0x74), QKeyCode "power", number 0xde +XF86PowerOff 0xde + +# evdev 117 (0x75), QKeyCode "kp_equals", number 0x59 +KP_Equal 0x59 + +# evdev 118 (0x76): no evdev -> QKeyCode mapping (xkb keysym plusminus) + +# evdev 119 (0x77), QKeyCode "pause", number 0xc6 +Pause 0xc6 + +# evdev 120 (0x78): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchA) + +# evdev 121 (0x79), QKeyCode "kp_comma", number 0x7e +KP_Decimal 0x7e + +# evdev 122 (0x7a): no evdev -> QKeyCode mapping (xkb keysym Hangul) + +# evdev 123 (0x7b): no evdev -> QKeyCode mapping (xkb keysym Hangul_Hanja) + +# evdev 124 (0x7c), QKeyCode "yen", number 0x7d + +# evdev 125 (0x7d), QKeyCode "meta_l", number 0xdb +Super_L 0xdb + +# evdev 126 (0x7e), QKeyCode "meta_r", number 0xdc +Super_R 0xdc + +# evdev 127 (0x7f), QKeyCode "compose", number 0xdd +Menu 0xdd + +# evdev 128 (0x80), QKeyCode "stop", number 0xe8 +Cancel 0xe8 + +# evdev 129 (0x81), QKeyCode "again", number 0x85 +Redo 0x85 + +# evdev 130 (0x82), QKeyCode "props", number 0x86 +SunProps 0x86 + +# evdev 131 (0x83), QKeyCode "undo", number 0x87 +Undo 0x87 + +# evdev 132 (0x84), QKeyCode "front", number 0x8c +SunFront 0x8c + +# evdev 133 (0x85), QKeyCode "copy", number 0xf8 +XF86Copy 0xf8 + +# evdev 134 (0x86), QKeyCode "open", number 0x64 +XF86Open 0x64 + +# evdev 135 (0x87), QKeyCode "paste", number 0x65 +XF86Paste 0x65 + +# evdev 136 (0x88), QKeyCode "find", number 0xc1 +Find 0xc1 + +# evdev 137 (0x89), QKeyCode "cut", number 0xbc +XF86Cut 0xbc + +# evdev 138 (0x8a), QKeyCode "help", number 0xf5 +Help 0xf5 + +# evdev 139 (0x8b), QKeyCode "menu", number 0x9e +XF86MenuKB 0x9e + +# evdev 140 (0x8c), QKeyCode "calculator", number 0xa1 +XF86Calculator 0xa1 + +# evdev 141 (0x8d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 142 (0x8e), QKeyCode "sleep", number 0xdf +XF86Sleep 0xdf + +# evdev 143 (0x8f), QKeyCode "wake", number 0xe3 +XF86WakeUp 0xe3 + +# evdev 144 (0x90): no evdev -> QKeyCode mapping (xkb keysym XF86Explorer) + +# evdev 145 (0x91): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 146 (0x92): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 147 (0x93): no evdev -> QKeyCode mapping (xkb keysym XF86Xfer) + +# evdev 148 (0x94): no evdev -> QKeyCode mapping (xkb keysym XF86Launch1) + +# evdev 149 (0x95): no evdev -> QKeyCode mapping (xkb keysym XF86Launch2) + +# evdev 150 (0x96): no evdev -> QKeyCode mapping (xkb keysym XF86WWW) + +# evdev 151 (0x97): no evdev -> QKeyCode mapping (xkb keysym XF86DOS) + +# evdev 152 (0x98): no evdev -> QKeyCode mapping (xkb keysym XF86ScreenSaver) + +# evdev 153 (0x99): no evdev -> QKeyCode mapping (xkb keysym XF86RotateWindows) + +# evdev 154 (0x9a): no evdev -> QKeyCode mapping (xkb keysym XF86TaskPane) + +# evdev 155 (0x9b), QKeyCode "mail", number 0xec +XF86Mail 0xec + +# evdev 156 (0x9c), QKeyCode "ac_bookmarks", number 0xe6 +XF86Favorites 0xe6 + +# evdev 157 (0x9d), QKeyCode "computer", number 0xeb +XF86MyComputer 0xeb + +# evdev 158 (0x9e), QKeyCode "ac_back", number 0xea +XF86Back 0xea + +# evdev 159 (0x9f), QKeyCode "ac_forward", number 0xe9 +XF86Forward 0xe9 + +# evdev 160 (0xa0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 161 (0xa1): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 162 (0xa2): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 163 (0xa3), QKeyCode "audionext", number 0x99 +XF86AudioNext 0x99 + +# evdev 164 (0xa4), QKeyCode "audioplay", number 0xa2 +XF86AudioPlay 0xa2 +XF86AudioPause 0xa2 shift + +# evdev 165 (0xa5), QKeyCode "audioprev", number 0x90 +XF86AudioPrev 0x90 + +# evdev 166 (0xa6), QKeyCode "audiostop", number 0xa4 +XF86AudioStop 0xa4 +XF86Eject 0xa4 shift + +# evdev 167 (0xa7): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRecord) + +# evdev 168 (0xa8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRewind) + +# evdev 169 (0xa9): no evdev -> QKeyCode mapping (xkb keysym XF86Phone) + +# evdev 170 (0xaa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 171 (0xab): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 172 (0xac), QKeyCode "ac_home", number 0xb2 +XF86HomePage 0xb2 + +# evdev 173 (0xad), QKeyCode "ac_refresh", number 0xe7 +XF86Reload 0xe7 + +# evdev 174 (0xae): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 175 (0xaf): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 176 (0xb0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 177 (0xb1): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollUp) + +# evdev 178 (0xb2): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollDown) + +# evdev 179 (0xb3): no evdev -> QKeyCode mapping (xkb keysym parenleft) + +# evdev 180 (0xb4): no evdev -> QKeyCode mapping (xkb keysym parenright) + +# evdev 181 (0xb5): no evdev -> QKeyCode mapping (xkb keysym XF86New) + +# evdev 182 (0xb6): no evdev -> QKeyCode mapping (xkb keysym Redo) + +# evdev 183 (0xb7): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 184 (0xb8): no evdev -> QKeyCode mapping (xkb keysym XF86Launch5) + +# evdev 185 (0xb9): no evdev -> QKeyCode mapping (xkb keysym XF86Launch6) + +# evdev 186 (0xba): no evdev -> QKeyCode mapping (xkb keysym XF86Launch7) + +# evdev 187 (0xbb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch8) + +# evdev 188 (0xbc): no evdev -> QKeyCode mapping (xkb keysym XF86Launch9) + +# evdev 189 (0xbd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 190 (0xbe): no evdev -> QKeyCode mapping (xkb keysym XF86AudioMicMute) + +# evdev 191 (0xbf): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadToggle) + +# evdev 192 (0xc0): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOn) + +# evdev 193 (0xc1): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOff) + +# evdev 194 (0xc2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 195 (0xc3): no evdev -> QKeyCode mapping (xkb keysym Mode_switch) + +# evdev 196 (0xc4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 197 (0xc5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 198 (0xc6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 199 (0xc7): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 200 (0xc8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 201 (0xc9): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPause) + +# evdev 202 (0xca): no evdev -> QKeyCode mapping (xkb keysym XF86Launch3) + +# evdev 203 (0xcb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch4) + +# evdev 204 (0xcc): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchB) + +# evdev 205 (0xcd): no evdev -> QKeyCode mapping (xkb keysym XF86Suspend) + +# evdev 206 (0xce): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 207 (0xcf): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 208 (0xd0): no evdev -> QKeyCode mapping (xkb keysym XF86AudioForward) + +# evdev 209 (0xd1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 210 (0xd2): no evdev -> QKeyCode mapping (xkb keysym Print) + +# evdev 211 (0xd3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 212 (0xd4): no evdev -> QKeyCode mapping (xkb keysym XF86WebCam) + +# evdev 213 (0xd5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 214 (0xd6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 215 (0xd7): no evdev -> QKeyCode mapping (xkb keysym XF86Mail) + +# evdev 216 (0xd8): no evdev -> QKeyCode mapping (xkb keysym XF86Messenger) + +# evdev 217 (0xd9): no evdev -> QKeyCode mapping (xkb keysym XF86Search) + +# evdev 218 (0xda): no evdev -> QKeyCode mapping (xkb keysym XF86Go) + +# evdev 219 (0xdb): no evdev -> QKeyCode mapping (xkb keysym XF86Finance) + +# evdev 220 (0xdc): no evdev -> QKeyCode mapping (xkb keysym XF86Game) + +# evdev 221 (0xdd): no evdev -> QKeyCode mapping (xkb keysym XF86Shop) + +# evdev 222 (0xde): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 223 (0xdf): no evdev -> QKeyCode mapping (xkb keysym Cancel) + +# evdev 224 (0xe0): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessDown) + +# evdev 225 (0xe1): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessUp) + +# evdev 226 (0xe2), QKeyCode "mediaselect", number 0xed +XF86AudioMedia 0xed + +# evdev 227 (0xe3): no evdev -> QKeyCode mapping (xkb keysym XF86Display) + +# evdev 228 (0xe4): no evdev -> QKeyCode mapping (xkb keysym XF86KbdLightOnOff) + +# evdev 229 (0xe5): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessDown) + +# evdev 230 (0xe6): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessUp) + +# evdev 231 (0xe7): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 232 (0xe8): no evdev -> QKeyCode mapping (xkb keysym XF86Reply) + +# evdev 233 (0xe9): no evdev -> QKeyCode mapping (xkb keysym XF86MailForward) + +# evdev 234 (0xea): no evdev -> QKeyCode mapping (xkb keysym XF86Save) + +# evdev 235 (0xeb): no evdev -> QKeyCode mapping (xkb keysym XF86Documents) + +# evdev 236 (0xec): no evdev -> QKeyCode mapping (xkb keysym XF86Battery) + +# evdev 237 (0xed): no evdev -> QKeyCode mapping (xkb keysym XF86Bluetooth) + +# evdev 238 (0xee): no evdev -> QKeyCode mapping (xkb keysym XF86WLAN) + +# evdev 239 (0xef): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 240 (0xf0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 241 (0xf1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 242 (0xf2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 243 (0xf3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 244 (0xf4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# +# quirks section start +# +# Sometimes multiple keysyms map to the same keycodes. +# The keycode -> keysym lookup finds only one of the +# keysyms. So append them here. +# + +Print 0x54 +Sys_Req 0x54 +Execute 0x54 +KP_Decimal 0x53 numlock +KP_Separator 0x53 numlock +Alt_R 0xb8 +ISO_Level3_Shift 0xb8 +Mode_switch 0xb8 + +# quirks section end diff --git a/app/src/main/assets/roms/keymaps/is b/app/src/main/assets/roms/keymaps/is new file mode 100644 index 0000000..063675d --- /dev/null +++ b/app/src/main/assets/roms/keymaps/is @@ -0,0 +1,837 @@ +# +# generated by qemu-keymap +# model : pc105 +# layout : is +# variant : - +# options : - + +# name: "Icelandic" + +# modifiers +# 0: Shift +# 1: Lock +# 2: Control +# 3: Mod1 +# 4: Mod2 +# 5: Mod3 +# 6: Mod4 +# 7: Mod5 +# 8: NumLock +# 9: Alt +# 10: LevelThree +# 11: LAlt +# 12: RAlt +# 13: RControl +# 14: LControl +# 15: ScrollLock +# 16: LevelFive +# 17: AltGr +# 18: Meta +# 19: Super +# 20: Hyper + +# evdev 1 (0x1), QKeyCode "esc", number 0x1 +Escape 0x01 + +# evdev 2 (0x2), QKeyCode "1", number 0x2 +1 0x02 +exclam 0x02 shift +onesuperior 0x02 altgr +exclamdown 0x02 shift altgr + +# evdev 3 (0x3), QKeyCode "2", number 0x3 +2 0x03 +quotedbl 0x03 shift +twosuperior 0x03 altgr +oneeighth 0x03 shift altgr + +# evdev 4 (0x4), QKeyCode "3", number 0x4 +3 0x04 +numbersign 0x04 shift +threesuperior 0x04 altgr +sterling 0x04 shift altgr + +# evdev 5 (0x5), QKeyCode "4", number 0x5 +4 0x05 +dollar 0x05 shift +onequarter 0x05 altgr +currency 0x05 shift altgr + +# evdev 6 (0x6), QKeyCode "5", number 0x6 +5 0x06 +percent 0x06 shift +onehalf 0x06 altgr +threeeighths 0x06 shift altgr + +# evdev 7 (0x7), QKeyCode "6", number 0x7 +6 0x07 +ampersand 0x07 shift +notsign 0x07 altgr +fiveeighths 0x07 shift altgr + +# evdev 8 (0x8), QKeyCode "7", number 0x8 +7 0x08 +slash 0x08 shift +braceleft 0x08 altgr +seveneighths 0x08 shift altgr + +# evdev 9 (0x9), QKeyCode "8", number 0x9 +8 0x09 +parenleft 0x09 shift +bracketleft 0x09 altgr +trademark 0x09 shift altgr + +# evdev 10 (0xa), QKeyCode "9", number 0xa +9 0x0a +parenright 0x0a shift +bracketright 0x0a altgr +plusminus 0x0a shift altgr + +# evdev 11 (0xb), QKeyCode "0", number 0xb +0 0x0b +equal 0x0b shift +braceright 0x0b altgr +degree 0x0b shift altgr + +# evdev 12 (0xc), QKeyCode "minus", number 0xc +odiaeresis 0x0c +Odiaeresis 0x0c shift +backslash 0x0c altgr +questiondown 0x0c shift altgr + +# evdev 13 (0xd), QKeyCode "equal", number 0xd +minus 0x0d +underscore 0x0d shift +dead_cedilla 0x0d altgr +dead_ogonek 0x0d shift altgr + +# evdev 14 (0xe), QKeyCode "backspace", number 0xe +BackSpace 0x0e + +# evdev 15 (0xf), QKeyCode "tab", number 0xf +Tab 0x0f +ISO_Left_Tab 0x0f shift + +# evdev 16 (0x10), QKeyCode "q", number 0x10 +q 0x10 +Q 0x10 shift +at 0x10 altgr +Greek_OMEGA 0x10 shift altgr + +# evdev 17 (0x11), QKeyCode "w", number 0x11 +w 0x11 +W 0x11 shift +lstroke 0x11 altgr +Lstroke 0x11 shift altgr + +# evdev 18 (0x12), QKeyCode "e", number 0x12 +e 0x12 +E 0x12 shift +EuroSign 0x12 altgr +cent 0x12 shift altgr + +# evdev 19 (0x13), QKeyCode "r", number 0x13 +r 0x13 +R 0x13 shift +paragraph 0x13 altgr +registered 0x13 shift altgr + +# evdev 20 (0x14), QKeyCode "t", number 0x14 +t 0x14 +T 0x14 shift +tslash 0x14 altgr +Tslash 0x14 shift altgr + +# evdev 21 (0x15), QKeyCode "y", number 0x15 +y 0x15 +Y 0x15 shift +leftarrow 0x15 altgr +yen 0x15 shift altgr + +# evdev 22 (0x16), QKeyCode "u", number 0x16 +u 0x16 +U 0x16 shift +downarrow 0x16 altgr +uparrow 0x16 shift altgr + +# evdev 23 (0x17), QKeyCode "i", number 0x17 +i 0x17 +I 0x17 shift +rightarrow 0x17 altgr +idotless 0x17 shift altgr + +# evdev 24 (0x18), QKeyCode "o", number 0x18 +o 0x18 +O 0x18 shift +oslash 0x18 altgr +Oslash 0x18 shift altgr + +# evdev 25 (0x19), QKeyCode "p", number 0x19 +p 0x19 +P 0x19 shift +thorn 0x19 altgr +THORN 0x19 shift altgr + +# evdev 26 (0x1a), QKeyCode "bracket_left", number 0x1a +eth 0x1a +ETH 0x1a shift +dead_diaeresis 0x1a altgr +dead_abovering 0x1a shift altgr + +# evdev 27 (0x1b), QKeyCode "bracket_right", number 0x1b +apostrophe 0x1b +question 0x1b shift +asciitilde 0x1b altgr +dead_macron 0x1b shift altgr + +# evdev 28 (0x1c), QKeyCode "ret", number 0x1c +Return 0x1c + +# evdev 29 (0x1d), QKeyCode "ctrl", number 0x1d +Control_L 0x1d + +# evdev 30 (0x1e), QKeyCode "a", number 0x1e +a 0x1e +A 0x1e shift +ae 0x1e altgr +AE 0x1e shift altgr + +# evdev 31 (0x1f), QKeyCode "s", number 0x1f +s 0x1f +S 0x1f shift +ssharp 0x1f altgr +section 0x1f shift altgr + +# evdev 32 (0x20), QKeyCode "d", number 0x20 +d 0x20 +D 0x20 shift +U201E 0x20 altgr +U201C 0x20 shift altgr + +# evdev 33 (0x21), QKeyCode "f", number 0x21 +f 0x21 +F 0x21 shift +dstroke 0x21 altgr +ordfeminine 0x21 shift altgr + +# evdev 34 (0x22), QKeyCode "g", number 0x22 +g 0x22 +G 0x22 shift +eng 0x22 altgr +ENG 0x22 shift altgr + +# evdev 35 (0x23), QKeyCode "h", number 0x23 +h 0x23 +H 0x23 shift +hstroke 0x23 altgr +Hstroke 0x23 shift altgr + +# evdev 36 (0x24), QKeyCode "j", number 0x24 +j 0x24 +J 0x24 shift +dead_hook 0x24 altgr +dead_horn 0x24 shift altgr + +# evdev 37 (0x25), QKeyCode "k", number 0x25 +k 0x25 +K 0x25 shift +kra 0x25 altgr +ampersand 0x25 shift altgr + +# evdev 38 (0x26), QKeyCode "l", number 0x26 +l 0x26 +L 0x26 shift +lstroke 0x26 altgr +Lstroke 0x26 shift altgr + +# evdev 39 (0x27), QKeyCode "semicolon", number 0x27 +ae 0x27 +AE 0x27 shift +asciicircum 0x27 altgr +dead_doubleacute 0x27 shift altgr + +# evdev 40 (0x28), QKeyCode "apostrophe", number 0x28 +dead_acute 0x28 +dead_circumflex 0x28 altgr +dead_caron 0x28 shift altgr + +# evdev 41 (0x29), QKeyCode "grave_accent", number 0x29 +dead_abovering 0x29 +dead_diaeresis 0x29 shift +notsign 0x29 altgr +hyphen 0x29 shift altgr + +# evdev 42 (0x2a), QKeyCode "shift", number 0x2a +Shift_L 0x2a + +# evdev 43 (0x2b), QKeyCode "backslash", number 0x2b +plus 0x2b +asterisk 0x2b shift +grave 0x2b altgr +dead_breve 0x2b shift altgr + +# evdev 44 (0x2c), QKeyCode "z", number 0x2c +z 0x2c +Z 0x2c shift +guillemotleft 0x2c altgr +less 0x2c shift altgr + +# evdev 45 (0x2d), QKeyCode "x", number 0x2d +x 0x2d +X 0x2d shift +guillemotright 0x2d altgr +greater 0x2d shift altgr + +# evdev 46 (0x2e), QKeyCode "c", number 0x2e +c 0x2e +C 0x2e shift +cent 0x2e altgr +copyright 0x2e shift altgr + +# evdev 47 (0x2f), QKeyCode "v", number 0x2f +v 0x2f +V 0x2f shift +leftdoublequotemark 0x2f altgr +leftsinglequotemark 0x2f shift altgr + +# evdev 48 (0x30), QKeyCode "b", number 0x30 +b 0x30 +B 0x30 shift +rightdoublequotemark 0x30 altgr +rightsinglequotemark 0x30 shift altgr + +# evdev 49 (0x31), QKeyCode "n", number 0x31 +n 0x31 +N 0x31 shift + +# evdev 50 (0x32), QKeyCode "m", number 0x32 +m 0x32 +M 0x32 shift +mu 0x32 altgr +masculine 0x32 shift altgr + +# evdev 51 (0x33), QKeyCode "comma", number 0x33 +comma 0x33 +semicolon 0x33 shift +horizconnector 0x33 altgr +multiply 0x33 shift altgr + +# evdev 52 (0x34), QKeyCode "dot", number 0x34 +period 0x34 +colon 0x34 shift +periodcentered 0x34 altgr +division 0x34 shift altgr + +# evdev 53 (0x35), QKeyCode "slash", number 0x35 +thorn 0x35 +THORN 0x35 shift +dead_belowdot 0x35 altgr +dead_abovedot 0x35 shift altgr + +# evdev 54 (0x36), QKeyCode "shift_r", number 0x36 +Shift_R 0x36 + +# evdev 55 (0x37), QKeyCode "kp_multiply", number 0x37 +KP_Multiply 0x37 + +# evdev 56 (0x38), QKeyCode "alt", number 0x38 +Alt_L 0x38 +Meta_L 0x38 shift + +# evdev 57 (0x39), QKeyCode "spc", number 0x39 +space 0x39 + +# evdev 58 (0x3a), QKeyCode "caps_lock", number 0x3a +Caps_Lock 0x3a + +# evdev 59 (0x3b), QKeyCode "f1", number 0x3b +F1 0x3b + +# evdev 60 (0x3c), QKeyCode "f2", number 0x3c +F2 0x3c + +# evdev 61 (0x3d), QKeyCode "f3", number 0x3d +F3 0x3d + +# evdev 62 (0x3e), QKeyCode "f4", number 0x3e +F4 0x3e + +# evdev 63 (0x3f), QKeyCode "f5", number 0x3f +F5 0x3f + +# evdev 64 (0x40), QKeyCode "f6", number 0x40 +F6 0x40 + +# evdev 65 (0x41), QKeyCode "f7", number 0x41 +F7 0x41 + +# evdev 66 (0x42), QKeyCode "f8", number 0x42 +F8 0x42 + +# evdev 67 (0x43), QKeyCode "f9", number 0x43 +F9 0x43 + +# evdev 68 (0x44), QKeyCode "f10", number 0x44 +F10 0x44 + +# evdev 69 (0x45), QKeyCode "num_lock", number 0x45 +Num_Lock 0x45 + +# evdev 70 (0x46), QKeyCode "scroll_lock", number 0x46 +Scroll_Lock 0x46 + +# evdev 71 (0x47), QKeyCode "kp_7", number 0x47 +KP_Home 0x47 +KP_7 0x47 numlock + +# evdev 72 (0x48), QKeyCode "kp_8", number 0x48 +KP_Up 0x48 +KP_8 0x48 numlock + +# evdev 73 (0x49), QKeyCode "kp_9", number 0x49 +KP_Prior 0x49 +KP_9 0x49 numlock + +# evdev 74 (0x4a), QKeyCode "kp_subtract", number 0x4a +KP_Subtract 0x4a + +# evdev 75 (0x4b), QKeyCode "kp_4", number 0x4b +KP_Left 0x4b +KP_4 0x4b numlock + +# evdev 76 (0x4c), QKeyCode "kp_5", number 0x4c +KP_Begin 0x4c +KP_5 0x4c numlock + +# evdev 77 (0x4d), QKeyCode "kp_6", number 0x4d +KP_Right 0x4d +KP_6 0x4d numlock + +# evdev 78 (0x4e), QKeyCode "kp_add", number 0x4e +KP_Add 0x4e + +# evdev 79 (0x4f), QKeyCode "kp_1", number 0x4f +KP_End 0x4f +KP_1 0x4f numlock + +# evdev 80 (0x50), QKeyCode "kp_2", number 0x50 +KP_Down 0x50 +KP_2 0x50 numlock + +# evdev 81 (0x51), QKeyCode "kp_3", number 0x51 +KP_Next 0x51 +KP_3 0x51 numlock + +# evdev 82 (0x52), QKeyCode "kp_0", number 0x52 +KP_Insert 0x52 +KP_0 0x52 numlock + +# evdev 83 (0x53), QKeyCode "kp_decimal", number 0x53 +KP_Delete 0x53 +KP_Decimal 0x53 numlock + +# evdev 84 (0x54): no evdev -> QKeyCode mapping (xkb keysym ISO_Level3_Shift) + +# evdev 85 (0x55): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 86 (0x56), QKeyCode "less", number 0x56 +less 0x56 +greater 0x56 shift +bar 0x56 altgr +brokenbar 0x56 shift altgr + +# evdev 87 (0x57), QKeyCode "f11", number 0x57 +F11 0x57 + +# evdev 88 (0x58), QKeyCode "f12", number 0x58 +F12 0x58 + +# evdev 89 (0x59), QKeyCode "ro", number 0x73 + +# evdev 90 (0x5a): no evdev -> QKeyCode mapping (xkb keysym Katakana) + +# evdev 91 (0x5b), QKeyCode "hiragana", number 0x77 +Hiragana 0x77 + +# evdev 92 (0x5c), QKeyCode "henkan", number 0x79 +Henkan_Mode 0x79 + +# evdev 93 (0x5d): no evdev -> QKeyCode mapping (xkb keysym Hiragana_Katakana) + +# evdev 94 (0x5e): no evdev -> QKeyCode mapping (xkb keysym Muhenkan) + +# evdev 95 (0x5f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 96 (0x60), QKeyCode "kp_enter", number 0x9c +KP_Enter 0x9c + +# evdev 97 (0x61), QKeyCode "ctrl_r", number 0x9d +Control_R 0x9d + +# evdev 98 (0x62), QKeyCode "kp_divide", number 0xb5 +KP_Divide 0xb5 + +# evdev 99 (0x63), QKeyCode "sysrq", number 0x54 +Print 0x54 + +# evdev 100 (0x64), QKeyCode "alt_r", number 0xb8 +ISO_Level3_Shift 0xb8 + +# evdev 101 (0x65), QKeyCode "lf", number 0x5b +Linefeed 0x5b + +# evdev 102 (0x66), QKeyCode "home", number 0xc7 +Home 0xc7 + +# evdev 103 (0x67), QKeyCode "up", number 0xc8 +Up 0xc8 + +# evdev 104 (0x68), QKeyCode "pgup", number 0xc9 +Prior 0xc9 + +# evdev 105 (0x69), QKeyCode "left", number 0xcb +Left 0xcb + +# evdev 106 (0x6a), QKeyCode "right", number 0xcd +Right 0xcd + +# evdev 107 (0x6b), QKeyCode "end", number 0xcf +End 0xcf + +# evdev 108 (0x6c), QKeyCode "down", number 0xd0 +Down 0xd0 + +# evdev 109 (0x6d), QKeyCode "pgdn", number 0xd1 +Next 0xd1 + +# evdev 110 (0x6e), QKeyCode "insert", number 0xd2 +Insert 0xd2 + +# evdev 111 (0x6f), QKeyCode "delete", number 0xd3 +Delete 0xd3 + +# evdev 112 (0x70): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 113 (0x71), QKeyCode "audiomute", number 0xa0 +XF86AudioMute 0xa0 + +# evdev 114 (0x72), QKeyCode "volumedown", number 0xae +XF86AudioLowerVolume 0xae + +# evdev 115 (0x73), QKeyCode "volumeup", number 0xb0 +XF86AudioRaiseVolume 0xb0 + +# evdev 116 (0x74), QKeyCode "power", number 0xde +XF86PowerOff 0xde + +# evdev 117 (0x75), QKeyCode "kp_equals", number 0x59 +KP_Equal 0x59 + +# evdev 118 (0x76): no evdev -> QKeyCode mapping (xkb keysym plusminus) + +# evdev 119 (0x77), QKeyCode "pause", number 0xc6 +Pause 0xc6 + +# evdev 120 (0x78): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchA) + +# evdev 121 (0x79), QKeyCode "kp_comma", number 0x7e +KP_Decimal 0x7e + +# evdev 122 (0x7a): no evdev -> QKeyCode mapping (xkb keysym Hangul) + +# evdev 123 (0x7b): no evdev -> QKeyCode mapping (xkb keysym Hangul_Hanja) + +# evdev 124 (0x7c), QKeyCode "yen", number 0x7d + +# evdev 125 (0x7d), QKeyCode "meta_l", number 0xdb +Super_L 0xdb + +# evdev 126 (0x7e), QKeyCode "meta_r", number 0xdc +Super_R 0xdc + +# evdev 127 (0x7f), QKeyCode "compose", number 0xdd +Menu 0xdd + +# evdev 128 (0x80), QKeyCode "stop", number 0xe8 +Cancel 0xe8 + +# evdev 129 (0x81), QKeyCode "again", number 0x85 +Redo 0x85 + +# evdev 130 (0x82), QKeyCode "props", number 0x86 +SunProps 0x86 + +# evdev 131 (0x83), QKeyCode "undo", number 0x87 +Undo 0x87 + +# evdev 132 (0x84), QKeyCode "front", number 0x8c +SunFront 0x8c + +# evdev 133 (0x85), QKeyCode "copy", number 0xf8 +XF86Copy 0xf8 + +# evdev 134 (0x86), QKeyCode "open", number 0x64 +XF86Open 0x64 + +# evdev 135 (0x87), QKeyCode "paste", number 0x65 +XF86Paste 0x65 + +# evdev 136 (0x88), QKeyCode "find", number 0xc1 +Find 0xc1 + +# evdev 137 (0x89), QKeyCode "cut", number 0xbc +XF86Cut 0xbc + +# evdev 138 (0x8a), QKeyCode "help", number 0xf5 +Help 0xf5 + +# evdev 139 (0x8b), QKeyCode "menu", number 0x9e +XF86MenuKB 0x9e + +# evdev 140 (0x8c), QKeyCode "calculator", number 0xa1 +XF86Calculator 0xa1 + +# evdev 141 (0x8d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 142 (0x8e), QKeyCode "sleep", number 0xdf +XF86Sleep 0xdf + +# evdev 143 (0x8f), QKeyCode "wake", number 0xe3 +XF86WakeUp 0xe3 + +# evdev 144 (0x90): no evdev -> QKeyCode mapping (xkb keysym XF86Explorer) + +# evdev 145 (0x91): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 146 (0x92): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 147 (0x93): no evdev -> QKeyCode mapping (xkb keysym XF86Xfer) + +# evdev 148 (0x94): no evdev -> QKeyCode mapping (xkb keysym XF86Launch1) + +# evdev 149 (0x95): no evdev -> QKeyCode mapping (xkb keysym XF86Launch2) + +# evdev 150 (0x96): no evdev -> QKeyCode mapping (xkb keysym XF86WWW) + +# evdev 151 (0x97): no evdev -> QKeyCode mapping (xkb keysym XF86DOS) + +# evdev 152 (0x98): no evdev -> QKeyCode mapping (xkb keysym XF86ScreenSaver) + +# evdev 153 (0x99): no evdev -> QKeyCode mapping (xkb keysym XF86RotateWindows) + +# evdev 154 (0x9a): no evdev -> QKeyCode mapping (xkb keysym XF86TaskPane) + +# evdev 155 (0x9b), QKeyCode "mail", number 0xec +XF86Mail 0xec + +# evdev 156 (0x9c), QKeyCode "ac_bookmarks", number 0xe6 +XF86Favorites 0xe6 + +# evdev 157 (0x9d), QKeyCode "computer", number 0xeb +XF86MyComputer 0xeb + +# evdev 158 (0x9e), QKeyCode "ac_back", number 0xea +XF86Back 0xea + +# evdev 159 (0x9f), QKeyCode "ac_forward", number 0xe9 +XF86Forward 0xe9 + +# evdev 160 (0xa0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 161 (0xa1): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 162 (0xa2): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 163 (0xa3), QKeyCode "audionext", number 0x99 +XF86AudioNext 0x99 + +# evdev 164 (0xa4), QKeyCode "audioplay", number 0xa2 +XF86AudioPlay 0xa2 +XF86AudioPause 0xa2 shift + +# evdev 165 (0xa5), QKeyCode "audioprev", number 0x90 +XF86AudioPrev 0x90 + +# evdev 166 (0xa6), QKeyCode "audiostop", number 0xa4 +XF86AudioStop 0xa4 +XF86Eject 0xa4 shift + +# evdev 167 (0xa7): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRecord) + +# evdev 168 (0xa8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRewind) + +# evdev 169 (0xa9): no evdev -> QKeyCode mapping (xkb keysym XF86Phone) + +# evdev 170 (0xaa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 171 (0xab): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 172 (0xac), QKeyCode "ac_home", number 0xb2 +XF86HomePage 0xb2 + +# evdev 173 (0xad), QKeyCode "ac_refresh", number 0xe7 +XF86Reload 0xe7 + +# evdev 174 (0xae): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 175 (0xaf): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 176 (0xb0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 177 (0xb1): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollUp) + +# evdev 178 (0xb2): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollDown) + +# evdev 179 (0xb3): no evdev -> QKeyCode mapping (xkb keysym parenleft) + +# evdev 180 (0xb4): no evdev -> QKeyCode mapping (xkb keysym parenright) + +# evdev 181 (0xb5): no evdev -> QKeyCode mapping (xkb keysym XF86New) + +# evdev 182 (0xb6): no evdev -> QKeyCode mapping (xkb keysym Redo) + +# evdev 183 (0xb7): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 184 (0xb8): no evdev -> QKeyCode mapping (xkb keysym XF86Launch5) + +# evdev 185 (0xb9): no evdev -> QKeyCode mapping (xkb keysym XF86Launch6) + +# evdev 186 (0xba): no evdev -> QKeyCode mapping (xkb keysym XF86Launch7) + +# evdev 187 (0xbb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch8) + +# evdev 188 (0xbc): no evdev -> QKeyCode mapping (xkb keysym XF86Launch9) + +# evdev 189 (0xbd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 190 (0xbe): no evdev -> QKeyCode mapping (xkb keysym XF86AudioMicMute) + +# evdev 191 (0xbf): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadToggle) + +# evdev 192 (0xc0): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOn) + +# evdev 193 (0xc1): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOff) + +# evdev 194 (0xc2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 195 (0xc3): no evdev -> QKeyCode mapping (xkb keysym Mode_switch) + +# evdev 196 (0xc4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 197 (0xc5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 198 (0xc6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 199 (0xc7): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 200 (0xc8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 201 (0xc9): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPause) + +# evdev 202 (0xca): no evdev -> QKeyCode mapping (xkb keysym XF86Launch3) + +# evdev 203 (0xcb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch4) + +# evdev 204 (0xcc): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchB) + +# evdev 205 (0xcd): no evdev -> QKeyCode mapping (xkb keysym XF86Suspend) + +# evdev 206 (0xce): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 207 (0xcf): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 208 (0xd0): no evdev -> QKeyCode mapping (xkb keysym XF86AudioForward) + +# evdev 209 (0xd1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 210 (0xd2): no evdev -> QKeyCode mapping (xkb keysym Print) + +# evdev 211 (0xd3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 212 (0xd4): no evdev -> QKeyCode mapping (xkb keysym XF86WebCam) + +# evdev 213 (0xd5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 214 (0xd6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 215 (0xd7): no evdev -> QKeyCode mapping (xkb keysym XF86Mail) + +# evdev 216 (0xd8): no evdev -> QKeyCode mapping (xkb keysym XF86Messenger) + +# evdev 217 (0xd9): no evdev -> QKeyCode mapping (xkb keysym XF86Search) + +# evdev 218 (0xda): no evdev -> QKeyCode mapping (xkb keysym XF86Go) + +# evdev 219 (0xdb): no evdev -> QKeyCode mapping (xkb keysym XF86Finance) + +# evdev 220 (0xdc): no evdev -> QKeyCode mapping (xkb keysym XF86Game) + +# evdev 221 (0xdd): no evdev -> QKeyCode mapping (xkb keysym XF86Shop) + +# evdev 222 (0xde): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 223 (0xdf): no evdev -> QKeyCode mapping (xkb keysym Cancel) + +# evdev 224 (0xe0): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessDown) + +# evdev 225 (0xe1): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessUp) + +# evdev 226 (0xe2), QKeyCode "mediaselect", number 0xed +XF86AudioMedia 0xed + +# evdev 227 (0xe3): no evdev -> QKeyCode mapping (xkb keysym XF86Display) + +# evdev 228 (0xe4): no evdev -> QKeyCode mapping (xkb keysym XF86KbdLightOnOff) + +# evdev 229 (0xe5): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessDown) + +# evdev 230 (0xe6): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessUp) + +# evdev 231 (0xe7): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 232 (0xe8): no evdev -> QKeyCode mapping (xkb keysym XF86Reply) + +# evdev 233 (0xe9): no evdev -> QKeyCode mapping (xkb keysym XF86MailForward) + +# evdev 234 (0xea): no evdev -> QKeyCode mapping (xkb keysym XF86Save) + +# evdev 235 (0xeb): no evdev -> QKeyCode mapping (xkb keysym XF86Documents) + +# evdev 236 (0xec): no evdev -> QKeyCode mapping (xkb keysym XF86Battery) + +# evdev 237 (0xed): no evdev -> QKeyCode mapping (xkb keysym XF86Bluetooth) + +# evdev 238 (0xee): no evdev -> QKeyCode mapping (xkb keysym XF86WLAN) + +# evdev 239 (0xef): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 240 (0xf0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 241 (0xf1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 242 (0xf2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 243 (0xf3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 244 (0xf4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# +# quirks section start +# +# Sometimes multiple keysyms map to the same keycodes. +# The keycode -> keysym lookup finds only one of the +# keysyms. So append them here. +# + +Print 0x54 +Sys_Req 0x54 +Execute 0x54 +KP_Decimal 0x53 numlock +KP_Separator 0x53 numlock +Alt_R 0xb8 +ISO_Level3_Shift 0xb8 +Mode_switch 0xb8 + +# quirks section end diff --git a/app/src/main/assets/roms/keymaps/it b/app/src/main/assets/roms/keymaps/it new file mode 100644 index 0000000..abc3ed1 --- /dev/null +++ b/app/src/main/assets/roms/keymaps/it @@ -0,0 +1,840 @@ +# +# generated by qemu-keymap +# model : pc105 +# layout : it +# variant : - +# options : - + +# name: "Italian" + +# modifiers +# 0: Shift +# 1: Lock +# 2: Control +# 3: Mod1 +# 4: Mod2 +# 5: Mod3 +# 6: Mod4 +# 7: Mod5 +# 8: NumLock +# 9: Alt +# 10: LevelThree +# 11: LAlt +# 12: RAlt +# 13: RControl +# 14: LControl +# 15: ScrollLock +# 16: LevelFive +# 17: AltGr +# 18: Meta +# 19: Super +# 20: Hyper + +# evdev 1 (0x1), QKeyCode "esc", number 0x1 +Escape 0x01 + +# evdev 2 (0x2), QKeyCode "1", number 0x2 +1 0x02 +exclam 0x02 shift +onesuperior 0x02 altgr +exclamdown 0x02 shift altgr + +# evdev 3 (0x3), QKeyCode "2", number 0x3 +2 0x03 +quotedbl 0x03 shift +twosuperior 0x03 altgr +dead_doubleacute 0x03 shift altgr + +# evdev 4 (0x4), QKeyCode "3", number 0x4 +3 0x04 +sterling 0x04 shift +threesuperior 0x04 altgr +dead_tilde 0x04 shift altgr + +# evdev 5 (0x5), QKeyCode "4", number 0x5 +4 0x05 +dollar 0x05 shift +onequarter 0x05 altgr +oneeighth 0x05 shift altgr + +# evdev 6 (0x6), QKeyCode "5", number 0x6 +5 0x06 +percent 0x06 shift +onehalf 0x06 altgr +threeeighths 0x06 shift altgr + +# evdev 7 (0x7), QKeyCode "6", number 0x7 +6 0x07 +ampersand 0x07 shift +notsign 0x07 altgr +fiveeighths 0x07 shift altgr + +# evdev 8 (0x8), QKeyCode "7", number 0x8 +7 0x08 +slash 0x08 shift +braceleft 0x08 altgr +seveneighths 0x08 shift altgr + +# evdev 9 (0x9), QKeyCode "8", number 0x9 +8 0x09 +parenleft 0x09 shift +bracketleft 0x09 altgr +trademark 0x09 shift altgr + +# evdev 10 (0xa), QKeyCode "9", number 0xa +9 0x0a +parenright 0x0a shift +bracketright 0x0a altgr +plusminus 0x0a shift altgr + +# evdev 11 (0xb), QKeyCode "0", number 0xb +0 0x0b +equal 0x0b shift +braceright 0x0b altgr +dead_ogonek 0x0b shift altgr + +# evdev 12 (0xc), QKeyCode "minus", number 0xc +apostrophe 0x0c +question 0x0c shift +grave 0x0c altgr +questiondown 0x0c shift altgr + +# evdev 13 (0xd), QKeyCode "equal", number 0xd +igrave 0x0d +asciicircum 0x0d shift +asciitilde 0x0d altgr +dead_circumflex 0x0d shift altgr + +# evdev 14 (0xe), QKeyCode "backspace", number 0xe +BackSpace 0x0e + +# evdev 15 (0xf), QKeyCode "tab", number 0xf +Tab 0x0f +ISO_Left_Tab 0x0f shift + +# evdev 16 (0x10), QKeyCode "q", number 0x10 +q 0x10 +Q 0x10 shift +at 0x10 altgr +Greek_OMEGA 0x10 shift altgr + +# evdev 17 (0x11), QKeyCode "w", number 0x11 +w 0x11 +W 0x11 shift +lstroke 0x11 altgr +Lstroke 0x11 shift altgr + +# evdev 18 (0x12), QKeyCode "e", number 0x12 +e 0x12 +E 0x12 shift +EuroSign 0x12 altgr +cent 0x12 shift altgr + +# evdev 19 (0x13), QKeyCode "r", number 0x13 +r 0x13 +R 0x13 shift +paragraph 0x13 altgr +registered 0x13 shift altgr + +# evdev 20 (0x14), QKeyCode "t", number 0x14 +t 0x14 +T 0x14 shift +tslash 0x14 altgr +Tslash 0x14 shift altgr + +# evdev 21 (0x15), QKeyCode "y", number 0x15 +y 0x15 +Y 0x15 shift +leftarrow 0x15 altgr +yen 0x15 shift altgr + +# evdev 22 (0x16), QKeyCode "u", number 0x16 +u 0x16 +U 0x16 shift +downarrow 0x16 altgr +uparrow 0x16 shift altgr + +# evdev 23 (0x17), QKeyCode "i", number 0x17 +i 0x17 +I 0x17 shift +rightarrow 0x17 altgr +idotless 0x17 shift altgr + +# evdev 24 (0x18), QKeyCode "o", number 0x18 +o 0x18 +O 0x18 shift +oslash 0x18 altgr +Oslash 0x18 shift altgr + +# evdev 25 (0x19), QKeyCode "p", number 0x19 +p 0x19 +P 0x19 shift +thorn 0x19 altgr +THORN 0x19 shift altgr + +# evdev 26 (0x1a), QKeyCode "bracket_left", number 0x1a +egrave 0x1a +eacute 0x1a shift +bracketleft 0x1a altgr +braceleft 0x1a shift altgr + +# evdev 27 (0x1b), QKeyCode "bracket_right", number 0x1b +plus 0x1b +asterisk 0x1b shift +bracketright 0x1b altgr +braceright 0x1b shift altgr + +# evdev 28 (0x1c), QKeyCode "ret", number 0x1c +Return 0x1c + +# evdev 29 (0x1d), QKeyCode "ctrl", number 0x1d +Control_L 0x1d + +# evdev 30 (0x1e), QKeyCode "a", number 0x1e +a 0x1e +A 0x1e shift +ae 0x1e altgr +AE 0x1e shift altgr + +# evdev 31 (0x1f), QKeyCode "s", number 0x1f +s 0x1f +S 0x1f shift +ssharp 0x1f altgr +section 0x1f shift altgr + +# evdev 32 (0x20), QKeyCode "d", number 0x20 +d 0x20 +D 0x20 shift +eth 0x20 altgr +ETH 0x20 shift altgr + +# evdev 33 (0x21), QKeyCode "f", number 0x21 +f 0x21 +F 0x21 shift +dstroke 0x21 altgr +ordfeminine 0x21 shift altgr + +# evdev 34 (0x22), QKeyCode "g", number 0x22 +g 0x22 +G 0x22 shift +eng 0x22 altgr +ENG 0x22 shift altgr + +# evdev 35 (0x23), QKeyCode "h", number 0x23 +h 0x23 +H 0x23 shift +hstroke 0x23 altgr +Hstroke 0x23 shift altgr + +# evdev 36 (0x24), QKeyCode "j", number 0x24 +j 0x24 +J 0x24 shift +dead_hook 0x24 altgr +dead_horn 0x24 shift altgr + +# evdev 37 (0x25), QKeyCode "k", number 0x25 +k 0x25 +K 0x25 shift +kra 0x25 altgr +ampersand 0x25 shift altgr + +# evdev 38 (0x26), QKeyCode "l", number 0x26 +l 0x26 +L 0x26 shift +lstroke 0x26 altgr +Lstroke 0x26 shift altgr + +# evdev 39 (0x27), QKeyCode "semicolon", number 0x27 +ograve 0x27 +ccedilla 0x27 shift +at 0x27 altgr +dead_cedilla 0x27 shift altgr + +# evdev 40 (0x28), QKeyCode "apostrophe", number 0x28 +agrave 0x28 +degree 0x28 shift +numbersign 0x28 altgr +dead_abovering 0x28 shift altgr + +# evdev 41 (0x29), QKeyCode "grave_accent", number 0x29 +backslash 0x29 +bar 0x29 shift +notsign 0x29 altgr +brokenbar 0x29 shift altgr + +# evdev 42 (0x2a), QKeyCode "shift", number 0x2a +Shift_L 0x2a + +# evdev 43 (0x2b), QKeyCode "backslash", number 0x2b +ugrave 0x2b +section 0x2b shift +dead_grave 0x2b altgr +dead_breve 0x2b shift altgr + +# evdev 44 (0x2c), QKeyCode "z", number 0x2c +z 0x2c +Z 0x2c shift +guillemotleft 0x2c altgr +less 0x2c shift altgr + +# evdev 45 (0x2d), QKeyCode "x", number 0x2d +x 0x2d +X 0x2d shift +guillemotright 0x2d altgr +greater 0x2d shift altgr + +# evdev 46 (0x2e), QKeyCode "c", number 0x2e +c 0x2e +C 0x2e shift +cent 0x2e altgr +copyright 0x2e shift altgr + +# evdev 47 (0x2f), QKeyCode "v", number 0x2f +v 0x2f +V 0x2f shift +leftdoublequotemark 0x2f altgr +leftsinglequotemark 0x2f shift altgr + +# evdev 48 (0x30), QKeyCode "b", number 0x30 +b 0x30 +B 0x30 shift +rightdoublequotemark 0x30 altgr +rightsinglequotemark 0x30 shift altgr + +# evdev 49 (0x31), QKeyCode "n", number 0x31 +n 0x31 +N 0x31 shift +ntilde 0x31 altgr +Ntilde 0x31 shift altgr + +# evdev 50 (0x32), QKeyCode "m", number 0x32 +m 0x32 +M 0x32 shift +mu 0x32 altgr +masculine 0x32 shift altgr + +# evdev 51 (0x33), QKeyCode "comma", number 0x33 +comma 0x33 +semicolon 0x33 shift +dead_acute 0x33 altgr +multiply 0x33 shift altgr + +# evdev 52 (0x34), QKeyCode "dot", number 0x34 +period 0x34 +colon 0x34 shift +periodcentered 0x34 altgr +dead_diaeresis 0x34 shift altgr + +# evdev 53 (0x35), QKeyCode "slash", number 0x35 +minus 0x35 +underscore 0x35 shift +dead_macron 0x35 altgr +division 0x35 shift altgr + +# evdev 54 (0x36), QKeyCode "shift_r", number 0x36 +Shift_R 0x36 + +# evdev 55 (0x37), QKeyCode "kp_multiply", number 0x37 +KP_Multiply 0x37 + +# evdev 56 (0x38), QKeyCode "alt", number 0x38 +Alt_L 0x38 +Meta_L 0x38 shift + +# evdev 57 (0x39), QKeyCode "spc", number 0x39 +space 0x39 + +# evdev 58 (0x3a), QKeyCode "caps_lock", number 0x3a +Caps_Lock 0x3a + +# evdev 59 (0x3b), QKeyCode "f1", number 0x3b +F1 0x3b + +# evdev 60 (0x3c), QKeyCode "f2", number 0x3c +F2 0x3c + +# evdev 61 (0x3d), QKeyCode "f3", number 0x3d +F3 0x3d + +# evdev 62 (0x3e), QKeyCode "f4", number 0x3e +F4 0x3e + +# evdev 63 (0x3f), QKeyCode "f5", number 0x3f +F5 0x3f + +# evdev 64 (0x40), QKeyCode "f6", number 0x40 +F6 0x40 + +# evdev 65 (0x41), QKeyCode "f7", number 0x41 +F7 0x41 + +# evdev 66 (0x42), QKeyCode "f8", number 0x42 +F8 0x42 + +# evdev 67 (0x43), QKeyCode "f9", number 0x43 +F9 0x43 + +# evdev 68 (0x44), QKeyCode "f10", number 0x44 +F10 0x44 + +# evdev 69 (0x45), QKeyCode "num_lock", number 0x45 +Num_Lock 0x45 + +# evdev 70 (0x46), QKeyCode "scroll_lock", number 0x46 +Scroll_Lock 0x46 + +# evdev 71 (0x47), QKeyCode "kp_7", number 0x47 +KP_Home 0x47 +KP_7 0x47 numlock + +# evdev 72 (0x48), QKeyCode "kp_8", number 0x48 +KP_Up 0x48 +KP_8 0x48 numlock + +# evdev 73 (0x49), QKeyCode "kp_9", number 0x49 +KP_Prior 0x49 +KP_9 0x49 numlock + +# evdev 74 (0x4a), QKeyCode "kp_subtract", number 0x4a +KP_Subtract 0x4a + +# evdev 75 (0x4b), QKeyCode "kp_4", number 0x4b +KP_Left 0x4b +KP_4 0x4b numlock + +# evdev 76 (0x4c), QKeyCode "kp_5", number 0x4c +KP_Begin 0x4c +KP_5 0x4c numlock + +# evdev 77 (0x4d), QKeyCode "kp_6", number 0x4d +KP_Right 0x4d +KP_6 0x4d numlock + +# evdev 78 (0x4e), QKeyCode "kp_add", number 0x4e +KP_Add 0x4e + +# evdev 79 (0x4f), QKeyCode "kp_1", number 0x4f +KP_End 0x4f +KP_1 0x4f numlock + +# evdev 80 (0x50), QKeyCode "kp_2", number 0x50 +KP_Down 0x50 +KP_2 0x50 numlock + +# evdev 81 (0x51), QKeyCode "kp_3", number 0x51 +KP_Next 0x51 +KP_3 0x51 numlock + +# evdev 82 (0x52), QKeyCode "kp_0", number 0x52 +KP_Insert 0x52 +KP_0 0x52 numlock + +# evdev 83 (0x53), QKeyCode "kp_decimal", number 0x53 +KP_Delete 0x53 +KP_Decimal 0x53 numlock + +# evdev 84 (0x54): no evdev -> QKeyCode mapping (xkb keysym ISO_Level3_Shift) + +# evdev 85 (0x55): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 86 (0x56), QKeyCode "less", number 0x56 +less 0x56 +greater 0x56 shift +guillemotleft 0x56 altgr +guillemotright 0x56 shift altgr + +# evdev 87 (0x57), QKeyCode "f11", number 0x57 +F11 0x57 + +# evdev 88 (0x58), QKeyCode "f12", number 0x58 +F12 0x58 + +# evdev 89 (0x59), QKeyCode "ro", number 0x73 + +# evdev 90 (0x5a): no evdev -> QKeyCode mapping (xkb keysym Katakana) + +# evdev 91 (0x5b), QKeyCode "hiragana", number 0x77 +Hiragana 0x77 + +# evdev 92 (0x5c), QKeyCode "henkan", number 0x79 +Henkan_Mode 0x79 + +# evdev 93 (0x5d): no evdev -> QKeyCode mapping (xkb keysym Hiragana_Katakana) + +# evdev 94 (0x5e): no evdev -> QKeyCode mapping (xkb keysym Muhenkan) + +# evdev 95 (0x5f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 96 (0x60), QKeyCode "kp_enter", number 0x9c +KP_Enter 0x9c + +# evdev 97 (0x61), QKeyCode "ctrl_r", number 0x9d +Control_R 0x9d + +# evdev 98 (0x62), QKeyCode "kp_divide", number 0xb5 +KP_Divide 0xb5 + +# evdev 99 (0x63), QKeyCode "sysrq", number 0x54 +Print 0x54 + +# evdev 100 (0x64), QKeyCode "alt_r", number 0xb8 +ISO_Level3_Shift 0xb8 + +# evdev 101 (0x65), QKeyCode "lf", number 0x5b +Linefeed 0x5b + +# evdev 102 (0x66), QKeyCode "home", number 0xc7 +Home 0xc7 + +# evdev 103 (0x67), QKeyCode "up", number 0xc8 +Up 0xc8 + +# evdev 104 (0x68), QKeyCode "pgup", number 0xc9 +Prior 0xc9 + +# evdev 105 (0x69), QKeyCode "left", number 0xcb +Left 0xcb + +# evdev 106 (0x6a), QKeyCode "right", number 0xcd +Right 0xcd + +# evdev 107 (0x6b), QKeyCode "end", number 0xcf +End 0xcf + +# evdev 108 (0x6c), QKeyCode "down", number 0xd0 +Down 0xd0 + +# evdev 109 (0x6d), QKeyCode "pgdn", number 0xd1 +Next 0xd1 + +# evdev 110 (0x6e), QKeyCode "insert", number 0xd2 +Insert 0xd2 + +# evdev 111 (0x6f), QKeyCode "delete", number 0xd3 +Delete 0xd3 + +# evdev 112 (0x70): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 113 (0x71), QKeyCode "audiomute", number 0xa0 +XF86AudioMute 0xa0 + +# evdev 114 (0x72), QKeyCode "volumedown", number 0xae +XF86AudioLowerVolume 0xae + +# evdev 115 (0x73), QKeyCode "volumeup", number 0xb0 +XF86AudioRaiseVolume 0xb0 + +# evdev 116 (0x74), QKeyCode "power", number 0xde +XF86PowerOff 0xde + +# evdev 117 (0x75), QKeyCode "kp_equals", number 0x59 +KP_Equal 0x59 + +# evdev 118 (0x76): no evdev -> QKeyCode mapping (xkb keysym plusminus) + +# evdev 119 (0x77), QKeyCode "pause", number 0xc6 +Pause 0xc6 + +# evdev 120 (0x78): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchA) + +# evdev 121 (0x79), QKeyCode "kp_comma", number 0x7e +KP_Decimal 0x7e + +# evdev 122 (0x7a): no evdev -> QKeyCode mapping (xkb keysym Hangul) + +# evdev 123 (0x7b): no evdev -> QKeyCode mapping (xkb keysym Hangul_Hanja) + +# evdev 124 (0x7c), QKeyCode "yen", number 0x7d + +# evdev 125 (0x7d), QKeyCode "meta_l", number 0xdb +Super_L 0xdb + +# evdev 126 (0x7e), QKeyCode "meta_r", number 0xdc +Super_R 0xdc + +# evdev 127 (0x7f), QKeyCode "compose", number 0xdd +Menu 0xdd + +# evdev 128 (0x80), QKeyCode "stop", number 0xe8 +Cancel 0xe8 + +# evdev 129 (0x81), QKeyCode "again", number 0x85 +Redo 0x85 + +# evdev 130 (0x82), QKeyCode "props", number 0x86 +SunProps 0x86 + +# evdev 131 (0x83), QKeyCode "undo", number 0x87 +Undo 0x87 + +# evdev 132 (0x84), QKeyCode "front", number 0x8c +SunFront 0x8c + +# evdev 133 (0x85), QKeyCode "copy", number 0xf8 +XF86Copy 0xf8 + +# evdev 134 (0x86), QKeyCode "open", number 0x64 +XF86Open 0x64 + +# evdev 135 (0x87), QKeyCode "paste", number 0x65 +XF86Paste 0x65 + +# evdev 136 (0x88), QKeyCode "find", number 0xc1 +Find 0xc1 + +# evdev 137 (0x89), QKeyCode "cut", number 0xbc +XF86Cut 0xbc + +# evdev 138 (0x8a), QKeyCode "help", number 0xf5 +Help 0xf5 + +# evdev 139 (0x8b), QKeyCode "menu", number 0x9e +XF86MenuKB 0x9e + +# evdev 140 (0x8c), QKeyCode "calculator", number 0xa1 +XF86Calculator 0xa1 + +# evdev 141 (0x8d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 142 (0x8e), QKeyCode "sleep", number 0xdf +XF86Sleep 0xdf + +# evdev 143 (0x8f), QKeyCode "wake", number 0xe3 +XF86WakeUp 0xe3 + +# evdev 144 (0x90): no evdev -> QKeyCode mapping (xkb keysym XF86Explorer) + +# evdev 145 (0x91): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 146 (0x92): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 147 (0x93): no evdev -> QKeyCode mapping (xkb keysym XF86Xfer) + +# evdev 148 (0x94): no evdev -> QKeyCode mapping (xkb keysym XF86Launch1) + +# evdev 149 (0x95): no evdev -> QKeyCode mapping (xkb keysym XF86Launch2) + +# evdev 150 (0x96): no evdev -> QKeyCode mapping (xkb keysym XF86WWW) + +# evdev 151 (0x97): no evdev -> QKeyCode mapping (xkb keysym XF86DOS) + +# evdev 152 (0x98): no evdev -> QKeyCode mapping (xkb keysym XF86ScreenSaver) + +# evdev 153 (0x99): no evdev -> QKeyCode mapping (xkb keysym XF86RotateWindows) + +# evdev 154 (0x9a): no evdev -> QKeyCode mapping (xkb keysym XF86TaskPane) + +# evdev 155 (0x9b), QKeyCode "mail", number 0xec +XF86Mail 0xec + +# evdev 156 (0x9c), QKeyCode "ac_bookmarks", number 0xe6 +XF86Favorites 0xe6 + +# evdev 157 (0x9d), QKeyCode "computer", number 0xeb +XF86MyComputer 0xeb + +# evdev 158 (0x9e), QKeyCode "ac_back", number 0xea +XF86Back 0xea + +# evdev 159 (0x9f), QKeyCode "ac_forward", number 0xe9 +XF86Forward 0xe9 + +# evdev 160 (0xa0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 161 (0xa1): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 162 (0xa2): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 163 (0xa3), QKeyCode "audionext", number 0x99 +XF86AudioNext 0x99 + +# evdev 164 (0xa4), QKeyCode "audioplay", number 0xa2 +XF86AudioPlay 0xa2 +XF86AudioPause 0xa2 shift + +# evdev 165 (0xa5), QKeyCode "audioprev", number 0x90 +XF86AudioPrev 0x90 + +# evdev 166 (0xa6), QKeyCode "audiostop", number 0xa4 +XF86AudioStop 0xa4 +XF86Eject 0xa4 shift + +# evdev 167 (0xa7): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRecord) + +# evdev 168 (0xa8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRewind) + +# evdev 169 (0xa9): no evdev -> QKeyCode mapping (xkb keysym XF86Phone) + +# evdev 170 (0xaa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 171 (0xab): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 172 (0xac), QKeyCode "ac_home", number 0xb2 +XF86HomePage 0xb2 + +# evdev 173 (0xad), QKeyCode "ac_refresh", number 0xe7 +XF86Reload 0xe7 + +# evdev 174 (0xae): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 175 (0xaf): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 176 (0xb0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 177 (0xb1): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollUp) + +# evdev 178 (0xb2): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollDown) + +# evdev 179 (0xb3): no evdev -> QKeyCode mapping (xkb keysym parenleft) + +# evdev 180 (0xb4): no evdev -> QKeyCode mapping (xkb keysym parenright) + +# evdev 181 (0xb5): no evdev -> QKeyCode mapping (xkb keysym XF86New) + +# evdev 182 (0xb6): no evdev -> QKeyCode mapping (xkb keysym Redo) + +# evdev 183 (0xb7): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 184 (0xb8): no evdev -> QKeyCode mapping (xkb keysym XF86Launch5) + +# evdev 185 (0xb9): no evdev -> QKeyCode mapping (xkb keysym XF86Launch6) + +# evdev 186 (0xba): no evdev -> QKeyCode mapping (xkb keysym XF86Launch7) + +# evdev 187 (0xbb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch8) + +# evdev 188 (0xbc): no evdev -> QKeyCode mapping (xkb keysym XF86Launch9) + +# evdev 189 (0xbd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 190 (0xbe): no evdev -> QKeyCode mapping (xkb keysym XF86AudioMicMute) + +# evdev 191 (0xbf): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadToggle) + +# evdev 192 (0xc0): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOn) + +# evdev 193 (0xc1): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOff) + +# evdev 194 (0xc2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 195 (0xc3): no evdev -> QKeyCode mapping (xkb keysym Mode_switch) + +# evdev 196 (0xc4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 197 (0xc5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 198 (0xc6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 199 (0xc7): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 200 (0xc8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 201 (0xc9): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPause) + +# evdev 202 (0xca): no evdev -> QKeyCode mapping (xkb keysym XF86Launch3) + +# evdev 203 (0xcb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch4) + +# evdev 204 (0xcc): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchB) + +# evdev 205 (0xcd): no evdev -> QKeyCode mapping (xkb keysym XF86Suspend) + +# evdev 206 (0xce): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 207 (0xcf): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 208 (0xd0): no evdev -> QKeyCode mapping (xkb keysym XF86AudioForward) + +# evdev 209 (0xd1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 210 (0xd2): no evdev -> QKeyCode mapping (xkb keysym Print) + +# evdev 211 (0xd3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 212 (0xd4): no evdev -> QKeyCode mapping (xkb keysym XF86WebCam) + +# evdev 213 (0xd5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 214 (0xd6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 215 (0xd7): no evdev -> QKeyCode mapping (xkb keysym XF86Mail) + +# evdev 216 (0xd8): no evdev -> QKeyCode mapping (xkb keysym XF86Messenger) + +# evdev 217 (0xd9): no evdev -> QKeyCode mapping (xkb keysym XF86Search) + +# evdev 218 (0xda): no evdev -> QKeyCode mapping (xkb keysym XF86Go) + +# evdev 219 (0xdb): no evdev -> QKeyCode mapping (xkb keysym XF86Finance) + +# evdev 220 (0xdc): no evdev -> QKeyCode mapping (xkb keysym XF86Game) + +# evdev 221 (0xdd): no evdev -> QKeyCode mapping (xkb keysym XF86Shop) + +# evdev 222 (0xde): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 223 (0xdf): no evdev -> QKeyCode mapping (xkb keysym Cancel) + +# evdev 224 (0xe0): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessDown) + +# evdev 225 (0xe1): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessUp) + +# evdev 226 (0xe2), QKeyCode "mediaselect", number 0xed +XF86AudioMedia 0xed + +# evdev 227 (0xe3): no evdev -> QKeyCode mapping (xkb keysym XF86Display) + +# evdev 228 (0xe4): no evdev -> QKeyCode mapping (xkb keysym XF86KbdLightOnOff) + +# evdev 229 (0xe5): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessDown) + +# evdev 230 (0xe6): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessUp) + +# evdev 231 (0xe7): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 232 (0xe8): no evdev -> QKeyCode mapping (xkb keysym XF86Reply) + +# evdev 233 (0xe9): no evdev -> QKeyCode mapping (xkb keysym XF86MailForward) + +# evdev 234 (0xea): no evdev -> QKeyCode mapping (xkb keysym XF86Save) + +# evdev 235 (0xeb): no evdev -> QKeyCode mapping (xkb keysym XF86Documents) + +# evdev 236 (0xec): no evdev -> QKeyCode mapping (xkb keysym XF86Battery) + +# evdev 237 (0xed): no evdev -> QKeyCode mapping (xkb keysym XF86Bluetooth) + +# evdev 238 (0xee): no evdev -> QKeyCode mapping (xkb keysym XF86WLAN) + +# evdev 239 (0xef): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 240 (0xf0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 241 (0xf1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 242 (0xf2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 243 (0xf3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 244 (0xf4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# +# quirks section start +# +# Sometimes multiple keysyms map to the same keycodes. +# The keycode -> keysym lookup finds only one of the +# keysyms. So append them here. +# + +Print 0x54 +Sys_Req 0x54 +Execute 0x54 +KP_Decimal 0x53 numlock +KP_Separator 0x53 numlock +Alt_R 0xb8 +ISO_Level3_Shift 0xb8 +Mode_switch 0xb8 + +# quirks section end diff --git a/app/src/main/assets/roms/keymaps/ja b/app/src/main/assets/roms/keymaps/ja new file mode 100644 index 0000000..aae93e8 --- /dev/null +++ b/app/src/main/assets/roms/keymaps/ja @@ -0,0 +1,751 @@ +# +# generated by qemu-keymap +# model : jp106 +# layout : jp +# variant : - +# options : - + +# name: "Japanese" + +# modifiers +# 0: Shift +# 1: Lock +# 2: Control +# 3: Mod1 +# 4: Mod2 +# 5: Mod3 +# 6: Mod4 +# 7: Mod5 +# 8: NumLock +# 9: Alt +# 10: LevelThree +# 11: LAlt +# 12: RAlt +# 13: RControl +# 14: LControl +# 15: ScrollLock +# 16: LevelFive +# 17: AltGr +# 18: Meta +# 19: Super +# 20: Hyper + +# evdev 1 (0x1), QKeyCode "esc", number 0x1 +Escape 0x01 + +# evdev 2 (0x2), QKeyCode "1", number 0x2 +1 0x02 +exclam 0x02 shift + +# evdev 3 (0x3), QKeyCode "2", number 0x3 +2 0x03 +quotedbl 0x03 shift + +# evdev 4 (0x4), QKeyCode "3", number 0x4 +3 0x04 +numbersign 0x04 shift + +# evdev 5 (0x5), QKeyCode "4", number 0x5 +4 0x05 +dollar 0x05 shift + +# evdev 6 (0x6), QKeyCode "5", number 0x6 +5 0x06 +percent 0x06 shift + +# evdev 7 (0x7), QKeyCode "6", number 0x7 +6 0x07 +ampersand 0x07 shift + +# evdev 8 (0x8), QKeyCode "7", number 0x8 +7 0x08 +apostrophe 0x08 shift + +# evdev 9 (0x9), QKeyCode "8", number 0x9 +8 0x09 +parenleft 0x09 shift + +# evdev 10 (0xa), QKeyCode "9", number 0xa +9 0x0a +parenright 0x0a shift + +# evdev 11 (0xb), QKeyCode "0", number 0xb +0 0x0b +asciitilde 0x0b shift + +# evdev 12 (0xc), QKeyCode "minus", number 0xc +minus 0x0c +equal 0x0c shift + +# evdev 13 (0xd), QKeyCode "equal", number 0xd +asciicircum 0x0d +asciitilde 0x0d shift + +# evdev 14 (0xe), QKeyCode "backspace", number 0xe +BackSpace 0x0e + +# evdev 15 (0xf), QKeyCode "tab", number 0xf +Tab 0x0f +ISO_Left_Tab 0x0f shift + +# evdev 16 (0x10), QKeyCode "q", number 0x10 +q 0x10 +Q 0x10 shift + +# evdev 17 (0x11), QKeyCode "w", number 0x11 +w 0x11 +W 0x11 shift + +# evdev 18 (0x12), QKeyCode "e", number 0x12 +e 0x12 +E 0x12 shift + +# evdev 19 (0x13), QKeyCode "r", number 0x13 +r 0x13 +R 0x13 shift + +# evdev 20 (0x14), QKeyCode "t", number 0x14 +t 0x14 +T 0x14 shift + +# evdev 21 (0x15), QKeyCode "y", number 0x15 +y 0x15 +Y 0x15 shift + +# evdev 22 (0x16), QKeyCode "u", number 0x16 +u 0x16 +U 0x16 shift + +# evdev 23 (0x17), QKeyCode "i", number 0x17 +i 0x17 +I 0x17 shift + +# evdev 24 (0x18), QKeyCode "o", number 0x18 +o 0x18 +O 0x18 shift + +# evdev 25 (0x19), QKeyCode "p", number 0x19 +p 0x19 +P 0x19 shift + +# evdev 26 (0x1a), QKeyCode "bracket_left", number 0x1a +at 0x1a +grave 0x1a shift + +# evdev 27 (0x1b), QKeyCode "bracket_right", number 0x1b +bracketleft 0x1b +braceleft 0x1b shift + +# evdev 28 (0x1c), QKeyCode "ret", number 0x1c +Return 0x1c + +# evdev 29 (0x1d), QKeyCode "ctrl", number 0x1d +Control_L 0x1d + +# evdev 30 (0x1e), QKeyCode "a", number 0x1e +a 0x1e +A 0x1e shift + +# evdev 31 (0x1f), QKeyCode "s", number 0x1f +s 0x1f +S 0x1f shift + +# evdev 32 (0x20), QKeyCode "d", number 0x20 +d 0x20 +D 0x20 shift + +# evdev 33 (0x21), QKeyCode "f", number 0x21 +f 0x21 +F 0x21 shift + +# evdev 34 (0x22), QKeyCode "g", number 0x22 +g 0x22 +G 0x22 shift + +# evdev 35 (0x23), QKeyCode "h", number 0x23 +h 0x23 +H 0x23 shift + +# evdev 36 (0x24), QKeyCode "j", number 0x24 +j 0x24 +J 0x24 shift + +# evdev 37 (0x25), QKeyCode "k", number 0x25 +k 0x25 +K 0x25 shift + +# evdev 38 (0x26), QKeyCode "l", number 0x26 +l 0x26 +L 0x26 shift + +# evdev 39 (0x27), QKeyCode "semicolon", number 0x27 +semicolon 0x27 +plus 0x27 shift + +# evdev 40 (0x28), QKeyCode "apostrophe", number 0x28 +colon 0x28 +asterisk 0x28 shift + +# evdev 41 (0x29), QKeyCode "grave_accent", number 0x29 +Zenkaku_Hankaku 0x29 + +# evdev 42 (0x2a), QKeyCode "shift", number 0x2a +Shift_L 0x2a + +# evdev 43 (0x2b), QKeyCode "backslash", number 0x2b +bracketright 0x2b +braceright 0x2b shift + +# evdev 44 (0x2c), QKeyCode "z", number 0x2c +z 0x2c +Z 0x2c shift + +# evdev 45 (0x2d), QKeyCode "x", number 0x2d +x 0x2d +X 0x2d shift + +# evdev 46 (0x2e), QKeyCode "c", number 0x2e +c 0x2e +C 0x2e shift + +# evdev 47 (0x2f), QKeyCode "v", number 0x2f +v 0x2f +V 0x2f shift + +# evdev 48 (0x30), QKeyCode "b", number 0x30 +b 0x30 +B 0x30 shift + +# evdev 49 (0x31), QKeyCode "n", number 0x31 +n 0x31 +N 0x31 shift + +# evdev 50 (0x32), QKeyCode "m", number 0x32 +m 0x32 +M 0x32 shift + +# evdev 51 (0x33), QKeyCode "comma", number 0x33 +comma 0x33 +less 0x33 shift + +# evdev 52 (0x34), QKeyCode "dot", number 0x34 +period 0x34 +greater 0x34 shift + +# evdev 53 (0x35), QKeyCode "slash", number 0x35 +slash 0x35 +question 0x35 shift + +# evdev 54 (0x36), QKeyCode "shift_r", number 0x36 +Shift_R 0x36 + +# evdev 55 (0x37), QKeyCode "kp_multiply", number 0x37 +KP_Multiply 0x37 + +# evdev 56 (0x38), QKeyCode "alt", number 0x38 +Alt_L 0x38 +Meta_L 0x38 shift + +# evdev 57 (0x39), QKeyCode "spc", number 0x39 +space 0x39 + +# evdev 58 (0x3a), QKeyCode "caps_lock", number 0x3a +Eisu_toggle 0x3a +Caps_Lock 0x3a shift + +# evdev 59 (0x3b), QKeyCode "f1", number 0x3b +F1 0x3b + +# evdev 60 (0x3c), QKeyCode "f2", number 0x3c +F2 0x3c + +# evdev 61 (0x3d), QKeyCode "f3", number 0x3d +F3 0x3d + +# evdev 62 (0x3e), QKeyCode "f4", number 0x3e +F4 0x3e + +# evdev 63 (0x3f), QKeyCode "f5", number 0x3f +F5 0x3f + +# evdev 64 (0x40), QKeyCode "f6", number 0x40 +F6 0x40 + +# evdev 65 (0x41), QKeyCode "f7", number 0x41 +F7 0x41 + +# evdev 66 (0x42), QKeyCode "f8", number 0x42 +F8 0x42 + +# evdev 67 (0x43), QKeyCode "f9", number 0x43 +F9 0x43 + +# evdev 68 (0x44), QKeyCode "f10", number 0x44 +F10 0x44 + +# evdev 69 (0x45), QKeyCode "num_lock", number 0x45 +Num_Lock 0x45 + +# evdev 70 (0x46), QKeyCode "scroll_lock", number 0x46 +Scroll_Lock 0x46 + +# evdev 71 (0x47), QKeyCode "kp_7", number 0x47 +KP_Home 0x47 +KP_7 0x47 numlock + +# evdev 72 (0x48), QKeyCode "kp_8", number 0x48 +KP_Up 0x48 +KP_8 0x48 numlock + +# evdev 73 (0x49), QKeyCode "kp_9", number 0x49 +KP_Prior 0x49 +KP_9 0x49 numlock + +# evdev 74 (0x4a), QKeyCode "kp_subtract", number 0x4a +KP_Subtract 0x4a + +# evdev 75 (0x4b), QKeyCode "kp_4", number 0x4b +KP_Left 0x4b +KP_4 0x4b numlock + +# evdev 76 (0x4c), QKeyCode "kp_5", number 0x4c +KP_Begin 0x4c +KP_5 0x4c numlock + +# evdev 77 (0x4d), QKeyCode "kp_6", number 0x4d +KP_Right 0x4d +KP_6 0x4d numlock + +# evdev 78 (0x4e), QKeyCode "kp_add", number 0x4e +KP_Add 0x4e + +# evdev 79 (0x4f), QKeyCode "kp_1", number 0x4f +KP_End 0x4f +KP_1 0x4f numlock + +# evdev 80 (0x50), QKeyCode "kp_2", number 0x50 +KP_Down 0x50 +KP_2 0x50 numlock + +# evdev 81 (0x51), QKeyCode "kp_3", number 0x51 +KP_Next 0x51 +KP_3 0x51 numlock + +# evdev 82 (0x52), QKeyCode "kp_0", number 0x52 +KP_Insert 0x52 +KP_0 0x52 numlock + +# evdev 83 (0x53), QKeyCode "kp_decimal", number 0x53 +KP_Delete 0x53 +KP_Decimal 0x53 numlock + +# evdev 84 (0x54): no evdev -> QKeyCode mapping (xkb keysym ISO_Level3_Shift) + +# evdev 85 (0x55): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 86 (0x56), QKeyCode "less", number 0x56 +less 0x56 +greater 0x56 shift +bar 0x56 altgr +brokenbar 0x56 shift altgr + +# evdev 87 (0x57), QKeyCode "f11", number 0x57 +F11 0x57 + +# evdev 88 (0x58), QKeyCode "f12", number 0x58 +F12 0x58 + +# evdev 89 (0x59), QKeyCode "ro", number 0x73 +backslash 0x73 +underscore 0x73 shift + +# evdev 90 (0x5a): no evdev -> QKeyCode mapping (xkb keysym Katakana) + +# evdev 91 (0x5b), QKeyCode "hiragana", number 0x77 +Hiragana 0x77 + +# evdev 92 (0x5c), QKeyCode "henkan", number 0x79 +Henkan_Mode 0x79 + +# evdev 93 (0x5d): no evdev -> QKeyCode mapping (xkb keysym Hiragana_Katakana) + +# evdev 94 (0x5e): no evdev -> QKeyCode mapping (xkb keysym Muhenkan) + +# evdev 95 (0x5f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 96 (0x60), QKeyCode "kp_enter", number 0x9c +KP_Enter 0x9c + +# evdev 97 (0x61), QKeyCode "ctrl_r", number 0x9d +Control_R 0x9d + +# evdev 98 (0x62), QKeyCode "kp_divide", number 0xb5 +KP_Divide 0xb5 + +# evdev 99 (0x63), QKeyCode "sysrq", number 0x54 +Print 0x54 + +# evdev 100 (0x64), QKeyCode "alt_r", number 0xb8 +Alt_R 0xb8 +Meta_R 0xb8 shift + +# evdev 101 (0x65), QKeyCode "lf", number 0x5b +Linefeed 0x5b + +# evdev 102 (0x66), QKeyCode "home", number 0xc7 +Home 0xc7 + +# evdev 103 (0x67), QKeyCode "up", number 0xc8 +Up 0xc8 + +# evdev 104 (0x68), QKeyCode "pgup", number 0xc9 +Prior 0xc9 + +# evdev 105 (0x69), QKeyCode "left", number 0xcb +Left 0xcb + +# evdev 106 (0x6a), QKeyCode "right", number 0xcd +Right 0xcd + +# evdev 107 (0x6b), QKeyCode "end", number 0xcf +End 0xcf + +# evdev 108 (0x6c), QKeyCode "down", number 0xd0 +Down 0xd0 + +# evdev 109 (0x6d), QKeyCode "pgdn", number 0xd1 +Next 0xd1 + +# evdev 110 (0x6e), QKeyCode "insert", number 0xd2 +Insert 0xd2 + +# evdev 111 (0x6f), QKeyCode "delete", number 0xd3 +Delete 0xd3 + +# evdev 112 (0x70): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 113 (0x71), QKeyCode "audiomute", number 0xa0 +XF86AudioMute 0xa0 + +# evdev 114 (0x72), QKeyCode "volumedown", number 0xae +XF86AudioLowerVolume 0xae + +# evdev 115 (0x73), QKeyCode "volumeup", number 0xb0 +XF86AudioRaiseVolume 0xb0 + +# evdev 116 (0x74), QKeyCode "power", number 0xde +XF86PowerOff 0xde + +# evdev 117 (0x75), QKeyCode "kp_equals", number 0x59 +KP_Equal 0x59 + +# evdev 118 (0x76): no evdev -> QKeyCode mapping (xkb keysym plusminus) + +# evdev 119 (0x77), QKeyCode "pause", number 0xc6 +Pause 0xc6 + +# evdev 120 (0x78): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchA) + +# evdev 121 (0x79), QKeyCode "kp_comma", number 0x7e +KP_Decimal 0x7e + +# evdev 122 (0x7a): no evdev -> QKeyCode mapping (xkb keysym Hangul) + +# evdev 123 (0x7b): no evdev -> QKeyCode mapping (xkb keysym Hangul_Hanja) + +# evdev 124 (0x7c), QKeyCode "yen", number 0x7d +backslash 0x7d +bar 0x7d shift + +# evdev 125 (0x7d), QKeyCode "meta_l", number 0xdb +Super_L 0xdb + +# evdev 126 (0x7e), QKeyCode "meta_r", number 0xdc +Super_R 0xdc + +# evdev 127 (0x7f), QKeyCode "compose", number 0xdd +Menu 0xdd + +# evdev 128 (0x80), QKeyCode "stop", number 0xe8 +Cancel 0xe8 + +# evdev 129 (0x81), QKeyCode "again", number 0x85 +Redo 0x85 + +# evdev 130 (0x82), QKeyCode "props", number 0x86 +SunProps 0x86 + +# evdev 131 (0x83), QKeyCode "undo", number 0x87 +Undo 0x87 + +# evdev 132 (0x84), QKeyCode "front", number 0x8c +SunFront 0x8c + +# evdev 133 (0x85), QKeyCode "copy", number 0xf8 +XF86Copy 0xf8 + +# evdev 134 (0x86), QKeyCode "open", number 0x64 +XF86Open 0x64 + +# evdev 135 (0x87), QKeyCode "paste", number 0x65 +XF86Paste 0x65 + +# evdev 136 (0x88), QKeyCode "find", number 0xc1 +Find 0xc1 + +# evdev 137 (0x89), QKeyCode "cut", number 0xbc +XF86Cut 0xbc + +# evdev 138 (0x8a), QKeyCode "help", number 0xf5 +Help 0xf5 + +# evdev 139 (0x8b), QKeyCode "menu", number 0x9e +XF86MenuKB 0x9e + +# evdev 140 (0x8c), QKeyCode "calculator", number 0xa1 +XF86Calculator 0xa1 + +# evdev 141 (0x8d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 142 (0x8e), QKeyCode "sleep", number 0xdf +XF86Sleep 0xdf + +# evdev 143 (0x8f), QKeyCode "wake", number 0xe3 +XF86WakeUp 0xe3 + +# evdev 144 (0x90): no evdev -> QKeyCode mapping (xkb keysym XF86Explorer) + +# evdev 145 (0x91): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 146 (0x92): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 147 (0x93): no evdev -> QKeyCode mapping (xkb keysym XF86Xfer) + +# evdev 148 (0x94): no evdev -> QKeyCode mapping (xkb keysym XF86Launch1) + +# evdev 149 (0x95): no evdev -> QKeyCode mapping (xkb keysym XF86Launch2) + +# evdev 150 (0x96): no evdev -> QKeyCode mapping (xkb keysym XF86WWW) + +# evdev 151 (0x97): no evdev -> QKeyCode mapping (xkb keysym XF86DOS) + +# evdev 152 (0x98): no evdev -> QKeyCode mapping (xkb keysym XF86ScreenSaver) + +# evdev 153 (0x99): no evdev -> QKeyCode mapping (xkb keysym XF86RotateWindows) + +# evdev 154 (0x9a): no evdev -> QKeyCode mapping (xkb keysym XF86TaskPane) + +# evdev 155 (0x9b), QKeyCode "mail", number 0xec +XF86Mail 0xec + +# evdev 156 (0x9c), QKeyCode "ac_bookmarks", number 0xe6 +XF86Favorites 0xe6 + +# evdev 157 (0x9d), QKeyCode "computer", number 0xeb +XF86MyComputer 0xeb + +# evdev 158 (0x9e), QKeyCode "ac_back", number 0xea +XF86Back 0xea + +# evdev 159 (0x9f), QKeyCode "ac_forward", number 0xe9 +XF86Forward 0xe9 + +# evdev 160 (0xa0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 161 (0xa1): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 162 (0xa2): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 163 (0xa3), QKeyCode "audionext", number 0x99 +XF86AudioNext 0x99 + +# evdev 164 (0xa4), QKeyCode "audioplay", number 0xa2 +XF86AudioPlay 0xa2 +XF86AudioPause 0xa2 shift + +# evdev 165 (0xa5), QKeyCode "audioprev", number 0x90 +XF86AudioPrev 0x90 + +# evdev 166 (0xa6), QKeyCode "audiostop", number 0xa4 +XF86AudioStop 0xa4 +XF86Eject 0xa4 shift + +# evdev 167 (0xa7): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRecord) + +# evdev 168 (0xa8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRewind) + +# evdev 169 (0xa9): no evdev -> QKeyCode mapping (xkb keysym XF86Phone) + +# evdev 170 (0xaa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 171 (0xab): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 172 (0xac), QKeyCode "ac_home", number 0xb2 +XF86HomePage 0xb2 + +# evdev 173 (0xad), QKeyCode "ac_refresh", number 0xe7 +XF86Reload 0xe7 + +# evdev 174 (0xae): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 175 (0xaf): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 176 (0xb0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 177 (0xb1): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollUp) + +# evdev 178 (0xb2): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollDown) + +# evdev 179 (0xb3): no evdev -> QKeyCode mapping (xkb keysym parenleft) + +# evdev 180 (0xb4): no evdev -> QKeyCode mapping (xkb keysym parenright) + +# evdev 181 (0xb5): no evdev -> QKeyCode mapping (xkb keysym XF86New) + +# evdev 182 (0xb6): no evdev -> QKeyCode mapping (xkb keysym Redo) + +# evdev 183 (0xb7): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 184 (0xb8): no evdev -> QKeyCode mapping (xkb keysym XF86Launch5) + +# evdev 185 (0xb9): no evdev -> QKeyCode mapping (xkb keysym XF86Launch6) + +# evdev 186 (0xba): no evdev -> QKeyCode mapping (xkb keysym XF86Launch7) + +# evdev 187 (0xbb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch8) + +# evdev 188 (0xbc): no evdev -> QKeyCode mapping (xkb keysym XF86Launch9) + +# evdev 189 (0xbd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 190 (0xbe): no evdev -> QKeyCode mapping (xkb keysym XF86AudioMicMute) + +# evdev 191 (0xbf): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadToggle) + +# evdev 192 (0xc0): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOn) + +# evdev 193 (0xc1): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOff) + +# evdev 194 (0xc2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 195 (0xc3): no evdev -> QKeyCode mapping (xkb keysym Mode_switch) + +# evdev 196 (0xc4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 197 (0xc5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 198 (0xc6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 199 (0xc7): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 200 (0xc8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 201 (0xc9): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPause) + +# evdev 202 (0xca): no evdev -> QKeyCode mapping (xkb keysym XF86Launch3) + +# evdev 203 (0xcb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch4) + +# evdev 204 (0xcc): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchB) + +# evdev 205 (0xcd): no evdev -> QKeyCode mapping (xkb keysym XF86Suspend) + +# evdev 206 (0xce): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 207 (0xcf): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 208 (0xd0): no evdev -> QKeyCode mapping (xkb keysym XF86AudioForward) + +# evdev 209 (0xd1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 210 (0xd2): no evdev -> QKeyCode mapping (xkb keysym Print) + +# evdev 211 (0xd3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 212 (0xd4): no evdev -> QKeyCode mapping (xkb keysym XF86WebCam) + +# evdev 213 (0xd5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 214 (0xd6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 215 (0xd7): no evdev -> QKeyCode mapping (xkb keysym XF86Mail) + +# evdev 216 (0xd8): no evdev -> QKeyCode mapping (xkb keysym XF86Messenger) + +# evdev 217 (0xd9): no evdev -> QKeyCode mapping (xkb keysym XF86Search) + +# evdev 218 (0xda): no evdev -> QKeyCode mapping (xkb keysym XF86Go) + +# evdev 219 (0xdb): no evdev -> QKeyCode mapping (xkb keysym XF86Finance) + +# evdev 220 (0xdc): no evdev -> QKeyCode mapping (xkb keysym XF86Game) + +# evdev 221 (0xdd): no evdev -> QKeyCode mapping (xkb keysym XF86Shop) + +# evdev 222 (0xde): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 223 (0xdf): no evdev -> QKeyCode mapping (xkb keysym Cancel) + +# evdev 224 (0xe0): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessDown) + +# evdev 225 (0xe1): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessUp) + +# evdev 226 (0xe2), QKeyCode "mediaselect", number 0xed +XF86AudioMedia 0xed + +# evdev 227 (0xe3): no evdev -> QKeyCode mapping (xkb keysym XF86Display) + +# evdev 228 (0xe4): no evdev -> QKeyCode mapping (xkb keysym XF86KbdLightOnOff) + +# evdev 229 (0xe5): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessDown) + +# evdev 230 (0xe6): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessUp) + +# evdev 231 (0xe7): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 232 (0xe8): no evdev -> QKeyCode mapping (xkb keysym XF86Reply) + +# evdev 233 (0xe9): no evdev -> QKeyCode mapping (xkb keysym XF86MailForward) + +# evdev 234 (0xea): no evdev -> QKeyCode mapping (xkb keysym XF86Save) + +# evdev 235 (0xeb): no evdev -> QKeyCode mapping (xkb keysym XF86Documents) + +# evdev 236 (0xec): no evdev -> QKeyCode mapping (xkb keysym XF86Battery) + +# evdev 237 (0xed): no evdev -> QKeyCode mapping (xkb keysym XF86Bluetooth) + +# evdev 238 (0xee): no evdev -> QKeyCode mapping (xkb keysym XF86WLAN) + +# evdev 239 (0xef): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 240 (0xf0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 241 (0xf1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 242 (0xf2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 243 (0xf3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 244 (0xf4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# +# quirks section start +# +# Sometimes multiple keysyms map to the same keycodes. +# The keycode -> keysym lookup finds only one of the +# keysyms. So append them here. +# + +Print 0x54 +Sys_Req 0x54 +Execute 0x54 +KP_Decimal 0x53 numlock +KP_Separator 0x53 numlock +Alt_R 0xb8 +ISO_Level3_Shift 0xb8 +Mode_switch 0xb8 + +# quirks section end diff --git a/app/src/main/assets/roms/keymaps/lt b/app/src/main/assets/roms/keymaps/lt new file mode 100644 index 0000000..4101367 --- /dev/null +++ b/app/src/main/assets/roms/keymaps/lt @@ -0,0 +1,835 @@ +# +# generated by qemu-keymap +# model : pc105 +# layout : lt +# variant : - +# options : - + +# name: "Lithuanian" + +# modifiers +# 0: Shift +# 1: Lock +# 2: Control +# 3: Mod1 +# 4: Mod2 +# 5: Mod3 +# 6: Mod4 +# 7: Mod5 +# 8: NumLock +# 9: Alt +# 10: LevelThree +# 11: LAlt +# 12: RAlt +# 13: RControl +# 14: LControl +# 15: ScrollLock +# 16: LevelFive +# 17: AltGr +# 18: Meta +# 19: Super +# 20: Hyper + +# evdev 1 (0x1), QKeyCode "esc", number 0x1 +Escape 0x01 + +# evdev 2 (0x2), QKeyCode "1", number 0x2 +aogonek 0x02 +Aogonek 0x02 shift +1 0x02 altgr +exclam 0x02 shift altgr + +# evdev 3 (0x3), QKeyCode "2", number 0x3 +ccaron 0x03 +Ccaron 0x03 shift +2 0x03 altgr +at 0x03 shift altgr + +# evdev 4 (0x4), QKeyCode "3", number 0x4 +eogonek 0x04 +Eogonek 0x04 shift +3 0x04 altgr +numbersign 0x04 shift altgr + +# evdev 5 (0x5), QKeyCode "4", number 0x5 +eabovedot 0x05 +Eabovedot 0x05 shift +4 0x05 altgr +dollar 0x05 shift altgr + +# evdev 6 (0x6), QKeyCode "5", number 0x6 +iogonek 0x06 +Iogonek 0x06 shift +5 0x06 altgr +percent 0x06 shift altgr + +# evdev 7 (0x7), QKeyCode "6", number 0x7 +scaron 0x07 +Scaron 0x07 shift +6 0x07 altgr +asciicircum 0x07 shift altgr + +# evdev 8 (0x8), QKeyCode "7", number 0x8 +uogonek 0x08 +Uogonek 0x08 shift +7 0x08 altgr +ampersand 0x08 shift altgr + +# evdev 9 (0x9), QKeyCode "8", number 0x9 +umacron 0x09 +Umacron 0x09 shift +8 0x09 altgr +asterisk 0x09 shift altgr + +# evdev 10 (0xa), QKeyCode "9", number 0xa +doublelowquotemark 0x0a +parenleft 0x0a shift +9 0x0a altgr + +# evdev 11 (0xb), QKeyCode "0", number 0xb +leftdoublequotemark 0x0b +parenright 0x0b shift +0 0x0b altgr + +# evdev 12 (0xc), QKeyCode "minus", number 0xc +minus 0x0c +underscore 0x0c shift +endash 0x0c altgr +questiondown 0x0c shift altgr + +# evdev 13 (0xd), QKeyCode "equal", number 0xd +zcaron 0x0d +Zcaron 0x0d shift +equal 0x0d altgr +plus 0x0d shift altgr + +# evdev 14 (0xe), QKeyCode "backspace", number 0xe +BackSpace 0x0e + +# evdev 15 (0xf), QKeyCode "tab", number 0xf +Tab 0x0f +ISO_Left_Tab 0x0f shift + +# evdev 16 (0x10), QKeyCode "q", number 0x10 +q 0x10 +Q 0x10 shift +at 0x10 altgr +Greek_OMEGA 0x10 shift altgr + +# evdev 17 (0x11), QKeyCode "w", number 0x11 +w 0x11 +W 0x11 shift +lstroke 0x11 altgr +Lstroke 0x11 shift altgr + +# evdev 18 (0x12), QKeyCode "e", number 0x12 +e 0x12 +E 0x12 shift +EuroSign 0x12 altgr + +# evdev 19 (0x13), QKeyCode "r", number 0x13 +r 0x13 +R 0x13 shift +paragraph 0x13 altgr +registered 0x13 shift altgr + +# evdev 20 (0x14), QKeyCode "t", number 0x14 +t 0x14 +T 0x14 shift +tslash 0x14 altgr +Tslash 0x14 shift altgr + +# evdev 21 (0x15), QKeyCode "y", number 0x15 +y 0x15 +Y 0x15 shift +leftarrow 0x15 altgr +yen 0x15 shift altgr + +# evdev 22 (0x16), QKeyCode "u", number 0x16 +u 0x16 +U 0x16 shift +downarrow 0x16 altgr +uparrow 0x16 shift altgr + +# evdev 23 (0x17), QKeyCode "i", number 0x17 +i 0x17 +I 0x17 shift +rightarrow 0x17 altgr +idotless 0x17 shift altgr + +# evdev 24 (0x18), QKeyCode "o", number 0x18 +o 0x18 +O 0x18 shift +oslash 0x18 altgr +Oslash 0x18 shift altgr + +# evdev 25 (0x19), QKeyCode "p", number 0x19 +p 0x19 +P 0x19 shift +thorn 0x19 altgr +THORN 0x19 shift altgr + +# evdev 26 (0x1a), QKeyCode "bracket_left", number 0x1a +bracketleft 0x1a +braceleft 0x1a shift +dead_diaeresis 0x1a altgr +dead_abovering 0x1a shift altgr + +# evdev 27 (0x1b), QKeyCode "bracket_right", number 0x1b +bracketright 0x1b +braceright 0x1b shift +dead_tilde 0x1b altgr +dead_macron 0x1b shift altgr + +# evdev 28 (0x1c), QKeyCode "ret", number 0x1c +Return 0x1c + +# evdev 29 (0x1d), QKeyCode "ctrl", number 0x1d +Control_L 0x1d + +# evdev 30 (0x1e), QKeyCode "a", number 0x1e +a 0x1e +A 0x1e shift +ae 0x1e altgr +AE 0x1e shift altgr + +# evdev 31 (0x1f), QKeyCode "s", number 0x1f +s 0x1f +S 0x1f shift +ssharp 0x1f altgr +section 0x1f shift altgr + +# evdev 32 (0x20), QKeyCode "d", number 0x20 +d 0x20 +D 0x20 shift +eth 0x20 altgr +ETH 0x20 shift altgr + +# evdev 33 (0x21), QKeyCode "f", number 0x21 +f 0x21 +F 0x21 shift +dstroke 0x21 altgr +ordfeminine 0x21 shift altgr + +# evdev 34 (0x22), QKeyCode "g", number 0x22 +g 0x22 +G 0x22 shift +eng 0x22 altgr +ENG 0x22 shift altgr + +# evdev 35 (0x23), QKeyCode "h", number 0x23 +h 0x23 +H 0x23 shift +hstroke 0x23 altgr +Hstroke 0x23 shift altgr + +# evdev 36 (0x24), QKeyCode "j", number 0x24 +j 0x24 +J 0x24 shift +dead_hook 0x24 altgr +dead_horn 0x24 shift altgr + +# evdev 37 (0x25), QKeyCode "k", number 0x25 +k 0x25 +K 0x25 shift +kra 0x25 altgr +ampersand 0x25 shift altgr + +# evdev 38 (0x26), QKeyCode "l", number 0x26 +l 0x26 +L 0x26 shift +lstroke 0x26 altgr +Lstroke 0x26 shift altgr + +# evdev 39 (0x27), QKeyCode "semicolon", number 0x27 +semicolon 0x27 +colon 0x27 shift +dead_acute 0x27 altgr +dead_doubleacute 0x27 shift altgr + +# evdev 40 (0x28), QKeyCode "apostrophe", number 0x28 +apostrophe 0x28 +quotedbl 0x28 shift +dead_circumflex 0x28 altgr +dead_caron 0x28 shift altgr + +# evdev 41 (0x29), QKeyCode "grave_accent", number 0x29 +grave 0x29 +asciitilde 0x29 shift +acute 0x29 altgr +notsign 0x29 shift altgr + +# evdev 42 (0x2a), QKeyCode "shift", number 0x2a +Shift_L 0x2a + +# evdev 43 (0x2b), QKeyCode "backslash", number 0x2b +backslash 0x2b +bar 0x2b shift +dead_grave 0x2b altgr +dead_breve 0x2b shift altgr + +# evdev 44 (0x2c), QKeyCode "z", number 0x2c +z 0x2c +Z 0x2c shift +guillemotleft 0x2c altgr +less 0x2c shift altgr + +# evdev 45 (0x2d), QKeyCode "x", number 0x2d +x 0x2d +X 0x2d shift +guillemotright 0x2d altgr +greater 0x2d shift altgr + +# evdev 46 (0x2e), QKeyCode "c", number 0x2e +c 0x2e +C 0x2e shift +cent 0x2e altgr +copyright 0x2e shift altgr + +# evdev 47 (0x2f), QKeyCode "v", number 0x2f +v 0x2f +V 0x2f shift +leftdoublequotemark 0x2f altgr +leftsinglequotemark 0x2f shift altgr + +# evdev 48 (0x30), QKeyCode "b", number 0x30 +b 0x30 +B 0x30 shift +rightdoublequotemark 0x30 altgr +rightsinglequotemark 0x30 shift altgr + +# evdev 49 (0x31), QKeyCode "n", number 0x31 +n 0x31 +N 0x31 shift + +# evdev 50 (0x32), QKeyCode "m", number 0x32 +m 0x32 +M 0x32 shift +mu 0x32 altgr +masculine 0x32 shift altgr + +# evdev 51 (0x33), QKeyCode "comma", number 0x33 +comma 0x33 +less 0x33 shift +horizconnector 0x33 altgr +multiply 0x33 shift altgr + +# evdev 52 (0x34), QKeyCode "dot", number 0x34 +period 0x34 +greater 0x34 shift +periodcentered 0x34 altgr +division 0x34 shift altgr + +# evdev 53 (0x35), QKeyCode "slash", number 0x35 +slash 0x35 +question 0x35 shift +dead_belowdot 0x35 altgr +dead_abovedot 0x35 shift altgr + +# evdev 54 (0x36), QKeyCode "shift_r", number 0x36 +Shift_R 0x36 + +# evdev 55 (0x37), QKeyCode "kp_multiply", number 0x37 +KP_Multiply 0x37 + +# evdev 56 (0x38), QKeyCode "alt", number 0x38 +Alt_L 0x38 +Meta_L 0x38 shift + +# evdev 57 (0x39), QKeyCode "spc", number 0x39 +space 0x39 + +# evdev 58 (0x3a), QKeyCode "caps_lock", number 0x3a +Caps_Lock 0x3a + +# evdev 59 (0x3b), QKeyCode "f1", number 0x3b +F1 0x3b + +# evdev 60 (0x3c), QKeyCode "f2", number 0x3c +F2 0x3c + +# evdev 61 (0x3d), QKeyCode "f3", number 0x3d +F3 0x3d + +# evdev 62 (0x3e), QKeyCode "f4", number 0x3e +F4 0x3e + +# evdev 63 (0x3f), QKeyCode "f5", number 0x3f +F5 0x3f + +# evdev 64 (0x40), QKeyCode "f6", number 0x40 +F6 0x40 + +# evdev 65 (0x41), QKeyCode "f7", number 0x41 +F7 0x41 + +# evdev 66 (0x42), QKeyCode "f8", number 0x42 +F8 0x42 + +# evdev 67 (0x43), QKeyCode "f9", number 0x43 +F9 0x43 + +# evdev 68 (0x44), QKeyCode "f10", number 0x44 +F10 0x44 + +# evdev 69 (0x45), QKeyCode "num_lock", number 0x45 +Num_Lock 0x45 + +# evdev 70 (0x46), QKeyCode "scroll_lock", number 0x46 +Scroll_Lock 0x46 + +# evdev 71 (0x47), QKeyCode "kp_7", number 0x47 +KP_Home 0x47 +KP_7 0x47 numlock + +# evdev 72 (0x48), QKeyCode "kp_8", number 0x48 +KP_Up 0x48 +KP_8 0x48 numlock + +# evdev 73 (0x49), QKeyCode "kp_9", number 0x49 +KP_Prior 0x49 +KP_9 0x49 numlock + +# evdev 74 (0x4a), QKeyCode "kp_subtract", number 0x4a +KP_Subtract 0x4a + +# evdev 75 (0x4b), QKeyCode "kp_4", number 0x4b +KP_Left 0x4b +KP_4 0x4b numlock + +# evdev 76 (0x4c), QKeyCode "kp_5", number 0x4c +KP_Begin 0x4c +KP_5 0x4c numlock + +# evdev 77 (0x4d), QKeyCode "kp_6", number 0x4d +KP_Right 0x4d +KP_6 0x4d numlock + +# evdev 78 (0x4e), QKeyCode "kp_add", number 0x4e +KP_Add 0x4e + +# evdev 79 (0x4f), QKeyCode "kp_1", number 0x4f +KP_End 0x4f +KP_1 0x4f numlock + +# evdev 80 (0x50), QKeyCode "kp_2", number 0x50 +KP_Down 0x50 +KP_2 0x50 numlock + +# evdev 81 (0x51), QKeyCode "kp_3", number 0x51 +KP_Next 0x51 +KP_3 0x51 numlock + +# evdev 82 (0x52), QKeyCode "kp_0", number 0x52 +KP_Insert 0x52 +KP_0 0x52 numlock + +# evdev 83 (0x53), QKeyCode "kp_decimal", number 0x53 +KP_Delete 0x53 +KP_Decimal 0x53 numlock + +# evdev 84 (0x54): no evdev -> QKeyCode mapping (xkb keysym ISO_Level3_Shift) + +# evdev 85 (0x55): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 86 (0x56), QKeyCode "less", number 0x56 +endash 0x56 +EuroSign 0x56 shift +bar 0x56 altgr +brokenbar 0x56 shift altgr + +# evdev 87 (0x57), QKeyCode "f11", number 0x57 +F11 0x57 + +# evdev 88 (0x58), QKeyCode "f12", number 0x58 +F12 0x58 + +# evdev 89 (0x59), QKeyCode "ro", number 0x73 + +# evdev 90 (0x5a): no evdev -> QKeyCode mapping (xkb keysym Katakana) + +# evdev 91 (0x5b), QKeyCode "hiragana", number 0x77 +Hiragana 0x77 + +# evdev 92 (0x5c), QKeyCode "henkan", number 0x79 +Henkan_Mode 0x79 + +# evdev 93 (0x5d): no evdev -> QKeyCode mapping (xkb keysym Hiragana_Katakana) + +# evdev 94 (0x5e): no evdev -> QKeyCode mapping (xkb keysym Muhenkan) + +# evdev 95 (0x5f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 96 (0x60), QKeyCode "kp_enter", number 0x9c +KP_Enter 0x9c + +# evdev 97 (0x61), QKeyCode "ctrl_r", number 0x9d +Control_R 0x9d + +# evdev 98 (0x62), QKeyCode "kp_divide", number 0xb5 +KP_Divide 0xb5 + +# evdev 99 (0x63), QKeyCode "sysrq", number 0x54 +Print 0x54 + +# evdev 100 (0x64), QKeyCode "alt_r", number 0xb8 +ISO_Level3_Shift 0xb8 + +# evdev 101 (0x65), QKeyCode "lf", number 0x5b +Linefeed 0x5b + +# evdev 102 (0x66), QKeyCode "home", number 0xc7 +Home 0xc7 + +# evdev 103 (0x67), QKeyCode "up", number 0xc8 +Up 0xc8 + +# evdev 104 (0x68), QKeyCode "pgup", number 0xc9 +Prior 0xc9 + +# evdev 105 (0x69), QKeyCode "left", number 0xcb +Left 0xcb + +# evdev 106 (0x6a), QKeyCode "right", number 0xcd +Right 0xcd + +# evdev 107 (0x6b), QKeyCode "end", number 0xcf +End 0xcf + +# evdev 108 (0x6c), QKeyCode "down", number 0xd0 +Down 0xd0 + +# evdev 109 (0x6d), QKeyCode "pgdn", number 0xd1 +Next 0xd1 + +# evdev 110 (0x6e), QKeyCode "insert", number 0xd2 +Insert 0xd2 + +# evdev 111 (0x6f), QKeyCode "delete", number 0xd3 +Delete 0xd3 + +# evdev 112 (0x70): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 113 (0x71), QKeyCode "audiomute", number 0xa0 +XF86AudioMute 0xa0 + +# evdev 114 (0x72), QKeyCode "volumedown", number 0xae +XF86AudioLowerVolume 0xae + +# evdev 115 (0x73), QKeyCode "volumeup", number 0xb0 +XF86AudioRaiseVolume 0xb0 + +# evdev 116 (0x74), QKeyCode "power", number 0xde +XF86PowerOff 0xde + +# evdev 117 (0x75), QKeyCode "kp_equals", number 0x59 +KP_Equal 0x59 + +# evdev 118 (0x76): no evdev -> QKeyCode mapping (xkb keysym plusminus) + +# evdev 119 (0x77), QKeyCode "pause", number 0xc6 +Pause 0xc6 + +# evdev 120 (0x78): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchA) + +# evdev 121 (0x79), QKeyCode "kp_comma", number 0x7e +KP_Decimal 0x7e + +# evdev 122 (0x7a): no evdev -> QKeyCode mapping (xkb keysym Hangul) + +# evdev 123 (0x7b): no evdev -> QKeyCode mapping (xkb keysym Hangul_Hanja) + +# evdev 124 (0x7c), QKeyCode "yen", number 0x7d + +# evdev 125 (0x7d), QKeyCode "meta_l", number 0xdb +Super_L 0xdb + +# evdev 126 (0x7e), QKeyCode "meta_r", number 0xdc +Super_R 0xdc + +# evdev 127 (0x7f), QKeyCode "compose", number 0xdd +Menu 0xdd + +# evdev 128 (0x80), QKeyCode "stop", number 0xe8 +Cancel 0xe8 + +# evdev 129 (0x81), QKeyCode "again", number 0x85 +Redo 0x85 + +# evdev 130 (0x82), QKeyCode "props", number 0x86 +SunProps 0x86 + +# evdev 131 (0x83), QKeyCode "undo", number 0x87 +Undo 0x87 + +# evdev 132 (0x84), QKeyCode "front", number 0x8c +SunFront 0x8c + +# evdev 133 (0x85), QKeyCode "copy", number 0xf8 +XF86Copy 0xf8 + +# evdev 134 (0x86), QKeyCode "open", number 0x64 +XF86Open 0x64 + +# evdev 135 (0x87), QKeyCode "paste", number 0x65 +XF86Paste 0x65 + +# evdev 136 (0x88), QKeyCode "find", number 0xc1 +Find 0xc1 + +# evdev 137 (0x89), QKeyCode "cut", number 0xbc +XF86Cut 0xbc + +# evdev 138 (0x8a), QKeyCode "help", number 0xf5 +Help 0xf5 + +# evdev 139 (0x8b), QKeyCode "menu", number 0x9e +XF86MenuKB 0x9e + +# evdev 140 (0x8c), QKeyCode "calculator", number 0xa1 +XF86Calculator 0xa1 + +# evdev 141 (0x8d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 142 (0x8e), QKeyCode "sleep", number 0xdf +XF86Sleep 0xdf + +# evdev 143 (0x8f), QKeyCode "wake", number 0xe3 +XF86WakeUp 0xe3 + +# evdev 144 (0x90): no evdev -> QKeyCode mapping (xkb keysym XF86Explorer) + +# evdev 145 (0x91): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 146 (0x92): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 147 (0x93): no evdev -> QKeyCode mapping (xkb keysym XF86Xfer) + +# evdev 148 (0x94): no evdev -> QKeyCode mapping (xkb keysym XF86Launch1) + +# evdev 149 (0x95): no evdev -> QKeyCode mapping (xkb keysym XF86Launch2) + +# evdev 150 (0x96): no evdev -> QKeyCode mapping (xkb keysym XF86WWW) + +# evdev 151 (0x97): no evdev -> QKeyCode mapping (xkb keysym XF86DOS) + +# evdev 152 (0x98): no evdev -> QKeyCode mapping (xkb keysym XF86ScreenSaver) + +# evdev 153 (0x99): no evdev -> QKeyCode mapping (xkb keysym XF86RotateWindows) + +# evdev 154 (0x9a): no evdev -> QKeyCode mapping (xkb keysym XF86TaskPane) + +# evdev 155 (0x9b), QKeyCode "mail", number 0xec +XF86Mail 0xec + +# evdev 156 (0x9c), QKeyCode "ac_bookmarks", number 0xe6 +XF86Favorites 0xe6 + +# evdev 157 (0x9d), QKeyCode "computer", number 0xeb +XF86MyComputer 0xeb + +# evdev 158 (0x9e), QKeyCode "ac_back", number 0xea +XF86Back 0xea + +# evdev 159 (0x9f), QKeyCode "ac_forward", number 0xe9 +XF86Forward 0xe9 + +# evdev 160 (0xa0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 161 (0xa1): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 162 (0xa2): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 163 (0xa3), QKeyCode "audionext", number 0x99 +XF86AudioNext 0x99 + +# evdev 164 (0xa4), QKeyCode "audioplay", number 0xa2 +XF86AudioPlay 0xa2 +XF86AudioPause 0xa2 shift + +# evdev 165 (0xa5), QKeyCode "audioprev", number 0x90 +XF86AudioPrev 0x90 + +# evdev 166 (0xa6), QKeyCode "audiostop", number 0xa4 +XF86AudioStop 0xa4 +XF86Eject 0xa4 shift + +# evdev 167 (0xa7): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRecord) + +# evdev 168 (0xa8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRewind) + +# evdev 169 (0xa9): no evdev -> QKeyCode mapping (xkb keysym XF86Phone) + +# evdev 170 (0xaa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 171 (0xab): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 172 (0xac), QKeyCode "ac_home", number 0xb2 +XF86HomePage 0xb2 + +# evdev 173 (0xad), QKeyCode "ac_refresh", number 0xe7 +XF86Reload 0xe7 + +# evdev 174 (0xae): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 175 (0xaf): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 176 (0xb0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 177 (0xb1): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollUp) + +# evdev 178 (0xb2): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollDown) + +# evdev 179 (0xb3): no evdev -> QKeyCode mapping (xkb keysym parenleft) + +# evdev 180 (0xb4): no evdev -> QKeyCode mapping (xkb keysym parenright) + +# evdev 181 (0xb5): no evdev -> QKeyCode mapping (xkb keysym XF86New) + +# evdev 182 (0xb6): no evdev -> QKeyCode mapping (xkb keysym Redo) + +# evdev 183 (0xb7): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 184 (0xb8): no evdev -> QKeyCode mapping (xkb keysym XF86Launch5) + +# evdev 185 (0xb9): no evdev -> QKeyCode mapping (xkb keysym XF86Launch6) + +# evdev 186 (0xba): no evdev -> QKeyCode mapping (xkb keysym XF86Launch7) + +# evdev 187 (0xbb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch8) + +# evdev 188 (0xbc): no evdev -> QKeyCode mapping (xkb keysym XF86Launch9) + +# evdev 189 (0xbd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 190 (0xbe): no evdev -> QKeyCode mapping (xkb keysym XF86AudioMicMute) + +# evdev 191 (0xbf): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadToggle) + +# evdev 192 (0xc0): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOn) + +# evdev 193 (0xc1): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOff) + +# evdev 194 (0xc2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 195 (0xc3): no evdev -> QKeyCode mapping (xkb keysym Mode_switch) + +# evdev 196 (0xc4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 197 (0xc5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 198 (0xc6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 199 (0xc7): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 200 (0xc8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 201 (0xc9): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPause) + +# evdev 202 (0xca): no evdev -> QKeyCode mapping (xkb keysym XF86Launch3) + +# evdev 203 (0xcb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch4) + +# evdev 204 (0xcc): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchB) + +# evdev 205 (0xcd): no evdev -> QKeyCode mapping (xkb keysym XF86Suspend) + +# evdev 206 (0xce): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 207 (0xcf): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 208 (0xd0): no evdev -> QKeyCode mapping (xkb keysym XF86AudioForward) + +# evdev 209 (0xd1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 210 (0xd2): no evdev -> QKeyCode mapping (xkb keysym Print) + +# evdev 211 (0xd3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 212 (0xd4): no evdev -> QKeyCode mapping (xkb keysym XF86WebCam) + +# evdev 213 (0xd5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 214 (0xd6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 215 (0xd7): no evdev -> QKeyCode mapping (xkb keysym XF86Mail) + +# evdev 216 (0xd8): no evdev -> QKeyCode mapping (xkb keysym XF86Messenger) + +# evdev 217 (0xd9): no evdev -> QKeyCode mapping (xkb keysym XF86Search) + +# evdev 218 (0xda): no evdev -> QKeyCode mapping (xkb keysym XF86Go) + +# evdev 219 (0xdb): no evdev -> QKeyCode mapping (xkb keysym XF86Finance) + +# evdev 220 (0xdc): no evdev -> QKeyCode mapping (xkb keysym XF86Game) + +# evdev 221 (0xdd): no evdev -> QKeyCode mapping (xkb keysym XF86Shop) + +# evdev 222 (0xde): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 223 (0xdf): no evdev -> QKeyCode mapping (xkb keysym Cancel) + +# evdev 224 (0xe0): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessDown) + +# evdev 225 (0xe1): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessUp) + +# evdev 226 (0xe2), QKeyCode "mediaselect", number 0xed +XF86AudioMedia 0xed + +# evdev 227 (0xe3): no evdev -> QKeyCode mapping (xkb keysym XF86Display) + +# evdev 228 (0xe4): no evdev -> QKeyCode mapping (xkb keysym XF86KbdLightOnOff) + +# evdev 229 (0xe5): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessDown) + +# evdev 230 (0xe6): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessUp) + +# evdev 231 (0xe7): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 232 (0xe8): no evdev -> QKeyCode mapping (xkb keysym XF86Reply) + +# evdev 233 (0xe9): no evdev -> QKeyCode mapping (xkb keysym XF86MailForward) + +# evdev 234 (0xea): no evdev -> QKeyCode mapping (xkb keysym XF86Save) + +# evdev 235 (0xeb): no evdev -> QKeyCode mapping (xkb keysym XF86Documents) + +# evdev 236 (0xec): no evdev -> QKeyCode mapping (xkb keysym XF86Battery) + +# evdev 237 (0xed): no evdev -> QKeyCode mapping (xkb keysym XF86Bluetooth) + +# evdev 238 (0xee): no evdev -> QKeyCode mapping (xkb keysym XF86WLAN) + +# evdev 239 (0xef): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 240 (0xf0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 241 (0xf1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 242 (0xf2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 243 (0xf3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 244 (0xf4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# +# quirks section start +# +# Sometimes multiple keysyms map to the same keycodes. +# The keycode -> keysym lookup finds only one of the +# keysyms. So append them here. +# + +Print 0x54 +Sys_Req 0x54 +Execute 0x54 +KP_Decimal 0x53 numlock +KP_Separator 0x53 numlock +Alt_R 0xb8 +ISO_Level3_Shift 0xb8 +Mode_switch 0xb8 + +# quirks section end diff --git a/app/src/main/assets/roms/keymaps/lv b/app/src/main/assets/roms/keymaps/lv new file mode 100644 index 0000000..27260ce --- /dev/null +++ b/app/src/main/assets/roms/keymaps/lv @@ -0,0 +1,810 @@ +# +# generated by qemu-keymap +# model : pc105 +# layout : lv +# variant : - +# options : - + +# name: "Latvian" + +# modifiers +# 0: Shift +# 1: Lock +# 2: Control +# 3: Mod1 +# 4: Mod2 +# 5: Mod3 +# 6: Mod4 +# 7: Mod5 +# 8: NumLock +# 9: Alt +# 10: LevelThree +# 11: LAlt +# 12: RAlt +# 13: RControl +# 14: LControl +# 15: ScrollLock +# 16: LevelFive +# 17: AltGr +# 18: Meta +# 19: Super +# 20: Hyper + +# evdev 1 (0x1), QKeyCode "esc", number 0x1 +Escape 0x01 + +# evdev 2 (0x2), QKeyCode "1", number 0x2 +1 0x02 +exclam 0x02 shift +onesuperior 0x02 altgr +exclamdown 0x02 shift altgr + +# evdev 3 (0x3), QKeyCode "2", number 0x3 +2 0x03 +at 0x03 shift +twosuperior 0x03 altgr +oneeighth 0x03 shift altgr + +# evdev 4 (0x4), QKeyCode "3", number 0x4 +3 0x04 +numbersign 0x04 shift +threesuperior 0x04 altgr +sterling 0x04 shift altgr + +# evdev 5 (0x5), QKeyCode "4", number 0x5 +4 0x05 +dollar 0x05 shift +EuroSign 0x05 altgr +cent 0x05 shift altgr + +# evdev 6 (0x6), QKeyCode "5", number 0x6 +5 0x06 +percent 0x06 shift +onehalf 0x06 altgr +threeeighths 0x06 shift altgr + +# evdev 7 (0x7), QKeyCode "6", number 0x7 +6 0x07 +asciicircum 0x07 shift +threequarters 0x07 altgr +fiveeighths 0x07 shift altgr + +# evdev 8 (0x8), QKeyCode "7", number 0x8 +7 0x08 +ampersand 0x08 shift +braceleft 0x08 altgr +seveneighths 0x08 shift altgr + +# evdev 9 (0x9), QKeyCode "8", number 0x9 +8 0x09 +asterisk 0x09 shift +bracketleft 0x09 altgr +trademark 0x09 shift altgr + +# evdev 10 (0xa), QKeyCode "9", number 0xa +9 0x0a +parenleft 0x0a shift +bracketright 0x0a altgr +plusminus 0x0a shift altgr + +# evdev 11 (0xb), QKeyCode "0", number 0xb +0 0x0b +parenright 0x0b shift +braceright 0x0b altgr +degree 0x0b shift altgr + +# evdev 12 (0xc), QKeyCode "minus", number 0xc +minus 0x0c +underscore 0x0c shift +backslash 0x0c altgr +questiondown 0x0c shift altgr + +# evdev 13 (0xd), QKeyCode "equal", number 0xd +equal 0x0d +plus 0x0d shift +endash 0x0d altgr +emdash 0x0d shift altgr + +# evdev 14 (0xe), QKeyCode "backspace", number 0xe +BackSpace 0x0e + +# evdev 15 (0xf), QKeyCode "tab", number 0xf +Tab 0x0f +ISO_Left_Tab 0x0f shift + +# evdev 16 (0x10), QKeyCode "q", number 0x10 +q 0x10 +Q 0x10 shift + +# evdev 17 (0x11), QKeyCode "w", number 0x11 +w 0x11 +W 0x11 shift + +# evdev 18 (0x12), QKeyCode "e", number 0x12 +e 0x12 +E 0x12 shift +emacron 0x12 altgr +Emacron 0x12 shift altgr + +# evdev 19 (0x13), QKeyCode "r", number 0x13 +r 0x13 +R 0x13 shift +rcedilla 0x13 altgr +Rcedilla 0x13 shift altgr + +# evdev 20 (0x14), QKeyCode "t", number 0x14 +t 0x14 +T 0x14 shift + +# evdev 21 (0x15), QKeyCode "y", number 0x15 +y 0x15 +Y 0x15 shift + +# evdev 22 (0x16), QKeyCode "u", number 0x16 +u 0x16 +U 0x16 shift +umacron 0x16 altgr +Umacron 0x16 shift altgr + +# evdev 23 (0x17), QKeyCode "i", number 0x17 +i 0x17 +I 0x17 shift +imacron 0x17 altgr +Imacron 0x17 shift altgr + +# evdev 24 (0x18), QKeyCode "o", number 0x18 +o 0x18 +O 0x18 shift +omacron 0x18 altgr +Omacron 0x18 shift altgr + +# evdev 25 (0x19), QKeyCode "p", number 0x19 +p 0x19 +P 0x19 shift + +# evdev 26 (0x1a), QKeyCode "bracket_left", number 0x1a +bracketleft 0x1a +braceleft 0x1a shift +guillemotleft 0x1a altgr +leftdoublequotemark 0x1a shift altgr + +# evdev 27 (0x1b), QKeyCode "bracket_right", number 0x1b +bracketright 0x1b +braceright 0x1b shift +guillemotright 0x1b altgr +rightdoublequotemark 0x1b shift altgr + +# evdev 28 (0x1c), QKeyCode "ret", number 0x1c +Return 0x1c + +# evdev 29 (0x1d), QKeyCode "ctrl", number 0x1d +Control_L 0x1d + +# evdev 30 (0x1e), QKeyCode "a", number 0x1e +a 0x1e +A 0x1e shift +amacron 0x1e altgr +Amacron 0x1e shift altgr + +# evdev 31 (0x1f), QKeyCode "s", number 0x1f +s 0x1f +S 0x1f shift +scaron 0x1f altgr +Scaron 0x1f shift altgr + +# evdev 32 (0x20), QKeyCode "d", number 0x20 +d 0x20 +D 0x20 shift + +# evdev 33 (0x21), QKeyCode "f", number 0x21 +f 0x21 +F 0x21 shift + +# evdev 34 (0x22), QKeyCode "g", number 0x22 +g 0x22 +G 0x22 shift +gcedilla 0x22 altgr +Gcedilla 0x22 shift altgr + +# evdev 35 (0x23), QKeyCode "h", number 0x23 +h 0x23 +H 0x23 shift + +# evdev 36 (0x24), QKeyCode "j", number 0x24 +j 0x24 +J 0x24 shift + +# evdev 37 (0x25), QKeyCode "k", number 0x25 +k 0x25 +K 0x25 shift +kcedilla 0x25 altgr +Kcedilla 0x25 shift altgr + +# evdev 38 (0x26), QKeyCode "l", number 0x26 +l 0x26 +L 0x26 shift +lcedilla 0x26 altgr +Lcedilla 0x26 shift altgr + +# evdev 39 (0x27), QKeyCode "semicolon", number 0x27 +semicolon 0x27 +colon 0x27 shift + +# evdev 40 (0x28), QKeyCode "apostrophe", number 0x28 +apostrophe 0x28 +quotedbl 0x28 shift +leftdoublequotemark 0x28 altgr +doublelowquotemark 0x28 shift altgr + +# evdev 41 (0x29), QKeyCode "grave_accent", number 0x29 +grave 0x29 +asciitilde 0x29 shift +acute 0x29 altgr + +# evdev 42 (0x2a), QKeyCode "shift", number 0x2a +Shift_L 0x2a + +# evdev 43 (0x2b), QKeyCode "backslash", number 0x2b +backslash 0x2b +bar 0x2b shift +grave 0x2b altgr +breve 0x2b shift altgr + +# evdev 44 (0x2c), QKeyCode "z", number 0x2c +z 0x2c +Z 0x2c shift +zcaron 0x2c altgr +Zcaron 0x2c shift altgr + +# evdev 45 (0x2d), QKeyCode "x", number 0x2d +x 0x2d +X 0x2d shift + +# evdev 46 (0x2e), QKeyCode "c", number 0x2e +c 0x2e +C 0x2e shift +ccaron 0x2e altgr +Ccaron 0x2e shift altgr + +# evdev 47 (0x2f), QKeyCode "v", number 0x2f +v 0x2f +V 0x2f shift + +# evdev 48 (0x30), QKeyCode "b", number 0x30 +b 0x30 +B 0x30 shift + +# evdev 49 (0x31), QKeyCode "n", number 0x31 +n 0x31 +N 0x31 shift +ncedilla 0x31 altgr +Ncedilla 0x31 shift altgr + +# evdev 50 (0x32), QKeyCode "m", number 0x32 +m 0x32 +M 0x32 shift + +# evdev 51 (0x33), QKeyCode "comma", number 0x33 +comma 0x33 +less 0x33 shift +horizconnector 0x33 altgr +multiply 0x33 shift altgr + +# evdev 52 (0x34), QKeyCode "dot", number 0x34 +period 0x34 +greater 0x34 shift +periodcentered 0x34 altgr +division 0x34 shift altgr + +# evdev 53 (0x35), QKeyCode "slash", number 0x35 +slash 0x35 +question 0x35 shift +abovedot 0x35 shift altgr + +# evdev 54 (0x36), QKeyCode "shift_r", number 0x36 +Shift_R 0x36 + +# evdev 55 (0x37), QKeyCode "kp_multiply", number 0x37 +KP_Multiply 0x37 + +# evdev 56 (0x38), QKeyCode "alt", number 0x38 +Alt_L 0x38 +Meta_L 0x38 shift + +# evdev 57 (0x39), QKeyCode "spc", number 0x39 +space 0x39 + +# evdev 58 (0x3a), QKeyCode "caps_lock", number 0x3a +Caps_Lock 0x3a + +# evdev 59 (0x3b), QKeyCode "f1", number 0x3b +F1 0x3b + +# evdev 60 (0x3c), QKeyCode "f2", number 0x3c +F2 0x3c + +# evdev 61 (0x3d), QKeyCode "f3", number 0x3d +F3 0x3d + +# evdev 62 (0x3e), QKeyCode "f4", number 0x3e +F4 0x3e + +# evdev 63 (0x3f), QKeyCode "f5", number 0x3f +F5 0x3f + +# evdev 64 (0x40), QKeyCode "f6", number 0x40 +F6 0x40 + +# evdev 65 (0x41), QKeyCode "f7", number 0x41 +F7 0x41 + +# evdev 66 (0x42), QKeyCode "f8", number 0x42 +F8 0x42 + +# evdev 67 (0x43), QKeyCode "f9", number 0x43 +F9 0x43 + +# evdev 68 (0x44), QKeyCode "f10", number 0x44 +F10 0x44 + +# evdev 69 (0x45), QKeyCode "num_lock", number 0x45 +Num_Lock 0x45 + +# evdev 70 (0x46), QKeyCode "scroll_lock", number 0x46 +Scroll_Lock 0x46 + +# evdev 71 (0x47), QKeyCode "kp_7", number 0x47 +KP_Home 0x47 +KP_7 0x47 numlock + +# evdev 72 (0x48), QKeyCode "kp_8", number 0x48 +KP_Up 0x48 +KP_8 0x48 numlock + +# evdev 73 (0x49), QKeyCode "kp_9", number 0x49 +KP_Prior 0x49 +KP_9 0x49 numlock + +# evdev 74 (0x4a), QKeyCode "kp_subtract", number 0x4a +KP_Subtract 0x4a + +# evdev 75 (0x4b), QKeyCode "kp_4", number 0x4b +KP_Left 0x4b +KP_4 0x4b numlock + +# evdev 76 (0x4c), QKeyCode "kp_5", number 0x4c +KP_Begin 0x4c +KP_5 0x4c numlock + +# evdev 77 (0x4d), QKeyCode "kp_6", number 0x4d +KP_Right 0x4d +KP_6 0x4d numlock + +# evdev 78 (0x4e), QKeyCode "kp_add", number 0x4e +KP_Add 0x4e + +# evdev 79 (0x4f), QKeyCode "kp_1", number 0x4f +KP_End 0x4f +KP_1 0x4f numlock + +# evdev 80 (0x50), QKeyCode "kp_2", number 0x50 +KP_Down 0x50 +KP_2 0x50 numlock + +# evdev 81 (0x51), QKeyCode "kp_3", number 0x51 +KP_Next 0x51 +KP_3 0x51 numlock + +# evdev 82 (0x52), QKeyCode "kp_0", number 0x52 +KP_Insert 0x52 +KP_0 0x52 numlock + +# evdev 83 (0x53), QKeyCode "kp_decimal", number 0x53 +KP_Delete 0x53 +KP_Decimal 0x53 numlock + +# evdev 84 (0x54): no evdev -> QKeyCode mapping (xkb keysym ISO_Level3_Shift) + +# evdev 85 (0x55): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 86 (0x56), QKeyCode "less", number 0x56 +less 0x56 +greater 0x56 shift +bar 0x56 altgr +brokenbar 0x56 shift altgr + +# evdev 87 (0x57), QKeyCode "f11", number 0x57 +F11 0x57 + +# evdev 88 (0x58), QKeyCode "f12", number 0x58 +F12 0x58 + +# evdev 89 (0x59), QKeyCode "ro", number 0x73 + +# evdev 90 (0x5a): no evdev -> QKeyCode mapping (xkb keysym Katakana) + +# evdev 91 (0x5b), QKeyCode "hiragana", number 0x77 +Hiragana 0x77 + +# evdev 92 (0x5c), QKeyCode "henkan", number 0x79 +Henkan_Mode 0x79 + +# evdev 93 (0x5d): no evdev -> QKeyCode mapping (xkb keysym Hiragana_Katakana) + +# evdev 94 (0x5e): no evdev -> QKeyCode mapping (xkb keysym Muhenkan) + +# evdev 95 (0x5f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 96 (0x60), QKeyCode "kp_enter", number 0x9c +KP_Enter 0x9c + +# evdev 97 (0x61), QKeyCode "ctrl_r", number 0x9d +Control_R 0x9d + +# evdev 98 (0x62), QKeyCode "kp_divide", number 0xb5 +KP_Divide 0xb5 + +# evdev 99 (0x63), QKeyCode "sysrq", number 0x54 +Print 0x54 + +# evdev 100 (0x64), QKeyCode "alt_r", number 0xb8 +ISO_Level3_Shift 0xb8 + +# evdev 101 (0x65), QKeyCode "lf", number 0x5b +Linefeed 0x5b + +# evdev 102 (0x66), QKeyCode "home", number 0xc7 +Home 0xc7 + +# evdev 103 (0x67), QKeyCode "up", number 0xc8 +Up 0xc8 + +# evdev 104 (0x68), QKeyCode "pgup", number 0xc9 +Prior 0xc9 + +# evdev 105 (0x69), QKeyCode "left", number 0xcb +Left 0xcb + +# evdev 106 (0x6a), QKeyCode "right", number 0xcd +Right 0xcd + +# evdev 107 (0x6b), QKeyCode "end", number 0xcf +End 0xcf + +# evdev 108 (0x6c), QKeyCode "down", number 0xd0 +Down 0xd0 + +# evdev 109 (0x6d), QKeyCode "pgdn", number 0xd1 +Next 0xd1 + +# evdev 110 (0x6e), QKeyCode "insert", number 0xd2 +Insert 0xd2 + +# evdev 111 (0x6f), QKeyCode "delete", number 0xd3 +Delete 0xd3 + +# evdev 112 (0x70): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 113 (0x71), QKeyCode "audiomute", number 0xa0 +XF86AudioMute 0xa0 + +# evdev 114 (0x72), QKeyCode "volumedown", number 0xae +XF86AudioLowerVolume 0xae + +# evdev 115 (0x73), QKeyCode "volumeup", number 0xb0 +XF86AudioRaiseVolume 0xb0 + +# evdev 116 (0x74), QKeyCode "power", number 0xde +XF86PowerOff 0xde + +# evdev 117 (0x75), QKeyCode "kp_equals", number 0x59 +KP_Equal 0x59 + +# evdev 118 (0x76): no evdev -> QKeyCode mapping (xkb keysym plusminus) + +# evdev 119 (0x77), QKeyCode "pause", number 0xc6 +Pause 0xc6 + +# evdev 120 (0x78): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchA) + +# evdev 121 (0x79), QKeyCode "kp_comma", number 0x7e +KP_Decimal 0x7e + +# evdev 122 (0x7a): no evdev -> QKeyCode mapping (xkb keysym Hangul) + +# evdev 123 (0x7b): no evdev -> QKeyCode mapping (xkb keysym Hangul_Hanja) + +# evdev 124 (0x7c), QKeyCode "yen", number 0x7d + +# evdev 125 (0x7d), QKeyCode "meta_l", number 0xdb +Super_L 0xdb + +# evdev 126 (0x7e), QKeyCode "meta_r", number 0xdc +Super_R 0xdc + +# evdev 127 (0x7f), QKeyCode "compose", number 0xdd +Menu 0xdd + +# evdev 128 (0x80), QKeyCode "stop", number 0xe8 +Cancel 0xe8 + +# evdev 129 (0x81), QKeyCode "again", number 0x85 +Redo 0x85 + +# evdev 130 (0x82), QKeyCode "props", number 0x86 +SunProps 0x86 + +# evdev 131 (0x83), QKeyCode "undo", number 0x87 +Undo 0x87 + +# evdev 132 (0x84), QKeyCode "front", number 0x8c +SunFront 0x8c + +# evdev 133 (0x85), QKeyCode "copy", number 0xf8 +XF86Copy 0xf8 + +# evdev 134 (0x86), QKeyCode "open", number 0x64 +XF86Open 0x64 + +# evdev 135 (0x87), QKeyCode "paste", number 0x65 +XF86Paste 0x65 + +# evdev 136 (0x88), QKeyCode "find", number 0xc1 +Find 0xc1 + +# evdev 137 (0x89), QKeyCode "cut", number 0xbc +XF86Cut 0xbc + +# evdev 138 (0x8a), QKeyCode "help", number 0xf5 +Help 0xf5 + +# evdev 139 (0x8b), QKeyCode "menu", number 0x9e +XF86MenuKB 0x9e + +# evdev 140 (0x8c), QKeyCode "calculator", number 0xa1 +XF86Calculator 0xa1 + +# evdev 141 (0x8d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 142 (0x8e), QKeyCode "sleep", number 0xdf +XF86Sleep 0xdf + +# evdev 143 (0x8f), QKeyCode "wake", number 0xe3 +XF86WakeUp 0xe3 + +# evdev 144 (0x90): no evdev -> QKeyCode mapping (xkb keysym XF86Explorer) + +# evdev 145 (0x91): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 146 (0x92): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 147 (0x93): no evdev -> QKeyCode mapping (xkb keysym XF86Xfer) + +# evdev 148 (0x94): no evdev -> QKeyCode mapping (xkb keysym XF86Launch1) + +# evdev 149 (0x95): no evdev -> QKeyCode mapping (xkb keysym XF86Launch2) + +# evdev 150 (0x96): no evdev -> QKeyCode mapping (xkb keysym XF86WWW) + +# evdev 151 (0x97): no evdev -> QKeyCode mapping (xkb keysym XF86DOS) + +# evdev 152 (0x98): no evdev -> QKeyCode mapping (xkb keysym XF86ScreenSaver) + +# evdev 153 (0x99): no evdev -> QKeyCode mapping (xkb keysym XF86RotateWindows) + +# evdev 154 (0x9a): no evdev -> QKeyCode mapping (xkb keysym XF86TaskPane) + +# evdev 155 (0x9b), QKeyCode "mail", number 0xec +XF86Mail 0xec + +# evdev 156 (0x9c), QKeyCode "ac_bookmarks", number 0xe6 +XF86Favorites 0xe6 + +# evdev 157 (0x9d), QKeyCode "computer", number 0xeb +XF86MyComputer 0xeb + +# evdev 158 (0x9e), QKeyCode "ac_back", number 0xea +XF86Back 0xea + +# evdev 159 (0x9f), QKeyCode "ac_forward", number 0xe9 +XF86Forward 0xe9 + +# evdev 160 (0xa0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 161 (0xa1): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 162 (0xa2): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 163 (0xa3), QKeyCode "audionext", number 0x99 +XF86AudioNext 0x99 + +# evdev 164 (0xa4), QKeyCode "audioplay", number 0xa2 +XF86AudioPlay 0xa2 +XF86AudioPause 0xa2 shift + +# evdev 165 (0xa5), QKeyCode "audioprev", number 0x90 +XF86AudioPrev 0x90 + +# evdev 166 (0xa6), QKeyCode "audiostop", number 0xa4 +XF86AudioStop 0xa4 +XF86Eject 0xa4 shift + +# evdev 167 (0xa7): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRecord) + +# evdev 168 (0xa8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRewind) + +# evdev 169 (0xa9): no evdev -> QKeyCode mapping (xkb keysym XF86Phone) + +# evdev 170 (0xaa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 171 (0xab): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 172 (0xac), QKeyCode "ac_home", number 0xb2 +XF86HomePage 0xb2 + +# evdev 173 (0xad), QKeyCode "ac_refresh", number 0xe7 +XF86Reload 0xe7 + +# evdev 174 (0xae): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 175 (0xaf): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 176 (0xb0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 177 (0xb1): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollUp) + +# evdev 178 (0xb2): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollDown) + +# evdev 179 (0xb3): no evdev -> QKeyCode mapping (xkb keysym parenleft) + +# evdev 180 (0xb4): no evdev -> QKeyCode mapping (xkb keysym parenright) + +# evdev 181 (0xb5): no evdev -> QKeyCode mapping (xkb keysym XF86New) + +# evdev 182 (0xb6): no evdev -> QKeyCode mapping (xkb keysym Redo) + +# evdev 183 (0xb7): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 184 (0xb8): no evdev -> QKeyCode mapping (xkb keysym XF86Launch5) + +# evdev 185 (0xb9): no evdev -> QKeyCode mapping (xkb keysym XF86Launch6) + +# evdev 186 (0xba): no evdev -> QKeyCode mapping (xkb keysym XF86Launch7) + +# evdev 187 (0xbb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch8) + +# evdev 188 (0xbc): no evdev -> QKeyCode mapping (xkb keysym XF86Launch9) + +# evdev 189 (0xbd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 190 (0xbe): no evdev -> QKeyCode mapping (xkb keysym XF86AudioMicMute) + +# evdev 191 (0xbf): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadToggle) + +# evdev 192 (0xc0): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOn) + +# evdev 193 (0xc1): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOff) + +# evdev 194 (0xc2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 195 (0xc3): no evdev -> QKeyCode mapping (xkb keysym Mode_switch) + +# evdev 196 (0xc4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 197 (0xc5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 198 (0xc6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 199 (0xc7): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 200 (0xc8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 201 (0xc9): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPause) + +# evdev 202 (0xca): no evdev -> QKeyCode mapping (xkb keysym XF86Launch3) + +# evdev 203 (0xcb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch4) + +# evdev 204 (0xcc): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchB) + +# evdev 205 (0xcd): no evdev -> QKeyCode mapping (xkb keysym XF86Suspend) + +# evdev 206 (0xce): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 207 (0xcf): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 208 (0xd0): no evdev -> QKeyCode mapping (xkb keysym XF86AudioForward) + +# evdev 209 (0xd1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 210 (0xd2): no evdev -> QKeyCode mapping (xkb keysym Print) + +# evdev 211 (0xd3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 212 (0xd4): no evdev -> QKeyCode mapping (xkb keysym XF86WebCam) + +# evdev 213 (0xd5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 214 (0xd6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 215 (0xd7): no evdev -> QKeyCode mapping (xkb keysym XF86Mail) + +# evdev 216 (0xd8): no evdev -> QKeyCode mapping (xkb keysym XF86Messenger) + +# evdev 217 (0xd9): no evdev -> QKeyCode mapping (xkb keysym XF86Search) + +# evdev 218 (0xda): no evdev -> QKeyCode mapping (xkb keysym XF86Go) + +# evdev 219 (0xdb): no evdev -> QKeyCode mapping (xkb keysym XF86Finance) + +# evdev 220 (0xdc): no evdev -> QKeyCode mapping (xkb keysym XF86Game) + +# evdev 221 (0xdd): no evdev -> QKeyCode mapping (xkb keysym XF86Shop) + +# evdev 222 (0xde): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 223 (0xdf): no evdev -> QKeyCode mapping (xkb keysym Cancel) + +# evdev 224 (0xe0): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessDown) + +# evdev 225 (0xe1): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessUp) + +# evdev 226 (0xe2), QKeyCode "mediaselect", number 0xed +XF86AudioMedia 0xed + +# evdev 227 (0xe3): no evdev -> QKeyCode mapping (xkb keysym XF86Display) + +# evdev 228 (0xe4): no evdev -> QKeyCode mapping (xkb keysym XF86KbdLightOnOff) + +# evdev 229 (0xe5): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessDown) + +# evdev 230 (0xe6): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessUp) + +# evdev 231 (0xe7): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 232 (0xe8): no evdev -> QKeyCode mapping (xkb keysym XF86Reply) + +# evdev 233 (0xe9): no evdev -> QKeyCode mapping (xkb keysym XF86MailForward) + +# evdev 234 (0xea): no evdev -> QKeyCode mapping (xkb keysym XF86Save) + +# evdev 235 (0xeb): no evdev -> QKeyCode mapping (xkb keysym XF86Documents) + +# evdev 236 (0xec): no evdev -> QKeyCode mapping (xkb keysym XF86Battery) + +# evdev 237 (0xed): no evdev -> QKeyCode mapping (xkb keysym XF86Bluetooth) + +# evdev 238 (0xee): no evdev -> QKeyCode mapping (xkb keysym XF86WLAN) + +# evdev 239 (0xef): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 240 (0xf0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 241 (0xf1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 242 (0xf2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 243 (0xf3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 244 (0xf4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# +# quirks section start +# +# Sometimes multiple keysyms map to the same keycodes. +# The keycode -> keysym lookup finds only one of the +# keysyms. So append them here. +# + +Print 0x54 +Sys_Req 0x54 +Execute 0x54 +KP_Decimal 0x53 numlock +KP_Separator 0x53 numlock +Alt_R 0xb8 +ISO_Level3_Shift 0xb8 +Mode_switch 0xb8 + +# quirks section end diff --git a/app/src/main/assets/roms/keymaps/mk b/app/src/main/assets/roms/keymaps/mk new file mode 100644 index 0000000..30a597c --- /dev/null +++ b/app/src/main/assets/roms/keymaps/mk @@ -0,0 +1,747 @@ +# +# generated by qemu-keymap +# model : pc105 +# layout : mk +# variant : - +# options : - + +# name: "Macedonian" + +# modifiers +# 0: Shift +# 1: Lock +# 2: Control +# 3: Mod1 +# 4: Mod2 +# 5: Mod3 +# 6: Mod4 +# 7: Mod5 +# 8: NumLock +# 9: Alt +# 10: LevelThree +# 11: LAlt +# 12: RAlt +# 13: RControl +# 14: LControl +# 15: ScrollLock +# 16: LevelFive +# 17: AltGr +# 18: Meta +# 19: Super +# 20: Hyper + +# evdev 1 (0x1), QKeyCode "esc", number 0x1 +Escape 0x01 + +# evdev 2 (0x2), QKeyCode "1", number 0x2 +1 0x02 +exclam 0x02 shift + +# evdev 3 (0x3), QKeyCode "2", number 0x3 +2 0x03 +doublelowquotemark 0x03 shift + +# evdev 4 (0x4), QKeyCode "3", number 0x4 +3 0x04 +leftdoublequotemark 0x04 shift + +# evdev 5 (0x5), QKeyCode "4", number 0x5 +4 0x05 +dollar 0x05 shift + +# evdev 6 (0x6), QKeyCode "5", number 0x6 +5 0x06 +percent 0x06 shift + +# evdev 7 (0x7), QKeyCode "6", number 0x7 +6 0x07 +asciicircum 0x07 shift + +# evdev 8 (0x8), QKeyCode "7", number 0x8 +7 0x08 +ampersand 0x08 shift + +# evdev 9 (0x9), QKeyCode "8", number 0x9 +8 0x09 +asterisk 0x09 shift + +# evdev 10 (0xa), QKeyCode "9", number 0xa +9 0x0a +parenleft 0x0a shift + +# evdev 11 (0xb), QKeyCode "0", number 0xb +0 0x0b +parenright 0x0b shift + +# evdev 12 (0xc), QKeyCode "minus", number 0xc +minus 0x0c +underscore 0x0c shift + +# evdev 13 (0xd), QKeyCode "equal", number 0xd +equal 0x0d +plus 0x0d shift + +# evdev 14 (0xe), QKeyCode "backspace", number 0xe +BackSpace 0x0e + +# evdev 15 (0xf), QKeyCode "tab", number 0xf +Tab 0x0f +ISO_Left_Tab 0x0f shift + +# evdev 16 (0x10), QKeyCode "q", number 0x10 +Cyrillic_lje 0x10 +Cyrillic_LJE 0x10 shift + +# evdev 17 (0x11), QKeyCode "w", number 0x11 +Cyrillic_nje 0x11 +Cyrillic_NJE 0x11 shift + +# evdev 18 (0x12), QKeyCode "e", number 0x12 +Cyrillic_ie 0x12 +Cyrillic_IE 0x12 shift + +# evdev 19 (0x13), QKeyCode "r", number 0x13 +Cyrillic_er 0x13 +Cyrillic_ER 0x13 shift + +# evdev 20 (0x14), QKeyCode "t", number 0x14 +Cyrillic_te 0x14 +Cyrillic_TE 0x14 shift + +# evdev 21 (0x15), QKeyCode "y", number 0x15 +Macedonia_dse 0x15 +Macedonia_DSE 0x15 shift + +# evdev 22 (0x16), QKeyCode "u", number 0x16 +Cyrillic_u 0x16 +Cyrillic_U 0x16 shift + +# evdev 23 (0x17), QKeyCode "i", number 0x17 +Cyrillic_i 0x17 +Cyrillic_I 0x17 shift + +# evdev 24 (0x18), QKeyCode "o", number 0x18 +Cyrillic_o 0x18 +Cyrillic_O 0x18 shift + +# evdev 25 (0x19), QKeyCode "p", number 0x19 +Cyrillic_pe 0x19 +Cyrillic_PE 0x19 shift + +# evdev 26 (0x1a), QKeyCode "bracket_left", number 0x1a +Cyrillic_sha 0x1a +Cyrillic_SHA 0x1a shift + +# evdev 27 (0x1b), QKeyCode "bracket_right", number 0x1b +Macedonia_gje 0x1b +Macedonia_GJE 0x1b shift + +# evdev 28 (0x1c), QKeyCode "ret", number 0x1c +Return 0x1c + +# evdev 29 (0x1d), QKeyCode "ctrl", number 0x1d +Control_L 0x1d + +# evdev 30 (0x1e), QKeyCode "a", number 0x1e +Cyrillic_a 0x1e +Cyrillic_A 0x1e shift + +# evdev 31 (0x1f), QKeyCode "s", number 0x1f +Cyrillic_es 0x1f +Cyrillic_ES 0x1f shift + +# evdev 32 (0x20), QKeyCode "d", number 0x20 +Cyrillic_de 0x20 +Cyrillic_DE 0x20 shift + +# evdev 33 (0x21), QKeyCode "f", number 0x21 +Cyrillic_ef 0x21 +Cyrillic_EF 0x21 shift + +# evdev 34 (0x22), QKeyCode "g", number 0x22 +Cyrillic_ghe 0x22 +Cyrillic_GHE 0x22 shift + +# evdev 35 (0x23), QKeyCode "h", number 0x23 +Cyrillic_ha 0x23 +Cyrillic_HA 0x23 shift + +# evdev 36 (0x24), QKeyCode "j", number 0x24 +Cyrillic_je 0x24 +Cyrillic_JE 0x24 shift + +# evdev 37 (0x25), QKeyCode "k", number 0x25 +Cyrillic_ka 0x25 +Cyrillic_KA 0x25 shift + +# evdev 38 (0x26), QKeyCode "l", number 0x26 +Cyrillic_el 0x26 +Cyrillic_EL 0x26 shift + +# evdev 39 (0x27), QKeyCode "semicolon", number 0x27 +Cyrillic_che 0x27 +Cyrillic_CHE 0x27 shift + +# evdev 40 (0x28), QKeyCode "apostrophe", number 0x28 +Macedonia_kje 0x28 +Macedonia_KJE 0x28 shift + +# evdev 41 (0x29), QKeyCode "grave_accent", number 0x29 +dead_grave 0x29 +asciitilde 0x29 shift + +# evdev 42 (0x2a), QKeyCode "shift", number 0x2a +Shift_L 0x2a + +# evdev 43 (0x2b), QKeyCode "backslash", number 0x2b +Cyrillic_zhe 0x2b +Cyrillic_ZHE 0x2b shift + +# evdev 44 (0x2c), QKeyCode "z", number 0x2c +Cyrillic_ze 0x2c +Cyrillic_ZE 0x2c shift + +# evdev 45 (0x2d), QKeyCode "x", number 0x2d +Cyrillic_dzhe 0x2d +Cyrillic_DZHE 0x2d shift + +# evdev 46 (0x2e), QKeyCode "c", number 0x2e +Cyrillic_tse 0x2e +Cyrillic_TSE 0x2e shift + +# evdev 47 (0x2f), QKeyCode "v", number 0x2f +Cyrillic_ve 0x2f +Cyrillic_VE 0x2f shift + +# evdev 48 (0x30), QKeyCode "b", number 0x30 +Cyrillic_be 0x30 +Cyrillic_BE 0x30 shift + +# evdev 49 (0x31), QKeyCode "n", number 0x31 +Cyrillic_en 0x31 +Cyrillic_EN 0x31 shift + +# evdev 50 (0x32), QKeyCode "m", number 0x32 +Cyrillic_em 0x32 +Cyrillic_EM 0x32 shift + +# evdev 51 (0x33), QKeyCode "comma", number 0x33 +comma 0x33 +semicolon 0x33 shift + +# evdev 52 (0x34), QKeyCode "dot", number 0x34 +period 0x34 +colon 0x34 shift + +# evdev 53 (0x35), QKeyCode "slash", number 0x35 +slash 0x35 +question 0x35 shift + +# evdev 54 (0x36), QKeyCode "shift_r", number 0x36 +Shift_R 0x36 + +# evdev 55 (0x37), QKeyCode "kp_multiply", number 0x37 +KP_Multiply 0x37 + +# evdev 56 (0x38), QKeyCode "alt", number 0x38 +Alt_L 0x38 +Meta_L 0x38 shift + +# evdev 57 (0x39), QKeyCode "spc", number 0x39 +space 0x39 + +# evdev 58 (0x3a), QKeyCode "caps_lock", number 0x3a +Caps_Lock 0x3a + +# evdev 59 (0x3b), QKeyCode "f1", number 0x3b +F1 0x3b + +# evdev 60 (0x3c), QKeyCode "f2", number 0x3c +F2 0x3c + +# evdev 61 (0x3d), QKeyCode "f3", number 0x3d +F3 0x3d + +# evdev 62 (0x3e), QKeyCode "f4", number 0x3e +F4 0x3e + +# evdev 63 (0x3f), QKeyCode "f5", number 0x3f +F5 0x3f + +# evdev 64 (0x40), QKeyCode "f6", number 0x40 +F6 0x40 + +# evdev 65 (0x41), QKeyCode "f7", number 0x41 +F7 0x41 + +# evdev 66 (0x42), QKeyCode "f8", number 0x42 +F8 0x42 + +# evdev 67 (0x43), QKeyCode "f9", number 0x43 +F9 0x43 + +# evdev 68 (0x44), QKeyCode "f10", number 0x44 +F10 0x44 + +# evdev 69 (0x45), QKeyCode "num_lock", number 0x45 +Num_Lock 0x45 + +# evdev 70 (0x46), QKeyCode "scroll_lock", number 0x46 +Scroll_Lock 0x46 + +# evdev 71 (0x47), QKeyCode "kp_7", number 0x47 +KP_Home 0x47 +KP_7 0x47 numlock + +# evdev 72 (0x48), QKeyCode "kp_8", number 0x48 +KP_Up 0x48 +KP_8 0x48 numlock + +# evdev 73 (0x49), QKeyCode "kp_9", number 0x49 +KP_Prior 0x49 +KP_9 0x49 numlock + +# evdev 74 (0x4a), QKeyCode "kp_subtract", number 0x4a +KP_Subtract 0x4a + +# evdev 75 (0x4b), QKeyCode "kp_4", number 0x4b +KP_Left 0x4b +KP_4 0x4b numlock + +# evdev 76 (0x4c), QKeyCode "kp_5", number 0x4c +KP_Begin 0x4c +KP_5 0x4c numlock + +# evdev 77 (0x4d), QKeyCode "kp_6", number 0x4d +KP_Right 0x4d +KP_6 0x4d numlock + +# evdev 78 (0x4e), QKeyCode "kp_add", number 0x4e +KP_Add 0x4e + +# evdev 79 (0x4f), QKeyCode "kp_1", number 0x4f +KP_End 0x4f +KP_1 0x4f numlock + +# evdev 80 (0x50), QKeyCode "kp_2", number 0x50 +KP_Down 0x50 +KP_2 0x50 numlock + +# evdev 81 (0x51), QKeyCode "kp_3", number 0x51 +KP_Next 0x51 +KP_3 0x51 numlock + +# evdev 82 (0x52), QKeyCode "kp_0", number 0x52 +KP_Insert 0x52 +KP_0 0x52 numlock + +# evdev 83 (0x53), QKeyCode "kp_decimal", number 0x53 +KP_Delete 0x53 +KP_Separator 0x53 numlock + +# evdev 84 (0x54): no evdev -> QKeyCode mapping (xkb keysym ISO_Level3_Shift) + +# evdev 85 (0x55): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 86 (0x56), QKeyCode "less", number 0x56 +less 0x56 +greater 0x56 shift +bar 0x56 altgr +brokenbar 0x56 shift altgr + +# evdev 87 (0x57), QKeyCode "f11", number 0x57 +F11 0x57 + +# evdev 88 (0x58), QKeyCode "f12", number 0x58 +F12 0x58 + +# evdev 89 (0x59), QKeyCode "ro", number 0x73 + +# evdev 90 (0x5a): no evdev -> QKeyCode mapping (xkb keysym Katakana) + +# evdev 91 (0x5b), QKeyCode "hiragana", number 0x77 +Hiragana 0x77 + +# evdev 92 (0x5c), QKeyCode "henkan", number 0x79 +Henkan_Mode 0x79 + +# evdev 93 (0x5d): no evdev -> QKeyCode mapping (xkb keysym Hiragana_Katakana) + +# evdev 94 (0x5e): no evdev -> QKeyCode mapping (xkb keysym Muhenkan) + +# evdev 95 (0x5f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 96 (0x60), QKeyCode "kp_enter", number 0x9c +KP_Enter 0x9c + +# evdev 97 (0x61), QKeyCode "ctrl_r", number 0x9d +Control_R 0x9d + +# evdev 98 (0x62), QKeyCode "kp_divide", number 0xb5 +KP_Divide 0xb5 + +# evdev 99 (0x63), QKeyCode "sysrq", number 0x54 +Print 0x54 + +# evdev 100 (0x64), QKeyCode "alt_r", number 0xb8 +Alt_R 0xb8 +Meta_R 0xb8 shift + +# evdev 101 (0x65), QKeyCode "lf", number 0x5b +Linefeed 0x5b + +# evdev 102 (0x66), QKeyCode "home", number 0xc7 +Home 0xc7 + +# evdev 103 (0x67), QKeyCode "up", number 0xc8 +Up 0xc8 + +# evdev 104 (0x68), QKeyCode "pgup", number 0xc9 +Prior 0xc9 + +# evdev 105 (0x69), QKeyCode "left", number 0xcb +Left 0xcb + +# evdev 106 (0x6a), QKeyCode "right", number 0xcd +Right 0xcd + +# evdev 107 (0x6b), QKeyCode "end", number 0xcf +End 0xcf + +# evdev 108 (0x6c), QKeyCode "down", number 0xd0 +Down 0xd0 + +# evdev 109 (0x6d), QKeyCode "pgdn", number 0xd1 +Next 0xd1 + +# evdev 110 (0x6e), QKeyCode "insert", number 0xd2 +Insert 0xd2 + +# evdev 111 (0x6f), QKeyCode "delete", number 0xd3 +Delete 0xd3 + +# evdev 112 (0x70): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 113 (0x71), QKeyCode "audiomute", number 0xa0 +XF86AudioMute 0xa0 + +# evdev 114 (0x72), QKeyCode "volumedown", number 0xae +XF86AudioLowerVolume 0xae + +# evdev 115 (0x73), QKeyCode "volumeup", number 0xb0 +XF86AudioRaiseVolume 0xb0 + +# evdev 116 (0x74), QKeyCode "power", number 0xde +XF86PowerOff 0xde + +# evdev 117 (0x75), QKeyCode "kp_equals", number 0x59 +KP_Equal 0x59 + +# evdev 118 (0x76): no evdev -> QKeyCode mapping (xkb keysym plusminus) + +# evdev 119 (0x77), QKeyCode "pause", number 0xc6 +Pause 0xc6 + +# evdev 120 (0x78): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchA) + +# evdev 121 (0x79), QKeyCode "kp_comma", number 0x7e +KP_Decimal 0x7e + +# evdev 122 (0x7a): no evdev -> QKeyCode mapping (xkb keysym Hangul) + +# evdev 123 (0x7b): no evdev -> QKeyCode mapping (xkb keysym Hangul_Hanja) + +# evdev 124 (0x7c), QKeyCode "yen", number 0x7d + +# evdev 125 (0x7d), QKeyCode "meta_l", number 0xdb +Super_L 0xdb + +# evdev 126 (0x7e), QKeyCode "meta_r", number 0xdc +Super_R 0xdc + +# evdev 127 (0x7f), QKeyCode "compose", number 0xdd +Menu 0xdd + +# evdev 128 (0x80), QKeyCode "stop", number 0xe8 +Cancel 0xe8 + +# evdev 129 (0x81), QKeyCode "again", number 0x85 +Redo 0x85 + +# evdev 130 (0x82), QKeyCode "props", number 0x86 +SunProps 0x86 + +# evdev 131 (0x83), QKeyCode "undo", number 0x87 +Undo 0x87 + +# evdev 132 (0x84), QKeyCode "front", number 0x8c +SunFront 0x8c + +# evdev 133 (0x85), QKeyCode "copy", number 0xf8 +XF86Copy 0xf8 + +# evdev 134 (0x86), QKeyCode "open", number 0x64 +XF86Open 0x64 + +# evdev 135 (0x87), QKeyCode "paste", number 0x65 +XF86Paste 0x65 + +# evdev 136 (0x88), QKeyCode "find", number 0xc1 +Find 0xc1 + +# evdev 137 (0x89), QKeyCode "cut", number 0xbc +XF86Cut 0xbc + +# evdev 138 (0x8a), QKeyCode "help", number 0xf5 +Help 0xf5 + +# evdev 139 (0x8b), QKeyCode "menu", number 0x9e +XF86MenuKB 0x9e + +# evdev 140 (0x8c), QKeyCode "calculator", number 0xa1 +XF86Calculator 0xa1 + +# evdev 141 (0x8d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 142 (0x8e), QKeyCode "sleep", number 0xdf +XF86Sleep 0xdf + +# evdev 143 (0x8f), QKeyCode "wake", number 0xe3 +XF86WakeUp 0xe3 + +# evdev 144 (0x90): no evdev -> QKeyCode mapping (xkb keysym XF86Explorer) + +# evdev 145 (0x91): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 146 (0x92): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 147 (0x93): no evdev -> QKeyCode mapping (xkb keysym XF86Xfer) + +# evdev 148 (0x94): no evdev -> QKeyCode mapping (xkb keysym XF86Launch1) + +# evdev 149 (0x95): no evdev -> QKeyCode mapping (xkb keysym XF86Launch2) + +# evdev 150 (0x96): no evdev -> QKeyCode mapping (xkb keysym XF86WWW) + +# evdev 151 (0x97): no evdev -> QKeyCode mapping (xkb keysym XF86DOS) + +# evdev 152 (0x98): no evdev -> QKeyCode mapping (xkb keysym XF86ScreenSaver) + +# evdev 153 (0x99): no evdev -> QKeyCode mapping (xkb keysym XF86RotateWindows) + +# evdev 154 (0x9a): no evdev -> QKeyCode mapping (xkb keysym XF86TaskPane) + +# evdev 155 (0x9b), QKeyCode "mail", number 0xec +XF86Mail 0xec + +# evdev 156 (0x9c), QKeyCode "ac_bookmarks", number 0xe6 +XF86Favorites 0xe6 + +# evdev 157 (0x9d), QKeyCode "computer", number 0xeb +XF86MyComputer 0xeb + +# evdev 158 (0x9e), QKeyCode "ac_back", number 0xea +XF86Back 0xea + +# evdev 159 (0x9f), QKeyCode "ac_forward", number 0xe9 +XF86Forward 0xe9 + +# evdev 160 (0xa0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 161 (0xa1): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 162 (0xa2): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 163 (0xa3), QKeyCode "audionext", number 0x99 +XF86AudioNext 0x99 + +# evdev 164 (0xa4), QKeyCode "audioplay", number 0xa2 +XF86AudioPlay 0xa2 +XF86AudioPause 0xa2 shift + +# evdev 165 (0xa5), QKeyCode "audioprev", number 0x90 +XF86AudioPrev 0x90 + +# evdev 166 (0xa6), QKeyCode "audiostop", number 0xa4 +XF86AudioStop 0xa4 +XF86Eject 0xa4 shift + +# evdev 167 (0xa7): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRecord) + +# evdev 168 (0xa8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRewind) + +# evdev 169 (0xa9): no evdev -> QKeyCode mapping (xkb keysym XF86Phone) + +# evdev 170 (0xaa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 171 (0xab): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 172 (0xac), QKeyCode "ac_home", number 0xb2 +XF86HomePage 0xb2 + +# evdev 173 (0xad), QKeyCode "ac_refresh", number 0xe7 +XF86Reload 0xe7 + +# evdev 174 (0xae): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 175 (0xaf): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 176 (0xb0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 177 (0xb1): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollUp) + +# evdev 178 (0xb2): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollDown) + +# evdev 179 (0xb3): no evdev -> QKeyCode mapping (xkb keysym parenleft) + +# evdev 180 (0xb4): no evdev -> QKeyCode mapping (xkb keysym parenright) + +# evdev 181 (0xb5): no evdev -> QKeyCode mapping (xkb keysym XF86New) + +# evdev 182 (0xb6): no evdev -> QKeyCode mapping (xkb keysym Redo) + +# evdev 183 (0xb7): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 184 (0xb8): no evdev -> QKeyCode mapping (xkb keysym XF86Launch5) + +# evdev 185 (0xb9): no evdev -> QKeyCode mapping (xkb keysym XF86Launch6) + +# evdev 186 (0xba): no evdev -> QKeyCode mapping (xkb keysym XF86Launch7) + +# evdev 187 (0xbb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch8) + +# evdev 188 (0xbc): no evdev -> QKeyCode mapping (xkb keysym XF86Launch9) + +# evdev 189 (0xbd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 190 (0xbe): no evdev -> QKeyCode mapping (xkb keysym XF86AudioMicMute) + +# evdev 191 (0xbf): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadToggle) + +# evdev 192 (0xc0): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOn) + +# evdev 193 (0xc1): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOff) + +# evdev 194 (0xc2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 195 (0xc3): no evdev -> QKeyCode mapping (xkb keysym Mode_switch) + +# evdev 196 (0xc4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 197 (0xc5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 198 (0xc6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 199 (0xc7): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 200 (0xc8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 201 (0xc9): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPause) + +# evdev 202 (0xca): no evdev -> QKeyCode mapping (xkb keysym XF86Launch3) + +# evdev 203 (0xcb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch4) + +# evdev 204 (0xcc): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchB) + +# evdev 205 (0xcd): no evdev -> QKeyCode mapping (xkb keysym XF86Suspend) + +# evdev 206 (0xce): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 207 (0xcf): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 208 (0xd0): no evdev -> QKeyCode mapping (xkb keysym XF86AudioForward) + +# evdev 209 (0xd1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 210 (0xd2): no evdev -> QKeyCode mapping (xkb keysym Print) + +# evdev 211 (0xd3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 212 (0xd4): no evdev -> QKeyCode mapping (xkb keysym XF86WebCam) + +# evdev 213 (0xd5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 214 (0xd6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 215 (0xd7): no evdev -> QKeyCode mapping (xkb keysym XF86Mail) + +# evdev 216 (0xd8): no evdev -> QKeyCode mapping (xkb keysym XF86Messenger) + +# evdev 217 (0xd9): no evdev -> QKeyCode mapping (xkb keysym XF86Search) + +# evdev 218 (0xda): no evdev -> QKeyCode mapping (xkb keysym XF86Go) + +# evdev 219 (0xdb): no evdev -> QKeyCode mapping (xkb keysym XF86Finance) + +# evdev 220 (0xdc): no evdev -> QKeyCode mapping (xkb keysym XF86Game) + +# evdev 221 (0xdd): no evdev -> QKeyCode mapping (xkb keysym XF86Shop) + +# evdev 222 (0xde): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 223 (0xdf): no evdev -> QKeyCode mapping (xkb keysym Cancel) + +# evdev 224 (0xe0): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessDown) + +# evdev 225 (0xe1): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessUp) + +# evdev 226 (0xe2), QKeyCode "mediaselect", number 0xed +XF86AudioMedia 0xed + +# evdev 227 (0xe3): no evdev -> QKeyCode mapping (xkb keysym XF86Display) + +# evdev 228 (0xe4): no evdev -> QKeyCode mapping (xkb keysym XF86KbdLightOnOff) + +# evdev 229 (0xe5): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessDown) + +# evdev 230 (0xe6): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessUp) + +# evdev 231 (0xe7): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 232 (0xe8): no evdev -> QKeyCode mapping (xkb keysym XF86Reply) + +# evdev 233 (0xe9): no evdev -> QKeyCode mapping (xkb keysym XF86MailForward) + +# evdev 234 (0xea): no evdev -> QKeyCode mapping (xkb keysym XF86Save) + +# evdev 235 (0xeb): no evdev -> QKeyCode mapping (xkb keysym XF86Documents) + +# evdev 236 (0xec): no evdev -> QKeyCode mapping (xkb keysym XF86Battery) + +# evdev 237 (0xed): no evdev -> QKeyCode mapping (xkb keysym XF86Bluetooth) + +# evdev 238 (0xee): no evdev -> QKeyCode mapping (xkb keysym XF86WLAN) + +# evdev 239 (0xef): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 240 (0xf0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 241 (0xf1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 242 (0xf2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 243 (0xf3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 244 (0xf4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# +# quirks section start +# +# Sometimes multiple keysyms map to the same keycodes. +# The keycode -> keysym lookup finds only one of the +# keysyms. So append them here. +# + +Print 0x54 +Sys_Req 0x54 +Execute 0x54 +KP_Decimal 0x53 numlock +KP_Separator 0x53 numlock +Alt_R 0xb8 +ISO_Level3_Shift 0xb8 +Mode_switch 0xb8 + +# quirks section end diff --git a/app/src/main/assets/roms/keymaps/modifiers b/app/src/main/assets/roms/keymaps/modifiers new file mode 100644 index 0000000..d73b7a6 --- /dev/null +++ b/app/src/main/assets/roms/keymaps/modifiers @@ -0,0 +1,18 @@ +Shift_R 0x36 +Shift_L 0x2a + +Alt_R 0xb8 +Mode_switch 0xb8 +ISO_Level3_Shift 0xb8 +Alt_L 0x38 + +Control_R 0x9d +Control_L 0x1d + +# Translate Super to Windows keys. +# This is hardcoded. See documentation for details. +Super_R 0xdc +Super_L 0xdb + +# Translate Menu to the Windows Application key. +Menu 0xdd diff --git a/app/src/main/assets/roms/keymaps/nl b/app/src/main/assets/roms/keymaps/nl new file mode 100644 index 0000000..ae7c8f5 --- /dev/null +++ b/app/src/main/assets/roms/keymaps/nl @@ -0,0 +1,837 @@ +# +# generated by qemu-keymap +# model : pc105 +# layout : nl +# variant : - +# options : - + +# name: "Dutch" + +# modifiers +# 0: Shift +# 1: Lock +# 2: Control +# 3: Mod1 +# 4: Mod2 +# 5: Mod3 +# 6: Mod4 +# 7: Mod5 +# 8: NumLock +# 9: Alt +# 10: LevelThree +# 11: LAlt +# 12: RAlt +# 13: RControl +# 14: LControl +# 15: ScrollLock +# 16: LevelFive +# 17: AltGr +# 18: Meta +# 19: Super +# 20: Hyper + +# evdev 1 (0x1), QKeyCode "esc", number 0x1 +Escape 0x01 + +# evdev 2 (0x2), QKeyCode "1", number 0x2 +1 0x02 +exclam 0x02 shift +onesuperior 0x02 altgr +exclamdown 0x02 shift altgr + +# evdev 3 (0x3), QKeyCode "2", number 0x3 +2 0x03 +quotedbl 0x03 shift +twosuperior 0x03 altgr +oneeighth 0x03 shift altgr + +# evdev 4 (0x4), QKeyCode "3", number 0x4 +3 0x04 +numbersign 0x04 shift +threesuperior 0x04 altgr +sterling 0x04 shift altgr + +# evdev 5 (0x5), QKeyCode "4", number 0x5 +4 0x05 +dollar 0x05 shift +onequarter 0x05 altgr + +# evdev 6 (0x6), QKeyCode "5", number 0x6 +5 0x06 +percent 0x06 shift +onehalf 0x06 altgr +threeeighths 0x06 shift altgr + +# evdev 7 (0x7), QKeyCode "6", number 0x7 +6 0x07 +ampersand 0x07 shift +threequarters 0x07 altgr +fiveeighths 0x07 shift altgr + +# evdev 8 (0x8), QKeyCode "7", number 0x8 +7 0x08 +underscore 0x08 shift +sterling 0x08 altgr +seveneighths 0x08 shift altgr + +# evdev 9 (0x9), QKeyCode "8", number 0x9 +8 0x09 +parenleft 0x09 shift +braceleft 0x09 altgr +bracketleft 0x09 shift altgr + +# evdev 10 (0xa), QKeyCode "9", number 0xa +9 0x0a +parenright 0x0a shift +braceright 0x0a altgr +bracketright 0x0a shift altgr + +# evdev 11 (0xb), QKeyCode "0", number 0xb +0 0x0b +apostrophe 0x0b shift +degree 0x0b altgr +trademark 0x0b shift altgr + +# evdev 12 (0xc), QKeyCode "minus", number 0xc +slash 0x0c +question 0x0c shift +backslash 0x0c altgr +questiondown 0x0c shift altgr + +# evdev 13 (0xd), QKeyCode "equal", number 0xd +degree 0x0d +dead_tilde 0x0d shift +dead_cedilla 0x0d altgr +dead_ogonek 0x0d shift altgr + +# evdev 14 (0xe), QKeyCode "backspace", number 0xe +BackSpace 0x0e + +# evdev 15 (0xf), QKeyCode "tab", number 0xf +Tab 0x0f +ISO_Left_Tab 0x0f shift + +# evdev 16 (0x10), QKeyCode "q", number 0x10 +q 0x10 +Q 0x10 shift +at 0x10 altgr +Greek_OMEGA 0x10 shift altgr + +# evdev 17 (0x11), QKeyCode "w", number 0x11 +w 0x11 +W 0x11 shift +lstroke 0x11 altgr +Lstroke 0x11 shift altgr + +# evdev 18 (0x12), QKeyCode "e", number 0x12 +e 0x12 +E 0x12 shift +EuroSign 0x12 altgr +cent 0x12 shift altgr + +# evdev 19 (0x13), QKeyCode "r", number 0x13 +r 0x13 +R 0x13 shift +paragraph 0x13 altgr +registered 0x13 shift altgr + +# evdev 20 (0x14), QKeyCode "t", number 0x14 +t 0x14 +T 0x14 shift +thorn 0x14 altgr +THORN 0x14 shift altgr + +# evdev 21 (0x15), QKeyCode "y", number 0x15 +y 0x15 +Y 0x15 shift +ydiaeresis 0x15 altgr +yen 0x15 shift altgr + +# evdev 22 (0x16), QKeyCode "u", number 0x16 +u 0x16 +U 0x16 shift +udiaeresis 0x16 altgr +Udiaeresis 0x16 shift altgr + +# evdev 23 (0x17), QKeyCode "i", number 0x17 +i 0x17 +I 0x17 shift +idiaeresis 0x17 altgr +Idiaeresis 0x17 shift altgr + +# evdev 24 (0x18), QKeyCode "o", number 0x18 +o 0x18 +O 0x18 shift +ograve 0x18 altgr +Ograve 0x18 shift altgr + +# evdev 25 (0x19), QKeyCode "p", number 0x19 +p 0x19 +P 0x19 shift +paragraph 0x19 altgr +THORN 0x19 shift altgr + +# evdev 26 (0x1a), QKeyCode "bracket_left", number 0x1a +dead_diaeresis 0x1a +dead_circumflex 0x1a shift +asciitilde 0x1a altgr +asciicircum 0x1a shift altgr + +# evdev 27 (0x1b), QKeyCode "bracket_right", number 0x1b +asterisk 0x1b +bar 0x1b shift +dead_tilde 0x1b altgr +dead_macron 0x1b shift altgr + +# evdev 28 (0x1c), QKeyCode "ret", number 0x1c +Return 0x1c + +# evdev 29 (0x1d), QKeyCode "ctrl", number 0x1d +Control_L 0x1d + +# evdev 30 (0x1e), QKeyCode "a", number 0x1e +a 0x1e +A 0x1e shift +aacute 0x1e altgr +Aacute 0x1e shift altgr + +# evdev 31 (0x1f), QKeyCode "s", number 0x1f +s 0x1f +S 0x1f shift +ssharp 0x1f altgr +section 0x1f shift altgr + +# evdev 32 (0x20), QKeyCode "d", number 0x20 +d 0x20 +D 0x20 shift +eth 0x20 altgr +ETH 0x20 shift altgr + +# evdev 33 (0x21), QKeyCode "f", number 0x21 +f 0x21 +F 0x21 shift +ordfeminine 0x21 altgr + +# evdev 34 (0x22), QKeyCode "g", number 0x22 +g 0x22 +G 0x22 shift +eng 0x22 altgr +ENG 0x22 shift altgr + +# evdev 35 (0x23), QKeyCode "h", number 0x23 +h 0x23 +H 0x23 shift +hstroke 0x23 altgr +Hstroke 0x23 shift altgr + +# evdev 36 (0x24), QKeyCode "j", number 0x24 +j 0x24 +J 0x24 shift +dead_hook 0x24 altgr +dead_horn 0x24 shift altgr + +# evdev 37 (0x25), QKeyCode "k", number 0x25 +k 0x25 +K 0x25 shift +kra 0x25 altgr +ampersand 0x25 shift altgr + +# evdev 38 (0x26), QKeyCode "l", number 0x26 +l 0x26 +L 0x26 shift +lstroke 0x26 altgr +Lstroke 0x26 shift altgr + +# evdev 39 (0x27), QKeyCode "semicolon", number 0x27 +plus 0x27 +plusminus 0x27 shift +dead_acute 0x27 altgr +dead_doubleacute 0x27 shift altgr + +# evdev 40 (0x28), QKeyCode "apostrophe", number 0x28 +dead_acute 0x28 +dead_grave 0x28 shift +apostrophe 0x28 altgr +grave 0x28 shift altgr + +# evdev 41 (0x29), QKeyCode "grave_accent", number 0x29 +at 0x29 +section 0x29 shift +notsign 0x29 altgr + +# evdev 42 (0x2a), QKeyCode "shift", number 0x2a +Shift_L 0x2a + +# evdev 43 (0x2b), QKeyCode "backslash", number 0x2b +less 0x2b +greater 0x2b shift +dead_grave 0x2b altgr +dead_breve 0x2b shift altgr + +# evdev 44 (0x2c), QKeyCode "z", number 0x2c +z 0x2c +Z 0x2c shift +guillemotleft 0x2c altgr +less 0x2c shift altgr + +# evdev 45 (0x2d), QKeyCode "x", number 0x2d +x 0x2d +X 0x2d shift +guillemotright 0x2d altgr +greater 0x2d shift altgr + +# evdev 46 (0x2e), QKeyCode "c", number 0x2e +c 0x2e +C 0x2e shift +cent 0x2e altgr +copyright 0x2e shift altgr + +# evdev 47 (0x2f), QKeyCode "v", number 0x2f +v 0x2f +V 0x2f shift +leftdoublequotemark 0x2f altgr +leftsinglequotemark 0x2f shift altgr + +# evdev 48 (0x30), QKeyCode "b", number 0x30 +b 0x30 +B 0x30 shift +rightdoublequotemark 0x30 altgr +rightsinglequotemark 0x30 shift altgr + +# evdev 49 (0x31), QKeyCode "n", number 0x31 +n 0x31 +N 0x31 shift +ntilde 0x31 altgr +Ntilde 0x31 shift altgr + +# evdev 50 (0x32), QKeyCode "m", number 0x32 +m 0x32 +M 0x32 shift +Greek_mu 0x32 altgr +masculine 0x32 shift altgr + +# evdev 51 (0x33), QKeyCode "comma", number 0x33 +comma 0x33 +semicolon 0x33 shift +cedilla 0x33 altgr +guillemotleft 0x33 shift altgr + +# evdev 52 (0x34), QKeyCode "dot", number 0x34 +period 0x34 +colon 0x34 shift +periodcentered 0x34 altgr +guillemotright 0x34 shift altgr + +# evdev 53 (0x35), QKeyCode "slash", number 0x35 +minus 0x35 +equal 0x35 shift +hyphen 0x35 altgr +dead_abovedot 0x35 shift altgr + +# evdev 54 (0x36), QKeyCode "shift_r", number 0x36 +Shift_R 0x36 + +# evdev 55 (0x37), QKeyCode "kp_multiply", number 0x37 +KP_Multiply 0x37 + +# evdev 56 (0x38), QKeyCode "alt", number 0x38 +Alt_L 0x38 +Meta_L 0x38 shift + +# evdev 57 (0x39), QKeyCode "spc", number 0x39 +space 0x39 + +# evdev 58 (0x3a), QKeyCode "caps_lock", number 0x3a +Caps_Lock 0x3a + +# evdev 59 (0x3b), QKeyCode "f1", number 0x3b +F1 0x3b + +# evdev 60 (0x3c), QKeyCode "f2", number 0x3c +F2 0x3c + +# evdev 61 (0x3d), QKeyCode "f3", number 0x3d +F3 0x3d + +# evdev 62 (0x3e), QKeyCode "f4", number 0x3e +F4 0x3e + +# evdev 63 (0x3f), QKeyCode "f5", number 0x3f +F5 0x3f + +# evdev 64 (0x40), QKeyCode "f6", number 0x40 +F6 0x40 + +# evdev 65 (0x41), QKeyCode "f7", number 0x41 +F7 0x41 + +# evdev 66 (0x42), QKeyCode "f8", number 0x42 +F8 0x42 + +# evdev 67 (0x43), QKeyCode "f9", number 0x43 +F9 0x43 + +# evdev 68 (0x44), QKeyCode "f10", number 0x44 +F10 0x44 + +# evdev 69 (0x45), QKeyCode "num_lock", number 0x45 +Num_Lock 0x45 + +# evdev 70 (0x46), QKeyCode "scroll_lock", number 0x46 +Scroll_Lock 0x46 + +# evdev 71 (0x47), QKeyCode "kp_7", number 0x47 +KP_Home 0x47 +KP_7 0x47 numlock + +# evdev 72 (0x48), QKeyCode "kp_8", number 0x48 +KP_Up 0x48 +KP_8 0x48 numlock + +# evdev 73 (0x49), QKeyCode "kp_9", number 0x49 +KP_Prior 0x49 +KP_9 0x49 numlock + +# evdev 74 (0x4a), QKeyCode "kp_subtract", number 0x4a +KP_Subtract 0x4a + +# evdev 75 (0x4b), QKeyCode "kp_4", number 0x4b +KP_Left 0x4b +KP_4 0x4b numlock + +# evdev 76 (0x4c), QKeyCode "kp_5", number 0x4c +KP_Begin 0x4c +KP_5 0x4c numlock + +# evdev 77 (0x4d), QKeyCode "kp_6", number 0x4d +KP_Right 0x4d +KP_6 0x4d numlock + +# evdev 78 (0x4e), QKeyCode "kp_add", number 0x4e +KP_Add 0x4e + +# evdev 79 (0x4f), QKeyCode "kp_1", number 0x4f +KP_End 0x4f +KP_1 0x4f numlock + +# evdev 80 (0x50), QKeyCode "kp_2", number 0x50 +KP_Down 0x50 +KP_2 0x50 numlock + +# evdev 81 (0x51), QKeyCode "kp_3", number 0x51 +KP_Next 0x51 +KP_3 0x51 numlock + +# evdev 82 (0x52), QKeyCode "kp_0", number 0x52 +KP_Insert 0x52 +KP_0 0x52 numlock + +# evdev 83 (0x53), QKeyCode "kp_decimal", number 0x53 +KP_Delete 0x53 +KP_Decimal 0x53 numlock + +# evdev 84 (0x54): no evdev -> QKeyCode mapping (xkb keysym ISO_Level3_Shift) + +# evdev 85 (0x55): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 86 (0x56), QKeyCode "less", number 0x56 +bracketright 0x56 +bracketleft 0x56 shift +bar 0x56 altgr +brokenbar 0x56 shift altgr + +# evdev 87 (0x57), QKeyCode "f11", number 0x57 +F11 0x57 + +# evdev 88 (0x58), QKeyCode "f12", number 0x58 +F12 0x58 + +# evdev 89 (0x59), QKeyCode "ro", number 0x73 + +# evdev 90 (0x5a): no evdev -> QKeyCode mapping (xkb keysym Katakana) + +# evdev 91 (0x5b), QKeyCode "hiragana", number 0x77 +Hiragana 0x77 + +# evdev 92 (0x5c), QKeyCode "henkan", number 0x79 +Henkan_Mode 0x79 + +# evdev 93 (0x5d): no evdev -> QKeyCode mapping (xkb keysym Hiragana_Katakana) + +# evdev 94 (0x5e): no evdev -> QKeyCode mapping (xkb keysym Muhenkan) + +# evdev 95 (0x5f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 96 (0x60), QKeyCode "kp_enter", number 0x9c +KP_Enter 0x9c + +# evdev 97 (0x61), QKeyCode "ctrl_r", number 0x9d +Control_R 0x9d + +# evdev 98 (0x62), QKeyCode "kp_divide", number 0xb5 +KP_Divide 0xb5 + +# evdev 99 (0x63), QKeyCode "sysrq", number 0x54 +Print 0x54 + +# evdev 100 (0x64), QKeyCode "alt_r", number 0xb8 +ISO_Level3_Shift 0xb8 + +# evdev 101 (0x65), QKeyCode "lf", number 0x5b +Linefeed 0x5b + +# evdev 102 (0x66), QKeyCode "home", number 0xc7 +Home 0xc7 + +# evdev 103 (0x67), QKeyCode "up", number 0xc8 +Up 0xc8 + +# evdev 104 (0x68), QKeyCode "pgup", number 0xc9 +Prior 0xc9 + +# evdev 105 (0x69), QKeyCode "left", number 0xcb +Left 0xcb + +# evdev 106 (0x6a), QKeyCode "right", number 0xcd +Right 0xcd + +# evdev 107 (0x6b), QKeyCode "end", number 0xcf +End 0xcf + +# evdev 108 (0x6c), QKeyCode "down", number 0xd0 +Down 0xd0 + +# evdev 109 (0x6d), QKeyCode "pgdn", number 0xd1 +Next 0xd1 + +# evdev 110 (0x6e), QKeyCode "insert", number 0xd2 +Insert 0xd2 + +# evdev 111 (0x6f), QKeyCode "delete", number 0xd3 +Delete 0xd3 + +# evdev 112 (0x70): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 113 (0x71), QKeyCode "audiomute", number 0xa0 +XF86AudioMute 0xa0 + +# evdev 114 (0x72), QKeyCode "volumedown", number 0xae +XF86AudioLowerVolume 0xae + +# evdev 115 (0x73), QKeyCode "volumeup", number 0xb0 +XF86AudioRaiseVolume 0xb0 + +# evdev 116 (0x74), QKeyCode "power", number 0xde +XF86PowerOff 0xde + +# evdev 117 (0x75), QKeyCode "kp_equals", number 0x59 +KP_Equal 0x59 + +# evdev 118 (0x76): no evdev -> QKeyCode mapping (xkb keysym plusminus) + +# evdev 119 (0x77), QKeyCode "pause", number 0xc6 +Pause 0xc6 + +# evdev 120 (0x78): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchA) + +# evdev 121 (0x79), QKeyCode "kp_comma", number 0x7e +KP_Decimal 0x7e + +# evdev 122 (0x7a): no evdev -> QKeyCode mapping (xkb keysym Hangul) + +# evdev 123 (0x7b): no evdev -> QKeyCode mapping (xkb keysym Hangul_Hanja) + +# evdev 124 (0x7c), QKeyCode "yen", number 0x7d + +# evdev 125 (0x7d), QKeyCode "meta_l", number 0xdb +Super_L 0xdb + +# evdev 126 (0x7e), QKeyCode "meta_r", number 0xdc +Super_R 0xdc + +# evdev 127 (0x7f), QKeyCode "compose", number 0xdd +Menu 0xdd + +# evdev 128 (0x80), QKeyCode "stop", number 0xe8 +Cancel 0xe8 + +# evdev 129 (0x81), QKeyCode "again", number 0x85 +Redo 0x85 + +# evdev 130 (0x82), QKeyCode "props", number 0x86 +SunProps 0x86 + +# evdev 131 (0x83), QKeyCode "undo", number 0x87 +Undo 0x87 + +# evdev 132 (0x84), QKeyCode "front", number 0x8c +SunFront 0x8c + +# evdev 133 (0x85), QKeyCode "copy", number 0xf8 +XF86Copy 0xf8 + +# evdev 134 (0x86), QKeyCode "open", number 0x64 +XF86Open 0x64 + +# evdev 135 (0x87), QKeyCode "paste", number 0x65 +XF86Paste 0x65 + +# evdev 136 (0x88), QKeyCode "find", number 0xc1 +Find 0xc1 + +# evdev 137 (0x89), QKeyCode "cut", number 0xbc +XF86Cut 0xbc + +# evdev 138 (0x8a), QKeyCode "help", number 0xf5 +Help 0xf5 + +# evdev 139 (0x8b), QKeyCode "menu", number 0x9e +XF86MenuKB 0x9e + +# evdev 140 (0x8c), QKeyCode "calculator", number 0xa1 +XF86Calculator 0xa1 + +# evdev 141 (0x8d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 142 (0x8e), QKeyCode "sleep", number 0xdf +XF86Sleep 0xdf + +# evdev 143 (0x8f), QKeyCode "wake", number 0xe3 +XF86WakeUp 0xe3 + +# evdev 144 (0x90): no evdev -> QKeyCode mapping (xkb keysym XF86Explorer) + +# evdev 145 (0x91): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 146 (0x92): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 147 (0x93): no evdev -> QKeyCode mapping (xkb keysym XF86Xfer) + +# evdev 148 (0x94): no evdev -> QKeyCode mapping (xkb keysym XF86Launch1) + +# evdev 149 (0x95): no evdev -> QKeyCode mapping (xkb keysym XF86Launch2) + +# evdev 150 (0x96): no evdev -> QKeyCode mapping (xkb keysym XF86WWW) + +# evdev 151 (0x97): no evdev -> QKeyCode mapping (xkb keysym XF86DOS) + +# evdev 152 (0x98): no evdev -> QKeyCode mapping (xkb keysym XF86ScreenSaver) + +# evdev 153 (0x99): no evdev -> QKeyCode mapping (xkb keysym XF86RotateWindows) + +# evdev 154 (0x9a): no evdev -> QKeyCode mapping (xkb keysym XF86TaskPane) + +# evdev 155 (0x9b), QKeyCode "mail", number 0xec +XF86Mail 0xec + +# evdev 156 (0x9c), QKeyCode "ac_bookmarks", number 0xe6 +XF86Favorites 0xe6 + +# evdev 157 (0x9d), QKeyCode "computer", number 0xeb +XF86MyComputer 0xeb + +# evdev 158 (0x9e), QKeyCode "ac_back", number 0xea +XF86Back 0xea + +# evdev 159 (0x9f), QKeyCode "ac_forward", number 0xe9 +XF86Forward 0xe9 + +# evdev 160 (0xa0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 161 (0xa1): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 162 (0xa2): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 163 (0xa3), QKeyCode "audionext", number 0x99 +XF86AudioNext 0x99 + +# evdev 164 (0xa4), QKeyCode "audioplay", number 0xa2 +XF86AudioPlay 0xa2 +XF86AudioPause 0xa2 shift + +# evdev 165 (0xa5), QKeyCode "audioprev", number 0x90 +XF86AudioPrev 0x90 + +# evdev 166 (0xa6), QKeyCode "audiostop", number 0xa4 +XF86AudioStop 0xa4 +XF86Eject 0xa4 shift + +# evdev 167 (0xa7): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRecord) + +# evdev 168 (0xa8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRewind) + +# evdev 169 (0xa9): no evdev -> QKeyCode mapping (xkb keysym XF86Phone) + +# evdev 170 (0xaa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 171 (0xab): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 172 (0xac), QKeyCode "ac_home", number 0xb2 +XF86HomePage 0xb2 + +# evdev 173 (0xad), QKeyCode "ac_refresh", number 0xe7 +XF86Reload 0xe7 + +# evdev 174 (0xae): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 175 (0xaf): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 176 (0xb0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 177 (0xb1): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollUp) + +# evdev 178 (0xb2): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollDown) + +# evdev 179 (0xb3): no evdev -> QKeyCode mapping (xkb keysym parenleft) + +# evdev 180 (0xb4): no evdev -> QKeyCode mapping (xkb keysym parenright) + +# evdev 181 (0xb5): no evdev -> QKeyCode mapping (xkb keysym XF86New) + +# evdev 182 (0xb6): no evdev -> QKeyCode mapping (xkb keysym Redo) + +# evdev 183 (0xb7): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 184 (0xb8): no evdev -> QKeyCode mapping (xkb keysym XF86Launch5) + +# evdev 185 (0xb9): no evdev -> QKeyCode mapping (xkb keysym XF86Launch6) + +# evdev 186 (0xba): no evdev -> QKeyCode mapping (xkb keysym XF86Launch7) + +# evdev 187 (0xbb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch8) + +# evdev 188 (0xbc): no evdev -> QKeyCode mapping (xkb keysym XF86Launch9) + +# evdev 189 (0xbd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 190 (0xbe): no evdev -> QKeyCode mapping (xkb keysym XF86AudioMicMute) + +# evdev 191 (0xbf): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadToggle) + +# evdev 192 (0xc0): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOn) + +# evdev 193 (0xc1): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOff) + +# evdev 194 (0xc2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 195 (0xc3): no evdev -> QKeyCode mapping (xkb keysym Mode_switch) + +# evdev 196 (0xc4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 197 (0xc5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 198 (0xc6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 199 (0xc7): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 200 (0xc8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 201 (0xc9): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPause) + +# evdev 202 (0xca): no evdev -> QKeyCode mapping (xkb keysym XF86Launch3) + +# evdev 203 (0xcb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch4) + +# evdev 204 (0xcc): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchB) + +# evdev 205 (0xcd): no evdev -> QKeyCode mapping (xkb keysym XF86Suspend) + +# evdev 206 (0xce): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 207 (0xcf): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 208 (0xd0): no evdev -> QKeyCode mapping (xkb keysym XF86AudioForward) + +# evdev 209 (0xd1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 210 (0xd2): no evdev -> QKeyCode mapping (xkb keysym Print) + +# evdev 211 (0xd3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 212 (0xd4): no evdev -> QKeyCode mapping (xkb keysym XF86WebCam) + +# evdev 213 (0xd5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 214 (0xd6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 215 (0xd7): no evdev -> QKeyCode mapping (xkb keysym XF86Mail) + +# evdev 216 (0xd8): no evdev -> QKeyCode mapping (xkb keysym XF86Messenger) + +# evdev 217 (0xd9): no evdev -> QKeyCode mapping (xkb keysym XF86Search) + +# evdev 218 (0xda): no evdev -> QKeyCode mapping (xkb keysym XF86Go) + +# evdev 219 (0xdb): no evdev -> QKeyCode mapping (xkb keysym XF86Finance) + +# evdev 220 (0xdc): no evdev -> QKeyCode mapping (xkb keysym XF86Game) + +# evdev 221 (0xdd): no evdev -> QKeyCode mapping (xkb keysym XF86Shop) + +# evdev 222 (0xde): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 223 (0xdf): no evdev -> QKeyCode mapping (xkb keysym Cancel) + +# evdev 224 (0xe0): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessDown) + +# evdev 225 (0xe1): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessUp) + +# evdev 226 (0xe2), QKeyCode "mediaselect", number 0xed +XF86AudioMedia 0xed + +# evdev 227 (0xe3): no evdev -> QKeyCode mapping (xkb keysym XF86Display) + +# evdev 228 (0xe4): no evdev -> QKeyCode mapping (xkb keysym XF86KbdLightOnOff) + +# evdev 229 (0xe5): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessDown) + +# evdev 230 (0xe6): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessUp) + +# evdev 231 (0xe7): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 232 (0xe8): no evdev -> QKeyCode mapping (xkb keysym XF86Reply) + +# evdev 233 (0xe9): no evdev -> QKeyCode mapping (xkb keysym XF86MailForward) + +# evdev 234 (0xea): no evdev -> QKeyCode mapping (xkb keysym XF86Save) + +# evdev 235 (0xeb): no evdev -> QKeyCode mapping (xkb keysym XF86Documents) + +# evdev 236 (0xec): no evdev -> QKeyCode mapping (xkb keysym XF86Battery) + +# evdev 237 (0xed): no evdev -> QKeyCode mapping (xkb keysym XF86Bluetooth) + +# evdev 238 (0xee): no evdev -> QKeyCode mapping (xkb keysym XF86WLAN) + +# evdev 239 (0xef): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 240 (0xf0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 241 (0xf1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 242 (0xf2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 243 (0xf3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 244 (0xf4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# +# quirks section start +# +# Sometimes multiple keysyms map to the same keycodes. +# The keycode -> keysym lookup finds only one of the +# keysyms. So append them here. +# + +Print 0x54 +Sys_Req 0x54 +Execute 0x54 +KP_Decimal 0x53 numlock +KP_Separator 0x53 numlock +Alt_R 0xb8 +ISO_Level3_Shift 0xb8 +Mode_switch 0xb8 + +# quirks section end diff --git a/app/src/main/assets/roms/keymaps/nl-be b/app/src/main/assets/roms/keymaps/nl-be new file mode 100644 index 0000000..34fc881 --- /dev/null +++ b/app/src/main/assets/roms/keymaps/nl-be @@ -0,0 +1,3 @@ +# Dutch (Belgium) +map 0x813 +include common diff --git a/app/src/main/assets/roms/keymaps/no b/app/src/main/assets/roms/keymaps/no new file mode 100644 index 0000000..8afd199 --- /dev/null +++ b/app/src/main/assets/roms/keymaps/no @@ -0,0 +1,851 @@ +# +# generated by qemu-keymap +# model : pc105 +# layout : no +# variant : - +# options : - + +# name: "Norwegian" + +# modifiers +# 0: Shift +# 1: Lock +# 2: Control +# 3: Mod1 +# 4: Mod2 +# 5: Mod3 +# 6: Mod4 +# 7: Mod5 +# 8: NumLock +# 9: Alt +# 10: LevelThree +# 11: LAlt +# 12: RAlt +# 13: RControl +# 14: LControl +# 15: ScrollLock +# 16: LevelFive +# 17: AltGr +# 18: Meta +# 19: Super +# 20: Hyper + +# evdev 1 (0x1), QKeyCode "esc", number 0x1 +Escape 0x01 + +# evdev 2 (0x2), QKeyCode "1", number 0x2 +1 0x02 +exclam 0x02 shift +exclamdown 0x02 altgr +onesuperior 0x02 shift altgr + +# evdev 3 (0x3), QKeyCode "2", number 0x3 +2 0x03 +quotedbl 0x03 shift +at 0x03 altgr +twosuperior 0x03 shift altgr + +# evdev 4 (0x4), QKeyCode "3", number 0x4 +3 0x04 +numbersign 0x04 shift +sterling 0x04 altgr +threesuperior 0x04 shift altgr + +# evdev 5 (0x5), QKeyCode "4", number 0x5 +4 0x05 +currency 0x05 shift +dollar 0x05 altgr +onequarter 0x05 shift altgr + +# evdev 6 (0x6), QKeyCode "5", number 0x6 +5 0x06 +percent 0x06 shift +onehalf 0x06 altgr +U2030 0x06 shift altgr + +# evdev 7 (0x7), QKeyCode "6", number 0x7 +6 0x07 +ampersand 0x07 shift +yen 0x07 altgr +fiveeighths 0x07 shift altgr + +# evdev 8 (0x8), QKeyCode "7", number 0x8 +7 0x08 +slash 0x08 shift +braceleft 0x08 altgr +division 0x08 shift altgr + +# evdev 9 (0x9), QKeyCode "8", number 0x9 +8 0x09 +parenleft 0x09 shift +bracketleft 0x09 altgr +guillemotleft 0x09 shift altgr + +# evdev 10 (0xa), QKeyCode "9", number 0xa +9 0x0a +parenright 0x0a shift +bracketright 0x0a altgr +guillemotright 0x0a shift altgr + +# evdev 11 (0xb), QKeyCode "0", number 0xb +0 0x0b +equal 0x0b shift +braceright 0x0b altgr +degree 0x0b shift altgr + +# evdev 12 (0xc), QKeyCode "minus", number 0xc +plus 0x0c +question 0x0c shift +plusminus 0x0c altgr +questiondown 0x0c shift altgr + +# evdev 13 (0xd), QKeyCode "equal", number 0xd +backslash 0x0d +dead_grave 0x0d shift +dead_acute 0x0d altgr +notsign 0x0d shift altgr + +# evdev 14 (0xe), QKeyCode "backspace", number 0xe +BackSpace 0x0e + +# evdev 15 (0xf), QKeyCode "tab", number 0xf +Tab 0x0f +ISO_Left_Tab 0x0f shift + +# evdev 16 (0x10), QKeyCode "q", number 0x10 +q 0x10 +Q 0x10 shift +at 0x10 altgr +Greek_OMEGA 0x10 shift altgr + +# evdev 17 (0x11), QKeyCode "w", number 0x11 +w 0x11 +W 0x11 shift +lstroke 0x11 altgr +Lstroke 0x11 shift altgr + +# evdev 18 (0x12), QKeyCode "e", number 0x12 +e 0x12 +E 0x12 shift +EuroSign 0x12 altgr +cent 0x12 shift altgr + +# evdev 19 (0x13), QKeyCode "r", number 0x13 +r 0x13 +R 0x13 shift +registered 0x13 altgr +trademark 0x13 shift altgr + +# evdev 20 (0x14), QKeyCode "t", number 0x14 +t 0x14 +T 0x14 shift +thorn 0x14 altgr +THORN 0x14 shift altgr + +# evdev 21 (0x15), QKeyCode "y", number 0x15 +y 0x15 +Y 0x15 shift +leftarrow 0x15 altgr +yen 0x15 shift altgr + +# evdev 22 (0x16), QKeyCode "u", number 0x16 +u 0x16 +U 0x16 shift +downarrow 0x16 altgr +uparrow 0x16 shift altgr + +# evdev 23 (0x17), QKeyCode "i", number 0x17 +i 0x17 +I 0x17 shift +rightarrow 0x17 altgr +idotless 0x17 shift altgr + +# evdev 24 (0x18), QKeyCode "o", number 0x18 +o 0x18 +O 0x18 shift +oe 0x18 altgr +OE 0x18 shift altgr + +# evdev 25 (0x19), QKeyCode "p", number 0x19 +p 0x19 +P 0x19 shift +Greek_pi 0x19 altgr +Greek_PI 0x19 shift altgr + +# evdev 26 (0x1a), QKeyCode "bracket_left", number 0x1a +aring 0x1a +Aring 0x1a shift +dead_diaeresis 0x1a altgr +dead_abovering 0x1a shift altgr + +# evdev 27 (0x1b), QKeyCode "bracket_right", number 0x1b +dead_diaeresis 0x1b +dead_circumflex 0x1b shift +dead_tilde 0x1b altgr +dead_caron 0x1b shift altgr + +# evdev 28 (0x1c), QKeyCode "ret", number 0x1c +Return 0x1c + +# evdev 29 (0x1d), QKeyCode "ctrl", number 0x1d +Control_L 0x1d + +# evdev 30 (0x1e), QKeyCode "a", number 0x1e +a 0x1e +A 0x1e shift +ordfeminine 0x1e altgr +masculine 0x1e shift altgr + +# evdev 31 (0x1f), QKeyCode "s", number 0x1f +s 0x1f +S 0x1f shift +ssharp 0x1f altgr +section 0x1f shift altgr + +# evdev 32 (0x20), QKeyCode "d", number 0x20 +d 0x20 +D 0x20 shift +eth 0x20 altgr +ETH 0x20 shift altgr + +# evdev 33 (0x21), QKeyCode "f", number 0x21 +f 0x21 +F 0x21 shift +dstroke 0x21 altgr +ordfeminine 0x21 shift altgr + +# evdev 34 (0x22), QKeyCode "g", number 0x22 +g 0x22 +G 0x22 shift +eng 0x22 altgr +ENG 0x22 shift altgr + +# evdev 35 (0x23), QKeyCode "h", number 0x23 +h 0x23 +H 0x23 shift +hstroke 0x23 altgr +Hstroke 0x23 shift altgr + +# evdev 36 (0x24), QKeyCode "j", number 0x24 +j 0x24 +J 0x24 shift +dead_hook 0x24 altgr +dead_horn 0x24 shift altgr + +# evdev 37 (0x25), QKeyCode "k", number 0x25 +k 0x25 +K 0x25 shift +kra 0x25 altgr +ampersand 0x25 shift altgr + +# evdev 38 (0x26), QKeyCode "l", number 0x26 +l 0x26 +L 0x26 shift +lstroke 0x26 altgr +Lstroke 0x26 shift altgr + +# evdev 39 (0x27), QKeyCode "semicolon", number 0x27 +oslash 0x27 +Oslash 0x27 shift +dead_acute 0x27 altgr +dead_doubleacute 0x27 shift altgr + +# evdev 40 (0x28), QKeyCode "apostrophe", number 0x28 +ae 0x28 +AE 0x28 shift +dead_circumflex 0x28 altgr +dead_caron 0x28 shift altgr + +# evdev 41 (0x29), QKeyCode "grave_accent", number 0x29 +bar 0x29 +section 0x29 shift +brokenbar 0x29 altgr +paragraph 0x29 shift altgr + +# evdev 42 (0x2a), QKeyCode "shift", number 0x2a +Shift_L 0x2a + +# evdev 43 (0x2b), QKeyCode "backslash", number 0x2b +apostrophe 0x2b +asterisk 0x2b shift +dead_doubleacute 0x2b altgr +multiply 0x2b shift altgr + +# evdev 44 (0x2c), QKeyCode "z", number 0x2c +z 0x2c +Z 0x2c shift +guillemotleft 0x2c altgr +less 0x2c shift altgr + +# evdev 45 (0x2d), QKeyCode "x", number 0x2d +x 0x2d +X 0x2d shift +guillemotright 0x2d altgr +greater 0x2d shift altgr + +# evdev 46 (0x2e), QKeyCode "c", number 0x2e +c 0x2e +C 0x2e shift +copyright 0x2e altgr + +# evdev 47 (0x2f), QKeyCode "v", number 0x2f +v 0x2f +V 0x2f shift +leftdoublequotemark 0x2f altgr +leftsinglequotemark 0x2f shift altgr + +# evdev 48 (0x30), QKeyCode "b", number 0x30 +b 0x30 +B 0x30 shift +rightdoublequotemark 0x30 altgr +rightsinglequotemark 0x30 shift altgr + +# evdev 49 (0x31), QKeyCode "n", number 0x31 +n 0x31 +N 0x31 shift + +# evdev 50 (0x32), QKeyCode "m", number 0x32 +m 0x32 +M 0x32 shift +mu 0x32 altgr +masculine 0x32 shift altgr + +# evdev 51 (0x33), QKeyCode "comma", number 0x33 +comma 0x33 +semicolon 0x33 shift +dead_cedilla 0x33 altgr +dead_ogonek 0x33 shift altgr + +# evdev 52 (0x34), QKeyCode "dot", number 0x34 +period 0x34 +colon 0x34 shift +ellipsis 0x34 altgr +periodcentered 0x34 shift altgr + +# evdev 53 (0x35), QKeyCode "slash", number 0x35 +minus 0x35 +underscore 0x35 shift +endash 0x35 altgr +emdash 0x35 shift altgr + +# evdev 54 (0x36), QKeyCode "shift_r", number 0x36 +Shift_R 0x36 + +# evdev 55 (0x37), QKeyCode "kp_multiply", number 0x37 +KP_Multiply 0x37 +U22C5 0x37 shift +0x010000d7 0x37 altgr +VoidSymbol 0x37 shift altgr + +# evdev 56 (0x38), QKeyCode "alt", number 0x38 +Alt_L 0x38 +Meta_L 0x38 shift + +# evdev 57 (0x39), QKeyCode "spc", number 0x39 +space 0x39 +nobreakspace 0x39 altgr +U202F 0x39 shift altgr + +# evdev 58 (0x3a), QKeyCode "caps_lock", number 0x3a +Caps_Lock 0x3a + +# evdev 59 (0x3b), QKeyCode "f1", number 0x3b +F1 0x3b + +# evdev 60 (0x3c), QKeyCode "f2", number 0x3c +F2 0x3c + +# evdev 61 (0x3d), QKeyCode "f3", number 0x3d +F3 0x3d + +# evdev 62 (0x3e), QKeyCode "f4", number 0x3e +F4 0x3e + +# evdev 63 (0x3f), QKeyCode "f5", number 0x3f +F5 0x3f + +# evdev 64 (0x40), QKeyCode "f6", number 0x40 +F6 0x40 + +# evdev 65 (0x41), QKeyCode "f7", number 0x41 +F7 0x41 + +# evdev 66 (0x42), QKeyCode "f8", number 0x42 +F8 0x42 + +# evdev 67 (0x43), QKeyCode "f9", number 0x43 +F9 0x43 + +# evdev 68 (0x44), QKeyCode "f10", number 0x44 +F10 0x44 + +# evdev 69 (0x45), QKeyCode "num_lock", number 0x45 +Num_Lock 0x45 + +# evdev 70 (0x46), QKeyCode "scroll_lock", number 0x46 +Scroll_Lock 0x46 + +# evdev 71 (0x47), QKeyCode "kp_7", number 0x47 +KP_Home 0x47 +KP_7 0x47 numlock + +# evdev 72 (0x48), QKeyCode "kp_8", number 0x48 +KP_Up 0x48 +KP_8 0x48 numlock + +# evdev 73 (0x49), QKeyCode "kp_9", number 0x49 +KP_Prior 0x49 +KP_9 0x49 numlock + +# evdev 74 (0x4a), QKeyCode "kp_subtract", number 0x4a +KP_Subtract 0x4a +U2212 0x4a shift +U2212 0x4a altgr +VoidSymbol 0x4a shift altgr + +# evdev 75 (0x4b), QKeyCode "kp_4", number 0x4b +KP_Left 0x4b +KP_4 0x4b numlock + +# evdev 76 (0x4c), QKeyCode "kp_5", number 0x4c +KP_Begin 0x4c +KP_5 0x4c numlock + +# evdev 77 (0x4d), QKeyCode "kp_6", number 0x4d +KP_Right 0x4d +KP_6 0x4d numlock + +# evdev 78 (0x4e), QKeyCode "kp_add", number 0x4e +KP_Add 0x4e +0x0100002b 0x4e shift +0x0100002b 0x4e altgr +VoidSymbol 0x4e shift altgr + +# evdev 79 (0x4f), QKeyCode "kp_1", number 0x4f +KP_End 0x4f +KP_1 0x4f numlock + +# evdev 80 (0x50), QKeyCode "kp_2", number 0x50 +KP_Down 0x50 +KP_2 0x50 numlock + +# evdev 81 (0x51), QKeyCode "kp_3", number 0x51 +KP_Next 0x51 +KP_3 0x51 numlock + +# evdev 82 (0x52), QKeyCode "kp_0", number 0x52 +KP_Insert 0x52 +KP_0 0x52 numlock + +# evdev 83 (0x53), QKeyCode "kp_decimal", number 0x53 +KP_Delete 0x53 +KP_Separator 0x53 numlock + +# evdev 84 (0x54): no evdev -> QKeyCode mapping (xkb keysym ISO_Level3_Shift) + +# evdev 85 (0x55): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 86 (0x56), QKeyCode "less", number 0x56 +less 0x56 +greater 0x56 shift +onehalf 0x56 altgr +threequarters 0x56 shift altgr + +# evdev 87 (0x57), QKeyCode "f11", number 0x57 +F11 0x57 + +# evdev 88 (0x58), QKeyCode "f12", number 0x58 +F12 0x58 + +# evdev 89 (0x59), QKeyCode "ro", number 0x73 + +# evdev 90 (0x5a): no evdev -> QKeyCode mapping (xkb keysym Katakana) + +# evdev 91 (0x5b), QKeyCode "hiragana", number 0x77 +Hiragana 0x77 + +# evdev 92 (0x5c), QKeyCode "henkan", number 0x79 +Henkan_Mode 0x79 + +# evdev 93 (0x5d): no evdev -> QKeyCode mapping (xkb keysym Hiragana_Katakana) + +# evdev 94 (0x5e): no evdev -> QKeyCode mapping (xkb keysym Muhenkan) + +# evdev 95 (0x5f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 96 (0x60), QKeyCode "kp_enter", number 0x9c +KP_Enter 0x9c + +# evdev 97 (0x61), QKeyCode "ctrl_r", number 0x9d +Control_R 0x9d + +# evdev 98 (0x62), QKeyCode "kp_divide", number 0xb5 +KP_Divide 0xb5 +U2215 0xb5 shift +0x010000f7 0xb5 altgr +VoidSymbol 0xb5 shift altgr + +# evdev 99 (0x63), QKeyCode "sysrq", number 0x54 +Print 0x54 + +# evdev 100 (0x64), QKeyCode "alt_r", number 0xb8 +ISO_Level3_Shift 0xb8 + +# evdev 101 (0x65), QKeyCode "lf", number 0x5b +Linefeed 0x5b + +# evdev 102 (0x66), QKeyCode "home", number 0xc7 +Home 0xc7 + +# evdev 103 (0x67), QKeyCode "up", number 0xc8 +Up 0xc8 + +# evdev 104 (0x68), QKeyCode "pgup", number 0xc9 +Prior 0xc9 + +# evdev 105 (0x69), QKeyCode "left", number 0xcb +Left 0xcb + +# evdev 106 (0x6a), QKeyCode "right", number 0xcd +Right 0xcd + +# evdev 107 (0x6b), QKeyCode "end", number 0xcf +End 0xcf + +# evdev 108 (0x6c), QKeyCode "down", number 0xd0 +Down 0xd0 + +# evdev 109 (0x6d), QKeyCode "pgdn", number 0xd1 +Next 0xd1 + +# evdev 110 (0x6e), QKeyCode "insert", number 0xd2 +Insert 0xd2 + +# evdev 111 (0x6f), QKeyCode "delete", number 0xd3 +Delete 0xd3 + +# evdev 112 (0x70): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 113 (0x71), QKeyCode "audiomute", number 0xa0 +XF86AudioMute 0xa0 + +# evdev 114 (0x72), QKeyCode "volumedown", number 0xae +XF86AudioLowerVolume 0xae + +# evdev 115 (0x73), QKeyCode "volumeup", number 0xb0 +XF86AudioRaiseVolume 0xb0 + +# evdev 116 (0x74), QKeyCode "power", number 0xde +XF86PowerOff 0xde + +# evdev 117 (0x75), QKeyCode "kp_equals", number 0x59 +KP_Equal 0x59 + +# evdev 118 (0x76): no evdev -> QKeyCode mapping (xkb keysym plusminus) + +# evdev 119 (0x77), QKeyCode "pause", number 0xc6 +Pause 0xc6 + +# evdev 120 (0x78): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchA) + +# evdev 121 (0x79), QKeyCode "kp_comma", number 0x7e +KP_Decimal 0x7e + +# evdev 122 (0x7a): no evdev -> QKeyCode mapping (xkb keysym Hangul) + +# evdev 123 (0x7b): no evdev -> QKeyCode mapping (xkb keysym Hangul_Hanja) + +# evdev 124 (0x7c), QKeyCode "yen", number 0x7d + +# evdev 125 (0x7d), QKeyCode "meta_l", number 0xdb +Super_L 0xdb + +# evdev 126 (0x7e), QKeyCode "meta_r", number 0xdc +Super_R 0xdc + +# evdev 127 (0x7f), QKeyCode "compose", number 0xdd +Menu 0xdd + +# evdev 128 (0x80), QKeyCode "stop", number 0xe8 +Cancel 0xe8 + +# evdev 129 (0x81), QKeyCode "again", number 0x85 +Redo 0x85 + +# evdev 130 (0x82), QKeyCode "props", number 0x86 +SunProps 0x86 + +# evdev 131 (0x83), QKeyCode "undo", number 0x87 +Undo 0x87 + +# evdev 132 (0x84), QKeyCode "front", number 0x8c +SunFront 0x8c + +# evdev 133 (0x85), QKeyCode "copy", number 0xf8 +XF86Copy 0xf8 + +# evdev 134 (0x86), QKeyCode "open", number 0x64 +XF86Open 0x64 + +# evdev 135 (0x87), QKeyCode "paste", number 0x65 +XF86Paste 0x65 + +# evdev 136 (0x88), QKeyCode "find", number 0xc1 +Find 0xc1 + +# evdev 137 (0x89), QKeyCode "cut", number 0xbc +XF86Cut 0xbc + +# evdev 138 (0x8a), QKeyCode "help", number 0xf5 +Help 0xf5 + +# evdev 139 (0x8b), QKeyCode "menu", number 0x9e +XF86MenuKB 0x9e + +# evdev 140 (0x8c), QKeyCode "calculator", number 0xa1 +XF86Calculator 0xa1 + +# evdev 141 (0x8d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 142 (0x8e), QKeyCode "sleep", number 0xdf +XF86Sleep 0xdf + +# evdev 143 (0x8f), QKeyCode "wake", number 0xe3 +XF86WakeUp 0xe3 + +# evdev 144 (0x90): no evdev -> QKeyCode mapping (xkb keysym XF86Explorer) + +# evdev 145 (0x91): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 146 (0x92): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 147 (0x93): no evdev -> QKeyCode mapping (xkb keysym XF86Xfer) + +# evdev 148 (0x94): no evdev -> QKeyCode mapping (xkb keysym XF86Launch1) + +# evdev 149 (0x95): no evdev -> QKeyCode mapping (xkb keysym XF86Launch2) + +# evdev 150 (0x96): no evdev -> QKeyCode mapping (xkb keysym XF86WWW) + +# evdev 151 (0x97): no evdev -> QKeyCode mapping (xkb keysym XF86DOS) + +# evdev 152 (0x98): no evdev -> QKeyCode mapping (xkb keysym XF86ScreenSaver) + +# evdev 153 (0x99): no evdev -> QKeyCode mapping (xkb keysym XF86RotateWindows) + +# evdev 154 (0x9a): no evdev -> QKeyCode mapping (xkb keysym XF86TaskPane) + +# evdev 155 (0x9b), QKeyCode "mail", number 0xec +XF86Mail 0xec + +# evdev 156 (0x9c), QKeyCode "ac_bookmarks", number 0xe6 +XF86Favorites 0xe6 + +# evdev 157 (0x9d), QKeyCode "computer", number 0xeb +XF86MyComputer 0xeb + +# evdev 158 (0x9e), QKeyCode "ac_back", number 0xea +XF86Back 0xea + +# evdev 159 (0x9f), QKeyCode "ac_forward", number 0xe9 +XF86Forward 0xe9 + +# evdev 160 (0xa0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 161 (0xa1): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 162 (0xa2): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 163 (0xa3), QKeyCode "audionext", number 0x99 +XF86AudioNext 0x99 + +# evdev 164 (0xa4), QKeyCode "audioplay", number 0xa2 +XF86AudioPlay 0xa2 +XF86AudioPause 0xa2 shift + +# evdev 165 (0xa5), QKeyCode "audioprev", number 0x90 +XF86AudioPrev 0x90 + +# evdev 166 (0xa6), QKeyCode "audiostop", number 0xa4 +XF86AudioStop 0xa4 +XF86Eject 0xa4 shift + +# evdev 167 (0xa7): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRecord) + +# evdev 168 (0xa8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRewind) + +# evdev 169 (0xa9): no evdev -> QKeyCode mapping (xkb keysym XF86Phone) + +# evdev 170 (0xaa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 171 (0xab): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 172 (0xac), QKeyCode "ac_home", number 0xb2 +XF86HomePage 0xb2 + +# evdev 173 (0xad), QKeyCode "ac_refresh", number 0xe7 +XF86Reload 0xe7 + +# evdev 174 (0xae): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 175 (0xaf): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 176 (0xb0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 177 (0xb1): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollUp) + +# evdev 178 (0xb2): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollDown) + +# evdev 179 (0xb3): no evdev -> QKeyCode mapping (xkb keysym parenleft) + +# evdev 180 (0xb4): no evdev -> QKeyCode mapping (xkb keysym parenright) + +# evdev 181 (0xb5): no evdev -> QKeyCode mapping (xkb keysym XF86New) + +# evdev 182 (0xb6): no evdev -> QKeyCode mapping (xkb keysym Redo) + +# evdev 183 (0xb7): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 184 (0xb8): no evdev -> QKeyCode mapping (xkb keysym XF86Launch5) + +# evdev 185 (0xb9): no evdev -> QKeyCode mapping (xkb keysym XF86Launch6) + +# evdev 186 (0xba): no evdev -> QKeyCode mapping (xkb keysym XF86Launch7) + +# evdev 187 (0xbb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch8) + +# evdev 188 (0xbc): no evdev -> QKeyCode mapping (xkb keysym XF86Launch9) + +# evdev 189 (0xbd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 190 (0xbe): no evdev -> QKeyCode mapping (xkb keysym XF86AudioMicMute) + +# evdev 191 (0xbf): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadToggle) + +# evdev 192 (0xc0): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOn) + +# evdev 193 (0xc1): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOff) + +# evdev 194 (0xc2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 195 (0xc3): no evdev -> QKeyCode mapping (xkb keysym Mode_switch) + +# evdev 196 (0xc4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 197 (0xc5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 198 (0xc6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 199 (0xc7): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 200 (0xc8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 201 (0xc9): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPause) + +# evdev 202 (0xca): no evdev -> QKeyCode mapping (xkb keysym XF86Launch3) + +# evdev 203 (0xcb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch4) + +# evdev 204 (0xcc): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchB) + +# evdev 205 (0xcd): no evdev -> QKeyCode mapping (xkb keysym XF86Suspend) + +# evdev 206 (0xce): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 207 (0xcf): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 208 (0xd0): no evdev -> QKeyCode mapping (xkb keysym XF86AudioForward) + +# evdev 209 (0xd1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 210 (0xd2): no evdev -> QKeyCode mapping (xkb keysym Print) + +# evdev 211 (0xd3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 212 (0xd4): no evdev -> QKeyCode mapping (xkb keysym XF86WebCam) + +# evdev 213 (0xd5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 214 (0xd6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 215 (0xd7): no evdev -> QKeyCode mapping (xkb keysym XF86Mail) + +# evdev 216 (0xd8): no evdev -> QKeyCode mapping (xkb keysym XF86Messenger) + +# evdev 217 (0xd9): no evdev -> QKeyCode mapping (xkb keysym XF86Search) + +# evdev 218 (0xda): no evdev -> QKeyCode mapping (xkb keysym XF86Go) + +# evdev 219 (0xdb): no evdev -> QKeyCode mapping (xkb keysym XF86Finance) + +# evdev 220 (0xdc): no evdev -> QKeyCode mapping (xkb keysym XF86Game) + +# evdev 221 (0xdd): no evdev -> QKeyCode mapping (xkb keysym XF86Shop) + +# evdev 222 (0xde): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 223 (0xdf): no evdev -> QKeyCode mapping (xkb keysym Cancel) + +# evdev 224 (0xe0): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessDown) + +# evdev 225 (0xe1): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessUp) + +# evdev 226 (0xe2), QKeyCode "mediaselect", number 0xed +XF86AudioMedia 0xed + +# evdev 227 (0xe3): no evdev -> QKeyCode mapping (xkb keysym XF86Display) + +# evdev 228 (0xe4): no evdev -> QKeyCode mapping (xkb keysym XF86KbdLightOnOff) + +# evdev 229 (0xe5): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessDown) + +# evdev 230 (0xe6): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessUp) + +# evdev 231 (0xe7): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 232 (0xe8): no evdev -> QKeyCode mapping (xkb keysym XF86Reply) + +# evdev 233 (0xe9): no evdev -> QKeyCode mapping (xkb keysym XF86MailForward) + +# evdev 234 (0xea): no evdev -> QKeyCode mapping (xkb keysym XF86Save) + +# evdev 235 (0xeb): no evdev -> QKeyCode mapping (xkb keysym XF86Documents) + +# evdev 236 (0xec): no evdev -> QKeyCode mapping (xkb keysym XF86Battery) + +# evdev 237 (0xed): no evdev -> QKeyCode mapping (xkb keysym XF86Bluetooth) + +# evdev 238 (0xee): no evdev -> QKeyCode mapping (xkb keysym XF86WLAN) + +# evdev 239 (0xef): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 240 (0xf0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 241 (0xf1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 242 (0xf2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 243 (0xf3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 244 (0xf4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# +# quirks section start +# +# Sometimes multiple keysyms map to the same keycodes. +# The keycode -> keysym lookup finds only one of the +# keysyms. So append them here. +# + +Print 0x54 +Sys_Req 0x54 +Execute 0x54 +KP_Decimal 0x53 numlock +KP_Separator 0x53 numlock +Alt_R 0xb8 +ISO_Level3_Shift 0xb8 +Mode_switch 0xb8 + +# quirks section end diff --git a/app/src/main/assets/roms/keymaps/pl b/app/src/main/assets/roms/keymaps/pl new file mode 100644 index 0000000..df27206 --- /dev/null +++ b/app/src/main/assets/roms/keymaps/pl @@ -0,0 +1,841 @@ +# +# generated by qemu-keymap +# model : pc105 +# layout : pl +# variant : - +# options : - + +# name: "Polish" + +# modifiers +# 0: Shift +# 1: Lock +# 2: Control +# 3: Mod1 +# 4: Mod2 +# 5: Mod3 +# 6: Mod4 +# 7: Mod5 +# 8: NumLock +# 9: Alt +# 10: LevelThree +# 11: LAlt +# 12: RAlt +# 13: RControl +# 14: LControl +# 15: ScrollLock +# 16: LevelFive +# 17: AltGr +# 18: Meta +# 19: Super +# 20: Hyper + +# evdev 1 (0x1), QKeyCode "esc", number 0x1 +Escape 0x01 + +# evdev 2 (0x2), QKeyCode "1", number 0x2 +1 0x02 +exclam 0x02 shift +notequal 0x02 altgr +exclamdown 0x02 shift altgr + +# evdev 3 (0x3), QKeyCode "2", number 0x3 +2 0x03 +at 0x03 shift +twosuperior 0x03 altgr +questiondown 0x03 shift altgr + +# evdev 4 (0x4), QKeyCode "3", number 0x4 +3 0x04 +numbersign 0x04 shift +threesuperior 0x04 altgr +sterling 0x04 shift altgr + +# evdev 5 (0x5), QKeyCode "4", number 0x5 +4 0x05 +dollar 0x05 shift +cent 0x05 altgr +onequarter 0x05 shift altgr + +# evdev 6 (0x6), QKeyCode "5", number 0x6 +5 0x06 +percent 0x06 shift +EuroSign 0x06 altgr +U2030 0x06 shift altgr + +# evdev 7 (0x7), QKeyCode "6", number 0x7 +6 0x07 +asciicircum 0x07 shift +onehalf 0x07 altgr +logicaland 0x07 shift altgr + +# evdev 8 (0x8), QKeyCode "7", number 0x8 +7 0x08 +ampersand 0x08 shift +section 0x08 altgr +approxeq 0x08 shift altgr + +# evdev 9 (0x9), QKeyCode "8", number 0x9 +8 0x09 +asterisk 0x09 shift +periodcentered 0x09 altgr +threequarters 0x09 shift altgr + +# evdev 10 (0xa), QKeyCode "9", number 0xa +9 0x0a +parenleft 0x0a shift +guillemotleft 0x0a altgr +plusminus 0x0a shift altgr + +# evdev 11 (0xb), QKeyCode "0", number 0xb +0 0x0b +parenright 0x0b shift +guillemotright 0x0b altgr +degree 0x0b shift altgr + +# evdev 12 (0xc), QKeyCode "minus", number 0xc +minus 0x0c +underscore 0x0c shift +endash 0x0c altgr +emdash 0x0c shift altgr + +# evdev 13 (0xd), QKeyCode "equal", number 0xd +equal 0x0d +plus 0x0d shift +dead_cedilla 0x0d altgr +dead_ogonek 0x0d shift altgr + +# evdev 14 (0xe), QKeyCode "backspace", number 0xe +BackSpace 0x0e + +# evdev 15 (0xf), QKeyCode "tab", number 0xf +Tab 0x0f +ISO_Left_Tab 0x0f shift + +# evdev 16 (0x10), QKeyCode "q", number 0x10 +q 0x10 +Q 0x10 shift +Greek_pi 0x10 altgr +Greek_OMEGA 0x10 shift altgr + +# evdev 17 (0x11), QKeyCode "w", number 0x11 +w 0x11 +W 0x11 shift +oe 0x11 altgr +OE 0x11 shift altgr + +# evdev 18 (0x12), QKeyCode "e", number 0x12 +e 0x12 +E 0x12 shift +eogonek 0x12 altgr +Eogonek 0x12 shift altgr + +# evdev 19 (0x13), QKeyCode "r", number 0x13 +r 0x13 +R 0x13 shift +copyright 0x13 altgr +registered 0x13 shift altgr + +# evdev 20 (0x14), QKeyCode "t", number 0x14 +t 0x14 +T 0x14 shift +ssharp 0x14 altgr +trademark 0x14 shift altgr + +# evdev 21 (0x15), QKeyCode "y", number 0x15 +y 0x15 +Y 0x15 shift +leftarrow 0x15 altgr +yen 0x15 shift altgr + +# evdev 22 (0x16), QKeyCode "u", number 0x16 +u 0x16 +U 0x16 shift +downarrow 0x16 altgr +uparrow 0x16 shift altgr + +# evdev 23 (0x17), QKeyCode "i", number 0x17 +i 0x17 +I 0x17 shift +rightarrow 0x17 altgr +U2194 0x17 shift altgr + +# evdev 24 (0x18), QKeyCode "o", number 0x18 +o 0x18 +O 0x18 shift +oacute 0x18 altgr +Oacute 0x18 shift altgr + +# evdev 25 (0x19), QKeyCode "p", number 0x19 +p 0x19 +P 0x19 shift +thorn 0x19 altgr +THORN 0x19 shift altgr + +# evdev 26 (0x1a), QKeyCode "bracket_left", number 0x1a +bracketleft 0x1a +braceleft 0x1a shift +dead_diaeresis 0x1a altgr +dead_abovering 0x1a shift altgr + +# evdev 27 (0x1b), QKeyCode "bracket_right", number 0x1b +bracketright 0x1b +braceright 0x1b shift +dead_tilde 0x1b altgr +dead_macron 0x1b shift altgr + +# evdev 28 (0x1c), QKeyCode "ret", number 0x1c +Return 0x1c + +# evdev 29 (0x1d), QKeyCode "ctrl", number 0x1d +Control_L 0x1d + +# evdev 30 (0x1e), QKeyCode "a", number 0x1e +a 0x1e +A 0x1e shift +aogonek 0x1e altgr +Aogonek 0x1e shift altgr + +# evdev 31 (0x1f), QKeyCode "s", number 0x1f +s 0x1f +S 0x1f shift +sacute 0x1f altgr +Sacute 0x1f shift altgr + +# evdev 32 (0x20), QKeyCode "d", number 0x20 +d 0x20 +D 0x20 shift +eth 0x20 altgr +ETH 0x20 shift altgr + +# evdev 33 (0x21), QKeyCode "f", number 0x21 +f 0x21 +F 0x21 shift +ae 0x21 altgr +AE 0x21 shift altgr + +# evdev 34 (0x22), QKeyCode "g", number 0x22 +g 0x22 +G 0x22 shift +eng 0x22 altgr +ENG 0x22 shift altgr + +# evdev 35 (0x23), QKeyCode "h", number 0x23 +h 0x23 +H 0x23 shift +rightsinglequotemark 0x23 altgr +U2022 0x23 shift altgr + +# evdev 36 (0x24), QKeyCode "j", number 0x24 +j 0x24 +J 0x24 shift +schwa 0x24 altgr +SCHWA 0x24 shift altgr + +# evdev 37 (0x25), QKeyCode "k", number 0x25 +k 0x25 +K 0x25 shift +ellipsis 0x25 altgr +dead_stroke 0x25 shift altgr + +# evdev 38 (0x26), QKeyCode "l", number 0x26 +l 0x26 +L 0x26 shift +lstroke 0x26 altgr +Lstroke 0x26 shift altgr + +# evdev 39 (0x27), QKeyCode "semicolon", number 0x27 +semicolon 0x27 +colon 0x27 shift +dead_acute 0x27 altgr +dead_doubleacute 0x27 shift altgr + +# evdev 40 (0x28), QKeyCode "apostrophe", number 0x28 +apostrophe 0x28 +quotedbl 0x28 shift +dead_circumflex 0x28 altgr +dead_caron 0x28 shift altgr + +# evdev 41 (0x29), QKeyCode "grave_accent", number 0x29 +grave 0x29 +asciitilde 0x29 shift +notsign 0x29 altgr +logicalor 0x29 shift altgr + +# evdev 42 (0x2a), QKeyCode "shift", number 0x2a +Shift_L 0x2a + +# evdev 43 (0x2b), QKeyCode "backslash", number 0x2b +backslash 0x2b +bar 0x2b shift +dead_grave 0x2b altgr +dead_breve 0x2b shift altgr + +# evdev 44 (0x2c), QKeyCode "z", number 0x2c +z 0x2c +Z 0x2c shift +zabovedot 0x2c altgr +Zabovedot 0x2c shift altgr + +# evdev 45 (0x2d), QKeyCode "x", number 0x2d +x 0x2d +X 0x2d shift +zacute 0x2d altgr +Zacute 0x2d shift altgr + +# evdev 46 (0x2e), QKeyCode "c", number 0x2e +c 0x2e +C 0x2e shift +cacute 0x2e altgr +Cacute 0x2e shift altgr + +# evdev 47 (0x2f), QKeyCode "v", number 0x2f +v 0x2f +V 0x2f shift +doublelowquotemark 0x2f altgr +leftsinglequotemark 0x2f shift altgr + +# evdev 48 (0x30), QKeyCode "b", number 0x30 +b 0x30 +B 0x30 shift +rightdoublequotemark 0x30 altgr +leftdoublequotemark 0x30 shift altgr + +# evdev 49 (0x31), QKeyCode "n", number 0x31 +n 0x31 +N 0x31 shift +nacute 0x31 altgr +Nacute 0x31 shift altgr + +# evdev 50 (0x32), QKeyCode "m", number 0x32 +m 0x32 +M 0x32 shift +mu 0x32 altgr +infinity 0x32 shift altgr + +# evdev 51 (0x33), QKeyCode "comma", number 0x33 +comma 0x33 +less 0x33 shift +lessthanequal 0x33 altgr +multiply 0x33 shift altgr + +# evdev 52 (0x34), QKeyCode "dot", number 0x34 +period 0x34 +greater 0x34 shift +greaterthanequal 0x34 altgr +division 0x34 shift altgr + +# evdev 53 (0x35), QKeyCode "slash", number 0x35 +slash 0x35 +question 0x35 shift +dead_belowdot 0x35 altgr +dead_abovedot 0x35 shift altgr + +# evdev 54 (0x36), QKeyCode "shift_r", number 0x36 +Shift_R 0x36 + +# evdev 55 (0x37), QKeyCode "kp_multiply", number 0x37 +KP_Multiply 0x37 + +# evdev 56 (0x38), QKeyCode "alt", number 0x38 +Alt_L 0x38 +Meta_L 0x38 shift + +# evdev 57 (0x39), QKeyCode "spc", number 0x39 +space 0x39 +nobreakspace 0x39 altgr + +# evdev 58 (0x3a), QKeyCode "caps_lock", number 0x3a +Caps_Lock 0x3a + +# evdev 59 (0x3b), QKeyCode "f1", number 0x3b +F1 0x3b + +# evdev 60 (0x3c), QKeyCode "f2", number 0x3c +F2 0x3c + +# evdev 61 (0x3d), QKeyCode "f3", number 0x3d +F3 0x3d + +# evdev 62 (0x3e), QKeyCode "f4", number 0x3e +F4 0x3e + +# evdev 63 (0x3f), QKeyCode "f5", number 0x3f +F5 0x3f + +# evdev 64 (0x40), QKeyCode "f6", number 0x40 +F6 0x40 + +# evdev 65 (0x41), QKeyCode "f7", number 0x41 +F7 0x41 + +# evdev 66 (0x42), QKeyCode "f8", number 0x42 +F8 0x42 + +# evdev 67 (0x43), QKeyCode "f9", number 0x43 +F9 0x43 + +# evdev 68 (0x44), QKeyCode "f10", number 0x44 +F10 0x44 + +# evdev 69 (0x45), QKeyCode "num_lock", number 0x45 +Num_Lock 0x45 + +# evdev 70 (0x46), QKeyCode "scroll_lock", number 0x46 +Scroll_Lock 0x46 + +# evdev 71 (0x47), QKeyCode "kp_7", number 0x47 +KP_Home 0x47 +KP_7 0x47 numlock + +# evdev 72 (0x48), QKeyCode "kp_8", number 0x48 +KP_Up 0x48 +KP_8 0x48 numlock + +# evdev 73 (0x49), QKeyCode "kp_9", number 0x49 +KP_Prior 0x49 +KP_9 0x49 numlock + +# evdev 74 (0x4a), QKeyCode "kp_subtract", number 0x4a +KP_Subtract 0x4a + +# evdev 75 (0x4b), QKeyCode "kp_4", number 0x4b +KP_Left 0x4b +KP_4 0x4b numlock + +# evdev 76 (0x4c), QKeyCode "kp_5", number 0x4c +KP_Begin 0x4c +KP_5 0x4c numlock + +# evdev 77 (0x4d), QKeyCode "kp_6", number 0x4d +KP_Right 0x4d +KP_6 0x4d numlock + +# evdev 78 (0x4e), QKeyCode "kp_add", number 0x4e +KP_Add 0x4e + +# evdev 79 (0x4f), QKeyCode "kp_1", number 0x4f +KP_End 0x4f +KP_1 0x4f numlock + +# evdev 80 (0x50), QKeyCode "kp_2", number 0x50 +KP_Down 0x50 +KP_2 0x50 numlock + +# evdev 81 (0x51), QKeyCode "kp_3", number 0x51 +KP_Next 0x51 +KP_3 0x51 numlock + +# evdev 82 (0x52), QKeyCode "kp_0", number 0x52 +KP_Insert 0x52 +KP_0 0x52 numlock + +# evdev 83 (0x53), QKeyCode "kp_decimal", number 0x53 +KP_Delete 0x53 +KP_Separator 0x53 numlock + +# evdev 84 (0x54): no evdev -> QKeyCode mapping (xkb keysym ISO_Level3_Shift) + +# evdev 85 (0x55): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 86 (0x56), QKeyCode "less", number 0x56 +less 0x56 +greater 0x56 shift +bar 0x56 altgr +brokenbar 0x56 shift altgr + +# evdev 87 (0x57), QKeyCode "f11", number 0x57 +F11 0x57 + +# evdev 88 (0x58), QKeyCode "f12", number 0x58 +F12 0x58 + +# evdev 89 (0x59), QKeyCode "ro", number 0x73 + +# evdev 90 (0x5a): no evdev -> QKeyCode mapping (xkb keysym Katakana) + +# evdev 91 (0x5b), QKeyCode "hiragana", number 0x77 +Hiragana 0x77 + +# evdev 92 (0x5c), QKeyCode "henkan", number 0x79 +Henkan_Mode 0x79 + +# evdev 93 (0x5d): no evdev -> QKeyCode mapping (xkb keysym Hiragana_Katakana) + +# evdev 94 (0x5e): no evdev -> QKeyCode mapping (xkb keysym Muhenkan) + +# evdev 95 (0x5f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 96 (0x60), QKeyCode "kp_enter", number 0x9c +KP_Enter 0x9c + +# evdev 97 (0x61), QKeyCode "ctrl_r", number 0x9d +Control_R 0x9d + +# evdev 98 (0x62), QKeyCode "kp_divide", number 0xb5 +KP_Divide 0xb5 + +# evdev 99 (0x63), QKeyCode "sysrq", number 0x54 +Print 0x54 + +# evdev 100 (0x64), QKeyCode "alt_r", number 0xb8 +ISO_Level3_Shift 0xb8 + +# evdev 101 (0x65), QKeyCode "lf", number 0x5b +Linefeed 0x5b + +# evdev 102 (0x66), QKeyCode "home", number 0xc7 +Home 0xc7 + +# evdev 103 (0x67), QKeyCode "up", number 0xc8 +Up 0xc8 + +# evdev 104 (0x68), QKeyCode "pgup", number 0xc9 +Prior 0xc9 + +# evdev 105 (0x69), QKeyCode "left", number 0xcb +Left 0xcb + +# evdev 106 (0x6a), QKeyCode "right", number 0xcd +Right 0xcd + +# evdev 107 (0x6b), QKeyCode "end", number 0xcf +End 0xcf + +# evdev 108 (0x6c), QKeyCode "down", number 0xd0 +Down 0xd0 + +# evdev 109 (0x6d), QKeyCode "pgdn", number 0xd1 +Next 0xd1 + +# evdev 110 (0x6e), QKeyCode "insert", number 0xd2 +Insert 0xd2 + +# evdev 111 (0x6f), QKeyCode "delete", number 0xd3 +Delete 0xd3 + +# evdev 112 (0x70): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 113 (0x71), QKeyCode "audiomute", number 0xa0 +XF86AudioMute 0xa0 + +# evdev 114 (0x72), QKeyCode "volumedown", number 0xae +XF86AudioLowerVolume 0xae + +# evdev 115 (0x73), QKeyCode "volumeup", number 0xb0 +XF86AudioRaiseVolume 0xb0 + +# evdev 116 (0x74), QKeyCode "power", number 0xde +XF86PowerOff 0xde + +# evdev 117 (0x75), QKeyCode "kp_equals", number 0x59 +KP_Equal 0x59 + +# evdev 118 (0x76): no evdev -> QKeyCode mapping (xkb keysym plusminus) + +# evdev 119 (0x77), QKeyCode "pause", number 0xc6 +Pause 0xc6 + +# evdev 120 (0x78): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchA) + +# evdev 121 (0x79), QKeyCode "kp_comma", number 0x7e +KP_Decimal 0x7e + +# evdev 122 (0x7a): no evdev -> QKeyCode mapping (xkb keysym Hangul) + +# evdev 123 (0x7b): no evdev -> QKeyCode mapping (xkb keysym Hangul_Hanja) + +# evdev 124 (0x7c), QKeyCode "yen", number 0x7d + +# evdev 125 (0x7d), QKeyCode "meta_l", number 0xdb +Super_L 0xdb + +# evdev 126 (0x7e), QKeyCode "meta_r", number 0xdc +Super_R 0xdc + +# evdev 127 (0x7f), QKeyCode "compose", number 0xdd +Menu 0xdd + +# evdev 128 (0x80), QKeyCode "stop", number 0xe8 +Cancel 0xe8 + +# evdev 129 (0x81), QKeyCode "again", number 0x85 +Redo 0x85 + +# evdev 130 (0x82), QKeyCode "props", number 0x86 +SunProps 0x86 + +# evdev 131 (0x83), QKeyCode "undo", number 0x87 +Undo 0x87 + +# evdev 132 (0x84), QKeyCode "front", number 0x8c +SunFront 0x8c + +# evdev 133 (0x85), QKeyCode "copy", number 0xf8 +XF86Copy 0xf8 + +# evdev 134 (0x86), QKeyCode "open", number 0x64 +XF86Open 0x64 + +# evdev 135 (0x87), QKeyCode "paste", number 0x65 +XF86Paste 0x65 + +# evdev 136 (0x88), QKeyCode "find", number 0xc1 +Find 0xc1 + +# evdev 137 (0x89), QKeyCode "cut", number 0xbc +XF86Cut 0xbc + +# evdev 138 (0x8a), QKeyCode "help", number 0xf5 +Help 0xf5 + +# evdev 139 (0x8b), QKeyCode "menu", number 0x9e +XF86MenuKB 0x9e + +# evdev 140 (0x8c), QKeyCode "calculator", number 0xa1 +XF86Calculator 0xa1 + +# evdev 141 (0x8d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 142 (0x8e), QKeyCode "sleep", number 0xdf +XF86Sleep 0xdf + +# evdev 143 (0x8f), QKeyCode "wake", number 0xe3 +XF86WakeUp 0xe3 + +# evdev 144 (0x90): no evdev -> QKeyCode mapping (xkb keysym XF86Explorer) + +# evdev 145 (0x91): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 146 (0x92): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 147 (0x93): no evdev -> QKeyCode mapping (xkb keysym XF86Xfer) + +# evdev 148 (0x94): no evdev -> QKeyCode mapping (xkb keysym XF86Launch1) + +# evdev 149 (0x95): no evdev -> QKeyCode mapping (xkb keysym XF86Launch2) + +# evdev 150 (0x96): no evdev -> QKeyCode mapping (xkb keysym XF86WWW) + +# evdev 151 (0x97): no evdev -> QKeyCode mapping (xkb keysym XF86DOS) + +# evdev 152 (0x98): no evdev -> QKeyCode mapping (xkb keysym XF86ScreenSaver) + +# evdev 153 (0x99): no evdev -> QKeyCode mapping (xkb keysym XF86RotateWindows) + +# evdev 154 (0x9a): no evdev -> QKeyCode mapping (xkb keysym XF86TaskPane) + +# evdev 155 (0x9b), QKeyCode "mail", number 0xec +XF86Mail 0xec + +# evdev 156 (0x9c), QKeyCode "ac_bookmarks", number 0xe6 +XF86Favorites 0xe6 + +# evdev 157 (0x9d), QKeyCode "computer", number 0xeb +XF86MyComputer 0xeb + +# evdev 158 (0x9e), QKeyCode "ac_back", number 0xea +XF86Back 0xea + +# evdev 159 (0x9f), QKeyCode "ac_forward", number 0xe9 +XF86Forward 0xe9 + +# evdev 160 (0xa0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 161 (0xa1): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 162 (0xa2): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 163 (0xa3), QKeyCode "audionext", number 0x99 +XF86AudioNext 0x99 + +# evdev 164 (0xa4), QKeyCode "audioplay", number 0xa2 +XF86AudioPlay 0xa2 +XF86AudioPause 0xa2 shift + +# evdev 165 (0xa5), QKeyCode "audioprev", number 0x90 +XF86AudioPrev 0x90 + +# evdev 166 (0xa6), QKeyCode "audiostop", number 0xa4 +XF86AudioStop 0xa4 +XF86Eject 0xa4 shift + +# evdev 167 (0xa7): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRecord) + +# evdev 168 (0xa8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRewind) + +# evdev 169 (0xa9): no evdev -> QKeyCode mapping (xkb keysym XF86Phone) + +# evdev 170 (0xaa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 171 (0xab): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 172 (0xac), QKeyCode "ac_home", number 0xb2 +XF86HomePage 0xb2 + +# evdev 173 (0xad), QKeyCode "ac_refresh", number 0xe7 +XF86Reload 0xe7 + +# evdev 174 (0xae): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 175 (0xaf): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 176 (0xb0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 177 (0xb1): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollUp) + +# evdev 178 (0xb2): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollDown) + +# evdev 179 (0xb3): no evdev -> QKeyCode mapping (xkb keysym parenleft) + +# evdev 180 (0xb4): no evdev -> QKeyCode mapping (xkb keysym parenright) + +# evdev 181 (0xb5): no evdev -> QKeyCode mapping (xkb keysym XF86New) + +# evdev 182 (0xb6): no evdev -> QKeyCode mapping (xkb keysym Redo) + +# evdev 183 (0xb7): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 184 (0xb8): no evdev -> QKeyCode mapping (xkb keysym XF86Launch5) + +# evdev 185 (0xb9): no evdev -> QKeyCode mapping (xkb keysym XF86Launch6) + +# evdev 186 (0xba): no evdev -> QKeyCode mapping (xkb keysym XF86Launch7) + +# evdev 187 (0xbb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch8) + +# evdev 188 (0xbc): no evdev -> QKeyCode mapping (xkb keysym XF86Launch9) + +# evdev 189 (0xbd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 190 (0xbe): no evdev -> QKeyCode mapping (xkb keysym XF86AudioMicMute) + +# evdev 191 (0xbf): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadToggle) + +# evdev 192 (0xc0): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOn) + +# evdev 193 (0xc1): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOff) + +# evdev 194 (0xc2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 195 (0xc3): no evdev -> QKeyCode mapping (xkb keysym Mode_switch) + +# evdev 196 (0xc4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 197 (0xc5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 198 (0xc6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 199 (0xc7): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 200 (0xc8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 201 (0xc9): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPause) + +# evdev 202 (0xca): no evdev -> QKeyCode mapping (xkb keysym XF86Launch3) + +# evdev 203 (0xcb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch4) + +# evdev 204 (0xcc): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchB) + +# evdev 205 (0xcd): no evdev -> QKeyCode mapping (xkb keysym XF86Suspend) + +# evdev 206 (0xce): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 207 (0xcf): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 208 (0xd0): no evdev -> QKeyCode mapping (xkb keysym XF86AudioForward) + +# evdev 209 (0xd1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 210 (0xd2): no evdev -> QKeyCode mapping (xkb keysym Print) + +# evdev 211 (0xd3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 212 (0xd4): no evdev -> QKeyCode mapping (xkb keysym XF86WebCam) + +# evdev 213 (0xd5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 214 (0xd6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 215 (0xd7): no evdev -> QKeyCode mapping (xkb keysym XF86Mail) + +# evdev 216 (0xd8): no evdev -> QKeyCode mapping (xkb keysym XF86Messenger) + +# evdev 217 (0xd9): no evdev -> QKeyCode mapping (xkb keysym XF86Search) + +# evdev 218 (0xda): no evdev -> QKeyCode mapping (xkb keysym XF86Go) + +# evdev 219 (0xdb): no evdev -> QKeyCode mapping (xkb keysym XF86Finance) + +# evdev 220 (0xdc): no evdev -> QKeyCode mapping (xkb keysym XF86Game) + +# evdev 221 (0xdd): no evdev -> QKeyCode mapping (xkb keysym XF86Shop) + +# evdev 222 (0xde): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 223 (0xdf): no evdev -> QKeyCode mapping (xkb keysym Cancel) + +# evdev 224 (0xe0): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessDown) + +# evdev 225 (0xe1): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessUp) + +# evdev 226 (0xe2), QKeyCode "mediaselect", number 0xed +XF86AudioMedia 0xed + +# evdev 227 (0xe3): no evdev -> QKeyCode mapping (xkb keysym XF86Display) + +# evdev 228 (0xe4): no evdev -> QKeyCode mapping (xkb keysym XF86KbdLightOnOff) + +# evdev 229 (0xe5): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessDown) + +# evdev 230 (0xe6): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessUp) + +# evdev 231 (0xe7): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 232 (0xe8): no evdev -> QKeyCode mapping (xkb keysym XF86Reply) + +# evdev 233 (0xe9): no evdev -> QKeyCode mapping (xkb keysym XF86MailForward) + +# evdev 234 (0xea): no evdev -> QKeyCode mapping (xkb keysym XF86Save) + +# evdev 235 (0xeb): no evdev -> QKeyCode mapping (xkb keysym XF86Documents) + +# evdev 236 (0xec): no evdev -> QKeyCode mapping (xkb keysym XF86Battery) + +# evdev 237 (0xed): no evdev -> QKeyCode mapping (xkb keysym XF86Bluetooth) + +# evdev 238 (0xee): no evdev -> QKeyCode mapping (xkb keysym XF86WLAN) + +# evdev 239 (0xef): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 240 (0xf0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 241 (0xf1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 242 (0xf2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 243 (0xf3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 244 (0xf4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# +# quirks section start +# +# Sometimes multiple keysyms map to the same keycodes. +# The keycode -> keysym lookup finds only one of the +# keysyms. So append them here. +# + +Print 0x54 +Sys_Req 0x54 +Execute 0x54 +KP_Decimal 0x53 numlock +KP_Separator 0x53 numlock +Alt_R 0xb8 +ISO_Level3_Shift 0xb8 +Mode_switch 0xb8 + +# quirks section end diff --git a/app/src/main/assets/roms/keymaps/pt b/app/src/main/assets/roms/keymaps/pt new file mode 100644 index 0000000..ab59001 --- /dev/null +++ b/app/src/main/assets/roms/keymaps/pt @@ -0,0 +1,834 @@ +# +# generated by qemu-keymap +# model : pc105 +# layout : pt +# variant : - +# options : - + +# name: "Portuguese" + +# modifiers +# 0: Shift +# 1: Lock +# 2: Control +# 3: Mod1 +# 4: Mod2 +# 5: Mod3 +# 6: Mod4 +# 7: Mod5 +# 8: NumLock +# 9: Alt +# 10: LevelThree +# 11: LAlt +# 12: RAlt +# 13: RControl +# 14: LControl +# 15: ScrollLock +# 16: LevelFive +# 17: AltGr +# 18: Meta +# 19: Super +# 20: Hyper + +# evdev 1 (0x1), QKeyCode "esc", number 0x1 +Escape 0x01 + +# evdev 2 (0x2), QKeyCode "1", number 0x2 +1 0x02 +exclam 0x02 shift +onesuperior 0x02 altgr +exclamdown 0x02 shift altgr + +# evdev 3 (0x3), QKeyCode "2", number 0x3 +2 0x03 +quotedbl 0x03 shift +at 0x03 altgr +oneeighth 0x03 shift altgr + +# evdev 4 (0x4), QKeyCode "3", number 0x4 +3 0x04 +numbersign 0x04 shift +sterling 0x04 altgr + +# evdev 5 (0x5), QKeyCode "4", number 0x5 +4 0x05 +dollar 0x05 shift +section 0x05 altgr + +# evdev 6 (0x6), QKeyCode "5", number 0x6 +5 0x06 +percent 0x06 shift +onehalf 0x06 altgr +threeeighths 0x06 shift altgr + +# evdev 7 (0x7), QKeyCode "6", number 0x7 +6 0x07 +ampersand 0x07 shift +notsign 0x07 altgr +fiveeighths 0x07 shift altgr + +# evdev 8 (0x8), QKeyCode "7", number 0x8 +7 0x08 +slash 0x08 shift +braceleft 0x08 altgr +seveneighths 0x08 shift altgr + +# evdev 9 (0x9), QKeyCode "8", number 0x9 +8 0x09 +parenleft 0x09 shift +bracketleft 0x09 altgr +trademark 0x09 shift altgr + +# evdev 10 (0xa), QKeyCode "9", number 0xa +9 0x0a +parenright 0x0a shift +bracketright 0x0a altgr +plusminus 0x0a shift altgr + +# evdev 11 (0xb), QKeyCode "0", number 0xb +0 0x0b +equal 0x0b shift +braceright 0x0b altgr +degree 0x0b shift altgr + +# evdev 12 (0xc), QKeyCode "minus", number 0xc +apostrophe 0x0c +question 0x0c shift +backslash 0x0c altgr +questiondown 0x0c shift altgr + +# evdev 13 (0xd), QKeyCode "equal", number 0xd +guillemotleft 0x0d +guillemotright 0x0d shift +dead_cedilla 0x0d altgr +dead_ogonek 0x0d shift altgr + +# evdev 14 (0xe), QKeyCode "backspace", number 0xe +BackSpace 0x0e + +# evdev 15 (0xf), QKeyCode "tab", number 0xf +Tab 0x0f +ISO_Left_Tab 0x0f shift + +# evdev 16 (0x10), QKeyCode "q", number 0x10 +q 0x10 +Q 0x10 shift +at 0x10 altgr +Greek_OMEGA 0x10 shift altgr + +# evdev 17 (0x11), QKeyCode "w", number 0x11 +w 0x11 +W 0x11 shift +lstroke 0x11 altgr +Lstroke 0x11 shift altgr + +# evdev 18 (0x12), QKeyCode "e", number 0x12 +e 0x12 +E 0x12 shift +EuroSign 0x12 altgr +cent 0x12 shift altgr + +# evdev 19 (0x13), QKeyCode "r", number 0x13 +r 0x13 +R 0x13 shift +paragraph 0x13 altgr +registered 0x13 shift altgr + +# evdev 20 (0x14), QKeyCode "t", number 0x14 +t 0x14 +T 0x14 shift +tslash 0x14 altgr +Tslash 0x14 shift altgr + +# evdev 21 (0x15), QKeyCode "y", number 0x15 +y 0x15 +Y 0x15 shift +leftarrow 0x15 altgr +yen 0x15 shift altgr + +# evdev 22 (0x16), QKeyCode "u", number 0x16 +u 0x16 +U 0x16 shift +downarrow 0x16 altgr +uparrow 0x16 shift altgr + +# evdev 23 (0x17), QKeyCode "i", number 0x17 +i 0x17 +I 0x17 shift +rightarrow 0x17 altgr +idotless 0x17 shift altgr + +# evdev 24 (0x18), QKeyCode "o", number 0x18 +o 0x18 +O 0x18 shift +oslash 0x18 altgr +Oslash 0x18 shift altgr + +# evdev 25 (0x19), QKeyCode "p", number 0x19 +p 0x19 +P 0x19 shift +thorn 0x19 altgr +THORN 0x19 shift altgr + +# evdev 26 (0x1a), QKeyCode "bracket_left", number 0x1a +plus 0x1a +asterisk 0x1a shift +dead_diaeresis 0x1a altgr +dead_abovering 0x1a shift altgr + +# evdev 27 (0x1b), QKeyCode "bracket_right", number 0x1b +dead_acute 0x1b +dead_grave 0x1b shift +dead_tilde 0x1b altgr +dead_macron 0x1b shift altgr + +# evdev 28 (0x1c), QKeyCode "ret", number 0x1c +Return 0x1c + +# evdev 29 (0x1d), QKeyCode "ctrl", number 0x1d +Control_L 0x1d + +# evdev 30 (0x1e), QKeyCode "a", number 0x1e +a 0x1e +A 0x1e shift +ae 0x1e altgr +AE 0x1e shift altgr + +# evdev 31 (0x1f), QKeyCode "s", number 0x1f +s 0x1f +S 0x1f shift +ssharp 0x1f altgr +section 0x1f shift altgr + +# evdev 32 (0x20), QKeyCode "d", number 0x20 +d 0x20 +D 0x20 shift +eth 0x20 altgr +ETH 0x20 shift altgr + +# evdev 33 (0x21), QKeyCode "f", number 0x21 +f 0x21 +F 0x21 shift +dstroke 0x21 altgr +ordfeminine 0x21 shift altgr + +# evdev 34 (0x22), QKeyCode "g", number 0x22 +g 0x22 +G 0x22 shift +eng 0x22 altgr +ENG 0x22 shift altgr + +# evdev 35 (0x23), QKeyCode "h", number 0x23 +h 0x23 +H 0x23 shift +hstroke 0x23 altgr +Hstroke 0x23 shift altgr + +# evdev 36 (0x24), QKeyCode "j", number 0x24 +j 0x24 +J 0x24 shift +dead_hook 0x24 altgr +dead_horn 0x24 shift altgr + +# evdev 37 (0x25), QKeyCode "k", number 0x25 +k 0x25 +K 0x25 shift +kra 0x25 altgr +ampersand 0x25 shift altgr + +# evdev 38 (0x26), QKeyCode "l", number 0x26 +l 0x26 +L 0x26 shift +lstroke 0x26 altgr +Lstroke 0x26 shift altgr + +# evdev 39 (0x27), QKeyCode "semicolon", number 0x27 +ccedilla 0x27 +Ccedilla 0x27 shift +dead_acute 0x27 altgr +dead_doubleacute 0x27 shift altgr + +# evdev 40 (0x28), QKeyCode "apostrophe", number 0x28 +masculine 0x28 +ordfeminine 0x28 shift +dead_circumflex 0x28 altgr +dead_caron 0x28 shift altgr + +# evdev 41 (0x29), QKeyCode "grave_accent", number 0x29 +backslash 0x29 +bar 0x29 shift +notsign 0x29 altgr + +# evdev 42 (0x2a), QKeyCode "shift", number 0x2a +Shift_L 0x2a + +# evdev 43 (0x2b), QKeyCode "backslash", number 0x2b +dead_tilde 0x2b +dead_circumflex 0x2b shift +dead_grave 0x2b altgr +dead_breve 0x2b shift altgr + +# evdev 44 (0x2c), QKeyCode "z", number 0x2c +z 0x2c +Z 0x2c shift +guillemotleft 0x2c altgr +less 0x2c shift altgr + +# evdev 45 (0x2d), QKeyCode "x", number 0x2d +x 0x2d +X 0x2d shift +guillemotright 0x2d altgr +greater 0x2d shift altgr + +# evdev 46 (0x2e), QKeyCode "c", number 0x2e +c 0x2e +C 0x2e shift +cent 0x2e altgr +copyright 0x2e shift altgr + +# evdev 47 (0x2f), QKeyCode "v", number 0x2f +v 0x2f +V 0x2f shift +leftdoublequotemark 0x2f altgr +leftsinglequotemark 0x2f shift altgr + +# evdev 48 (0x30), QKeyCode "b", number 0x30 +b 0x30 +B 0x30 shift +rightdoublequotemark 0x30 altgr +rightsinglequotemark 0x30 shift altgr + +# evdev 49 (0x31), QKeyCode "n", number 0x31 +n 0x31 +N 0x31 shift + +# evdev 50 (0x32), QKeyCode "m", number 0x32 +m 0x32 +M 0x32 shift +mu 0x32 altgr +masculine 0x32 shift altgr + +# evdev 51 (0x33), QKeyCode "comma", number 0x33 +comma 0x33 +semicolon 0x33 shift +horizconnector 0x33 altgr +multiply 0x33 shift altgr + +# evdev 52 (0x34), QKeyCode "dot", number 0x34 +period 0x34 +colon 0x34 shift +periodcentered 0x34 altgr +division 0x34 shift altgr + +# evdev 53 (0x35), QKeyCode "slash", number 0x35 +minus 0x35 +underscore 0x35 shift +dead_belowdot 0x35 altgr +dead_abovedot 0x35 shift altgr + +# evdev 54 (0x36), QKeyCode "shift_r", number 0x36 +Shift_R 0x36 + +# evdev 55 (0x37), QKeyCode "kp_multiply", number 0x37 +KP_Multiply 0x37 + +# evdev 56 (0x38), QKeyCode "alt", number 0x38 +Alt_L 0x38 +Meta_L 0x38 shift + +# evdev 57 (0x39), QKeyCode "spc", number 0x39 +space 0x39 + +# evdev 58 (0x3a), QKeyCode "caps_lock", number 0x3a +Caps_Lock 0x3a + +# evdev 59 (0x3b), QKeyCode "f1", number 0x3b +F1 0x3b + +# evdev 60 (0x3c), QKeyCode "f2", number 0x3c +F2 0x3c + +# evdev 61 (0x3d), QKeyCode "f3", number 0x3d +F3 0x3d + +# evdev 62 (0x3e), QKeyCode "f4", number 0x3e +F4 0x3e + +# evdev 63 (0x3f), QKeyCode "f5", number 0x3f +F5 0x3f + +# evdev 64 (0x40), QKeyCode "f6", number 0x40 +F6 0x40 + +# evdev 65 (0x41), QKeyCode "f7", number 0x41 +F7 0x41 + +# evdev 66 (0x42), QKeyCode "f8", number 0x42 +F8 0x42 + +# evdev 67 (0x43), QKeyCode "f9", number 0x43 +F9 0x43 + +# evdev 68 (0x44), QKeyCode "f10", number 0x44 +F10 0x44 + +# evdev 69 (0x45), QKeyCode "num_lock", number 0x45 +Num_Lock 0x45 + +# evdev 70 (0x46), QKeyCode "scroll_lock", number 0x46 +Scroll_Lock 0x46 + +# evdev 71 (0x47), QKeyCode "kp_7", number 0x47 +KP_Home 0x47 +KP_7 0x47 numlock + +# evdev 72 (0x48), QKeyCode "kp_8", number 0x48 +KP_Up 0x48 +KP_8 0x48 numlock + +# evdev 73 (0x49), QKeyCode "kp_9", number 0x49 +KP_Prior 0x49 +KP_9 0x49 numlock + +# evdev 74 (0x4a), QKeyCode "kp_subtract", number 0x4a +KP_Subtract 0x4a + +# evdev 75 (0x4b), QKeyCode "kp_4", number 0x4b +KP_Left 0x4b +KP_4 0x4b numlock + +# evdev 76 (0x4c), QKeyCode "kp_5", number 0x4c +KP_Begin 0x4c +KP_5 0x4c numlock + +# evdev 77 (0x4d), QKeyCode "kp_6", number 0x4d +KP_Right 0x4d +KP_6 0x4d numlock + +# evdev 78 (0x4e), QKeyCode "kp_add", number 0x4e +KP_Add 0x4e + +# evdev 79 (0x4f), QKeyCode "kp_1", number 0x4f +KP_End 0x4f +KP_1 0x4f numlock + +# evdev 80 (0x50), QKeyCode "kp_2", number 0x50 +KP_Down 0x50 +KP_2 0x50 numlock + +# evdev 81 (0x51), QKeyCode "kp_3", number 0x51 +KP_Next 0x51 +KP_3 0x51 numlock + +# evdev 82 (0x52), QKeyCode "kp_0", number 0x52 +KP_Insert 0x52 +KP_0 0x52 numlock + +# evdev 83 (0x53), QKeyCode "kp_decimal", number 0x53 +KP_Delete 0x53 +KP_Decimal 0x53 numlock + +# evdev 84 (0x54): no evdev -> QKeyCode mapping (xkb keysym ISO_Level3_Shift) + +# evdev 85 (0x55): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 86 (0x56), QKeyCode "less", number 0x56 +less 0x56 +greater 0x56 shift +backslash 0x56 altgr + +# evdev 87 (0x57), QKeyCode "f11", number 0x57 +F11 0x57 + +# evdev 88 (0x58), QKeyCode "f12", number 0x58 +F12 0x58 + +# evdev 89 (0x59), QKeyCode "ro", number 0x73 + +# evdev 90 (0x5a): no evdev -> QKeyCode mapping (xkb keysym Katakana) + +# evdev 91 (0x5b), QKeyCode "hiragana", number 0x77 +Hiragana 0x77 + +# evdev 92 (0x5c), QKeyCode "henkan", number 0x79 +Henkan_Mode 0x79 + +# evdev 93 (0x5d): no evdev -> QKeyCode mapping (xkb keysym Hiragana_Katakana) + +# evdev 94 (0x5e): no evdev -> QKeyCode mapping (xkb keysym Muhenkan) + +# evdev 95 (0x5f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 96 (0x60), QKeyCode "kp_enter", number 0x9c +KP_Enter 0x9c + +# evdev 97 (0x61), QKeyCode "ctrl_r", number 0x9d +Control_R 0x9d + +# evdev 98 (0x62), QKeyCode "kp_divide", number 0xb5 +KP_Divide 0xb5 + +# evdev 99 (0x63), QKeyCode "sysrq", number 0x54 +Print 0x54 + +# evdev 100 (0x64), QKeyCode "alt_r", number 0xb8 +ISO_Level3_Shift 0xb8 + +# evdev 101 (0x65), QKeyCode "lf", number 0x5b +Linefeed 0x5b + +# evdev 102 (0x66), QKeyCode "home", number 0xc7 +Home 0xc7 + +# evdev 103 (0x67), QKeyCode "up", number 0xc8 +Up 0xc8 + +# evdev 104 (0x68), QKeyCode "pgup", number 0xc9 +Prior 0xc9 + +# evdev 105 (0x69), QKeyCode "left", number 0xcb +Left 0xcb + +# evdev 106 (0x6a), QKeyCode "right", number 0xcd +Right 0xcd + +# evdev 107 (0x6b), QKeyCode "end", number 0xcf +End 0xcf + +# evdev 108 (0x6c), QKeyCode "down", number 0xd0 +Down 0xd0 + +# evdev 109 (0x6d), QKeyCode "pgdn", number 0xd1 +Next 0xd1 + +# evdev 110 (0x6e), QKeyCode "insert", number 0xd2 +Insert 0xd2 + +# evdev 111 (0x6f), QKeyCode "delete", number 0xd3 +Delete 0xd3 + +# evdev 112 (0x70): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 113 (0x71), QKeyCode "audiomute", number 0xa0 +XF86AudioMute 0xa0 + +# evdev 114 (0x72), QKeyCode "volumedown", number 0xae +XF86AudioLowerVolume 0xae + +# evdev 115 (0x73), QKeyCode "volumeup", number 0xb0 +XF86AudioRaiseVolume 0xb0 + +# evdev 116 (0x74), QKeyCode "power", number 0xde +XF86PowerOff 0xde + +# evdev 117 (0x75), QKeyCode "kp_equals", number 0x59 +KP_Equal 0x59 + +# evdev 118 (0x76): no evdev -> QKeyCode mapping (xkb keysym plusminus) + +# evdev 119 (0x77), QKeyCode "pause", number 0xc6 +Pause 0xc6 + +# evdev 120 (0x78): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchA) + +# evdev 121 (0x79), QKeyCode "kp_comma", number 0x7e +KP_Decimal 0x7e + +# evdev 122 (0x7a): no evdev -> QKeyCode mapping (xkb keysym Hangul) + +# evdev 123 (0x7b): no evdev -> QKeyCode mapping (xkb keysym Hangul_Hanja) + +# evdev 124 (0x7c), QKeyCode "yen", number 0x7d + +# evdev 125 (0x7d), QKeyCode "meta_l", number 0xdb +Super_L 0xdb + +# evdev 126 (0x7e), QKeyCode "meta_r", number 0xdc +Super_R 0xdc + +# evdev 127 (0x7f), QKeyCode "compose", number 0xdd +Menu 0xdd + +# evdev 128 (0x80), QKeyCode "stop", number 0xe8 +Cancel 0xe8 + +# evdev 129 (0x81), QKeyCode "again", number 0x85 +Redo 0x85 + +# evdev 130 (0x82), QKeyCode "props", number 0x86 +SunProps 0x86 + +# evdev 131 (0x83), QKeyCode "undo", number 0x87 +Undo 0x87 + +# evdev 132 (0x84), QKeyCode "front", number 0x8c +SunFront 0x8c + +# evdev 133 (0x85), QKeyCode "copy", number 0xf8 +XF86Copy 0xf8 + +# evdev 134 (0x86), QKeyCode "open", number 0x64 +XF86Open 0x64 + +# evdev 135 (0x87), QKeyCode "paste", number 0x65 +XF86Paste 0x65 + +# evdev 136 (0x88), QKeyCode "find", number 0xc1 +Find 0xc1 + +# evdev 137 (0x89), QKeyCode "cut", number 0xbc +XF86Cut 0xbc + +# evdev 138 (0x8a), QKeyCode "help", number 0xf5 +Help 0xf5 + +# evdev 139 (0x8b), QKeyCode "menu", number 0x9e +XF86MenuKB 0x9e + +# evdev 140 (0x8c), QKeyCode "calculator", number 0xa1 +XF86Calculator 0xa1 + +# evdev 141 (0x8d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 142 (0x8e), QKeyCode "sleep", number 0xdf +XF86Sleep 0xdf + +# evdev 143 (0x8f), QKeyCode "wake", number 0xe3 +XF86WakeUp 0xe3 + +# evdev 144 (0x90): no evdev -> QKeyCode mapping (xkb keysym XF86Explorer) + +# evdev 145 (0x91): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 146 (0x92): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 147 (0x93): no evdev -> QKeyCode mapping (xkb keysym XF86Xfer) + +# evdev 148 (0x94): no evdev -> QKeyCode mapping (xkb keysym XF86Launch1) + +# evdev 149 (0x95): no evdev -> QKeyCode mapping (xkb keysym XF86Launch2) + +# evdev 150 (0x96): no evdev -> QKeyCode mapping (xkb keysym XF86WWW) + +# evdev 151 (0x97): no evdev -> QKeyCode mapping (xkb keysym XF86DOS) + +# evdev 152 (0x98): no evdev -> QKeyCode mapping (xkb keysym XF86ScreenSaver) + +# evdev 153 (0x99): no evdev -> QKeyCode mapping (xkb keysym XF86RotateWindows) + +# evdev 154 (0x9a): no evdev -> QKeyCode mapping (xkb keysym XF86TaskPane) + +# evdev 155 (0x9b), QKeyCode "mail", number 0xec +XF86Mail 0xec + +# evdev 156 (0x9c), QKeyCode "ac_bookmarks", number 0xe6 +XF86Favorites 0xe6 + +# evdev 157 (0x9d), QKeyCode "computer", number 0xeb +XF86MyComputer 0xeb + +# evdev 158 (0x9e), QKeyCode "ac_back", number 0xea +XF86Back 0xea + +# evdev 159 (0x9f), QKeyCode "ac_forward", number 0xe9 +XF86Forward 0xe9 + +# evdev 160 (0xa0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 161 (0xa1): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 162 (0xa2): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 163 (0xa3), QKeyCode "audionext", number 0x99 +XF86AudioNext 0x99 + +# evdev 164 (0xa4), QKeyCode "audioplay", number 0xa2 +XF86AudioPlay 0xa2 +XF86AudioPause 0xa2 shift + +# evdev 165 (0xa5), QKeyCode "audioprev", number 0x90 +XF86AudioPrev 0x90 + +# evdev 166 (0xa6), QKeyCode "audiostop", number 0xa4 +XF86AudioStop 0xa4 +XF86Eject 0xa4 shift + +# evdev 167 (0xa7): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRecord) + +# evdev 168 (0xa8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRewind) + +# evdev 169 (0xa9): no evdev -> QKeyCode mapping (xkb keysym XF86Phone) + +# evdev 170 (0xaa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 171 (0xab): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 172 (0xac), QKeyCode "ac_home", number 0xb2 +XF86HomePage 0xb2 + +# evdev 173 (0xad), QKeyCode "ac_refresh", number 0xe7 +XF86Reload 0xe7 + +# evdev 174 (0xae): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 175 (0xaf): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 176 (0xb0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 177 (0xb1): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollUp) + +# evdev 178 (0xb2): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollDown) + +# evdev 179 (0xb3): no evdev -> QKeyCode mapping (xkb keysym parenleft) + +# evdev 180 (0xb4): no evdev -> QKeyCode mapping (xkb keysym parenright) + +# evdev 181 (0xb5): no evdev -> QKeyCode mapping (xkb keysym XF86New) + +# evdev 182 (0xb6): no evdev -> QKeyCode mapping (xkb keysym Redo) + +# evdev 183 (0xb7): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 184 (0xb8): no evdev -> QKeyCode mapping (xkb keysym XF86Launch5) + +# evdev 185 (0xb9): no evdev -> QKeyCode mapping (xkb keysym XF86Launch6) + +# evdev 186 (0xba): no evdev -> QKeyCode mapping (xkb keysym XF86Launch7) + +# evdev 187 (0xbb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch8) + +# evdev 188 (0xbc): no evdev -> QKeyCode mapping (xkb keysym XF86Launch9) + +# evdev 189 (0xbd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 190 (0xbe): no evdev -> QKeyCode mapping (xkb keysym XF86AudioMicMute) + +# evdev 191 (0xbf): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadToggle) + +# evdev 192 (0xc0): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOn) + +# evdev 193 (0xc1): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOff) + +# evdev 194 (0xc2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 195 (0xc3): no evdev -> QKeyCode mapping (xkb keysym Mode_switch) + +# evdev 196 (0xc4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 197 (0xc5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 198 (0xc6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 199 (0xc7): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 200 (0xc8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 201 (0xc9): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPause) + +# evdev 202 (0xca): no evdev -> QKeyCode mapping (xkb keysym XF86Launch3) + +# evdev 203 (0xcb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch4) + +# evdev 204 (0xcc): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchB) + +# evdev 205 (0xcd): no evdev -> QKeyCode mapping (xkb keysym XF86Suspend) + +# evdev 206 (0xce): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 207 (0xcf): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 208 (0xd0): no evdev -> QKeyCode mapping (xkb keysym XF86AudioForward) + +# evdev 209 (0xd1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 210 (0xd2): no evdev -> QKeyCode mapping (xkb keysym Print) + +# evdev 211 (0xd3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 212 (0xd4): no evdev -> QKeyCode mapping (xkb keysym XF86WebCam) + +# evdev 213 (0xd5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 214 (0xd6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 215 (0xd7): no evdev -> QKeyCode mapping (xkb keysym XF86Mail) + +# evdev 216 (0xd8): no evdev -> QKeyCode mapping (xkb keysym XF86Messenger) + +# evdev 217 (0xd9): no evdev -> QKeyCode mapping (xkb keysym XF86Search) + +# evdev 218 (0xda): no evdev -> QKeyCode mapping (xkb keysym XF86Go) + +# evdev 219 (0xdb): no evdev -> QKeyCode mapping (xkb keysym XF86Finance) + +# evdev 220 (0xdc): no evdev -> QKeyCode mapping (xkb keysym XF86Game) + +# evdev 221 (0xdd): no evdev -> QKeyCode mapping (xkb keysym XF86Shop) + +# evdev 222 (0xde): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 223 (0xdf): no evdev -> QKeyCode mapping (xkb keysym Cancel) + +# evdev 224 (0xe0): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessDown) + +# evdev 225 (0xe1): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessUp) + +# evdev 226 (0xe2), QKeyCode "mediaselect", number 0xed +XF86AudioMedia 0xed + +# evdev 227 (0xe3): no evdev -> QKeyCode mapping (xkb keysym XF86Display) + +# evdev 228 (0xe4): no evdev -> QKeyCode mapping (xkb keysym XF86KbdLightOnOff) + +# evdev 229 (0xe5): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessDown) + +# evdev 230 (0xe6): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessUp) + +# evdev 231 (0xe7): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 232 (0xe8): no evdev -> QKeyCode mapping (xkb keysym XF86Reply) + +# evdev 233 (0xe9): no evdev -> QKeyCode mapping (xkb keysym XF86MailForward) + +# evdev 234 (0xea): no evdev -> QKeyCode mapping (xkb keysym XF86Save) + +# evdev 235 (0xeb): no evdev -> QKeyCode mapping (xkb keysym XF86Documents) + +# evdev 236 (0xec): no evdev -> QKeyCode mapping (xkb keysym XF86Battery) + +# evdev 237 (0xed): no evdev -> QKeyCode mapping (xkb keysym XF86Bluetooth) + +# evdev 238 (0xee): no evdev -> QKeyCode mapping (xkb keysym XF86WLAN) + +# evdev 239 (0xef): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 240 (0xf0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 241 (0xf1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 242 (0xf2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 243 (0xf3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 244 (0xf4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# +# quirks section start +# +# Sometimes multiple keysyms map to the same keycodes. +# The keycode -> keysym lookup finds only one of the +# keysyms. So append them here. +# + +Print 0x54 +Sys_Req 0x54 +Execute 0x54 +KP_Decimal 0x53 numlock +KP_Separator 0x53 numlock +Alt_R 0xb8 +ISO_Level3_Shift 0xb8 +Mode_switch 0xb8 + +# quirks section end diff --git a/app/src/main/assets/roms/keymaps/pt-br b/app/src/main/assets/roms/keymaps/pt-br new file mode 100644 index 0000000..fe9ec81 --- /dev/null +++ b/app/src/main/assets/roms/keymaps/pt-br @@ -0,0 +1,834 @@ +# +# generated by qemu-keymap +# model : pc105 +# layout : br +# variant : - +# options : - + +# name: "Portuguese (Brazil)" + +# modifiers +# 0: Shift +# 1: Lock +# 2: Control +# 3: Mod1 +# 4: Mod2 +# 5: Mod3 +# 6: Mod4 +# 7: Mod5 +# 8: NumLock +# 9: Alt +# 10: LevelThree +# 11: LAlt +# 12: RAlt +# 13: RControl +# 14: LControl +# 15: ScrollLock +# 16: LevelFive +# 17: AltGr +# 18: Meta +# 19: Super +# 20: Hyper + +# evdev 1 (0x1), QKeyCode "esc", number 0x1 +Escape 0x01 + +# evdev 2 (0x2), QKeyCode "1", number 0x2 +1 0x02 +exclam 0x02 shift +onesuperior 0x02 altgr +exclamdown 0x02 shift altgr + +# evdev 3 (0x3), QKeyCode "2", number 0x3 +2 0x03 +at 0x03 shift +twosuperior 0x03 altgr +onehalf 0x03 shift altgr + +# evdev 4 (0x4), QKeyCode "3", number 0x4 +3 0x04 +numbersign 0x04 shift +threesuperior 0x04 altgr +threequarters 0x04 shift altgr + +# evdev 5 (0x5), QKeyCode "4", number 0x5 +4 0x05 +dollar 0x05 shift +sterling 0x05 altgr +onequarter 0x05 shift altgr + +# evdev 6 (0x6), QKeyCode "5", number 0x6 +5 0x06 +percent 0x06 shift +cent 0x06 altgr +threeeighths 0x06 shift altgr + +# evdev 7 (0x7), QKeyCode "6", number 0x7 +6 0x07 +dead_diaeresis 0x07 shift +notsign 0x07 altgr +diaeresis 0x07 shift altgr + +# evdev 8 (0x8), QKeyCode "7", number 0x8 +7 0x08 +ampersand 0x08 shift +braceleft 0x08 altgr +seveneighths 0x08 shift altgr + +# evdev 9 (0x9), QKeyCode "8", number 0x9 +8 0x09 +asterisk 0x09 shift +bracketleft 0x09 altgr +trademark 0x09 shift altgr + +# evdev 10 (0xa), QKeyCode "9", number 0xa +9 0x0a +parenleft 0x0a shift +bracketright 0x0a altgr +plusminus 0x0a shift altgr + +# evdev 11 (0xb), QKeyCode "0", number 0xb +0 0x0b +parenright 0x0b shift +braceright 0x0b altgr +degree 0x0b shift altgr + +# evdev 12 (0xc), QKeyCode "minus", number 0xc +minus 0x0c +underscore 0x0c shift +backslash 0x0c altgr +questiondown 0x0c shift altgr + +# evdev 13 (0xd), QKeyCode "equal", number 0xd +equal 0x0d +plus 0x0d shift +section 0x0d altgr +dead_ogonek 0x0d shift altgr + +# evdev 14 (0xe), QKeyCode "backspace", number 0xe +BackSpace 0x0e + +# evdev 15 (0xf), QKeyCode "tab", number 0xf +Tab 0x0f +ISO_Left_Tab 0x0f shift + +# evdev 16 (0x10), QKeyCode "q", number 0x10 +q 0x10 +Q 0x10 shift +slash 0x10 altgr + +# evdev 17 (0x11), QKeyCode "w", number 0x11 +w 0x11 +W 0x11 shift +question 0x11 altgr + +# evdev 18 (0x12), QKeyCode "e", number 0x12 +e 0x12 +E 0x12 shift +EuroSign 0x12 altgr + +# evdev 19 (0x13), QKeyCode "r", number 0x13 +r 0x13 +R 0x13 shift +registered 0x13 altgr + +# evdev 20 (0x14), QKeyCode "t", number 0x14 +t 0x14 +T 0x14 shift +tslash 0x14 altgr +Tslash 0x14 shift altgr + +# evdev 21 (0x15), QKeyCode "y", number 0x15 +y 0x15 +Y 0x15 shift +leftarrow 0x15 altgr +yen 0x15 shift altgr + +# evdev 22 (0x16), QKeyCode "u", number 0x16 +u 0x16 +U 0x16 shift +downarrow 0x16 altgr +uparrow 0x16 shift altgr + +# evdev 23 (0x17), QKeyCode "i", number 0x17 +i 0x17 +I 0x17 shift +rightarrow 0x17 altgr +idotless 0x17 shift altgr + +# evdev 24 (0x18), QKeyCode "o", number 0x18 +o 0x18 +O 0x18 shift +oslash 0x18 altgr +Oslash 0x18 shift altgr + +# evdev 25 (0x19), QKeyCode "p", number 0x19 +p 0x19 +P 0x19 shift +thorn 0x19 altgr +THORN 0x19 shift altgr + +# evdev 26 (0x1a), QKeyCode "bracket_left", number 0x1a +dead_acute 0x1a +dead_grave 0x1a shift +acute 0x1a altgr +grave 0x1a shift altgr + +# evdev 27 (0x1b), QKeyCode "bracket_right", number 0x1b +bracketleft 0x1b +braceleft 0x1b shift +ordfeminine 0x1b altgr +dead_macron 0x1b shift altgr + +# evdev 28 (0x1c), QKeyCode "ret", number 0x1c +Return 0x1c + +# evdev 29 (0x1d), QKeyCode "ctrl", number 0x1d +Control_L 0x1d + +# evdev 30 (0x1e), QKeyCode "a", number 0x1e +a 0x1e +A 0x1e shift +ae 0x1e altgr +AE 0x1e shift altgr + +# evdev 31 (0x1f), QKeyCode "s", number 0x1f +s 0x1f +S 0x1f shift +ssharp 0x1f altgr +section 0x1f shift altgr + +# evdev 32 (0x20), QKeyCode "d", number 0x20 +d 0x20 +D 0x20 shift +eth 0x20 altgr +ETH 0x20 shift altgr + +# evdev 33 (0x21), QKeyCode "f", number 0x21 +f 0x21 +F 0x21 shift +dstroke 0x21 altgr +ordfeminine 0x21 shift altgr + +# evdev 34 (0x22), QKeyCode "g", number 0x22 +g 0x22 +G 0x22 shift +eng 0x22 altgr +ENG 0x22 shift altgr + +# evdev 35 (0x23), QKeyCode "h", number 0x23 +h 0x23 +H 0x23 shift +hstroke 0x23 altgr +Hstroke 0x23 shift altgr + +# evdev 36 (0x24), QKeyCode "j", number 0x24 +j 0x24 +J 0x24 shift +dead_hook 0x24 altgr +dead_horn 0x24 shift altgr + +# evdev 37 (0x25), QKeyCode "k", number 0x25 +k 0x25 +K 0x25 shift +kra 0x25 altgr +ampersand 0x25 shift altgr + +# evdev 38 (0x26), QKeyCode "l", number 0x26 +l 0x26 +L 0x26 shift +lstroke 0x26 altgr +Lstroke 0x26 shift altgr + +# evdev 39 (0x27), QKeyCode "semicolon", number 0x27 +ccedilla 0x27 +Ccedilla 0x27 shift +dead_acute 0x27 altgr +dead_doubleacute 0x27 shift altgr + +# evdev 40 (0x28), QKeyCode "apostrophe", number 0x28 +dead_tilde 0x28 +dead_circumflex 0x28 shift +asciitilde 0x28 altgr +asciicircum 0x28 shift altgr + +# evdev 41 (0x29), QKeyCode "grave_accent", number 0x29 +apostrophe 0x29 +quotedbl 0x29 shift +notsign 0x29 altgr + +# evdev 42 (0x2a), QKeyCode "shift", number 0x2a +Shift_L 0x2a + +# evdev 43 (0x2b), QKeyCode "backslash", number 0x2b +bracketright 0x2b +braceright 0x2b shift +masculine 0x2b altgr + +# evdev 44 (0x2c), QKeyCode "z", number 0x2c +z 0x2c +Z 0x2c shift +guillemotleft 0x2c altgr +less 0x2c shift altgr + +# evdev 45 (0x2d), QKeyCode "x", number 0x2d +x 0x2d +X 0x2d shift +guillemotright 0x2d altgr +greater 0x2d shift altgr + +# evdev 46 (0x2e), QKeyCode "c", number 0x2e +c 0x2e +C 0x2e shift +copyright 0x2e altgr + +# evdev 47 (0x2f), QKeyCode "v", number 0x2f +v 0x2f +V 0x2f shift +leftdoublequotemark 0x2f altgr +leftsinglequotemark 0x2f shift altgr + +# evdev 48 (0x30), QKeyCode "b", number 0x30 +b 0x30 +B 0x30 shift +rightdoublequotemark 0x30 altgr +rightsinglequotemark 0x30 shift altgr + +# evdev 49 (0x31), QKeyCode "n", number 0x31 +n 0x31 +N 0x31 shift + +# evdev 50 (0x32), QKeyCode "m", number 0x32 +m 0x32 +M 0x32 shift +mu 0x32 altgr + +# evdev 51 (0x33), QKeyCode "comma", number 0x33 +comma 0x33 +less 0x33 shift +horizconnector 0x33 altgr +multiply 0x33 shift altgr + +# evdev 52 (0x34), QKeyCode "dot", number 0x34 +period 0x34 +greater 0x34 shift +periodcentered 0x34 altgr +division 0x34 shift altgr + +# evdev 53 (0x35), QKeyCode "slash", number 0x35 +semicolon 0x35 +colon 0x35 shift +dead_belowdot 0x35 altgr +dead_abovedot 0x35 shift altgr + +# evdev 54 (0x36), QKeyCode "shift_r", number 0x36 +Shift_R 0x36 + +# evdev 55 (0x37), QKeyCode "kp_multiply", number 0x37 +KP_Multiply 0x37 + +# evdev 56 (0x38), QKeyCode "alt", number 0x38 +Alt_L 0x38 +Meta_L 0x38 shift + +# evdev 57 (0x39), QKeyCode "spc", number 0x39 +space 0x39 + +# evdev 58 (0x3a), QKeyCode "caps_lock", number 0x3a +Caps_Lock 0x3a + +# evdev 59 (0x3b), QKeyCode "f1", number 0x3b +F1 0x3b + +# evdev 60 (0x3c), QKeyCode "f2", number 0x3c +F2 0x3c + +# evdev 61 (0x3d), QKeyCode "f3", number 0x3d +F3 0x3d + +# evdev 62 (0x3e), QKeyCode "f4", number 0x3e +F4 0x3e + +# evdev 63 (0x3f), QKeyCode "f5", number 0x3f +F5 0x3f + +# evdev 64 (0x40), QKeyCode "f6", number 0x40 +F6 0x40 + +# evdev 65 (0x41), QKeyCode "f7", number 0x41 +F7 0x41 + +# evdev 66 (0x42), QKeyCode "f8", number 0x42 +F8 0x42 + +# evdev 67 (0x43), QKeyCode "f9", number 0x43 +F9 0x43 + +# evdev 68 (0x44), QKeyCode "f10", number 0x44 +F10 0x44 + +# evdev 69 (0x45), QKeyCode "num_lock", number 0x45 +Num_Lock 0x45 + +# evdev 70 (0x46), QKeyCode "scroll_lock", number 0x46 +Scroll_Lock 0x46 + +# evdev 71 (0x47), QKeyCode "kp_7", number 0x47 +KP_Home 0x47 +KP_7 0x47 numlock + +# evdev 72 (0x48), QKeyCode "kp_8", number 0x48 +KP_Up 0x48 +KP_8 0x48 numlock + +# evdev 73 (0x49), QKeyCode "kp_9", number 0x49 +KP_Prior 0x49 +KP_9 0x49 numlock + +# evdev 74 (0x4a), QKeyCode "kp_subtract", number 0x4a +KP_Subtract 0x4a + +# evdev 75 (0x4b), QKeyCode "kp_4", number 0x4b +KP_Left 0x4b +KP_4 0x4b numlock + +# evdev 76 (0x4c), QKeyCode "kp_5", number 0x4c +KP_Begin 0x4c +KP_5 0x4c numlock + +# evdev 77 (0x4d), QKeyCode "kp_6", number 0x4d +KP_Right 0x4d +KP_6 0x4d numlock + +# evdev 78 (0x4e), QKeyCode "kp_add", number 0x4e +KP_Add 0x4e + +# evdev 79 (0x4f), QKeyCode "kp_1", number 0x4f +KP_End 0x4f +KP_1 0x4f numlock + +# evdev 80 (0x50), QKeyCode "kp_2", number 0x50 +KP_Down 0x50 +KP_2 0x50 numlock + +# evdev 81 (0x51), QKeyCode "kp_3", number 0x51 +KP_Next 0x51 +KP_3 0x51 numlock + +# evdev 82 (0x52), QKeyCode "kp_0", number 0x52 +KP_Insert 0x52 +KP_0 0x52 numlock + +# evdev 83 (0x53), QKeyCode "kp_decimal", number 0x53 +KP_Delete 0x53 +KP_Separator 0x53 numlock + +# evdev 84 (0x54): no evdev -> QKeyCode mapping (xkb keysym ISO_Level3_Shift) + +# evdev 85 (0x55): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 86 (0x56), QKeyCode "less", number 0x56 +backslash 0x56 +bar 0x56 shift +masculine 0x56 altgr +dead_breve 0x56 shift altgr + +# evdev 87 (0x57), QKeyCode "f11", number 0x57 +F11 0x57 + +# evdev 88 (0x58), QKeyCode "f12", number 0x58 +F12 0x58 + +# evdev 89 (0x59), QKeyCode "ro", number 0x73 +slash 0x73 +question 0x73 shift +degree 0x73 altgr +questiondown 0x73 shift altgr + +# evdev 90 (0x5a): no evdev -> QKeyCode mapping (xkb keysym Katakana) + +# evdev 91 (0x5b), QKeyCode "hiragana", number 0x77 +Hiragana 0x77 + +# evdev 92 (0x5c), QKeyCode "henkan", number 0x79 +Henkan_Mode 0x79 + +# evdev 93 (0x5d): no evdev -> QKeyCode mapping (xkb keysym Hiragana_Katakana) + +# evdev 94 (0x5e): no evdev -> QKeyCode mapping (xkb keysym Muhenkan) + +# evdev 95 (0x5f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 96 (0x60), QKeyCode "kp_enter", number 0x9c +KP_Enter 0x9c + +# evdev 97 (0x61), QKeyCode "ctrl_r", number 0x9d +Control_R 0x9d + +# evdev 98 (0x62), QKeyCode "kp_divide", number 0xb5 +KP_Divide 0xb5 + +# evdev 99 (0x63), QKeyCode "sysrq", number 0x54 +Print 0x54 + +# evdev 100 (0x64), QKeyCode "alt_r", number 0xb8 +ISO_Level3_Shift 0xb8 + +# evdev 101 (0x65), QKeyCode "lf", number 0x5b +Linefeed 0x5b + +# evdev 102 (0x66), QKeyCode "home", number 0xc7 +Home 0xc7 + +# evdev 103 (0x67), QKeyCode "up", number 0xc8 +Up 0xc8 + +# evdev 104 (0x68), QKeyCode "pgup", number 0xc9 +Prior 0xc9 + +# evdev 105 (0x69), QKeyCode "left", number 0xcb +Left 0xcb + +# evdev 106 (0x6a), QKeyCode "right", number 0xcd +Right 0xcd + +# evdev 107 (0x6b), QKeyCode "end", number 0xcf +End 0xcf + +# evdev 108 (0x6c), QKeyCode "down", number 0xd0 +Down 0xd0 + +# evdev 109 (0x6d), QKeyCode "pgdn", number 0xd1 +Next 0xd1 + +# evdev 110 (0x6e), QKeyCode "insert", number 0xd2 +Insert 0xd2 + +# evdev 111 (0x6f), QKeyCode "delete", number 0xd3 +Delete 0xd3 + +# evdev 112 (0x70): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 113 (0x71), QKeyCode "audiomute", number 0xa0 +XF86AudioMute 0xa0 + +# evdev 114 (0x72), QKeyCode "volumedown", number 0xae +XF86AudioLowerVolume 0xae + +# evdev 115 (0x73), QKeyCode "volumeup", number 0xb0 +XF86AudioRaiseVolume 0xb0 + +# evdev 116 (0x74), QKeyCode "power", number 0xde +XF86PowerOff 0xde + +# evdev 117 (0x75), QKeyCode "kp_equals", number 0x59 +KP_Equal 0x59 + +# evdev 118 (0x76): no evdev -> QKeyCode mapping (xkb keysym plusminus) + +# evdev 119 (0x77), QKeyCode "pause", number 0xc6 +Pause 0xc6 + +# evdev 120 (0x78): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchA) + +# evdev 121 (0x79), QKeyCode "kp_comma", number 0x7e +KP_Decimal 0x7e + +# evdev 122 (0x7a): no evdev -> QKeyCode mapping (xkb keysym Hangul) + +# evdev 123 (0x7b): no evdev -> QKeyCode mapping (xkb keysym Hangul_Hanja) + +# evdev 124 (0x7c), QKeyCode "yen", number 0x7d + +# evdev 125 (0x7d), QKeyCode "meta_l", number 0xdb +Super_L 0xdb + +# evdev 126 (0x7e), QKeyCode "meta_r", number 0xdc +Super_R 0xdc + +# evdev 127 (0x7f), QKeyCode "compose", number 0xdd +Menu 0xdd + +# evdev 128 (0x80), QKeyCode "stop", number 0xe8 +Cancel 0xe8 + +# evdev 129 (0x81), QKeyCode "again", number 0x85 +Redo 0x85 + +# evdev 130 (0x82), QKeyCode "props", number 0x86 +SunProps 0x86 + +# evdev 131 (0x83), QKeyCode "undo", number 0x87 +Undo 0x87 + +# evdev 132 (0x84), QKeyCode "front", number 0x8c +SunFront 0x8c + +# evdev 133 (0x85), QKeyCode "copy", number 0xf8 +XF86Copy 0xf8 + +# evdev 134 (0x86), QKeyCode "open", number 0x64 +XF86Open 0x64 + +# evdev 135 (0x87), QKeyCode "paste", number 0x65 +XF86Paste 0x65 + +# evdev 136 (0x88), QKeyCode "find", number 0xc1 +Find 0xc1 + +# evdev 137 (0x89), QKeyCode "cut", number 0xbc +XF86Cut 0xbc + +# evdev 138 (0x8a), QKeyCode "help", number 0xf5 +Help 0xf5 + +# evdev 139 (0x8b), QKeyCode "menu", number 0x9e +XF86MenuKB 0x9e + +# evdev 140 (0x8c), QKeyCode "calculator", number 0xa1 +XF86Calculator 0xa1 + +# evdev 141 (0x8d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 142 (0x8e), QKeyCode "sleep", number 0xdf +XF86Sleep 0xdf + +# evdev 143 (0x8f), QKeyCode "wake", number 0xe3 +XF86WakeUp 0xe3 + +# evdev 144 (0x90): no evdev -> QKeyCode mapping (xkb keysym XF86Explorer) + +# evdev 145 (0x91): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 146 (0x92): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 147 (0x93): no evdev -> QKeyCode mapping (xkb keysym XF86Xfer) + +# evdev 148 (0x94): no evdev -> QKeyCode mapping (xkb keysym XF86Launch1) + +# evdev 149 (0x95): no evdev -> QKeyCode mapping (xkb keysym XF86Launch2) + +# evdev 150 (0x96): no evdev -> QKeyCode mapping (xkb keysym XF86WWW) + +# evdev 151 (0x97): no evdev -> QKeyCode mapping (xkb keysym XF86DOS) + +# evdev 152 (0x98): no evdev -> QKeyCode mapping (xkb keysym XF86ScreenSaver) + +# evdev 153 (0x99): no evdev -> QKeyCode mapping (xkb keysym XF86RotateWindows) + +# evdev 154 (0x9a): no evdev -> QKeyCode mapping (xkb keysym XF86TaskPane) + +# evdev 155 (0x9b), QKeyCode "mail", number 0xec +XF86Mail 0xec + +# evdev 156 (0x9c), QKeyCode "ac_bookmarks", number 0xe6 +XF86Favorites 0xe6 + +# evdev 157 (0x9d), QKeyCode "computer", number 0xeb +XF86MyComputer 0xeb + +# evdev 158 (0x9e), QKeyCode "ac_back", number 0xea +XF86Back 0xea + +# evdev 159 (0x9f), QKeyCode "ac_forward", number 0xe9 +XF86Forward 0xe9 + +# evdev 160 (0xa0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 161 (0xa1): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 162 (0xa2): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 163 (0xa3), QKeyCode "audionext", number 0x99 +XF86AudioNext 0x99 + +# evdev 164 (0xa4), QKeyCode "audioplay", number 0xa2 +XF86AudioPlay 0xa2 +XF86AudioPause 0xa2 shift + +# evdev 165 (0xa5), QKeyCode "audioprev", number 0x90 +XF86AudioPrev 0x90 + +# evdev 166 (0xa6), QKeyCode "audiostop", number 0xa4 +XF86AudioStop 0xa4 +XF86Eject 0xa4 shift + +# evdev 167 (0xa7): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRecord) + +# evdev 168 (0xa8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRewind) + +# evdev 169 (0xa9): no evdev -> QKeyCode mapping (xkb keysym XF86Phone) + +# evdev 170 (0xaa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 171 (0xab): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 172 (0xac), QKeyCode "ac_home", number 0xb2 +XF86HomePage 0xb2 + +# evdev 173 (0xad), QKeyCode "ac_refresh", number 0xe7 +XF86Reload 0xe7 + +# evdev 174 (0xae): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 175 (0xaf): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 176 (0xb0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 177 (0xb1): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollUp) + +# evdev 178 (0xb2): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollDown) + +# evdev 179 (0xb3): no evdev -> QKeyCode mapping (xkb keysym parenleft) + +# evdev 180 (0xb4): no evdev -> QKeyCode mapping (xkb keysym parenright) + +# evdev 181 (0xb5): no evdev -> QKeyCode mapping (xkb keysym XF86New) + +# evdev 182 (0xb6): no evdev -> QKeyCode mapping (xkb keysym Redo) + +# evdev 183 (0xb7): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 184 (0xb8): no evdev -> QKeyCode mapping (xkb keysym XF86Launch5) + +# evdev 185 (0xb9): no evdev -> QKeyCode mapping (xkb keysym XF86Launch6) + +# evdev 186 (0xba): no evdev -> QKeyCode mapping (xkb keysym XF86Launch7) + +# evdev 187 (0xbb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch8) + +# evdev 188 (0xbc): no evdev -> QKeyCode mapping (xkb keysym XF86Launch9) + +# evdev 189 (0xbd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 190 (0xbe): no evdev -> QKeyCode mapping (xkb keysym XF86AudioMicMute) + +# evdev 191 (0xbf): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadToggle) + +# evdev 192 (0xc0): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOn) + +# evdev 193 (0xc1): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOff) + +# evdev 194 (0xc2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 195 (0xc3): no evdev -> QKeyCode mapping (xkb keysym Mode_switch) + +# evdev 196 (0xc4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 197 (0xc5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 198 (0xc6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 199 (0xc7): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 200 (0xc8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 201 (0xc9): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPause) + +# evdev 202 (0xca): no evdev -> QKeyCode mapping (xkb keysym XF86Launch3) + +# evdev 203 (0xcb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch4) + +# evdev 204 (0xcc): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchB) + +# evdev 205 (0xcd): no evdev -> QKeyCode mapping (xkb keysym XF86Suspend) + +# evdev 206 (0xce): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 207 (0xcf): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 208 (0xd0): no evdev -> QKeyCode mapping (xkb keysym XF86AudioForward) + +# evdev 209 (0xd1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 210 (0xd2): no evdev -> QKeyCode mapping (xkb keysym Print) + +# evdev 211 (0xd3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 212 (0xd4): no evdev -> QKeyCode mapping (xkb keysym XF86WebCam) + +# evdev 213 (0xd5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 214 (0xd6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 215 (0xd7): no evdev -> QKeyCode mapping (xkb keysym XF86Mail) + +# evdev 216 (0xd8): no evdev -> QKeyCode mapping (xkb keysym XF86Messenger) + +# evdev 217 (0xd9): no evdev -> QKeyCode mapping (xkb keysym XF86Search) + +# evdev 218 (0xda): no evdev -> QKeyCode mapping (xkb keysym XF86Go) + +# evdev 219 (0xdb): no evdev -> QKeyCode mapping (xkb keysym XF86Finance) + +# evdev 220 (0xdc): no evdev -> QKeyCode mapping (xkb keysym XF86Game) + +# evdev 221 (0xdd): no evdev -> QKeyCode mapping (xkb keysym XF86Shop) + +# evdev 222 (0xde): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 223 (0xdf): no evdev -> QKeyCode mapping (xkb keysym Cancel) + +# evdev 224 (0xe0): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessDown) + +# evdev 225 (0xe1): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessUp) + +# evdev 226 (0xe2), QKeyCode "mediaselect", number 0xed +XF86AudioMedia 0xed + +# evdev 227 (0xe3): no evdev -> QKeyCode mapping (xkb keysym XF86Display) + +# evdev 228 (0xe4): no evdev -> QKeyCode mapping (xkb keysym XF86KbdLightOnOff) + +# evdev 229 (0xe5): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessDown) + +# evdev 230 (0xe6): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessUp) + +# evdev 231 (0xe7): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 232 (0xe8): no evdev -> QKeyCode mapping (xkb keysym XF86Reply) + +# evdev 233 (0xe9): no evdev -> QKeyCode mapping (xkb keysym XF86MailForward) + +# evdev 234 (0xea): no evdev -> QKeyCode mapping (xkb keysym XF86Save) + +# evdev 235 (0xeb): no evdev -> QKeyCode mapping (xkb keysym XF86Documents) + +# evdev 236 (0xec): no evdev -> QKeyCode mapping (xkb keysym XF86Battery) + +# evdev 237 (0xed): no evdev -> QKeyCode mapping (xkb keysym XF86Bluetooth) + +# evdev 238 (0xee): no evdev -> QKeyCode mapping (xkb keysym XF86WLAN) + +# evdev 239 (0xef): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 240 (0xf0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 241 (0xf1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 242 (0xf2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 243 (0xf3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 244 (0xf4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# +# quirks section start +# +# Sometimes multiple keysyms map to the same keycodes. +# The keycode -> keysym lookup finds only one of the +# keysyms. So append them here. +# + +Print 0x54 +Sys_Req 0x54 +Execute 0x54 +KP_Decimal 0x53 numlock +KP_Separator 0x53 numlock +Alt_R 0xb8 +ISO_Level3_Shift 0xb8 +Mode_switch 0xb8 + +# quirks section end diff --git a/app/src/main/assets/roms/keymaps/ru b/app/src/main/assets/roms/keymaps/ru new file mode 100644 index 0000000..7566052 --- /dev/null +++ b/app/src/main/assets/roms/keymaps/ru @@ -0,0 +1,748 @@ +# +# generated by qemu-keymap +# model : pc105 +# layout : ru +# variant : - +# options : - + +# name: "Russian" + +# modifiers +# 0: Shift +# 1: Lock +# 2: Control +# 3: Mod1 +# 4: Mod2 +# 5: Mod3 +# 6: Mod4 +# 7: Mod5 +# 8: NumLock +# 9: Alt +# 10: LevelThree +# 11: LAlt +# 12: RAlt +# 13: RControl +# 14: LControl +# 15: ScrollLock +# 16: LevelFive +# 17: AltGr +# 18: Meta +# 19: Super +# 20: Hyper + +# evdev 1 (0x1), QKeyCode "esc", number 0x1 +Escape 0x01 + +# evdev 2 (0x2), QKeyCode "1", number 0x2 +1 0x02 +exclam 0x02 shift + +# evdev 3 (0x3), QKeyCode "2", number 0x3 +2 0x03 +quotedbl 0x03 shift + +# evdev 4 (0x4), QKeyCode "3", number 0x4 +3 0x04 +numerosign 0x04 shift + +# evdev 5 (0x5), QKeyCode "4", number 0x5 +4 0x05 +semicolon 0x05 shift + +# evdev 6 (0x6), QKeyCode "5", number 0x6 +5 0x06 +percent 0x06 shift + +# evdev 7 (0x7), QKeyCode "6", number 0x7 +6 0x07 +colon 0x07 shift + +# evdev 8 (0x8), QKeyCode "7", number 0x8 +7 0x08 +question 0x08 shift + +# evdev 9 (0x9), QKeyCode "8", number 0x9 +8 0x09 +asterisk 0x09 shift +U20BD 0x09 altgr + +# evdev 10 (0xa), QKeyCode "9", number 0xa +9 0x0a +parenleft 0x0a shift + +# evdev 11 (0xb), QKeyCode "0", number 0xb +0 0x0b +parenright 0x0b shift + +# evdev 12 (0xc), QKeyCode "minus", number 0xc +minus 0x0c +underscore 0x0c shift + +# evdev 13 (0xd), QKeyCode "equal", number 0xd +equal 0x0d +plus 0x0d shift + +# evdev 14 (0xe), QKeyCode "backspace", number 0xe +BackSpace 0x0e + +# evdev 15 (0xf), QKeyCode "tab", number 0xf +Tab 0x0f +ISO_Left_Tab 0x0f shift + +# evdev 16 (0x10), QKeyCode "q", number 0x10 +Cyrillic_shorti 0x10 +Cyrillic_SHORTI 0x10 shift + +# evdev 17 (0x11), QKeyCode "w", number 0x11 +Cyrillic_tse 0x11 +Cyrillic_TSE 0x11 shift + +# evdev 18 (0x12), QKeyCode "e", number 0x12 +Cyrillic_u 0x12 +Cyrillic_U 0x12 shift + +# evdev 19 (0x13), QKeyCode "r", number 0x13 +Cyrillic_ka 0x13 +Cyrillic_KA 0x13 shift + +# evdev 20 (0x14), QKeyCode "t", number 0x14 +Cyrillic_ie 0x14 +Cyrillic_IE 0x14 shift + +# evdev 21 (0x15), QKeyCode "y", number 0x15 +Cyrillic_en 0x15 +Cyrillic_EN 0x15 shift + +# evdev 22 (0x16), QKeyCode "u", number 0x16 +Cyrillic_ghe 0x16 +Cyrillic_GHE 0x16 shift + +# evdev 23 (0x17), QKeyCode "i", number 0x17 +Cyrillic_sha 0x17 +Cyrillic_SHA 0x17 shift + +# evdev 24 (0x18), QKeyCode "o", number 0x18 +Cyrillic_shcha 0x18 +Cyrillic_SHCHA 0x18 shift + +# evdev 25 (0x19), QKeyCode "p", number 0x19 +Cyrillic_ze 0x19 +Cyrillic_ZE 0x19 shift + +# evdev 26 (0x1a), QKeyCode "bracket_left", number 0x1a +Cyrillic_ha 0x1a +Cyrillic_HA 0x1a shift + +# evdev 27 (0x1b), QKeyCode "bracket_right", number 0x1b +Cyrillic_hardsign 0x1b +Cyrillic_HARDSIGN 0x1b shift + +# evdev 28 (0x1c), QKeyCode "ret", number 0x1c +Return 0x1c + +# evdev 29 (0x1d), QKeyCode "ctrl", number 0x1d +Control_L 0x1d + +# evdev 30 (0x1e), QKeyCode "a", number 0x1e +Cyrillic_ef 0x1e +Cyrillic_EF 0x1e shift + +# evdev 31 (0x1f), QKeyCode "s", number 0x1f +Cyrillic_yeru 0x1f +Cyrillic_YERU 0x1f shift + +# evdev 32 (0x20), QKeyCode "d", number 0x20 +Cyrillic_ve 0x20 +Cyrillic_VE 0x20 shift + +# evdev 33 (0x21), QKeyCode "f", number 0x21 +Cyrillic_a 0x21 +Cyrillic_A 0x21 shift + +# evdev 34 (0x22), QKeyCode "g", number 0x22 +Cyrillic_pe 0x22 +Cyrillic_PE 0x22 shift + +# evdev 35 (0x23), QKeyCode "h", number 0x23 +Cyrillic_er 0x23 +Cyrillic_ER 0x23 shift + +# evdev 36 (0x24), QKeyCode "j", number 0x24 +Cyrillic_o 0x24 +Cyrillic_O 0x24 shift + +# evdev 37 (0x25), QKeyCode "k", number 0x25 +Cyrillic_el 0x25 +Cyrillic_EL 0x25 shift + +# evdev 38 (0x26), QKeyCode "l", number 0x26 +Cyrillic_de 0x26 +Cyrillic_DE 0x26 shift + +# evdev 39 (0x27), QKeyCode "semicolon", number 0x27 +Cyrillic_zhe 0x27 +Cyrillic_ZHE 0x27 shift + +# evdev 40 (0x28), QKeyCode "apostrophe", number 0x28 +Cyrillic_e 0x28 +Cyrillic_E 0x28 shift + +# evdev 41 (0x29), QKeyCode "grave_accent", number 0x29 +Cyrillic_io 0x29 +Cyrillic_IO 0x29 shift + +# evdev 42 (0x2a), QKeyCode "shift", number 0x2a +Shift_L 0x2a + +# evdev 43 (0x2b), QKeyCode "backslash", number 0x2b +backslash 0x2b +slash 0x2b shift + +# evdev 44 (0x2c), QKeyCode "z", number 0x2c +Cyrillic_ya 0x2c +Cyrillic_YA 0x2c shift + +# evdev 45 (0x2d), QKeyCode "x", number 0x2d +Cyrillic_che 0x2d +Cyrillic_CHE 0x2d shift + +# evdev 46 (0x2e), QKeyCode "c", number 0x2e +Cyrillic_es 0x2e +Cyrillic_ES 0x2e shift + +# evdev 47 (0x2f), QKeyCode "v", number 0x2f +Cyrillic_em 0x2f +Cyrillic_EM 0x2f shift + +# evdev 48 (0x30), QKeyCode "b", number 0x30 +Cyrillic_i 0x30 +Cyrillic_I 0x30 shift + +# evdev 49 (0x31), QKeyCode "n", number 0x31 +Cyrillic_te 0x31 +Cyrillic_TE 0x31 shift + +# evdev 50 (0x32), QKeyCode "m", number 0x32 +Cyrillic_softsign 0x32 +Cyrillic_SOFTSIGN 0x32 shift + +# evdev 51 (0x33), QKeyCode "comma", number 0x33 +Cyrillic_be 0x33 +Cyrillic_BE 0x33 shift + +# evdev 52 (0x34), QKeyCode "dot", number 0x34 +Cyrillic_yu 0x34 +Cyrillic_YU 0x34 shift + +# evdev 53 (0x35), QKeyCode "slash", number 0x35 +period 0x35 +comma 0x35 shift + +# evdev 54 (0x36), QKeyCode "shift_r", number 0x36 +Shift_R 0x36 + +# evdev 55 (0x37), QKeyCode "kp_multiply", number 0x37 +KP_Multiply 0x37 + +# evdev 56 (0x38), QKeyCode "alt", number 0x38 +Alt_L 0x38 +Meta_L 0x38 shift + +# evdev 57 (0x39), QKeyCode "spc", number 0x39 +space 0x39 + +# evdev 58 (0x3a), QKeyCode "caps_lock", number 0x3a +Caps_Lock 0x3a + +# evdev 59 (0x3b), QKeyCode "f1", number 0x3b +F1 0x3b + +# evdev 60 (0x3c), QKeyCode "f2", number 0x3c +F2 0x3c + +# evdev 61 (0x3d), QKeyCode "f3", number 0x3d +F3 0x3d + +# evdev 62 (0x3e), QKeyCode "f4", number 0x3e +F4 0x3e + +# evdev 63 (0x3f), QKeyCode "f5", number 0x3f +F5 0x3f + +# evdev 64 (0x40), QKeyCode "f6", number 0x40 +F6 0x40 + +# evdev 65 (0x41), QKeyCode "f7", number 0x41 +F7 0x41 + +# evdev 66 (0x42), QKeyCode "f8", number 0x42 +F8 0x42 + +# evdev 67 (0x43), QKeyCode "f9", number 0x43 +F9 0x43 + +# evdev 68 (0x44), QKeyCode "f10", number 0x44 +F10 0x44 + +# evdev 69 (0x45), QKeyCode "num_lock", number 0x45 +Num_Lock 0x45 + +# evdev 70 (0x46), QKeyCode "scroll_lock", number 0x46 +Scroll_Lock 0x46 + +# evdev 71 (0x47), QKeyCode "kp_7", number 0x47 +KP_Home 0x47 +KP_7 0x47 numlock + +# evdev 72 (0x48), QKeyCode "kp_8", number 0x48 +KP_Up 0x48 +KP_8 0x48 numlock + +# evdev 73 (0x49), QKeyCode "kp_9", number 0x49 +KP_Prior 0x49 +KP_9 0x49 numlock + +# evdev 74 (0x4a), QKeyCode "kp_subtract", number 0x4a +KP_Subtract 0x4a + +# evdev 75 (0x4b), QKeyCode "kp_4", number 0x4b +KP_Left 0x4b +KP_4 0x4b numlock + +# evdev 76 (0x4c), QKeyCode "kp_5", number 0x4c +KP_Begin 0x4c +KP_5 0x4c numlock + +# evdev 77 (0x4d), QKeyCode "kp_6", number 0x4d +KP_Right 0x4d +KP_6 0x4d numlock + +# evdev 78 (0x4e), QKeyCode "kp_add", number 0x4e +KP_Add 0x4e + +# evdev 79 (0x4f), QKeyCode "kp_1", number 0x4f +KP_End 0x4f +KP_1 0x4f numlock + +# evdev 80 (0x50), QKeyCode "kp_2", number 0x50 +KP_Down 0x50 +KP_2 0x50 numlock + +# evdev 81 (0x51), QKeyCode "kp_3", number 0x51 +KP_Next 0x51 +KP_3 0x51 numlock + +# evdev 82 (0x52), QKeyCode "kp_0", number 0x52 +KP_Insert 0x52 +KP_0 0x52 numlock + +# evdev 83 (0x53), QKeyCode "kp_decimal", number 0x53 +KP_Delete 0x53 +KP_Separator 0x53 numlock + +# evdev 84 (0x54): no evdev -> QKeyCode mapping (xkb keysym ISO_Level3_Shift) + +# evdev 85 (0x55): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 86 (0x56), QKeyCode "less", number 0x56 +slash 0x56 +bar 0x56 shift +bar 0x56 altgr +brokenbar 0x56 shift altgr + +# evdev 87 (0x57), QKeyCode "f11", number 0x57 +F11 0x57 + +# evdev 88 (0x58), QKeyCode "f12", number 0x58 +F12 0x58 + +# evdev 89 (0x59), QKeyCode "ro", number 0x73 + +# evdev 90 (0x5a): no evdev -> QKeyCode mapping (xkb keysym Katakana) + +# evdev 91 (0x5b), QKeyCode "hiragana", number 0x77 +Hiragana 0x77 + +# evdev 92 (0x5c), QKeyCode "henkan", number 0x79 +Henkan_Mode 0x79 + +# evdev 93 (0x5d): no evdev -> QKeyCode mapping (xkb keysym Hiragana_Katakana) + +# evdev 94 (0x5e): no evdev -> QKeyCode mapping (xkb keysym Muhenkan) + +# evdev 95 (0x5f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 96 (0x60), QKeyCode "kp_enter", number 0x9c +KP_Enter 0x9c + +# evdev 97 (0x61), QKeyCode "ctrl_r", number 0x9d +Control_R 0x9d + +# evdev 98 (0x62), QKeyCode "kp_divide", number 0xb5 +KP_Divide 0xb5 + +# evdev 99 (0x63), QKeyCode "sysrq", number 0x54 +Print 0x54 + +# evdev 100 (0x64), QKeyCode "alt_r", number 0xb8 +Alt_R 0xb8 +Meta_R 0xb8 shift + +# evdev 101 (0x65), QKeyCode "lf", number 0x5b +Linefeed 0x5b + +# evdev 102 (0x66), QKeyCode "home", number 0xc7 +Home 0xc7 + +# evdev 103 (0x67), QKeyCode "up", number 0xc8 +Up 0xc8 + +# evdev 104 (0x68), QKeyCode "pgup", number 0xc9 +Prior 0xc9 + +# evdev 105 (0x69), QKeyCode "left", number 0xcb +Left 0xcb + +# evdev 106 (0x6a), QKeyCode "right", number 0xcd +Right 0xcd + +# evdev 107 (0x6b), QKeyCode "end", number 0xcf +End 0xcf + +# evdev 108 (0x6c), QKeyCode "down", number 0xd0 +Down 0xd0 + +# evdev 109 (0x6d), QKeyCode "pgdn", number 0xd1 +Next 0xd1 + +# evdev 110 (0x6e), QKeyCode "insert", number 0xd2 +Insert 0xd2 + +# evdev 111 (0x6f), QKeyCode "delete", number 0xd3 +Delete 0xd3 + +# evdev 112 (0x70): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 113 (0x71), QKeyCode "audiomute", number 0xa0 +XF86AudioMute 0xa0 + +# evdev 114 (0x72), QKeyCode "volumedown", number 0xae +XF86AudioLowerVolume 0xae + +# evdev 115 (0x73), QKeyCode "volumeup", number 0xb0 +XF86AudioRaiseVolume 0xb0 + +# evdev 116 (0x74), QKeyCode "power", number 0xde +XF86PowerOff 0xde + +# evdev 117 (0x75), QKeyCode "kp_equals", number 0x59 +KP_Equal 0x59 + +# evdev 118 (0x76): no evdev -> QKeyCode mapping (xkb keysym plusminus) + +# evdev 119 (0x77), QKeyCode "pause", number 0xc6 +Pause 0xc6 + +# evdev 120 (0x78): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchA) + +# evdev 121 (0x79), QKeyCode "kp_comma", number 0x7e +KP_Decimal 0x7e + +# evdev 122 (0x7a): no evdev -> QKeyCode mapping (xkb keysym Hangul) + +# evdev 123 (0x7b): no evdev -> QKeyCode mapping (xkb keysym Hangul_Hanja) + +# evdev 124 (0x7c), QKeyCode "yen", number 0x7d + +# evdev 125 (0x7d), QKeyCode "meta_l", number 0xdb +Super_L 0xdb + +# evdev 126 (0x7e), QKeyCode "meta_r", number 0xdc +Super_R 0xdc + +# evdev 127 (0x7f), QKeyCode "compose", number 0xdd +Menu 0xdd + +# evdev 128 (0x80), QKeyCode "stop", number 0xe8 +Cancel 0xe8 + +# evdev 129 (0x81), QKeyCode "again", number 0x85 +Redo 0x85 + +# evdev 130 (0x82), QKeyCode "props", number 0x86 +SunProps 0x86 + +# evdev 131 (0x83), QKeyCode "undo", number 0x87 +Undo 0x87 + +# evdev 132 (0x84), QKeyCode "front", number 0x8c +SunFront 0x8c + +# evdev 133 (0x85), QKeyCode "copy", number 0xf8 +XF86Copy 0xf8 + +# evdev 134 (0x86), QKeyCode "open", number 0x64 +XF86Open 0x64 + +# evdev 135 (0x87), QKeyCode "paste", number 0x65 +XF86Paste 0x65 + +# evdev 136 (0x88), QKeyCode "find", number 0xc1 +Find 0xc1 + +# evdev 137 (0x89), QKeyCode "cut", number 0xbc +XF86Cut 0xbc + +# evdev 138 (0x8a), QKeyCode "help", number 0xf5 +Help 0xf5 + +# evdev 139 (0x8b), QKeyCode "menu", number 0x9e +XF86MenuKB 0x9e + +# evdev 140 (0x8c), QKeyCode "calculator", number 0xa1 +XF86Calculator 0xa1 + +# evdev 141 (0x8d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 142 (0x8e), QKeyCode "sleep", number 0xdf +XF86Sleep 0xdf + +# evdev 143 (0x8f), QKeyCode "wake", number 0xe3 +XF86WakeUp 0xe3 + +# evdev 144 (0x90): no evdev -> QKeyCode mapping (xkb keysym XF86Explorer) + +# evdev 145 (0x91): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 146 (0x92): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 147 (0x93): no evdev -> QKeyCode mapping (xkb keysym XF86Xfer) + +# evdev 148 (0x94): no evdev -> QKeyCode mapping (xkb keysym XF86Launch1) + +# evdev 149 (0x95): no evdev -> QKeyCode mapping (xkb keysym XF86Launch2) + +# evdev 150 (0x96): no evdev -> QKeyCode mapping (xkb keysym XF86WWW) + +# evdev 151 (0x97): no evdev -> QKeyCode mapping (xkb keysym XF86DOS) + +# evdev 152 (0x98): no evdev -> QKeyCode mapping (xkb keysym XF86ScreenSaver) + +# evdev 153 (0x99): no evdev -> QKeyCode mapping (xkb keysym XF86RotateWindows) + +# evdev 154 (0x9a): no evdev -> QKeyCode mapping (xkb keysym XF86TaskPane) + +# evdev 155 (0x9b), QKeyCode "mail", number 0xec +XF86Mail 0xec + +# evdev 156 (0x9c), QKeyCode "ac_bookmarks", number 0xe6 +XF86Favorites 0xe6 + +# evdev 157 (0x9d), QKeyCode "computer", number 0xeb +XF86MyComputer 0xeb + +# evdev 158 (0x9e), QKeyCode "ac_back", number 0xea +XF86Back 0xea + +# evdev 159 (0x9f), QKeyCode "ac_forward", number 0xe9 +XF86Forward 0xe9 + +# evdev 160 (0xa0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 161 (0xa1): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 162 (0xa2): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 163 (0xa3), QKeyCode "audionext", number 0x99 +XF86AudioNext 0x99 + +# evdev 164 (0xa4), QKeyCode "audioplay", number 0xa2 +XF86AudioPlay 0xa2 +XF86AudioPause 0xa2 shift + +# evdev 165 (0xa5), QKeyCode "audioprev", number 0x90 +XF86AudioPrev 0x90 + +# evdev 166 (0xa6), QKeyCode "audiostop", number 0xa4 +XF86AudioStop 0xa4 +XF86Eject 0xa4 shift + +# evdev 167 (0xa7): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRecord) + +# evdev 168 (0xa8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRewind) + +# evdev 169 (0xa9): no evdev -> QKeyCode mapping (xkb keysym XF86Phone) + +# evdev 170 (0xaa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 171 (0xab): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 172 (0xac), QKeyCode "ac_home", number 0xb2 +XF86HomePage 0xb2 + +# evdev 173 (0xad), QKeyCode "ac_refresh", number 0xe7 +XF86Reload 0xe7 + +# evdev 174 (0xae): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 175 (0xaf): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 176 (0xb0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 177 (0xb1): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollUp) + +# evdev 178 (0xb2): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollDown) + +# evdev 179 (0xb3): no evdev -> QKeyCode mapping (xkb keysym parenleft) + +# evdev 180 (0xb4): no evdev -> QKeyCode mapping (xkb keysym parenright) + +# evdev 181 (0xb5): no evdev -> QKeyCode mapping (xkb keysym XF86New) + +# evdev 182 (0xb6): no evdev -> QKeyCode mapping (xkb keysym Redo) + +# evdev 183 (0xb7): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 184 (0xb8): no evdev -> QKeyCode mapping (xkb keysym XF86Launch5) + +# evdev 185 (0xb9): no evdev -> QKeyCode mapping (xkb keysym XF86Launch6) + +# evdev 186 (0xba): no evdev -> QKeyCode mapping (xkb keysym XF86Launch7) + +# evdev 187 (0xbb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch8) + +# evdev 188 (0xbc): no evdev -> QKeyCode mapping (xkb keysym XF86Launch9) + +# evdev 189 (0xbd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 190 (0xbe): no evdev -> QKeyCode mapping (xkb keysym XF86AudioMicMute) + +# evdev 191 (0xbf): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadToggle) + +# evdev 192 (0xc0): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOn) + +# evdev 193 (0xc1): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOff) + +# evdev 194 (0xc2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 195 (0xc3): no evdev -> QKeyCode mapping (xkb keysym Mode_switch) + +# evdev 196 (0xc4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 197 (0xc5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 198 (0xc6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 199 (0xc7): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 200 (0xc8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 201 (0xc9): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPause) + +# evdev 202 (0xca): no evdev -> QKeyCode mapping (xkb keysym XF86Launch3) + +# evdev 203 (0xcb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch4) + +# evdev 204 (0xcc): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchB) + +# evdev 205 (0xcd): no evdev -> QKeyCode mapping (xkb keysym XF86Suspend) + +# evdev 206 (0xce): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 207 (0xcf): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 208 (0xd0): no evdev -> QKeyCode mapping (xkb keysym XF86AudioForward) + +# evdev 209 (0xd1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 210 (0xd2): no evdev -> QKeyCode mapping (xkb keysym Print) + +# evdev 211 (0xd3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 212 (0xd4): no evdev -> QKeyCode mapping (xkb keysym XF86WebCam) + +# evdev 213 (0xd5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 214 (0xd6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 215 (0xd7): no evdev -> QKeyCode mapping (xkb keysym XF86Mail) + +# evdev 216 (0xd8): no evdev -> QKeyCode mapping (xkb keysym XF86Messenger) + +# evdev 217 (0xd9): no evdev -> QKeyCode mapping (xkb keysym XF86Search) + +# evdev 218 (0xda): no evdev -> QKeyCode mapping (xkb keysym XF86Go) + +# evdev 219 (0xdb): no evdev -> QKeyCode mapping (xkb keysym XF86Finance) + +# evdev 220 (0xdc): no evdev -> QKeyCode mapping (xkb keysym XF86Game) + +# evdev 221 (0xdd): no evdev -> QKeyCode mapping (xkb keysym XF86Shop) + +# evdev 222 (0xde): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 223 (0xdf): no evdev -> QKeyCode mapping (xkb keysym Cancel) + +# evdev 224 (0xe0): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessDown) + +# evdev 225 (0xe1): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessUp) + +# evdev 226 (0xe2), QKeyCode "mediaselect", number 0xed +XF86AudioMedia 0xed + +# evdev 227 (0xe3): no evdev -> QKeyCode mapping (xkb keysym XF86Display) + +# evdev 228 (0xe4): no evdev -> QKeyCode mapping (xkb keysym XF86KbdLightOnOff) + +# evdev 229 (0xe5): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessDown) + +# evdev 230 (0xe6): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessUp) + +# evdev 231 (0xe7): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 232 (0xe8): no evdev -> QKeyCode mapping (xkb keysym XF86Reply) + +# evdev 233 (0xe9): no evdev -> QKeyCode mapping (xkb keysym XF86MailForward) + +# evdev 234 (0xea): no evdev -> QKeyCode mapping (xkb keysym XF86Save) + +# evdev 235 (0xeb): no evdev -> QKeyCode mapping (xkb keysym XF86Documents) + +# evdev 236 (0xec): no evdev -> QKeyCode mapping (xkb keysym XF86Battery) + +# evdev 237 (0xed): no evdev -> QKeyCode mapping (xkb keysym XF86Bluetooth) + +# evdev 238 (0xee): no evdev -> QKeyCode mapping (xkb keysym XF86WLAN) + +# evdev 239 (0xef): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 240 (0xf0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 241 (0xf1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 242 (0xf2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 243 (0xf3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 244 (0xf4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# +# quirks section start +# +# Sometimes multiple keysyms map to the same keycodes. +# The keycode -> keysym lookup finds only one of the +# keysyms. So append them here. +# + +Print 0x54 +Sys_Req 0x54 +Execute 0x54 +KP_Decimal 0x53 numlock +KP_Separator 0x53 numlock +Alt_R 0xb8 +ISO_Level3_Shift 0xb8 +Mode_switch 0xb8 + +# quirks section end diff --git a/app/src/main/assets/roms/keymaps/sl b/app/src/main/assets/roms/keymaps/sl new file mode 100644 index 0000000..56835a9 --- /dev/null +++ b/app/src/main/assets/roms/keymaps/sl @@ -0,0 +1,110 @@ +# generated from XKB map sl +include common +map 0x424 +exclam 0x02 shift +asciitilde 0x02 altgr +dead_tilde 0x02 shift altgr +quotedbl 0x03 shift +dead_caron 0x03 altgr +caron 0x03 shift altgr +numbersign 0x04 shift +asciicircum 0x04 altgr +dead_circumflex 0x04 shift altgr +dollar 0x05 shift +dead_breve 0x05 altgr +breve 0x05 shift altgr +percent 0x06 shift +degree 0x06 altgr +dead_abovering 0x06 shift altgr +ampersand 0x07 shift +dead_ogonek 0x07 altgr +ogonek 0x07 shift altgr +slash 0x08 shift +grave 0x08 altgr +dead_grave 0x08 shift altgr +parenleft 0x09 shift +dead_abovedot 0x09 altgr +abovedot 0x09 shift altgr +parenright 0x0a shift +dead_acute 0x0a altgr +equal 0x0b shift +dead_doubleacute 0x0b altgr +doubleacute 0x0b shift altgr +apostrophe 0x0c +question 0x0c shift +dead_diaeresis 0x0c altgr +diaeresis 0x0c shift altgr +plus 0x0d +asterisk 0x0d shift +dead_cedilla 0x0d altgr +cedilla 0x0d shift altgr +backslash 0x10 altgr +Greek_OMEGA 0x10 shift altgr +bar 0x11 altgr +Lstroke 0x11 shift altgr +EuroSign 0x12 altgr +paragraph 0x13 altgr +registered 0x13 shift altgr +tslash 0x14 altgr +Tslash 0x14 shift altgr +z 0x15 addupper +leftarrow 0x15 altgr +yen 0x15 shift altgr +downarrow 0x16 altgr +uparrow 0x16 shift altgr +rightarrow 0x17 altgr +idotless 0x17 shift altgr +oslash 0x18 altgr +Ooblique 0x18 shift altgr +thorn 0x19 altgr +THORN 0x19 shift altgr +scaron 0x1a +Scaron 0x1a shift +division 0x1a altgr +dstroke 0x1b +Dstroke 0x1b shift +multiply 0x1b altgr +dead_macron 0x1b shift altgr +ae 0x1e altgr +AE 0x1e shift altgr +ssharp 0x1f altgr +section 0x1f shift altgr +eth 0x20 altgr +ETH 0x20 shift altgr +bracketleft 0x21 altgr +ordfeminine 0x21 shift altgr +bracketright 0x22 altgr +ENG 0x22 shift altgr +hstroke 0x23 altgr +Hstroke 0x23 shift altgr +lstroke 0x25 altgr +Lstroke 0x26 altgr +ccaron 0x27 +Ccaron 0x27 shift +cacute 0x28 +Cacute 0x28 shift +ssharp 0x28 altgr +dead_cedilla 0x29 +notsign 0x29 altgr +zcaron 0x2b +Zcaron 0x2b shift +currency 0x2b altgr +y 0x2c addupper +guillemotleft 0x2c altgr +guillemotright 0x2d altgr +cent 0x2e altgr +copyright 0x2e shift altgr +at 0x2f altgr +braceleft 0x30 altgr +braceright 0x31 altgr +section 0x32 altgr +masculine 0x32 shift altgr +comma 0x33 +semicolon 0x33 shift +horizconnector 0x33 altgr +period 0x34 +colon 0x34 shift +periodcentered 0x34 altgr +minus 0x35 +underscore 0x35 shift +dead_belowdot 0x35 altgr diff --git a/app/src/main/assets/roms/keymaps/sv b/app/src/main/assets/roms/keymaps/sv new file mode 100644 index 0000000..5d9080e --- /dev/null +++ b/app/src/main/assets/roms/keymaps/sv @@ -0,0 +1,81 @@ +map 0x0000041d +include common + +# +# Top row +# +section 0x29 +onehalf 0x29 shift + +# 1 +exclam 0x2 shift + +# 2 +quotedbl 0x3 shift +at 0x3 altgr + +# 3 +numbersign 0x4 shift +sterling 0x4 altgr +# 4 +currency 0x5 shift +dollar 0x5 altgr +# 5 +percent 0x6 shift +# 6 +ampersand 0x7 shift +# 7 +slash 0x8 shift +braceleft 0x8 altgr +# 8 +parenleft 0x9 shift +bracketleft 0x9 altgr +# 9 +parenright 0xa shift +bracketright 0xa altgr +# 0 +equal 0xb shift +braceright 0xb altgr + +plus 0xc +question 0xc shift +backslash 0xc altgr + +acute 0xd +dead_acute 0xd +grave 0xd shift +dead_grave 0xd shift + +# +# QWERTY first row +# +EuroSign 0x12 altgr +aring 0x1a +Aring 0x1a shift +dead_diaeresis 0x1b +dead_circumflex 0x1b shift +dead_tilde 0x1b altgr + +# +# QWERTY second row +# +odiaeresis 0x27 +Odiaeresis 0x27 shift +adiaeresis 0x28 +Adiaeresis 0x28 shift +apostrophe 0x2b +asterisk 0x2b shift + +# +# QWERTY third row +# +less 0x56 +greater 0x56 shift +bar 0x56 altgr +mu 0x32 altgr +comma 0x33 +semicolon 0x33 shift +period 0x34 +colon 0x34 shift +minus 0x35 +underscore 0x35 shift diff --git a/app/src/main/assets/roms/keymaps/th b/app/src/main/assets/roms/keymaps/th new file mode 100644 index 0000000..56a0135 --- /dev/null +++ b/app/src/main/assets/roms/keymaps/th @@ -0,0 +1,747 @@ +# +# generated by qemu-keymap +# model : pc105 +# layout : th +# variant : - +# options : - + +# name: "Thai" + +# modifiers +# 0: Shift +# 1: Lock +# 2: Control +# 3: Mod1 +# 4: Mod2 +# 5: Mod3 +# 6: Mod4 +# 7: Mod5 +# 8: NumLock +# 9: Alt +# 10: LevelThree +# 11: LAlt +# 12: RAlt +# 13: RControl +# 14: LControl +# 15: ScrollLock +# 16: LevelFive +# 17: AltGr +# 18: Meta +# 19: Super +# 20: Hyper + +# evdev 1 (0x1), QKeyCode "esc", number 0x1 +Escape 0x01 + +# evdev 2 (0x2), QKeyCode "1", number 0x2 +Thai_lakkhangyao 0x02 +plus 0x02 shift + +# evdev 3 (0x3), QKeyCode "2", number 0x3 +slash 0x03 +Thai_leknung 0x03 shift + +# evdev 4 (0x4), QKeyCode "3", number 0x4 +minus 0x04 +Thai_leksong 0x04 shift + +# evdev 5 (0x5), QKeyCode "4", number 0x5 +Thai_phosamphao 0x05 +Thai_leksam 0x05 shift + +# evdev 6 (0x6), QKeyCode "5", number 0x6 +Thai_thothung 0x06 +Thai_leksi 0x06 shift + +# evdev 7 (0x7), QKeyCode "6", number 0x7 +Thai_sarau 0x07 +Thai_sarauu 0x07 shift + +# evdev 8 (0x8), QKeyCode "7", number 0x8 +Thai_saraue 0x08 +Thai_baht 0x08 shift + +# evdev 9 (0x9), QKeyCode "8", number 0x9 +Thai_khokhwai 0x09 +Thai_lekha 0x09 shift + +# evdev 10 (0xa), QKeyCode "9", number 0xa +Thai_totao 0x0a +Thai_lekhok 0x0a shift + +# evdev 11 (0xb), QKeyCode "0", number 0xb +Thai_chochan 0x0b +Thai_lekchet 0x0b shift + +# evdev 12 (0xc), QKeyCode "minus", number 0xc +Thai_khokhai 0x0c +Thai_lekpaet 0x0c shift + +# evdev 13 (0xd), QKeyCode "equal", number 0xd +Thai_chochang 0x0d +Thai_lekkao 0x0d shift + +# evdev 14 (0xe), QKeyCode "backspace", number 0xe +BackSpace 0x0e + +# evdev 15 (0xf), QKeyCode "tab", number 0xf +Tab 0x0f +ISO_Left_Tab 0x0f shift + +# evdev 16 (0x10), QKeyCode "q", number 0x10 +Thai_maiyamok 0x10 +Thai_leksun 0x10 shift + +# evdev 17 (0x11), QKeyCode "w", number 0x11 +Thai_saraaimaimalai 0x11 +quotedbl 0x11 shift + +# evdev 18 (0x12), QKeyCode "e", number 0x12 +Thai_saraam 0x12 +Thai_dochada 0x12 shift + +# evdev 19 (0x13), QKeyCode "r", number 0x13 +Thai_phophan 0x13 +Thai_thonangmontho 0x13 shift + +# evdev 20 (0x14), QKeyCode "t", number 0x14 +Thai_saraa 0x14 +Thai_thothong 0x14 shift + +# evdev 21 (0x15), QKeyCode "y", number 0x15 +Thai_maihanakat 0x15 +Thai_nikhahit 0x15 shift + +# evdev 22 (0x16), QKeyCode "u", number 0x16 +Thai_saraii 0x16 +Thai_maitri 0x16 shift + +# evdev 23 (0x17), QKeyCode "i", number 0x17 +Thai_rorua 0x17 +Thai_nonen 0x17 shift + +# evdev 24 (0x18), QKeyCode "o", number 0x18 +Thai_nonu 0x18 +Thai_paiyannoi 0x18 shift + +# evdev 25 (0x19), QKeyCode "p", number 0x19 +Thai_yoyak 0x19 +Thai_yoying 0x19 shift + +# evdev 26 (0x1a), QKeyCode "bracket_left", number 0x1a +Thai_bobaimai 0x1a +Thai_thothan 0x1a shift + +# evdev 27 (0x1b), QKeyCode "bracket_right", number 0x1b +Thai_loling 0x1b +comma 0x1b shift + +# evdev 28 (0x1c), QKeyCode "ret", number 0x1c +Return 0x1c + +# evdev 29 (0x1d), QKeyCode "ctrl", number 0x1d +Control_L 0x1d + +# evdev 30 (0x1e), QKeyCode "a", number 0x1e +Thai_fofan 0x1e +Thai_ru 0x1e shift + +# evdev 31 (0x1f), QKeyCode "s", number 0x1f +Thai_hohip 0x1f +Thai_khorakhang 0x1f shift + +# evdev 32 (0x20), QKeyCode "d", number 0x20 +Thai_kokai 0x20 +Thai_topatak 0x20 shift + +# evdev 33 (0x21), QKeyCode "f", number 0x21 +Thai_dodek 0x21 +Thai_sarao 0x21 shift + +# evdev 34 (0x22), QKeyCode "g", number 0x22 +Thai_sarae 0x22 +Thai_chochoe 0x22 shift + +# evdev 35 (0x23), QKeyCode "h", number 0x23 +Thai_maitho 0x23 +Thai_maitaikhu 0x23 shift + +# evdev 36 (0x24), QKeyCode "j", number 0x24 +Thai_maiek 0x24 +Thai_maichattawa 0x24 shift + +# evdev 37 (0x25), QKeyCode "k", number 0x25 +Thai_saraaa 0x25 +Thai_sorusi 0x25 shift + +# evdev 38 (0x26), QKeyCode "l", number 0x26 +Thai_sosua 0x26 +Thai_sosala 0x26 shift + +# evdev 39 (0x27), QKeyCode "semicolon", number 0x27 +Thai_wowaen 0x27 +Thai_soso 0x27 shift + +# evdev 40 (0x28), QKeyCode "apostrophe", number 0x28 +Thai_ngongu 0x28 +period 0x28 shift + +# evdev 41 (0x29), QKeyCode "grave_accent", number 0x29 +underscore 0x29 +percent 0x29 shift + +# evdev 42 (0x2a), QKeyCode "shift", number 0x2a +Shift_L 0x2a + +# evdev 43 (0x2b), QKeyCode "backslash", number 0x2b +Thai_khokhuat 0x2b +Thai_khokhon 0x2b shift + +# evdev 44 (0x2c), QKeyCode "z", number 0x2c +Thai_phophung 0x2c +parenleft 0x2c shift + +# evdev 45 (0x2d), QKeyCode "x", number 0x2d +Thai_popla 0x2d +parenright 0x2d shift + +# evdev 46 (0x2e), QKeyCode "c", number 0x2e +Thai_saraae 0x2e +Thai_choching 0x2e shift + +# evdev 47 (0x2f), QKeyCode "v", number 0x2f +Thai_oang 0x2f +Thai_honokhuk 0x2f shift + +# evdev 48 (0x30), QKeyCode "b", number 0x30 +Thai_sarai 0x30 +Thai_phinthu 0x30 shift + +# evdev 49 (0x31), QKeyCode "n", number 0x31 +Thai_sarauee 0x31 +Thai_thanthakhat 0x31 shift + +# evdev 50 (0x32), QKeyCode "m", number 0x32 +Thai_thothahan 0x32 +question 0x32 shift + +# evdev 51 (0x33), QKeyCode "comma", number 0x33 +Thai_moma 0x33 +Thai_thophuthao 0x33 shift + +# evdev 52 (0x34), QKeyCode "dot", number 0x34 +Thai_saraaimaimuan 0x34 +Thai_lochula 0x34 shift + +# evdev 53 (0x35), QKeyCode "slash", number 0x35 +Thai_fofa 0x35 +Thai_lu 0x35 shift + +# evdev 54 (0x36), QKeyCode "shift_r", number 0x36 +Shift_R 0x36 + +# evdev 55 (0x37), QKeyCode "kp_multiply", number 0x37 +KP_Multiply 0x37 + +# evdev 56 (0x38), QKeyCode "alt", number 0x38 +Alt_L 0x38 +Meta_L 0x38 shift + +# evdev 57 (0x39), QKeyCode "spc", number 0x39 +space 0x39 + +# evdev 58 (0x3a), QKeyCode "caps_lock", number 0x3a +Caps_Lock 0x3a + +# evdev 59 (0x3b), QKeyCode "f1", number 0x3b +F1 0x3b + +# evdev 60 (0x3c), QKeyCode "f2", number 0x3c +F2 0x3c + +# evdev 61 (0x3d), QKeyCode "f3", number 0x3d +F3 0x3d + +# evdev 62 (0x3e), QKeyCode "f4", number 0x3e +F4 0x3e + +# evdev 63 (0x3f), QKeyCode "f5", number 0x3f +F5 0x3f + +# evdev 64 (0x40), QKeyCode "f6", number 0x40 +F6 0x40 + +# evdev 65 (0x41), QKeyCode "f7", number 0x41 +F7 0x41 + +# evdev 66 (0x42), QKeyCode "f8", number 0x42 +F8 0x42 + +# evdev 67 (0x43), QKeyCode "f9", number 0x43 +F9 0x43 + +# evdev 68 (0x44), QKeyCode "f10", number 0x44 +F10 0x44 + +# evdev 69 (0x45), QKeyCode "num_lock", number 0x45 +Num_Lock 0x45 + +# evdev 70 (0x46), QKeyCode "scroll_lock", number 0x46 +Scroll_Lock 0x46 + +# evdev 71 (0x47), QKeyCode "kp_7", number 0x47 +KP_Home 0x47 +KP_7 0x47 numlock + +# evdev 72 (0x48), QKeyCode "kp_8", number 0x48 +KP_Up 0x48 +KP_8 0x48 numlock + +# evdev 73 (0x49), QKeyCode "kp_9", number 0x49 +KP_Prior 0x49 +KP_9 0x49 numlock + +# evdev 74 (0x4a), QKeyCode "kp_subtract", number 0x4a +KP_Subtract 0x4a + +# evdev 75 (0x4b), QKeyCode "kp_4", number 0x4b +KP_Left 0x4b +KP_4 0x4b numlock + +# evdev 76 (0x4c), QKeyCode "kp_5", number 0x4c +KP_Begin 0x4c +KP_5 0x4c numlock + +# evdev 77 (0x4d), QKeyCode "kp_6", number 0x4d +KP_Right 0x4d +KP_6 0x4d numlock + +# evdev 78 (0x4e), QKeyCode "kp_add", number 0x4e +KP_Add 0x4e + +# evdev 79 (0x4f), QKeyCode "kp_1", number 0x4f +KP_End 0x4f +KP_1 0x4f numlock + +# evdev 80 (0x50), QKeyCode "kp_2", number 0x50 +KP_Down 0x50 +KP_2 0x50 numlock + +# evdev 81 (0x51), QKeyCode "kp_3", number 0x51 +KP_Next 0x51 +KP_3 0x51 numlock + +# evdev 82 (0x52), QKeyCode "kp_0", number 0x52 +KP_Insert 0x52 +KP_0 0x52 numlock + +# evdev 83 (0x53), QKeyCode "kp_decimal", number 0x53 +KP_Delete 0x53 +KP_Decimal 0x53 numlock + +# evdev 84 (0x54): no evdev -> QKeyCode mapping (xkb keysym ISO_Level3_Shift) + +# evdev 85 (0x55): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 86 (0x56), QKeyCode "less", number 0x56 +less 0x56 +greater 0x56 shift +bar 0x56 altgr +brokenbar 0x56 shift altgr + +# evdev 87 (0x57), QKeyCode "f11", number 0x57 +F11 0x57 + +# evdev 88 (0x58), QKeyCode "f12", number 0x58 +F12 0x58 + +# evdev 89 (0x59), QKeyCode "ro", number 0x73 + +# evdev 90 (0x5a): no evdev -> QKeyCode mapping (xkb keysym Katakana) + +# evdev 91 (0x5b), QKeyCode "hiragana", number 0x77 +Hiragana 0x77 + +# evdev 92 (0x5c), QKeyCode "henkan", number 0x79 +Henkan_Mode 0x79 + +# evdev 93 (0x5d): no evdev -> QKeyCode mapping (xkb keysym Hiragana_Katakana) + +# evdev 94 (0x5e): no evdev -> QKeyCode mapping (xkb keysym Muhenkan) + +# evdev 95 (0x5f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 96 (0x60), QKeyCode "kp_enter", number 0x9c +KP_Enter 0x9c + +# evdev 97 (0x61), QKeyCode "ctrl_r", number 0x9d +Control_R 0x9d + +# evdev 98 (0x62), QKeyCode "kp_divide", number 0xb5 +KP_Divide 0xb5 + +# evdev 99 (0x63), QKeyCode "sysrq", number 0x54 +Print 0x54 + +# evdev 100 (0x64), QKeyCode "alt_r", number 0xb8 +Alt_R 0xb8 +Meta_R 0xb8 shift + +# evdev 101 (0x65), QKeyCode "lf", number 0x5b +Linefeed 0x5b + +# evdev 102 (0x66), QKeyCode "home", number 0xc7 +Home 0xc7 + +# evdev 103 (0x67), QKeyCode "up", number 0xc8 +Up 0xc8 + +# evdev 104 (0x68), QKeyCode "pgup", number 0xc9 +Prior 0xc9 + +# evdev 105 (0x69), QKeyCode "left", number 0xcb +Left 0xcb + +# evdev 106 (0x6a), QKeyCode "right", number 0xcd +Right 0xcd + +# evdev 107 (0x6b), QKeyCode "end", number 0xcf +End 0xcf + +# evdev 108 (0x6c), QKeyCode "down", number 0xd0 +Down 0xd0 + +# evdev 109 (0x6d), QKeyCode "pgdn", number 0xd1 +Next 0xd1 + +# evdev 110 (0x6e), QKeyCode "insert", number 0xd2 +Insert 0xd2 + +# evdev 111 (0x6f), QKeyCode "delete", number 0xd3 +Delete 0xd3 + +# evdev 112 (0x70): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 113 (0x71), QKeyCode "audiomute", number 0xa0 +XF86AudioMute 0xa0 + +# evdev 114 (0x72), QKeyCode "volumedown", number 0xae +XF86AudioLowerVolume 0xae + +# evdev 115 (0x73), QKeyCode "volumeup", number 0xb0 +XF86AudioRaiseVolume 0xb0 + +# evdev 116 (0x74), QKeyCode "power", number 0xde +XF86PowerOff 0xde + +# evdev 117 (0x75), QKeyCode "kp_equals", number 0x59 +KP_Equal 0x59 + +# evdev 118 (0x76): no evdev -> QKeyCode mapping (xkb keysym plusminus) + +# evdev 119 (0x77), QKeyCode "pause", number 0xc6 +Pause 0xc6 + +# evdev 120 (0x78): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchA) + +# evdev 121 (0x79), QKeyCode "kp_comma", number 0x7e +KP_Decimal 0x7e + +# evdev 122 (0x7a): no evdev -> QKeyCode mapping (xkb keysym Hangul) + +# evdev 123 (0x7b): no evdev -> QKeyCode mapping (xkb keysym Hangul_Hanja) + +# evdev 124 (0x7c), QKeyCode "yen", number 0x7d + +# evdev 125 (0x7d), QKeyCode "meta_l", number 0xdb +Super_L 0xdb + +# evdev 126 (0x7e), QKeyCode "meta_r", number 0xdc +Super_R 0xdc + +# evdev 127 (0x7f), QKeyCode "compose", number 0xdd +Menu 0xdd + +# evdev 128 (0x80), QKeyCode "stop", number 0xe8 +Cancel 0xe8 + +# evdev 129 (0x81), QKeyCode "again", number 0x85 +Redo 0x85 + +# evdev 130 (0x82), QKeyCode "props", number 0x86 +SunProps 0x86 + +# evdev 131 (0x83), QKeyCode "undo", number 0x87 +Undo 0x87 + +# evdev 132 (0x84), QKeyCode "front", number 0x8c +SunFront 0x8c + +# evdev 133 (0x85), QKeyCode "copy", number 0xf8 +XF86Copy 0xf8 + +# evdev 134 (0x86), QKeyCode "open", number 0x64 +XF86Open 0x64 + +# evdev 135 (0x87), QKeyCode "paste", number 0x65 +XF86Paste 0x65 + +# evdev 136 (0x88), QKeyCode "find", number 0xc1 +Find 0xc1 + +# evdev 137 (0x89), QKeyCode "cut", number 0xbc +XF86Cut 0xbc + +# evdev 138 (0x8a), QKeyCode "help", number 0xf5 +Help 0xf5 + +# evdev 139 (0x8b), QKeyCode "menu", number 0x9e +XF86MenuKB 0x9e + +# evdev 140 (0x8c), QKeyCode "calculator", number 0xa1 +XF86Calculator 0xa1 + +# evdev 141 (0x8d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 142 (0x8e), QKeyCode "sleep", number 0xdf +XF86Sleep 0xdf + +# evdev 143 (0x8f), QKeyCode "wake", number 0xe3 +XF86WakeUp 0xe3 + +# evdev 144 (0x90): no evdev -> QKeyCode mapping (xkb keysym XF86Explorer) + +# evdev 145 (0x91): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 146 (0x92): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 147 (0x93): no evdev -> QKeyCode mapping (xkb keysym XF86Xfer) + +# evdev 148 (0x94): no evdev -> QKeyCode mapping (xkb keysym XF86Launch1) + +# evdev 149 (0x95): no evdev -> QKeyCode mapping (xkb keysym XF86Launch2) + +# evdev 150 (0x96): no evdev -> QKeyCode mapping (xkb keysym XF86WWW) + +# evdev 151 (0x97): no evdev -> QKeyCode mapping (xkb keysym XF86DOS) + +# evdev 152 (0x98): no evdev -> QKeyCode mapping (xkb keysym XF86ScreenSaver) + +# evdev 153 (0x99): no evdev -> QKeyCode mapping (xkb keysym XF86RotateWindows) + +# evdev 154 (0x9a): no evdev -> QKeyCode mapping (xkb keysym XF86TaskPane) + +# evdev 155 (0x9b), QKeyCode "mail", number 0xec +XF86Mail 0xec + +# evdev 156 (0x9c), QKeyCode "ac_bookmarks", number 0xe6 +XF86Favorites 0xe6 + +# evdev 157 (0x9d), QKeyCode "computer", number 0xeb +XF86MyComputer 0xeb + +# evdev 158 (0x9e), QKeyCode "ac_back", number 0xea +XF86Back 0xea + +# evdev 159 (0x9f), QKeyCode "ac_forward", number 0xe9 +XF86Forward 0xe9 + +# evdev 160 (0xa0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 161 (0xa1): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 162 (0xa2): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 163 (0xa3), QKeyCode "audionext", number 0x99 +XF86AudioNext 0x99 + +# evdev 164 (0xa4), QKeyCode "audioplay", number 0xa2 +XF86AudioPlay 0xa2 +XF86AudioPause 0xa2 shift + +# evdev 165 (0xa5), QKeyCode "audioprev", number 0x90 +XF86AudioPrev 0x90 + +# evdev 166 (0xa6), QKeyCode "audiostop", number 0xa4 +XF86AudioStop 0xa4 +XF86Eject 0xa4 shift + +# evdev 167 (0xa7): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRecord) + +# evdev 168 (0xa8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRewind) + +# evdev 169 (0xa9): no evdev -> QKeyCode mapping (xkb keysym XF86Phone) + +# evdev 170 (0xaa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 171 (0xab): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 172 (0xac), QKeyCode "ac_home", number 0xb2 +XF86HomePage 0xb2 + +# evdev 173 (0xad), QKeyCode "ac_refresh", number 0xe7 +XF86Reload 0xe7 + +# evdev 174 (0xae): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 175 (0xaf): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 176 (0xb0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 177 (0xb1): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollUp) + +# evdev 178 (0xb2): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollDown) + +# evdev 179 (0xb3): no evdev -> QKeyCode mapping (xkb keysym parenleft) + +# evdev 180 (0xb4): no evdev -> QKeyCode mapping (xkb keysym parenright) + +# evdev 181 (0xb5): no evdev -> QKeyCode mapping (xkb keysym XF86New) + +# evdev 182 (0xb6): no evdev -> QKeyCode mapping (xkb keysym Redo) + +# evdev 183 (0xb7): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 184 (0xb8): no evdev -> QKeyCode mapping (xkb keysym XF86Launch5) + +# evdev 185 (0xb9): no evdev -> QKeyCode mapping (xkb keysym XF86Launch6) + +# evdev 186 (0xba): no evdev -> QKeyCode mapping (xkb keysym XF86Launch7) + +# evdev 187 (0xbb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch8) + +# evdev 188 (0xbc): no evdev -> QKeyCode mapping (xkb keysym XF86Launch9) + +# evdev 189 (0xbd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 190 (0xbe): no evdev -> QKeyCode mapping (xkb keysym XF86AudioMicMute) + +# evdev 191 (0xbf): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadToggle) + +# evdev 192 (0xc0): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOn) + +# evdev 193 (0xc1): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOff) + +# evdev 194 (0xc2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 195 (0xc3): no evdev -> QKeyCode mapping (xkb keysym Mode_switch) + +# evdev 196 (0xc4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 197 (0xc5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 198 (0xc6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 199 (0xc7): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 200 (0xc8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 201 (0xc9): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPause) + +# evdev 202 (0xca): no evdev -> QKeyCode mapping (xkb keysym XF86Launch3) + +# evdev 203 (0xcb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch4) + +# evdev 204 (0xcc): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchB) + +# evdev 205 (0xcd): no evdev -> QKeyCode mapping (xkb keysym XF86Suspend) + +# evdev 206 (0xce): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 207 (0xcf): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 208 (0xd0): no evdev -> QKeyCode mapping (xkb keysym XF86AudioForward) + +# evdev 209 (0xd1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 210 (0xd2): no evdev -> QKeyCode mapping (xkb keysym Print) + +# evdev 211 (0xd3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 212 (0xd4): no evdev -> QKeyCode mapping (xkb keysym XF86WebCam) + +# evdev 213 (0xd5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 214 (0xd6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 215 (0xd7): no evdev -> QKeyCode mapping (xkb keysym XF86Mail) + +# evdev 216 (0xd8): no evdev -> QKeyCode mapping (xkb keysym XF86Messenger) + +# evdev 217 (0xd9): no evdev -> QKeyCode mapping (xkb keysym XF86Search) + +# evdev 218 (0xda): no evdev -> QKeyCode mapping (xkb keysym XF86Go) + +# evdev 219 (0xdb): no evdev -> QKeyCode mapping (xkb keysym XF86Finance) + +# evdev 220 (0xdc): no evdev -> QKeyCode mapping (xkb keysym XF86Game) + +# evdev 221 (0xdd): no evdev -> QKeyCode mapping (xkb keysym XF86Shop) + +# evdev 222 (0xde): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 223 (0xdf): no evdev -> QKeyCode mapping (xkb keysym Cancel) + +# evdev 224 (0xe0): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessDown) + +# evdev 225 (0xe1): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessUp) + +# evdev 226 (0xe2), QKeyCode "mediaselect", number 0xed +XF86AudioMedia 0xed + +# evdev 227 (0xe3): no evdev -> QKeyCode mapping (xkb keysym XF86Display) + +# evdev 228 (0xe4): no evdev -> QKeyCode mapping (xkb keysym XF86KbdLightOnOff) + +# evdev 229 (0xe5): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessDown) + +# evdev 230 (0xe6): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessUp) + +# evdev 231 (0xe7): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 232 (0xe8): no evdev -> QKeyCode mapping (xkb keysym XF86Reply) + +# evdev 233 (0xe9): no evdev -> QKeyCode mapping (xkb keysym XF86MailForward) + +# evdev 234 (0xea): no evdev -> QKeyCode mapping (xkb keysym XF86Save) + +# evdev 235 (0xeb): no evdev -> QKeyCode mapping (xkb keysym XF86Documents) + +# evdev 236 (0xec): no evdev -> QKeyCode mapping (xkb keysym XF86Battery) + +# evdev 237 (0xed): no evdev -> QKeyCode mapping (xkb keysym XF86Bluetooth) + +# evdev 238 (0xee): no evdev -> QKeyCode mapping (xkb keysym XF86WLAN) + +# evdev 239 (0xef): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 240 (0xf0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 241 (0xf1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 242 (0xf2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 243 (0xf3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 244 (0xf4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# +# quirks section start +# +# Sometimes multiple keysyms map to the same keycodes. +# The keycode -> keysym lookup finds only one of the +# keysyms. So append them here. +# + +Print 0x54 +Sys_Req 0x54 +Execute 0x54 +KP_Decimal 0x53 numlock +KP_Separator 0x53 numlock +Alt_R 0xb8 +ISO_Level3_Shift 0xb8 +Mode_switch 0xb8 + +# quirks section end diff --git a/app/src/main/assets/roms/keymaps/tr b/app/src/main/assets/roms/keymaps/tr new file mode 100644 index 0000000..4d1a4c3 --- /dev/null +++ b/app/src/main/assets/roms/keymaps/tr @@ -0,0 +1,830 @@ +# +# generated by qemu-keymap +# model : pc105 +# layout : tr +# variant : - +# options : - + +# name: "Turkish" + +# modifiers +# 0: Shift +# 1: Lock +# 2: Control +# 3: Mod1 +# 4: Mod2 +# 5: Mod3 +# 6: Mod4 +# 7: Mod5 +# 8: NumLock +# 9: Alt +# 10: LevelThree +# 11: LAlt +# 12: RAlt +# 13: RControl +# 14: LControl +# 15: ScrollLock +# 16: LevelFive +# 17: AltGr +# 18: Meta +# 19: Super +# 20: Hyper + +# evdev 1 (0x1), QKeyCode "esc", number 0x1 +Escape 0x01 + +# evdev 2 (0x2), QKeyCode "1", number 0x2 +1 0x02 +exclam 0x02 shift +greater 0x02 altgr +exclamdown 0x02 shift altgr + +# evdev 3 (0x3), QKeyCode "2", number 0x3 +2 0x03 +apostrophe 0x03 shift +sterling 0x03 altgr +twosuperior 0x03 shift altgr + +# evdev 4 (0x4), QKeyCode "3", number 0x4 +3 0x04 +asciicircum 0x04 shift +numbersign 0x04 altgr +threesuperior 0x04 shift altgr + +# evdev 5 (0x5), QKeyCode "4", number 0x5 +4 0x05 +plus 0x05 shift +dollar 0x05 altgr +onequarter 0x05 shift altgr + +# evdev 6 (0x6), QKeyCode "5", number 0x6 +5 0x06 +percent 0x06 shift +onehalf 0x06 altgr +threeeighths 0x06 shift altgr + +# evdev 7 (0x7), QKeyCode "6", number 0x7 +6 0x07 +ampersand 0x07 shift +threequarters 0x07 altgr +VoidSymbol 0x07 shift altgr + +# evdev 8 (0x8), QKeyCode "7", number 0x8 +7 0x08 +slash 0x08 shift +braceleft 0x08 altgr +VoidSymbol 0x08 shift altgr + +# evdev 9 (0x9), QKeyCode "8", number 0x9 +8 0x09 +parenleft 0x09 shift +bracketleft 0x09 altgr +VoidSymbol 0x09 shift altgr + +# evdev 10 (0xa), QKeyCode "9", number 0xa +9 0x0a +parenright 0x0a shift +bracketright 0x0a altgr +plusminus 0x0a shift altgr + +# evdev 11 (0xb), QKeyCode "0", number 0xb +0 0x0b +equal 0x0b shift +braceright 0x0b altgr +degree 0x0b shift altgr + +# evdev 12 (0xc), QKeyCode "minus", number 0xc +asterisk 0x0c +question 0x0c shift +backslash 0x0c altgr +questiondown 0x0c shift altgr + +# evdev 13 (0xd), QKeyCode "equal", number 0xd +minus 0x0d +underscore 0x0d shift +bar 0x0d altgr +VoidSymbol 0x0d shift altgr + +# evdev 14 (0xe), QKeyCode "backspace", number 0xe +BackSpace 0x0e + +# evdev 15 (0xf), QKeyCode "tab", number 0xf +Tab 0x0f +ISO_Left_Tab 0x0f shift + +# evdev 16 (0x10), QKeyCode "q", number 0x10 +q 0x10 +Q 0x10 shift +at 0x10 altgr +Greek_OMEGA 0x10 shift altgr + +# evdev 17 (0x11), QKeyCode "w", number 0x11 +w 0x11 +W 0x11 shift +VoidSymbol 0x11 altgr + +# evdev 18 (0x12), QKeyCode "e", number 0x12 +e 0x12 +E 0x12 shift +EuroSign 0x12 altgr +VoidSymbol 0x12 shift altgr + +# evdev 19 (0x13), QKeyCode "r", number 0x13 +r 0x13 +R 0x13 shift +paragraph 0x13 altgr +registered 0x13 shift altgr + +# evdev 20 (0x14), QKeyCode "t", number 0x14 +t 0x14 +T 0x14 shift +U20BA 0x14 altgr +VoidSymbol 0x14 shift altgr + +# evdev 21 (0x15), QKeyCode "y", number 0x15 +y 0x15 +Y 0x15 shift +leftarrow 0x15 altgr +yen 0x15 shift altgr + +# evdev 22 (0x16), QKeyCode "u", number 0x16 +u 0x16 +U 0x16 shift +ucircumflex 0x16 altgr +Ucircumflex 0x16 shift altgr + +# evdev 23 (0x17), QKeyCode "i", number 0x17 +idotless 0x17 +I 0x17 shift +icircumflex 0x17 altgr +Icircumflex 0x17 shift altgr + +# evdev 24 (0x18), QKeyCode "o", number 0x18 +o 0x18 +O 0x18 shift +ocircumflex 0x18 altgr +Ocircumflex 0x18 shift altgr + +# evdev 25 (0x19), QKeyCode "p", number 0x19 +p 0x19 +P 0x19 shift +VoidSymbol 0x19 altgr + +# evdev 26 (0x1a), QKeyCode "bracket_left", number 0x1a +gbreve 0x1a +Gbreve 0x1a shift +dead_diaeresis 0x1a altgr +dead_abovering 0x1a shift altgr + +# evdev 27 (0x1b), QKeyCode "bracket_right", number 0x1b +udiaeresis 0x1b +Udiaeresis 0x1b shift +asciitilde 0x1b altgr +dead_macron 0x1b shift altgr + +# evdev 28 (0x1c), QKeyCode "ret", number 0x1c +Return 0x1c + +# evdev 29 (0x1d), QKeyCode "ctrl", number 0x1d +Control_L 0x1d + +# evdev 30 (0x1e), QKeyCode "a", number 0x1e +a 0x1e +A 0x1e shift +acircumflex 0x1e altgr +Acircumflex 0x1e shift altgr + +# evdev 31 (0x1f), QKeyCode "s", number 0x1f +s 0x1f +S 0x1f shift +section 0x1f altgr +VoidSymbol 0x1f shift altgr + +# evdev 32 (0x20), QKeyCode "d", number 0x20 +d 0x20 +D 0x20 shift +VoidSymbol 0x20 altgr + +# evdev 33 (0x21), QKeyCode "f", number 0x21 +f 0x21 +F 0x21 shift +ordfeminine 0x21 altgr +VoidSymbol 0x21 shift altgr + +# evdev 34 (0x22), QKeyCode "g", number 0x22 +g 0x22 +G 0x22 shift +VoidSymbol 0x22 altgr + +# evdev 35 (0x23), QKeyCode "h", number 0x23 +h 0x23 +H 0x23 shift +VoidSymbol 0x23 altgr + +# evdev 36 (0x24), QKeyCode "j", number 0x24 +j 0x24 +J 0x24 shift +dead_hook 0x24 altgr +dead_horn 0x24 shift altgr + +# evdev 37 (0x25), QKeyCode "k", number 0x25 +k 0x25 +K 0x25 shift +VoidSymbol 0x25 altgr + +# evdev 38 (0x26), QKeyCode "l", number 0x26 +l 0x26 +L 0x26 shift +VoidSymbol 0x26 altgr + +# evdev 39 (0x27), QKeyCode "semicolon", number 0x27 +scedilla 0x27 +Scedilla 0x27 shift +acute 0x27 altgr +dead_acute 0x27 shift altgr + +# evdev 40 (0x28), QKeyCode "apostrophe", number 0x28 +i 0x28 +Iabovedot 0x28 shift +apostrophe 0x28 altgr +dead_caron 0x28 shift altgr + +# evdev 41 (0x29), QKeyCode "grave_accent", number 0x29 +quotedbl 0x29 +eacute 0x29 shift +less 0x29 altgr +degree 0x29 shift altgr + +# evdev 42 (0x2a), QKeyCode "shift", number 0x2a +Shift_L 0x2a + +# evdev 43 (0x2b), QKeyCode "backslash", number 0x2b +comma 0x2b +semicolon 0x2b shift +grave 0x2b altgr +dead_grave 0x2b shift altgr + +# evdev 44 (0x2c), QKeyCode "z", number 0x2c +z 0x2c +Z 0x2c shift +guillemotleft 0x2c altgr +less 0x2c shift altgr + +# evdev 45 (0x2d), QKeyCode "x", number 0x2d +x 0x2d +X 0x2d shift +guillemotright 0x2d altgr +greater 0x2d shift altgr + +# evdev 46 (0x2e), QKeyCode "c", number 0x2e +c 0x2e +C 0x2e shift +cent 0x2e altgr +copyright 0x2e shift altgr + +# evdev 47 (0x2f), QKeyCode "v", number 0x2f +v 0x2f +V 0x2f shift +leftdoublequotemark 0x2f altgr +leftsinglequotemark 0x2f shift altgr + +# evdev 48 (0x30), QKeyCode "b", number 0x30 +b 0x30 +B 0x30 shift +rightdoublequotemark 0x30 altgr +rightsinglequotemark 0x30 shift altgr + +# evdev 49 (0x31), QKeyCode "n", number 0x31 +n 0x31 +N 0x31 shift + +# evdev 50 (0x32), QKeyCode "m", number 0x32 +m 0x32 +M 0x32 shift +mu 0x32 altgr +masculine 0x32 shift altgr + +# evdev 51 (0x33), QKeyCode "comma", number 0x33 +odiaeresis 0x33 +Odiaeresis 0x33 shift +multiply 0x33 altgr +VoidSymbol 0x33 shift altgr + +# evdev 52 (0x34), QKeyCode "dot", number 0x34 +ccedilla 0x34 +Ccedilla 0x34 shift +periodcentered 0x34 altgr +division 0x34 shift altgr + +# evdev 53 (0x35), QKeyCode "slash", number 0x35 +period 0x35 +colon 0x35 shift +dead_abovedot 0x35 altgr + +# evdev 54 (0x36), QKeyCode "shift_r", number 0x36 +Shift_R 0x36 + +# evdev 55 (0x37), QKeyCode "kp_multiply", number 0x37 +KP_Multiply 0x37 + +# evdev 56 (0x38), QKeyCode "alt", number 0x38 +Alt_L 0x38 +Meta_L 0x38 shift + +# evdev 57 (0x39), QKeyCode "spc", number 0x39 +space 0x39 + +# evdev 58 (0x3a), QKeyCode "caps_lock", number 0x3a +Caps_Lock 0x3a + +# evdev 59 (0x3b), QKeyCode "f1", number 0x3b +F1 0x3b + +# evdev 60 (0x3c), QKeyCode "f2", number 0x3c +F2 0x3c + +# evdev 61 (0x3d), QKeyCode "f3", number 0x3d +F3 0x3d + +# evdev 62 (0x3e), QKeyCode "f4", number 0x3e +F4 0x3e + +# evdev 63 (0x3f), QKeyCode "f5", number 0x3f +F5 0x3f + +# evdev 64 (0x40), QKeyCode "f6", number 0x40 +F6 0x40 + +# evdev 65 (0x41), QKeyCode "f7", number 0x41 +F7 0x41 + +# evdev 66 (0x42), QKeyCode "f8", number 0x42 +F8 0x42 + +# evdev 67 (0x43), QKeyCode "f9", number 0x43 +F9 0x43 + +# evdev 68 (0x44), QKeyCode "f10", number 0x44 +F10 0x44 + +# evdev 69 (0x45), QKeyCode "num_lock", number 0x45 +Num_Lock 0x45 + +# evdev 70 (0x46), QKeyCode "scroll_lock", number 0x46 +Scroll_Lock 0x46 + +# evdev 71 (0x47), QKeyCode "kp_7", number 0x47 +KP_Home 0x47 +KP_7 0x47 numlock + +# evdev 72 (0x48), QKeyCode "kp_8", number 0x48 +KP_Up 0x48 +KP_8 0x48 numlock + +# evdev 73 (0x49), QKeyCode "kp_9", number 0x49 +KP_Prior 0x49 +KP_9 0x49 numlock + +# evdev 74 (0x4a), QKeyCode "kp_subtract", number 0x4a +KP_Subtract 0x4a + +# evdev 75 (0x4b), QKeyCode "kp_4", number 0x4b +KP_Left 0x4b +KP_4 0x4b numlock + +# evdev 76 (0x4c), QKeyCode "kp_5", number 0x4c +KP_Begin 0x4c +KP_5 0x4c numlock + +# evdev 77 (0x4d), QKeyCode "kp_6", number 0x4d +KP_Right 0x4d +KP_6 0x4d numlock + +# evdev 78 (0x4e), QKeyCode "kp_add", number 0x4e +KP_Add 0x4e + +# evdev 79 (0x4f), QKeyCode "kp_1", number 0x4f +KP_End 0x4f +KP_1 0x4f numlock + +# evdev 80 (0x50), QKeyCode "kp_2", number 0x50 +KP_Down 0x50 +KP_2 0x50 numlock + +# evdev 81 (0x51), QKeyCode "kp_3", number 0x51 +KP_Next 0x51 +KP_3 0x51 numlock + +# evdev 82 (0x52), QKeyCode "kp_0", number 0x52 +KP_Insert 0x52 +KP_0 0x52 numlock + +# evdev 83 (0x53), QKeyCode "kp_decimal", number 0x53 +KP_Delete 0x53 +KP_Separator 0x53 numlock + +# evdev 84 (0x54): no evdev -> QKeyCode mapping (xkb keysym ISO_Level3_Shift) + +# evdev 85 (0x55): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 86 (0x56), QKeyCode "less", number 0x56 +less 0x56 +greater 0x56 shift +bar 0x56 altgr +brokenbar 0x56 shift altgr + +# evdev 87 (0x57), QKeyCode "f11", number 0x57 +F11 0x57 + +# evdev 88 (0x58), QKeyCode "f12", number 0x58 +F12 0x58 + +# evdev 89 (0x59), QKeyCode "ro", number 0x73 + +# evdev 90 (0x5a): no evdev -> QKeyCode mapping (xkb keysym Katakana) + +# evdev 91 (0x5b), QKeyCode "hiragana", number 0x77 +Hiragana 0x77 + +# evdev 92 (0x5c), QKeyCode "henkan", number 0x79 +Henkan_Mode 0x79 + +# evdev 93 (0x5d): no evdev -> QKeyCode mapping (xkb keysym Hiragana_Katakana) + +# evdev 94 (0x5e): no evdev -> QKeyCode mapping (xkb keysym Muhenkan) + +# evdev 95 (0x5f): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 96 (0x60), QKeyCode "kp_enter", number 0x9c +KP_Enter 0x9c + +# evdev 97 (0x61), QKeyCode "ctrl_r", number 0x9d +Control_R 0x9d + +# evdev 98 (0x62), QKeyCode "kp_divide", number 0xb5 +KP_Divide 0xb5 + +# evdev 99 (0x63), QKeyCode "sysrq", number 0x54 +Print 0x54 + +# evdev 100 (0x64), QKeyCode "alt_r", number 0xb8 +ISO_Level3_Shift 0xb8 + +# evdev 101 (0x65), QKeyCode "lf", number 0x5b +Linefeed 0x5b + +# evdev 102 (0x66), QKeyCode "home", number 0xc7 +Home 0xc7 + +# evdev 103 (0x67), QKeyCode "up", number 0xc8 +Up 0xc8 + +# evdev 104 (0x68), QKeyCode "pgup", number 0xc9 +Prior 0xc9 + +# evdev 105 (0x69), QKeyCode "left", number 0xcb +Left 0xcb + +# evdev 106 (0x6a), QKeyCode "right", number 0xcd +Right 0xcd + +# evdev 107 (0x6b), QKeyCode "end", number 0xcf +End 0xcf + +# evdev 108 (0x6c), QKeyCode "down", number 0xd0 +Down 0xd0 + +# evdev 109 (0x6d), QKeyCode "pgdn", number 0xd1 +Next 0xd1 + +# evdev 110 (0x6e), QKeyCode "insert", number 0xd2 +Insert 0xd2 + +# evdev 111 (0x6f), QKeyCode "delete", number 0xd3 +Delete 0xd3 + +# evdev 112 (0x70): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 113 (0x71), QKeyCode "audiomute", number 0xa0 +XF86AudioMute 0xa0 + +# evdev 114 (0x72), QKeyCode "volumedown", number 0xae +XF86AudioLowerVolume 0xae + +# evdev 115 (0x73), QKeyCode "volumeup", number 0xb0 +XF86AudioRaiseVolume 0xb0 + +# evdev 116 (0x74), QKeyCode "power", number 0xde +XF86PowerOff 0xde + +# evdev 117 (0x75), QKeyCode "kp_equals", number 0x59 +KP_Equal 0x59 + +# evdev 118 (0x76): no evdev -> QKeyCode mapping (xkb keysym plusminus) + +# evdev 119 (0x77), QKeyCode "pause", number 0xc6 +Pause 0xc6 + +# evdev 120 (0x78): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchA) + +# evdev 121 (0x79), QKeyCode "kp_comma", number 0x7e +KP_Decimal 0x7e + +# evdev 122 (0x7a): no evdev -> QKeyCode mapping (xkb keysym Hangul) + +# evdev 123 (0x7b): no evdev -> QKeyCode mapping (xkb keysym Hangul_Hanja) + +# evdev 124 (0x7c), QKeyCode "yen", number 0x7d + +# evdev 125 (0x7d), QKeyCode "meta_l", number 0xdb +Super_L 0xdb + +# evdev 126 (0x7e), QKeyCode "meta_r", number 0xdc +Super_R 0xdc + +# evdev 127 (0x7f), QKeyCode "compose", number 0xdd +Menu 0xdd + +# evdev 128 (0x80), QKeyCode "stop", number 0xe8 +Cancel 0xe8 + +# evdev 129 (0x81), QKeyCode "again", number 0x85 +Redo 0x85 + +# evdev 130 (0x82), QKeyCode "props", number 0x86 +SunProps 0x86 + +# evdev 131 (0x83), QKeyCode "undo", number 0x87 +Undo 0x87 + +# evdev 132 (0x84), QKeyCode "front", number 0x8c +SunFront 0x8c + +# evdev 133 (0x85), QKeyCode "copy", number 0xf8 +XF86Copy 0xf8 + +# evdev 134 (0x86), QKeyCode "open", number 0x64 +XF86Open 0x64 + +# evdev 135 (0x87), QKeyCode "paste", number 0x65 +XF86Paste 0x65 + +# evdev 136 (0x88), QKeyCode "find", number 0xc1 +Find 0xc1 + +# evdev 137 (0x89), QKeyCode "cut", number 0xbc +XF86Cut 0xbc + +# evdev 138 (0x8a), QKeyCode "help", number 0xf5 +Help 0xf5 + +# evdev 139 (0x8b), QKeyCode "menu", number 0x9e +XF86MenuKB 0x9e + +# evdev 140 (0x8c), QKeyCode "calculator", number 0xa1 +XF86Calculator 0xa1 + +# evdev 141 (0x8d): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 142 (0x8e), QKeyCode "sleep", number 0xdf +XF86Sleep 0xdf + +# evdev 143 (0x8f), QKeyCode "wake", number 0xe3 +XF86WakeUp 0xe3 + +# evdev 144 (0x90): no evdev -> QKeyCode mapping (xkb keysym XF86Explorer) + +# evdev 145 (0x91): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 146 (0x92): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 147 (0x93): no evdev -> QKeyCode mapping (xkb keysym XF86Xfer) + +# evdev 148 (0x94): no evdev -> QKeyCode mapping (xkb keysym XF86Launch1) + +# evdev 149 (0x95): no evdev -> QKeyCode mapping (xkb keysym XF86Launch2) + +# evdev 150 (0x96): no evdev -> QKeyCode mapping (xkb keysym XF86WWW) + +# evdev 151 (0x97): no evdev -> QKeyCode mapping (xkb keysym XF86DOS) + +# evdev 152 (0x98): no evdev -> QKeyCode mapping (xkb keysym XF86ScreenSaver) + +# evdev 153 (0x99): no evdev -> QKeyCode mapping (xkb keysym XF86RotateWindows) + +# evdev 154 (0x9a): no evdev -> QKeyCode mapping (xkb keysym XF86TaskPane) + +# evdev 155 (0x9b), QKeyCode "mail", number 0xec +XF86Mail 0xec + +# evdev 156 (0x9c), QKeyCode "ac_bookmarks", number 0xe6 +XF86Favorites 0xe6 + +# evdev 157 (0x9d), QKeyCode "computer", number 0xeb +XF86MyComputer 0xeb + +# evdev 158 (0x9e), QKeyCode "ac_back", number 0xea +XF86Back 0xea + +# evdev 159 (0x9f), QKeyCode "ac_forward", number 0xe9 +XF86Forward 0xe9 + +# evdev 160 (0xa0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 161 (0xa1): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 162 (0xa2): no evdev -> QKeyCode mapping (xkb keysym XF86Eject) + +# evdev 163 (0xa3), QKeyCode "audionext", number 0x99 +XF86AudioNext 0x99 + +# evdev 164 (0xa4), QKeyCode "audioplay", number 0xa2 +XF86AudioPlay 0xa2 +XF86AudioPause 0xa2 shift + +# evdev 165 (0xa5), QKeyCode "audioprev", number 0x90 +XF86AudioPrev 0x90 + +# evdev 166 (0xa6), QKeyCode "audiostop", number 0xa4 +XF86AudioStop 0xa4 +XF86Eject 0xa4 shift + +# evdev 167 (0xa7): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRecord) + +# evdev 168 (0xa8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioRewind) + +# evdev 169 (0xa9): no evdev -> QKeyCode mapping (xkb keysym XF86Phone) + +# evdev 170 (0xaa): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 171 (0xab): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 172 (0xac), QKeyCode "ac_home", number 0xb2 +XF86HomePage 0xb2 + +# evdev 173 (0xad), QKeyCode "ac_refresh", number 0xe7 +XF86Reload 0xe7 + +# evdev 174 (0xae): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 175 (0xaf): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 176 (0xb0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 177 (0xb1): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollUp) + +# evdev 178 (0xb2): no evdev -> QKeyCode mapping (xkb keysym XF86ScrollDown) + +# evdev 179 (0xb3): no evdev -> QKeyCode mapping (xkb keysym parenleft) + +# evdev 180 (0xb4): no evdev -> QKeyCode mapping (xkb keysym parenright) + +# evdev 181 (0xb5): no evdev -> QKeyCode mapping (xkb keysym XF86New) + +# evdev 182 (0xb6): no evdev -> QKeyCode mapping (xkb keysym Redo) + +# evdev 183 (0xb7): no evdev -> QKeyCode mapping (xkb keysym XF86Tools) + +# evdev 184 (0xb8): no evdev -> QKeyCode mapping (xkb keysym XF86Launch5) + +# evdev 185 (0xb9): no evdev -> QKeyCode mapping (xkb keysym XF86Launch6) + +# evdev 186 (0xba): no evdev -> QKeyCode mapping (xkb keysym XF86Launch7) + +# evdev 187 (0xbb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch8) + +# evdev 188 (0xbc): no evdev -> QKeyCode mapping (xkb keysym XF86Launch9) + +# evdev 189 (0xbd): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 190 (0xbe): no evdev -> QKeyCode mapping (xkb keysym XF86AudioMicMute) + +# evdev 191 (0xbf): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadToggle) + +# evdev 192 (0xc0): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOn) + +# evdev 193 (0xc1): no evdev -> QKeyCode mapping (xkb keysym XF86TouchpadOff) + +# evdev 194 (0xc2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 195 (0xc3): no evdev -> QKeyCode mapping (xkb keysym Mode_switch) + +# evdev 196 (0xc4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 197 (0xc5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 198 (0xc6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 199 (0xc7): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 200 (0xc8): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 201 (0xc9): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPause) + +# evdev 202 (0xca): no evdev -> QKeyCode mapping (xkb keysym XF86Launch3) + +# evdev 203 (0xcb): no evdev -> QKeyCode mapping (xkb keysym XF86Launch4) + +# evdev 204 (0xcc): no evdev -> QKeyCode mapping (xkb keysym XF86LaunchB) + +# evdev 205 (0xcd): no evdev -> QKeyCode mapping (xkb keysym XF86Suspend) + +# evdev 206 (0xce): no evdev -> QKeyCode mapping (xkb keysym XF86Close) + +# evdev 207 (0xcf): no evdev -> QKeyCode mapping (xkb keysym XF86AudioPlay) + +# evdev 208 (0xd0): no evdev -> QKeyCode mapping (xkb keysym XF86AudioForward) + +# evdev 209 (0xd1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 210 (0xd2): no evdev -> QKeyCode mapping (xkb keysym Print) + +# evdev 211 (0xd3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 212 (0xd4): no evdev -> QKeyCode mapping (xkb keysym XF86WebCam) + +# evdev 213 (0xd5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 214 (0xd6): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 215 (0xd7): no evdev -> QKeyCode mapping (xkb keysym XF86Mail) + +# evdev 216 (0xd8): no evdev -> QKeyCode mapping (xkb keysym XF86Messenger) + +# evdev 217 (0xd9): no evdev -> QKeyCode mapping (xkb keysym XF86Search) + +# evdev 218 (0xda): no evdev -> QKeyCode mapping (xkb keysym XF86Go) + +# evdev 219 (0xdb): no evdev -> QKeyCode mapping (xkb keysym XF86Finance) + +# evdev 220 (0xdc): no evdev -> QKeyCode mapping (xkb keysym XF86Game) + +# evdev 221 (0xdd): no evdev -> QKeyCode mapping (xkb keysym XF86Shop) + +# evdev 222 (0xde): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 223 (0xdf): no evdev -> QKeyCode mapping (xkb keysym Cancel) + +# evdev 224 (0xe0): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessDown) + +# evdev 225 (0xe1): no evdev -> QKeyCode mapping (xkb keysym XF86MonBrightnessUp) + +# evdev 226 (0xe2), QKeyCode "mediaselect", number 0xed +XF86AudioMedia 0xed + +# evdev 227 (0xe3): no evdev -> QKeyCode mapping (xkb keysym XF86Display) + +# evdev 228 (0xe4): no evdev -> QKeyCode mapping (xkb keysym XF86KbdLightOnOff) + +# evdev 229 (0xe5): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessDown) + +# evdev 230 (0xe6): no evdev -> QKeyCode mapping (xkb keysym XF86KbdBrightnessUp) + +# evdev 231 (0xe7): no evdev -> QKeyCode mapping (xkb keysym XF86Send) + +# evdev 232 (0xe8): no evdev -> QKeyCode mapping (xkb keysym XF86Reply) + +# evdev 233 (0xe9): no evdev -> QKeyCode mapping (xkb keysym XF86MailForward) + +# evdev 234 (0xea): no evdev -> QKeyCode mapping (xkb keysym XF86Save) + +# evdev 235 (0xeb): no evdev -> QKeyCode mapping (xkb keysym XF86Documents) + +# evdev 236 (0xec): no evdev -> QKeyCode mapping (xkb keysym XF86Battery) + +# evdev 237 (0xed): no evdev -> QKeyCode mapping (xkb keysym XF86Bluetooth) + +# evdev 238 (0xee): no evdev -> QKeyCode mapping (xkb keysym XF86WLAN) + +# evdev 239 (0xef): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 240 (0xf0): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 241 (0xf1): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 242 (0xf2): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 243 (0xf3): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 244 (0xf4): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# evdev 245 (0xf5): no evdev -> QKeyCode mapping (xkb keysym NoSymbol) + +# +# quirks section start +# +# Sometimes multiple keysyms map to the same keycodes. +# The keycode -> keysym lookup finds only one of the +# keysyms. So append them here. +# + +Print 0x54 +Sys_Req 0x54 +Execute 0x54 +KP_Decimal 0x53 numlock +KP_Separator 0x53 numlock +Alt_R 0xb8 +ISO_Level3_Shift 0xb8 +Mode_switch 0xb8 + +# quirks section end diff --git a/app/src/main/assets/roms/kvmvapic.bin b/app/src/main/assets/roms/kvmvapic.bin new file mode 100644 index 0000000..045f5c2 Binary files /dev/null and b/app/src/main/assets/roms/kvmvapic.bin differ diff --git a/app/src/main/assets/roms/linuxboot.bin b/app/src/main/assets/roms/linuxboot.bin new file mode 100644 index 0000000..923d179 Binary files /dev/null and b/app/src/main/assets/roms/linuxboot.bin differ diff --git a/app/src/main/assets/roms/linuxboot_dma.bin b/app/src/main/assets/roms/linuxboot_dma.bin new file mode 100644 index 0000000..d176f62 Binary files /dev/null and b/app/src/main/assets/roms/linuxboot_dma.bin differ diff --git a/app/src/main/assets/roms/multiboot.bin b/app/src/main/assets/roms/multiboot.bin new file mode 100644 index 0000000..e772713 Binary files /dev/null and b/app/src/main/assets/roms/multiboot.bin differ diff --git a/app/src/main/assets/roms/openbios-ppc b/app/src/main/assets/roms/openbios-ppc new file mode 100644 index 0000000..0a9acc4 Binary files /dev/null and b/app/src/main/assets/roms/openbios-ppc differ diff --git a/app/src/main/assets/roms/openbios-sparc32 b/app/src/main/assets/roms/openbios-sparc32 new file mode 100644 index 0000000..b66a18b Binary files /dev/null and b/app/src/main/assets/roms/openbios-sparc32 differ diff --git a/app/src/main/assets/roms/openbios-sparc64 b/app/src/main/assets/roms/openbios-sparc64 new file mode 100644 index 0000000..0dcc382 Binary files /dev/null and b/app/src/main/assets/roms/openbios-sparc64 differ diff --git a/app/src/main/assets/roms/ppc_rom.bin b/app/src/main/assets/roms/ppc_rom.bin new file mode 100644 index 0000000..174a247 Binary files /dev/null and b/app/src/main/assets/roms/ppc_rom.bin differ diff --git a/app/src/main/assets/roms/pxe-e1000.rom b/app/src/main/assets/roms/pxe-e1000.rom new file mode 100644 index 0000000..2e5f8b2 Binary files /dev/null and b/app/src/main/assets/roms/pxe-e1000.rom differ diff --git a/app/src/main/assets/roms/pxe-eepro100.rom b/app/src/main/assets/roms/pxe-eepro100.rom new file mode 100644 index 0000000..d292e8f Binary files /dev/null and b/app/src/main/assets/roms/pxe-eepro100.rom differ diff --git a/app/src/main/assets/roms/pxe-ne2k_pci.rom b/app/src/main/assets/roms/pxe-ne2k_pci.rom new file mode 100644 index 0000000..62010cb Binary files /dev/null and b/app/src/main/assets/roms/pxe-ne2k_pci.rom differ diff --git a/app/src/main/assets/roms/pxe-pcnet.rom b/app/src/main/assets/roms/pxe-pcnet.rom new file mode 100644 index 0000000..512d6d4 Binary files /dev/null and b/app/src/main/assets/roms/pxe-pcnet.rom differ diff --git a/app/src/main/assets/roms/pxe-rtl8139.rom b/app/src/main/assets/roms/pxe-rtl8139.rom new file mode 100644 index 0000000..67c77fb Binary files /dev/null and b/app/src/main/assets/roms/pxe-rtl8139.rom differ diff --git a/app/src/main/assets/roms/pxe-virtio.rom b/app/src/main/assets/roms/pxe-virtio.rom new file mode 100644 index 0000000..b1ec909 Binary files /dev/null and b/app/src/main/assets/roms/pxe-virtio.rom differ diff --git a/app/src/main/assets/roms/qemu-icon.bmp b/app/src/main/assets/roms/qemu-icon.bmp new file mode 100644 index 0000000..72d9a2f Binary files /dev/null and b/app/src/main/assets/roms/qemu-icon.bmp differ diff --git a/app/src/main/assets/roms/qemu-nsis.bmp b/app/src/main/assets/roms/qemu-nsis.bmp new file mode 100644 index 0000000..ae82cd2 Binary files /dev/null and b/app/src/main/assets/roms/qemu-nsis.bmp differ diff --git a/app/src/main/assets/roms/qemu-nsis.ico b/app/src/main/assets/roms/qemu-nsis.ico new file mode 100644 index 0000000..1d0128c Binary files /dev/null and b/app/src/main/assets/roms/qemu-nsis.ico differ diff --git a/app/src/main/assets/roms/qemu.rsrc b/app/src/main/assets/roms/qemu.rsrc new file mode 100644 index 0000000..e3d205b --- /dev/null +++ b/app/src/main/assets/roms/qemu.rsrc @@ -0,0 +1,1504 @@ +data 'icns' (-16455) { + $"6963 6E73 0000 5DC3 6974 3332 0000 1DB3" /* icns..]√it32...≥ */ + $"0000 0000 FF00 FF00 B000 0F08 1222 3645" /* ....ˇ.ˇ.∞...."6E */ + $"4D56 6063 5A51 473C 2816 0CE8 0019 0416" /* MV`cZQG<(..Ë.... */ + $"3764 94B5 CCDD E7E9 EBEC EDEE ECEB EAE8" /* 7dîµÃ›ÁÈÎÏÌÓÏÎÍË */ + $"E2D4 BEA3 7746 200B E000 0608 2763 A5D0" /* ‚‘æ£wF .‡...'c•– */ + $"E6EE 80F5 8AF6 08F5 F4F0 EAD9 B97C 3B0F" /* ÊÓÄıäˆ.ıÙÍŸπ|;. */ + $"DB00 061C 64AF DAED F0F2 81F1 8BF0 83F1" /* €...dØ⁄ÌÚÅÒãÉÒ */ + $"05EE E3C1 8432 07D5 0007 0635 87CD E8ED" /* .Ó„¡Ñ2.’...5áÕËÌ */ + $"EDEE 97ED 07EE EEED EBDC A551 11D1 0007" /* ÌÓóÌ.ÓÓÌ΋•Q.—.. */ + $"0333 96D9 E6E9 EAE9 9CE8 06E9 E9E8 E1B8" /* .3ñŸÊÈÍÈúË.ÈÈË·∏ */ + $"560E CE00 0628 8CD3 E3E6 E5E4 93E3 80E4" /* V.Œ..(唄ʉì„ĉ */ + $"87E3 06E4 E5E4 DEAE 4A07 CA00 050D 63C8" /* á„.‰Â‰fiÆJ. ...c» */ + $"DFE1 E196 E084 DF86 E004 E1E0 D791 23C8" /* fl··ñ‡Ñfl܇.·‡◊ë#» */ + $"0004 2FA0 D8DC DC84 DA06 D9DA D9D9 DAD9" /* ../†ÿ‹‹Ñ⁄.Ÿ⁄ŸŸ⁄Ÿ */ + $"D987 DA00 D990 DA05 DBDC DBC0 5708 C400" /* Ÿá⁄.Ÿê⁄.€‹€¿W.ƒ. */ + $"1804 54C3 D7D7 D6D6 D7D6 D5D5 D6DF F1DF" /* ..T√◊◊÷÷◊÷’’÷flÒfl */ + $"DADF E5F1 EEDD D5D6 D5D4 81D5 81D6 82D8" /* ⁄flÂÒÓ›’÷’‘Å’Å÷Çÿ */ + $"83D6 80D8 80D6 80D7 04D6 D7D2 8615 C200" /* É÷ÄÿÄ÷Ä◊.÷◊“Ü.¬. */ + $"060E 75CB D4D3 D2D2 80D0 11E0 EAF0 F8FD" /* ..uÀ‘”““Ä–.‡Í¯˝ */ + $"F9F7 FAFB FDFD F7DB CED6 DDD7 D380 D08C" /* ˘˜˙˚˝˝˜€Œ÷›◊”Ä–å */ + $"D286 D104 D2D3 D2A3 29C0 0003 1591 CDCF" /* “Ü—.“”“£)¿...ëÕœ */ + $"80CE 06CC D7DB DEFB FCFD 86FE 0BF5 DBEB" /* ÄŒ.Ã◊€fi˚¸˝Ü˛.ı€Î */ + $"FAF7 F3EB E0D7 D0CD CD86 CE84 CD84 CE03" /* ˙˜Û·◊–ÕÕÜŒÑÕÑŒ. */ + $"CFD0 B739 BE00 0318 96CB CA81 C803 C7DB" /* œ–∑9æ...ñÀ Å».«€ */ + $"FAF9 8AFE 0BFA FCFE FEFD FCFB FAF2 E6D8" /* ˙˘ä˛.˙¸˛˛˝¸˚˙ÚÊÿ */ + $"CD8C C883 CA05 C8C9 CACC BA3F BC00 041B" /* Õå»É .»… Ã∫?º... */ + $"98C7 C5C3 81C4 02C3 C8F1 93FE 09FD FCFA" /* ò«≈√Ń.√»Òì˛∆˝¸˙ */ + $"F3E6 D5CB C3C2 C383 C584 C683 C502 C7B8" /* ÛÊ’À√¬√É≈Ñ∆É≈.«∏ */ + $"42BA 0003 1291 C4C1 84C0 02BC CFFB 96FE" /* B∫...냡ѿ.ºœ˚ñ˛ */ + $"06FC FAF5 E9D5 C2BD 87C0 86BF 02C1 B536" /* .¸˙ıÈ’¬Ωá¿Üø.¡µ6 */ + $"B800 030A 7DC1 BC84 BB03 B9CD D7EE 99FE" /* ∏..¬}¡ºÑª.πÕ◊Óô˛ */ + $"07FC F9EF D4BB BBBE BD82 BC87 BB03 BCC0" /* .¸˘Ô‘ªªæΩǺáª.º¿ */ + $"A825 B600 0304 64BB B981 B880 B704 B5C6" /* ®%∂...dªπÅ∏Ä∑.µ∆ */ + $"F5FA FB9B FE04 FDF9 E6C3 B58F B802 BC97" /* ı˙˚õ˛.˝˘Ê√µè∏.ºó */ + $"15B5 0002 39B2 B582 B480 B201 B5EA A0FE" /* .µ..9≤µÇ¥Ä≤.µÍ†˛ */ + $"04FC F1C9 B1B3 87B2 01B3 B382 B402 B873" /* .¸Ò…±≥á≤.≥≥Ç¥.∏s */ + $"06B3 0002 1899 B385 B002 ADCC FDA2 FE02" /* .≥...ô≥Ö∞.≠Ã˝¢˛. */ + $"F7CB AD8E B002 B1B1 43B2 0002 0671 AE86" /* ˜À≠é∞.±±C≤...qÆÜ */ + $"AC01 ADEC A4FE 02F7 C3A8 81AB 80AA 01AC" /* ¨.≠ϧ˛.˜√®Å´Ä™.¨ */ + $"AB84 AC03 AAAD 9C1C B100 0231 A6A7 80A6" /* ´Ñ¨.™≠ú.±..1¶ßĶ */ + $"82A7 02A4 BEFD 97FE 05DC 9C83 8DAE E085" /* Çß.§æ˝ó˛.‹úÉçÆ‡Ö */ + $"FE06 EEB0 A6A7 A8A6 A685 A800 A781 A602" /* ˛.Ó∞¶ß®¶¶Ö®.ßŶ. */ + $"AD69 04AF 0002 0A7E A681 A281 A302 A2A0" /* ≠i.Ø..¬~¶Å¢Å£.¢† */ + $"E097 FE08 A228 110E 0F14 295A BC83 FE03" /* ‡ó˛.¢(....)ZºÉ˛. */ + $"FDDF A3A1 81A2 80A3 86A2 02A4 A128 AF00" /* ˝fl£°Å¢Ä£Ü¢.§°(Ø. */ + $"013E A286 9E02 9DAE F996 FE02 F228 0181" /* .>¢Üû.ùÆ˘ñ˛.Ú(.Å */ + $"0004 0108 1B72 F582 FE04 FBC3 9A9E 9E82" /* .....rıDz.˚√öûûÇ */ + $"A086 9E03 A0A3 7407 AD00 0209 7C9D 8599" /* †Üû.†£t.≠..∆|ùÖô */ + $"029A 96D4 97FE 01F2 1B85 0002 0B60 F982" /* .öñ‘ó˛.Ú.Ö...`˘Ç */ + $"FE03 EB9E 9898 8899 819A 029B 9C28 AD00" /* ˛.ÎûòòàôÅö.õú(≠. */ + $"012C 9986 9802 93AC F897 FE01 FD72 8600" /* .,ôÜò.쨯ó˛.˝rÜ. */ + $"0109 A882 FE04 FCA6 9497 9780 9885 9781" /* .∆®Ç˛.¸¶îóóÄòÖóÅ */ + $"9801 9D60 AC00 0304 6897 9184 9202 9199" /* ò.ù`¨...hóëÑí.ëô */ + $"E699 FE01 F35B 8600 005D 83FE 01C2 8E8F" /* Êô˛.Û[Ü..]ɲ.¬éè */ + $"9201 8E18 AB00 0317 8B8F 8F83 9003 8F90" /* í.é.´...ãèèÉê.èê */ + $"DBFD 9AFE 02F5 8E1F 8400 0095 83FE 02EE" /* €˝ö˛.ıé.Ñ..ïɲ.Ó */ + $"978D 8590 808E 8090 048E 8E8F 9642 AB00" /* óçÖêÄéÄê.ééèñB´. */ + $"0338 9089 8983 8A02 87AA FC9C FE09 F8E3" /* .8êââÉä.ᙸú˛∆¯„ */ + $"934A 2315 1830 8DF8 84FE 02D9 8F86 828B" /* ìJ#..0ç¯Ñ˛.ŸèÜÇã */ + $"828A 808B 808A 028F 6904 AA00 015D 8C82" /* ÇäÄãÄä.èi.™..]åÇ */ + $"8480 8601 83D3 9EFE 07FD F8F3 EEDF E1F2" /* ÑÄÜ.É”û˛.˝¯ÛÓfl·Ú */ + $"F885 FE04 FCE1 A284 8380 8683 8582 8602" /* ¯Ö˛.¸·¢ÑÉÄÜÉÖÇÜ. */ + $"8781 14A9 0002 0E79 8282 8104 8383 818F" /* áÅ.©...yÇÇÅ.ÉÉÅè */ + $"F498 FE03 FDDE E2F6 83FE 01FD FD88 FE07" /* Ùò˛.˝fi‚ˆÉ˛.˝˝à˛. */ + $"FDF8 D3A3 887E 7F81 8282 8383 0189 2EA9" /* ˝¯”£à~.ÅÇÇÉÉ.â.© */ + $"0002 1E82 7F82 7E03 8080 7BAA 99FE 0BFD" /* ...Ç.Ç~.ÄÄ{™ô˛.˝ */ + $"B46C 5B58 6278 96B7 D4ED FD8A FE08 FCF9" /* ¥l[Xbxñ∑‘Ì˝ä˛.¸˘ */ + $"E5C1 9D84 7A7B 7F83 8003 7F7F 834A A900" /* ¡ùÑz{.ÉÄ...ÉJ©. */ + $"0432 827A 7B7B 8079 037A 7A75 CB9A FE11" /* .2Çz{{Äy.zzuÀö˛. */ + $"FAF5 E8C7 9E72 4B30 2422 2D41 5D7E 9FB6" /* ˙ıË«ûrK0$"-A]~ü∂ */ + $"D2F3 85FE 08FD FBF9 E6C2 967A 7579 817A" /* “ÛÖ˛.˝˚˘Ê¬ñzuyÅz */ + $"047B 797F 5E03 A800 0143 7E80 7781 7602" /* .{y.^.®..C~ÄwÅv. */ + $"757B E99D FE13 FCF9 F6F3 EFD2 A877 4925" /* u{Èù˛.¸˘ˆÛÔ“®wI% */ + $"1109 0B0D 2747 709E C9EB 83FE 07FD FBF7" /* .∆..'Gpû…Îɲ.˝˚˜ */ + $"D8A7 8072 7481 7602 776B 0BA8 0001 4F77" /* ÿßÄrtÅv.wk.®..Ow */ + $"8073 8172 0270 8DFC A2FE 13FC FAF6 F3F1" /* ÄsÅr.p縢˛.¸˙ˆÛÒ */ + $"D5AE 7F51 270D 0609 0C20 3C62 8FBB E181" /* ’Æ.Q'..∆. ^YYÄX.WbÍ´˛.› */ + $"A57D 695C 5958 5757 5857 595F 6873 7E8C" /* •}i\YXWWXWY_hs~å */ + $"98A5 AFAE A07C 5B56 639E 5F0E A800 0330" /* ò•ØÆ†|[Vcû_.®..0 */ + $"5955 5580 5402 507C FDA9 FE08 DA8F 5F54" /* YUUÄT.P|˝©˛.⁄è_T */ + $"5354 5455 5580 5681 5581 5480 5507 5454" /* STTUUÄVÅUÅTÄU.TT */ + $"5556 5557 4E07 A800 0122 5680 5203 5151" /* UVUWN.®.."VÄR.QQ */ + $"4C9C A8FE 05E1 955D 5051 5080 5183 5282" /* Lú®˛.·ï]PQPÄQÉRÇ */ + $"5180 5208 5151 5051 5152 5254 3FA9 0000" /* QÄR.QQPQQRRT?©.. */ + $"1581 5003 4F4F 49B4 A6FE 03D4 905D 4D85" /* .ÅP.OOI¥¶˛.‘ê]MÖ */ + $"4F82 5083 4F01 5050 844F 0152 2EA9 0002" /* OÇPÉO.PPÑO.R.©.. */ + $"0A45 4B81 4A01 49CE A3FE 06F2 BB7B 5349" /* ¬EKÅJ.IŒ£˛.Úª{SI */ + $"4A4A 804B 8D4A 824B 814A 014E 1BAA 0001" /* JJÄKçJÇKÅJ.N.™.. */ + $"324A 8047 0246 4EE4 A1FE 06E3 9E65 4944" /* 2JÄG.FN‰°˛.„ûeID */ + $"4647 8248 8547 8348 0147 4783 4880 4701" /* FGÇHÖGÉH.GGÉHÄG. */ + $"440C AA00 011C 4880 4502 4154 F19F FE05" /* D.™...HÄE.ATÒü˛. */ + $"DE8C 5644 4244 8043 8245 8344 8245 8644" /* fiåVDBDÄCÇEÉDÇEÜD */ + $"8145 0147 33AB 0001 0C3F 8041 023F 5EFB" /* ÅE.G3´...?ÄA.?^˚ */ + $"9DFE 02EE 9552 8040 8041 8540 8041 0140" /* ù˛.ÓïRÄ@ÄAÖ@ÄA.@ */ + $"4080 4180 4080 4182 4081 4101 4420 AC00" /* @ÄAÄ@ÄAÇ@ÅA.D ¨. */ + $"052C 403E 3E38 679D FE04 C35D 3C3D 3E82" /* .,@>>8gù˛.√]<=>Ç */ + $"4080 3E80 3F82 4080 3F80 3E8B 3F01 3D0C" /* @Ä>Ä?Ç@Ä?Ä>ã?.=. */ + $"AC00 0513 3D3B 3A34 749C FE02 A743 3880" /* ¨...=;:4tú˛.ßC8Ä */ + $"3A80 3B82 3A80 3982 3B83 3A80 3B87 3A01" /* :Ä;Ç:Ä9Ç;É:Ä;á:. */ + $"3E26 AD00 0504 2E38 3731 789B FE03 9C32" /* >&≠....871xõ˛.ú2 */ + $"3536 8037 8038 8337 0136 3688 3783 3680" /* 56Ä7Ä8É7.66à7É6Ä */ + $"3781 3601 380F AE00 0415 3634 2D77 9AFE" /* 7Å6.8.Æ...64-wö˛ */ + $"02BF 3432 8033 8034 0135 3583 3480 3301" /* .ø42Ä3Ä4.55É4Ä3. */ + $"3434 8335 8B34 0136 25AF 0004 0327 322B" /* 44É5ã4.6%Ø...'2+ */ + $"6F99 FE02 F24B 2C81 3080 3180 329B 3101" /* oô˛.ÚK,Å0Ä1Ä2õ1. */ + $"300D B000 030E 2F28 6099 FE01 9C27 882D" /* 0.∞.../(`ô˛.ú'à- */ + $"802E 882D 822E 872D 0130 1DB2 0003 1B29" /* Ä.à-Ç.á-.0.≤...) */ + $"4AFC 97FE 02F9 4B26 812A 842B 802C 822B" /* J¸ó˛.˘K&Å*Ñ+Ä,Ç+ */ + $"802A 802B 802C 852B 802C 022B 2809 B200" /* Ä*Ä+Ä,Ö+Ä,.+(∆≤. */ + $"0306 2137 E997 FE02 CA28 2681 2784 2880" /* ..!7Èó˛. (&Å'Ñ(Ä */ + $"2997 2800 10B4 0002 0D25 C897 FE02 931D" /* )ó(..¥...%»ó˛.ì. */ + $"2584 248D 2582 2483 2581 2401 2718 B600" /* %Ñ$ç%Ç$É%Å$.'.∂. */ + $"0110 B597 FE01 681B 8521 8422 8023 8B22" /* ..µó˛.h.Ö!Ñ"Ä#ã" */ + $"8023 8022 0223 1C04 B700 00A2 97FE 014A" /* Ä#Ä".#..∑..¢ó˛.J */ + $"1A85 1E84 1F80 2086 1F80 1E82 1F80 2001" /* .Ö.Ñ.Ä Ü.Ä.Ç.Ä . */ + $"1C08 B800 0094 96FE 02FB 3C19 841C 881D" /* ..∏..îñ˛.˚<.Ñ.à. */ + $"801E 861D 801C 811D 011C 09B9 0000 8C96" /* Ä.Ü.Ä.Å...∆π..åñ */ + $"FE02 F434 1688 1994 1A03 191A 190A BA00" /* ˛.Ù4.à.î.....¬∫. */ + $"0085 96FE 02F4 3114 8816 8717 8018 8717" /* .Öñ˛.Ù1.à.á.Ä.á. */ + $"0218 1609 BB00 007C 96FE 02F7 3111 8B14" /* ...∆ª..|ñ˛.˜1.ã. */ + $"8715 8016 8415 0113 07BC 0000 6F97 FE01" /* á.Ä.Ñ....º..oó˛. */ + $"3A0E 9D12 0213 0E04 BD00 004C 97FE 0148" /* :.ù.....Ω..Ló˛.H */ + $"0A8B 0F8F 1000 0BBF 0001 22F8 96FE 0157" /* ¬ã.è...ø.."¯ñ˛.W */ + $"0795 0D83 0E01 0D07 C000 0104 BB96 FE01" /* .ï.É....¿...ªñ˛. */ + $"7504 9A0B 0109 03C2 0000 3A96 FE01 9D03" /* u.ö..∆.¬..:ñ˛.ù. */ + $"9809 0107 04C5 0000 7295 FE01 A500 9706" /* ò∆...≈..rï˛.•.ó. */ + $"0003 C800 0160 F993 FE02 C606 0094 03CC" /* ..»..`˘ì˛.∆..î.à */ + $"0001 47EE 92FE 01EC 15E5 0001 37E9 92FE" /* ..GÓí˛.Ï.Â..7Èí˛ */ + $"0037 E600 0131 E691 FE00 6BE7 0001 32EC" /* .7Ê..1Êë˛.kÁ..2Ï */ + $"90FE 00A6 E800 0139 E68F FE01 E010 E800" /* ê˛.¶Ë..9Êè˛.‡.Ë. */ + $"0141 EC8F FE00 37E9 0001 4BF3 8EFE 007A" /* .AÏè˛.7È..KÛé˛.z */ + $"EA00 0164 F78D FE01 C305 EA00 0181 F98C" /* Í..d˜ç˛.√.Í..Å˘å */ + $"FE01 F423 EA00 0209 9EFB 8CFE 0066 EB00" /* ˛.Ù#Í..∆û˚å˛.fÎ. */ + $"020F B9FD 8BFE 01BA 04EB 0001 1CD5 8BFE" /* ..π˝ã˛.∫.Î...’ã˛ */ + $"01F4 23EC 0001 30E8 8BFE 0067 ED00 014C" /* .Ù#Ï..0Ëã˛.gÌ..L */ + $"F58A FE01 BB04 ED00 016F F989 FE01 F424" /* ıä˛.ª.Ì..o˘â˛.Ù$ */ + $"ED00 0206 A1FC 89FE 0067 EE00 0113 CD89" /* Ì...°¸â˛.gÓ...Õâ */ + $"FE01 BE06 EE00 012E EA88 FE01 F624 EF00" /* ˛.æ.Ó...Íà˛.ˆ$Ô. */ + $"015A F888 FE00 6CEF 0002 038B FB87 FE01" /* .Z¯à˛.lÔ...ã˚á˛. */ + $"C206 EF00 010F BC87 FE01 F828 F000 0125" /* ¬.Ô...ºá˛.¯(..% */ + $"E687 FE00 6DF1 0001 59F9 86FE 01BD 04F0" /* Êá˛.mÒ..Y˘Ü˛.Ω. */ + $"0002 049D FD85 FE01 F320 F100 0117 D786" /* ...ù˝Ö˛.Û Ò...◊Ü */ + $"FE00 5EF2 0001 42F6 85FE 00A9 F300 0182" /* ˛.^Ú..BˆÖ˛.©Û..Ç */ + $"FB84 FE01 E311 F200 010F C585 FE00 35F3" /* ˚Ñ˛.„.Ú...≈Ö˛.5Û */ + $"0001 31F1 84FE 0074 F400 0176 F983 FE01" /* ..1ÒÑ˛.tÙ..v˘É˛. */ + $"B601 F300 010E C383 FE01 E310 F400 0138" /* ∂.Û...√ɲ.„.Ù..8 */ + $"F082 FE01 FB2A F500 0184 FB82 FE00 4FF5" /* Dz.˚*ı..Ñ˚Dz.Oı */ + $"0001 13CD 82FE 007D F600 0145 F481 FE00" /* ...ÕDz.}ˆ..EÙŞ. */ + $"A1F6 0002 049A FD80 FE01 BA01 F600 0121" /* °ˆ...ö˝Ä˛.∫.ˆ..! */ + $"E480 FE01 D209 F700 056F FAFE FEE5 11F7" /* ‰Ä˛.“∆˜..o˙˛˛Â.˜ */ + $"0005 0ECA FEFE F41D F800 0447 F5FE FE2C" /* ... ˛˛Ù.¯..Gı˛˛, */ + $"F800 0406 A5FD FE40 F900 0329 E0FE 5BFA" /* ¯...•˝˛@˘..)‡˛[˙ */ + $"0002 3BF7 7EFB 0001 C2A8 FB00 026A CB01" /* ..;˜~˚..¬®˚..jÀ. */ + $"FA00 0223 D210 FA00 0204 9920 FB00 0129" /* ˙..#“.˙...ô ˚..) */ + $"1EFF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ˇ.ˇ.ˇ.ˇ.ˇ.ˇ.ˇ.ˇ */ + $"00A8 00FF 00FF 00B0 000F 0812 2236 454D" /* .®.ˇ.ˇ.∞...."6EM */ + $"5660 635A 5147 3C28 160C E800 1904 1637" /* V`cZQG<(..Ë....7 */ + $"6494 B5CC DDE7 E9EB ECED EEEC EBEA E8E2" /* dîµÃ›ÁÈÎÏÌÓÏÎÍË‚ */ + $"D4BE A377 4620 0BE0 0006 0827 63A5 D0E6" /* ‘æ£wF .‡...'c•–Ê */ + $"EE80 F58A F608 F5F4 F0EA D9B9 7C3B 0FDB" /* ÓÄıäˆ.ıÙÍŸπ|;.€ */ + $"0006 1C64 AFDA EDF0 F281 F18B F083 F105" /* ...dØ⁄ÌÚÅÒãÉÒ. */ + $"EEE3 C184 3207 D500 0706 3587 CDE8 EDED" /* Ó„¡Ñ2.’...5áÕËÌÌ */ + $"EE97 ED07 EEEE EDEB DCA5 5111 D100 0703" /* ÓóÌ.ÓÓÌ΋•Q.—... */ + $"3396 D9E6 E9EA E99C E806 E9E9 E8E1 B856" /* 3ñŸÊÈÍÈúË.ÈÈË·∏V */ + $"0ECE 0006 288C D3E3 E6E5 E493 E380 E487" /* .Œ..(唄ʉì„ĉá */ + $"E306 E4E5 E4DE AE4A 07CA 0005 0D63 C8DF" /* „.‰Â‰fiÆJ. ...c»fl */ + $"E1E1 96E0 84DF 86E0 04E1 E0D7 9123 C800" /* ··ñ‡Ñfl܇.·‡◊ë#». */ + $"042F A0D8 DCDC 82DA 08DB D9DE DCDE DFDC" /* ./†ÿ‹‹Ç⁄.€Ÿfi‹fifl‹ */ + $"DEDE 87DA 00D9 90DA 05DB DCDB C057 08C4" /* fifiá⁄.Ÿê⁄.€‹€¿W.ƒ */ + $"0004 0454 C3D7 D780 D614 D7DA DBD9 BC82" /* ...T√◊◊Ä÷.◊⁄€ŸºÇ */ + $"BDCA BCA7 8185 C2DA D6D8 D9D8 D6D6 D581" /* Ω ºßÅÖ¬⁄÷ÿŸÿ÷÷’Å */ + $"D682 D883 D680 D880 D680 D704 D6D7 D286" /* ÷ÇÿÉ÷ÄÿÄ÷Ä◊.÷◊“Ü */ + $"15C2 001F 0E75 CBD4 D3D2 D2D4 D6D3 AC8C" /* .¬...uÀ‘”““‘÷”¨å */ + $"7E65 5362 685D 5753 5267 B7D8 C5B1 C2CD" /* ~eSbh]WSRg∑ÿ≈±¬Õ */ + $"D4D7 D5D3 8BD2 86D1 04D2 D3D2 A329 C000" /* ‘◊’”ã“Ü—.“”“£)¿. */ + $"0315 91CD CF80 CE0B D0B5 ABA5 5A54 5352" /* ..ë՜Č.–µ´•ZTSR */ + $"5151 5252 8151 0C66 AA81 5964 6F83 9EB5" /* QQRRÅQ.f™ÅYdoÉûµ */ + $"C9D2 D2CF 85CE 84CD 84CE 03CF D0B7 39BE" /* …““œÖŒÑÕÑŒ.œ–∑9æ */ + $"0003 1896 CBCA 81C8 06CD 9E57 5D50 5151" /* ...ñÀ Å».ÕûW]PQQ */ + $"8552 1151 515A 5551 5152 5456 5E6D 89A6" /* ÖR.QQZUQQRTV^mâ¶ */ + $"C0CD CDCB C988 C883 CA05 C8C9 CACC BA3F" /* ¿ÕÕÀ…à»É .»… Ã∫? */ + $"BC00 041B 98C7 C5C3 82C4 02BD 684F 8A52" /* º...ò«≈√ǃ.ΩhOäR */ + $"0051 8152 0C51 5152 5254 5A67 82A2 BAC6" /* .QÅR.QQRRTZgÇ¢∫∆ */ + $"C8C6 83C5 84C6 83C5 02C7 B842 BA00 0312" /* »∆É≈Ñ∆É≈.«∏B∫... */ + $"91C4 C184 C003 C6A2 5551 9252 0951 5152" /* 냡ѿ.∆¢UQíR∆QQR */ + $"5359 6379 9ABA C387 C086 BF02 C1B5 36B8" /* SYcyö∫√á¿Üø.¡µ6∏ */ + $"0003 0A7D C1BC 84BB 04BF 9E8E 6A50 9552" /* ..¬}¡ºÑª.øûéjPïR */ + $"0A51 5152 5357 6B95 BBBF BEBD 82BC 87BB" /* ¬QQRSWkïªøæΩǺ᪠*/ + $"03BC C0A8 25B6 0003 0464 BBB9 81B8 80B7" /* .º¿®%∂...dªπÅ∏Ä∑ */ + $"05BA A35E 5656 5198 5280 5103 5672 A8BB" /* .∫£^VVQòRÄQ.Vr®ª */ + $"8FB8 02BC 9715 B500 0239 B2B5 82B4 06B2" /* è∏.ºó.µ..9≤µÇ¥.≤ */ + $"B2B3 B16B 5051 9D52 0551 5361 95B8 B387" /* ≤≥±kPQùR.QSaï∏≥á */ + $"B201 B3B3 82B4 02B8 7306 B300 0218 99B3" /* ≤.≥≥Ç¥.∏s.≥...ô≥ */ + $"85B0 03B3 8E51 519F 5204 5150 5A8D B28E" /* Ö∞.≥éQQüR.QPZç≤é */ + $"B002 B1B1 43B2 0002 0671 AE85 AC03 ADAA" /* ∞.±±C≤...qÆÖ¨.≠™ */ + $"654F 9652 0054 8056 0155 5383 5203 5158" /* eOñR.TÄV.USÉR.QX */ + $"92AE 81AB 80AA 01AC AB84 AC03 AAAD 9C1C" /* íÆÅ´Ä™.¨´Ñ¨.™≠ú. */ + $"B100 0231 A6A7 80A6 82A7 01AA 8F97 5208" /* ±..1¶ßĶÇß.™èóR. */ + $"5548 342D 313B 4954 5582 5207 5060 9EA9" /* UH4-1;ITUÇR.P`û© */ + $"A7A8 A6A6 85A8 00A7 81A6 02AD 6904 AF00" /* ß®¶¶Ö®.ßŶ.≠i.Ø. */ + $"020A 7EA6 81A2 82A3 02A4 6C50 9552 0B55" /* .¬~¶Å¢Ç£.§lPïR.U */ + $"3610 0605 0506 1021 3F55 5381 5201 516D" /* 6......!?USÅR.Qm */ + $"83A2 80A3 86A2 02A4 A128 AF00 013E A286" /* ɢģܢ.§°(Ø..>¢Ü */ + $"9E02 A191 5595 5203 534F 1101 8100 0501" /* û.°ëUïR.SO..Å... */ + $"030B 2750 5380 5205 5152 81A1 9E9E 82A0" /* ..'PSÄR.QRŰûûdž */ + $"869E 03A0 A374 07AD 0002 097C 9D85 9903" /* Üû.†£t.≠..∆|ùÖô. */ + $"9A9E 6F50 9552 0253 4F0D 8500 0104 2282" /* öûoPïR.SO.Ö..."Ç */ + $"5204 505F 9899 9888 9981 9A02 9B9C 28AD" /* R.P_òôòàôÅö.õú(≠ */ + $"0001 2C99 8798 0287 5651 9652 0154 2886" /* ..,ôáò.áVQñR.T(Ü */ + $"0002 0339 5581 5201 538A 8097 8098 8597" /* ...9UÅR.SäÄóÄòÖó */ + $"8198 019D 60AC 0003 0468 9791 8492 0393" /* Åò.ù`¨...hóëÑí.ì */ + $"8E60 5098 5201 5021 8600 0121 5681 5202" /* é`PòR.P!Ü..!VÅR. */ + $"5074 968F 9201 8E18 AB00 0317 8B8F 8F84" /* Ptñèí.é.´...ãèèÑ */ + $"9002 8F64 5099 5203 5351 310F 8400 0133" /* ê.èdPôR.SQ1.Ñ..3 */ + $"5581 5202 5159 8786 9080 8E80 9004 8E8E" /* UÅR.QYáÜêÄéÄê.éé */ + $"8F96 42AB 0003 3890 8989 838A 038D 7B51" /* èñB´..8êââÉä.ç{Q */ + $"519B 5209 544A 331C 0F0B 0C14 3051 8352" /* QõR∆TJ3.....0QÉR */ + $"0350 6288 8D82 8B82 8A80 8B80 8A02 8F69" /* .PbàçÇãÇäÄãÄä.èi */ + $"04AA 0001 5D8C 8284 8086 0288 6350 9852" /* .™..]åÇÑÄÜ.àcPòR */ + $"0153 5381 5206 5452 4C49 494F 5385 5207" /* .SSÅR.TRLIIOSÖR. */ + $"515E 7A87 8887 8686 8385 8286 0287 8114" /* Q^záàáÜÜÉÖÇÜ.áÅ. */ + $"A900 020E 7982 8281 8083 017F 5699 5203" /* ©...yÇÇÅÄÉ..VôR. */ + $"494A 5054 8056 0255 5453 8952 0651 5464" /* IJPTÄV.UTSâR.QTd */ + $"7581 8383 8382 8383 0189 2EA9 0002 1E82" /* uÅÉÉÉÇÉÉ.â.©...Ç */ + $"7F82 7E04 8080 816F 5098 520C 533D 2621" /* .Ç~.ÄÄÅoPòR.S=&! */ + $"2123 2A33 3E46 4E51 5580 5602 5554 5383" /* !#*3>FNQUÄV.UTSÉ */ + $"5208 5153 5A66 737D 8080 7F83 8003 7F7F" /* R.QSZfs}ÄÄ.ÉÄ... */ + $"834A A900 0432 827A 7B7B 8079 047A 7A7C" /* ÉJ©..2Çz{{Äy.zz| */ + $"6050 9A52 1551 4B41 3628 1D13 100E 1319" /* `PöR.QKA6(...... */ + $"222C 363E 4550 5556 5654 5380 5208 5151" /* ",6>EPUVVTSÄR.QQ */ + $"5358 6471 797B 7B81 7A04 7B79 7F5E 03A8" /* SXdqy{{Åz.{y.^.® */ + $"0001 437E 8077 8276 0274 5851 9B52 2251" /* ..C~ÄwÇv.tXQõR"Q */ + $"5253 5352 4D44 392A 1B10 0903 0304 101B" /* RSSRMD9*..∆..... */ + $"2836 434E 5356 5655 5352 5151 545D 6874" /* (6CNSVVUSRQQT]ht */ + $"7877 8176 0277 6B0B A800 014F 7780 7381" /* xwÅv.wk.®..OwÄsÅ */ + $"7201 736B A452 1C53 5352 4D47 3A2C 1E10" /* r.sk§R.SSRMG:,.. */ + $"0602 0304 0E17 2332 3F4A 5256 5553 5152" /* ......#2?JRVUSQR */ + $"5662 6F74 8073 0274 6F0F A800 0156 7281" /* VbotÄs.to.®..VrÅ */ + $"7080 6F02 7062 51A8 521D 5353 524E 4536" /* pÄo.pbQ®R.SSRNE6 */ + $"2616 0C05 0202 030B 172B 414F 5456 5553" /* &........+AOTVUS */ + $"5362 6F70 706F 7017 A700 0206 596E 816B" /* Sboppop.ß...YnÅk */ + $"806A 026C 5B51 AD52 1853 5350 4A43 3A2B" /* Äj.l[Q≠R.SSPJC:+ */ + $"1A0F 0802 040E 1922 324B 5652 5969 6C6B" /* ......."2KVRYilk */ + $"6D1B A700 0306 586A 6880 6780 6601 6754" /* m.ß...XjhÄgÄf.gT */ + $"B252 8053 1151 4C46 3A2D 1E11 0603 0D2E" /* ≤RÄS.QLF:-...... */ + $"5153 5564 686B 1CA7 0003 0655 6765 8364" /* QSUdhk.ß...UgeÉd */ + $"0060 B952 8053 0B4F 452F 1402 1849 5558" /* .`πRÄS.OE/...IUX */ + $"6468 1BA7 0002 0450 6381 6103 6060 615C" /* dh.ß...PcÅa.``a\ */ + $"BE52 0954 5039 100E 3D53 5D63 18A8 0001" /* æR∆TP9..=S]c.®.. */ + $"4860 825E 025D 5D56 AF52 0255 5756 8058" /* H`Ç^.]]VØR.UWVÄX */ + $"0357 5555 5384 5207 534B 1F23 5456 5E12" /* .WUUSÑR.SK.#TV^. */ + $"A800 033E 5E59 5980 5801 5958 AC52 0353" /* ®..>^YYÄX.YX¨R.S */ + $"5558 5888 5900 5880 5609 5452 5557 5A59" /* UXXàY.XÄV∆TRUWZY */ + $"5956 560E A800 0330 5955 5580 5401 5554" /* YVV.®..0YUUÄT.UT */ + $"AB52 0254 5555 8054 0155 5580 5680 5585" /* ´R.TUUÄT.UUÄVÄUÖ */ + $"5680 5504 5656 584D 07A8 0001 2256 8052" /* VÄU.VVXM.®.."VÄR */ + $"8051 AD52 8251 8352 8251 8052 8251 0352" /* ÄQ≠RÇQÉRÇQÄRÇQ.R */ + $"5254 3FA9 0000 1581 5080 4F00 51A6 5202" /* RT?©...ÅPÄO.Q¶R. */ + $"5150 4F80 5083 4F82 5083 4F01 5050 844F" /* QPOÄPÉOÇPÉO.PPÑO */ + $"0152 2EA9 0002 0A45 4B82 4A00 50A2 5207" /* .R.©..¬EKÇJ.P¢R. */ + $"5351 4F4E 4A4B 4A4A 804B 8D4A 824B 814A" /* SQONJKJJÄKçJÇKÅJ */ + $"014E 1BAA 0001 324A 8147 0148 51A0 5204" /* .N.™..2JÅG.HQ†R. */ + $"5351 4E4A 4780 4682 4885 4783 4801 4747" /* SQNJGÄFÇHÖGÉH.GG */ + $"8348 8047 0144 0CAA 0001 1C48 8045 0244" /* ÉHÄG.D.™...HÄE.D */ + $"4551 9E52 0653 504B 4543 4344 8043 8245" /* EQûR.SPKECCDÄCÇE */ + $"8344 8245 8644 8145 0147 33AB 0001 0C3F" /* ÉDÇEÜDÅE.G3´...? */ + $"8041 0140 449D 5204 5352 4942 4082 4185" /* ÄA.@DùR.SRIB@ÇAÖ */ + $"4080 4101 4040 8041 8040 8041 8240 8141" /* @ÄA.@@ÄAÄ@ÄAÇ@ÅA */ + $"0144 20AC 0001 2C40 803E 0042 9C52 0553" /* .D ¨..,@Ä>.BúR.S */ + $"4D41 3E3F 3F82 4080 3E80 3F82 4080 3F80" /* MA>??Ç@Ä>Ä?Ç@Ä?Ä */ + $"3E8B 3F01 3D0C AC00 0613 3D3B 3A39 4153" /* >ã?.=.¨...=;:9AS */ + $"9A52 0353 493A 3980 3A80 3B82 3A80 3982" /* öR.SI:9Ä:Ä;Ç:Ä9Ç */ + $"3B83 3A80 3B87 3A01 3E26 AD00 0604 2E38" /* ;É:Ä;á:.>&≠....8 */ + $"3736 4153 9952 0153 4680 3680 3780 3883" /* 76ASôR.SFÄ6Ä7Ä8É */ + $"3701 3636 8837 8336 8037 8136 0138 0FAE" /* 7.66à7É6Ä7Å6.8.Æ */ + $"0005 1536 3433 3F53 9852 0353 4933 3280" /* ...643?SòR.SI32Ä */ + $"3380 3401 3535 8334 8033 0134 3483 358B" /* 3Ä4.55É4Ä3.44É5ã */ + $"3401 3625 AF00 0503 2732 303B 5398 5202" /* 4.6%Ø...'20;SòR. */ + $"5135 2F81 3080 3180 329B 3101 300D B000" /* Q5/Å0Ä1Ä2õ1.0.∞. */ + $"040E 2F2C 3853 9752 0254 412C 882D 802E" /* ../,8SóR.TA,à-Ä. */ + $"882D 822E 872D 0130 1DB2 0003 1B2C 3251" /* à-Ç.á-.0.≤...,2Q */ + $"9752 0251 3129 812A 842B 802C 822B 802A" /* óR.Q1)Å*Ñ+Ä,Ç+Ä* */ + $"802B 802C 852B 802C 022B 2809 B200 0406" /* Ä+Ä,Ö+Ä,.+(∆≤... */ + $"242D 4D53 9552 0153 4983 2784 2880 2997" /* $-MSïR.SIÉ'Ñ(Ä)ó */ + $"2800 10B4 0003 0D26 4853 9552 0354 3D22" /* (..¥...&HSïR.T=" */ + $"2584 248D 2582 2483 2581 2401 2718 B600" /* %Ñ$ç%Ç$É%Å$.'.∂. */ + $"0212 4454 9552 0254 3220 8521 8422 8023" /* ..DTïR.T2 Ö!Ñ"Ä# */ + $"8B22 8023 8022 0223 1C04 B700 0138 5595" /* ã"Ä#Ä".#..∑..8Uï */ + $"5202 532A 1D85 1E84 1F80 2086 1F80 1E82" /* R.S*.Ö.Ñ.Ä Ü.Ä.Ç */ + $"1F80 2001 1C08 B800 0132 5695 5202 5125" /* .Ä ...∏..2VïR.Q% */ + $"1B84 1C88 1D80 1E86 1D80 1C81 1D01 1C09" /* .Ñ.à.Ä.Ü.Ä.Å...∆ */ + $"B900 012F 5695 5201 5021 8919 941A 0319" /* π../VïR.P!â.î... */ + $"1A19 0ABA 0001 2D56 9552 014F 1E89 1687" /* ..¬∫..-VïR.O.â.á */ + $"1780 1887 1702 1816 09BB 0001 2A56 9552" /* .Ä.á....∆ª..*VïR */ + $"0250 1C13 8B14 8715 8016 8415 0113 07BC" /* .P..ã.á.Ä.Ñ....º */ + $"0001 2756 9652 011E 109D 1202 130E 04BD" /* ..'VñR...ù.....Ω */ + $"0001 1C56 9552 0254 210E 8B0F 8F10 000B" /* ...VïR.T!.ã.è... */ + $"BF00 010E 5095 5202 5524 0B95 0D83 0E01" /* ø...PïR.U$.ï.É.. */ + $"0D07 C000 0203 3E55 9452 0256 2B09 9A0B" /* ..¿...>UîR.V+∆ö. */ + $"0109 03C2 0002 1654 5393 5202 5535 0698" /* .∆.¬...TSìR.U5.ò */ + $"0901 0704 C500 0227 5553 9252 0255 3704" /* ∆...≈..'USíR.U7. */ + $"9706 0003 C800 0222 5253 9152 0254 4104" /* ó...».."RSëR.TA. */ + $"9503 CC00 021A 4D54 9052 0253 4D09 E500" /* ï.Ã...MTêR.SM∆Â. */ + $"0216 4D54 9052 0154 15E6 0002 134B 548F" /* ..MTêR.T.Ê...KTè */ + $"5201 5625 E700 0214 4E54 8E52 0155 36E8" /* R.V%Á...NTéR.U6Ë */ + $"0002 154C 538D 5202 5348 08E8 0002 184D" /* ...LSçR.SH.Ë...M */ + $"538D 5201 5415 E900 021C 5053 8C52 0156" /* SçR.T.È...PSåR.V */ + $"2AEA 0001 2353 8C52 0154 3FEB 0001 2D54" /* *Í..#SåR.T?Î..-T */ + $"8C52 0150 0FEA 0002 0434 558B 5201 5623" /* åR.P.Í...4UãR.V# */ + $"EB00 0208 3C54 8A52 0155 3CEC 0002 0D46" /* Î...Ô.. */ + $"134D 5387 5201 5010 EF00 011F 5387 5201" /* .MSáR.P.Ô...SáR. */ + $"5625 F000 012F 5586 5201 553F F000 0207" /* V%../UÜR.U?... */ + $"3E54 8652 0151 10F0 0002 0F4D 5385 5201" /* >TÜR.Q....MSÖR. */ + $"5625 F100 011E 5485 5201 553E F100 0203" /* V%Ò...TÖR.U>Ò... */ + $"3455 8452 0253 500E F100 020B 4654 8452" /* 4UÑR.SP.Ò...FTÑR */ + $"0156 21F2 0001 1951 8452 0155 38F3 0001" /* .V!Ú...QÑR.U8Û.. */ + $"2C55 8352 0253 4908 F200 0208 4054 8352" /* ,UÉR.SI.Ú...@TÉR */ + $"0153 15F3 0001 134F 8352 0156 27F4 0001" /* .S.Û...OÉR.V'Ù.. */ + $"2854 8252 0155 3DF4 0002 0741 5481 5202" /* (TÇR.U=Ù...ATÅR. */ + $"5349 08F4 0001 1550 8252 0151 11F5 0001" /* SI.Ù...PÇR.Q.ı.. */ + $"2C55 8152 0156 1BF5 0002 0944 5480 5201" /* ,UÅR.V.ı..∆DTÄR. */ + $"562A F600 0019 8152 0156 35F7 0005 3456" /* V*ˆ...ÅR.V5˜..4V */ + $"5252 553E F700 060E 4B53 5254 4405 F700" /* RRU>˜...KSRTD.˜. */ + $"0526 5552 5349 08F7 0005 0842 5453 4E0D" /* .&URSI.˜...BTSN. */ + $"F800 0019 8052 0011 F800 0403 3755 5418" /* ¯...ÄR..¯...7UT. */ + $"F900 0310 4A57 20FA 0002 1552 2AFB 0001" /* ˘...JW ˙...R*˚.. */ + $"3E37 FB00 0125 43FB 0002 0E44 07FA 0002" /* >7˚..%C˚...D.˙.. */ + $"0333 0EFB 0001 0F0D FF00 FF00 FF00 FF00" /* .3.˚....ˇ.ˇ.ˇ.ˇ. */ + $"FF00 FF00 FF00 FF00 A800 FF00 FF00 B000" /* ˇ.ˇ.ˇ.ˇ.®.ˇ.ˇ.∞. */ + $"0F08 1222 3645 4D56 6063 5A51 473C 2816" /* ..."6EMV`cZQG<(. */ + $"0CE8 0019 0416 3764 94B5 CCDD E7E9 EBEC" /* .Ë....7dîµÃ›ÁÈÎÏ */ + $"EDEE ECEB EAE8 E2D4 BEA3 7746 200B E000" /* ÌÓÏÎÍË‚‘æ£wF .‡. */ + $"0608 2763 A5D0 E6EE 80F5 8AF6 08F5 F4F0" /* ..'c•–ÊÓÄıäˆ.ıÙ */ + $"EAD9 B97C 3B0F DB00 061C 64AF DAED F0F2" /* ÍŸπ|;.€...dØ⁄ÌÚ */ + $"81F1 8BF0 83F1 05EE E3C1 8432 07D5 0007" /* ÅÒãÉÒ.Ó„¡Ñ2.’.. */ + $"0635 87CD E8ED EDEE 97ED 07EE EEED EBDC" /* .5áÕËÌÌÓóÌ.ÓÓÌ΋ */ + $"A551 11D1 0007 0333 96D9 E6E9 EAE9 9CE8" /* •Q.—...3ñŸÊÈÍÈúË */ + $"06E9 E9E8 E1B8 560E CE00 0628 8CD3 E3E6" /* .ÈÈË·∏V.Œ..(å”„Ê */ + $"E5E4 93E3 80E4 87E3 06E4 E5E4 DEAE 4A07" /* ‰ì„ĉá„.‰Â‰fiÆJ. */ + $"CA00 050D 63C8 DFE1 E196 E084 DF86 E004" /* ...c»fl··ñ‡Ñfl܇. */ + $"E1E0 D791 23C8 0004 2FA0 D8DC DC81 DA06" /* ·‡◊ë#»../†ÿ‹‹Å⁄. */ + $"DBDC D9E0 DEE0 E480 DF87 DA00 D990 DA05" /* €‹Ÿ‡fi‡‰Äflá⁄.Ÿê⁄. */ + $"DBDC DBC0 5708 C400 0404 54C3 D7D7 80D6" /* €‹€¿W.ƒ...T√◊◊Ä÷ */ + $"14D7 DFDF DDA5 45A8 C1A4 7E43 4DB0 DED6" /* .◊flfl›•E®¡§~CM∞fi÷ */ + $"D9DD D9D8 D6D5 81D6 82D8 83D6 80D8 80D6" /* Ÿ›Ÿÿ÷’Å÷ÇÿÉ÷ÄÿÄ÷ */ + $"80D7 04D6 D7D2 8615 C200 1F0E 75CB D4D3" /* Ä◊.÷◊“Ü.¬...uÀ‘” */ + $"D2D2 D6DA D489 563E 1305 131C 130D 0506" /* ““÷⁄‘âV>........ */ + $"1E9F E0BA 94B4 C9D7 DBD7 D38B D286 D104" /* .ü‡∫◊€◊”ã“Ü—. */ + $"D2D3 D2A3 29C0 0003 1591 CDCF 80CE 06D2" /* “”“£)¿...ë՜Č.“ */ + $"9F8E 800F 0805 8500 0D01 1B8B 4311 152B" /* üéÄ...Ö....ãC..+ */ + $"4872 A0C4 D7D7 D185 CE84 CD84 CE03 CFD0" /* Hr†ƒ◊◊—ÖŒÑÕÑŒ.œ– */ + $"B739 BE00 0318 96CB CA81 C803 D176 100E" /* ∑9æ...ñÀ Å».—v.. */ + $"8900 1001 0F06 0000 0206 0C12 2951 86B8" /* â...........)QÜ∏ */ + $"D0D1 CCC9 88C8 83CA 05C8 C9CA CCBA 3FBC" /* –—Ã…à»É .»… Ã∫?º */ + $"0004 1B98 C7C5 C381 C402 C7B6 1D93 0009" /* ...ò«≈√Ń.«∂.ì.∆ */ + $"0207 0F1F 4982 ADC8 CDC7 83C5 84C6 83C5" /* ....IÇ≠»Õ«É≈Ñ∆É≈ */ + $"02C7 B842 BA00 0312 91C4 C184 C001 CB87" /* .«∏B∫...냡ѿ.Àá */ + $"9600 0801 060E 193A 75B5 C7C1 86C0 86BF" /* ñ......:uµ«¡Ü¿Üø */ + $"02C1 B536 B800 030A 7DC1 BC83 BB04 BAC1" /* .¡µ6∏..¬}¡ºÉª.∫¡ */ + $"8160 1F99 0007 040D 266E B9C2 BCBD 82BC" /* Å`.ô....&nπ¬ºΩǺ */ + $"87BB 03BC C0A8 25B6 0003 0464 BBB9 81B8" /* áª.º¿®%∂...dªπÅ∏ */ + $"80B7 04BE 8B0E 0B04 9B00 0402 0C33 96BF" /* Ä∑.æã...õ....3ñø */ + $"8FB8 02BC 9715 B500 0239 B2B5 82B4 04B2" /* è∏.ºó.µ..9≤µÇ¥.≤ */ + $"B2B4 AD25 A000 0404 1677 BAB4 87B2 01B3" /* ≤¥≠%†....w∫¥á≤.≥ */ + $"B382 B402 B873 06B3 0002 1899 B385 B002" /* ≥Ç¥.∏s.≥...ô≥Ö∞. */ + $"B764 02A2 0002 0D68 B78E B002 B1B1 43B2" /* ∑d.¢...h∑é∞.±±C≤ */ + $"0002 0671 AE85 AC02 ADA8 1CA4 0002 0B72" /* ...qÆÖ¨.≠®.§...r */ + $"B381 AB80 AA01 ACAB 84AC 03AA AD9C 1CB1" /* ≥Å´Ä™.¨´Ñ¨.™≠ú.± */ + $"0002 31A6 A780 A682 A702 AE6D 02A5 0006" /* ..1¶ßĶÇß.Æm.•.. */ + $"1692 ACA7 A8A6 A685 A800 A781 A602 AD69" /* .í¨ß®¶¶Ö®.ßŶ.≠i */ + $"04AF 0002 0A7E A681 A282 A301 A629 A600" /* .Ø..¬~¶Å¢Ç£.¶)¶. */ + $"0301 2DA1 A381 A280 A386 A202 A4A1 28AF" /* ..-°£Å¢Ä£Ü¢.§°(Ø */ + $"0001 3EA2 869E 02A3 7E04 A700 0403 55A6" /* ..>¢Üû.£~.ß...U¶ */ + $"9E9E 82A0 869E 03A0 A374 07AD 0002 097C" /* ûûdžÜû.†£t.≠..∆| */ + $"9D85 9902 9AA1 35A9 0003 1594 9B98 8899" /* ùÖô.ö°5©...îõòàô */ + $"819A 029B 9C28 AD00 012C 9986 9802 9D71" /* Åö.õú(≠..,ôÜò.ùq */ + $"05A9 0004 0178 9997 9780 9885 9781 9801" /* .©...xôóóÄòÖóÅò. */ + $"9D60 AC00 0304 6897 9184 9202 9586 18AB" /* ù`¨...hóëÑí.ïÜ.´ */ + $"0001 4599 8F92 018E 18AB 0003 178B 8F8F" /* ..Eôèí.é.´...ãèè */ + $"8490 028E 2501 AB00 020C 7E94 8590 808E" /* Ñê.é%.´...~îÖêÄé */ + $"8090 048E 8E8F 9642 AB00 0338 9089 8983" /* Äê.ééèñB´..8êââÉ */ + $"8A02 8F5D 01AD 0002 2082 9082 8B82 8A80" /* ä.è].≠.. ÇêÇãÇäÄ */ + $"8B80 8A02 8F69 04AA 0001 5D8C 8284 8086" /* ãÄä.èi.™..]åÇÑÄÜ */ + $"018C 24AE 0007 0119 618A 8D87 8686 8385" /* .å$Æ....aäçáÜÜÉÖ */ + $"8286 0287 8114 A900 020E 7982 8281 0483" /* ÇÜ.áÅ.©...yÇÇÅ.É */ + $"8385 7202 AF00 0701 0525 597C 8986 8382" /* ÉÖr.Ø....%Y|âÜÉÇ */ + $"8283 8301 892E A900 021E 827F 827E 0380" /* ÇÉÉ.â.©...Ç.Ç~.Ä */ + $"8085 4AB2 0007 0105 1232 5876 8382 8480" /* ÄÖJ≤.....2XvÉÇÑÄ */ + $"037F 7F83 4AA9 0004 3282 7A7B 7B80 7903" /* ...ÉJ©..2Çz{{Äy. */ + $"7A79 7F24 B500 0702 050F 2E5A 797F 7D81" /* zy.$µ......Zy.}Å */ + $"7A04 7B79 7F5E 03A8 0001 437E 8077 8176" /* z.{y.^.®..C~ÄwÅv */ + $"0277 700B B800 0602 0519 446B 7D79 8176" /* .wp.∏.....Dk}yÅv */ + $"0277 6B0B A800 014F 7780 7381 7201 7656" /* .wk.®..OwÄsÅr.vV */ + $"BB00 0B01 0309 2F60 7975 7373 746F 0FA8" /* ª....∆/`yussto.® */ + $"0001 5672 8170 806F 0174 36BE 0008 0205" /* ..VrÅpÄo.t6æ.... */ + $"336C 7370 6F70 17A7 0002 0659 6E81 6B80" /* 3lspop.ß...YnÅkÄ */ + $"6A01 6F1C C000 0602 155B 6F6B 6D1B A700" /* j.o.¿....[okm.ß. */ + $"0306 586A 6880 6704 6666 6762 07C2 0004" /* ..XjhÄg.ffgb.¬.. */ + $"0C57 6A6B 1CA7 0003 0655 6765 8264 0165" /* .Wjk.ß...UgeÇd.e */ + $"50C4 0003 1562 681B A700 0204 5063 8161" /* Pƒ...bh.ß...PcÅa */ + $"0360 6064 33C4 0003 0139 6718 A800 0148" /* .``d3ƒ...9g.®..H */ + $"6082 5E02 5D60 18AE 000A 0414 1E25 2D2C" /* `Ç^.]`.Æ.¬...%-, */ + $"2A25 1B10 0786 0005 161E 1310 5E12 A800" /* *%...Ü......^.®. */ + $"033E 5E59 5980 5802 5A51 01AB 0006 0B27" /* .>^YYÄX.ZQ.´...' */ + $"404E 585A 5C80 5A12 5959 5751 4940 372E" /* @NXZ\ÄZ.YYWQI@7. */ + $"2820 202A 4158 5B54 2C50 0EA8 0003 3059" /* ( *AX[T,P.®..0Y */ + $"5555 8054 0158 3CAA 0008 0B31 4F57 5655" /* UUÄT.X<™...1OWVU */ + $"5455 5580 5680 5502 5656 5780 5809 5757" /* TUUÄVÄU.VVWÄX∆WW */ + $"5656 5556 5757 4D07 A800 0122 5680 5203" /* VVUVWWM.®.."VÄR. */ + $"5151 5526 A800 0408 2B4B 5452 8151 8352" /* QQU&®...+KTRÅQÉR */ + $"8251 8052 8251 0352 5254 3FA9 0000 1581" /* ÇQÄRÇQ.RRT?©...Å */ + $"5003 4F4F 5118 A600 020B 2A45 8050 834F" /* P.OOQ.¶...*EÄPÉO */ + $"8250 834F 0150 5084 4F01 522E A900 020A" /* ÇPÉO.PPÑO.R.©..¬ */ + $"454B 814A 014C 0DA4 0003 1431 454C 824B" /* EKÅJ.L.§...1ELÇK */ + $"8D4A 824B 814A 014E 1BAA 0001 324A 8047" /* çJÇKÅJ.N.™..2JÄG */ + $"0148 43A2 0006 051E 3947 4847 4682 4885" /* .HC¢....9GHGFÇHÖ */ + $"4783 4801 4747 8348 8047 0144 0CAA 0001" /* GÉH.GGÉHÄG.D.™.. */ + $"1C48 8145 003C A000 0506 233C 4644 4480" /* .HÅE.<†...#>@,ù.. */ + $"0E2F 3F3E 3F82 4080 3E80 3F82 4080 3F80" /* ./?>?Ç@Ä>Ä?Ç@Ä?Ä */ + $"3E8B 3F01 3D0C AC00 0513 3D3B 3A3D 249C" /* >ã?.=.¨...=;:=$ú */ + $"0005 1436 3B3B 3A3A 803B 823A 8039 823B" /* ...6;;::Ä;Ç:Ä9Ç; */ + $"833A 803B 873A 013E 26AD 0005 042E 3837" /* É:Ä;á:.>&≠....87 */ + $"3920 9B00 0316 3937 3680 3780 3883 3701" /* 9 õ...976Ä7Ä8É7. */ + $"3636 8837 8336 8037 8136 0138 0FAE 0004" /* 66à7É6Ä7Å6.8.Æ.. */ + $"1536 3437 1D9A 0001 0A32 8133 8034 0135" /* .647.ö..¬2Å3Ä4.5 */ + $"3583 3480 3301 3434 8335 8B34 0136 25AF" /* 5É4Ä3.44É5ã4.6%Ø */ + $"0004 0327 3232 1D9A 0001 2732 8130 8031" /* ...'22.ö..'2Å0Ä1 */ + $"8032 9B31 0130 0DB0 0003 0E2F 2F20 9900" /* Ä2õ1.0.∞...// ô. */ + $"0111 2F88 2D80 2E88 2D82 2E87 2D01 301D" /* ../à-Ä.à-Ç.á-.0. */ + $"B200 021B 2D22 9900 0121 2B81 2A84 2B80" /* ≤...-"ô..!+Å*Ñ+Ä */ + $"2C82 2B80 2A80 2B80 2C85 2B80 2C02 2B28" /* ,Ç+Ä*Ä+Ä,Ö+Ä,.+( */ + $"09B2 0002 0624 2498 0000 0583 2784 2880" /* ∆≤...$$ò...É'Ñ(Ä */ + $"2997 2800 10B4 0002 0D26 0497 0001 0E26" /* )ó(..¥...&.ó...& */ + $"8524 8D25 8224 8325 8124 0127 18B6 0001" /* Ö$ç%Ç$É%Å$.'.∂.. */ + $"1408 9700 0114 2385 2184 2280 238B 2280" /* ..ó...#Ö!Ñ"Ä#ã"Ä */ + $"2380 2202 231C 04D2 0001 161F 851E 841F" /* #Ä".#..“....Ö.Ñ. */ + $"8020 861F 801E 821F 8020 011C 08D3 0001" /* Ä Ü.Ä.Ç.Ä ...”.. */ + $"171D 841C 881D 801E 861D 801C 811D 011C" /* ..Ñ.à.Ä.Ü.Ä.Å... */ + $"09D4 0001 151A 8819 941A 0319 1A19 0AD5" /* ∆‘....à.î.....¬’ */ + $"0001 1317 8816 8717 8018 8717 0218 1609" /* ....à.á.Ä.á....∆ */ + $"D600 0111 158B 1487 1580 1684 1501 1307" /* ÷....ã.á.Ä.Ñ.... */ + $"D700 000E 9E12 0213 0E04 D800 010A 108B" /* ◊...û.....ÿ..¬.ã */ + $"0F8F 1000 0BDA 0001 080E 950D 830E 010D" /* .è...⁄....ï.É... */ + $"07DB 0000 049B 0B01 0903 DD00 9909 0107" /* .€...õ..∆.›.ô∆.. */ + $"04DF 0098 0600 03E1 0096 03FF 00FF 00FF" /* .fl.ò...·.ñ.ˇ.ˇ.ˇ */ + $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ˇ.ˇ.ˇ.ˇ.ˇ.ˇ.ˇ.ˇ */ + $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ˇ.ˇ.ˇ.ˇ.ˇ.ˇ.ˇ.ˇ */ + $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ˇ.ˇ.ˇ.ˇ.ˇ.ˇ.ˇ.ˇ */ + $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ˇ.ˇ.ˇ.ˇ.ˇ.ˇ.ˇ.ˇ */ + $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ˇ.ˇ.ˇ.ˇ.ˇ.ˇ.ˇ.ˇ */ + $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ˇ.ˇ.ˇ.ˇ.ˇ.ˇ.ˇ.ˇ */ + $"00FF 00FF 00FF 00FF 00BD 0074 386D 6B00" /* .ˇ.ˇ.ˇ.ˇ.Ω.t8mk. */ + $"0040 0800 0000 0000 0000 0000 0000 0000" /* .@.............. */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0006 111F 303C 5376" /* ............0î“ÓÛÙı */ + $"F6F8 FBFD FFFF FEFE FEFE FEFE FEFE FEFE" /* ˆ¯˚˝ˇˇ˛˛˛˛˛˛˛˛˛˛ */ + $"FEFE FEFE FEFE FEFE FEFE FEFE FEFE FEFF" /* ˛˛˛˛˛˛˛˛˛˛˛˛˛˛˛ˇ */ + $"FEFB F6F1 ECEB ECEC EAE4 CA90 3D04 0000" /* ˛˚ˆÒÏÎÏÏ͉ ê=... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 074F A8E1 F3F5 F5F5 F7FA" /* .......O®·Ûııı˜˙ */ + $"FDFE FEFE FEFE FEFE FEFE FEFE FEFE FEFE" /* ˝˛˛˛˛˛˛˛˛˛˛˛˛˛˛˛ */ + $"FEFE FEFE FEFE FEFE FEFE FEFE FEFE FEFE" /* ˛˛˛˛˛˛˛˛˛˛˛˛˛˛˛˛ */ + $"FEFE FFFD F9F3 EDEA EBEB EBE8 D8A2 4E08" /* ˛˛ˇ˝˘ÛÌÍÎÎÎËÿ¢N. */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 054D B0E8 F4F5 F5F4 F7FB FDFE" /* .....M∞ËÙııÙ˜˚˝˛ */ + $"FEFE FEFE FEFE FEFE FEFE FEFE FEFE FEFE" /* ˛˛˛˛˛˛˛˛˛˛˛˛˛˛˛˛ */ + $"FEFE FEFE FEFE FEFE FEFE FEFE FEFE FEFE" /* ˛˛˛˛˛˛˛˛˛˛˛˛˛˛˛˛ */ + $"FEFE FEFE FEFE FAF3 ECEA EAEB EAE9 DEA9" /* ˛˛˛˛˛˛˙ÛÏÍÍÎÍÈfi© */ + $"4C06 0000 0000 0000 0000 0000 0000 0000" /* L............... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 003B A8E7 F3F6 F6F4 F7FB FDFE FEFE" /* ...;®ÁÛˆˆÙ˜˚˝˛˛˛ */ + $"FEFE FEFE FEFE FEFE FEFE FEFE FEFE FEFE" /* ˛˛˛˛˛˛˛˛˛˛˛˛˛˛˛˛ */ + $"FEFE FEFE FEFE FEFE FEFE FEFE FEFE FDFD" /* ˛˛˛˛˛˛˛˛˛˛˛˛˛˛˝˝ */ + $"FDFD FDFD FDFD FDFD F9F2 EBE9 EAEA EAEA" /* ˝˝˝˝˝˝˝˝˘ÚÎÈÍÍÍÍ */ + $"DCA1 3B00 0000 0000 0000 0000 0000 0000" /* ‹°;............. */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0020 8DE0 F4F6 F6F5 F6F9 FDFE FEFE FEFE" /* . ç‡Ùˆˆıˆ˘˝˛˛˛˛˛ */ + $"FEFE FEFE FEFE FEFE FEFE FEFE FEFE FEFE" /* ˛˛˛˛˛˛˛˛˛˛˛˛˛˛˛˛ */ + $"FEFE FEFE FEFE FEFD FDFD FDFD FDFD FDFD" /* ˛˛˛˛˛˛˛˝˝˝˝˝˝˝˝˝ */ + $"FDFD FDFD FDFD FDFD FDFD F7EE E9EA EAE9" /* ˝˝˝˝˝˝˝˝˝˝˜ÓÈÍÍÈ */ + $"EAE9 D589 2000 0000 0000 0000 0000 0000" /* ÍÈ’â ........... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0004" /* ................ */ + $"5CCB F4F6 F6F5 F5F7 FCFE FEFE FEFE FEFE" /* \ÀÙˆˆıı˜¸˛˛˛˛˛˛˛ */ + $"FEFE FEFE FEFE FEFE FEFE FEFE FEFE FEFE" /* ˛˛˛˛˛˛˛˛˛˛˛˛˛˛˛˛ */ + $"FEFD FDFD FDFD FDFD FDFD FDFD FDFD FDFD" /* ˛˝˝˝˝˝˝˝˝˝˝˝˝˝˝˝ */ + $"FDFD FDFD FDFD FDFD FDFD FDFA F3EA EAE9" /* ˝˝˝˝˝˝˝˝˝˝˝˙ÛÍÍÈ */ + $"E9E9 E9E6 C35B 0500 0000 0000 0000 0000" /* ÈÈÈÊ√[.......... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 239F" /* ..............#ü */ + $"EBF5 F6F5 F5F5 F9FE FEFE FEFE FEFE FEFE" /* Îıˆııı˘˛˛˛˛˛˛˛˛˛ */ + $"FEFE FFFE FEFE FEFF FFFE FEFE FDFD FDFD" /* ˛˛ˇ˛˛˛˛ˇˇ˛˛˛˝˝˝˝ */ + $"FDFD FDFD FDFD FDFD FDFD FDFD FDFD FDFD" /* ˝˝˝˝˝˝˝˝˝˝˝˝˝˝˝˝ */ + $"FDFD FDFD FDFD FDFC FCFC FCFC FCF6 ECE9" /* ˝˝˝˝˝˝˝¸¸¸¸¸¸ˆÏÈ */ + $"E9E9 E9E9 E9DE 9923 0000 0000 0000 0000" /* ÈÈÈÈÈfiô#........ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0052 CBF5" /* .............RÀı */ + $"F6F6 F5F5 F6FA FEFE FEFE FEFE FEFE FEFF" /* ˆˆııˆ˙˛˛˛˛˛˛˛˛˛ˇ */ + $"FFFF FFFF FFFF FFFF FFFF FDFD FDFE FDFD" /* ˇˇˇˇˇˇˇˇˇˇ˝˝˝˛˝˝ */ + $"FDFD FDFD FDFD FDFD FDFD FDFD FDFD FDFD" /* ˝˝˝˝˝˝˝˝˝˝˝˝˝˝˝˝ */ + $"FDFD FDFD FCFC FCFC FCFC FCFC FCFD F8EF" /* ˝˝˝˝¸¸¸¸¸¸¸¸¸˝¯Ô */ + $"E9E9 E9E9 E8E9 E7C3 5100 0000 0000 0000" /* ÈÈÈÈËÈÁ√Q....... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 000B 81E6 F5F6" /* ............ÅÊıˆ */ + $"F5F5 F5F6 FBFE FEFE FEFE FEFE FEFE FFFF" /* ıııˆ˚˛˛˛˛˛˛˛˛˛ˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFE FEFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇ˛˛ˇˇˇ */ + $"FEFE FDFD FDFD FDFD FDFD FDFD FDFD FDFC" /* ˛˛˝˝˝˝˝˝˝˝˝˝˝˝˝¸ */ + $"FCFC FCFC FCFC FCFC FCFC FCFC FCFC FCFA" /* ¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸˙ */ + $"F0E9 E9E9 E8E8 E9E9 DC7E 0C00 0000 0000" /* ÈÈÈËËÈÈ‹~...... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 20A7 F1F6 F6F5" /* .......... ßÒˆˆı */ + $"F5F5 F6FB FDFD FDFD FDFD FDFE FFFF FFFF" /* ııˆ˚˝˝˝˝˝˝˝˛ˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FEFE FDFD FDFD FDFD FCFC FCFC" /* ˇˇˇˇ˛˛˝˝˝˝˝˝¸¸¸¸ */ + $"FCFC FCFC FCFC FCFC FCFC FCFC FCFB FBFB" /* ¸¸¸¸¸¸¸¸¸¸¸¸¸˚˚˚ */ + $"FAF1 E9E9 E9E8 E8E8 E8E4 A120 0000 0000" /* ˙ÒÈÈÈËËËˉ° .... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0034 C4F5 F5F5 F5F5" /* .........4ƒııııı */ + $"F5F7 FBFD FDFD FDFD FDFD FDFD FFFF FFFF" /* ı˜˚˝˝˝˝˝˝˝˝˝ˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFE FEFD FCFC FCFC FCFC" /* ˇˇˇˇˇˇˇ˛˛˝¸¸¸¸¸¸ */ + $"FCFC FCFC FCFC FCFC FCFC FBFB FBFB FBFB" /* ¸¸¸¸¸¸¸¸¸¸˚˚˚˚˚˚ */ + $"FBFA F1E8 E9E9 E8E8 E8E9 E8BB 3300 0000" /* ˚˙ÒËÈÈËËËÈ˪3... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 49D4 F6F5 F4F5 F5F5" /* ........I‘ˆıÙııı */ + $"F6FB FDFD FDFD FDFD FDFD FDFD FDFF FFFF" /* ˆ˚˝˝˝˝˝˝˝˝˝˝˝ˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FEFD FCFC FCFC" /* ˇˇˇˇˇˇˇˇˇˇ˛˝¸¸¸¸ */ + $"FCFC FCFC FCFC FCFB FBFB FBFB FBFB FBFB" /* ¸¸¸¸¸¸¸˚˚˚˚˚˚˚˚˚ */ + $"FBFB FBEF E8E9 E9E8 E8E7 E8E9 CB47 0000" /* ˚˚˚ÔËÈÈËËÁËÈÀG.. */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0055 E0F6 F5F4 F5F5 F5F5" /* .......U‡ˆıÙıııı */ + $"FAFD FDFD FDFD FDFD FDFD FDFE FEFE FFFF" /* ˙˝˝˝˝˝˝˝˝˝˝˛˛˛ˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFD FCFC" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇ˝¸¸ */ + $"FCFC FCFB FBFB FBFB FBFB FBFB FBFB FBFB" /* ¸¸¸˚˚˚˚˚˚˚˚˚˚˚˚˚ */ + $"FBFB FAF9 EEE8 E9E8 E8E7 E7E8 E9D5 5400" /* ˚˚˙˘ÓËÈËËÁÁËÈ’T. */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 5EE4 F7F5 F4F4 F5F5 F5F9" /* ......^‰˜ıÙÙııı˘ */ + $"FDFD FDFD FDFD FDFD FDFD FDFF FFFF FFFF" /* ˝˝˝˝˝˝˝˝˝˝˝ˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FEFD" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇ˛˝ */ + $"FCFC FCFB FBFB FBFB FBFB FBFB FBFB FBFA" /* ¸¸¸˚˚˚˚˚˚˚˚˚˚˚˚˙ */ + $"FAFA FAFA F7EC E9E9 E8E8 E7E7 E8E8 D85C" /* ˙˙˙˙˜ÏÈÈËËÁÁËËÿ\ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 005E E6F5 F4F4 F4F4 F5F5 F7FD" /* .....^ÊıÙÙÙÙıı˜˝ */ + $"FDFD FDFD FDFD FDFD FDFD FFFF FFFF FFFF" /* ˝˝˝˝˝˝˝˝˝˝ˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FDFB FBFB FBFB FBFB FBFB FBFB FBFA FAFA" /* ˝˚˚˚˚˚˚˚˚˚˚˚˚˙˙˙ */ + $"FAFA FAFA FBF5 E9E9 E9E8 E8E7 E7E8 E8DC" /* ˙˙˙˙˚ıÈÈÈËËÁÁËË‹ */ + $"5B00 0000 0000 0000 0000 0000 0000 0000" /* [............... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 56E5 F6F3 F4F4 F4F5 F5F6 FCFD" /* ....VˆÛÙÙÙııˆ¸˝ */ + $"FDFD FDFD FDFD FDFD FDFE FFFF FFFF FFFF" /* ˝˝˝˝˝˝˝˝˝˛ˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFD FBFB FBFB FBFB FBFB FBFA FAFA FAFA" /* ˇ˝˚˚˚˚˚˚˚˚˚˙˙˙˙˙ */ + $"FAFA FAFA FAF9 F0E8 E9E8 E8E7 E7E7 E8E8" /* ˙˙˙˙˙˘ËÈËËÁÁÁËË */ + $"DA54 0000 0000 0000 0000 0000 0000 0000" /* ⁄T.............. */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0048 E1F6 F3F4 F4F4 F4F5 F5F9 FCFD" /* ...H·ˆÛÙÙÙÙıı˘¸˝ */ + $"FDFD FDFD FDFD FDFD FDFF FFFF FFFF FFFF" /* ˝˝˝˝˝˝˝˝˝ˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FCFB FBFB FBFB FAFA FAFA FAFA FAFA" /* ˇˇ¸˚˚˚˚˚˙˙˙˙˙˙˙˙ */ + $"FAFA FAFA F9F9 F8ED E9E9 E8E8 E7E7 E7E8" /* ˙˙˙˙˘˘¯ÌÈÈËËÁÁÁË */ + $"E8D6 4600 0000 0000 0000 0000 0000 0000" /* Ë÷F............. */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 33D6 F7F3 F3F4 F4F4 F4F5 F7FC FCFC" /* ..3÷˜ÛÛÙÙÙÙı˜¸¸¸ */ + $"FCFC FCFD FDFD FDFD FEFF FFFF FFFF FFFF" /* ¸¸¸˝˝˝˝˝˛ˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFB FBFB FAFA FAFA FAFA FAFA FAFA" /* ˇˇˇ˚˚˚˙˙˙˙˙˙˙˙˙˙ */ + $"FAF9 F9F9 F9F9 F9F4 E9E9 E8E8 E8E7 E7E7" /* ˙˘˘˘˘˘˘ÙÈÈËËËÁÁÁ */ + $"E7E8 CD32 0000 0000 0000 0000 0000 0000" /* ÁËÕ2............ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"001F C5F6 F3F3 F3F4 F4F4 F4F5 FBFC FCFC" /* ..≈ˆÛÛÛÙÙÙÙı˚¸¸¸ */ + $"FCFC FDFD FDFD FDFD FEFF FFFF FFFF FFFF" /* ¸¸˝˝˝˝˝˝˛ˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFE FAFA FAFA FAFA FAFA FAFA FAF9" /* ˇˇˇ˛˙˙˙˙˙˙˙˙˙˙˙˘ */ + $"F9F9 F9F9 F9F9 F9F8 EEE8 E9E8 E8E7 E7E7" /* ˘˘˘˘˘˘˘¯ÓËÈËËÁÁÁ */ + $"E7E7 EABD 1F00 0000 0000 0000 0000 0000" /* ÁÁÍΩ............ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0BA9 F7F3 F3F3 F3F4 F4F4 F4F8 FCFC FCFC" /* .©˜ÛÛÛÛÙÙÙÙ¯¸¸¸¸ */ + $"FCFC FCFC FCFC FDFD FFFF FFFF FFFF FFFF" /* ¸¸¸¸¸¸˝˝ˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FCFA FAFA FAFA FAFA FAF9 F9F9" /* ˇˇˇˇ¸˙˙˙˙˙˙˙˙˘˘˘ */ + $"F9F9 F9F9 F9F9 F8F8 F4EA E9E9 E8E8 E7E7" /* ˘˘˘˘˘˘¯¯ÙÍÈÈËËÁÁ */ + $"E7E6 E7EB A20B 0000 0000 0000 0000 0000" /* ÁÊÁ΢........... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"81F4 F3F2 F3F3 F3F4 F4F4 F5FB FCFC FCFC" /* ÅÙÛÚÛÛÛÙÙÙı˚¸¸¸¸ */ + $"FCFC FCFC FCFC FDFE FFFF FFFF FFFF FFFF" /* ¸¸¸¸¸¸˝˛ˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FEFA FAFA FAFA FAF9 F9F9 F9F9" /* ˇˇˇˇ˛˙˙˙˙˙˙˘˘˘˘˘ */ + $"F9F9 F9F9 F8F8 F8F8 F8EE E8E9 E8E8 E7E7" /* ˘˘˘˘¯¯¯¯¯ÓËÈËËÁÁ */ + $"E7E7 E6E7 E87C 0100 0000 0000 0000 0000" /* ÁÁÊÁË|.......... */ + $"0000 0000 0000 0000 0000 0000 0000 0050" /* ...............P */ + $"EBF4 F2F2 F3F3 F3F4 F4F4 F7FC FCFC FCFC" /* ÎÙÚÚÛÛÛÙÙÙ˜¸¸¸¸¸ */ + $"FCFC FCFC FCFD FDFF FFFF FFFF FFFF FFFF" /* ¸¸¸¸¸˝˝ˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFB FAFA FAF9 F9F9 F9F9 F9F9" /* ˇˇˇˇˇ˚˙˙˙˘˘˘˘˘˘˘ */ + $"F9F9 F8F8 F8F8 F8F8 F8F3 E9E9 E9E8 E8E7" /* ˘˘¯¯¯¯¯¯¯ÛÈÈÈËËÁ */ + $"E7E7 E6E6 E9E0 4D00 0000 0000 0000 0000" /* ÁÁÊÊȇM......... */ + $"0000 0000 0000 0000 0000 0000 0000 24D8" /* ..............$ÿ */ + $"F5F2 F2F2 F3F3 F3F4 F4F4 FAFB FBFC FCFC" /* ıÚÚÚÛÛÛÙÙÙ˙˚˚¸¸¸ */ + $"FCFC FCFC FCFD FFFF FFFF FFFF FFFF FFFF" /* ¸¸¸¸¸˝ˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFC FAFA FAF9 F9F9 F9F9 F9F9" /* ˇˇˇˇˇ¸˙˙˙˘˘˘˘˘˘˘ */ + $"F9F9 F8F8 F8F8 F8F8 F7F7 EDE9 E9E8 E8E8" /* ˘˘¯¯¯¯¯¯˜˜ÌÈÈËËË */ + $"E7E7 E7E6 E6E9 CF23 0000 0000 0000 0000" /* ÁÁÁÊÊÈœ#........ */ + $"0000 0000 0000 0000 0000 0000 0005 AAF9" /* ..............™˘ */ + $"F1F2 F2F2 F3F3 F3F4 F4F5 FBFB FBFC FCFC" /* ÒÚÚÚÛÛÛÙÙı˚˚˚¸¸¸ */ + $"FCFC FCFC FCFE FFFF FFFF FFFF FFFF FFFF" /* ¸¸¸¸¸˛ˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFE FBF9 F9F9 F9F9 F9F9 F9F9" /* ˇˇˇˇˇ˛˚˘˘˘˘˘˘˘˘˘ */ + $"F8F8 F8F8 F8F8 F8F8 F7F8 F0E9 E9E9 E8E8" /* ¯¯¯¯¯¯¯¯˜¯ÈÈÈËË */ + $"E8E7 E7E7 E6E6 EDA3 0500 0000 0000 0000" /* ËÁÁÁÊÊÌ£........ */ + $"0000 0000 0000 0000 0000 0000 0060 F6F1" /* .............`ˆÒ */ + $"F1F2 F2F2 F3F3 F3F4 F4F7 FBFB FBFC FCFC" /* ÒÚÚÚÛÛÛÙÙ˜˚˚˚¸¸¸ */ + $"FCFC FCFC FDFF FFFF FFFF FFFF FFFF FFFF" /* ¸¸¸¸˝ˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FEFA F9F9 F9F9 F9F9 F8F8" /* ˇˇˇˇˇˇ˛˙˘˘˘˘˘˘¯¯ */ + $"F8F8 F8F8 F8F8 F7F7 F7F7 F5EA E9E9 E8E8" /* ¯¯¯¯¯¯˜˜˜˜ıÍÈÈËË */ + $"E8E7 E7E7 E6E6 E6EA 5D00 0000 0000 0000" /* ËÁÁÁÊÊÊÍ]....... */ + $"0000 0000 0000 0000 0000 0000 1FD8 F4F1" /* .............ÿÙÒ */ + $"F1F2 F2F2 F3F3 F3F4 F4F9 FBFB FBFB FBFB" /* ÒÚÚÚÛÛÛÙÙ˘˚˚˚˚˚˚ */ + $"FCFC FCFC FEFF FFFF FFFF FFFF FFFF FFFF" /* ¸¸¸¸˛ˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFE FBF9 F9F9 F9F9 F8F8" /* ˇˇˇˇˇˇˇ˛˚˘˘˘˘˘¯¯ */ + $"F8F8 F8F8 F7F7 F7F7 F7F7 F6EC E9E9 E9E8" /* ¯¯¯¯˜˜˜˜˜˜ˆÏÈÈÈË */ + $"E8E8 E7E7 E7E6 E6E9 D01F 0000 0000 0000" /* ËËÁÁÁÊÊÈ–....... */ + $"0000 0000 0000 0000 0000 0000 96F9 F0F1" /* ............ñ˘Ò */ + $"F1F2 F2F2 F3F3 F3F4 F5FA FBFB FBFB FBFB" /* ÒÚÚÚÛÛÛÙı˙˚˚˚˚˚˚ */ + $"FCFC FCFC FFFF FFFF FFFF FFFF FFFF FFFF" /* ¸¸¸¸ˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFD FBF9 F8F8 F8F8" /* ˇˇˇˇˇˇˇˇˇ˝˚˘¯¯¯¯ */ + $"F8F8 F7F8 F7F7 F7F7 F7F7 F7EF E9E9 E9E9" /* ¯¯˜¯˜˜˜˜˜˜˜ÔÈÈÈÈ */ + $"E8E8 E7E7 E7E6 E6E6 ED91 0000 0000 0000" /* ËËÁÁÁÊÊÊÌë...... */ + $"0000 0000 0000 0000 0000 003C ECF1 F0F1" /* ...........<ÏÒÒ */ + $"F1F2 F2F2 F3F3 F3F3 F6FA FBFB FBFB FBFB" /* ÒÚÚÚÛÛÛÛˆ˙˚˚˚˚˚˚ */ + $"FCFC FCFD FFFF FFFF FFFF FFFF FFFF FFFF" /* ¸¸¸˝ˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFE FCFA F8F8" /* ˇˇˇˇˇˇˇˇˇˇˇ˛¸˙¯¯ */ + $"F8F8 F7F7 F7F7 F7F7 F6F6 F6F1 EAE9 E9E9" /* ¯¯˜˜˜˜˜˜ˆˆˆÒÍÈÈÈ */ + $"E8E8 E8E7 E7E7 E6E6 E6E2 3C00 0000 0000" /* ËËËÁÁÁÊÊÊ‚<..... */ + $"0000 0000 0000 0000 0000 06B4 F7F0 F0F1" /* ...........¥˜Ò */ + $"F1F1 F2F2 F2F3 F3F3 F7FA FBFB FBFB FBFB" /* ÒÒÚÚÚÛÛÛ˜˙˚˚˚˚˚˚ */ + $"FBFB FBFE FFFF FFFF FFFF FFFF FFFF FFFF" /* ˚˚˚˛ˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FEFC" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇ˛¸ */ + $"F9F7 F7F7 F7F7 F7F7 F6F6 F6F4 EAEA E9E9" /* ˘˜˜˜˜˜˜˜ˆˆˆÙÍÍÈÈ */ + $"E9E8 E8E8 E7E7 E6E6 E6EB AD07 0000 0000" /* ÈËËËÁÁÊÊÊÎ≠..... */ + $"0000 0000 0000 0000 0000 50F2 F0F0 F0F1" /* ..........PÚÒ */ + $"F1F1 F2F2 F2F3 F3F3 F8FA FAFA FAFB FBFB" /* ÒÒÚÚÚÛÛÛ¯˙˙˙˙˚˚˚ */ + $"FBFB FBFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˚˚˚ˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFD FAF8 F7F7 F6F6 F6F6 F6F5 EBEA E9E9" /* ˇ˝˙¯˜˜ˆˆˆˆˆıÎÍÈÈ */ + $"E9E8 E8E8 E7E7 E7E6 E6E6 E94E 0000 0000" /* ÈËËËÁÁÁÊÊÊÈN.... */ + $"0000 0000 0000 0000 0009 BCF5 F0F0 F0F1" /* .........∆ºıÒ */ + $"F1F1 F2F2 F2F3 F3F3 F8FA FAFA FAFB FBFB" /* ÒÒÚÚÚÛÛÛ¯˙˙˙˙˚˚˚ */ + $"FBFB FCFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˚˚¸ˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFE FBF8 F6F6 F6F6 F6F6 ECEA EAE9" /* ˇˇˇ˛˚¯ˆˆˆˆˆˆÏÍÍÈ */ + $"E9E9 E8E8 E7E7 E7E6 E6E6 EBB6 0900 0000" /* ÈÈËËÁÁÁÊÊÊÎ∂∆... */ + $"0000 0000 0000 0000 0052 F4F0 EFF0 F0F1" /* .........RÙÔÒ */ + $"F1F1 F2F2 F2F3 F3F3 F9FA FAFA FAFA FBFB" /* ÒÒÚÚÚÛÛÛ˘˙˙˙˙˙˚˚ */ + $"FBFB FDFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˚˚˝ˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFE FAF6 F6F6 F5F5 EDEA EAE9" /* ˇˇˇˇˇ˛˙ˆˆˆııÌÍÍÈ */ + $"E9E9 E8E8 E8E7 E7E7 E6E6 E6EA 5100 0000" /* ÈÈËËËÁÁÁÊÊÊÍQ... */ + $"0000 0000 0000 0000 05B6 F5EF EFF0 F0F0" /* .........∂ıÔÔ */ + $"F1F1 F2F2 F2F3 F3F3 F8F9 F9FA FAFA FAFA" /* ÒÒÚÚÚÛÛÛ¯˘˘˙˙˙˙˙ */ + $"FAFB FEFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˙˚˛ˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFD F7F5 F5F5 EEEA EAEA" /* ˇˇˇˇˇˇˇ˝˜ıııÓÍÍÍ */ + $"E9E9 E9E8 E8E7 E7E7 E6E6 E6EB B005 0000" /* ÈÈÈËËÁÁÁÊÊÊÎ∞... */ + $"0000 0000 0000 0000 40EE F0EF EFF0 F0F0" /* ........@ÓÔÔ */ + $"F1F1 F1F2 F2F2 F3F3 F8F9 F9FA FAFA FAFA" /* ÒÒÒÚÚÚÛÛ¯˘˘˙˙˙˙˙ */ + $"FAFB FEFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˙˚˛ˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FEF6 F5F5 EEEA EAEA" /* ˇˇˇˇˇˇˇˇ˛ˆııÓÍÍÍ */ + $"E9E9 E9E8 E8E8 E7E7 E7E6 E6E6 E63E 0000" /* ÈÈÈËËËÁÁÁÊÊÊÊ>.. */ + $"0000 0000 0000 0000 9FF6 EEEF EFF0 F0F0" /* ........üˆÓÔÔ */ + $"F1F1 F1F2 F2F2 F3F3 F8F9 F9FA FAFA FAFA" /* ÒÒÒÚÚÚÛÛ¯˘˘˙˙˙˙˙ */ + $"FAFC FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˙¸ˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFD F5F5 EEEB EAEA" /* ˇˇˇˇˇˇˇˇˇ˝ııÓÎÍÍ */ + $"EAE9 E9E9 E8E8 E7E7 E7E6 E6E6 ED9A 0000" /* ÍÈÈÈËËÁÁÁÊÊÊÌö.. */ + $"0000 0000 0000 0021 E1F0 EEEF EFEF F0F0" /* .......!·ÓÔÔÔ */ + $"F0F1 F1F2 F2F2 F3F3 F8F9 F9F9 FAFA FAFA" /* ÒÒÚÚÚÛÛ¯˘˘˘˙˙˙˙ */ + $"FAFD FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˙˝ˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF F9F5 EEEB EBEA" /* ˇˇˇˇˇˇˇˇˇˇ˘ıÓÎÎÍ */ + $"EAE9 E9E9 E8E8 E8E7 E7E6 E6E6 E7DA 2100" /* ÍÈÈÈËËËÁÁÊÊÊÁ⁄!. */ + $"0000 0000 0000 0071 F6EF EEEF EFEF F0F0" /* .......qˆÔÓÔÔÔ */ + $"F0F1 F1F1 F2F2 F3F3 F7F9 F9F9 F9F9 F9FA" /* ÒÒÒÚÚÛÛ˜˘˘˘˘˘˘˙ */ + $"FAFD FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˙˝ˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFE FDFD FCFB FBFB FBFC FDFE FFFF" /* ˇˇˇ˛˝˝¸˚˚˚˚¸˝˛ˇˇ */ + $"FFFF FFFF FFFF FFFC FBFC FDF4 EDEB EBEA" /* ˇˇˇˇˇˇˇ¸˚¸˝ÙÌÎÎÍ */ + $"EAEA E9E9 E9E8 E8E7 E7E7 E6E6 E6EE 6E00" /* ÍÍÈÈÈËËÁÁÁÊÊÊÓn. */ + $"0000 0000 0000 07C0 F2EE EEEE EFEF F0F0" /* .......¿ÚÓÓÓÔÔ */ + $"F0F1 F1F1 F2F2 F2F3 F7F9 F9F9 F9F9 F9FA" /* ÒÒÒÚÚÚÛ˜˘˘˘˘˘˘˙ */ + $"FAFE FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˙˛ˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FEFC FAF9 F9F9 F9F8 F8F8 F7F8 F7F7 F8F8" /* ˛¸˙˘˘˘˘¯¯¯˜¯˜˜¯¯ */ + $"F9F9 FAFB FBF9 F7F5 F5F5 F9F5 EDEB EBEB" /* ˘˘˙˚˚˘˜ııı˘ıÌÎÎÎ */ + $"EAEA E9E9 E9E8 E8E8 E7E7 E7E6 E6EA BB07" /* ÍÍÈÈÈËËËÁÁÁÊÊͪ. */ + $"0000 0000 0000 34EC EFEE EEEE EFEF F0F0" /* ......4ÏÔÓÓÓÔÔ */ + $"F0F1 F1F1 F2F2 F2F3 F6F9 F9F9 F9F9 F9FA" /* ÒÒÒÚÚÚÛˆ˘˘˘˘˘˘˙ */ + $"FBFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˚ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FEFC" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇ˛¸ */ + $"FAFA F9F9 F9F9 F9F8 F8F8 F7F7 F7F7 F7F7" /* ˙˙˘˘˘˘˘¯¯¯˜˜˜˜˜˜ */ + $"F6F6 F6F5 F5F5 F5F5 F4F4 F4F3 EDEB EBEB" /* ˆˆˆıııııÙÙÙÛÌÎÎÎ */ + $"EAEA EAE9 E9E8 E8E8 E7E7 E7E6 E6E6 E333" /* ÍÍÍÈÈËËËÁÁÁÊÊÊ„3 */ + $"0000 0000 0000 7CF6 EDED EEEE EFEF EFF0" /* ......|ˆÌÌÓÓÔÔÔ */ + $"F0F0 F1F1 F2F2 F2F2 F5F8 F8F8 F8F9 F9F9" /* ÒÒÚÚÚÚı¯¯¯¯˘˘˘ */ + $"FCFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ¸ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FEFC FAFA" /* ˇˇˇˇˇˇˇˇˇˇˇˇ˛¸˙˙ */ + $"FAFA F9F9 F9F8 F8F8 F8F8 F8F7 F7F7 F7F7" /* ˙˙˘˘˘¯¯¯¯¯¯˜˜˜˜˜ */ + $"F6F6 F6F5 F5F5 F5F5 F4F4 F4F2 ECEC EBEB" /* ˆˆˆıııııÙÙÙÚÏÏÎÎ */ + $"EAEA EAE9 E9E9 E8E8 E8E7 E7E6 E6E6 EF7B" /* ÍÍÍÈÈÈËËËÁÁÊÊÊÔ{ */ + $"0000 0000 0006 BFF2 EDED EEEE EEEF EFF0" /* ......øÚÌÌÓÓÓÔÔ */ + $"F0F0 F1F1 F1F2 F2F2 F4F8 F8F8 F8F9 F9F9" /* ÒÒÒÚÚÚÙ¯¯¯¯˘˘˘ */ + $"FDFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˝ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FEFC FBFA FAFA" /* ˇˇˇˇˇˇˇˇˇˇ˛¸˚˙˙˙ */ + $"F9F9 F9F9 F9F9 F8F8 F8F8 F8F7 F7F7 F6F6" /* ˘˘˘˘˘˘¯¯¯¯¯˜˜˜ˆˆ */ + $"F6F6 F6F5 F5F5 F5F5 F5F4 F4F1 ECEC EBEB" /* ˆˆˆııııııÙÙÒÏÏÎÎ */ + $"EBEA EAEA E9E9 E8E8 E8E7 E7E7 E6E6 EABA" /* ÎÍÍÍÈÈËËËÁÁÁÊÊÍ∫ */ + $"0600 0000 0029 E6EE EDED EEEE EEEF EFF0" /* .....)ÊÓÌÌÓÓÓÔÔ */ + $"F0F0 F1F1 F1F2 F2F2 F3F7 F7F8 F8F9 F9F9" /* ÒÒÒÚÚÚÛ˜˜¯¯˘˘˘ */ + $"FEFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˛ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FEFC FBFB FBFB FAFA" /* ˇˇˇˇˇˇˇˇ˛¸˚˚˚˚˙˙ */ + $"FAF9 F9F9 F9F9 F8F8 F8F7 F7F7 F7F7 F6F6" /* ˙˘˘˘˘˘¯¯¯˜˜˜˜˜ˆˆ */ + $"F6F6 F6F6 F5F5 F4F4 F4F4 F4F0 ECEC ECEB" /* ˆˆˆˆııÙÙÙÙÙÏÏÏÎ */ + $"EBEA EAEA E9E9 E9E8 E8E7 E7E7 E6E6 E7DF" /* ÎÍÍÍÈÈÈËËÁÁÁÊÊÁfl */ + $"2800 0000 0063 F5EC EDED EDEE EEEE EFEF" /* (....cıÏÌÌÌÓÓÓÔÔ */ + $"F0F0 F0F1 F1F1 F2F2 F3F6 F7F8 F8F8 F9F9" /* ÒÒÒÚÚÛˆ˜¯¯¯˘˘ */ + $"FEFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˛ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FDFC FCFB FBFB FAFA FAFA" /* ˇˇˇˇˇˇ˝¸¸˚˚˚˙˙˙˙ */ + $"FAF9 F9F9 F9F9 F9F8 F8F7 F7F7 F7F7 F7F6" /* ˙˘˘˘˘˘˘¯¯˜˜˜˜˜˜ˆ */ + $"F6F6 F5F5 F5F5 F5F4 F4F4 F3EF ECEC ECEB" /* ˆˆıııııÙÙÙÛÔÏÏÏÎ */ + $"EBEB EAEA E9E9 E9E8 E8E8 E7E7 E7E6 E6EF" /* ÎÎÍÍÈÈÈËËËÁÁÁÊÊÔ */ + $"6000 0000 009E F4EC EDED EDEE EEEE EFEF" /* `....ûÙÏÌÌÌÓÓÓÔÔ */ + $"F0F0 F0F1 F1F1 F2F2 F2F5 F7F8 F8F8 F8F9" /* ÒÒÒÚÚÚı˜¯¯¯¯˘ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FDFC FCFC FCFB FBFB FAFA FAFA" /* ˇˇˇˇ˝¸¸¸¸˚˚˚˙˙˙˙ */ + $"FAFA F9F9 F8F8 F8F8 F8F8 F7F7 F6F6 F6F6" /* ˙˙˘˘¯¯¯¯¯¯˜˜ˆˆˆˆ */ + $"F6F6 F5F5 F5F4 F4F4 F4F4 F2ED EDEC ECEB" /* ˆˆıııÙÙÙÙÙÚÌÌÏÏÎ */ + $"EBEB EAEA EAE9 E9E9 E8E8 E7E7 E7E6 E6EE" /* ÎÎÍÍÍÈÈÈËËÁÁÁÊÊÓ */ + $"9B00 0000 0BCB F0EC ECED EDEE EEEE EFEF" /* õ....ÀÏÏÌÌÓÓÓÔÔ */ + $"EFF0 F0F0 F1F1 F2F2 F2F4 F7F7 F8F8 F8F9" /* ÔÒÒÚÚÚÙ˜˜¯¯¯˘ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FEFD FCFC FCFC FCFC FBFB FBFA FAFA" /* ˇˇ˛˝¸¸¸¸¸¸˚˚˚˙˙˙ */ + $"FAFA F9F9 F9F8 F8F8 F8F8 F7F7 F7F6 F6F6" /* ˙˙˘˘˘¯¯¯¯¯˜˜˜ˆˆˆ */ + $"F6F6 F5F5 F5F4 F4F4 F4F4 F0ED EDEC ECEC" /* ˆˆıııÙÙÙÙÙÌÌÏÏÏ */ + $"EBEB EAEA EAE9 E9E9 E8E8 E8E7 E7E6 E6EA" /* ÎÎÍÍÍÈÈÈËËËÁÁÊÊÍ */ + $"C50B 0000 2BE6 EDEC ECED EDED EEEE EEEF" /* ≈...+ÊÌÏÏÌÌÌÓÓÓÔ */ + $"EFF0 F0F0 F1F1 F1F2 F2F2 F6F7 F7F7 F7FA" /* ÔÒÒÒÚÚÚˆ˜˜˜˜˙ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFE FDFD FDFC FCFC FCFC FBFB FBFA FAFA" /* ˇ˛˝˝˝¸¸¸¸¸˚˚˚˙˙˙ */ + $"F9F9 F9F9 F9F8 F8F8 F7F7 F7F7 F7F6 F6F6" /* ˘˘˘˘˘¯¯¯˜˜˜˜˜ˆˆˆ */ + $"F5F5 F5F5 F5F4 F4F4 F3F3 F0ED EDED ECEC" /* ıııııÙÙÙÛÛÌÌÌÏÏ */ + $"EBEB EBEA EAEA E9E9 E8E8 E8E7 E7E7 E6E7" /* ÎÎÎÍÍÍÈÈËËËÁÁÁÊÁ */ + $"E129 0000 55F3 EBEC ECEC EDED EEEE EEEF" /* ·)..UÛÎÏÏÏÌÌÓÓÓÔ */ + $"EFF0 F0F0 F1F1 F1F2 F2F2 F4F7 F7F7 F7FA" /* ÔÒÒÒÚÚÚÙ˜˜˜˜˙ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FEFE FDFD FDFC FCFC FBFB FBFB FBFA FAFA" /* ˛˛˝˝˝¸¸¸˚˚˚˚˚˙˙˙ */ + $"F9F9 F9F9 F9F8 F8F8 F7F7 F7F7 F7F7 F6F6" /* ˘˘˘˘˘¯¯¯˜˜˜˜˜˜ˆˆ */ + $"F5F5 F5F4 F4F4 F4F4 F4F1 EEED EDED ECEC" /* ıııÙÙÙÙÙÙÒÓÌÌÌÏÏ */ + $"ECEB EBEA EAEA E9E9 E9E8 E8E7 E7E7 E6E6" /* ÏÎÎÍÍÍÈÈÈËËÁÁÁÊÊ */ + $"EE52 0000 81F5 EBEC ECEC EDED EDEE EEEF" /* ÓR..ÅıÎÏÏÏÌÌÌÓÓÔ */ + $"EFEF F0F0 F0F1 F1F1 F2F2 F3F6 F6F7 F7FA" /* ÔÔÒÒÒÚÚÛˆˆ˜˜˙ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ˛ */ + $"FEFE FEFD FDFC FCFC FBFB FBFB FBFB FAFA" /* ˛˛˛˝˝¸¸¸˚˚˚˚˚˚˙˙ */ + $"F9F9 F9F9 F9F9 F8F8 F7F7 F7F6 F6F6 F6F6" /* ˘˘˘˘˘˘¯¯˜˜˜ˆˆˆˆˆ */ + $"F6F5 F5F4 F4F4 F4F4 F4EF EEED EDED ECEC" /* ˆııÙÙÙÙÙÙÔÓÌÌÌÏÏ */ + $"ECEB EBEB EAEA E9E9 E9E8 E8E8 E7E7 E7E6" /* ÏÎÎÎÍÍÈÈÈËËËÁÁÁÊ */ + $"F07E 0000 A7F3 EBEB ECEC EDED EDEE EEEE" /* ~..ßÛÎÎÏÏÌÌÌÓÓÓ */ + $"EFEF EFF0 F0F1 F1F1 F2F2 F2F4 F6F7 F7FA" /* ÔÔÔÒÒÒÚÚÚÙˆ˜˜˙ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FEFE" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇ˛˛ */ + $"FEFE FEFD FDFD FCFC FCFB FBFB FBFB FAFA" /* ˛˛˛˝˝˝¸¸¸˚˚˚˚˚˙˙ */ + $"FAF9 F9F8 F8F8 F8F8 F8F7 F7F7 F6F6 F5F5" /* ˙˘˘¯¯¯¯¯¯˜˜˜ˆˆıı */ + $"F5F5 F5F5 F4F4 F3F3 F2EE EEEE EDED EDEC" /* ııııÙÙÛÛÚÓÓÓÌÌÌÏ */ + $"ECEB EBEB EAEA EAE9 E9E8 E8E8 E7E7 E7E6" /* ÏÎÎÎÍÍÍÈÈËËËÁÁÁÊ */ + $"EDA4 0007 C6EF EBEB ECEC ECED EDED EEEE" /* ̧..∆ÔÎÎÏÏÏÌÌÌÓÓ */ + $"EFEF EFF0 F0F0 F1F1 F2F2 F2F3 F5F6 F7FA" /* ÔÔÔÒÒÚÚÚÛıˆ˜˙ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFE FEFE" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇ˛˛˛ */ + $"FEFE FEFD FDFD FCFC FCFB FBFB FBFB FAFA" /* ˛˛˛˝˝˝¸¸¸˚˚˚˚˚˙˙ */ + $"FAF9 F9F9 F8F8 F8F8 F8F7 F7F7 F6F6 F6F5" /* ˙˘˘˘¯¯¯¯¯˜˜˜ˆˆˆı */ + $"F5F5 F5F5 F4F4 F4F3 F0EE EEEE EDED EDEC" /* ııııÙÙÙÛÓÓÓÌÌÌÏ */ + $"ECEC EBEB EAEA EAE9 E9E9 E8E8 E7E7 E7E6" /* ÏÏÎÎÍÍÍÈÈÈËËÁÁÁÊ */ + $"EBC3 0716 D9ED EBEB EBEC ECED EDED EEEE" /* Î√..ŸÌÎÎÎÏÏÌÌÌÓÓ */ + $"EEEF EFEF F0F0 F1F1 F1F2 F2F2 F4F6 F6F9" /* ÓÔÔÔÒÒÒÚÚÚÙˆˆ˘ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FEFD FDFD" /* ˇˇˇˇˇˇˇˇˇˇˇˇ˛˝˝˝ */ + $"FDFD FDFD FDFD FCFC FCFB FBFB FAFA FAFA" /* ˝˝˝˝˝˝¸¸¸˚˚˚˙˙˙˙ */ + $"FAF9 F9F9 F8F8 F8F7 F7F7 F7F7 F6F6 F6F5" /* ˙˘˘˘¯¯¯˜˜˜˜˜ˆˆˆı */ + $"F5F5 F4F4 F4F4 F4F2 EFEF EEEE EEED EDEC" /* ııÙÙÙÙÙÚÔÔÓÓÓÌÌÏ */ + $"ECEC EBEB EBEA EAE9 E9E9 E8E8 E8E7 E7E7" /* ÏÏÎÎÎÍÍÈÈÈËËËÁÁÁ */ + $"E8D6 162B E7EB EBEB EBEC ECEC EDED EDEE" /* Ë÷.+ÁÎÎÎÎÏÏÏÌÌÌÓ */ + $"EEEF EFEF F0F0 F0F1 F1F2 F2F2 F3F5 F6F8" /* ÓÔÔÔÒÒÚÚÚÛıˆ¯ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FDFD FDFD" /* ˇˇˇˇˇˇˇˇˇˇˇˇ˝˝˝˝ */ + $"FDFD FDFD FDFD FCFC FCFB FBFB FAFA FAFA" /* ˝˝˝˝˝˝¸¸¸˚˚˚˙˙˙˙ */ + $"FAF9 F9F9 F8F8 F8F7 F7F7 F7F7 F6F6 F6F5" /* ˙˘˘˘¯¯¯˜˜˜˜˜ˆˆˆı */ + $"F5F5 F4F4 F4F3 F3F0 EFEF EEEE EEED EDED" /* ııÙÙÙÛÛÔÔÓÓÓÌÌÌ */ + $"ECEC EBEB EBEA EAEA E9E9 E9E8 E8E7 E7E7" /* ÏÏÎÎÎÍÍÍÈÈÈËËÁÁÁ */ + $"E7E3 2A42 EEEA EAEB EBEB ECEC EDED EDEE" /* Á„*BÓÍÍÎÎÎÏÏÌÌÌÓ */ + $"EEEE EFEF F0F0 F0F1 F1F1 F2F2 F2F3 F5F7" /* ÓÓÔÔÒÒÒÚÚÚÛı˜ */ + $"FEFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˛ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FDFD FDFD" /* ˇˇˇˇˇˇˇˇˇˇˇˇ˝˝˝˝ */ + $"FDFD FDFD FDFD FCFC FCFB FBFB FAFA FAF9" /* ˝˝˝˝˝˝¸¸¸˚˚˚˙˙˙˘ */ + $"F9F9 F9F9 F8F8 F8F7 F7F7 F6F6 F6F6 F6F5" /* ˘˘˘˘¯¯¯˜˜˜ˆˆˆˆˆı */ + $"F5F5 F4F4 F4F3 F1F0 EFEF EEEE EEED EDED" /* ııÙÙÙÛÒÔÔÓÓÓÌÌÌ */ + $"ECEC ECEB EBEA EAEA E9E9 E9E8 E8E8 E7E7" /* ÏÏÏÎÎÍÍÍÈÈÈËËËÁÁ */ + $"E7EA 4153 F2EA EAEB EBEB ECEC ECED EDEE" /* ÁÍASÚÍÍÎÎÎÏÏÏÌÌÓ */ + $"EEEE EFEF EFF0 F0F0 F1F1 F1F2 F2F3 F4F5" /* ÓÓÔÔÔÒÒÒÚÚÛÙı */ + $"FDFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˝ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFE FDFD FDFD" /* ˇˇˇˇˇˇˇˇˇˇˇ˛˝˝˝˝ */ + $"FDFD FDFD FDFD FCFC FCFB FBFB FAFA FAF9" /* ˝˝˝˝˝˝¸¸¸˚˚˚˙˙˙˘ */ + $"F9F9 F9F9 F9F8 F8F7 F7F7 F6F6 F6F5 F5F5" /* ˘˘˘˘˘¯¯˜˜˜ˆˆˆııı */ + $"F5F5 F5F4 F4F2 F0F0 EFEF EFEE EEEE EDED" /* ıııÙÙÚÔÔÔÓÓÓÌÌ */ + $"ECEC ECEB EBEB EAEA E9E9 E9E8 E8E8 E7E7" /* ÏÏÏÎÎÎÍÍÈÈÈËËËÁÁ */ + $"E7EE 5274 F1EA EAEA EBEB EBEC ECED EDED" /* ÁÓRtÒÍÍÍÎÎÎÏÏÌÌÌ */ + $"EEEE EEEF EFF0 F0F0 F1F1 F1F2 F2F2 F3F4" /* ÓÓÓÔÔÒÒÒÚÚÚÛÙ */ + $"FCFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ¸ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFE FDFD FDFD" /* ˇˇˇˇˇˇˇˇˇˇˇ˛˝˝˝˝ */ + $"FDFD FDFD FDFC FCFC FCFB FBFB FAFA FAF9" /* ˝˝˝˝˝¸¸¸¸˚˚˚˙˙˙˘ */ + $"F9F9 F8F8 F8F8 F8F8 F7F7 F7F6 F6F5 F5F5" /* ˘˘¯¯¯¯¯¯˜˜˜ˆˆııı */ + $"F4F4 F4F4 F3F1 F0F0 EFEF EFEE EEEE EDED" /* ÙÙÙÙÛÒÔÔÔÓÓÓÌÌ */ + $"EDEC ECEB EBEB EAEA EAE9 E9E9 E8E8 E7E7" /* ÌÏÏÎÎÎÍÍÍÈÈÈËËÁÁ */ + $"E7EE 73A7 EEE9 EAEA EBEB EBEC ECEC EDED" /* ÁÓsßÓÈÍÍÎÎÎÏÏÏÌÌ */ + $"EDEE EEEF EFEF F0F0 F0F1 F1F1 F2F2 F3F3" /* ÌÓÓÔÔÔÒÒÒÚÚÛÛ */ + $"FBFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˚ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFE FDFD FDFD" /* ˇˇˇˇˇˇˇˇˇˇˇ˛˝˝˝˝ */ + $"FDFD FDFD FDFC FCFC FCFB FBFB FAFA FAF9" /* ˝˝˝˝˝¸¸¸¸˚˚˚˙˙˙˘ */ + $"F9F9 F8F8 F8F8 F8F8 F7F7 F7F6 F6F6 F5F5" /* ˘˘¯¯¯¯¯¯˜˜˜ˆˆˆıı */ + $"F4F4 F4F3 F1F1 F0F0 F0EF EFEE EEEE EDED" /* ÙÙÙÛÒÒÔÔÓÓÓÌÌ */ + $"EDEC ECEC EBEB EAEA EAE9 E9E9 E8E8 E8E7" /* ÌÏÏÏÎÎÍÍÍÈÈÈËËËÁ */ + $"E7EB A5C2 ECE9 EAEA EAEB EBEC ECEC EDED" /* ÁΕ¬ÏÈÍÍÍÎÎÏÏÏÌÌ */ + $"EDEE EEEE EFEF F0F0 F0F1 F1F1 F2F2 F2F3" /* ÌÓÓÓÔÔÒÒÒÚÚÚÛ */ + $"FBFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˚ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFD FCFC FCFC" /* ˇˇˇˇˇˇˇˇˇˇˇ˝¸¸¸¸ */ + $"FCFC FCFC FCFC FCFC FCFB FBFB FAFA FAF9" /* ¸¸¸¸¸¸¸¸¸˚˚˚˙˙˙˘ */ + $"F9F9 F8F8 F8F7 F7F7 F7F7 F7F6 F6F6 F5F5" /* ˘˘¯¯¯˜˜˜˜˜˜ˆˆˆıı */ + $"F4F4 F4F2 F1F1 F0F0 F0EF EFEF EEEE EDED" /* ÙÙÙÚÒÒÔÔÔÓÓÌÌ */ + $"EDEC ECEC EBEB EBEA EAE9 E9E9 E8E8 E8E7" /* ÌÏÏÏÎÎÎÍÍÈÈÈËËËÁ */ + $"E7E9 BFD1 EBE9 E9EA EAEB EBEB ECEC ECED" /* ÁÈø—ÎÈÈÍÍÎÎÎÏÏÏÌ */ + $"EDED EEEE EFEF EFF0 F0F0 F1F1 F1F2 F2F2" /* ÌÌÓÓÔÔÔÒÒÒÚÚÚ */ + $"FBFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˚ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFC FCFC FCFC" /* ˇˇˇˇˇˇˇˇˇˇˇ¸¸¸¸¸ */ + $"FCFC FCFC FCFC FCFC FBFB FBFB FAFA FAF9" /* ¸¸¸¸¸¸¸¸˚˚˚˚˙˙˙˘ */ + $"F9F9 F8F8 F8F7 F7F7 F6F6 F6F6 F6F6 F5F5" /* ˘˘¯¯¯˜˜˜ˆˆˆˆˆˆıı */ + $"F5F4 F3F2 F1F1 F0F0 F0EF EFEF EEEE EEED" /* ıÙÛÚÒÒÔÔÔÓÓÓÌ */ + $"EDEC ECEC EBEB EBEA EAEA E9E9 E8E8 E8E7" /* ÌÏÏÏÎÎÎÍÍÍÈÈËËËÁ */ + $"E7E9 CEE1 E9E9 E9EA EAEA EBEB EBEC ECED" /* ÁÈŒ·ÈÈÈÍÍÍÎÎÎÏÏÌ */ + $"EDED EEEE EEEF EFEF F0F0 F0F1 F1F2 F2F2" /* ÌÌÓÓÓÔÔÔÒÒÚÚÚ */ + $"FAFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˙ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFC FCFC FCFC" /* ˇˇˇˇˇˇˇˇˇˇˇ¸¸¸¸¸ */ + $"FCFC FCFC FCFC FCFC FBFB FBFB FAFA FAF9" /* ¸¸¸¸¸¸¸¸˚˚˚˚˙˙˙˘ */ + $"F9F9 F8F8 F8F7 F7F7 F6F6 F6F5 F5F5 F5F5" /* ˘˘¯¯¯˜˜˜ˆˆˆııııı */ + $"F5F3 F2F2 F1F1 F1F0 F0EF EFEF EEEE EEED" /* ıÛÚÚÒÒÒÔÔÔÓÓÓÌ */ + $"EDED ECEC EBEB EBEA EAEA E9E9 E9E8 E8E7" /* ÌÌÏÏÎÎÎÍÍÍÈÈÈËËÁ */ + $"E7E7 DFE1 E9E9 E9E9 EAEA EBEB EBEC ECEC" /* ÁÁfl·ÈÈÈÈÍÍÎÎÎÏÏÏ */ + $"EDED EDEE EEEF EFEF F0F0 F0F1 F1F1 F2F1" /* ÌÌÌÓÓÔÔÔÒÒÒÚÒ */ + $"F9FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˘ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFC FBFB FBFB" /* ˇˇˇˇˇˇˇˇˇˇˇ¸˚˚˚˚ */ + $"FBFB FBFB FBFB FBFB FBFB FBFA FAFA FAF9" /* ˚˚˚˚˚˚˚˚˚˚˚˙˙˙˙˘ */ + $"F9F9 F8F8 F8F7 F7F7 F6F6 F6F5 F5F5 F4F4" /* ˘˘¯¯¯˜˜˜ˆˆˆıııÙÙ */ + $"F3F2 F2F2 F1F1 F1F0 F0F0 EFEF EEEE EEED" /* ÛÚÚÚÒÒÒÔÔÓÓÓÌ */ + $"EDED ECEC ECEB EBEA EAEA E9E9 E9E8 E8E8" /* ÌÌÏÏÏÎÎÍÍÍÈÈÈËËË */ + $"E7E7 E0D0 EAE9 E9E9 EAEA EAEB EBEB ECEC" /* ÁÁ‡–ÍÈÈÈÍÍÍÎÎÎÏÏ */ + $"EDED EDEE EEEE EFEF EFF0 F0F0 F1F1 F2F1" /* ÌÌÌÓÓÓÔÔÔÒÒÚÒ */ + $"F9FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˘ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFB FAFB FBFB" /* ˇˇˇˇˇˇˇˇˇˇˇ˚˙˚˚˚ */ + $"FBFB FBFB FBFB FAFA FAFA FAFA FAFA FAF9" /* ˚˚˚˚˚˚˙˙˙˙˙˙˙˙˙˘ */ + $"F9F9 F8F8 F8F7 F7F7 F6F6 F6F5 F5F5 F4F3" /* ˘˘¯¯¯˜˜˜ˆˆˆıııÙÛ */ + $"F3F2 F2F2 F1F1 F1F0 F0F0 EFEF EFEE EEED" /* ÛÚÚÚÒÒÒÔÔÔÓÓÌ */ + $"EDED ECEC ECEB EBEB EAEA E9E9 E9E8 E8E8" /* ÌÌÏÏÏÎÎÎÍÍÈÈÈËËË */ + $"E7E8 D2C1 EBE8 E9E9 E9EA EAEB EBEB ECEC" /* ÁË“¡ÎËÈÈÈÍÍÎÎÎÏÏ */ + $"ECED EDED EEEE EFEF EFF0 F0F0 F1F1 F1F1" /* ÏÌÌÌÓÓÔÔÔÒÒÒÒ */ + $"F7FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ˜ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFB FAFA FAFB" /* ˇˇˇˇˇˇˇˇˇˇˇ˚˙˙˙˚ */ + $"FBFB FBFB FAFA FAFA FAFA FAF9 F9F9 F9F9" /* ˚˚˚˚˙˙˙˙˙˙˙˘˘˘˘˘ */ + $"F9F9 F8F8 F8F7 F7F7 F6F6 F6F6 F5F5 F4F3" /* ˘˘¯¯¯˜˜˜ˆˆˆˆııÙÛ */ + $"F3F2 F2F2 F1F1 F1F0 F0F0 EFEF EFEE EEEE" /* ÛÚÚÚÒÒÒÔÔÔÓÓÓ */ + $"EDED ECEC ECEB EBEB EAEA EAE9 E9E9 E8E8" /* ÌÌÏÏÏÎÎÎÍÍÍÈÈÈËË */ + $"E7EA C2A6 EDE8 E9E9 E9EA EAEA EBEB EBEC" /* Áͬ¶ÌËÈÈÈÍÍÍÎÎÎÏ */ + $"ECED EDED EEEE EEEF EFEF F0F0 F0F1 F1F1" /* ÏÌÌÌÓÓÓÔÔÔÒÒÒ */ + $"F4FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* Ùˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFC FAFA FAFA" /* ˇˇˇˇˇˇˇˇˇˇˇ¸˙˙˙˙ */ + $"FAFA FAFA FAFA FAFA FAFA F9F9 F9F9 F8F8" /* ˙˙˙˙˙˙˙˙˙˙˘˘˘˘¯¯ */ + $"F8F8 F8F8 F8F7 F7F7 F6F6 F6F6 F4F4 F4F3" /* ¯¯¯¯¯˜˜˜ˆˆˆˆÙÙÙÛ */ + $"F3F3 F2F2 F1F1 F1F0 F0F0 EFEF EFEE EEEE" /* ÛÛÚÚÒÒÒÔÔÔÓÓÓ */ + $"EDED ECEC ECEB EBEB EAEA EAE9 E9E9 E8E8" /* ÌÌÏÏÏÎÎÎÍÍÍÈÈÈËË */ + $"E7EC A073 F0E8 E8E9 E9E9 EAEA EAEB EBEC" /* ÁφsËËÈÈÈÍÍÍÎÎÏ */ + $"ECEC EDED EDEE EEEE EFEF EFF0 F0F1 F1F1" /* ÏÏÌÌÌÓÓÓÔÔÔÒÒÒ */ + $"F2FC FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* Ú¸ˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFC FAFA FAFA" /* ˇˇˇˇˇˇˇˇˇˇˇ¸˙˙˙˙ */ + $"FAFA FAFA FAFA FAFA FAF9 F9F9 F9F9 F8F8" /* ˙˙˙˙˙˙˙˙˙˘˘˘˘˘¯¯ */ + $"F8F8 F7F7 F7F6 F6F6 F6F6 F6F5 F4F4 F4F3" /* ¯¯˜˜˜ˆˆˆˆˆˆıÙÙÙÛ */ + $"F3F3 F2F2 F1F1 F1F0 F0F0 EFEF EFEE EEEE" /* ÛÛÚÚÒÒÒÔÔÔÓÓÓ */ + $"EDED EDEC ECEC EBEB EAEA EAE9 E9E9 E8E8" /* ÌÌÌÏÏÏÎÎÍÍÍÈÈÈËË */ + $"E8EF 7752 EFE8 E8E9 E9E9 EAEA EAEB EBEB" /* ËÔwRÔËËÈÈÈÍÍÍÎÎÎ */ + $"ECEC ECED EDED EEEE EFEF EFF0 F0F0 F1F1" /* ÏÏÏÌÌÌÓÓÔÔÔÒÒ */ + $"F1F6 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* Òˆˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFD F9F9 FAFA" /* ˇˇˇˇˇˇˇˇˇˇˇ˝˘˘˙˙ */ + $"FAFA FAFA FAFA FAFA F9F9 F9F9 F9F9 F8F8" /* ˙˙˙˙˙˙˙˙˘˘˘˘˘˘¯¯ */ + $"F8F8 F7F7 F7F6 F6F6 F5F5 F5F5 F4F4 F4F3" /* ¯¯˜˜˜ˆˆˆııııÙÙÙÛ */ + $"F3F3 F2F2 F2F1 F1F1 F0F0 EFEF EFEE EEEE" /* ÛÛÚÚÚÒÒÒÔÔÔÓÓÓ */ + $"EDED EDEC ECEC EBEB EBEA EAE9 E9E9 E8E8" /* ÌÌÌÏÏÏÎÎÎÍÍÈÈÈËË */ + $"E8F0 5641 EBE8 E8E8 E9E9 E9EA EAEA EBEB" /* ËVAÎËËËÈÈÈÍÍÍÎÎ */ + $"EBEC ECED EDED EEEE EEEF EFEF F0F0 F0F1" /* ÎÏÏÌÌÌÓÓÓÔÔÔÒ */ + $"F1F1 F9FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÒÒ˘ˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFD F9F9 F9F9" /* ˇˇˇˇˇˇˇˇˇˇˇ˝˘˘˘˘ */ + $"F9FA FAFA FAFA F9F9 F9F9 F9F9 F9F8 F8F8" /* ˘˙˙˙˙˙˘˘˘˘˘˘˘¯¯¯ */ + $"F8F7 F7F7 F7F6 F6F6 F5F5 F5F5 F4F4 F4F3" /* ¯˜˜˜˜ˆˆˆııııÙÙÙÛ */ + $"F3F3 F2F2 F2F1 F1F1 F0F0 F0EF EFEF EEEE" /* ÛÛÚÚÚÒÒÒÔÔÔÓÓ */ + $"EDED EDEC ECEC EBEB EBEA EAEA E9E9 E9E8" /* ÌÌÌÏÏÏÎÎÎÍÍÍÈÈÈË */ + $"E8EC 402A E4E8 E8E8 E9E9 E9EA EAEA EBEB" /* ËÏ@*‰ËËËÈÈÈÍÍÍÎÎ */ + $"EBEC ECEC EDED EDEE EEEE EFEF F0F0 F0F1" /* ÎÏÏÏÌÌÌÓÓÓÔÔÒ */ + $"F1F1 F1F8 FFFF FFFF FFFF FFFF FFFF FFFF" /* ÒÒÒ¯ˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFE F9F9 F9F9" /* ˇˇˇˇˇˇˇˇˇˇˇ˛˘˘˘˘ */ + $"F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 F8F8 F8F8" /* ˘˘˘˘˘˘˘˘˘˘˘˘¯¯¯¯ */ + $"F8F7 F7F7 F7F6 F6F6 F5F5 F5F5 F4F4 F4F3" /* ¯˜˜˜˜ˆˆˆııııÙÙÙÛ */ + $"F3F3 F2F2 F2F1 F1F1 F0F0 F0EF EFEF EEEE" /* ÛÛÚÚÚÒÒÒÔÔÔÓÓ */ + $"EEED EDEC ECEC EBEB EBEA EAEA E9E9 E9E8" /* ÓÌÌÏÏÏÎÎÎÍÍÍÈÈÈË */ + $"E9E5 2C16 D7E9 E8E8 E8E9 E9E9 EAEA EAEB" /* ÈÂ,.◊ÈËËËÈÈÈÍÍÍÎ */ + $"EBEB ECEC ECED EDEE EEEE EFEF EFF0 F0F0" /* ÎÎÏÏÏÌÌÓÓÓÔÔÔ */ + $"F1F1 F1F1 F6FE FFFF FFFF FFFF FFFF FFFF" /* ÒÒÒÒˆ˛ˇˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF F9F9 F9F9" /* ˇˇˇˇˇˇˇˇˇˇˇˇ˘˘˘˘ */ + $"F9F9 F9F9 F9F9 F9F9 F9F9 F9F8 F8F8 F8F8" /* ˘˘˘˘˘˘˘˘˘˘˘¯¯¯¯¯ */ + $"F8F7 F7F7 F7F6 F6F6 F5F5 F5F5 F4F4 F4F3" /* ¯˜˜˜˜ˆˆˆııııÙÙÙÛ */ + $"F3F3 F2F2 F2F1 F1F1 F0F0 F0EF EFEF EEEE" /* ÛÛÚÚÚÒÒÒÔÔÔÓÓ */ + $"EEED EDED ECEC EBEB EBEA EAEA E9E9 E9E8" /* ÓÌÌÌÏÏÎÎÎÍÍÍÈÈÈË */ + $"EAD9 1907 C4EC E7E8 E8E8 E9E9 E9EA EAEB" /* ÍŸ..ƒÏÁËËËÈÈÈÍÍÎ */ + $"EBEB ECEC ECED EDED EEEE EEEF EFEF F0F0" /* ÎÎÏÏÏÌÌÌÓÓÓÔÔÔ */ + $"F0F1 F1F1 F2F5 FEFF FFFF FFFF FFFF FFFF" /* ÒÒÒÚı˛ˇˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FAF8 F8F9" /* ˇˇˇˇˇˇˇˇˇˇˇˇ˙¯¯˘ */ + $"F9F9 F9F9 F9F9 F9F9 F9F9 F8F8 F8F8 F8F8" /* ˘˘˘˘˘˘˘˘˘˘¯¯¯¯¯¯ */ + $"F7F7 F7F7 F6F6 F6F6 F5F5 F5F4 F4F4 F4F3" /* ˜˜˜˜ˆˆˆˆıııÙÙÙÙÛ */ + $"F3F3 F2F2 F2F1 F1F1 F0F0 F0EF EFEF EEEE" /* ÛÛÚÚÚÒÒÒÔÔÔÓÓ */ + $"EEED EDED ECEC ECEB EBEA EAEA E9E9 E9E8" /* ÓÌÌÌÏÏÏÎÎÍÍÍÈÈÈË */ + $"EDC4 0700 A5EE E7E8 E8E8 E9E9 E9EA EAEA" /* ̃..•ÓÁËËËÈÈÈÍÍÍ */ + $"EBEB EBEC ECEC EDED EDEE EEEE EFEF EFF0" /* ÎÎÎÏÏÏÌÌÌÓÓÓÔÔÔ */ + $"F0F0 F1F1 F2F2 F5FE FFFF FFFF FFFF FFFF" /* ÒÒÚÚı˛ˇˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FBF8 F8F8" /* ˇˇˇˇˇˇˇˇˇˇˇˇ˚¯¯¯ */ + $"F8F8 F9F9 F9F9 F9F9 F8F8 F8F8 F8F8 F8F7" /* ¯¯˘˘˘˘˘˘¯¯¯¯¯¯¯˜ */ + $"F7F7 F7F7 F6F6 F6F6 F5F5 F5F4 F4F4 F4F3" /* ˜˜˜˜ˆˆˆˆıııÙÙÙÙÛ */ + $"F3F3 F2F2 F2F1 F1F1 F0F0 F0EF EFEF EEEE" /* ÛÛÚÚÚÒÒÒÔÔÔÓÓ */ + $"EEED EDED ECEC ECEB EBEA EAEA E9E9 E9E8" /* ÓÌÌÌÏÏÏÎÎÍÍÍÈÈÈË */ + $"EFA9 0000 7EF0 E7E7 E8E8 E8E9 E9E9 EAEA" /* Ô©..~ÁÁËËËÈÈÈÍÍ */ + $"EAEB EBEB ECEC EDED EDEE EEEE EFEF EFF0" /* ÍÎÎÎÏÏÌÌÌÓÓÓÔÔÔ */ + $"F0F0 F1F1 F1F2 F2F5 FEFF FFFF FFFF FFFF" /* ÒÒÒÚÚı˛ˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FDF8 F8F8" /* ˇˇˇˇˇˇˇˇˇˇˇˇ˝¯¯¯ */ + $"F8F8 F8F8 F8F8 F8F8 F8F8 F8F8 F8F8 F7F7" /* ¯¯¯¯¯¯¯¯¯¯¯¯¯¯˜˜ */ + $"F7F7 F7F6 F6F6 F6F6 F5F5 F5F4 F4F4 F4F3" /* ˜˜˜ˆˆˆˆˆıııÙÙÙÙÛ */ + $"F3F3 F2F2 F2F1 F1F1 F0F0 F0EF EFEF EEEE" /* ÛÛÚÚÚÒÒÒÔÔÔÓÓ */ + $"EEED EDED ECEC ECEB EBEB EAEA EAE9 E9E8" /* ÓÌÌÌÏÏÏÎÎÎÍÍÍÈÈË */ + $"F282 0000 53EE E7E7 E7E8 E8E8 E9E9 EAEA" /* ÚÇ..SÓÁÁÁËËËÈÈÍÍ */ + $"EAEB EBEB ECEC ECED EDED EEEE EEEF EFEF" /* ÍÎÎÎÏÏÏÌÌÌÓÓÓÔÔÔ */ + $"EFF0 F0F1 F1F1 F2F2 F6FF FFFF FFFF FFFF" /* ÔÒÒÒÚÚˆˇˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FEF8 F8F8" /* ˇˇˇˇˇˇˇˇˇˇˇˇ˛¯¯¯ */ + $"F8F8 F8F8 F8F8 F8F8 F8F8 F8F8 F8F7 F7F7" /* ¯¯¯¯¯¯¯¯¯¯¯¯¯˜˜˜ */ + $"F7F7 F7F6 F6F6 F6F5 F5F5 F5F4 F4F4 F3F3" /* ˜˜˜ˆˆˆˆııııÙÙÙÛÛ */ + $"F3F3 F2F2 F2F1 F1F1 F0F0 F0EF EFEF EEEE" /* ÛÛÚÚÚÒÒÒÔÔÔÓÓ */ + $"EEED EDED ECEC ECEB EBEB EAEA EAE9 E9E9" /* ÓÌÌÌÏÏÏÎÎÎÍÍÍÈÈÈ */ + $"EF53 0000 2AE1 E7E7 E7E8 E8E8 E9E9 E9EA" /* ÔS..*·ÁÁÁËËËÈÈÈÍ */ + $"EAEA EBEB EBEC ECEC EDED EDEE EEEE EFEF" /* ÍÍÎÎÎÏÏÏÌÌÌÓÓÓÔÔ */ + $"EFEF F0F0 F1F1 F1F2 F1F6 FFFF FFFF FFFF" /* ÔÔÒÒÒÚÒˆˇˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFF9 F7F7" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇ˘˜˜ */ + $"F8F8 F8F8 F8F8 F8F8 F8F8 F8F8 F7F7 F7F7" /* ¯¯¯¯¯¯¯¯¯¯¯¯˜˜˜˜ */ + $"F7F7 F6F6 F6F6 F6F5 F5F5 F5F4 F4F4 F3F3" /* ˜˜ˆˆˆˆˆııııÙÙÙÛÛ */ + $"F3F3 F2F2 F2F1 F1F1 F0F0 F0EF EFEF EEEE" /* ÛÛÚÚÚÒÒÒÔÔÔÓÓ */ + $"EEED EDED ECEC ECEB EBEB EAEA EAE9 E9EA" /* ÓÌÌÌÏÏÏÎÎÎÍÍÍÈÈÍ */ + $"E42B 0000 0BC6 EAE7 E7E7 E8E8 E8E9 E9E9" /* ‰+...∆ÍÁÁÁËËËÈÈÈ */ + $"EAEA EAEB EBEB ECEC ECED EDED EEEE EEEF" /* ÍÍÍÎÎÎÏÏÏÌÌÌÓÓÓÔ */ + $"EFEF F0F0 F0F1 F1F1 F2F2 F7FF FFFF FFFF" /* ÔÔÒÒÒÚÚ˜ˇˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFB F7F7" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇ˚˜˜ */ + $"F7F7 F7F7 F8F8 F8F8 F8F7 F7F7 F7F7 F7F7" /* ˜˜˜˜¯¯¯¯¯˜˜˜˜˜˜˜ */ + $"F7F6 F6F6 F6F6 F5F5 F5F5 F5F4 F4F4 F3F3" /* ˜ˆˆˆˆˆıııııÙÙÙÛÛ */ + $"F3F3 F2F2 F2F1 F1F1 F0F0 F0EF EFEF EEEE" /* ÛÛÚÚÚÒÒÒÔÔÔÓÓ */ + $"EEED EDED ECEC ECEB EBEB EAEA EAE9 E9EE" /* ÓÌÌÌÏÏÏÎÎÎÍÍÍÈÈÓ */ + $"C90B 0000 009B EEE6 E7E7 E7E8 E8E8 E9E9" /* …....õÓÊÁÁÁËËËÈÈ */ + $"E9EA EAEB EBEB ECEC ECED EDED EEEE EEEF" /* ÈÍÍÎÎÎÏÏÏÌÌÌÓÓÓÔ */ + $"EFEF EFF0 F0F0 F1F1 F1F2 F2F9 FFFF FFFF" /* ÔÔÔÒÒÒÚÚ˘ˇˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFD F7F7" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇ˝˜˜ */ + $"F7F7 F7F7 F7F7 F7F7 F7F7 F7F7 F7F7 F7F7" /* ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜ */ + $"F6F6 F6F6 F6F6 F5F5 F5F5 F4F4 F4F4 F3F3" /* ˆˆˆˆˆˆııııÙÙÙÙÛÛ */ + $"F3F2 F2F2 F2F1 F1F1 F0F0 F0EF EFEF EEEE" /* ÛÚÚÚÚÒÒÒÔÔÔÓÓ */ + $"EEED EDED ECEC ECEB EBEB EAEA EAE9 E9F1" /* ÓÌÌÌÏÏÏÎÎÎÍÍÍÈÈÒ */ + $"9D00 0000 0060 EFE6 E7E7 E7E8 E8E8 E9E9" /* ù....`ÔÊÁÁÁËËËÈÈ */ + $"E9EA EAEA EBEB EBEC ECEC EDED EDEE EEEE" /* ÈÍÍÍÎÎÎÏÏÏÌÌÌÓÓÓ */ + $"EFEF EFEF F0F0 F1F1 F1F1 F2F2 FAFF FFFF" /* ÔÔÔÔÒÒÒÒÚÚ˙ˇˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF F8F7" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇ¯˜ */ + $"F7F7 F7F7 F7F7 F7F7 F7F7 F7F7 F7F7 F7F6" /* ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜ˆ */ + $"F6F6 F6F6 F6F5 F5F5 F5F5 F4F4 F4F4 F3F3" /* ˆˆˆˆˆıııııÙÙÙÙÛÛ */ + $"F3F2 F2F2 F2F1 F1F1 F0F0 F0EF EFEF EEEE" /* ÛÚÚÚÚÒÒÒÔÔÔÓÓ */ + $"EEED EDED ECEC ECEB EBEB EAEA EAE9 E9F1" /* ÓÌÌÌÏÏÏÎÎÎÍÍÍÈÈÒ */ + $"6200 0000 0027 DFE7 E6E7 E7E7 E8E8 E8E9" /* b....'flÁÊÁÁÁËËËÈ */ + $"E9E9 EAEA EAEB EBEB ECEC ECED EDED EEEE" /* ÈÈÍÍÍÎÎÎÏÏÏÌÌÌÓÓ */ + $"EEEF EFEF EFF0 F0F1 F1F1 F2F2 F2FB FFFF" /* ÓÔÔÔÔÒÒÒÚÚÚ˚ˇˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FAF6" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇ˙ˆ */ + $"F6F6 F7F7 F7F7 F7F7 F7F7 F7F7 F7F6 F6F6" /* ˆˆ˜˜˜˜˜˜˜˜˜˜˜ˆˆˆ */ + $"F6F6 F6F6 F6F5 F5F5 F5F4 F4F4 F4F3 F3F3" /* ˆˆˆˆˆııııÙÙÙÙÛÛÛ */ + $"F3F2 F2F2 F2F1 F1F1 F0F0 F0EF EFEF EEEE" /* ÛÚÚÚÚÒÒÒÔÔÔÓÓ */ + $"EEED EDED EDEC ECEC EBEB EBEA EAEA EAE5" /* ÓÌÌÌÌÏÏÏÎÎÎÍÍÍÍ */ + $"2B00 0000 0005 B9EB E6E6 E7E7 E7E8 E8E9" /* +.....πÎÊÊÁÁÁËËÈ */ + $"E9E9 EAEA EAEB EBEB ECEC ECED EDED EDEE" /* ÈÈÍÍÍÎÎÎÏÏÏÌÌÌÌÓ */ + $"EEEE EFEF EFEF F0F0 F1F1 F1F2 F2F3 FDFF" /* ÓÓÔÔÔÔÒÒÒÚÚÛ˝ˇ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FDF6" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇ˝ˆ */ + $"F6F6 F6F6 F6F6 F6F7 F7F6 F6F6 F6F6 F6F6" /* ˆˆˆˆˆˆˆ˜˜ˆˆˆˆˆˆˆ */ + $"F6F6 F6F6 F5F5 F5F5 F5F4 F4F4 F4F3 F3F3" /* ˆˆˆˆıııııÙÙÙÙÛÛÛ */ + $"F3F2 F2F2 F1F1 F1F1 F0F0 F0EF EFEF EEEE" /* ÛÚÚÚÒÒÒÒÔÔÔÓÓ */ + $"EEED EDED EDEC ECEC EBEB EBEA EAEA EFBE" /* ÓÌÌÌÌÏÏÏÎÎÎÍÍÍÔæ */ + $"0700 0000 0000 79EF E6E6 E7E7 E7E8 E8E8" /* ......yÔÊÊÁÁÁËËË */ + $"E9E9 E9EA EAEA EBEB EBEC ECEC EDED EDEE" /* ÈÈÈÍÍÍÎÎÎÏÏÏÌÌÌÓ */ + $"EEEE EEEF EFEF F0F0 F0F1 F1F1 F2F2 F4FE" /* ÓÓÓÔÔÔÒÒÒÚÚÙ˛ */ + $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFF7" /* ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ˜ */ + $"F6F6 F6F6 F6F6 F6F6 F6F6 F6F6 F6F6 F6F6" /* ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ */ + $"F6F6 F5F5 F5F5 F5F5 F4F4 F4F4 F4F3 F3F3" /* ˆˆııııııÙÙÙÙÙÛÛÛ */ + $"F2F2 F2F2 F1F1 F1F1 F0F0 F0EF EFEF EEEE" /* ÚÚÚÚÒÒÒÒÔÔÔÓÓ */ + $"EEED EDED EDEC ECEC EBEB EBEA EAEA F27B" /* ÓÌÌÌÌÏÏÏÎÎÎÍÍÍÚ{ */ + $"0000 0000 0000 32E3 E6E6 E6E7 E7E7 E8E8" /* ......2„ÊÊÊÁÁÁËË */ + $"E8E9 E9E9 EAEA EAEB EBEB ECEC ECED EDED" /* ËÈÈÈÍÍÍÎÎÎÏÏÏÌÌÌ */ + $"EEEE EEEF EFEF EFF0 F0F0 F1F1 F1F2 F2F5" /* ÓÓÓÔÔÔÔÒÒÒÚÚı */ + $"FEFF FFFF FFFF FFFF FFFF FFFF FFFF FFFA" /* ˛ˇˇˇˇˇˇˇˇˇˇˇˇˇˇ˙ */ + $"F5F6 F6F6 F6F6 F6F6 F6F6 F6F6 F6F6 F6F6" /* ıˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ */ + $"F6F5 F5F5 F5F5 F5F5 F4F4 F4F4 F3F3 F3F3" /* ˆıııııııÙÙÙÙÛÛÛÛ */ + $"F2F2 F2F2 F1F1 F1F1 F0F0 F0EF EFEF EEEE" /* ÚÚÚÚÒÒÒÒÔÔÔÓÓ */ + $"EEED EDED EDEC ECEC EBEB EBEA EAEA E836" /* ÓÌÌÌÌÏÏÏÎÎÎÍÍÍË6 */ + $"0000 0000 0000 07BA EAE6 E6E6 E7E7 E7E8" /* .......∫ÍÊÊÊÁÁÁË */ + $"E8E8 E9E9 E9EA EAEA EBEB EBEC ECEC EDED" /* ËËÈÈÈÍÍÍÎÎÎÏÏÏÌÌ */ + $"EDEE EEEE EFEF EFEF F0F0 F0F1 F1F1 F2F2" /* ÌÓÓÓÔÔÔÔÒÒÒÚÚ */ + $"F7FF FFFF FFFF FFFF FFFF FFFF FFFF FFFD" /* ˜ˇˇˇˇˇˇˇˇˇˇˇˇˇˇ˝ */ + $"F5F5 F5F6 F6F6 F6F6 F6F6 F6F6 F6F6 F6F5" /* ıııˆˆˆˆˆˆˆˆˆˆˆˆı */ + $"F5F5 F5F5 F5F5 F5F4 F4F4 F4F4 F3F3 F3F3" /* ıııııııÙÙÙÙÙÛÛÛÛ */ + $"F2F2 F2F2 F1F1 F1F0 F0F0 F0EF EFEF EEEE" /* ÚÚÚÚÒÒÒÔÔÔÓÓ */ + $"EEED EDED EDEC ECEC EBEB EBEA EAF0 B907" /* ÓÌÌÌÌÏÏÏÎÎÎÍÍπ. */ + $"0000 0000 0000 006D EEE6 E6E6 E7E7 E7E8" /* .......mÓÊÊÊÁÁÁË */ + $"E8E8 E9E9 E9EA EAEA EBEB EBEB ECEC ECED" /* ËËÈÈÈÍÍÍÎÎÎÎÏÏÏÌ */ + $"EDED EEEE EEEF EFEF EFF0 F0F0 F1F1 F1F1" /* ÌÌÓÓÓÔÔÔÔÒÒÒÒ */ + $"F2F9 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* Ú˘ˇˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"F7F5 F5F5 F5F5 F5F5 F5F5 F5F5 F5F5 F5F5" /* ˜ııııııııııııııı */ + $"F5F5 F5F5 F5F5 F4F4 F4F4 F4F3 F3F3 F3F2" /* ııııııÙÙÙÙÙÛÛÛÛÚ */ + $"F2F2 F2F2 F1F1 F1F0 F0F0 F0EF EFEF EEEE" /* ÚÚÚÚÒÒÒÔÔÔÓÓ */ + $"EEED EDED EDEC ECEC EBEB EBEA EAF2 6700" /* ÓÌÌÌÌÏÏÏÎÎÎÍÍÚg. */ + $"0000 0000 0000 0020 D9E7 E6E6 E6E7 E7E7" /* ....... ŸÁÊÊÊÁÁÁ */ + $"E8E8 E8E9 E9E9 EAEA EAEB EBEB ECEC ECED" /* ËËËÈÈÈÍÍÍÎÎÎÏÏÏÌ */ + $"EDED EDEE EEEE EFEF EFEF F0F0 F0F1 F1F1" /* ÌÌÌÓÓÓÔÔÔÔÒÒÒ */ + $"F1F2 FBFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÒÚ˚ˇˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"F9F5 F5F5 F5F5 F5F5 F5F5 F5F5 F5F5 F5F5" /* ˘ııııııııııııııı */ + $"F5F5 F5F5 F5F4 F4F4 F4F4 F4F3 F3F3 F3F2" /* ıııııÙÙÙÙÙÙÛÛÛÛÚ */ + $"F2F2 F2F1 F1F1 F1F0 F0F0 EFEF EFEF EEEE" /* ÚÚÚÒÒÒÒÔÔÔÔÓÓ */ + $"EEED EDED EDEC ECEC EBEB EBEA EDDB 1E00" /* ÓÌÌÌÌÏÏÏÎÎÎÍÌ€.. */ + $"0000 0000 0000 0000 9AED E5E6 E6E6 E7E7" /* ........öÌÂÊÊÊÁÁ */ + $"E7E8 E8E8 E9E9 E9EA EAEA EBEB EBEC ECEC" /* ÁËËËÈÈÈÍÍÍÎÎÎÏÏÏ */ + $"EDED EDEE EEEE EEEF EFEF EFF0 F0F0 F1F1" /* ÌÌÌÓÓÓÓÔÔÔÔÒÒ */ + $"F1F1 F3FD FFFF FFFF FFFF FFFF FFFF FFFF" /* ÒÒÛ˝ˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FDF4 F5F5 F5F5 F5F5 F5F5 F5F5 F5F5 F5F5" /* ˝Ùıııııııııııııı */ + $"F5F5 F5F4 F4F4 F4F4 F4F4 F3F3 F3F3 F3F2" /* ıııÙÙÙÙÙÙÙÛÛÛÛÛÚ */ + $"F2F2 F2F1 F1F1 F1F0 F0F0 EFEF EFEF EEEE" /* ÚÚÚÒÒÒÒÔÔÔÔÓÓ */ + $"EEED EDED EDEC ECEC EBEB EBEA F299 0000" /* ÓÌÌÌÌÏÏÏÎÎÎÍÚô.. */ + $"0000 0000 0000 0000 3DE6 E5E6 E6E6 E7E7" /* ........=ÊÂÊÊÊÁÁ */ + $"E7E8 E8E8 E8E9 E9E9 EAEA EAEB EBEB ECEC" /* ÁËËËËÈÈÈÍÍÍÎÎÎÏÏ */ + $"ECED EDED EEEE EEEE EFEF EFEF F0F0 F0F1" /* ÏÌÌÌÓÓÓÓÔÔÔÔÒ */ + $"F1F1 F1F5 FFFF FFFF FFFF FFFF FFFF FFFF" /* ÒÒÒıˇˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFF6 F4F4 F4F5 F5F5 F5F5 F5F5 F5F5 F5F5" /* ˇˆÙÙÙııııııııııı */ + $"F5F4 F4F4 F4F4 F4F4 F4F3 F3F3 F3F3 F2F2" /* ıÙÙÙÙÙÙÙÙÛÛÛÛÛÚÚ */ + $"F2F2 F2F1 F1F1 F1F0 F0F0 EFEF EFEF EEEE" /* ÚÚÚÒÒÒÒÔÔÔÔÓÓ */ + $"EEED EDED ECEC ECEC EBEB EBEB EC40 0000" /* ÓÌÌÌÏÏÏÏÎÎÎÎÏ@.. */ + $"0000 0000 0000 0000 04AF EBE5 E6E6 E6E7" /* .........ØÎÂÊÊÊÁ */ + $"E7E7 E8E8 E8E9 E9E9 EAEA EAEB EBEB EBEC" /* ÁÁËËËÈÈÈÍÍÍÎÎÎÎÏ */ + $"ECEC EDED EDEE EEEE EFEF EFEF EFF0 F0F0" /* ÏÏÌÌÌÓÓÓÔÔÔÔÔ */ + $"F1F1 F1F1 F7FF FFFF FFFF FFFF FFFF FFFF" /* ÒÒÒÒ˜ˇˇˇˇˇˇˇˇˇˇˇ */ + $"FFF9 F4F4 F4F4 F4F4 F4F4 F4F4 F4F4 F4F4" /* ˇ˘ÙÙÙÙÙÙÙÙÙÙÙÙÙÙ */ + $"F4F4 F4F4 F4F4 F4F4 F3F3 F3F3 F3F3 F2F2" /* ÙÙÙÙÙÙÙÙÛÛÛÛÛÛÚÚ */ + $"F2F2 F1F1 F1F1 F0F0 F0F0 EFEF EFEF EEEE" /* ÚÚÒÒÒÒÔÔÔÔÓÓ */ + $"EEED EDED ECEC ECEC EBEB EBF1 AF05 0000" /* ÓÌÌÌÏÏÏÏÎÎÎÒØ... */ + $"0000 0000 0000 0000 004F EAE5 E5E6 E6E6" /* .........OÍÂÂÊÊÊ */ + $"E7E7 E7E8 E8E8 E9E9 E9EA EAEA EBEB EBEC" /* ÁÁÁËËËÈÈÈÍÍÍÎÎÎÏ */ + $"ECEC ECED EDED EEEE EEEE EFEF EFEF F0F0" /* ÏÏÏÌÌÌÓÓÓÓÔÔÔÔ */ + $"F0F1 F1F1 F1FA FFFF FFFF FFFF FFFF FFFF" /* ÒÒÒÒ˙ˇˇˇˇˇˇˇˇˇˇ */ + $"FFFD F4F4 F4F4 F4F4 F4F4 F4F4 F4F4 F4F4" /* ˇ˝ÙÙÙÙÙÙÙÙÙÙÙÙÙÙ */ + $"F4F4 F4F4 F4F4 F3F3 F3F3 F3F3 F3F2 F2F2" /* ÙÙÙÙÙÙÛÛÛÛÛÛÛÚÚÚ */ + $"F2F2 F1F1 F1F1 F0F0 F0EF EFEF EFEE EEEE" /* ÚÚÒÒÒÒÔÔÔÔÓÓÓ */ + $"EEED EDED ECEC ECEC EBEB ECEC 4900 0000" /* ÓÌÌÌÏÏÏÏÎÎÏÏI... */ + $"0000 0000 0000 0000 0008 B5EB E5E5 E6E6" /* ..........µÎÂÂÊÊ */ + $"E6E7 E7E7 E8E8 E8E9 E9E9 EAEA EAEB EBEB" /* ÊÁÁÁËËËÈÈÈÍÍÍÎÎÎ */ + $"ECEC ECEC EDED EDEE EEEE EEEF EFEF EFF0" /* ÏÏÏÏÌÌÌÓÓÓÓÔÔÔÔ */ + $"F0F0 F1F1 F1F2 FDFF FFFF FFFF FFFF FFFF" /* ÒÒÒÚ˝ˇˇˇˇˇˇˇˇˇ */ + $"FFFF F5F3 F4F4 F4F4 F4F4 F4F4 F4F4 F4F4" /* ˇˇıÛÙÙÙÙÙÙÙÙÙÙÙÙ */ + $"F4F4 F4F4 F4F3 F3F3 F3F3 F3F3 F2F2 F2F2" /* ÙÙÙÙÙÛÛÛÛÛÛÛÚÚÚÚ */ + $"F2F1 F1F1 F1F1 F0F0 F0EF EFEF EFEE EEEE" /* ÚÒÒÒÒÒÔÔÔÔÓÓÓ */ + $"EEED EDED ECEC ECEC EBEB F1B5 0600 0000" /* ÓÌÌÌÏÏÏÏÎÎÒµ.... */ + $"0000 0000 0000 0000 0000 4CE9 E5E5 E6E6" /* ..........LÈÂÂÊÊ */ + $"E6E7 E7E7 E8E8 E8E8 E9E9 E9EA EAEA EBEB" /* ÊÁÁÁËËËËÈÈÈÍÍÍÎÎ */ + $"EBEC ECEC EDED EDED EEEE EEEE EFEF EFEF" /* ÎÏÏÏÌÌÌÌÓÓÓÓÔÔÔÔ */ + $"EFF0 F0F0 F1F1 F4FE FFFF FFFF FFFF FFFF" /* ÔÒÒÙ˛ˇˇˇˇˇˇˇˇ */ + $"FFFF F9F3 F3F3 F4F4 F4F4 F4F4 F4F4 F4F4" /* ˇˇ˘ÛÛÛÙÙÙÙÙÙÙÙÙÙ */ + $"F4F4 F3F3 F3F3 F3F3 F3F3 F3F2 F2F2 F2F2" /* ÙÙÛÛÛÛÛÛÛÛÛÚÚÚÚÚ */ + $"F1F1 F1F1 F1F0 F0F0 F0EF EFEF EFEE EEEE" /* ÒÒÒÒÒÔÔÔÔÓÓÓ */ + $"EEED EDED ECEC ECEB EBEC EE4D 0000 0000" /* ÓÌÌÌÏÏÏÎÎÏÓM.... */ + $"0000 0000 0000 0000 0000 06AB ECE5 E5E6" /* ...........´ÏÂÂÊ */ + $"E6E6 E7E7 E7E8 E8E8 E9E9 E9E9 EAEA EAEB" /* ÊÊÁÁÁËËËÈÈÈÈÍÍÍÎ */ + $"EBEB ECEC ECEC EDED EDEE EEEE EEEF EFEF" /* ÎÎÏÏÏÏÌÌÌÓÓÓÓÔÔÔ */ + $"EFEF F0F0 F0F1 F0F7 FFFF FFFF FFFF FFFF" /* ÔÔÒ˜ˇˇˇˇˇˇˇˇ */ + $"FFFF FCF3 F3F3 F3F3 F3F3 F3F3 F3F3 F3F3" /* ˇˇ¸ÛÛÛÛÛÛÛÛÛÛÛÛÛ */ + $"F3F3 F3F3 F3F3 F3F3 F3F3 F2F2 F2F2 F2F2" /* ÛÛÛÛÛÛÛÛÛÛÚÚÚÚÚÚ */ + $"F1F1 F1F1 F0F0 F0F0 EFEF EFEF EFEE EEEE" /* ÒÒÒÒÔÔÔÔÔÓÓÓ */ + $"EDED EDED ECEC ECEB EBF1 B007 0000 0000" /* ÌÌÌÌÏÏÏÎÎÒ∞..... */ + $"0000 0000 0000 0000 0000 003A E2E6 E5E5" /* ...........:‚Ê */ + $"E6E6 E6E7 E7E7 E8E8 E8E9 E9E9 EAEA EAEA" /* ÊÊÊÁÁÁËËËÈÈÈÍÍÍÍ */ + $"EBEB EBEC ECEC ECED EDED EEEE EEEE EFEF" /* ÎÎÎÏÏÏÏÌÌÌÓÓÓÓÔÔ */ + $"EFEF EFF0 F0F0 F1F1 FBFF FFFF FFFF FFFF" /* ÔÔÔÒÒ˚ˇˇˇˇˇˇˇ */ + $"FFFF FFF5 F3F3 F3F3 F3F3 F3F3 F3F3 F3F3" /* ˇˇˇıÛÛÛÛÛÛÛÛÛÛÛÛ */ + $"F3F3 F3F3 F3F3 F3F3 F2F2 F2F2 F2F2 F2F1" /* ÛÛÛÛÛÛÛÛÚÚÚÚÚÚÚÒ */ + $"F1F1 F1F1 F0F0 F0F0 EFEF EFEF EEEE EEEE" /* ÒÒÒÒÔÔÔÔÓÓÓÓ */ + $"EDED EDED ECEC ECEB EDE6 3900 0000 0000" /* ÌÌÌÌÏÏÏÎÌÊ9..... */ + $"0000 0000 0000 0000 0000 0000 8EED E5E5" /* ............éÌ */ + $"E5E6 E6E6 E7E7 E7E8 E8E8 E9E9 E9EA EAEA" /* ÂÊÊÊÁÁÁËËËÈÈÈÍÍÍ */ + $"EAEB EBEB ECEC ECEC EDED EDEE EEEE EEEF" /* ÍÎÎÎÏÏÏÏÌÌÌÓÓÓÓÔ */ + $"EFEF EFEF F0F0 F0F0 F3FE FFFF FFFF FFFF" /* ÔÔÔÔÛ˛ˇˇˇˇˇˇ */ + $"FFFF FFF8 F2F3 F3F3 F3F3 F3F3 F3F3 F3F3" /* ˇˇˇ¯ÚÛÛÛÛÛÛÛÛÛÛÛ */ + $"F3F3 F3F3 F3F3 F2F2 F2F2 F2F2 F2F2 F1F1" /* ÛÛÛÛÛÛÚÚÚÚÚÚÚÚÒÒ */ + $"F1F1 F1F0 F0F0 F0EF EFEF EFEF EEEE EEEE" /* ÒÒÒÔÔÔÔÔÓÓÓÓ */ + $"EDED EDED ECEC ECEB F38B 0000 0000 0000" /* ÌÌÌÌÏÏÏÎÛã...... */ + $"0000 0000 0000 0000 0000 0000 1ECF E8E5" /* .............œË */ + $"E5E6 E6E6 E7E7 E7E7 E8E8 E8E9 E9E9 EAEA" /* ÂÊÊÊÁÁÁÁËËËÈÈÈÍÍ */ + $"EAEA EBEB EBEC ECEC EDED EDED EEEE EEEE" /* ÍÍÎÎÎÏÏÏÌÌÌÌÓÓÓÓ */ + $"EFEF EFEF EFEF F0F0 F0F6 FFFF FFFF FFFF" /* ÔÔÔÔÔÔˆˇˇˇˇˇˇ */ + $"FFFF FFFB F2F2 F2F2 F3F3 F3F3 F3F3 F3F3" /* ˇˇˇ˚ÚÚÚÚÛÛÛÛÛÛÛÛ */ + $"F3F3 F3F3 F2F2 F2F2 F2F2 F2F2 F2F1 F1F1" /* ÛÛÛÛÚÚÚÚÚÚÚÚÚÒÒÒ */ + $"F1F1 F1F0 F0F0 F0EF EFEF EFEF EEEE EEEE" /* ÒÒÒÔÔÔÔÔÓÓÓÓ */ + $"EDED EDEC ECEC ECF0 D31C 0000 0000 0000" /* ÌÌÌÏÏÏÏ”....... */ + $"0000 0000 0000 0000 0000 0000 005B E9E5" /* .............[È */ + $"E5E5 E6E6 E6E7 E7E7 E8E8 E8E8 E9E9 E9EA" /* ÂÂÊÊÊÁÁÁËËËËÈÈÈÍ */ + $"EAEA EBEB EBEB ECEC ECEC EDED EDEE EEEE" /* ÍÍÎÎÎÎÏÏÏÏÌÌÌÓÓÓ */ + $"EEEF EFEF EFEF EFF0 F0F0 F9FF FFFF FFFF" /* ÓÔÔÔÔÔÔ˘ˇˇˇˇˇ */ + $"FFFF FFFE F3F2 F2F2 F2F2 F2F2 F2F2 F2F2" /* ˇˇˇ˛ÛÚÚÚÚÚÚÚÚÚÚÚ */ + $"F2F2 F2F2 F2F2 F2F2 F2F2 F2F2 F1F1 F1F1" /* ÚÚÚÚÚÚÚÚÚÚÚÚÒÒÒÒ */ + $"F1F1 F0F0 F0F0 EFEF EFEF EFEE EEEE EEED" /* ÒÒÔÔÔÔÔÓÓÓÓÌ */ + $"EDED EDEC ECEC EDEF 6200 0000 0000 0000" /* ÌÌÌÏÏÏÌÔb....... */ + $"0000 0000 0000 0000 0000 0000 0005 A2EC" /* ..............¢Ï */ + $"E5E5 E5E6 E6E6 E7E7 E7E8 E8E8 E8E9 E9E9" /* ÂÂÂÊÊÊÁÁÁËËËËÈÈÈ */ + $"EAEA EAEB EBEB EBEC ECEC ECED EDED EEEE" /* ÍÍÍÎÎÎÎÏÏÏÏÌÌÌÓÓ */ + $"EEEE EEEF EFEF EFEF F0F0 F1FC FFFF FFFF" /* ÓÓÓÔÔÔÔÔÒ¸ˇˇˇˇ */ + $"FFFF FFFF F5F2 F2F2 F2F2 F2F2 F2F2 F2F2" /* ˇˇˇˇıÚÚÚÚÚÚÚÚÚÚÚ */ + $"F2F2 F2F2 F2F2 F2F2 F2F2 F1F1 F1F1 F1F1" /* ÚÚÚÚÚÚÚÚÚÚÒÒÒÒÒÒ */ + $"F1F0 F0F0 F0F0 EFEF EFEF EFEE EEEE EEED" /* ÒÔÔÔÔÔÓÓÓÓÌ */ + $"EDED EDEC ECED F2A1 0500 0000 0000 0000" /* ÌÌÌÏÏÌÚ°........ */ + $"0000 0000 0000 0000 0000 0000 0000 22CE" /* .............."Œ */ + $"E8E5 E5E5 E6E6 E6E7 E7E7 E8E8 E8E9 E9E9" /* ËÂÂÂÊÊÊÁÁÁËËËÈÈÈ */ + $"E9EA EAEA EBEB EBEB ECEC ECED EDED EDEE" /* ÈÍÍÍÎÎÎÎÏÏÏÌÌÌÌÓ */ + $"EEEE EEEE EFEF EFEF EFEF F0F3 FFFF FFFF" /* ÓÓÓÓÔÔÔÔÔÔÛˇˇˇˇ */ + $"FFFF FFFF F8F1 F2F2 F2F2 F2F2 F2F2 F2F2" /* ˇˇˇˇ¯ÒÚÚÚÚÚÚÚÚÚÚ */ + $"F2F2 F2F2 F2F2 F2F2 F1F1 F1F1 F1F1 F1F1" /* ÚÚÚÚÚÚÚÚÒÒÒÒÒÒÒÒ */ + $"F0F0 F0F0 F0EF EFEF EFEF EEEE EEEE EEED" /* ÔÔÔÔÔÓÓÓÓÓÌ */ + $"EDED ECEC ECEF D01E 0000 0000 0000 0000" /* ÌÌÏÏÏÔ–......... */ + $"0000 0000 0000 0000 0000 0000 0000 004C" /* ...............L */ + $"DFE7 E5E5 E5E6 E6E6 E7E7 E7E7 E8E8 E9E9" /* flÁÂÂÂÊÊÊÁÁÁÁËËÈÈ */ + $"E9E9 EAEA EAEB EBEB EBEC ECEC ECED EDED" /* ÈÈÍÍÍÎÎÎÎÏÏÏÏÌÌÌ */ + $"EDEE EEEE EEEF EFEF EFEF EFEF F8FF FFFF" /* ÌÓÓÓÓÔÔÔÔÔÔÔ¯ˇˇˇ */ + $"FFFF FFFF FCF1 F1F1 F1F1 F2F2 F2F2 F2F2" /* ˇˇˇˇ¸ÒÒÒÒÒÚÚÚÚÚÚ */ + $"F2F2 F2F2 F2F1 F1F1 F1F1 F1F1 F1F1 F1F0" /* ÚÚÚÚÚÒÒÒÒÒÒÒÒÒÒ */ + $"F0F0 F0F0 EFEF EFEF EFEF EEEE EEEE EDED" /* ÔÔÔÔÔÔÓÓÓÓÌÌ */ + $"EDED ECEC EEE6 4900 0000 0000 0000 0000" /* ÌÌÏÏÓÊI......... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"7AE8 E6E5 E5E6 E6E6 E6E7 E7E7 E7E8 E8E9" /* zËÊÂÂÊÊÊÊÁÁÁÁËËÈ */ + $"E9E9 E9EA EAEA EBEB EBEB ECEC ECEC EDED" /* ÈÈÈÍÍÍÎÎÎÎÏÏÏÏÌÌ */ + $"EDED EEEE EEEE EFEF EFEF EFEF F0FC FFFF" /* ÌÌÓÓÓÓÔÔÔÔÔÔ¸ˇˇ */ + $"FFFF FFFF FEF2 F1F1 F1F1 F1F1 F1F1 F1F1" /* ˇˇˇˇ˛ÚÒÒÒÒÒÒÒÒÒÒ */ + $"F1F1 F1F1 F1F1 F1F1 F1F1 F1F1 F1F1 F0F0" /* ÒÒÒÒÒÒÒÒÒÒÒÒÒÒ */ + $"F0F0 F0EF EFEF EFEF EFEE EEEE EEEE EDED" /* ÔÔÔÔÔÔÓÓÓÓÓÌÌ */ + $"EDED ECEC F4A4 0000 0000 0000 0000 0000" /* ÌÌÏÏÙ§.......... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0AA0 E9E6 E5E5 E6E6 E6E7 E7E7 E7E7 E8E8" /* ¬†ÈÊÂÂÊÊÊÁÁÁÁÁËË */ + $"E9E9 E9E9 EAEA EAEB EBEB EBEC ECEC ECED" /* ÈÈÈÈÍÍÍÎÎÎÎÏÏÏÏÌ */ + $"EDED EDEE EEEE EEEE EFEF EFEF EFF3 FFFF" /* ÌÌÌÓÓÓÓÓÔÔÔÔÔÛˇˇ */ + $"FFFF FFFF FFF4 F0F1 F1F1 F1F1 F1F1 F1F1" /* ˇˇˇˇˇÙÒÒÒÒÒÒÒÒÒ */ + $"F1F1 F1F1 F1F1 F1F1 F1F1 F1F1 F0F0 F0F0" /* ÒÒÒÒÒÒÒÒÒÒÒÒ */ + $"F0F0 EFEF EFEF EFEF EFEE EEEE EEED EDED" /* ÔÔÔÔÔÔÔÓÓÓÓÌÌÌ */ + $"EDED ECEC F1C0 0D00 0000 0000 0000 0000" /* ÌÌÏÏÒ¿.......... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"001D BBE9 E6E5 E5E6 E6E6 E7E7 E7E7 E7E8" /* ..ªÈÊÂÂÊÊÊÁÁÁÁÁË */ + $"E8E9 E9E9 E9EA EAEA EBEB EBEB ECEC ECEC" /* ËÈÈÈÈÍÍÍÎÎÎÎÏÏÏÏ */ + $"EDED EDED EDEE EEEE EEEF EFEF EFEF F8FF" /* ÌÌÌÌÌÓÓÓÓÔÔÔÔÔ¯ˇ */ + $"FFFF FFFF FFF6 EFF1 F1F1 F1F1 F1F1 F1F1" /* ˇˇˇˇˇˆÔÒÒÒÒÒÒÒÒÒ */ + $"F1F1 F1F1 F1F1 F1F1 F1F1 F0F0 F0F0 F0F0" /* ÒÒÒÒÒÒÒÒÒÒ */ + $"F0EF EFEF EFEF EFEF EEEE EEEE EEED EDED" /* ÔÔÔÔÔÔÔÓÓÓÓÓÌÌÌ */ + $"EDEC ECEC ECEF 4A00 0000 0000 0000 0000" /* ÌÏÏÏÏÔJ......... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 31CA E8E6 E5E5 E6E6 E6E7 E7E7 E7E8" /* ..1 ËÊÂÂÊÊÊÁÁÁÁË */ + $"E8E8 E9E9 E9E9 EAEA EAEA EBEB EBEC ECEC" /* ËËÈÈÈÈÍÍÍÍÎÎÎÏÏÏ */ + $"ECED EDED EDED EEEE EEEE EEEF EFEF F0FC" /* ÏÌÌÌÌÌÓÓÓÓÓÔÔÔ¸ */ + $"FFFF FFFF FFF8 F0F0 F0F0 F0F1 F1F1 F1F1" /* ˇˇˇˇˇ¯ÒÒÒÒÒ */ + $"F1F1 F1F1 F1F1 F1F0 F0F0 F0F0 F0F0 F0F0" /* ÒÒÒÒÒÒÒ */ + $"EFEF EFEF EFEF EFEE EEEE EEEE EDED EDED" /* ÔÔÔÔÔÔÔÓÓÓÓÓÌÌÌÌ */ + $"EDEC ECEC ECF3 A003 0000 0000 0000 0000" /* ÌÏÏÏÏÛ†......... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0044 D4E8 E5E5 E5E6 E6E6 E7E7 E7E7" /* ...D‘ËÂÂÂÊÊÊÁÁÁÁ */ + $"E8E8 E8E9 E9E9 E9EA EAEA EBEB EBEB ECEC" /* ËËËÈÈÈÈÍÍÍÎÎÎÎÏÏ */ + $"ECEC EDED EDED EDEE EEEE EEEE EFEF EEF4" /* ÏÏÌÌÌÌÌÓÓÓÓÓÔÔÓÙ */ + $"FFFF FFFF FFFA F0F0 F0F0 F0F0 F0F0 F0F0" /* ˇˇˇˇˇ˙ */ + $"F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 EFEF" /* ÔÔ */ + $"EFEF EFEF EFEF EEEE EEEE EEEE EDED EDED" /* ÔÔÔÔÔÔÓÓÓÓÓÓÌÌÌÌ */ + $"ECEC ECEC ECED E026 0000 0000 0000 0000" /* ÏÏÏÏÏ̇&........ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 51D7 E8E5 E5E5 E6E6 E6E7 E7E7" /* ....Q◊ËÂÂÂÊÊÊÁÁÁ */ + $"E7E7 E8E8 E9E9 E9E9 EAEA EAEB EBEB EBEB" /* ÁÁËËÈÈÈÈÍÍÍÎÎÎÎÎ */ + $"ECEC ECEC EDED EDED EDEE EEEE EEEE EFEF" /* ÏÏÏÏÌÌÌÌÌÓÓÓÓÓÔÔ */ + $"FAFF FFFF FFFB F0EF EFF0 F0F0 F0F0 F0F0" /* ˙ˇˇˇˇ˚ÔÔ */ + $"F0F0 F0F0 F0F0 F0F0 F0F0 F0F0 EFEF EFEF" /* ÔÔÔÔ */ + $"EFEF EFEF EFEE EEEE EEEE EEED EDED EDED" /* ÔÔÔÔÔÓÓÓÓÓÓÌÌÌÌÌ */ + $"ECEC ECEC EBEB F577 0000 0000 0000 0000" /* ÏÏÏÏÎÎıw........ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0059 D9E8 E6E5 E5E6 E6E6 E7E7" /* .....YŸËÊÂÂÊÊÊÁÁ */ + $"E7E7 E7E8 E8E9 E9E9 E9EA EAEA EAEB EBEB" /* ÁÁÁËËÈÈÈÈÍÍÍÍÎÎÎ */ + $"EBEC ECEC ECED EDED EDED EEEE EEEE EEEE" /* ÎÏÏÏÏÌÌÌÌÌÓÓÓÓÓÓ */ + $"F1FF FFFF FFFD F0EF EFEF EFEF EFEF F0F0" /* Òˇˇˇˇ˝ÔÔÔÔÔÔÔ */ + $"F0F0 F0F0 F0F0 F0F0 EFEF EFEF EFEF EFEF" /* ÔÔÔÔÔÔÔÔ */ + $"EFEF EFEF EEEE EEEE EEEE EDED EDED EDEC" /* ÔÔÔÔÓÓÓÓÓÓÌÌÌÌÌÏ */ + $"ECEC ECEC EBEB EFC6 0F00 0000 0000 0000" /* ÏÏÏÏÎÎÔ∆........ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 59D6 E7E6 E5E5 E6E6 E6E7" /* ......Y÷ÁÊÂÂÊÊÊÁ */ + $"E7E7 E7E8 E8E8 E9E9 E9E9 EAEA EAEA EBEB" /* ÁÁÁËËËÈÈÈÈÍÍÍÍÎÎ */ + $"EBEB ECEC ECEC ECED EDED EDED EEEE EEEE" /* ÎÎÏÏÏÏÏÌÌÌÌÌÓÓÓÓ */ + $"EDF6 FFFF FFFE F0EF EFEF EFEF EFEF EFEF" /* ̈ˇˇˇ˛ÔÔÔÔÔÔÔÔÔ */ + $"EFEF EFEF EFEF EFEF EFEF EFEF EFEF EFEF" /* ÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔ */ + $"EFEF EFEE EEEE EEEE EEED EDED EDED ECEC" /* ÔÔÔÓÓÓÓÓÓÌÌÌÌÌÏÏ */ + $"ECEC ECEB EBEB EBEF 4C00 0000 0000 0000" /* ÏÏÏÎÎÎÎÔL....... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0051 D2E7 E6E5 E6E6 E6E6" /* .......Q“ÁÊÂÊÊÊÊ */ + $"E7E7 E7E7 E8E8 E8E9 E9E9 E9EA EAEA EAEB" /* ÁÁÁÁËËËÈÈÈÈÍÍÍÍÎ */ + $"EBEB EBEC ECEC ECEC EDED EDED EDEE EEEE" /* ÎÎÎÏÏÏÏÏÌÌÌÌÌÓÓÓ */ + $"EEEF FCFF FFFE F1EF EFEF EFEF EFEF EFEF" /* ÓÔ¸ˇˇ˛ÒÔÔÔÔÔÔÔÔÔ */ + $"EFEF EFEF EFEF EFEF EFEF EFEF EFEF EFEF" /* ÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔ */ + $"EFEF EEEE EEEE EEEE EEED EDED EDED ECEC" /* ÔÔÓÓÓÓÓÓÓÌÌÌÌÌÏÏ */ + $"ECEC ECEB EBEB EBF2 A203 0000 0000 0000" /* ÏÏÏÎÎÎÎÚ¢....... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 45C7 E7E6 E5E6 E6E6" /* ........E«ÁÊÂÊÊÊ */ + $"E6E7 E7E7 E7E7 E8E8 E9E9 E9E9 EAEA EAEA" /* ÊÁÁÁÁÁËËÈÈÈÈÍÍÍÍ */ + $"EBEB EBEB EBEC ECEC ECEC EDED EDED EDED" /* ÎÎÎÎÎÏÏÏÏÏÌÌÌÌÌÌ */ + $"EEED F3FF FFFF F2EE EFEF EFEF EFEF EFEF" /* ÓÌÛˇˇˇÚÓÔÔÔÔÔÔÔÔ */ + $"EFEF EFEF EFEF EFEF EFEF EFEF EFEF EFEF" /* ÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔ */ + $"EEEE EEEE EEEE EEED EDED EDED EDEC ECEC" /* ÓÓÓÓÓÓÓÌÌÌÌÌÌÏÏÏ */ + $"ECEC EBEB EBEB EBEC E127 0000 0000 0000" /* ÏÏÎÎÎÎÎÏ·'...... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0031 B9E6 E6E5 E6E6" /* .........1πÊÊÂÊÊ */ + $"E6E6 E7E7 E7E7 E8E8 E8E9 E9E9 E9EA EAEA" /* ÊÊÁÁÁÁËËËÈÈÈÈÍÍÍ */ + $"EAEA EBEB EBEB ECEC ECEC ECED EDED EDED" /* ÍÍÎÎÎÎÏÏÏÏÏÌÌÌÌÌ */ + $"EDED EEFA FFFF F3ED EEEE EEEF EFEF EFEF" /* ÌÌÓ˙ˇˇÛÌÓÓÓÔÔÔÔÔ */ + $"EFEF EFEF EFEF EFEF EFEF EFEF EFEE EEEE" /* ÔÔÔÔÔÔÔÔÔÔÔÔÔÓÓÓ */ + $"EEEE EEEE EEEE EDED EDED EDED ECEC ECEC" /* ÓÓÓÓÓÓÌÌÌÌÌÌÏÏÏÏ */ + $"ECEB EBEB EBEB EAEA F379 0000 0000 0000" /* ÏÎÎÎÎÎÍÍÛy...... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 1E9C E3E7 E6E6" /* ...........ú„ÁÊÊ */ + $"E6E6 E6E7 E7E7 E7E7 E8E8 E9E9 E9E9 EAEA" /* ÊÊÊÁÁÁÁÁËËÈÈÈÈÍÍ */ + $"EAEA EAEB EBEB EBEB ECEC ECEC ECED EDED" /* ÍÍÍÎÎÎÎÎÏÏÏÏÏÌÌÌ */ + $"EDED EDF1 FEFF F5ED EEEE EEEE EEEE EEEF" /* ÌÌÌÒ˛ˇıÌÓÓÓÓÓÓÓÔ */ + $"EFEF EFEF EFEF EFEF EFEF EEEE EEEE EEEE" /* ÔÔÔÔÔÔÔÔÔÔÓÓÓÓÓÓ */ + $"EEEE EEEE EEED EDED EDED EDEC ECEC ECEC" /* ÓÓÓÓÓÌÌÌÌÌÌÏÏÏÏÏ */ + $"ECEB EBEB EBEB EAEA EFC7 0F00 0000 0000" /* ÏÎÎÎÎÎÍÍÔ«...... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 000A 79D8 E6E6" /* ...........¬yÿÊÊ */ + $"E6E6 E6E6 E7E7 E7E7 E7E8 E8E9 E9E9 E9E9" /* ÊÊÊÊÁÁÁÁÁËËÈÈÈÈÈ */ + $"EAEA EAEA EBEB EBEB EBEC ECEC ECEC ECED" /* ÍÍÍÍÎÎÎÎÎÏÏÏÏÏÏÌ */ + $"EDED EDED F2FF F8ED EEEE EEEE EEEE EEEE" /* ÌÌÌÌÚˇ¯ÌÓÓÓÓÓÓÓÓ */ + $"EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE" /* ÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓ */ + $"EEEE EEED EDED EDED EDED ECEC ECEC ECEC" /* ÓÓÓÌÌÌÌÌÌÌÏÏÏÏÏÏ */ + $"EBEB EBEB EBEA EAEA EAEF 4E00 0000 0000" /* ÎÎÎÎÎÍÍÍÍÔN..... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 004D BFE5" /* .............MøÂ */ + $"E6E7 E6E6 E6E7 E7E7 E7E7 E8E8 E8E9 E9E9" /* ÊÁÊÊÊÁÁÁÁÁËËËÈÈÈ */ + $"E9EA EAEA EAEA EBEB EBEB EBEC ECEC ECEC" /* ÈÍÍÍÍÍÎÎÎÎÎÏÏÏÏÏ */ + $"ECED EDED EDFB F9ED EDEE EEEE EEEE EEEE" /* ÏÌÌÌÌ˚˘ÌÌÓÓÓÓÓÓÓ */ + $"EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE" /* ÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓ */ + $"EEED EDED EDED EDED EDEC ECEC ECEC ECEB" /* ÓÌÌÌÌÌÌÌÌÏÏÏÏÏÏÎ */ + $"EBEB EBEB EAEA EAEA EAF1 A303 0000 0000" /* ÎÎÎÎÍÍÍÍÍÒ£..... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 2195" /* ..............!ï */ + $"DCE5 E7E6 E6E6 E7E7 E7E7 E7E8 E8E8 E9E9" /* ‹ÂÁÊÊÊÁÁÁÁÁËËËÈÈ */ + $"E9E9 EAEA EAEA EAEB EBEB EBEB ECEC ECEC" /* ÈÈÍÍÍÍÍÎÎÎÎÎÏÏÏÏ */ + $"ECEC ECED ECF7 FCED EDED EDED EEEE EEEE" /* ÏÏÏÌϘ¸ÌÌÌÌÌÓÓÓÓ */ + $"EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEED" /* ÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÌ */ + $"EDED EDED EDED EDED ECEC ECEC ECEC ECEB" /* ÌÌÌÌÌÌÌÌÏÏÏÏÏÏÏÎ */ + $"EBEB EBEB EAEA EAEA E9EB E12A 0000 0000" /* ÎÎÎÎÍÍÍÍÈη*.... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0004" /* ................ */ + $"57BF E3E7 E7E6 E6E7 E7E7 E7E7 E8E8 E8E9" /* Wø„ÁÁÊÊÁÁÁÁÁËËËÈ */ + $"E9E9 E9E9 EAEA EAEA EBEB EBEB EBEB ECEC" /* ÈÈÈÈÍÍÍÍÎÎÎÎÎÎÏÏ */ + $"ECEC ECEC ECEF FDEF EDED EDED EDED EDED" /* ÏÏÏÏÏÔ˝ÔÌÌÌÌÌÌÌÌ */ + $"EDEE EEEE EEEE EEEE EEEE EEED EDED EDED" /* ÌÓÓÓÓÓÓÓÓÓÓÌÌÌÌÌ */ + $"EDEE EEED EDED EDEC ECEC ECEC ECEC EBEB" /* ÌÓÓÌÌÌÌÏÏÏÏÏÏÏÎÎ */ + $"EBEB EBEA EAEA EAEA E9E9 F27A 0100 0000" /* ÎÎÎÍÍÍÍÍÈÈÚz.... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"001E 84D1 E6E7 E7E6 E7E7 E7E7 E7E8 E8E8" /* ..Ñ—ÊÁÁÊÁÁÁÁÁËËË */ + $"E9E9 E9E9 E9EA EAEA EAEA EBEB EBEB EBEB" /* ÈÈÈÈÈÍÍÍÍÍÎÎÎÎÎÎ */ + $"ECEC ECEC ECEC F9EF EDED EDED EDED EDED" /* ÏÏÏÏÏÏ˘ÔÌÌÌÌÌÌÌÌ */ + $"EDED EDED EDED EDED EDED EDED EDED EDEE" /* ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÓ */ + $"EEEB E6ED EDEC ECEC ECEC ECEC ECEB EBEB" /* ÓÎÊÌÌÏÏÏÏÏÏÏÏÎÎÎ */ + $"EBEB EAEA EAEA EAE9 E9E9 EEC8 0F00 0000" /* ÎÎÍÍÍÍÍÈÈÈÓ».... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0038 9DD9 E6E7 E7E7 E7E7 E7E7 E8E8" /* ...8ùŸÊÁÁÁÁÁÁÁËË */ + $"E8E8 E9E9 E9E9 EAEA EAEA EAEA EBEB EBEB" /* ËËÈÈÈÈÍÍÍÍÍÍÎÎÎÎ */ + $"EBEB ECEC ECEB F0EF ECEC EDED EDED EDED" /* ÎÎÏÏÏÎÔÏÏÌÌÌÌÌÌ */ + $"EDED EDED EDED EDED EDED EDED EDEE EEED" /* ÌÌÌÌÌÌÌÌÌÌÌÌÌÓÓÌ */ + $"E09C 71EA EDEC ECEC ECEC ECEB EBEB EBEB" /* ‡úqÍÌÏÏÏÏÏÏÎÎÎÎÎ */ + $"EBEB EAEA EAEA EAE9 E9E9 E9EE 4F00 0000" /* ÎÎÍÍÍÍÍÈÈÈÈÓO... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0548 A5DA E5E7 E8E8 E7E7 E7E7" /* .....H•⁄ÂÁËËÁÁÁÁ */ + $"E8E8 E8E9 E9E9 E9E9 EAEA EAEA EAEB EBEB" /* ËËËÈÈÈÈÈÍÍÍÍÍÎÎÎ */ + $"EBEB EBEB ECEC ECEC ECEC ECEC ECEC EDED" /* ÎÎÎÎÏÏÏÏÏÏÏÏÏÏÌÌ */ + $"EDED EDED EDED EDED EDED EDEE EFEC E2AD" /* ÌÌÌÌÌÌÌÌÌÌÌÓÔÏ‚≠ */ + $"4B04 06C2 F0EC ECEC ECEC EBEB EBEB EBEB" /* K..¬ÏÏÏÏÏÎÎÎÎÎÎ */ + $"EBEA EAEA EAEA E9E9 E9E9 E9F0 A504 0000" /* ÎÍÍÍÍÍÈÈÈÈÈ•... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 074B 9FD5 E4E6 E9E8 E8E7" /* .......Kü’‰ÊÈËËÁ */ + $"E7E8 E8E8 E9E9 E9E9 E9EA EAEA EAEA EAEB" /* ÁËËËÈÈÈÈÈÍÍÍÍÍÍÎ */ + $"EBEB EBEB EBEB ECEC ECEC ECEC ECEC ECEC" /* ÎÎÎÎÎÎÏÏÏÏÏÏÏÏÏÏ */ + $"ECEC ECEC EDED EDED EEEE EDEB DAA3 4F09" /* ÏÏÏÏÌÌÌÌÓÓÌÎ⁄£O∆ */ + $"0000 0072 F4EC ECEC ECEB EBEB EBEB EBEB" /* ...rÙÏÏÏÏÎÎÎÎÎÎÎ */ + $"EAEA EAEA EAE9 E9E9 E9E9 E8EA E12B 0000" /* ÍÍÍÍÍÈÈÈÈÈËÍ·+.. */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 033A 8CC6 E0E6 E7E9" /* .........:å∆‡ÊÁÈ */ + $"E8E8 E8E8 E8E8 E9E9 E9E9 E9EA EAEA EAEA" /* ËËËËËËÈÈÈÈÈÍÍÍÍÍ */ + $"EAEB EBEB EBEB EBEB EBEC ECEC ECEC ECEC" /* ÍÎÎÎÎÎÎÎÎÏÏÏÏÏÏÏ */ + $"ECEC ECEC ECED EDED EBE6 CD92 3C04 0000" /* ÏÏÏÏÏÌÌÌÎÊÕí<... */ + $"0000 0023 DFEF ECEB EBEB EBEB EBEB EAEA" /* ...#flÔÏÎÎÎÎÎÎÎÍÍ */ + $"EAEA EAEA E9E9 E9E9 E9E9 E8E8 F17C 0100" /* ÍÍÍÍÈÈÈÈÈÈËËÒ|.. */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0020 64A7 D1E2" /* ........... dß—‚ */ + $"E6E7 E9E8 E8E8 E8E9 E9E9 E9E9 E9EA EAEA" /* ÊÁÈËËËËÈÈÈÈÈÈÍÍÍ */ + $"EAEA EAEB EBEB EBEB EBEB EBEC ECEC ECEC" /* ÍÍÍÎÎÎÎÎÎÎÎÏÏÏÏÏ */ + $"ECED EDED EDEB E8D8 AB67 2300 0000 0000" /* ÏÌÌÌÌÎËÿ´g#..... */ + $"0000 0001 9FF3 EBEB EBEB EBEB EBEA EAEA" /* ....üÛÎÎÎÎÎÎÎÍÍÍ */ + $"EAEA EAEA E9E9 E9E9 E9E8 E8E8 EDC9 1000" /* ÍÍÍÍÈÈÈÈÈËËËÌ….. */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0006 3070" /* ..............0p */ + $"A8CC DEE5 E8E8 E9E9 E8E9 E9E9 E9E9 EAEA" /* ®ÃfiÂËËÈÈËÈÈÈÈÈÍÍ */ + $"EAEA EAEA EAEB EBEB EBEB EBEB ECEC ECEC" /* ÍÍÍÍÍÎÎÎÎÎÎÎÏÏÏÏ */ + $"EDEB EAE5 D1A9 7136 0700 0000 0000 0000" /* ÌÎÍ—©q6........ */ + $"0000 0000 48ED EBEB EBEB EBEB EAEA EAEA" /* ....HÌÎÎÎÎÎÎÍÍÍÍ */ + $"EAEA EAE9 E9E9 E9E9 E8E8 E8E8 E8ED 5200" /* ÍÍÍÈÈÈÈÈËËËËËÌR. */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0625 588B B1CE DCE3 E6E8 E9E9 E9EA EAE9" /* .%X㱌‹„ÊËÈÈÈÍÍÈ */ + $"EAEA EAEA EAEA EAEB ECEB EBEB EAE9 E7E1" /* ÍÍÍÍÍÍÍÎÏÎÎÎÍÈÁ· */ + $"D0B4 8C5C 2805 0000 0000 0000 0000 0000" /* –¥å\(........... */ + $"0000 0000 0DC4 F0EB EBEB EAEA EAEA EAEA" /* .....ƒÎÎÎÍÍÍÍÍÍ */ + $"EAEA E9E9 E9E9 E9E9 E8E8 E8E8 E7EF A704" /* ÍÍÈÈÈÈÈÈËËËËÁÔß. */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0921 4260 7D96 A7B6 C3CA D2DC" /* ....∆!B`}ñß∂√ “‹ */ + $"E1E5 E8E9 E3E0 DCD5 CAC2 B8AB 957C 6043" /* ·ÂËÈ„‡‹’ ¬∏´ï|`C */ + $"2209 0000 0000 0000 0000 0000 0000 0000" /* "∆.............. */ + $"0000 0000 006D F1EB EBEA EAEA EAEA EAEA" /* .....mÒÎÎÍÍÍÍÍÍÍ */ + $"EAE9 E9E9 E9E9 E9E8 E8E8 E8E7 E7E8 E435" /* ÍÈÈÈÈÈÈËËËËÁÁˉ5 */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0006 101E 2E3A 5072" /* .............:Pr */ + $"848F 9B99 8A7B 6E56 392A 1D12 0500 0000" /* Ñèõôä{nV9*...... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0024 A1A1 A0A0 A0A0 A0A0 A09F" /* .....$°°†††††††ü */ + $"9F9F 9F9F 9F9F 9F9F 9F9F 9F9E 9E9E A548" /* üüüüüüüüüüüûûû•H */ + $"0000 00" /* ... */ +}; + diff --git a/app/src/main/assets/roms/qemu_logo.svg b/app/src/main/assets/roms/qemu_logo.svg new file mode 100644 index 0000000..07b5b51 --- /dev/null +++ b/app/src/main/assets/roms/qemu_logo.svg @@ -0,0 +1,1010 @@ + + + + + Kew the Angry Emu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Kew the Angry Emu + + + Benoît Canet + + + + + CC BY 3.0 + + + + + QEMU Community + + + 2012-02-15 + + + + QEMU logo + QEMU mascot + + + http://lists.gnu.org/archive/html/qemu-devel/2012-02/msg01961.html + + + + + + + + + + + + + + + + + + EMU + + diff --git a/app/src/main/assets/roms/qemu_logo_no_text.svg b/app/src/main/assets/roms/qemu_logo_no_text.svg new file mode 100644 index 0000000..24ca23a --- /dev/null +++ b/app/src/main/assets/roms/qemu_logo_no_text.svg @@ -0,0 +1,976 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/app/src/main/assets/roms/qemu_vga.ndrv b/app/src/main/assets/roms/qemu_vga.ndrv new file mode 100644 index 0000000..6e02f74 Binary files /dev/null and b/app/src/main/assets/roms/qemu_vga.ndrv differ diff --git a/app/src/main/assets/roms/s390-ccw.img b/app/src/main/assets/roms/s390-ccw.img new file mode 100644 index 0000000..7415f1a Binary files /dev/null and b/app/src/main/assets/roms/s390-ccw.img differ diff --git a/app/src/main/assets/roms/s390-netboot.img b/app/src/main/assets/roms/s390-netboot.img new file mode 100644 index 0000000..24f40fe Binary files /dev/null and b/app/src/main/assets/roms/s390-netboot.img differ diff --git a/app/src/main/assets/roms/sgabios.bin b/app/src/main/assets/roms/sgabios.bin new file mode 100644 index 0000000..6308f2e Binary files /dev/null and b/app/src/main/assets/roms/sgabios.bin differ diff --git a/app/src/main/assets/roms/skiboot.lid b/app/src/main/assets/roms/skiboot.lid new file mode 100644 index 0000000..0e59a82 Binary files /dev/null and b/app/src/main/assets/roms/skiboot.lid differ diff --git a/app/src/main/assets/roms/slof.bin b/app/src/main/assets/roms/slof.bin new file mode 100644 index 0000000..6bb48d4 Binary files /dev/null and b/app/src/main/assets/roms/slof.bin differ diff --git a/app/src/main/assets/roms/spapr-rtas.bin b/app/src/main/assets/roms/spapr-rtas.bin new file mode 100644 index 0000000..fc24c8e Binary files /dev/null and b/app/src/main/assets/roms/spapr-rtas.bin differ diff --git a/app/src/main/assets/roms/vgabios-cirrus.bin b/app/src/main/assets/roms/vgabios-cirrus.bin new file mode 100644 index 0000000..3c8d507 Binary files /dev/null and b/app/src/main/assets/roms/vgabios-cirrus.bin differ diff --git a/app/src/main/assets/roms/vgabios-qxl.bin b/app/src/main/assets/roms/vgabios-qxl.bin new file mode 100644 index 0000000..1c9ec0f Binary files /dev/null and b/app/src/main/assets/roms/vgabios-qxl.bin differ diff --git a/app/src/main/assets/roms/vgabios-stdvga.bin b/app/src/main/assets/roms/vgabios-stdvga.bin new file mode 100644 index 0000000..b84ae22 Binary files /dev/null and b/app/src/main/assets/roms/vgabios-stdvga.bin differ diff --git a/app/src/main/assets/roms/vgabios-virtio.bin b/app/src/main/assets/roms/vgabios-virtio.bin new file mode 100644 index 0000000..aebc7f8 Binary files /dev/null and b/app/src/main/assets/roms/vgabios-virtio.bin differ diff --git a/app/src/main/assets/roms/vgabios-vmware.bin b/app/src/main/assets/roms/vgabios-vmware.bin new file mode 100644 index 0000000..76314aa Binary files /dev/null and b/app/src/main/assets/roms/vgabios-vmware.bin differ diff --git a/app/src/main/assets/roms/vgabios.bin b/app/src/main/assets/roms/vgabios.bin new file mode 100644 index 0000000..066a40b Binary files /dev/null and b/app/src/main/assets/roms/vgabios.bin differ diff --git a/app/src/main/java/com/epicstudios/vectras/AboutActivity.java b/app/src/main/java/com/epicstudios/vectras/AboutActivity.java new file mode 100644 index 0000000..b2c19af --- /dev/null +++ b/app/src/main/java/com/epicstudios/vectras/AboutActivity.java @@ -0,0 +1,179 @@ +package com.epicstudios.vectras; + +import android.annotation.SuppressLint; +import android.content.DialogInterface; +import android.content.Intent; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; + +import com.epicstudios.vectras.utils.UIUtils; +import com.google.android.material.floatingactionbutton.FloatingActionButton; +import com.google.android.material.snackbar.Snackbar; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; + +import android.util.Log; +import android.view.MenuItem; +import android.view.View; +import android.widget.Button; +import android.widget.Toast; + +import com.epicstudios.vectras.R; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; + +public class AboutActivity extends AppCompatActivity implements View.OnClickListener{ + + Button btn_osl, btn_clog, btn_youtube, btn_github,btn_telegram; + String appInfo; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_about); + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + getSupportActionBar().setDisplayShowHomeEnabled(true); + toolbar.setTitle(getString(R.string.app_name)); + //btn + btn_telegram = (Button) findViewById(R.id.btn_telegram); + btn_youtube = (Button) findViewById(R.id.btn_youtube); + btn_github = (Button) findViewById(R.id.btn_github); + btn_osl = (Button) findViewById(R.id.btn_osl); + btn_clog = (Button) findViewById(R.id.btn_changelog); + //onclicklistener + btn_telegram.setOnClickListener(this); + btn_github.setOnClickListener(this); + btn_youtube.setOnClickListener(this); + btn_osl.setOnClickListener(this); + btn_clog.setOnClickListener(this); + + new Thread(new Runnable(){ + + public void run(){ + + BufferedReader reader = null; + final StringBuilder builder = new StringBuilder(); + + try { + // Create a URL for the desired page + URL url = new URL(Config.vectrasInfo); //My text file location + //First open the connection + HttpURLConnection conn=(HttpURLConnection) url.openConnection(); + conn.setConnectTimeout(60000); // timing out in a minute + + BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); + + //t=(TextView)findViewById(R.id.TextView1); // ideally do this in onCreate() + String str; + while ((str = in.readLine()) != null) { + builder.append(str); + } + in.close(); + } catch (Exception e) { + UIUtils.toastLong(AboutActivity.this, "check your internet connection"); + Log.d("VECTRAS",e.toString()); + } + + //since we are in background thread, to post results we have to go back to ui thread. do the following for that + + runOnUiThread(new Runnable(){ + public void run(){ + appInfo = builder.toString(); // My TextFile has 3 lines + + } + }); + + } + }).start(); + FloatingActionButton fab = findViewById(R.id.fab); + fab.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent i = new Intent(Intent.ACTION_SEND); + i.setType("message/rfc822"); + i.putExtra(Intent.EXTRA_EMAIL , new String[]{"noureldeenelsayed856@gmail.com"}); + i.putExtra(Intent.EXTRA_SUBJECT, "Vectras User: " + Build.BRAND); + i.putExtra(Intent.EXTRA_TEXT , "Device Model: \n" + Build.MODEL + "\n"); + try { + startActivity(Intent.createChooser(i, "Send mail...")); + } catch (android.content.ActivityNotFoundException ex) { + Snackbar.make(view, "There are no email clients installed.", Snackbar.LENGTH_LONG) + .setAction("Action", null).show(); + } + + } + }); + } + + @Override + public boolean onOptionsItemSelected(@NonNull MenuItem item) { + if(item.getItemId()== android.R.id.home){ + finish(); + } + return super.onOptionsItemSelected(item); + } + public static final int TG = R.id.btn_telegram; + public static final int YT = R.id.btn_youtube; + public static final int GT = R.id.btn_github; + public static final int CL = R.id.btn_changelog; + public static final int OSL = R.id.btn_osl; + @Override + public void onClick(View v) { + int id = v.getId(); + if (id == TG) { + String tg = "https://t.me/vectras_os"; + Intent f = new Intent(Intent.ACTION_VIEW); + f.setData(Uri.parse(tg)); + startActivity(f); + } else if (id == YT) { + String tw = "https://www.youtube.com/@XOURELDEEN"; + Intent w = new Intent(Intent.ACTION_VIEW); + w.setData(Uri.parse(tw)); + startActivity(w); + } else if (id == GT) { + String gt = Config.vectrasRepo; + Intent g = new Intent(Intent.ACTION_VIEW); + g.setData(Uri.parse(gt)); + startActivity(g); + } else if (id == CL) { + AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this, R.style.MainDialogTheme); + alertDialogBuilder.setTitle("Changelog"); + alertDialogBuilder + .setMessage(getString(R.string.app_version)) + .setCancelable(true) + .setIcon(R.mipmap.ic_launcher) + .setNegativeButton("OK", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + } + }); + AlertDialog alertDialog = alertDialogBuilder.create(); + alertDialog.show(); + } else if (id == OSL) { + AlertDialog.Builder alertDialogOSL = new AlertDialog.Builder(this, R.style.MainDialogTheme); + alertDialogOSL.setTitle("APP INFO"); + alertDialogOSL + .setMessage(appInfo) + .setCancelable(true) + .setIcon(R.drawable.round_info_24) + .setNegativeButton("OK", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + } + }); + AlertDialog alertDialogosl = alertDialogOSL.create(); + alertDialogosl.show(); + } + } +} diff --git a/app/src/main/java/com/epicstudios/vectras/Blog/AdapterBlog.java b/app/src/main/java/com/epicstudios/vectras/Blog/AdapterBlog.java new file mode 100644 index 0000000..2e3cfe7 --- /dev/null +++ b/app/src/main/java/com/epicstudios/vectras/Blog/AdapterBlog.java @@ -0,0 +1,98 @@ +package com.epicstudios.vectras.Blog; + +import android.content.Context; +import android.content.Intent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.animation.Animation; +import android.view.animation.AnimationUtils; +import android.widget.ImageView; +import android.widget.TextView; +import androidx.cardview.widget.CardView; +import androidx.fragment.app.FragmentTransaction; +import androidx.recyclerview.widget.RecyclerView; +import com.bumptech.glide.Glide; +import com.epicstudios.vectras.R; +import com.epicstudios.vectras.Fragment.HomeFragment; +import com.epicstudios.vectras.PostActivity; +import java.util.Collections; +import java.util.List; +import com.epicstudios.vectras.MainActivity; + +public class AdapterBlog extends RecyclerView.Adapter { + + private Context context; + private LayoutInflater inflater; + List data = Collections.emptyList(); + DataBlog current; + int currentPos = 0; + + // create constructor to innitilize context and data sent from MainActivity + public AdapterBlog(Context context, List data) { + this.context = context; + inflater = LayoutInflater.from(context); + this.data = data; + } + + // Inflate the layout when viewholder created + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = inflater.inflate(R.layout.container_post, parent, false); + MyHolder holder = new MyHolder(view); + return holder; + } + + // Bind data + @Override + public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + + // Get current position of item in recyclerview to bind data and assign values from list + MyHolder myHolder = (MyHolder) holder; + final DataBlog current = data.get(position); + myHolder.textTitle.setText(current.postTitle); + myHolder.textDate.setText("Date: " + current.postDate); + Glide.with(MainActivity.activity).load(current.postThumb).into(myHolder.ivThumb); + Animation animation; + animation = AnimationUtils.loadAnimation(MainActivity.activity, android.R.anim.slide_in_left); + animation.setDuration(300); + + myHolder.cdPost.startAnimation(animation); + animation = null; + myHolder.cdPost.setOnClickListener(new View.OnClickListener() { + public void onClick(View view) { + + PostActivity.title = current.postTitle; + PostActivity.content = current.postContent; + PostActivity.date = current.postDate; + PostActivity.thumb = current.postThumb; + MainActivity.activity.startActivity(new Intent(MainActivity.activity, PostActivity.class)); + } + }); + } + + // return total item from List + @Override + public int getItemCount() { + return data.size(); + } + + class MyHolder extends RecyclerView.ViewHolder { + + CardView cdPost; + TextView textTitle; + ImageView ivThumb; + TextView textDate; + + // create constructor to get widget reference + public MyHolder(View itemView) { + super(itemView); + cdPost = (CardView) itemView.findViewById(R.id.cdPost); + textTitle = (TextView) itemView.findViewById(R.id.textTitle); + ivThumb = (ImageView) itemView.findViewById(R.id.ivThumb); + textDate = (TextView) itemView.findViewById(R.id.textDate); + } + + } + +} diff --git a/app/src/main/java/com/epicstudios/vectras/Blog/DataBlog.java b/app/src/main/java/com/epicstudios/vectras/Blog/DataBlog.java new file mode 100644 index 0000000..25610ce --- /dev/null +++ b/app/src/main/java/com/epicstudios/vectras/Blog/DataBlog.java @@ -0,0 +1,9 @@ +package com.epicstudios.vectras.Blog; + +public class DataBlog { + + public String postThumb; + public String postTitle; + public String postContent; + public String postDate; +} diff --git a/app/src/main/java/com/epicstudios/vectras/Config.java b/app/src/main/java/com/epicstudios/vectras/Config.java new file mode 100644 index 0000000..8b23295 --- /dev/null +++ b/app/src/main/java/com/epicstudios/vectras/Config.java @@ -0,0 +1,66 @@ +package com.epicstudios.vectras; + +import android.os.Environment; +import android.widget.ImageView.ScaleType; + +import java.io.File; +import java.util.Hashtable; + +/** + * + * @author dev + */ +public class Config { + + // App Config + public static final String vectrasWebsite = "https://vectras.netlify.com/"; + public static final String vectrasRaw = "https://raw.githubusercontent.com/epicstudios856/Vectras-windows-emulator/main/"; + public static final String vectrasLicense = vectrasRaw + "LICENSE.md"; + public static final String vectrasPrivacy = vectrasRaw + "PRIVACYANDPOLICY.md"; + public static final String vectrasTerms = vectrasRaw + "TERMSOFSERVICE.md"; + public static final String vectrasInfo = vectrasRaw + "info.md"; + public static final String vectrasRepo = "https://github.com/epicstudios856/Vectras-windows-emulator/tree/main/"; + public static final String updateJson = vectrasRaw + "UpdateConfig.json"; + public static final String blogJson = vectrasRaw + "news_list.json"; + public static final String storeJson = vectrasRaw + "store_list.json"; + public static final String romsJson = vectrasRaw + "roms.json"; + + // Constants + public static final int SDL_MOUSE_LEFT = 1; + public static final int SDL_MOUSE_RIGHT = 3; + public static final int SETTINGS_RETURN_CODE = 1000; + public static final int SDL_REQUEST_CODE = 1007; + public static final String ACTION_START = "com.epicstudios.vectras.action.STARTVM"; + public static final String ACTION_STOP = "com.epicstudios.vectras.action.STOPVM"; + + //Backend libs + public static final boolean enable_iconv = false; //not needed for now + + public static final boolean enable_qemu_fullScreen = true; + public static boolean enableSDLAlwaysFullscreen = true; + + // App config + public static String packageName = "com.epicstudios.vectras"; + public static final String datadirpath = SplashActivity.activity.getExternalFilesDir("data")+"/"; + public static final String basefiledir = datadirpath + "Vectras/.qemu/"; + public static final String maindirpath = datadirpath + "/Vectras/"; + public static final String libqemupath = "libqemu-system-x86_64.so"; + public static final String sharedFolder = datadirpath + "Vectras/ProgramFiles/"; + public static final String tmpFolder = basefiledir + "tmp"; // Do not modify + public static final String defaultDNSServer = "8.8.8.8"; + public static String state_filename = "vm.state"; + public static String notificationChannelID = "Vectras"; + public static String notificationChannelName = "Vectras"; + public static String QMPServer = "localhost"; + public static int QMPPort = 4444; + + //Keyboard Layout + public static String defaultKeyboardLayout = "en-us"; + public static String logFilePath = maindirpath + "Vectras-logs.txt"; + + // Debug + public static final boolean debug = true; + + // Class that starts when user presses notification + public static Class clientClass = VectrasSDLActivity.class; +} diff --git a/app/src/main/java/com/epicstudios/vectras/FirstActivity.java b/app/src/main/java/com/epicstudios/vectras/FirstActivity.java new file mode 100644 index 0000000..5d01baf --- /dev/null +++ b/app/src/main/java/com/epicstudios/vectras/FirstActivity.java @@ -0,0 +1,548 @@ +package com.epicstudios.vectras; + +import static android.content.Intent.ACTION_OPEN_DOCUMENT; + +import android.app.Activity; +import android.app.Dialog; +import android.app.ProgressDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.res.Resources; +import android.database.Cursor; +import android.net.Uri; +import android.os.AsyncTask; +import android.os.Bundle; +import android.provider.MediaStore; +import android.text.Html; +import android.util.Log; +import android.view.MenuItem; +import android.view.View; +import android.webkit.URLUtil; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.Toast; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import com.epicstudios.vectras.Config; +import com.epicstudios.vectras.Roms.AdapterRoms; +import com.epicstudios.vectras.Roms.DataRoms; +import com.epicstudios.vectras.logger.VectrasStatus; +import com.epicstudios.vectras.utils.FileInstaller; +import com.epicstudios.vectras.utils.FileUtils; +import java.io.BufferedInputStream; + +import com.epicstudios.vectras.utils.UIUtils; +import com.google.android.material.button.MaterialButton; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.FileDescriptor; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileWriter; +import java.io.InputStream; +import java.io.FileOutputStream; +import java.io.OutputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.Writer; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.nio.channels.FileChannel; +import java.util.ArrayList; +import java.util.List; +import java.util.Timer; +import java.util.TimerTask; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; + +import javax.net.ssl.HttpsURLConnection; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +public class FirstActivity extends AppCompatActivity { + public static FirstActivity activity; + + public static MaterialButton goBtn; + + public static CheckBox acceptLiceneseChkBox; + public static AlertDialog ad; + + public static String license; + private RecyclerView mRVRoms; + private AdapterRoms mAdapter; + public String Data; + public static Boolean selected = false; + public static String selectedPath = null; + public static String selectedExtra = null; + public static String selectedLink = null; + public static String selectedName = null; + public static String selectedIcon = null; + /** + * Called when the activity is first created. + */ + @Override + public void onCreate(Bundle savedInstanceState) { + + super.onCreate(savedInstanceState); + activity = this; + this.setContentView(R.layout.first_activity); + mRVRoms = findViewById(R.id.romsRv); + + new FirstActivity.AsyncLogin().execute(); + new Thread(new Runnable() { + + public void run() { + + BufferedReader reader = null; + final StringBuilder builder = new StringBuilder(); + + try { + // Create a URL for the desired page + URL url = new URL(Config.vectrasTerms); //My text file location + //First open the connection + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setConnectTimeout(60000); // timing out in a minute + + BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); + + //t=(TextView)findViewById(R.id.TextView1); // ideally do this in onCreate() + String str; + while ((str = in.readLine()) != null) { + builder.append(str); + } + in.close(); + } catch (Exception e) { + acceptLiceneseChkBox.setEnabled(false); + Toast.makeText(activity, "no internet connection", Toast.LENGTH_LONG).show(); + Log.d("VECTRAS", e.toString()); + } + + //since we are in background thread, to post results we have to go back to ui thread. do the following for that + + activity.runOnUiThread(new Runnable() { + public void run() { + license = builder.toString(); // My TextFile has 3 lines + acceptLiceneseChkBox.setEnabled(true); + } + }); + + } + }).start(); + + acceptLiceneseChkBox = findViewById(R.id.acceptLiceneseChkBox); + + acceptLiceneseChkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + if (isChecked) { + UIAlertLicense("Terms&Conditions", license, activity); + } else { + goBtn.setEnabled(false); + } + } + }); + goBtn = (MaterialButton) findViewById(R.id.goBtn); + + goBtn.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View view) { + onFirstStartup(); + } + }); + + } + + public static void UIAlertLicense(String title, String html, final Activity activity) { + AlertDialog alertDialog; + alertDialog = new AlertDialog.Builder(activity, R.style.MainDialogTheme).create(); + alertDialog.setTitle(title); + alertDialog.setCancelable(true); + + alertDialog.setMessage(Html.fromHtml(html)); + + alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "I Acknowledge", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + acceptLiceneseChkBox.setChecked(true); + goBtn.setEnabled(true); + return; + } + }); + alertDialog.setOnCancelListener(new DialogInterface.OnCancelListener() { + @Override + public void onCancel(DialogInterface dialog) { + acceptLiceneseChkBox.setChecked(false); + goBtn.setEnabled(false); + } + }); + alertDialog.show(); + } + + private class AsyncLogin extends AsyncTask { + + @Override + protected void onPreExecute() { + super.onPreExecute(); + + //this method will be running on UI thread + + } + + @Override + protected String doInBackground(String... params) { + HttpsURLConnection con = null; + try { + URL u = new URL(Config.romsJson); + con = (HttpsURLConnection) u.openConnection(); + + con.connect(); + + BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream())); + StringBuilder sb = new StringBuilder(); + String line; + while ((line = br.readLine()) != null) { + sb.append(line + "\n"); + } + br.close(); + Data = sb.toString(); + + return (Data); + + } catch (MalformedURLException ex) { + ex.printStackTrace(); + } catch (IOException ex) { + ex.printStackTrace(); + } finally { + if (con != null) { + try { + con.disconnect(); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + return ("unsuccessful!"); + } + + } + + @Override + protected void onPostExecute(String result) { + + //this method will be running on UI thread + List data = new ArrayList<>(); + + try { + + JSONArray jArray = new JSONArray(Data); + + // Extract data from json and store into ArrayList as class objects + for (int i = 0; i < jArray.length(); i++) { + JSONObject json_data = jArray.getJSONObject(i); + DataRoms romsData = new DataRoms(); + romsData.itemName = json_data.getString("rom_name"); + romsData.itemIcon = json_data.getString("rom_icon"); + romsData.itemUrl = json_data.getString("rom_url"); + romsData.itemPath = json_data.getString("rom_path"); + romsData.itemAvail = json_data.getBoolean("rom_avail"); + romsData.itemSize = json_data.getString("rom_size"); + romsData.itemArch = json_data.getString("rom_arch"); + romsData.itemExtra = json_data.getString("rom_extra"); + data.add(romsData); + } + + // Setup and Handover data to recyclerview + + } catch (JSONException e) { + UIUtils.toastLong(activity,e.toString()); + } + mRVRoms = (RecyclerView) findViewById(R.id.romsRv); + mAdapter = new AdapterRoms(activity, data); + mRVRoms.setAdapter(mAdapter); + mRVRoms.setLayoutManager(new LinearLayoutManager(activity)); + + } + + } + + @Override + public boolean onOptionsItemSelected(@NonNull MenuItem item) { + if (item.getItemId() == android.R.id.home) { + finish(); + } + return super.onOptionsItemSelected(item); + } + + public class RomsJso extends JSONObject { + + public JSONObject makeJSONObject (String imgName, String imgIcon, String imgPath, String imgExtra) { + + JSONObject obj = new JSONObject() ; + + try { + obj.put("imgName", imgName); + obj.put("imgIcon", imgIcon); + obj.put("imgPath", imgPath); + obj.put("imgExtra", imgExtra); + } catch (JSONException e) { + e.printStackTrace(); + } + + return obj; + } + } + public static final String CREDENTIAL_SHARED_PREF = "settings_prefs"; + + private void startIconDownload() { + String url = selectedIcon; + new DownloadIconAsync().execute(url); + } + + public void onFirstStartup() { + if (selected) { + if (FileUtils.fileValid(activity, Config.maindirpath+selectedPath)) { + SharedPreferences credentials = activity.getSharedPreferences(CREDENTIAL_SHARED_PREF, Context.MODE_PRIVATE); + + File path = new File(Config.basefiledir); + File file = new File(path, "config_path.txt"); + File file2 = new File(path, "config_extra.txt"); + FileUtils.writeToFile(Config.maindirpath + selectedPath, file, activity); + new Timer().schedule(new TimerTask() { + @Override + public void run() { + FileUtils.writeToFile(selectedExtra, file2, activity); + } + }, 500); + ProgressDialog mProgressDialog = new ProgressDialog(this, R.style.MainDialogTheme); + mProgressDialog.setMessage("Data Setup"); + mProgressDialog.setMessage("Please Wait..."); + mProgressDialog.setCancelable(false); + mProgressDialog.show(); + FileInstaller.installFiles(activity); + SharedPreferences.Editor editor = credentials.edit(); + editor.putBoolean("isFirstLaunch", Boolean.TRUE); + editor.commit(); + RomsJso obj = new RomsJso(); + startIconDownload(); + obj.makeJSONObject(selectedName, Config.maindirpath+"icons/"+selectedPath.replace(".IMG", ".png"), selectedPath, selectedExtra); + + try { + Writer output = null; + File jsonFile = new File(Config.maindirpath + selectedPath + ".json"); + output = new BufferedWriter(new FileWriter(jsonFile)); + output.write(obj.toString()); + output.close(); + Toast.makeText(getApplicationContext(), "Composition saved", Toast.LENGTH_LONG).show(); + + } catch (Exception e) { + UIUtils.toastLong(activity, e.toString()); + } + VectrasStatus.logInfo(String.format("Welcome to Vectras ♡")); + new Timer().schedule(new TimerTask() { + @Override + public void run() { + mProgressDialog.dismiss(); + activity.startActivity(new Intent(activity, MainActivity.class)); + } + }, 3000); + } else { + AlertDialog ad; + ad = new AlertDialog.Builder(activity, R.style.MainDialogTheme).create(); + ad.setTitle(selectedPath.replace(".IMG", ".vbi")+" Needs to import"); + ad.setMessage("press import button and select "+selectedPath.replace(".IMG", ".vbi")+" file."); + ad.setButton(Dialog.BUTTON_POSITIVE, "IMPORT", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + Intent chooseFile = new Intent(ACTION_OPEN_DOCUMENT); + // Ask specifically for something that can be opened: + chooseFile.addCategory(Intent.CATEGORY_OPENABLE); + chooseFile.setType("*/*"); + startActivityForResult( + Intent.createChooser(chooseFile, "Choose a file"), + 0 + ); + } + }); + ad.setButton(Dialog.BUTTON_NEGATIVE, "DOWNLAOD "+selectedPath.replace(".IMG", ".vbi"), new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + String gt = selectedLink; + Intent g = new Intent(Intent.ACTION_VIEW); + g.setData(Uri.parse(gt)); + FirstActivity.activity.startActivity(g); + FirstActivity.activity.finish(); + } + }); + ad.show(); + } + } else { + AlertDialog ad; + ad = new AlertDialog.Builder(activity, R.style.MainDialogTheme).create(); + ad.setTitle("Please Select"); + ad.setMessage("Select the os (operating system) you need."); + ad.setButton(Dialog.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + return; + } + }); + ad.show(); + } + } + public String getPath(Uri uri) { + return FileUtils.getPath(activity, uri); + } + public ProgressDialog progressDialog =null; + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == 0 && resultCode == RESULT_OK){ + Uri content_describer = data.getData(); + + String selectedFilePath = getPath(content_describer); + if (selectedFilePath.endsWith(".vbi")) { + + try { + unzip(selectedFilePath, Config.maindirpath); + } catch (IOException e) { + progressDialog.dismiss(); // Close Progress Dialog + UIUtils.toastLong(activity, e.toString()); + throw new RuntimeException(e); + } + + } else { + MainActivity.UIAlert("File not supported", "please use vailed '.vbi' file to continue.", activity); + } + + } + } + + public void unzip(String _zipFile, String _location) throws IOException { + progressDialog = new ProgressDialog(activity, + R.style.MainDialogTheme); + progressDialog.setMessage("Please wait..."); + progressDialog.setCancelable(false); + progressDialog.show(); // Showing Progress Dialog + Thread t = new Thread() { + public void run() { + File zipFile = new File(_zipFile); + File targetDirectory = new File(_location); + ZipInputStream zis = null; + try { + zis = new ZipInputStream( + new BufferedInputStream(new FileInputStream(zipFile))); + } catch (FileNotFoundException e) { + UIUtils.toastLong(activity, e.toString()); + throw new RuntimeException(e); + } + try { + ZipEntry ze; + int count; + byte[] buffer = new byte[8192]; + while ((ze = zis.getNextEntry()) != null) { + File file = new File(targetDirectory, ze.getName()); + File dir = ze.isDirectory() ? file : file.getParentFile(); + if (!dir.isDirectory() && !dir.mkdirs()) + throw new FileNotFoundException("Failed to ensure directory: " + + dir.getAbsolutePath()); + if (ze.isDirectory()) + continue; + FileOutputStream fout = new FileOutputStream(file); + try { + while ((count = zis.read(buffer)) != -1) + fout.write(buffer, 0, count); + } finally { + fout.close(); + } + /* if time should be restored as well + long time = ze.getTime(); + if (time > 0) + file.setLastModified(time); + */ + } + } catch (FileNotFoundException e) { + UIUtils.toastLong(activity, e.toString()); + throw new RuntimeException(e); + } catch (IOException e) { + UIUtils.toastLong(activity, e.toString()); + throw new RuntimeException(e); + } finally { + progressDialog.cancel(); // cancelling Dialog. + + try { + zis.close(); + } catch (IOException e) { + UIUtils.toastLong(activity, e.toString()); + throw new RuntimeException(e); + } + } + } + }; + t.start(); + } + + public static final int DIALOG_DOWNLOAD_PROGRESS = 0; + class DownloadIconAsync extends AsyncTask { + + @Override + protected void onPreExecute() { + super.onPreExecute(); + showDialog(DIALOG_DOWNLOAD_PROGRESS); + } + + @Override + protected String doInBackground(String... aurl) { + int count; + + try { + URL url = new URL(aurl[0]); + URLConnection conexion = url.openConnection(); + conexion.connect(); + + int lenghtOfFile = conexion.getContentLength(); + String fileName = URLUtil.guessFileName(selectedIcon,null,null); + InputStream input = new BufferedInputStream(url.openStream()); + OutputStream output = new FileOutputStream(Config.maindirpath+"icons/"+selectedPath.replace(".IMG", ".png")); + + byte data[] = new byte[1024]; + + long total = 0; + + while ((count = input.read(data)) != -1) { + total += count; + publishProgress("" + (int) ((total * 100) / lenghtOfFile)); + output.write(data, 0, count); + } + + output.flush(); + output.close(); + input.close(); + } catch (Exception e) { + } + return null; + + } + + protected void onProgressUpdate(String... progress) { + + } + + @Override + protected void onPostExecute(String unused) { + + } + } + + @Override + public void onBackPressed() { + super.onBackPressed(); + finish(); + } + +} diff --git a/app/src/main/java/com/epicstudios/vectras/Fragment/ControlsFragment.java b/app/src/main/java/com/epicstudios/vectras/Fragment/ControlsFragment.java new file mode 100644 index 0000000..e6088b9 --- /dev/null +++ b/app/src/main/java/com/epicstudios/vectras/Fragment/ControlsFragment.java @@ -0,0 +1,475 @@ +package com.epicstudios.vectras.Fragment; + +import android.app.ActivityManager; +import android.content.Context; +import android.os.Bundle; +import android.util.Log; +import android.view.InputDevice; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.view.inputmethod.InputMethodManager; +import android.view.inputmethod.BaseInputConnection; +import android.widget.LinearLayout; +import android.widget.TextView; + +import androidx.appcompat.widget.Toolbar; +import androidx.fragment.app.Fragment; +import com.epicstudios.vectras.R; +import com.epicstudios.vectras.Config; +import com.epicstudios.vectras.VectrasSDLActivity; +import com.epicstudios.vectras.widgets.JoystickView; +import com.epicstudios.vectras.utils.KeyboardUtils; +import com.epicstudios.vectras.utils.UIUtils; +import android.view.View.OnClickListener; +import java.util.Timer; +import java.util.TimerTask; +import org.libsdl.app.SDLActivity; +import org.libsdl.app.SDLSurface; + +public class ControlsFragment extends Fragment { + + View view; + + private Timer _timer = new Timer(); + private TimerTask t; + + public static LinearLayout escBtn, enterBtn, shiftBtn, delBtn, gamepadLayout, desktopLayout, BtnUp, BtnDown, + BtnRight, BtnLeft, BtnF, BtnShift, Btn0, BtnSpace, BtnSettings, kbdBtn, BtnMode, BtnHide; + + public static TextView txtCpu, txtMem, txtDev, TxtHide; + + public static LinearLayout F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12; + + public static LinearLayout rightClick, leftClick; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + // TODO Auto-generated method stub + view = inflater.inflate(R.layout.controls_fragment, container, false); + gamepadLayout = view.findViewById(R.id.gamepadLayout); + desktopLayout = view.findViewById(R.id.desktopLayout); + BtnUp = view.findViewById(R.id.upBtn); + BtnDown = view.findViewById(R.id.downBtn); + BtnRight = view.findViewById(R.id.rightBtn); + BtnLeft = view.findViewById(R.id.leftBtn); + BtnF = view.findViewById(R.id.BtnF); + BtnShift = view.findViewById(R.id.BtnShift); + BtnSpace = view.findViewById(R.id.BtnSpace); + Btn0 = view.findViewById(R.id.Btn0); + escBtn = view.findViewById(R.id.escBtn); + enterBtn = view.findViewById(R.id.enterBtn); + shiftBtn = view.findViewById(R.id.shiftBtn); + delBtn = view.findViewById(R.id.delBtn); + BtnSettings = view.findViewById(R.id.settingsBtn); + BtnMode = view.findViewById(R.id.modeBtn); + BtnHide = view.findViewById(R.id.hideBtn); + TxtHide = view.findViewById(R.id.hideTxt); + kbdBtn = view.findViewById(R.id.kbdBtn); + txtCpu = view.findViewById(R.id.cpuTxt); + txtMem = view.findViewById(R.id.ramTxt); + txtDev = view.findViewById(R.id.dvcTxt); + + F1 = view.findViewById(R.id.F1); + F2 = view.findViewById(R.id.F2); + F3 = view.findViewById(R.id.F3); + F4 = view.findViewById(R.id.F4); + F5 = view.findViewById(R.id.F5); + F6 = view.findViewById(R.id.F6); + F7 = view.findViewById(R.id.F7); + F8 = view.findViewById(R.id.F8); + F9 = view.findViewById(R.id.F9); + F10 = view.findViewById(R.id.F10); + F11 = view.findViewById(R.id.F11); + F12 = view.findViewById(R.id.F12); + + rightClick = view.findViewById(R.id.rightClick); + leftClick = view.findViewById(R.id.leftClick); + + txtDev.setText("Device Model: " + android.os.Build.MODEL); + + t = new TimerTask() { + @Override + public void run() { + VectrasSDLActivity.activity.runOnUiThread(new Runnable() { + @Override + public void run() { + //update + ActivityManager.MemoryInfo miI = new ActivityManager.MemoryInfo(); + ActivityManager activityManagerr = (ActivityManager) VectrasSDLActivity.activity.getSystemService(VectrasSDLActivity.activity.ACTIVITY_SERVICE); + activityManagerr.getMemoryInfo(miI); + //update textview here + long freeMemory = miI.availMem / 1048576L; + long totalMemory = miI.totalMem / 1048576L; + long usedMemory = totalMemory - freeMemory; + + txtMem.setText("Free Memory: " + freeMemory + " MB"); + } + }); + } + }; + _timer.scheduleAtFixedRate(t, (int) (0), (int) (1000)); + + //txtMem.setVisibility(View.GONE); + txtCpu.setVisibility(View.GONE); + + if (gamepadLayout.getVisibility() != View.VISIBLE) { + gamepadLayout.setVisibility(View.VISIBLE); + desktopLayout.setVisibility(View.GONE); + } + + BtnUp.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View view) { + + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_DPAD_UP); + + } + }); + + BtnDown.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View view) { + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_DPAD_DOWN); + } + }); + + BtnLeft.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View view) { + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_DPAD_LEFT); + } + }); + + BtnRight.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View view) { + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT); + } + }); + + BtnF.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View view) { + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_F); + } + }); + + BtnShift.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View view) { + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_SHIFT_RIGHT); + } + }); + + Btn0.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View view) { + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_NUMPAD_0); + } + }); + + BtnSpace.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View view) { + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_SPACE); + } + }); + final Toolbar optionsTb = view.findViewById(R.id.toolbar); + optionsTb.setTitle(null); + optionsTb.inflateMenu(R.menu.sdl_menu); + + // and finally set click listener + optionsTb.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + int id = item.getItemId(); + if(id == R.id.shutdownItem) { + //VectrasSDLActivity.stopVM(VectrasSDLActivity.activity, false); + return true; + } else if (item.getItemId() == R.id.itemFitToScreen) { + //VectrasSDLActivity.setFitToScreen(); + } else if (item.getItemId() == R.id.itemStretchToScreen) { + //VectrasSDLActivity.setStretchToScreen(); + } else if (item.getItemId() == R.id.itemZoomIn) { + //VectrasSDLActivity.setZoomIn(); + } else if (item.getItemId() == R.id.itemZoomOut) { + //VectrasSDLActivity.setZoomOut(); + } else if (item.getItemId() == R.id.itemOneToOne) { + //VectrasSDLActivity.setOneToOne(); + } else if (item.getItemId() == R.id.itemZoomable) { + //VectrasSDLActivity.setZoomable(); + } + return false; + } + }); + setHasOptionsMenu(true); + int loop =25; + JoystickView joystick = (JoystickView) view.findViewById(R.id.joyStick); + joystick.setOnMoveListener(new JoystickView.OnMoveListener() { + @Override + public void onMove(int angle, int strength) { + // do whatever you want + if (angle > 0) { + if (angle < 30) { + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT); + } else if (angle > 30) { + if (angle < 60) { + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_DPAD_UP_RIGHT); + } else if (angle > 60) { + if (angle < 120) { + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_DPAD_UP); + } else if (angle > 120) { + if (angle < 150) { + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_DPAD_UP_LEFT); + } else if (angle > 150) { + if (angle < 210) { + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_DPAD_LEFT); + } else if (angle > 210) { + if (angle < 240) { + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_DPAD_DOWN_LEFT); + } else if (angle > 240) { + if (angle < 300) { + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_DPAD_DOWN); + } else if (angle > 300) { + if (angle < 330) { + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_DPAD_DOWN_RIGHT); + } else if (angle > 330) { + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT); + } + } + } + } + } + } + } + } + } + } + }, loop); + BtnMode.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View view) { + if (gamepadLayout.getVisibility() != View.VISIBLE) { + gamepadLayout.setVisibility(View.VISIBLE); + desktopLayout.setVisibility(View.GONE); + } else { + gamepadLayout.setVisibility(View.GONE); + desktopLayout.setVisibility(View.VISIBLE); + } + } + }); + BtnHide.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View view) { + if (gamepadLayout.getVisibility() == View.GONE && desktopLayout.getVisibility() == View.GONE) { + gamepadLayout.setVisibility(View.VISIBLE); + desktopLayout.setVisibility(View.GONE); + TxtHide.setText("Hide"); + } else { + gamepadLayout.setVisibility(View.GONE); + desktopLayout.setVisibility(View.GONE); + TxtHide.setText("Show"); + } + } + }); + BtnSettings.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View view) { + + } + }); + + kbdBtn.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View view) { + InputMethodManager imm = (InputMethodManager) VectrasSDLActivity.activity.getSystemService(Context.INPUT_METHOD_SERVICE); + imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); + //VectrasSDLActivity.onKeyboard(SDLActivity.activity); + } + }); + + //desktop layout + escBtn.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View view) { + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_ESCAPE); + } + }); + + enterBtn.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View view) { + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_ENTER); + } + }); + + shiftBtn.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View view) { + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_SHIFT_RIGHT); + } + }); + + delBtn.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View view) { + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_DEL); + } + }); + + F1.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View view) { + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_F1); + } + }); + + F2.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View view) { + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_F2); + } + }); + + F3.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View view) { + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_F3); + } + }); + + F4.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View view) { + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_F4); + } + }); + + F5.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View view) { + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_F5); + } + }); + + F6.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View view) { + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_F6); + } + }); + + F7.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View view) { + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_F7); + } + }); + + F8.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View view) { + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_F8); + } + }); + + F9.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View view) { + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_F9); + } + }); + + F10.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View view) { + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_F10); + } + }); + + F11.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View view) { + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_F11); + } + }); + + F12.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View view) { + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_F12); + } + }); + + rightClick.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View view) { + MotionEvent e = MotionEvent.obtain(1000, 1000, MotionEvent.ACTION_DOWN, 0, 0, 0, 0, 0, 0, 0, + InputDevice.SOURCE_TOUCHSCREEN, 0); + SDLSurface.rightClick(e); + } + }); + + leftClick.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View view) { + MotionEvent e = MotionEvent.obtain(1000, 1000, MotionEvent.ACTION_DOWN, 0, 0, 0, 0, 0, 0, 0, + InputDevice.SOURCE_TOUCHSCREEN, 0); + SDLSurface.leftClick(e); + } + }); + return view; + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + // Do something that differs the Activity's menu here + inflater.inflate(R.menu.sdl_menu, menu); + super.onCreateOptionsMenu(menu, inflater); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + int id = item.getItemId(); + if (id == R.id.shutdownItem) { + VectrasSDLActivity.stop(); + } + return super.onOptionsItemSelected(item); + } +} diff --git a/app/src/main/java/com/epicstudios/vectras/Fragment/HomeFragment.java b/app/src/main/java/com/epicstudios/vectras/Fragment/HomeFragment.java new file mode 100644 index 0000000..36d1ac3 --- /dev/null +++ b/app/src/main/java/com/epicstudios/vectras/Fragment/HomeFragment.java @@ -0,0 +1,216 @@ +package com.epicstudios.vectras.Fragment; + +import android.app.ProgressDialog; +import android.content.Context; +import android.net.ConnectivityManager; +import android.net.Network; +import android.net.NetworkInfo; +import android.os.AsyncTask; +import android.net.NetworkRequest; +import android.os.Bundle; +import android.telephony.NetworkScanRequest; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.LinearLayout; +import android.widget.Toast; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; +import com.epicstudios.vectras.R; +import com.epicstudios.vectras.Blog.AdapterBlog; +import com.epicstudios.vectras.Blog.DataBlog; +import com.epicstudios.vectras.Config; +import com.epicstudios.vectras.MainActivity; +import com.epicstudios.vectras.utils.UIUtils; +import java.io.BufferedReader; +import java.io.IOException; +import java.net.HttpURLConnection; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.io.InputStreamReader; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; +import java.util.List; +import javax.net.ssl.HttpsURLConnection; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +public class HomeFragment extends Fragment { + + View view; + + private RecyclerView mRVBlog; + private AdapterBlog mAdapter; + public MainActivity activity; + public String Data; + public static LinearLayout noConnectionLayout; + public SwipeRefreshLayout pullToRefresh; + + /*private ImageButton mStop; + private ImageButton mRestart;*/ + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + // TODO Auto-generated method stub + + activity = MainActivity.activity; + + view = inflater.inflate(R.layout.home_fragment, container, false); + + noConnectionLayout = view.findViewById(R.id.noConnectionLayout); + mRVBlog = view.findViewById(R.id.blogRv); + + if (checkConnection(activity)) { + new AsyncLogin().execute(); + noConnectionLayout.setVisibility(View.GONE); + //mRVBlog.setVisibility(View.VISIBLE); + } else { + noConnectionLayout.setVisibility(View.VISIBLE); + //mRVBlog.setVisibility(View.GONE); + } + + pullToRefresh = view.findViewById(R.id.refreshLayout); + pullToRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { + @Override + public void onRefresh() { + if (checkConnection(activity)) { + new AsyncLogin().execute(); + } else { + noConnectionLayout.setVisibility(View.VISIBLE); + pullToRefresh.setRefreshing(false); + } + } + }); + + /*mStop = (ImageButton) view.findViewById(R.id.stopvm); + mStop.setOnClickListener(new View.OnClickListener() { + public void onClick(View view) { + MainActivity.onStopButton(false); + + } + }); + + mRestart = (ImageButton) view.findViewById(R.id.restartvm); + mRestart.setOnClickListener(new View.OnClickListener() { + public void onClick(View view) { + + MainActivity.onRestartButton(); + + } + });*/ + + return view; + } + + /** + * CHECK WHETHER INTERNET CONNECTION IS AVAILABLE OR NOT + */ + public boolean checkConnection(Context context) { + final ConnectivityManager connMgr = (ConnectivityManager) context + .getSystemService(Context.CONNECTIVITY_SERVICE); + + if (connMgr != null) { + NetworkInfo activeNetworkInfo = connMgr.getActiveNetworkInfo(); + + if (activeNetworkInfo != null) { // connected to the internet + // connected to the mobile provider's data plan + if (activeNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI) { + // connected to wifi + return true; + } else + return activeNetworkInfo.getType() == ConnectivityManager.TYPE_MOBILE; + } + } + return false; + } + + private class AsyncLogin extends AsyncTask { + + @Override + protected void onPreExecute() { + super.onPreExecute(); + + //this method will be running on UI thread + + } + + @Override + protected String doInBackground(String... params) { + HttpsURLConnection con = null; + try { + URL u = new URL(Config.blogJson); + con = (HttpsURLConnection) u.openConnection(); + + con.connect(); + + BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream())); + StringBuilder sb = new StringBuilder(); + String line; + while ((line = br.readLine()) != null) { + sb.append(line + "\n"); + } + br.close(); + Data = sb.toString(); + + return (Data); + + } catch (MalformedURLException ex) { + ex.printStackTrace(); + } catch (IOException ex) { + ex.printStackTrace(); + } finally { + if (con != null) { + try { + con.disconnect(); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + return ("unsuccessful!"); + } + + } + + @Override + protected void onPostExecute(String result) { + + //this method will be running on UI thread + pullToRefresh.setRefreshing(false); + + noConnectionLayout.setVisibility(View.GONE); + + List data = new ArrayList<>(); + + try { + + JSONArray jArray = new JSONArray(Data); + + // Extract data from json and store into ArrayList as class objects + for (int i = 0; i < jArray.length(); i++) { + JSONObject json_data = jArray.getJSONObject(i); + DataBlog postData = new DataBlog(); + postData.postThumb = json_data.getString("post_thumb"); + postData.postTitle = json_data.getString("post_title"); + postData.postContent = json_data.getString("post_content"); + postData.postDate = json_data.getString("post_date"); + data.add(postData); + } + + // Setup and Handover data to recyclerview + + } catch (JSONException e) { + Toast.makeText(activity, e.toString(), Toast.LENGTH_LONG).show(); + } + mRVBlog = (RecyclerView) view.findViewById(R.id.blogRv); + mAdapter = new AdapterBlog(activity, data); + mRVBlog.setAdapter(mAdapter); + mRVBlog.setLayoutManager(new LinearLayoutManager(activity)); + + } + + } +} diff --git a/app/src/main/java/com/epicstudios/vectras/Fragment/LoggerFragment.java b/app/src/main/java/com/epicstudios/vectras/Fragment/LoggerFragment.java new file mode 100644 index 0000000..3bbd567 --- /dev/null +++ b/app/src/main/java/com/epicstudios/vectras/Fragment/LoggerFragment.java @@ -0,0 +1,57 @@ +package com.epicstudios.vectras.Fragment; + +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.text.Editable; +import android.text.TextWatcher; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemSelectedListener; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.CompoundButton; +import android.widget.EditText; +import android.widget.Spinner; +import android.widget.Switch; +import android.widget.TextView; +import android.widget.Toast; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import com.epicstudios.vectras.R; +import com.epicstudios.vectras.FirstActivity; +import com.epicstudios.vectras.MainActivity; +import com.epicstudios.vectras.adapter.LogsAdapter; +import com.epicstudios.vectras.utils.UIUtils; +import com.google.android.material.button.MaterialButton; +import com.google.android.material.snackbar.Snackbar; +import com.google.android.material.textfield.TextInputEditText; +import com.google.android.material.textfield.TextInputLayout; + +public class LoggerFragment extends Fragment { + + View view; + MainActivity activity = MainActivity.activity; + private final String CREDENTIAL_SHARED_PREF = "settings_prefs"; + private LogsAdapter mLogAdapter; + private RecyclerView logList; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + // TODO Auto-generated method stub + + view = inflater.inflate(R.layout.fragment_logs, container, false); + LinearLayoutManager layoutManager = new LinearLayoutManager(MainActivity.activity); + mLogAdapter = new LogsAdapter(layoutManager, MainActivity.activity); + logList = (RecyclerView) view.findViewById(R.id.recyclerLog); + logList.setAdapter(mLogAdapter); + logList.setLayoutManager(layoutManager); + mLogAdapter.scrollToLastPosition(); + return view; + } + +} diff --git a/app/src/main/java/com/epicstudios/vectras/Fragment/SettingsFragment.java b/app/src/main/java/com/epicstudios/vectras/Fragment/SettingsFragment.java new file mode 100644 index 0000000..772c585 --- /dev/null +++ b/app/src/main/java/com/epicstudios/vectras/Fragment/SettingsFragment.java @@ -0,0 +1,46 @@ +package com.epicstudios.vectras.Fragment; + +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.text.Editable; +import android.text.TextWatcher; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemSelectedListener; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.CompoundButton; +import android.widget.EditText; +import android.widget.Spinner; +import android.widget.Switch; +import android.widget.TextView; +import android.widget.Toast; +import androidx.fragment.app.Fragment; +import com.epicstudios.vectras.R; +import com.epicstudios.vectras.FirstActivity; +import com.epicstudios.vectras.MainActivity; +import com.epicstudios.vectras.utils.UIUtils; +import com.google.android.material.button.MaterialButton; +import com.google.android.material.snackbar.Snackbar; +import com.google.android.material.textfield.TextInputEditText; +import com.google.android.material.textfield.TextInputLayout; + +public class SettingsFragment extends Fragment { + + View view; + MainActivity activity = MainActivity.activity; + private final String CREDENTIAL_SHARED_PREF = "settings_prefs"; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + // TODO Auto-generated method stub + + view = inflater.inflate(R.layout.settings_fragment, container, false); + + return view; + } +} diff --git a/app/src/main/java/com/epicstudios/vectras/ImagePrvActivity.java b/app/src/main/java/com/epicstudios/vectras/ImagePrvActivity.java new file mode 100644 index 0000000..7c0ef91 --- /dev/null +++ b/app/src/main/java/com/epicstudios/vectras/ImagePrvActivity.java @@ -0,0 +1,22 @@ +package com.epicstudios.vectras; + +import android.os.Bundle; +import android.widget.ImageView; + +import androidx.appcompat.app.AppCompatActivity; + +import com.bumptech.glide.Glide; +import com.epicstudios.vectras.R; + +public class ImagePrvActivity extends AppCompatActivity { + public static String linkIv; + public ImageView ivPrv; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.iv_prv); + ivPrv = findViewById(R.id.ivPrv); + Glide.with(this).load(linkIv).into(ivPrv); + } +} diff --git a/app/src/main/java/com/epicstudios/vectras/MainActivity.java b/app/src/main/java/com/epicstudios/vectras/MainActivity.java new file mode 100644 index 0000000..ac44a86 --- /dev/null +++ b/app/src/main/java/com/epicstudios/vectras/MainActivity.java @@ -0,0 +1,876 @@ +package com.epicstudios.vectras; + +import static android.Manifest.permission.READ_EXTERNAL_STORAGE; +import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import static android.os.Build.VERSION.SDK_INT; + +import android.app.Activity; +import android.app.ActivityManager; +import android.app.Dialog; +import android.app.ProgressDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.net.Uri; +import android.os.AsyncTask; +import android.os.Build; +import android.os.Bundle; +import android.os.Environment; +import android.os.Handler; +import android.os.Looper; +import android.os.StrictMode; +import android.text.Html; +import android.util.AttributeSet; +import android.view.KeyEvent; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.ScrollView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.ActionBarDrawerToggle; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; +import androidx.coordinatorlayout.widget.CoordinatorLayout; +import androidx.core.content.ContextCompat; +import androidx.core.view.GravityCompat; +import androidx.drawerlayout.widget.DrawerLayout; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; +import androidx.viewpager.widget.ViewPager; +import com.epicstudios.vectras.R; +import com.epicstudios.vectras.jni.VMExecutor; +import com.epicstudios.vectras.Fragment.HomeFragment; +import com.epicstudios.vectras.Fragment.LoggerFragment; +import com.epicstudios.vectras.logger.VectrasStatus; +import com.epicstudios.vectras.utils.AppUpdater; +import com.epicstudios.vectras.utils.FileInstaller; +import com.epicstudios.vectras.utils.FileUtils; +import com.epicstudios.vectras.utils.RamInfo; +import com.epicstudios.vectras.utils.UIUtils; +import com.google.android.gms.ads.AdRequest; +import com.google.android.gms.ads.AdView; +import com.google.android.material.appbar.AppBarLayout; +import com.google.android.material.appbar.CollapsingToolbarLayout; +import com.google.android.material.bottomnavigation.BottomNavigationView; +import com.google.android.material.floatingactionbutton.FloatingActionButton; +import com.google.android.material.navigation.NavigationView; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.File; +import java.io.FileNotFoundException; +import java.net.InetAddress; +import java.net.NetworkInterface; +import java.net.SocketException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Enumeration; +import java.util.TimerTask; +import java.util.Timer; + +//import com.epicstudios.vectras.R; + +public class MainActivity extends AppCompatActivity { + private static Handler MAIN_HANDLER = new Handler(Looper.getMainLooper()); + public static final String TAG = "Vectras"; + // Static + public static final String CREDENTIAL_SHARED_PREF = "settings_prefs"; + + public static String[] params = null; + public static boolean vmStarted = false; + public static MainActivity activity = null; + public static VMExecutor vmexecutor; + public static String currStatus = "READY"; + static public ProgressDialog progDialog; + public static Handler OShandler; + private Handler mHandler; + private static Installer a; + private static String output; + public View parent; + public TextView mOutput; + public AutoScrollView mLyricsScroll; + public DrawerLayout mainDrawer; + public CoordinatorLayout mainCoordinatorLayout; + public AppBarLayout mainAppBar; + public CollapsingToolbarLayout mainCtl; + public FloatingActionButton mainFab; + public Toolbar mainToolbar; + public static String strFree, strUsed, strTotal; + public static TextView totalRam; + public static TextView usedRam; + public static TextView freeRam; + public static TextView ipTxt; + public FloatingActionButton mStart; + private Timer _timer = new Timer(); + private TimerTask t; + public ViewPager viewPager; + MenuItem prevMenuItem; + int pager_number = 2; + public static File fileImg = new File(Config.basefiledir+"config_path.txt"); + public static String imgPath = FileUtils.readFromFile(activity, fileImg); + + //Widgets + private boolean timeQuit = false; + private Object lockTime = new Object(); + + public static void UIAlert(String title, String body, Activity activity) { + AlertDialog ad; + ad = new AlertDialog.Builder(activity, R.style.MainDialogTheme).create(); + ad.setTitle(title); + ad.setMessage(body); + ad.setButton(Dialog.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + return; + } + }); + ad.show(); + } + + public void FAB_Click(View v) { + Thread thread = new Thread(new Runnable() { + public void run() { + MainActivity.onStartButton(); + } + }); + thread.setPriority(Thread.MIN_PRIORITY); + thread.start(); + } + + public static void quit() { + activity.finish(); + } + + public static void install() { + progDialog = ProgressDialog.show(activity, "Please Wait", "Installing Files...", true); + a = new Installer(); + a.execute(); + } + + public static void onInstall() { + FileInstaller.installFiles(activity); + } + + // This is easier: traverse the interfaces and get the local IPs + public static String getLocalIpAddress() { + try { + for (Enumeration en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { + NetworkInterface intf = en.nextElement(); + for (Enumeration enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { + InetAddress inetAddress = enumIpAddr.nextElement(); + if (!inetAddress.isLoopbackAddress() && inetAddress.getHostAddress().toString().contains(".")) { + return inetAddress.getHostAddress().toString(); + } + } + } + } catch (SocketException ex) { + ex.printStackTrace(); + } + return null; + } + + // Start calling the JNI interface + public static void startvm(Activity activity) { + vmexecutor.startvm(activity); + + } + + /** + * Called when the activity is first created. + */ + @Override + public void onCreate(Bundle savedInstanceState) { + + super.onCreate(savedInstanceState); + NotificationManager notificationManager = (NotificationManager) getApplicationContext() + .getSystemService(Context.NOTIFICATION_SERVICE); + notificationManager.cancelAll(); + try { + prepareParams(); + } catch (Exception ex) { + //UIUtils.toastLong(this, ex.getMessage()); + } + + setupStrictMode(); + activity = this; + this.setContentView(R.layout.main); + this.setupWidgets(); + execTimeListener(); + initNavigationMenu(); + updateApp(true); + + mHandler = new Handler(); + + setupNativeLibs(); + } + public static PackageInfo getAppInfo(Context context){ + try { + return context.getPackageManager().getPackageInfo(context.getPackageName(), 0); + } catch (PackageManager.NameNotFoundException e) { + throw new RuntimeException(e); + } + } + public void updateApp(final boolean showDialog) { + new AppUpdater(this, new AppUpdater.OnUpdateListener() { + @Override + public void onUpdateListener(String result) { + try { + if (!result.contains("Error on getting data")) { + final JSONObject obj = new JSONObject(result); + PackageInfo pinfo = getAppInfo(getApplicationContext()); + int versionCode = pinfo.versionCode; + if (versionCode < obj.getInt("versionCode")) { + AlertDialog.Builder alert = new AlertDialog.Builder(activity, R.style.MainDialogTheme); + alert.setTitle("Install the latest version") + .setMessage(Html.fromHtml(obj.getString("Message") + "

update size:
" + obj.getString("size"))) + .setCancelable(obj.getBoolean("cancellable")) + .setNegativeButton("Update", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + try { + startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(obj.getString("url")))); + } catch (JSONException e) { + + } + } + }).show(); + + } + } else if(result.contains("Error on getting data") && showDialog){ + errorUpdateDialog(result); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + }).start(showDialog); + } + + private void errorUpdateDialog(String error) { + VectrasStatus.logInfo(String.format(error)); + } + + private MenuItem vectrasInfo; + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.home_toolbar_menu, menu); + vectrasInfo = menu.findItem(R.id.vectrasInfo); + return true; + + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + + // Menu items + int id = item.getItemId(); + if (id == R.id.vectrasInfo) { + AppBarLayout nnl_appbar = findViewById(R.id.nnl_appbar); + if (nnl_appbar.getTop() < 0) + nnl_appbar.setExpanded(true); + else + nnl_appbar.setExpanded(false); + + } + + return super.onOptionsItemSelected(item); + } + + private void initNavigationMenu() { + BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottom_navigation_view); + + bottomNavigationView + .setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { + @Override + public boolean onNavigationItemSelected(@NonNull MenuItem item) { + int id = item.getItemId(); + if (id == R.id.menu_home) { + viewPager.setCurrentItem(0); + } else if (id == R.id.menu_logger) { + viewPager.setCurrentItem(1); + } + return false; + } + }); + } + + public class MyAdapter extends FragmentPagerAdapter { + + MyAdapter(FragmentManager fm) { + super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT); + } + + @Override + public Fragment getItem(int position) { + + switch (position) { + case 0: + return new HomeFragment(); + case 1: + return new LoggerFragment(); + } + return null; + } + + @Override + public int getCount() { + return pager_number; + } + } + + public void setupNativeLibs() { + //Glib + System.loadLibrary("glib-2.0"); + System.loadLibrary("gthread-2.0"); + System.loadLibrary("gobject-2.0"); + System.loadLibrary("gmodule-2.0"); + + //Pixman for qemu + System.loadLibrary("pixman"); + + // //Load SDL libraries + System.loadLibrary("SDL2"); + System.loadLibrary("SDL2_image"); + + // System.loadLibrary("mikmod"); + System.loadLibrary("SDL2_mixer"); + // System.loadLibrary("SDL_ttf"); + + //main for SDL + System.loadLibrary("main"); + + //Limbo needed for vmexecutor + System.loadLibrary("vectras"); + + System.loadLibrary("qemu-system-x86_64"); + } + + public void checkUpdate() { + + } + + private void setupStrictMode() { + + if (Config.debug) { + StrictMode.setThreadPolicy( + new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork() + //.penaltyDeath() + .penaltyLog().build()); + StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects() + .detectLeakedClosableObjects().penaltyLog() + // .penaltyDeath() + .build()); + } + + } + + public void cleanup() { + MainActivity.vmexecutor = null; + + } + + public void exit() { + onStopButton(true); + } + + // Main event function + // Retrives values from saved preferences + public static void onStartButton() { + + if (vmexecutor == null) { + + try { + vmexecutor = new VMExecutor(activity); + } catch (Exception ex) { + UIUtils.toastLong(activity, "Error: " + ex); + return; + + } + } + + output = "Starting VM..."; + VectrasStatus.logInfo(String.format("Starting VM...")); + VectrasStatus.logInfo(String.format(imgPath)); + vmexecutor.paused = 0; + startSDL(); + + if (vmStarted) { + //do nothing + } else if (vmexecutor.paused == 1) { + vmStarted = true; + } + + } + + public static void startSDL() { + + Thread tsdl = new Thread(new Runnable() { + public void run() { + startsdl(); + } + }); + tsdl.setPriority(Thread.MAX_PRIORITY); + tsdl.start(); + } + + public static void onStopButton(boolean exit) { + stopVM(exit); + } + + public static void onRestartButton() { + + new AlertDialog.Builder(activity).setTitle("Reset VM") + .setMessage("VM will be reset and you may lose data. Continue?") + .setPositiveButton("Yes", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + if (MainActivity.vmexecutor != null) { + Thread t = new Thread(new Runnable() { + public void run() { + restartvm(); + } + }); + t.start(); + } else if (activity.getParent() != null) { + activity.getParent().finish(); + } else { + activity.finish(); + } + } + }).setNegativeButton("No", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + } + }).show(); + + } + + public static void onResumeButton() { + + // TODO: This probably has no effect + Thread t = new Thread(new Runnable() { + public void run() { + resumevm(); + } + }); + t.start(); + } + + public void prepareParams() throws FileNotFoundException { + String libqemu = null; + libqemu = FileUtils.getDataDir() + "/lib/libqemu-system-x86_64.so"; + + SharedPreferences credentials = activity.getSharedPreferences(CREDENTIAL_SHARED_PREF, Context.MODE_PRIVATE); + + params = null; + ArrayList paramsList = new ArrayList(); + + paramsList.add(libqemu); + + paramsList.add("-L"); + paramsList.add(Config.basefiledir); + + if (FileUtils.fileValid(activity, imgPath)) { + paramsList.add("-hda"); + paramsList.add(imgPath); + } else { + UIUtils.toastLong(activity, "please set the correct downloaded os"); + startActivity(new Intent(activity, FirstActivity.class)); + return; + } + + paramsList.add("-boot"); + paramsList.add("c"); +/* + paramsList.add("-drive"); + String driveParams = "index=3"; + driveParams += ",media=disk"; + driveParams += ",if=ide"; + driveParams += ",format=raw"; + driveParams += ",file=fat:"; + driveParams += "rw:"; + driveParams += Config.sharedFolder; + paramsList.add(driveParams); +*/ + params = (String[]) paramsList.toArray(new String[paramsList.size()]); + + } + + // Setting up the UI + public void setupWidgets() { + viewPager = findViewById(R.id.viewPager); + viewPager.setAdapter(new MyAdapter(getSupportFragmentManager())); + viewPager.setOffscreenPageLimit(pager_number); + final BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottom_navigation_view); + viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + } + + @Override + public void onPageSelected(int position) { + if (prevMenuItem != null) { + prevMenuItem.setChecked(false); + } else { + bottomNavigationView.getMenu().getItem(0).setChecked(false); + } + bottomNavigationView.getMenu().getItem(position).setChecked(true); + prevMenuItem = bottomNavigationView.getMenu().getItem(position); + } + + @Override + public void onPageScrollStateChanged(int state) { + + } + }); + + try { + prepareParams(); + } catch (Exception ex) { + //UIUtils.toastLong(this, ex.getMessage()); + } + AppBarLayout nnl_appbar = findViewById(R.id.nnl_appbar); + nnl_appbar.setExpanded(false); + mainToolbar = (Toolbar) findViewById(R.id.nnl_toolbar); + setSupportActionBar(mainToolbar); + mainDrawer = (DrawerLayout) findViewById(R.id.nnl_drawer_layout); + ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, mainDrawer, mainToolbar, + R.string.navigation_drawer_open, R.string.navigation_drawer_close); + mainDrawer.setDrawerListener(toggle); + toggle.syncState(); + + NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); + + //Setting Navigation View Item Selected Listener to handle the item click of the navigation menu + navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { + + // This method will trigger on item Click of navigation menu + @Override + public boolean onNavigationItemSelected(MenuItem menuItem) { + //Closing drawer on item click + mainDrawer.closeDrawers(); + + //Check to see which item was being clicked and perform appropriate action + int id = menuItem.getItemId(); + if (id == R.id.navigation_item_info){ + startActivity(new Intent(activity, AboutActivity.class)); + } else if (id == R.id.navigation_item_website){ + String tw = Config.vectrasWebsite; + Intent w = new Intent(Intent.ACTION_VIEW); + w.setData(Uri.parse(tw)); + startActivity(w); + } else if (id == R.id.navigation_item_store){ + startActivity(new Intent(activity, StoreActivity.class)); + } + return false; + } + }); + + ipTxt = findViewById(R.id.ipTxt); + + ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo(); + ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); + activityManager.getMemoryInfo(mi); + + long freeMem = mi.availMem / 1048576L; + long totalMem = mi.totalMem / 1048576L; + long usedMem = totalMem - freeMem; + int freeRamInt = safeLongToInt(freeMem); + int totalRamInt = safeLongToInt(totalMem); + ipTxt.setText("Local Ip Address: " + getLocalIpAddress()); + + SharedPreferences credentials = activity.getSharedPreferences(CREDENTIAL_SHARED_PREF, Context.MODE_PRIVATE); + + totalRam = findViewById(R.id.totalRam); + usedRam = findViewById(R.id.usedRam); + freeRam = findViewById(R.id.freeRam); + t = new TimerTask() { + @Override + public void run() { + runOnUiThread(new Runnable() { + @Override + public void run() { + //update + ActivityManager.MemoryInfo miI = new ActivityManager.MemoryInfo(); + ActivityManager activityManagerr = (ActivityManager) getSystemService(ACTIVITY_SERVICE); + activityManagerr.getMemoryInfo(miI); + //update textview here + long freeMemory = miI.availMem / 1048576L; + long totalMemory = miI.totalMem / 1048576L; + long usedMemory = totalMemory - freeMemory; + + totalRam.setText("Total Memory: " + totalMemory + " MB"); + usedRam.setText("Used Memory: " + usedMemory + " MB"); + freeRam.setText("Free Memory: " + freeMemory + " MB"); + } + }); + } + }; + _timer.scheduleAtFixedRate(t, (int) (0), (int) (1000)); + + mStart = (FloatingActionButton) findViewById(R.id.nnl_fab); + mStart.setOnClickListener(new View.OnClickListener() { + public void onClick(View view) { + + FAB_Click(view); + + } + }); + AdView mAdView = findViewById(R.id.adView); + AdRequest adRequest = new AdRequest.Builder().build(); + mAdView.loadAd(adRequest); + UIAlert(getString(R.string.app_version), "This is only the first beta version of Vectras. Please note that the application is still in the experimental stage so that it is available in the best condition. Do not be lazy and support the application with your opinion.", activity); + //File extra = new File(Config.basefiledir+"config_extra.txt"); + //String extraParams = FileUtils.readFromFile(MainActivity.activity, extra); + + //UIAlert("Args", imgPath+"\n\n"+vectrasMem, activity); + } + + public static int safeLongToInt(long l) { + if (l < Integer.MIN_VALUE || l > Integer.MAX_VALUE) { + throw new IllegalArgumentException(l + " cannot be cast to int without changing its value."); + } + return (int) l; + } + + @Override + public void onBackPressed() { + DrawerLayout drawer = (DrawerLayout) findViewById(R.id.nnl_drawer_layout); + if (drawer.isDrawerOpen(GravityCompat.START)) { + drawer.closeDrawer(GravityCompat.START); + } else { + super.onBackPressed(); + } + } + + public boolean onKeyDown(int keyCode, KeyEvent event) { + + if (keyCode == KeyEvent.KEYCODE_BACK) { + moveTaskToBack(true); + return true; // return + } + + return false; + } + + @Override + public void onStop() { + super.onStop(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + this.stopTimeListener(); + + } + + public static void startsdl() { + + Intent intent = null; + + intent = new Intent(activity, VectrasSDLActivity.class); + + android.content.ContentValues values = new android.content.ContentValues(); + activity.startActivityForResult(intent, Config.SDL_REQUEST_CODE); + } + + public static void restartvm() { + if (vmexecutor != null) { + + output = vmexecutor.stopvm(1); + vmStarted = true; + + } else { + + } + + } + + public void savevm(String name) { + + } + + public static void resumevm() { + if (vmexecutor != null) { + output = vmexecutor.resumevm(); + + } else { + + } + + } + + public void onViewLog() { + + } + + private void goToURL(String url) { + + Intent i = new Intent(Intent.ACTION_VIEW); + i.setData(Uri.parse(url)); + activity.startActivity(i); + + } + + public static void stopVM(boolean exit) { + + new AlertDialog.Builder(activity).setTitle("Shutdown VM") + .setMessage("To avoid any corrupt data make sure you " + + "have already shutdown the Operating system from within the VM. Continue?") + .setPositiveButton("Yes", new DialogInterface.OnClickListener() { + + public void onClick(DialogInterface dialog, int which) { + if (MainActivity.vmexecutor != null) { + MainActivity.vmexecutor.stopvm(0); + VectrasStatus.logInfo(String.format("VMStopped")); + } else if (activity.getParent() != null) { + activity.getParent().finish(); + } else { + activity.finish(); + } + } + }).setNegativeButton("No", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + } + }).show(); + } + + public void saveSnapshotDB(String snapshot_name) { + + } + + public void saveStateVMDB() { + + } + + public void stopTimeListener() { + + synchronized (this.lockTime) { + this.timeQuit = true; + this.lockTime.notifyAll(); + } + } + + public void onPause() { + super.onPause(); + } + + public void onResume() { + + super.onResume(); + + } + + public void timeListener() { + while (timeQuit != true) { + if (vmexecutor != null) { + String status = checkStatus(); + if (!status.equals(currStatus)) { + currStatus = status; + + } + } + + try { + Thread.sleep(1000); + } catch (InterruptedException ex) { + ex.printStackTrace(); + } + } + + } + + void execTimeListener() { + + Thread t = new Thread(new Runnable() { + public void run() { + startTimeListener(); + } + }); + t.start(); + } + + public void startTimeListener() { + this.stopTimeListener(); + + timeQuit = false; + try { + + timeListener(); + synchronized (lockTime) { + while (timeQuit == false) { + lockTime.wait(); + } + lockTime.notifyAll(); + } + } catch (Exception ex) { + ex.printStackTrace(); + + } + + } + + private String checkStatus() { + String state = "READY"; + if (vmexecutor != null && vmexecutor.libLoaded && vmexecutor.get_state().equals("RUNNING")) { + state = "RUNNING"; + } else if (vmexecutor != null) { + //String save_state = vmexecutor.get_save_state(); + String pause_state = vmexecutor.get_pause_state(); + + // Shutdown if paused done + if (pause_state.equals("SAVING")) { + return pause_state; + } else if (pause_state.equals("DONE")) { + if (MainActivity.vmexecutor != null) { + MainActivity.vmexecutor.stopvm(0); + } + + } else { + state = "READY"; + } + } else { + state = "READY"; + } + + return state; + } + + public static class Installer extends AsyncTask { + + @Override + protected Void doInBackground(Void... arg0) { + onInstall(); + if (progDialog.isShowing()) { + progDialog.dismiss(); + //activity.setupWidgets(); + } + return null; + } + + @Override + protected void onPostExecute(Void test) { + + } + } + + public class AutoScrollView extends ScrollView { + + public AutoScrollView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public AutoScrollView(Context context) { + super(context); + } + } +} diff --git a/app/src/main/java/com/epicstudios/vectras/PostActivity.java b/app/src/main/java/com/epicstudios/vectras/PostActivity.java new file mode 100644 index 0000000..2ea8b5e --- /dev/null +++ b/app/src/main/java/com/epicstudios/vectras/PostActivity.java @@ -0,0 +1,110 @@ +package com.epicstudios.vectras; + +import android.text.Html; +import android.util.Log; +import android.view.MenuItem; +import android.view.View; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.appcompat.widget.Toolbar; +import com.bumptech.glide.Glide; +import com.epicstudios.vectras.R; +import com.epicstudios.vectras.utils.UIUtils; + +import android.os.Bundle; +import androidx.appcompat.app.AppCompatActivity; +import android.widget.TextView; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; + +public class PostActivity extends AppCompatActivity { + + private Toolbar tb; + public static TextView postTitle; + public static TextView postContent; + public static TextView postDate; + public static ImageView postThumb; + public static String title, content, contentStr, date, thumb; + + /** + * Called when the activity is first created. + */ + @Override + public void onCreate(Bundle savedInstanceState) { + + super.onCreate(savedInstanceState); + this.setContentView(R.layout.post_content); + postTitle = findViewById(R.id.postTitle); + postContent = findViewById(R.id.postContent); + postDate = findViewById(R.id.postDate); + postThumb = findViewById(R.id.postThumb); + tb = (Toolbar) findViewById(R.id.nnl_toolbar); + setSupportActionBar(tb); + + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + getSupportActionBar().setDisplayShowHomeEnabled(true); + + postContent.setTextIsSelectable(true); + + Glide.with(this).load(thumb).into(postThumb); + new Thread(new Runnable(){ + + public void run(){ + + BufferedReader reader = null; + final StringBuilder builder = new StringBuilder(); + + try { + // Create a URL for the desired page + URL url = new URL(content); //My text file location + //First open the connection + HttpURLConnection conn=(HttpURLConnection) url.openConnection(); + conn.setConnectTimeout(60000); // timing out in a minute + + BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); + + //t=(TextView)findViewById(R.id.TextView1); // ideally do this in onCreate() + String str; + while ((str = in.readLine()) != null) { + builder.append(str); + } + in.close(); + } catch (Exception e) { + postContent.setText("no internet connection"); + UIUtils.toastLong(PostActivity.this, "check your internet connection"); + Log.d("VECTRAS",e.toString()); + } + + //since we are in background thread, to post results we have to go back to ui thread. do the following for that + + PostActivity.this.runOnUiThread(new Runnable(){ + public void run(){ + contentStr = builder.toString(); // My TextFile has 3 lines + postContent.setText(Html.fromHtml(contentStr)); + } + }); + + } + }).start(); + postDate.setText(date); + postTitle.setText(title); + } + @Override + public boolean onOptionsItemSelected(@NonNull MenuItem item) { + if(item.getItemId()== android.R.id.home){ + finish(); + } + return super.onOptionsItemSelected(item); + } + + @Override + public void onBackPressed() { + super.onBackPressed(); + finish(); + } + +} diff --git a/app/src/main/java/com/epicstudios/vectras/Roms/AdapterRoms.java b/app/src/main/java/com/epicstudios/vectras/Roms/AdapterRoms.java new file mode 100644 index 0000000..426083c --- /dev/null +++ b/app/src/main/java/com/epicstudios/vectras/Roms/AdapterRoms.java @@ -0,0 +1,148 @@ +package com.epicstudios.vectras.Roms; + +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.webkit.URLUtil; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.RadioButton; +import android.widget.TextView; +import androidx.appcompat.app.AlertDialog; +import androidx.cardview.widget.CardView; +import androidx.recyclerview.widget.RecyclerView; +import com.epicstudios.vectras.Config; +import com.bumptech.glide.Glide; +import com.epicstudios.vectras.FirstActivity; +import com.epicstudios.vectras.MainActivity; +import com.epicstudios.vectras.R; +import com.epicstudios.vectras.utils.FileUtils; +import java.util.Collections; +import java.util.List; +import androidx.appcompat.app.AlertDialog; +import android.content.DialogInterface; +import android.app.Dialog; + +public class AdapterRoms extends RecyclerView.Adapter { + + private Context context; + private LayoutInflater inflater; + List data = Collections.emptyList(); + DataRoms current; + int currentPos = 0; + private int mSelectedItem = -1; + + // create constructor to innitilize context and data sent from MainActivity + public AdapterRoms(Context context, List data) { + this.context = context; + inflater = LayoutInflater.from(context); + this.data = data; + } + + // Inflate the layout when viewholder created + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = inflater.inflate(R.layout.container_roms, parent, false); + MyHolder holder = new MyHolder(view); + return holder; + } + + // Bind data + @Override + public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { + + // Get current position of item in recyclerview to bind data and assign values from list + final MyHolder myHolder = (MyHolder) holder; + final DataRoms current = data.get(position); + + Glide.with(FirstActivity.activity).load(current.itemIcon).into(myHolder.ivIcon); + myHolder.textName.setText(current.itemName + " " + current.itemArch); + myHolder.textSize.setText(current.itemSize); + myHolder.checkBox.setChecked(position == mSelectedItem); + if (current.itemAvail) { + myHolder.textAvail.setText("availability: available"); + myHolder.textAvail.setTextColor(Color.GREEN); + } else if (!current.itemAvail) { + myHolder.textAvail.setText("availability: unavailable"); + myHolder.textAvail.setTextColor(Color.RED); + myHolder.checkBox.setEnabled(false); + myHolder.cdItem.setEnabled(false); + } + if (current.itemAvail) + myHolder.checkBox.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + mSelectedItem = position; + notifyItemRangeChanged(0, data.size()); + FirstActivity.selected = true; + FirstActivity.selectedPath = current.itemPath; + FirstActivity.selectedExtra = current.itemExtra; + FirstActivity.selectedName = current.itemName+" "+current.itemArch; + FirstActivity.selectedLink = current.itemUrl; + FirstActivity.selectedIcon = current.itemIcon; + } + }); + //Glide.with(MainActivity.activity).load(current.itemIcon).into(myHolder.ivIcon); + if (current.itemAvail) + myHolder.cdItem.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (FileUtils.fileValid(FirstActivity.activity, Config.maindirpath + current.itemPath)) { + mSelectedItem = position; + notifyItemRangeChanged(0, data.size()); + FirstActivity.selected = true; + FirstActivity.selectedPath = current.itemPath; + FirstActivity.selectedExtra = current.itemExtra; + } else { + AlertDialog ad; + ad = new AlertDialog.Builder(FirstActivity.activity, R.style.MainDialogTheme).create(); + ad.setTitle(current.itemName + " Not found"); + ad.setMessage(current.itemName + " Rom not found please download from our official website"); + ad.setButton(Dialog.BUTTON_POSITIVE, "DOWNLAOD WEBSITE", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + String gt = current.itemUrl; + Intent g = new Intent(Intent.ACTION_VIEW); + g.setData(Uri.parse(gt)); + FirstActivity.activity.startActivity(g); + FirstActivity.activity.finish(); + } + }); + } + } + }); + + } + + // return total item from List + @Override + public int getItemCount() { + return data.size(); + } + + class MyHolder extends RecyclerView.ViewHolder { + + CardView cdItem; + TextView textName, textAvail, textSize; + ImageView ivIcon; + + RadioButton checkBox; + + // create constructor to get widget reference + public MyHolder(View itemView) { + super(itemView); + cdItem = (CardView) itemView.findViewById(R.id.cdItem); + textName = (TextView) itemView.findViewById(R.id.textName); + ivIcon = (ImageView) itemView.findViewById(R.id.ivIcon); + textSize = (TextView) itemView.findViewById(R.id.textSize); + textAvail = (TextView) itemView.findViewById(R.id.textAvail); + + checkBox = (RadioButton) itemView.findViewById(R.id.checkBox); + } + + } + +} diff --git a/app/src/main/java/com/epicstudios/vectras/Roms/DataRoms.java b/app/src/main/java/com/epicstudios/vectras/Roms/DataRoms.java new file mode 100644 index 0000000..8535f7c --- /dev/null +++ b/app/src/main/java/com/epicstudios/vectras/Roms/DataRoms.java @@ -0,0 +1,13 @@ +package com.epicstudios.vectras.Roms; + +public class DataRoms { + + public String itemIcon; + public String itemName; + public String itemArch; + public Boolean itemAvail; + public String itemSize; + public String itemUrl; + public String itemPath; + public String itemExtra; +} diff --git a/app/src/main/java/com/epicstudios/vectras/SplashActivity.java b/app/src/main/java/com/epicstudios/vectras/SplashActivity.java new file mode 100644 index 0000000..caae6a6 --- /dev/null +++ b/app/src/main/java/com/epicstudios/vectras/SplashActivity.java @@ -0,0 +1,137 @@ +package com.epicstudios.vectras; + +import static android.os.Build.VERSION.SDK_INT; + +import android.Manifest; +import android.app.Dialog; +import android.content.*; +import android.content.pm.*; +import android.net.Uri; +import android.os.*; +import android.preference.PreferenceManager; +import android.provider.Settings; +import android.view.*; +import android.graphics.*; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; +import com.epicstudios.vectras.R; +import com.epicstudios.vectras.MainActivity; +import com.epicstudios.vectras.utils.UIUtils; + +import java.io.File; + +public class SplashActivity extends AppCompatActivity implements Runnable { + public AlertDialog ad; + public static SplashActivity activity; + @Override + protected void onCreate(Bundle bundle) { + super.onCreate(bundle); + activity = this; + File baseDir = new File(Config.basefiledir); + if (!baseDir.exists()) { + baseDir.mkdirs(); + } + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + requestWindowFeature(Window.FEATURE_NO_TITLE); + setContentView(R.layout.activity_splash); + if (!checkPermission()) { + ad = new AlertDialog.Builder(this, R.style.MainDialogTheme).create(); + ad.setTitle("permissions"); + ad.setMessage("Vectras needs some permissions:\n-full storage access(shared folder - vectras bootable image '.vbi')"); + ad.setCanceledOnTouchOutside(false); + ad.setButton(Dialog.BUTTON_POSITIVE, "Allow", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + try { + ActivityCompat.requestPermissions(SplashActivity.this, + new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); + } catch (Exception e) { + UIUtils.toastLong(activity, e.toString()); + throw new RuntimeException(e); + } + return; + } + }); + + ad.setButton(Dialog.BUTTON_NEGATIVE, "Learn More", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + String gt = Config.vectrasRepo; + Intent g = new Intent(Intent.ACTION_VIEW); + g.setData(Uri.parse(gt)); + startActivity(g); + finish(); + return; + } + }); + ad.show(); + } else { + File sharedDir = new File(Config.sharedFolder); + if (!sharedDir.exists()) { + sharedDir.mkdirs(); + } + new Handler().postDelayed(this, 2000); + } + + File sharedDir = new File(Config.sharedFolder); + if (!sharedDir.exists()) { + sharedDir.mkdirs(); + } + File mainDir = new File(Config.maindirpath); + if (!mainDir.exists()) { + mainDir.mkdirs(); + } + + } + private boolean checkPermission() { + if (SDK_INT >= Build.VERSION_CODES.R) { + return Environment.isExternalStorageManager(); + } else { + int result = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE); + int result1 = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE); + if (android.os.Build.VERSION.SDK_INT >= 30) { + + int result2 = ContextCompat.checkSelfPermission(this, Manifest.permission.MANAGE_EXTERNAL_STORAGE); + return result == PackageManager.PERMISSION_GRANTED && result1 == PackageManager.PERMISSION_GRANTED && result2 == PackageManager.PERMISSION_GRANTED; + + } else { + + return result == PackageManager.PERMISSION_GRANTED && result1 == PackageManager.PERMISSION_GRANTED; + + } + } + } + @Override + public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + if (android.os.Build.VERSION.SDK_INT >= 30) { + + Intent intent = new Intent(); + intent.setAction(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION); + Uri uri = Uri.fromParts("package", this.getPackageName(), null); + intent.setData(uri); + startActivity(intent); + ad.cancel(); + new Handler().postDelayed(this, 2000); + } + } else if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_DENIED) { + ActivityCompat.requestPermissions(SplashActivity.this, + new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); + } + } + public static final String CREDENTIAL_SHARED_PREF = "settings_prefs"; + + @Override + public void run() { + SharedPreferences prefs = getSharedPreferences(CREDENTIAL_SHARED_PREF, Context.MODE_PRIVATE); + + boolean isAccessed = prefs.getBoolean("isFirstLaunch", false); + if (!isAccessed) { + startActivity(new Intent(this, FirstActivity.class)); + } else { + startActivity(new Intent(this, MainActivity.class)); + } + finish(); + } +} diff --git a/app/src/main/java/com/epicstudios/vectras/Store/AdapterStore.java b/app/src/main/java/com/epicstudios/vectras/Store/AdapterStore.java new file mode 100644 index 0000000..f71d001 --- /dev/null +++ b/app/src/main/java/com/epicstudios/vectras/Store/AdapterStore.java @@ -0,0 +1,103 @@ +package com.epicstudios.vectras.Store; + +import android.content.Context; +import android.content.Intent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.animation.Animation; +import android.view.animation.AnimationUtils; +import android.widget.ImageView; +import android.widget.TextView; +import androidx.cardview.widget.CardView; +import androidx.fragment.app.FragmentTransaction; +import androidx.recyclerview.widget.RecyclerView; +import com.bumptech.glide.Glide; +import com.epicstudios.vectras.R; +import com.epicstudios.vectras.Fragment.HomeFragment; +import com.epicstudios.vectras.PostActivity; +import java.util.Collections; +import java.util.List; +import com.epicstudios.vectras.MainActivity; +import com.epicstudios.vectras.StoreActivity; +import com.epicstudios.vectras.StoreItemActivity; + +public class AdapterStore extends RecyclerView.Adapter { + + private Context context; + private LayoutInflater inflater; + List data = Collections.emptyList(); + DataStore current; + int currentPos = 0; + + // create constructor to innitilize context and data sent from MainActivity + public AdapterStore(Context context, List data) { + this.context = context; + inflater = LayoutInflater.from(context); + this.data = data; + } + + // Inflate the layout when viewholder created + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = inflater.inflate(R.layout.container_store, parent, false); + MyHolder holder = new MyHolder(view); + return holder; + } + + // Bind data + @Override + public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + + // Get current position of item in recyclerview to bind data and assign values from list + MyHolder myHolder = (MyHolder) holder; + final DataStore current = data.get(position); + myHolder.textName.setText(current.itemName); + myHolder.textSize.setText("Size: " + current.itemSize); + Glide.with(MainActivity.activity).load(current.itemIcon).into(myHolder.ivIcon); + Animation animation; + animation = AnimationUtils.loadAnimation(MainActivity.activity, android.R.anim.slide_in_left); + animation.setDuration(300); + + myHolder.cdItem.startAnimation(animation); + animation = null; + myHolder.cdItem.setOnClickListener(new View.OnClickListener() { + public void onClick(View view) { + StoreItemActivity.name = current.itemName; + StoreItemActivity.icon = current.itemIcon; + StoreItemActivity.size = current.itemSize; + StoreItemActivity.desc = current.itemData; + StoreItemActivity.link = current.itemLink; + StoreItemActivity.prvMain = current.itemPreviewMain; + StoreItemActivity.prv1 = current.itemPreview1; + StoreItemActivity.prv2 = current.itemPreview2; + StoreActivity.activity.startActivity(new Intent(StoreActivity.activity, StoreItemActivity.class)); + } + }); + } + + // return total item from List + @Override + public int getItemCount() { + return data.size(); + } + + class MyHolder extends RecyclerView.ViewHolder { + + CardView cdItem; + TextView textName; + ImageView ivIcon; + TextView textSize; + + // create constructor to get widget reference + public MyHolder(View itemView) { + super(itemView); + cdItem = (CardView) itemView.findViewById(R.id.cdItem); + textName = (TextView) itemView.findViewById(R.id.textName); + ivIcon = (ImageView) itemView.findViewById(R.id.ivIcon); + textSize = (TextView) itemView.findViewById(R.id.textSize); + } + + } + +} diff --git a/app/src/main/java/com/epicstudios/vectras/Store/DataStore.java b/app/src/main/java/com/epicstudios/vectras/Store/DataStore.java new file mode 100644 index 0000000..9d06441 --- /dev/null +++ b/app/src/main/java/com/epicstudios/vectras/Store/DataStore.java @@ -0,0 +1,13 @@ +package com.epicstudios.vectras.Store; + +public class DataStore { + + public String itemName; + public String itemSize; + public String itemData; + public String itemIcon; + public String itemLink; + public String itemPreviewMain; + public String itemPreview1; + public String itemPreview2; +} diff --git a/app/src/main/java/com/epicstudios/vectras/StoreActivity.java b/app/src/main/java/com/epicstudios/vectras/StoreActivity.java new file mode 100644 index 0000000..0be536a --- /dev/null +++ b/app/src/main/java/com/epicstudios/vectras/StoreActivity.java @@ -0,0 +1,199 @@ +package com.epicstudios.vectras; + +import android.content.Context; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.os.*; +import android.view.MenuItem; +import android.view.View; +import android.widget.LinearLayout; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; + +import com.epicstudios.vectras.R; +import com.epicstudios.vectras.Blog.AdapterBlog; +import com.epicstudios.vectras.Blog.DataBlog; +import com.epicstudios.vectras.Fragment.HomeFragment; +import com.epicstudios.vectras.Store.AdapterStore; +import com.epicstudios.vectras.Store.DataStore; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; +import java.util.List; + +import javax.net.ssl.HttpsURLConnection; + +public class StoreActivity extends AppCompatActivity{ + private RecyclerView mRVStore; + private AdapterStore mAdapter; + public static LinearLayout noConnectionLayout; + public SwipeRefreshLayout pullToRefresh; + public static StoreActivity activity; + public String Data; + @Override + protected void onCreate(Bundle bundle) { + super.onCreate(bundle); + setContentView(R.layout.activity_store); + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + getSupportActionBar().setDisplayShowHomeEnabled(true); + toolbar.setTitle(getString(R.string.app_name)); + + activity = this; + + noConnectionLayout = findViewById(R.id.noConnectionLayout); + mRVStore = findViewById(R.id.storeRv); + + if (checkConnection(activity)) { + new StoreActivity.AsyncLogin().execute(); + noConnectionLayout.setVisibility(View.GONE); + //mRVBlog.setVisibility(View.VISIBLE); + } else { + noConnectionLayout.setVisibility(View.VISIBLE); + //mRVBlog.setVisibility(View.GONE); + } + + pullToRefresh = findViewById(R.id.refreshLayout); + pullToRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { + @Override + public void onRefresh() { + if (checkConnection(activity)) { + new StoreActivity.AsyncLogin().execute(); + } else { + noConnectionLayout.setVisibility(View.VISIBLE); + pullToRefresh.setRefreshing(false); + } + } + }); + } + public boolean checkConnection(Context context) { + final ConnectivityManager connMgr = (ConnectivityManager) context + .getSystemService(Context.CONNECTIVITY_SERVICE); + + if (connMgr != null) { + NetworkInfo activeNetworkInfo = connMgr.getActiveNetworkInfo(); + + if (activeNetworkInfo != null) { // connected to the internet + // connected to the mobile provider's data plan + if (activeNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI) { + // connected to wifi + return true; + } else + return activeNetworkInfo.getType() == ConnectivityManager.TYPE_MOBILE; + } + } + return false; + } + + private class AsyncLogin extends AsyncTask { + + @Override + protected void onPreExecute() { + super.onPreExecute(); + + //this method will be running on UI thread + + } + + @Override + protected String doInBackground(String... params) { + HttpsURLConnection con = null; + try { + URL u = new URL(Config.storeJson); + con = (HttpsURLConnection) u.openConnection(); + + con.connect(); + + BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream())); + StringBuilder sb = new StringBuilder(); + String line; + while ((line = br.readLine()) != null) { + sb.append(line + "\n"); + } + br.close(); + Data = sb.toString(); + + return (Data); + + } catch (MalformedURLException ex) { + ex.printStackTrace(); + } catch (IOException ex) { + ex.printStackTrace(); + } finally { + if (con != null) { + try { + con.disconnect(); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + return ("unsuccessful!"); + } + + } + + @Override + protected void onPostExecute(String result) { + + //this method will be running on UI thread + pullToRefresh.setRefreshing(false); + + noConnectionLayout.setVisibility(View.GONE); + + List data = new ArrayList<>(); + + try { + + JSONArray jArray = new JSONArray(Data); + + // Extract data from json and store into ArrayList as class objects + for (int i = 0; i < jArray.length(); i++) { + JSONObject json_data = jArray.getJSONObject(i); + DataStore storeData = new DataStore(); + storeData.itemName = json_data.getString("item_name"); + storeData.itemIcon = json_data.getString("item_icon"); + storeData.itemData = json_data.getString("item_data"); + storeData.itemSize = json_data.getString("item_size"); + storeData.itemLink = json_data.getString("item_link"); + storeData.itemPreviewMain = json_data.getString("item_preview_main"); + storeData.itemPreview1 = json_data.getString("item_preview_1"); + storeData.itemPreview2 = json_data.getString("item_preview_2"); + data.add(storeData); + } + + // Setup and Handover data to recyclerview + + } catch (JSONException e) { + Toast.makeText(activity, e.toString(), Toast.LENGTH_LONG).show(); + } + mRVStore = (RecyclerView) findViewById(R.id.storeRv); + mAdapter = new AdapterStore(activity, data); + mRVStore.setAdapter(mAdapter); + mRVStore.setLayoutManager(new LinearLayoutManager(activity)); + + } + + } + @Override + public boolean onOptionsItemSelected(@NonNull MenuItem item) { + if(item.getItemId()== android.R.id.home){ + finish(); + } + return super.onOptionsItemSelected(item); + } +} diff --git a/app/src/main/java/com/epicstudios/vectras/StoreItemActivity.java b/app/src/main/java/com/epicstudios/vectras/StoreItemActivity.java new file mode 100644 index 0000000..e8fb7b0 --- /dev/null +++ b/app/src/main/java/com/epicstudios/vectras/StoreItemActivity.java @@ -0,0 +1,248 @@ +package com.epicstudios.vectras; + +import android.app.Dialog; +import android.app.IntentService; +import android.app.ProgressDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.net.Uri; +import android.os.*; +import android.text.Html; +import android.util.Log; +import android.view.MenuItem; +import android.view.View; +import android.webkit.MimeTypeMap; +import android.webkit.URLUtil; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ProgressBar; +import android.widget.TextView; +import android.os.PowerManager; +import androidx.appcompat.app.AlertDialog; +import com.bumptech.glide.Glide; +import com.epicstudios.vectras.utils.FileUtils; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.FileOutputStream; +import java.net.HttpURLConnection; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; +import com.epicstudios.vectras.R; +import com.epicstudios.vectras.utils.UIUtils; +import java.io.BufferedInputStream; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import android.os.PowerManager; + +public class StoreItemActivity extends AppCompatActivity { + public StoreItemActivity activity; + public String TAG = "StoreItemActivity"; + public static String icon, name, size, desc, descStr, prvMain, prv1, prv2, link; + public TextView itemName, itemSize, itemDesc; + public Button dBtn; + public ImageView itemIcon, itemPrvMain, itemPrv1, itemPrv2; + + boolean isImageFitToScreen; + + @Override + protected void onCreate(Bundle bundle) { + activity = this; + super.onCreate(bundle); + setContentView(R.layout.activity_store_item); + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + getSupportActionBar().setDisplayShowHomeEnabled(true); + toolbar.setTitle(getString(R.string.app_name)); + itemIcon = findViewById(R.id.ivIcon); + itemName = findViewById(R.id.textName); + itemSize = findViewById(R.id.textSize); + dBtn = findViewById(R.id.btn_download); + itemDesc = findViewById(R.id.descTxt); + itemPrvMain = findViewById(R.id.ivPrvMain); + itemPrv1 = findViewById(R.id.ivPrv1); + itemPrv2 = findViewById(R.id.ivPrv2); + + dBtn.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View view) { + startDownload(); + } + }); + itemName.setText(name); + itemSize.setText(size); + + Glide.with(this).load(icon).into(itemIcon); + Glide.with(this).load(prvMain).into(itemPrvMain); + Glide.with(this).load(prv1).into(itemPrv1); + Glide.with(this).load(prv2).into(itemPrv2); + new Thread(new Runnable() { + + public void run() { + + BufferedReader reader = null; + final StringBuilder builder = new StringBuilder(); + + try { + // Create a URL for the desired page + URL url = new URL(desc); //My text file location + //First open the connection + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setConnectTimeout(60000); // timing out in a minute + + BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); + + //t=(TextView)findViewById(R.id.TextView1); // ideally do this in onCreate() + String str; + while ((str = in.readLine()) != null) { + builder.append(str); + } + in.close(); + } catch (Exception e) { + itemDesc.setText("no internet connection"); + UIUtils.toastLong(StoreItemActivity.this, "check your internet connection"); + Log.d("VECTRAS", e.toString()); + } + + //since we are in background thread, to post results we have to go back to ui thread. do the following for that + + StoreItemActivity.this.runOnUiThread(new Runnable() { + public void run() { + descStr = builder.toString(); // My TextFile has 3 lines + itemDesc.setText(Html.fromHtml(descStr)); + } + }); + + } + }).start(); + itemPrvMain.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + ImagePrvActivity.linkIv = prvMain; + startActivity(new Intent(activity, ImagePrvActivity.class)); + } + }); + itemPrv1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + ImagePrvActivity.linkIv = prv1; + startActivity(new Intent(activity, ImagePrvActivity.class)); + } + }); + itemPrv2.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + ImagePrvActivity.linkIv = prv2; + startActivity(new Intent(activity, ImagePrvActivity.class)); + } + }); + } + + public static final int DIALOG_DOWNLOAD_PROGRESS = 0; + private ProgressDialog mProgressDialog; + + private void startDownload() { + String url = link; + new DownloadFileAsync().execute(url); + } + + @Override + protected Dialog onCreateDialog(int id) { + switch (id) { + case DIALOG_DOWNLOAD_PROGRESS: + mProgressDialog = new ProgressDialog(this, R.style.MainDialogTheme); + mProgressDialog.setMessage("Downloading file.."); + mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); + mProgressDialog.setCancelable(false); + mProgressDialog.show(); + return mProgressDialog; + default: + return null; + } + } + + class DownloadFileAsync extends AsyncTask { + + @Override + protected void onPreExecute() { + super.onPreExecute(); + showDialog(DIALOG_DOWNLOAD_PROGRESS); + } + + @Override + protected String doInBackground(String... aurl) { + int count; + + try { + URL url = new URL(aurl[0]); + URLConnection conexion = url.openConnection(); + conexion.connect(); + + int lenghtOfFile = conexion.getContentLength(); + Log.d(TAG, "Lenght of file: " + lenghtOfFile); + String fileName = URLUtil.guessFileName(link,null,null); + InputStream input = new BufferedInputStream(url.openStream()); + OutputStream output = new FileOutputStream(Config.sharedFolder+fileName); + + byte data[] = new byte[1024]; + + long total = 0; + + while ((count = input.read(data)) != -1) { + total += count; + publishProgress("" + (int) ((total * 100) / lenghtOfFile)); + output.write(data, 0, count); + } + + output.flush(); + output.close(); + input.close(); + } catch (Exception e) { + } + return null; + + } + + protected void onProgressUpdate(String... progress) { + Log.d(TAG, progress[0]); + mProgressDialog.setProgress(Integer.parseInt(progress[0])); + } + + @Override + protected void onPostExecute(String unused) { + dismissDialog(DIALOG_DOWNLOAD_PROGRESS); + AlertDialog ad; + ad = new AlertDialog.Builder(activity, R.style.MainDialogTheme).create(); + ad.setTitle("Downloaded Successfully!"); + String fileName = URLUtil.guessFileName(link,null,null); + ad.setMessage("Downloaded to path: "+Config.sharedFolder+fileName+" boot vectras to check your downloads in QEMU VFAT partition."); + ad.setButton(Dialog.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + return; + } + }); + ad.show(); + } + } + + @Override + public boolean onOptionsItemSelected(@NonNull MenuItem item) { + if (item.getItemId() == android.R.id.home) { + finish(); + } + return super.onOptionsItemSelected(item); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/epicstudios/vectras/VectrasApp.java b/app/src/main/java/com/epicstudios/vectras/VectrasApp.java new file mode 100644 index 0000000..8b4ecd3 --- /dev/null +++ b/app/src/main/java/com/epicstudios/vectras/VectrasApp.java @@ -0,0 +1,353 @@ +package com.epicstudios.vectras; + +import android.app.Activity; +import android.app.Application; +import android.content.ClipData; +import android.content.ClipboardManager; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageInfo; +import android.content.res.Resources; +import android.graphics.Typeface; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; +import android.text.TextUtils; +import android.util.Log; +import android.view.Menu; +import android.view.MenuItem; +import android.view.ViewGroup; +import android.widget.HorizontalScrollView; +import android.widget.ScrollView; +import android.widget.TextView; +import android.widget.Toast; +import com.epicstudios.vectras.logger.VectrasStatus; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.Closeable; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.lang.Thread.UncaughtExceptionHandler; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.Date; +import java.util.LinkedHashMap; +import java.util.concurrent.atomic.AtomicBoolean; + +public class VectrasApp extends Application { + + private static Handler MAIN_HANDLER = new Handler(Looper.getMainLooper()); + + @Override + public void onCreate() { + super.onCreate(); + CrashHandler.getInstance().registerGlobal(this); + CrashHandler.getInstance().registerPart(this); + try { + Class.forName("android.os.AsyncTask"); + } catch (Throwable ignore) { + // ignored + } + } + + public static void write(InputStream input, OutputStream output) throws IOException { + byte[] buf = new byte[1024 * 8]; + int len; + while ((len = input.read(buf)) != -1) { + output.write(buf, 0, len); + } + } + + public static void write(File file, byte[] data) throws IOException { + File parent = file.getParentFile(); + if (parent != null && !parent.exists()) + parent.mkdirs(); + + ByteArrayInputStream input = new ByteArrayInputStream(data); + FileOutputStream output = new FileOutputStream(file); + try { + write(input, output); + } finally { + closeIO(input, output); + } + } + + public static String toString(InputStream input) throws IOException { + ByteArrayOutputStream output = new ByteArrayOutputStream(); + write(input, output); + try { + return output.toString("UTF-8"); + } finally { + closeIO(input, output); + } + } + + public static void closeIO(Closeable... closeables) { + for (Closeable closeable : closeables) { + try { + if (closeable != null) + closeable.close(); + } catch (IOException ignored) { + } + } + } + + public static class CrashHandler { + + public static final UncaughtExceptionHandler DEFAULT_UNCAUGHT_EXCEPTION_HANDLER = Thread + .getDefaultUncaughtExceptionHandler(); + + private static CrashHandler sInstance; + + private PartCrashHandler mPartCrashHandler; + + public static CrashHandler getInstance() { + if (sInstance == null) { + sInstance = new CrashHandler(); + } + return sInstance; + } + + public void registerGlobal(Context context) { + registerGlobal(context, null); + } + + public void registerGlobal(Context context, String crashDir) { + Thread.setDefaultUncaughtExceptionHandler( + new UncaughtExceptionHandlerImpl(context.getApplicationContext(), crashDir)); + } + + public void unregister() { + Thread.setDefaultUncaughtExceptionHandler(DEFAULT_UNCAUGHT_EXCEPTION_HANDLER); + } + + public void registerPart(Context context) { + unregisterPart(context); + mPartCrashHandler = new PartCrashHandler(context.getApplicationContext()); + MAIN_HANDLER.postAtFrontOfQueue(mPartCrashHandler); + } + + public void unregisterPart(Context context) { + if (mPartCrashHandler != null) { + mPartCrashHandler.isRunning.set(false); + mPartCrashHandler = null; + } + } + + private static class PartCrashHandler implements Runnable { + + private final Context mContext; + + public AtomicBoolean isRunning = new AtomicBoolean(true); + + public PartCrashHandler(Context context) { + this.mContext = context; + } + + @Override + public void run() { + while (isRunning.get()) { + try { + Looper.loop(); + } catch (final Throwable e) { + e.printStackTrace(); + if (isRunning.get()) { + MAIN_HANDLER.post(new Runnable() { + + @Override + public void run() { + VectrasStatus.logError("[E] "+e.getMessage()+""); + } + }); + } else { + if (e instanceof RuntimeException) { + throw (RuntimeException) e; + } else { + throw new RuntimeException(e); + } + } + } + } + } + } + + private static class UncaughtExceptionHandlerImpl implements UncaughtExceptionHandler { + + private static DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy_MM_dd-HH_mm_ss"); + + private final Context mContext; + + private final File mCrashDir; + + public UncaughtExceptionHandlerImpl(Context context, String crashDir) { + this.mContext = context; + this.mCrashDir = TextUtils.isEmpty(crashDir) ? new File(mContext.getExternalCacheDir(), "crash") + : new File(crashDir); + } + + @Override + public void uncaughtException(Thread thread, Throwable throwable) { + try { + + String log = buildLog(throwable); + writeLog(log); + + try { + Intent intent = new Intent(mContext, CrashActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.putExtra(Intent.EXTRA_TEXT, log); + mContext.startActivity(intent); + } catch (Throwable e) { + e.printStackTrace(); + writeLog(e.toString()); + } + + throwable.printStackTrace(); + android.os.Process.killProcess(android.os.Process.myPid()); + System.exit(0); + + } catch (Throwable e) { + if (DEFAULT_UNCAUGHT_EXCEPTION_HANDLER != null) + DEFAULT_UNCAUGHT_EXCEPTION_HANDLER.uncaughtException(thread, throwable); + } + } + + private String buildLog(Throwable throwable) { + String time = DATE_FORMAT.format(new Date()); + + String versionName = "unknown"; + long versionCode = 0; + try { + PackageInfo packageInfo = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0); + versionName = packageInfo.versionName; + versionCode = Build.VERSION.SDK_INT >= 28 ? packageInfo.getLongVersionCode() + : packageInfo.versionCode; + } catch (Throwable ignored) { + } + + LinkedHashMap head = new LinkedHashMap(); + head.put("Time Of Crash", time); + head.put("Device", String.format("%s, %s", Build.MANUFACTURER, Build.MODEL)); + head.put("Android Version", String.format("%s (%d)", Build.VERSION.RELEASE, Build.VERSION.SDK_INT)); + head.put("App Version", String.format("%s (%d)", versionName, versionCode)); + head.put("Kernel", getKernel()); + head.put("Support Abis", + Build.VERSION.SDK_INT >= 21 && Build.SUPPORTED_ABIS != null + ? Arrays.toString(Build.SUPPORTED_ABIS) + : "unknown"); + head.put("Fingerprint", Build.FINGERPRINT); + + StringBuilder builder = new StringBuilder(); + + for (String key : head.keySet()) { + if (builder.length() != 0) + builder.append("\n"); + builder.append(key); + builder.append(" : "); + builder.append(head.get(key)); + } + + builder.append("\n\n"); + builder.append(Log.getStackTraceString(throwable)); + + return builder.toString(); + } + + private void writeLog(String log) { + String time = DATE_FORMAT.format(new Date()); + File file = new File(mCrashDir, "crash_" + time + ".txt"); + try { + write(file, log.getBytes("UTF-8")); + } catch (Throwable e) { + e.printStackTrace(); + } + } + + private static String getKernel() { + try { + return VectrasApp.toString(new FileInputStream("/proc/version")).trim(); + } catch (Throwable e) { + return e.getMessage(); + } + } + } + } + + public static final class CrashActivity extends Activity { + + private String mLog; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setTheme(android.R.style.Theme_DeviceDefault); + setTitle("App Crash"); + + mLog = getIntent().getStringExtra(Intent.EXTRA_TEXT); + + ScrollView contentView = new ScrollView(this); + contentView.setFillViewport(true); + + HorizontalScrollView horizontalScrollView = new HorizontalScrollView(this); + + TextView textView = new TextView(this); + int padding = dp2px(16); + textView.setPadding(padding, padding, padding, padding); + textView.setText(mLog); + textView.setTextIsSelectable(true); + textView.setTypeface(Typeface.DEFAULT); + textView.setLinksClickable(true); + + horizontalScrollView.addView(textView); + contentView.addView(horizontalScrollView, ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT); + + setContentView(contentView); + } + + private void restart() { + Intent intent = getPackageManager().getLaunchIntentForPackage(getPackageName()); + if (intent != null) { + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + startActivity(intent); + } + finish(); + android.os.Process.killProcess(android.os.Process.myPid()); + System.exit(0); + } + + private static int dp2px(float dpValue) { + final float scale = Resources.getSystem().getDisplayMetrics().density; + return (int) (dpValue * scale + 0.5f); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + menu.add(0, android.R.id.copy, 0, android.R.string.copy).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.copy: + ClipboardManager cm = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); + cm.setPrimaryClip(ClipData.newPlainText(getPackageName(), mLog)); + return true; + } + return super.onOptionsItemSelected(item); + } + + @Override + public void onBackPressed() { + restart(); + } + } +} diff --git a/app/src/main/java/com/epicstudios/vectras/VectrasSDLActivity.java b/app/src/main/java/com/epicstudios/vectras/VectrasSDLActivity.java new file mode 100644 index 0000000..af7cad4 --- /dev/null +++ b/app/src/main/java/com/epicstudios/vectras/VectrasSDLActivity.java @@ -0,0 +1,1258 @@ +package com.epicstudios.vectras; + +import android.app.Activity; +import android.app.AlertDialog; +import android.app.Dialog; +import android.app.ProgressDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.res.Configuration; +import android.os.AsyncTask; +import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; +import android.util.Log; +import android.view.Gravity; +import android.view.KeyCharacterMap; +import android.view.KeyEvent; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.MotionEvent; +import android.view.SurfaceHolder; +import android.view.View; +import android.view.WindowManager; +import android.view.inputmethod.InputMethodManager; +import android.widget.EditText; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.ScrollView; +import android.widget.SeekBar; +import android.widget.SeekBar.OnSeekBarChangeListener; +import android.widget.TextView; +import android.widget.Toast; +import androidx.appcompat.app.ActionBar; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentTransaction; +import com.epicstudios.vectras.R; +import com.epicstudios.vectras.Fragment.ControlsFragment; +import com.epicstudios.vectras.logger.VectrasStatus; +import com.epicstudios.vectras.utils.FileUtils; +import com.epicstudios.vectras.utils.QmpClient; +import com.epicstudios.vectras.utils.UIUtils; +import java.io.File; +import javax.microedition.khronos.egl.EGLConfig; +import javax.microedition.khronos.egl.EGLContext; +import javax.microedition.khronos.egl.EGLDisplay; +import javax.microedition.khronos.egl.EGLSurface; +import org.json.JSONObject; +import org.libsdl.app.ClearRenderer; +import org.libsdl.app.SDLActivity; +import org.libsdl.app.SDLSurface; + +/** + * SDL Activity + */ +public class VectrasSDLActivity extends SDLActivity { + + public static final int KEYBOARD = 10000; + public static final int QUIT = 10001; + public static final int HELP = 10002; + public static boolean monitorMode = false; + private boolean mouseOn = false; + private Object lockTime = new Object(); + private boolean timeQuit = false; + private Thread timeListenerThread; + private ProgressDialog progDialog; + public static Activity activity ; + + public String cd_iso_path = null; + + // HDD + public String hda_img_path = null; + public String hdb_img_path = null; + public String hdc_img_path = null; + public String hdd_img_path = null; + + public String fda_img_path = null; + public String fdb_img_path = null; + public String cpu = null; + public String TAG = "VMExecutor"; + + public int aiomaxthreads = 1; + // Default Settings + public int memory = 128; + public String bootdevice = null; + // net + public String net_cfg = "None"; + public int nic_num = 1; + public String vga_type = "std"; + public String hd_cache = "default"; + public String nic_driver = null; + public String soundcard = null; + public String lib = "libvectras.so"; + public String lib_path = null; + public int restart = 0; + public String snapshot_name = "Vectras"; + public int disableacpi = 0; + public int disablehpet = 0; + public int disabletsc = 0; + public static int enablebluetoothmouse = 0; + public int enableqmp = 0; + public int enablevnc = 0; + public String vnc_passwd = null; + public int vnc_allow_external = 0; + public String qemu_dev = null; + public String qemu_dev_value = null; + public String base_dir = Config.basefiledir; + public String dns_addr = null; + private boolean once = true; + public static boolean zoomable = false; + private String status = null; + + public static Handler handler; + + // This is what SDL runs in. It invokes SDL_main(), eventually + private static Thread mSDLThread; + + // EGL private objects + private static EGLContext mEGLContext; + private static EGLSurface mEGLSurface; + private static EGLDisplay mEGLDisplay; + private static EGLConfig mEGLConfig; + private static int mGLMajor, mGLMinor; + + public static int width; + public static int height; + public static int screen_width; + public static int screen_height; + + private static Activity activity1; + + // public static void showTextInput(int x, int y, int w, int h) { + // // Transfer the task to the main thread as a Runnable + // // mSingleton.commandHandler.post(new ShowTextInputHandler(x, y, w, h)); + // } + + public static void singleClick(final MotionEvent event, final int pointer_id) { + + Thread t = new Thread(new Runnable() { + public void run() { + // Log.d("SDL", "Mouse Single Click"); + SDLActivity.onNativeTouch(event.getDeviceId(), Config.SDL_MOUSE_LEFT, MotionEvent.ACTION_DOWN, 0, 0, 0); + try { + Thread.sleep(100); + } catch (InterruptedException ex) { + // Log.v("singletap", "Could not sleep"); + } + SDLActivity.onNativeTouch(event.getDeviceId(), Config.SDL_MOUSE_LEFT, MotionEvent.ACTION_UP, 0, 0, 0); + } + }); + t.start(); + } + + private void promptBluetoothMouse(final Activity activity) { + + + final AlertDialog alertDialog; + alertDialog = new AlertDialog.Builder(activity, R.style.MainDialogTheme).create(); + alertDialog.setTitle("Enable Bluetooth Mouse"); + + LinearLayout mLayout = new LinearLayout(this); + mLayout.setPadding(20,20,20,20); + mLayout.setOrientation(LinearLayout.VERTICAL); + + TextView textView = new TextView(activity); + textView.setVisibility(View.VISIBLE); + textView.setText( + "Step 1: Disable Mouse Acceleration inside the Guest OS.\n\tFor DSL use command: dsl@box:/>xset m 1\n" + + "Step 2: Pair your Bluetooth Mouse and press OK!\n" + + "Step 3: Move your mouse pointer to all desktop corners to calibrate.\n"); + + LinearLayout.LayoutParams textViewParams = new LinearLayout.LayoutParams( + LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); + mLayout.addView(textView, textViewParams); + alertDialog.setView(mLayout); + + final Handler handler = this.handler; + + // alertDialog.setMessage(body); + alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + MotionEvent a = MotionEvent.obtain(0, 0, MotionEvent.ACTION_DOWN, 0, 0, 0); + VectrasSDLActivity.singleClick(a, 0); + // SDLActivityCommon.onNativeMouseReset(0, 0, + // MotionEvent.ACTION_MOVE, vm_width / 2, vm_height / 2, 0); + VectrasSDLActivity.enablebluetoothmouse = 1; + + } + }); + alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + VectrasSDLActivity.enablebluetoothmouse = 0; + return; + } + }); + alertDialog.setOnCancelListener(new DialogInterface.OnCancelListener() { + @Override + public void onCancel(DialogInterface dialog) { + VectrasSDLActivity.enablebluetoothmouse = 0; + return; + + } + }); + alertDialog.show(); + + } + + public static void sendCtrlAtlKey(int code) { + + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_CTRL_LEFT); + try { + Thread.sleep(100); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_ALT_LEFT); + try { + Thread.sleep(100); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + SDLActivity.onNativeKeyDown(code); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + SDLActivity.onNativeKeyUp(KeyEvent.KEYCODE_CTRL_LEFT); + SDLActivity.onNativeKeyUp(KeyEvent.KEYCODE_ALT_LEFT); + SDLActivity.onNativeKeyUp(code); + } + + public void stopTimeListener() { + Log.v("SaveVM", "Stopping Listener"); + synchronized (this.lockTime) { + this.timeQuit = true; + this.lockTime.notifyAll(); + } + } + + public void onDestroy() { + + // Now wait for the SDL thread to quit + Log.v("VectrasSDL", "Waiting for SDL thread to quit"); + if (mSDLThread != null) { + try { + mSDLThread.join(); + } catch (Exception e) { + Log.v("SDL", "Problem stopping thread: " + e); + } + mSDLThread = null; + + Log.v("SDL", "Finished waiting for SDL thread"); + } + this.stopTimeListener(); + super.onDestroy(); + } + + public void timeListener() { + while (timeQuit != true) { + status = checkCompletion(); + // Log.v("timeListener", "Status: " + status); + if (status == null + || status.equals("") + || status.equals("DONE") + || status.equals("ERROR") + ) { + Log.v("Inside", "Saving state is done: " + status); + stopTimeListener(); + return; + } + try { + Thread.sleep(1000); + } catch (InterruptedException ex) { + Log.v("SaveVM", "Could not sleep"); + } + } + Log.v("SaveVM", "Save state complete"); + + } + + public void startTimeListener() { + this.stopTimeListener(); + timeQuit = false; + try { + Log.v("Listener", "Time Listener Started..."); + timeListener(); + synchronized (lockTime) { + while (timeQuit == false) { + lockTime.wait(); + } + lockTime.notifyAll(); + } + } catch (Exception ex) { + ex.printStackTrace(); + Log.v("SaveVM", "Time listener thread error: " + ex.getMessage()); + } + Log.v("Listener", "Time listener thread exited..."); + + } + + public void onHideToolbar(){ + ActionBar bar = this.getSupportActionBar(); + if (bar != null) { + bar.hide(); + } + } + + + private void onMouse() { + + MotionEvent a = MotionEvent.obtain(0, 0, MotionEvent.ACTION_DOWN, 0, 0, 0); + VectrasSDLActivity.singleClick(a, 0); + // SDLActivityCommon.onNativeMouseReset(0, 0, MotionEvent.ACTION_MOVE, + // vm_width / 2, vm_height / 2, 0); + //Toast.makeText(this.getApplicationContext(), "Mouse Trackpad Mode enabled", Toast.LENGTH_SHORT).show(); + } + + private void onCtrlAltDel() { + + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_CTRL_RIGHT); + try { + Thread.sleep(100); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_ALT_RIGHT); + try { + Thread.sleep(100); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_FORWARD_DEL); + try { + Thread.sleep(100); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + SDLActivity.onNativeKeyUp(KeyEvent.KEYCODE_FORWARD_DEL); + try { + Thread.sleep(100); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + SDLActivity.onNativeKeyUp(KeyEvent.KEYCODE_ALT_RIGHT); + try { + Thread.sleep(100); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + SDLActivity.onNativeKeyUp(KeyEvent.KEYCODE_CTRL_RIGHT); + try { + Thread.sleep(100); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + private void onCtrlC() { + + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_CTRL_RIGHT); + try { + Thread.sleep(100); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + SDLActivity.onNativeKeyDown(KeyEvent.KEYCODE_C); + try { + Thread.sleep(100); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + SDLActivity.onNativeKeyUp(KeyEvent.KEYCODE_C); + try { + Thread.sleep(100); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + SDLActivity.onNativeKeyUp(KeyEvent.KEYCODE_CTRL_RIGHT); + try { + Thread.sleep(100); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + public void resetVM() { + + new AlertDialog.Builder(VectrasSDLActivity.activity, R.style.MainDialogTheme).setTitle("Reset VM") + .setMessage("To avoid any corrupt data make sure you " + + "have already shutdown the Operating system from within the VM. Continue?") + .setPositiveButton("Yes", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + new Thread(new Runnable() { + public void run() { + Log.v("SDL", "VM is reset"); + onRestartVM(); + } + }).start(); + + } + }).setNegativeButton("No", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + } + }).show(); + } + + public static void stopVM(Context activity, boolean exit) { + + new AlertDialog.Builder(activity, R.style.MainDialogTheme).setTitle("Shutdown VM") + .setMessage("To avoid any corrupt data make sure you " + + "have already shutdown the Operating system from within the VM. Continue?") + .setPositiveButton("Yes", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + new Thread(new Runnable() { + public void run() { + Log.v("SDL", "VM is stopped"); + nativeQuit(); + } + }).start(); + + } + }).setNegativeButton("No", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + } + }).show(); + } + + private static void setStretchToScreen() { + + + new Thread(new Runnable() { + public void run() { + VectrasSDLActivity.stretchToScreen = true; + VectrasSDLActivity.fitToScreen = false; + sendCtrlAtlKey(KeyEvent.KEYCODE_6); + } + }).start(); + + } + + private static void setFitToScreen() { + + + new Thread(new Runnable() { + public void run() { + VectrasSDLActivity.stretchToScreen = false; + VectrasSDLActivity.fitToScreen = true; + sendCtrlAtlKey(KeyEvent.KEYCODE_5); + + } + }).start(); + + } + + private void setOneToOne() { + + new Thread(new Runnable() { + public void run() { + VectrasSDLActivity.stretchToScreen = false; + VectrasSDLActivity.fitToScreen = false; + sendCtrlAtlKey(KeyEvent.KEYCODE_U); + } + }).start(); + + } + + public static void setFullScreen() { + + + new Thread(new Runnable() { + public void run() { + sendCtrlAtlKey(KeyEvent.KEYCODE_F); + } + }).start(); + + } + + public static void setZoomIn() { + + new Thread(new Runnable() { + public void run() { + VectrasSDLActivity.stretchToScreen = false; + VectrasSDLActivity.fitToScreen = false; + sendCtrlAtlKey(KeyEvent.KEYCODE_4); + } + }).start(); + + } + + public static void setZoomOut() { + + + new Thread(new Runnable() { + public void run() { + VectrasSDLActivity.stretchToScreen = false; + VectrasSDLActivity.fitToScreen = false; + sendCtrlAtlKey(KeyEvent.KEYCODE_3); + + } + }).start(); + + } + + public static void setZoomable() { + + zoomable = true; + + } + + public static void onMonitor() { + new Thread(new Runnable() { + public void run() { + monitorMode = true; + // final KeyEvent altDown = new KeyEvent(downTime, eventTime, + // KeyEvent.ACTION_DOWN, + // KeyEvent.KEYCODE_2, 1, KeyEvent.META_ALT_LEFT_ON); + sendCtrlAtlKey(KeyEvent.KEYCODE_2); + // sendCtrlAtlKey(altDown); + Log.v("Vectras", "Monitor On"); + } + }).start(); + + } + + public static void onVMConsole() { + monitorMode = false; + sendCtrlAtlKey(KeyEvent.KEYCODE_1); + } + + private void onSaveState(final String stateName) { + // onMonitor(); + // try { + // Thread.sleep(1000); + // } catch (InterruptedException ex) { + // Logger.getLogger(VectrasVNCActivity.class.getName()).log( + // Level.SEVERE, null, ex); + // } + // vncCanvas.sendText("savevm " + stateName + "\n"); + // Toast.makeText(this.getApplicationContext(), + // "Please wait while saving VM State", Toast.LENGTH_LONG).show(); + new Thread(new Runnable() { + public void run() { + Log.v("SDL", "Saving VM1"); + nativePause(); + // VectrasActivity.vmexecutor.saveVM1(stateName); + + nativeResume(); + + } + }).start(); + + // try { + // Thread.sleep(1000); + // } catch (InterruptedException ex) { + // Logger.getLogger(VectrasVNCActivity.class.getName()).log( + // Level.SEVERE, null, ex); + // } + // onSDL(); + ((MainActivity) MainActivity.activity).saveSnapshotDB(stateName); + + progDialog = ProgressDialog.show(activity, "Please Wait", "Saving VM State...", true); + SaveVM a = new SaveVM(); + a.execute(); + + } + + public void saveStateDB(String snapshot_name) { + + } + + private void onSaveState1(String stateName) { + // Log.v("onSaveState1", stateName); + monitorMode = true; + sendCtrlAtlKey(KeyEvent.KEYCODE_2); + + sendText("savevm " + stateName + "\n"); + saveStateDB(stateName); + + sendCommand(COMMAND_SAVEVM, "vm"); + + } + + // FIXME: We need this to able to catch complex characters strings like + // grave and send it as text + @Override + public boolean dispatchKeyEvent(KeyEvent event) { + if (event.getAction() == KeyEvent.ACTION_MULTIPLE && event.getKeyCode() == KeyEvent.KEYCODE_UNKNOWN) { + sendText(event.getCharacters().toString()); + return true; + } else + return super.dispatchKeyEvent(event); + + } + + private static void sendText(String string) { + + // Log.v("sendText", string); + KeyCharacterMap keyCharacterMap = KeyCharacterMap.load(KeyCharacterMap.VIRTUAL_KEYBOARD); + KeyEvent[] keyEvents = keyCharacterMap.getEvents(string.toCharArray()); + if (keyEvents != null) + for (int i = 0; i < keyEvents.length; i++) { + + if (keyEvents[i].getAction() == KeyEvent.ACTION_DOWN) { + // Log.v("sendText", "Up: " + keyEvents[i].getKeyCode()); + SDLActivity.onNativeKeyDown(keyEvents[i].getKeyCode()); + } else if (keyEvents[i].getAction() == KeyEvent.ACTION_UP) { + // Log.v("sendText", "Down: " + keyEvents[i].getKeyCode()); + SDLActivity.onNativeKeyUp(keyEvents[i].getKeyCode()); + } + } + } + + private class SaveVM extends AsyncTask { + + @Override + protected Void doInBackground(Void... arg0) { + // Log.v("handler", "Save VM"); + startTimeListener(); + return null; + } + + @Override + protected void onPostExecute(Void test) { + try { + if (progDialog.isShowing()) { + progDialog.dismiss(); + } + monitorMode = false; + sendCtrlAtlKey(KeyEvent.KEYCODE_1); + } catch (Exception e) { + e.printStackTrace(); + } + + } + } + + private void fullScreen() { + // AbstractScaling.getById(R.id.itemFitToScreen).setScaleTypeForActivity( + // this); + // showPanningState(); + } + + public void promptStateName(final Activity activity) { + // Log.v("promptStateName", "ask"); + + final AlertDialog alertDialog; + alertDialog = new AlertDialog.Builder(activity, R.style.MainDialogTheme).create(); + alertDialog.setTitle("Snapshot/State Name"); + final EditText stateView = new EditText(activity); + + stateView.setEnabled(true); + stateView.setVisibility(View.VISIBLE); + stateView.setSingleLine(); + alertDialog.setView(stateView); + + // alertDialog.setMessage(body); + alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "Create", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + + progDialog = ProgressDialog.show(activity, "Please Wait", "Saving VM State...", true); + new Thread(new Runnable() { + public void run() { + // Log.v("promptStateName", a.getText().toString()); + onSaveState1(stateView.getText().toString()); + } + }).start(); + + return; + } + }); + alertDialog.show(); + + } + + public void pausedVM() { + + MainActivity.vmexecutor.paused = 1; + ((MainActivity) MainActivity.activity).saveStateVMDB(); + + new AlertDialog.Builder(this, R.style.MainDialogTheme).setTitle("Paused").setMessage("VM is now Paused tap OK to exit") + .setPositiveButton("OK", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + if (MainActivity.vmexecutor != null) { + MainActivity.vmexecutor.stopvm(0); + } else if (activity.getParent() != null) { + activity.getParent().finish(); + } else { + activity.finish(); + } + } + }).show(); + } + + + public void pausedErrorVM(String errStr) { + + + new AlertDialog.Builder(this, R.style.MainDialogTheme).setTitle("Error").setMessage(errStr) + .setPositiveButton("OK", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + + Thread t = new Thread(new Runnable() { + public void run() { + String command = QmpClient.cont(); + String msg = QmpClient.sendCommand(command); + } + }); + t.start(); + } + }).show(); + } + + private String checkCompletion() { + String save_state = ""; + String pause_state = ""; + if (MainActivity.vmexecutor != null) { + // Get the state of saving full disk snapshot + //save_state = MainActivity.vmexecutor.get_save_state(); + + // Get the state of saving the VM memory only + pause_state = MainActivity.vmexecutor.get_pause_state(); +// Log.d(TAG, "save_state = " + save_state); +// Log.d(TAG, "pause_state = " + pause_state); + } + if (pause_state.equals("SAVING")) { + return pause_state; + } else if (pause_state.equals("DONE")) { + // FIXME: We wait for 5 secs to complete the state save not ideal + // for large OSes + // we should find a way to detect when QMP is really done so we + // don't get corrupt file states + new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { + @Override + public void run() { + pausedVM(); + } + }, 100); + return pause_state; + + } else if (pause_state.equals("ERROR")) { + new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { + @Override + public void run() { + pausedErrorVM("Could not pause VM. View log file for details"); + } + }, 100); + return pause_state; + } + return save_state; + } + + private static boolean fitToScreen = Config.enable_qemu_fullScreen; + private static boolean stretchToScreen = false; // Start with fitToScreen + + // Setup + protected void onCreate(Bundle savedInstanceState) { + // Log.v("SDL", "onCreate()"); + activity = this; + + VectrasSDLActivity.activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); + VectrasSDLActivity.activity.getWindow().getDecorView().setSystemUiVisibility( + View.SYSTEM_UI_FLAG_HIDE_NAVIGATION + |View.SYSTEM_UI_FLAG_FULLSCREEN + |View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY + + ); + + super.onCreate(savedInstanceState); + + Log.v("SDL", "Max Mem = " + Runtime.getRuntime().maxMemory()); + this.handler = commandHandler; + this.activity1 = this; + + // So we can call stuff from static callbacks + mSingleton = this; + + createUI(0, 0); + + FrameLayout fragmentLayout = findViewById(R.id.fragmentLayout); + + setFragment(new ControlsFragment()); + + // new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { + // @Override + // public void run() { + // UIUtils.setOrientation(activity); + // } + // }, 2000); + + UIUtils.showHints(this); + + this.resumeVM(); + + } + + protected void setFragment(Fragment fragment) { + FragmentTransaction t = getSupportFragmentManager().beginTransaction(); + t.replace(R.id.fragmentLayout, fragment); + t.commit(); + } + + public SDLSurface getSDLSurface() { + + if (mSurface == null) + mSurface = new SDLSurface(activity); + return mSurface; + } + + private void setScreenSize() { + + // WindowManager wm = (WindowManager) this + // .getSystemService(Context.WINDOW_SERVICE); + // Display display = wm.getDefaultDisplay(); + // this.screen_width = display.getWidth(); + // this.screen_height = display.getHeight(); + + } + + private void createUI(int w, int h) { + + // Set up the surface + mSurface = getSDLSurface(); + mSurface.setRenderer(new ClearRenderer()); + + // mSurface.setLayerType(View.LAYER_TYPE_SOFTWARE, null); + // setContentView(mSurface); + + int width = w; + int height = h; + if (width == 0) { + width = RelativeLayout.LayoutParams.WRAP_CONTENT; + } + if (height == 0) { + height = RelativeLayout.LayoutParams.WRAP_CONTENT; + } + + setContentView(R.layout.main_sdl); + + RelativeLayout mLayout = (RelativeLayout) findViewById(R.id.sdl); + RelativeLayout.LayoutParams surfaceParams = new RelativeLayout.LayoutParams(width, height); + surfaceParams.addRule(RelativeLayout.CENTER_HORIZONTAL); + surfaceParams.addRule(RelativeLayout.ALIGN_PARENT_TOP); + + mLayout.addView(mSurface, surfaceParams); + + SurfaceHolder holder = mSurface.getHolder(); + setScreenSize(); + } + + protected void onPause() { + Log.v("SDL", "onPause()"); + super.onPause(); + + } + + private void onKeyboard() { + InputMethodManager inputMgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + // inputMgr.toggleSoftInput(0, 0); + inputMgr.showSoftInput(this.mSurface, InputMethodManager.SHOW_FORCED); + } + + public void onSelectMenuVol() { + + final AlertDialog alertDialog; + alertDialog = new AlertDialog.Builder(activity).create(); + alertDialog.setTitle("Volume"); + + LinearLayout.LayoutParams volParams = new LinearLayout.LayoutParams( + LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); + + LinearLayout t = createVolumePanel(); + t.setLayoutParams(volParams); + + ScrollView s = new ScrollView(activity); + s.addView(t); + alertDialog.setView(s); + alertDialog.setButton(Dialog.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener() { + + public void onClick(DialogInterface dialog, int which) { + alertDialog.cancel(); + } + }); + alertDialog.show(); + + } + + public LinearLayout createVolumePanel() { + LinearLayout layout = new LinearLayout (this); + layout.setPadding(20, 20, 20, 20); + + LinearLayout.LayoutParams volparams = new LinearLayout.LayoutParams( + LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); + + SeekBar vol = new SeekBar(this); + vol.setMax(maxVolume); + int volume = getCurrentVolume(); + vol.setProgress(volume); + vol.setLayoutParams(volparams); + + ((SeekBar) vol).setOnSeekBarChangeListener(new OnSeekBarChangeListener() { + + public void onProgressChanged(SeekBar s, int progress, boolean touch) { + setVolume(progress); + } + + public void onStartTrackingTouch(SeekBar arg0) { + + } + + public void onStopTrackingTouch(SeekBar arg0) { + + } + }); + + layout.addView(vol); + + return layout; + + } + + protected void onResume() { + Log.v("SDL", "onResume()"); + + // if (status == null || status.equals("") || status.equals("DONE")) + // SDLActivity.nativeResume(); + + // mSurface.reSize(); + // new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { + // @Override + // public void run() { + // UIUtils.setOrientation(activity); + // } + // }, 1000); + + super.onResume(); + onMouse(); + } + + // static void resume() { + // Log.v("Resume", "Resuming -> Full Screeen"); + // if (SDLActivityCommon.fitToScreen) + // SDLActivityCommon.setFitToScreen(); + // if (SDLActivityCommon.stretchToScreen) + // SDLActivityCommon.setStretchToScreen(); + // else + // VectrasActivity.vmexecutor.toggleFullScreen(); + // } + + // Messages from the SDLMain thread + static int COMMAND_CHANGE_TITLE = 1; + static int COMMAND_SAVEVM = 2; + + public void loadLibraries() { + // No loading of .so we do it outside + } + + public void onRestartVM() { + Thread t = new Thread(new Runnable() { + public void run() { + if (MainActivity.vmexecutor != null) { + Log.v(TAG, "Restarting the VM..."); + MainActivity.vmexecutor.stopvm(1); + + } else { + Log.v(TAG, "Not running VM..."); + } + } + }); + t.start(); + } + + public void promptPause(final Activity activity) { + + final AlertDialog alertDialog; + alertDialog = new AlertDialog.Builder(activity).create(); + alertDialog.setTitle("Pause VM"); + TextView stateView = new TextView(activity); + stateView.setText("This make take a while depending on the RAM size used"); + stateView.setPadding(10, 10, 10, 10); + alertDialog.setView(stateView); + + alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "Pause", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + onPauseVM(); + return; + } + }); + alertDialog.show(); + } + + public void startSaveVMListener() { + stopTimeListener(); + timeQuit = false; + try { + Log.v("Listener", "Time Listener Started..."); + timeListener(); + synchronized (lockTime) { + while (timeQuit == false) { + lockTime.wait(); + } + lockTime.notifyAll(); + } + } catch (Exception ex) { + ex.printStackTrace(); + Log.v("SaveVM", "Time listener thread error: " + ex.getMessage()); + } +// new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { +// @Override +// public void run() { +// Toast.makeText(getApplicationContext(), "VM State saved", Toast.LENGTH_LONG).show(); +// } +// }, 1000); + + Log.v("Listener", "Time listener thread exited..."); + + } + + // Currently not working due to SDL can only support 1 window for Android + private void onHMP() { + monitorMode = true; + sendCtrlAtlKey(KeyEvent.KEYCODE_2); + + } + // private void onPauseVM() { + // Thread t = new Thread(new Runnable() { + // public void run() { + // // Delete any previous state file + // if (VectrasActivity.vmexecutor.save_state_name != null) { + // File file = new File(VectrasActivity.vmexecutor.save_state_name); + // if (file.exists()) { + // file.delete(); + // } + // } + // + // VectrasActivity.vmexecutor.paused = 1; + // ((VectrasActivity) VectrasActivity.activity).saveStateVMDB(); + // + // onHMP(); + // new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { + // @Override + // public void run() { + // Toast.makeText(getApplicationContext(), "Please wait while saving VM + // State", Toast.LENGTH_LONG) + // .show(); + // } + // }, 500); + // try { + // Thread.sleep(500); + // } catch (InterruptedException ex) { + // Logger.getLogger(VectrasVNCActivity.class.getName()).log(Level.SEVERE, + // null, ex); + // } + // + // String commandStop = "stop\n"; + // for (int i = 0; i < commandStop.length(); i++) + // sendText(commandStop.charAt(i) + ""); + // + // String commandMigrate = "migrate fd:" + // + + // VectrasActivity.vmexecutor.get_fd(VectrasActivity.vmexecutor.save_state_name) + // + "\n"; + // for (int i = 0; i < commandMigrate.length(); i++) + // sendText(commandMigrate.charAt(i) + ""); + // + // new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { + // @Override + // public void run() { + // VMListener a = new VMListener(); + // a.execute(); + // } + // }, 0); + // } + // }); + // t.start(); + // + // } + + private void onPauseVM() { + Thread t = new Thread(new Runnable() { + public void run() { + // Delete any previous state file + if ("VECTRAS" != null) { + File file = new File("VECTRAS"); + if (file.exists()) { + file.delete(); + } + } + + new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { + @Override + public void run() { + Toast.makeText(getApplicationContext(), "Please wait while saving VM State", Toast.LENGTH_SHORT) + .show(); + } + }, 0); + + String uri = "fd:" + MainActivity.vmexecutor.get_fd("VECTRAS"); + String command = QmpClient.stop(); + String msg = QmpClient.sendCommand(command); + if (msg != null) + Log.i(TAG, msg); + command = QmpClient.migrate(false, false, uri); + msg = QmpClient.sendCommand(command); + if (msg != null) { + Log.i(TAG, msg); + processMigrationResponse(msg); + } + + // XXX: We cant be sure that the machine state is completed + // saving + // new Handler(Looper.getMainLooper()).postDelayed(new + // Runnable() { + // @Override + // public void run() { + // pausedVM(); + // } + // }, 1000); + + // XXX: Instead we poll to see if migration is complete + new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { + @Override + public void run() { + VMListener a = new VMListener(); + a.execute(); + } + }, 0); + VectrasStatus.logInfo(String.format("VMPaused")); + } + }); + t.start(); + + } + + private void processMigrationResponse(String response) { + String errorStr = null; + try { + JSONObject object = new JSONObject(response); + errorStr = object.getString("error"); + }catch (Exception ex) { + + } + if (errorStr != null) { + String descStr = null; + + try { + JSONObject descObj = new JSONObject(errorStr); + descStr = descObj.getString("desc"); + }catch (Exception ex) { + + } + final String descStr1 = descStr; + + new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { + @Override + public void run() { + pausedErrorVM(descStr1!=null?descStr1:"Could not pause VM. View log for details"); + } + }, 100); + + } + + } + + private class VMListener extends AsyncTask { + + @Override + protected Void doInBackground(Void... arg0) { + startSaveVMListener(); + return null; + } + + @Override + protected void onPostExecute(Void test) { + // if (progDialog.isShowing()) { + // progDialog.dismiss(); + // } + + } + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + boolean res = this.mSurface.onTouchProcess(this.mSurface, event); + res = this.mSurface.onTouchEventProcess(event); + return false; + } + + private void resumeVM() { + Thread t = new Thread(new Runnable() { + public void run() { + if (MainActivity.vmexecutor.paused == 1) { + + MainActivity.vmexecutor.paused = 0; + // new Handler(Looper.getMainLooper()).postDelayed(new + // Runnable() { + // @Override + // public void run() { + // Toast.makeText(getApplicationContext(), "Please wait + // while resuming VM State", + // Toast.LENGTH_SHORT).show(); + // } + // }, 500); + + String command = QmpClient.cont(); + String msg = QmpClient.sendCommand(command); + if (msg != null) + Log.i(TAG, msg); + new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { + @Override + public void run() { + onMouse(); + } + }, 500); + } + VectrasStatus.logInfo(String.format("VMResumed")); + } + }); + t.start(); + + } + + public static void stop() { + // Log.d(TAG, "Pressed Back"); + + // super.onBackPressed(); + stopVM(activity, false); + } + + public void onBackPressed() { + // Log.d(TAG, "Pressed Back"); + + // super.onBackPressed(); + stopVM(activity, false); + } + + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + this.supportInvalidateOptionsMenu(); + } +} diff --git a/app/src/main/java/com/epicstudios/vectras/VectrasSDLSurfaceCompat.java b/app/src/main/java/com/epicstudios/vectras/VectrasSDLSurfaceCompat.java new file mode 100644 index 0000000..7a4f24f --- /dev/null +++ b/app/src/main/java/com/epicstudios/vectras/VectrasSDLSurfaceCompat.java @@ -0,0 +1,61 @@ +package com.epicstudios.vectras; + +public class VectrasSDLSurfaceCompat //extends SDLSurface +//implements View.OnGenericMotionListener +{ +// public VectrasSDLSurfaceCompat(Context context) { +// super(context); +//// this.setOnGenericMotionListener(this); +// // TODO Auto-generated constructor stub +// } + +// @Override +// public boolean onGenericMotion(View v, MotionEvent event) { +// +// +// if (VectrasSDLActivity.enablebluetoothmouse == 0) { +// return false; +// } +// float x = event.getX(); +// float y = event.getY(); +// float p = event.getPressure(); +// int action = event.getAction(); +// +// if (x < (VectrasSDLActivity.width - VectrasSDLActivity.vm_width) / 2) { +// return true; +// } else if (x > VectrasSDLActivity.width +// - (VectrasSDLActivity.width - VectrasSDLActivity.vm_width) / 2) { +// return true; +// } +// +// if (y < (VectrasSDLActivity.height - VectrasSDLActivity.vm_height) / 2) { +// return true; +// } else if (y > VectrasSDLActivity.height +// - (VectrasSDLActivity.height - VectrasSDLActivity.vm_height) / 2) { +// return true; +// } +// +// if (action == MotionEvent.ACTION_HOVER_MOVE) { +//// Log.v("onGenericMotion", "Moving to (X,Y)=(" + x +//// * VectrasSDLActivity.width_mult + "," + y +//// * VectrasSDLActivity.height_mult + ")"); +// +// VectrasSDLActivity.onNativeTouch(0, 1, MotionEvent.ACTION_MOVE, x +// * VectrasSDLActivity.width_mult, y * VectrasSDLActivity.height_mult, p); +// } +// +// if (event.getButtonState() == MotionEvent.BUTTON_SECONDARY) { +//// Log.v("onGenericMotion", "Right Click (X,Y)=" + x +//// * VectrasSDLActivity.width_mult + "," + y +//// * VectrasSDLActivity.height_mult + ")"); +// rightClick(event); +// } +// +// // save current +// old_x = x * VectrasSDLActivity.width_mult; +// old_y = y * VectrasSDLActivity.height_mult; +// return true; +// } +// + +} diff --git a/app/src/main/java/com/epicstudios/vectras/VectrasService.java b/app/src/main/java/com/epicstudios/vectras/VectrasService.java new file mode 100644 index 0000000..b3225b1 --- /dev/null +++ b/app/src/main/java/com/epicstudios/vectras/VectrasService.java @@ -0,0 +1,223 @@ +package com.epicstudios.vectras; + +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.app.Service; +import android.content.Context; +import android.content.Intent; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.net.wifi.WifiManager; +import android.os.Build; +import android.net.wifi.WifiManager.WifiLock; +import android.os.Bundle; +import android.os.IBinder; +import android.os.PowerManager; +import android.os.PowerManager.WakeLock; +import androidx.core.app.TaskStackBuilder; +import com.epicstudios.vectras.Config; +import android.util.Log; +import androidx.core.app.NotificationCompat; +import com.epicstudios.vectras.R; +import com.epicstudios.vectras.jni.VMExecutor; +import com.epicstudios.vectras.logger.VectrasStatus; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; + +public class VectrasService extends Service { + + private static final String TAG = "VectrasService"; + private static WifiLock mWifiLock; + public static VectrasService service; + private static WakeLock mWakeLock; + public static final int notifID = 1000; + private NotificationCompat.Builder builder; + private Notification mNotification; + + @Override + public IBinder onBind(Intent arg0) { + + return null; + } + + public static VMExecutor executor; + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + final String action = intent.getAction(); + final Bundle b = intent.getExtras(); + final int ui = b.getInt("ui", 0); + + if (action.equals(Config.ACTION_START)) { + new Thread(new Runnable() { + @Override + public void run() { + //fetching notifications from server + //if there is notifications then call this method + setUpAsForeground("VM Running in Background"); + } + }).start(); + setUpAsForeground("VM Running in Background"); + VectrasStatus.logInfo(String.format("VM Running in Background")); + + startLogging(); + + Log.v(TAG, "Starting the VM"); + VectrasStatus.logInfo(String.format("Starting the VM")); + executor.loadNativeLibs(); + + setupLocks(); + + Thread t = new Thread(new Runnable() { + public void run() { + + String res = executor.startvm(); + Log.d(TAG, res); + if (VectrasSDLActivity.activity != null) + VectrasSDLActivity.activity.finish(); + + releaseLocks(); + stopService(); + MainActivity.activity.cleanup(); + // NotificationManager notificationManager = (NotificationManager) service.getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE); + // notificationManager.cancelAll(); + //service.stopSelf(); + // VectrasActivity.sendHandlerMessage(VectrasActivity.OShandler, + // Const.VM_STOPPED); + + } + }); + t.start(); + + } + + // Don't restart if killed + return START_NOT_STICKY; + } + + private void setUpAsForeground(String text) { + + Intent notificationIntent = new Intent(this, VectrasSDLActivity.class); + PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_IMMUTABLE); + + Intent stopnotificationIntent = new Intent(this, VectrasService.class); + stopnotificationIntent.setAction(Config.ACTION_STOP); + PendingIntent Intent = PendingIntent.getService(this, 0, stopnotificationIntent, PendingIntent.FLAG_IMMUTABLE); + + NotificationCompat.Builder builder = new NotificationCompat.Builder(this, Config.notificationChannelID) + .setSmallIcon(R.mipmap.ic_launcher) + .setContentTitle(getString(R.string.app_name)) + .setContentText(text) + .setPriority(NotificationCompat.PRIORITY_HIGH) + .setColor(Color.BLUE) + .setDefaults(Notification.DEFAULT_ALL) + .setFullScreenIntent(pendingIntent, true) + .setAutoCancel(true) + .setContentIntent(pendingIntent) + .addAction(android.R.drawable.ic_media_pause, "Stop VM", Intent); + + + Notification notification = builder.build(); + + if (Build.VERSION.SDK_INT >= 26) { + NotificationChannel channel = new NotificationChannel(Config.notificationChannelID, Config.notificationChannelID, NotificationManager.IMPORTANCE_DEFAULT); + channel.setDescription(getString(R.string.app_name)); + NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + notificationManager.createNotificationChannel(channel); + } + startForeground(1000, notification); + } + + private void stopForegroundService() { + MainActivity.vmexecutor.stopvm(0); + stopForeground(true); + stopSelf(); + } + + public static StringBuilder log = null; + + private void startLogging() { + + Thread t = new Thread(new Runnable() { + public void run() { + + FileOutputStream os = null; + File logFile = new File(Config.logFilePath); + if (logFile.exists()) { + logFile.delete(); + } + try { + Runtime.getRuntime().exec("logcat -c"); + Process process = Runtime.getRuntime().exec("logcat v main"); + os = new FileOutputStream(logFile); + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream())); + + log = new StringBuilder(); + String line = ""; + while ((line = bufferedReader.readLine()) != null) { + log.append(line + "\n"); + os.write((line + "\n").getBytes("UTF-8")); + os.flush(); + } + } catch (IOException e) { + + } finally { + try { + os.flush(); + os.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + } + }); + t.start(); + } + + @Override + public void onCreate() { + Log.d(TAG, "debug: Creating " + TAG); + VectrasStatus.logInfo(String.format("debug: Creating " + TAG)); + service = this; + + } + + private void setupLocks() { + + mWifiLock = ((WifiManager) service.getApplicationContext().getSystemService(Context.WIFI_SERVICE)) + .createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF, "WIFI_VECTRAS"); + mWifiLock.setReferenceCounted(false); + + PowerManager pm = (PowerManager) service.getApplicationContext().getSystemService(Context.POWER_SERVICE); + mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "WAKELOCK_VECTRAS"); + mWakeLock.setReferenceCounted(false); + } + + private static void releaseLocks() { + + if (mWifiLock != null && mWifiLock.isHeld()) { + Log.d(TAG, "Release Wifi lock..."); + mWifiLock.release(); + } + + if (mWakeLock != null && mWakeLock.isHeld()) { + Log.d(TAG, "Release Wake lock..."); + mWakeLock.release(); + } + + } + + public static void stopService() { + service.stopForeground(true); + service.stopSelf(); + } + +} diff --git a/app/src/main/java/com/epicstudios/vectras/adapter/LogsAdapter.java b/app/src/main/java/com/epicstudios/vectras/adapter/LogsAdapter.java new file mode 100644 index 0000000..ff91c9b --- /dev/null +++ b/app/src/main/java/com/epicstudios/vectras/adapter/LogsAdapter.java @@ -0,0 +1,385 @@ +package com.epicstudios.vectras.adapter; + +import androidx.lifecycle.Observer; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.RecyclerView.AdapterDataObserver; +import com.epicstudios.vectras.logger.LogItem; +import java.util.Collections; +import android.widget.TextView; +import android.content.Context; +import android.view.ViewGroup; +import android.view.LayoutInflater; +import java.util.Vector; +import android.database.DataSetObserver; +import java.util.Date; +import android.text.format.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Locale; +import android.os.Message; +import android.os.Bundle; +import android.os.Handler; +import android.view.View; +import com.epicstudios.vectras.R; +import android.text.Html; +import android.view.MotionEvent; +import com.epicstudios.vectras.logger.VectrasStatus; + +public class LogsAdapter extends RecyclerView.Adapter + implements VectrasStatus.LogListener ,Handler.Callback, + View.OnTouchListener +{ + private static final int MESSAGE_NEWLOG = 0; + + private static final int MESSAGE_CLEARLOG = 1; + + private static final int MESSAGE_NEWTS = 2; + private static final int MESSAGE_NEWLOGLEVEL = 3; + + public static final int TIME_FORMAT_NONE = 0; + public static final int TIME_FORMAT_SHORT = 1; + public static final int TIME_FORMAT_ISO = 2; + private static final int MAX_STORED_LOG_ENTRIES = 1000; + + private Vector allEntries = new Vector<>(); + + private Vector currentLevelEntries = new Vector(); + + private Handler mHandler; + private Context mContext; + private OnItemClickListener itemClickListener; + private LinearLayoutManager mLinearLayoutManager; + + private Vector observers = new Vector<>(); + + private int mTimeFormat = -100; + private int mLogLevel = 3; + private boolean mLockAutoScroll = false; + + + /** + * Interfaces + */ + + public interface OnItemClickListener + { + void onItemClick(View view, int position, String logText); + void onItemLongClick(View view, int position, String logText); + } + + public class logViewHolder extends RecyclerView.ViewHolder + { + TextView textLog; + + logViewHolder(View itemView) + { + super(itemView); + + this.textLog = itemView.findViewById(R.id.textLog); + } + } + + + public LogsAdapter(LinearLayoutManager layoutManager, + Context context) + { + this.mContext = context; + this.mLinearLayoutManager = layoutManager; + + setLogLevel(VectrasStatus.LogLevel.DEBUG.getInt()); + + initLogBuffer(); + if (mHandler == null) + { + mHandler = new Handler(this); + } + + VectrasStatus.addLogListener(this); + } + + public void setOnItemClickListener(OnItemClickListener listener) { + this.itemClickListener = listener; + } + + private void initLogBuffer() + { + allEntries.clear(); + Collections.addAll(allEntries, VectrasStatus.getlogbuffer()); + initCurrentMessages(); + } + + private void initCurrentMessages() + { + currentLevelEntries.clear(); + for (LogItem li : allEntries) + { + if (li.getLogLevel().getInt() <= mLogLevel) + currentLevelEntries.add(li); + } + } + + @Override + public logViewHolder onCreateViewHolder(ViewGroup parent, int viewType) + { + Context context = parent.getContext(); + LayoutInflater inflater = LayoutInflater.from(context); + + View logView = inflater.inflate(R.layout.list_item_log, + parent, false); + logView.setOnTouchListener(this); + + return new logViewHolder(logView); + } + + @Override + public void onBindViewHolder(final logViewHolder viewHolder, + final int position) + { + final String text; + + try + { + LogItem logItem = currentLevelEntries.get(position); + String msg = logItem.getString(mContext); + String time = getTime(logItem, mTimeFormat); + text = (!time.isEmpty() ? String.format("[%s] ", time) : "") + msg; + viewHolder.textLog.setText(Html.fromHtml(text)); + } + catch (Exception e) + { + VectrasStatus.logException(e); + return; + } + + viewHolder.textLog.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) + { + if (itemClickListener != null) + itemClickListener.onItemClick(v, position, text); + } + }); + + viewHolder.textLog.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) + { + if (itemClickListener != null) + itemClickListener.onItemLongClick(v, position, text); + return true; + } + }); + } + + @Override + public void registerAdapterDataObserver(RecyclerView.AdapterDataObserver observer) + { + super.registerAdapterDataObserver(observer); + observers.add(observer); + } + + @Override + public void unregisterAdapterDataObserver(RecyclerView.AdapterDataObserver observer) + { + super.unregisterAdapterDataObserver(observer); + observers.remove(observer); + } + + @Override + public int getItemCount() + { + return currentLevelEntries.size(); + } + + @Override + public long getItemId(int position) + { + return ((Object) currentLevelEntries.get(position)).hashCode(); + } + + public boolean isEmpty() + { + return currentLevelEntries.isEmpty(); + } + + @Override + public void onAttachedToRecyclerView( + RecyclerView recyclerView) + { + super.onAttachedToRecyclerView(recyclerView); + } + + @Override + public boolean onTouch(View p1, MotionEvent event) + { + // aqui deveria pausar autoscroll + /*int action = event.getAction(); + + if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_MOVE){ + mLockAutoScroll = true; + + return true; + } + + mLockAutoScroll = false;*/ + + return false; + } + + private String getTime(LogItem le, int time) + { + if (time != TIME_FORMAT_NONE) + { + Date d = new Date(le.getLogtime()); + java.text.DateFormat timeformat; + if (time == TIME_FORMAT_SHORT) + timeformat = new SimpleDateFormat("HH:mm a"); + else + timeformat = DateFormat.getTimeFormat(mContext); + + return timeformat.format(d); + + } + else + { + return ""; + } + } + + + /** + * Handler implementação + */ + + @Override + public boolean handleMessage(Message msg) + { + // We have been called + if (msg.what == MESSAGE_NEWLOG) + { + LogItem logMessage = msg.getData().getParcelable("logmessage"); + if (addLogMessage(logMessage)) + { + + for (AdapterDataObserver observer : observers) + { + observer.onChanged(); + } + + if (!mLockAutoScroll) + scrollToLastPosition(); + } + } + else if (msg.what == MESSAGE_CLEARLOG) + { + for (AdapterDataObserver observer : observers) + { + observer.onChanged(); + } + initLogBuffer(); + } + else if (msg.what == MESSAGE_NEWTS) + { + for (AdapterDataObserver observer : observers) + { + observer.onChanged(); + } + } + else if (msg.what == MESSAGE_NEWLOGLEVEL) + { + initCurrentMessages(); + + for (AdapterDataObserver observer : observers) + { + observer.onChanged(); + } + + } + + return true; + } + + + /** + * @param logmessage + * @return True if the current entries have changed + */ + private boolean addLogMessage(LogItem logmessage) + { + allEntries.add(logmessage); + + if (allEntries.size() > MAX_STORED_LOG_ENTRIES) + { + Vector oldAllEntries = allEntries; + allEntries = new Vector(allEntries.size()); + for (int i = 50; i < oldAllEntries.size(); i++) + { + allEntries.add(oldAllEntries.elementAt(i)); + } + initCurrentMessages(); + return true; + } + else + { + if (logmessage.getLogLevel().getInt() <= mLogLevel) + { + currentLevelEntries.add(logmessage); + return true; + } + else + { + return false; + } + } + } + + public LogItem getItem(int position) + { + return currentLevelEntries.get(position); + } + + public void clearLog() + { + // Actually is probably called from GUI Thread as result of the user + // pressing a button. But better safe than sorry + VectrasStatus.clearLog(); + } + + public void scrollToLastPosition() + { + // scroll para ultima mensagem + mLinearLayoutManager.scrollToPosition( + mLinearLayoutManager.getItemCount() - 1); + } + + public void setLogLevel(int level) { + mLogLevel = level; + } + + + /** + * LogListener + */ + + @Override + public void newLog(LogItem logMessage) + { + Message msg = Message.obtain(); + + assert (msg != null); + msg.what = MESSAGE_NEWLOG; + + Bundle bundle = new Bundle(); + bundle.putParcelable("logmessage", logMessage); + + msg.setData(bundle); + mHandler.sendMessage(msg); + } + + @Override + public void onClear() + { + mHandler.sendEmptyMessage(MESSAGE_CLEARLOG); + } + +} diff --git a/app/src/main/java/com/epicstudios/vectras/jni/VMExecutor.java b/app/src/main/java/com/epicstudios/vectras/jni/VMExecutor.java new file mode 100644 index 0000000..b737a22 --- /dev/null +++ b/app/src/main/java/com/epicstudios/vectras/jni/VMExecutor.java @@ -0,0 +1,185 @@ +package com.epicstudios.vectras.jni; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.util.Log; +import com.epicstudios.vectras.Config; +import com.epicstudios.vectras.MainActivity; +import com.epicstudios.vectras.VectrasService; +import com.epicstudios.vectras.logger.VectrasStatus; +import com.epicstudios.vectras.utils.FileUtils; +import com.epicstudios.vectras.utils.RamInfo; +import com.epicstudios.vectras.utils.UIUtils; +import java.io.File; +import android.os.Environment; + +public class VMExecutor { + + private static Context context; + private final String TAG = "VMExecutor"; + public int paused; + public String base_dir = Config.basefiledir; + public boolean busy = false; + public boolean libLoaded = false; + + // Default Settings + private String libqemu = Config.libqemupath; + private int restart = 0; + private int width; + private int height; + + public static final File fileExtra = new File(Config.basefiledir + "config_extra.txt"); + public static final String extraParams = FileUtils.readFromFile(MainActivity.activity, fileExtra); + + /** + * @throws Exception + */ + public VMExecutor(Context context) throws Exception { + + } + + public void loadNativeLibs() { + libLoaded = true; + } + + // Load the shared lib + private void loadNativeLib(String lib, String destDir) { + if (true) { + String libLocation = destDir + "/" + lib; + try { + System.load(libLocation); + } catch (Exception ex) { + VectrasStatus.logInfo(String.format("failed to load native library: "+ex)); + Log.e("JNIExample", "failed to load native library: " + ex); + } + } + + } + + public String startvm() { + + String res = null; + + Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { + @Override + public void uncaughtException(Thread thread, Throwable e) { + e.printStackTrace(); + VectrasStatus.logInfo(String.format("Vectras Uncaught Exception: "+e.toString())); + Log.e(TAG, "Vectras Uncaught Exception: " + e.toString()); + } + }); + + try { + String Extras = null; + if (extraParams == "null") { + Extras = null; + } else { + Extras = extraParams; + } + if (extraParams == "error") { + VectrasStatus.logInfo(String.format(" QEMU Params Error: "+extraParams)); + return "error"; + } + VectrasStatus.logInfo(String.format("QEMU PARAMS: "+extraParams+" -m "+ RamInfo.vectrasMemory())); + res = start(this.libqemu, MainActivity.params, extraParams+" -m "+ RamInfo.vectrasMemory(), paused, "VECTRAS"); + } catch (Exception ex) { + ex.printStackTrace(); + VectrasStatus.logInfo(String.format("Vectras Exception: " + ex.toString())); + Log.e(TAG, "Vectras Exception: " + ex.toString()); + } + return res; + } + + //JNI Methods + public native String start(String lib_path, Object[] params, String params_extra, int paused, String save_state); + + protected native String stop(int restart); + + protected native void scale(); + + protected native String getpausestate(); + + public native String pausevm(String uri); + + protected native void resize(); + + protected native void togglefullscreen(); + + protected native String getstate(); + + public String startvm(Context context) { + VectrasService.executor = this; + Intent i = new Intent(Config.ACTION_START, null, context, VectrasService.class); + Bundle b = new Bundle(); + // b.putString("machine_type", this.machine_type); + b.putInt("ui", 1); + i.putExtras(b); + context.startService(i); + + VectrasStatus.logInfo(String.format("VMStarted")); + Log.v(TAG, "startVMService"); + return "startVMService"; + + } + + public String stopvm(int restart) { + Log.v(TAG, "Stopping the VM"); + VectrasStatus.logInfo(String.format("Stopping the VM")); + this.restart = restart; + return this.stop(this.restart); + } + + public String resumevm() { + // Set to delete previous snapshots after vm resumed + Log.v(TAG, "Resume the VM"); + VectrasStatus.logInfo(String.format("Resume the VM")); + String res = startvm(); + Log.d(TAG, res); + return res; + } + + public String get_pause_state() { + if (this.libLoaded) + return this.getpausestate(); + return ""; + } + + public String get_state() { + return this.getstate(); + } + + public void resizeScreen() { + + this.resize(); + + } + + public void toggleFullScreen() { + + this.togglefullscreen(); + + } + + public void screenScale(int width, int height) { + + this.width = width; + this.height = height; + + this.scale(); + + } + + public int get_fd(String path) { + int fd = FileUtils.get_fd(context, path); + return fd; + + } + + public int close_fd(int fd) { + int res = FileUtils.close_fd(fd); + return res; + + } + +} diff --git a/app/src/main/java/com/epicstudios/vectras/logger/LogItem.java b/app/src/main/java/com/epicstudios/vectras/logger/LogItem.java new file mode 100644 index 0000000..6e11df7 --- /dev/null +++ b/app/src/main/java/com/epicstudios/vectras/logger/LogItem.java @@ -0,0 +1,211 @@ +/* + * Copyright (c) 2012-2016 Arne Schwabe + * Distributed under the GNU GPL v2 with additional terms. For full terms see the file doc/LICENSE.txt + */ + +package com.epicstudios.vectras.logger; + +import android.os.Parcel; +import android.os.Parcelable; + +import com.epicstudios.vectras.R; +import android.content.Context; +import java.util.Locale; +import java.util.UnknownFormatConversionException; +import java.util.FormatFlagsConversionMismatchException; +import android.annotation.SuppressLint; +import java.security.cert.CertificateFactory; +import java.security.cert.X509Certificate; +import android.content.pm.PackageManager; +import java.io.ByteArrayInputStream; +import android.content.pm.Signature; +import java.security.MessageDigest; +import java.util.Arrays; +import android.content.pm.PackageInfo; +import java.security.NoSuchAlgorithmException; +import java.security.cert.CertificateException; + +/** + * Created by arne on 24.04.16. + */ +public class LogItem implements Parcelable { + + private Object[] mArgs = null; + private String mMessage = null; + private int mResourceId; + // Default log priority + VectrasStatus.LogLevel mLevel = VectrasStatus.LogLevel.INFO; + private long logtime = System.currentTimeMillis(); + private int mVerbosityLevel = -1; + + public LogItem(int resId, Object... args) { + mResourceId = resId; + mArgs = args; + } + + public LogItem(VectrasStatus.LogLevel loglevel, int verblevel, String msg) { + mLevel = loglevel; + mMessage = msg; + mVerbosityLevel = verblevel; + } + + public LogItem(VectrasStatus.LogLevel level, int resId, Object... args) { + mLevel = level; + mResourceId = resId; + mArgs = args; + } + + public LogItem(VectrasStatus.LogLevel loglevel, String msg) { + mLevel = loglevel; + mMessage = msg; + } + + + public LogItem(VectrasStatus.LogLevel loglevel, int ressourceId) { + mResourceId = ressourceId; + mLevel = loglevel; + } + + @Override + public String toString() { + return getString(null); + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeArray(mArgs); + dest.writeString(mMessage); + dest.writeInt(mResourceId); + dest.writeInt(mLevel.getInt()); + + dest.writeLong(logtime); + } + + public LogItem(Parcel in) { + mArgs = in.readArray(Object.class.getClassLoader()); + mMessage = in.readString(); + mResourceId = in.readInt(); + mLevel = VectrasStatus.LogLevel.getEnumByValue(in.readInt()); + logtime = in.readLong(); + } + + public static final Creator CREATOR + = new Creator() { + public LogItem createFromParcel(Parcel in) { + return new LogItem(in); + } + + public LogItem[] newArray(int size) { + return new LogItem[size]; + } + }; + + public VectrasStatus.LogLevel getLogLevel() { + return mLevel; + } + + public long getLogtime() { + return logtime; + } + + public String getMessage() { + return mMessage; + } + + public String getString(Context c) { + try { + if (mMessage != null) { + return mMessage; + } else { + if (c != null) { + if (mResourceId == R.string.app_name) + return getAppInfoString(c); + else if (mArgs == null) + return c.getString(mResourceId); + else + return c.getString(mResourceId, mArgs); + } else { + String str = String.format(Locale.ENGLISH, "Log (no context) resid %d", mResourceId); + if (mArgs != null) + str += join("|", mArgs); + + return str; + } + } + } catch (UnknownFormatConversionException e) { + if (c != null) + throw new UnknownFormatConversionException(e.getLocalizedMessage() + getString(null)); + else + throw e; + } catch (java.util.FormatFlagsConversionMismatchException e) { + if (c != null) + throw new FormatFlagsConversionMismatchException(e.getLocalizedMessage() + getString(null), e.getConversion()); + else + throw e; + } + } + + //private String listb = ""; + + // The lint is wrong here + @SuppressLint("StringFormatMatches") + private String getAppInfoString(Context c) { + c.getPackageManager(); + String apksign = "error getting package signature"; + + String version = "error getting version"; + try { + @SuppressLint("PackageManagerGetSignatures") + Signature raw = c.getPackageManager().getPackageInfo(c.getPackageName(), PackageManager.GET_SIGNATURES).signatures[0]; + CertificateFactory cf = CertificateFactory.getInstance("X.509"); + X509Certificate cert = (X509Certificate) cf.generateCertificate(new ByteArrayInputStream(raw.toByteArray())); + MessageDigest md = MessageDigest.getInstance("SHA-1"); + byte[] der = cert.getEncoded(); + md.update(der); + byte[] digest = md.digest(); + if (!Arrays.equals(digest, VectrasStatus.oficialkey) && !Arrays.equals(digest, VectrasStatus.oficialdebugkey)) + apksign = ""; + PackageInfo packageinfo = c.getPackageManager().getPackageInfo(c.getPackageName(), 0); + version = String.format("%s Projeto %d", packageinfo.versionName, packageinfo.versionCode); + + } catch (PackageManager.NameNotFoundException | CertificateException | + NoSuchAlgorithmException ignored) { + } + + /* Object[] argsext = Arrays.copyOf(mArgs, mArgs.length); + argsext[argsext.length - 1] = apksign; + argsext[argsext.length - 2] = version;*/ + + return c.getString(R.string.app_name, version, apksign); + + } + + // TextUtils.join will cause not macked exeception in tests .... + public static String join(CharSequence delimiter, Object[] tokens) { + StringBuilder sb = new StringBuilder(); + boolean firstTime = true; + for (Object token : tokens) { + if (firstTime) { + firstTime = false; + } else { + sb.append(delimiter); + } + sb.append(token); + } + return sb.toString(); + } + + public int getVerbosityLevel() { + if (mVerbosityLevel == -1) { + // Hack: + // For message not from OpenVPN, report the status level as log level + return mLevel.getInt(); + } + return mVerbosityLevel; + } +} diff --git a/app/src/main/java/com/epicstudios/vectras/logger/VMStatus.java b/app/src/main/java/com/epicstudios/vectras/logger/VMStatus.java new file mode 100644 index 0000000..d6e986b --- /dev/null +++ b/app/src/main/java/com/epicstudios/vectras/logger/VMStatus.java @@ -0,0 +1,33 @@ +package com.epicstudios.vectras.logger; + +import android.os.Parcel; +import android.os.Parcelable; + +public enum VMStatus implements Parcelable { + V_STARTVM, + V_STOPVM, + UNKNOWN_LEVEL; + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeInt(ordinal()); + } + + @Override + public int describeContents() { + return 0; + } + + public static final Creator CREATOR = new Creator() { + @Override + public VMStatus createFromParcel(Parcel in) { + return VMStatus.values()[in.readInt()]; + } + + @Override + public VMStatus[] newArray(int size) { + return new VMStatus[size]; + } + }; +} + diff --git a/app/src/main/java/com/epicstudios/vectras/logger/VectrasStatus.java b/app/src/main/java/com/epicstudios/vectras/logger/VectrasStatus.java new file mode 100644 index 0000000..a77e7da --- /dev/null +++ b/app/src/main/java/com/epicstudios/vectras/logger/VectrasStatus.java @@ -0,0 +1,355 @@ +package com.epicstudios.vectras.logger; + +import static android.provider.Settings.System.getString; + +import java.io.StringWriter; +import java.io.PrintWriter; +import java.util.LinkedList; +import java.util.Vector; +import android.os.Build; +import com.epicstudios.vectras.R; +import android.content.Intent; +import android.content.Context; +import android.os.Message; +import java.io.File; +import android.os.HandlerThread; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import java.util.Iterator; +import java.util.Locale; + +public class VectrasStatus +{ + private static final LinkedList logbuffer; + + private static Vector logListener; + private static Vector stateListener; + + private static VMStatus mLastLevel = VMStatus.V_STOPVM; + + private static String mLaststatemsg = ""; + private static String mLaststate = "NOPROCESS"; + private static int mLastStateresid = R.string.noproccesses; + private static Intent mLastIntent = null; + + + static final int MAXLOGENTRIES = 1000; + + public static boolean isVMActive() { + return mLastLevel != VMStatus.V_STOPVM && !(mLastLevel == VMStatus.V_STOPVM); + } + + public static String getLastState() { + return mLaststate; + } + + public static String getLastCleanLogMessage(Context c) { + String message = mLaststatemsg; + switch (mLastLevel) { + case V_STARTVM: + String[] parts = mLaststatemsg.split(","); + if (parts.length >= 7) + message = String.format(Locale.US, "%s %s", parts[1], parts[6]); + break; + } + + while (message.endsWith(",")) + message = message.substring(0, message.length() - 1); + + String status = mLaststate; + if (status.equals("NOPROCESS")) + return message; + + String prefix = c.getString(mLastStateresid); + if (mLastStateresid == R.string.unknownstate) + message = status + message; + if (message.length() > 0) + prefix += ": "; + + return prefix + message; + + } + + + public static enum LogLevel { + + INFO(2), + ERROR(-2), + WARNING(1), + VERBOSE(3), + DEBUG(4); + + protected int mValue; + + LogLevel(int value) { + mValue = value; + } + + public int getInt() { + return mValue; + } + + public static LogLevel getEnumByValue(int value) { + switch (value) { + case 2: + return INFO; + case -2: + return ERROR; + case 1: + return WARNING; + case 3: + return VERBOSE; + case 4: + return DEBUG; + + default: + return null; + } + } + } + + // keytool -printcert -jarfile de.blinkt.openvpn_85.apk + // tudo ok, certificado da Playstore + static final byte[] oficialkey = {93, -72, 88, 103, -128, 115, -1, -47, 120, 113, 98, -56, 12, -56, 52, -62, 95, -2, -114, 95}; + // já atualizado, slipk certificado + static final byte[] oficialdebugkey = {-41, 73, 58, 102, -81, -27, -120, 45, -56, -3, 53, -49, 119, -97, -20, -80, 65, 68, -72, -22}; + + static { + logbuffer = new LinkedList<>(); + logListener = new Vector<>(); + stateListener = new Vector<>(); + + logInformation(); + } + + + public synchronized static void clearLog() { + logbuffer.clear(); + logInformation(); + logInfo("LOGS CLEARED!"); + + for (LogListener li : logListener) { + li.onClear(); + } + } + + public synchronized static LogItem[] getlogbuffer() { + + // The stoned way of java to return an array from a vector + // brought to you by eclipse auto complete + return logbuffer.toArray(new LogItem[logbuffer.size()]); + } + + private static void logInformation() { + logInfo(R.string.app_name); + logInfo(R.string.app_version); + logInfo("MOBILE MODEL: " + Build.MODEL); + logInfo("ANDROID VERSION: " + Build.VERSION.SDK_INT); + } + + + /** + * Listeners + */ + + public interface LogListener { + void newLog(LogItem logItem); + void onClear(); + } + + public interface StateListener { + void updateState(String state, String logMessage, int localizedResId, VMStatus level, Intent intent); + } + + public synchronized static void addLogListener(LogListener ll) { + if (!logListener.contains(ll)) { + logListener.add(ll); + } + } + + public synchronized static void removeLogListener(LogListener ll) { + if (logListener.contains(ll)) { + logListener.remove(ll); + } + } + + public synchronized static void addStateListener(StateListener sl) { + if (!stateListener.contains(sl)) { + stateListener.add(sl); + if (mLaststate != null) + sl.updateState(mLaststate, mLaststatemsg, mLastStateresid, mLastLevel, mLastIntent); + } + } + + public synchronized static void removeStateListener(StateListener sl) { + if (stateListener.contains(sl)) { + stateListener.remove(sl); + } + } + + + /** + * State + */ + + public static final String + V_STARTVM = "STARTING VM", + V_STOPVM = "STOPPING VM"; + + public static int getLocalizedState(String state) { + switch (state) { + case V_STARTVM: + return R.string.startvm; + case V_STOPVM: + return R.string.stopvm; + } + return R.string.unknownstate; + } + + private static VMStatus getLevel(String state) { + String[] noreplyet = {V_STARTVM, V_STOPVM}; + String[] reply = {V_STARTVM, V_STOPVM}; + String[] startedvm = {V_STARTVM}; + String[] stoppedvm = {V_STOPVM}; + + for (String x : noreplyet) + if (state.equals(x)) + return VMStatus.V_STARTVM; + + for (String x : reply) + if (state.equals(x)) + return VMStatus.V_STOPVM; + + for (String x : startedvm) + if (state.equals(x)) + return VMStatus.V_STARTVM; + + for (String x : stoppedvm) + if (state.equals(x)) + return VMStatus.V_STOPVM; + + return VMStatus.UNKNOWN_LEVEL; + } + + public static void updateStateString(String state, String msg) { + int rid = getLocalizedState(state); + VMStatus level = getLevel(state); + updateStateString(state, msg, rid, level); + } + + public synchronized static void updateStateString(String state, String msg, int resid, VMStatus level) + { + updateStateString(state, msg, resid, level, null); + } + + public synchronized static void updateStateString(String state, String msg, int resid, VMStatus level, Intent intent) { + // Workound for OpenVPN doing AUTH and wait and being startedvm + // Simply ignore these state + /*if (mLastLevel == VMStatus.LEVEL_CONNECTED && + (state.equals(SSH_AUTHENTICATING))) { + newLogItem(new LogItem((LogLevel.DEBUG), String.format("Ignoring SocksHttp Status in CONNECTED state (%s->%s): %s", state, level.toString(), msg))); + return; + }*/ + + mLaststate = state; + mLaststatemsg = msg; + mLastStateresid = resid; + mLastLevel = level; + mLastIntent = intent; + + + for (StateListener sl : stateListener) { + sl.updateState(state, msg, resid, level, intent); + } + + //newLogItem(new LogItem((LogLevel.DEBUG), String.format("SocksHttp Novo Status (%s->%s): %s",state,level.toString(),msg))); + } + + + /** + * NewLog + */ + + static void newLogItem(LogItem logItem) { + newLogItem(logItem, false); + } + + synchronized static void newLogItem(LogItem logItem, boolean cachedLine) { + if (cachedLine) { + logbuffer.addFirst(logItem); + } else { + logbuffer.addLast(logItem); + } + + if (logbuffer.size() > MAXLOGENTRIES + MAXLOGENTRIES / 2) { + while (logbuffer.size() > MAXLOGENTRIES) + logbuffer.removeFirst(); + } + + for (LogListener ll : logListener) { + ll.newLog(logItem); + } + } + + + /** + * Logger static methods + */ + + public static void logException(String context, String e) { + logException(LogLevel.ERROR, context, e); + } + + public static void logException(LogLevel ll, String context, String e) { + + LogItem li; + + if (context != null) + li = new LogItem(ll, String.format("%s: %s", context, e)); + else + li = new LogItem(ll, String.format("Error: %s", e)); + + newLogItem(li); + } + + public static void logException(Exception e) { + logException(LogLevel.ERROR, null, e.getMessage()); + } + + public static void logInfo(String message) { + newLogItem(new LogItem(LogLevel.INFO, message)); + } + + public static void logDebug(String message) { + newLogItem(new LogItem(LogLevel.DEBUG, message)); + } + + public static void logInfo(int resourceId, Object... args) { + newLogItem(new LogItem(LogLevel.INFO, resourceId, args)); + } + + public static void logDebug(int resourceId, Object... args) { + newLogItem(new LogItem(LogLevel.DEBUG, resourceId, args)); + } + + public static void logError(String msg) { + newLogItem(new LogItem(LogLevel.ERROR, msg)); + } + + public static void logWarning(int resourceId, Object... args) { + newLogItem(new LogItem(LogLevel.WARNING, resourceId, args)); + } + + public static void logWarning(String msg) { + newLogItem(new LogItem(LogLevel.WARNING, msg)); + } + + public static void logError(int resourceId) { + newLogItem(new LogItem(LogLevel.ERROR, resourceId)); + } + + public static void logError(int resourceId, Object... args) { + newLogItem(new LogItem(LogLevel.ERROR, resourceId, args)); + } + +} diff --git a/app/src/main/java/com/epicstudios/vectras/utils/AppUpdater.java b/app/src/main/java/com/epicstudios/vectras/utils/AppUpdater.java new file mode 100644 index 0000000..ff305a6 --- /dev/null +++ b/app/src/main/java/com/epicstudios/vectras/utils/AppUpdater.java @@ -0,0 +1,81 @@ +package com.epicstudios.vectras.utils; + +import android.app.ProgressDialog; +import android.content.Context; +import android.os.AsyncTask; +import com.epicstudios.vectras.Config; +import com.epicstudios.vectras.R; +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; + +public class AppUpdater extends AsyncTask { + + private Context context; + private OnUpdateListener listener; + private ProgressDialog progressDialog; + private boolean isOnCreate; + + public AppUpdater(Context context, OnUpdateListener listener) { + this.context = context; + this.listener = listener; + } + + public void start(boolean isOnCreate) { + this.isOnCreate = isOnCreate; + execute(); + } + + public interface OnUpdateListener { + void onUpdateListener(String result); + } + + @Override + protected String doInBackground(String... strings) { + try { + StringBuilder sb = new StringBuilder(); + URL url = new URL(Config.updateJson); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setConnectTimeout(30000); + conn.setReadTimeout(30000); + conn.setRequestMethod("GET"); + conn.connect(); + + BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); + String response; + + while ((response = br.readLine()) != null) { + sb.append(response); + } + return sb.toString(); + } catch (Exception e) { + e.printStackTrace(); + return "Error on getting data: " + e.getMessage(); + + } + } + + @Override + protected void onPreExecute() { + super.onPreExecute(); + if (isOnCreate) { + progressDialog = new ProgressDialog(context, R.style.MainDialogTheme); + progressDialog.setMessage("Please wait for the check"); + progressDialog.setTitle("Looking for Update"); + progressDialog.setCancelable(false); + progressDialog.show(); + } + } + + @Override + protected void onPostExecute(String s) { + super.onPostExecute(s); + if (isOnCreate && progressDialog != null) { + progressDialog.dismiss(); + } + if (listener != null) { + listener.onUpdateListener(s); + } + } +} diff --git a/app/src/main/java/com/epicstudios/vectras/utils/FileInstaller.java b/app/src/main/java/com/epicstudios/vectras/utils/FileInstaller.java new file mode 100644 index 0000000..f220107 --- /dev/null +++ b/app/src/main/java/com/epicstudios/vectras/utils/FileInstaller.java @@ -0,0 +1,113 @@ +package com.epicstudios.vectras.utils; + +import android.app.Activity; +import android.content.Context; +import android.content.res.AssetManager; +import android.util.Log; + +import com.epicstudios.vectras.Config; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * + * @author dev + */ +public class FileInstaller { + + public static void installFiles(Activity activity) { + + Log.v("Installer", "Installing files..."); + File tmpDir = new File(Config.basefiledir); + if (!tmpDir.exists()) { + tmpDir.mkdirs(); + } + + //Install base dir + File dir = new File(Config.basefiledir); + if (dir.exists() && dir.isDirectory()) { + //don't create again + } else if (dir.exists() && !dir.isDirectory()) { + Log.v("Installer", "Could not create Dir, file found: " + Config.basefiledir); + return; + } else if (!dir.exists()) { + dir.mkdir(); + } + + Log.v("Installer", "Getting Files: "); + //Get each file in assets under ./roms/ and install in SDCARD + AssetManager am = activity.getResources().getAssets(); + String[] files = null; + try { + files = am.list("roms"); + } catch (IOException ex) { + Logger.getLogger(FileInstaller.class.getName()).log(Level.SEVERE, null, ex); + Log.v("Installer", "Could not install files: " + ex.getMessage()); + } + for (int i = 0; i < files.length; i++) { + Log.v("Installer", "File: " + files[i]); + String[] subfiles = null; + try { + subfiles = am.list("roms/" + files[i]); + } catch (IOException ex) { + Logger.getLogger(FileInstaller.class.getName()).log(Level.SEVERE, null, ex); + } + if (subfiles != null && subfiles.length > 0) { + //Install base dir + File dir1 = new File(Config.basefiledir + files[i]); + if (dir1.exists() && dir1.isDirectory()) { + //don't create again + } else if (dir1.exists() && !dir1.isDirectory()) { + Log.v("Installer", "Could not create Dir, file found: " + Config.basefiledir + files[i]); + return; + } else if (!dir1.exists()) { + dir1.mkdir(); + } + for (int k = 0; k < subfiles.length; k++) { + Log.v("Installer", "File: " + files[i] + "/" + subfiles[k]); + installFile(activity, files[i] + "/" + subfiles[k], Config.basefiledir, "roms", null); + } + } else { + installFile(activity, files[i], Config.basefiledir, "roms", null); + } + } +// InputStream is = am.open(srcFile); + + } + + public static boolean installFile(Context activity, String srcFile, + String destDir, String assetsDir, String destFile) { + try { + AssetManager am = activity.getResources().getAssets(); // get the local asset manager + InputStream is = am.open(assetsDir + "/" + srcFile); // open the input stream for reading + File destDirF = new File(destDir); + if (!destDirF.exists()) { + boolean res = destDirF.mkdirs(); + if(!res){ + UIUtils.toastLong(activity, "Could not create directory for image"); + } + } + + if(destFile==null) + destFile=srcFile; + OutputStream os = new FileOutputStream(destDir + "/" + destFile); + byte[] buf = new byte[8092]; + int n; + while ((n = is.read(buf)) > 0) { + os.write(buf, 0, n); + } + os.close(); + is.close(); + return true; + } catch (Exception ex) { + Log.e("Installer", "failed to install file: " + destFile + ", Error:" + ex.getMessage()); + return false; + } + } +} diff --git a/app/src/main/java/com/epicstudios/vectras/utils/FileUtils.java b/app/src/main/java/com/epicstudios/vectras/utils/FileUtils.java new file mode 100644 index 0000000..45ec2bc --- /dev/null +++ b/app/src/main/java/com/epicstudios/vectras/utils/FileUtils.java @@ -0,0 +1,605 @@ +package com.epicstudios.vectras.utils; + +import android.annotation.SuppressLint; +import android.content.ContentUris; +import android.content.Context; +import android.content.Intent; +import android.database.Cursor; +import android.net.Uri; +import android.os.Build; +import android.os.Environment; +import android.provider.DocumentsContract; +import android.provider.MediaStore; +import android.provider.OpenableColumns; +import android.text.TextUtils; +import android.util.Log; +import android.webkit.MimeTypeMap; +import android.widget.Toast; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.net.Uri; +import android.os.Handler; +import android.os.Looper; +import android.os.ParcelFileDescriptor; +import android.util.Log; +import android.widget.Toast; +import com.epicstudios.vectras.MainActivity; +import com.epicstudios.vectras.Config; +import java.io.BufferedReader; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.HashMap; + +/** + * + * @author dev + */ +public class FileUtils { + + private static Uri contentUri = null; + + @SuppressLint("NewApi") + public static String getPath(Context context, final Uri uri) { + // check here to KITKAT or new version + final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; + String selection = null; + String[] selectionArgs = null; + // DocumentProvider + if (isKitKat ) { + // ExternalStorageProvider + + if (isExternalStorageDocument(uri)) { + final String docId = DocumentsContract.getDocumentId(uri); + final String[] split = docId.split(":"); + final String type = split[0]; + + String fullPath = getPathFromExtSD(split); + if (fullPath != "") { + return fullPath; + } else { + return null; + } + } + + + // DownloadsProvider + + if (isDownloadsDocument(uri)) { + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + final String id; + Cursor cursor = null; + try { + cursor = context.getContentResolver().query(uri, new String[]{MediaStore.MediaColumns.DISPLAY_NAME}, null, null, null); + if (cursor != null && cursor.moveToFirst()) { + String fileName = cursor.getString(0); + String path = Environment.getExternalStorageDirectory().toString() + "/Download/" + fileName; + if (!TextUtils.isEmpty(path)) { + return path; + } + } + } + finally { + if (cursor != null) + cursor.close(); + } + id = DocumentsContract.getDocumentId(uri); + if (!TextUtils.isEmpty(id)) { + if (id.startsWith("raw:")) { + return id.replaceFirst("raw:", ""); + } + String[] contentUriPrefixesToTry = new String[]{ + "content://downloads/public_downloads", + "content://downloads/my_downloads" + }; + for (String contentUriPrefix : contentUriPrefixesToTry) { + try { + final Uri contentUri = ContentUris.withAppendedId(Uri.parse(contentUriPrefix), Long.valueOf(id)); + + + return getDataColumn(context, contentUri, null, null); + } catch (NumberFormatException e) { + //In Android 8 and Android P the id is not a number + return uri.getPath().replaceFirst("^/document/raw:", "").replaceFirst("^raw:", ""); + } + } + + + } + } + else { + final String id = DocumentsContract.getDocumentId(uri); + + if (id.startsWith("raw:")) { + return id.replaceFirst("raw:", ""); + } + try { + contentUri = ContentUris.withAppendedId( + Uri.parse("content://downloads/public_downloads"), Long.valueOf(id)); + } + catch (NumberFormatException e) { + e.printStackTrace(); + } + if (contentUri != null) { + + return getDataColumn(context, contentUri, null, null); + } + } + } + + + // MediaProvider + if (isMediaDocument(uri)) { + final String docId = DocumentsContract.getDocumentId(uri); + final String[] split = docId.split(":"); + final String type = split[0]; + + Uri contentUri = null; + + if ("image".equals(type)) { + contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; + } else if ("video".equals(type)) { + contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; + } else if ("audio".equals(type)) { + contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; + } + selection = "_id=?"; + selectionArgs = new String[]{split[1]}; + + + return getDataColumn(context, contentUri, selection, + selectionArgs); + } + + if (isGoogleDriveUri(uri)) { + return getDriveFilePath(context, uri); + } + + if(isWhatsAppFile(uri)){ + return getFilePathForWhatsApp(context, uri); + } + + + if ("content".equalsIgnoreCase(uri.getScheme())) { + + if (isGooglePhotosUri(uri)) { + return uri.getLastPathSegment(); + } + if (isGoogleDriveUri(uri)) { + return getDriveFilePath(context, uri); + } + if( Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) + { + + // return getFilePathFromURI(context,uri); + return copyFileToInternalStorage(context, uri,"userfiles"); + // return getRealPathFromURI(context,uri); + } + else + { + return getDataColumn(context, uri, null, null); + } + + } + if ("file".equalsIgnoreCase(uri.getScheme())) { + return uri.getPath(); + } + } + else { + + if(isWhatsAppFile(uri)){ + return getFilePathForWhatsApp(context, uri); + } + + if ("content".equalsIgnoreCase(uri.getScheme())) { + String[] projection = { + MediaStore.Images.Media.DATA + }; + Cursor cursor = null; + try { + cursor = context.getContentResolver() + .query(uri, projection, selection, selectionArgs, null); + int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); + if (cursor.moveToFirst()) { + return cursor.getString(column_index); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + + + + return null; + } + + private static boolean fileExists(String filePath) { + File file = new File(filePath); + + return file.exists(); + } + + private static String getPathFromExtSD(String[] pathData) { + final String type = pathData[0]; + final String relativePath = "/" + pathData[1]; + String fullPath = ""; + + // on my Sony devices (4.4.4 & 5.1.1), `type` is a dynamic string + // something like "71F8-2C0A", some kind of unique id per storage + // don't know any API that can get the root path of that storage based on its id. + // + // so no "primary" type, but let the check here for other devices + if ("primary".equalsIgnoreCase(type)) { + fullPath = Environment.getExternalStorageDirectory() + relativePath; + if (fileExists(fullPath)) { + return fullPath; + } + } + + // Environment.isExternalStorageRemovable() is `true` for external and internal storage + // so we cannot relay on it. + // + // instead, for each possible path, check if file exists + // we'll start with secondary storage as this could be our (physically) removable sd card + fullPath = System.getenv("SECONDARY_STORAGE") + relativePath; + if (fileExists(fullPath)) { + return fullPath; + } + + fullPath = System.getenv("EXTERNAL_STORAGE") + relativePath; + if (fileExists(fullPath)) { + return fullPath; + } + + return fullPath; + } + + private static String getDriveFilePath(Context context, Uri uri) { + Uri returnUri = uri; + Cursor returnCursor = context.getContentResolver().query(returnUri, null, null, null, null); + /* + * Get the column indexes of the data in the Cursor, + * * move to the first row in the Cursor, get the data, + * * and display it. + * */ + int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME); + int sizeIndex = returnCursor.getColumnIndex(OpenableColumns.SIZE); + returnCursor.moveToFirst(); + String name = (returnCursor.getString(nameIndex)); + String size = (Long.toString(returnCursor.getLong(sizeIndex))); + File file = new File(context.getCacheDir(), name); + try { + InputStream inputStream = context.getContentResolver().openInputStream(uri); + FileOutputStream outputStream = new FileOutputStream(file); + int read = 0; + int maxBufferSize = 1 * 1024 * 1024; + int bytesAvailable = inputStream.available(); + + //int bufferSize = 1024; + int bufferSize = Math.min(bytesAvailable, maxBufferSize); + + final byte[] buffers = new byte[bufferSize]; + while ((read = inputStream.read(buffers)) != -1) { + outputStream.write(buffers, 0, read); + } + Log.e("File Size", "Size " + file.length()); + inputStream.close(); + outputStream.close(); + Log.e("File Path", "Path " + file.getPath()); + Log.e("File Size", "Size " + file.length()); + } catch (Exception e) { + Log.e("Exception", e.getMessage()); + } + return file.getPath(); + } + + /*** + * Used for Android Q+ + * @param uri + * @param newDirName if you want to create a directory, you can set this variable + * @return + */ + private static String copyFileToInternalStorage(Context context, Uri uri, String newDirName) { + Uri returnUri = uri; + + Cursor returnCursor = context.getContentResolver().query(returnUri, new String[]{ + OpenableColumns.DISPLAY_NAME,OpenableColumns.SIZE + }, null, null, null); + + + /* + * Get the column indexes of the data in the Cursor, + * * move to the first row in the Cursor, get the data, + * * and display it. + * */ + int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME); + int sizeIndex = returnCursor.getColumnIndex(OpenableColumns.SIZE); + returnCursor.moveToFirst(); + String name = (returnCursor.getString(nameIndex)); + String size = (Long.toString(returnCursor.getLong(sizeIndex))); + + File output; + if(!newDirName.equals("")) { + File dir = new File(context.getFilesDir() + "/" + newDirName); + if (!dir.exists()) { + dir.mkdir(); + } + output = new File(context.getFilesDir() + "/" + newDirName + "/" + name); + } + else{ + output = new File(context.getFilesDir() + "/" + name); + } + try { + InputStream inputStream = context.getContentResolver().openInputStream(uri); + FileOutputStream outputStream = new FileOutputStream(output); + int read = 0; + int bufferSize = 1024; + final byte[] buffers = new byte[bufferSize]; + while ((read = inputStream.read(buffers)) != -1) { + outputStream.write(buffers, 0, read); + } + + inputStream.close(); + outputStream.close(); + + } + catch (Exception e) { + + Log.e("Exception", e.getMessage()); + } + + return output.getPath(); + } + + private static String getFilePathForWhatsApp(Context context, Uri uri){ + return copyFileToInternalStorage(context, uri,"whatsapp"); + } + + private static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) { + Cursor cursor = null; + final String column = "_data"; + final String[] projection = {column}; + + try { + cursor = context.getContentResolver().query(uri, projection, + selection, selectionArgs, null); + + if (cursor != null && cursor.moveToFirst()) { + final int index = cursor.getColumnIndexOrThrow(column); + return cursor.getString(index); + } + } + finally { + if (cursor != null) + cursor.close(); + } + + return null; + } + + private static boolean isExternalStorageDocument(Uri uri) { + return "com.android.externalstorage.documents".equals(uri.getAuthority()); + } + + private static boolean isDownloadsDocument(Uri uri) { + return "com.android.providers.downloads.documents".equals(uri.getAuthority()); + } + + private static boolean isMediaDocument(Uri uri) { + return "com.android.providers.media.documents".equals(uri.getAuthority()); + } + + private static boolean isGooglePhotosUri(Uri uri) { + return "com.google.android.apps.photos.content".equals(uri.getAuthority()); + } + + public static boolean isWhatsAppFile(Uri uri){ + return "com.whatsapp.provider.media".equals(uri.getAuthority()); + } + + private static boolean isGoogleDriveUri(Uri uri) { + return "com.google.android.apps.docs.storage".equals(uri.getAuthority()) || "com.google.android.apps.docs.storage.legacy".equals(uri.getAuthority()); + } + + + public String LoadFile(Activity activity, String fileName, boolean loadFromRawFolder) throws IOException { + // Create a InputStream to read the file into + InputStream iS; + if (loadFromRawFolder) { + // get the resource id from the file name + int rID = activity.getResources().getIdentifier(getClass().getPackage().getName() + ":raw/" + fileName, + null, null); + // get the file as a stream + iS = activity.getResources().openRawResource(rID); + } else { + // get the file as a stream + iS = activity.getResources().getAssets().open(fileName); + } + + ByteArrayOutputStream oS = new ByteArrayOutputStream(); + byte[] buffer = new byte[iS.available()]; + int bytesRead = 0; + while ((bytesRead = iS.read(buffer)) > 0) { + oS.write(buffer); + } + oS.close(); + iS.close(); + + // return the output stream as a String + return oS.toString(); + } + + public static void saveFileContents(String dBFile, String machinesToExport) { + // TODO Auto-generated method stub + byteArrayToFile(machinesToExport.getBytes(), new File(dBFile)); + } + + public static void byteArrayToFile(byte[] byteData, File filePath) { + + try { + FileOutputStream fos = new FileOutputStream(filePath); + fos.write(byteData); + fos.close(); + + } catch (FileNotFoundException ex) { + System.out.println("FileNotFoundException : " + ex); + } catch (IOException ioe) { + System.out.println("IOException : " + ioe); + } + + } + + public static String getDataDir() { + + String dataDir = MainActivity.activity.getApplicationInfo().dataDir; + PackageManager m = MainActivity.activity.getPackageManager(); + String packageName = MainActivity.activity.getPackageName(); + Log.v("VMExecutor", "Found packageName: " + packageName); + + if (dataDir == null) { + dataDir = "/data/data/" + packageName; + } + return dataDir; + } + + public static boolean fileValid(Context context, String path) { + + if (path == null || path.equals("")) + return true; + if (path.startsWith("content://") || path.startsWith("/content/")) { + int fd = get_fd(context, path); + if (fd <= 0) + return false; + } else { + File file = new File(path); + return file.exists(); + } + return true; + } + + public static HashMap fds = new HashMap(); + + public static int get_fd(final Context context, String path) { + int fd = 0; + if (path == null) + return 0; + + if (path.startsWith("/content") || path.startsWith("content://")) { + path = path.replaceFirst("/content", "content:"); + + try { + ParcelFileDescriptor pfd = context.getContentResolver().openFileDescriptor(Uri.parse(path), "rw"); + fd = pfd.getFd(); + fds.put(fd, pfd); + } catch (final FileNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + new Handler(Looper.getMainLooper()).post(new Runnable() { + @Override + public void run() { + Toast.makeText(context, "Error: " + e, Toast.LENGTH_SHORT).show(); + } + }); + } + } else { + try { + File file = new File(path); + if (!file.exists()) + file.createNewFile(); + ParcelFileDescriptor pfd = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_WRITE_ONLY); + fd = pfd.getFd(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + return fd; + } + + public static int close_fd(int fd) { + + if (FileUtils.fds.containsKey(fd)) { + ParcelFileDescriptor pfd = FileUtils.fds.get(fd); + try { + pfd.close(); + FileUtils.fds.remove(fd); + return 0; // success for Native side + } catch (IOException e) { + e.printStackTrace(); + } + + } + return -1; + } + + public static void writeToFile(String data, File file, Context context) { + try { + FileOutputStream fileOutStream = new FileOutputStream(file); + OutputStreamWriter outputWriter = new OutputStreamWriter(fileOutStream); + outputWriter.write(data); + outputWriter.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static String readFromFile(Context context, File file) { + String contents = null; + try { + int length = (int) file.length(); + + byte[] bytes = new byte[length]; + + FileInputStream in = new FileInputStream(file); + try { + in.read(bytes); + } finally { + in.close(); + } + + contents = new String(bytes); + } catch (Exception e) { + UIUtils.toastLong(context, e.toString()); + return "error"; + } + return contents; + } + + public static boolean moveFile(String oldfilename, String newFolderPath, String newFilename) { + File folder = new File(newFolderPath); + if (!folder.exists()) + folder.mkdirs(); + + File oldfile = new File(oldfilename); + File newFile = new File(newFolderPath, newFilename); + + if (!newFile.exists()) + try { + newFile.createNewFile(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return oldfile.renameTo(newFile); + } + +} diff --git a/app/src/main/java/com/epicstudios/vectras/utils/KeyboardUtils.java b/app/src/main/java/com/epicstudios/vectras/utils/KeyboardUtils.java new file mode 100644 index 0000000..d695f46 --- /dev/null +++ b/app/src/main/java/com/epicstudios/vectras/utils/KeyboardUtils.java @@ -0,0 +1,34 @@ +package com.epicstudios.vectras.utils; + +import android.app.Activity; +import android.content.Context; +import android.view.View; +import android.view.inputmethod.InputMethodManager; +import com.epicstudios.vectras.Config; + +public class KeyboardUtils { + private static final String TAG = "KeyboardUtils"; + + public static boolean showKeyboard(Activity activity, View view) { + + InputMethodManager inputMgr = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); + if (view != null) { + view.requestFocus(); + inputMgr.showSoftInput(view, InputMethodManager.SHOW_FORCED); + + } else { + if (view != null) { + inputMgr.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + return true; + } + return true; + } + + public static void hideKeyboard(Activity activity, View view) { + InputMethodManager inputMgr = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); + if (view != null) { + inputMgr.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + } +} diff --git a/app/src/main/java/com/epicstudios/vectras/utils/QmpClient.java b/app/src/main/java/com/epicstudios/vectras/utils/QmpClient.java new file mode 100644 index 0000000..86d2713 --- /dev/null +++ b/app/src/main/java/com/epicstudios/vectras/utils/QmpClient.java @@ -0,0 +1,133 @@ +package com.epicstudios.vectras.utils; + +import android.util.Log; +import com.epicstudios.vectras.Config; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.net.Socket; +import org.json.JSONObject; + +public class QmpClient { + + private static final String TAG = "QMPClient"; + private static String requestCommandMode = "{ \"execute\": \"qmp_capabilities\" }"; + + public static String sendCommand(String command) { + String response = null; + + Socket pingSocket = null; + PrintWriter out = null; + BufferedReader in = null; + + try { + pingSocket = new Socket(Config.QMPServer, Config.QMPPort); + pingSocket.setSoTimeout(5000); + out = new PrintWriter(pingSocket.getOutputStream(), true); + in = new BufferedReader(new InputStreamReader(pingSocket.getInputStream())); + + sendRequest(out, QmpClient.requestCommandMode); + response = getResponse(in); + sendRequest(out, command); + response = getResponse(in); + + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + if (out != null) + out.close(); + try { + if (in != null) + in.close(); + if (pingSocket != null) + pingSocket.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + return response; + } + + private static void sendRequest(PrintWriter out, String request) { + + Log.i(TAG, "QMP request" + request); + out.println(request); + } + + private static String getResponse(BufferedReader in) throws Exception { + + String line; + StringBuilder stringBuilder = new StringBuilder(""); + + try { + do { + line = in.readLine(); + if (line != null) { + Log.i(TAG, "QMP response: " + line); + JSONObject object = new JSONObject(line); + String returnStr = null; + String errStr = null; + + try { + returnStr = object.getString("return"); + } catch (Exception ex) { + + } + + if (returnStr != null) { + break; + } + + try { + errStr = object.getString("error"); + } catch (Exception ex) { + + } + + stringBuilder.append(line); + stringBuilder.append("\n"); + + if (errStr != null) { + break; + } + + + } else + break; + } while (true); + } catch (Exception ex) { + + } + return stringBuilder.toString(); + } + + public static String migrate(boolean block, boolean inc, String uri) { + + // XXX: Detach should not be used via QMP according to docs + // return "{\"execute\":\"migrate\",\"arguments\":{\"detach\":" + detach + // + ",\"blk\":" + block + ",\"inc\":" + inc + // + ",\"uri\":\"" + uri + "\"},\"id\":\"limbo\"}"; + + // its better not to use block (full disk copy) cause its slow (though + // safer) + // see qmp-commands.hx for more info + return "{\"execute\":\"migrate\",\"arguments\":{\"blk\":" + block + ",\"inc\":" + inc + ",\"uri\":\"" + uri + + "\"},\"id\":\"vectras\"}"; + + } + + public static String stop() { + return "{ \"execute\": \"stop\" }"; + + } + + public static String cont() { + return "{ \"execute\": \"cont\" }"; + + } +} diff --git a/app/src/main/java/com/epicstudios/vectras/utils/RamInfo.java b/app/src/main/java/com/epicstudios/vectras/utils/RamInfo.java new file mode 100644 index 0000000..da3c621 --- /dev/null +++ b/app/src/main/java/com/epicstudios/vectras/utils/RamInfo.java @@ -0,0 +1,68 @@ +package com.epicstudios.vectras.utils; + +import static android.content.Context.ACTIVITY_SERVICE; + +import android.app.ActivityManager; + +import com.epicstudios.vectras.MainActivity; +import com.epicstudios.vectras.logger.VectrasStatus; + +public class RamInfo { + + public static int safeLongToInt(long l) { + if (l < Integer.MIN_VALUE || l > Integer.MAX_VALUE) { + throw new IllegalArgumentException(l + " cannot be cast to int without changing its value."); + } + return (int) l; + } + + public static String vectrasMemory() { + ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo(); + ActivityManager activityManager = (ActivityManager) MainActivity.activity.getSystemService(ACTIVITY_SERVICE); + activityManager.getMemoryInfo(mi); + long freeMem = mi.availMem / 1048576L; + long totalMem = mi.totalMem / 1048576L; + long usedMem = totalMem - freeMem; + int freeRamInt = safeLongToInt(freeMem); + int totalRamInt = safeLongToInt(totalMem); + if (freeRamInt > 16384) { + return "15360"; + } else if (freeRamInt > 15360) { + return "14336"; + } else if (freeRamInt > 14336) { + return "13312"; + } else if (freeRamInt > 13312) { + return "12288"; + } else if (freeRamInt > 12288) { + return "11264"; + } else if (freeRamInt > 11264) { + return "10240"; + } else if (freeRamInt > 10240) { + return "9216"; + } else if (freeRamInt > 9216) { + return "8192"; + } else if (freeRamInt > 8192) { + return "7168"; + } else if (freeRamInt > 7168) { + return "6114"; + } else if (freeRamInt > 6114) { + return "5120"; + } else if (freeRamInt > 5120) { + return "4096"; + } else if (freeRamInt > 4096) { + return "3072"; + } else if (freeRamInt > 3072) { + return "2048"; + } else if (freeRamInt > 2048) { + return "1024"; + } else if (freeRamInt > 1024) { + return "786"; + } else if (freeRamInt > 786) { + return "512"; + } else if (freeRamInt > 512) { + return "256"; + } else { + return "256"; + } + } +} diff --git a/app/src/main/java/com/epicstudios/vectras/utils/UIUtils.java b/app/src/main/java/com/epicstudios/vectras/utils/UIUtils.java new file mode 100644 index 0000000..2fb9097 --- /dev/null +++ b/app/src/main/java/com/epicstudios/vectras/utils/UIUtils.java @@ -0,0 +1,61 @@ +package com.epicstudios.vectras.utils; + +import android.app.Activity; +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.pm.ActivityInfo; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.graphics.Point; +import android.os.Handler; +import android.os.Looper; +import android.view.Display; +import android.view.Gravity; +import android.webkit.WebView; +import android.widget.Toast; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; +import com.epicstudios.vectras.R; +import com.epicstudios.vectras.Config; +import com.epicstudios.vectras.logger.VectrasStatus; + +import java.io.IOException; + +public class UIUtils { + + public static void toastLong(final Context activity, final String errStr) { + new Handler(Looper.getMainLooper()).post(new Runnable() { + @Override + public void run() { + + Toast toast = Toast.makeText(activity, errStr, Toast.LENGTH_LONG); + toast.show(); + VectrasStatus.logInfo("[I] "+errStr+""); + + } + }); + + } + + public static void showHints(Activity activity) { + + } + + public static void UIAlertHtml(String title, String html, Activity activity) { + + AlertDialog alertDialog; + alertDialog = new AlertDialog.Builder(activity).create(); + alertDialog.setTitle(title); + WebView webview = new WebView(activity); + webview.loadData(html, "text/html", "UTF-8"); + alertDialog.setView(webview); + alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + return; + } + }); + alertDialog.show(); + } +} diff --git a/app/src/main/java/com/epicstudios/vectras/widgets/JoystickView.java b/app/src/main/java/com/epicstudios/vectras/widgets/JoystickView.java new file mode 100644 index 0000000..604f9f2 --- /dev/null +++ b/app/src/main/java/com/epicstudios/vectras/widgets/JoystickView.java @@ -0,0 +1,873 @@ +package com.epicstudios.vectras.widgets; + + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.os.Handler; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewConfiguration; + +import com.epicstudios.vectras.R; + +public class JoystickView extends View + implements + Runnable { + + + /* + INTERFACES + */ + + + /** + * Interface definition for a callback to be invoked when a + * JoystickView's button is moved + */ + public interface OnMoveListener { + + /** + * Called when a JoystickView's button has been moved + * @param angle current angle + * @param strength current strength + */ + void onMove(int angle, int strength); + } + + + /** + * Interface definition for a callback to be invoked when a JoystickView + * is touched and held by multiple pointers. + */ + public interface OnMultipleLongPressListener { + /** + * Called when a JoystickView has been touch and held enough time by multiple pointers. + */ + void onMultipleLongPress(); + } + + + /* + CONSTANTS + */ + + /** + * Default refresh rate as a time in milliseconds to send move values through callback + */ + private static final int DEFAULT_LOOP_INTERVAL = 50; // in milliseconds + + /** + * Used to allow a slight move without cancelling MultipleLongPress + */ + private static final int MOVE_TOLERANCE = 10; + + /** + * Default color for button + */ + private static final int DEFAULT_COLOR_BUTTON = Color.BLACK; + + /** + * Default color for border + */ + private static final int DEFAULT_COLOR_BORDER = Color.TRANSPARENT; + + /** + * Default alpha for border + */ + private static final int DEFAULT_ALPHA_BORDER = 255; + + /** + * Default background color + */ + private static final int DEFAULT_BACKGROUND_COLOR = Color.TRANSPARENT; + + /** + * Default View's size + */ + private static final int DEFAULT_SIZE = 200; + + /** + * Default border's width + */ + private static final int DEFAULT_WIDTH_BORDER = 3; + + /** + * Default behavior to fixed center (not auto-defined) + */ + private static final boolean DEFAULT_FIXED_CENTER = true; + + + /** + * Default behavior to auto re-center button (automatically recenter the button) + */ + private static final boolean DEFAULT_AUTO_RECENTER_BUTTON = true; + + + /** + * Default behavior to button stickToBorder (button stay on the border) + */ + private static final boolean DEFAULT_BUTTON_STICK_TO_BORDER = false; + + + // DRAWING + private Paint mPaintCircleButton; + private Paint mPaintCircleBorder; + private Paint mPaintBackground; + + private Paint mPaintBitmapButton; + private Bitmap mButtonBitmap; + + + /** + * Ratio use to define the size of the button + */ + private float mButtonSizeRatio; + + + /** + * Ratio use to define the size of the background + * + */ + private float mBackgroundSizeRatio; + + + // COORDINATE + private int mPosX = 0; + private int mPosY = 0; + private int mCenterX = 0; + private int mCenterY = 0; + + private int mFixedCenterX = 0; + private int mFixedCenterY = 0; + + /** + * Used to adapt behavior whether it is auto-defined center (false) or fixed center (true) + */ + private boolean mFixedCenter; + + + /** + * Used to adapt behavior whether the button is automatically re-centered (true) + * when released or not (false) + */ + private boolean mAutoReCenterButton; + + + /** + * Used to adapt behavior whether the button is stick to border (true) or + * could be anywhere (when false - similar to regular behavior) + */ + private boolean mButtonStickToBorder; + + + /** + * Used to enabled/disabled the Joystick. When disabled (enabled to false) the joystick button + * can't move and onMove is not called. + */ + private boolean mEnabled; + + + // SIZE + private int mButtonRadius; + private int mBorderRadius; + + + /** + * Alpha of the border (to use when changing color dynamically) + */ + private int mBorderAlpha; + + + /** + * Based on mBorderRadius but a bit smaller (minus half the stroke size of the border) + */ + private float mBackgroundRadius; + + + /** + * Listener used to dispatch OnMove event + */ + private OnMoveListener mCallback; + + private long mLoopInterval = DEFAULT_LOOP_INTERVAL; + private Thread mThread = new Thread(this); + + + /** + * Listener used to dispatch MultipleLongPress event + */ + private OnMultipleLongPressListener mOnMultipleLongPressListener; + + private final Handler mHandlerMultipleLongPress = new Handler(); + private Runnable mRunnableMultipleLongPress; + private int mMoveTolerance; + + + /** + * Default value. + * Both direction correspond to horizontal and vertical movement + */ + public static int BUTTON_DIRECTION_BOTH = 0; + + /** + * The allowed direction of the button is define by the value of this parameter: + * - a negative value for horizontal axe + * - a positive value for vertical axe + * - zero for both axes + */ + private int mButtonDirection = 0; + + + /* + CONSTRUCTORS + */ + + + /** + * Simple constructor to use when creating a JoystickView from code. + * Call another constructor passing null to Attribute. + * @param context The Context the JoystickView is running in, through which it can + * access the current theme, resources, etc. + */ + public JoystickView(Context context) { + this(context, null); + } + + + public JoystickView(Context context, AttributeSet attrs, int defStyleAttr) { + this(context, attrs); + } + + + /** + * Constructor that is called when inflating a JoystickView from XML. This is called + * when a JoystickView is being constructed from an XML file, supplying attributes + * that were specified in the XML file. + * @param context The Context the JoystickView is running in, through which it can + * access the current theme, resources, etc. + * @param attrs The attributes of the XML tag that is inflating the JoystickView. + */ + public JoystickView(Context context, AttributeSet attrs) { + super(context, attrs); + + TypedArray styledAttributes = context.getTheme().obtainStyledAttributes( + attrs, + R.styleable.JoystickView, + 0, 0 + ); + + int buttonColor; + int borderColor; + int backgroundColor; + int borderWidth; + Drawable buttonDrawable; + try { + buttonColor = styledAttributes.getColor(R.styleable.JoystickView_JV_buttonColor, DEFAULT_COLOR_BUTTON); + borderColor = styledAttributes.getColor(R.styleable.JoystickView_JV_borderColor, DEFAULT_COLOR_BORDER); + mBorderAlpha = styledAttributes.getInt(R.styleable.JoystickView_JV_borderAlpha, DEFAULT_ALPHA_BORDER); + backgroundColor = styledAttributes.getColor(R.styleable.JoystickView_JV_backgroundColor, DEFAULT_BACKGROUND_COLOR); + borderWidth = styledAttributes.getDimensionPixelSize(R.styleable.JoystickView_JV_borderWidth, DEFAULT_WIDTH_BORDER); + mFixedCenter = styledAttributes.getBoolean(R.styleable.JoystickView_JV_fixedCenter, DEFAULT_FIXED_CENTER); + mAutoReCenterButton = styledAttributes.getBoolean(R.styleable.JoystickView_JV_autoReCenterButton, DEFAULT_AUTO_RECENTER_BUTTON); + mButtonStickToBorder = styledAttributes.getBoolean(R.styleable.JoystickView_JV_buttonStickToBorder, DEFAULT_BUTTON_STICK_TO_BORDER); + buttonDrawable = styledAttributes.getDrawable(R.styleable.JoystickView_JV_buttonImage); + mEnabled = styledAttributes.getBoolean(R.styleable.JoystickView_JV_enabled, true); + mButtonSizeRatio = styledAttributes.getFraction(R.styleable.JoystickView_JV_buttonSizeRatio, 1, 1, 0.25f); + mBackgroundSizeRatio = styledAttributes.getFraction(R.styleable.JoystickView_JV_backgroundSizeRatio, 1, 1, 0.75f); + mButtonDirection = styledAttributes.getInteger(R.styleable.JoystickView_JV_buttonDirection, BUTTON_DIRECTION_BOTH); + } finally { + styledAttributes.recycle(); + } + + // Initialize the drawing according to attributes + + mPaintCircleButton = new Paint(); + mPaintCircleButton.setAntiAlias(true); + mPaintCircleButton.setColor(buttonColor); + mPaintCircleButton.setStyle(Paint.Style.FILL); + + if (buttonDrawable != null) { + if (buttonDrawable instanceof BitmapDrawable) { + mButtonBitmap = ((BitmapDrawable) buttonDrawable).getBitmap(); + mPaintBitmapButton = new Paint(); + } + } + + mPaintCircleBorder = new Paint(); + mPaintCircleBorder.setAntiAlias(true); + mPaintCircleBorder.setColor(borderColor); + mPaintCircleBorder.setStyle(Paint.Style.STROKE); + mPaintCircleBorder.setStrokeWidth(borderWidth); + + if (borderColor != Color.TRANSPARENT) { + mPaintCircleBorder.setAlpha(mBorderAlpha); + } + + mPaintBackground = new Paint(); + mPaintBackground.setAntiAlias(true); + mPaintBackground.setColor(backgroundColor); + mPaintBackground.setStyle(Paint.Style.FILL); + + + // Init Runnable for MultiLongPress + + mRunnableMultipleLongPress = new Runnable() { + @Override + public void run() { + if (mOnMultipleLongPressListener != null) + mOnMultipleLongPressListener.onMultipleLongPress(); + } + }; + } + + + private void initPosition() { + // get the center of view to position circle + mFixedCenterX = mCenterX = mPosX = getWidth() / 2; + mFixedCenterY = mCenterY = mPosY = getWidth() / 2; + } + + + /** + * Draw the background, the border and the button + * @param canvas the canvas on which the shapes will be drawn + */ + @Override + protected void onDraw(Canvas canvas) { + // Draw the background + canvas.drawCircle(mFixedCenterX, mFixedCenterY, mBackgroundRadius, mPaintBackground); + + // Draw the circle border + canvas.drawCircle(mFixedCenterX, mFixedCenterY, mBorderRadius, mPaintCircleBorder); + + // Draw the button from image + if (mButtonBitmap != null) { + canvas.drawBitmap( + mButtonBitmap, + mPosX + mFixedCenterX - mCenterX - mButtonRadius, + mPosY + mFixedCenterY - mCenterY - mButtonRadius, + mPaintBitmapButton + ); + } + // Draw the button as simple circle + else { + canvas.drawCircle( + mPosX + mFixedCenterX - mCenterX, + mPosY + mFixedCenterY - mCenterY, + mButtonRadius, + mPaintCircleButton + ); + } + } + + + /** + * This is called during layout when the size of this view has changed. + * Here we get the center of the view and the radius to draw all the shapes. + * + * @param w Current width of this view. + * @param h Current height of this view. + * @param oldW Old width of this view. + * @param oldH Old height of this view. + */ + @Override + protected void onSizeChanged(int w, int h, int oldW, int oldH) { + super.onSizeChanged(w, h, oldW, oldH); + + initPosition(); + + // radius based on smallest size : height OR width + int d = Math.min(w, h); + mButtonRadius = (int) (d / 2 * mButtonSizeRatio); + mBorderRadius = (int) (d / 2 * mBackgroundSizeRatio); + mBackgroundRadius = mBorderRadius - (mPaintCircleBorder.getStrokeWidth() / 2); + + if (mButtonBitmap != null) + mButtonBitmap = Bitmap.createScaledBitmap(mButtonBitmap, mButtonRadius * 2, mButtonRadius * 2, true); + } + + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + // setting the measured values to resize the view to a certain width and height + int d = Math.min(measure(widthMeasureSpec), measure(heightMeasureSpec)); + setMeasuredDimension(d, d); + } + + + private int measure(int measureSpec) { + if (MeasureSpec.getMode(measureSpec) == MeasureSpec.UNSPECIFIED) { + // if no bounds are specified return a default size (200) + return DEFAULT_SIZE; + } else { + // As you want to fill the available space + // always return the full available bounds. + return MeasureSpec.getSize(measureSpec); + } + } + + + /* + USER EVENT + */ + + + /** + * Handle touch screen motion event. Move the button according to the + * finger coordinate and detect longPress by multiple pointers only. + * + * @param event The motion event. + * @return True if the event was handled, false otherwise. + */ + @Override + public boolean onTouchEvent(MotionEvent event) { + // if disabled we don't move the + if (!mEnabled) { + return true; + } + + + // to move the button according to the finger coordinate + // (or limited to one axe according to direction option + mPosY = mButtonDirection < 0 ? mCenterY : (int) event.getY(); // direction negative is horizontal axe + mPosX = mButtonDirection > 0 ? mCenterX : (int) event.getX(); // direction positive is vertical axe + + if (event.getAction() == MotionEvent.ACTION_UP) { + + // stop listener because the finger left the touch screen + mThread.interrupt(); + + // re-center the button or not (depending on settings) + if (mAutoReCenterButton) { + resetButtonPosition(); + + // update now the last strength and angle which should be zero after resetButton + if (mCallback != null) + mCallback.onMove(getAngle(), getStrength()); + } + + // if mAutoReCenterButton is false we will send the last strength and angle a bit + // later only after processing new position X and Y otherwise it could be above the border limit + } + + if (event.getAction() == MotionEvent.ACTION_DOWN) { + if (mThread != null && mThread.isAlive()) { + mThread.interrupt(); + } + + mThread = new Thread(this); + mThread.start(); + + if (mCallback != null) + mCallback.onMove(getAngle(), getStrength()); + } + + // handle first touch and long press with multiple touch only + switch (event.getActionMasked()) { + case MotionEvent.ACTION_DOWN: + // when the first touch occurs we update the center (if set to auto-defined center) + if (!mFixedCenter) { + mCenterX = mPosX; + mCenterY = mPosY; + } + break; + + case MotionEvent.ACTION_POINTER_DOWN: { + // when the second finger touch + if (event.getPointerCount() == 2) { + mHandlerMultipleLongPress.postDelayed(mRunnableMultipleLongPress, ViewConfiguration.getLongPressTimeout()*2); + mMoveTolerance = MOVE_TOLERANCE; + } + break; + } + + case MotionEvent.ACTION_MOVE: + mMoveTolerance--; + if (mMoveTolerance == 0) { + mHandlerMultipleLongPress.removeCallbacks(mRunnableMultipleLongPress); + } + break; + + case MotionEvent.ACTION_POINTER_UP: { + // when the last multiple touch is released + if (event.getPointerCount() == 2) { + mHandlerMultipleLongPress.removeCallbacks(mRunnableMultipleLongPress); + } + break; + } + } + + double abs = Math.sqrt((mPosX - mCenterX) * (mPosX - mCenterX) + + (mPosY - mCenterY) * (mPosY - mCenterY)); + + // (abs > mBorderRadius) means button is too far therefore we limit to border + // (buttonStickBorder && abs != 0) means wherever is the button we stick it to the border except when abs == 0 + if (abs > mBorderRadius || (mButtonStickToBorder && abs != 0)) { + mPosX = (int) ((mPosX - mCenterX) * mBorderRadius / abs + mCenterX); + mPosY = (int) ((mPosY - mCenterY) * mBorderRadius / abs + mCenterY); + } + + if (!mAutoReCenterButton) { + // Now update the last strength and angle if not reset to center + if (mCallback != null) + mCallback.onMove(getAngle(), getStrength()); + } + + + // to force a new draw + invalidate(); + + return true; + } + + + /* + GETTERS + */ + + + /** + * Process the angle following the 360° counter-clock protractor rules. + * @return the angle of the button + */ + private int getAngle() { + int angle = (int) Math.toDegrees(Math.atan2(mCenterY - mPosY, mPosX - mCenterX)); + return angle < 0 ? angle + 360 : angle; // make it as a regular counter-clock protractor + } + + + /** + * Process the strength as a percentage of the distance between the center and the border. + * @return the strength of the button + */ + private int getStrength() { + return (int) (100 * Math.sqrt((mPosX - mCenterX) + * (mPosX - mCenterX) + (mPosY - mCenterY) + * (mPosY - mCenterY)) / mBorderRadius); + } + + + /** + * Reset the button position to the center. + */ + public void resetButtonPosition() { + mPosX = mCenterX; + mPosY = mCenterY; + } + + + /** + * Return the current direction allowed for the button to move + * @return Actually return an integer corresponding to the direction: + * - A negative value is horizontal axe, + * - A positive value is vertical axe, + * - Zero means both axes + */ + public int getButtonDirection() { + return mButtonDirection; + } + + + /** + * Return the state of the joystick. False when the button don't move. + * @return the state of the joystick + */ + public boolean isEnabled() { + return mEnabled; + } + + + /** + * Return the size of the button (as a ratio of the total width/height) + * Default is 0.25 (25%). + * @return button size (value between 0.0 and 1.0) + */ + public float getButtonSizeRatio() { + return mButtonSizeRatio; + } + + + /** + * Return the size of the background (as a ratio of the total width/height) + * Default is 0.75 (75%). + * @return background size (value between 0.0 and 1.0) + */ + public float getmBackgroundSizeRatio() { + return mBackgroundSizeRatio; + } + + + /** + * Return the current behavior of the auto re-center button + * @return True if automatically re-centered or False if not + */ + public boolean isAutoReCenterButton() { + return mAutoReCenterButton; + } + + + /** + * Return the current behavior of the button stick to border + * @return True if the button stick to the border otherwise False + */ + public boolean isButtonStickToBorder() { + return mButtonStickToBorder; + } + + + /** + * Return the relative X coordinate of button center related + * to top-left virtual corner of the border + * @return coordinate of X (normalized between 0 and 100) + */ + public int getNormalizedX() { + if (getWidth() == 0) { + return 50; + } + return Math.round((mPosX-mButtonRadius)*100.0f/(getWidth()-mButtonRadius*2)); + } + + + /** + * Return the relative Y coordinate of the button center related + * to top-left virtual corner of the border + * @return coordinate of Y (normalized between 0 and 100) + */ + public int getNormalizedY() { + if (getHeight() == 0) { + return 50; + } + return Math.round((mPosY-mButtonRadius)*100.0f/(getHeight()-mButtonRadius*2)); + } + + + /** + * Return the alpha of the border + * @return it should be an integer between 0 and 255 previously set + */ + public int getBorderAlpha() { + return mBorderAlpha; + } + + /* + SETTERS + */ + + + /** + * Set an image to the button with a drawable + * @param d drawable to pick the image + */ + public void setButtonDrawable(Drawable d) { + if (d != null) { + if (d instanceof BitmapDrawable) { + mButtonBitmap = ((BitmapDrawable) d).getBitmap(); + + if (mButtonRadius != 0) { + mButtonBitmap = Bitmap.createScaledBitmap( + mButtonBitmap, + mButtonRadius * 2, + mButtonRadius * 2, + true); + } + + if (mPaintBitmapButton != null) + mPaintBitmapButton = new Paint(); + } + } + } + + + /** + * Set the button color for this JoystickView. + * @param color the color of the button + */ + public void setButtonColor(int color) { + mPaintCircleButton.setColor(color); + invalidate(); + } + + + /** + * Set the border color for this JoystickView. + * @param color the color of the border + */ + public void setBorderColor(int color) { + mPaintCircleBorder.setColor(color); + if (color != Color.TRANSPARENT) { + mPaintCircleBorder.setAlpha(mBorderAlpha); + } + invalidate(); + } + + + /** + * Set the border alpha for this JoystickView. + * @param alpha the transparency of the border between 0 and 255 + */ + public void setBorderAlpha(int alpha) { + mBorderAlpha = alpha; + mPaintCircleBorder.setAlpha(alpha); + invalidate(); + } + + + /** + * Set the background color for this JoystickView. + * @param color the color of the background + */ + @Override + public void setBackgroundColor(int color) { + mPaintBackground.setColor(color); + invalidate(); + } + + + /** + * Set the border width for this JoystickView. + * @param width the width of the border + */ + public void setBorderWidth(int width) { + mPaintCircleBorder.setStrokeWidth(width); + mBackgroundRadius = mBorderRadius - (width / 2.0f); + invalidate(); + } + + + /** + * Register a callback to be invoked when this JoystickView's button is moved + * @param l The callback that will run + */ + public void setOnMoveListener(OnMoveListener l) { + setOnMoveListener(l, DEFAULT_LOOP_INTERVAL); + } + + + /** + * Register a callback to be invoked when this JoystickView's button is moved + * @param l The callback that will run + * @param loopInterval Refresh rate to be invoked in milliseconds + */ + public void setOnMoveListener(OnMoveListener l, int loopInterval) { + mCallback = l; + mLoopInterval = loopInterval; + } + + + /** + * Register a callback to be invoked when this JoystickView is touch and held by multiple pointers + * @param l The callback that will run + */ + public void setOnMultiLongPressListener(OnMultipleLongPressListener l) { + mOnMultipleLongPressListener = l; + } + + + /** + * Set the joystick center's behavior (fixed or auto-defined) + * @param fixedCenter True for fixed center, False for auto-defined center based on touch down + */ + public void setFixedCenter(boolean fixedCenter) { + // if we set to "fixed" we make sure to re-init position related to the width of the joystick + if (fixedCenter) { + initPosition(); + } + mFixedCenter = fixedCenter; + invalidate(); + } + + + /** + * Enable or disable the joystick + * @param enabled False mean the button won't move and onMove won't be called + */ + public void setEnabled(boolean enabled) { + mEnabled = enabled; + } + + + /** + * Set the joystick button size (as a fraction of the real width/height) + * By default it is 25% (0.25). + * @param newRatio between 0.0 and 1.0 + */ + public void setButtonSizeRatio(float newRatio) { + if (newRatio > 0.0f & newRatio <= 1.0f) { + mButtonSizeRatio = newRatio; + } + } + + + /** + * Set the joystick button size (as a fraction of the real width/height) + * By default it is 75% (0.75). + * Not working if the background is an image. + * @param newRatio between 0.0 and 1.0 + */ + public void setBackgroundSizeRatio(float newRatio) { + if (newRatio > 0.0f & newRatio <= 1.0f) { + mBackgroundSizeRatio = newRatio; + } + } + + + /** + * Set the current behavior of the auto re-center button + * @param b True if automatically re-centered or False if not + */ + public void setAutoReCenterButton(boolean b) { + mAutoReCenterButton = b; + } + + + /** + * Set the current behavior of the button stick to border + * @param b True if the button stick to the border or False (default) if not + */ + public void setButtonStickToBorder(boolean b) { + mButtonStickToBorder = b; + } + + + /** + * Set the current authorized direction for the button to move + * @param direction the value will define the authorized direction: + * - any negative value (such as -1) for horizontal axe + * - any positive value (such as 1) for vertical axe + * - zero (0) for the full direction (both axes) + */ + public void setButtonDirection(int direction) { + mButtonDirection = direction; + } + + + /* + IMPLEMENTS + */ + + + @Override // Runnable + public void run() { + while (!Thread.interrupted()) { + post(new Runnable() { + public void run() { + if (mCallback != null) + mCallback.onMove(getAngle(), getStrength()); + } + }); + + try { + Thread.sleep(mLoopInterval); + } catch (InterruptedException e) { + break; + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/epicstudios/vectras/widgets/RadioGroupPlus.java b/app/src/main/java/com/epicstudios/vectras/widgets/RadioGroupPlus.java new file mode 100644 index 0000000..2a470c5 --- /dev/null +++ b/app/src/main/java/com/epicstudios/vectras/widgets/RadioGroupPlus.java @@ -0,0 +1,370 @@ +package com.epicstudios.vectras.widgets; + +import android.content.Context; +import android.content.res.TypedArray; +import android.util.AttributeSet; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CompoundButton; +import android.widget.LinearLayout; +import android.widget.RadioButton; +import android.widget.RadioGroup; +import androidx.annotation.IdRes; + +public class RadioGroupPlus extends LinearLayout { + // holds the checked id; the selection is empty by default + private int mCheckedId = -1; + // tracks children radio buttons checked state + private CompoundButton.OnCheckedChangeListener mChildOnCheckedChangeListener; + // when true, mOnCheckedChangeListener discards events + private boolean mProtectFromCheckedChange = false; + private OnCheckedChangeListener mOnCheckedChangeListener; + private PassThroughHierarchyChangeListener mPassThroughListener; + + /** + * {@inheritDoc} + */ + public RadioGroupPlus(Context context) { + super(context); + setOrientation(VERTICAL); + init(); + } + + /** + * {@inheritDoc} + */ + public RadioGroupPlus(Context context, AttributeSet attrs) { + super(context, attrs); + + // retrieve selected radio button as requested by the user in the + // XML layout file + //TODO: fix ignored attributes +// TypedArray attributes = context.obtainStyledAttributes( +// attrs, com.android.internal.R.styleable.RadioGroup, com.android.internal.R.attr.radioButtonStyle, 0); + +// int value = attributes.getResourceId(com.android.internal.R.styleable.RadioGroup_checkedButton, View.NO_ID); +// if (value != View.NO_ID) { +// mCheckedId = value; +// } + +// final int index = attributes.getInt(com.android.internal.R.styleable.RadioGroup_orientation, VERTICAL); +// setOrientation(index); + +// attributes.recycle(); + init(); + } + + private void init() { + mChildOnCheckedChangeListener = new CheckedStateTracker(); + mPassThroughListener = new PassThroughHierarchyChangeListener(); + super.setOnHierarchyChangeListener(mPassThroughListener); + } + + /** + * {@inheritDoc} + */ + @Override + public void setOnHierarchyChangeListener(OnHierarchyChangeListener listener) { + // the user listener is delegated to our pass-through listener + mPassThroughListener.mOnHierarchyChangeListener = listener; + } + + /** + * {@inheritDoc} + */ + @Override + protected void onFinishInflate() { + super.onFinishInflate(); + + // checks the appropriate radio button as requested in the XML file + if (mCheckedId != -1) { + mProtectFromCheckedChange = true; + setCheckedStateForView(mCheckedId, true); + mProtectFromCheckedChange = false; + setCheckedId(mCheckedId); + } + } + + @Override + public void addView(View child, int index, ViewGroup.LayoutParams params) { + if (child instanceof RadioButton) { + final RadioButton button = (RadioButton) child; + if (button.isChecked()) { + mProtectFromCheckedChange = true; + if (mCheckedId != -1) { + setCheckedStateForView(mCheckedId, false); + } + mProtectFromCheckedChange = false; + setCheckedId(button.getId()); + } + } + + super.addView(child, index, params); + } + + /** + *

Sets the selection to the radio button whose identifier is passed in + * parameter. Using -1 as the selection identifier clears the selection; + * such an operation is equivalent to invoking {@link #clearCheck()}.

+ * + * @param id the unique id of the radio button to select in this group + * @see #getCheckedRadioButtonId() + * @see #clearCheck() + */ + public void check(@IdRes int id) { + // don't even bother + if (id != -1 && (id == mCheckedId)) { + return; + } + + if (mCheckedId != -1) { + setCheckedStateForView(mCheckedId, false); + } + + if (id != -1) { + setCheckedStateForView(id, true); + } + + setCheckedId(id); + } + + private void setCheckedId(@IdRes int id) { + mCheckedId = id; + if (mOnCheckedChangeListener != null) { + mOnCheckedChangeListener.onCheckedChanged(this, mCheckedId); + } + } + + private void setCheckedStateForView(int viewId, boolean checked) { + View checkedView = findViewById(viewId); + if (checkedView != null && checkedView instanceof RadioButton) { + ((RadioButton) checkedView).setChecked(checked); + } + } + + /** + *

Returns the identifier of the selected radio button in this group. + * Upon empty selection, the returned value is -1.

+ * + * @return the unique id of the selected radio button in this group + * @attr ref android.R.styleable#RadioGroup_checkedButton + * @see #check(int) + * @see #clearCheck() + */ + @IdRes + public int getCheckedRadioButtonId() { + return mCheckedId; + } + + /** + *

Clears the selection. When the selection is cleared, no radio button + * in this group is selected and {@link #getCheckedRadioButtonId()} returns + * null.

+ * + * @see #check(int) + * @see #getCheckedRadioButtonId() + */ + public void clearCheck() { + check(-1); + } + + /** + *

Register a callback to be invoked when the checked radio button + * changes in this group.

+ * + * @param listener the callback to call on checked state change + */ + public void setOnCheckedChangeListener(OnCheckedChangeListener listener) { + mOnCheckedChangeListener = listener; + } + + /** + * {@inheritDoc} + */ + @Override + public LayoutParams generateLayoutParams(AttributeSet attrs) { + return new RadioGroupPlus.LayoutParams(getContext(), attrs); + } + + /** + * {@inheritDoc} + */ + @Override + protected boolean checkLayoutParams(ViewGroup.LayoutParams p) { + return p instanceof RadioGroup.LayoutParams; + } + + @Override + protected LinearLayout.LayoutParams generateDefaultLayoutParams() { + return new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); + } + + @Override + public CharSequence getAccessibilityClassName() { + return RadioGroup.class.getName(); + } + + public static class LayoutParams extends LinearLayout.LayoutParams { + /** + * {@inheritDoc} + */ + public LayoutParams(Context c, AttributeSet attrs) { + super(c, attrs); + } + + /** + * {@inheritDoc} + */ + public LayoutParams(int w, int h) { + super(w, h); + } + + /** + * {@inheritDoc} + */ + public LayoutParams(int w, int h, float initWeight) { + super(w, h, initWeight); + } + + /** + * {@inheritDoc} + */ + public LayoutParams(ViewGroup.LayoutParams p) { + super(p); + } + + /** + * {@inheritDoc} + */ + public LayoutParams(MarginLayoutParams source) { + super(source); + } + + /** + *

Fixes the child's width to + * {@link android.view.ViewGroup.LayoutParams#WRAP_CONTENT} and the child's + * height to {@link android.view.ViewGroup.LayoutParams#WRAP_CONTENT} + * when not specified in the XML file.

+ * + * @param a the styled attributes set + * @param widthAttr the width attribute to fetch + * @param heightAttr the height attribute to fetch + */ + @Override + protected void setBaseAttributes(TypedArray a, + int widthAttr, int heightAttr) { + + if (a.hasValue(widthAttr)) { + width = a.getLayoutDimension(widthAttr, "layout_width"); + } else { + width = WRAP_CONTENT; + } + + if (a.hasValue(heightAttr)) { + height = a.getLayoutDimension(heightAttr, "layout_height"); + } else { + height = WRAP_CONTENT; + } + } + } + + /** + *

Interface definition for a callback to be invoked when the checked + * radio button changed in this group.

+ */ + public interface OnCheckedChangeListener { + /** + *

Called when the checked radio button has changed. When the + * selection is cleared, checkedId is -1.

+ * + * @param group the group in which the checked radio button has changed + * @param checkedId the unique identifier of the newly checked radio button + */ + public void onCheckedChanged(RadioGroupPlus group, @IdRes int checkedId); + } + + private class CheckedStateTracker implements CompoundButton.OnCheckedChangeListener { + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + // prevents from infinite recursion + if (mProtectFromCheckedChange) { + return; + } + + mProtectFromCheckedChange = true; + if (mCheckedId != -1) { + setCheckedStateForView(mCheckedId, false); + } + mProtectFromCheckedChange = false; + + int id = buttonView.getId(); + setCheckedId(id); + } + } + + /** + *

A pass-through listener acts upon the events and dispatches them + * to another listener. This allows the table layout to set its own internal + * hierarchy change listener without preventing the user to setup his.

+ */ + private class PassThroughHierarchyChangeListener implements + ViewGroup.OnHierarchyChangeListener { + private ViewGroup.OnHierarchyChangeListener mOnHierarchyChangeListener; + + public void traverseTree(View view) { + if (view instanceof RadioButton) { + int id = view.getId(); + // generates an id if it's missing + if (id == View.NO_ID) { + id = View.generateViewId(); + view.setId(id); + } + ((RadioButton) view).setOnCheckedChangeListener( + mChildOnCheckedChangeListener); + } + if (!(view instanceof ViewGroup)) { + return; + } + ViewGroup viewGroup = (ViewGroup) view; + if (viewGroup.getChildCount() == 0) { + return; + } + for (int i = 0; i < viewGroup.getChildCount(); i++) { + traverseTree(viewGroup.getChildAt(i)); + } + } + + /** + * {@inheritDoc} + */ + public void onChildViewAdded(View parent, View child) { + traverseTree(child); + if (parent == RadioGroupPlus.this && child instanceof RadioButton) { + int id = child.getId(); + // generates an id if it's missing + if (id == View.NO_ID) { + id = View.generateViewId(); + child.setId(id); + } + ((RadioButton) child).setOnCheckedChangeListener( + mChildOnCheckedChangeListener); + } + + if (mOnHierarchyChangeListener != null) { + mOnHierarchyChangeListener.onChildViewAdded(parent, child); + } + } + + /** + * {@inheritDoc} + */ + public void onChildViewRemoved(View parent, View child) { + if (parent == RadioGroupPlus.this && child instanceof RadioButton) { + ((RadioButton) child).setOnCheckedChangeListener(null); + } + + if (mOnHierarchyChangeListener != null) { + mOnHierarchyChangeListener.onChildViewRemoved(parent, child); + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/org/libsdl/app/ClearRenderer.java b/app/src/main/java/org/libsdl/app/ClearRenderer.java new file mode 100644 index 0000000..3d277ff --- /dev/null +++ b/app/src/main/java/org/libsdl/app/ClearRenderer.java @@ -0,0 +1,25 @@ +package org.libsdl.app; + +import javax.microedition.khronos.egl.EGLConfig; +import javax.microedition.khronos.opengles.GL10; + +import android.opengl.GLSurfaceView; +import android.util.Log; + +public class ClearRenderer implements GLSurfaceView.Renderer { + public void onSurfaceCreated(GL10 gl, EGLConfig config) { + // Do nothing special. + Log.v("onSurfaceCreated", "..."); + } + + public void onSurfaceChanged(GL10 gl, int w, int h) { + Log.v("onSurfaceChanged", "..."); + gl.glViewport(0, 0, w, h); + } + + public void onDrawFrame(GL10 gl) { + Log.v("onDrawFrame", "..."); + gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); + + } +} diff --git a/app/src/main/java/org/libsdl/app/SDLActivity.java b/app/src/main/java/org/libsdl/app/SDLActivity.java new file mode 100644 index 0000000..c04fb84 --- /dev/null +++ b/app/src/main/java/org/libsdl/app/SDLActivity.java @@ -0,0 +1,1474 @@ +package org.libsdl.app; + +import android.app.Activity; +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Color; +import android.graphics.PorterDuff; +import android.graphics.drawable.Drawable; +import android.media.AudioFormat; +import android.media.AudioManager; +import android.media.AudioTrack; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.InputType; +import android.util.Log; +import android.util.SparseArray; +import android.view.Gravity; +import android.view.InputDevice; +import android.view.KeyEvent; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.MotionEvent; +import android.view.Surface; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.view.inputmethod.BaseInputConnection; +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputConnection; +import android.view.inputmethod.InputMethodManager; +import android.widget.Button; +import android.widget.LinearLayout; +import android.widget.TextView; +import androidx.appcompat.app.AppCompatActivity; +import com.epicstudios.vectras.MainActivity; +import com.epicstudios.vectras.R; +import com.epicstudios.vectras.VectrasSDLActivity; + +import java.io.IOException; +import java.io.InputStream; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +/** + * SDL Activity + */ +public class SDLActivity extends AppCompatActivity { + private static final String TAG = "SDL"; + + // Keep track of the paused state + public static boolean mIsPaused, mIsSurfaceReady, mHasFocus; + public static boolean mExitCalledFromJava; + + public static native void createEngine(); + + public static native void createBufferQueueAudioPlayer(int sampleRate, int samplesPerBuf); + + public static native void shutdown(); + + /** + * If shared libraries (e.g. SDL or the native application) could not be + * loaded. + */ + public static boolean mBrokenLibraries; + + // If we want to separate mouse and touch events. + // This is only toggled in native code when a hint is set! + public static boolean mSeparateMouseAndTouch; + + // Main components + protected static SDLActivity mSingleton; + protected static SDLSurface mSurface; + protected static View mTextEdit; + protected static ViewGroup mLayout; + protected static SDLJoystickHandler mJoystickHandler; + + // This is what SDL runs in. It invokes SDL_main(), eventually + protected static Thread mSDLThread; + + // Audio + protected static AudioTrack mAudioTrack; + + /** + * This method is called by SDL before loading the native shared libraries. + * It can be overridden to provide names of shared libraries to be loaded. + * The default implementation returns the defaults. It never returns null. + * An array returned by a new implementation must at least contain "SDL2". + * Also keep in mind that the order the libraries are loaded may matter. + * + * @return names of shared libraries to be loaded (e.g. "SDL2", "main"). + */ + // protected String[] getLibraries() { + // return new String[] { + // "SDL2", + // // "SDL2_image", + // // "SDL2_mixer", + // // "SDL2_net", + // // "SDL2_ttf", + // "main" + // }; + // } + + // Load the .so + public void loadLibraries() { + // for (String lib : getLibraries()) { + // System.loadLibrary(lib); + // } + } + + // XXX: LIMBO + public static int vm_width; + public static int vm_height; + // public static float width_mult = (float) 1.0; + // public static float height_mult = (float) 1.0; + + private static int maxBufferSize; + + private static int bufferSize; + + private static Thread audioThread; + + private static int buffersSize; + + public static void setSDLResolution(int width, int height) { + + vm_width = width; + vm_height = height; + + // new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { + // @Override + // public void run() { + // int newWidth = mSurface.getWidth(); + // int newHeight = mSurface.getHeight(); + // if(mSingleton.getResources().getConfiguration().orientation == + // Configuration.ORIENTATION_PORTRAIT){ + // //Adjust the Height + // newHeight = (int) ((float) newWidth * vm_height / (float) vm_width); + // } else if(mSingleton.getResources().getConfiguration().orientation == + // Configuration.ORIENTATION_LANDSCAPE){ + // //Adjust the Width + // newWidth = (int) ((float) newHeight * vm_width / (float) vm_height); + // + // //TODO: If it's not fullscreen we might want to adjust the height + // instead so the surface align on top + // + // } + // + // Log.v("setSDLResolution", "Resizing Surface to " + newWidth + "x" + + // newHeight); + // mSurface.getHolder().setFixedSize(newWidth, newHeight); + // } + // }, 0); + + } + + /** + * This method is called by SDL before starting the native application + * thread. It can be overridden to provide the arguments after the + * application name. The default implementation returns an empty array. It + * never returns null. + * + * @return arguments for the native application. + */ + protected String[] getArguments() { + return new String[0]; + } + + public static void initialize() { + // The static nature of the singleton and Android quirkyness force us to + // initialize everything here + // Otherwise, when exiting the app and returning to it, these variables + // *keep* their pre exit values + mSingleton = null; + mSurface = null; + mTextEdit = null; + mLayout = null; + mJoystickHandler = null; + mSDLThread = null; + mAudioTrack = null; + mExitCalledFromJava = false; + mBrokenLibraries = false; + mIsPaused = false; + mIsSurfaceReady = false; + mHasFocus = true; + } + + // Setup + @Override + protected void onCreate(Bundle savedInstanceState) { + Log.v(TAG, "Device: " + android.os.Build.DEVICE); + Log.v(TAG, "Model: " + android.os.Build.MODEL); + Log.v(TAG, "onCreate(): " + mSingleton); + super.onCreate(savedInstanceState); + + SDLActivity.initialize(); + // So we can call stuff from static callbacks + mSingleton = this; + + setupVolume(); + + // Load shared libraries + String errorMsgBrokenLib = ""; + try { + loadLibraries(); + } catch (UnsatisfiedLinkError e) { + System.err.println(e.getMessage()); + mBrokenLibraries = true; + errorMsgBrokenLib = e.getMessage(); + } catch (Exception e) { + System.err.println(e.getMessage()); + mBrokenLibraries = true; + errorMsgBrokenLib = e.getMessage(); + } + + if (mBrokenLibraries) { + AlertDialog.Builder dlgAlert = new AlertDialog.Builder(this); + dlgAlert.setMessage( + "An error occurred while trying to start the application. Please try again and/or reinstall." + + System.getProperty("line.separator") + System.getProperty("line.separator") + "Error: " + + errorMsgBrokenLib); + dlgAlert.setTitle("SDL Error"); + dlgAlert.setPositiveButton("Exit", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int id) { + // if this button is clicked, close current activity + SDLActivity.mSingleton.finish(); + } + }); + dlgAlert.setCancelable(false); + dlgAlert.create().show(); + + return; + } + + // XXX: Limbo no need + // Set up the surface + // mSurface = new SDLSurface(getApplication()); + + if (Build.VERSION.SDK_INT >= 12) { + mJoystickHandler = new SDLJoystickHandler_API12(); + } else { + mJoystickHandler = new SDLJoystickHandler(); + } + + // XXX: Limbo no need + // mLayout = new AbsoluteLayout(this); + // mLayout.addView(mSurface); + + // setContentView(mLayout); + + // Get filename from "Open with" of another application + Intent intent = getIntent(); + + if (intent != null && intent.getData() != null) { + String filename = intent.getData().getPath(); + if (filename != null) { + Log.v(TAG, "Got filename: " + filename); + SDLActivity.onNativeDropFile(filename); + } + } + } + + // Events + @Override + protected void onPause() { + Log.v(TAG, "onPause()"); + super.onPause(); + + if (SDLActivity.mBrokenLibraries) { + return; + } + SDLActivity.handlePause(); + } + + @Override + protected void onResume() { + Log.v(TAG, "onResume()"); + super.onResume(); + + if (SDLActivity.mBrokenLibraries) { + return; + } + + SDLActivity.handleResume(); + } + + @Override + public void onWindowFocusChanged(boolean hasFocus) { + super.onWindowFocusChanged(hasFocus); + Log.v(TAG, "onWindowFocusChanged(): " + hasFocus); + + if (SDLActivity.mBrokenLibraries) { + return; + } + + SDLActivity.mHasFocus = hasFocus; + if (hasFocus) { + SDLActivity.handleResume(); + } + } + + @Override + public void onLowMemory() { + Log.v(TAG, "onLowMemory()"); + super.onLowMemory(); + + if (SDLActivity.mBrokenLibraries) { + return; + } + + SDLActivity.nativeLowMemory(); + } + + @Override + protected void onDestroy() { + Log.v(TAG, "onDestroy()"); + + if (SDLActivity.mBrokenLibraries) { + super.onDestroy(); + // Reset everything in case the user re opens the app + SDLActivity.initialize(); + return; + } + + // Send a quit message to the application + SDLActivity.mExitCalledFromJava = true; + SDLActivity.nativeQuit(); + + // Now wait for the SDL thread to quit + if (SDLActivity.mSDLThread != null) { + try { + SDLActivity.mSDLThread.join(); + } catch (Exception e) { + Log.v(TAG, "Problem stopping thread: " + e); + } + SDLActivity.mSDLThread = null; + + // Log.v(TAG, "Finished waiting for SDL thread"); + } + + super.onDestroy(); + // Reset everything in case the user re opens the app + SDLActivity.initialize(); + } + + @Override + public boolean dispatchKeyEvent(KeyEvent event) { + + if (SDLActivity.mBrokenLibraries) { + return false; + } + + int keyCode = event.getKeyCode(); + // Ignore certain special keys so they're handled by Android + if ( + // keyCode == KeyEvent.KEYCODE_VOLUME_DOWN || keyCode == + // KeyEvent.KEYCODE_VOLUME_UP|| + keyCode == KeyEvent.KEYCODE_CAMERA || keyCode == 168 + || /* API 11: KeyEvent.KEYCODE_ZOOM_IN */ + keyCode == 169 /* API 11: KeyEvent.KEYCODE_ZOOM_OUT */ + ) { + return false; + } else if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) { + this.onBackPressed(); + } + return super.dispatchKeyEvent(event); + } + + /** + * Called by onPause or surfaceDestroyed. Even if surfaceDestroyed is the + * first to be called, mIsSurfaceReady should still be set to 'true' during + * the call to onPause (in a usual scenario). + */ + public static void handlePause() { + if (!SDLActivity.mIsPaused && SDLActivity.mIsSurfaceReady) { + SDLActivity.mIsPaused = true; + SDLActivity.nativePause(); + mSurface.handlePause(); + } + } + + /** + * Called by onResume or surfaceCreated. An actual resume should be done + * only when the surface is ready. Note: Some Android variants may send + * multiple surfaceChanged events, so we don't need to resume every time we + * get one of those events, only if it comes after surfaceDestroyed + */ + public static void handleResume() { + Log.v(TAG, "HandleResume"); + if (SDLActivity.mIsPaused && SDLActivity.mIsSurfaceReady && SDLActivity.mHasFocus) { + SDLActivity.mIsPaused = false; + SDLActivity.nativeResume(); + mSurface.handleResume(); + } + } + + /* The native thread has finished */ + public static void handleNativeExit() { + SDLActivity.mSDLThread = null; + mSingleton.finish(); + } + + // Messages from the SDLMain thread + static final int COMMAND_CHANGE_TITLE = 1; + static final int COMMAND_UNUSED = 2; + static final int COMMAND_TEXTEDIT_HIDE = 3; + static final int COMMAND_SET_KEEP_SCREEN_ON = 5; + + protected static final int COMMAND_USER = 0x8000; + + /** + * This method is called by SDL if SDL did not handle a message itself. This + * happens if a received message contains an unsupported command. Method can + * be overwritten to handle Messages in a different class. + * + * @param command + * the command of the message. + * @param param + * the parameter of the message. May be null. + * @return if the message was handled in overridden method. + */ + protected boolean onUnhandledMessage(int command, Object param) { + return false; + } + + /** + * A Handler class for Messages from native SDL applications. It uses + * current Activities as target (e.g. for the title). static to prevent + * implicit references to enclosing object. + */ + protected static class SDLCommandHandler extends Handler { + @Override + public void handleMessage(Message msg) { + Context context = getContext(); + if (context == null) { + Log.e(TAG, "error handling message, getContext() returned null"); + return; + } + switch (msg.arg1) { + case COMMAND_CHANGE_TITLE: + if (context instanceof Activity) { + ((Activity) context).setTitle((String) msg.obj); + } else { + Log.e(TAG, "error handling message, getContext() returned no Activity"); + } + break; + case COMMAND_TEXTEDIT_HIDE: + if (mTextEdit != null) { + mTextEdit.setVisibility(View.GONE); + + InputMethodManager imm = (InputMethodManager) context + .getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(mTextEdit.getWindowToken(), 0); + } + break; + case COMMAND_SET_KEEP_SCREEN_ON: { + Window window = ((Activity) context).getWindow(); + if (window != null) { + if ((msg.obj instanceof Integer) && (((Integer) msg.obj).intValue() != 0)) { + window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + } else { + window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + } + } + break; + } + default: + if ((context instanceof SDLActivity) + && !((SDLActivity) context).onUnhandledMessage(msg.arg1, msg.obj)) { + Log.e(TAG, "error handling message, command is " + msg.arg1); + } + } + } + } + + // Handler for the messages + protected Handler commandHandler = new SDLCommandHandler(); + + protected int maxVolume; + + // Send a message from the SDLMain thread + protected boolean sendCommand(int command, Object data) { + Message msg = commandHandler.obtainMessage(); + msg.arg1 = command; + msg.obj = data; + return commandHandler.sendMessage(msg); + } + + // C functions we call + public static native int nativeInit(Object arguments); + + public static native void nativeLowMemory(); + + public static native void nativeQuit(); + + public static native void nativePause(); + + public static native void nativeResume(); + + public static native void onNativeDropFile(String filename); + + public static native void onNativeResize(int x, int y, int format, float rate); + + public static native int onNativePadDown(int device_id, int keycode); + + public static native int onNativePadUp(int device_id, int keycode); + + public static native void onNativeJoy(int device_id, int axis, float value); + + public static native void onNativeHat(int device_id, int hat_id, int x, int y); + + public static native void onNativeKeyDown(int keycode); + + public static native void onNativeKeyUp(int keycode); + + public static native void onNativeKeyboardFocusLost(); + + public static native void onNativeMouse(int button, int action, float x, float y); + + public static native void onNativeTouch(int touchDevId, int pointerFingerId, int action, float x, float y, float p); + + public static native void onNativeAccel(float x, float y, float z); + + public static native void onNativeSurfaceChanged(); + + public static native void onNativeSurfaceDestroyed(); + + public static native int nativeAddJoystick(int device_id, String name, int is_accelerometer, int nbuttons, + int naxes, int nhats, int nballs); + + public static native int nativeRemoveJoystick(int device_id); + + public static native String nativeGetHint(String name); + + /** + * This method is called by SDL using JNI. + */ + public static boolean setActivityTitle(String title) { + // Called from SDLMain() thread and can't directly affect the view + return mSingleton.sendCommand(COMMAND_CHANGE_TITLE, title); + } + + /** + * This method is called by SDL using JNI. + */ + public static boolean sendMessage(int command, int param) { + return mSingleton.sendCommand(command, Integer.valueOf(param)); + } + + /** + * This method is called by SDL using JNI. + */ + public static Context getContext() { + return mSingleton; + } + + /** + * This method is called by SDL using JNI. + * + * @return result of getSystemService(name) but executed on UI thread. + */ + public Object getSystemServiceFromUiThread(final String name) { + final Object lock = new Object(); + final Object[] results = new Object[2]; // array for writable variables + synchronized (lock) { + runOnUiThread(new Runnable() { + @Override + public void run() { + synchronized (lock) { + results[0] = getSystemService(name); + results[1] = Boolean.TRUE; + lock.notify(); + } + } + }); + if (results[1] == null) { + try { + lock.wait(); + } catch (InterruptedException ex) { + ex.printStackTrace(); + } + } + } + return results[0]; + } + + static class ShowTextInputTask implements Runnable { + /* + * This is used to regulate the pan&scan method to have some offset from + * the bottom edge of the input region and the top edge of an input + * method (soft keyboard) + */ + static final int HEIGHT_PADDING = 15; + + public int x, y, w, h; + + public ShowTextInputTask(int x, int y, int w, int h) { + this.x = x; + this.y = y; + this.w = w; + this.h = h; + } + + @Override + public void run() { + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, + LinearLayout.LayoutParams.WRAP_CONTENT); + + if (mTextEdit == null) { + mTextEdit = new DummyEdit(getContext()); + + mLayout.addView(mTextEdit, params); + } else { + mTextEdit.setLayoutParams(params); + } + + mTextEdit.setVisibility(View.VISIBLE); + mTextEdit.requestFocus(); + + InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE); + imm.showSoftInput(mTextEdit, 0); + } + } + + /** + * This method is called by SDL using JNI. + */ + public static boolean showTextInput(int x, int y, int w, int h) { + // Transfer the task to the main thread as a Runnable + return mSingleton.commandHandler.post(new ShowTextInputTask(x, y, w, h)); + } + + /** + * This method is called by SDL using JNI. + */ + public static Surface getNativeSurface() { + return SDLActivity.mSurface.getNativeSurface(); + } + + // Audio + + /** + * This method is called by SDL using JNI. + */ + public static int audioInit(int sampleRate, boolean is16Bit, boolean isStereo, int desiredFrames) { + int channelConfig = isStereo ? AudioFormat.CHANNEL_OUT_STEREO : AudioFormat.CHANNEL_OUT_MONO; + int audioFormat = is16Bit ? AudioFormat.ENCODING_PCM_16BIT : AudioFormat.ENCODING_PCM_8BIT; + int frameSize = (isStereo ? 2 : 1) * (is16Bit ? 2 : 1); + + Log.v(TAG, "SDL audio: wanted " + (isStereo ? "stereo" : "mono") + " " + (is16Bit ? "16-bit" : "8-bit") + " " + + (sampleRate / 1000f) + "kHz, " + desiredFrames + " frames buffer"); + + // Let the user pick a larger buffer if they really want -- but ye + // gods they probably shouldn't, the minimums are horrifyingly high + // latency already + desiredFrames = Math.max(desiredFrames, + (AudioTrack.getMinBufferSize(sampleRate, channelConfig, audioFormat) + frameSize - 1) / frameSize); + // desiredFrames =2048; + // desiredFrames *= 10; + + if (mAudioTrack == null) { + mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate, channelConfig, audioFormat, + desiredFrames * frameSize, AudioTrack.MODE_STREAM); + + // Instantiating AudioTrack can "succeed" without an exception and + // the track may still be invalid + // Ref: + // https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/media/java/android/media/AudioTrack.java + // Ref: + // http://developer.android.com/reference/android/media/AudioTrack.html#getState() + + if (mAudioTrack.getState() != AudioTrack.STATE_INITIALIZED) { + Log.e(TAG, "Failed during initialization of Audio Track"); + mAudioTrack = null; + return -1; + } + + mAudioTrack.play(); + } + + Log.v(TAG, + "SDL audio: got " + ((mAudioTrack.getChannelCount() >= 2) ? "stereo" : "mono") + " " + + ((mAudioTrack.getAudioFormat() == AudioFormat.ENCODING_PCM_16BIT) ? "16-bit" : "8-bit") + " " + + (mAudioTrack.getSampleRate() / 1000f) + "kHz, " + desiredFrames + " frames buffer"); + + return 0; + } + + public AudioManager am; + + protected void setupVolume() { + if (am == null) { + am = (AudioManager) mSingleton.getSystemService(Context.AUDIO_SERVICE); + maxVolume = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC); + } + } + + public void setVolume(int volume) { + if(am!=null) + am.setStreamVolume(AudioManager.STREAM_MUSIC, volume, 0); + } + + protected int getCurrentVolume() { + int volumeTmp = 0; + if(am!=null) + volumeTmp = am.getStreamVolume(AudioManager.STREAM_MUSIC); + return volumeTmp; + } + + static ArrayList audioShortBuffer = new ArrayList(); + static Object audioLock = new Object(); + + /** + * This method is called by SDL using JNI. + */ + public static void audioWriteShortBuffer(short[] buffer) { + // Log.d(TAG, "audioWriteShortBuffer start: " + buffer.length); + for (int i = 0; i < buffer.length;) { + int result = mAudioTrack.write(buffer, i, buffer.length - i); + // Log.d(TAG, "Wrote to audioWriteShortBuffer: " + result); + if (result > 0) { + i += result; + } else if (result == 0) { + try { + Thread.sleep(1); + } catch (InterruptedException e) { + // Nom nom + // Log.e(TAG, "SDL: Audio Short interrupted: " + e); + } + } else { + // Log.w(TAG, "SDL audio: error return from write(short)"); + return; + } + } + // Log.d(TAG, "audioWriteShortBuffer end"); + } + + /** + * This method is called by SDL using JNI. + */ + public static void audioWriteByteBuffer(byte[] buffer) { + // Log.d(TAG, "audioWriteByteBuffer start: " + buffer.length); + for (int i = 0; i < buffer.length;) { + int result = mAudioTrack.write(buffer, i, buffer.length - i); + if (result > 0) { + i += result; + } else if (result == 0) { + try { + Thread.sleep(1); + } catch (InterruptedException e) { + // Nom nom + // Log.e(TAG, "SDL: Audio Byte interrupted: " + e); + } + } else { + // Log.w(TAG, "SDL audio: error return from write(byte)"); + return; + } + } + // Log.d(TAG, "audioWriteByteBuffer end"); + } + + /** + * This method is called by SDL using JNI. + */ + public static void audioQuit() { + Log.d(TAG, "audioQuit start"); + if (mAudioTrack != null) { + mAudioTrack.stop(); + mAudioTrack = null; + } + Log.d(TAG, "audioQuit end"); + } + + // Input + + /** + * This method is called by SDL using JNI. + * + * @return an array which may be empty but is never null. + */ + public static int[] inputGetInputDeviceIds(int sources) { + int[] ids = InputDevice.getDeviceIds(); + int[] filtered = new int[ids.length]; + int used = 0; + for (int i = 0; i < ids.length; ++i) { + InputDevice device = InputDevice.getDevice(ids[i]); + if ((device != null) && ((device.getSources() & sources) != 0)) { + filtered[used++] = device.getId(); + } + } + return Arrays.copyOf(filtered, used); + } + + // Joystick glue code, just a series of stubs that redirect to the + // SDLJoystickHandler instance + public static boolean handleJoystickMotionEvent(MotionEvent event) { + return mJoystickHandler.handleMotionEvent(event); + } + + /** + * This method is called by SDL using JNI. + */ + public static void pollInputDevices() { + if (SDLActivity.mSDLThread != null) { + mJoystickHandler.pollInputDevices(); + } + } + + // APK expansion files support + + /** com.android.vending.expansion.zipfile.ZipResourceFile object or null. */ + private Object expansionFile; + + /** + * com.android.vending.expansion.zipfile.ZipResourceFile's getInputStream() + * or null. + */ + private Method expansionFileMethod; + + /** + * This method was called by SDL using JNI. + * + * @deprecated because of an incorrect name + */ + @Deprecated + public InputStream openAPKExtensionInputStream(String fileName) throws IOException { + return openAPKExpansionInputStream(fileName); + } + + /** + * This method is called by SDL using JNI. + * + * @return an InputStream on success or null if no expansion file was used. + * @throws IOException + * on errors. Message is set for the SDL error message. + */ + public InputStream openAPKExpansionInputStream(String fileName) throws IOException { + // Get a ZipResourceFile representing a merger of both the main and + // patch files + if (expansionFile == null) { + String mainHint = nativeGetHint("SDL_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION"); + if (mainHint == null) { + return null; // no expansion use if no main version was set + } + String patchHint = nativeGetHint("SDL_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION"); + if (patchHint == null) { + return null; // no expansion use if no patch version was set + } + + Integer mainVersion; + Integer patchVersion; + try { + mainVersion = Integer.valueOf(mainHint); + patchVersion = Integer.valueOf(patchHint); + } catch (NumberFormatException ex) { + ex.printStackTrace(); + throw new IOException("No valid file versions set for APK expansion files", ex); + } + + try { + // To avoid direct dependency on Google APK expansion library + // that is + // not a part of Android SDK we access it using reflection + expansionFile = Class.forName("com.android.vending.expansion.zipfile.APKExpansionSupport") + .getMethod("getAPKExpansionZipFile", Context.class, int.class, int.class) + .invoke(null, this, mainVersion, patchVersion); + + expansionFileMethod = expansionFile.getClass().getMethod("getInputStream", String.class); + } catch (Exception ex) { + ex.printStackTrace(); + expansionFile = null; + expansionFileMethod = null; + throw new IOException("Could not access APK expansion support library", ex); + } + } + + // Get an input stream for a known file inside the expansion file ZIPs + InputStream fileStream; + try { + fileStream = (InputStream) expansionFileMethod.invoke(expansionFile, fileName); + } catch (Exception ex) { + // calling "getInputStream" failed + ex.printStackTrace(); + throw new IOException("Could not open stream from APK expansion file", ex); + } + + if (fileStream == null) { + // calling "getInputStream" was successful but null was returned + throw new IOException("Could not find path in APK expansion file"); + } + + return fileStream; + } + + // Messagebox + + /** + * Result of current messagebox. Also used for blocking the calling thread. + */ + protected final int[] messageboxSelection = new int[1]; + + /** Id of current dialog. */ + protected int dialogs = 0; + + /** + * This method is called by SDL using JNI. Shows the messagebox from UI + * thread and block calling thread. buttonFlags, buttonIds and buttonTexts + * must have same length. + * + * @param buttonFlags + * array containing flags for every button. + * @param buttonIds + * array containing id for every button. + * @param buttonTexts + * array containing text for every button. + * @param colors + * null for default or array of length 5 containing colors. + * @return button id or -1. + */ + public int messageboxShowMessageBox(final int flags, final String title, final String message, + final int[] buttonFlags, final int[] buttonIds, final String[] buttonTexts, final int[] colors) { + + messageboxSelection[0] = -1; + + // sanity checks + + if ((buttonFlags.length != buttonIds.length) && (buttonIds.length != buttonTexts.length)) { + return -1; // implementation broken + } + + // collect arguments for Dialog + + final Bundle args = new Bundle(); + args.putInt("flags", flags); + args.putString("title", title); + args.putString("message", message); + args.putIntArray("buttonFlags", buttonFlags); + args.putIntArray("buttonIds", buttonIds); + args.putStringArray("buttonTexts", buttonTexts); + args.putIntArray("colors", colors); + + // trigger Dialog creation on UI thread + + runOnUiThread(new Runnable() { + @Override + public void run() { + showDialog(dialogs++, args); + } + }); + + // block the calling thread + + synchronized (messageboxSelection) { + try { + messageboxSelection.wait(); + } catch (InterruptedException ex) { + ex.printStackTrace(); + return -1; + } + } + + // return selected value + + return messageboxSelection[0]; + } + + @Override + protected Dialog onCreateDialog(int ignore, Bundle args) { + + // TODO set values from "flags" to messagebox dialog + + // get colors + + int[] colors = args.getIntArray("colors"); + int backgroundColor; + int textColor; + int buttonBorderColor; + int buttonBackgroundColor; + int buttonSelectedColor; + if (colors != null) { + int i = -1; + backgroundColor = colors[++i]; + textColor = colors[++i]; + buttonBorderColor = colors[++i]; + buttonBackgroundColor = colors[++i]; + buttonSelectedColor = colors[++i]; + } else { + backgroundColor = Color.TRANSPARENT; + textColor = Color.TRANSPARENT; + buttonBorderColor = Color.TRANSPARENT; + buttonBackgroundColor = Color.TRANSPARENT; + buttonSelectedColor = Color.TRANSPARENT; + } + + // create dialog with title and a listener to wake up calling thread + + final Dialog dialog = new Dialog(this); + dialog.setTitle(args.getString("title")); + dialog.setCancelable(false); + dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { + @Override + public void onDismiss(DialogInterface unused) { + synchronized (messageboxSelection) { + messageboxSelection.notify(); + } + } + }); + + // create text + + TextView message = new TextView(this); + message.setGravity(Gravity.CENTER); + message.setText(args.getString("message")); + if (textColor != Color.TRANSPARENT) { + message.setTextColor(textColor); + } + + // create buttons + + int[] buttonFlags = args.getIntArray("buttonFlags"); + int[] buttonIds = args.getIntArray("buttonIds"); + String[] buttonTexts = args.getStringArray("buttonTexts"); + + final SparseArray